@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.
- package/dist/analyzer/class-analyzer.d.ts +1 -1
- package/dist/analyzer/class-analyzer.d.ts.map +1 -1
- package/dist/analyzer/jsdoc-constraints.d.ts +0 -6
- package/dist/analyzer/jsdoc-constraints.d.ts.map +1 -1
- package/dist/analyzer/tsdoc-parser.d.ts +2 -5
- package/dist/analyzer/tsdoc-parser.d.ts.map +1 -1
- package/dist/browser.cjs +1 -1
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.js +2 -2
- package/dist/browser.js.map +1 -1
- package/dist/build-alpha.d.ts +2 -1
- package/dist/build-beta.d.ts +2 -1
- package/dist/build-internal.d.ts +18 -15
- package/dist/build.d.ts +2 -1
- package/dist/canonicalize/chain-dsl-canonicalizer.d.ts +2 -1
- package/dist/canonicalize/chain-dsl-canonicalizer.d.ts.map +1 -1
- package/dist/canonicalize/tsdoc-canonicalizer.d.ts +2 -1
- package/dist/canonicalize/tsdoc-canonicalizer.d.ts.map +1 -1
- package/dist/cli.cjs +45 -316
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +48 -319
- package/dist/cli.js.map +1 -1
- package/dist/extensions/registry.d.ts +2 -2
- package/dist/extensions/registry.d.ts.map +1 -1
- package/dist/generators/method-schema.d.ts +3 -2
- package/dist/generators/method-schema.d.ts.map +1 -1
- package/dist/index.cjs +44 -315
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -318
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +44 -315
- package/dist/internals.cjs.map +1 -1
- package/dist/internals.js +47 -318
- package/dist/internals.js.map +1 -1
- package/dist/metadata/index.d.ts +1 -4
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/policy.d.ts +2 -6
- package/dist/metadata/policy.d.ts.map +1 -1
- package/dist/metadata/resolve.d.ts +3 -2
- package/dist/metadata/resolve.d.ts.map +1 -1
- package/dist/ui-schema/schema.d.ts +11 -28
- package/dist/ui-schema/schema.d.ts.map +1 -1
- 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
|
|
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 {
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQrD,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EACV,uCAAuC,EACvC,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B;;;;;;;;;;GAUG;AACH,YAAY,EAAE,
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
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
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
2694
|
+
function emit(outcome, result) {
|
|
2900
2695
|
if (!logsEnabled) {
|
|
2901
|
-
return
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
2981
|
-
return
|
|
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,
|
|
2987
|
-
const baseMessage = `Target "${targetLabel}": constraint "${tagName}" is only valid on ${
|
|
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
|
-
|
|
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,
|
|
3141
|
-
hostType: checker !== void 0 && options?.hostType !== void 0 ? checker.typeToString(options.hostType, node,
|
|
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
|