@component-compass/cli 0.0.1 → 0.0.3

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 (96) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +12 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +3 -2
  5. package/dist/commands/init.js +50 -62
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/no-deps-diagnostic.d.ts +15 -0
  8. package/dist/commands/no-deps-diagnostic.js +23 -0
  9. package/dist/commands/no-deps-diagnostic.js.map +1 -0
  10. package/dist/commands/scan.d.ts +1 -0
  11. package/dist/commands/scan.js +126 -82
  12. package/dist/commands/scan.js.map +1 -1
  13. package/dist/composition-rollup.d.ts +23 -0
  14. package/dist/composition-rollup.js +64 -0
  15. package/dist/composition-rollup.js.map +1 -0
  16. package/dist/config/loader.js +5 -3
  17. package/dist/config/loader.js.map +1 -1
  18. package/dist/config/schema.d.ts +1 -2
  19. package/dist/config/schema.js.map +1 -1
  20. package/dist/identity.d.ts +21 -3
  21. package/dist/identity.js +40 -3
  22. package/dist/identity.js.map +1 -1
  23. package/dist/local-index/detect-react.js +224 -47
  24. package/dist/local-index/detect-react.js.map +1 -1
  25. package/dist/local-index/index.d.ts +4 -1
  26. package/dist/local-index/index.js +30 -13
  27. package/dist/local-index/index.js.map +1 -1
  28. package/dist/manifest/barrel-parser.d.ts +20 -0
  29. package/dist/manifest/barrel-parser.js +101 -16
  30. package/dist/manifest/barrel-parser.js.map +1 -1
  31. package/dist/manifest/derived-manifest-stub.d.ts +9 -0
  32. package/dist/manifest/derived-manifest-stub.js +11 -0
  33. package/dist/manifest/derived-manifest-stub.js.map +1 -0
  34. package/dist/manifest/diagnostic-filter.d.ts +13 -0
  35. package/dist/manifest/diagnostic-filter.js +36 -0
  36. package/dist/manifest/diagnostic-filter.js.map +1 -0
  37. package/dist/manifest/lazy-resolver.d.ts +44 -0
  38. package/dist/manifest/lazy-resolver.js +532 -0
  39. package/dist/manifest/lazy-resolver.js.map +1 -0
  40. package/dist/occurrences.d.ts +17 -0
  41. package/dist/occurrences.js +97 -0
  42. package/dist/occurrences.js.map +1 -0
  43. package/dist/reporter/index.d.ts +47 -9
  44. package/dist/reporter/index.js +167 -17
  45. package/dist/reporter/index.js.map +1 -1
  46. package/dist/reporter/json.d.ts +6 -2
  47. package/dist/reporter/json.js +7 -3
  48. package/dist/reporter/json.js.map +1 -1
  49. package/dist/reporter/stdout.d.ts +2 -2
  50. package/dist/reporter/stdout.js +11 -23
  51. package/dist/reporter/stdout.js.map +1 -1
  52. package/dist/rollup.d.ts +8 -2
  53. package/dist/rollup.js +2 -3
  54. package/dist/rollup.js.map +1 -1
  55. package/dist/seeds.d.ts +41 -0
  56. package/dist/seeds.js +145 -0
  57. package/dist/seeds.js.map +1 -0
  58. package/dist/types.d.ts +0 -1
  59. package/dist/workspace/build-graph.d.ts +2 -0
  60. package/dist/workspace/build-graph.js +117 -0
  61. package/dist/workspace/build-graph.js.map +1 -0
  62. package/dist/workspace/declared-deps.d.ts +5 -0
  63. package/dist/workspace/declared-deps.js +42 -0
  64. package/dist/workspace/declared-deps.js.map +1 -0
  65. package/dist/workspace/find-owning-package.d.ts +2 -0
  66. package/dist/workspace/find-owning-package.js +49 -0
  67. package/dist/workspace/find-owning-package.js.map +1 -0
  68. package/dist/workspace/index.d.ts +4 -0
  69. package/dist/workspace/index.js +4 -0
  70. package/dist/workspace/index.js.map +1 -0
  71. package/dist/workspace/types.d.ts +46 -0
  72. package/dist/workspace/types.js +13 -0
  73. package/dist/workspace/types.js.map +1 -0
  74. package/package.json +11 -9
  75. package/schema/config.schema.json +2 -10
  76. package/dist/graph/builder.d.ts +0 -25
  77. package/dist/graph/builder.js +0 -176
  78. package/dist/graph/builder.js.map +0 -1
  79. package/dist/manifest/discovery.d.ts +0 -24
  80. package/dist/manifest/discovery.js +0 -194
  81. package/dist/manifest/discovery.js.map +0 -1
  82. package/dist/manifest/index.d.ts +0 -6
  83. package/dist/manifest/index.js +0 -98
  84. package/dist/manifest/index.js.map +0 -1
  85. package/dist/manifest/resolver.d.ts +0 -30
  86. package/dist/manifest/resolver.js +0 -136
  87. package/dist/manifest/resolver.js.map +0 -1
  88. package/dist/manifest/run-discovery.d.ts +0 -12
  89. package/dist/manifest/run-discovery.js +0 -46
  90. package/dist/manifest/run-discovery.js.map +0 -1
  91. package/dist/manifest/types.d.ts +0 -3
  92. package/dist/manifest/types.js +0 -2
  93. package/dist/manifest/types.js.map +0 -1
  94. package/dist/reporter/types.d.ts +0 -69
  95. package/dist/reporter/types.js +0 -2
  96. package/dist/reporter/types.js.map +0 -1
@@ -0,0 +1,64 @@
1
+ export function applyCompositionRollup(components, occurrences) {
2
+ const childrenByOwner = new Map();
3
+ const ownersByChild = new Map();
4
+ const rootCountByChild = new Map();
5
+ for (const o of occurrences) {
6
+ if (o.ownerComponentId) {
7
+ let m = childrenByOwner.get(o.ownerComponentId);
8
+ if (!m) {
9
+ m = new Map();
10
+ childrenByOwner.set(o.ownerComponentId, m);
11
+ }
12
+ m.set(o.componentId, (m.get(o.componentId) ?? 0) + 1);
13
+ let m2 = ownersByChild.get(o.componentId);
14
+ if (!m2) {
15
+ m2 = new Map();
16
+ ownersByChild.set(o.componentId, m2);
17
+ }
18
+ m2.set(o.ownerComponentId, (m2.get(o.ownerComponentId) ?? 0) + 1);
19
+ }
20
+ else {
21
+ rootCountByChild.set(o.componentId, (rootCountByChild.get(o.componentId) ?? 0) + 1);
22
+ }
23
+ }
24
+ const occsByComp = new Map();
25
+ for (const o of occurrences) {
26
+ const list = occsByComp.get(o.componentId);
27
+ if (list)
28
+ list.push(o);
29
+ else
30
+ occsByComp.set(o.componentId, [o]);
31
+ }
32
+ const validIds = new Set(components.map((c) => c.id));
33
+ return components.map((c) => {
34
+ const rendersByCount = {};
35
+ const renderedByCount = {};
36
+ const isRootCount = rootCountByChild.get(c.id) ?? 0;
37
+ let isLeafCount = 0;
38
+ const renders = childrenByOwner.get(c.id);
39
+ if (renders)
40
+ for (const [childId, n] of renders)
41
+ rendersByCount[childId] = n;
42
+ const owners = ownersByChild.get(c.id);
43
+ if (owners)
44
+ for (const [ownerId, n] of owners)
45
+ renderedByCount[ownerId] = n;
46
+ for (const k of Object.keys(rendersByCount))
47
+ if (!validIds.has(k))
48
+ delete rendersByCount[k];
49
+ for (const k of Object.keys(renderedByCount))
50
+ if (!validIds.has(k))
51
+ delete renderedByCount[k];
52
+ if (Object.keys(rendersByCount).length === 0) {
53
+ isLeafCount = (occsByComp.get(c.id) ?? []).length;
54
+ }
55
+ const composition = {
56
+ rendersByCount,
57
+ renderedByCount,
58
+ isRootCount,
59
+ isLeafCount,
60
+ };
61
+ return { ...c, composition };
62
+ });
63
+ }
64
+ //# sourceMappingURL=composition-rollup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition-rollup.js","sourceRoot":"","sources":["../src/composition-rollup.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,9 @@ export async function loadConfig(configPath) {
30
30
  if (parsed && typeof parsed === "object" && "manifests" in parsed) {
31
31
  throw new ConfigError("CONFIG_INVALID", `${abs}: the \`manifests\` field was removed. Replace with \`packageScopes\` (array of glob patterns matching package names). See docs/usage.md.`);
32
32
  }
33
+ if (parsed && typeof parsed === "object" && "manifestSources" in parsed) {
34
+ throw new ConfigError("CONFIG_INVALID", `${abs}: the \`manifestSources\` field was removed in Phase 1 (lazy resolution). Lazy follow now handles aggregator chains automatically. Drop the field; if you have a bundled-barrel package, ship a component-compass-manifest.json at its package root. See docs/usage.md.`);
35
+ }
33
36
  if (!validateConfig(parsed)) {
34
37
  const issues = (validateConfig.errors ?? [])
35
38
  .map((e) => `${e.instancePath || "<root>"}: ${e.message}`)
@@ -37,11 +40,12 @@ export async function loadConfig(configPath) {
37
40
  throw new ConfigError("CONFIG_INVALID", `Invalid config at ${abs}: ${issues}`);
38
41
  }
39
42
  // parsed is now narrowed to ConfigFile by the typed validator.
43
+ // Default packageScopes to [] when absent (visibility-first).
40
44
  const resolved = {
41
45
  configPath: abs,
42
46
  configDir: dirname(abs),
43
47
  repoId: parsed.repoId,
44
- packageScopes: parsed.packageScopes,
48
+ packageScopes: parsed.packageScopes ?? [],
45
49
  include: parsed.include,
46
50
  exclude: parsed.exclude ?? [],
47
51
  captureValues: parsed.captureValues ?? false,
@@ -49,8 +53,6 @@ export async function loadConfig(configPath) {
49
53
  };
50
54
  // Optional passthroughs — only assigned when present so we satisfy
51
55
  // `exactOptionalPropertyTypes` (undefined ≠ absent).
52
- if (parsed.manifestSources !== undefined)
53
- resolved.manifestSources = parsed.manifestSources;
54
56
  if (parsed.tsconfigPath !== undefined)
55
57
  resolved.tsconfigPath = parsed.tsconfigPath;
56
58
  if (parsed.aliases !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,WAAY,SAAQ,KAAK;IACjB;IAAnB,YAAmB,IAAyC,EAAE,OAAe;QAC3E,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,SAAI,GAAJ,IAAI,CAAqC;IAE5D,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB;IACjD,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAErF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CACnB,gBAAgB,EAChB,yCAAyC,GAAG,mDAAmD,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,GAAG,GAAG,uBAAuB,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,0EAA0E;IAC1E,yDAAyD;IACzD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;QAClE,MAAM,IAAI,WAAW,CACnB,gBAAgB,EAChB,GAAG,GAAG,2IAA2I,CAClJ,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,iBAAiB,IAAI,MAAM,EAAE,CAAC;QACxE,MAAM,IAAI,WAAW,CACnB,gBAAgB,EAChB,GAAG,GAAG,yQAAyQ,CAChR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACzD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,qBAAqB,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,+DAA+D;IAC/D,8DAA8D;IAC9D,MAAM,QAAQ,GAAmB;QAC/B,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;QAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,0BAA0B;KACpD,CAAC;IACF,mEAAmE;IACnE,qDAAqD;IACrD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACnF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACpE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -18,8 +18,7 @@ export type TagRule = {
18
18
  */
19
19
  export interface ConfigFile {
20
20
  repoId: string;
21
- packageScopes: string[];
22
- manifestSources?: Record<string, string[]>;
21
+ packageScopes?: string[];
23
22
  include: string[];
24
23
  exclude?: string[];
25
24
  captureValues?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,sEAAsE;AACtE,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAE7E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;AACzE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AA6BhE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,cAAc,GACzB,GAAG,CAAC,OAAO,CAAa,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,sEAAsE;AACtE,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAE7E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;AACzE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AA4BhE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,cAAc,GACzB,GAAG,CAAC,OAAO,CAAa,UAAU,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Three-lane identity derivation + stable id keying.
3
3
  *
4
- * Two pure functions that translate a per-occurrence `ComponentId + via +
4
+ * Two pure functions that translate a per-occurrence `ComponentId +
5
5
  * derivedTags + repoId` tuple into the rolled-up `OutputIdentity` and a
6
6
  * deterministic short hash used as the component's `id` in the emitted
7
7
  * artifact.
@@ -23,12 +23,30 @@
23
23
  *
24
24
  * NOT yet wired into the scan pipeline — wiring is a separate task.
25
25
  */
26
- import type { ComponentId, OccurrenceVia, OutputIdentity } from "@component-compass/plugin-core";
26
+ import type { ComponentId, OutputIdentity } from "@component-compass/plugin-core";
27
+ import type { WorkspaceGraph } from "./workspace/types.js";
27
28
  export type IdentityInputs = {
28
29
  componentId: ComponentId;
29
- via: OccurrenceVia;
30
30
  derivedTags: readonly string[];
31
31
  repoId: string;
32
+ workspaceGraph?: WorkspaceGraph;
33
+ /** Optional declaration position (only meaningful for local scope). */
34
+ definitionLoc?: {
35
+ line: number;
36
+ column: number;
37
+ };
32
38
  };
33
39
  export declare function computeOutputIdentity(inputs: IdentityInputs): OutputIdentity;
34
40
  export declare function computeStableId(identity: OutputIdentity): string;
41
+ /**
42
+ * Produce the same stable id as `computeStableId` from a raw `ComponentId`
43
+ * (as emitted by parsers), without needing to first build an `OutputIdentity`.
44
+ *
45
+ * This is used in `occurrences.ts` so that occurrence `componentId` fields
46
+ * hash-match the `id` values produced by `buildComponentSeeds` → `rollupOccurrencesToComponents`
47
+ * can correctly correlate occurrences to seeds.
48
+ *
49
+ * For local components, `repoId` is absent from the `ComponentId` source, so
50
+ * we use `""` — matching the `repoId: ""` convention in `buildComponentSeeds`.
51
+ */
52
+ export declare function computeStableIdFromComponentId(c: ComponentId): string;
package/dist/identity.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Three-lane identity derivation + stable id keying.
3
3
  *
4
- * Two pure functions that translate a per-occurrence `ComponentId + via +
4
+ * Two pure functions that translate a per-occurrence `ComponentId +
5
5
  * derivedTags + repoId` tuple into the rolled-up `OutputIdentity` and a
6
6
  * deterministic short hash used as the component's `id` in the emitted
7
7
  * artifact.
@@ -24,8 +24,10 @@
24
24
  * NOT yet wired into the scan pipeline — wiring is a separate task.
25
25
  */
26
26
  import { createHash } from "node:crypto";
27
+ import { join } from "node:path";
28
+ import { findOwningPackage } from "./workspace/find-owning-package.js";
27
29
  export function computeOutputIdentity(inputs) {
28
- const { componentId, via, derivedTags, repoId } = inputs;
30
+ const { componentId, derivedTags, repoId, definitionLoc } = inputs;
29
31
  const { source, kind } = componentId;
30
32
  const isLocal = source.type === "local";
31
33
  const scope = isLocal
@@ -36,7 +38,6 @@ export function computeOutputIdentity(inputs) {
36
38
  const identity = {
37
39
  scope,
38
40
  kind,
39
- via: { kind: via.kind },
40
41
  };
41
42
  if (source.type === "external") {
42
43
  identity.packageName = source.package;
@@ -51,6 +52,17 @@ export function computeOutputIdentity(inputs) {
51
52
  if (isLocal && source.type === "local") {
52
53
  identity.repoId = repoId;
53
54
  identity.filePath = source.filePath;
55
+ if (inputs.workspaceGraph) {
56
+ // findOwningPackage operates on absolute paths; source.filePath is
57
+ // repo-relative, so resolve against workspaceGraph.rootPath.
58
+ const abs = join(inputs.workspaceGraph.rootPath, source.filePath);
59
+ const owning = findOwningPackage(inputs.workspaceGraph, abs);
60
+ if (owning)
61
+ identity.packageName = owning.name;
62
+ }
63
+ if (definitionLoc !== undefined) {
64
+ identity.definition = definitionLoc;
65
+ }
54
66
  }
55
67
  return identity;
56
68
  }
@@ -64,4 +76,29 @@ export function computeStableId(identity) {
64
76
  }
65
77
  return sha1Short(`rc::${identity.packageName}::${identity.exportName}`);
66
78
  }
79
+ /**
80
+ * Produce the same stable id as `computeStableId` from a raw `ComponentId`
81
+ * (as emitted by parsers), without needing to first build an `OutputIdentity`.
82
+ *
83
+ * This is used in `occurrences.ts` so that occurrence `componentId` fields
84
+ * hash-match the `id` values produced by `buildComponentSeeds` → `rollupOccurrencesToComponents`
85
+ * can correctly correlate occurrences to seeds.
86
+ *
87
+ * For local components, `repoId` is absent from the `ComponentId` source, so
88
+ * we use `""` — matching the `repoId: ""` convention in `buildComponentSeeds`.
89
+ */
90
+ export function computeStableIdFromComponentId(c) {
91
+ if (c.source.type === "local") {
92
+ const exportOrTag = c.kind === "custom-element" ? c.tagName : c.export;
93
+ // repoId is not carried on ComponentId.source; use "" to match the
94
+ // repoId: "" convention in buildComponentSeeds (seeds for local
95
+ // components are keyed the same way).
96
+ return sha1Short(`local::::${c.source.filePath}::${exportOrTag}::${c.kind}`);
97
+ }
98
+ const pkg = c.source.type === "external" ? c.source.package : "unknown";
99
+ if (c.kind === "custom-element") {
100
+ return sha1Short(`ce::${pkg}::${c.tagName}`);
101
+ }
102
+ return sha1Short(`rc::${pkg}::${c.export}`);
103
+ }
67
104
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAczC,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAErC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;IACxC,MAAM,KAAK,GAA4B,OAAO;QAC5C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,UAAU,CAAC;IAEjB,MAAM,QAAQ,GAAmB;QAC/B,KAAK;QACL,IAAI;QACJ,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;KACxB,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IACxC,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC1C,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CACtC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,SAAS,CACd,UAAU,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,18 @@
1
1
  import { parse } from "@babel/parser";
2
- import { traverse } from "@component-compass/ast-utils";
3
2
  const REACT_EXTS = new Set([".tsx", ".jsx", ".ts", ".js"]);
4
3
  export function detectReactComponents(source, filePath, extension) {
5
4
  if (!REACT_EXTS.has(extension))
6
5
  return [];
6
+ // `.ts` files cannot contain JSX; enabling the jsx plugin there causes
7
+ // valid TypeScript like `return <const>{...}` to fail to parse.
8
+ const plugins = ["typescript", "decorators-legacy", "classProperties"];
9
+ if (extension !== ".ts")
10
+ plugins.push("jsx");
7
11
  const ast = (() => {
8
12
  try {
9
13
  return parse(source, {
10
14
  sourceType: "module",
11
- plugins: ["typescript", "jsx", "decorators-legacy", "classProperties"],
15
+ plugins,
12
16
  errorRecovery: true,
13
17
  });
14
18
  }
@@ -20,60 +24,232 @@ export function detectReactComponents(source, filePath, extension) {
20
24
  return [];
21
25
  const found = [];
22
26
  const filePathSource = { type: "local", filePath };
23
- traverse(ast, {
24
- ExportDefaultDeclaration(path) {
25
- const decl = path.node.declaration;
27
+ // ── Pass 1: collect top-level PascalCase declarations as candidates ──────
28
+ // "Top-level" = direct child of Program, or inline declaration inside an
29
+ // Export*Declaration that is a direct child of Program.
30
+ const candidates = new Map();
31
+ for (const stmt of ast.program.body) {
32
+ // Unwrap export wrappers to get the inner declaration (if any).
33
+ const inner = stmt.type === "ExportNamedDeclaration" && stmt.declaration
34
+ ? stmt.declaration
35
+ : stmt.type === "ExportDefaultDeclaration" && isDeclaration(stmt.declaration)
36
+ ? stmt.declaration
37
+ : stmt;
38
+ if (inner.type === "FunctionDeclaration" && inner.id && isPascalCase(inner.id.name) && returnsJsx(inner)) {
39
+ const name = inner.id.name;
40
+ candidates.set(name, {
41
+ componentId: { kind: "react-component", export: name, source: filePathSource },
42
+ detector: "react-default-fn",
43
+ loc: nodeLoc(inner, filePath),
44
+ });
45
+ }
46
+ else if (inner.type === "ClassDeclaration" && inner.id && isPascalCase(inner.id.name) && hasRenderMethod(inner)) {
47
+ const name = inner.id.name;
48
+ candidates.set(name, {
49
+ componentId: { kind: "react-component", export: name, source: filePathSource },
50
+ detector: "react-class",
51
+ loc: nodeLoc(inner, filePath),
52
+ });
53
+ }
54
+ else if (inner.type === "VariableDeclaration") {
55
+ for (const d of inner.declarations) {
56
+ if (d.id.type !== "Identifier" || !isPascalCase(d.id.name) || !d.init)
57
+ continue;
58
+ const detector = classifyVariableInit(d.init);
59
+ if (detector) {
60
+ const name = d.id.name;
61
+ candidates.set(name, {
62
+ componentId: { kind: "react-component", export: name, source: filePathSource },
63
+ detector,
64
+ loc: nodeLoc(d, filePath),
65
+ });
66
+ }
67
+ }
68
+ }
69
+ }
70
+ // ── Pass 2: walk exports and emit LocalDefinitions ───────────────────────
71
+ // Track what we've already emitted to avoid double-emission.
72
+ // Key = `${exportName}:${isDefault}` for deduplication.
73
+ const emitted = new Set();
74
+ function emitKey(exportName, isDefault) {
75
+ return `${exportName}:${isDefault}`;
76
+ }
77
+ function emit(def) {
78
+ const key = emitKey(def.exportName, def.isDefault);
79
+ if (emitted.has(key))
80
+ return;
81
+ emitted.add(key);
82
+ found.push(def);
83
+ }
84
+ for (const stmt of ast.program.body) {
85
+ // ── ExportDefaultDeclaration ──────────────────────────────────────────
86
+ if (stmt.type === "ExportDefaultDeclaration") {
87
+ const decl = stmt.declaration;
88
+ // Named function declaration: `export default function Foo() {}`
26
89
  if (decl.type === "FunctionDeclaration" && decl.id && isPascalCase(decl.id.name) && returnsJsx(decl)) {
27
- found.push({
90
+ emit({
28
91
  componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
29
92
  exportName: decl.id.name,
30
93
  isDefault: true,
31
94
  detector: "react-default-fn",
95
+ ...withLoc(nodeLoc(decl, filePath)),
96
+ });
97
+ continue;
98
+ }
99
+ // Anonymous function-declaration default: `export default function() {}`
100
+ if (decl.type === "FunctionDeclaration" && returnsJsx(decl)) {
101
+ emit({
102
+ componentId: { kind: "react-component", export: "default", source: filePathSource },
103
+ exportName: "default",
104
+ isDefault: true,
105
+ detector: "react-default-fn",
106
+ ...withLoc(nodeLoc(decl, filePath)),
107
+ });
108
+ continue;
109
+ }
110
+ // Anonymous arrow / function expression default: `export default () => <Foo/>`
111
+ if ((decl.type === "ArrowFunctionExpression" || decl.type === "FunctionExpression") &&
112
+ returnsJsx(decl)) {
113
+ emit({
114
+ componentId: { kind: "react-component", export: "default", source: filePathSource },
115
+ exportName: "default",
116
+ isDefault: true,
117
+ detector: "react-arrow",
118
+ ...withLoc(nodeLoc(decl, filePath)),
32
119
  });
120
+ continue;
33
121
  }
122
+ // Class component default: `export default class Foo extends Component { render() {} }`
34
123
  if (decl.type === "ClassDeclaration" &&
35
124
  decl.id &&
36
125
  isPascalCase(decl.id.name) &&
37
- extendsReactClass(decl)) {
38
- found.push({
126
+ hasRenderMethod(decl)) {
127
+ emit({
39
128
  componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
40
129
  exportName: decl.id.name,
41
130
  isDefault: true,
42
131
  detector: "react-class",
132
+ ...withLoc(nodeLoc(decl, filePath)),
43
133
  });
134
+ continue;
44
135
  }
45
- },
46
- ExportNamedDeclaration(path) {
47
- const decl = path.node.declaration;
48
- if (!decl)
49
- return;
50
- if (decl.type === "FunctionDeclaration" && decl.id && isPascalCase(decl.id.name) && returnsJsx(decl)) {
51
- found.push({
52
- componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
53
- exportName: decl.id.name,
54
- isDefault: false,
55
- detector: "react-default-fn",
56
- });
136
+ // NEW: `export default Identifier` — look up in candidates
137
+ if (decl.type === "Identifier") {
138
+ const candidate = candidates.get(decl.name);
139
+ if (candidate) {
140
+ emit({
141
+ componentId: candidate.componentId,
142
+ exportName: candidate.componentId.kind === "react-component" ? candidate.componentId.export : decl.name,
143
+ isDefault: true,
144
+ detector: candidate.detector,
145
+ ...withLoc(candidate.loc),
146
+ });
147
+ }
148
+ continue;
57
149
  }
58
- if (decl.type === "VariableDeclaration") {
59
- for (const d of decl.declarations) {
60
- if (d.id.type !== "Identifier" || !isPascalCase(d.id.name) || !d.init)
61
- continue;
62
- const detector = classifyVariableInit(d.init);
63
- if (detector) {
64
- found.push({
65
- componentId: { kind: "react-component", export: d.id.name, source: filePathSource },
66
- exportName: d.id.name,
67
- isDefault: false,
68
- detector,
69
- });
150
+ // NEW: `export default memo(Foo)` / `export default forwardRef(Foo)` etc.
151
+ if (decl.type === "CallExpression") {
152
+ const callee = decl.callee;
153
+ let calleeName;
154
+ if (callee.type === "Identifier")
155
+ calleeName = callee.name;
156
+ else if (callee.type === "MemberExpression" && callee.property.type === "Identifier")
157
+ calleeName = callee.property.name;
158
+ const isHoc = calleeName === "memo" || calleeName === "forwardRef" || calleeName === "observer";
159
+ if (isHoc && decl.arguments.length > 0) {
160
+ const firstArg = decl.arguments[0];
161
+ if (firstArg && firstArg.type === "Identifier") {
162
+ const candidate = candidates.get(firstArg.name);
163
+ if (candidate) {
164
+ const detector = calleeName === "forwardRef" ? "react-forward-ref" :
165
+ calleeName === "memo" ? "react-memo" :
166
+ "react-arrow";
167
+ emit({
168
+ componentId: candidate.componentId,
169
+ exportName: candidate.componentId.kind === "react-component" ? candidate.componentId.export : firstArg.name,
170
+ isDefault: true,
171
+ detector,
172
+ ...withLoc(candidate.loc),
173
+ });
174
+ }
70
175
  }
71
176
  }
177
+ continue;
72
178
  }
73
- },
74
- });
179
+ continue;
180
+ }
181
+ // ── ExportNamedDeclaration ────────────────────────────────────────────
182
+ if (stmt.type === "ExportNamedDeclaration") {
183
+ const decl = stmt.declaration;
184
+ // Inline declaration: `export function Foo() {}`, `export const Foo = ...`, etc.
185
+ if (decl) {
186
+ if (decl.type === "FunctionDeclaration" && decl.id && isPascalCase(decl.id.name) && returnsJsx(decl)) {
187
+ emit({
188
+ componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
189
+ exportName: decl.id.name,
190
+ isDefault: false,
191
+ detector: "react-default-fn",
192
+ ...withLoc(nodeLoc(decl, filePath)),
193
+ });
194
+ }
195
+ if (decl.type === "ClassDeclaration" && decl.id && isPascalCase(decl.id.name) && hasRenderMethod(decl)) {
196
+ emit({
197
+ componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
198
+ exportName: decl.id.name,
199
+ isDefault: false,
200
+ detector: "react-class",
201
+ ...withLoc(nodeLoc(decl, filePath)),
202
+ });
203
+ }
204
+ if (decl.type === "VariableDeclaration") {
205
+ for (const d of decl.declarations) {
206
+ if (d.id.type !== "Identifier" || !isPascalCase(d.id.name) || !d.init)
207
+ continue;
208
+ const detector = classifyVariableInit(d.init);
209
+ if (detector) {
210
+ emit({
211
+ componentId: { kind: "react-component", export: d.id.name, source: filePathSource },
212
+ exportName: d.id.name,
213
+ isDefault: false,
214
+ detector,
215
+ ...withLoc(nodeLoc(d, filePath)),
216
+ });
217
+ }
218
+ }
219
+ }
220
+ continue;
221
+ }
222
+ // NEW: `export { X }` or `export { X as Y }` — local re-exports (no source).
223
+ // Skip if this is a re-export from another module (`stmt.source` is non-null).
224
+ if (!stmt.source && stmt.specifiers.length > 0) {
225
+ for (const specifier of stmt.specifiers) {
226
+ if (specifier.type !== "ExportSpecifier")
227
+ continue;
228
+ const localName = specifier.local.name;
229
+ const exportedNode = specifier.exported;
230
+ const exportedName = exportedNode.type === "Identifier" ? exportedNode.name : exportedNode.value;
231
+ const isDefault = exportedName === "default";
232
+ const candidate = candidates.get(localName);
233
+ if (!candidate)
234
+ continue;
235
+ emit({
236
+ componentId: candidate.componentId,
237
+ exportName: isDefault ? "default" : exportedName,
238
+ isDefault,
239
+ detector: candidate.detector,
240
+ ...withLoc(candidate.loc),
241
+ });
242
+ }
243
+ }
244
+ }
245
+ }
75
246
  return found;
76
247
  }
248
+ // ── Helpers ────────────────────────────────────────────────────────────────
249
+ /** Narrow whether an ExportDefaultDeclaration's `.declaration` is a statement-like node */
250
+ function isDeclaration(node) {
251
+ return node.type === "FunctionDeclaration" || node.type === "ClassDeclaration";
252
+ }
77
253
  function isPascalCase(name) {
78
254
  return /^[A-Z]/.test(name);
79
255
  }
@@ -84,7 +260,9 @@ function returnsJsx(fn) {
84
260
  const block = fn.body;
85
261
  if (!block || block.type !== "BlockStatement")
86
262
  return false;
87
- return block.body.some((stmt) => stmt.type === "ReturnStatement" && stmt.argument != null && isJsxNode(stmt.argument));
263
+ return block.body.some((stmt) => stmt.type === "ReturnStatement" &&
264
+ stmt.argument != null &&
265
+ (isJsxNode(stmt.argument) || stmt.argument.type === "CallExpression"));
88
266
  }
89
267
  function isJsxNode(node) {
90
268
  if (node.type === "JSXElement" || node.type === "JSXFragment")
@@ -95,18 +273,17 @@ function isJsxNode(node) {
95
273
  return isJsxNode(node.right);
96
274
  return false;
97
275
  }
98
- function extendsReactClass(decl) {
99
- const sup = decl.superClass;
100
- if (!sup)
101
- return false;
102
- if (sup.type === "Identifier") {
103
- return sup.name === "Component" || sup.name === "PureComponent";
104
- }
105
- if (sup.type === "MemberExpression" && sup.object.type === "Identifier" && sup.object.name === "React") {
106
- return (sup.property.type === "Identifier" &&
107
- (sup.property.name === "Component" || sup.property.name === "PureComponent"));
108
- }
109
- return false;
276
+ function hasRenderMethod(decl) {
277
+ return decl.body.body.some((m) => (m.type === "ClassMethod" || m.type === "ClassProperty") &&
278
+ m.key.type === "Identifier" &&
279
+ m.key.name === "render");
280
+ }
281
+ function nodeLoc(node, filePath) {
282
+ const s = node.loc?.start;
283
+ return s ? { file: filePath, line: s.line, column: s.column } : undefined;
284
+ }
285
+ function withLoc(loc) {
286
+ return loc !== undefined ? { loc } : {};
110
287
  }
111
288
  function classifyVariableInit(init) {
112
289
  if (init.type === "ArrowFunctionExpression" || init.type === "FunctionExpression")
@@ -1 +1 @@
1
- {"version":3,"file":"detect-react.js","sourceRoot":"","sources":["../../src/local-index/detect-react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-react.js","sourceRoot":"","sources":["../../src/local-index/detect-react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AAKzD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAU3D,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,QAAgB,EAAE,SAAiB;IACvF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,OAAO,GAAmB,CAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IACvF,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE;QAChB,IAAI,CAAC;YACH,OAAO,KAAK,CAAC,MAAM,EAAE;gBACnB,UAAU,EAAE,QAAQ;gBACpB,OAAO;gBACP,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,OAAgB,EAAE,QAAQ,EAAE,CAAC;IAE5D,4EAA4E;IAC5E,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,gEAAgE;QAChE,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,wBAAwB,IAAI,IAAI,CAAC,WAAW;YACxD,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,0BAA0B,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC3E,CAAC,CAAC,IAAI,CAAC,WAAW;gBAClB,CAAC,CAAC,IAAI,CAAC;QAEb,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACzG,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;gBACnB,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;gBAC9E,QAAQ,EAAE,kBAAkB;gBAC5B,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAClH,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;gBACnB,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;gBAC9E,QAAQ,EAAE,aAAa;gBACvB,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;oBAAE,SAAS;gBAChF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;oBACvB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;wBACnB,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;wBAC9E,QAAQ;wBACR,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;qBAC1B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,6DAA6D;IAC7D,wDAAwD;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,OAAO,CAAC,UAAkB,EAAE,SAAkB;QACrD,OAAO,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC;IACtC,CAAC;IAED,SAAS,IAAI,CAAC,GAAoB;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,yEAAyE;QACzE,IAAI,IAAI,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YAE9B,iEAAiE;YACjE,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrG,IAAI,CAAC;oBACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;oBACtF,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;oBACxB,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,kBAAkB;oBAC5B,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBACpC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,yEAAyE;YACzE,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC;oBACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE;oBACnF,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,kBAAkB;oBAC5B,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBACpC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,+EAA+E;YAC/E,IACE,CAAC,IAAI,CAAC,IAAI,KAAK,yBAAyB,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC;gBAC/E,UAAU,CAAC,IAAI,CAAC,EAChB,CAAC;gBACD,IAAI,CAAC;oBACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE;oBACnF,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,aAAa;oBACvB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBACpC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,wFAAwF;YACxF,IACE,IAAI,CAAC,IAAI,KAAK,kBAAkB;gBAChC,IAAI,CAAC,EAAE;gBACP,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,EACrB,CAAC;gBACD,IAAI,CAAC;oBACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;oBACtF,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;oBACxB,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,aAAa;oBACvB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBACpC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,2DAA2D;YAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC;wBACH,WAAW,EAAE,SAAS,CAAC,WAAW;wBAClC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;wBACvG,SAAS,EAAE,IAAI;wBACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;wBAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS;YACX,CAAC;YAED,0EAA0E;YAC1E,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAI,UAA8B,CAAC;gBACnC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;oBAAE,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;qBACtD,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAExH,MAAM,KAAK,GAAG,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,UAAU,CAAC;gBAChG,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,QAAQ,GACZ,UAAU,KAAK,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;gCACnD,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oCACtC,aAAa,CAAC;4BAChB,IAAI,CAAC;gCACH,WAAW,EAAE,SAAS,CAAC,WAAW;gCAClC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;gCAC3G,SAAS,EAAE,IAAI;gCACf,QAAQ;gCACR,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;6BAC1B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,SAAS;YACX,CAAC;YAED,SAAS;QACX,CAAC;QAED,yEAAyE;QACzE,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YAE9B,iFAAiF;YACjF,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrG,IAAI,CAAC;wBACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;wBACtF,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;wBACxB,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,kBAAkB;wBAC5B,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;qBACpC,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvG,IAAI,CAAC;wBACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;wBACtF,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;wBACxB,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,aAAa;wBACvB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;qBACpC,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBACxC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;4BAAE,SAAS;wBAChF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAC9C,IAAI,QAAQ,EAAE,CAAC;4BACb,IAAI,CAAC;gCACH,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;gCACnF,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI;gCACrB,SAAS,EAAE,KAAK;gCAChB,QAAQ;gCACR,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;6BACjC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,SAAS;YACX,CAAC;YAED,6EAA6E;YAC7E,+EAA+E;YAC/E,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACxC,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB;wBAAE,SAAS;oBACnD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;oBACvC,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;oBACxC,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;oBACjG,MAAM,SAAS,GAAG,YAAY,KAAK,SAAS,CAAC;oBAE7C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC5C,IAAI,CAAC,SAAS;wBAAE,SAAS;oBAEzB,IAAI,CAAC;wBACH,WAAW,EAAE,SAAS,CAAC,WAAW;wBAClC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;wBAChD,SAAS;wBACT,QAAQ,EAAE,SAAS,CAAC,QAAQ;wBAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;qBAC1B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAE9E,2FAA2F;AAC3F,SAAS,aAAa,CACpB,IAA+C;IAE/C,OAAO,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC;AACjF,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,EAA4E;IAC9F,IAAI,EAAE,CAAC,IAAI,KAAK,yBAAyB,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC/E,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC;IACtB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CACpB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAC/B,IAAI,CAAC,QAAQ,IAAI,IAAI;QACrB,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,gBAAgB,CAAC,CACxE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1G,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAwB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC;QACxD,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;QAC3B,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,QAAgB;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED,SAAS,OAAO,CAAC,GAAoB;IACnC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,aAAa,CAAC;IACxG,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,UAA8B,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;aACtD,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;YAAE,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxH,IAAI,UAAU,KAAK,YAAY;YAAE,OAAO,mBAAmB,CAAC;QAC5D,IAAI,UAAU,KAAK,MAAM;YAAE,OAAO,YAAY,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}