diff --git a/.gitignore b/.gitignore index 868a1da7..c66e12fd 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,11 @@ app.json build data dist +jszip-esm.js logs mod node_modules package-lock.json three.js tmp -pack \ No newline at end of file +pack diff --git a/app.js b/app.js index b0aa84c5..4c27cc73 100644 --- a/app.js +++ b/app.js @@ -341,7 +341,7 @@ const redirList = [ function handleVersion(req, res, next) { let vstr = oversion || dversion || version; - if (!req.app.ispre && !redirList.indexOf(req.app.path) >= 0 && req.url.indexOf(vstr) < 0) { + if (!req.app.ispre && redirList.indexOf(req.app.path) === 0 && req.url.indexOf(vstr) < 0) { if (req.url.indexOf("?") > 0) { return http.redirect(res, `${req.url},ver:${vstr}`); } else { diff --git a/bin/webpack-jszip-bundle.js b/bin/webpack-jszip-bundle.js new file mode 100644 index 00000000..9552f32f --- /dev/null +++ b/bin/webpack-jszip-bundle.js @@ -0,0 +1,7 @@ +import * as JSZip from "../node_modules/jszip/dist/jszip.js"; + +export default JSZip; + +export { + JSZip +}; diff --git a/bin/webpack-jszip-esm.js b/bin/webpack-jszip-esm.js new file mode 100644 index 00000000..eb3c3616 --- /dev/null +++ b/bin/webpack-jszip-esm.js @@ -0,0 +1,38 @@ +const path = require('path'); + +module.exports = { + mode: 'production', + entry: path.resolve(__dirname, './webpack-jszip-bundle.js'), + output: { + path: path.resolve(__dirname, '../src/ext'), + filename: 'jszip-esm.js', + library: { + type: 'module' + }, + module: true + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: ['.mjs', '.js'], + }, + module: { + rules: [ + { + test: /\.m?js$/, + resolve: { + fullySpecified: false, + }, + }, + ], + }, + optimization: { + minimize: false + }, + performance: { + hints: false, + maxAssetSize: 2 * 1024 * 1024, + maxEntrypointSize: 2 * 1024 * 1024, + }, +}; diff --git a/package.json b/package.json index ac9f6edf..8afafa40 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,11 @@ "earcut": "^3.0.1", "express-useragent": "^1.0.13", "fast-glob": "^3.3.3", + "i": "^0.3.7", "jszip": "^3.7.1", "manifold-3d": "^3.1.1", "moment": "^2.29.4", + "npm": "^11.4.2", "prettier": "^3.5.3", "react-responsive-carousel": "^3.2.23", "serve-static": "^1.14.1", @@ -79,7 +81,7 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm i && npm run clean && npm run dev -- --dryrun && npm run webpack3", + "setup": "npm i && npm run clean && npm run dev -- --dryrun && npm run webpack-ext", "build": "npm run prebuild && electron-builder", "build-nopublish": "npm run prebuild && electron-builder --publish never", "build-debug": "npm run prebuild && DEBUG=electron-builder electron-builder", @@ -94,8 +96,8 @@ "docs-build": "docusaurus build --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", - "dev": "npm run webpack3 && gs-app-server --debug --single", - "prod": "npm run webpack prod && gs-app-server", + "dev": "npm run webpack-ext && gs-app-server --debug --single", + "prod": "npm run webpack-ext && npm run webpack-src prod && gs-app-server", "prod-dryrun": "gs-app-server --dryrun", "start": "npm run prebuild prod && electron .", "start-dev": "npm run prebuild prod && electron . --devel", @@ -103,11 +105,13 @@ "start-ddb": "npm run prebuild && electron . --devel --debugg", "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", - "prebuild": "npm run setup && npm run webpack prod && node bin/electron-pre.js", + "prebuild": "npm run setup && npm run webpack-src prod && node bin/electron-pre.js", "postbuild": "node bin/electron-post.js", "preinstall": "node bin/install-pre.js", - "webpack": "npm run webpack3 && node bin/esbuild.config.mjs", - "webpack3": "npx webpack --config bin/webpack-three-esm.js" + "webpack-ext": "npm run webpack-three && npm run webpack-zip", + "webpack-src": "node bin/esbuild.config.mjs", + "webpack-three": "npx webpack --config bin/webpack-three-esm.js", + "webpack-zip": "npx webpack --config bin/webpack-three-esm.js" }, "main": "app-el.js", "build": { diff --git a/src/ext/jszip.esm.js b/src/ext/jszip.esm.js deleted file mode 100644 index 298be08f..00000000 --- a/src/ext/jszip.esm.js +++ /dev/null @@ -1,7 +0,0 @@ -/** Copyright Stewart Allen -- All Rights Reserved */ - -//import original library -import * as JSZip from "./jszip.js"; - -//export object attached to the window object -export default JSZip; diff --git a/src/kiri/core/init.js b/src/kiri/core/init.js index 7b289ad1..6757f3d5 100644 --- a/src/kiri/core/init.js +++ b/src/kiri/core/init.js @@ -1872,7 +1872,7 @@ function init_lang() { } export function run() { - init_lang(); client.start(); + init_lang(); return api; } diff --git a/src/kiri/core/settings.js b/src/kiri/core/settings.js index 65c36834..1831126e 100644 --- a/src/kiri/core/settings.js +++ b/src/kiri/core/settings.js @@ -9,7 +9,7 @@ import { space } from '../../moto/space.js'; import { local } from '../../data/local.js'; import { utils } from './utils.js'; import { version } from '../../moto/license.js'; -import JSZip from '../../ext/jszip.esm.js'; +import { JSZip } from '../../ext/jszip-esm.js'; const { areEqual, ls2o, js2o } = utils; const { COLOR } = consts; @@ -660,7 +660,7 @@ function settingsImportUrl(url, ask) { function settingsImportZip(data, ask) { let alert = api.show.alert("Importing Workspace"); - JSZip.loadAsync(data).then(zip => { + new JSZip().loadAsync(data).then(zip => { for (let [key,value] of Object.entries(zip.files)) { if (key === "workspace.json") { value.async("string").then(json => { diff --git a/src/kiri/run/worker.js b/src/kiri/run/worker.js index aa7a14e0..afccb19e 100644 --- a/src/kiri/run/worker.js +++ b/src/kiri/run/worker.js @@ -3,7 +3,6 @@ import '../../add/array.js'; import '../../add/class.js'; import '../../add/three.js'; -import '../../ext/jszip.js'; import { base } from '../../geo/base.js'; import { codec } from '../core/codec.js'; @@ -17,6 +16,7 @@ import { wasm_ctrl } from '../../geo/wasm.js'; import { version } from '../../moto/license.js'; import { Widget, newWidget } from '../core/widget.js'; import { load } from "../../load/png.js"; +import { JSZip } from '../../ext/jszip-esm.js'; import { CAM } from '../mode/cam/driver-be.js'; import { DRAG } from '../mode/drag/driver.js'; diff --git a/src/load/3mf.js b/src/load/3mf.js index 49d676d0..bf392988 100644 --- a/src/load/3mf.js +++ b/src/load/3mf.js @@ -3,7 +3,7 @@ 'use strict'; import { THREE } from '../ext/three.js'; -import JSZip from '../ext/jszip.esm.js'; +import { JSZip } from '../ext/jszip-esm.js'; let { BufferAttribute, Matrix4 } = THREE; @@ -218,7 +218,7 @@ function extractItems(records) { */ export function parseAsync(data) { return new Promise(async (resolve, reject) => { - let zip = await JSZip.loadAsync(data); + let zip = await new JSZip().loadAsync(data); let models = {}; for (let [key, value] of Object.entries(zip.files)) { if (key.endsWith(".model")) {