diff --git a/package-lock.json b/package-lock.json index 7d8e9fc..1dcb070 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@types/wavesurfer.js": "^3.3.2", "@typescript-eslint/eslint-plugin": "^2.34.0", "@typescript-eslint/parser": "^2.34.0", - "@zenfs/core": "^0.9.7", - "@zenfs/dom": "^0.2.6", + "@zenfs/core": "^1.0.0", + "@zenfs/dom": "^1.0.0", "babel-loader": "^9.1.0", "bootstrap": "^4.6.0", "clean-webpack-plugin": "^4.0.0", @@ -2255,12 +2255,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", - "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "version": "20.17.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.3.tgz", + "integrity": "sha512-tSQrmKKatLDGnG92h40GD7FzUt0MjahaHwOME4VAFeeA/Xopayq5qLyQRy7Jg/pjgKIFBXuKcGhJo+UdYG55jQ==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/qrcode": { @@ -2309,6 +2310,14 @@ "integrity": "sha512-bujQxJR+2TDXe5hc2kG36n38rJtdTbCafQddWaNJwgdNDVqMVxCCKAFYRQWq1aXnN/h9BTHLIVwi4gM8IwRt5A==", "dev": true }, + "node_modules/@types/wicg-file-system-access": { + "version": "2020.9.8", + "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2020.9.8.tgz", + "integrity": "sha512-ggMz8nOygG7d/stpH40WVaNvBwuyYLnrg5Mbyf6bmsj/8+gb6Ei4ZZ9/4PNpcPNTT8th9Q8sM8wYmWGjMWLX/A==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "2.34.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", @@ -2615,6 +2624,14 @@ } } }, + "node_modules/@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -2628,36 +2645,51 @@ "dev": true }, "node_modules/@zenfs/core": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/@zenfs/core/-/core-0.9.7.tgz", - "integrity": "sha512-Lmwt1DPhJy07Qx4m4JrzyB8LNBbe5SMq5Z+ZpLjJRfMcSHkoy64l+t8njADVKl0mns91tzo2hEcHNfKG/5Pxog==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@zenfs/core/-/core-1.2.1.tgz", + "integrity": "sha512-gtjU1UXXK4nxEAafbaf43l/Ho3St+NVNpNShIyYMAbkWhD+piHwnBHo550b5gFD36m8RjmFzSqQw0VDGGd1cdg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^20.12.5", + "@types/node": "^20.16.10", "@types/readable-stream": "^4.0.10", "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", "minimatch": "^9.0.3", "readable-stream": "^4.5.2", - "utilium": "^0.2.1" + "utilium": "^1.0.0" }, "bin": { - "build": "scripts/build.js", - "make-index": "scripts/make-index.js" + "make-index": "scripts/make-index.js", + "zenfs-test": "scripts/test.js" }, "engines": { - "node": ">= 18" + "node": ">= 16" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" } }, "node_modules/@zenfs/dom": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@zenfs/dom/-/dom-0.2.6.tgz", - "integrity": "sha512-TCo40azeN9b/W8z1TS0DhCUJPW0S8I5ypMOcizJ8aK4NZmC/b+bYAwrdUITHRZOatgHEncIxeK3gxXC9SaD68Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@zenfs/dom/-/dom-1.0.2.tgz", + "integrity": "sha512-ozJMf/U7xMw07Dol3LXg+bpCBEyhyr/bW5cbQCZSHIrXpIDZ9Euu3sMM9ydWj4rR6fJjzkpt/IZRUpRVLlfXjQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" + }, + "optionalDependencies": { + "fake-indexeddb": "^6.0.0", + "file-system-access": "^1.0.4" + }, "peerDependencies": { - "@zenfs/core": "^0.9.7" + "@zenfs/core": "^1.2.0" } }, "node_modules/abort-controller": { @@ -4595,6 +4627,13 @@ "node": ">=6" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -4618,6 +4657,17 @@ "node": ">=4" } }, + "node_modules/fake-indexeddb": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.0.0.tgz", + "integrity": "sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=18" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4682,6 +4732,31 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -4747,6 +4822,25 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/file-system-access": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/file-system-access/-/file-system-access-1.0.4.tgz", + "integrity": "sha512-JDlhH+gJfZu/oExmtN4/6VX+q1etlrbJbR5uzoBa4BzfTRQbEXGFuGIBRk3ZcPocko3WdEclZSu+d/SByjG6Rg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/wicg-file-system-access": "^2020.9.2", + "fetch-blob": "^3.0.0", + "node-domexception": "^1.0.0" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "web-streams-polyfill": "^3.1.0" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -6792,6 +6886,27 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -9560,10 +9675,11 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -9691,10 +9807,17 @@ "dev": true }, "node_modules/utilium": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/utilium/-/utilium-0.2.1.tgz", - "integrity": "sha512-uLn55gYhtxFcS2X6rgvd3+aIEx5xVA3GBQgBkyJRdKAHxXXYiyB5P6ZmL/94HIWvgZaVs8xnNRCiiiRUBqyUIA==", - "dev": true + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utilium/-/utilium-1.0.4.tgz", + "integrity": "sha512-EGesAFASk3rUTA60heHpw9aspYzRbKe5+3+QO3bS/MoXdEZr0WbMI8SQ6PgI9aEXEUKiKdWnLv4zbArbAW8ohQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + }, + "optionalDependencies": { + "@xterm/xterm": "^5.5.0" + } }, "node_modules/utils-merge": { "version": "1.0.1", @@ -9746,6 +9869,17 @@ "integrity": "sha512-meko20S9in+V5xBLSVV/9uYVBSbx5AsJNkAslZ+a5yYIeFGYwcCo4Yd1sUpSGaiNnyflzrJwC7x7TdJFYrdT8w==", "dev": true }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", diff --git a/package.json b/package.json index 94acbb2..e747c1a 100644 --- a/package.json +++ b/package.json @@ -47,8 +47,8 @@ "@types/wavesurfer.js": "^3.3.2", "@typescript-eslint/eslint-plugin": "^2.34.0", "@typescript-eslint/parser": "^2.34.0", - "@zenfs/core": "^0.9.7", - "@zenfs/dom": "^0.2.6", + "@zenfs/core": "^1.0.0", + "@zenfs/dom": "^1.0.0", "babel-loader": "^9.1.0", "bootstrap": "^4.6.0", "clean-webpack-plugin": "^4.0.0", diff --git a/src/index.ts b/src/index.ts index 3421e64..648011e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -52,7 +52,7 @@ type FaustEditorEnv = { jQuery: JQueryStatic; faustCompiler: FaustCompiler; recorder: Recorder; - browserFS: typeof import("@zenfs/core").promises; + zenfs: typeof import("@zenfs/core").promises; }; type FaustEditorAudioEnv = { audioCtx?: AudioContext; @@ -108,14 +108,12 @@ $(async () => { const faustPrimitiveLib = await faustPrimitiveLibFile.text(); libFaust.fs().writeFile("/usr/share/faust/primitives.lib", faustPrimitiveLib); - const BrowserFS = await import("@zenfs/core"); + const { configureSingle, promises: zenfs } = await import("@zenfs/core"); const { IndexedDB } = await import("@zenfs/dom"); - await BrowserFS.configure({ + await configureSingle({ backend: IndexedDB, - storeName: "FaustIDE" as any + storeName: "FaustIDE" }); - const bfs = BrowserFS.promises; - const JSZip = (await import("jszip") as any).default as import("jszip"); const WaveSurfer = (await import("wavesurfer.js") as any).default as import("wavesurfer.js"); const QRCode = await import("qrcode"); @@ -186,13 +184,13 @@ $(async () => { const loadProject = async () => { const mfs = libFaust.fs(); mfs.mkdir(PROJECT_DIR); - let files = await bfs.readdir("/"); + let files = await zenfs.readdir("/"); files = files.filter(n => n !== "." && n !== ".."); if (!compileOptions.saveCode) { - await Promise.all(files.map(filename => bfs.unlink(filename))); + await Promise.all(files.map(filename => zenfs.unlink(filename))); } else { await Promise.all(files.map(async (filename) => { - const data = await bfs.readFile(filename); + const data = await zenfs.readFile(filename); mfs.writeFile(PROJECT_DIR + filename, new Uint8Array(data.buffer)); })); } @@ -522,7 +520,7 @@ $(async () => { editor, faustCompiler, recorder: new Recorder(), - browserFS: bfs + zenfs }; safeStorage.setItem("faust_editor_version", VERSION); uiEnv.plotScope = new StaticScope({ container: $("#plot-ui")[0] }); @@ -554,11 +552,11 @@ $(async () => { clearTimeout(saveTimeout); saveTimeout = setTimeout(async () => { try { - const exist = await bfs.exists(fileName); + const exist = await zenfs.exists(fileName); if (exist) { - await bfs.unlink(fileName); + await zenfs.unlink(fileName); } - await bfs.writeFile(fileName, content, typeof content === "string" ? { encoding: "utf8" } : {}); + await zenfs.writeFile(fileName, content, typeof content === "string" ? { encoding: "utf8" } : {}); } catch (e) { showError(e); } @@ -578,7 +576,7 @@ $(async () => { safeStorage.setItem("faust_editor_project", JSON.stringify(project)); */ try { - await bfs.unlink(fileName); + await zenfs.unlink(fileName); } catch (e) { showError(e); }