@alloy-js/core 0.23.0-dev.11 → 0.23.0-dev.13
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/dev/src/binder.js +488 -0
- package/dist/dev/src/binder.js.map +1 -0
- package/dist/dev/src/code.js +181 -0
- package/dist/dev/src/code.js.map +1 -0
- package/dist/dev/src/components/AccessExpression.js +230 -0
- package/dist/dev/src/components/AccessExpression.js.map +1 -0
- package/dist/dev/src/components/AccessExpression.test.js +237 -0
- package/dist/dev/src/components/AccessExpression.test.js.map +1 -0
- package/dist/dev/src/components/AppendFile.js +246 -0
- package/dist/dev/src/components/AppendFile.js.map +1 -0
- package/dist/dev/src/components/Block.js +66 -0
- package/dist/dev/src/components/Block.js.map +1 -0
- package/dist/dev/src/components/CopyFile.js +16 -0
- package/dist/dev/src/components/CopyFile.js.map +1 -0
- package/dist/dev/src/components/Declaration.js +70 -0
- package/dist/dev/src/components/Declaration.js.map +1 -0
- package/dist/dev/src/components/For.js +40 -0
- package/dist/dev/src/components/For.js.map +1 -0
- package/dist/dev/src/components/Indent.js +37 -0
- package/dist/dev/src/components/Indent.js.map +1 -0
- package/dist/dev/src/components/List.js +29 -0
- package/dist/dev/src/components/List.js.map +1 -0
- package/dist/dev/src/components/MemberDeclaration.js +70 -0
- package/dist/dev/src/components/MemberDeclaration.js.map +1 -0
- package/dist/dev/src/components/MemberName.js +11 -0
- package/dist/dev/src/components/MemberName.js.map +1 -0
- package/dist/dev/src/components/MemberScope.js +57 -0
- package/dist/dev/src/components/MemberScope.js.map +1 -0
- package/dist/dev/src/components/Name.js +11 -0
- package/dist/dev/src/components/Name.js.map +1 -0
- package/dist/dev/src/components/Output.js +72 -0
- package/dist/dev/src/components/Output.js.map +1 -0
- package/dist/dev/src/components/Prose.js +32 -0
- package/dist/dev/src/components/Prose.js.map +1 -0
- package/dist/dev/src/components/ReferenceOrContent.js +12 -0
- package/dist/dev/src/components/ReferenceOrContent.js.map +1 -0
- package/dist/dev/src/components/Scope.js +50 -0
- package/dist/dev/src/components/Scope.js.map +1 -0
- package/dist/dev/src/components/Show.js +4 -0
- package/dist/dev/src/components/Show.js.map +1 -0
- package/dist/dev/src/components/SourceDirectory.js +41 -0
- package/dist/dev/src/components/SourceDirectory.js.map +1 -0
- package/dist/dev/src/components/SourceFile.js +52 -0
- package/dist/dev/src/components/SourceFile.js.map +1 -0
- package/dist/dev/src/components/StatementList.js +20 -0
- package/dist/dev/src/components/StatementList.js.map +1 -0
- package/dist/dev/src/components/Switch.js +42 -0
- package/dist/dev/src/components/Switch.js.map +1 -0
- package/dist/dev/src/components/TemplateFile.js +153 -0
- package/dist/dev/src/components/TemplateFile.js.map +1 -0
- package/dist/dev/src/components/UpdateFile.js +71 -0
- package/dist/dev/src/components/UpdateFile.js.map +1 -0
- package/dist/dev/src/components/Wrap.js +18 -0
- package/dist/dev/src/components/Wrap.js.map +1 -0
- package/dist/dev/src/components/index.js +25 -0
- package/dist/dev/src/components/index.js.map +1 -0
- package/dist/dev/src/components/stc/index.js +27 -0
- package/dist/dev/src/components/stc/index.js.map +1 -0
- package/dist/dev/src/components/stc/sti.js +10 -0
- package/dist/dev/src/components/stc/sti.js.map +1 -0
- package/dist/dev/src/content-slot.js +78 -0
- package/dist/dev/src/content-slot.js.map +1 -0
- package/dist/dev/src/content-slot.test.js +89 -0
- package/dist/dev/src/content-slot.test.js.map +1 -0
- package/dist/dev/src/context/assignment.js +46 -0
- package/dist/dev/src/context/assignment.js.map +1 -0
- package/dist/dev/src/context/binder.js +12 -0
- package/dist/dev/src/context/binder.js.map +1 -0
- package/dist/dev/src/context/declaration.js +3 -0
- package/dist/dev/src/context/declaration.js.map +1 -0
- package/dist/dev/src/context/format-options.js +32 -0
- package/dist/dev/src/context/format-options.js.map +1 -0
- package/dist/dev/src/context/index.js +11 -0
- package/dist/dev/src/context/index.js.map +1 -0
- package/dist/dev/src/context/member-declaration.js +11 -0
- package/dist/dev/src/context/member-declaration.js.map +1 -0
- package/dist/dev/src/context/member-scope.js +12 -0
- package/dist/dev/src/context/member-scope.js.map +1 -0
- package/dist/dev/src/context/name-policy.js +13 -0
- package/dist/dev/src/context/name-policy.js.map +1 -0
- package/dist/dev/src/context/scope.js +13 -0
- package/dist/dev/src/context/scope.js.map +1 -0
- package/dist/dev/src/context/source-directory.js +3 -0
- package/dist/dev/src/context/source-directory.js.map +1 -0
- package/dist/dev/src/context/source-file.js +3 -0
- package/dist/dev/src/context/source-file.js.map +1 -0
- package/dist/dev/src/context.js +47 -0
- package/dist/dev/src/context.js.map +1 -0
- package/dist/dev/src/debug/cli.js +164 -0
- package/dist/dev/src/debug/cli.js.map +1 -0
- package/dist/dev/src/debug/diagnostics.test.js +50 -0
- package/dist/dev/src/debug/diagnostics.test.js.map +1 -0
- package/dist/dev/src/debug/effects.js +293 -0
- package/dist/dev/src/debug/effects.js.map +1 -0
- package/dist/dev/src/debug/effects.test.js +280 -0
- package/dist/dev/src/debug/effects.test.js.map +1 -0
- package/dist/dev/src/debug/files.js +29 -0
- package/dist/dev/src/debug/files.js.map +1 -0
- package/dist/dev/src/debug/files.test.js +78 -0
- package/dist/dev/src/debug/files.test.js.map +1 -0
- package/dist/dev/src/debug/index.js +71 -0
- package/dist/dev/src/debug/index.js.map +1 -0
- package/dist/dev/src/debug/message-format.test.js +836 -0
- package/dist/dev/src/debug/message-format.test.js.map +1 -0
- package/dist/dev/src/debug/render-tree-orphans.test.js +365 -0
- package/dist/dev/src/debug/render-tree-orphans.test.js.map +1 -0
- package/dist/dev/src/debug/render.js +479 -0
- package/dist/dev/src/debug/render.js.map +1 -0
- package/dist/dev/src/debug/render.test.js +363 -0
- package/dist/dev/src/debug/render.test.js.map +1 -0
- package/dist/dev/src/debug/serialize.js +70 -0
- package/dist/dev/src/debug/serialize.js.map +1 -0
- package/dist/dev/src/debug/source-map.browser.js +24 -0
- package/dist/dev/src/debug/source-map.browser.js.map +1 -0
- package/dist/dev/src/debug/source-map.js +111 -0
- package/dist/dev/src/debug/source-map.js.map +1 -0
- package/dist/dev/src/debug/symbols.js +196 -0
- package/dist/dev/src/debug/symbols.js.map +1 -0
- package/dist/dev/src/debug/symbols.test.js +93 -0
- package/dist/dev/src/debug/symbols.test.js.map +1 -0
- package/dist/dev/src/debug/trace-writer.js +658 -0
- package/dist/dev/src/debug/trace-writer.js.map +1 -0
- package/dist/dev/src/debug/trace.js +460 -0
- package/dist/dev/src/debug/trace.js.map +1 -0
- package/dist/dev/src/devtools/devtools-protocol.js +2 -0
- package/dist/dev/src/devtools/devtools-protocol.js.map +1 -0
- package/dist/dev/src/devtools/devtools-server.browser.js +33 -0
- package/dist/dev/src/devtools/devtools-server.browser.js.map +1 -0
- package/dist/dev/src/devtools/devtools-server.js +444 -0
- package/dist/dev/src/devtools/devtools-server.js.map +1 -0
- package/dist/dev/src/devtools/devtools-transport.js +114 -0
- package/dist/dev/src/devtools/devtools-transport.js.map +1 -0
- package/dist/dev/src/devtools-entry.browser.js +2 -0
- package/dist/dev/src/devtools-entry.browser.js.map +1 -0
- package/dist/dev/src/devtools-entry.js +2 -0
- package/dist/dev/src/devtools-entry.js.map +1 -0
- package/dist/dev/src/diagnostics.js +89 -0
- package/dist/dev/src/diagnostics.js.map +1 -0
- package/dist/dev/src/host/alloy-host.browser.js +32 -0
- package/dist/dev/src/host/alloy-host.browser.js.map +1 -0
- package/dist/dev/src/host/alloy-host.js +144 -0
- package/dist/dev/src/host/alloy-host.js.map +1 -0
- package/dist/dev/src/host/interface.js +2 -0
- package/dist/dev/src/host/interface.js.map +1 -0
- package/dist/dev/src/host/node-host.browser.js +21 -0
- package/dist/dev/src/host/node-host.browser.js.map +1 -0
- package/dist/dev/src/host/node-host.js +20 -0
- package/dist/dev/src/host/node-host.js.map +1 -0
- package/dist/dev/src/index.browser.js +3 -0
- package/dist/dev/src/index.browser.js.map +1 -0
- package/dist/dev/src/index.js +27 -0
- package/dist/dev/src/index.js.map +1 -0
- package/dist/dev/src/inspect.browser.js +6 -0
- package/dist/dev/src/inspect.browser.js.map +1 -0
- package/dist/dev/src/inspect.js +2 -0
- package/dist/dev/src/inspect.js.map +1 -0
- package/dist/dev/src/jsx-runtime.js +17 -0
- package/dist/dev/src/jsx-runtime.js.map +1 -0
- package/dist/dev/src/library-symbol-reference.js +5 -0
- package/dist/dev/src/library-symbol-reference.js.map +1 -0
- package/dist/dev/src/name-policy.js +24 -0
- package/dist/dev/src/name-policy.js.map +1 -0
- package/dist/dev/src/pretty-string/pretty-string.js +100 -0
- package/dist/dev/src/pretty-string/pretty-string.js.map +1 -0
- package/dist/dev/src/pretty-string/pretty-string.test.js +38 -0
- package/dist/dev/src/pretty-string/pretty-string.test.js.map +1 -0
- package/dist/dev/src/print-hook.js +10 -0
- package/dist/dev/src/print-hook.js.map +1 -0
- package/dist/dev/src/props-combinators.js +109 -0
- package/dist/dev/src/props-combinators.js.map +1 -0
- package/dist/dev/src/reactive-union-set.js +213 -0
- package/dist/dev/src/reactive-union-set.js.map +1 -0
- package/dist/dev/src/reactivity.js +426 -0
- package/dist/dev/src/reactivity.js.map +1 -0
- package/dist/dev/src/refkey.js +167 -0
- package/dist/dev/src/refkey.js.map +1 -0
- package/dist/dev/src/render-stack.js +252 -0
- package/dist/dev/src/render-stack.js.map +1 -0
- package/dist/dev/src/render.js +872 -0
- package/dist/dev/src/render.js.map +1 -0
- package/dist/dev/src/resource.js +124 -0
- package/dist/dev/src/resource.js.map +1 -0
- package/dist/dev/src/runtime/component.js +41 -0
- package/dist/dev/src/runtime/component.js.map +1 -0
- package/dist/dev/src/runtime/intrinsic.js +12 -0
- package/dist/dev/src/runtime/intrinsic.js.map +1 -0
- package/dist/dev/src/scheduler.js +217 -0
- package/dist/dev/src/scheduler.js.map +1 -0
- package/dist/dev/src/stc.js +40 -0
- package/dist/dev/src/stc.js.map +1 -0
- package/dist/dev/src/sti.js +31 -0
- package/dist/dev/src/sti.js.map +1 -0
- package/dist/dev/src/symbols/basic-scope.js +21 -0
- package/dist/dev/src/symbols/basic-scope.js.map +1 -0
- package/dist/dev/src/symbols/basic-symbol.js +34 -0
- package/dist/dev/src/symbols/basic-symbol.js.map +1 -0
- package/dist/dev/src/symbols/decl.js +26 -0
- package/dist/dev/src/symbols/decl.js.map +1 -0
- package/dist/dev/src/symbols/index.js +10 -0
- package/dist/dev/src/symbols/index.js.map +1 -0
- package/dist/dev/src/symbols/output-scope.js +202 -0
- package/dist/dev/src/symbols/output-scope.js.map +1 -0
- package/dist/dev/src/symbols/output-space.js +36 -0
- package/dist/dev/src/symbols/output-space.js.map +1 -0
- package/dist/dev/src/symbols/output-symbol.js +504 -0
- package/dist/dev/src/symbols/output-symbol.js.map +1 -0
- package/dist/dev/src/symbols/symbol-flow.js +106 -0
- package/dist/dev/src/symbols/symbol-flow.js.map +1 -0
- package/dist/dev/src/symbols/symbol-slot.js +68 -0
- package/dist/dev/src/symbols/symbol-slot.js.map +1 -0
- package/dist/dev/src/symbols/symbol-slot.test.js +43 -0
- package/dist/dev/src/symbols/symbol-slot.test.js.map +1 -0
- package/dist/dev/src/symbols/symbol-table.js +93 -0
- package/dist/dev/src/symbols/symbol-table.js.map +1 -0
- package/dist/dev/src/tap.js +109 -0
- package/dist/dev/src/tap.js.map +1 -0
- package/dist/dev/src/trace.js +2 -0
- package/dist/dev/src/trace.js.map +1 -0
- package/dist/dev/src/tracer.js +180 -0
- package/dist/dev/src/tracer.js.map +1 -0
- package/dist/dev/src/utils.js +487 -0
- package/dist/dev/src/utils.js.map +1 -0
- package/dist/dev/src/write-output.js +48 -0
- package/dist/dev/src/write-output.js.map +1 -0
- package/dist/dev/test/browser-build.test.js +85 -0
- package/dist/dev/test/browser-build.test.js.map +1 -0
- package/dist/dev/test/children.test.js +44 -0
- package/dist/dev/test/children.test.js.map +1 -0
- package/dist/dev/test/components/append-file.test.js +394 -0
- package/dist/dev/test/components/append-file.test.js.map +1 -0
- package/dist/dev/test/components/block.test.js +83 -0
- package/dist/dev/test/components/block.test.js.map +1 -0
- package/dist/dev/test/components/copy-file.test.js +119 -0
- package/dist/dev/test/components/copy-file.test.js.map +1 -0
- package/dist/dev/test/components/declaration.test.js +40 -0
- package/dist/dev/test/components/declaration.test.js.map +1 -0
- package/dist/dev/test/components/list.test.js +250 -0
- package/dist/dev/test/components/list.test.js.map +1 -0
- package/dist/dev/test/components/prose.test.js +42 -0
- package/dist/dev/test/components/prose.test.js.map +1 -0
- package/dist/dev/test/components/reference-or-content.test.js +246 -0
- package/dist/dev/test/components/reference-or-content.test.js.map +1 -0
- package/dist/dev/test/components/source-file.test.js +271 -0
- package/dist/dev/test/components/source-file.test.js.map +1 -0
- package/dist/dev/test/components/template-file.test.js +200 -0
- package/dist/dev/test/components/template-file.test.js.map +1 -0
- package/dist/dev/test/components/update-file.test.js +210 -0
- package/dist/dev/test/components/update-file.test.js.map +1 -0
- package/dist/dev/test/components/wrap.test.js +48 -0
- package/dist/dev/test/components/wrap.test.js.map +1 -0
- package/dist/dev/test/control-flow/for.test.js +318 -0
- package/dist/dev/test/control-flow/for.test.js.map +1 -0
- package/dist/dev/test/control-flow/match.test.js +112 -0
- package/dist/dev/test/control-flow/match.test.js.map +1 -0
- package/dist/dev/test/control-flow/show.test.js +38 -0
- package/dist/dev/test/control-flow/show.test.js.map +1 -0
- package/dist/dev/test/lazy-isempty.test.js +121 -0
- package/dist/dev/test/lazy-isempty.test.js.map +1 -0
- package/dist/dev/test/name-policy.test.js +28 -0
- package/dist/dev/test/name-policy.test.js.map +1 -0
- package/dist/dev/test/props-with-defaults.test.js +94 -0
- package/dist/dev/test/props-with-defaults.test.js.map +1 -0
- package/dist/dev/test/reactive-union-set-disposers.test.js +98 -0
- package/dist/dev/test/reactive-union-set-disposers.test.js.map +1 -0
- package/dist/dev/test/reactive-union-set.test.js +171 -0
- package/dist/dev/test/reactive-union-set.test.js.map +1 -0
- package/dist/dev/test/reactivity/circular-reactives.test.js +62 -0
- package/dist/dev/test/reactivity/circular-reactives.test.js.map +1 -0
- package/dist/dev/test/reactivity/cleanup.test.js +96 -0
- package/dist/dev/test/reactivity/cleanup.test.js.map +1 -0
- package/dist/dev/test/reactivity/memo.test.js +17 -0
- package/dist/dev/test/reactivity/memo.test.js.map +1 -0
- package/dist/dev/test/reactivity/ref-rendering.test.js +38 -0
- package/dist/dev/test/reactivity/ref-rendering.test.js.map +1 -0
- package/dist/dev/test/reactivity/shallow-reactive.test.js +52 -0
- package/dist/dev/test/reactivity/shallow-reactive.test.js.map +1 -0
- package/dist/dev/test/reactivity/test.test.js +74 -0
- package/dist/dev/test/reactivity/test.test.js.map +1 -0
- package/dist/dev/test/reactivity/untrack.test.js +27 -0
- package/dist/dev/test/reactivity/untrack.test.js.map +1 -0
- package/dist/dev/test/refkey.test.js +36 -0
- package/dist/dev/test/refkey.test.js.map +1 -0
- package/dist/dev/test/rendering/basic.test.js +194 -0
- package/dist/dev/test/rendering/basic.test.js.map +1 -0
- package/dist/dev/test/rendering/code.test.js +64 -0
- package/dist/dev/test/rendering/code.test.js.map +1 -0
- package/dist/dev/test/rendering/formatting.test.js +797 -0
- package/dist/dev/test/rendering/formatting.test.js.map +1 -0
- package/dist/dev/test/rendering/indent.test.js +183 -0
- package/dist/dev/test/rendering/indent.test.js.map +1 -0
- package/dist/dev/test/rendering/memoization.test.js +37 -0
- package/dist/dev/test/rendering/memoization.test.js.map +1 -0
- package/dist/dev/test/rendering/print-render-stack.test.js +287 -0
- package/dist/dev/test/rendering/print-render-stack.test.js.map +1 -0
- package/dist/dev/test/rendering/refkeys.test.js +37 -0
- package/dist/dev/test/rendering/refkeys.test.js.map +1 -0
- package/dist/dev/test/scheduler-extended.test.js +96 -0
- package/dist/dev/test/scheduler-extended.test.js.map +1 -0
- package/dist/dev/test/scheduler.test.js +46 -0
- package/dist/dev/test/scheduler.test.js.map +1 -0
- package/dist/dev/test/split-props.test.js +78 -0
- package/dist/dev/test/split-props.test.js.map +1 -0
- package/dist/dev/test/stc.test.js +35 -0
- package/dist/dev/test/stc.test.js.map +1 -0
- package/dist/dev/test/symbols/output-scope.test.js +180 -0
- package/dist/dev/test/symbols/output-scope.test.js.map +1 -0
- package/dist/dev/test/symbols/output-symbol.test.js +202 -0
- package/dist/dev/test/symbols/output-symbol.test.js.map +1 -0
- package/dist/dev/test/symbols/resolution.test.js +487 -0
- package/dist/dev/test/symbols/resolution.test.js.map +1 -0
- package/dist/dev/test/symbols/symbol-table.test.js +15 -0
- package/dist/dev/test/symbols/symbol-table.test.js.map +1 -0
- package/dist/dev/test/symbols/utils.js +26 -0
- package/dist/dev/test/symbols/utils.js.map +1 -0
- package/dist/dev/test/utils.test.js +317 -0
- package/dist/dev/test/utils.test.js.map +1 -0
- package/dist/dev/testing/create-test-wrapper.js +76 -0
- package/dist/dev/testing/create-test-wrapper.js.map +1 -0
- package/dist/dev/testing/devtools-utils.js +162 -0
- package/dist/dev/testing/devtools-utils.js.map +1 -0
- package/dist/dev/testing/extend-expect.js +167 -0
- package/dist/dev/testing/extend-expect.js.map +1 -0
- package/dist/dev/testing/extend-expect.test.js +234 -0
- package/dist/dev/testing/extend-expect.test.js.map +1 -0
- package/dist/dev/testing/index.js +4 -0
- package/dist/dev/testing/index.js.map +1 -0
- package/dist/dev/testing/render.js +23 -0
- package/dist/dev/testing/render.js.map +1 -0
- package/dist/dev/testing/vitest.d.js +2 -0
- package/dist/dev/testing/vitest.d.js.map +1 -0
- package/dist/src/debug/cli.d.ts.map +1 -1
- package/dist/src/debug/cli.js +3 -2
- package/dist/src/debug/cli.js.map +1 -1
- package/dist/src/debug/effects.d.ts.map +1 -1
- package/dist/src/debug/effects.js +2 -67
- package/dist/src/debug/effects.js.map +1 -1
- package/dist/src/debug/render.d.ts.map +1 -1
- package/dist/src/debug/render.js +15 -8
- package/dist/src/debug/render.js.map +1 -1
- package/dist/src/debug/source-map.browser.d.ts +16 -0
- package/dist/src/debug/source-map.browser.d.ts.map +1 -0
- package/dist/src/debug/source-map.browser.js +24 -0
- package/dist/src/debug/source-map.browser.js.map +1 -0
- package/dist/src/debug/source-map.d.ts +22 -0
- package/dist/src/debug/source-map.d.ts.map +1 -0
- package/dist/src/debug/source-map.js +111 -0
- package/dist/src/debug/source-map.js.map +1 -0
- package/dist/src/debug/trace.d.ts.map +1 -1
- package/dist/src/debug/trace.js +19 -5
- package/dist/src/debug/trace.js.map +1 -1
- package/dist/src/host/node-host.browser.d.ts +11 -0
- package/dist/src/host/node-host.browser.d.ts.map +1 -0
- package/dist/src/host/node-host.browser.js +21 -0
- package/dist/src/host/node-host.browser.js.map +1 -0
- package/dist/src/host/node-host.d.ts +11 -0
- package/dist/src/host/node-host.d.ts.map +1 -0
- package/dist/src/host/node-host.js +20 -0
- package/dist/src/host/node-host.js.map +1 -0
- package/dist/src/render-stack.d.ts.map +1 -1
- package/dist/src/render-stack.js +4 -3
- package/dist/src/render-stack.js.map +1 -1
- package/dist/src/write-output.d.ts.map +1 -1
- package/dist/src/write-output.js +6 -5
- package/dist/src/write-output.js.map +1 -1
- package/dist/test/browser-build.test.js +66 -67
- package/dist/test/browser-build.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -3
- package/src/debug/cli.ts +3 -2
- package/src/debug/effects.ts +2 -82
- package/src/debug/render.ts +25 -13
- package/src/debug/source-map.browser.ts +30 -0
- package/src/debug/source-map.ts +135 -0
- package/src/debug/trace.ts +22 -5
- package/src/host/node-host.browser.ts +23 -0
- package/src/host/node-host.ts +22 -0
- package/src/render-stack.ts +4 -3
- package/src/write-output.ts +6 -5
- package/test/browser-build.test.ts +71 -78
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
import { memo as _$memo, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { toRaw } from "@vue/reactivity";
|
|
3
|
+
import { createCustomContext, effect, ensureIsEmpty, getContext, memo, onCleanup, ref, root, untrack } from "./reactivity.js";
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5
|
+
|
|
6
|
+
import { isComponentCreator } from "./runtime/component.js";
|
|
7
|
+
const defaultJoinOptions = {
|
|
8
|
+
joiner: "\n",
|
|
9
|
+
ender: false
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Map a Map to an array using a mapper and place a joiner between each element.
|
|
14
|
+
* Defaults to joining with a newline.
|
|
15
|
+
*
|
|
16
|
+
* @see {@link join} for joining without mapping.
|
|
17
|
+
* @param src - Source map.
|
|
18
|
+
* @param cb - Mapper function.
|
|
19
|
+
* @param options - Join options.
|
|
20
|
+
* @returns The mapped and joined array.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Map a Map to an array using a mapper and place a joiner between each element.
|
|
26
|
+
* Defaults to joining with a newline.
|
|
27
|
+
*
|
|
28
|
+
* @see {@link join} for joining without mapping.
|
|
29
|
+
* @param src - Source map.
|
|
30
|
+
* @param cb - Mapper function.
|
|
31
|
+
* @param options - Join options.
|
|
32
|
+
* @returns The mapped and joined array.
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Map a array or iterator to another array using a mapper and place a joiner
|
|
38
|
+
* between each element. Defaults to joining with a newline.
|
|
39
|
+
*
|
|
40
|
+
* @see {@link join} for joining without mapping.
|
|
41
|
+
* @param src - Source array.
|
|
42
|
+
* @param cb - Mapper function.
|
|
43
|
+
* @param options - Join options.
|
|
44
|
+
* @returns The mapped and joined array.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
export function mapJoin(src, cb, rawOptions = {}) {
|
|
48
|
+
/**
|
|
49
|
+
* Strategy overview:
|
|
50
|
+
* - Initial render: collect a stable array of mapper outputs, cache
|
|
51
|
+
* per-index slot metadata, and create joiner `Ref`s for the gaps between
|
|
52
|
+
* items so the rendered list can be mutated without recreating siblings.
|
|
53
|
+
* - List mutations: diff the incoming iterable against slot metadata, reuse
|
|
54
|
+
* entries with matching keys, recycle disposers past the change point, and
|
|
55
|
+
* prune caches while recalculating first/last non-empty indices so we only
|
|
56
|
+
* edit joiners that are affected by the change.
|
|
57
|
+
* - Content transitions: each child renders inside a custom context that
|
|
58
|
+
* exposes an `isEmpty` flag; when a child gains or loses content we update
|
|
59
|
+
* neighbor joiner refs so separators appear and disappear reactively
|
|
60
|
+
* without re-running the mapper.
|
|
61
|
+
*/
|
|
62
|
+
const options = {
|
|
63
|
+
...defaultJoinOptions,
|
|
64
|
+
...rawOptions
|
|
65
|
+
};
|
|
66
|
+
const ender = options.ender === true ? options.joiner : options.ender || undefined;
|
|
67
|
+
const itemSlots = [];
|
|
68
|
+
function getOrCreateSlot(index) {
|
|
69
|
+
let slot = itemSlots[index];
|
|
70
|
+
if (!slot) {
|
|
71
|
+
slot = {
|
|
72
|
+
isEmpty: ref(true)
|
|
73
|
+
};
|
|
74
|
+
itemSlots[index] = slot;
|
|
75
|
+
}
|
|
76
|
+
return slot;
|
|
77
|
+
}
|
|
78
|
+
const firstNonEmptyIndex = ref(-1, {
|
|
79
|
+
isInfrastructure: true
|
|
80
|
+
});
|
|
81
|
+
const lastNonEmptyIndex = ref(-1, {
|
|
82
|
+
isInfrastructure: true
|
|
83
|
+
});
|
|
84
|
+
const mapped = [];
|
|
85
|
+
let enderMemo;
|
|
86
|
+
|
|
87
|
+
// Creates a ref placeholder that stores the joiner node for a boundary.
|
|
88
|
+
function createJoinerRef() {
|
|
89
|
+
return ref(undefined, {
|
|
90
|
+
isInfrastructure: true
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Makes sure we have a joiner ref at the requested boundary index.
|
|
95
|
+
function ensureJoinerSlot(index) {
|
|
96
|
+
if (index === 0 || options.joiner === undefined) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const slot = getOrCreateSlot(index);
|
|
100
|
+
slot.joiner ??= createJoinerRef();
|
|
101
|
+
mapped[index * 2 - 1] = slot.joiner;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Sets the joiner ref based on whether neighboring children have content.
|
|
105
|
+
function updateJoinerForIndex(index) {
|
|
106
|
+
if (index === 0 || options.joiner === undefined) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const slot = itemSlots[index];
|
|
110
|
+
const joinerRef = slot?.joiner;
|
|
111
|
+
if (!joinerRef) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (index >= itemSlots.length) {
|
|
115
|
+
if (joinerRef.value !== undefined) {
|
|
116
|
+
joinerRef.value = undefined;
|
|
117
|
+
}
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const previousNonEmpty = findPrevNonEmpty(index - 1);
|
|
121
|
+
const rightSlot = itemSlots[index];
|
|
122
|
+
const shouldShow = previousNonEmpty !== -1 && rightSlot !== undefined && rightSlot.isEmpty.value === false;
|
|
123
|
+
const newValue = shouldShow ? options.joiner : undefined;
|
|
124
|
+
if (joinerRef.value !== newValue) {
|
|
125
|
+
joinerRef.value = newValue;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Finds the next child that is not empty starting at or after `from`.
|
|
130
|
+
function findNextNonEmpty(from) {
|
|
131
|
+
for (let i = Math.max(from, 0); i < itemSlots.length; i++) {
|
|
132
|
+
const slot = itemSlots[i];
|
|
133
|
+
if (slot && slot.isEmpty.value === false) {
|
|
134
|
+
return i;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return -1;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Finds the previous child that is not empty before or at `from`.
|
|
141
|
+
function findPrevNonEmpty(from) {
|
|
142
|
+
for (let i = Math.min(from, itemSlots.length - 1); i >= 0; i--) {
|
|
143
|
+
const slot = itemSlots[i];
|
|
144
|
+
if (slot && slot.isEmpty.value === false) {
|
|
145
|
+
return i;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return -1;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Recomputes the cached first and last non-empty indices after changes.
|
|
152
|
+
function recalculateNonEmptyBounds() {
|
|
153
|
+
const first = findNextNonEmpty(0);
|
|
154
|
+
firstNonEmptyIndex.value = first;
|
|
155
|
+
lastNonEmptyIndex.value = first === -1 ? -1 : findPrevNonEmpty(itemSlots.length - 1);
|
|
156
|
+
refreshJoiners();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Syncs all joiner refs after the structural shape of the list updates.
|
|
160
|
+
function refreshJoiners() {
|
|
161
|
+
if (options.joiner === undefined) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
for (let i = 1; i < itemSlots.length; i++) {
|
|
165
|
+
const slot = itemSlots[i];
|
|
166
|
+
if (slot?.joiner) {
|
|
167
|
+
updateJoinerForIndex(i);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Applies empty-state bookkeeping for an item and updates neighbor joiners.
|
|
173
|
+
function applyEmptyStateChange(index, isEmpty, wasEmpty) {
|
|
174
|
+
if (wasEmpty === isEmpty) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (isEmpty) {
|
|
178
|
+
if (firstNonEmptyIndex.value === index) {
|
|
179
|
+
firstNonEmptyIndex.value = findNextNonEmpty(index + 1);
|
|
180
|
+
}
|
|
181
|
+
if (lastNonEmptyIndex.value === index) {
|
|
182
|
+
lastNonEmptyIndex.value = findPrevNonEmpty(index - 1);
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
if (firstNonEmptyIndex.value === -1 || index < firstNonEmptyIndex.value) {
|
|
186
|
+
firstNonEmptyIndex.value = index;
|
|
187
|
+
}
|
|
188
|
+
if (index > lastNonEmptyIndex.value) {
|
|
189
|
+
lastNonEmptyIndex.value = index;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
updateJoinerForIndex(index);
|
|
193
|
+
updateJoinerForIndex(index + 1);
|
|
194
|
+
}
|
|
195
|
+
let previousItemsLen = 0;
|
|
196
|
+
onCleanup(() => {
|
|
197
|
+
for (const slot of itemSlots) {
|
|
198
|
+
slot.disposer?.();
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
return () => {
|
|
202
|
+
const itemsSource = src();
|
|
203
|
+
// need to unpack reactives for branding checks
|
|
204
|
+
const itemsSourceRaw = toRaw(itemsSource);
|
|
205
|
+
let items = Array.isArray(itemsSourceRaw) ? itemsSource : [...itemsSource];
|
|
206
|
+
if (options.skipFalsy) {
|
|
207
|
+
items = items.filter(item => item !== null && item !== undefined && typeof item !== "boolean");
|
|
208
|
+
}
|
|
209
|
+
const context = getContext();
|
|
210
|
+
// this is important to access here in reactive context so we are
|
|
211
|
+
// notified of new items from reactives.
|
|
212
|
+
const itemsLen = items.length;
|
|
213
|
+
const compare = getCompareFunction(itemsSourceRaw);
|
|
214
|
+
const mapper = getMapperFunction(itemsSourceRaw);
|
|
215
|
+
return untrack(() => {
|
|
216
|
+
let startIndex = 0;
|
|
217
|
+
for (; startIndex < itemsLen && startIndex < itemSlots.length; startIndex++) {
|
|
218
|
+
const slot = itemSlots[startIndex];
|
|
219
|
+
if (!slot || !compare(items[startIndex], slot.item)) {
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (startIndex > 0 && startIndex < itemsLen) {
|
|
224
|
+
// need to update the previous joiner (might be ender or absent)
|
|
225
|
+
ensureJoinerSlot(startIndex);
|
|
226
|
+
}
|
|
227
|
+
for (; startIndex < itemsLen; startIndex++) {
|
|
228
|
+
const slot = getOrCreateSlot(startIndex);
|
|
229
|
+
slot.item = items[startIndex];
|
|
230
|
+
const emptyFlag = slot.isEmpty;
|
|
231
|
+
if (slot.disposer) {
|
|
232
|
+
if (emptyFlag.value === false) {
|
|
233
|
+
if (context) {
|
|
234
|
+
context.childrenWithContent--;
|
|
235
|
+
}
|
|
236
|
+
emptyFlag.value = true;
|
|
237
|
+
applyEmptyStateChange(startIndex, true, false);
|
|
238
|
+
}
|
|
239
|
+
slot.disposer();
|
|
240
|
+
}
|
|
241
|
+
const cleanupIndex = startIndex;
|
|
242
|
+
mapped[startIndex * 2] = createCustomContext(cb => {
|
|
243
|
+
return root(disposer => {
|
|
244
|
+
const nestedContext = getContext();
|
|
245
|
+
const isEmptyFlag = ensureIsEmpty(nestedContext);
|
|
246
|
+
slot.disposer = disposer;
|
|
247
|
+
disposer();
|
|
248
|
+
effect(prev => {
|
|
249
|
+
const isEmpty = isEmptyFlag.value;
|
|
250
|
+
return untrack(() => {
|
|
251
|
+
if (slot.isEmpty.value !== isEmpty) {
|
|
252
|
+
slot.isEmpty.value = isEmpty;
|
|
253
|
+
}
|
|
254
|
+
const wasEmpty = prev ?? true;
|
|
255
|
+
applyEmptyStateChange(cleanupIndex, isEmpty, wasEmpty);
|
|
256
|
+
return isEmpty;
|
|
257
|
+
});
|
|
258
|
+
}, undefined, {
|
|
259
|
+
debug: {
|
|
260
|
+
name: `list:slotEmpty:${cleanupIndex}`,
|
|
261
|
+
type: "list"
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
cb(mapper(items[cleanupIndex], cleanupIndex));
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
ensureJoinerSlot(startIndex);
|
|
268
|
+
}
|
|
269
|
+
mapped.length = startIndex * 2;
|
|
270
|
+
if (mapped.length > 0) {
|
|
271
|
+
if (ender !== undefined) {
|
|
272
|
+
enderMemo ??= memo(() => lastNonEmptyIndex.value === -1 ? undefined : ender);
|
|
273
|
+
mapped[mapped.length - 1] = enderMemo;
|
|
274
|
+
} else {
|
|
275
|
+
mapped[mapped.length - 1] = undefined;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (; startIndex < previousItemsLen; startIndex++) {
|
|
279
|
+
const slot = itemSlots[startIndex];
|
|
280
|
+
if (!slot) {
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
slot.disposer?.();
|
|
284
|
+
if (slot.isEmpty.value === false) {
|
|
285
|
+
if (context) {
|
|
286
|
+
context.childrenWithContent--;
|
|
287
|
+
}
|
|
288
|
+
slot.isEmpty.value = true;
|
|
289
|
+
applyEmptyStateChange(startIndex, true, false);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (previousItemsLen !== itemsLen) {
|
|
293
|
+
itemSlots.length = itemsLen;
|
|
294
|
+
recalculateNonEmptyBounds();
|
|
295
|
+
}
|
|
296
|
+
previousItemsLen = itemsLen;
|
|
297
|
+
return mapped;
|
|
298
|
+
});
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
// Chooses the equality function based on the collection type in use.
|
|
302
|
+
function getCompareFunction(itemsSource) {
|
|
303
|
+
return Array.isArray(itemsSource) || isIterable(itemsSource) ? compareArray : compareMap;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Selects the mapper signature to match the collection type in use.
|
|
307
|
+
function getMapperFunction(itemsSource) {
|
|
308
|
+
return Array.isArray(itemsSource) || itemsSource instanceof Set || isIterable(itemsSource) ? mapArray : mapMap;
|
|
309
|
+
}
|
|
310
|
+
// Strict equality check for array-like collections.
|
|
311
|
+
function compareArray(elem1, elem2) {
|
|
312
|
+
return elem1 === elem2;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Equality check for map entries that includes key and value.
|
|
316
|
+
function compareMap(record1, record2) {
|
|
317
|
+
return record1[0] === record2[0] && record1[1] === record2[1];
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Invokes the user mapper for array-like collections.
|
|
321
|
+
function mapArray(item, index) {
|
|
322
|
+
return cb(item, index);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Invokes the user mapper for map collections.
|
|
326
|
+
function mapMap(item, index) {
|
|
327
|
+
return cb(item[0], item[1], index);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Runtime type guard for iterables returned from custom sources.
|
|
331
|
+
function isIterable(x) {
|
|
332
|
+
return typeof x.next === "function";
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Place a joiner between each element of an array or iterator. Defaults to
|
|
338
|
+
* joining with a newline.
|
|
339
|
+
*
|
|
340
|
+
* @see mapJoin for mapping before joining.
|
|
341
|
+
* @returns The joined array
|
|
342
|
+
*/
|
|
343
|
+
export function join(src, options = {}) {
|
|
344
|
+
const mergedOptions = {
|
|
345
|
+
...defaultJoinOptions,
|
|
346
|
+
...options
|
|
347
|
+
};
|
|
348
|
+
const joined = [];
|
|
349
|
+
const ender = mergedOptions.ender === true ? mergedOptions.joiner : mergedOptions.ender;
|
|
350
|
+
src = Array.from(src);
|
|
351
|
+
for (const [index, item] of src.entries()) {
|
|
352
|
+
joined.push(item);
|
|
353
|
+
if (index !== src.length - 1) {
|
|
354
|
+
joined.push(mergedOptions.joiner);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (src.length > 0 && ender) {
|
|
358
|
+
joined.push(ender);
|
|
359
|
+
}
|
|
360
|
+
return joined;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Returns a memo which is a list of all the provided children.
|
|
364
|
+
* If you want this as an array, see {@link childrenArray}.
|
|
365
|
+
*/
|
|
366
|
+
export function children(fn, options = {}) {
|
|
367
|
+
return memo(() => {
|
|
368
|
+
const children = fn();
|
|
369
|
+
if (options.preserveFragments && Array.isArray(children)) {
|
|
370
|
+
return children.map(collectChildren);
|
|
371
|
+
} else {
|
|
372
|
+
return collectChildren(children);
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
function collectChildren(children) {
|
|
376
|
+
if (Array.isArray(children)) {
|
|
377
|
+
return children.map(collectChildren).flat();
|
|
378
|
+
} else if (typeof children === "function" && !isComponentCreator(children)) {
|
|
379
|
+
return collectChildren(children());
|
|
380
|
+
} else {
|
|
381
|
+
return children;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
export function childrenArray(fn, options) {
|
|
386
|
+
const c = children(fn, options)();
|
|
387
|
+
if (Array.isArray(c)) {
|
|
388
|
+
return c;
|
|
389
|
+
} else if (c === undefined) {
|
|
390
|
+
return [];
|
|
391
|
+
} else {
|
|
392
|
+
return [c];
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
export function findKeyedChild(children, tag) {
|
|
396
|
+
for (const child of children) {
|
|
397
|
+
if (isKeyedChild(child) && child.tag === tag) {
|
|
398
|
+
return child;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return null;
|
|
402
|
+
}
|
|
403
|
+
export function findKeyedChildren(children, tag) {
|
|
404
|
+
const keyedChildren = [];
|
|
405
|
+
for (const child of children) {
|
|
406
|
+
if (isKeyedChild(child) && child.tag === tag) {
|
|
407
|
+
keyedChildren.push(child);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return keyedChildren;
|
|
411
|
+
}
|
|
412
|
+
export function findUnkeyedChildren(children) {
|
|
413
|
+
return children.filter(child => !isKeyedChild(child));
|
|
414
|
+
}
|
|
415
|
+
export function isKeyedChild(child) {
|
|
416
|
+
return isComponentCreator(child) && !!child.tag;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* A visitor to collect the output from {@link render}. Used by
|
|
421
|
+
* {@link traverseOutput}.
|
|
422
|
+
*/
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Traverse the output from {@link render} and call the visitor for each
|
|
426
|
+
* file and directory within it.
|
|
427
|
+
*
|
|
428
|
+
* @param sourceDirectory - The root directory to traverse.
|
|
429
|
+
* @param visitor - The visitor to call for each file and directory.
|
|
430
|
+
*/
|
|
431
|
+
export async function traverseOutput(sourceDirectory, visitor) {
|
|
432
|
+
await visitor.visitDirectory(sourceDirectory);
|
|
433
|
+
for (const item of sourceDirectory.contents) {
|
|
434
|
+
if (item.kind === "directory") {
|
|
435
|
+
await traverseOutput(item, visitor);
|
|
436
|
+
} else {
|
|
437
|
+
await visitor.visitFile(item);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Convert a list of props to a joiner and ender for use in {@link (mapJoin:1)}.
|
|
444
|
+
*/
|
|
445
|
+
export function baseListPropsToMapJoinArgs(props) {
|
|
446
|
+
let joiner, punctuation;
|
|
447
|
+
if ("joiner" in props) {
|
|
448
|
+
joiner = props.joiner;
|
|
449
|
+
} else {
|
|
450
|
+
punctuation = props.comma ? "," : props.semicolon ? ";" : "";
|
|
451
|
+
joiner = [punctuation, _$memo(() => _$memo(() => !!props.softline)() ? _$createIntrinsic("sbr", {}, {
|
|
452
|
+
fileName: import.meta.url,
|
|
453
|
+
lineNumber: 600,
|
|
454
|
+
columnNumber: 11
|
|
455
|
+
}) : _$memo(() => !!props.hardline)() ? _$createIntrinsic("hbr", {}, {
|
|
456
|
+
fileName: import.meta.url,
|
|
457
|
+
lineNumber: 602,
|
|
458
|
+
columnNumber: 11
|
|
459
|
+
}) : _$memo(() => !!props.literalline)() ? _$createIntrinsic("lbr", {}, {
|
|
460
|
+
fileName: import.meta.url,
|
|
461
|
+
lineNumber: 604,
|
|
462
|
+
columnNumber: 11
|
|
463
|
+
}) : _$memo(() => !!props.line)() ? _$createIntrinsic("br", {}, {
|
|
464
|
+
fileName: import.meta.url,
|
|
465
|
+
lineNumber: 606,
|
|
466
|
+
columnNumber: 11
|
|
467
|
+
}) : _$memo(() => !!props.space)() ? [" "] : _$memo(() => !!props.doubleHardline)() ? [_$createIntrinsic("hbr", {}, {
|
|
468
|
+
fileName: import.meta.url,
|
|
469
|
+
lineNumber: 611,
|
|
470
|
+
columnNumber: 13
|
|
471
|
+
}), _$createIntrinsic("hbr", {}, {
|
|
472
|
+
fileName: import.meta.url,
|
|
473
|
+
lineNumber: 612,
|
|
474
|
+
columnNumber: 13
|
|
475
|
+
})] : _$createIntrinsic("hbr", {}, {
|
|
476
|
+
fileName: import.meta.url,
|
|
477
|
+
lineNumber: 614,
|
|
478
|
+
columnNumber: 11
|
|
479
|
+
}), false, "_$memo(\u2026)(\u2026) ? \u2026")];
|
|
480
|
+
}
|
|
481
|
+
const ender = "ender" in props ? props.ender : props.enderPunctuation ? punctuation : undefined;
|
|
482
|
+
return {
|
|
483
|
+
joiner,
|
|
484
|
+
ender
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["toRaw","createCustomContext","effect","ensureIsEmpty","getContext","memo","onCleanup","ref","root","untrack","isComponentCreator","defaultJoinOptions","joiner","ender","mapJoin","src","cb","rawOptions","options","undefined","itemSlots","getOrCreateSlot","index","slot","isEmpty","firstNonEmptyIndex","isInfrastructure","lastNonEmptyIndex","mapped","enderMemo","createJoinerRef","ensureJoinerSlot","updateJoinerForIndex","joinerRef","length","value","previousNonEmpty","findPrevNonEmpty","rightSlot","shouldShow","newValue","findNextNonEmpty","from","i","Math","max","min","recalculateNonEmptyBounds","first","refreshJoiners","applyEmptyStateChange","wasEmpty","previousItemsLen","disposer","itemsSource","itemsSourceRaw","items","Array","isArray","skipFalsy","filter","item","context","itemsLen","compare","getCompareFunction","mapper","getMapperFunction","startIndex","emptyFlag","childrenWithContent","cleanupIndex","nestedContext","isEmptyFlag","prev","debug","name","type","isIterable","compareArray","compareMap","Set","mapArray","mapMap","elem1","elem2","record1","record2","x","next","join","mergedOptions","joined","entries","push","children","fn","preserveFragments","map","collectChildren","flat","childrenArray","c","findKeyedChild","tag","child","isKeyedChild","findKeyedChildren","keyedChildren","findUnkeyedChildren","traverseOutput","sourceDirectory","visitor","visitDirectory","contents","kind","visitFile","baseListPropsToMapJoinArgs","props","punctuation","comma","semicolon","_$memo","softline","_$createIntrinsic","fileName","import","meta","url","lineNumber","columnNumber","hardline","literalline","line","space","doubleHardline","enderPunctuation"],"sources":["../../../src/utils.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { dirname, relative, resolve } from "pathe";
|
|
2
|
+
import { AlloyHost } from "./host/alloy-host.js";
|
|
3
|
+
import { cwd } from "./host/node-host.js";
|
|
4
|
+
import { traverseOutput } from "./utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* Write the output from {@link render} to the file system.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export async function writeOutput(output, basePath = "") {
|
|
10
|
+
return await traverseOutput(output, {
|
|
11
|
+
async visitDirectory(directory) {
|
|
12
|
+
const path = resolve(basePath, directory.path);
|
|
13
|
+
if (await AlloyHost.exists(path)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.log("create", relative(cwd(), path));
|
|
18
|
+
await AlloyHost.mkdir(path);
|
|
19
|
+
},
|
|
20
|
+
async visitFile(file) {
|
|
21
|
+
if ("contents" in file) {
|
|
22
|
+
const path = resolve(basePath, file.path);
|
|
23
|
+
if (await AlloyHost.exists(path)) {
|
|
24
|
+
// eslint-disable-next-line no-console
|
|
25
|
+
console.log("overwrite", relative(cwd(), path));
|
|
26
|
+
} else {
|
|
27
|
+
// eslint-disable-next-line no-console
|
|
28
|
+
console.log("create", relative(cwd(), path));
|
|
29
|
+
}
|
|
30
|
+
await AlloyHost.write(path, file.contents);
|
|
31
|
+
} else {
|
|
32
|
+
// copy file
|
|
33
|
+
const source = resolve(basePath, file.sourcePath);
|
|
34
|
+
const target = resolve(basePath, file.path);
|
|
35
|
+
if (await AlloyHost.exists(target)) {
|
|
36
|
+
// eslint-disable-next-line no-console
|
|
37
|
+
console.log("copy over", relative(cwd(), target));
|
|
38
|
+
} else {
|
|
39
|
+
// eslint-disable-next-line no-console
|
|
40
|
+
console.log("copy", relative(cwd(), target));
|
|
41
|
+
}
|
|
42
|
+
await AlloyHost.mkdir(dirname(target));
|
|
43
|
+
await AlloyHost.write(target, AlloyHost.read(source).stream());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=write-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["dirname","relative","resolve","AlloyHost","cwd","traverseOutput","writeOutput","output","basePath","visitDirectory","directory","path","exists","console","log","mkdir","visitFile","file","write","contents","source","sourcePath","target","read","stream"],"sources":["../../../src/write-output.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAO,EAAEC,QAAQ,EAAEC,OAAO,QAAQ,OAAO;AAClD,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,GAAG,QAAQ,qBAAqB;AAEzC,SAASC,cAAc,QAAQ,YAAY;AAC3C;AACA;AACA;AACA;AACA,OAAO,eAAeC,WAAWA,CAC/BC,MAAuB,EACvBC,QAAgB,GAAG,EAAE,EACrB;EACA,OAAO,MAAMH,cAAc,CAACE,MAAM,EAAE;IAClC,MAAME,cAAcA,CAACC,SAAS,EAAE;MAC9B,MAAMC,IAAI,GAAGT,OAAO,CAACM,QAAQ,EAAEE,SAAS,CAACC,IAAI,CAAC;MAC9C,IAAI,MAAMR,SAAS,CAACS,MAAM,CAACD,IAAI,CAAC,EAAE;QAChC;MACF;MACA;MACAE,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEb,QAAQ,CAACG,GAAG,CAAC,CAAC,EAAEO,IAAI,CAAC,CAAC;MAC5C,MAAMR,SAAS,CAACY,KAAK,CAACJ,IAAI,CAAC;IAC7B,CAAC;IACD,MAAMK,SAASA,CAACC,IAAI,EAAE;MACpB,IAAI,UAAU,IAAIA,IAAI,EAAE;QACtB,MAAMN,IAAI,GAAGT,OAAO,CAACM,QAAQ,EAAES,IAAI,CAACN,IAAI,CAAC;QACzC,IAAI,MAAMR,SAAS,CAACS,MAAM,CAACD,IAAI,CAAC,EAAE;UAChC;UACAE,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEb,QAAQ,CAACG,GAAG,CAAC,CAAC,EAAEO,IAAI,CAAC,CAAC;QACjD,CAAC,MAAM;UACL;UACAE,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEb,QAAQ,CAACG,GAAG,CAAC,CAAC,EAAEO,IAAI,CAAC,CAAC;QAC9C;QAEA,MAAMR,SAAS,CAACe,KAAK,CAACP,IAAI,EAAEM,IAAI,CAACE,QAAQ,CAAC;MAC5C,CAAC,MAAM;QACL;QACA,MAAMC,MAAM,GAAGlB,OAAO,CAACM,QAAQ,EAAES,IAAI,CAACI,UAAU,CAAC;QACjD,MAAMC,MAAM,GAAGpB,OAAO,CAACM,QAAQ,EAAES,IAAI,CAACN,IAAI,CAAC;QAC3C,IAAI,MAAMR,SAAS,CAACS,MAAM,CAACU,MAAM,CAAC,EAAE;UAClC;UACAT,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEb,QAAQ,CAACG,GAAG,CAAC,CAAC,EAAEkB,MAAM,CAAC,CAAC;QACnD,CAAC,MAAM;UACL;UACAT,OAAO,CAACC,GAAG,CAAC,MAAM,EAAEb,QAAQ,CAACG,GAAG,CAAC,CAAC,EAAEkB,MAAM,CAAC,CAAC;QAC9C;QACA,MAAMnB,SAAS,CAACY,KAAK,CAACf,OAAO,CAACsB,MAAM,CAAC,CAAC;QACtC,MAAMnB,SAAS,CAACe,KAAK,CAACI,MAAM,EAAEnB,SAAS,CAACoB,IAAI,CAACH,MAAM,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC;MAChE;IACF;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { build } from "vite";
|
|
4
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
5
|
+
const tempDir = join(__dirname, ".temp", "browser-build-test");
|
|
6
|
+
const entryFile = join(tempDir, "entry.js");
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Bundles `@alloy-js/core` for the browser using Vite and returns
|
|
10
|
+
* the concatenated output code.
|
|
11
|
+
*
|
|
12
|
+
* Uses the `browser` export condition from the package exports map,
|
|
13
|
+
* which resolves to the compiled browser entry. This requires the
|
|
14
|
+
* package to be built first (the CI pipeline and `pnpm build` handle
|
|
15
|
+
* this automatically).
|
|
16
|
+
*/
|
|
17
|
+
async function bundleForBrowser() {
|
|
18
|
+
const result = await build({
|
|
19
|
+
configFile: false,
|
|
20
|
+
logLevel: "silent",
|
|
21
|
+
resolve: {
|
|
22
|
+
conditions: ["browser", "import"]
|
|
23
|
+
},
|
|
24
|
+
// Disable automatic process.env replacement so we can detect leaks
|
|
25
|
+
define: {},
|
|
26
|
+
build: {
|
|
27
|
+
write: false,
|
|
28
|
+
minify: false,
|
|
29
|
+
rollupOptions: {
|
|
30
|
+
input: entryFile,
|
|
31
|
+
output: {
|
|
32
|
+
format: "es"
|
|
33
|
+
},
|
|
34
|
+
// Disable tree-shaking so we catch process.* references in ANY
|
|
35
|
+
// code path, even if it would be removed in a production build.
|
|
36
|
+
treeshake: false,
|
|
37
|
+
external: id => {
|
|
38
|
+
// Bundle @alloy-js packages — these are what we're validating
|
|
39
|
+
if (id.startsWith("@alloy-js/")) return false;
|
|
40
|
+
// Bundle relative/absolute imports (intra-package)
|
|
41
|
+
if (id.startsWith(".") || id.startsWith("/")) return false;
|
|
42
|
+
// Externalize third-party deps (vue, pathe, picocolors, …)
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const output = Array.isArray(result) ? result[0] : result;
|
|
49
|
+
const chunks = output.output.filter(o => o.type === "chunk");
|
|
50
|
+
return chunks.map(c => c.code).join("\n");
|
|
51
|
+
}
|
|
52
|
+
describe("browser build", () => {
|
|
53
|
+
beforeAll(() => {
|
|
54
|
+
if (existsSync(tempDir)) {
|
|
55
|
+
rmSync(tempDir, {
|
|
56
|
+
recursive: true,
|
|
57
|
+
force: true
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
mkdirSync(tempDir, {
|
|
61
|
+
recursive: true
|
|
62
|
+
});
|
|
63
|
+
writeFileSync(entryFile, 'export * from "@alloy-js/core";\n');
|
|
64
|
+
});
|
|
65
|
+
afterAll(() => {
|
|
66
|
+
if (existsSync(tempDir)) {
|
|
67
|
+
rmSync(tempDir, {
|
|
68
|
+
recursive: true,
|
|
69
|
+
force: true
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
it("should bundle for browser without Node.js polyfills", async () => {
|
|
74
|
+
const code = await bundleForBrowser();
|
|
75
|
+
|
|
76
|
+
// The browser bundle must not reference the Node.js `process` global.
|
|
77
|
+
// If this fails, a file is using process.env / process.cwd / etc.
|
|
78
|
+
// without going through host/node-host.ts (or another browser-overridden module).
|
|
79
|
+
expect(code).not.toMatch(/\bprocess\./);
|
|
80
|
+
|
|
81
|
+
// Should not contain static require("node:…") calls
|
|
82
|
+
expect(code).not.toMatch(/require\(\s*["']node:/);
|
|
83
|
+
}, 30_000);
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=browser-build.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["existsSync","mkdirSync","rmSync","writeFileSync","join","build","afterAll","beforeAll","describe","expect","it","tempDir","__dirname","entryFile","bundleForBrowser","result","configFile","logLevel","resolve","conditions","define","write","minify","rollupOptions","input","output","format","treeshake","external","id","startsWith","Array","isArray","chunks","filter","o","type","map","c","code","recursive","force","not","toMatch"],"sources":["../../../test/browser-build.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAEC,aAAa,QAAQ,IAAI;AACjE,SAASC,IAAI,QAAQ,MAAM;AAC3B,SAASC,KAAK,QAAuB,MAAM;AAC3C,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAElE,MAAMC,OAAO,GAAGP,IAAI,CAACQ,SAAS,EAAE,OAAO,EAAE,oBAAoB,CAAC;AAC9D,MAAMC,SAAS,GAAGT,IAAI,CAACO,OAAO,EAAE,UAAU,CAAC;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeG,gBAAgBA,CAAA,EAAoB;EACjD,MAAMC,MAAM,GAAG,MAAMV,KAAK,CAAC;IACzBW,UAAU,EAAE,KAAK;IACjBC,QAAQ,EAAE,QAAQ;IAClBC,OAAO,EAAE;MACPC,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ;IAClC,CAAC;IACD;IACAC,MAAM,EAAE,CAAC,CAAC;IACVf,KAAK,EAAE;MACLgB,KAAK,EAAE,KAAK;MACZC,MAAM,EAAE,KAAK;MACbC,aAAa,EAAE;QACbC,KAAK,EAAEX,SAAS;QAChBY,MAAM,EAAE;UAAEC,MAAM,EAAE;QAAK,CAAC;QACxB;QACA;QACAC,SAAS,EAAE,KAAK;QAChBC,QAAQ,EAAGC,EAAE,IAAK;UAChB;UACA,IAAIA,EAAE,CAACC,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK;UAC7C;UACA,IAAID,EAAE,CAACC,UAAU,CAAC,GAAG,CAAC,IAAID,EAAE,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK;UAC1D;UACA,OAAO,IAAI;QACb;MACF;IACF;EACF,CAAC,CAAC;EAEF,MAAML,MAAM,GACVM,KAAK,CAACC,OAAO,CAACjB,MAAM,CAAC,GACnBA,MAAM,CAAC,CAAC,CAAC,GACTA,MAAkC;EACtC,MAAMkB,MAAM,GAAGR,MAAM,CAACA,MAAM,CAACS,MAAM,CAChCC,CAAC,IAAgCA,CAAC,CAACC,IAAI,KAAK,OAC/C,CAAC;EACD,OAAOH,MAAM,CAACI,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAAC,CAACnC,IAAI,CAAC,IAAI,CAAC;AAC7C;AAEAI,QAAQ,CAAC,eAAe,EAAE,MAAM;EAC9BD,SAAS,CAAC,MAAM;IACd,IAAIP,UAAU,CAACW,OAAO,CAAC,EAAE;MACvBT,MAAM,CAACS,OAAO,EAAE;QAAE6B,SAAS,EAAE,IAAI;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;IACnD;IACAxC,SAAS,CAACU,OAAO,EAAE;MAAE6B,SAAS,EAAE;IAAK,CAAC,CAAC;IACvCrC,aAAa,CAACU,SAAS,EAAE,mCAAmC,CAAC;EAC/D,CAAC,CAAC;EAEFP,QAAQ,CAAC,MAAM;IACb,IAAIN,UAAU,CAACW,OAAO,CAAC,EAAE;MACvBT,MAAM,CAACS,OAAO,EAAE;QAAE6B,SAAS,EAAE,IAAI;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;IACnD;EACF,CAAC,CAAC;EAEF/B,EAAE,CAAC,qDAAqD,EAAE,YAAY;IACpE,MAAM6B,IAAI,GAAG,MAAMzB,gBAAgB,CAAC,CAAC;;IAErC;IACA;IACA;IACAL,MAAM,CAAC8B,IAAI,CAAC,CAACG,GAAG,CAACC,OAAO,CAAC,aAAa,CAAC;;IAEvC;IACAlC,MAAM,CAAC8B,IAAI,CAAC,CAACG,GAAG,CAACC,OAAO,CAAC,uBAAuB,CAAC;EACnD,CAAC,EAAE,MAAM,CAAC;AACZ,CAAC,CAAC","ignoreList":[]}
|