Compare commits

..

No commits in common. "2fb345a17710d60a77dec508ad64ac7410c94072" and "5d731d066f64a384b6a6805b945c35d2a337904c" have entirely different histories.

8 changed files with 818 additions and 926 deletions

View File

@ -22,9 +22,9 @@
"@emotion/react": "^11.11.1", "@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0", "@emotion/styled": "^11.11.0",
"@jixun/libparakeet": "0.2.1", "@jixun/libparakeet": "0.2.1",
"@reduxjs/toolkit": "^1.9.7", "@reduxjs/toolkit": "^1.9.5",
"framer-motion": "^10.16.4", "framer-motion": "^10.16.4",
"immer": "^10.0.3", "immer": "^10.0.2",
"nanoid": "^5.0.1", "nanoid": "^5.0.1",
"radash": "^11.0.0", "radash": "^11.0.0",
"react": "^18.2.0", "react": "^18.2.0",
@ -32,27 +32,27 @@
"react-dropzone": "^14.2.3", "react-dropzone": "^14.2.3",
"react-icons": "^4.11.0", "react-icons": "^4.11.0",
"react-promise-suspense": "^0.3.4", "react-promise-suspense": "^0.3.4",
"react-redux": "^8.1.3", "react-redux": "^8.1.2",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
"sass": "^1.69.2", "sass": "^1.67.0",
"sql.js": "^1.8.0" "sql.js": "^1.8.0"
}, },
"devDependencies": { "devDependencies": {
"@rollup/plugin-replace": "^5.0.3", "@rollup/plugin-replace": "^5.0.2",
"@testing-library/jest-dom": "^6.1.3", "@testing-library/jest-dom": "^6.1.3",
"@testing-library/react": "^14.0.0", "@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.5.1", "@testing-library/user-event": "^14.5.1",
"@types/node": "^20.8.4", "@types/node": "^20.6.2",
"@types/react": "^18.2.28", "@types/react": "^18.2.21",
"@types/react-dom": "^18.2.13", "@types/react-dom": "^18.2.7",
"@types/react-syntax-highlighter": "^15.5.8", "@types/react-syntax-highlighter": "^15.5.7",
"@types/sql.js": "^1.4.5", "@types/sql.js": "^1.4.4",
"@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/eslint-plugin": "^6.7.0",
"@typescript-eslint/parser": "^6.7.5", "@typescript-eslint/parser": "^6.7.0",
"@vitejs/plugin-react": "^4.1.0", "@vitejs/plugin-react": "^4.0.4",
"@vitest/coverage-v8": "^0.34.6", "@vitest/coverage-v8": "^0.34.4",
"@vitest/ui": "^0.34.6", "@vitest/ui": "^0.34.4",
"eslint": "^8.51.0", "eslint": "^8.49.0",
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3", "eslint-plugin-react-refresh": "^0.4.3",
@ -61,11 +61,11 @@
"lint-staged": "^14.0.1", "lint-staged": "^14.0.1",
"prettier": "^3.0.3", "prettier": "^3.0.3",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^4.4.11", "vite": "^4.4.9",
"vite-plugin-pwa": "^0.16.5", "vite-plugin-pwa": "^0.16.5",
"vite-plugin-top-level-await": "^1.3.1", "vite-plugin-top-level-await": "^1.3.1",
"vite-plugin-wasm": "^3.2.2", "vite-plugin-wasm": "^3.2.2",
"vitest": "^0.34.6" "vitest": "^0.34.4"
}, },
"lint-staged": { "lint-staged": {
"*": "prettier --write --ignore-unknown", "*": "prettier --write --ignore-unknown",
@ -78,7 +78,6 @@
}, },
"pnpm": { "pnpm": {
"patchedDependencies": { "patchedDependencies": {
"@rollup/plugin-terser@0.4.3": "patches/@rollup__plugin-terser@0.4.3.patch",
"sql.js@1.8.0": "patches/sql.js@1.8.0.patch" "sql.js@1.8.0": "patches/sql.js@1.8.0.patch"
}, },
"overrides": { "overrides": {

View File

@ -1,22 +0,0 @@
diff --git a/dist/cjs/index.js b/dist/cjs/index.js
index 23639c70ccd5ebbc4a12c1ba277e5ac81cf30513..aba3318977523785d02f3b8aa6e667a1aa46bf5d 100644
--- a/dist/cjs/index.js
+++ b/dist/cjs/index.js
@@ -227,5 +227,5 @@ function terser(input = {}) {
runWorker();
exports.default = terser;
-module.exports = Object.assign(exports.default, exports);
+module.exports = Object.assign(exports.default, exports, { terser });
//# sourceMappingURL=index.js.map
diff --git a/dist/es/index.js b/dist/es/index.js
index 7296e677e6b2b38df9522b196fee24feec996793..4ca9052dd439ed22ff92cc72a79824b85e229678 100644
--- a/dist/es/index.js
+++ b/dist/es/index.js
@@ -222,5 +222,5 @@ function terser(input = {}) {
runWorker();
-export { terser as default };
+export { terser as default, terser };
//# sourceMappingURL=index.js.map

File diff suppressed because it is too large Load Diff

View File

@ -69,21 +69,18 @@ export class MMKVParser {
return bytesToUTF8String(data).normalize(); return bytesToUTF8String(data).normalize();
} }
public readOptionalString() { public readVariantString() {
// Container [ // Container [
// len: int, // len: int,
// data: variant // data: variant
// ] // ]
const containerLen = this.readInt(); const containerLen = this.readInt();
if (containerLen === 0) {
return null;
}
const newOffset = this.offset + containerLen; const newOffset = this.offset + containerLen;
const result = this.readString(); const result = this.readString();
if (newOffset !== this.offset) { if (newOffset !== this.offset) {
const expected = formatHex(newOffset); const expected = formatHex(newOffset);
const actual = formatHex(this.offset); const actual = formatHex(this.offset);
throw new Error(`readVariantString failed: offset mismatch (expect: ${expected}, actual: ${actual})`); throw new Error(`readVariantString failed: offset does mismatch (expect: ${expected}, actual: ${actual})`);
} }
return result; return result;
} }
@ -102,15 +99,13 @@ export class MMKVParser {
const result = new Map<string, string>(); const result = new Map<string, string>();
while (!mmkv.eof) { while (!mmkv.eof) {
const key = mmkv.readString(); const key = mmkv.readString();
const value = mmkv.readOptionalString(); const value = mmkv.readVariantString();
if (value) {
result.set(key, value); result.set(key, value);
} }
}
return result; return result;
} }
public static parseKuwoEKey(view: DataView): Omit<StagingKWMv2Key, 'id'>[] { public static parseKuwoEKey(view: DataView) {
const mmkv = new MMKVParser(view); const mmkv = new MMKVParser(view);
const result: Omit<StagingKWMv2Key, 'id'>[] = []; const result: Omit<StagingKWMv2Key, 'id'>[] = [];
while (!mmkv.eof) { while (!mmkv.eof) {
@ -122,11 +117,9 @@ export class MMKVParser {
} }
const [_, rid, quality] = idMatch; const [_, rid, quality] = idMatch;
const ekey = mmkv.readOptionalString(); const ekey = mmkv.readVariantString();
if (ekey) {
result.push({ rid, quality, ekey }); result.push({ rid, quality, ekey });
} }
}
return result; return result;
} }
} }

View File

@ -1,46 +1,19 @@
import { MMKVParser } from '../MMKVParser'; import { MMKVParser } from '../MMKVParser';
import { readFileSync } from 'node:fs'; import { readFileSync } from 'node:fs';
const makeViewFromBuffer = (buff: Buffer) => test('parse mmkv file as expected', () => {
new DataView(buff.buffer.slice(buff.byteOffset, buff.byteOffset + buff.byteLength)); const buff = readFileSync(__dirname + '/__fixture__/test.mmkv');
const view = new DataView(buff.buffer.slice(buff.byteOffset, buff.byteOffset + buff.byteLength));
test('parse qm mmkv file', () => { expect(MMKVParser.toStringMap(view)).toEqual(
const view = makeViewFromBuffer(readFileSync(__dirname + '/__fixture__/qm.mmkv')); new Map([
expect(Object.fromEntries(MMKVParser.toStringMap(view).entries())).toMatchInlineSnapshot(` ['key', 'value'],
{
"Lorem Ipsum": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum congue volutpat metus non molestie. Quisque id est sapien. Fusce eget tristique sem. Donec tellus lacus, viverra sed lectus eget, elementum ultrices dolor. Integer non urna justo.",
"key": "value",
}
`);
});
test('parse qm mmkv file with optional str', () => {
const view = makeViewFromBuffer(readFileSync(__dirname + '/__fixture__/qm_optional.mmkv'));
expect(Object.fromEntries(MMKVParser.toStringMap(view).entries())).toMatchInlineSnapshot(`
{
"key": "value",
"key2": "value2",
}
`);
});
test('parse kuwo mmkv file', () => {
const view = makeViewFromBuffer(readFileSync(__dirname + '/__fixture__/kuwo.mmkv'));
expect(MMKVParser.parseKuwoEKey(view)).toMatchInlineSnapshot(`
[ [
{ 'Lorem Ipsum',
"ekey": "xyz123", 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' +
"quality": "20201kmflac", 'Vestibulum congue volutpat metus non molestie. Quisque id est sapien. ' +
"rid": "1234567", 'Fusce eget tristique sem. Donec tellus lacus, viverra sed lectus eget, elementum ultrices dolor. ' +
}, 'Integer non urna justo.',
] ],
`); ])
});
test('throw error on broken file', () => {
const view = makeViewFromBuffer(
Buffer.from([0x27, 0x00, 0x00, 0x00, 0x7f, 0x03, 0x6b, 0x65, 0x79, 0x06, 0x07, 0x62, 0x61, 0x64, 0xff, 0xff]),
); );
expect(() => Object.fromEntries(MMKVParser.toStringMap(view).entries())).toThrow(/offset mismatch/i);
}); });