@typespec/compiler 0.58.0-dev.16 → 0.58.0-dev.18
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/generated-defs/TypeSpec.d.ts +28 -1
- package/dist/generated-defs/TypeSpec.d.ts.map +1 -1
- package/dist/generated-defs/TypeSpec.ts-test.js +3 -1
- package/dist/generated-defs/TypeSpec.ts-test.js.map +1 -1
- package/dist/manifest.js +2 -2
- package/dist/src/core/checker.d.ts +11 -1
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +34 -17
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/lib/decorators.d.ts +18 -2
- package/dist/src/lib/decorators.d.ts.map +1 -1
- package/dist/src/lib/decorators.js +76 -1
- package/dist/src/lib/decorators.js.map +1 -1
- package/dist/src/lib/examples.d.ts +9 -0
- package/dist/src/lib/examples.d.ts.map +1 -0
- package/dist/src/lib/examples.js +137 -0
- package/dist/src/lib/examples.js.map +1 -0
- package/lib/std/decorators.tsp +60 -0
- package/package.json +2 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DecoratorContext, Enum, Interface, Model, ModelProperty, Namespace, Numeric, Operation, Scalar, Type, Union } from "../src/index.js";
|
|
1
|
+
import type { DecoratorContext, Enum, Interface, Model, ModelProperty, Namespace, Numeric, Operation, Scalar, Type, Union, UnionVariant } from "../src/index.js";
|
|
2
2
|
/**
|
|
3
3
|
* Specify how to encode the target type.
|
|
4
4
|
*
|
|
@@ -406,6 +406,33 @@ export type EncodedNameDecorator = (context: DecoratorContext, target: Type, mim
|
|
|
406
406
|
* ```
|
|
407
407
|
*/
|
|
408
408
|
export type DiscriminatorDecorator = (context: DecoratorContext, target: Model | Union, propertyName: string) => void;
|
|
409
|
+
/**
|
|
410
|
+
* Provide an example value for a data type.
|
|
411
|
+
*
|
|
412
|
+
* @param example Example value.
|
|
413
|
+
* @param options Optional metadata for the example.
|
|
414
|
+
* @example
|
|
415
|
+
* ```tsp
|
|
416
|
+
* @example(#{name: "Fluffy", age: 2})
|
|
417
|
+
* model Pet {
|
|
418
|
+
* name: string;
|
|
419
|
+
* age: int32;
|
|
420
|
+
* }
|
|
421
|
+
* ```
|
|
422
|
+
*/
|
|
423
|
+
export type ExampleDecorator = (context: DecoratorContext, target: Model | Enum | Scalar | Union | ModelProperty | UnionVariant, example: unknown, options?: unknown) => void;
|
|
424
|
+
/**
|
|
425
|
+
* Provide example values for an operation's parameters and corresponding return type.
|
|
426
|
+
*
|
|
427
|
+
* @param example Example value.
|
|
428
|
+
* @param options Optional metadata for the example.
|
|
429
|
+
* @example
|
|
430
|
+
* ```tsp
|
|
431
|
+
* @example(#{parameters: #{name: "Fluffy", age: 2}, returnType: #{name: "Fluffy", age: 2, id: "abc"})
|
|
432
|
+
* op createPet(pet: Pet): Pet;
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
435
|
+
export type OpExampleDecorator = (context: DecoratorContext, target: Operation, example: unknown, options?: unknown) => void;
|
|
409
436
|
/**
|
|
410
437
|
* Indicates that a property is only considered to be present or applicable ("visible") with
|
|
411
438
|
* the in the given named contexts ("visibilities"). When a property has no visibilities applied
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSpec.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,SAAS,EACT,MAAM,EACN,IAAI,EACJ,KAAK,
|
|
1
|
+
{"version":3,"file":"TypeSpec.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** An error here would mean that the decorator is not exported or doesn't have the right name. */
|
|
2
|
-
import { $deprecated, $discriminator, $doc, $encode, $encodedName, $error, $errorsDoc, $format, $friendlyName, $inspectType, $inspectTypeName, $key, $knownValues, $list, $maxItems, $maxLength, $maxValue, $maxValueExclusive, $minItems, $minLength, $minValue, $minValueExclusive, $overload, $parameterVisibility, $pattern, $projectedName, $returnTypeVisibility, $returnsDoc, $secret, $service, $summary, $tag, $visibility, $withDefaultKeyVisibility, $withOptionalProperties, $withPickedProperties, $withUpdateableProperties, $withVisibility, $withoutDefaultValues, $withoutOmittedProperties, } from "../src/index.js";
|
|
2
|
+
import { $deprecated, $discriminator, $doc, $encode, $encodedName, $error, $errorsDoc, $example, $format, $friendlyName, $inspectType, $inspectTypeName, $key, $knownValues, $list, $maxItems, $maxLength, $maxValue, $maxValueExclusive, $minItems, $minLength, $minValue, $minValueExclusive, $opExample, $overload, $parameterVisibility, $pattern, $projectedName, $returnTypeVisibility, $returnsDoc, $secret, $service, $summary, $tag, $visibility, $withDefaultKeyVisibility, $withOptionalProperties, $withPickedProperties, $withUpdateableProperties, $withVisibility, $withoutDefaultValues, $withoutOmittedProperties, } from "../src/index.js";
|
|
3
3
|
/** An error here would mean that the exported decorator is not using the same signature. Make sure to have export const $decName: DecNameDecorator = (...) => ... */
|
|
4
4
|
const _ = {
|
|
5
5
|
$encode,
|
|
@@ -36,6 +36,8 @@ const _ = {
|
|
|
36
36
|
$projectedName,
|
|
37
37
|
$encodedName,
|
|
38
38
|
$discriminator,
|
|
39
|
+
$example,
|
|
40
|
+
$opExample,
|
|
39
41
|
$visibility,
|
|
40
42
|
$withVisibility,
|
|
41
43
|
$inspectType,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSpec.ts-test.js","sourceRoot":"","sources":["../../generated-defs/TypeSpec.ts-test.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EACL,WAAW,EACX,cAAc,EACd,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,MAAM,EACN,UAAU,EACV,OAAO,EACP,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeSpec.ts-test.js","sourceRoot":"","sources":["../../generated-defs/TypeSpec.ts-test.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EACL,WAAW,EACX,cAAc,EACd,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AA2FzB,qKAAqK;AACrK,MAAM,CAAC,GAAe;IACpB,OAAO;IACP,IAAI;IACJ,uBAAuB;IACvB,yBAAyB;IACzB,yBAAyB;IACzB,qBAAqB;IACrB,qBAAqB;IACrB,yBAAyB;IACzB,QAAQ;IACR,WAAW;IACX,UAAU;IACV,WAAW;IACX,QAAQ;IACR,MAAM;IACN,OAAO;IACP,QAAQ;IACR,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,kBAAkB;IAClB,kBAAkB;IAClB,OAAO;IACP,KAAK;IACL,IAAI;IACJ,aAAa;IACb,YAAY;IACZ,IAAI;IACJ,SAAS;IACT,cAAc;IACd,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,UAAU;IACV,WAAW;IACX,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,oBAAoB;IACpB,qBAAqB;CACtB,CAAC"}
|
package/dist/manifest.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type TypeNameOptions } from "./helpers/type-name-utils.js";
|
|
2
2
|
import type { Program, ProjectedProgram } from "./program.js";
|
|
3
|
-
import { BooleanLiteral, BooleanLiteralNode, Diagnostic, DiagnosticTarget, Entity, ErrorType, FunctionType, IdentifierNode, IntrinsicScalarName, JsSourceFileNode, LiteralNode, LiteralType, Model, ModelProperty, Namespace, NamespaceStatementNode, NeverType, Node, NullType, NumericLiteral, NumericLiteralNode, ProjectionNode, ProjectionStatementNode, Scalar, StdTypeName, StdTypes, StringLiteral, StringLiteralNode, Sym, Type, TypeReferenceNode, TypeSpecScriptNode, UnknownType, VoidType } from "./types.js";
|
|
3
|
+
import { BooleanLiteral, BooleanLiteralNode, Diagnostic, DiagnosticTarget, Entity, ErrorType, FunctionType, IdentifierNode, IntrinsicScalarName, JsSourceFileNode, LiteralNode, LiteralType, Model, ModelProperty, Namespace, NamespaceStatementNode, NeverType, Node, NullType, NumericLiteral, NumericLiteralNode, ProjectionNode, ProjectionStatementNode, Scalar, StdTypeName, StdTypes, StringLiteral, StringLiteralNode, Sym, Type, TypeReferenceNode, TypeSpecScriptNode, UnknownType, Value, VoidType } from "./types.js";
|
|
4
4
|
export type CreateTypeProps = Omit<Type, "isFinished" | "entityKind" | keyof TypePrototype>;
|
|
5
5
|
export interface Checker {
|
|
6
6
|
typePrototype: TypePrototype;
|
|
@@ -67,6 +67,16 @@ export interface Checker {
|
|
|
67
67
|
* @param name Name
|
|
68
68
|
*/
|
|
69
69
|
getStdType<T extends keyof StdTypes>(name: T): StdTypes[T];
|
|
70
|
+
/**
|
|
71
|
+
* Return the exact type of a value.
|
|
72
|
+
*
|
|
73
|
+
* ```tsp
|
|
74
|
+
* const a: string = "hello";
|
|
75
|
+
* ```
|
|
76
|
+
* calling `getValueExactType` on the value of a would give the string literal "hello".
|
|
77
|
+
* @param value
|
|
78
|
+
*/
|
|
79
|
+
getValueExactType(value: Value): Type | undefined;
|
|
70
80
|
/**
|
|
71
81
|
* Check and resolve a type for the given type reference node.
|
|
72
82
|
* @param node Node.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AA0BtC,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAe9D,OAAO,EAOL,cAAc,EACd,kBAAkB,EAYlB,UAAU,EACV,gBAAgB,EAEhB,MAAM,EAMN,SAAS,EAKT,YAAY,EAEZ,cAAc,EAKd,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,WAAW,EAQX,KAAK,EAGL,aAAa,EAIb,SAAS,EACT,sBAAsB,EACtB,SAAS,EACT,IAAI,EAEJ,QAAQ,EAER,cAAc,EACd,kBAAkB,EAsBlB,cAAc,EAGd,uBAAuB,EAIvB,MAAM,EAMN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,iBAAiB,EAUjB,GAAG,EAaH,IAAI,EAKJ,iBAAiB,EACjB,kBAAkB,EAMlB,WAAW,
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/checker.js
CHANGED
|
@@ -33,6 +33,7 @@ export function createChecker(program) {
|
|
|
33
33
|
const augmentDecoratorsForSym = new Map();
|
|
34
34
|
const augmentedSymbolTables = new Map();
|
|
35
35
|
const referenceSymCache = new WeakMap();
|
|
36
|
+
const valueExactTypes = new WeakMap();
|
|
36
37
|
let onCheckerDiagnostic = (x) => {
|
|
37
38
|
program.reportDiagnostic(x);
|
|
38
39
|
};
|
|
@@ -127,6 +128,7 @@ export function createChecker(program) {
|
|
|
127
128
|
resolveTypeReference,
|
|
128
129
|
getValueForNode,
|
|
129
130
|
getTypeOrValueForNode,
|
|
131
|
+
getValueExactType,
|
|
130
132
|
};
|
|
131
133
|
const projectionMembers = createProjectionMembers(checker);
|
|
132
134
|
return checker;
|
|
@@ -2947,13 +2949,13 @@ export function createChecker(program) {
|
|
|
2947
2949
|
if (constraint && !checkTypeOfValueMatchConstraint(preciseType, constraint, node)) {
|
|
2948
2950
|
return null;
|
|
2949
2951
|
}
|
|
2950
|
-
return {
|
|
2952
|
+
return createValue({
|
|
2951
2953
|
entityKind: "Value",
|
|
2952
2954
|
valueKind: "ObjectValue",
|
|
2953
2955
|
node: node,
|
|
2954
2956
|
properties,
|
|
2955
2957
|
type: constraint ? constraint.type : preciseType,
|
|
2956
|
-
};
|
|
2958
|
+
}, preciseType);
|
|
2957
2959
|
}
|
|
2958
2960
|
function createTypeForObjectValue(node, properties) {
|
|
2959
2961
|
const model = createType({
|
|
@@ -3032,13 +3034,25 @@ export function createChecker(program) {
|
|
|
3032
3034
|
if (constraint && !checkTypeOfValueMatchConstraint(preciseType, constraint, node)) {
|
|
3033
3035
|
return null;
|
|
3034
3036
|
}
|
|
3035
|
-
return {
|
|
3037
|
+
return createValue({
|
|
3036
3038
|
entityKind: "Value",
|
|
3037
3039
|
valueKind: "ArrayValue",
|
|
3038
3040
|
node: node,
|
|
3039
3041
|
values: values,
|
|
3040
3042
|
type: constraint ? constraint.type : preciseType,
|
|
3041
|
-
};
|
|
3043
|
+
}, preciseType);
|
|
3044
|
+
}
|
|
3045
|
+
function createValue(value, preciseType) {
|
|
3046
|
+
valueExactTypes.set(value, preciseType);
|
|
3047
|
+
return value;
|
|
3048
|
+
}
|
|
3049
|
+
function copyValue(value, overrides) {
|
|
3050
|
+
const newValue = { ...value, ...overrides };
|
|
3051
|
+
const preciseType = valueExactTypes.get(value);
|
|
3052
|
+
if (preciseType) {
|
|
3053
|
+
valueExactTypes.set(newValue, preciseType);
|
|
3054
|
+
}
|
|
3055
|
+
return newValue;
|
|
3042
3056
|
}
|
|
3043
3057
|
function createTypeForArrayValue(node, values) {
|
|
3044
3058
|
return createAndFinishType({
|
|
@@ -3102,61 +3116,61 @@ export function createChecker(program) {
|
|
|
3102
3116
|
value = literalType.value;
|
|
3103
3117
|
}
|
|
3104
3118
|
const scalar = inferScalarForPrimitiveValue(constraint?.type, literalType);
|
|
3105
|
-
return {
|
|
3119
|
+
return createValue({
|
|
3106
3120
|
entityKind: "Value",
|
|
3107
3121
|
valueKind: "StringValue",
|
|
3108
3122
|
value,
|
|
3109
3123
|
type: constraint ? constraint.type : literalType,
|
|
3110
3124
|
scalar,
|
|
3111
|
-
};
|
|
3125
|
+
}, literalType);
|
|
3112
3126
|
}
|
|
3113
3127
|
function checkNumericValue(literalType, constraint, node) {
|
|
3114
3128
|
if (constraint && !checkTypeOfValueMatchConstraint(literalType, constraint, node)) {
|
|
3115
3129
|
return null;
|
|
3116
3130
|
}
|
|
3117
3131
|
const scalar = inferScalarForPrimitiveValue(constraint?.type, literalType);
|
|
3118
|
-
return {
|
|
3132
|
+
return createValue({
|
|
3119
3133
|
entityKind: "Value",
|
|
3120
3134
|
valueKind: "NumericValue",
|
|
3121
3135
|
value: Numeric(literalType.valueAsString),
|
|
3122
3136
|
type: constraint ? constraint.type : literalType,
|
|
3123
3137
|
scalar,
|
|
3124
|
-
};
|
|
3138
|
+
}, literalType);
|
|
3125
3139
|
}
|
|
3126
3140
|
function checkBooleanValue(literalType, constraint, node) {
|
|
3127
3141
|
if (constraint && !checkTypeOfValueMatchConstraint(literalType, constraint, node)) {
|
|
3128
3142
|
return null;
|
|
3129
3143
|
}
|
|
3130
3144
|
const scalar = inferScalarForPrimitiveValue(constraint?.type, literalType);
|
|
3131
|
-
return {
|
|
3145
|
+
return createValue({
|
|
3132
3146
|
entityKind: "Value",
|
|
3133
3147
|
valueKind: "BooleanValue",
|
|
3134
3148
|
value: literalType.value,
|
|
3135
3149
|
type: constraint ? constraint.type : literalType,
|
|
3136
3150
|
scalar,
|
|
3137
|
-
};
|
|
3151
|
+
}, literalType);
|
|
3138
3152
|
}
|
|
3139
3153
|
function checkNullValue(literalType, constraint, node) {
|
|
3140
3154
|
if (constraint && !checkTypeOfValueMatchConstraint(literalType, constraint, node)) {
|
|
3141
3155
|
return null;
|
|
3142
3156
|
}
|
|
3143
|
-
return {
|
|
3157
|
+
return createValue({
|
|
3144
3158
|
entityKind: "Value",
|
|
3145
3159
|
valueKind: "NullValue",
|
|
3146
3160
|
type: constraint ? constraint.type : literalType,
|
|
3147
3161
|
value: null,
|
|
3148
|
-
};
|
|
3162
|
+
}, literalType);
|
|
3149
3163
|
}
|
|
3150
3164
|
function checkEnumValue(literalType, constraint, node) {
|
|
3151
3165
|
if (constraint && !checkTypeOfValueMatchConstraint(literalType, constraint, node)) {
|
|
3152
3166
|
return null;
|
|
3153
3167
|
}
|
|
3154
|
-
return {
|
|
3168
|
+
return createValue({
|
|
3155
3169
|
entityKind: "Value",
|
|
3156
3170
|
valueKind: "EnumValue",
|
|
3157
3171
|
type: constraint ? constraint.type : literalType,
|
|
3158
3172
|
value: literalType,
|
|
3159
|
-
};
|
|
3173
|
+
}, literalType);
|
|
3160
3174
|
}
|
|
3161
3175
|
function checkCallExpressionTarget(node, mapper) {
|
|
3162
3176
|
const target = checkTypeReference(node.target, mapper);
|
|
@@ -3198,7 +3212,7 @@ export function createChecker(program) {
|
|
|
3198
3212
|
if (!checkValueOfType(value, scalar, argNode)) {
|
|
3199
3213
|
return null;
|
|
3200
3214
|
}
|
|
3201
|
-
return
|
|
3215
|
+
return copyValue(value, { scalar, type: scalar });
|
|
3202
3216
|
}
|
|
3203
3217
|
function createScalarValue(node, mapper, declaration) {
|
|
3204
3218
|
let hasError = false;
|
|
@@ -4351,7 +4365,7 @@ export function createChecker(program) {
|
|
|
4351
4365
|
links.value = null;
|
|
4352
4366
|
return links.value;
|
|
4353
4367
|
}
|
|
4354
|
-
links.value = type ?
|
|
4368
|
+
links.value = type ? copyValue(value, { type }) : copyValue(value);
|
|
4355
4369
|
return links.value;
|
|
4356
4370
|
}
|
|
4357
4371
|
function inferScalarsFromConstraints(value, type) {
|
|
@@ -4361,7 +4375,7 @@ export function createChecker(program) {
|
|
|
4361
4375
|
case "NumericValue":
|
|
4362
4376
|
if (value.scalar === undefined) {
|
|
4363
4377
|
const scalar = inferScalarForPrimitiveValue(type, value.type);
|
|
4364
|
-
return
|
|
4378
|
+
return copyValue(value, { scalar });
|
|
4365
4379
|
}
|
|
4366
4380
|
return value;
|
|
4367
4381
|
case "ArrayValue":
|
|
@@ -6147,6 +6161,9 @@ export function createChecker(program) {
|
|
|
6147
6161
|
return stdType === undefined || stdType === type.name;
|
|
6148
6162
|
return false;
|
|
6149
6163
|
}
|
|
6164
|
+
function getValueExactType(value) {
|
|
6165
|
+
return valueExactTypes.get(value);
|
|
6166
|
+
}
|
|
6150
6167
|
}
|
|
6151
6168
|
function isAnonymous(type) {
|
|
6152
6169
|
return !("name" in type) || typeof type.name !== "string" || !type.name;
|