@svgrid/enterprise 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/svgrid-enterprise.svelte-external.js +5917 -5545
- package/dist/designer/assets/{index-okIcRP9P.js → index-qL7ir9C7.js} +3 -3
- package/dist/designer/assets/{src-CIla2aVG.js → src-96d31O63.js} +259 -228
- package/dist/designer/assets/{src-BvsJ00AO.css → src-D-O2F805.css} +1 -1
- package/dist/designer/index.html +3 -3
- package/dist/node/studio.js +681 -84
- package/package.json +3 -3
- package/src/SvGridEditPanel.dom.test.ts +174 -0
- package/src/SvGridEditPanel.svelte +209 -46
- package/src/edit-panel.test.ts +145 -36
- package/src/edit-panel.ts +167 -16
- package/src/expressions/evaluate.ts +1 -1
- package/src/expressions/parse.ts +3 -3
- package/src/index.ts +8 -0
- package/src/license-core.ts +77 -5
- package/src/license-expiry.test.ts +91 -0
- package/src/license.ts +31 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +178 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +3875 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +21 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +1938 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +205 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +18 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +264 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +697 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +3 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +134 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +55 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +2 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +46843 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +237 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +2 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +4 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +7 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +4 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +5 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +5 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +5 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +6 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +83 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +559 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +24 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +122 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +2 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +89 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +241 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +4938 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +495 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +190 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +8 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +1 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +138 -0
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +1 -0
- package/src/schema.ts +63 -0
- package/src/studio/emit-project.test.ts +191 -0
- package/src/studio/emit-project.ts +237 -27
- package/src/studio/emit-schema.ts +4 -1
- package/src/studio/index.ts +2 -0
- package/src/studio/init-flow.test.ts +150 -0
- package/src/studio/init-flow.ts +169 -22
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +178 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +3875 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +21 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +1938 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +205 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +18 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +264 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +697 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +3 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +134 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +55 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +2 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +46843 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +237 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +2 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +4 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +7 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +4 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +5 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +5 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +5 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +6 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +83 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +559 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +24 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +122 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +2 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +89 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +241 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +4938 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +495 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +190 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +8 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +1 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +138 -0
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +1 -0
- package/src/studio/project.test.ts +30 -0
- package/src/studio/project.ts +72 -8
- package/src/studio/samples/crm.ts +11 -2
- package/src/studio/samples/insurance.ts +10 -4
- package/src/studio/samples/samples.test.ts +36 -0
- package/src/studio/samples/shared.ts +14 -0
- package/src/studio/samples/support.ts +12 -5
- package/src/studio/screen-suites.test.ts +43 -0
- package/src/studio/screen-suites.ts +5 -2
- package/src/studio/user-error.ts +31 -0
- package/src/upgrade-prompt.ts +23 -10
- package/src/version.test.ts +17 -0
- package/src/version.ts +13 -0
package/src/studio/init-flow.ts
CHANGED
|
@@ -22,6 +22,7 @@ import { buildConnectionString, isFileDialect, type SqlConnectionParts } from '.
|
|
|
22
22
|
import { emitStudioAppBundle } from './emit-project.js'
|
|
23
23
|
import { mergeManaged, skipUserOwned } from './scaffold.js'
|
|
24
24
|
import { getStudioTheme, studioThemes } from './themes.js'
|
|
25
|
+
import { UserError } from './user-error.js'
|
|
25
26
|
import { serializeProject, type DataSourceKind, type EntityDataSource, type ProjectTheme, type StudioProject } from './project.js'
|
|
26
27
|
|
|
27
28
|
/** Terminal I/O, injected so the flow can be scripted in tests. */
|
|
@@ -62,6 +63,8 @@ export type InitFlags = {
|
|
|
62
63
|
title?: string
|
|
63
64
|
/** Take every default; ask nothing that has one. */
|
|
64
65
|
yes?: boolean
|
|
66
|
+
/** Write into a folder that already holds another app, without asking. */
|
|
67
|
+
force?: boolean
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
export type InitResult = {
|
|
@@ -83,6 +86,30 @@ type SourceKey = (typeof SOURCES)[number]['key']
|
|
|
83
86
|
|
|
84
87
|
const DIALECTS: SqlDialectName[] = ['postgres', 'supabase', 'mysql', 'mssql', 'sqlite']
|
|
85
88
|
|
|
89
|
+
/** Shown above the connection prompt so the expected shape is never a guess. */
|
|
90
|
+
const CONNECTION_EXAMPLES: Record<string, string> = {
|
|
91
|
+
postgres: 'postgres://user:password@localhost:5432/mydb',
|
|
92
|
+
supabase: 'postgres://postgres:password@db.abcdefgh.supabase.co:5432/postgres',
|
|
93
|
+
mysql: 'mysql://user:password@localhost:3306/mydb',
|
|
94
|
+
mssql: 'Server=localhost,1433;Database=mydb;User Id=sa;Password=secret;Encrypt=false',
|
|
95
|
+
sqlite: './data.db',
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Files that mean the target folder already holds an app. Writing the bundle
|
|
100
|
+
* over one of these replaces it wholesale (they carry no managed markers), so
|
|
101
|
+
* the flow stops and asks first. A `studio.config.json` is the exception: that
|
|
102
|
+
* folder IS a Studio app, and re-running init there is a regenerate.
|
|
103
|
+
*/
|
|
104
|
+
const CLOBBER_MARKERS = [
|
|
105
|
+
'package.json',
|
|
106
|
+
'svelte.config.js',
|
|
107
|
+
'svelte.config.ts',
|
|
108
|
+
'vite.config.ts',
|
|
109
|
+
'src/routes/+layout.svelte',
|
|
110
|
+
'.env',
|
|
111
|
+
]
|
|
112
|
+
|
|
86
113
|
/** Ask a numbered-list question; returns the chosen index. */
|
|
87
114
|
async function pick(prompts: PromptIO, heading: string, items: { label: string; hint?: string }[], def = 1): Promise<number> {
|
|
88
115
|
prompts.say('')
|
|
@@ -158,7 +185,12 @@ async function gatherData(flags: InitFlags, prompts: PromptIO, db: DbGateway | n
|
|
|
158
185
|
datasetId = starterDatasets[i]!.id
|
|
159
186
|
}
|
|
160
187
|
const dataset = getStarterDataset(datasetId)
|
|
161
|
-
if (!dataset)
|
|
188
|
+
if (!dataset) {
|
|
189
|
+
throw new UserError(
|
|
190
|
+
`Unknown dataset "${datasetId}".`,
|
|
191
|
+
`Try one of: ${starterDatasets.map((d) => d.id).join(', ')}`,
|
|
192
|
+
)
|
|
193
|
+
}
|
|
162
194
|
const { entities, seed } = dataset.build()
|
|
163
195
|
const kind: DataSourceKind = source === 'pglite' ? 'pglite' : 'memory'
|
|
164
196
|
const sources: Record<string, EntityDataSource> = {}
|
|
@@ -168,7 +200,7 @@ async function gatherData(flags: InitFlags, prompts: PromptIO, db: DbGateway | n
|
|
|
168
200
|
}
|
|
169
201
|
|
|
170
202
|
async function gatherFromDatabase(flags: InitFlags, prompts: PromptIO, db: DbGateway | null): Promise<Gathered> {
|
|
171
|
-
if (!db) throw new
|
|
203
|
+
if (!db) throw new UserError('Connecting to a database is not available here.')
|
|
172
204
|
let dialect = flags.db
|
|
173
205
|
if (!dialect) {
|
|
174
206
|
const i = await pick(prompts, 'Which database?', DIALECTS.map((d) => ({ label: d })))
|
|
@@ -179,19 +211,40 @@ async function gatherFromDatabase(flags: InitFlags, prompts: PromptIO, db: DbGat
|
|
|
179
211
|
if (isFileDialect(dialect)) {
|
|
180
212
|
url = (await prompts.ask('Database file:', './data.db')).trim()
|
|
181
213
|
} else {
|
|
214
|
+
// Show the shape of the answer: a bare "Connection string:" prompt is the
|
|
215
|
+
// most common place a first run stalls.
|
|
216
|
+
prompts.say('')
|
|
217
|
+
prompts.say(` Example: ${CONNECTION_EXAMPLES[dialect] ?? CONNECTION_EXAMPLES.postgres}`)
|
|
182
218
|
const answer = (await prompts.ask('Connection string (blank to enter host/port instead):', '')).trim()
|
|
183
219
|
url = answer || buildConnectionString(dialect, await askConnectionParts(prompts))
|
|
184
220
|
}
|
|
185
221
|
}
|
|
186
|
-
if (!url) throw new
|
|
222
|
+
if (!url) throw new UserError('A connection string is required.')
|
|
187
223
|
|
|
188
224
|
const driver = await db.ensureDriver(dialect)
|
|
189
|
-
if (!driver.ok) throw new
|
|
225
|
+
if (!driver.ok) throw new UserError(driver.message ?? `Could not install the ${dialect} driver.`)
|
|
190
226
|
|
|
191
227
|
prompts.say(' Connecting...')
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
228
|
+
// A refused connection, a bad host, wrong credentials: the driver throws its
|
|
229
|
+
// own message here. That is the user's connection string to fix, not a defect,
|
|
230
|
+
// so keep the driver's wording but stop it looking like a crash.
|
|
231
|
+
let execute: DbExecute
|
|
232
|
+
let tables: string[]
|
|
233
|
+
try {
|
|
234
|
+
execute = await db.connect(dialect, url)
|
|
235
|
+
tables = await listDatabaseTables(dialect, execute)
|
|
236
|
+
} catch (e) {
|
|
237
|
+
throw new UserError(
|
|
238
|
+
`Could not read the database: ${e instanceof Error ? e.message : String(e)}`,
|
|
239
|
+
`Check the connection string. Expected shape: ${CONNECTION_EXAMPLES[dialect] ?? CONNECTION_EXAMPLES.postgres}`,
|
|
240
|
+
)
|
|
241
|
+
}
|
|
242
|
+
if (tables.length === 0) {
|
|
243
|
+
throw new UserError(
|
|
244
|
+
'Connected, but the database has no tables.',
|
|
245
|
+
'Check that the connection string points at the right database and schema.',
|
|
246
|
+
)
|
|
247
|
+
}
|
|
195
248
|
|
|
196
249
|
const counts = await countTableRows(dialect, execute, tables)
|
|
197
250
|
prompts.say('')
|
|
@@ -199,7 +252,7 @@ async function gatherFromDatabase(flags: InitFlags, prompts: PromptIO, db: DbGat
|
|
|
199
252
|
counts.forEach((t, i) => prompts.say(` ${i + 1}. ${t.name}${t.rows == null ? '' : ` (${t.rows} rows)`}`))
|
|
200
253
|
const answer = flags.yes ? 'all' : await prompts.ask('Which tables? (all, or a comma list of names/numbers)', 'all')
|
|
201
254
|
const picked = parseSelection(answer, tables)
|
|
202
|
-
if (picked.length === 0) throw new
|
|
255
|
+
if (picked.length === 0) throw new UserError('No tables picked - nothing to build.')
|
|
203
256
|
|
|
204
257
|
const schemas: EntitySchema[] = []
|
|
205
258
|
const sources: Record<string, EntityDataSource> = {}
|
|
@@ -213,7 +266,7 @@ async function gatherFromDatabase(flags: InitFlags, prompts: PromptIO, db: DbGat
|
|
|
213
266
|
prompts.say(` ! Skipped ${table}: ${e instanceof Error ? e.message : String(e)}`)
|
|
214
267
|
}
|
|
215
268
|
}
|
|
216
|
-
if (schemas.length === 0) throw new
|
|
269
|
+
if (schemas.length === 0) throw new UserError('None of the picked tables could be read.')
|
|
217
270
|
prompts.say(` Read ${schemas.length} ${schemas.length === 1 ? 'table' : 'tables'}.`)
|
|
218
271
|
return { schemas, sources, seed: {}, kind: 'sql' }
|
|
219
272
|
}
|
|
@@ -223,12 +276,27 @@ async function gatherFromDatabase(flags: InitFlags, prompts: PromptIO, db: DbGat
|
|
|
223
276
|
* DbGateway - just the project URL and the anon key.
|
|
224
277
|
*/
|
|
225
278
|
async function gatherFromSupabase(flags: InitFlags, prompts: PromptIO): Promise<Gathered> {
|
|
279
|
+
if (!flags.supabaseUrl || !flags.supabaseKey) {
|
|
280
|
+
// The designer's wizard says where these live; the CLI used to leave people
|
|
281
|
+
// hunting for them.
|
|
282
|
+
prompts.say('')
|
|
283
|
+
prompts.say(" Both are in your Supabase project's API settings (Project Settings -> API).")
|
|
284
|
+
prompts.say(' The URL looks like https://abcdefgh.supabase.co')
|
|
285
|
+
}
|
|
226
286
|
const url = (flags.supabaseUrl ?? (await prompts.ask('Project URL:', ''))).trim()
|
|
227
287
|
const key = (flags.supabaseKey ?? (await prompts.ask('Anon key:', ''))).trim()
|
|
228
|
-
if (!url || !key) throw new
|
|
288
|
+
if (!url || !key) throw new UserError('Both the project URL and the anon key are required.')
|
|
229
289
|
|
|
230
290
|
prompts.say(' Reading the API...')
|
|
231
|
-
|
|
291
|
+
let tables: string[]
|
|
292
|
+
try {
|
|
293
|
+
tables = await listSupabaseTables(url, key)
|
|
294
|
+
} catch (e) {
|
|
295
|
+
throw new UserError(
|
|
296
|
+
`Could not reach ${url}: ${e instanceof Error ? e.message : String(e)}`,
|
|
297
|
+
"Check the project URL and anon key in Project Settings -> API.",
|
|
298
|
+
)
|
|
299
|
+
}
|
|
232
300
|
let picked: string[]
|
|
233
301
|
if (tables.length) {
|
|
234
302
|
prompts.say('')
|
|
@@ -243,7 +311,7 @@ async function gatherFromSupabase(flags: InitFlags, prompts: PromptIO): Promise<
|
|
|
243
311
|
const typed = await prompts.ask('Table names (comma separated):', '')
|
|
244
312
|
picked = typed.split(',').map((t) => t.trim()).filter(Boolean)
|
|
245
313
|
}
|
|
246
|
-
if (picked.length === 0) throw new
|
|
314
|
+
if (picked.length === 0) throw new UserError('No tables picked - nothing to build.')
|
|
247
315
|
|
|
248
316
|
const schemas: EntitySchema[] = []
|
|
249
317
|
const sources: Record<string, EntityDataSource> = {}
|
|
@@ -256,7 +324,7 @@ async function gatherFromSupabase(flags: InitFlags, prompts: PromptIO): Promise<
|
|
|
256
324
|
schemas.push(schema as EntitySchema)
|
|
257
325
|
sources[schema.name] = { kind: 'supabase', table, url, key }
|
|
258
326
|
}
|
|
259
|
-
if (schemas.length === 0) throw new
|
|
327
|
+
if (schemas.length === 0) throw new UserError('None of the picked tables could be read.')
|
|
260
328
|
prompts.say(` Read ${schemas.length} ${schemas.length === 1 ? 'table' : 'tables'}.`)
|
|
261
329
|
return { schemas, sources, seed: {}, kind: 'supabase' }
|
|
262
330
|
}
|
|
@@ -272,23 +340,41 @@ async function askConnectionParts(prompts: PromptIO): Promise<SqlConnectionParts
|
|
|
272
340
|
}
|
|
273
341
|
|
|
274
342
|
async function gatherFromRest(prompts: PromptIO, fetchText: FetchText | null): Promise<Gathered> {
|
|
275
|
-
if (!fetchText) throw new
|
|
343
|
+
if (!fetchText) throw new UserError('Reading a REST endpoint is not available here.')
|
|
276
344
|
const src = (await prompts.ask('OpenAPI spec (file or URL), or a REST endpoint returning rows:', '')).trim()
|
|
277
|
-
if (!src) throw new
|
|
345
|
+
if (!src) throw new UserError('A spec path/URL or endpoint is required.')
|
|
278
346
|
const text = await fetchText(src)
|
|
279
347
|
|
|
280
348
|
// An OpenAPI document describes every resource; a plain endpoint gives one.
|
|
281
349
|
if (/"(openapi|swagger|paths)"\s*:/.test(text)) {
|
|
282
350
|
const { entities, sources, warnings } = introspectOpenApi(text)
|
|
283
351
|
for (const w of warnings) prompts.say(` ! ${w}`)
|
|
284
|
-
if (entities.length === 0) throw new
|
|
352
|
+
if (entities.length === 0) throw new UserError('The spec described no collection resources.')
|
|
285
353
|
prompts.say(` Read ${entities.length} REST ${entities.length === 1 ? 'resource' : 'resources'}.`)
|
|
286
354
|
return { schemas: entities, sources, seed: {}, kind: 'rest' }
|
|
287
355
|
}
|
|
288
356
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
357
|
+
let rows: Record<string, unknown>[]
|
|
358
|
+
try {
|
|
359
|
+
rows = unwrapRows(JSON.parse(text) as unknown)
|
|
360
|
+
} catch {
|
|
361
|
+
throw new UserError(
|
|
362
|
+
`${src} did not return JSON.`,
|
|
363
|
+
'Point this at an endpoint that returns rows, or at an OpenAPI (JSON) document.',
|
|
364
|
+
)
|
|
365
|
+
}
|
|
366
|
+
if (rows.length === 0) throw new UserError('The endpoint returned no rows to read a shape from.')
|
|
367
|
+
// A local file path or a bare hostname reaches this line too; `new URL` would
|
|
368
|
+
// throw a raw "Invalid URL" that reads like a crash.
|
|
369
|
+
let url: URL
|
|
370
|
+
try {
|
|
371
|
+
url = new URL(src)
|
|
372
|
+
} catch {
|
|
373
|
+
throw new UserError(
|
|
374
|
+
`"${src}" is not a full URL, so there is no endpoint to call at runtime.`,
|
|
375
|
+
'Pass the absolute endpoint, for example https://api.example.com/widgets',
|
|
376
|
+
)
|
|
377
|
+
}
|
|
292
378
|
const path = url.pathname.replace(/^\/+|\/+$/g, '')
|
|
293
379
|
const suggested = path.split('/').filter(Boolean).pop() || 'items'
|
|
294
380
|
const name = ((await prompts.ask('Table name:', suggested)).trim() || suggested).replace(/\W+/g, '_')
|
|
@@ -344,12 +430,66 @@ async function askTheme(flags: InitFlags, prompts: PromptIO): Promise<ProjectThe
|
|
|
344
430
|
return { preset, mode: dark ? 'dark' : 'light' }
|
|
345
431
|
}
|
|
346
432
|
|
|
433
|
+
/** Prefix a path with the output folder (`.` writes into the current one). */
|
|
434
|
+
const inDir = (outDir: string, path: string): string =>
|
|
435
|
+
(!outDir || outDir === '.' ? '' : outDir.replace(/[\\/]+$/, '') + '/') + path
|
|
436
|
+
|
|
437
|
+
/** Which marker files are present in `outDir` right now. */
|
|
438
|
+
async function markersIn(outDir: string, io: StudioIO): Promise<Set<string>> {
|
|
439
|
+
const found = new Set<string>()
|
|
440
|
+
for (const marker of CLOBBER_MARKERS) {
|
|
441
|
+
if ((await io.readFile(inDir(outDir, marker))) != null) found.add(marker)
|
|
442
|
+
}
|
|
443
|
+
return found
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Stop before overwriting somebody else's app.
|
|
448
|
+
*
|
|
449
|
+
* `init` defaults to the current folder, and bare `svgrid-studio` in a terminal
|
|
450
|
+
* runs it, so a mistaken run inside an existing project would replace its
|
|
451
|
+
* package.json, svelte config and .env without a word. Re-running init on a
|
|
452
|
+
* folder Studio itself generated is a regenerate, not a clobber, so a
|
|
453
|
+
* `studio.config.json` waves the check through.
|
|
454
|
+
*
|
|
455
|
+
* `before` is the set of markers seen at startup, and only those count. Picking a
|
|
456
|
+
* database makes Studio install a driver into this folder first, which writes a
|
|
457
|
+
* package.json - without the snapshot the flow would trip over a file it had
|
|
458
|
+
* just created itself and refuse to build anything.
|
|
459
|
+
*/
|
|
460
|
+
async function confirmTargetFolder(
|
|
461
|
+
outDir: string,
|
|
462
|
+
flags: InitFlags,
|
|
463
|
+
prompts: PromptIO,
|
|
464
|
+
io: StudioIO,
|
|
465
|
+
before: Set<string> | null,
|
|
466
|
+
): Promise<void> {
|
|
467
|
+
if (flags.force) return
|
|
468
|
+
if ((await io.readFile(inDir(outDir, 'studio.config.json'))) != null) return
|
|
469
|
+
|
|
470
|
+
const present = await markersIn(outDir, io)
|
|
471
|
+
// `before` only describes the folder it was taken in; anywhere else, whatever
|
|
472
|
+
// is on disk now was there before we started.
|
|
473
|
+
const found = CLOBBER_MARKERS.filter((m) => present.has(m) && (before == null || before.has(m)))
|
|
474
|
+
if (found.length === 0) return
|
|
475
|
+
|
|
476
|
+
const where = !outDir || outDir === '.' ? 'This folder' : outDir
|
|
477
|
+
const message = `${where} already has ${found.join(', ')}, and Studio would overwrite ${found.length === 1 ? 'it' : 'them'}.`
|
|
478
|
+
if (flags.yes) {
|
|
479
|
+
throw new UserError(message, 'Pick an empty folder with --out <dir>, or pass --force to overwrite anyway.')
|
|
480
|
+
}
|
|
481
|
+
prompts.say('')
|
|
482
|
+
prompts.say(` ! ${message}`)
|
|
483
|
+
if (!isYes(await prompts.ask('Overwrite? (y/N)', 'n'), false)) {
|
|
484
|
+
throw new UserError('Stopped without writing anything.', 'Re-run with --out <dir> to build somewhere else.')
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
347
488
|
/** Merge-write the generated files, preserving edits outside managed regions. */
|
|
348
489
|
async function writeAll(files: { path: string; contents: string; userOwned?: boolean }[], outDir: string, io: StudioIO): Promise<string[]> {
|
|
349
490
|
const written: string[] = []
|
|
350
|
-
const prefix = !outDir || outDir === '.' ? '' : outDir.replace(/[\\/]+$/, '') + '/'
|
|
351
491
|
for (const file of files) {
|
|
352
|
-
const path =
|
|
492
|
+
const path = inDir(outDir, file.path)
|
|
353
493
|
const existing = await io.readFile(path)
|
|
354
494
|
if (skipUserOwned(file, existing != null)) continue
|
|
355
495
|
await io.writeFile(path, mergeManaged(existing, file.contents))
|
|
@@ -371,6 +511,12 @@ export async function runStudioInit(
|
|
|
371
511
|
): Promise<InitResult> {
|
|
372
512
|
prompts.say('SvGrid Studio - let\'s build your app.')
|
|
373
513
|
|
|
514
|
+
// Snapshot the likely target before anything (a driver install, say) can add
|
|
515
|
+
// files to it, so the overwrite guard below judges the folder as the user left
|
|
516
|
+
// it rather than as Studio just changed it.
|
|
517
|
+
const candidateDir = flags.out ?? '.'
|
|
518
|
+
const markersBefore = await markersIn(candidateDir, io)
|
|
519
|
+
|
|
374
520
|
const data = await gatherData(flags, prompts, db, fetchText)
|
|
375
521
|
const perEntity = await askScreens(data.schemas, flags, prompts)
|
|
376
522
|
const theme = await askTheme(flags, prompts)
|
|
@@ -378,6 +524,7 @@ export async function runStudioInit(
|
|
|
378
524
|
const defaultTitle = flags.title ?? data.title ?? 'My app'
|
|
379
525
|
const title = flags.yes || flags.title ? defaultTitle : (await prompts.ask('\nApp name:', defaultTitle)).trim() || defaultTitle
|
|
380
526
|
const outDir = flags.out ?? (flags.yes ? '.' : (await prompts.ask('Write it where?', '.')).trim() || '.')
|
|
527
|
+
await confirmTargetFolder(outDir, flags, prompts, io, outDir === candidateDir ? markersBefore : null)
|
|
381
528
|
|
|
382
529
|
const project = crudAppFromSchemas(data.schemas, {
|
|
383
530
|
title,
|
|
@@ -392,7 +539,7 @@ export async function runStudioInit(
|
|
|
392
539
|
const files = emitStudioAppBundle(project)
|
|
393
540
|
const written = await writeAll(files, outDir, io)
|
|
394
541
|
// The design itself, so `svgrid-studio designer` reopens exactly this app.
|
|
395
|
-
const configPath = (
|
|
542
|
+
const configPath = inDir(outDir, 'studio.config.json')
|
|
396
543
|
await io.writeFile(configPath, serializeProject(project))
|
|
397
544
|
written.push(configPath)
|
|
398
545
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"compilerOptions":{"css":"external","dev":false,"hmr":false},"extensions":[".svelte"]}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hash": "8bcf7ff4",
|
|
3
|
+
"configHash": "9360a471",
|
|
4
|
+
"lockfileHash": "13bfa257",
|
|
5
|
+
"browserHash": "db48a281",
|
|
6
|
+
"optimized": {
|
|
7
|
+
"svelte": {
|
|
8
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/index-server.js",
|
|
9
|
+
"file": "svelte.js",
|
|
10
|
+
"fileHash": "80974999",
|
|
11
|
+
"needsInterop": false
|
|
12
|
+
},
|
|
13
|
+
"svelte/animate": {
|
|
14
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/animate/index.js",
|
|
15
|
+
"file": "svelte_animate.js",
|
|
16
|
+
"fileHash": "a6715191",
|
|
17
|
+
"needsInterop": false
|
|
18
|
+
},
|
|
19
|
+
"svelte/attachments": {
|
|
20
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/attachments/index.js",
|
|
21
|
+
"file": "svelte_attachments.js",
|
|
22
|
+
"fileHash": "0705b4c9",
|
|
23
|
+
"needsInterop": false
|
|
24
|
+
},
|
|
25
|
+
"svelte/compiler": {
|
|
26
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/compiler/index.js",
|
|
27
|
+
"file": "svelte_compiler.js",
|
|
28
|
+
"fileHash": "30f322e9",
|
|
29
|
+
"needsInterop": false
|
|
30
|
+
},
|
|
31
|
+
"svelte/easing": {
|
|
32
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/easing/index.js",
|
|
33
|
+
"file": "svelte_easing.js",
|
|
34
|
+
"fileHash": "46020b65",
|
|
35
|
+
"needsInterop": false
|
|
36
|
+
},
|
|
37
|
+
"svelte/events": {
|
|
38
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/events/index.js",
|
|
39
|
+
"file": "svelte_events.js",
|
|
40
|
+
"fileHash": "2b34f89b",
|
|
41
|
+
"needsInterop": false
|
|
42
|
+
},
|
|
43
|
+
"svelte/internal": {
|
|
44
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/index.js",
|
|
45
|
+
"file": "svelte_internal.js",
|
|
46
|
+
"fileHash": "4117a0c3",
|
|
47
|
+
"needsInterop": true
|
|
48
|
+
},
|
|
49
|
+
"svelte/internal/client": {
|
|
50
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/client/index.js",
|
|
51
|
+
"file": "svelte_internal_client.js",
|
|
52
|
+
"fileHash": "29204770",
|
|
53
|
+
"needsInterop": false
|
|
54
|
+
},
|
|
55
|
+
"svelte/internal/disclose-version": {
|
|
56
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/disclose-version.js",
|
|
57
|
+
"file": "svelte_internal_disclose-version.js",
|
|
58
|
+
"fileHash": "f83a157e",
|
|
59
|
+
"needsInterop": false
|
|
60
|
+
},
|
|
61
|
+
"svelte/internal/flags/async": {
|
|
62
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/flags/async.js",
|
|
63
|
+
"file": "svelte_internal_flags_async.js",
|
|
64
|
+
"fileHash": "a900863b",
|
|
65
|
+
"needsInterop": false
|
|
66
|
+
},
|
|
67
|
+
"svelte/internal/flags/legacy": {
|
|
68
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/flags/legacy.js",
|
|
69
|
+
"file": "svelte_internal_flags_legacy.js",
|
|
70
|
+
"fileHash": "907c28d5",
|
|
71
|
+
"needsInterop": false
|
|
72
|
+
},
|
|
73
|
+
"svelte/internal/flags/tracing": {
|
|
74
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/flags/tracing.js",
|
|
75
|
+
"file": "svelte_internal_flags_tracing.js",
|
|
76
|
+
"fileHash": "1c558753",
|
|
77
|
+
"needsInterop": false
|
|
78
|
+
},
|
|
79
|
+
"svelte/internal/server": {
|
|
80
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/internal/server/index.js",
|
|
81
|
+
"file": "svelte_internal_server.js",
|
|
82
|
+
"fileHash": "4ec66909",
|
|
83
|
+
"needsInterop": false
|
|
84
|
+
},
|
|
85
|
+
"svelte/legacy": {
|
|
86
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/legacy/legacy-server.js",
|
|
87
|
+
"file": "svelte_legacy.js",
|
|
88
|
+
"fileHash": "befe146a",
|
|
89
|
+
"needsInterop": false
|
|
90
|
+
},
|
|
91
|
+
"svelte/motion": {
|
|
92
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/motion/index.js",
|
|
93
|
+
"file": "svelte_motion.js",
|
|
94
|
+
"fileHash": "a5d4cf5a",
|
|
95
|
+
"needsInterop": false
|
|
96
|
+
},
|
|
97
|
+
"svelte/reactivity": {
|
|
98
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/reactivity/index-server.js",
|
|
99
|
+
"file": "svelte_reactivity.js",
|
|
100
|
+
"fileHash": "502c911b",
|
|
101
|
+
"needsInterop": false
|
|
102
|
+
},
|
|
103
|
+
"svelte/reactivity/window": {
|
|
104
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/reactivity/window/index.js",
|
|
105
|
+
"file": "svelte_reactivity_window.js",
|
|
106
|
+
"fileHash": "2695aa3a",
|
|
107
|
+
"needsInterop": false
|
|
108
|
+
},
|
|
109
|
+
"svelte/server": {
|
|
110
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/server/index.js",
|
|
111
|
+
"file": "svelte_server.js",
|
|
112
|
+
"fileHash": "fd4fad45",
|
|
113
|
+
"needsInterop": false
|
|
114
|
+
},
|
|
115
|
+
"svelte/store": {
|
|
116
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/store/index-server.js",
|
|
117
|
+
"file": "svelte_store.js",
|
|
118
|
+
"fileHash": "a2d659d2",
|
|
119
|
+
"needsInterop": false
|
|
120
|
+
},
|
|
121
|
+
"svelte/transition": {
|
|
122
|
+
"src": "../../../../../../../../../node_modules/.pnpm/svelte@5.55.9_@typescript-eslint+types@8.67.0/node_modules/svelte/src/transition/index.js",
|
|
123
|
+
"file": "svelte_transition.js",
|
|
124
|
+
"fileHash": "cfc16474",
|
|
125
|
+
"needsInterop": false
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"chunks": {
|
|
129
|
+
"attachments-BOv1rBKp": {
|
|
130
|
+
"file": "attachments-BOv1rBKp.js",
|
|
131
|
+
"isDynamicEntry": false
|
|
132
|
+
},
|
|
133
|
+
"constants-B9vgIdCd": {
|
|
134
|
+
"file": "constants-B9vgIdCd.js",
|
|
135
|
+
"isDynamicEntry": false
|
|
136
|
+
},
|
|
137
|
+
"dev-T1qbW_qD": {
|
|
138
|
+
"file": "dev-T1qbW_qD.js",
|
|
139
|
+
"isDynamicEntry": false
|
|
140
|
+
},
|
|
141
|
+
"events-Bo11SfVK": {
|
|
142
|
+
"file": "events-Bo11SfVK.js",
|
|
143
|
+
"isDynamicEntry": false
|
|
144
|
+
},
|
|
145
|
+
"flags-X7D4vfrZ": {
|
|
146
|
+
"file": "flags-X7D4vfrZ.js",
|
|
147
|
+
"isDynamicEntry": false
|
|
148
|
+
},
|
|
149
|
+
"hydration-oyUje5i1": {
|
|
150
|
+
"file": "hydration-oyUje5i1.js",
|
|
151
|
+
"isDynamicEntry": false
|
|
152
|
+
},
|
|
153
|
+
"legacy-client-DeSQgSFm": {
|
|
154
|
+
"file": "legacy-client-DeSQgSFm.js",
|
|
155
|
+
"isDynamicEntry": false
|
|
156
|
+
},
|
|
157
|
+
"utils-BbWyXNk1": {
|
|
158
|
+
"file": "utils-BbWyXNk1.js",
|
|
159
|
+
"isDynamicEntry": false
|
|
160
|
+
},
|
|
161
|
+
"utils-DI_fC7vt": {
|
|
162
|
+
"file": "utils-DI_fC7vt.js",
|
|
163
|
+
"isDynamicEntry": false
|
|
164
|
+
},
|
|
165
|
+
"validate-Dyr3lQv9": {
|
|
166
|
+
"file": "validate-Dyr3lQv9.js",
|
|
167
|
+
"isDynamicEntry": false
|
|
168
|
+
},
|
|
169
|
+
"version-_9FHH-LF": {
|
|
170
|
+
"file": "version-_9FHH-LF.js",
|
|
171
|
+
"isDynamicEntry": false
|
|
172
|
+
},
|
|
173
|
+
"warnings-CUbSPnyP": {
|
|
174
|
+
"file": "warnings-CUbSPnyP.js",
|
|
175
|
+
"isDynamicEntry": false
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|