@aigne/aos 0.2.0-beta
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/CHANGELOG.md +49 -0
- package/LICENSE.md +26 -0
- package/dist/agent-dsl.cjs +116 -0
- package/dist/agent-dsl.d.cts +31 -0
- package/dist/agent-dsl.d.cts.map +1 -0
- package/dist/agent-dsl.d.mts +31 -0
- package/dist/agent-dsl.d.mts.map +1 -0
- package/dist/agent-dsl.mjs +115 -0
- package/dist/agent-dsl.mjs.map +1 -0
- package/dist/arc-compat.cjs +125 -0
- package/dist/arc-compat.d.cts +17 -0
- package/dist/arc-compat.d.cts.map +1 -0
- package/dist/arc-compat.d.mts +17 -0
- package/dist/arc-compat.d.mts.map +1 -0
- package/dist/arc-compat.mjs +123 -0
- package/dist/arc-compat.mjs.map +1 -0
- package/dist/auto-surface/compiler.cjs +36 -0
- package/dist/auto-surface/compiler.d.cts +7 -0
- package/dist/auto-surface/compiler.d.cts.map +1 -0
- package/dist/auto-surface/compiler.d.mts +7 -0
- package/dist/auto-surface/compiler.d.mts.map +1 -0
- package/dist/auto-surface/compiler.mjs +37 -0
- package/dist/auto-surface/compiler.mjs.map +1 -0
- package/dist/auto-surface/definition-dsl.cjs +333 -0
- package/dist/auto-surface/definition-dsl.d.cts +41 -0
- package/dist/auto-surface/definition-dsl.d.cts.map +1 -0
- package/dist/auto-surface/definition-dsl.d.mts +41 -0
- package/dist/auto-surface/definition-dsl.d.mts.map +1 -0
- package/dist/auto-surface/definition-dsl.mjs +332 -0
- package/dist/auto-surface/definition-dsl.mjs.map +1 -0
- package/dist/auto-surface/fragments.cjs +177 -0
- package/dist/auto-surface/fragments.d.cts +23 -0
- package/dist/auto-surface/fragments.d.cts.map +1 -0
- package/dist/auto-surface/fragments.d.mts +23 -0
- package/dist/auto-surface/fragments.d.mts.map +1 -0
- package/dist/auto-surface/fragments.mjs +175 -0
- package/dist/auto-surface/fragments.mjs.map +1 -0
- package/dist/auto-surface/index.d.mts +9 -0
- package/dist/auto-surface/layering.cjs +43 -0
- package/dist/auto-surface/layering.d.cts +7 -0
- package/dist/auto-surface/layering.d.cts.map +1 -0
- package/dist/auto-surface/layering.d.mts +7 -0
- package/dist/auto-surface/layering.d.mts.map +1 -0
- package/dist/auto-surface/layering.mjs +43 -0
- package/dist/auto-surface/layering.mjs.map +1 -0
- package/dist/auto-surface/projection.cjs +11 -0
- package/dist/auto-surface/projection.d.cts +11 -0
- package/dist/auto-surface/projection.d.cts.map +1 -0
- package/dist/auto-surface/projection.d.mts +11 -0
- package/dist/auto-surface/projection.d.mts.map +1 -0
- package/dist/auto-surface/projection.mjs +12 -0
- package/dist/auto-surface/projection.mjs.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.cjs +114 -0
- package/dist/auto-surface/projectors/settings-shell.d.cts +10 -0
- package/dist/auto-surface/projectors/settings-shell.d.cts.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.d.mts +10 -0
- package/dist/auto-surface/projectors/settings-shell.d.mts.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.mjs +114 -0
- package/dist/auto-surface/projectors/settings-shell.mjs.map +1 -0
- package/dist/auto-surface/scenario.cjs +38 -0
- package/dist/auto-surface/scenario.d.cts +31 -0
- package/dist/auto-surface/scenario.d.cts.map +1 -0
- package/dist/auto-surface/scenario.d.mts +31 -0
- package/dist/auto-surface/scenario.d.mts.map +1 -0
- package/dist/auto-surface/scenario.mjs +37 -0
- package/dist/auto-surface/scenario.mjs.map +1 -0
- package/dist/auto-surface/types.cjs +9 -0
- package/dist/auto-surface/types.d.cts +153 -0
- package/dist/auto-surface/types.d.cts.map +1 -0
- package/dist/auto-surface/types.d.mts +153 -0
- package/dist/auto-surface/types.d.mts.map +1 -0
- package/dist/auto-surface/types.mjs +9 -0
- package/dist/auto-surface/types.mjs.map +1 -0
- package/dist/auto-surface/value-dsl.cjs +80 -0
- package/dist/auto-surface/value-dsl.d.cts +24 -0
- package/dist/auto-surface/value-dsl.d.cts.map +1 -0
- package/dist/auto-surface/value-dsl.d.mts +24 -0
- package/dist/auto-surface/value-dsl.d.mts.map +1 -0
- package/dist/auto-surface/value-dsl.mjs +79 -0
- package/dist/auto-surface/value-dsl.mjs.map +1 -0
- package/dist/blocklet/activation.cjs +94 -0
- package/dist/blocklet/activation.d.cts +30 -0
- package/dist/blocklet/activation.d.cts.map +1 -0
- package/dist/blocklet/activation.d.mts +30 -0
- package/dist/blocklet/activation.d.mts.map +1 -0
- package/dist/blocklet/activation.mjs +94 -0
- package/dist/blocklet/activation.mjs.map +1 -0
- package/dist/blocklet/did-space-registry.cjs +282 -0
- package/dist/blocklet/did-space-registry.d.cts +82 -0
- package/dist/blocklet/did-space-registry.d.cts.map +1 -0
- package/dist/blocklet/did-space-registry.d.mts +82 -0
- package/dist/blocklet/did-space-registry.d.mts.map +1 -0
- package/dist/blocklet/did-space-registry.mjs +281 -0
- package/dist/blocklet/did-space-registry.mjs.map +1 -0
- package/dist/blocklet/handlers.cjs +66 -0
- package/dist/blocklet/handlers.d.cts +16 -0
- package/dist/blocklet/handlers.d.cts.map +1 -0
- package/dist/blocklet/handlers.d.mts +16 -0
- package/dist/blocklet/handlers.d.mts.map +1 -0
- package/dist/blocklet/handlers.mjs +65 -0
- package/dist/blocklet/handlers.mjs.map +1 -0
- package/dist/blocklet/index.d.mts +7 -0
- package/dist/blocklet/manifest.d.cts +2 -0
- package/dist/blocklet/manifest.d.mts +2 -0
- package/dist/blocklet/manifest.mjs +3 -0
- package/dist/blocklet/registry.cjs +447 -0
- package/dist/blocklet/registry.d.cts +197 -0
- package/dist/blocklet/registry.d.cts.map +1 -0
- package/dist/blocklet/registry.d.mts +197 -0
- package/dist/blocklet/registry.d.mts.map +1 -0
- package/dist/blocklet/registry.mjs +441 -0
- package/dist/blocklet/registry.mjs.map +1 -0
- package/dist/blocklet/static-render.cjs +183 -0
- package/dist/blocklet/static-render.d.cts +55 -0
- package/dist/blocklet/static-render.d.cts.map +1 -0
- package/dist/blocklet/static-render.d.mts +55 -0
- package/dist/blocklet/static-render.d.mts.map +1 -0
- package/dist/blocklet/static-render.mjs +181 -0
- package/dist/blocklet/static-render.mjs.map +1 -0
- package/dist/blocklet/types.d.cts +70 -0
- package/dist/blocklet/types.d.cts.map +1 -0
- package/dist/blocklet/types.d.mts +70 -0
- package/dist/blocklet/types.d.mts.map +1 -0
- package/dist/devices/chain.cjs +127 -0
- package/dist/devices/chain.d.cts +48 -0
- package/dist/devices/chain.d.cts.map +1 -0
- package/dist/devices/chain.d.mts +48 -0
- package/dist/devices/chain.d.mts.map +1 -0
- package/dist/devices/chain.mjs +125 -0
- package/dist/devices/chain.mjs.map +1 -0
- package/dist/dsl-shared.cjs +290 -0
- package/dist/dsl-shared.d.cts +54 -0
- package/dist/dsl-shared.d.cts.map +1 -0
- package/dist/dsl-shared.d.mts +54 -0
- package/dist/dsl-shared.d.mts.map +1 -0
- package/dist/dsl-shared.mjs +287 -0
- package/dist/dsl-shared.mjs.map +1 -0
- package/dist/http/afs-mcp.cjs +85 -0
- package/dist/http/afs-mcp.d.cts +14 -0
- package/dist/http/afs-mcp.d.cts.map +1 -0
- package/dist/http/afs-mcp.d.mts +14 -0
- package/dist/http/afs-mcp.d.mts.map +1 -0
- package/dist/http/afs-mcp.mjs +86 -0
- package/dist/http/afs-mcp.mjs.map +1 -0
- package/dist/http/afs-raw.cjs +264 -0
- package/dist/http/afs-raw.d.cts +31 -0
- package/dist/http/afs-raw.d.cts.map +1 -0
- package/dist/http/afs-raw.d.mts +31 -0
- package/dist/http/afs-raw.d.mts.map +1 -0
- package/dist/http/afs-raw.mjs +264 -0
- package/dist/http/afs-raw.mjs.map +1 -0
- package/dist/http/afs-rest.cjs +30 -0
- package/dist/http/afs-rest.d.cts +21 -0
- package/dist/http/afs-rest.d.cts.map +1 -0
- package/dist/http/afs-rest.d.mts +21 -0
- package/dist/http/afs-rest.d.mts.map +1 -0
- package/dist/http/afs-rest.mjs +31 -0
- package/dist/http/afs-rest.mjs.map +1 -0
- package/dist/http/afs-rpc-wire.cjs +271 -0
- package/dist/http/afs-rpc-wire.d.cts +195 -0
- package/dist/http/afs-rpc-wire.d.cts.map +1 -0
- package/dist/http/afs-rpc-wire.d.mts +195 -0
- package/dist/http/afs-rpc-wire.d.mts.map +1 -0
- package/dist/http/afs-rpc-wire.mjs +262 -0
- package/dist/http/afs-rpc-wire.mjs.map +1 -0
- package/dist/http/afs-rpc.cjs +729 -0
- package/dist/http/afs-rpc.d.cts +103 -0
- package/dist/http/afs-rpc.d.cts.map +1 -0
- package/dist/http/afs-rpc.d.mts +103 -0
- package/dist/http/afs-rpc.d.mts.map +1 -0
- package/dist/http/afs-rpc.mjs +729 -0
- package/dist/http/afs-rpc.mjs.map +1 -0
- package/dist/http/afs-upload.cjs +116 -0
- package/dist/http/afs-upload.d.cts +40 -0
- package/dist/http/afs-upload.d.cts.map +1 -0
- package/dist/http/afs-upload.d.mts +40 -0
- package/dist/http/afs-upload.d.mts.map +1 -0
- package/dist/http/afs-upload.mjs +116 -0
- package/dist/http/afs-upload.mjs.map +1 -0
- package/dist/http/aup-client.cjs +60 -0
- package/dist/http/aup-client.d.cts +22 -0
- package/dist/http/aup-client.d.cts.map +1 -0
- package/dist/http/aup-client.d.mts +22 -0
- package/dist/http/aup-client.d.mts.map +1 -0
- package/dist/http/aup-client.mjs +59 -0
- package/dist/http/aup-client.mjs.map +1 -0
- package/dist/http/aup-event.cjs +100 -0
- package/dist/http/aup-event.d.cts +38 -0
- package/dist/http/aup-event.d.cts.map +1 -0
- package/dist/http/aup-event.d.mts +38 -0
- package/dist/http/aup-event.d.mts.map +1 -0
- package/dist/http/aup-event.mjs +101 -0
- package/dist/http/aup-event.mjs.map +1 -0
- package/dist/http/auth-context.cjs +66 -0
- package/dist/http/auth-context.d.cts +64 -0
- package/dist/http/auth-context.d.cts.map +1 -0
- package/dist/http/auth-context.d.mts +64 -0
- package/dist/http/auth-context.d.mts.map +1 -0
- package/dist/http/auth-context.mjs +66 -0
- package/dist/http/auth-context.mjs.map +1 -0
- package/dist/http/csrf.cjs +50 -0
- package/dist/http/csrf.d.cts +8 -0
- package/dist/http/csrf.d.cts.map +1 -0
- package/dist/http/csrf.d.mts +8 -0
- package/dist/http/csrf.d.mts.map +1 -0
- package/dist/http/csrf.mjs +49 -0
- package/dist/http/csrf.mjs.map +1 -0
- package/dist/http/handlers.cjs +106 -0
- package/dist/http/handlers.d.cts +39 -0
- package/dist/http/handlers.d.cts.map +1 -0
- package/dist/http/handlers.d.mts +39 -0
- package/dist/http/handlers.d.mts.map +1 -0
- package/dist/http/handlers.mjs +104 -0
- package/dist/http/handlers.mjs.map +1 -0
- package/dist/http/index.d.mts +1 -0
- package/dist/http/ingest-facade.cjs +315 -0
- package/dist/http/ingest-facade.mjs +314 -0
- package/dist/http/ingest-facade.mjs.map +1 -0
- package/dist/http/raw-url.cjs +136 -0
- package/dist/http/raw-url.d.cts +54 -0
- package/dist/http/raw-url.d.cts.map +1 -0
- package/dist/http/raw-url.d.mts +54 -0
- package/dist/http/raw-url.d.mts.map +1 -0
- package/dist/http/raw-url.mjs +136 -0
- package/dist/http/raw-url.mjs.map +1 -0
- package/dist/http/request-context.cjs +178 -0
- package/dist/http/request-context.d.cts +76 -0
- package/dist/http/request-context.d.cts.map +1 -0
- package/dist/http/request-context.d.mts +76 -0
- package/dist/http/request-context.d.mts.map +1 -0
- package/dist/http/request-context.mjs +179 -0
- package/dist/http/request-context.mjs.map +1 -0
- package/dist/index.cjs +197 -0
- package/dist/index.d.cts +63 -0
- package/dist/index.d.mts +68 -0
- package/dist/index.mjs +61 -0
- package/dist/mcp/index.cjs +9 -0
- package/dist/mcp/index.d.cts +5 -0
- package/dist/mcp/index.d.mts +5 -0
- package/dist/mcp/index.mjs +6 -0
- package/dist/mcp/prompts.cjs +17 -0
- package/dist/mcp/prompts.d.cts +8 -0
- package/dist/mcp/prompts.d.cts.map +1 -0
- package/dist/mcp/prompts.d.mts +8 -0
- package/dist/mcp/prompts.d.mts.map +1 -0
- package/dist/mcp/prompts.mjs +17 -0
- package/dist/mcp/prompts.mjs.map +1 -0
- package/dist/mcp/resources.cjs +22 -0
- package/dist/mcp/resources.d.cts +8 -0
- package/dist/mcp/resources.d.cts.map +1 -0
- package/dist/mcp/resources.d.mts +8 -0
- package/dist/mcp/resources.d.mts.map +1 -0
- package/dist/mcp/resources.mjs +22 -0
- package/dist/mcp/resources.mjs.map +1 -0
- package/dist/mcp/server.cjs +51 -0
- package/dist/mcp/server.d.cts +20 -0
- package/dist/mcp/server.d.cts.map +1 -0
- package/dist/mcp/server.d.mts +20 -0
- package/dist/mcp/server.d.mts.map +1 -0
- package/dist/mcp/server.mjs +52 -0
- package/dist/mcp/server.mjs.map +1 -0
- package/dist/mcp/tools.cjs +218 -0
- package/dist/mcp/tools.d.cts +8 -0
- package/dist/mcp/tools.d.cts.map +1 -0
- package/dist/mcp/tools.d.mts +8 -0
- package/dist/mcp/tools.d.mts.map +1 -0
- package/dist/mcp/tools.mjs +219 -0
- package/dist/mcp/tools.mjs.map +1 -0
- package/dist/mcp/utils.cjs +75 -0
- package/dist/mcp/utils.mjs +69 -0
- package/dist/mcp/utils.mjs.map +1 -0
- package/dist/mount/index.cjs +4 -0
- package/dist/mount/index.d.cts +3 -0
- package/dist/mount/index.d.mts +3 -0
- package/dist/mount/index.mjs +3 -0
- package/dist/mount/materializer.cjs +167 -0
- package/dist/mount/materializer.d.cts +97 -0
- package/dist/mount/materializer.d.cts.map +1 -0
- package/dist/mount/materializer.d.mts +97 -0
- package/dist/mount/materializer.d.mts.map +1 -0
- package/dist/mount/materializer.mjs +167 -0
- package/dist/mount/materializer.mjs.map +1 -0
- package/dist/mount/types.d.cts +90 -0
- package/dist/mount/types.d.cts.map +1 -0
- package/dist/mount/types.d.mts +90 -0
- package/dist/mount/types.d.mts.map +1 -0
- package/dist/mount-config.cjs +61 -0
- package/dist/mount-config.d.cts +19 -0
- package/dist/mount-config.d.cts.map +1 -0
- package/dist/mount-config.d.mts +19 -0
- package/dist/mount-config.d.mts.map +1 -0
- package/dist/mount-config.mjs +61 -0
- package/dist/mount-config.mjs.map +1 -0
- package/dist/projectors/aup-projector.cjs +190 -0
- package/dist/projectors/aup-projector.d.cts +59 -0
- package/dist/projectors/aup-projector.d.cts.map +1 -0
- package/dist/projectors/aup-projector.d.mts +59 -0
- package/dist/projectors/aup-projector.d.mts.map +1 -0
- package/dist/projectors/aup-projector.mjs +188 -0
- package/dist/projectors/aup-projector.mjs.map +1 -0
- package/dist/projectors/index.cjs +6 -0
- package/dist/projectors/index.d.cts +2 -0
- package/dist/projectors/index.d.mts +2 -0
- package/dist/projectors/index.mjs +3 -0
- package/dist/scaffold/afs.cjs +195 -0
- package/dist/scaffold/afs.d.cts +16 -0
- package/dist/scaffold/afs.d.cts.map +1 -0
- package/dist/scaffold/afs.d.mts +16 -0
- package/dist/scaffold/afs.d.mts.map +1 -0
- package/dist/scaffold/afs.mjs +195 -0
- package/dist/scaffold/afs.mjs.map +1 -0
- package/dist/scaffold/composition.cjs +92 -0
- package/dist/scaffold/composition.d.cts +10 -0
- package/dist/scaffold/composition.d.cts.map +1 -0
- package/dist/scaffold/composition.d.mts +10 -0
- package/dist/scaffold/composition.d.mts.map +1 -0
- package/dist/scaffold/composition.mjs +92 -0
- package/dist/scaffold/composition.mjs.map +1 -0
- package/dist/scaffold/dsl-error.cjs +21 -0
- package/dist/scaffold/dsl-error.d.cts +11 -0
- package/dist/scaffold/dsl-error.d.cts.map +1 -0
- package/dist/scaffold/dsl-error.d.mts +11 -0
- package/dist/scaffold/dsl-error.d.mts.map +1 -0
- package/dist/scaffold/dsl-error.mjs +20 -0
- package/dist/scaffold/dsl-error.mjs.map +1 -0
- package/dist/scaffold/index.d.mts +12 -0
- package/dist/scaffold/manifest-dsl.cjs +188 -0
- package/dist/scaffold/manifest-dsl.d.cts +8 -0
- package/dist/scaffold/manifest-dsl.d.cts.map +1 -0
- package/dist/scaffold/manifest-dsl.d.mts +8 -0
- package/dist/scaffold/manifest-dsl.d.mts.map +1 -0
- package/dist/scaffold/manifest-dsl.mjs +188 -0
- package/dist/scaffold/manifest-dsl.mjs.map +1 -0
- package/dist/scaffold/module-dsl.cjs +284 -0
- package/dist/scaffold/module-dsl.d.cts +8 -0
- package/dist/scaffold/module-dsl.d.cts.map +1 -0
- package/dist/scaffold/module-dsl.d.mts +8 -0
- package/dist/scaffold/module-dsl.d.mts.map +1 -0
- package/dist/scaffold/module-dsl.mjs +284 -0
- package/dist/scaffold/module-dsl.mjs.map +1 -0
- package/dist/scaffold/resolver.cjs +156 -0
- package/dist/scaffold/resolver.d.cts +7 -0
- package/dist/scaffold/resolver.d.cts.map +1 -0
- package/dist/scaffold/resolver.d.mts +7 -0
- package/dist/scaffold/resolver.d.mts.map +1 -0
- package/dist/scaffold/resolver.mjs +156 -0
- package/dist/scaffold/resolver.mjs.map +1 -0
- package/dist/scaffold/runtime.cjs +24 -0
- package/dist/scaffold/runtime.d.cts +19 -0
- package/dist/scaffold/runtime.d.cts.map +1 -0
- package/dist/scaffold/runtime.d.mts +19 -0
- package/dist/scaffold/runtime.d.mts.map +1 -0
- package/dist/scaffold/runtime.mjs +25 -0
- package/dist/scaffold/runtime.mjs.map +1 -0
- package/dist/scaffold/shell-dsl.cjs +279 -0
- package/dist/scaffold/shell-dsl.d.cts +8 -0
- package/dist/scaffold/shell-dsl.d.cts.map +1 -0
- package/dist/scaffold/shell-dsl.d.mts +8 -0
- package/dist/scaffold/shell-dsl.d.mts.map +1 -0
- package/dist/scaffold/shell-dsl.mjs +279 -0
- package/dist/scaffold/shell-dsl.mjs.map +1 -0
- package/dist/scaffold/surface-dsl.cjs +182 -0
- package/dist/scaffold/surface-dsl.d.cts +8 -0
- package/dist/scaffold/surface-dsl.d.cts.map +1 -0
- package/dist/scaffold/surface-dsl.d.mts +8 -0
- package/dist/scaffold/surface-dsl.d.mts.map +1 -0
- package/dist/scaffold/surface-dsl.mjs +182 -0
- package/dist/scaffold/surface-dsl.mjs.map +1 -0
- package/dist/scaffold/surfaces.cjs +84 -0
- package/dist/scaffold/surfaces.d.cts +23 -0
- package/dist/scaffold/surfaces.d.cts.map +1 -0
- package/dist/scaffold/surfaces.d.mts +24 -0
- package/dist/scaffold/surfaces.d.mts.map +1 -0
- package/dist/scaffold/surfaces.mjs +84 -0
- package/dist/scaffold/surfaces.mjs.map +1 -0
- package/dist/scaffold/types.d.cts +264 -0
- package/dist/scaffold/types.d.cts.map +1 -0
- package/dist/scaffold/types.d.mts +265 -0
- package/dist/scaffold/types.d.mts.map +1 -0
- package/dist/scaffold/workspace-dsl.cjs +339 -0
- package/dist/scaffold/workspace-dsl.d.cts +49 -0
- package/dist/scaffold/workspace-dsl.d.cts.map +1 -0
- package/dist/scaffold/workspace-dsl.d.mts +49 -0
- package/dist/scaffold/workspace-dsl.d.mts.map +1 -0
- package/dist/scaffold/workspace-dsl.mjs +337 -0
- package/dist/scaffold/workspace-dsl.mjs.map +1 -0
- package/dist/scope/index.d.mts +3 -0
- package/dist/scope/read-blocklet-scope.cjs +29 -0
- package/dist/scope/read-blocklet-scope.d.cts +8 -0
- package/dist/scope/read-blocklet-scope.d.cts.map +1 -0
- package/dist/scope/read-blocklet-scope.d.mts +8 -0
- package/dist/scope/read-blocklet-scope.d.mts.map +1 -0
- package/dist/scope/read-blocklet-scope.mjs +30 -0
- package/dist/scope/read-blocklet-scope.mjs.map +1 -0
- package/dist/scope/resolve-scoped-afs.cjs +87 -0
- package/dist/scope/resolve-scoped-afs.d.cts +7 -0
- package/dist/scope/resolve-scoped-afs.d.cts.map +1 -0
- package/dist/scope/resolve-scoped-afs.d.mts +7 -0
- package/dist/scope/resolve-scoped-afs.d.mts.map +1 -0
- package/dist/scope/resolve-scoped-afs.mjs +88 -0
- package/dist/scope/resolve-scoped-afs.mjs.map +1 -0
- package/dist/scope/types.d.cts +25 -0
- package/dist/scope/types.d.cts.map +1 -0
- package/dist/scope/types.d.mts +25 -0
- package/dist/scope/types.d.mts.map +1 -0
- package/dist/session/backends.cjs +90 -0
- package/dist/session/backends.d.cts +35 -0
- package/dist/session/backends.d.cts.map +1 -0
- package/dist/session/backends.d.mts +35 -0
- package/dist/session/backends.d.mts.map +1 -0
- package/dist/session/backends.mjs +89 -0
- package/dist/session/backends.mjs.map +1 -0
- package/dist/session/replication-resolver.cjs +323 -0
- package/dist/session/replication-resolver.d.cts +71 -0
- package/dist/session/replication-resolver.d.cts.map +1 -0
- package/dist/session/replication-resolver.d.mts +71 -0
- package/dist/session/replication-resolver.d.mts.map +1 -0
- package/dist/session/replication-resolver.mjs +323 -0
- package/dist/session/replication-resolver.mjs.map +1 -0
- package/dist/session/role-level.cjs +36 -0
- package/dist/session/role-level.d.cts +24 -0
- package/dist/session/role-level.d.cts.map +1 -0
- package/dist/session/role-level.d.mts +24 -0
- package/dist/session/role-level.d.mts.map +1 -0
- package/dist/session/role-level.mjs +35 -0
- package/dist/session/role-level.mjs.map +1 -0
- package/dist/session/session-dir-providers.cjs +254 -0
- package/dist/session/session-dir-providers.d.cts +32 -0
- package/dist/session/session-dir-providers.d.cts.map +1 -0
- package/dist/session/session-dir-providers.d.mts +32 -0
- package/dist/session/session-dir-providers.d.mts.map +1 -0
- package/dist/session/session-dir-providers.mjs +252 -0
- package/dist/session/session-dir-providers.mjs.map +1 -0
- package/dist/session/session-id.cjs +20 -0
- package/dist/session/session-id.d.cts +15 -0
- package/dist/session/session-id.d.cts.map +1 -0
- package/dist/session/session-id.d.mts +15 -0
- package/dist/session/session-id.d.mts.map +1 -0
- package/dist/session/session-id.mjs +20 -0
- package/dist/session/session-id.mjs.map +1 -0
- package/dist/session/session-user-afs.cjs +899 -0
- package/dist/session/session-user-afs.d.cts +296 -0
- package/dist/session/session-user-afs.d.cts.map +1 -0
- package/dist/session/session-user-afs.d.mts +296 -0
- package/dist/session/session-user-afs.d.mts.map +1 -0
- package/dist/session/session-user-afs.mjs +896 -0
- package/dist/session/session-user-afs.mjs.map +1 -0
- package/dist/session/settings-cascade.cjs +69 -0
- package/dist/session/settings-cascade.d.cts +81 -0
- package/dist/session/settings-cascade.d.cts.map +1 -0
- package/dist/session/settings-cascade.d.mts +81 -0
- package/dist/session/settings-cascade.d.mts.map +1 -0
- package/dist/session/settings-cascade.mjs +69 -0
- package/dist/session/settings-cascade.mjs.map +1 -0
- package/dist/session/settings-resolver.cjs +770 -0
- package/dist/session/settings-resolver.d.cts +177 -0
- package/dist/session/settings-resolver.d.cts.map +1 -0
- package/dist/session/settings-resolver.d.mts +177 -0
- package/dist/session/settings-resolver.d.mts.map +1 -0
- package/dist/session/settings-resolver.mjs +771 -0
- package/dist/session/settings-resolver.mjs.map +1 -0
- package/dist/session/settings-schema-store.cjs +0 -0
- package/dist/session/settings-schema-store.d.cts +72 -0
- package/dist/session/settings-schema-store.d.cts.map +1 -0
- package/dist/session/settings-schema-store.d.mts +72 -0
- package/dist/session/settings-schema-store.d.mts.map +1 -0
- package/dist/session/settings-schema-store.mjs +0 -0
- package/dist/session/settings-schema-store.mjs.map +1 -0
- package/dist/system-mounts/index.cjs +14 -0
- package/dist/system-mounts/index.d.cts +6 -0
- package/dist/system-mounts/index.d.mts +6 -0
- package/dist/system-mounts/index.mjs +6 -0
- package/dist/system-mounts/install.cjs +101 -0
- package/dist/system-mounts/install.d.cts +36 -0
- package/dist/system-mounts/install.d.cts.map +1 -0
- package/dist/system-mounts/install.d.mts +37 -0
- package/dist/system-mounts/install.d.mts.map +1 -0
- package/dist/system-mounts/install.mjs +102 -0
- package/dist/system-mounts/install.mjs.map +1 -0
- package/dist/system-mounts/installers.cjs +247 -0
- package/dist/system-mounts/installers.d.cts +13 -0
- package/dist/system-mounts/installers.d.cts.map +1 -0
- package/dist/system-mounts/installers.d.mts +14 -0
- package/dist/system-mounts/installers.d.mts.map +1 -0
- package/dist/system-mounts/installers.mjs +244 -0
- package/dist/system-mounts/installers.mjs.map +1 -0
- package/dist/system-mounts/lists.cjs +122 -0
- package/dist/system-mounts/lists.d.cts +34 -0
- package/dist/system-mounts/lists.d.cts.map +1 -0
- package/dist/system-mounts/lists.d.mts +34 -0
- package/dist/system-mounts/lists.d.mts.map +1 -0
- package/dist/system-mounts/lists.mjs +122 -0
- package/dist/system-mounts/lists.mjs.map +1 -0
- package/dist/system-mounts/types.d.cts +124 -0
- package/dist/system-mounts/types.d.cts.map +1 -0
- package/dist/system-mounts/types.d.mts +125 -0
- package/dist/system-mounts/types.d.mts.map +1 -0
- package/dist/system-mounts/validate.cjs +56 -0
- package/dist/system-mounts/validate.d.cts +34 -0
- package/dist/system-mounts/validate.d.cts.map +1 -0
- package/dist/system-mounts/validate.d.mts +34 -0
- package/dist/system-mounts/validate.d.mts.map +1 -0
- package/dist/system-mounts/validate.mjs +56 -0
- package/dist/system-mounts/validate.mjs.map +1 -0
- package/dist/terminal-llm.cjs +90 -0
- package/dist/terminal-llm.d.cts +50 -0
- package/dist/terminal-llm.d.cts.map +1 -0
- package/dist/terminal-llm.d.mts +50 -0
- package/dist/terminal-llm.d.mts.map +1 -0
- package/dist/terminal-llm.mjs +90 -0
- package/dist/terminal-llm.mjs.map +1 -0
- package/dist/terminal-repl.cjs +371 -0
- package/dist/terminal-repl.d.cts +69 -0
- package/dist/terminal-repl.d.cts.map +1 -0
- package/dist/terminal-repl.d.mts +69 -0
- package/dist/terminal-repl.d.mts.map +1 -0
- package/dist/terminal-repl.mjs +370 -0
- package/dist/terminal-repl.mjs.map +1 -0
- package/dist/transport/idle-timer.cjs +136 -0
- package/dist/transport/idle-timer.d.cts +92 -0
- package/dist/transport/idle-timer.d.cts.map +1 -0
- package/dist/transport/idle-timer.d.mts +92 -0
- package/dist/transport/idle-timer.d.mts.map +1 -0
- package/dist/transport/idle-timer.mjs +132 -0
- package/dist/transport/idle-timer.mjs.map +1 -0
- package/dist/web-component-dsl.cjs +153 -0
- package/dist/web-component-dsl.d.cts +27 -0
- package/dist/web-component-dsl.d.cts.map +1 -0
- package/dist/web-component-dsl.d.mts +27 -0
- package/dist/web-component-dsl.d.mts.map +1 -0
- package/dist/web-component-dsl.mjs +152 -0
- package/dist/web-component-dsl.mjs.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
const require_dsl_shared = require('../dsl-shared.cjs');
|
|
2
|
+
const require_dsl_error = require('./dsl-error.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/scaffold/shell-dsl.ts
|
|
5
|
+
const STRING = "\"((?:[^\"\\\\]|\\\\.)*)\"";
|
|
6
|
+
function compileShellDsl(source) {
|
|
7
|
+
const declaration = require_dsl_shared.parseDeclaration(source, {
|
|
8
|
+
kind: "shell",
|
|
9
|
+
allowQuotedId: true,
|
|
10
|
+
expected: "Expected shell \"Title\" {",
|
|
11
|
+
fieldKeywords: [
|
|
12
|
+
"subtitle",
|
|
13
|
+
"logo",
|
|
14
|
+
"action",
|
|
15
|
+
"footer",
|
|
16
|
+
"link",
|
|
17
|
+
"group",
|
|
18
|
+
"item"
|
|
19
|
+
],
|
|
20
|
+
fieldContinuationPairs: {
|
|
21
|
+
"->": [
|
|
22
|
+
"footer",
|
|
23
|
+
"group",
|
|
24
|
+
"item",
|
|
25
|
+
"link"
|
|
26
|
+
],
|
|
27
|
+
badge: [
|
|
28
|
+
"footer",
|
|
29
|
+
"group",
|
|
30
|
+
"item",
|
|
31
|
+
"link"
|
|
32
|
+
],
|
|
33
|
+
header: ["footer"],
|
|
34
|
+
module: [
|
|
35
|
+
"footer",
|
|
36
|
+
"group",
|
|
37
|
+
"item",
|
|
38
|
+
"link"
|
|
39
|
+
],
|
|
40
|
+
placement: ["footer", "header"],
|
|
41
|
+
route: [
|
|
42
|
+
"footer",
|
|
43
|
+
"group",
|
|
44
|
+
"item",
|
|
45
|
+
"link"
|
|
46
|
+
],
|
|
47
|
+
surface: [
|
|
48
|
+
"footer",
|
|
49
|
+
"group",
|
|
50
|
+
"item",
|
|
51
|
+
"link"
|
|
52
|
+
],
|
|
53
|
+
url: [
|
|
54
|
+
"footer",
|
|
55
|
+
"group",
|
|
56
|
+
"item",
|
|
57
|
+
"link"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
nestedFieldKeywords: ["group", "item"],
|
|
61
|
+
error: parseSharedError
|
|
62
|
+
});
|
|
63
|
+
const groups = [];
|
|
64
|
+
const shell = {
|
|
65
|
+
header: {
|
|
66
|
+
title: declaration.id,
|
|
67
|
+
actions: []
|
|
68
|
+
},
|
|
69
|
+
menu: { groups }
|
|
70
|
+
};
|
|
71
|
+
let actionOrder = 1;
|
|
72
|
+
let linkOrder = 1;
|
|
73
|
+
for (const field of declaration.fields) {
|
|
74
|
+
if (field.name.value === "subtitle") {
|
|
75
|
+
shell.header ??= {};
|
|
76
|
+
shell.header.subtitle = parseSingleStringField(field, "Expected subtitle \"<text>\"");
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (field.name.value === "logo") {
|
|
80
|
+
shell.header ??= {};
|
|
81
|
+
shell.header.logo = parseSingleStringField(field, "Expected logo \"<text>\"");
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (field.name.value === "action") {
|
|
85
|
+
const parsed = parseOptionalIdTitleArrowField(field, "Expected action [id] \"Title\" -> <target>");
|
|
86
|
+
shell.header ??= {};
|
|
87
|
+
shell.header.actions ??= [];
|
|
88
|
+
shell.header.actions.push({
|
|
89
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
90
|
+
title: parsed.title,
|
|
91
|
+
target: parseTarget(parsed.targetAndOptions, field.name.line),
|
|
92
|
+
order: actionOrder++
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (field.name.value === "footer") {
|
|
97
|
+
shell.footer ??= {};
|
|
98
|
+
shell.footer.text = parseSingleStringField(field, "Expected footer \"<text>\"");
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (field.name.value === "link") {
|
|
102
|
+
const parsed = parseOptionalIdTitleArrowField(field, "Expected link [id] \"Title\" -> <target>");
|
|
103
|
+
shell.footer ??= {};
|
|
104
|
+
shell.footer.links ??= [];
|
|
105
|
+
shell.footer.links.push({
|
|
106
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
107
|
+
title: parsed.title,
|
|
108
|
+
target: parseTarget(parsed.targetAndOptions, field.name.line),
|
|
109
|
+
order: linkOrder++
|
|
110
|
+
});
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (field.name.value === "group") {
|
|
114
|
+
groups.push(parseGroupField(field, groups.length + 1));
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
throw parseError(field.name.line, `Unsupported shell DSL line: ${field.name.value}`, field.name.column);
|
|
118
|
+
}
|
|
119
|
+
if (groups.length === 0) delete shell.menu;
|
|
120
|
+
if (shell.header?.actions?.length === 0) delete shell.header.actions;
|
|
121
|
+
if (shell.footer?.links?.length === 0) delete shell.footer.links;
|
|
122
|
+
return shell;
|
|
123
|
+
}
|
|
124
|
+
function formatShellDsl(source) {
|
|
125
|
+
const shell = compileShellDsl(source);
|
|
126
|
+
const lines = [`shell ${quote(shell.header?.title ?? "App")} {`];
|
|
127
|
+
if (shell.header?.subtitle) lines.push(` subtitle ${quote(shell.header.subtitle)}`);
|
|
128
|
+
if (shell.header?.logo) lines.push(` logo ${quote(shell.header.logo)}`);
|
|
129
|
+
for (const action of shell.header?.actions ?? []) lines.push(` action ${formatOptionalId(action.id, action.title)}${quote(action.title)} -> ${formatTarget(action.target)}`);
|
|
130
|
+
if (shell.footer?.text) lines.push(` footer ${quote(shell.footer.text)}`);
|
|
131
|
+
for (const link of shell.footer?.links ?? []) lines.push(` link ${formatOptionalId(link.id, link.title)}${quote(link.title)} -> ${formatTarget(link.target)}`);
|
|
132
|
+
const groups = shell.menu?.groups ?? [];
|
|
133
|
+
if (groups.length > 0) lines.push("");
|
|
134
|
+
groups.forEach((group, index) => {
|
|
135
|
+
if (index > 0) lines.push("");
|
|
136
|
+
lines.push(` group ${formatOptionalId(group.id, group.title)}${quote(group.title)} {`);
|
|
137
|
+
for (const item of group.items) lines.push(...formatMenuItem(item, 4));
|
|
138
|
+
lines.push(" }");
|
|
139
|
+
});
|
|
140
|
+
lines.push("}");
|
|
141
|
+
return `${lines.join("\n")}\n`;
|
|
142
|
+
}
|
|
143
|
+
function formatMenuItem(item, indent) {
|
|
144
|
+
const prefix = " ".repeat(indent);
|
|
145
|
+
if (item.children && item.children.length > 0) {
|
|
146
|
+
const lines = [`${prefix}item ${formatOptionalId(item.id, item.title)}${quote(item.title)} {`];
|
|
147
|
+
for (const child of item.children) lines.push(...formatMenuItem(child, indent + 2));
|
|
148
|
+
lines.push(`${prefix}}`);
|
|
149
|
+
return lines;
|
|
150
|
+
}
|
|
151
|
+
const options = [item.badge ? `badge ${formatBareOrQuoted(item.badge)}` : void 0, item.placement && item.placement.length > 0 ? `placement ${item.placement.join(" ")}` : void 0].filter(Boolean).join(" ");
|
|
152
|
+
const suffix = options ? ` ${options}` : "";
|
|
153
|
+
return [`${prefix}item ${formatOptionalId(item.id, item.title)}${quote(item.title)} -> ${formatTarget(item.target)}${suffix}`];
|
|
154
|
+
}
|
|
155
|
+
function parseGroupField(field, order) {
|
|
156
|
+
const parsed = parseOptionalIdTitleField(field, "Expected group [id] \"Title\" {");
|
|
157
|
+
return {
|
|
158
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
159
|
+
title: parsed.title,
|
|
160
|
+
order,
|
|
161
|
+
items: parseMenuItems(field.children ?? [])
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function parseMenuItems(fields) {
|
|
165
|
+
return fields.map((field, index) => parseMenuItemField(field, index + 1));
|
|
166
|
+
}
|
|
167
|
+
function parseMenuItemField(field, order) {
|
|
168
|
+
if (field.name.value !== "item") throw parseError(field.name.line, `Unsupported menu item DSL line: ${field.name.value}`, field.name.column);
|
|
169
|
+
if (field.children) {
|
|
170
|
+
const parsed$1 = parseOptionalIdTitleField(field, "Expected item [id] \"Title\" {");
|
|
171
|
+
return {
|
|
172
|
+
id: parsed$1.id ?? slugify(parsed$1.title),
|
|
173
|
+
title: parsed$1.title,
|
|
174
|
+
order,
|
|
175
|
+
children: parseMenuItems(field.children)
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const parsed = parseOptionalIdTitleArrowField(field, "Expected item [id] \"Title\" -> <target>");
|
|
179
|
+
const placement = parsePlacement(parsed.targetAndOptions);
|
|
180
|
+
const badge = parseBadge(parsed.targetAndOptions);
|
|
181
|
+
return {
|
|
182
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
183
|
+
title: parsed.title,
|
|
184
|
+
target: parseTarget(parsed.targetAndOptions, field.name.line),
|
|
185
|
+
...placement ? { placement } : {},
|
|
186
|
+
...badge ? { badge } : {},
|
|
187
|
+
order
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function parseOptionalIdTitleArrowField(field, message) {
|
|
191
|
+
const parsed = parseOptionalIdTitleField(field, message);
|
|
192
|
+
const arrow = field.values[parsed.nextIndex];
|
|
193
|
+
if (arrow?.type !== "word" || arrow.value !== "->") throw parseError(arrow?.line ?? field.name.line, message, arrow?.column ?? field.name.column);
|
|
194
|
+
return {
|
|
195
|
+
id: parsed.id,
|
|
196
|
+
title: parsed.title,
|
|
197
|
+
targetAndOptions: joinDslValues(field.values.slice(parsed.nextIndex + 1))
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function parseOptionalIdTitleField(field, message) {
|
|
201
|
+
const first = field.values[0];
|
|
202
|
+
const second = field.values[1];
|
|
203
|
+
if (first?.type === "string") return {
|
|
204
|
+
title: require_dsl_shared.parseDslStringToken(first, parseSharedError),
|
|
205
|
+
nextIndex: 1
|
|
206
|
+
};
|
|
207
|
+
if (first?.type === "word" && second?.type === "string") return {
|
|
208
|
+
id: first.value,
|
|
209
|
+
title: require_dsl_shared.parseDslStringToken(second, parseSharedError),
|
|
210
|
+
nextIndex: 2
|
|
211
|
+
};
|
|
212
|
+
throw parseError(first?.line ?? field.name.line, message, first?.column ?? field.name.column);
|
|
213
|
+
}
|
|
214
|
+
function parseSingleStringField(field, message) {
|
|
215
|
+
const value = field.values[0];
|
|
216
|
+
if (field.values.length !== 1 || value?.type !== "string") throw parseError(value?.line ?? field.name.line, message, value?.column ?? field.name.column);
|
|
217
|
+
return require_dsl_shared.parseDslStringToken(value, parseSharedError);
|
|
218
|
+
}
|
|
219
|
+
function joinDslValues(tokens) {
|
|
220
|
+
return tokens.map((token) => token.value).join(" ");
|
|
221
|
+
}
|
|
222
|
+
function parseSharedError(message, line, column = 1) {
|
|
223
|
+
return parseError(line, message, column);
|
|
224
|
+
}
|
|
225
|
+
function formatTarget(target) {
|
|
226
|
+
if (!target) return "route \"/\"";
|
|
227
|
+
if (target.kind === "module" || target.kind === "surface") return `${target.kind} ${target.ref ?? ""}`.trim();
|
|
228
|
+
if (target.kind === "route") return `route ${quote(target.ref ?? "/")}`;
|
|
229
|
+
if (target.kind === "url") return `url ${quote(target.href ?? target.ref ?? "")}`;
|
|
230
|
+
return `${target.kind} ${quote(target.ref ?? target.href ?? "")}`;
|
|
231
|
+
}
|
|
232
|
+
function formatOptionalId(id, title) {
|
|
233
|
+
return id && id !== slugify(title) ? `${id} ` : "";
|
|
234
|
+
}
|
|
235
|
+
function formatBareOrQuoted(value) {
|
|
236
|
+
return /^[A-Za-z0-9_-]+$/.test(value) ? value : quote(value);
|
|
237
|
+
}
|
|
238
|
+
function parseTarget(input, lineNumber) {
|
|
239
|
+
const target = input.match(/* @__PURE__ */ new RegExp(`^(module|surface)\\s+([A-Za-z0-9_-]+)|^(route|url)\\s+${STRING}`));
|
|
240
|
+
if (!target) throw parseError(lineNumber, `Expected target after ->, got: ${input}`);
|
|
241
|
+
if (target[1] && target[2]) return {
|
|
242
|
+
kind: target[1],
|
|
243
|
+
ref: target[2]
|
|
244
|
+
};
|
|
245
|
+
if (target[3] === "route" && target[4]) return {
|
|
246
|
+
kind: "route",
|
|
247
|
+
ref: unescapeString(target[4])
|
|
248
|
+
};
|
|
249
|
+
if (target[3] === "url" && target[4]) return {
|
|
250
|
+
kind: "url",
|
|
251
|
+
href: unescapeString(target[4])
|
|
252
|
+
};
|
|
253
|
+
throw parseError(lineNumber, `Invalid target: ${input}`);
|
|
254
|
+
}
|
|
255
|
+
function parsePlacement(input) {
|
|
256
|
+
const match = input.match(/\bplacement\s+([A-Za-z0-9_ -]+)$/);
|
|
257
|
+
if (!match?.[1]) return void 0;
|
|
258
|
+
return match[1].trim().split(/\s+/).filter(Boolean);
|
|
259
|
+
}
|
|
260
|
+
function parseBadge(input) {
|
|
261
|
+
const match = input.match(/* @__PURE__ */ new RegExp(`\\bbadge\\s+(?:${STRING}|([A-Za-z0-9_-]+))`));
|
|
262
|
+
return match?.[1] ? unescapeString(match[1]) : match?.[2];
|
|
263
|
+
}
|
|
264
|
+
function unescapeString(value) {
|
|
265
|
+
return value.replace(/\\"/g, "\"").replace(/\\\\/g, "\\");
|
|
266
|
+
}
|
|
267
|
+
function quote(value) {
|
|
268
|
+
return JSON.stringify(value);
|
|
269
|
+
}
|
|
270
|
+
function slugify(value) {
|
|
271
|
+
return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "item";
|
|
272
|
+
}
|
|
273
|
+
function parseError(line, message, column = 1) {
|
|
274
|
+
return require_dsl_error.scaffoldDslParseError("shell", line, message, column);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
//#endregion
|
|
278
|
+
exports.compileShellDsl = compileShellDsl;
|
|
279
|
+
exports.formatShellDsl = formatShellDsl;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ScaffoldShellDefinition } from "./types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/scaffold/shell-dsl.d.ts
|
|
4
|
+
declare function compileShellDsl(source: string): ScaffoldShellDefinition;
|
|
5
|
+
declare function formatShellDsl(source: string): string;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { compileShellDsl, formatShellDsl };
|
|
8
|
+
//# sourceMappingURL=shell-dsl.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-dsl.d.cts","names":[],"sources":["../../src/scaffold/shell-dsl.ts"],"mappings":";;;iBAiBgB,eAAA,CAAgB,MAAA,WAAiB,uBAAA;AAAA,iBA4FjC,cAAA,CAAe,MAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ScaffoldShellDefinition } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/scaffold/shell-dsl.d.ts
|
|
4
|
+
declare function compileShellDsl(source: string): ScaffoldShellDefinition;
|
|
5
|
+
declare function formatShellDsl(source: string): string;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { compileShellDsl, formatShellDsl };
|
|
8
|
+
//# sourceMappingURL=shell-dsl.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-dsl.d.mts","names":[],"sources":["../../src/scaffold/shell-dsl.ts"],"mappings":";;;iBAiBgB,eAAA,CAAgB,MAAA,WAAiB,uBAAA;AAAA,iBA4FjC,cAAA,CAAe,MAAA"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { parseDeclaration, parseDslStringToken } from "../dsl-shared.mjs";
|
|
2
|
+
import { scaffoldDslParseError } from "./dsl-error.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/scaffold/shell-dsl.ts
|
|
5
|
+
const STRING = "\"((?:[^\"\\\\]|\\\\.)*)\"";
|
|
6
|
+
function compileShellDsl(source) {
|
|
7
|
+
const declaration = parseDeclaration(source, {
|
|
8
|
+
kind: "shell",
|
|
9
|
+
allowQuotedId: true,
|
|
10
|
+
expected: "Expected shell \"Title\" {",
|
|
11
|
+
fieldKeywords: [
|
|
12
|
+
"subtitle",
|
|
13
|
+
"logo",
|
|
14
|
+
"action",
|
|
15
|
+
"footer",
|
|
16
|
+
"link",
|
|
17
|
+
"group",
|
|
18
|
+
"item"
|
|
19
|
+
],
|
|
20
|
+
fieldContinuationPairs: {
|
|
21
|
+
"->": [
|
|
22
|
+
"footer",
|
|
23
|
+
"group",
|
|
24
|
+
"item",
|
|
25
|
+
"link"
|
|
26
|
+
],
|
|
27
|
+
badge: [
|
|
28
|
+
"footer",
|
|
29
|
+
"group",
|
|
30
|
+
"item",
|
|
31
|
+
"link"
|
|
32
|
+
],
|
|
33
|
+
header: ["footer"],
|
|
34
|
+
module: [
|
|
35
|
+
"footer",
|
|
36
|
+
"group",
|
|
37
|
+
"item",
|
|
38
|
+
"link"
|
|
39
|
+
],
|
|
40
|
+
placement: ["footer", "header"],
|
|
41
|
+
route: [
|
|
42
|
+
"footer",
|
|
43
|
+
"group",
|
|
44
|
+
"item",
|
|
45
|
+
"link"
|
|
46
|
+
],
|
|
47
|
+
surface: [
|
|
48
|
+
"footer",
|
|
49
|
+
"group",
|
|
50
|
+
"item",
|
|
51
|
+
"link"
|
|
52
|
+
],
|
|
53
|
+
url: [
|
|
54
|
+
"footer",
|
|
55
|
+
"group",
|
|
56
|
+
"item",
|
|
57
|
+
"link"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
nestedFieldKeywords: ["group", "item"],
|
|
61
|
+
error: parseSharedError
|
|
62
|
+
});
|
|
63
|
+
const groups = [];
|
|
64
|
+
const shell = {
|
|
65
|
+
header: {
|
|
66
|
+
title: declaration.id,
|
|
67
|
+
actions: []
|
|
68
|
+
},
|
|
69
|
+
menu: { groups }
|
|
70
|
+
};
|
|
71
|
+
let actionOrder = 1;
|
|
72
|
+
let linkOrder = 1;
|
|
73
|
+
for (const field of declaration.fields) {
|
|
74
|
+
if (field.name.value === "subtitle") {
|
|
75
|
+
shell.header ??= {};
|
|
76
|
+
shell.header.subtitle = parseSingleStringField(field, "Expected subtitle \"<text>\"");
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (field.name.value === "logo") {
|
|
80
|
+
shell.header ??= {};
|
|
81
|
+
shell.header.logo = parseSingleStringField(field, "Expected logo \"<text>\"");
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (field.name.value === "action") {
|
|
85
|
+
const parsed = parseOptionalIdTitleArrowField(field, "Expected action [id] \"Title\" -> <target>");
|
|
86
|
+
shell.header ??= {};
|
|
87
|
+
shell.header.actions ??= [];
|
|
88
|
+
shell.header.actions.push({
|
|
89
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
90
|
+
title: parsed.title,
|
|
91
|
+
target: parseTarget(parsed.targetAndOptions, field.name.line),
|
|
92
|
+
order: actionOrder++
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (field.name.value === "footer") {
|
|
97
|
+
shell.footer ??= {};
|
|
98
|
+
shell.footer.text = parseSingleStringField(field, "Expected footer \"<text>\"");
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (field.name.value === "link") {
|
|
102
|
+
const parsed = parseOptionalIdTitleArrowField(field, "Expected link [id] \"Title\" -> <target>");
|
|
103
|
+
shell.footer ??= {};
|
|
104
|
+
shell.footer.links ??= [];
|
|
105
|
+
shell.footer.links.push({
|
|
106
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
107
|
+
title: parsed.title,
|
|
108
|
+
target: parseTarget(parsed.targetAndOptions, field.name.line),
|
|
109
|
+
order: linkOrder++
|
|
110
|
+
});
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (field.name.value === "group") {
|
|
114
|
+
groups.push(parseGroupField(field, groups.length + 1));
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
throw parseError(field.name.line, `Unsupported shell DSL line: ${field.name.value}`, field.name.column);
|
|
118
|
+
}
|
|
119
|
+
if (groups.length === 0) delete shell.menu;
|
|
120
|
+
if (shell.header?.actions?.length === 0) delete shell.header.actions;
|
|
121
|
+
if (shell.footer?.links?.length === 0) delete shell.footer.links;
|
|
122
|
+
return shell;
|
|
123
|
+
}
|
|
124
|
+
function formatShellDsl(source) {
|
|
125
|
+
const shell = compileShellDsl(source);
|
|
126
|
+
const lines = [`shell ${quote(shell.header?.title ?? "App")} {`];
|
|
127
|
+
if (shell.header?.subtitle) lines.push(` subtitle ${quote(shell.header.subtitle)}`);
|
|
128
|
+
if (shell.header?.logo) lines.push(` logo ${quote(shell.header.logo)}`);
|
|
129
|
+
for (const action of shell.header?.actions ?? []) lines.push(` action ${formatOptionalId(action.id, action.title)}${quote(action.title)} -> ${formatTarget(action.target)}`);
|
|
130
|
+
if (shell.footer?.text) lines.push(` footer ${quote(shell.footer.text)}`);
|
|
131
|
+
for (const link of shell.footer?.links ?? []) lines.push(` link ${formatOptionalId(link.id, link.title)}${quote(link.title)} -> ${formatTarget(link.target)}`);
|
|
132
|
+
const groups = shell.menu?.groups ?? [];
|
|
133
|
+
if (groups.length > 0) lines.push("");
|
|
134
|
+
groups.forEach((group, index) => {
|
|
135
|
+
if (index > 0) lines.push("");
|
|
136
|
+
lines.push(` group ${formatOptionalId(group.id, group.title)}${quote(group.title)} {`);
|
|
137
|
+
for (const item of group.items) lines.push(...formatMenuItem(item, 4));
|
|
138
|
+
lines.push(" }");
|
|
139
|
+
});
|
|
140
|
+
lines.push("}");
|
|
141
|
+
return `${lines.join("\n")}\n`;
|
|
142
|
+
}
|
|
143
|
+
function formatMenuItem(item, indent) {
|
|
144
|
+
const prefix = " ".repeat(indent);
|
|
145
|
+
if (item.children && item.children.length > 0) {
|
|
146
|
+
const lines = [`${prefix}item ${formatOptionalId(item.id, item.title)}${quote(item.title)} {`];
|
|
147
|
+
for (const child of item.children) lines.push(...formatMenuItem(child, indent + 2));
|
|
148
|
+
lines.push(`${prefix}}`);
|
|
149
|
+
return lines;
|
|
150
|
+
}
|
|
151
|
+
const options = [item.badge ? `badge ${formatBareOrQuoted(item.badge)}` : void 0, item.placement && item.placement.length > 0 ? `placement ${item.placement.join(" ")}` : void 0].filter(Boolean).join(" ");
|
|
152
|
+
const suffix = options ? ` ${options}` : "";
|
|
153
|
+
return [`${prefix}item ${formatOptionalId(item.id, item.title)}${quote(item.title)} -> ${formatTarget(item.target)}${suffix}`];
|
|
154
|
+
}
|
|
155
|
+
function parseGroupField(field, order) {
|
|
156
|
+
const parsed = parseOptionalIdTitleField(field, "Expected group [id] \"Title\" {");
|
|
157
|
+
return {
|
|
158
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
159
|
+
title: parsed.title,
|
|
160
|
+
order,
|
|
161
|
+
items: parseMenuItems(field.children ?? [])
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function parseMenuItems(fields) {
|
|
165
|
+
return fields.map((field, index) => parseMenuItemField(field, index + 1));
|
|
166
|
+
}
|
|
167
|
+
function parseMenuItemField(field, order) {
|
|
168
|
+
if (field.name.value !== "item") throw parseError(field.name.line, `Unsupported menu item DSL line: ${field.name.value}`, field.name.column);
|
|
169
|
+
if (field.children) {
|
|
170
|
+
const parsed$1 = parseOptionalIdTitleField(field, "Expected item [id] \"Title\" {");
|
|
171
|
+
return {
|
|
172
|
+
id: parsed$1.id ?? slugify(parsed$1.title),
|
|
173
|
+
title: parsed$1.title,
|
|
174
|
+
order,
|
|
175
|
+
children: parseMenuItems(field.children)
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const parsed = parseOptionalIdTitleArrowField(field, "Expected item [id] \"Title\" -> <target>");
|
|
179
|
+
const placement = parsePlacement(parsed.targetAndOptions);
|
|
180
|
+
const badge = parseBadge(parsed.targetAndOptions);
|
|
181
|
+
return {
|
|
182
|
+
id: parsed.id ?? slugify(parsed.title),
|
|
183
|
+
title: parsed.title,
|
|
184
|
+
target: parseTarget(parsed.targetAndOptions, field.name.line),
|
|
185
|
+
...placement ? { placement } : {},
|
|
186
|
+
...badge ? { badge } : {},
|
|
187
|
+
order
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function parseOptionalIdTitleArrowField(field, message) {
|
|
191
|
+
const parsed = parseOptionalIdTitleField(field, message);
|
|
192
|
+
const arrow = field.values[parsed.nextIndex];
|
|
193
|
+
if (arrow?.type !== "word" || arrow.value !== "->") throw parseError(arrow?.line ?? field.name.line, message, arrow?.column ?? field.name.column);
|
|
194
|
+
return {
|
|
195
|
+
id: parsed.id,
|
|
196
|
+
title: parsed.title,
|
|
197
|
+
targetAndOptions: joinDslValues(field.values.slice(parsed.nextIndex + 1))
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function parseOptionalIdTitleField(field, message) {
|
|
201
|
+
const first = field.values[0];
|
|
202
|
+
const second = field.values[1];
|
|
203
|
+
if (first?.type === "string") return {
|
|
204
|
+
title: parseDslStringToken(first, parseSharedError),
|
|
205
|
+
nextIndex: 1
|
|
206
|
+
};
|
|
207
|
+
if (first?.type === "word" && second?.type === "string") return {
|
|
208
|
+
id: first.value,
|
|
209
|
+
title: parseDslStringToken(second, parseSharedError),
|
|
210
|
+
nextIndex: 2
|
|
211
|
+
};
|
|
212
|
+
throw parseError(first?.line ?? field.name.line, message, first?.column ?? field.name.column);
|
|
213
|
+
}
|
|
214
|
+
function parseSingleStringField(field, message) {
|
|
215
|
+
const value = field.values[0];
|
|
216
|
+
if (field.values.length !== 1 || value?.type !== "string") throw parseError(value?.line ?? field.name.line, message, value?.column ?? field.name.column);
|
|
217
|
+
return parseDslStringToken(value, parseSharedError);
|
|
218
|
+
}
|
|
219
|
+
function joinDslValues(tokens) {
|
|
220
|
+
return tokens.map((token) => token.value).join(" ");
|
|
221
|
+
}
|
|
222
|
+
function parseSharedError(message, line, column = 1) {
|
|
223
|
+
return parseError(line, message, column);
|
|
224
|
+
}
|
|
225
|
+
function formatTarget(target) {
|
|
226
|
+
if (!target) return "route \"/\"";
|
|
227
|
+
if (target.kind === "module" || target.kind === "surface") return `${target.kind} ${target.ref ?? ""}`.trim();
|
|
228
|
+
if (target.kind === "route") return `route ${quote(target.ref ?? "/")}`;
|
|
229
|
+
if (target.kind === "url") return `url ${quote(target.href ?? target.ref ?? "")}`;
|
|
230
|
+
return `${target.kind} ${quote(target.ref ?? target.href ?? "")}`;
|
|
231
|
+
}
|
|
232
|
+
function formatOptionalId(id, title) {
|
|
233
|
+
return id && id !== slugify(title) ? `${id} ` : "";
|
|
234
|
+
}
|
|
235
|
+
function formatBareOrQuoted(value) {
|
|
236
|
+
return /^[A-Za-z0-9_-]+$/.test(value) ? value : quote(value);
|
|
237
|
+
}
|
|
238
|
+
function parseTarget(input, lineNumber) {
|
|
239
|
+
const target = input.match(/* @__PURE__ */ new RegExp(`^(module|surface)\\s+([A-Za-z0-9_-]+)|^(route|url)\\s+${STRING}`));
|
|
240
|
+
if (!target) throw parseError(lineNumber, `Expected target after ->, got: ${input}`);
|
|
241
|
+
if (target[1] && target[2]) return {
|
|
242
|
+
kind: target[1],
|
|
243
|
+
ref: target[2]
|
|
244
|
+
};
|
|
245
|
+
if (target[3] === "route" && target[4]) return {
|
|
246
|
+
kind: "route",
|
|
247
|
+
ref: unescapeString(target[4])
|
|
248
|
+
};
|
|
249
|
+
if (target[3] === "url" && target[4]) return {
|
|
250
|
+
kind: "url",
|
|
251
|
+
href: unescapeString(target[4])
|
|
252
|
+
};
|
|
253
|
+
throw parseError(lineNumber, `Invalid target: ${input}`);
|
|
254
|
+
}
|
|
255
|
+
function parsePlacement(input) {
|
|
256
|
+
const match = input.match(/\bplacement\s+([A-Za-z0-9_ -]+)$/);
|
|
257
|
+
if (!match?.[1]) return void 0;
|
|
258
|
+
return match[1].trim().split(/\s+/).filter(Boolean);
|
|
259
|
+
}
|
|
260
|
+
function parseBadge(input) {
|
|
261
|
+
const match = input.match(/* @__PURE__ */ new RegExp(`\\bbadge\\s+(?:${STRING}|([A-Za-z0-9_-]+))`));
|
|
262
|
+
return match?.[1] ? unescapeString(match[1]) : match?.[2];
|
|
263
|
+
}
|
|
264
|
+
function unescapeString(value) {
|
|
265
|
+
return value.replace(/\\"/g, "\"").replace(/\\\\/g, "\\");
|
|
266
|
+
}
|
|
267
|
+
function quote(value) {
|
|
268
|
+
return JSON.stringify(value);
|
|
269
|
+
}
|
|
270
|
+
function slugify(value) {
|
|
271
|
+
return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "item";
|
|
272
|
+
}
|
|
273
|
+
function parseError(line, message, column = 1) {
|
|
274
|
+
return scaffoldDslParseError("shell", line, message, column);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
//#endregion
|
|
278
|
+
export { compileShellDsl, formatShellDsl };
|
|
279
|
+
//# sourceMappingURL=shell-dsl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-dsl.mjs","names":["parsed"],"sources":["../../src/scaffold/shell-dsl.ts"],"sourcesContent":["import {\n type DslField,\n type DslToken,\n parseDeclaration,\n parseDslStringToken,\n} from \"../dsl-shared.js\";\nimport { scaffoldDslParseError } from \"./dsl-error.js\";\nimport type {\n ScaffoldMenuDefinition,\n ScaffoldMenuItem,\n ScaffoldShellAction,\n ScaffoldShellDefinition,\n ScaffoldTargetRef,\n} from \"./types.js\";\n\nconst STRING = '\"((?:[^\"\\\\\\\\]|\\\\\\\\.)*)\"';\n\nexport function compileShellDsl(source: string): ScaffoldShellDefinition {\n const declaration = parseDeclaration(source, {\n kind: \"shell\",\n allowQuotedId: true,\n expected: 'Expected shell \"Title\" {',\n fieldKeywords: [\"subtitle\", \"logo\", \"action\", \"footer\", \"link\", \"group\", \"item\"],\n fieldContinuationPairs: {\n \"->\": [\"footer\", \"group\", \"item\", \"link\"],\n badge: [\"footer\", \"group\", \"item\", \"link\"],\n header: [\"footer\"],\n module: [\"footer\", \"group\", \"item\", \"link\"],\n placement: [\"footer\", \"header\"],\n route: [\"footer\", \"group\", \"item\", \"link\"],\n surface: [\"footer\", \"group\", \"item\", \"link\"],\n url: [\"footer\", \"group\", \"item\", \"link\"],\n },\n nestedFieldKeywords: [\"group\", \"item\"],\n error: parseSharedError,\n });\n\n const groups: NonNullable<ScaffoldMenuDefinition[\"groups\"]> = [];\n const shell: ScaffoldShellDefinition = {\n header: { title: declaration.id, actions: [] },\n menu: { groups },\n };\n\n let actionOrder = 1;\n let linkOrder = 1;\n for (const field of declaration.fields) {\n if (field.name.value === \"subtitle\") {\n shell.header ??= {};\n shell.header.subtitle = parseSingleStringField(field, 'Expected subtitle \"<text>\"');\n continue;\n }\n if (field.name.value === \"logo\") {\n shell.header ??= {};\n shell.header.logo = parseSingleStringField(field, 'Expected logo \"<text>\"');\n continue;\n }\n if (field.name.value === \"action\") {\n const parsed = parseOptionalIdTitleArrowField(\n field,\n 'Expected action [id] \"Title\" -> <target>',\n );\n shell.header ??= {};\n shell.header.actions ??= [];\n shell.header.actions.push({\n id: parsed.id ?? slugify(parsed.title),\n title: parsed.title,\n target: parseTarget(parsed.targetAndOptions, field.name.line),\n order: actionOrder++,\n } satisfies ScaffoldShellAction);\n continue;\n }\n if (field.name.value === \"footer\") {\n shell.footer ??= {};\n shell.footer.text = parseSingleStringField(field, 'Expected footer \"<text>\"');\n continue;\n }\n if (field.name.value === \"link\") {\n const parsed = parseOptionalIdTitleArrowField(\n field,\n 'Expected link [id] \"Title\" -> <target>',\n );\n shell.footer ??= {};\n shell.footer.links ??= [];\n shell.footer.links.push({\n id: parsed.id ?? slugify(parsed.title),\n title: parsed.title,\n target: parseTarget(parsed.targetAndOptions, field.name.line),\n order: linkOrder++,\n });\n continue;\n }\n if (field.name.value === \"group\") {\n groups.push(parseGroupField(field, groups.length + 1));\n continue;\n }\n\n throw parseError(\n field.name.line,\n `Unsupported shell DSL line: ${field.name.value}`,\n field.name.column,\n );\n }\n\n if (groups.length === 0) delete shell.menu;\n if (shell.header?.actions?.length === 0) delete shell.header.actions;\n if (shell.footer?.links?.length === 0) delete shell.footer.links;\n return shell;\n}\n\nexport function formatShellDsl(source: string): string {\n const shell = compileShellDsl(source);\n const title = shell.header?.title ?? \"App\";\n const lines = [`shell ${quote(title)} {`];\n if (shell.header?.subtitle) lines.push(` subtitle ${quote(shell.header.subtitle)}`);\n if (shell.header?.logo) lines.push(` logo ${quote(shell.header.logo)}`);\n for (const action of shell.header?.actions ?? []) {\n lines.push(\n ` action ${formatOptionalId(action.id, action.title)}${quote(action.title)} -> ${formatTarget(\n action.target,\n )}`,\n );\n }\n if (shell.footer?.text) lines.push(` footer ${quote(shell.footer.text)}`);\n for (const link of shell.footer?.links ?? []) {\n lines.push(\n ` link ${formatOptionalId(link.id, link.title)}${quote(link.title)} -> ${formatTarget(\n link.target,\n )}`,\n );\n }\n\n const groups = shell.menu?.groups ?? [];\n if (groups.length > 0) lines.push(\"\");\n groups.forEach((group, index) => {\n if (index > 0) lines.push(\"\");\n lines.push(` group ${formatOptionalId(group.id, group.title)}${quote(group.title)} {`);\n for (const item of group.items) {\n lines.push(...formatMenuItem(item, 4));\n }\n lines.push(\" }\");\n });\n\n lines.push(\"}\");\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction formatMenuItem(item: ScaffoldMenuItem, indent: number): string[] {\n const prefix = \" \".repeat(indent);\n if (item.children && item.children.length > 0) {\n const lines = [`${prefix}item ${formatOptionalId(item.id, item.title)}${quote(item.title)} {`];\n for (const child of item.children) {\n lines.push(...formatMenuItem(child, indent + 2));\n }\n lines.push(`${prefix}}`);\n return lines;\n }\n\n const options = [\n item.badge ? `badge ${formatBareOrQuoted(item.badge)}` : undefined,\n item.placement && item.placement.length > 0\n ? `placement ${item.placement.join(\" \")}`\n : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n const suffix = options ? ` ${options}` : \"\";\n return [\n `${prefix}item ${formatOptionalId(item.id, item.title)}${quote(item.title)} -> ${formatTarget(\n item.target,\n )}${suffix}`,\n ];\n}\n\nfunction parseGroupField(\n field: DslField,\n order: number,\n): NonNullable<ScaffoldMenuDefinition[\"groups\"]>[number] {\n const parsed = parseOptionalIdTitleField(field, 'Expected group [id] \"Title\" {');\n return {\n id: parsed.id ?? slugify(parsed.title),\n title: parsed.title,\n order,\n items: parseMenuItems(field.children ?? []),\n };\n}\n\nfunction parseMenuItems(fields: DslField[]): ScaffoldMenuItem[] {\n return fields.map((field, index) => parseMenuItemField(field, index + 1));\n}\n\nfunction parseMenuItemField(field: DslField, order: number): ScaffoldMenuItem {\n if (field.name.value !== \"item\") {\n throw parseError(\n field.name.line,\n `Unsupported menu item DSL line: ${field.name.value}`,\n field.name.column,\n );\n }\n\n if (field.children) {\n const parsed = parseOptionalIdTitleField(field, 'Expected item [id] \"Title\" {');\n return {\n id: parsed.id ?? slugify(parsed.title),\n title: parsed.title,\n order,\n children: parseMenuItems(field.children),\n };\n }\n\n const parsed = parseOptionalIdTitleArrowField(field, 'Expected item [id] \"Title\" -> <target>');\n const placement = parsePlacement(parsed.targetAndOptions);\n const badge = parseBadge(parsed.targetAndOptions);\n return {\n id: parsed.id ?? slugify(parsed.title),\n title: parsed.title,\n target: parseTarget(parsed.targetAndOptions, field.name.line),\n ...(placement ? { placement } : {}),\n ...(badge ? { badge } : {}),\n order,\n };\n}\n\nfunction parseOptionalIdTitleArrowField(\n field: DslField,\n message: string,\n): { id?: string; targetAndOptions: string; title: string } {\n const parsed = parseOptionalIdTitleField(field, message);\n const arrow = field.values[parsed.nextIndex];\n if (arrow?.type !== \"word\" || arrow.value !== \"->\") {\n throw parseError(arrow?.line ?? field.name.line, message, arrow?.column ?? field.name.column);\n }\n return {\n id: parsed.id,\n title: parsed.title,\n targetAndOptions: joinDslValues(field.values.slice(parsed.nextIndex + 1)),\n };\n}\n\nfunction parseOptionalIdTitleField(\n field: DslField,\n message: string,\n): { id?: string; nextIndex: number; title: string } {\n const first = field.values[0];\n const second = field.values[1];\n if (first?.type === \"string\") {\n return { title: parseDslStringToken(first, parseSharedError), nextIndex: 1 };\n }\n if (first?.type === \"word\" && second?.type === \"string\") {\n return {\n id: first.value,\n title: parseDslStringToken(second, parseSharedError),\n nextIndex: 2,\n };\n }\n throw parseError(first?.line ?? field.name.line, message, first?.column ?? field.name.column);\n}\n\nfunction parseSingleStringField(field: DslField, message: string): string {\n const value = field.values[0];\n if (field.values.length !== 1 || value?.type !== \"string\") {\n throw parseError(value?.line ?? field.name.line, message, value?.column ?? field.name.column);\n }\n return parseDslStringToken(value, parseSharedError);\n}\n\nfunction joinDslValues(tokens: DslToken[]): string {\n return tokens.map((token) => token.value).join(\" \");\n}\n\nfunction parseSharedError(message: string, line: number, column = 1): Error {\n return parseError(line, message, column);\n}\n\nfunction formatTarget(target: ScaffoldTargetRef | undefined): string {\n if (!target) return 'route \"/\"';\n if (target.kind === \"module\" || target.kind === \"surface\") {\n return `${target.kind} ${target.ref ?? \"\"}`.trim();\n }\n if (target.kind === \"route\") return `route ${quote(target.ref ?? \"/\")}`;\n if (target.kind === \"url\") return `url ${quote(target.href ?? target.ref ?? \"\")}`;\n return `${target.kind} ${quote(target.ref ?? target.href ?? \"\")}`;\n}\n\nfunction formatOptionalId(id: string, title: string): string {\n return id && id !== slugify(title) ? `${id} ` : \"\";\n}\n\nfunction formatBareOrQuoted(value: string): string {\n return /^[A-Za-z0-9_-]+$/.test(value) ? value : quote(value);\n}\n\nfunction parseTarget(input: string, lineNumber: number): ScaffoldTargetRef {\n const target = input.match(\n new RegExp(`^(module|surface)\\\\s+([A-Za-z0-9_-]+)|^(route|url)\\\\s+${STRING}`),\n );\n if (!target) throw parseError(lineNumber, `Expected target after ->, got: ${input}`);\n if (target[1] && target[2]) return { kind: target[1] as \"module\" | \"surface\", ref: target[2] };\n if (target[3] === \"route\" && target[4]) {\n return { kind: \"route\", ref: unescapeString(target[4]) };\n }\n if (target[3] === \"url\" && target[4]) {\n return { kind: \"url\", href: unescapeString(target[4]) };\n }\n throw parseError(lineNumber, `Invalid target: ${input}`);\n}\n\nfunction parsePlacement(input: string): ScaffoldMenuItem[\"placement\"] | undefined {\n const match = input.match(/\\bplacement\\s+([A-Za-z0-9_ -]+)$/);\n if (!match?.[1]) return undefined;\n return match[1].trim().split(/\\s+/).filter(Boolean) as ScaffoldMenuItem[\"placement\"];\n}\n\nfunction parseBadge(input: string): string | undefined {\n const match = input.match(new RegExp(`\\\\bbadge\\\\s+(?:${STRING}|([A-Za-z0-9_-]+))`));\n return match?.[1] ? unescapeString(match[1]) : match?.[2];\n}\n\nfunction unescapeString(value: string): string {\n return value.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, \"\\\\\");\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction slugify(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"item\"\n );\n}\n\nfunction parseError(line: number, message: string, column = 1): Error {\n return scaffoldDslParseError(\"shell\", line, message, column);\n}\n"],"mappings":"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"}
|