@contentful/experience-design-system-cli 2.37.1-dev-build-0b7e3e1f.0 → 2.37.1-dev-build-2582b468.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.js CHANGED
@@ -9648,8 +9648,8 @@ function extractAccessorProperties(classDecl, applyRuntimeFieldDenylist = false)
9648
9648
  accessors.set(name, entry);
9649
9649
  }
9650
9650
  for (const [name, { getter, setter }] of accessors) {
9651
- const hasPropertyDecorator = getter?.getDecorators().some((decorator) => decorator.getName() === "property") || setter?.getDecorators().some((decorator) => decorator.getName() === "property");
9652
- if (!hasPropertyDecorator && !(getter && setter))
9651
+ const hasPropertyDecorator2 = getter?.getDecorators().some((decorator) => decorator.getName() === "property") || setter?.getDecorators().some((decorator) => decorator.getName() === "property");
9652
+ if (!hasPropertyDecorator2 && !(getter && setter))
9653
9653
  continue;
9654
9654
  const type = getter?.getReturnTypeNode()?.getText() ?? setter?.getParameters()[0]?.getTypeNode()?.getText() ?? "any";
9655
9655
  const accessorNode = getter ?? setter;
@@ -12919,9 +12919,9 @@ function generateUlid(now = Date.now()) {
12919
12919
  tsBytes[i] = n & 255;
12920
12920
  n = Math.floor(n / 256);
12921
12921
  }
12922
- const ts3 = encodeBase32(tsBytes, 10);
12922
+ const ts6 = encodeBase32(tsBytes, 10);
12923
12923
  const rand = encodeBase32(randomBytes2(10), 16);
12924
- return (ts3 + rand).toUpperCase();
12924
+ return (ts6 + rand).toUpperCase();
12925
12925
  }
12926
12926
 
12927
12927
  // packages/experience-design-system-backend-pipeline/dist/src/persistence/src/runs/repositories/read-runs-file.js
@@ -15335,7 +15335,610 @@ async function runMapTokens(request) {
15335
15335
  import { mkdir as mkdir4 } from "node:fs/promises";
15336
15336
  import { relative as relative2 } from "node:path";
15337
15337
 
15338
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/quality/non-authorable-filter.js
15338
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.js
15339
+ import { Node as Node10, Project as Project7 } from "ts-morph";
15340
+
15341
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.js
15342
+ import { Project as Project8 } from "ts-morph";
15343
+
15344
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.js
15345
+ import { Node as Node12, SyntaxKind as SyntaxKind7 } from "ts-morph";
15346
+
15347
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.js
15348
+ import { Node as Node11 } from "ts-morph";
15349
+
15350
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.js
15351
+ import ts3 from "typescript";
15352
+
15353
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.js
15354
+ import { Node as Node13 } from "ts-morph";
15355
+
15356
+ // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/collect-jsx-component-references.js
15357
+ import { Node as Node15, SyntaxKind as SyntaxKind9 } from "ts-morph";
15358
+
15359
+ // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.js
15360
+ import { Node as Node14 } from "ts-morph";
15361
+
15362
+ // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.js
15363
+ import { SyntaxKind as SyntaxKind8 } from "ts-morph";
15364
+
15365
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.js
15366
+ import { SyntaxKind as SyntaxKind14 } from "ts-morph";
15367
+
15368
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.js
15369
+ import { Node as Node32 } from "ts-morph";
15370
+
15371
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.js
15372
+ import { Node as Node17, SyntaxKind as SyntaxKind10 } from "ts-morph";
15373
+
15374
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.js
15375
+ import { Node as Node16 } from "ts-morph";
15376
+
15377
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.js
15378
+ import { Node as Node24 } from "ts-morph";
15379
+
15380
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.js
15381
+ import { Node as Node18 } from "ts-morph";
15382
+ function createTextControlSurface2(onChangeType, specificProps) {
15383
+ return [
15384
+ { name: "autoComplete", type: "string", required: false },
15385
+ ...specificProps,
15386
+ { name: "disabled", type: "boolean", required: false },
15387
+ { name: "name", type: "string", required: false },
15388
+ { name: "onChange", type: onChangeType, required: false },
15389
+ { name: "placeholder", type: "string", required: false },
15390
+ { name: "readOnly", type: "boolean", required: false },
15391
+ { name: "required", type: "boolean", required: false },
15392
+ {
15393
+ name: "value",
15394
+ type: "string | number | readonly string[]",
15395
+ required: false
15396
+ }
15397
+ ];
15398
+ }
15399
+ var DOM_ATTRIBUTE_PROP_SURFACES2 = {
15400
+ HTMLProps: [],
15401
+ HTMLAttributes: [
15402
+ { name: "className", type: "string", required: false },
15403
+ { name: "hidden", type: "boolean", required: false },
15404
+ { name: "id", type: "string", required: false },
15405
+ {
15406
+ name: "onClick",
15407
+ type: "MouseEventHandler<HTMLElement>",
15408
+ required: false
15409
+ },
15410
+ { name: "style", type: "CSSProperties", required: false },
15411
+ { name: "tabIndex", type: "number", required: false },
15412
+ { name: "title", type: "string", required: false }
15413
+ ],
15414
+ ImgHTMLAttributes: [
15415
+ { name: "alt", type: "string", required: false },
15416
+ { name: "crossOrigin", type: "string", required: false },
15417
+ { name: "height", type: "number | string", required: false },
15418
+ {
15419
+ name: "loading",
15420
+ type: "string",
15421
+ required: false,
15422
+ allowedValues: ["eager", "lazy"]
15423
+ },
15424
+ { name: "sizes", type: "string", required: false },
15425
+ { name: "src", type: "string", required: false },
15426
+ { name: "srcSet", type: "string", required: false },
15427
+ { name: "width", type: "number | string", required: false }
15428
+ ],
15429
+ LiHTMLAttributes: [],
15430
+ AnchorHTMLAttributes: [
15431
+ { name: "download", type: "boolean | string", required: false },
15432
+ { name: "href", type: "string", required: false },
15433
+ { name: "hrefLang", type: "string", required: false },
15434
+ { name: "referrerPolicy", type: "string", required: false },
15435
+ { name: "rel", type: "string", required: false },
15436
+ {
15437
+ name: "target",
15438
+ type: "string",
15439
+ required: false,
15440
+ allowedValues: ["_blank", "_parent", "_self", "_top"]
15441
+ }
15442
+ ],
15443
+ ButtonHTMLAttributes: [
15444
+ { name: "autoFocus", type: "boolean", required: false },
15445
+ { name: "disabled", type: "boolean", required: false },
15446
+ { name: "form", type: "string", required: false },
15447
+ { name: "formAction", type: "string", required: false },
15448
+ { name: "formMethod", type: "string", required: false },
15449
+ { name: "formNoValidate", type: "boolean", required: false },
15450
+ { name: "formTarget", type: "string", required: false },
15451
+ { name: "name", type: "string", required: false },
15452
+ {
15453
+ name: "type",
15454
+ type: "string",
15455
+ required: false,
15456
+ allowedValues: ["button", "reset", "submit"]
15457
+ },
15458
+ {
15459
+ name: "value",
15460
+ type: "string | number | readonly string[]",
15461
+ required: false
15462
+ }
15463
+ ],
15464
+ InputHTMLAttributes: createTextControlSurface2("ChangeEventHandler<HTMLInputElement>", [
15465
+ { name: "checked", type: "boolean", required: false },
15466
+ { name: "max", type: "number | string", required: false },
15467
+ { name: "maxLength", type: "number", required: false },
15468
+ { name: "min", type: "number | string", required: false },
15469
+ { name: "minLength", type: "number", required: false },
15470
+ { name: "type", type: "string", required: false }
15471
+ ]),
15472
+ FieldsetHTMLAttributes: [
15473
+ { name: "disabled", type: "boolean", required: false },
15474
+ { name: "form", type: "string", required: false },
15475
+ { name: "name", type: "string", required: false }
15476
+ ],
15477
+ LabelHTMLAttributes: [
15478
+ { name: "form", type: "string", required: false },
15479
+ { name: "htmlFor", type: "string", required: false }
15480
+ ],
15481
+ SelectHTMLAttributes: [
15482
+ { name: "autoComplete", type: "string", required: false },
15483
+ { name: "disabled", type: "boolean", required: false },
15484
+ { name: "form", type: "string", required: false },
15485
+ { name: "multiple", type: "boolean", required: false },
15486
+ { name: "name", type: "string", required: false },
15487
+ {
15488
+ name: "onChange",
15489
+ type: "ChangeEventHandler<HTMLSelectElement>",
15490
+ required: false
15491
+ },
15492
+ { name: "required", type: "boolean", required: false },
15493
+ { name: "size", type: "number", required: false },
15494
+ {
15495
+ name: "value",
15496
+ type: "string | number | readonly string[]",
15497
+ required: false
15498
+ }
15499
+ ],
15500
+ SVGAttributes: [
15501
+ {
15502
+ name: "focusable",
15503
+ type: 'boolean | "auto"',
15504
+ required: false,
15505
+ allowedValues: ["auto"]
15506
+ },
15507
+ { name: "height", type: "number | string", required: false },
15508
+ { name: "viewBox", type: "string", required: false },
15509
+ { name: "width", type: "number | string", required: false }
15510
+ ],
15511
+ SVGProps: [],
15512
+ TextareaHTMLAttributes: createTextControlSurface2("ChangeEventHandler<HTMLTextAreaElement>", [
15513
+ { name: "cols", type: "number", required: false },
15514
+ { name: "rows", type: "number", required: false },
15515
+ { name: "wrap", type: "string", required: false }
15516
+ ]),
15517
+ TdHTMLAttributes: [
15518
+ {
15519
+ name: "align",
15520
+ type: "string",
15521
+ required: false,
15522
+ allowedValues: ["center", "char", "justify", "left", "right"]
15523
+ },
15524
+ { name: "colSpan", type: "number", required: false },
15525
+ { name: "headers", type: "string", required: false },
15526
+ { name: "rowSpan", type: "number", required: false },
15527
+ { name: "scope", type: "string", required: false }
15528
+ ]
15529
+ };
15530
+
15531
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.js
15532
+ import { Node as Node19 } from "ts-morph";
15533
+
15534
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.js
15535
+ import { Node as Node20 } from "ts-morph";
15536
+
15537
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.js
15538
+ import { Node as Node21 } from "ts-morph";
15539
+
15540
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.js
15541
+ import { Node as Node22 } from "ts-morph";
15542
+
15543
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.js
15544
+ import { Node as Node23 } from "ts-morph";
15545
+
15546
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.js
15547
+ import { Node as Node25 } from "ts-morph";
15548
+
15549
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.js
15550
+ import { Node as Node28 } from "ts-morph";
15551
+
15552
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.js
15553
+ import { Node as Node26 } from "ts-morph";
15554
+
15555
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.js
15556
+ import { Node as Node27, SyntaxKind as SyntaxKind11 } from "ts-morph";
15557
+
15558
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.js
15559
+ import { Node as Node30, SyntaxKind as SyntaxKind13 } from "ts-morph";
15560
+
15561
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.js
15562
+ import { Node as Node29, SyntaxKind as SyntaxKind12 } from "ts-morph";
15563
+
15564
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.js
15565
+ import { Node as Node31 } from "ts-morph";
15566
+
15567
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/extractor.js
15568
+ import { Project as Project9, Node as Node37 } from "ts-morph";
15569
+
15570
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.js
15571
+ import { Node as Node33 } from "ts-morph";
15572
+
15573
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.js
15574
+ import { Node as Node35 } from "ts-morph";
15575
+
15576
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.js
15577
+ import { Node as Node34, SyntaxKind as SyntaxKind15 } from "ts-morph";
15578
+
15579
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.js
15580
+ import { Node as Node36 } from "ts-morph";
15581
+
15582
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.js
15583
+ import { Project as Project12, ScriptTarget as ScriptTarget4, ModuleKind as ModuleKind4, ts as ts5 } from "ts-morph";
15584
+
15585
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/scoring/collect-scoring-inputs.js
15586
+ var OPAQUE_TYPES2 = /* @__PURE__ */ new Set(["any", "unknown", "object", "Record<string, unknown>", "Record<string, any>"]);
15587
+ var OBVIOUS_PROP_NAMES2 = /* @__PURE__ */ new Set([
15588
+ "className",
15589
+ "style",
15590
+ "id",
15591
+ "children",
15592
+ "disabled",
15593
+ "hidden",
15594
+ "onClick",
15595
+ "onChange",
15596
+ "onSubmit",
15597
+ "onBlur",
15598
+ "onFocus",
15599
+ "href",
15600
+ "src",
15601
+ "alt",
15602
+ "type",
15603
+ "value",
15604
+ "checked",
15605
+ "placeholder",
15606
+ "label",
15607
+ "title",
15608
+ "name",
15609
+ "required",
15610
+ "readOnly",
15611
+ "autoFocus",
15612
+ "tabIndex",
15613
+ "role",
15614
+ "aria-label",
15615
+ "aria-describedby"
15616
+ ]);
15617
+ function isWidePrimitiveUnion2(type) {
15618
+ const parts = type.split("|").map((p) => p.trim());
15619
+ if (parts.length < 3)
15620
+ return false;
15621
+ const basePrimitives = /* @__PURE__ */ new Set(["string", "number", "boolean"]);
15622
+ const nullability = /* @__PURE__ */ new Set(["null", "undefined"]);
15623
+ const baseCount = parts.filter((p) => basePrimitives.has(p)).length;
15624
+ const nullabilityCount = parts.filter((p) => nullability.has(p)).length;
15625
+ return baseCount >= 3 || baseCount >= 2 && nullabilityCount > 0 && baseCount + nullabilityCount >= 3;
15626
+ }
15627
+ function countExtractionIssues(component, options = {}) {
15628
+ let count = 0;
15629
+ const reasons = [];
15630
+ if (component.props.length === 0 && component.slots.length === 0) {
15631
+ count++;
15632
+ reasons.push("no-props-or-slots");
15633
+ }
15634
+ if (component.props.length > 50) {
15635
+ count++;
15636
+ reasons.push(`high-prop-count:${component.props.length}`);
15637
+ }
15638
+ for (const prop of component.props) {
15639
+ if (OPAQUE_TYPES2.has(prop.type.trim())) {
15640
+ count++;
15641
+ reasons.push(`opaque-type:${prop.name}`);
15642
+ break;
15643
+ }
15644
+ if (isWidePrimitiveUnion2(prop.type)) {
15645
+ count++;
15646
+ reasons.push(`wide-union:${prop.name}`);
15647
+ break;
15648
+ }
15649
+ if (!prop.description && !OBVIOUS_PROP_NAMES2.has(prop.name)) {
15650
+ count++;
15651
+ reasons.push("props-missing-description");
15652
+ break;
15653
+ }
15654
+ }
15655
+ count += options.additionalIssueCount ?? 0;
15656
+ if (options.additionalReasons && options.additionalReasons.length > 0) {
15657
+ reasons.push(...options.additionalReasons);
15658
+ }
15659
+ return { count, reasons: [...new Set(reasons)] };
15660
+ }
15661
+ function mapIssueCountToConfidence(count) {
15662
+ if (count === 0)
15663
+ return 5;
15664
+ if (count === 1)
15665
+ return 4;
15666
+ if (count === 2)
15667
+ return 3;
15668
+ if (count === 3)
15669
+ return 2;
15670
+ return 1;
15671
+ }
15672
+
15673
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.js
15674
+ function computeExtractionScore2(component, options = {}) {
15675
+ const { count, reasons } = countExtractionIssues(component, options);
15676
+ return {
15677
+ confidence: mapIssueCountToConfidence(count),
15678
+ reasons
15679
+ };
15680
+ }
15681
+ function deriveNeedsReview2(confidence) {
15682
+ return confidence <= 2;
15683
+ }
15684
+
15685
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.js
15686
+ import { Project as Project10, ScriptTarget as ScriptTarget2, ModuleKind as ModuleKind2, ts as ts4 } from "ts-morph";
15687
+
15688
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.js
15689
+ import { Node as Node38 } from "ts-morph";
15690
+
15691
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.js
15692
+ import { Node as Node40, Project as Project11, ScriptTarget as ScriptTarget3, ModuleKind as ModuleKind3 } from "ts-morph";
15693
+
15694
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.js
15695
+ import { Node as Node39 } from "ts-morph";
15696
+
15697
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.js
15698
+ import { parse as parseSvelte2 } from "svelte/compiler";
15699
+
15700
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/extractor.js
15701
+ import { Node as Node44 } from "ts-morph";
15702
+
15703
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.js
15704
+ import { Node as Node42 } from "ts-morph";
15705
+
15706
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.js
15707
+ import { Node as Node41, SyntaxKind as SyntaxKind16 } from "ts-morph";
15708
+
15709
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.js
15710
+ import { Node as Node43, SyntaxKind as SyntaxKind17 } from "ts-morph";
15711
+
15712
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/extractor.js
15713
+ import { parse as parseSFC3 } from "@vue/compiler-sfc";
15714
+
15715
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.js
15716
+ import { Project as Project14, Node as Node47 } from "ts-morph";
15717
+
15718
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.js
15719
+ import { Project as Project13, Node as Node46 } from "ts-morph";
15720
+
15721
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.js
15722
+ import { Node as Node45 } from "ts-morph";
15723
+
15724
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.js
15725
+ import { parse as parseSFC2 } from "@vue/compiler-sfc";
15726
+ import { Node as Node48, Project as Project15 } from "ts-morph";
15727
+
15728
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/extractor.js
15729
+ import { Project as Project16 } from "ts-morph";
15730
+
15731
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.js
15732
+ import { Node as Node49 } from "ts-morph";
15733
+
15734
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.js
15735
+ import { Node as Node50 } from "ts-morph";
15736
+
15737
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.js
15738
+ import { Node as Node51 } from "ts-morph";
15739
+
15740
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.js
15741
+ import { Node as Node54, SyntaxKind as SyntaxKind19 } from "ts-morph";
15742
+
15743
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.js
15744
+ import { Node as Node53, SyntaxKind as SyntaxKind18 } from "ts-morph";
15745
+
15746
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.js
15747
+ import { Node as Node52 } from "ts-morph";
15748
+
15749
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.js
15750
+ import { Node as Node56 } from "ts-morph";
15751
+
15752
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.js
15753
+ import { Node as Node55 } from "ts-morph";
15754
+
15755
+ // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.js
15756
+ import { Node as Node57, SyntaxKind as SyntaxKind20 } from "ts-morph";
15757
+
15758
+ // packages/experience-design-system-extraction/dist/src/extract/services/classification/helpers/check-prop-types.js
15759
+ function isStringLiteralUnion(type) {
15760
+ return type.includes("|") && type.includes("'");
15761
+ }
15762
+ function isSimpleType(type) {
15763
+ const t = type.trim();
15764
+ if (t === "string" || t === "boolean" || t === "number")
15765
+ return true;
15766
+ return isStringLiteralUnion(t);
15767
+ }
15768
+ function isBooleanType(type) {
15769
+ return type.trim() === "boolean";
15770
+ }
15771
+ function isStringType(type) {
15772
+ return type.trim() === "string";
15773
+ }
15774
+ function isNumberType(type) {
15775
+ return type.trim() === "number";
15776
+ }
15777
+ function isComplexType(type) {
15778
+ return !isSimpleType(type);
15779
+ }
15780
+
15781
+ // packages/experience-design-system-extraction/dist/src/extract/services/classification/helpers/detect-dom-props.js
15782
+ var DOM_PASS_THROUGH_PROPS = /* @__PURE__ */ new Set([
15783
+ // Bare HTML / framework styling pass-through
15784
+ "className",
15785
+ "class",
15786
+ "classes",
15787
+ "classNames",
15788
+ "rootClassName",
15789
+ "prefixCls",
15790
+ "style",
15791
+ "styles",
15792
+ // Bare HTML attributes
15793
+ "id",
15794
+ "role",
15795
+ "tabIndex",
15796
+ "tabindex",
15797
+ "htmlFor",
15798
+ "for",
15799
+ "slot",
15800
+ "is",
15801
+ "lang",
15802
+ "dir",
15803
+ "hidden",
15804
+ "draggable",
15805
+ "spellCheck",
15806
+ "spellcheck",
15807
+ "contentEditable",
15808
+ "contenteditable",
15809
+ "inputMode",
15810
+ "inputmode",
15811
+ "autoComplete",
15812
+ "autocomplete",
15813
+ "autoFocus",
15814
+ "autofocus",
15815
+ "translate",
15816
+ "part",
15817
+ "exportparts",
15818
+ "aria",
15819
+ // Framework theming / pass-through escape hatches — dev-facing, never marketer-configurable
15820
+ "dt",
15821
+ "pt",
15822
+ "ptOptions",
15823
+ "unstyled",
15824
+ "sx",
15825
+ // Polymorphic component props — change rendered HTML/component, not marketer-visible behavior
15826
+ "as",
15827
+ "element",
15828
+ "component",
15829
+ // QA / vendor test attributes
15830
+ "dataQa",
15831
+ "data-qa",
15832
+ // Vue v-model internals — framework wiring, never marketer-configurable
15833
+ "modelValue",
15834
+ "modelModifiers"
15835
+ ]);
15836
+ function isDomPassThroughProp(name) {
15837
+ if (DOM_PASS_THROUGH_PROPS.has(name))
15838
+ return true;
15839
+ if (/^aria[-A-Z]/.test(name))
15840
+ return true;
15841
+ return name.startsWith("data-");
15842
+ }
15843
+
15844
+ // packages/experience-design-system-extraction/dist/src/extract/services/classification/classify-component-props.js
15845
+ function preClassifyProp(prop) {
15846
+ const { name, type } = prop;
15847
+ if (/^on[A-Z]/.test(name) || type.includes("=> void") || type.includes("EventHandler")) {
15848
+ return { category: "exclude" };
15849
+ }
15850
+ if (name === "ref" || name === "innerRef" || type.includes("Ref<") || type.includes("RefObject<")) {
15851
+ return { category: "exclude" };
15852
+ }
15853
+ if (name === "testId" || name === "data-testid" || name === "dataTestId") {
15854
+ return { category: "exclude" };
15855
+ }
15856
+ if (name === "key") {
15857
+ return { category: "exclude" };
15858
+ }
15859
+ if (type.includes("Dispatch<") || type.includes("SetStateAction")) {
15860
+ return { category: "exclude" };
15861
+ }
15862
+ if (isDomPassThroughProp(name)) {
15863
+ return { category: "exclude" };
15864
+ }
15865
+ if (name === "name" && prop.domAttribute) {
15866
+ return { category: "exclude" };
15867
+ }
15868
+ if (isStringLiteralUnion(type)) {
15869
+ return { category: "design", cdfTypeHint: "enum" };
15870
+ }
15871
+ if (!isComplexType(type)) {
15872
+ const designNameStart = /^(variant|size|spacing|gap|color|bg|theme|align|layout|orientation|position)/i;
15873
+ const designNameEnd = /(Color|Size|Variant|Style)$/;
15874
+ if (designNameStart.test(name) || designNameEnd.test(name)) {
15875
+ return { category: "design", cdfTypeHint: "string" };
15876
+ }
15877
+ }
15878
+ if (isBooleanType(type)) {
15879
+ const stateNames = ["disabled", "loading", "expanded", "isOpen", "selected", "checked", "active", "preview"];
15880
+ if (stateNames.includes(name)) {
15881
+ return { category: "state", cdfTypeHint: "boolean" };
15882
+ }
15883
+ }
15884
+ if (isBooleanType(type)) {
15885
+ const visualToggle = /^(hide|show|enable|disable|vertical|horizontal|reverse|bold|italic|imageOn|with)/i;
15886
+ if (visualToggle.test(name)) {
15887
+ return { category: "design", cdfTypeHint: "boolean" };
15888
+ }
15889
+ }
15890
+ if (name === "componentId" || name === "sectionKey" || name === "locale" || name === "variantIndex") {
15891
+ return { category: "state", cdfTypeHint: "string" };
15892
+ }
15893
+ if (isStringType(type)) {
15894
+ const urlNameStart = /^(href|url|link|src)/i;
15895
+ const urlNameEnd = /(Url|Href|Link|Src)$/;
15896
+ if (urlNameStart.test(name) || urlNameEnd.test(name)) {
15897
+ return { category: "content", cdfTypeHint: "string" };
15898
+ }
15899
+ }
15900
+ if (isStringType(type)) {
15901
+ const textNameStart = /^(label|title|text|description|caption|heading|subheading|body|alt|name|placeholder|summary)/i;
15902
+ const textNameEnd = /(Text|Label|Title|Name)$/;
15903
+ if (textNameStart.test(name) || textNameEnd.test(name)) {
15904
+ return { category: "content", cdfTypeHint: "string" };
15905
+ }
15906
+ }
15907
+ if (isStringType(type)) {
15908
+ return { category: "content", cdfTypeHint: "string" };
15909
+ }
15910
+ if (isBooleanType(type)) {
15911
+ return { category: "design", cdfTypeHint: "boolean" };
15912
+ }
15913
+ if (isNumberType(type)) {
15914
+ return { category: "design", cdfTypeHint: "string" };
15915
+ }
15916
+ return void 0;
15917
+ }
15918
+ function preClassifyComponent(component) {
15919
+ const props = component.props.flatMap((prop) => {
15920
+ const result = preClassifyProp(prop);
15921
+ if (result?.category === "exclude") {
15922
+ return [];
15923
+ }
15924
+ const { domAttribute: _domAttribute, ...authorableProp } = prop;
15925
+ if (prop.category) {
15926
+ return [authorableProp];
15927
+ }
15928
+ if (!result) {
15929
+ return [authorableProp];
15930
+ }
15931
+ return [
15932
+ {
15933
+ ...authorableProp,
15934
+ category: result.category
15935
+ }
15936
+ ];
15937
+ });
15938
+ return { ...component, props };
15939
+ }
15940
+
15941
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.js
15339
15942
  var HANDLER_TYPE_PATTERN = /=>|EventHandler|Dispatch<|SetStateAction/;
15340
15943
  var REF_TYPE_PATTERN = /Ref<|RefObject<|MutableRefObject/;
15341
15944
  function isHandlerOrRefProp(prop) {
@@ -15388,15 +15991,10 @@ function hasNoAuthoringSurface(component) {
15388
15991
  return { skip: false };
15389
15992
  }
15390
15993
 
15391
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/evidence/source-inspection.js
15994
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/inspect-component-source.js
15392
15995
  import { readFile as readFile15 } from "node:fs/promises";
15393
15996
 
15394
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/constants/review-reasons.js
15395
- var HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON = "data-fetch-wrapper";
15396
- var POSSIBLE_DATA_FETCH_WRAPPER_REASON = "possible-data-fetch-wrapper";
15397
- var ZERO_SURFACE_RENDERED_UI_REASON = "zero-surface:rendered-ui";
15398
-
15399
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/shared/parse-imported-names.js
15997
+ // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/parse-source-imports.js
15400
15998
  function parseImportedNames(importClause) {
15401
15999
  const trimmed = importClause.trim();
15402
16000
  if (!trimmed)
@@ -15421,7 +16019,7 @@ function parseImportedNames(importClause) {
15421
16019
  return names;
15422
16020
  }
15423
16021
 
15424
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/evidence/source-inspection.js
16022
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.js
15425
16023
  var INFRA_PROP_NAMES = /* @__PURE__ */ new Set(["id", "locale", "preview", "slug", "topic", "previousComponent", "__typename"]);
15426
16024
  var VISIBLE_UI_TAG_PATTERN = /<(?:[A-Z][A-Za-z0-9_.]*|div|span|section|main|article|header|footer|nav|aside|img|video|p|h[1-6]|ul|ol|li|button|input|textarea|select|form|label|table|tbody|thead|tr|td|th)\b/;
15427
16025
  var GENERATED_IMPORT_PATTERN = /from\s+['"][^'"]*__generated[^'"]*['"]/;
@@ -15463,11 +16061,11 @@ function hasSiblingForwardRender(sourceText, siblingImports) {
15463
16061
  function hasVisibleUiRender(sourceText) {
15464
16062
  return /return\s*(?:\(|<)/.test(sourceText) && VISIBLE_UI_TAG_PATTERN.test(sourceText);
15465
16063
  }
15466
- function infraPropNames(component) {
16064
+ function collectInfraPropNames(component) {
15467
16065
  const props = component.props.map((prop) => prop.name);
15468
16066
  return props.length > 0 && props.every((prop) => INFRA_PROP_NAMES.has(prop)) ? props : [];
15469
16067
  }
15470
- function scoreToConfidence(score) {
16068
+ function mapScoreToWrapperConfidence(score) {
15471
16069
  if (score <= 0)
15472
16070
  return 0;
15473
16071
  if (score <= 2)
@@ -15478,9 +16076,14 @@ function scoreToConfidence(score) {
15478
16076
  return 4;
15479
16077
  return 5;
15480
16078
  }
15481
- function dedupeReasons(reasons) {
15482
- return [...new Set(reasons)];
16079
+ function dedupeStrings(values) {
16080
+ return [...new Set(values)];
15483
16081
  }
16082
+
16083
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/inspect-component-source.js
16084
+ var HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON = "data-fetch-wrapper";
16085
+ var POSSIBLE_DATA_FETCH_WRAPPER_REASON = "possible-data-fetch-wrapper";
16086
+ var ZERO_SURFACE_RENDERED_UI_REASON = "zero-surface:rendered-ui";
15484
16087
  async function inspectComponentSource(component) {
15485
16088
  let sourceText = "";
15486
16089
  try {
@@ -15495,7 +16098,7 @@ async function inspectComponentSource(component) {
15495
16098
  const reviewReasons = [];
15496
16099
  let wrapperScore = 0;
15497
16100
  const hasGeneratedQueryHook = GENERATED_IMPORT_PATTERN.test(sourceText) && GENERATED_QUERY_HOOK_PATTERN.test(sourceText);
15498
- const infraProps = infraPropNames(component);
16101
+ const infraProps = collectInfraPropNames(component);
15499
16102
  const siblingImports = collectSiblingRendererImports(sourceText);
15500
16103
  if (GQL_FILENAME_PATTERN.test(component.source)) {
15501
16104
  reviewReasons.push("data-wrapper:gql-filename");
@@ -15525,7 +16128,7 @@ async function inspectComponentSource(component) {
15525
16128
  reviewReasons.push("data-wrapper:loading-null-guard");
15526
16129
  wrapperScore += 1;
15527
16130
  }
15528
- const wrapperConfidence = scoreToConfidence(wrapperScore);
16131
+ const wrapperConfidence = mapScoreToWrapperConfidence(wrapperScore);
15529
16132
  if (wrapperConfidence >= 4) {
15530
16133
  reviewReasons.unshift(HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON);
15531
16134
  } else if (wrapperConfidence === 3) {
@@ -15537,7 +16140,7 @@ async function inspectComponentSource(component) {
15537
16140
  }
15538
16141
  return {
15539
16142
  wrapperConfidence,
15540
- reviewReasons: dedupeReasons(reviewReasons),
16143
+ reviewReasons: dedupeStrings(reviewReasons),
15541
16144
  keepDespiteZeroSurface
15542
16145
  };
15543
16146
  }
@@ -15568,10 +16171,77 @@ function describeReviewReason(reason) {
15568
16171
  }
15569
16172
  }
15570
16173
  function describeReviewReasons(reasons) {
15571
- return dedupeReasons(reasons.map(describeReviewReason));
16174
+ return dedupeStrings(reasons.map(describeReviewReason));
16175
+ }
16176
+
16177
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/validate-extracted-components.js
16178
+ function validateExtractedComponents2(components) {
16179
+ const nameCounts = /* @__PURE__ */ new Map();
16180
+ for (const component of components) {
16181
+ const key = component.name.trim();
16182
+ nameCounts.set(key, (nameCounts.get(key) ?? 0) + 1);
16183
+ }
16184
+ return components.map((component) => {
16185
+ const issues = [];
16186
+ if (!component.name.trim()) {
16187
+ issues.push({
16188
+ severity: "error",
16189
+ code: "EMPTY_COMPONENT_NAME",
16190
+ message: "Component name must not be empty"
16191
+ });
16192
+ }
16193
+ for (let i = 0; i < component.props.length; i++) {
16194
+ if (!component.props[i].name.trim()) {
16195
+ issues.push({
16196
+ severity: "error",
16197
+ code: "EMPTY_PROP_NAME",
16198
+ message: `Prop at index ${i} has an empty name`,
16199
+ field: `props[${i}].name`
16200
+ });
16201
+ }
16202
+ }
16203
+ for (let i = 0; i < component.slots.length; i++) {
16204
+ if (!component.slots[i].name.trim()) {
16205
+ issues.push({
16206
+ severity: "warning",
16207
+ code: "EMPTY_SLOT_NAME",
16208
+ message: `Slot at index ${i} has an empty name`,
16209
+ field: `slots[${i}].name`
16210
+ });
16211
+ }
16212
+ }
16213
+ const propNames = new Set(component.props.map((p) => p.name.trim()).filter(Boolean));
16214
+ for (let i = 0; i < component.slots.length; i++) {
16215
+ const slotName = component.slots[i].name.trim();
16216
+ if (slotName && propNames.has(slotName)) {
16217
+ issues.push({
16218
+ severity: "error",
16219
+ code: "PROP_SLOT_NAME_COLLISION",
16220
+ message: `"${slotName}" is used as both a prop name and a slot name`,
16221
+ field: `slots[${i}].name`
16222
+ });
16223
+ }
16224
+ }
16225
+ const nameKey = component.name.trim();
16226
+ if (nameKey && (nameCounts.get(nameKey) ?? 0) > 1) {
16227
+ issues.push({
16228
+ severity: "error",
16229
+ code: "DUPLICATE_COMPONENT_NAME",
16230
+ message: `Component name "${component.name}" appears more than once in the extracted set`
16231
+ });
16232
+ }
16233
+ if (component.props.length === 0 && component.slots.length === 0) {
16234
+ issues.push({
16235
+ severity: "warning",
16236
+ code: "EMPTY_COMPONENT",
16237
+ message: "Component has no props or slots and will be filtered out during generation"
16238
+ });
16239
+ }
16240
+ return { ...component, validationIssues: issues };
16241
+ });
15572
16242
  }
15573
16243
 
15574
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/quality/evaluate-extraction-quality.js
16244
+ // packages/experience-design-system-extraction/dist/src/extract/services/quality/evaluate-extraction-quality.js
15575
16245
  function wrapperConfidenceToIssueCount(confidence) {
15576
16246
  if (confidence >= 4)
15577
16247
  return 2;
@@ -15603,7 +16273,7 @@ async function evaluateExtractionQuality(components, initialWarnings = []) {
15603
16273
  }
15604
16274
  const extractorReasons = component.reviewReasons ?? [];
15605
16275
  const nonAuthorableReason = retainedForReview ? [`non-authorable:${verdict.reason}`] : [];
15606
- const { confidence, reasons } = computeExtractionScore(component, {
16276
+ const { confidence, reasons } = computeExtractionScore2(component, {
15607
16277
  additionalIssueCount: wrapperConfidenceToIssueCount(inspection.wrapperConfidence) + extractorReasons.length + nonAuthorableReason.length,
15608
16278
  additionalReasons: [...extractorReasons, ...inspection.reviewReasons, ...nonAuthorableReason]
15609
16279
  });
@@ -15611,194 +16281,15 @@ async function evaluateExtractionQuality(components, initialWarnings = []) {
15611
16281
  ...component,
15612
16282
  extractionConfidence: confidence,
15613
16283
  reviewReasons: reasons,
15614
- needsReview: deriveNeedsReview(confidence) || inspection.wrapperConfidence >= 4 || inspection.keepDespiteZeroSurface || retainedForReview || extractorReasons.includes("props-type-unresolved") || (component.needsReview ?? false)
16284
+ needsReview: deriveNeedsReview2(confidence) || inspection.wrapperConfidence >= 4 || inspection.keepDespiteZeroSurface || retainedForReview || extractorReasons.includes("props-type-unresolved") || (component.needsReview ?? false)
15615
16285
  });
15616
16286
  }
15617
16287
  return {
15618
- components: validateExtractedComponents(scoredComponents),
16288
+ components: validateExtractedComponents2(scoredComponents),
15619
16289
  warnings
15620
16290
  };
15621
16291
  }
15622
16292
 
15623
- // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/pre-classify.js
15624
- function isStringLiteralUnion(type) {
15625
- return type.includes("|") && type.includes("'");
15626
- }
15627
- function isSimpleType(type) {
15628
- const t = type.trim();
15629
- if (t === "string" || t === "boolean" || t === "number")
15630
- return true;
15631
- return isStringLiteralUnion(t);
15632
- }
15633
- function isBooleanType(type) {
15634
- return type.trim() === "boolean";
15635
- }
15636
- function isStringType(type) {
15637
- return type.trim() === "string";
15638
- }
15639
- function isNumberType(type) {
15640
- return type.trim() === "number";
15641
- }
15642
- function isComplexType(type) {
15643
- return !isSimpleType(type);
15644
- }
15645
- var DOM_PASS_THROUGH_PROPS = /* @__PURE__ */ new Set([
15646
- // Bare HTML / framework styling pass-through
15647
- "className",
15648
- "class",
15649
- "classes",
15650
- "classNames",
15651
- "rootClassName",
15652
- "prefixCls",
15653
- "style",
15654
- "styles",
15655
- // Bare HTML attributes
15656
- "id",
15657
- "role",
15658
- "tabIndex",
15659
- "tabindex",
15660
- "htmlFor",
15661
- "for",
15662
- "slot",
15663
- "is",
15664
- "lang",
15665
- "dir",
15666
- "hidden",
15667
- "draggable",
15668
- "spellCheck",
15669
- "spellcheck",
15670
- "contentEditable",
15671
- "contenteditable",
15672
- "inputMode",
15673
- "inputmode",
15674
- "autoComplete",
15675
- "autocomplete",
15676
- "autoFocus",
15677
- "autofocus",
15678
- "translate",
15679
- "part",
15680
- "exportparts",
15681
- "aria",
15682
- // Framework theming / pass-through escape hatches — dev-facing, never marketer-configurable
15683
- "dt",
15684
- "pt",
15685
- "ptOptions",
15686
- "unstyled",
15687
- "sx",
15688
- // Polymorphic component props — change rendered HTML/component, not marketer-visible behavior
15689
- "as",
15690
- "element",
15691
- "component",
15692
- // QA / vendor test attributes
15693
- "dataQa",
15694
- "data-qa",
15695
- // Vue v-model internals — framework wiring, never marketer-configurable
15696
- "modelValue",
15697
- "modelModifiers"
15698
- ]);
15699
- function isDomPassThroughProp(name) {
15700
- if (DOM_PASS_THROUGH_PROPS.has(name))
15701
- return true;
15702
- if (/^aria[-A-Z]/.test(name))
15703
- return true;
15704
- return name.startsWith("data-");
15705
- }
15706
- function preClassifyProp(prop) {
15707
- const { name, type } = prop;
15708
- if (/^on[A-Z]/.test(name) || type.includes("=> void") || type.includes("EventHandler")) {
15709
- return { category: "exclude" };
15710
- }
15711
- if (name === "ref" || name === "innerRef" || type.includes("Ref<") || type.includes("RefObject<")) {
15712
- return { category: "exclude" };
15713
- }
15714
- if (name === "testId" || name === "data-testid" || name === "dataTestId") {
15715
- return { category: "exclude" };
15716
- }
15717
- if (name === "key") {
15718
- return { category: "exclude" };
15719
- }
15720
- if (type.includes("Dispatch<") || type.includes("SetStateAction")) {
15721
- return { category: "exclude" };
15722
- }
15723
- if (isDomPassThroughProp(name)) {
15724
- return { category: "exclude" };
15725
- }
15726
- if (name === "name" && prop.domAttribute) {
15727
- return { category: "exclude" };
15728
- }
15729
- if (isStringLiteralUnion(type)) {
15730
- return { category: "design", cdfTypeHint: "enum" };
15731
- }
15732
- if (!isComplexType(type)) {
15733
- const designNameStart = /^(variant|size|spacing|gap|color|bg|theme|align|layout|orientation|position)/i;
15734
- const designNameEnd = /(Color|Size|Variant|Style)$/;
15735
- if (designNameStart.test(name) || designNameEnd.test(name)) {
15736
- return { category: "design", cdfTypeHint: "string" };
15737
- }
15738
- }
15739
- if (isBooleanType(type)) {
15740
- const stateNames = ["disabled", "loading", "expanded", "isOpen", "selected", "checked", "active", "preview"];
15741
- if (stateNames.includes(name)) {
15742
- return { category: "state", cdfTypeHint: "boolean" };
15743
- }
15744
- }
15745
- if (isBooleanType(type)) {
15746
- const visualToggle = /^(hide|show|enable|disable|vertical|horizontal|reverse|bold|italic|imageOn|with)/i;
15747
- if (visualToggle.test(name)) {
15748
- return { category: "design", cdfTypeHint: "boolean" };
15749
- }
15750
- }
15751
- if (name === "componentId" || name === "sectionKey" || name === "locale" || name === "variantIndex") {
15752
- return { category: "state", cdfTypeHint: "string" };
15753
- }
15754
- if (isStringType(type)) {
15755
- const urlNameStart = /^(href|url|link|src)/i;
15756
- const urlNameEnd = /(Url|Href|Link|Src)$/;
15757
- if (urlNameStart.test(name) || urlNameEnd.test(name)) {
15758
- return { category: "content", cdfTypeHint: "string" };
15759
- }
15760
- }
15761
- if (isStringType(type)) {
15762
- const textNameStart = /^(label|title|text|description|caption|heading|subheading|body|alt|name|placeholder|summary)/i;
15763
- const textNameEnd = /(Text|Label|Title|Name)$/;
15764
- if (textNameStart.test(name) || textNameEnd.test(name)) {
15765
- return { category: "content", cdfTypeHint: "string" };
15766
- }
15767
- }
15768
- if (isStringType(type)) {
15769
- return { category: "content", cdfTypeHint: "string" };
15770
- }
15771
- if (isBooleanType(type)) {
15772
- return { category: "design", cdfTypeHint: "boolean" };
15773
- }
15774
- if (isNumberType(type)) {
15775
- return { category: "design", cdfTypeHint: "string" };
15776
- }
15777
- return void 0;
15778
- }
15779
- function preClassifyComponent(component) {
15780
- const props = component.props.flatMap((prop) => {
15781
- const result = preClassifyProp(prop);
15782
- if (result?.category === "exclude") {
15783
- return [];
15784
- }
15785
- const { domAttribute: _domAttribute, ...authorableProp } = prop;
15786
- if (prop.category) {
15787
- return [authorableProp];
15788
- }
15789
- if (!result) {
15790
- return [authorableProp];
15791
- }
15792
- return [
15793
- {
15794
- ...authorableProp,
15795
- category: result.category
15796
- }
15797
- ];
15798
- });
15799
- return { ...component, props };
15800
- }
15801
-
15802
16293
  // packages/experience-design-system-backend-pipeline/dist/src/orchestrators/run-extract-and-compose-session/helpers/emit-pre-classification-exclusions.js
15803
16294
  function emitPreClassificationExclusions(extraction, onExclusion) {
15804
16295
  if (!onExclusion)