diff --git a/package-lock.json b/package-lock.json index 31e9f59..d1274d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,14 +6,14 @@ "": { "name": "dovetail", "dependencies": { - "compression-streams-polyfill": "^0.1.3", + "compression-streams-polyfill": "^0.1.4", "nbtify": "^1.35.2" }, "devDependencies": { - "better-typescript": "^0.1.2", - "new-javascript": "^0.3.1", - "typescript": "^5.0.4", - "vite": "^4.3.8" + "better-typescript": "^0.1.3", + "new-javascript": "^0.3.4", + "typescript": "^5.1.3", + "vite": "^4.3.9" } }, "node_modules/@esbuild/android-arm": { @@ -377,20 +377,20 @@ "peer": true }, "node_modules/better-typescript": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/better-typescript/-/better-typescript-0.1.2.tgz", - "integrity": "sha512-8QCnjZB5IXx2q4mP4PslrRFQTeFlQ78stgh905tkAhTPOhVBlQnvNC6V/yb00Nzu3T2oSbOjgLo9yQJtyhkQ6Q==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/better-typescript/-/better-typescript-0.1.3.tgz", + "integrity": "sha512-3LYeAmwkKrLqA7LyyPMQl53HnvVSkSeAQ1TxtHZoMgL2Vb91lvIHLAvBkQQz8k2qv2rpD62AUwlUtbrWj2u6WA==", "dev": true, "dependencies": { - "new-javascript": ">=0.3.1" + "new-javascript": ">=0.3.3" } }, "node_modules/compression-streams-polyfill": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/compression-streams-polyfill/-/compression-streams-polyfill-0.1.3.tgz", - "integrity": "sha512-FOvusJGoWTKRb9JNMtCc42C81SdyJhJws/lbExADOkH1R8KpdzY4yFO6953lW5Vw498pnGXoyosr807KTr8BAA==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/compression-streams-polyfill/-/compression-streams-polyfill-0.1.4.tgz", + "integrity": "sha512-PL9Yz8Nss9QdllwQ/XGRW/MJqaE90ngKLu4Mm42Z45a4qwWuYctgLkJRVqURdrzSWh4R/X68x0k8KGRTYclVhA==", "dependencies": { - "fflate": "^0.7.4" + "fflate": "^0.8.0" } }, "node_modules/esbuild": { @@ -431,9 +431,9 @@ } }, "node_modules/fflate": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", - "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.0.tgz", + "integrity": "sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -473,9 +473,9 @@ "integrity": "sha512-eF4rs2uROOMepPVNxq/IPFAC80pFbZ5SWwhOFSMNNwMvRVHrwlEBF21VCZK9OSxwRI5uKtpl5oCekQvRvyqxPg==" }, "node_modules/new-javascript": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/new-javascript/-/new-javascript-0.3.1.tgz", - "integrity": "sha512-a7xw8ztu02+OllV2+X9GUIzBNcxFrMm7Qgkb8FotXL66qecZSOiiSZxKEVpuqhr6A3KPRpnDRxVhOwi8WBG+5w==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/new-javascript/-/new-javascript-0.3.4.tgz", + "integrity": "sha512-a9Wu9BeZgf+AlbviF+W/UarmtJtICWQqvzUu3lQEPBgDt3VSMxrxEJdsUtpBKsfAKZns/oqYu0qejyLA8cj4Ig==", "dev": true }, "node_modules/picocolors": { @@ -538,22 +538,22 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/vite": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", - "integrity": "sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "dependencies": { "esbuild": "^0.17.5", diff --git a/package.json b/package.json index 6904b9c..8f4b592 100644 --- a/package.json +++ b/package.json @@ -3,18 +3,18 @@ "private": true, "type": "module", "scripts": { - "build": "tsc; vite build --base ./ --target esnext", - "dev": "vite --host --port 5500 --base ./", - "preview": "vite preview --host --port 5500 --base ./" + "build": "tsc; vite build", + "dev": "vite", + "preview": "vite preview" }, "dependencies": { - "compression-streams-polyfill": "^0.1.3", + "compression-streams-polyfill": "^0.1.4", "nbtify": "^1.35.2" }, "devDependencies": { - "better-typescript": "^0.1.2", - "new-javascript": "^0.3.1", - "typescript": "^5.0.4", - "vite": "^4.3.8" + "better-typescript": "^0.1.3", + "new-javascript": "^0.3.4", + "typescript": "^5.1.3", + "vite": "^4.3.9" } } \ No newline at end of file diff --git a/public/service-worker.js b/public/service-worker.js index 345389c..45908d5 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -4,7 +4,7 @@ var self = /** @type { ServiceWorkerGlobalScope } */ (/** @type { unknown } */ (globalThis)); const NAME = "Dovetail"; -const VERSION = "v1.6.1"; +const VERSION = "v1.6.2"; const CACHE_NAME = /** @type { const } */ (`${NAME} ${VERSION}`); self.addEventListener("activate",event => { diff --git a/src/app.ts b/src/app.ts index 1a3e01b..e148f40 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,22 +1,34 @@ import "./compression-polyfill.js"; -import { read, write, parse, stringify, Name, Endian, Compression, BedrockLevel, NBTData, NBTDataOptions, RootTag, Int32, CompressionFormat } from "nbtify"; +import { read, write, parse, stringify, NBTData, Int32 } from "nbtify"; +import type { Name, Endian, Compression, BedrockLevel, NBTDataOptions, RootTag } from "nbtify"; -if (window.isSecureContext){ - await navigator.serviceWorker.register("./service-worker.js"); -} +const platform = navigator.userAgentData?.platform ?? navigator.platform; +const isiOSDevice = /^(Mac|iPhone|iPad|iPod)/i.test(platform) && typeof navigator.standalone === "boolean"; const saver = document.querySelector("#saver")!; const fileOpener = document.querySelector("#fileOpener")!; const formatOpener = document.querySelector("#formatOpener")!; const editor = document.querySelector("#editor")!; const formatDialog = document.querySelector("#formatDialog")!; -const formatForm = document.querySelector("#formatForm")!; +const formatForm = document.querySelector("#formatForm")!; + +export interface FormatOptionsCollection extends HTMLFormControlsCollection { + name: HTMLInputElement; + disableName: HTMLInputElement; + endian: RadioNodeList; + compression: RadioNodeList; + bedrockLevel: HTMLInputElement; +} /** * The name of the currently opened file. */ let name: string; +if (window.isSecureContext){ + await navigator.serviceWorker.register("./service-worker.js"); +} + window.launchQueue?.setConsumer?.(async launchParams => { const { files: handles } = launchParams; if (handles.length === 0) return; @@ -53,11 +65,6 @@ saver.addEventListener("click",async () => { const nbtData = new NBTData(nbt,options); const file = await writeFile(nbtData); - const isiOSDevice = ( - /^(Mac|iPhone|iPad|iPod)/i.test(navigator.userAgentData?.platform ?? navigator.platform) && - typeof navigator.standalone === "boolean" - ); - if (isiOSDevice && window.isSecureContext){ await shareFile(file); } else { @@ -100,19 +107,11 @@ export async function openFile(file: File): Promise { editor.disabled = false; } -export interface FormatOptionsCollection extends HTMLFormControlsCollection { - name: HTMLInputElement; - disableName: HTMLInputElement; - endian: RadioNodeList; - compression: RadioNodeList; - bedrockLevel: HTMLInputElement; -} - /** * Updates the Format Options dialog to match the NBT file's metadata. */ export function openOptions({ name, endian, compression, bedrockLevel }: NBTData): NBTDataOptions { - const elements = formatForm.elements as FormatOptionsCollection; + const { elements } = formatForm; if (name !== null){ elements.name.value = name; @@ -153,7 +152,7 @@ export async function readFile(file: File): Promise