@alloy-js/core 0.20.0-dev.3 → 0.20.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.
Files changed (137) hide show
  1. package/dist/src/binder.d.ts +62 -38
  2. package/dist/src/binder.d.ts.map +1 -1
  3. package/dist/src/binder.js +214 -173
  4. package/dist/src/components/Declaration.d.ts +2 -2
  5. package/dist/src/components/Declaration.d.ts.map +1 -1
  6. package/dist/src/components/Declaration.js +8 -2
  7. package/dist/src/components/MemberDeclaration.d.ts +2 -2
  8. package/dist/src/components/MemberDeclaration.d.ts.map +1 -1
  9. package/dist/src/components/MemberDeclaration.js +9 -5
  10. package/dist/src/components/MemberScope.d.ts +30 -13
  11. package/dist/src/components/MemberScope.d.ts.map +1 -1
  12. package/dist/src/components/MemberScope.js +37 -15
  13. package/dist/src/components/Output.d.ts.map +1 -1
  14. package/dist/src/components/Output.js +2 -5
  15. package/dist/src/components/ReferenceOrContent.d.ts +1 -1
  16. package/dist/src/components/ReferenceOrContent.d.ts.map +1 -1
  17. package/dist/src/components/Scope.d.ts +5 -5
  18. package/dist/src/components/Scope.d.ts.map +1 -1
  19. package/dist/src/components/Scope.js +9 -5
  20. package/dist/src/context/member-scope.d.ts +7 -8
  21. package/dist/src/context/member-scope.d.ts.map +1 -1
  22. package/dist/src/context/member-scope.js +5 -5
  23. package/dist/src/context/name-policy.d.ts.map +1 -1
  24. package/dist/src/context/name-policy.js +3 -0
  25. package/dist/src/context/scope.d.ts +1 -0
  26. package/dist/src/context/scope.d.ts.map +1 -1
  27. package/dist/src/context/scope.js +7 -0
  28. package/dist/src/inspect.browser.d.ts +5 -0
  29. package/dist/src/inspect.browser.d.ts.map +1 -0
  30. package/dist/src/inspect.browser.js +5 -0
  31. package/dist/src/inspect.d.ts +2 -0
  32. package/dist/src/inspect.d.ts.map +1 -0
  33. package/dist/src/inspect.js +1 -0
  34. package/dist/src/name-policy.d.ts +11 -0
  35. package/dist/src/name-policy.d.ts.map +1 -1
  36. package/dist/src/name-policy.js +3 -0
  37. package/dist/src/reactive-union-set.d.ts.map +1 -1
  38. package/dist/src/reactive-union-set.js +12 -8
  39. package/dist/src/refkey.d.ts +39 -3
  40. package/dist/src/refkey.d.ts.map +1 -1
  41. package/dist/src/refkey.js +52 -8
  42. package/dist/src/symbols/basic-scope.d.ts +14 -0
  43. package/dist/src/symbols/basic-scope.d.ts.map +1 -0
  44. package/dist/src/symbols/basic-scope.js +20 -0
  45. package/dist/src/symbols/basic-symbol.d.ts +19 -0
  46. package/dist/src/symbols/basic-symbol.d.ts.map +1 -0
  47. package/dist/src/symbols/basic-symbol.js +28 -0
  48. package/dist/src/symbols/index.d.ts +3 -1
  49. package/dist/src/symbols/index.d.ts.map +1 -1
  50. package/dist/src/symbols/index.js +3 -1
  51. package/dist/src/symbols/output-scope.d.ts +70 -41
  52. package/dist/src/symbols/output-scope.d.ts.map +1 -1
  53. package/dist/src/symbols/output-scope.js +98 -130
  54. package/dist/src/symbols/output-space.d.ts +25 -0
  55. package/dist/src/symbols/output-space.d.ts.map +1 -0
  56. package/dist/src/symbols/output-space.js +35 -0
  57. package/dist/src/symbols/output-symbol.d.ts +213 -37
  58. package/dist/src/symbols/output-symbol.d.ts.map +1 -1
  59. package/dist/src/symbols/output-symbol.js +323 -203
  60. package/dist/src/symbols/symbol-flow.d.ts +1 -1
  61. package/dist/src/symbols/symbol-flow.d.ts.map +1 -1
  62. package/dist/src/symbols/symbol-flow.js +22 -7
  63. package/dist/src/symbols/symbol-slot.d.ts +27 -9
  64. package/dist/src/symbols/symbol-slot.d.ts.map +1 -1
  65. package/dist/src/symbols/symbol-slot.js +20 -4
  66. package/dist/src/symbols/symbol-table.d.ts +19 -8
  67. package/dist/src/symbols/symbol-table.d.ts.map +1 -1
  68. package/dist/src/symbols/symbol-table.js +65 -16
  69. package/dist/src/tracer.d.ts +15 -3
  70. package/dist/src/tracer.d.ts.map +1 -1
  71. package/dist/src/tracer.js +39 -63
  72. package/dist/src/utils.d.ts +1 -1
  73. package/dist/src/utils.d.ts.map +1 -1
  74. package/dist/src/utils.js +4 -4
  75. package/dist/src/write-output.d.ts +1 -1
  76. package/dist/src/write-output.d.ts.map +1 -1
  77. package/dist/src/write-output.js +31 -37
  78. package/dist/test/components/declaration.test.js +9 -14
  79. package/dist/test/components/reference-or-content.test.js +2 -2
  80. package/dist/test/symbols/output-scope.test.js +33 -198
  81. package/dist/test/symbols/output-symbol.test.js +139 -385
  82. package/dist/test/symbols/resolution.test.js +431 -114
  83. package/dist/test/symbols/symbol-table.test.d.ts +2 -0
  84. package/dist/test/symbols/symbol-table.test.d.ts.map +1 -0
  85. package/dist/test/symbols/symbol-table.test.js +14 -0
  86. package/dist/test/symbols/utils.d.ts +10 -24
  87. package/dist/test/symbols/utils.d.ts.map +1 -1
  88. package/dist/test/symbols/utils.js +23 -45
  89. package/dist/tsconfig.tsbuildinfo +1 -1
  90. package/package.json +4 -2
  91. package/src/binder.ts +348 -273
  92. package/src/components/Declaration.tsx +13 -3
  93. package/src/components/MemberDeclaration.tsx +15 -8
  94. package/src/components/MemberScope.tsx +61 -20
  95. package/src/components/Output.tsx +0 -4
  96. package/src/components/Scope.tsx +16 -9
  97. package/src/context/member-scope.ts +10 -10
  98. package/src/context/name-policy.ts +3 -0
  99. package/src/context/scope.ts +9 -0
  100. package/src/inspect.browser.ts +6 -0
  101. package/src/inspect.ts +1 -0
  102. package/src/name-policy.ts +14 -0
  103. package/src/reactive-union-set.ts +14 -8
  104. package/src/refkey.ts +88 -14
  105. package/src/symbols/basic-scope.ts +23 -0
  106. package/src/symbols/basic-symbol.ts +32 -0
  107. package/src/symbols/index.ts +3 -1
  108. package/src/symbols/output-scope.ts +131 -170
  109. package/src/symbols/output-space.ts +49 -0
  110. package/src/symbols/output-symbol.ts +434 -258
  111. package/src/symbols/symbol-flow.ts +38 -9
  112. package/src/symbols/symbol-slot.tsx +46 -8
  113. package/src/symbols/symbol-table.ts +95 -21
  114. package/src/tracer.ts +53 -83
  115. package/src/utils.tsx +4 -4
  116. package/src/write-output.ts +33 -45
  117. package/temp/api.json +5551 -3066
  118. package/test/components/declaration.test.tsx +6 -19
  119. package/test/components/reference-or-content.test.tsx +2 -2
  120. package/test/symbols/output-scope.test.ts +33 -125
  121. package/test/symbols/output-symbol.test.ts +128 -348
  122. package/test/symbols/resolution.test.ts +530 -117
  123. package/test/symbols/symbol-table.test.ts +15 -0
  124. package/test/symbols/utils.ts +38 -74
  125. package/tsdoc.json +4 -0
  126. package/dist/src/slot.d.ts +0 -15
  127. package/dist/src/slot.d.ts.map +0 -1
  128. package/dist/src/slot.js +0 -50
  129. package/dist/src/symbols/flags.d.ts +0 -70
  130. package/dist/src/symbols/flags.d.ts.map +0 -1
  131. package/dist/src/symbols/flags.js +0 -72
  132. package/dist/test/components/slot.test.d.ts +0 -2
  133. package/dist/test/components/slot.test.d.ts.map +0 -1
  134. package/dist/test/components/slot.test.js +0 -134
  135. package/src/slot.ts +0 -89
  136. package/src/symbols/flags.ts +0 -82
  137. package/test/components/slot.test.tsx +0 -174
@@ -1,8 +1,8 @@
1
1
  import { isRef, shallowReactive } from "@vue/reactivity";
2
2
  import { effect, getContext, onCleanup } from "../reactivity.js";
3
- import { MemberScopeContext } from "../context/member-scope.js";
3
+ import { MemberContext } from "../context/member-scope.js";
4
4
  import { ScopeContext } from "../context/scope.js";
5
- import { OutputSymbolFlags } from "./flags.js";
5
+ import { formatSymbolName, trace, TracePhase } from "../tracer.js";
6
6
  export function takeSymbols(cb) {
7
7
  const context = getContext();
8
8
  context.takesSymbols = true;
@@ -21,6 +21,11 @@ export function takeSymbols(cb) {
21
21
  return context.takenSymbols;
22
22
  }
23
23
  export function emitSymbol(symbol) {
24
+ if (isRef(symbol)) {
25
+ trace(TracePhase.symbol.flow, () => `Emitting ref to symbol`);
26
+ } else {
27
+ trace(TracePhase.symbol.flow, () => `Emitting symbol ${formatSymbolName(symbol)}`);
28
+ }
24
29
  let symbolTaker;
25
30
  let context = getContext().owner;
26
31
  while (context) {
@@ -28,13 +33,15 @@ export function emitSymbol(symbol) {
28
33
  symbolTaker = context;
29
34
  break;
30
35
  }
31
- if (context.context && (context.context[ScopeContext.id] || context.context[MemberScopeContext.id])) {
36
+ if (context.context && (context.context[ScopeContext.id] || context.context[MemberContext.id])) {
32
37
  // don't cross scope boundaries.
38
+ trace(TracePhase.symbol.flow, () => `Not emitting symbol across scope boundary`);
33
39
  break;
34
40
  }
35
41
  context = context.owner;
36
42
  }
37
43
  if (!symbolTaker) {
44
+ trace(TracePhase.symbol.flow, () => `No symbol taker found, not emitting`);
38
45
  return;
39
46
  }
40
47
  if (isRef(symbol)) {
@@ -53,6 +60,7 @@ export function emitSymbol(symbol) {
53
60
  }
54
61
  });
55
62
  } else {
63
+ trace(TracePhase.symbol.flow, () => `Emitting symbol ${formatSymbolName(symbol)} taken by ${symbolTaker.componentOwner?.name ?? "unknown component"}`);
56
64
  symbolTaker.takenSymbols.add(symbol);
57
65
  onCleanup(() => {
58
66
  context.takenSymbols.delete(symbol);
@@ -63,12 +71,19 @@ export function moveTakenMembersTo(baseSymbol) {
63
71
  const taken = takeSymbols();
64
72
  effect(() => {
65
73
  for (const symbol of taken) {
66
- if (symbol.flags & OutputSymbolFlags.Transient) {
67
- symbol.moveTo(baseSymbol);
74
+ if (symbol.isTransient) {
75
+ symbol.moveMembersTo(baseSymbol);
76
+ }
77
+ for (const refkey of symbol.refkeys) {
78
+ if (!baseSymbol.refkeys.includes(refkey)) {
79
+ baseSymbol.refkeys.push(refkey);
80
+ }
68
81
  }
69
82
  }
70
83
  });
71
84
  }
72
- export function instantiateTakenMembersTo(baseSymbol) {
73
- takeSymbols(symbol => symbol.instantiateTo(baseSymbol));
85
+ export function instantiateTakenMembersTo(baseSymbol, toSpaceKey, fromSpaceKey) {
86
+ takeSymbols(symbol => {
87
+ baseSymbol.type = symbol;
88
+ });
74
89
  }
@@ -1,12 +1,30 @@
1
1
  import { Ref, ShallowReactive } from "@vue/reactivity";
2
- import type { Children } from "../runtime/component.js";
2
+ import type { Component } from "../runtime/component.js";
3
3
  import { OutputSymbol } from "./output-symbol.js";
4
- export declare function createSymbolSlot(): {
5
- (props: {
6
- children: Children;
7
- }): Children;
8
- ref: Ref<ShallowReactive<Set<OutputSymbol>> | undefined, ShallowReactive<Set<OutputSymbol>> | undefined>;
9
- instantiateInto(baseSymbol: OutputSymbol): void;
10
- copyInto(baseSymbol: OutputSymbol): void;
11
- };
4
+ export interface SymbolSlot extends Component<{}> {
5
+ /**
6
+ * A ref for the set of symbols taken by this slot. Undefined when the Slot component
7
+ * has not been rendered yet.
8
+ */
9
+ ref: Ref<ShallowReactive<Set<OutputSymbol>> | undefined>;
10
+ /**
11
+ * A ref for the first symbol taken by this slot. Undefined when the Slot component
12
+ * has not been rendered yet or has not taken any symbols.
13
+ */
14
+ firstSymbol: Ref<OutputSymbol | undefined>;
15
+ /**
16
+ * Copy any members from taken symbols to the given symbol.
17
+ */
18
+ copyMembersTo(baseSymbol: OutputSymbol): void;
19
+ /**
20
+ * Move any members from transient taken symbols to the given symbol.
21
+ */
22
+ moveMembersTo(baseSymbol: OutputSymbol): void;
23
+ }
24
+ /**
25
+ * Create a component which accepts emitted symbols. The returned component has
26
+ * a `ref` property which is a ref to a reactive set of all symbols emitted by
27
+ * children of the component.
28
+ */
29
+ export declare function createSymbolSlot(): SymbolSlot;
12
30
  //# sourceMappingURL=symbol-slot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-slot.d.ts","sourceRoot":"","sources":["../../../src/symbols/symbol-slot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAc,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,wBAAgB,gBAAgB;YAGH;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE;;gCAaP,YAAY;yBAYnB,YAAY;EAahD"}
1
+ {"version":3,"file":"symbol-slot.d.ts","sourceRoot":"","sources":["../../../src/symbols/symbol-slot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAc,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAY,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,UAAW,SAAQ,SAAS,CAAC,EAAE,CAAC;IAC/C;;;OAGG;IACH,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzD;;;OAGG;IACH,WAAW,EAAE,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAE3C;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/C;AACD;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAoD7C"}
@@ -1,6 +1,11 @@
1
1
  import { shallowRef } from "@vue/reactivity";
2
2
  import { effect, onCleanup } from "../reactivity.js";
3
3
  import { takeSymbols } from "./symbol-flow.js";
4
+ /**
5
+ * Create a component which accepts emitted symbols. The returned component has
6
+ * a `ref` property which is a ref to a reactive set of all symbols emitted by
7
+ * children of the component.
8
+ */
4
9
  export function createSymbolSlot() {
5
10
  const symbolSlotRef = shallowRef();
6
11
  function SymbolSlot(props) {
@@ -12,23 +17,34 @@ export function createSymbolSlot() {
12
17
  return props.children;
13
18
  }
14
19
  SymbolSlot.ref = symbolSlotRef;
15
- SymbolSlot.instantiateInto = baseSymbol => {
20
+ Object.defineProperty(SymbolSlot, "firstSymbol", {
21
+ get() {
22
+ const ref = shallowRef();
23
+ effect(() => {
24
+ ref.value = symbolSlotRef.value?.values().next().value;
25
+ });
26
+ return ref;
27
+ }
28
+ });
29
+ SymbolSlot.copyMembersTo = baseSymbol => {
16
30
  effect(() => {
17
31
  if (!symbolSlotRef.value) {
18
32
  return;
19
33
  }
20
34
  for (const symbol of symbolSlotRef.value) {
21
- symbol.instantiateTo(baseSymbol);
35
+ symbol.copyMembersTo(baseSymbol);
22
36
  }
23
37
  });
24
38
  };
25
- SymbolSlot.copyInto = baseSymbol => {
39
+ SymbolSlot.moveMembersTo = baseSymbol => {
26
40
  effect(() => {
27
41
  if (!symbolSlotRef.value) {
28
42
  return;
29
43
  }
30
44
  for (const symbol of symbolSlotRef.value) {
31
- symbol.copyTo(baseSymbol);
45
+ if (symbol.isTransient) {
46
+ symbol.moveMembersTo(baseSymbol);
47
+ }
32
48
  }
33
49
  });
34
50
  };
@@ -1,14 +1,25 @@
1
- import type { NameConflictResolver } from "../binder.js";
1
+ import type { Binder, NameConflictResolver } from "../binder.js";
2
2
  import { ReactiveUnionSet } from "../reactive-union-set.js";
3
- import type { OutputScope } from "./output-scope.js";
3
+ import { Refkey } from "../refkey.js";
4
4
  import type { OutputSymbol } from "./output-symbol.js";
5
- export declare class SymbolTable extends ReactiveUnionSet<OutputSymbol> {
6
- private _namesToDeconflict;
7
- private _nameConflictResolver?;
8
- private _deconflictNames;
9
- scope: OutputScope;
10
- constructor(scope: OutputScope, options?: {
5
+ export declare abstract class SymbolTable extends ReactiveUnionSet<OutputSymbol> {
6
+ #private;
7
+ get binder(): Binder | undefined;
8
+ /**
9
+ * The key of this symbol table, e.g. "static" or "instance".
10
+ */
11
+ get key(): string;
12
+ /**
13
+ * The symbols defined within this scope, indexed by refkey.
14
+ */
15
+ get symbolsByRefkey(): ReadonlyMap<Refkey, OutputSymbol>;
16
+ get symbolNames(): ReadonlyMap<string, OutputSymbol>;
17
+ constructor(key: string, binder?: Binder, options?: {
11
18
  nameConflictResolver?: NameConflictResolver;
12
19
  });
20
+ moveTo(target: SymbolTable): void;
21
+ copyTo(target: SymbolTable, options?: {
22
+ createRefkeys?(sourceSymbol: OutputSymbol): Refkey[];
23
+ }): void;
13
24
  }
14
25
  //# sourceMappingURL=symbol-table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-table.d.ts","sourceRoot":"","sources":["../../../src/symbols/symbol-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAQ5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,WAAY,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IAC7D,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,qBAAqB,CAAC,CAAuB;IACrD,OAAO,CAAC,gBAAgB,CAYtB;IACK,KAAK,cAAC;gBAEX,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE;QACP,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;KACxC;CA2BT"}
1
+ {"version":3,"file":"symbol-table.d.ts","sourceRoot":"","sources":["../../../src/symbols/symbol-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAStC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,8BAAsB,WAAY,SAAQ,gBAAgB,CAAC,YAAY,CAAC;;IAmBtE,IAAI,MAAM,uBAET;IAID;;OAEG;IACH,IAAI,GAAG,WAEN;IAGD;;OAEG;IACH,IAAI,eAAe,sCAElB;IAGD,IAAI,WAAW,sCAEd;gBAGC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE;QACP,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;KACxC;IAmCR,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAejC,MAAM,CACJ,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;QACP,aAAa,CAAC,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;KACjD,GACL,IAAI;CAgBR"}
@@ -1,33 +1,82 @@
1
1
  import { ReactiveUnionSet } from "../reactive-union-set.js";
2
2
  import { queueJob } from "../scheduler.js";
3
- import { formatScopeName, formatSymbolName, trace, TracePhase } from "../tracer.js";
3
+ import { formatSymbolName, formatSymbolTableName, trace, TracePhase } from "../tracer.js";
4
4
  export class SymbolTable extends ReactiveUnionSet {
5
- _namesToDeconflict = new Set();
6
- _deconflictNames = () => {
7
- for (const name of this._namesToDeconflict) {
8
- const conflictedSymbols = [...this].filter(sym => sym.originalName === name);
9
- if (this._nameConflictResolver) {
10
- this._nameConflictResolver(name, conflictedSymbols);
5
+ #namesToDeconflict = new Set();
6
+ #nameConflictResolver;
7
+ #deconflictNames = () => {
8
+ for (const name of this.#namesToDeconflict) {
9
+ const conflictedSymbols = [...this].filter(sym => sym.originalName === name && !sym.ignoreNameConflict);
10
+ if (this.#nameConflictResolver) {
11
+ this.#nameConflictResolver(name, conflictedSymbols);
11
12
  } else {
12
13
  defaultConflictHandler(name, conflictedSymbols);
13
14
  }
14
- this._namesToDeconflict.delete(name);
15
+ this.#namesToDeconflict.delete(name);
15
16
  }
16
17
  };
17
- constructor(scope, options = {}) {
18
+ #binder;
19
+ get binder() {
20
+ return this.#binder;
21
+ }
22
+ #key;
23
+
24
+ /**
25
+ * The key of this symbol table, e.g. "static" or "instance".
26
+ */
27
+ get key() {
28
+ return this.#key;
29
+ }
30
+ #symbolsByRefkey;
31
+ /**
32
+ * The symbols defined within this scope, indexed by refkey.
33
+ */
34
+ get symbolsByRefkey() {
35
+ return this.#symbolsByRefkey;
36
+ }
37
+ #symbolNames;
38
+ get symbolNames() {
39
+ return this.#symbolNames;
40
+ }
41
+ constructor(key, binder, options = {}) {
18
42
  super({
19
43
  onAdd: symbol => {
20
- trace(TracePhase.symbol.addToScope, () => `${formatSymbolName(symbol)} -> ${formatScopeName(scope)}`);
21
- this._namesToDeconflict.add(symbol.name);
22
- queueJob(this._deconflictNames);
44
+ trace(TracePhase.symbol.addToScope, () => `${formatSymbolName(symbol)} added to ${formatSymbolTableName(this)}`);
45
+ this.#namesToDeconflict.add(symbol.name);
46
+ queueJob(this.#deconflictNames);
23
47
  return symbol;
24
48
  },
25
- onDelete(symbol) {
26
- trace(TracePhase.symbol.removeFromScope, () => `${formatSymbolName(symbol)} -> ${formatScopeName(scope)}`);
49
+ onDelete: symbol => {
50
+ trace(TracePhase.symbol.removeFromScope, () => `${formatSymbolName(symbol)} removed from ${formatSymbolTableName(this)}`);
51
+ }
52
+ });
53
+ this.#nameConflictResolver = options.nameConflictResolver ?? binder?.nameConflictResolver;
54
+ this.#binder = binder;
55
+ this.#key = key;
56
+ this.#symbolsByRefkey = this.createIndex(s => s.refkeys);
57
+ this.#symbolNames = this.createIndex(s => {
58
+ return s.name;
59
+ });
60
+ }
61
+ moveTo(target) {
62
+ trace(TracePhase.scope.moveSymbols, () => `${formatSymbolTableName(this)} -> ${formatSymbolTableName(target)}`);
63
+ target.addSubset(this, {
64
+ onAdd: symbol => {
65
+ symbol.spaces = [target];
66
+ return symbol;
67
+ }
68
+ });
69
+ }
70
+ copyTo(target, options = {}) {
71
+ trace(TracePhase.scope.copySymbols, () => `${formatSymbolTableName(this)} copied to ${formatSymbolTableName(target)}`);
72
+ target.addSubset(this, {
73
+ onAdd: symbol => {
74
+ const copy = symbol.copy();
75
+ copy.spaces = [target];
76
+ copy.refkeys = options.createRefkeys?.(symbol) ?? [];
77
+ return copy;
27
78
  }
28
79
  });
29
- this.scope = scope;
30
- this._nameConflictResolver = options.nameConflictResolver;
31
80
  }
32
81
  }
33
82
 
@@ -1,6 +1,7 @@
1
- import type { Refkey } from "./refkey.js";
1
+ import { type Refkey } from "./refkey.js";
2
2
  import { type OutputScope } from "./symbols/output-scope.js";
3
3
  import { type OutputSymbol } from "./symbols/output-symbol.js";
4
+ import { SymbolTable } from "./symbols/symbol-table.js";
4
5
  export declare const TracePhase: {
5
6
  readonly scope: {
6
7
  readonly update: {
@@ -30,6 +31,15 @@ export declare const TracePhase: {
30
31
  readonly b: 100;
31
32
  };
32
33
  };
34
+ readonly moveSymbols: {
35
+ readonly area: "scope";
36
+ readonly subarea: "moveSymbols";
37
+ readonly bg: {
38
+ readonly r: 0;
39
+ readonly g: 100;
40
+ readonly b: 100;
41
+ };
42
+ };
33
43
  };
34
44
  readonly symbol: {
35
45
  readonly update: {
@@ -226,13 +236,15 @@ interface TextFormat {
226
236
  */
227
237
  export declare function formatSymbolName(symbol: OutputSymbol): string;
228
238
  export declare function formatSymbol(symbol: OutputSymbol): string;
229
- export declare function formatScopeName(scope: OutputScope): string;
239
+ export declare function formatSpaceSymbols(space: SymbolTable): string;
240
+ export declare function formatScopeName(scope: OutputScope | undefined): string;
241
+ export declare function formatSymbolTableName(table: SymbolTable): string;
230
242
  /**
231
243
  * Format an OutputScope for display, showing information in a concise format
232
244
  * @param scope The scope to format
233
245
  * @returns A formatted string representation of the scope
234
246
  */
235
- export declare function formatScope(scope: OutputSymbol["scope"]): string;
247
+ export declare function formatScope(scope: OutputScope): string;
236
248
  export declare function formatRefkeys(refkeys: Refkey[] | Refkey | undefined): string;
237
249
  export {};
238
250
  //# sourceMappingURL=tracer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA0B/D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoHb,CAAC;AAEX,UAAU,UAAW,SAAQ,UAAU;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,KAAK,CACnB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,MAAM,EAChB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,QA4BpC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,MAAM,QA8B9D;AAED,UAAU,KAAK;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,4CAA4C;AAC5C,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ7D;AAiBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAoDzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAc1D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,MAAM,CAoDhE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,UAUnE"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AA0BxD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyHb,CAAC;AAEX,UAAU,UAAW,SAAQ,UAAU;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,KAAK,CACnB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,MAAM,EAChB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,QA4BpC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,MAAM,QA8B9D;AAED,UAAU,KAAK;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,4CAA4C;AAC5C,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAqCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ7D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAoCzD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,UAEpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAYtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAahE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAwCtD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,UAUnE"}
@@ -1,7 +1,7 @@
1
1
  import { effect } from "@vue/reactivity";
2
2
  import { untrack } from "./reactivity.js";
3
+ import { isMemberRefkey } from "./refkey.js";
3
4
  import { scheduler } from "./scheduler.js";
4
- import { OutputScopeFlags, OutputSymbolFlags } from "./symbols/flags.js";
5
5
  // enable tracing for specific phases using a comma separated list of
6
6
  // dotted identifiers, e.g. `scope.update,symbol.create`.
7
7
  const traceEnv = process.env.ALLOY_TRACE ?? "";
@@ -46,6 +46,15 @@ export const TracePhase = {
46
46
  g: 100,
47
47
  b: 100
48
48
  }
49
+ },
50
+ moveSymbols: {
51
+ area: "scope",
52
+ subarea: "moveSymbols",
53
+ bg: {
54
+ r: 0,
55
+ g: 100,
56
+ b: 100
57
+ }
49
58
  }
50
59
  },
51
60
  symbol: {
@@ -316,16 +325,6 @@ function colorText(text, fmt) {
316
325
  return `${prefix}${text}${reset}`;
317
326
  }
318
327
 
319
- /**
320
- * Format flag values in a concise way, showing only the flags that are set
321
- * @param flags The numeric flags value to format
322
- * @param flagEnum The enum containing flag definitions
323
- * @returns An array of flag names that are set
324
- */
325
- function formatFlags(flags, flagEnum) {
326
- return Object.entries(flagEnum).filter(([name, value]) => typeof value === "number" && value !== 0 && (flags & value) === value).map(([name]) => name);
327
- }
328
-
329
328
  /**
330
329
  * Format a symbol name with its ID in a blue-green color
331
330
  * @param symbol The symbol to format
@@ -340,18 +339,6 @@ export function formatSymbolName(symbol) {
340
339
  }
341
340
  });
342
341
  }
343
-
344
- /**
345
- * Format the symbols in a member scope, showing their names and IDs
346
- * @param scope The member scope containing the symbols to format
347
- * @returns A formatted string representation of the member scope symbols
348
- */
349
- function formatMemberScopeSymbols(scope) {
350
- if (!scope || scope.symbols.size === 0) {
351
- return "none";
352
- }
353
- return Array.from(scope.symbols).map(symbol => formatSymbolName(symbol)).join(", ");
354
- }
355
342
  export function formatSymbol(symbol) {
356
343
  // Base display with name and ID
357
344
  let result = formatSymbolName(symbol);
@@ -368,29 +355,15 @@ export function formatSymbol(symbol) {
368
355
  }));
369
356
  }
370
357
 
371
- // Show only enabled flags
372
- const flagsInfo = formatFlags(symbol.flags, OutputSymbolFlags);
373
- if (flagsInfo.length > 0) {
374
- details.push(` flags: ${flagsInfo.join(", ")}`);
375
- }
376
-
377
358
  // Show scope info with formatted name
378
359
  if (symbol.scope) {
379
360
  details.push(untrack(() => ` scope: ${formatScopeName(symbol.scope)}`));
380
361
  }
381
-
382
- // Show member scopes if present
383
- if (symbol.instanceMemberScope) {
384
- untrack(() => {
385
- const memberCount = symbol.instanceMemberScope.symbols.size;
386
- details.push(` instance members: ${memberCount} - ${formatMemberScopeSymbols(symbol.instanceMemberScope)}`);
387
- });
362
+ for (const space of symbol.memberSpaces) {
363
+ details.push(untrack(() => formatSpaceSymbols(space)));
388
364
  }
389
- if (symbol.staticMemberScope) {
390
- untrack(() => {
391
- const memberCount = symbol.staticMemberScope.symbols.size;
392
- details.push(` static members: ${memberCount} - ${formatMemberScopeSymbols(symbol.staticMemberScope)}`);
393
- });
365
+ if (symbol.ownerSymbol) {
366
+ details.push(untrack(() => ` ownerSymbol: ${formatSymbolName(symbol.ownerSymbol)}`));
394
367
  }
395
368
 
396
369
  // Show all refkeys with proper formatting
@@ -402,18 +375,31 @@ export function formatSymbol(symbol) {
402
375
  }
403
376
  return result;
404
377
  }
378
+ export function formatSpaceSymbols(space) {
379
+ return ` ${space.key} symbols (${space.size}): ${[...space].map(s => s.name).join(", ")}`;
380
+ }
405
381
  export function formatScopeName(scope) {
406
- let text = colorText(`${scope.name}[${scope.id}]`, {
382
+ if (!scope) {
383
+ return "no scope";
384
+ }
385
+ return colorText(`${scope.name}[${scope.id}]`, {
407
386
  fg: {
408
387
  r: 0,
409
388
  g: 150,
410
389
  b: 50
411
390
  }
412
391
  });
413
- if (scope.owner) {
414
- text += untrack(() => ` of ${formatSymbolName(scope.owner)}`);
415
- }
416
- return text;
392
+ }
393
+ export function formatSymbolTableName(table) {
394
+ // avoid instance of checks here in order to not create circular module imports.
395
+ const name = "symbol" in table ? formatSymbolName(table.symbol) : formatScopeName(table.scope);
396
+ return colorText(`${name}:${table.key}`, {
397
+ fg: {
398
+ r: 0,
399
+ g: 125,
400
+ b: 25
401
+ }
402
+ });
417
403
  }
418
404
 
419
405
  /**
@@ -445,32 +431,21 @@ export function formatScope(scope) {
445
431
  }
446
432
  }));
447
433
  }
448
- // Show only enabled flags
449
- const flagsInfo = formatFlags(scope.flags, OutputScopeFlags);
450
- if (flagsInfo.length > 0) {
451
- details.push(` flags: ${flagsInfo.join(", ")}`);
452
- }
453
-
454
- // Show symbol count
455
- const symbolCount = scope.symbols.size;
456
- if (symbolCount > 0) {
457
- details.push(` symbols: ${symbolCount}`);
458
- }
459
434
 
460
435
  // Show parent scope if present
461
436
  if (scope.parent) {
462
437
  details.push(` parent: ${formatScopeName(scope.parent)}`);
463
438
  }
464
439
 
465
- // Show owner if present (for member scopes)
466
- if (scope.owner) {
467
- details.push(` owner: ${formatSymbolName(scope.owner)}`);
468
- }
469
-
470
440
  // Show child scopes if present
471
441
  if (scope.children && scope.children.size > 0) {
472
442
  details.push(` children: ${scope.children.size}`);
473
443
  }
444
+
445
+ // Show declaration spaces
446
+ for (const space of scope.spaces) {
447
+ details.push(` ${untrack(() => formatSpaceSymbols(space))}`);
448
+ }
474
449
  if (details.length > 0) {
475
450
  result += "\n" + details.join("\n");
476
451
  }
@@ -486,7 +461,8 @@ export function formatRefkeys(refkeys) {
486
461
  return formatRefkey(refkeys);
487
462
  }
488
463
  function formatRefkey(refkey) {
489
- return colorText(`refkey[${refkey.key}]`, {
464
+ const text = isMemberRefkey(refkey) ? `memberRefkey[${formatRefkey(refkey.base)} -> ${formatRefkey(refkey.member)}]` : `refkey[${refkey.key}]`;
465
+ return colorText(text, {
490
466
  fg: {
491
467
  r: 150,
492
468
  g: 0,
@@ -80,7 +80,7 @@ export interface OutputVisitor {
80
80
  * @param sourceDirectory - The root directory to traverse.
81
81
  * @param visitor - The visitor to call for each file and directory.
82
82
  */
83
- export declare function traverseOutput(sourceDirectory: OutputDirectory, visitor: OutputVisitor): void;
83
+ export declare function traverseOutput(sourceDirectory: OutputDirectory, visitor: OutputVisitor): Promise<void>;
84
84
  /**
85
85
  * Convert a list of props to a joiner and ender for use in {@link (mapJoin:1)}.
86
86
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAEL,aAAa,EAMd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAEjB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAElB;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC;AACpD;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAC1B,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,EACpC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAClC,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC;AAmHpD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EACrC,GAAG,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,WAAgB,GACxB,QAAQ,CAmBV;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,MAAM,QAAQ,EAClB,OAAO,GAAE,eAAoB,GAC5B,MAAM,QAAQ,CAsBhB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,QAAQ,EAClB,OAAO,CAAC,EAAE,eAAe,GACxB,QAAQ,EAAE,CASZ;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,mEAQ/D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,8DAQlE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAEvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,gBAAgB,CAEvE;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,aAAa,QAUvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAuC5E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAEL,aAAa,EAMd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAEjB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAElB;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC;AACpD;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAC1B,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,EACpC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAClC,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC;AAmHpD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EACrC,GAAG,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,WAAgB,GACxB,QAAQ,CAmBV;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,MAAM,QAAQ,EAClB,OAAO,GAAE,eAAoB,GAC5B,MAAM,QAAQ,CAsBhB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,QAAQ,EAClB,OAAO,CAAC,EAAE,eAAe,GACxB,QAAQ,EAAE,CASZ;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,mEAQ/D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,8DAQlE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAEvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,gBAAgB,CAEvE;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,aAAa,iBAUvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAuC5E"}
package/dist/src/utils.js CHANGED
@@ -211,13 +211,13 @@ export function isKeyedChild(child) {
211
211
  * @param sourceDirectory - The root directory to traverse.
212
212
  * @param visitor - The visitor to call for each file and directory.
213
213
  */
214
- export function traverseOutput(sourceDirectory, visitor) {
215
- visitor.visitDirectory(sourceDirectory);
214
+ export async function traverseOutput(sourceDirectory, visitor) {
215
+ await visitor.visitDirectory(sourceDirectory);
216
216
  for (const item of sourceDirectory.contents) {
217
217
  if (item.kind === "directory") {
218
- traverseOutput(item, visitor);
218
+ await traverseOutput(item, visitor);
219
219
  } else {
220
- visitor.visitFile(item);
220
+ await visitor.visitFile(item);
221
221
  }
222
222
  }
223
223
  }
@@ -3,5 +3,5 @@ import { OutputDirectory } from "./render.js";
3
3
  * Write the output from {@link render} to the file system.
4
4
  *
5
5
  */
6
- export declare function writeOutput(output: OutputDirectory, basePath?: string): Promise<void[]>;
6
+ export declare function writeOutput(output: OutputDirectory, basePath?: string): Promise<void>;
7
7
  //# sourceMappingURL=write-output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-output.d.ts","sourceRoot":"","sources":["../../src/write-output.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,MAAW,mBAoDtB"}
1
+ {"version":3,"file":"write-output.d.ts","sourceRoot":"","sources":["../../src/write-output.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,MAAW,iBAwCtB"}