@alloy-js/core 0.24.0-dev.2 → 0.24.0-dev.6
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 +8 -0
- package/dist/dev/src/components/AccessExpression.test.js +1 -1
- package/dist/dev/src/components/AccessExpression.test.js.map +1 -1
- package/dist/dev/src/components/Output.js +3 -2
- package/dist/dev/src/components/Output.js.map +1 -1
- package/dist/dev/src/components/SourceFile.js.map +1 -1
- package/dist/dev/src/content-slot.test.js +1 -1
- package/dist/dev/src/content-slot.test.js.map +1 -1
- package/dist/dev/src/context.js +30 -3
- package/dist/dev/src/context.js.map +1 -1
- package/dist/dev/src/debug/diagnostics.test.js +1 -1
- package/dist/dev/src/debug/diagnostics.test.js.map +1 -1
- package/dist/dev/src/debug/effects.test.js +1 -1
- package/dist/dev/src/debug/effects.test.js.map +1 -1
- package/dist/dev/src/debug/file-streaming.js +103 -0
- package/dist/dev/src/debug/file-streaming.js.map +1 -0
- package/dist/dev/src/debug/files.test.js +4 -5
- package/dist/dev/src/debug/files.test.js.map +1 -1
- package/dist/dev/src/debug/index.js +4 -6
- package/dist/dev/src/debug/index.js.map +1 -1
- package/dist/dev/src/debug/message-format.test.js +50 -52
- package/dist/dev/src/debug/message-format.test.js.map +1 -1
- package/dist/dev/src/debug/render-tree-orphans.test.js +13 -23
- package/dist/dev/src/debug/render-tree-orphans.test.js.map +1 -1
- package/dist/dev/src/debug/render.js +529 -352
- package/dist/dev/src/debug/render.js.map +1 -1
- package/dist/dev/src/debug/render.test.js +171 -92
- package/dist/dev/src/debug/render.test.js.map +1 -1
- package/dist/dev/src/debug/trace-writer.js +127 -15
- package/dist/dev/src/debug/trace-writer.js.map +1 -1
- package/dist/dev/src/debug/trace.js +0 -36
- package/dist/dev/src/debug/trace.js.map +1 -1
- package/dist/dev/src/devtools/devtools-server.js +55 -32
- package/dist/dev/src/devtools/devtools-server.js.map +1 -1
- package/dist/dev/src/devtools-entry.browser.js.map +1 -1
- package/dist/dev/src/devtools-entry.js.map +1 -1
- package/dist/dev/src/diagnostics.js +19 -1
- package/dist/dev/src/diagnostics.js.map +1 -1
- package/dist/dev/src/index.js +5 -2
- package/dist/dev/src/index.js.map +1 -1
- package/dist/dev/src/jsx-runtime.js +14 -8
- package/dist/dev/src/jsx-runtime.js.map +1 -1
- package/dist/dev/src/output-types.js +2 -0
- package/dist/dev/src/output-types.js.map +1 -0
- package/dist/dev/src/reactivity.js +155 -13
- package/dist/dev/src/reactivity.js.map +1 -1
- package/dist/dev/src/render/get-string-width.js +61 -0
- package/dist/dev/src/render/get-string-width.js.map +1 -0
- package/dist/dev/src/render/index.js +2 -0
- package/dist/dev/src/render/index.js.map +1 -0
- package/dist/dev/src/render/node-context.js +7 -0
- package/dist/dev/src/render/node-context.js.map +1 -0
- package/dist/dev/src/render/node.js +386 -0
- package/dist/dev/src/render/node.js.map +1 -0
- package/dist/dev/src/render/printer-support.js +180 -0
- package/dist/dev/src/render/printer-support.js.map +1 -0
- package/dist/dev/src/render/printer.js +797 -0
- package/dist/dev/src/render/printer.js.map +1 -0
- package/dist/dev/src/render-error.js +79 -0
- package/dist/dev/src/render-error.js.map +1 -0
- package/dist/dev/src/render-output.js +209 -0
- package/dist/dev/src/render-output.js.map +1 -0
- package/dist/dev/src/runtime/create-intrinsic.js +53 -0
- package/dist/dev/src/runtime/create-intrinsic.js.map +1 -0
- package/dist/dev/src/runtime/fragment.js +21 -0
- package/dist/dev/src/runtime/fragment.js.map +1 -0
- package/dist/dev/src/runtime/index.js +13 -0
- package/dist/dev/src/runtime/index.js.map +1 -0
- package/dist/dev/src/runtime/insert.js +453 -0
- package/dist/dev/src/runtime/insert.js.map +1 -0
- package/dist/dev/src/runtime/intrinsic.js +1 -11
- package/dist/dev/src/runtime/intrinsic.js.map +1 -1
- package/dist/dev/src/scheduler.js +38 -14
- package/dist/dev/src/scheduler.js.map +1 -1
- package/dist/dev/src/stc.js +2 -0
- package/dist/dev/src/stc.js.map +1 -1
- package/dist/dev/src/sti.js +1 -1
- package/dist/dev/src/sti.js.map +1 -1
- package/dist/dev/src/symbols/symbol-slot.test.js +1 -1
- package/dist/dev/src/symbols/symbol-slot.test.js.map +1 -1
- package/dist/dev/src/test-render.js +78 -0
- package/dist/dev/src/test-render.js.map +1 -0
- package/dist/dev/src/utils.js +47 -35
- package/dist/dev/src/utils.js.map +1 -1
- package/dist/dev/test/babel-e2e.test.js +218 -0
- package/dist/dev/test/babel-e2e.test.js.map +1 -0
- package/dist/dev/test/components/block.test.js +1 -1
- package/dist/dev/test/components/block.test.js.map +1 -1
- package/dist/dev/test/components/copy-file.test.js +7 -7
- package/dist/dev/test/components/copy-file.test.js.map +1 -1
- package/dist/dev/test/components/update-file.test.js +1 -1
- package/dist/dev/test/components/update-file.test.js.map +1 -1
- package/dist/dev/test/components/wrap.test.js +1 -1
- package/dist/dev/test/components/wrap.test.js.map +1 -1
- package/dist/dev/test/control-flow/match.test.js +1 -1
- package/dist/dev/test/control-flow/match.test.js.map +1 -1
- package/dist/dev/test/control-flow/show.test.js +1 -1
- package/dist/dev/test/control-flow/show.test.js.map +1 -1
- package/dist/dev/test/lazy-isempty.test.js +6 -6
- package/dist/dev/test/lazy-isempty.test.js.map +1 -1
- package/dist/dev/test/node.test.js +80 -0
- package/dist/dev/test/node.test.js.map +1 -0
- package/dist/dev/test/output-e2e.test.js +194 -0
- package/dist/dev/test/output-e2e.test.js.map +1 -0
- package/dist/dev/test/reactivity/circular-reactives.test.js +1 -1
- package/dist/dev/test/reactivity/circular-reactives.test.js.map +1 -1
- package/dist/dev/test/reactivity/cleanup.test.js +1 -1
- package/dist/dev/test/reactivity/cleanup.test.js.map +1 -1
- package/dist/dev/test/rendering/memoization.test.js +6 -1
- package/dist/dev/test/rendering/memoization.test.js.map +1 -1
- package/dist/dev/test/rendering/render-output-diagnostics.test.js +102 -0
- package/dist/dev/test/rendering/render-output-diagnostics.test.js.map +1 -0
- package/dist/dev/test/runtime.test.js +385 -0
- package/dist/dev/test/runtime.test.js.map +1 -0
- package/dist/dev/test/tree-test-utils.js +16 -0
- package/dist/dev/test/tree-test-utils.js.map +1 -0
- package/dist/dev/test/utils.test.js +1 -1
- package/dist/dev/test/utils.test.js.map +1 -1
- package/dist/dev/testing/devtools-utils.js +1 -1
- package/dist/dev/testing/devtools-utils.js.map +1 -1
- package/dist/dev/testing/extend-expect.js +7 -33
- package/dist/dev/testing/extend-expect.js.map +1 -1
- package/dist/dev/testing/render.js +7 -17
- package/dist/dev/testing/render.js.map +1 -1
- package/dist/devtools/index.html +17 -17
- package/dist/src/components/AccessExpression.test.js +1 -1
- package/dist/src/components/AccessExpression.test.js.map +1 -1
- package/dist/src/components/Output.d.ts +1 -1
- package/dist/src/components/Output.d.ts.map +1 -1
- package/dist/src/components/Output.js +2 -1
- package/dist/src/components/Output.js.map +1 -1
- package/dist/src/components/ReferenceOrContent.d.ts +1 -1
- package/dist/src/components/ReferenceOrContent.d.ts.map +1 -1
- package/dist/src/components/SourceFile.d.ts +1 -1
- package/dist/src/components/SourceFile.d.ts.map +1 -1
- package/dist/src/components/SourceFile.js.map +1 -1
- package/dist/src/content-slot.test.js +1 -1
- package/dist/src/content-slot.test.js.map +1 -1
- package/dist/src/context/format-options.d.ts +1 -1
- package/dist/src/context/format-options.d.ts.map +1 -1
- package/dist/src/context.d.ts +9 -1
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.js +30 -3
- package/dist/src/context.js.map +1 -1
- package/dist/src/debug/diagnostics.test.js +1 -1
- package/dist/src/debug/diagnostics.test.js.map +1 -1
- package/dist/src/debug/effects.test.js +1 -1
- package/dist/src/debug/effects.test.js.map +1 -1
- package/dist/src/debug/file-streaming.d.ts +22 -0
- package/dist/src/debug/file-streaming.d.ts.map +1 -0
- package/dist/src/debug/file-streaming.js +103 -0
- package/dist/src/debug/file-streaming.js.map +1 -0
- package/dist/src/debug/files.test.js +4 -5
- package/dist/src/debug/files.test.js.map +1 -1
- package/dist/src/debug/index.d.ts +5 -7
- package/dist/src/debug/index.d.ts.map +1 -1
- package/dist/src/debug/index.js +4 -6
- package/dist/src/debug/index.js.map +1 -1
- package/dist/src/debug/message-format.test.js +16 -18
- package/dist/src/debug/message-format.test.js.map +1 -1
- package/dist/src/debug/render-tree-orphans.test.js +8 -18
- package/dist/src/debug/render-tree-orphans.test.js.map +1 -1
- package/dist/src/debug/render.d.ts +71 -21
- package/dist/src/debug/render.d.ts.map +1 -1
- package/dist/src/debug/render.js +529 -352
- package/dist/src/debug/render.js.map +1 -1
- package/dist/src/debug/render.test.js +137 -74
- package/dist/src/debug/render.test.js.map +1 -1
- package/dist/src/debug/trace-writer.d.ts +6 -1
- package/dist/src/debug/trace-writer.d.ts.map +1 -1
- package/dist/src/debug/trace-writer.js +127 -15
- package/dist/src/debug/trace-writer.js.map +1 -1
- package/dist/src/debug/trace.d.ts +0 -36
- package/dist/src/debug/trace.d.ts.map +1 -1
- package/dist/src/debug/trace.js +0 -36
- package/dist/src/debug/trace.js.map +1 -1
- package/dist/src/devtools/devtools-protocol.d.ts +34 -1
- package/dist/src/devtools/devtools-protocol.d.ts.map +1 -1
- package/dist/src/devtools/devtools-server.d.ts.map +1 -1
- package/dist/src/devtools/devtools-server.js +55 -32
- package/dist/src/devtools/devtools-server.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 +4 -0
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js +19 -1
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/index.d.ts +5 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/jsx-runtime.d.ts +13 -4
- package/dist/src/jsx-runtime.d.ts.map +1 -1
- package/dist/src/jsx-runtime.js +14 -8
- package/dist/src/jsx-runtime.js.map +1 -1
- package/dist/src/output-types.d.ts +40 -0
- package/dist/src/output-types.d.ts.map +1 -0
- package/dist/src/output-types.js +2 -0
- package/dist/src/output-types.js.map +1 -0
- package/dist/src/reactivity.d.ts +49 -18
- package/dist/src/reactivity.d.ts.map +1 -1
- package/dist/src/reactivity.js +155 -13
- package/dist/src/reactivity.js.map +1 -1
- package/dist/src/render/get-string-width.d.ts +19 -0
- package/dist/src/render/get-string-width.d.ts.map +1 -0
- package/dist/src/render/get-string-width.js +61 -0
- package/dist/src/render/get-string-width.js.map +1 -0
- package/dist/src/render/index.d.ts +2 -0
- package/dist/src/render/index.d.ts.map +1 -0
- package/dist/src/render/index.js +2 -0
- package/dist/src/render/index.js.map +1 -0
- package/dist/src/render/node-context.d.ts +5 -0
- package/dist/src/render/node-context.d.ts.map +1 -0
- package/dist/src/render/node-context.js +7 -0
- package/dist/src/render/node-context.js.map +1 -0
- package/dist/src/render/node.d.ts +146 -0
- package/dist/src/render/node.d.ts.map +1 -0
- package/dist/src/render/node.js +386 -0
- package/dist/src/render/node.js.map +1 -0
- package/dist/src/render/printer-support.d.ts +50 -0
- package/dist/src/render/printer-support.d.ts.map +1 -0
- package/dist/src/render/printer-support.js +180 -0
- package/dist/src/render/printer-support.js.map +1 -0
- package/dist/src/render/printer.d.ts +35 -0
- package/dist/src/render/printer.d.ts.map +1 -0
- package/dist/src/render/printer.js +797 -0
- package/dist/src/render/printer.js.map +1 -0
- package/dist/src/render-error.d.ts +4 -0
- package/dist/src/render-error.d.ts.map +1 -0
- package/dist/src/render-error.js +79 -0
- package/dist/src/render-error.js.map +1 -0
- package/dist/src/render-output.d.ts +42 -0
- package/dist/src/render-output.d.ts.map +1 -0
- package/dist/src/render-output.js +209 -0
- package/dist/src/render-output.js.map +1 -0
- package/dist/src/runtime/component.d.ts +2 -2
- package/dist/src/runtime/component.d.ts.map +1 -1
- package/dist/src/runtime/create-intrinsic.d.ts +28 -0
- package/dist/src/runtime/create-intrinsic.d.ts.map +1 -0
- package/dist/src/runtime/create-intrinsic.js +53 -0
- package/dist/src/runtime/create-intrinsic.js.map +1 -0
- package/dist/src/runtime/fragment.d.ts +16 -0
- package/dist/src/runtime/fragment.d.ts.map +1 -0
- package/dist/src/runtime/fragment.js +21 -0
- package/dist/src/runtime/fragment.js.map +1 -0
- package/dist/src/runtime/index.d.ts +12 -0
- package/dist/src/runtime/index.d.ts.map +1 -0
- package/dist/src/runtime/index.js +13 -0
- package/dist/src/runtime/index.js.map +1 -0
- package/dist/src/runtime/insert.d.ts +29 -0
- package/dist/src/runtime/insert.d.ts.map +1 -0
- package/dist/src/runtime/insert.js +453 -0
- package/dist/src/runtime/insert.js.map +1 -0
- package/dist/src/runtime/intrinsic.d.ts +12 -29
- package/dist/src/runtime/intrinsic.d.ts.map +1 -1
- package/dist/src/runtime/intrinsic.js +1 -11
- package/dist/src/runtime/intrinsic.js.map +1 -1
- package/dist/src/scheduler.d.ts.map +1 -1
- package/dist/src/scheduler.js +38 -14
- package/dist/src/scheduler.js.map +1 -1
- package/dist/src/stc.d.ts.map +1 -1
- package/dist/src/stc.js +2 -0
- package/dist/src/stc.js.map +1 -1
- package/dist/src/sti.d.ts +7 -6
- package/dist/src/sti.d.ts.map +1 -1
- package/dist/src/sti.js +1 -1
- package/dist/src/sti.js.map +1 -1
- package/dist/src/symbols/symbol-slot.test.js +1 -1
- package/dist/src/symbols/symbol-slot.test.js.map +1 -1
- package/dist/src/test-render.d.ts +31 -0
- package/dist/src/test-render.d.ts.map +1 -0
- package/dist/src/test-render.js +78 -0
- package/dist/src/test-render.js.map +1 -0
- package/dist/src/utils.d.ts +1 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +40 -28
- package/dist/src/utils.js.map +1 -1
- package/dist/src/write-output.d.ts +1 -1
- package/dist/src/write-output.d.ts.map +1 -1
- package/dist/test/babel-e2e.test.d.ts +13 -0
- package/dist/test/babel-e2e.test.d.ts.map +1 -0
- package/dist/test/babel-e2e.test.js +218 -0
- package/dist/test/babel-e2e.test.js.map +1 -0
- package/dist/test/components/block.test.js +1 -1
- package/dist/test/components/block.test.js.map +1 -1
- package/dist/test/components/copy-file.test.d.ts.map +1 -1
- package/dist/test/components/copy-file.test.js +1 -1
- package/dist/test/components/copy-file.test.js.map +1 -1
- package/dist/test/components/update-file.test.js +1 -1
- package/dist/test/components/update-file.test.js.map +1 -1
- package/dist/test/components/wrap.test.js +1 -1
- package/dist/test/components/wrap.test.js.map +1 -1
- package/dist/test/control-flow/match.test.js +1 -1
- package/dist/test/control-flow/match.test.js.map +1 -1
- package/dist/test/control-flow/show.test.js +1 -1
- package/dist/test/control-flow/show.test.js.map +1 -1
- package/dist/test/lazy-isempty.test.js +6 -6
- package/dist/test/lazy-isempty.test.js.map +1 -1
- package/dist/test/node.test.d.ts +2 -0
- package/dist/test/node.test.d.ts.map +1 -0
- package/dist/test/node.test.js +80 -0
- package/dist/test/node.test.js.map +1 -0
- package/dist/test/output-e2e.test.d.ts +13 -0
- package/dist/test/output-e2e.test.d.ts.map +1 -0
- package/dist/test/output-e2e.test.js +194 -0
- package/dist/test/output-e2e.test.js.map +1 -0
- package/dist/test/reactivity/circular-reactives.test.js +1 -1
- package/dist/test/reactivity/circular-reactives.test.js.map +1 -1
- package/dist/test/reactivity/cleanup.test.js +1 -1
- package/dist/test/reactivity/cleanup.test.js.map +1 -1
- package/dist/test/rendering/memoization.test.js +6 -1
- package/dist/test/rendering/memoization.test.js.map +1 -1
- package/dist/test/rendering/render-output-diagnostics.test.d.ts +2 -0
- package/dist/test/rendering/render-output-diagnostics.test.d.ts.map +1 -0
- package/dist/test/rendering/render-output-diagnostics.test.js +82 -0
- package/dist/test/rendering/render-output-diagnostics.test.js.map +1 -0
- package/dist/test/runtime.test.d.ts +11 -0
- package/dist/test/runtime.test.d.ts.map +1 -0
- package/dist/test/runtime.test.js +385 -0
- package/dist/test/runtime.test.js.map +1 -0
- package/dist/test/tree-test-utils.d.ts +3 -0
- package/dist/test/tree-test-utils.d.ts.map +1 -0
- package/dist/test/tree-test-utils.js +16 -0
- package/dist/test/tree-test-utils.js.map +1 -0
- package/dist/test/utils.test.js +1 -1
- package/dist/test/utils.test.js.map +1 -1
- package/dist/testing/devtools-utils.d.ts.map +1 -1
- package/dist/testing/devtools-utils.js +1 -1
- package/dist/testing/devtools-utils.js.map +1 -1
- package/dist/testing/extend-expect.d.ts.map +1 -1
- package/dist/testing/extend-expect.js +7 -33
- package/dist/testing/extend-expect.js.map +1 -1
- package/dist/testing/render.d.ts +7 -9
- package/dist/testing/render.d.ts.map +1 -1
- package/dist/testing/render.js +7 -17
- package/dist/testing/render.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/api/components/Output.md +0 -3
- package/docs/api/components/SourceFile.md +0 -3
- package/docs/api/functions/createComment.md +18 -0
- package/docs/api/functions/createElement.md +19 -0
- package/docs/api/functions/createFragment.md +17 -0
- package/docs/api/functions/createTextNode.md +18 -0
- package/docs/api/functions/emitDiagnosticForTree.md +19 -0
- package/docs/api/functions/ensureIsEmpty.md +1 -1
- package/docs/api/functions/getContextForNode.md +18 -0
- package/docs/api/functions/getContextForRenderNode.md +4 -4
- package/docs/api/functions/getDiagnosticsForTree.md +7 -5
- package/docs/api/functions/getRegisteredDiagnosticsForTree.md +18 -0
- package/docs/api/functions/index.md +17 -12
- package/docs/api/functions/isCustomContext.md +4 -4
- package/docs/api/functions/notifyContentState.md +6 -0
- package/docs/api/functions/printTree.md +6 -16
- package/docs/api/functions/registerDiagnosticsForTree.md +19 -0
- package/docs/api/functions/render.md +1 -2
- package/docs/api/functions/renderAsync.md +1 -2
- package/docs/api/functions/renderTree.md +8 -5
- package/docs/api/functions/reportDiagnosticsForTree.md +18 -0
- package/docs/api/functions/runInContext.md +28 -0
- package/docs/api/functions/sourceFilesForTree.md +6 -16
- package/docs/api/index.md +3 -3
- package/docs/api/testing/functions/index.md +1 -1
- package/docs/api/testing/functions/renderToString.md +1 -1
- package/docs/api/types/AlloyNode.md +22 -0
- package/docs/api/types/Child.md +1 -1
- package/docs/api/types/CommentNode.md +15 -0
- package/docs/api/types/Context.md +13 -15
- package/docs/api/types/ElementNode.md +18 -0
- package/docs/api/types/FragmentNode.md +12 -0
- package/docs/api/types/Insertable.md +7 -0
- package/docs/api/types/NodeType.md +5 -0
- package/docs/api/types/OutputDirectory.md +0 -50
- package/docs/api/types/PrintTreeOptions.md +0 -1
- package/docs/api/types/RenderTreeOptions.md +7 -0
- package/docs/api/types/StiComponentCreator.md +4 -4
- package/docs/api/types/StiSignature.md +1 -1
- package/docs/api/types/TextNode.md +16 -0
- package/docs/api/types/index.md +10 -28
- package/docs/api/variables/COMMENT_NODE.md +5 -0
- package/docs/api/variables/ELEMENT_NODE.md +11 -0
- package/docs/api/variables/FRAGMENT_NODE.md +5 -0
- package/docs/api/variables/TEXT_NODE.md +5 -0
- package/docs/api/variables/index.md +4 -2
- package/docs/formatting.md +1 -1
- package/docs/rendering.md +4 -4
- package/package.json +6 -6
- package/src/components/AccessExpression.test.tsx +1 -1
- package/src/components/Output.tsx +2 -1
- package/src/components/SourceFile.tsx +1 -1
- package/src/content-slot.test.tsx +1 -1
- package/src/context/format-options.ts +1 -1
- package/src/context.ts +37 -4
- package/src/debug/diagnostics.test.tsx +1 -1
- package/src/debug/effects.test.tsx +1 -1
- package/src/debug/file-streaming.ts +115 -0
- package/src/debug/files.test.tsx +15 -11
- package/src/debug/index.ts +11 -11
- package/src/debug/message-format.test.tsx +32 -19
- package/src/debug/render-tree-orphans.test.tsx +10 -19
- package/src/debug/render.test.tsx +206 -78
- package/src/debug/render.ts +642 -495
- package/src/debug/trace-writer.ts +168 -14
- package/src/debug/trace.ts +0 -20
- package/src/devtools/devtools-protocol.ts +43 -0
- package/src/devtools/devtools-server.ts +57 -32
- package/src/devtools-entry.browser.ts +5 -0
- package/src/devtools-entry.ts +5 -0
- package/src/diagnostics.ts +31 -0
- package/src/index.ts +66 -2
- package/src/jsx-runtime.ts +16 -14
- package/src/output-types.ts +47 -0
- package/src/reactivity.ts +186 -40
- package/src/render/get-string-width.ts +201 -0
- package/src/render/index.ts +1 -0
- package/src/render/node-context.ts +14 -0
- package/src/render/node.ts +442 -0
- package/src/render/printer-support.ts +209 -0
- package/src/render/printer.ts +817 -0
- package/src/render-error.ts +98 -0
- package/src/render-output.ts +243 -0
- package/src/runtime/component.ts +2 -2
- package/src/runtime/create-intrinsic.ts +56 -0
- package/src/runtime/fragment.ts +22 -0
- package/src/runtime/index.ts +12 -0
- package/src/runtime/insert.ts +569 -0
- package/src/runtime/intrinsic.ts +14 -70
- package/src/scheduler.ts +40 -25
- package/src/stc.ts +3 -0
- package/src/sti.ts +17 -20
- package/src/symbols/symbol-slot.test.tsx +1 -1
- package/src/test-render.ts +103 -0
- package/src/utils.tsx +55 -37
- package/src/write-output.ts +1 -1
- package/temp/api-testing.json +390 -14
- package/temp/api.json +4320 -4144
- package/test/babel-e2e.test.ts +224 -0
- package/test/components/block.test.tsx +1 -1
- package/test/components/copy-file.test.tsx +2 -1
- package/test/components/update-file.test.tsx +1 -1
- package/test/components/wrap.test.tsx +1 -1
- package/test/control-flow/match.test.tsx +1 -1
- package/test/control-flow/show.test.tsx +1 -1
- package/test/lazy-isempty.test.tsx +6 -6
- package/test/node.test.ts +90 -0
- package/test/output-e2e.test.ts +198 -0
- package/test/reactivity/circular-reactives.test.tsx +1 -1
- package/test/reactivity/cleanup.test.tsx +1 -1
- package/test/rendering/memoization.test.tsx +6 -1
- package/test/rendering/render-output-diagnostics.test.tsx +120 -0
- package/test/runtime.test.ts +448 -0
- package/test/tree-test-utils.ts +23 -0
- package/test/utils.test.tsx +1 -1
- package/testing/devtools-utils.ts +2 -0
- package/testing/extend-expect.ts +8 -46
- package/testing/render.ts +17 -21
- package/dist/dev/src/print-hook.js +0 -10
- package/dist/dev/src/print-hook.js.map +0 -1
- package/dist/dev/src/render.js +0 -872
- package/dist/dev/src/render.js.map +0 -1
- package/dist/src/print-hook.d.ts +0 -14
- package/dist/src/print-hook.d.ts.map +0 -1
- package/dist/src/print-hook.js +0 -10
- package/dist/src/print-hook.js.map +0 -1
- package/dist/src/render.d.ts +0 -155
- package/dist/src/render.d.ts.map +0 -1
- package/dist/src/render.js +0 -872
- package/dist/src/render.js.map +0 -1
- package/docs/api/functions/createIntrinsic.md +0 -19
- package/docs/api/functions/createRenderTreeHook.md +0 -19
- package/docs/api/functions/getElementCache.md +0 -17
- package/docs/api/functions/isIntrinsicElement.md +0 -18
- package/docs/api/functions/isPrintHook.md +0 -18
- package/docs/api/types/AlignIntrinsicElement.md +0 -5
- package/docs/api/types/BrIntrinsicElement.md +0 -5
- package/docs/api/types/BreakParentIntrinsicElement.md +0 -5
- package/docs/api/types/DedentIntrinsicElement.md +0 -5
- package/docs/api/types/DedentToRootIntrinsicElement.md +0 -5
- package/docs/api/types/ElementCache.md +0 -5
- package/docs/api/types/ElementCacheKey.md +0 -5
- package/docs/api/types/FillIntrinsicElement.md +0 -5
- package/docs/api/types/GroupIntrinsicElement.md +0 -5
- package/docs/api/types/HardlineIntrinsicElement.md +0 -5
- package/docs/api/types/HbrIntrinsicElement.md +0 -5
- package/docs/api/types/IfBreakIntrinsicElement.md +0 -5
- package/docs/api/types/IndentIfBreakIntrinsicElement.md +0 -5
- package/docs/api/types/IndentIntrinsicElement.md +0 -5
- package/docs/api/types/IntrinsicElement.md +0 -5
- package/docs/api/types/IntrinsicElementBase.md +0 -9
- package/docs/api/types/LbrIntrinsicElement.md +0 -5
- package/docs/api/types/LineIntrinsicElement.md +0 -5
- package/docs/api/types/LineSuffixBoundaryIntrinsicElement.md +0 -5
- package/docs/api/types/LineSuffixIntrinsicElement.md +0 -5
- package/docs/api/types/LiterallineIntrinsicElement.md +0 -5
- package/docs/api/types/MarkAsRootIntrinsicElement.md +0 -5
- package/docs/api/types/PrintHook.md +0 -10
- package/docs/api/types/RenderedTextTree.md +0 -5
- package/docs/api/types/SbrIntrinsicElement.md +0 -5
- package/docs/api/types/SoftlineIntrinsicElement.md +0 -5
- package/docs/api/variables/intrinsicElementKey.md +0 -5
- package/docs/api/variables/printHookTag.md +0 -7
- package/src/print-hook.ts +0 -22
- package/src/render.ts +0 -1154
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../src/render/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc,WAAW","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getContextForNode","node","__alloyCtx","setContextForNode","context"],"sources":["../../../../src/render/node-context.ts"],"sourcesContent":[null],"mappings":"AAOA,OAAO,SAASA,iBAAiBA,CAACC,IAAe,EAAuB;EACtE,OAAQA,IAAI,CAAiBC,UAAU;AACzC;AAEA,OAAO,SAASC,iBAAiBA,CAACF,IAAe,EAAEG,OAAgB,EAAQ;EACxEH,IAAI,CAAiBC,UAAU,GAAGE,OAAO;AAC5C","ignoreList":[]}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlloyNode tree — a DOM-aligned in-memory representation of rendered
|
|
3
|
+
* output.
|
|
4
|
+
*
|
|
5
|
+
* Components return AlloyNodes (or values that get inserted into them)
|
|
6
|
+
* via `runtime/insert.ts`; the resulting tree is consumed by the direct
|
|
7
|
+
* printer and `render-output.ts` output-directory walker.
|
|
8
|
+
*
|
|
9
|
+
* Naming and semantics follow the modern DOM where there is meaningful
|
|
10
|
+
* overlap. Only modern DOM mutation methods are exposed
|
|
11
|
+
* (`append`/`prepend`/`before`/`after`/`replaceWith`/`remove`/`text.data`/
|
|
12
|
+
* `moveBefore`). Legacy methods (`appendChild`, `insertBefore`,
|
|
13
|
+
* `removeChild`, `replaceChild`, the `nodeValue` setter) are intentionally
|
|
14
|
+
* NOT provided.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// #region nodeType constants
|
|
18
|
+
|
|
19
|
+
export const ELEMENT_NODE = 1;
|
|
20
|
+
export const TEXT_NODE = 3;
|
|
21
|
+
export const COMMENT_NODE = 8;
|
|
22
|
+
export const FRAGMENT_NODE = 11;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Anything that can be inserted: a Node, a string (auto-wrapped as Text),
|
|
26
|
+
* or a number (auto-wrapped as Text).
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// #endregion
|
|
30
|
+
|
|
31
|
+
// #region Base Node
|
|
32
|
+
|
|
33
|
+
export class AlloyNode {
|
|
34
|
+
parentNode = null;
|
|
35
|
+
firstChild = null;
|
|
36
|
+
lastChild = null;
|
|
37
|
+
previousSibling = null;
|
|
38
|
+
nextSibling = null;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Empty-state propagation. `false` for Text/Element with content,
|
|
42
|
+
* `true` for empty regions. Mutated by reactive bindings; read by
|
|
43
|
+
* joiner/ender logic. Direct field — no Vue effect.
|
|
44
|
+
*/
|
|
45
|
+
isEmpty = true;
|
|
46
|
+
|
|
47
|
+
// #region Modern DOM mutation API
|
|
48
|
+
|
|
49
|
+
/** Append nodes (or strings) to the end of children. */
|
|
50
|
+
append(...nodes) {
|
|
51
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
52
|
+
insertBefore(this, normalize(nodes[i]), null);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Prepend nodes (or strings) to the beginning of children. */
|
|
57
|
+
prepend(...nodes) {
|
|
58
|
+
const first = this.firstChild;
|
|
59
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
60
|
+
insertBefore(this, normalize(nodes[i]), first);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Insert nodes immediately before `this` in the parent's child list. */
|
|
65
|
+
before(...nodes) {
|
|
66
|
+
const parent = this.parentNode;
|
|
67
|
+
if (parent === null) return;
|
|
68
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
69
|
+
insertBefore(parent, normalize(nodes[i]), this);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Insert nodes immediately after `this` in the parent's child list. */
|
|
74
|
+
after(...nodes) {
|
|
75
|
+
const parent = this.parentNode;
|
|
76
|
+
if (parent === null) return;
|
|
77
|
+
const ref = this.nextSibling;
|
|
78
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
79
|
+
insertBefore(parent, normalize(nodes[i]), ref);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Replace `this` with the given nodes in the parent's child list. */
|
|
84
|
+
replaceWith(...nodes) {
|
|
85
|
+
const parent = this.parentNode;
|
|
86
|
+
if (parent === null) return;
|
|
87
|
+
const ref = this.nextSibling;
|
|
88
|
+
detach(this);
|
|
89
|
+
for (let i = 0, len = nodes.length; i < len; i++) {
|
|
90
|
+
insertBefore(parent, normalize(nodes[i]), ref);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Remove `this` from its parent. */
|
|
95
|
+
remove() {
|
|
96
|
+
if (this.parentNode !== null) detach(this);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Atomic move: relocate `node` to be a child of `this` immediately
|
|
101
|
+
* before `ref` (or at the end if `ref` is null), without disconnecting
|
|
102
|
+
* any state on the moved subtree. Used by `<For>` reorder paths so
|
|
103
|
+
* keyed-item bindings stay live.
|
|
104
|
+
*
|
|
105
|
+
* Mirrors the 2024 DOM `Element.moveBefore(node, child)` proposal.
|
|
106
|
+
*/
|
|
107
|
+
moveBefore(node, ref) {
|
|
108
|
+
if (node.parentNode === this && node.nextSibling === ref) return;
|
|
109
|
+
detach(node);
|
|
110
|
+
insertBefore(this, node, ref);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Deep-clone this node and its subtree. The clone has no parent and
|
|
115
|
+
* its children are themselves clones. Used when a node value would
|
|
116
|
+
* otherwise be inserted into two parents (e.g. a shared joiner element
|
|
117
|
+
* produced by mapJoin) — Alloy intrinsic nodes are stateless so a
|
|
118
|
+
* fresh tree is semantically equivalent.
|
|
119
|
+
*/
|
|
120
|
+
cloneNode() {
|
|
121
|
+
const copy = this.cloneShallow();
|
|
122
|
+
for (let c = this.firstChild; c !== null; c = c.nextSibling) {
|
|
123
|
+
insertBefore(copy, c.cloneNode(), null);
|
|
124
|
+
}
|
|
125
|
+
return copy;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// #endregion
|
|
130
|
+
|
|
131
|
+
// #endregion
|
|
132
|
+
|
|
133
|
+
// #region Concrete Node types
|
|
134
|
+
|
|
135
|
+
/** Text node — analog of DOM Text / CharacterData. */
|
|
136
|
+
export class TextNode extends AlloyNode {
|
|
137
|
+
nodeType = TEXT_NODE;
|
|
138
|
+
// Cached during construction — text data is set once and never mutated
|
|
139
|
+
// (insert.ts replaces TextNode instances rather than reassigning .data).
|
|
140
|
+
// Reading these in the printer's hot path is much cheaper than rerunning
|
|
141
|
+
// getStringWidth / two indexOf scans on every print.
|
|
142
|
+
/** Display width (Prettier-compatible). Lazily filled on first read. */
|
|
143
|
+
_w = -1;
|
|
144
|
+
/** 1 if `data` contains a newline, 0 if not, -1 if not yet computed. */
|
|
145
|
+
_nl = -1;
|
|
146
|
+
constructor(data) {
|
|
147
|
+
super();
|
|
148
|
+
this.data = data;
|
|
149
|
+
this.isEmpty = data.length === 0;
|
|
150
|
+
}
|
|
151
|
+
cloneShallow() {
|
|
152
|
+
return new TextNode(this.data);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Comment node — used as a slot anchor (start/end markers) bracketing
|
|
158
|
+
* dynamic regions. Solid uses the same pattern.
|
|
159
|
+
*/
|
|
160
|
+
export class CommentNode extends AlloyNode {
|
|
161
|
+
nodeType = COMMENT_NODE;
|
|
162
|
+
/** Comments don't contribute output, always empty. */
|
|
163
|
+
isEmpty = true;
|
|
164
|
+
constructor(data = "") {
|
|
165
|
+
super();
|
|
166
|
+
this.data = data;
|
|
167
|
+
}
|
|
168
|
+
cloneShallow() {
|
|
169
|
+
return new CommentNode(this.data);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Element node — Alloy hook node. `localName` carries the hook kind
|
|
175
|
+
* ("group", "indent", "line", "softline", "ifBreak", etc).
|
|
176
|
+
*
|
|
177
|
+
* `data` carries hook-specific config (e.g. `{ shouldBreak: false }` for
|
|
178
|
+
* a group). Kept as a single bag rather than a parallel hierarchy of
|
|
179
|
+
* subclasses to avoid V8 hidden-class fan-out.
|
|
180
|
+
*/
|
|
181
|
+
export class ElementNode extends AlloyNode {
|
|
182
|
+
nodeType = ELEMENT_NODE;
|
|
183
|
+
/**
|
|
184
|
+
* Count of unabsorbed break-leaves in this subtree. Maintained by
|
|
185
|
+
* `insertBefore` / `detach` so the printer can decide whether a
|
|
186
|
+
* `group` is broken in O(1) without a prepass walk.
|
|
187
|
+
*
|
|
188
|
+
* `breakParent` / `hardline` / `hbr` / `literalline` / `lbr` elements
|
|
189
|
+
* and TextNodes containing `\n`/`\r` count as break-leaves; a `group`
|
|
190
|
+
* element absorbs the count from its own subtree (does not propagate
|
|
191
|
+
* outward).
|
|
192
|
+
*
|
|
193
|
+
* For `ifBreak` elements the count includes contributions from
|
|
194
|
+
* `data.flatNode` (the alternate branch is not in the regular tree).
|
|
195
|
+
*/
|
|
196
|
+
_breakCount = 0;
|
|
197
|
+
constructor(localName, data) {
|
|
198
|
+
super();
|
|
199
|
+
this.localName = localName;
|
|
200
|
+
this.data = data;
|
|
201
|
+
}
|
|
202
|
+
cloneShallow() {
|
|
203
|
+
return new ElementNode(this.localName, this.data);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Fragment node — transient batch container. Inserting a Fragment splices
|
|
209
|
+
* its children into the target (mirroring DOM DocumentFragment semantics)
|
|
210
|
+
* and the Fragment itself becomes empty.
|
|
211
|
+
*/
|
|
212
|
+
export class FragmentNode extends AlloyNode {
|
|
213
|
+
nodeType = FRAGMENT_NODE;
|
|
214
|
+
cloneShallow() {
|
|
215
|
+
return new FragmentNode();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// #endregion
|
|
220
|
+
|
|
221
|
+
// #region Constructors
|
|
222
|
+
|
|
223
|
+
export function createTextNode(data) {
|
|
224
|
+
return new TextNode(data);
|
|
225
|
+
}
|
|
226
|
+
export function createComment(data = "") {
|
|
227
|
+
return new CommentNode(data);
|
|
228
|
+
}
|
|
229
|
+
export function createElement(localName, data) {
|
|
230
|
+
return new ElementNode(localName, data);
|
|
231
|
+
}
|
|
232
|
+
export function createFragment() {
|
|
233
|
+
return new FragmentNode();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// #endregion
|
|
237
|
+
|
|
238
|
+
// #region Eager break propagation
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Element local-names whose mere presence forces the innermost enclosing
|
|
242
|
+
* `group` to break (= count as one "break leaf"). Mirrors the cases
|
|
243
|
+
* Prettier's `propagateBreaks` triggers on.
|
|
244
|
+
*/
|
|
245
|
+
function isBreakLeafElement(localName) {
|
|
246
|
+
return localName === "breakParent" || localName === "hardline" || localName === "hbr" || localName === "literalline" || localName === "lbr";
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* How many break-leaves does inserting/removing `n` add to its parent's
|
|
251
|
+
* subtree? `group` absorbs internal breaks → contributes 0 outward.
|
|
252
|
+
* `ifBreak` includes its `flatNode` count too (the alternate branch is
|
|
253
|
+
* stored on `data`, not in the regular tree).
|
|
254
|
+
*/
|
|
255
|
+
function effectiveBreakCount(n) {
|
|
256
|
+
const nt = n.nodeType;
|
|
257
|
+
if (nt === TEXT_NODE) {
|
|
258
|
+
const t = n;
|
|
259
|
+
// Inline (and cache) the textHasNewline check to avoid a cross-module
|
|
260
|
+
// call on the hot insert path.
|
|
261
|
+
let nl = t._nl;
|
|
262
|
+
if (nl < 0) {
|
|
263
|
+
const s = t.data;
|
|
264
|
+
nl = s.length > 0 && (s.indexOf("\n") !== -1 || s.indexOf("\r") !== -1) ? 1 : 0;
|
|
265
|
+
t._nl = nl;
|
|
266
|
+
}
|
|
267
|
+
return nl;
|
|
268
|
+
}
|
|
269
|
+
if (nt === ELEMENT_NODE) {
|
|
270
|
+
const el = n;
|
|
271
|
+
const ln = el.localName;
|
|
272
|
+
if (isBreakLeafElement(ln)) return 1;
|
|
273
|
+
if (ln === "group") {
|
|
274
|
+
const broken = el._breakCount > 0 || el.data?.shouldBreak === true;
|
|
275
|
+
return broken ? 1 : 0;
|
|
276
|
+
}
|
|
277
|
+
if (ln === "ifBreak") {
|
|
278
|
+
const flat = el.data?.flatNode;
|
|
279
|
+
return el._breakCount + (flat ? flat._breakCount : 0);
|
|
280
|
+
}
|
|
281
|
+
return el._breakCount;
|
|
282
|
+
}
|
|
283
|
+
return 0;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Walk up from `start` adjusting `_breakCount` by `delta`. When the walk
|
|
288
|
+
* crosses a `group` element, the group itself absorbs the inner breaks,
|
|
289
|
+
* but if its own broken state transitions (0 ↔ >0) it must propagate ±1
|
|
290
|
+
* outward so that ancestor groups also become broken (matches Prettier's
|
|
291
|
+
* `propagateBreaks` cascade through groupStack).
|
|
292
|
+
*/
|
|
293
|
+
function propagateBreakDelta(start, delta) {
|
|
294
|
+
if (delta === 0) return;
|
|
295
|
+
let d = delta;
|
|
296
|
+
for (let n = start; n !== null; n = n.parentNode) {
|
|
297
|
+
if (n.nodeType !== ELEMENT_NODE) continue;
|
|
298
|
+
const el = n;
|
|
299
|
+
const before = el._breakCount;
|
|
300
|
+
el._breakCount = before + d;
|
|
301
|
+
if (el.localName === "group") {
|
|
302
|
+
const wasBroken = before > 0 || el.data?.shouldBreak === true;
|
|
303
|
+
const nowBroken = el._breakCount > 0 || el.data?.shouldBreak === true;
|
|
304
|
+
if (wasBroken === nowBroken) return;
|
|
305
|
+
d = nowBroken ? 1 : -1;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// #endregion
|
|
311
|
+
|
|
312
|
+
// #region Core mutation primitives
|
|
313
|
+
|
|
314
|
+
function normalize(input) {
|
|
315
|
+
if (typeof input === "string") return new TextNode(input);
|
|
316
|
+
if (typeof input === "number") return new TextNode(String(input));
|
|
317
|
+
return input;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Splice `node` (or its children, if Fragment) into `parent` immediately
|
|
322
|
+
* before `ref` (or at end if `ref` is null). Detaches `node` from any
|
|
323
|
+
* existing parent first.
|
|
324
|
+
*/
|
|
325
|
+
/** Mutation listener — set by `debug/render.ts`. */
|
|
326
|
+
|
|
327
|
+
let mutationListener = null;
|
|
328
|
+
export function setMutationListener(l) {
|
|
329
|
+
mutationListener = l;
|
|
330
|
+
}
|
|
331
|
+
function insertBefore(parent, node, ref) {
|
|
332
|
+
// Fragment: splice its children, leaving the fragment itself empty.
|
|
333
|
+
if (node.nodeType === FRAGMENT_NODE) {
|
|
334
|
+
let child = node.firstChild;
|
|
335
|
+
node.firstChild = null;
|
|
336
|
+
node.lastChild = null;
|
|
337
|
+
while (child !== null) {
|
|
338
|
+
const next = child.nextSibling;
|
|
339
|
+
child.parentNode = null;
|
|
340
|
+
child.previousSibling = null;
|
|
341
|
+
child.nextSibling = null;
|
|
342
|
+
insertBefore(parent, child, ref);
|
|
343
|
+
child = next;
|
|
344
|
+
}
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (node.parentNode !== null) detach(node);
|
|
348
|
+
node.parentNode = parent;
|
|
349
|
+
if (ref === null) {
|
|
350
|
+
// append
|
|
351
|
+
const last = parent.lastChild;
|
|
352
|
+
node.previousSibling = last;
|
|
353
|
+
node.nextSibling = null;
|
|
354
|
+
if (last !== null) last.nextSibling = node;else parent.firstChild = node;
|
|
355
|
+
parent.lastChild = node;
|
|
356
|
+
} else {
|
|
357
|
+
// insert before ref
|
|
358
|
+
const prev = ref.previousSibling;
|
|
359
|
+
node.previousSibling = prev;
|
|
360
|
+
node.nextSibling = ref;
|
|
361
|
+
ref.previousSibling = node;
|
|
362
|
+
if (prev !== null) prev.nextSibling = node;else parent.firstChild = node;
|
|
363
|
+
}
|
|
364
|
+
// Eager break propagation — keeps groups' `_breakCount` accurate so
|
|
365
|
+
// the printer can skip its `propagateBreaks` prepass.
|
|
366
|
+
propagateBreakDelta(parent, effectiveBreakCount(node));
|
|
367
|
+
if (mutationListener !== null) mutationListener.attached(node, parent);
|
|
368
|
+
}
|
|
369
|
+
function detach(node) {
|
|
370
|
+
const parent = node.parentNode;
|
|
371
|
+
if (parent === null) return;
|
|
372
|
+
// Subtract this subtree's break contribution from ancestors before
|
|
373
|
+
// unlinking, so `_breakCount` stays in sync.
|
|
374
|
+
propagateBreakDelta(parent, -effectiveBreakCount(node));
|
|
375
|
+
const prev = node.previousSibling;
|
|
376
|
+
const next = node.nextSibling;
|
|
377
|
+
if (prev !== null) prev.nextSibling = next;else parent.firstChild = next;
|
|
378
|
+
if (next !== null) next.previousSibling = prev;else parent.lastChild = prev;
|
|
379
|
+
node.parentNode = null;
|
|
380
|
+
node.previousSibling = null;
|
|
381
|
+
node.nextSibling = null;
|
|
382
|
+
if (mutationListener !== null) mutationListener.detached(node, parent);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// #endregion
|
|
386
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ELEMENT_NODE","TEXT_NODE","COMMENT_NODE","FRAGMENT_NODE","AlloyNode","parentNode","firstChild","lastChild","previousSibling","nextSibling","isEmpty","append","nodes","i","len","length","insertBefore","normalize","prepend","first","before","parent","after","ref","replaceWith","detach","remove","moveBefore","node","cloneNode","copy","cloneShallow","c","TextNode","nodeType","_w","_nl","constructor","data","CommentNode","ElementNode","_breakCount","localName","FragmentNode","createTextNode","createComment","createElement","createFragment","isBreakLeafElement","effectiveBreakCount","n","nt","t","nl","s","indexOf","el","ln","broken","shouldBreak","flat","flatNode","propagateBreakDelta","start","delta","d","wasBroken","nowBroken","input","String","mutationListener","setMutationListener","l","child","next","last","prev","attached","detached"],"sources":["../../../../src/render/node.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,OAAO,MAAMA,YAAY,GAAG,CAAU;AACtC,OAAO,MAAMC,SAAS,GAAG,CAAU;AACnC,OAAO,MAAMC,YAAY,GAAG,CAAU;AACtC,OAAO,MAAMC,aAAa,GAAG,EAAW;;AAIxC;AACA;AACA;AACA;;AAGA;;AAEA;;AAEA,OAAO,MAAeC,SAAS,CAAC;EAG9BC,UAAU,GAAqB,IAAI;EACnCC,UAAU,GAAqB,IAAI;EACnCC,SAAS,GAAqB,IAAI;EAClCC,eAAe,GAAqB,IAAI;EACxCC,WAAW,GAAqB,IAAI;;EAEpC;AACF;AACA;AACA;AACA;EACEC,OAAO,GAAG,IAAI;;EAEd;;EAEA;EACAC,MAAMA,CAAC,GAAGC,KAAmB,EAAQ;IACnC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGF,KAAK,CAACG,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;MAChDG,YAAY,CAAC,IAAI,EAAEC,SAAS,CAACL,KAAK,CAACC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC/C;EACF;;EAEA;EACAK,OAAOA,CAAC,GAAGN,KAAmB,EAAQ;IACpC,MAAMO,KAAK,GAAG,IAAI,CAACb,UAAU;IAC7B,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGF,KAAK,CAACG,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;MAChDG,YAAY,CAAC,IAAI,EAAEC,SAAS,CAACL,KAAK,CAACC,CAAC,CAAC,CAAC,EAAEM,KAAK,CAAC;IAChD;EACF;;EAEA;EACAC,MAAMA,CAAC,GAAGR,KAAmB,EAAQ;IACnC,MAAMS,MAAM,GAAG,IAAI,CAAChB,UAAU;IAC9B,IAAIgB,MAAM,KAAK,IAAI,EAAE;IACrB,KAAK,IAAIR,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGF,KAAK,CAACG,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;MAChDG,YAAY,CAACK,MAAM,EAAEJ,SAAS,CAACL,KAAK,CAACC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACjD;EACF;;EAEA;EACAS,KAAKA,CAAC,GAAGV,KAAmB,EAAQ;IAClC,MAAMS,MAAM,GAAG,IAAI,CAAChB,UAAU;IAC9B,IAAIgB,MAAM,KAAK,IAAI,EAAE;IACrB,MAAME,GAAG,GAAG,IAAI,CAACd,WAAW;IAC5B,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGF,KAAK,CAACG,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;MAChDG,YAAY,CAACK,MAAM,EAAEJ,SAAS,CAACL,KAAK,CAACC,CAAC,CAAC,CAAC,EAAEU,GAAG,CAAC;IAChD;EACF;;EAEA;EACAC,WAAWA,CAAC,GAAGZ,KAAmB,EAAQ;IACxC,MAAMS,MAAM,GAAG,IAAI,CAAChB,UAAU;IAC9B,IAAIgB,MAAM,KAAK,IAAI,EAAE;IACrB,MAAME,GAAG,GAAG,IAAI,CAACd,WAAW;IAC5BgB,MAAM,CAAC,IAAI,CAAC;IACZ,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGF,KAAK,CAACG,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;MAChDG,YAAY,CAACK,MAAM,EAAEJ,SAAS,CAACL,KAAK,CAACC,CAAC,CAAC,CAAC,EAAEU,GAAG,CAAC;IAChD;EACF;;EAEA;EACAG,MAAMA,CAAA,EAAS;IACb,IAAI,IAAI,CAACrB,UAAU,KAAK,IAAI,EAAEoB,MAAM,CAAC,IAAI,CAAC;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,UAAUA,CAACC,IAAe,EAAEL,GAAqB,EAAQ;IACvD,IAAIK,IAAI,CAACvB,UAAU,KAAK,IAAI,IAAIuB,IAAI,CAACnB,WAAW,KAAKc,GAAG,EAAE;IAC1DE,MAAM,CAACG,IAAI,CAAC;IACZZ,YAAY,CAAC,IAAI,EAAEY,IAAI,EAAEL,GAAG,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEM,SAASA,CAAA,EAAc;IACrB,MAAMC,IAAI,GAAG,IAAI,CAACC,YAAY,CAAC,CAAC;IAChC,KAAK,IAAIC,CAAC,GAAG,IAAI,CAAC1B,UAAU,EAAE0B,CAAC,KAAK,IAAI,EAAEA,CAAC,GAAGA,CAAC,CAACvB,WAAW,EAAE;MAC3DO,YAAY,CAACc,IAAI,EAAEE,CAAC,CAACH,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;IACzC;IACA,OAAOC,IAAI;EACb;AAGF;;AAEA;;AAEA;;AAEA;;AAEA;AACA,OAAO,MAAMG,QAAQ,SAAS7B,SAAS,CAAC;EAC7B8B,QAAQ,GAAGjC,SAAS;EAG7B;EACA;EACA;EACA;EACA;EACAkC,EAAE,GAAW,CAAC,CAAC;EACf;EACAC,GAAG,GAAW,CAAC,CAAC;EAEhBC,WAAWA,CAACC,IAAY,EAAE;IACxB,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,IAAI,GAAGA,IAAI;IAChB,IAAI,CAAC5B,OAAO,GAAG4B,IAAI,CAACvB,MAAM,KAAK,CAAC;EAClC;EAEUgB,YAAYA,CAAA,EAAa;IACjC,OAAO,IAAIE,QAAQ,CAAC,IAAI,CAACK,IAAI,CAAC;EAChC;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,SAASnC,SAAS,CAAC;EAChC8B,QAAQ,GAAGhC,YAAY;EAEhC;EACAQ,OAAO,GAAG,IAAI;EAEd2B,WAAWA,CAACC,IAAY,GAAG,EAAE,EAAE;IAC7B,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;EAEUP,YAAYA,CAAA,EAAgB;IACpC,OAAO,IAAIQ,WAAW,CAAC,IAAI,CAACD,IAAI,CAAC;EACnC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,WAAW,SAASpC,SAAS,CAAC;EAChC8B,QAAQ,GAAGlC,YAAY;EAIhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEyC,WAAW,GAAW,CAAC;EAEvBJ,WAAWA,CAACK,SAAiB,EAAEJ,IAAc,EAAE;IAC7C,KAAK,CAAC,CAAC;IACP,IAAI,CAACI,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACJ,IAAI,GAAGA,IAAI;EAClB;EAEUP,YAAYA,CAAA,EAAgB;IACpC,OAAO,IAAIS,WAAW,CAAC,IAAI,CAACE,SAAS,EAAE,IAAI,CAACJ,IAAI,CAAC;EACnD;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,YAAY,SAASvC,SAAS,CAAC;EACjC8B,QAAQ,GAAG/B,aAAa;EAEvB4B,YAAYA,CAAA,EAAiB;IACrC,OAAO,IAAIY,YAAY,CAAC,CAAC;EAC3B;AACF;;AAEA;;AAEA;;AAEA,OAAO,SAASC,cAAcA,CAACN,IAAY,EAAY;EACrD,OAAO,IAAIL,QAAQ,CAACK,IAAI,CAAC;AAC3B;AAEA,OAAO,SAASO,aAAaA,CAACP,IAAY,GAAG,EAAE,EAAe;EAC5D,OAAO,IAAIC,WAAW,CAACD,IAAI,CAAC;AAC9B;AAEA,OAAO,SAASQ,aAAaA,CAACJ,SAAiB,EAAEJ,IAAc,EAAe;EAC5E,OAAO,IAAIE,WAAW,CAACE,SAAS,EAAEJ,IAAI,CAAC;AACzC;AAEA,OAAO,SAASS,cAAcA,CAAA,EAAiB;EAC7C,OAAO,IAAIJ,YAAY,CAAC,CAAC;AAC3B;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASK,kBAAkBA,CAACN,SAAiB,EAAW;EACtD,OACEA,SAAS,KAAK,aAAa,IAC3BA,SAAS,KAAK,UAAU,IACxBA,SAAS,KAAK,KAAK,IACnBA,SAAS,KAAK,aAAa,IAC3BA,SAAS,KAAK,KAAK;AAEvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASO,mBAAmBA,CAACC,CAAY,EAAU;EACjD,MAAMC,EAAE,GAAGD,CAAC,CAAChB,QAAQ;EACrB,IAAIiB,EAAE,KAAKlD,SAAS,EAAE;IACpB,MAAMmD,CAAC,GAAGF,CAAa;IACvB;IACA;IACA,IAAIG,EAAE,GAAGD,CAAC,CAAChB,GAAG;IACd,IAAIiB,EAAE,GAAG,CAAC,EAAE;MACV,MAAMC,CAAC,GAAGF,CAAC,CAACd,IAAI;MAChBe,EAAE,GACAC,CAAC,CAACvC,MAAM,GAAG,CAAC,KAAKuC,CAAC,CAACC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAID,CAAC,CAACC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAChE,CAAC,GACD,CAAC;MACLH,CAAC,CAAChB,GAAG,GAAGiB,EAAE;IACZ;IACA,OAAOA,EAAE;EACX;EACA,IAAIF,EAAE,KAAKnD,YAAY,EAAE;IACvB,MAAMwD,EAAE,GAAGN,CAAgB;IAC3B,MAAMO,EAAE,GAAGD,EAAE,CAACd,SAAS;IACvB,IAAIM,kBAAkB,CAACS,EAAE,CAAC,EAAE,OAAO,CAAC;IACpC,IAAIA,EAAE,KAAK,OAAO,EAAE;MAClB,MAAMC,MAAM,GACVF,EAAE,CAACf,WAAW,GAAG,CAAC,IACjBe,EAAE,CAAClB,IAAI,EAA4CqB,WAAW,KAC7D,IAAI;MACR,OAAOD,MAAM,GAAG,CAAC,GAAG,CAAC;IACvB;IACA,IAAID,EAAE,KAAK,SAAS,EAAE;MACpB,MAAMG,IAAI,GAAIJ,EAAE,CAAClB,IAAI,EACjBuB,QAAQ;MACZ,OAAOL,EAAE,CAACf,WAAW,IAAImB,IAAI,GAAGA,IAAI,CAACnB,WAAW,GAAG,CAAC,CAAC;IACvD;IACA,OAAOe,EAAE,CAACf,WAAW;EACvB;EACA,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqB,mBAAmBA,CAACC,KAAuB,EAAEC,KAAa,EAAQ;EACzE,IAAIA,KAAK,KAAK,CAAC,EAAE;EACjB,IAAIC,CAAC,GAAGD,KAAK;EACb,KAAK,IAAId,CAAmB,GAAGa,KAAK,EAAEb,CAAC,KAAK,IAAI,EAAEA,CAAC,GAAGA,CAAC,CAAC7C,UAAU,EAAE;IAClE,IAAI6C,CAAC,CAAChB,QAAQ,KAAKlC,YAAY,EAAE;IACjC,MAAMwD,EAAE,GAAGN,CAAgB;IAC3B,MAAM9B,MAAM,GAAGoC,EAAE,CAACf,WAAW;IAC7Be,EAAE,CAACf,WAAW,GAAGrB,MAAM,GAAG6C,CAAC;IAC3B,IAAIT,EAAE,CAACd,SAAS,KAAK,OAAO,EAAE;MAC5B,MAAMwB,SAAS,GACb9C,MAAM,GAAG,CAAC,IACToC,EAAE,CAAClB,IAAI,EAA4CqB,WAAW,KAC7D,IAAI;MACR,MAAMQ,SAAS,GACbX,EAAE,CAACf,WAAW,GAAG,CAAC,IACjBe,EAAE,CAAClB,IAAI,EAA4CqB,WAAW,KAC7D,IAAI;MACR,IAAIO,SAAS,KAAKC,SAAS,EAAE;MAC7BF,CAAC,GAAGE,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB;EACF;AACF;;AAEA;;AAEA;;AAEA,SAASlD,SAASA,CAACmD,KAAiB,EAAa;EAC/C,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAO,IAAInC,QAAQ,CAACmC,KAAK,CAAC;EACzD,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAO,IAAInC,QAAQ,CAACoC,MAAM,CAACD,KAAK,CAAC,CAAC;EACjE,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAKA,IAAIE,gBAAyC,GAAG,IAAI;AACpD,OAAO,SAASC,mBAAmBA,CAACC,CAA0B,EAAQ;EACpEF,gBAAgB,GAAGE,CAAC;AACtB;AAEA,SAASxD,YAAYA,CACnBK,MAAiB,EACjBO,IAAe,EACfL,GAAqB,EACf;EACN;EACA,IAAIK,IAAI,CAACM,QAAQ,KAAK/B,aAAa,EAAE;IACnC,IAAIsE,KAAK,GAAG7C,IAAI,CAACtB,UAAU;IAC3BsB,IAAI,CAACtB,UAAU,GAAG,IAAI;IACtBsB,IAAI,CAACrB,SAAS,GAAG,IAAI;IACrB,OAAOkE,KAAK,KAAK,IAAI,EAAE;MACrB,MAAMC,IAAI,GAAGD,KAAK,CAAChE,WAAW;MAC9BgE,KAAK,CAACpE,UAAU,GAAG,IAAI;MACvBoE,KAAK,CAACjE,eAAe,GAAG,IAAI;MAC5BiE,KAAK,CAAChE,WAAW,GAAG,IAAI;MACxBO,YAAY,CAACK,MAAM,EAAEoD,KAAK,EAAElD,GAAG,CAAC;MAChCkD,KAAK,GAAGC,IAAI;IACd;IACA;EACF;EAEA,IAAI9C,IAAI,CAACvB,UAAU,KAAK,IAAI,EAAEoB,MAAM,CAACG,IAAI,CAAC;EAE1CA,IAAI,CAACvB,UAAU,GAAGgB,MAAM;EACxB,IAAIE,GAAG,KAAK,IAAI,EAAE;IAChB;IACA,MAAMoD,IAAI,GAAGtD,MAAM,CAACd,SAAS;IAC7BqB,IAAI,CAACpB,eAAe,GAAGmE,IAAI;IAC3B/C,IAAI,CAACnB,WAAW,GAAG,IAAI;IACvB,IAAIkE,IAAI,KAAK,IAAI,EAAEA,IAAI,CAAClE,WAAW,GAAGmB,IAAI,CAAC,KACtCP,MAAM,CAACf,UAAU,GAAGsB,IAAI;IAC7BP,MAAM,CAACd,SAAS,GAAGqB,IAAI;EACzB,CAAC,MAAM;IACL;IACA,MAAMgD,IAAI,GAAGrD,GAAG,CAACf,eAAe;IAChCoB,IAAI,CAACpB,eAAe,GAAGoE,IAAI;IAC3BhD,IAAI,CAACnB,WAAW,GAAGc,GAAG;IACtBA,GAAG,CAACf,eAAe,GAAGoB,IAAI;IAC1B,IAAIgD,IAAI,KAAK,IAAI,EAAEA,IAAI,CAACnE,WAAW,GAAGmB,IAAI,CAAC,KACtCP,MAAM,CAACf,UAAU,GAAGsB,IAAI;EAC/B;EACA;EACA;EACAkC,mBAAmB,CAACzC,MAAM,EAAE4B,mBAAmB,CAACrB,IAAI,CAAC,CAAC;EACtD,IAAI0C,gBAAgB,KAAK,IAAI,EAAEA,gBAAgB,CAACO,QAAQ,CAACjD,IAAI,EAAEP,MAAM,CAAC;AACxE;AAEA,SAASI,MAAMA,CAACG,IAAe,EAAQ;EACrC,MAAMP,MAAM,GAAGO,IAAI,CAACvB,UAAU;EAC9B,IAAIgB,MAAM,KAAK,IAAI,EAAE;EACrB;EACA;EACAyC,mBAAmB,CAACzC,MAAM,EAAE,CAAC4B,mBAAmB,CAACrB,IAAI,CAAC,CAAC;EACvD,MAAMgD,IAAI,GAAGhD,IAAI,CAACpB,eAAe;EACjC,MAAMkE,IAAI,GAAG9C,IAAI,CAACnB,WAAW;EAC7B,IAAImE,IAAI,KAAK,IAAI,EAAEA,IAAI,CAACnE,WAAW,GAAGiE,IAAI,CAAC,KACtCrD,MAAM,CAACf,UAAU,GAAGoE,IAAI;EAC7B,IAAIA,IAAI,KAAK,IAAI,EAAEA,IAAI,CAAClE,eAAe,GAAGoE,IAAI,CAAC,KAC1CvD,MAAM,CAACd,SAAS,GAAGqE,IAAI;EAC5BhD,IAAI,CAACvB,UAAU,GAAG,IAAI;EACtBuB,IAAI,CAACpB,eAAe,GAAG,IAAI;EAC3BoB,IAAI,CAACnB,WAAW,GAAG,IAAI;EACvB,IAAI6D,gBAAgB,KAAK,IAAI,EAAEA,gBAAgB,CAACQ,QAAQ,CAAClD,IAAI,EAAEP,MAAM,CAAC;AACxE;;AAEA","ignoreList":[]}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared scaffolding for the direct AlloyNode printer.
|
|
3
|
+
*
|
|
4
|
+
* `Indent` management, `trim`, mode constants, and the cursor placeholder
|
|
5
|
+
* are kept separate from the main tree walk so the printer's control flow
|
|
6
|
+
* stays focused on AlloyNode dispatch.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { getStringWidth } from "./get-string-width.js";
|
|
10
|
+
export { getStringWidth };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Width of a TextNode's data, cached on the node (data is immutable
|
|
14
|
+
* post-construction). Includes an ASCII fast path — for the bulk of
|
|
15
|
+
* generated source, every char is < 0x80 so display width === string
|
|
16
|
+
* length and we skip the (expensive) emoji-regex / east-asian-width
|
|
17
|
+
* traversal that lives in `getStringWidth`.
|
|
18
|
+
*/
|
|
19
|
+
export function textWidth(t) {
|
|
20
|
+
let w = t._w;
|
|
21
|
+
if (w >= 0) return w;
|
|
22
|
+
const s = t.data;
|
|
23
|
+
// ASCII-only fast path.
|
|
24
|
+
let i = 0;
|
|
25
|
+
const len = s.length;
|
|
26
|
+
for (; i < len; i++) if (s.charCodeAt(i) >= 0x80) break;
|
|
27
|
+
w = i === len ? len : getStringWidth(s);
|
|
28
|
+
t._w = w;
|
|
29
|
+
return w;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Whether a TextNode's data contains \n or \r. Cached. */
|
|
33
|
+
export function textHasNewline(t) {
|
|
34
|
+
let nl = t._nl;
|
|
35
|
+
if (nl < 0) {
|
|
36
|
+
const s = t.data;
|
|
37
|
+
nl = s.length > 0 && (s.indexOf("\n") !== -1 || s.indexOf("\r") !== -1) ? 1 : 0;
|
|
38
|
+
t._nl = nl;
|
|
39
|
+
}
|
|
40
|
+
return nl === 1;
|
|
41
|
+
}
|
|
42
|
+
export const MODE_BREAK = Symbol("MODE_BREAK");
|
|
43
|
+
export const MODE_FLAT = Symbol("MODE_FLAT");
|
|
44
|
+
export const CURSOR_PLACEHOLDER = Symbol("cursor");
|
|
45
|
+
export function rootIndent() {
|
|
46
|
+
return {
|
|
47
|
+
value: "",
|
|
48
|
+
length: 0,
|
|
49
|
+
queue: []
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function makeIndent(ind, options) {
|
|
53
|
+
return generateInd(ind, {
|
|
54
|
+
type: "indent"
|
|
55
|
+
}, "indent", options);
|
|
56
|
+
}
|
|
57
|
+
export function makeAlign(indent, widthOrDoc, options) {
|
|
58
|
+
if (widthOrDoc === Number.NEGATIVE_INFINITY) {
|
|
59
|
+
return indent.root || rootIndent();
|
|
60
|
+
}
|
|
61
|
+
if (widthOrDoc < 0) {
|
|
62
|
+
return generateInd(indent, {
|
|
63
|
+
type: "indent"
|
|
64
|
+
}, "dedent", options);
|
|
65
|
+
}
|
|
66
|
+
if (!widthOrDoc) {
|
|
67
|
+
return indent;
|
|
68
|
+
}
|
|
69
|
+
if (widthOrDoc.type === "root") {
|
|
70
|
+
return {
|
|
71
|
+
...indent,
|
|
72
|
+
root: indent
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign";
|
|
76
|
+
return generateInd(indent, {
|
|
77
|
+
type: alignType,
|
|
78
|
+
n: widthOrDoc
|
|
79
|
+
}, alignType, options);
|
|
80
|
+
}
|
|
81
|
+
function generateInd(ind, newPart, op, options) {
|
|
82
|
+
const queue = op === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart];
|
|
83
|
+
let value = "";
|
|
84
|
+
let length = 0;
|
|
85
|
+
let lastTabs = 0;
|
|
86
|
+
let lastSpaces = 0;
|
|
87
|
+
for (const part of queue) {
|
|
88
|
+
switch (part.type) {
|
|
89
|
+
case "indent":
|
|
90
|
+
flush();
|
|
91
|
+
if (options.useTabs) addTabs(1);else addSpaces(options.tabWidth);
|
|
92
|
+
break;
|
|
93
|
+
case "stringAlign":
|
|
94
|
+
flush();
|
|
95
|
+
value += part.n;
|
|
96
|
+
length += part.n.length;
|
|
97
|
+
break;
|
|
98
|
+
case "numberAlign":
|
|
99
|
+
lastTabs += 1;
|
|
100
|
+
lastSpaces += part.n;
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
throw new Error(`Unexpected type '${part.type}'`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
flushSpaces();
|
|
107
|
+
return {
|
|
108
|
+
...ind,
|
|
109
|
+
value,
|
|
110
|
+
length,
|
|
111
|
+
queue
|
|
112
|
+
};
|
|
113
|
+
function addTabs(count) {
|
|
114
|
+
value += "\t".repeat(count);
|
|
115
|
+
length += options.tabWidth * count;
|
|
116
|
+
}
|
|
117
|
+
function addSpaces(count) {
|
|
118
|
+
value += " ".repeat(count);
|
|
119
|
+
length += count;
|
|
120
|
+
}
|
|
121
|
+
function flush() {
|
|
122
|
+
if (options.useTabs) {
|
|
123
|
+
if (lastTabs > 0) addTabs(lastTabs);
|
|
124
|
+
lastTabs = 0;
|
|
125
|
+
lastSpaces = 0;
|
|
126
|
+
} else flushSpaces();
|
|
127
|
+
}
|
|
128
|
+
function flushSpaces() {
|
|
129
|
+
if (lastSpaces > 0) addSpaces(lastSpaces);
|
|
130
|
+
lastTabs = 0;
|
|
131
|
+
lastSpaces = 0;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Roll back trailing spaces / tabs from the emitted output. Used by
|
|
137
|
+
* `trim` doc/element and at every newline before emitting indentation
|
|
138
|
+
* (Prettier semantics — see prettier/doc.js `trim2`).
|
|
139
|
+
*/
|
|
140
|
+
export function trimOut(out) {
|
|
141
|
+
let trimCount = 0;
|
|
142
|
+
let cursorCount = 0;
|
|
143
|
+
let outIndex = out.length;
|
|
144
|
+
outer: while (outIndex--) {
|
|
145
|
+
const last = out[outIndex];
|
|
146
|
+
if (last === CURSOR_PLACEHOLDER) {
|
|
147
|
+
cursorCount++;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const s = last;
|
|
151
|
+
for (let charIndex = s.length - 1; charIndex >= 0; charIndex--) {
|
|
152
|
+
const char = s[charIndex];
|
|
153
|
+
if (char === " " || char === "\t") {
|
|
154
|
+
trimCount++;
|
|
155
|
+
} else {
|
|
156
|
+
out[outIndex] = s.slice(0, charIndex + 1);
|
|
157
|
+
break outer;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (trimCount > 0 || cursorCount > 0) {
|
|
162
|
+
out.length = outIndex + 1;
|
|
163
|
+
while (cursorCount-- > 0) out.push(CURSOR_PLACEHOLDER);
|
|
164
|
+
}
|
|
165
|
+
return trimCount;
|
|
166
|
+
}
|
|
167
|
+
export function joinOut(out) {
|
|
168
|
+
const cursorIdx = out.indexOf(CURSOR_PLACEHOLDER);
|
|
169
|
+
if (cursorIdx === -1) return out.join("");
|
|
170
|
+
// Cursors are not used by alloy. Strip them; tests don't exercise.
|
|
171
|
+
const otherIdx = out.indexOf(CURSOR_PLACEHOLDER, cursorIdx + 1);
|
|
172
|
+
if (otherIdx === -1) {
|
|
173
|
+
return out.filter(c => c !== CURSOR_PLACEHOLDER).join("");
|
|
174
|
+
}
|
|
175
|
+
const before = out.slice(0, cursorIdx).join("");
|
|
176
|
+
const around = out.slice(cursorIdx + 1, otherIdx).join("");
|
|
177
|
+
const after = out.slice(otherIdx + 1).join("");
|
|
178
|
+
return before + around + after;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=printer-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getStringWidth","textWidth","t","w","_w","s","data","i","len","length","charCodeAt","textHasNewline","nl","_nl","indexOf","MODE_BREAK","Symbol","MODE_FLAT","CURSOR_PLACEHOLDER","rootIndent","value","queue","makeIndent","ind","options","generateInd","type","makeAlign","indent","widthOrDoc","Number","NEGATIVE_INFINITY","root","alignType","n","newPart","op","slice","lastTabs","lastSpaces","part","flush","useTabs","addTabs","addSpaces","tabWidth","Error","flushSpaces","count","repeat","trimOut","out","trimCount","cursorCount","outIndex","outer","last","charIndex","char","push","joinOut","cursorIdx","join","otherIdx","filter","c","before","around","after"],"sources":["../../../../src/render/printer-support.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|