@formspec/build 0.1.0-alpha.59 → 0.1.0-alpha.61

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 (45) hide show
  1. package/dist/analyzer/class-analyzer.d.ts +1 -1
  2. package/dist/analyzer/class-analyzer.d.ts.map +1 -1
  3. package/dist/analyzer/jsdoc-constraints.d.ts +0 -6
  4. package/dist/analyzer/jsdoc-constraints.d.ts.map +1 -1
  5. package/dist/analyzer/tsdoc-parser.d.ts +2 -5
  6. package/dist/analyzer/tsdoc-parser.d.ts.map +1 -1
  7. package/dist/browser.cjs +1 -1
  8. package/dist/browser.cjs.map +1 -1
  9. package/dist/browser.js +2 -2
  10. package/dist/browser.js.map +1 -1
  11. package/dist/build-alpha.d.ts +2 -1
  12. package/dist/build-beta.d.ts +2 -1
  13. package/dist/build-internal.d.ts +18 -15
  14. package/dist/build.d.ts +2 -1
  15. package/dist/canonicalize/chain-dsl-canonicalizer.d.ts +2 -1
  16. package/dist/canonicalize/chain-dsl-canonicalizer.d.ts.map +1 -1
  17. package/dist/canonicalize/tsdoc-canonicalizer.d.ts +2 -1
  18. package/dist/canonicalize/tsdoc-canonicalizer.d.ts.map +1 -1
  19. package/dist/cli.cjs +45 -316
  20. package/dist/cli.cjs.map +1 -1
  21. package/dist/cli.js +48 -319
  22. package/dist/cli.js.map +1 -1
  23. package/dist/extensions/registry.d.ts +2 -2
  24. package/dist/extensions/registry.d.ts.map +1 -1
  25. package/dist/generators/method-schema.d.ts +3 -2
  26. package/dist/generators/method-schema.d.ts.map +1 -1
  27. package/dist/index.cjs +44 -315
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +47 -318
  32. package/dist/index.js.map +1 -1
  33. package/dist/internals.cjs +44 -315
  34. package/dist/internals.cjs.map +1 -1
  35. package/dist/internals.js +47 -318
  36. package/dist/internals.js.map +1 -1
  37. package/dist/metadata/index.d.ts +1 -4
  38. package/dist/metadata/index.d.ts.map +1 -1
  39. package/dist/metadata/policy.d.ts +2 -6
  40. package/dist/metadata/policy.d.ts.map +1 -1
  41. package/dist/metadata/resolve.d.ts +3 -2
  42. package/dist/metadata/resolve.d.ts.map +1 -1
  43. package/dist/ui-schema/schema.d.ts +11 -28
  44. package/dist/ui-schema/schema.d.ts.map +1 -1
  45. package/package.json +6 -6
package/dist/index.d.ts CHANGED
@@ -35,7 +35,7 @@ export type { JSONSchema7, JSONSchemaType, ExtendedJSONSchema7, FormSpecSchemaEx
35
35
  export { createExtensionRegistry } from "./extensions/index.js";
36
36
  export type { ExtensionRegistry, ExtensionTypeLookupResult, MutableExtensionRegistry, } from "./extensions/index.js";
37
37
  /**
38
- * A simplified TypeScript diagnostic surfaced from the synthetic compiler pass.
38
+ * A simplified setup-time diagnostic produced by extension-registry construction.
39
39
  *
40
40
  * Re-exported here because {@link ExtensionRegistry.setupDiagnostics} (an
41
41
  * `@internal` field on a `@public` interface) references this type directly.
@@ -45,7 +45,7 @@ export type { ExtensionRegistry, ExtensionTypeLookupResult, MutableExtensionRegi
45
45
  *
46
46
  * @internal
47
47
  */
48
- export type { SyntheticCompilerDiagnostic } from "@formspec/analysis/internal";
48
+ export type { SetupDiagnostic } from "@formspec/analysis/internal";
49
49
  export type { FormSpecConfig } from "@formspec/config";
50
50
  export type { UISchema, UISchemaElement, UISchemaElementBase, UISchemaElementType, ControlElement, VerticalLayout, HorizontalLayout, GroupLayout, Categorization, Category, LabelElement, Rule, RuleEffect, RuleConditionSchema, SchemaBasedCondition, } from "./ui-schema/types.js";
51
51
  export type { DetailedClassSchemasResult, DetailedSchemaGenerationTargetResult, DiscriminatorResolutionOptions, GenerateFromClassOptions, GenerateFromClassResult, GenerateSchemasOptions, GenerateSchemasBatchFromProgramOptions, GenerateSchemasBatchOptions, GenerateSchemasFromProgramOptions, SchemaGenerationTarget, StaticSchemaGenerationOptions, } from "./generators/class-schema.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2056,7 +2056,7 @@ import {
2056
2056
  import {
2057
2057
  getTagDefinition,
2058
2058
  normalizeFormSpecTagName,
2059
- getSyntheticLogger,
2059
+ getRegistryLogger,
2060
2060
  _validateExtensionSetup,
2061
2061
  logSetupDiagnostics
2062
2062
  } from "@formspec/analysis/internal";
@@ -2082,7 +2082,7 @@ function buildConstraintTagSources(extensions) {
2082
2082
  }));
2083
2083
  }
2084
2084
  function createExtensionRegistry(extensions) {
2085
- const registryLog = getSyntheticLogger();
2085
+ const registryLog = getRegistryLogger();
2086
2086
  registryLog.debug("createExtensionRegistry: constructing", {
2087
2087
  extensionCount: extensions.length,
2088
2088
  extensionIds: extensions.map((e) => e.extensionId)
@@ -2332,9 +2332,11 @@ import * as ts4 from "typescript";
2332
2332
  // src/analyzer/tsdoc-parser.ts
2333
2333
  import * as ts3 from "typescript";
2334
2334
  import {
2335
- checkSyntheticTagApplication,
2335
+ _capabilityLabel,
2336
+ _supportsConstraintCapability,
2336
2337
  choosePreferredPayloadText,
2337
2338
  extractPathTarget as extractSharedPathTarget,
2339
+ getBroadenedCustomTypeId,
2338
2340
  getTagDefinition as getTagDefinition2,
2339
2341
  hasTypeSemanticCapability,
2340
2342
  normalizeFormSpecTagName as normalizeFormSpecTagName2,
@@ -2463,10 +2465,8 @@ import { _isIntegerBrandedType } from "@formspec/analysis/internal";
2463
2465
  // src/analyzer/tsdoc-parser.ts
2464
2466
  import {
2465
2467
  _emitSetupDiagnostics,
2466
- _mapSetupDiagnosticCode,
2467
2468
  getBuildLogger,
2468
2469
  getBroadeningLogger,
2469
- getSyntheticLogger as getSyntheticLogger2,
2470
2470
  getTypedParserLogger,
2471
2471
  extractEffectiveArgumentText,
2472
2472
  mapTypedParserDiagnosticCode,
@@ -2476,152 +2476,35 @@ import {
2476
2476
  nowMicros,
2477
2477
  logTagApplication
2478
2478
  } from "@formspec/analysis/internal";
2479
- function sharedTagValueOptions(options) {
2479
+ function sharedTagValueOptions(options, pathResolvedCustomTypeId) {
2480
2480
  return {
2481
2481
  ...options?.extensionRegistry !== void 0 ? { registry: options.extensionRegistry } : {},
2482
- ...options?.fieldType !== void 0 ? { fieldType: options.fieldType } : {}
2482
+ ...options?.fieldType !== void 0 ? { fieldType: options.fieldType } : {},
2483
+ ...pathResolvedCustomTypeId !== void 0 ? { pathResolvedCustomTypeId } : {}
2483
2484
  };
2484
2485
  }
2485
- var SYNTHETIC_TYPE_FORMAT_FLAGS = ts3.TypeFormatFlags.NoTruncation | ts3.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope;
2486
- function getExtensionTypeNames(registry) {
2487
- if (registry === void 0) {
2488
- return /* @__PURE__ */ new Set();
2489
- }
2490
- return new Set(
2491
- registry.extensions.flatMap(
2492
- (ext) => (ext.types ?? []).flatMap((t) => t.tsTypeNames ?? [t.typeName])
2493
- )
2494
- );
2486
+ function customTypeIdForResolvedType(resolvedType, checker, registry) {
2487
+ if (registry === void 0) return void 0;
2488
+ const lookup = resolveCustomTypeFromTsType(resolvedType, checker, registry);
2489
+ return lookup === null ? void 0 : customTypeIdFromLookup(lookup);
2495
2490
  }
2496
- function collectImportedNames(sourceFile) {
2497
- const importedNames = /* @__PURE__ */ new Set();
2498
- for (const statement of sourceFile.statements) {
2499
- if (ts3.isImportDeclaration(statement) && statement.importClause !== void 0) {
2500
- const clause = statement.importClause;
2501
- if (clause.name !== void 0) {
2502
- importedNames.add(clause.name.text);
2503
- }
2504
- if (clause.namedBindings !== void 0) {
2505
- if (ts3.isNamedImports(clause.namedBindings)) {
2506
- for (const specifier of clause.namedBindings.elements) {
2507
- importedNames.add(specifier.name.text);
2508
- }
2509
- } else if (ts3.isNamespaceImport(clause.namedBindings)) {
2510
- importedNames.add(clause.namedBindings.name.text);
2511
- }
2512
- }
2513
- continue;
2514
- }
2515
- if (ts3.isImportEqualsDeclaration(statement)) {
2516
- importedNames.add(statement.name.text);
2517
- }
2518
- }
2519
- return importedNames;
2520
- }
2521
- function isNonReferenceIdentifier(node) {
2522
- const parent = node.parent;
2523
- if ((ts3.isBindingElement(parent) || ts3.isClassDeclaration(parent) || ts3.isEnumDeclaration(parent) || ts3.isEnumMember(parent) || ts3.isFunctionDeclaration(parent) || ts3.isFunctionExpression(parent) || ts3.isImportClause(parent) || ts3.isImportEqualsDeclaration(parent) || ts3.isImportSpecifier(parent) || ts3.isInterfaceDeclaration(parent) || ts3.isMethodDeclaration(parent) || ts3.isMethodSignature(parent) || ts3.isModuleDeclaration(parent) || ts3.isNamespaceExport(parent) || ts3.isNamespaceImport(parent) || ts3.isParameter(parent) || ts3.isPropertyDeclaration(parent) || ts3.isPropertySignature(parent) || ts3.isSetAccessorDeclaration(parent) || ts3.isGetAccessorDeclaration(parent) || ts3.isTypeAliasDeclaration(parent) || ts3.isTypeParameterDeclaration(parent) || ts3.isVariableDeclaration(parent)) && parent.name === node) {
2524
- return true;
2525
- }
2526
- if ((ts3.isPropertyAssignment(parent) || ts3.isPropertyAccessExpression(parent)) && parent.name === node) {
2527
- return true;
2528
- }
2529
- if (ts3.isQualifiedName(parent) && parent.right === node) {
2530
- return true;
2531
- }
2532
- return false;
2533
- }
2534
- function astReferencesImportedName(root, importedNames) {
2535
- if (importedNames.size === 0) {
2536
- return false;
2537
- }
2538
- let found = false;
2539
- const visit = (node) => {
2540
- if (found) return;
2541
- if (ts3.isIdentifier(node) && importedNames.has(node.text) && !isNonReferenceIdentifier(node)) {
2542
- found = true;
2543
- return;
2544
- }
2545
- ts3.forEachChild(node, visit);
2546
- };
2547
- visit(root);
2548
- return found;
2549
- }
2550
- function getObjectMembers(statement) {
2551
- if (ts3.isInterfaceDeclaration(statement)) {
2552
- return statement.members;
2553
- }
2554
- if (ts3.isTypeLiteralNode(statement.type)) {
2555
- return statement.type.members;
2556
- }
2557
- return void 0;
2558
- }
2559
- function rewriteImportedMemberTypes(statement, sourceFile, importedNames) {
2560
- const members = getObjectMembers(statement);
2561
- if (members === void 0) {
2562
- return null;
2563
- }
2564
- const replacements = [];
2565
- for (const member of members) {
2566
- if (!ts3.isPropertySignature(member)) {
2567
- if (astReferencesImportedName(member, importedNames)) {
2568
- return null;
2569
- }
2570
- continue;
2571
- }
2572
- const typeAnnotation = member.type;
2573
- if (typeAnnotation === void 0) continue;
2574
- if (astReferencesImportedName(typeAnnotation, importedNames)) {
2575
- replacements.push({
2576
- start: typeAnnotation.getStart(sourceFile),
2577
- end: typeAnnotation.getEnd()
2578
- });
2579
- }
2580
- }
2581
- if (replacements.length === 0) {
2582
- return statement.getText(sourceFile);
2583
- }
2584
- const stmtStart = statement.getStart(sourceFile);
2585
- let result = statement.getText(sourceFile);
2586
- for (const { start, end } of [...replacements].reverse()) {
2587
- result = result.slice(0, start - stmtStart) + "unknown" + result.slice(end - stmtStart);
2491
+ function resolvePathTargetCustomTypeId(parsedTag, subjectType, checker, registry) {
2492
+ if (parsedTag === null) return void 0;
2493
+ const target = parsedTag.target;
2494
+ if (target?.kind !== "path" || !target.valid || target.path === null) {
2495
+ return void 0;
2588
2496
  }
2589
- return result;
2590
- }
2591
- function buildSupportingDeclarations(sourceFile, extensionTypeNames) {
2592
- const importedNames = collectImportedNames(sourceFile);
2593
- const importedNamesToSkip = new Set(
2594
- [...importedNames].filter((name) => !extensionTypeNames.has(name))
2595
- );
2596
- const result = [];
2597
- for (const statement of sourceFile.statements) {
2598
- if (ts3.isImportDeclaration(statement)) continue;
2599
- if (ts3.isImportEqualsDeclaration(statement)) continue;
2600
- if (ts3.isExportDeclaration(statement) && statement.moduleSpecifier !== void 0) continue;
2601
- if (!astReferencesImportedName(statement, importedNamesToSkip)) {
2602
- result.push(statement.getText(sourceFile));
2603
- continue;
2604
- }
2605
- if (ts3.isInterfaceDeclaration(statement) || ts3.isTypeAliasDeclaration(statement)) {
2606
- const rewritten = rewriteImportedMemberTypes(statement, sourceFile, importedNamesToSkip);
2607
- if (rewritten !== null) {
2608
- result.push(rewritten);
2609
- }
2610
- }
2497
+ if (subjectType === void 0 || checker === void 0) {
2498
+ return void 0;
2611
2499
  }
2612
- return result;
2613
- }
2614
- function pushUniqueCompilerDiagnostics(target, additions) {
2615
- for (const diagnostic of additions) {
2616
- if ((diagnostic.code === "UNSUPPORTED_CUSTOM_TYPE_OVERRIDE" || diagnostic.code === "SYNTHETIC_SETUP_FAILURE") && target.some(
2617
- (existing) => existing.code === diagnostic.code && existing.message === diagnostic.message
2618
- )) {
2619
- continue;
2620
- }
2621
- target.push(diagnostic);
2500
+ const resolution = resolvePathTargetType(subjectType, checker, target.path.segments);
2501
+ if (resolution.kind !== "resolved") {
2502
+ return void 0;
2622
2503
  }
2504
+ return customTypeIdForResolvedType(resolution.type, checker, registry);
2623
2505
  }
2624
- function processConstraintTag(tagName, text, parsedTag, provenance, node, sourceFile, supportingDeclarations, options, constraints, diagnostics) {
2506
+ var TYPE_FORMAT_FLAGS = ts3.TypeFormatFlags.NoTruncation | ts3.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope;
2507
+ function processConstraintTag(tagName, text, parsedTag, provenance, node, sourceFile, options, constraints, diagnostics) {
2625
2508
  const compilerDiagnostics = buildCompilerBackedConstraintDiagnostics(
2626
2509
  node,
2627
2510
  sourceFile,
@@ -2629,74 +2512,30 @@ function processConstraintTag(tagName, text, parsedTag, provenance, node, source
2629
2512
  parsedTag,
2630
2513
  text,
2631
2514
  provenance,
2632
- supportingDeclarations,
2633
2515
  options
2634
2516
  );
2635
2517
  if (compilerDiagnostics.length > 0) {
2636
- pushUniqueCompilerDiagnostics(diagnostics, compilerDiagnostics);
2518
+ diagnostics.push(...compilerDiagnostics);
2637
2519
  return;
2638
2520
  }
2521
+ const pathResolvedCustomTypeId = resolvePathTargetCustomTypeId(
2522
+ parsedTag,
2523
+ options?.subjectType,
2524
+ options?.checker,
2525
+ options?.extensionRegistry
2526
+ );
2639
2527
  const constraintNode = parseConstraintTagValue(
2640
2528
  tagName,
2641
2529
  text,
2642
2530
  provenance,
2643
- sharedTagValueOptions(options)
2531
+ sharedTagValueOptions(options, pathResolvedCustomTypeId)
2644
2532
  );
2645
2533
  if (constraintNode) {
2646
2534
  constraints.push(constraintNode);
2647
2535
  }
2648
2536
  }
2649
- function renderSyntheticArgumentExpression(valueKind, argumentText) {
2650
- const trimmed = argumentText.trim();
2651
- if (trimmed === "") {
2652
- return null;
2653
- }
2654
- switch (valueKind) {
2655
- case "number":
2656
- case "integer":
2657
- case "signedInteger":
2658
- if (trimmed === "Infinity" || trimmed === "-Infinity" || trimmed === "NaN") {
2659
- return trimmed;
2660
- }
2661
- return Number.isFinite(Number(trimmed)) ? trimmed : JSON.stringify(trimmed);
2662
- case "string":
2663
- return JSON.stringify(argumentText);
2664
- case "json":
2665
- try {
2666
- JSON.parse(trimmed);
2667
- return `(${trimmed})`;
2668
- } catch {
2669
- return JSON.stringify(trimmed);
2670
- }
2671
- case "boolean":
2672
- return trimmed === "true" || trimmed === "false" ? trimmed : JSON.stringify(trimmed);
2673
- case "condition":
2674
- return "undefined as unknown as FormSpecCondition";
2675
- case null:
2676
- return null;
2677
- default: {
2678
- return String(valueKind);
2679
- }
2680
- }
2681
- }
2682
- function getArrayElementType(type, checker) {
2683
- if (!checker.isArrayType(type)) {
2684
- return null;
2685
- }
2686
- return checker.getTypeArguments(type)[0] ?? null;
2687
- }
2688
2537
  function supportsConstraintCapability(type, checker, capability) {
2689
- if (capability === void 0) {
2690
- return true;
2691
- }
2692
- if (hasTypeSemanticCapability(type, checker, capability)) {
2693
- return true;
2694
- }
2695
- if (capability === "string-like") {
2696
- const itemType = getArrayElementType(type, checker);
2697
- return itemType !== null && hasTypeSemanticCapability(itemType, checker, capability);
2698
- }
2699
- return false;
2538
+ return _supportsConstraintCapability(capability, type, checker);
2700
2539
  }
2701
2540
  var MAX_HINT_CANDIDATES = 5;
2702
2541
  var MAX_HINT_DEPTH = 3;
@@ -2823,53 +2662,11 @@ function placementLabel(placement) {
2823
2662
  }
2824
2663
  }
2825
2664
  }
2826
- function capabilityLabel(capability) {
2827
- switch (capability) {
2828
- case "numeric-comparable":
2829
- return "number";
2830
- case "string-like":
2831
- return "string";
2832
- case "array-like":
2833
- return "array";
2834
- case "enum-member-addressable":
2835
- return "enum";
2836
- case "json-like":
2837
- return "JSON-compatible";
2838
- case "object-like":
2839
- return "object";
2840
- case "condition-like":
2841
- return "conditional";
2842
- case void 0:
2843
- return "compatible";
2844
- default:
2845
- return capability;
2846
- }
2847
- }
2848
- function getBroadenedCustomTypeId(fieldType) {
2849
- if (fieldType?.kind === "custom") {
2850
- return fieldType.typeId;
2851
- }
2852
- if (fieldType?.kind !== "union") {
2853
- return void 0;
2854
- }
2855
- const customMembers = fieldType.members.filter(
2856
- (member) => member.kind === "custom"
2857
- );
2858
- if (customMembers.length !== 1) {
2859
- return void 0;
2860
- }
2861
- const nonCustomMembers = fieldType.members.filter((member) => member.kind !== "custom");
2862
- const allOtherMembersAreNull = nonCustomMembers.every(
2863
- (member) => member.kind === "primitive" && member.primitiveKind === "null"
2864
- );
2865
- const customMember = customMembers[0];
2866
- return allOtherMembersAreNull && customMember !== void 0 ? customMember.typeId : void 0;
2867
- }
2868
2665
  function hasBuiltinConstraintBroadening(tagName, options) {
2869
2666
  const broadenedTypeId = getBroadenedCustomTypeId(options?.fieldType);
2870
2667
  return broadenedTypeId !== void 0 && options?.extensionRegistry?.findBuiltinConstraintBroadening(broadenedTypeId, tagName) !== void 0;
2871
2668
  }
2872
- function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, parsedTag, rawText, provenance, supportingDeclarations, options) {
2669
+ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, parsedTag, rawText, provenance, options) {
2873
2670
  if (!isBuiltinConstraintName(tagName)) {
2874
2671
  return [];
2875
2672
  }
@@ -2889,16 +2686,14 @@ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, par
2889
2686
  const nonNullPlacement = placement;
2890
2687
  const log = getBuildLogger();
2891
2688
  const broadeningLog = getBroadeningLogger();
2892
- const syntheticLog = getSyntheticLogger2();
2893
2689
  const typedParserLog = getTypedParserLogger();
2894
2690
  const logsEnabled = log !== noopLogger3 || broadeningLog !== noopLogger3;
2895
- const syntheticTraceEnabled = syntheticLog !== noopLogger3;
2896
2691
  const typedParserTraceEnabled = typedParserLog !== noopLogger3;
2897
2692
  const logStart = logsEnabled ? nowMicros() : 0;
2898
2693
  const subjectTypeKind = logsEnabled ? describeTypeKind(subjectType, checker) : "";
2899
- function emit(outcome, result2) {
2694
+ function emit(outcome, result) {
2900
2695
  if (!logsEnabled) {
2901
- return result2;
2696
+ return result;
2902
2697
  }
2903
2698
  const entry = {
2904
2699
  consumer: "build",
@@ -2912,7 +2707,7 @@ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, par
2912
2707
  if (outcome === "bypass" || outcome === "D1" || outcome === "D2") {
2913
2708
  logTagApplication(broadeningLog, entry);
2914
2709
  }
2915
- return result2;
2710
+ return result;
2916
2711
  }
2917
2712
  if (!definition.placements.includes(placement)) {
2918
2713
  return emit("A-reject", [
@@ -2956,7 +2751,7 @@ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, par
2956
2751
  ]);
2957
2752
  }
2958
2753
  if (resolution.kind === "unresolvable") {
2959
- const actualType = checker.typeToString(resolution.type, node, SYNTHETIC_TYPE_FORMAT_FLAGS);
2754
+ const actualType = checker.typeToString(resolution.type, node, TYPE_FORMAT_FLAGS);
2960
2755
  return emit("B-reject", [
2961
2756
  makeDiagnostic(
2962
2757
  "TYPE_MISMATCH",
@@ -2970,21 +2765,21 @@ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, par
2970
2765
  }
2971
2766
  const hasBroadening = (() => {
2972
2767
  if (target === null) {
2973
- if (_isIntegerBrandedType(stripNullishUnion2(subjectType)) && definition.capabilities.includes("numeric-comparable")) {
2768
+ if (_isIntegerBrandedType(stripNullishUnion2(subjectType)) && definition.capabilities[0] === "numeric-comparable") {
2974
2769
  return true;
2975
2770
  }
2976
2771
  return hasBuiltinConstraintBroadening(tagName, options);
2977
2772
  }
2978
2773
  const registry = options?.extensionRegistry;
2979
2774
  if (registry === void 0) return false;
2980
- const resolved = resolveCustomTypeFromTsType(evaluatedType, checker, registry);
2981
- return resolved !== null && registry.findBuiltinConstraintBroadening(customTypeIdFromLookup(resolved), tagName) !== void 0;
2775
+ const typeId = customTypeIdForResolvedType(evaluatedType, checker, registry);
2776
+ return typeId !== void 0 && registry.findBuiltinConstraintBroadening(typeId, tagName) !== void 0;
2982
2777
  })();
2983
2778
  if (!hasBroadening) {
2984
2779
  const requiredCapability = definition.capabilities[0];
2985
2780
  if (requiredCapability !== void 0 && !supportsConstraintCapability(evaluatedType, checker, requiredCapability)) {
2986
- const actualType = checker.typeToString(evaluatedType, node, SYNTHETIC_TYPE_FORMAT_FLAGS);
2987
- const baseMessage = `Target "${targetLabel}": constraint "${tagName}" is only valid on ${capabilityLabel(requiredCapability)} targets, but field type is "${actualType}"`;
2781
+ const actualType = checker.typeToString(evaluatedType, node, TYPE_FORMAT_FLAGS);
2782
+ const baseMessage = `Target "${targetLabel}": constraint "${tagName}" is only valid on ${_capabilityLabel(requiredCapability)} targets, but field type is "${actualType}"`;
2988
2783
  const hint = target === null ? buildPathTargetHint(
2989
2784
  subjectType,
2990
2785
  checker,
@@ -3032,68 +2827,7 @@ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, par
3032
2827
  valueKind: typedParseResult.value.kind
3033
2828
  });
3034
2829
  }
3035
- const argumentExpression = renderSyntheticArgumentExpression(
3036
- definition.valueKind,
3037
- effectiveArgumentText
3038
- );
3039
- const subjectTypeText = checker.typeToString(subjectType, node, SYNTHETIC_TYPE_FORMAT_FLAGS);
3040
- const hostType = options?.hostType ?? subjectType;
3041
- const hostTypeText = checker.typeToString(hostType, node, SYNTHETIC_TYPE_FORMAT_FLAGS);
3042
- if (syntheticTraceEnabled) {
3043
- syntheticLog.trace("invoking synthetic checker", {
3044
- consumer: "build",
3045
- tag: tagName,
3046
- placement,
3047
- subjectTypeKind,
3048
- subjectTypeText
3049
- });
3050
- }
3051
- const result = checkSyntheticTagApplication({
3052
- tagName,
3053
- placement,
3054
- hostType: hostTypeText,
3055
- subjectType: subjectTypeText,
3056
- ...target?.kind === "path" ? { target: { kind: "path", text: target.rawText } } : {},
3057
- ...argumentExpression !== null ? { argumentExpression } : {},
3058
- supportingDeclarations,
3059
- ...options?.extensionRegistry !== void 0 ? {
3060
- extensions: options.extensionRegistry.extensions.map((extension) => ({
3061
- extensionId: extension.extensionId,
3062
- ...extension.constraintTags !== void 0 ? {
3063
- constraintTags: extension.constraintTags.map((tag) => ({ tagName: tag.tagName }))
3064
- } : {},
3065
- ...extension.metadataSlots !== void 0 ? {
3066
- metadataSlots: extension.metadataSlots
3067
- } : {},
3068
- ...extension.types !== void 0 ? {
3069
- customTypes: extension.types.map((t) => ({
3070
- tsTypeNames: t.tsTypeNames ?? [t.typeName]
3071
- }))
3072
- } : {}
3073
- }))
3074
- } : {}
3075
- });
3076
- if (result.diagnostics.length === 0) {
3077
- return emit("D-pass", []);
3078
- }
3079
- const setupDiagnostic = result.diagnostics.find((diagnostic) => diagnostic.kind !== "typescript");
3080
- if (setupDiagnostic !== void 0) {
3081
- return emit("C-reject", [
3082
- makeDiagnostic(
3083
- _mapSetupDiagnosticCode(setupDiagnostic.kind),
3084
- setupDiagnostic.message,
3085
- provenance
3086
- )
3087
- ]);
3088
- }
3089
- const expectedLabel = definition.valueKind === null ? "compatible argument" : capabilityLabel(definition.valueKind);
3090
- return emit("C-reject", [
3091
- makeDiagnostic(
3092
- "TYPE_MISMATCH",
3093
- `Tag "@${tagName}" received an invalid argument for ${expectedLabel}.`,
3094
- provenance
3095
- )
3096
- ]);
2830
+ return emit("C-pass", []);
3097
2831
  }
3098
2832
  var parseResultCache = /* @__PURE__ */ new Map();
3099
2833
  function getExtensionTagNames(options) {
@@ -3137,8 +2871,8 @@ function getParseCacheKey(node, file, options) {
3137
2871
  start: node.getFullStart(),
3138
2872
  end: node.getEnd(),
3139
2873
  fieldType: options?.fieldType ?? null,
3140
- subjectType: checker !== void 0 && options?.subjectType !== void 0 ? checker.typeToString(options.subjectType, node, SYNTHETIC_TYPE_FORMAT_FLAGS) : null,
3141
- hostType: checker !== void 0 && options?.hostType !== void 0 ? checker.typeToString(options.hostType, node, SYNTHETIC_TYPE_FORMAT_FLAGS) : null,
2874
+ subjectType: checker !== void 0 && options?.subjectType !== void 0 ? checker.typeToString(options.subjectType, node, TYPE_FORMAT_FLAGS) : null,
2875
+ hostType: checker !== void 0 && options?.hostType !== void 0 ? checker.typeToString(options.hostType, node, TYPE_FORMAT_FLAGS) : null,
3142
2876
  extensions: getExtensionRegistryCacheKey(options?.extensionRegistry)
3143
2877
  });
3144
2878
  }
@@ -3167,8 +2901,6 @@ function parseTSDocTags(node, file = "", options) {
3167
2901
  let placeholderProvenance;
3168
2902
  const sourceFile = node.getSourceFile();
3169
2903
  const sourceText = sourceFile.getFullText();
3170
- const extensionTypeNames = getExtensionTypeNames(options?.extensionRegistry);
3171
- const supportingDeclarations = buildSupportingDeclarations(sourceFile, extensionTypeNames);
3172
2904
  const commentRanges = ts3.getLeadingCommentRanges(sourceText, node.getFullStart());
3173
2905
  const rawTextFallbacks = collectRawTextFallbacks(node, file);
3174
2906
  const extensionTagNames = getExtensionTagNames(options);
@@ -3233,7 +2965,6 @@ function parseTSDocTags(node, file = "", options) {
3233
2965
  provenance2,
3234
2966
  node,
3235
2967
  sourceFile,
3236
- supportingDeclarations,
3237
2968
  options,
3238
2969
  constraints,
3239
2970
  diagnostics
@@ -3251,7 +2982,6 @@ function parseTSDocTags(node, file = "", options) {
3251
2982
  provenance,
3252
2983
  node,
3253
2984
  sourceFile,
3254
- supportingDeclarations,
3255
2985
  options,
3256
2986
  constraints,
3257
2987
  diagnostics
@@ -3315,7 +3045,6 @@ function parseTSDocTags(node, file = "", options) {
3315
3045
  provenance,
3316
3046
  node,
3317
3047
  sourceFile,
3318
- supportingDeclarations,
3319
3048
  options,
3320
3049
  constraints,
3321
3050
  diagnostics