{ "name": "doxa-maps", "version": "0.1.0", "license": "Apache-2.0", "private": true, "description": "A portable bundler that generates embeddable JAMstack maps \u2014 one library, many map bundles that embed on any site, compose into a lazy-loaded SPA, or wrap a Capacitor Android/iOS app.", "type": "module", "scripts": { "dev": "bun x vite", "build": "bash internal/build-lock.sh", "build:watch": "bun x vite build --watch", "preview": "bun x vite preview", "clean": "node internal/clean.mjs", "build:bundle": "bun x vite build", "tree": "node internal/generate-tree.mjs", "gallery": "node internal/generate-gallery.mjs # writes public/index.html, the built plugin gallery (the one root page), from public/doxa-maps/manifest.json", "check:drop": "node internal/drop-portability-check.mjs", "check:parse": "node internal/inline-parse-check.mjs", "verify": "node library/scripts/research/verify-all.mjs", "verify:full": "node library/scripts/research/verify-all.mjs --full", "serve": "python3 -m http.server 4173 --bind 0.0.0.0 --directory public", "serve:shell": "python3 -m http.server 4174 --bind 0.0.0.0 --directory library/layouts/app-wrapper-material", "cap:sync": "./node_modules/.bin/cap sync android # NOT `bunx` — bunx is not on PATH in this environment (command not found, exit 127), which broke cap:sync -> apk:debug -> phone at step one. The CLI IS installed locally (@capacitor/cli 7.6.9); invoke the local bin directly. The rest of package.json already uses the spaced `bun x` form.", "cap:verify": "test -f capacitor/android/app/src/main/assets/public/index.html && echo \"OK webDir copied\" || (echo \"FAIL: empty assets/public -> blank white screen. Check webDir.\" && exit 1)", "apk:debug": "bun run build && bun run cap:sync && bun run cap:verify && cd capacitor/android && ./gradlew assembleDebug", "apk:install": "adb install -r capacitor/android/app/build/outputs/apk/debug/app-debug.apk", "phone": "bun run apk:debug && bun run apk:install", "shell": "node internal/install-shell.mjs --no-token # OPTIONAL, not part of build: overlays a layouts/ wrapper onto public/ for local use (the served root is the generated index.html); --no-token so the local credential is never copied into the served root", "posters": "cd library/scripts/posters && SPARSE=1 OFFLINE=1 VITE_API_BASE_URL=https://pray.doxa.life FORMAT=3x3 node generate.mjs", "posters:one": "cd library/scripts/posters && SPARSE=1 OFFLINE=1 VITE_API_BASE_URL=https://pray.doxa.life FORMAT=3x3 node generate.mjs # ONLY= to build one", "posters:shoot": "cd library/scripts/posters && DSF=2 node shoot.mjs", "posters:gallery": "cd library/scripts/posters && node build-gallery.mjs && node build-hd-gallery.mjs", "posters:export": "cd library/scripts/posters && node export-public.mjs", "posters:previews": "cd library/scripts/posters && python3 make-previews.py", "token": "node internal/write-token.mjs", "smoke": "node internal/smoke.mjs", "smoke:embeds": "node internal/embed-smoke.mjs", "smoke:gallery": "node internal/plugin-gallery-smoke.mjs", "smoke:playground": "bun run smoke:gallery", "smoke:share": "node internal/share-roundtrip-smoke.mjs", "probe:legend-columns": "node internal/legend-columns-probe.mjs", "sync:dropin": "node internal/sync-dropin.mjs", "deploy:dev": "bun run build && node internal/sync-dropin.mjs --from-config --prune # destination + allowlist come from vite.doxa-maps-build-config.json (dropin.dest / dropin.include); DOXA_DROPIN_DEST= overrides the destination", "check:public-hygiene": "node internal/public-hygiene-check.mjs", "build:unlocked": "bun run check:template-literal && bun run clean && bun run token && for d in plugin-designs/*/; do BUNDLE=$(basename \"$d\") bun x vite build || exit 1; done && bun run tree && bun run check:drop && bun run check:parse && bun run verify && bun run check:sri && bun run gallery", "check:template-literal": "node internal/template-literal-check.mjs", "verify:map-paint": "node internal/verify-map-paint.mjs", "check:sri": "node internal/sri-consistency-check.mjs", "check:wp-embed": "php wordpress/tests/wp-embed-contract-test.php", "check:settled": "node internal/settled-tree-gate.mjs", "verify:5-caps": "node internal/verify-5-capabilities.mjs" }, "devDependencies": { "@capacitor/android": "7", "@capacitor/cli": "7", "@capacitor/core": "7", "@vitejs/plugin-vue": "^5.0.4", "playwright": "1.61.1", "terser": "^5.46.0", "vite": "^5.4.21", "vite-plugin-css-injected-by-js": "^3.5.2" }, "dependencies": { "@maplibre/maplibre-gl-geocoder": "^1.7.0", "jspdf": "^4.2.1", "maplibre-gl": "^5.6.0", "pinia": "^2.3.1", "topojson-client": "^3.1.0", "vue": "^3.5.20", "vue-i18n": "^9.14.5", "world-atlas": "^2.0.2" }, "engines": { "node": ">=18.0.0" } }