@alloy-js/core 0.23.0-dev.9 → 0.23.1
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 +42 -0
- package/api-extractor.json +1 -8
- package/api-extractor.testing.json +19 -0
- package/dist/dev/src/binder.js +595 -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 +78 -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 +18 -0
- package/dist/dev/src/components/MemberName.js.map +1 -0
- package/dist/dev/src/components/MemberScope.js +62 -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 +56 -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 +17 -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 +45 -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 +18 -0
- package/dist/dev/src/context/scope.js.map +1 -0
- package/dist/dev/src/context/source-directory.js +12 -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.browser.js +14 -0
- package/dist/dev/src/debug/cli.browser.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-broadcast.test.js +100 -0
- package/dist/dev/src/debug/diagnostics-broadcast.test.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-db.browser.js +11 -0
- package/dist/dev/src/debug/trace-db.browser.js.map +1 -0
- package/dist/dev/src/debug/trace-db.js +40 -0
- package/dist/dev/src/debug/trace-db.js.map +1 -0
- package/dist/dev/src/debug/trace-writer.js +653 -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 +36 -0
- package/dist/dev/src/devtools/devtools-server.browser.js.map +1 -0
- package/dist/dev/src/devtools/devtools-server.js +458 -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 +97 -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 +59 -0
- package/dist/dev/src/library-symbol-reference.js.map +1 -0
- package/dist/dev/src/name-policy.js +51 -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 +452 -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 +235 -0
- package/dist/dev/src/symbols/output-scope.js.map +1 -0
- package/dist/dev/src/symbols/output-space.js +51 -0
- package/dist/dev/src/symbols/output-space.js.map +1 -0
- package/dist/dev/src/symbols/output-symbol.js +644 -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 +75 -0
- package/dist/dev/src/symbols/symbol-slot.js.map +1 -0
- package/dist/dev/src/symbols/symbol-slot.test.js +68 -0
- package/dist/dev/src/symbols/symbol-slot.test.js.map +1 -0
- package/dist/dev/src/symbols/symbol-table.js +103 -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 +146 -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 +56 -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/deconflicted-name.test.js +120 -0
- package/dist/dev/test/symbols/deconflicted-name.test.js.map +1 -0
- package/dist/dev/test/symbols/output-scope.test.js +221 -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 +130 -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 +187 -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 +34 -0
- package/dist/dev/testing/render.js.map +1 -0
- package/dist/dev/testing/vitest.d.js +14 -0
- package/dist/dev/testing/vitest.d.js.map +1 -0
- package/dist/devtools/index.html +29 -17
- package/dist/src/binder.d.ts +107 -3
- package/dist/src/binder.d.ts.map +1 -1
- package/dist/src/binder.js +113 -1
- package/dist/src/binder.js.map +1 -1
- package/dist/src/components/AccessExpression.d.ts +78 -0
- package/dist/src/components/AccessExpression.d.ts.map +1 -0
- package/dist/src/components/AccessExpression.js +218 -0
- package/dist/src/components/AccessExpression.js.map +1 -0
- package/dist/src/components/AccessExpression.test.d.ts +2 -0
- package/dist/src/components/AccessExpression.test.d.ts.map +1 -0
- package/dist/src/components/AccessExpression.test.js +137 -0
- package/dist/src/components/AccessExpression.test.js.map +1 -0
- package/dist/src/components/Block.d.ts +12 -0
- package/dist/src/components/Block.d.ts.map +1 -1
- package/dist/src/components/Block.js +12 -0
- package/dist/src/components/Block.js.map +1 -1
- package/dist/src/components/For.d.ts.map +1 -1
- package/dist/src/components/For.js +1 -1
- package/dist/src/components/For.js.map +1 -1
- package/dist/src/components/List.d.ts +11 -1
- package/dist/src/components/List.d.ts.map +1 -1
- package/dist/src/components/List.js +1 -1
- package/dist/src/components/List.js.map +1 -1
- package/dist/src/components/MemberDeclaration.d.ts +6 -6
- package/dist/src/components/MemberDeclaration.js +6 -6
- package/dist/src/components/MemberName.d.ts +6 -0
- package/dist/src/components/MemberName.d.ts.map +1 -1
- package/dist/src/components/MemberName.js +7 -0
- package/dist/src/components/MemberName.js.map +1 -1
- package/dist/src/components/MemberScope.d.ts +5 -0
- package/dist/src/components/MemberScope.d.ts.map +1 -1
- package/dist/src/components/MemberScope.js +5 -0
- package/dist/src/components/MemberScope.js.map +1 -1
- package/dist/src/components/Output.d.ts +4 -2
- package/dist/src/components/Output.d.ts.map +1 -1
- package/dist/src/components/Output.js.map +1 -1
- package/dist/src/components/Scope.d.ts +6 -0
- package/dist/src/components/Scope.d.ts.map +1 -1
- package/dist/src/components/Scope.js +6 -0
- package/dist/src/components/Scope.js.map +1 -1
- package/dist/src/components/SourceFile.d.ts +22 -2
- package/dist/src/components/SourceFile.d.ts.map +1 -1
- package/dist/src/components/SourceFile.js.map +1 -1
- package/dist/src/components/Switch.d.ts.map +1 -1
- package/dist/src/components/Switch.js +1 -1
- package/dist/src/components/Switch.js.map +1 -1
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/components/index.js +1 -0
- package/dist/src/components/index.js.map +1 -1
- package/dist/src/context/binder.d.ts +4 -0
- package/dist/src/context/binder.d.ts.map +1 -1
- package/dist/src/context/binder.js +5 -0
- package/dist/src/context/binder.js.map +1 -1
- package/dist/src/context/format-options.d.ts +14 -1
- package/dist/src/context/format-options.d.ts.map +1 -1
- package/dist/src/context/format-options.js +14 -1
- package/dist/src/context/format-options.js.map +1 -1
- package/dist/src/context/scope.d.ts +4 -0
- package/dist/src/context/scope.d.ts.map +1 -1
- package/dist/src/context/scope.js +5 -0
- package/dist/src/context/scope.js.map +1 -1
- package/dist/src/context/source-directory.d.ts +9 -0
- package/dist/src/context/source-directory.d.ts.map +1 -1
- package/dist/src/context/source-directory.js +9 -0
- package/dist/src/context/source-directory.js.map +1 -1
- package/dist/src/debug/cli.browser.d.ts +13 -0
- package/dist/src/debug/cli.browser.d.ts.map +1 -0
- package/dist/src/debug/cli.browser.js +14 -0
- package/dist/src/debug/cli.browser.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/diagnostics-broadcast.test.d.ts +2 -0
- package/dist/src/debug/diagnostics-broadcast.test.d.ts.map +1 -0
- package/dist/src/debug/diagnostics-broadcast.test.js +100 -0
- package/dist/src/debug/diagnostics-broadcast.test.js.map +1 -0
- package/dist/src/debug/diagnostics.test.js +3 -2
- package/dist/src/debug/diagnostics.test.js.map +1 -1
- package/dist/src/debug/effects.d.ts +12 -4
- package/dist/src/debug/effects.d.ts.map +1 -1
- package/dist/src/debug/effects.js +119 -54
- package/dist/src/debug/effects.js.map +1 -1
- package/dist/src/debug/effects.test.js +213 -41
- package/dist/src/debug/effects.test.js.map +1 -1
- package/dist/src/debug/files.d.ts.map +1 -1
- package/dist/src/debug/files.js +7 -18
- package/dist/src/debug/files.js.map +1 -1
- package/dist/src/debug/files.test.js +13 -36
- package/dist/src/debug/files.test.js.map +1 -1
- package/dist/src/debug/index.d.ts +4 -2
- package/dist/src/debug/index.d.ts.map +1 -1
- package/dist/src/debug/index.js +4 -2
- package/dist/src/debug/index.js.map +1 -1
- package/dist/src/debug/message-format.test.d.ts +2 -0
- package/dist/src/debug/message-format.test.d.ts.map +1 -0
- package/dist/src/debug/message-format.test.js +700 -0
- package/dist/src/debug/message-format.test.js.map +1 -0
- package/dist/src/debug/render-tree-orphans.test.d.ts +2 -0
- package/dist/src/debug/render-tree-orphans.test.d.ts.map +1 -0
- package/dist/src/debug/render-tree-orphans.test.js +297 -0
- package/dist/src/debug/render-tree-orphans.test.js.map +1 -0
- package/dist/src/debug/render.d.ts.map +1 -1
- package/dist/src/debug/render.js +91 -131
- package/dist/src/debug/render.js.map +1 -1
- package/dist/src/debug/render.test.js +91 -128
- package/dist/src/debug/render.test.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/symbols.d.ts +6 -5
- package/dist/src/debug/symbols.d.ts.map +1 -1
- package/dist/src/debug/symbols.js +46 -23
- package/dist/src/debug/symbols.js.map +1 -1
- package/dist/src/debug/symbols.test.js +15 -26
- package/dist/src/debug/symbols.test.js.map +1 -1
- package/dist/src/debug/trace-db.browser.d.ts +9 -0
- package/dist/src/debug/trace-db.browser.d.ts.map +1 -0
- package/dist/src/debug/trace-db.browser.js +11 -0
- package/dist/src/debug/trace-db.browser.js.map +1 -0
- package/dist/src/debug/trace-db.d.ts +16 -0
- package/dist/src/debug/trace-db.d.ts.map +1 -0
- package/dist/src/debug/trace-db.js +40 -0
- package/dist/src/debug/trace-db.js.map +1 -0
- package/dist/src/debug/trace-writer.d.ts +56 -0
- package/dist/src/debug/trace-writer.d.ts.map +1 -0
- package/dist/src/debug/trace-writer.js +653 -0
- package/dist/src/debug/trace-writer.js.map +1 -0
- package/dist/src/debug/trace.d.ts +10 -10
- package/dist/src/debug/trace.d.ts.map +1 -1
- package/dist/src/debug/trace.js +41 -24
- package/dist/src/debug/trace.js.map +1 -1
- package/dist/src/devtools/devtools-protocol.d.ts +318 -161
- package/dist/src/devtools/devtools-protocol.d.ts.map +1 -1
- package/dist/src/devtools/devtools-server.browser.d.ts +1 -5
- package/dist/src/devtools/devtools-server.browser.d.ts.map +1 -1
- package/dist/src/devtools/devtools-server.browser.js +3 -3
- package/dist/src/devtools/devtools-server.browser.js.map +1 -1
- package/dist/src/devtools/devtools-server.d.ts +5 -6
- package/dist/src/devtools/devtools-server.d.ts.map +1 -1
- package/dist/src/devtools/devtools-server.js +227 -25
- package/dist/src/devtools/devtools-server.js.map +1 -1
- package/dist/src/devtools/devtools-transport.d.ts +2 -2
- package/dist/src/devtools/devtools-transport.d.ts.map +1 -1
- package/dist/src/devtools/devtools-transport.js +2 -2
- package/dist/src/devtools/devtools-transport.js.map +1 -1
- package/dist/src/devtools-entry.browser.d.ts +1 -1
- package/dist/src/devtools-entry.browser.d.ts.map +1 -1
- package/dist/src/devtools-entry.browser.js.map +1 -1
- package/dist/src/devtools-entry.d.ts +1 -1
- package/dist/src/devtools-entry.d.ts.map +1 -1
- package/dist/src/devtools-entry.js.map +1 -1
- package/dist/src/diagnostics.d.ts +1 -1
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js +27 -19
- package/dist/src/diagnostics.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/library-symbol-reference.d.ts +52 -0
- package/dist/src/library-symbol-reference.d.ts.map +1 -1
- package/dist/src/library-symbol-reference.js +54 -0
- package/dist/src/library-symbol-reference.js.map +1 -1
- package/dist/src/name-policy.d.ts +30 -3
- package/dist/src/name-policy.d.ts.map +1 -1
- package/dist/src/name-policy.js +27 -0
- package/dist/src/name-policy.js.map +1 -1
- package/dist/src/reactivity.d.ts +28 -2
- package/dist/src/reactivity.d.ts.map +1 -1
- package/dist/src/reactivity.js +154 -45
- package/dist/src/reactivity.js.map +1 -1
- 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/render.d.ts +2 -0
- package/dist/src/render.d.ts.map +1 -1
- package/dist/src/render.js +84 -30
- package/dist/src/render.js.map +1 -1
- package/dist/src/scheduler.d.ts +5 -0
- package/dist/src/scheduler.d.ts.map +1 -1
- package/dist/src/scheduler.js +94 -23
- package/dist/src/scheduler.js.map +1 -1
- package/dist/src/symbols/output-scope.d.ts +33 -1
- package/dist/src/symbols/output-scope.d.ts.map +1 -1
- package/dist/src/symbols/output-scope.js +34 -1
- package/dist/src/symbols/output-scope.js.map +1 -1
- package/dist/src/symbols/output-space.d.ts +12 -0
- package/dist/src/symbols/output-space.d.ts.map +1 -1
- package/dist/src/symbols/output-space.js +15 -0
- package/dist/src/symbols/output-space.js.map +1 -1
- package/dist/src/symbols/output-symbol.d.ts +128 -12
- package/dist/src/symbols/output-symbol.d.ts.map +1 -1
- package/dist/src/symbols/output-symbol.js +158 -18
- package/dist/src/symbols/output-symbol.js.map +1 -1
- package/dist/src/symbols/symbol-slot.d.ts.map +1 -1
- package/dist/src/symbols/symbol-slot.js +7 -0
- package/dist/src/symbols/symbol-slot.js.map +1 -1
- package/dist/src/symbols/symbol-slot.test.js +18 -1
- package/dist/src/symbols/symbol-slot.test.js.map +1 -1
- package/dist/src/symbols/symbol-table.d.ts.map +1 -1
- package/dist/src/symbols/symbol-table.js +13 -3
- package/dist/src/symbols/symbol-table.js.map +1 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +11 -5
- package/dist/src/utils.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 +128 -68
- package/dist/test/browser-build.test.js.map +1 -1
- package/dist/test/reactivity/shallow-reactive.test.js +4 -0
- package/dist/test/reactivity/shallow-reactive.test.js.map +1 -1
- package/dist/test/symbols/deconflicted-name.test.d.ts +2 -0
- package/dist/test/symbols/deconflicted-name.test.d.ts.map +1 -0
- package/dist/test/symbols/deconflicted-name.test.js +120 -0
- package/dist/test/symbols/deconflicted-name.test.js.map +1 -0
- package/dist/test/symbols/output-scope.test.js +41 -0
- package/dist/test/symbols/output-scope.test.js.map +1 -1
- package/dist/testing/create-test-wrapper.d.ts +75 -2
- package/dist/testing/create-test-wrapper.d.ts.map +1 -1
- package/dist/testing/create-test-wrapper.js +55 -1
- package/dist/testing/create-test-wrapper.js.map +1 -1
- package/dist/testing/devtools-utils.d.ts +12 -3
- package/dist/testing/devtools-utils.d.ts.map +1 -1
- package/dist/testing/devtools-utils.js +26 -4
- package/dist/testing/devtools-utils.js.map +1 -1
- package/dist/testing/extend-expect.d.ts +26 -0
- package/dist/testing/extend-expect.d.ts.map +1 -1
- package/dist/testing/extend-expect.js +20 -0
- package/dist/testing/extend-expect.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/render.d.ts +9 -0
- package/dist/testing/render.d.ts.map +1 -1
- package/dist/testing/render.js +11 -0
- package/dist/testing/render.js.map +1 -1
- package/dist/testing/vitest.d.js +12 -0
- package/dist/testing/vitest.d.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/api/components/AppendRegion.md +83 -0
- package/docs/api/components/Block.md +49 -0
- package/docs/api/components/CopyFile.md +26 -0
- package/docs/api/components/Declaration.md +85 -0
- package/docs/api/components/For.md +91 -0
- package/docs/api/components/Indent.md +40 -0
- package/docs/api/components/List.md +68 -0
- package/docs/api/components/MemberDeclaration.md +89 -0
- package/docs/api/components/MemberName.md +21 -0
- package/docs/api/components/MemberScope.md +81 -0
- package/docs/api/components/Name.md +19 -0
- package/docs/api/components/Output.md +62 -0
- package/docs/api/components/Prose.md +29 -0
- package/docs/api/components/ReferenceOrContent.md +28 -0
- package/docs/api/components/Scope.md +83 -0
- package/docs/api/components/Show.md +32 -0
- package/docs/api/components/SourceDirectory.md +28 -0
- package/docs/api/components/SourceFile.md +60 -0
- package/docs/api/components/StatementList.md +29 -0
- package/docs/api/components/Switch.md +42 -0
- package/docs/api/components/TemplateFile.md +71 -0
- package/docs/api/components/TemplateVariable.md +57 -0
- package/docs/api/components/UpdateFile.md +56 -0
- package/docs/api/components/Wrap.md +40 -0
- package/docs/api/components/createAccessExpression.md +55 -0
- package/docs/api/components/index.md +27 -0
- package/docs/api/contexts/Assignment-context.md +43 -0
- package/docs/api/contexts/Binder-context.md +22 -0
- package/docs/api/contexts/Declaration-context.md +15 -0
- package/docs/api/contexts/Member-context.md +17 -0
- package/docs/api/contexts/MemberDeclaration-context.md +24 -0
- package/docs/api/contexts/NamePolicy-context.md +18 -0
- package/docs/api/contexts/Scope-context.md +20 -0
- package/docs/api/contexts/SourceDirectory-context.md +26 -0
- package/docs/api/contexts/SourceFile-context.md +19 -0
- package/docs/api/contexts/index.md +11 -0
- package/docs/api/functions/attachDiagnosticsCollector.md +18 -0
- package/docs/api/functions/baseListPropsToMapJoinArgs.md +20 -0
- package/docs/api/functions/children.md +27 -0
- package/docs/api/functions/childrenArray.md +25 -0
- package/docs/api/functions/code.md +25 -0
- package/docs/api/functions/computed.md +18 -0
- package/docs/api/functions/createComponent.md +20 -0
- package/docs/api/functions/createContentSlot.md +33 -0
- package/docs/api/functions/createContext.md +19 -0
- package/docs/api/functions/createCustomContext.md +18 -0
- package/docs/api/functions/createDeclarationTap.md +20 -0
- package/docs/api/functions/createFileResource.md +35 -0
- package/docs/api/functions/createFormatOptionsContextFor.md +28 -0
- package/docs/api/functions/createIntrinsic.md +19 -0
- package/docs/api/functions/createMemberTap.md +20 -0
- package/docs/api/functions/createNamePolicy.md +37 -0
- package/docs/api/functions/createNamedContext.md +19 -0
- package/docs/api/functions/createOutputBinder.md +24 -0
- package/docs/api/functions/createRenderTreeHook.md +19 -0
- package/docs/api/functions/createResource.md +77 -0
- package/docs/api/functions/createScope.md +35 -0
- package/docs/api/functions/createScopeTap.md +20 -0
- package/docs/api/functions/createSourceFileTap.md +20 -0
- package/docs/api/functions/createSymbol.md +25 -0
- package/docs/api/functions/createSymbolSlot.md +19 -0
- package/docs/api/functions/createTap.md +55 -0
- package/docs/api/functions/decl.md +20 -0
- package/docs/api/functions/defaultProps.md +21 -0
- package/docs/api/functions/effect.md +26 -0
- package/docs/api/functions/emitDiagnostic.md +18 -0
- package/docs/api/functions/emitSymbol.md +18 -0
- package/docs/api/functions/ensureIsEmpty.md +20 -0
- package/docs/api/functions/findCurrentEffectId.md +19 -0
- package/docs/api/functions/findKeyedChild.md +19 -0
- package/docs/api/functions/findKeyedChildren.md +19 -0
- package/docs/api/functions/findUnkeyedChildren.md +18 -0
- package/docs/api/functions/formatReactivePropertyLabel.md +21 -0
- package/docs/api/functions/getAssignmentSymbol.md +19 -0
- package/docs/api/functions/getContext.md +17 -0
- package/docs/api/functions/getContextForRenderNode.md +18 -0
- package/docs/api/functions/getDiagnosticsForTree.md +18 -0
- package/docs/api/functions/getEffectDebugId.md +18 -0
- package/docs/api/functions/getElementCache.md +17 -0
- package/docs/api/functions/getReactiveCreationLocation.md +18 -0
- package/docs/api/functions/getSymbolCreator.md +18 -0
- package/docs/api/functions/getSymbolCreatorSymbol.md +17 -0
- package/docs/api/functions/index.md +105 -0
- package/docs/api/functions/inspectRefkey.md +18 -0
- package/docs/api/functions/instantiateTakenMembersTo.md +20 -0
- package/docs/api/functions/isComponentCreator.md +19 -0
- package/docs/api/functions/isCustomContext.md +18 -0
- package/docs/api/functions/isIntrinsicElement.md +18 -0
- package/docs/api/functions/isKeyedChild.md +18 -0
- package/docs/api/functions/isLibrarySymbolReference.md +18 -0
- package/docs/api/functions/isMemberRefkey.md +18 -0
- package/docs/api/functions/isNamekey.md +18 -0
- package/docs/api/functions/isPrintHook.md +18 -0
- package/docs/api/functions/isRefkey.md +18 -0
- package/docs/api/functions/isRefkeyable.md +18 -0
- package/docs/api/functions/isRenderableObject.md +20 -0
- package/docs/api/functions/isSymbolRefkey.md +18 -0
- package/docs/api/functions/join.md +33 -0
- package/docs/api/functions/mapJoin.md +106 -0
- package/docs/api/functions/memberRefkey.md +27 -0
- package/docs/api/functions/memo.md +29 -0
- package/docs/api/functions/mergeProps.md +64 -0
- package/docs/api/functions/moveTakenMembersTo.md +18 -0
- package/docs/api/functions/namekey.md +41 -0
- package/docs/api/functions/nextReactiveId.md +19 -0
- package/docs/api/functions/notifyContentState.md +17 -0
- package/docs/api/functions/onCleanup.md +26 -0
- package/docs/api/functions/printTree.md +31 -0
- package/docs/api/functions/reactivePropertyRefId.md +21 -0
- package/docs/api/functions/ref.md +21 -0
- package/docs/api/functions/refId.md +18 -0
- package/docs/api/functions/refkey.md +24 -0
- package/docs/api/functions/render.md +31 -0
- package/docs/api/functions/renderAsync.md +31 -0
- package/docs/api/functions/renderTree.md +18 -0
- package/docs/api/functions/reportDiagnostics.md +18 -0
- package/docs/api/functions/resetRefIdCounter.md +17 -0
- package/docs/api/functions/resolve.md +31 -0
- package/docs/api/functions/root.md +25 -0
- package/docs/api/functions/shallowReactive.md +18 -0
- package/docs/api/functions/shallowRef.md +21 -0
- package/docs/api/functions/sourceFilesForTree.md +31 -0
- package/docs/api/functions/splitProps.md +19 -0
- package/docs/api/functions/stc.md +18 -0
- package/docs/api/functions/sti.md +18 -0
- package/docs/api/functions/symbolForRefkey.md +24 -0
- package/docs/api/functions/taggedComponent.md +19 -0
- package/docs/api/functions/takeSymbols.md +18 -0
- package/docs/api/functions/text.md +19 -0
- package/docs/api/functions/toRef.md +20 -0
- package/docs/api/functions/toRefkey.md +18 -0
- package/docs/api/functions/toRefs.md +20 -0
- package/docs/api/functions/traverseOutput.md +21 -0
- package/docs/api/functions/unresolvedRefkey.md +18 -0
- package/docs/api/functions/untrack.md +18 -0
- package/docs/api/functions/useContext.md +18 -0
- package/docs/api/functions/useFormatOptions.md +18 -0
- package/docs/api/functions/useMemberContext.md +17 -0
- package/docs/api/functions/useMemberScope.md +17 -0
- package/docs/api/functions/writeOutput.md +21 -0
- package/docs/api/index.md +9 -0
- package/docs/api/testing/functions/createTestWrapper.md +70 -0
- package/docs/api/testing/functions/d.md +21 -0
- package/docs/api/testing/functions/dedent.md +18 -0
- package/docs/api/testing/functions/index.md +6 -0
- package/docs/api/testing/functions/renderToString.md +20 -0
- package/docs/api/testing/index.md +4 -0
- package/docs/api/testing/types/TestWrapper.md +10 -0
- package/docs/api/testing/types/ToRenderToOptions.md +24 -0
- package/docs/api/testing/types/index.md +4 -0
- package/docs/api/types/AlignIntrinsicElement.md +5 -0
- package/docs/api/types/AppendRegionProps.md +5 -0
- package/docs/api/types/BaseListProps.md +21 -0
- package/docs/api/types/BasePartProps.md +10 -0
- package/docs/api/types/BasicScope.md +15 -0
- package/docs/api/types/BasicSymbol.md +18 -0
- package/docs/api/types/Binder.md +18 -0
- package/docs/api/types/BinderOptions.md +7 -0
- package/docs/api/types/BrIntrinsicElement.md +5 -0
- package/docs/api/types/BreakParentIntrinsicElement.md +5 -0
- package/docs/api/types/Child.md +5 -0
- package/docs/api/types/Children.md +5 -0
- package/docs/api/types/ChildrenOptions.md +7 -0
- package/docs/api/types/CommonFormatOptions.md +8 -0
- package/docs/api/types/Component.md +8 -0
- package/docs/api/types/ComponentContext.md +11 -0
- package/docs/api/types/ComponentCreator.md +11 -0
- package/docs/api/types/ComponentDefinition.md +7 -0
- package/docs/api/types/ContentOutputFile.md +10 -0
- package/docs/api/types/ContentSlot.md +12 -0
- package/docs/api/types/Context.md +19 -0
- package/docs/api/types/ContextProviderProps.md +8 -0
- package/docs/api/types/CopyFileContext.md +8 -0
- package/docs/api/types/CopyOutputFile.md +9 -0
- package/docs/api/types/CustomContext.md +10 -0
- package/docs/api/types/CustomContextChildrenCallback.md +5 -0
- package/docs/api/types/DeclarationProps.md +5 -0
- package/docs/api/types/DedentIntrinsicElement.md +5 -0
- package/docs/api/types/DedentToRootIntrinsicElement.md +5 -0
- package/docs/api/types/Diagnostic.md +11 -0
- package/docs/api/types/DiagnosticHandle.md +7 -0
- package/docs/api/types/DiagnosticInput.md +10 -0
- package/docs/api/types/DiagnosticSeverity.md +5 -0
- package/docs/api/types/DiagnosticStackEntry.md +9 -0
- package/docs/api/types/DiagnosticsCollector.md +8 -0
- package/docs/api/types/Disposable_2.md +7 -0
- package/docs/api/types/EffectDebugOptions.md +8 -0
- package/docs/api/types/EffectOptions.md +7 -0
- package/docs/api/types/ElementCache.md +5 -0
- package/docs/api/types/ElementCacheKey.md +5 -0
- package/docs/api/types/FillIntrinsicElement.md +5 -0
- package/docs/api/types/ForCallbackArgs.md +5 -0
- package/docs/api/types/ForSupportedCollections.md +5 -0
- package/docs/api/types/GroupIntrinsicElement.md +5 -0
- package/docs/api/types/HardlineIntrinsicElement.md +5 -0
- package/docs/api/types/HbrIntrinsicElement.md +5 -0
- package/docs/api/types/IfBreakIntrinsicElement.md +5 -0
- package/docs/api/types/IndentIfBreakIntrinsicElement.md +5 -0
- package/docs/api/types/IndentIntrinsicElement.md +5 -0
- package/docs/api/types/IntrinsicElement.md +5 -0
- package/docs/api/types/IntrinsicElementBase.md +9 -0
- package/docs/api/types/IntrinsicElements.md +26 -0
- package/docs/api/types/JoinOptions.md +9 -0
- package/docs/api/types/LbrIntrinsicElement.md +5 -0
- package/docs/api/types/LibrarySymbolReference.md +13 -0
- package/docs/api/types/LineIntrinsicElement.md +5 -0
- package/docs/api/types/LineSuffixBoundaryIntrinsicElement.md +5 -0
- package/docs/api/types/LineSuffixIntrinsicElement.md +5 -0
- package/docs/api/types/LiterallineIntrinsicElement.md +5 -0
- package/docs/api/types/MakeChildrenOptional.md +7 -0
- package/docs/api/types/MarkAsRootIntrinsicElement.md +5 -0
- package/docs/api/types/MatchProps.md +9 -0
- package/docs/api/types/MemberDeclarationProps.md +5 -0
- package/docs/api/types/MemberDescriptor.md +10 -0
- package/docs/api/types/MemberRefkey.md +10 -0
- package/docs/api/types/MemberResolutionContext.md +10 -0
- package/docs/api/types/MemberResolver.md +32 -0
- package/docs/api/types/MemberScopeProps.md +5 -0
- package/docs/api/types/Metadata.md +5 -0
- package/docs/api/types/NameConflictResolver.md +27 -0
- package/docs/api/types/NamePolicy.md +8 -0
- package/docs/api/types/NamePolicyGetter.md +9 -0
- package/docs/api/types/Namekey.md +10 -0
- package/docs/api/types/NamekeyOptions.md +8 -0
- package/docs/api/types/OnReactiveSetAddCallback.md +5 -0
- package/docs/api/types/OnReactiveSetDeleteCallback.md +5 -0
- package/docs/api/types/OutputDeclarationSpace.md +13 -0
- package/docs/api/types/OutputDirectory.md +59 -0
- package/docs/api/types/OutputFile.md +5 -0
- package/docs/api/types/OutputFileBase.md +8 -0
- package/docs/api/types/OutputMemberSpace.md +13 -0
- package/docs/api/types/OutputScope.md +33 -0
- package/docs/api/types/OutputScopeOptions.md +9 -0
- package/docs/api/types/OutputSpace.md +7 -0
- package/docs/api/types/OutputSymbol.md +78 -0
- package/docs/api/types/OutputSymbolOptions.md +16 -0
- package/docs/api/types/OutputVisitor.md +10 -0
- package/docs/api/types/PrintHook.md +10 -0
- package/docs/api/types/PrintTreeOptions.md +11 -0
- package/docs/api/types/Props.md +5 -0
- package/docs/api/types/ReactiveUnionSet.md +20 -0
- package/docs/api/types/ReactiveUnionSetOptions.md +8 -0
- package/docs/api/types/Refkey.md +5 -0
- package/docs/api/types/Refkeyable.md +5 -0
- package/docs/api/types/RefkeyableObject.md +7 -0
- package/docs/api/types/RenderableObject.md +9 -0
- package/docs/api/types/RenderedTextTree.md +5 -0
- package/docs/api/types/ResolutionResult.md +39 -0
- package/docs/api/types/ResolveDeclarationByKeyOptions.md +7 -0
- package/docs/api/types/Resource.md +11 -0
- package/docs/api/types/RootOptions.md +7 -0
- package/docs/api/types/SbrIntrinsicElement.md +5 -0
- package/docs/api/types/ScopeProps.md +5 -0
- package/docs/api/types/SoftlineIntrinsicElement.md +5 -0
- package/docs/api/types/SourceLocation.md +9 -0
- package/docs/api/types/SplitProps.md +12 -0
- package/docs/api/types/StcComponentCreator.md +9 -0
- package/docs/api/types/StcSignature.md +5 -0
- package/docs/api/types/StiComponentCreator.md +9 -0
- package/docs/api/types/StiSignature.md +7 -0
- package/docs/api/types/SymbolCreator.md +15 -0
- package/docs/api/types/SymbolRefkey.md +9 -0
- package/docs/api/types/SymbolSlot.md +12 -0
- package/docs/api/types/SymbolTable.md +15 -0
- package/docs/api/types/TakeSymbolCallback.md +7 -0
- package/docs/api/types/TakeSymbolsCallback.md +7 -0
- package/docs/api/types/Tap.md +11 -0
- package/docs/api/types/TapHandler.md +9 -0
- package/docs/api/types/Tapper.md +9 -0
- package/docs/api/types/TemplateVariableProps.md +5 -0
- package/docs/api/types/index.md +122 -0
- package/docs/api/variables/FormatOptions.md +5 -0
- package/docs/api/variables/Match.md +7 -0
- package/docs/api/variables/REFKEYABLE.md +5 -0
- package/docs/api/variables/RENDERABLE.md +5 -0
- package/docs/api/variables/TO_SYMBOL.md +39 -0
- package/docs/api/variables/contextsByKey.md +5 -0
- package/docs/api/variables/index.md +11 -0
- package/docs/api/variables/intrinsicElementKey.md +5 -0
- package/docs/api/variables/matchTag.md +5 -0
- package/docs/api/variables/printHookTag.md +7 -0
- package/docs/components.md +97 -0
- package/docs/context.md +67 -0
- package/docs/control-flow.md +5 -0
- package/docs/debugging.md +105 -0
- package/docs/formatting.md +99 -0
- package/docs/guides/language-package-guide.md +593 -0
- package/docs/guides/references-and-refkeys.md +210 -0
- package/docs/guides/style-guide.md +244 -0
- package/docs/index.md +22 -0
- package/docs/reactivity.md +68 -0
- package/docs/rendering.md +41 -0
- package/docs/symbols-and-scopes.md +180 -0
- package/package.json +21 -7
- package/src/binder.ts +154 -41
- package/src/components/AccessExpression.test.tsx +132 -0
- package/src/components/AccessExpression.tsx +344 -0
- package/src/components/Block.tsx +12 -0
- package/src/components/For.tsx +14 -10
- package/src/components/List.tsx +18 -5
- package/src/components/MemberDeclaration.tsx +6 -6
- package/src/components/MemberName.tsx +6 -0
- package/src/components/MemberScope.tsx +5 -0
- package/src/components/Output.tsx +4 -1
- package/src/components/Scope.tsx +6 -0
- package/src/components/SourceFile.tsx +22 -2
- package/src/components/Switch.tsx +11 -7
- package/src/components/index.tsx +1 -0
- package/src/context/binder.ts +4 -0
- package/src/context/format-options.ts +14 -1
- package/src/context/scope.ts +4 -0
- package/src/context/source-directory.ts +9 -0
- package/src/debug/cli.browser.ts +17 -0
- package/src/debug/cli.ts +3 -2
- package/src/debug/diagnostics-broadcast.test.tsx +98 -0
- package/src/debug/diagnostics.test.tsx +3 -2
- package/src/debug/effects.test.tsx +248 -36
- package/src/debug/effects.ts +198 -64
- package/src/debug/files.test.tsx +15 -35
- package/src/debug/files.ts +11 -11
- package/src/debug/index.ts +4 -0
- package/src/debug/message-format.test.tsx +759 -0
- package/src/debug/render-tree-orphans.test.tsx +344 -0
- package/src/debug/render.test.tsx +96 -118
- package/src/debug/render.ts +196 -125
- package/src/debug/source-map.browser.ts +30 -0
- package/src/debug/source-map.ts +135 -0
- package/src/debug/symbols.test.tsx +19 -20
- package/src/debug/symbols.ts +106 -23
- package/src/debug/trace-db.browser.ts +12 -0
- package/src/debug/trace-db.ts +42 -0
- package/src/debug/trace-writer.ts +962 -0
- package/src/debug/trace.ts +46 -32
- package/src/devtools/devtools-protocol.ts +361 -176
- package/src/devtools/devtools-server.browser.ts +4 -9
- package/src/devtools/devtools-server.ts +226 -33
- package/src/devtools/devtools-transport.ts +4 -4
- package/src/devtools-entry.browser.ts +11 -15
- package/src/devtools-entry.ts +9 -15
- package/src/diagnostics.ts +44 -22
- package/src/host/node-host.browser.ts +23 -0
- package/src/host/node-host.ts +22 -0
- package/src/library-symbol-reference.ts +52 -0
- package/src/name-policy.ts +30 -3
- package/src/reactivity.ts +179 -55
- package/src/render-stack.ts +4 -3
- package/src/render.ts +106 -30
- package/src/scheduler.ts +145 -26
- package/src/symbols/output-scope.ts +33 -1
- package/src/symbols/output-space.ts +13 -0
- package/src/symbols/output-symbol.ts +185 -22
- package/src/symbols/symbol-slot.test.tsx +28 -1
- package/src/symbols/symbol-slot.tsx +8 -0
- package/src/symbols/symbol-table.ts +13 -3
- package/src/utils.tsx +7 -4
- package/src/write-output.ts +6 -5
- package/temp/api-testing.json +673 -0
- package/temp/api.json +895 -73
- package/test/browser-build.test.ts +141 -76
- package/test/reactivity/shallow-reactive.test.tsx +4 -0
- package/test/symbols/deconflicted-name.test.ts +120 -0
- package/test/symbols/output-scope.test.ts +38 -0
- package/testing/create-test-wrapper.tsx +81 -2
- package/testing/devtools-utils.ts +46 -4
- package/testing/extend-expect.ts +22 -1
- package/testing/index.ts +1 -1
- package/testing/render.ts +9 -0
- package/testing/vitest.d.ts +18 -3
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Symbols & Scopes
|
|
2
|
+
|
|
3
|
+
Alloy's symbol system models declarations, references, and name resolution — the same concepts found in compilers, adapted for code generation.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The [**binder**](api/contexts/Binder-context.md) is the central registry, set up by [`<Output>`](api/components/Output.md). It tracks scopes and symbols. Scopes form a tree mirroring the output structure; each symbol lives in a scope and is identified by one or more [**refkeys**](api/types/Refkey.md). When a refkey appears in JSX, the binder resolves it to the target symbol and computes the scope path between reference and declaration so language packages can emit the correct reference syntax.
|
|
8
|
+
|
|
9
|
+
## Symbols
|
|
10
|
+
|
|
11
|
+
[`OutputSymbol`](api/types/OutputSymbol.md) is the base class. Key properties: reactive `name` (subject to name policies), `refkeys`, `scope`, and optional member spaces.
|
|
12
|
+
|
|
13
|
+
Language packages subclass `OutputSymbol` to add language-specific properties (e.g., accessibility, static/abstract flags).
|
|
14
|
+
|
|
15
|
+
`BasicSymbol` is a concrete subclass from core with "static" and "instance" member spaces — suitable for simple languages or prototyping.
|
|
16
|
+
|
|
17
|
+
### Declaring Symbols
|
|
18
|
+
|
|
19
|
+
[`<Declaration>`](api/components/Declaration.md) creates a `BasicSymbol` by default:
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
const fnKey = refkey();
|
|
23
|
+
<Declaration name="myFunction" refkey={fnKey}>
|
|
24
|
+
{/* content */}
|
|
25
|
+
</Declaration>;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
For custom symbol types, pass a pre-created symbol via `symbol`:
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
const sym = createSymbol(MyCustomSymbol, namekey, scope.symbols, options);
|
|
32
|
+
<Declaration symbol={sym}>{/* content */}</Declaration>;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
See [`OutputSymbol`](api/types/OutputSymbol.md) and [`OutputSymbolOptions`](api/types/OutputSymbolOptions.md) for parameter details.
|
|
36
|
+
|
|
37
|
+
Language packages wrap [`<Declaration>`](api/components/Declaration.md) with their own components that create language-specific symbol types.
|
|
38
|
+
|
|
39
|
+
### Member Spaces
|
|
40
|
+
|
|
41
|
+
Symbols can have member spaces holding child symbols. Override `static memberSpaces` to declare the space keys for your symbol type (e.g., `["static", "instance"]`). [`<MemberScope>`](api/components/MemberScope.md) enters a member space; [`<MemberDeclaration>`](api/components/MemberDeclaration.md) declares within it.
|
|
42
|
+
|
|
43
|
+
Member spaces ([`OutputMemberSpace`](api/types/OutputSpace.md)) belong to symbols; declaration spaces ([`OutputDeclarationSpace`](api/types/OutputSpace.md)) belong to scopes. Together they form the [`OutputSpace`](api/types/OutputSpace.md) type. Symbols register via the constructor `space` parameter.
|
|
44
|
+
|
|
45
|
+
### Typed Symbols
|
|
46
|
+
|
|
47
|
+
Symbols support a type-symbol relationship through three properties:
|
|
48
|
+
|
|
49
|
+
- **`isTyped`**: set at construction when `OutputSymbolOptions.type` is provided. Not reactive.
|
|
50
|
+
- **`type`**: reactive getter/setter for the type symbol reference. The setter accepts `OutputSymbol` or `Ref<OutputSymbol>` (for deferred resolution) and auto-dealiases. When `isTyped` is true but `type` is not yet resolved, the symbol's members are unavailable until the type arrives.
|
|
51
|
+
- **`hasTypeSymbol`**: derived reactive getter (`this.type !== undefined`).
|
|
52
|
+
|
|
53
|
+
Language packages can add their own symbol properties to control resolution behavior.
|
|
54
|
+
|
|
55
|
+
### Member Resolution
|
|
56
|
+
|
|
57
|
+
The default `resolveMemberByName()` performs:
|
|
58
|
+
|
|
59
|
+
1. If `isTyped`, delegate to `type.resolveMemberByName()` (or return `undefined` if type not yet available).
|
|
60
|
+
2. Otherwise, search member spaces in order for a matching name.
|
|
61
|
+
|
|
62
|
+
There is no privacy or reachability check in the default resolver. When a language needs access-control filtering, provide a custom `memberResolver` callback. **Return `void` to accept** the member; **throw an error to reject** it. See [`MemberResolver`](api/types/MemberResolver.md) for details.
|
|
63
|
+
|
|
64
|
+
## Scopes
|
|
65
|
+
|
|
66
|
+
`OutputScope` is the base class, forming a tree. Each scope has parent/children, one or more **declaration spaces** (named collections of symbols), and is either **lexical** (own declarations) or a **member** scope (exposing an owner symbol's members).
|
|
67
|
+
|
|
68
|
+
Language packages subclass `OutputScope` for custom declaration spaces and behavior (e.g., import tracking, namespace resolution).
|
|
69
|
+
|
|
70
|
+
`BasicScope` is a concrete subclass from core with a single "symbols" space — suitable for simple languages or prototyping.
|
|
71
|
+
|
|
72
|
+
[`<Scope>`](api/components/Scope.md) creates a `BasicScope` by default. Language packages pass custom scope instances via the `value` prop. Use [`createScope()`](api/contexts/Scope-context.md) to construct one.
|
|
73
|
+
|
|
74
|
+
### OutputScope Members
|
|
75
|
+
|
|
76
|
+
| Member | Type | Description |
|
|
77
|
+
| ------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
78
|
+
| `name` | `string` (reactive) | Descriptive name (used in debugging). |
|
|
79
|
+
| `parent` | `OutputScope \| undefined` (reactive) | Parent scope, or `undefined` for roots. |
|
|
80
|
+
| `children` | `Set<OutputScope>` (readonly) | Directly nested child scopes. |
|
|
81
|
+
| `binder` | `Binder \| undefined` (readonly) | Binder that owns this scope. |
|
|
82
|
+
| `metadata` | `Record<string, unknown>` | The property itself is not reactive; the returned object is a reactive plain object (`Record<string, unknown>` wrapped with Vue `reactive()`). |
|
|
83
|
+
| `spaceFor(key)` | `OutputSpace \| undefined` | Returns the declaration space for `key`. `undefined` if `key` is not in `declarationSpaces`. |
|
|
84
|
+
| `declarationSpaces` | `string[]` (static) | Space keys defined by this scope subclass. |
|
|
85
|
+
|
|
86
|
+
### Declaration Spaces
|
|
87
|
+
|
|
88
|
+
A scope can have multiple declaration spaces. Override `static declarationSpaces` to declare the space keys for your scope type. Core's `BasicScope` provides a single "symbols" space; language packages define their own — e.g., a language might define separate "types" and "values" spaces.
|
|
89
|
+
|
|
90
|
+
## Refkeys
|
|
91
|
+
|
|
92
|
+
A [`Refkey`](api/types/Refkey.md) uniquely identifies a symbol. Created with [`refkey()`](api/functions/refkey.md):
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
const myClassKey = refkey();
|
|
96
|
+
const myClassKey = refkey("MyClass"); // stable seed
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Composite:** `refkey(a, b)` — deterministic key from multiple arguments.
|
|
100
|
+
**Member:** [`memberRefkey(baseKey, "member")`](api/functions/memberRefkey.md) — access a member of another symbol.
|
|
101
|
+
|
|
102
|
+
When a `Refkey` appears as a JSX child, the binder resolves it and emits the appropriate reference. If resolution fails, [`unresolvedRefkey(refkey)`](api/functions/unresolvedRefkey.md) returns a placeholder.
|
|
103
|
+
|
|
104
|
+
A [`Namekey`](api/types/Namekey.md) is a refkey variant that carries a name and options. Use [`namekey(name, options?)`](api/functions/namekey.md) for names that must bypass the name policy:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
const name = namekey("$special", { ignoreNamePolicy: true });
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Binder
|
|
111
|
+
|
|
112
|
+
The central resolution engine. Tracks all scopes and symbols, resolves refkeys by searching up the scope tree, computes scope paths (`pathUp`/`pathDown`), and handles member resolution chains.
|
|
113
|
+
|
|
114
|
+
Set up by [`<Output>`](api/components/Output.md), available via [`BinderContext`](api/contexts/Binder-context.md). Scopes inherit binder from parent.
|
|
115
|
+
|
|
116
|
+
### [`resolve(refkey, options?)`](api/functions/resolve.md)
|
|
117
|
+
|
|
118
|
+
Primary API for resolving a refkey from a component. Returns a reactive `Ref<`[`ResolutionResult`](api/types/ResolutionResult.md)`>`. Generics narrow to language-specific types:
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
const result = resolve<MyLangScope, MyLangSymbol>(myRefkey);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The [`ResolutionResult`](api/types/ResolutionResult.md) contains the resolved symbol, common ancestor scope, scope paths, and member path. Language packages use `pathDown` to decide how to render a reference.
|
|
125
|
+
|
|
126
|
+
## Symbol Flow
|
|
127
|
+
|
|
128
|
+
Symbols can be **emitted** upward and **taken** by ancestors:
|
|
129
|
+
|
|
130
|
+
- [**`emitSymbol(symbol)`**](api/functions/emitSymbol.md) — emit from current component.
|
|
131
|
+
- [**`takeSymbols(cb?)`**](api/functions/takeSymbols.md) — capture emitted descendants. Returns a reactive set.
|
|
132
|
+
- [**`moveTakenMembersTo(symbol)`**](api/functions/moveTakenMembersTo.md) — take descendants and move as members.
|
|
133
|
+
- [**`createSymbolSlot()`**](api/functions/createSymbolSlot.md) — wrapper component capturing emitted symbols in a subtree.
|
|
134
|
+
|
|
135
|
+
Example: a variable declaration component wraps its type annotation in a symbol slot, then associates captured type symbols with the variable's symbol.
|
|
136
|
+
|
|
137
|
+
## Name Policies
|
|
138
|
+
|
|
139
|
+
`NamePolicy` transforms names by element type (e.g., camelCase for variables, PascalCase for classes). Set on [`<Output>`](api/components/Output.md), applied automatically. Symbols can opt out with `ignoreNamePolicy`.
|
|
140
|
+
|
|
141
|
+
Name conflict resolution is per-language (e.g., a language package might append `_1`, `_2` to conflicting imports).
|
|
142
|
+
|
|
143
|
+
## Extending Symbols and Scopes
|
|
144
|
+
|
|
145
|
+
Custom reactive properties use Vue's `track()` / `trigger()`:
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
import { track, trigger, TrackOpTypes, TriggerOpTypes } from "@alloy-js/core";
|
|
149
|
+
|
|
150
|
+
class CSharpSymbol extends OutputSymbol {
|
|
151
|
+
#isStatic = false;
|
|
152
|
+
get isStatic() {
|
|
153
|
+
track(this, TrackOpTypes.GET, "isStatic");
|
|
154
|
+
return this.#isStatic;
|
|
155
|
+
}
|
|
156
|
+
set isStatic(value: boolean) {
|
|
157
|
+
const old = this.#isStatic;
|
|
158
|
+
this.#isStatic = value;
|
|
159
|
+
trigger(this, TriggerOpTypes.SET, "isStatic", value, old);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## External Libraries
|
|
165
|
+
|
|
166
|
+
Language packages model external dependencies as scope/symbol trees outside rendered output. [`REFKEYABLE`](api/variables/REFKEYABLE.md) lets objects produce a refkey for resolution. [`TO_SYMBOL`](api/variables/TO_SYMBOL.md) enables lazy symbol creation — the binder calls `[TO_SYMBOL]()` on first reference.
|
|
167
|
+
|
|
168
|
+
Typical pattern:
|
|
169
|
+
|
|
170
|
+
1. Describe the library structure with a descriptor object.
|
|
171
|
+
2. Implement `[REFKEYABLE]()` (returns a refkey) and `[TO_SYMBOL]()` (creates the symbol) on each descriptor.
|
|
172
|
+
3. Cache symbols per binder in a `WeakMap<Binder, Symbol>`.
|
|
173
|
+
4. Use `lazyMemberInitializer` on container types to initialize members lazily when first accessed.
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
const lib = createLibrary("my-lib", { SomeType: { kind: "type", members: { ... } } });
|
|
177
|
+
<>{lib.SomeType}</> // symbol created lazily on first reference
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Library descriptors self-register on demand — no additional wiring to `<Output>` is needed.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alloy-js/core",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,37 +10,51 @@
|
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
12
|
"browser": "./dist/src/index.browser.js",
|
|
13
|
+
"development": "./dist/dev/src/index.js",
|
|
13
14
|
"import": "./dist/src/index.js"
|
|
14
15
|
},
|
|
15
16
|
"./jsx-runtime": {
|
|
16
17
|
"types": "./dist/src/jsx-runtime.d.ts",
|
|
18
|
+
"development": "./dist/dev/src/jsx-runtime.js",
|
|
17
19
|
"import": "./dist/src/jsx-runtime.js"
|
|
18
20
|
},
|
|
19
21
|
"./testing": {
|
|
22
|
+
"development": "./dist/dev/testing/index.js",
|
|
20
23
|
"import": "./dist/testing/index.js"
|
|
21
24
|
},
|
|
22
25
|
"./testing/matchers": {
|
|
23
26
|
"types": "./testing/vitest.d.ts"
|
|
24
27
|
},
|
|
25
28
|
"./stc": {
|
|
29
|
+
"development": "./dist/dev/src/components/stc/index.js",
|
|
26
30
|
"import": "./dist/src/components/stc/index.js"
|
|
27
31
|
},
|
|
28
32
|
"./components": {
|
|
33
|
+
"development": "./dist/dev/src/components/index.js",
|
|
29
34
|
"import": "./dist/src/components/index.js"
|
|
30
35
|
},
|
|
31
36
|
"./devtools": {
|
|
32
37
|
"types": "./dist/src/devtools-entry.d.ts",
|
|
33
38
|
"browser": "./dist/src/devtools-entry.browser.js",
|
|
39
|
+
"development": "./dist/dev/src/devtools-entry.js",
|
|
34
40
|
"import": "./dist/src/devtools-entry.js"
|
|
35
41
|
}
|
|
36
42
|
},
|
|
37
43
|
"browser": {
|
|
38
44
|
"./dist/src/host/alloy-host.js": "./dist/src/host/alloy-host.browser.js",
|
|
39
45
|
"./src/host/alloy-host.ts": "./src/host/alloy-host.browser.ts",
|
|
46
|
+
"./dist/src/host/node-host.js": "./dist/src/host/node-host.browser.js",
|
|
47
|
+
"./src/host/node-host.ts": "./src/host/node-host.browser.ts",
|
|
40
48
|
"./dist/src/inspect.js": "./dist/src/inspect.browser.js",
|
|
41
49
|
"./src/inspect.ts": "./src/inspect.browser.ts",
|
|
50
|
+
"./dist/src/debug/source-map.js": "./dist/src/debug/source-map.browser.js",
|
|
51
|
+
"./src/debug/source-map.ts": "./src/debug/source-map.browser.ts",
|
|
42
52
|
"./dist/src/devtools/devtools-server.js": "./dist/src/devtools/devtools-server.browser.js",
|
|
43
|
-
"./src/devtools/devtools-server.ts": "./src/devtools/devtools-server.browser.ts"
|
|
53
|
+
"./src/devtools/devtools-server.ts": "./src/devtools/devtools-server.browser.ts",
|
|
54
|
+
"./dist/src/debug/trace-db.js": "./dist/src/debug/trace-db.browser.js",
|
|
55
|
+
"./src/debug/trace-db.ts": "./src/debug/trace-db.browser.ts",
|
|
56
|
+
"./dist/src/debug/cli.js": "./dist/src/debug/cli.browser.js",
|
|
57
|
+
"./src/debug/cli.ts": "./src/debug/cli.browser.ts"
|
|
44
58
|
},
|
|
45
59
|
"keywords": [],
|
|
46
60
|
"author": "brian.terlson@microsoft.com",
|
|
@@ -56,19 +70,19 @@
|
|
|
56
70
|
"ws": "^8.19.0"
|
|
57
71
|
},
|
|
58
72
|
"devDependencies": {
|
|
59
|
-
"@alloy-js/cli": "~0.22.0 || >= 0.23.0-dev.3",
|
|
60
|
-
"@alloy-js/rollup-plugin": "~0.1.0 || >= 0.1.1-dev.1",
|
|
61
73
|
"@microsoft/api-extractor": "~7.52.8",
|
|
62
74
|
"@rollup/plugin-typescript": "^12.1.2",
|
|
63
75
|
"concurrently": "^9.2.0",
|
|
64
76
|
"typescript": "^5.8.3",
|
|
65
77
|
"vite": "^7.0.6",
|
|
66
|
-
"vitest": "3.2.4"
|
|
78
|
+
"vitest": "3.2.4",
|
|
79
|
+
"@alloy-js/cli": "~0.23.0",
|
|
80
|
+
"@alloy-js/rollup-plugin": "~0.1.1"
|
|
67
81
|
},
|
|
68
82
|
"type": "module",
|
|
69
83
|
"scripts": {
|
|
70
|
-
"generate-docs": "api-extractor run",
|
|
71
|
-
"build": "alloy build && pnpm run generate-docs",
|
|
84
|
+
"generate-docs": "api-extractor run && api-extractor run -c api-extractor.testing.json",
|
|
85
|
+
"build": "alloy build --with-dev && pnpm run generate-docs",
|
|
72
86
|
"clean": "rimraf dist/ .temp/",
|
|
73
87
|
"test": "vitest run",
|
|
74
88
|
"test:watch": "vitest -w",
|
package/src/binder.ts
CHANGED
|
@@ -102,7 +102,9 @@ export interface Binder {
|
|
|
102
102
|
* * **commonScope**: global scope, because this is the most specific scope that contains both the declaration and the reference.
|
|
103
103
|
* * **pathUp**: [namespace scope 2], because this is the scope between the reference and the common scope.
|
|
104
104
|
* * **pathDown**: [namespace scope 1], because this is the scope between the common scope and the declaration
|
|
105
|
-
* * **memberPath**: [
|
|
105
|
+
* * **memberPath**: [bar]
|
|
106
|
+
* * **lexicalDeclaration**: foo
|
|
107
|
+
* For deeper chains (e.g., foo.bar.baz where bar and baz are member symbols, foo is not): memberPath = [bar, baz], lexicalDeclaration = foo.
|
|
106
108
|
*/
|
|
107
109
|
export interface ResolutionResult<
|
|
108
110
|
TScope extends OutputScope,
|
|
@@ -149,8 +151,8 @@ export interface ResolutionResult<
|
|
|
149
151
|
commonScope: TScope | undefined;
|
|
150
152
|
|
|
151
153
|
/**
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
+
* Member symbols from the lexical declaration (exclusive) to the resolved symbol
|
|
155
|
+
* (inclusive). Empty when resolving a non-member symbol.
|
|
154
156
|
*/
|
|
155
157
|
memberPath: TSymbol[];
|
|
156
158
|
}
|
|
@@ -164,6 +166,36 @@ export interface MemberDescriptor {
|
|
|
164
166
|
isMemberAccess: boolean;
|
|
165
167
|
}
|
|
166
168
|
|
|
169
|
+
/**
|
|
170
|
+
* A callable interface invoked by the binder when two or more symbols in the
|
|
171
|
+
* same scope share a name. The resolver mutates symbol names to eliminate
|
|
172
|
+
* conflicts (e.g., appending `_2`, `_3`).
|
|
173
|
+
*
|
|
174
|
+
* @remarks
|
|
175
|
+
* The resolver is called with the shared `name` and all symbols in the scope
|
|
176
|
+
* that have that original name. Rename a symbol by assigning to `symbol.name`.
|
|
177
|
+
* Symbols with `ignoreNameConflict: true` are excluded. The default resolver
|
|
178
|
+
* keeps the first symbol unchanged and renames subsequent ones
|
|
179
|
+
* `originalName + "_2"`, `originalName + "_3"`, etc.
|
|
180
|
+
*
|
|
181
|
+
* Assigned names pass through the active name policy before being stored;
|
|
182
|
+
* design suffixes to produce the correct final name after policy
|
|
183
|
+
* transformation, or set `ignoreNamePolicy` on the symbol after resolution.
|
|
184
|
+
*
|
|
185
|
+
* Conflict detection is keyed on `originalName`
|
|
186
|
+
* (see {@link OutputSymbol.originalName}). Symbols that differ in original
|
|
187
|
+
* name but normalize to the same policy-applied name are never detected as
|
|
188
|
+
* conflicting.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* const resolver: NameConflictResolver = (name, symbols) => {
|
|
193
|
+
* for (let i = 1; i < symbols.length; i++) {
|
|
194
|
+
* symbols[i].name = symbols[i].originalName + "_" + (i + 1);
|
|
195
|
+
* }
|
|
196
|
+
* };
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
167
199
|
export interface NameConflictResolver {
|
|
168
200
|
(name: string, symbols: OutputSymbol[]): void;
|
|
169
201
|
}
|
|
@@ -187,7 +219,28 @@ export interface MemberResolutionContext<TScope extends OutputScope> {
|
|
|
187
219
|
}
|
|
188
220
|
|
|
189
221
|
/**
|
|
222
|
+
* A callback that performs access-control filtering during member resolution.
|
|
223
|
+
*
|
|
224
|
+
* @remarks
|
|
190
225
|
*
|
|
226
|
+
* When provided to {@link ResolveDeclarationByKeyOptions}, it entirely replaces
|
|
227
|
+
* the default checks (ownership assertion and `isMemberSymbol` assertion).
|
|
228
|
+
*
|
|
229
|
+
* **Contract:**
|
|
230
|
+
* - **Return `void`** to accept the member.
|
|
231
|
+
* - **Throw an error** to reject the member — the error propagates to the caller,
|
|
232
|
+
* matching the behavior of the default checks.
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```ts
|
|
236
|
+
* const resolver: MemberResolver<MyScope, MySymbol> = (owner, member, ctx) => {
|
|
237
|
+
* if (member.isPrivate && !ctx.isMemberAccess) {
|
|
238
|
+
* throw new Error(`${member.name} is not accessible here`);
|
|
239
|
+
* }
|
|
240
|
+
* };
|
|
241
|
+
* ```
|
|
242
|
+
*
|
|
243
|
+
* @see {@link MemberResolutionContext} for available context properties.
|
|
191
244
|
*/
|
|
192
245
|
export interface MemberResolver<
|
|
193
246
|
TScope extends OutputScope,
|
|
@@ -209,6 +262,30 @@ export interface BinderOptions {
|
|
|
209
262
|
nameConflictResolver?: NameConflictResolver;
|
|
210
263
|
}
|
|
211
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Construct a scope instance and register it with devtools. Prefer this over
|
|
267
|
+
* calling `new` directly so that debugging tools can track the scope.
|
|
268
|
+
*
|
|
269
|
+
* @remarks
|
|
270
|
+
*
|
|
271
|
+
* Inside a component, obtain the current scope with `useScope()` and pass it
|
|
272
|
+
* as the `parentScope` constructor argument so the new scope is wired into
|
|
273
|
+
* the scope tree.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```tsx
|
|
277
|
+
* function MyScope(props) {
|
|
278
|
+
* const parentScope = useScope();
|
|
279
|
+
* const scope = createScope(MyScope, "scope-name", parentScope);
|
|
280
|
+
* return <Scope value={scope}>{props.children}</Scope>;
|
|
281
|
+
* }
|
|
282
|
+
* ```
|
|
283
|
+
*
|
|
284
|
+
* @param ctor - The scope subclass constructor.
|
|
285
|
+
* @param args - Positional arguments forwarded directly to the scope
|
|
286
|
+
* constructor; see {@link OutputScope} for the base-class constructor
|
|
287
|
+
* signature.
|
|
288
|
+
*/
|
|
212
289
|
export function createScope<TScope extends OutputScope, Args extends unknown[]>(
|
|
213
290
|
ctor: new (...args: Args) => TScope,
|
|
214
291
|
...args: Args
|
|
@@ -218,6 +295,19 @@ export function createScope<TScope extends OutputScope, Args extends unknown[]>(
|
|
|
218
295
|
return scope;
|
|
219
296
|
}
|
|
220
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Construct a symbol instance and register it with devtools. Prefer this over
|
|
300
|
+
* calling `new` directly so that debugging tools can track the symbol.
|
|
301
|
+
*
|
|
302
|
+
* @remarks
|
|
303
|
+
*
|
|
304
|
+
* Binder registration (via `useBinder()` + `notifySymbolCreated()`) happens
|
|
305
|
+
* inside the `OutputSymbol` constructor regardless of whether you use
|
|
306
|
+
* `createSymbol` or `new`. This helper only adds devtools registration.
|
|
307
|
+
*
|
|
308
|
+
* @param ctor - The symbol subclass constructor.
|
|
309
|
+
* @param args - Arguments forwarded to the constructor.
|
|
310
|
+
*/
|
|
221
311
|
export function createSymbol<
|
|
222
312
|
TSymbol extends OutputSymbol,
|
|
223
313
|
Args extends unknown[],
|
|
@@ -643,54 +733,63 @@ export function createOutputBinder(options: BinderOptions = {}): Binder {
|
|
|
643
733
|
}
|
|
644
734
|
|
|
645
735
|
function notifySymbolCreated(symbol: OutputSymbol): void {
|
|
646
|
-
effect<Refkey[]>(
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
if (oldRefkeys) {
|
|
655
|
-
for (const refkey of oldRefkeys) {
|
|
656
|
-
if (!symbol.refkeys.includes(refkey)) {
|
|
657
|
-
// remove the old refkey from the known declarations
|
|
658
|
-
knownDeclarations.delete(refkey);
|
|
736
|
+
effect<Refkey[]>(
|
|
737
|
+
(oldRefkeys) => {
|
|
738
|
+
if (symbol.refkeys) {
|
|
739
|
+
debug.trace(
|
|
740
|
+
TracePhase.resolve.pending,
|
|
741
|
+
() => `Notifying resolutions for ${formatRefkeys(symbol.refkeys)}.`,
|
|
742
|
+
);
|
|
743
|
+
}
|
|
659
744
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
745
|
+
if (oldRefkeys) {
|
|
746
|
+
for (const refkey of oldRefkeys) {
|
|
747
|
+
if (!symbol.refkeys.includes(refkey)) {
|
|
748
|
+
// remove the old refkey from the known declarations
|
|
749
|
+
knownDeclarations.delete(refkey);
|
|
750
|
+
|
|
751
|
+
// reset any waiting declarations
|
|
752
|
+
if (waitingDeclarations.has(refkey)) {
|
|
753
|
+
const signal = waitingDeclarations.get(refkey)!;
|
|
754
|
+
signal.value = undefined;
|
|
755
|
+
}
|
|
664
756
|
}
|
|
665
757
|
}
|
|
666
758
|
}
|
|
667
|
-
}
|
|
668
759
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
760
|
+
for (const refkey of symbol.refkeys) {
|
|
761
|
+
// notify those waiting for this refkey
|
|
762
|
+
knownDeclarations.set(refkey, symbol);
|
|
763
|
+
if (waitingDeclarations.has(refkey)) {
|
|
764
|
+
const signal = waitingDeclarations.get(refkey)!;
|
|
765
|
+
signal.value = symbol;
|
|
766
|
+
}
|
|
676
767
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
768
|
+
const scope = symbol.scope;
|
|
769
|
+
if (!scope) {
|
|
770
|
+
continue;
|
|
771
|
+
}
|
|
681
772
|
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
773
|
+
// notify those waiting for this symbol name
|
|
774
|
+
const waitingScope = waitingSymbolNames.get(scope);
|
|
775
|
+
if (waitingScope) {
|
|
776
|
+
const waitingName = waitingScope.get(symbol.name);
|
|
777
|
+
if (waitingName) {
|
|
778
|
+
waitingName.value = symbol;
|
|
779
|
+
}
|
|
688
780
|
}
|
|
689
781
|
}
|
|
690
|
-
}
|
|
691
782
|
|
|
692
|
-
|
|
693
|
-
|
|
783
|
+
return [...symbol.refkeys];
|
|
784
|
+
},
|
|
785
|
+
undefined,
|
|
786
|
+
{
|
|
787
|
+
debug: {
|
|
788
|
+
name: "binder:notifySymbolCreated",
|
|
789
|
+
type: "binder",
|
|
790
|
+
},
|
|
791
|
+
},
|
|
792
|
+
);
|
|
694
793
|
}
|
|
695
794
|
}
|
|
696
795
|
|
|
@@ -794,6 +893,20 @@ export function getSymbolCreatorSymbol(): typeof createSymbolsSymbol {
|
|
|
794
893
|
return createSymbolsSymbol;
|
|
795
894
|
}
|
|
796
895
|
|
|
896
|
+
/**
|
|
897
|
+
* An object that can register symbols into a binder. Pass instances to the
|
|
898
|
+
* `externals` prop of `<Output>` to make library symbols resolvable.
|
|
899
|
+
*
|
|
900
|
+
* @remarks
|
|
901
|
+
* `SymbolCreator` is a low-level core mechanism for eager symbol registration.
|
|
902
|
+
* The recommended pattern for language packages is lazy self-registration:
|
|
903
|
+
* implement `[TO_SYMBOL]()` on descriptors to call `useBinder()`, create and
|
|
904
|
+
* cache symbols per binder via a `WeakMap`, and register them into the
|
|
905
|
+
* appropriate scope automatically. This approach does not require `externals`.
|
|
906
|
+
* See the C# package's `createLibrary()` for a reference implementation.
|
|
907
|
+
*
|
|
908
|
+
* See {@link TO_SYMBOL} and {@link REFKEYABLE}.
|
|
909
|
+
*/
|
|
797
910
|
export interface SymbolCreator {
|
|
798
911
|
[createSymbolsSymbol](binder: Binder): void;
|
|
799
912
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import "../../testing/extend-expect.js";
|
|
3
|
+
import {
|
|
4
|
+
BasePartProps,
|
|
5
|
+
createAccessExpression,
|
|
6
|
+
} from "../components/AccessExpression.jsx";
|
|
7
|
+
import { code } from "../index.js";
|
|
8
|
+
import { printTree, renderTree } from "../render.js";
|
|
9
|
+
import { Children } from "../runtime/component.js";
|
|
10
|
+
|
|
11
|
+
interface TestPartProps extends BasePartProps {
|
|
12
|
+
name?: string;
|
|
13
|
+
args?: Children;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface TestPart extends Record<string, unknown> {
|
|
17
|
+
name: string | undefined;
|
|
18
|
+
args: Children | undefined;
|
|
19
|
+
isFirst: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const { Expression, Part } = createAccessExpression<TestPartProps, TestPart>({
|
|
23
|
+
createDescriptor(props, symbol, first) {
|
|
24
|
+
return {
|
|
25
|
+
name: symbol?.name ?? props.name,
|
|
26
|
+
args: props.args,
|
|
27
|
+
isFirst: first,
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
getBase(part) {
|
|
32
|
+
return part.name ?? "";
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
formatPart(part, _prevPart, _inCallChain) {
|
|
36
|
+
if (part.args !== undefined) {
|
|
37
|
+
return code`.${part.name}(${part.args})`;
|
|
38
|
+
}
|
|
39
|
+
return code`.${part.name}`;
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
isCallPart(part) {
|
|
43
|
+
return part.args !== undefined;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe("createAccessExpression", () => {
|
|
48
|
+
it("renders a single part as the base", () => {
|
|
49
|
+
expect(
|
|
50
|
+
<Expression>
|
|
51
|
+
<Part name="foo" />
|
|
52
|
+
</Expression>,
|
|
53
|
+
).toRenderTo("foo");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("renders multiple parts with dot access", () => {
|
|
57
|
+
expect(
|
|
58
|
+
<Expression>
|
|
59
|
+
<Part name="foo" />
|
|
60
|
+
<Part name="bar" />
|
|
61
|
+
<Part name="baz" />
|
|
62
|
+
</Expression>,
|
|
63
|
+
).toRenderTo("foo.bar.baz");
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("renders parts with call arguments", () => {
|
|
67
|
+
expect(
|
|
68
|
+
<Expression>
|
|
69
|
+
<Part name="foo" />
|
|
70
|
+
<Part name="bar" args="x, y" />
|
|
71
|
+
</Expression>,
|
|
72
|
+
).toRenderTo("foo.bar(x, y)");
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("returns empty for no parts", () => {
|
|
76
|
+
expect(<Expression>{false}</Expression>).toRenderTo("");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("flattens nested Expression instances", () => {
|
|
80
|
+
const inner = (
|
|
81
|
+
<Expression>
|
|
82
|
+
<Part name="bar" />
|
|
83
|
+
<Part name="baz" />
|
|
84
|
+
</Expression>
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
expect(
|
|
88
|
+
<Expression>
|
|
89
|
+
<Part name="foo" />
|
|
90
|
+
{inner}
|
|
91
|
+
</Expression>,
|
|
92
|
+
).toRenderTo("foo.bar.baz");
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("ignores non-Part children", () => {
|
|
96
|
+
expect(
|
|
97
|
+
<Expression>
|
|
98
|
+
<Part name="foo" />
|
|
99
|
+
{"some string"}
|
|
100
|
+
<Part name="bar" />
|
|
101
|
+
</Expression>,
|
|
102
|
+
).toRenderTo("foo.bar");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
describe("createAccessExpression: call chain formatting", () => {
|
|
107
|
+
it("uses linear format with only one call", () => {
|
|
108
|
+
const tree = renderTree(
|
|
109
|
+
<Expression>
|
|
110
|
+
<Part name="foo" />
|
|
111
|
+
<Part name="bar" args="x" />
|
|
112
|
+
</Expression>,
|
|
113
|
+
);
|
|
114
|
+
// Single call → linear, no grouping.
|
|
115
|
+
expect(printTree(tree)).toBe("foo.bar(x)");
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("uses call chain format with multiple calls", () => {
|
|
119
|
+
const tree = renderTree(
|
|
120
|
+
<Expression>
|
|
121
|
+
<Part name="foo" />
|
|
122
|
+
<Part name="bar" args="x" />
|
|
123
|
+
<Part name="baz" args="y" />
|
|
124
|
+
</Expression>,
|
|
125
|
+
);
|
|
126
|
+
// Multiple calls → call chain with group/indent wrapping.
|
|
127
|
+
const result = printTree(tree);
|
|
128
|
+
// Should contain both calls.
|
|
129
|
+
expect(result).toContain("bar(x)");
|
|
130
|
+
expect(result).toContain("baz(y)");
|
|
131
|
+
});
|
|
132
|
+
});
|