@typespec/compiler 0.60.0-dev.1 → 0.60.0-dev.11

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 (53) hide show
  1. package/dist/generated-defs/TypeSpec.d.ts +44 -0
  2. package/dist/generated-defs/TypeSpec.d.ts.map +1 -1
  3. package/dist/generated-defs/TypeSpec.ts-test.js +2 -45
  4. package/dist/generated-defs/TypeSpec.ts-test.js.map +1 -1
  5. package/dist/manifest.js +2 -2
  6. package/dist/src/config/config-loader.js +7 -7
  7. package/dist/src/config/config-loader.js.map +1 -1
  8. package/dist/src/core/binder.d.ts.map +1 -1
  9. package/dist/src/core/binder.js +58 -47
  10. package/dist/src/core/binder.js.map +1 -1
  11. package/dist/src/core/checker.d.ts.map +1 -1
  12. package/dist/src/core/checker.js +27 -578
  13. package/dist/src/core/checker.js.map +1 -1
  14. package/dist/src/core/diagnostics.d.ts.map +1 -1
  15. package/dist/src/core/diagnostics.js +2 -0
  16. package/dist/src/core/diagnostics.js.map +1 -1
  17. package/dist/src/core/linter.d.ts.map +1 -1
  18. package/dist/src/core/linter.js +1 -0
  19. package/dist/src/core/linter.js.map +1 -1
  20. package/dist/src/core/logger/console-sink.d.ts.map +1 -1
  21. package/dist/src/core/logger/console-sink.js +9 -1
  22. package/dist/src/core/logger/console-sink.js.map +1 -1
  23. package/dist/src/core/logger/support-hyperlinks.d.ts +5 -0
  24. package/dist/src/core/logger/support-hyperlinks.d.ts.map +1 -0
  25. package/dist/src/core/logger/support-hyperlinks.js +76 -0
  26. package/dist/src/core/logger/support-hyperlinks.js.map +1 -0
  27. package/dist/src/core/numeric.js +2 -0
  28. package/dist/src/core/numeric.js.map +1 -1
  29. package/dist/src/core/schema-validator.d.ts.map +1 -1
  30. package/dist/src/core/schema-validator.js +8 -18
  31. package/dist/src/core/schema-validator.js.map +1 -1
  32. package/dist/src/core/type-relation-checker.d.ts +32 -0
  33. package/dist/src/core/type-relation-checker.d.ts.map +1 -0
  34. package/dist/src/core/type-relation-checker.js +580 -0
  35. package/dist/src/core/type-relation-checker.js.map +1 -0
  36. package/dist/src/core/types.d.ts +20 -0
  37. package/dist/src/core/types.d.ts.map +1 -1
  38. package/dist/src/core/types.js.map +1 -1
  39. package/dist/src/index.js +2 -0
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/lib/examples.d.ts.map +1 -1
  42. package/dist/src/lib/examples.js +2 -1
  43. package/dist/src/lib/examples.js.map +1 -1
  44. package/dist/src/lib/tsp-index.d.ts +3 -0
  45. package/dist/src/lib/tsp-index.d.ts.map +1 -0
  46. package/dist/src/lib/tsp-index.js +53 -0
  47. package/dist/src/lib/tsp-index.js.map +1 -0
  48. package/dist/src/server/serverlib.d.ts.map +1 -1
  49. package/dist/src/server/serverlib.js +23 -1
  50. package/dist/src/server/serverlib.js.map +1 -1
  51. package/lib/std/decorators.tsp +1 -1
  52. package/package.json +1 -1
  53. package/templates/scaffolding.json +4 -4
@@ -0,0 +1,580 @@
1
+ import { MultiKeyMap } from "../utils/misc.js";
2
+ import { walkPropertiesInherited } from "./checker.js";
3
+ import { compilerAssert, reportDeprecated } from "./diagnostics.js";
4
+ import { getEntityName, getTypeName } from "./helpers/type-name-utils.js";
5
+ import { getMaxItems, getMaxLength, getMaxValueAsNumeric, getMaxValueExclusiveAsNumeric, getMinItems, getMinLength, getMinValueAsNumeric, getMinValueExclusiveAsNumeric, } from "./intrinsic-type-state.js";
6
+ import { createDiagnostic } from "./messages.js";
7
+ import { numericRanges } from "./numeric-ranges.js";
8
+ import { isArrayModelType, isNeverType, isUnknownType, isValue, isVoidType } from "./type-utils.js";
9
+ import { SyntaxKind, } from "./types.js";
10
+ var Related;
11
+ (function (Related) {
12
+ Related[Related["false"] = 0] = "false";
13
+ Related[Related["true"] = 1] = "true";
14
+ Related[Related["maybe"] = 2] = "maybe";
15
+ })(Related || (Related = {}));
16
+ /**
17
+ * Mapping from the reflection models to Type["kind"] value
18
+ */
19
+ const ReflectionNameToKind = {
20
+ Enum: "Enum",
21
+ EnumMember: "EnumMember",
22
+ Interface: "Interface",
23
+ Model: "Model",
24
+ ModelProperty: "ModelProperty",
25
+ Namespace: "Namespace",
26
+ Operation: "Operation",
27
+ Scalar: "Scalar",
28
+ TemplateParameter: "TemplateParameter",
29
+ Tuple: "Tuple",
30
+ Union: "Union",
31
+ UnionVariant: "UnionVariant",
32
+ };
33
+ const _assertReflectionNameToKind = ReflectionNameToKind;
34
+ export function createTypeRelationChecker(program, checker) {
35
+ return {
36
+ isTypeAssignableTo,
37
+ isValueOfType,
38
+ isReflectionType,
39
+ areScalarsRelated,
40
+ };
41
+ /**
42
+ * Check if the source type can be assigned to the target type.
43
+ * @param source Source type
44
+ * @param target Target type
45
+ * @param diagnosticTarget Target for the diagnostic, unless something better can be inferred.
46
+ */
47
+ function isTypeAssignableTo(source, target, diagnosticTarget) {
48
+ const [related, diagnostics] = isTypeAssignableToInternal(source, target, diagnosticTarget, new MultiKeyMap());
49
+ return [related === Related.true, diagnostics];
50
+ }
51
+ /**
52
+ * Check if the given Value type is of the given type.
53
+ * @param source Value
54
+ * @param target Target type
55
+ * @param diagnosticTarget Target for the diagnostic, unless something better can be inferred.
56
+ */
57
+ function isValueOfType(source, target, diagnosticTarget) {
58
+ const [related, diagnostics] = isValueOfTypeInternal(source, target, diagnosticTarget, new MultiKeyMap());
59
+ return [related === Related.true, diagnostics];
60
+ }
61
+ function isTypeAssignableToInternal(source, target, diagnosticTarget, relationCache) {
62
+ const cached = relationCache.get([source, target]);
63
+ if (cached !== undefined) {
64
+ return [cached, []];
65
+ }
66
+ const [result, diagnostics] = isTypeAssignableToWorker(source, target, diagnosticTarget, new MultiKeyMap());
67
+ relationCache.set([source, target], result);
68
+ return [result, diagnostics];
69
+ }
70
+ function isTypeAssignableToWorker(source, target, diagnosticTarget, relationCache) {
71
+ // BACKCOMPAT: Allow certain type to be accepted as values
72
+ if ("kind" in source &&
73
+ "entityKind" in target &&
74
+ source.kind === "TemplateParameter" &&
75
+ source.constraint?.type &&
76
+ source.constraint.valueType === undefined &&
77
+ target.entityKind === "MixedParameterConstraint" &&
78
+ target.valueType) {
79
+ const [assignable] = isTypeAssignableToInternal(source.constraint.type, target.valueType, diagnosticTarget, relationCache);
80
+ if (assignable) {
81
+ const constraint = getEntityName(source.constraint);
82
+ reportDeprecated(program, `Template constrainted to '${constraint}' will not be assignable to '${getEntityName(target)}' in the future. Update the constraint to be 'valueof ${constraint}'`, diagnosticTarget);
83
+ return [Related.true, []];
84
+ }
85
+ }
86
+ if ("kind" in source && source.kind === "TemplateParameter") {
87
+ source = source.constraint ?? checker.anyType;
88
+ }
89
+ if (target.entityKind === "Indeterminate") {
90
+ target = target.type;
91
+ }
92
+ if (source === target)
93
+ return [Related.true, []];
94
+ if (isValue(target)) {
95
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
96
+ }
97
+ if (source.entityKind === "Indeterminate") {
98
+ return isIndeterminateEntityAssignableTo(source, target, diagnosticTarget, relationCache);
99
+ }
100
+ if (target.entityKind === "MixedParameterConstraint") {
101
+ return isAssignableToMixedParameterConstraint(source, target, diagnosticTarget, relationCache);
102
+ }
103
+ if (isValue(source) || (source.entityKind === "MixedParameterConstraint" && source.valueType)) {
104
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
105
+ }
106
+ if (source.entityKind === "MixedParameterConstraint") {
107
+ return isTypeAssignableToInternal(source.type, target, diagnosticTarget, relationCache);
108
+ }
109
+ const isSimpleTypeRelated = isSimpleTypeAssignableTo(source, target);
110
+ if (isSimpleTypeRelated === true) {
111
+ return [Related.true, []];
112
+ }
113
+ else if (isSimpleTypeRelated === false) {
114
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
115
+ }
116
+ if (source.kind === "Union") {
117
+ for (const variant of source.variants.values()) {
118
+ const [variantAssignable] = isTypeAssignableToInternal(variant.type, target, diagnosticTarget, relationCache);
119
+ if (!variantAssignable) {
120
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
121
+ }
122
+ }
123
+ return [Related.true, []];
124
+ }
125
+ if (target.kind === "Model" &&
126
+ source.kind === "Model" &&
127
+ target.name !== "object" &&
128
+ target.indexer === undefined &&
129
+ source.indexer &&
130
+ source.indexer.key.name === "integer") {
131
+ return [
132
+ Related.false,
133
+ [
134
+ createDiagnostic({
135
+ code: "missing-index",
136
+ format: {
137
+ indexType: getTypeName(source.indexer.key),
138
+ sourceType: getTypeName(target),
139
+ },
140
+ target: diagnosticTarget,
141
+ }),
142
+ ],
143
+ ];
144
+ }
145
+ else if (target.kind === "Model" &&
146
+ isArrayModelType(program, target) &&
147
+ source.kind === "Model") {
148
+ if (isArrayModelType(program, source)) {
149
+ return hasIndexAndIsAssignableTo(source, target, diagnosticTarget, relationCache);
150
+ }
151
+ else {
152
+ // For other models just fallback to unassignable
153
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
154
+ }
155
+ }
156
+ else if (target.kind === "Model" && source.kind === "Model") {
157
+ return isModelRelatedTo(source, target, diagnosticTarget, relationCache);
158
+ }
159
+ else if (target.kind === "Model" &&
160
+ isArrayModelType(program, target) &&
161
+ source.kind === "Tuple") {
162
+ return isTupleAssignableToArray(source, target, diagnosticTarget, relationCache);
163
+ }
164
+ else if (target.kind === "Tuple" && source.kind === "Tuple") {
165
+ return isTupleAssignableToTuple(source, target, diagnosticTarget, relationCache);
166
+ }
167
+ else if (target.kind === "Union") {
168
+ return isAssignableToUnion(source, target, diagnosticTarget, relationCache);
169
+ }
170
+ else if (target.kind === "Enum") {
171
+ return isAssignableToEnum(source, target, diagnosticTarget);
172
+ }
173
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
174
+ }
175
+ function isIndeterminateEntityAssignableTo(indeterminate, target, diagnosticTarget, relationCache) {
176
+ const [typeRelated, typeDiagnostics] = isTypeAssignableToInternal(indeterminate.type, target, diagnosticTarget, relationCache);
177
+ if (typeRelated) {
178
+ return [Related.true, []];
179
+ }
180
+ if (target.entityKind === "MixedParameterConstraint" && target.valueType) {
181
+ const [valueRelated] = isTypeAssignableToInternal(indeterminate.type, target.valueType, diagnosticTarget, relationCache);
182
+ if (valueRelated) {
183
+ return [Related.true, []];
184
+ }
185
+ }
186
+ return [Related.false, typeDiagnostics];
187
+ }
188
+ function isAssignableToValueType(source, target, diagnosticTarget, relationCache) {
189
+ if (!isValue(source)) {
190
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
191
+ }
192
+ return isValueOfTypeInternal(source, target, diagnosticTarget, relationCache);
193
+ }
194
+ function isAssignableToMixedParameterConstraint(source, target, diagnosticTarget, relationCache) {
195
+ if ("entityKind" in source && source.entityKind === "MixedParameterConstraint") {
196
+ if (source.type && target.type) {
197
+ const [variantAssignable, diagnostics] = isTypeAssignableToInternal(source.type, target.type, diagnosticTarget, relationCache);
198
+ if (variantAssignable === Related.false) {
199
+ return [Related.false, diagnostics];
200
+ }
201
+ return [Related.true, []];
202
+ }
203
+ if (source.valueType && target.valueType) {
204
+ const [variantAssignable, diagnostics] = isTypeAssignableToInternal(source.valueType, target.valueType, diagnosticTarget, relationCache);
205
+ if (variantAssignable === Related.false) {
206
+ return [Related.false, diagnostics];
207
+ }
208
+ return [Related.true, []];
209
+ }
210
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
211
+ }
212
+ if (target.type) {
213
+ const [related] = isTypeAssignableToInternal(source, target.type, diagnosticTarget, relationCache);
214
+ if (related) {
215
+ return [Related.true, []];
216
+ }
217
+ }
218
+ if (target.valueType) {
219
+ const [related] = isAssignableToValueType(source, target.valueType, diagnosticTarget, relationCache);
220
+ if (related) {
221
+ return [Related.true, []];
222
+ }
223
+ }
224
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
225
+ }
226
+ /** Check if the value is assignable to the given type. */
227
+ function isValueOfTypeInternal(source, target, diagnosticTarget, relationCache) {
228
+ return isTypeAssignableToInternal(source.type, target, diagnosticTarget, relationCache);
229
+ }
230
+ function isReflectionType(type) {
231
+ return (type.kind === "Model" &&
232
+ type.namespace?.name === "Reflection" &&
233
+ type.namespace?.namespace?.name === "TypeSpec");
234
+ }
235
+ function isRelatedToScalar(source, target) {
236
+ switch (source.kind) {
237
+ case "Number":
238
+ return isNumericLiteralRelatedTo(source, target);
239
+ case "String":
240
+ case "StringTemplate":
241
+ return isStringLiteralRelatedTo(source, target);
242
+ case "Boolean":
243
+ return areScalarsRelated(target, checker.getStdType("boolean"));
244
+ case "Scalar":
245
+ return areScalarsRelated(source, target);
246
+ case "Union":
247
+ return undefined;
248
+ default:
249
+ return false;
250
+ }
251
+ }
252
+ function areScalarsRelated(source, target) {
253
+ let current = source;
254
+ while (current) {
255
+ if (current === target) {
256
+ return true;
257
+ }
258
+ current = current.baseScalar;
259
+ }
260
+ return false;
261
+ }
262
+ function isSimpleTypeAssignableTo(source, target) {
263
+ if (isNeverType(source))
264
+ return true;
265
+ if (isVoidType(target))
266
+ return false;
267
+ if (isUnknownType(target))
268
+ return true;
269
+ if (isReflectionType(target)) {
270
+ return source.kind === ReflectionNameToKind[target.name];
271
+ }
272
+ if (target.kind === "Scalar") {
273
+ return isRelatedToScalar(source, target);
274
+ }
275
+ if (source.kind === "Scalar" && target.kind === "Model") {
276
+ return false;
277
+ }
278
+ if (target.kind === "String") {
279
+ return ((source.kind === "String" && source.value === target.value) ||
280
+ (source.kind === "StringTemplate" && source.stringValue === target.value));
281
+ }
282
+ if (target.kind === "StringTemplate" && target.stringValue) {
283
+ return ((source.kind === "String" && source.value === target.stringValue) ||
284
+ (source.kind === "StringTemplate" && source.stringValue === target.stringValue));
285
+ }
286
+ if (target.kind === "Number") {
287
+ return source.kind === "Number" && target.value === source.value;
288
+ }
289
+ return undefined;
290
+ }
291
+ function isNumericLiteralRelatedTo(source, target) {
292
+ // First check that the source numeric literal is assignable to the target scalar
293
+ if (!isNumericAssignableToNumericScalar(source.numericValue, target)) {
294
+ return false;
295
+ }
296
+ const min = getMinValueAsNumeric(program, target);
297
+ const max = getMaxValueAsNumeric(program, target);
298
+ const minExclusive = getMinValueExclusiveAsNumeric(program, target);
299
+ const maxExclusive = getMaxValueExclusiveAsNumeric(program, target);
300
+ if (min && source.numericValue.lt(min)) {
301
+ return false;
302
+ }
303
+ if (minExclusive && source.numericValue.lte(minExclusive)) {
304
+ return false;
305
+ }
306
+ if (max && source.numericValue.gt(max)) {
307
+ return false;
308
+ }
309
+ if (maxExclusive && source.numericValue.gte(maxExclusive)) {
310
+ return false;
311
+ }
312
+ return true;
313
+ }
314
+ function isNumericAssignableToNumericScalar(source, target) {
315
+ // if the target does not derive from numeric, then it can't be assigned a numeric literal
316
+ if (!areScalarsRelated(target.projectionBase ?? target, checker.getStdType("numeric"))) {
317
+ return false;
318
+ }
319
+ // With respect to literal assignability a custom numeric scalar is
320
+ // equivalent to its nearest TypeSpec.* base. Adjust target accordingly.
321
+ while (!target.namespace || !isTypeSpecNamespace(target.namespace)) {
322
+ compilerAssert(target.baseScalar, "Should not be possible to be derived from TypeSpec.numeric and not have a base when not in TypeSpec namespace.");
323
+ target = target.baseScalar;
324
+ }
325
+ if (target.name === "numeric")
326
+ return true;
327
+ if (target.name === "decimal")
328
+ return true;
329
+ if (target.name === "decimal128")
330
+ return true;
331
+ const isInt = source.isInteger;
332
+ if (target.name === "integer")
333
+ return isInt;
334
+ if (target.name === "float")
335
+ return true;
336
+ if (!(target.name in numericRanges))
337
+ return false;
338
+ const [low, high, options] = numericRanges[target.name];
339
+ return source.gte(low) && source.lte(high) && (!options.int || isInt);
340
+ }
341
+ function isStringLiteralRelatedTo(source, target) {
342
+ if (!areScalarsRelated(target.projectionBase ?? target, checker.getStdType("string"))) {
343
+ return false;
344
+ }
345
+ if (source.kind === "StringTemplate") {
346
+ return true;
347
+ }
348
+ const len = source.value.length;
349
+ const min = getMinLength(program, target);
350
+ const max = getMaxLength(program, target);
351
+ if (min && len < min) {
352
+ return false;
353
+ }
354
+ if (max && len > max) {
355
+ return false;
356
+ }
357
+ return true;
358
+ }
359
+ function isModelRelatedTo(source, target, diagnosticTarget, relationCache) {
360
+ relationCache.set([source, target], Related.maybe);
361
+ const diagnostics = [];
362
+ const remainingProperties = new Map(source.properties);
363
+ for (const prop of walkPropertiesInherited(target)) {
364
+ const sourceProperty = getProperty(source, prop.name);
365
+ if (sourceProperty === undefined) {
366
+ if (!prop.optional) {
367
+ diagnostics.push(createDiagnostic({
368
+ code: "missing-property",
369
+ format: {
370
+ propertyName: prop.name,
371
+ sourceType: getTypeName(source),
372
+ targetType: getTypeName(target),
373
+ },
374
+ target: source,
375
+ }));
376
+ }
377
+ }
378
+ else {
379
+ remainingProperties.delete(prop.name);
380
+ if (sourceProperty.optional && !prop.optional) {
381
+ diagnostics.push(createDiagnostic({
382
+ code: "property-required",
383
+ format: {
384
+ propName: prop.name,
385
+ targetType: getTypeName(target),
386
+ },
387
+ target: diagnosticTarget,
388
+ }));
389
+ }
390
+ const [related, propDiagnostics] = isTypeAssignableToInternal(sourceProperty.type, prop.type, diagnosticTarget, relationCache);
391
+ if (!related) {
392
+ diagnostics.push(...propDiagnostics);
393
+ }
394
+ }
395
+ }
396
+ if (target.indexer) {
397
+ const [_, indexerDiagnostics] = arePropertiesAssignableToIndexer(remainingProperties, target.indexer.value, diagnosticTarget, relationCache);
398
+ diagnostics.push(...indexerDiagnostics);
399
+ // For anonymous models we don't need an indexer
400
+ if (source.name !== "" && target.indexer.key.name !== "integer") {
401
+ const [related, indexDiagnostics] = hasIndexAndIsAssignableTo(source, target, diagnosticTarget, relationCache);
402
+ if (!related) {
403
+ diagnostics.push(...indexDiagnostics);
404
+ }
405
+ }
406
+ }
407
+ else if (shouldCheckExcessProperties(source)) {
408
+ for (const [propName, prop] of remainingProperties) {
409
+ if (shouldCheckExcessProperty(prop)) {
410
+ diagnostics.push(createDiagnostic({
411
+ code: "unexpected-property",
412
+ format: {
413
+ propertyName: propName,
414
+ type: getEntityName(target),
415
+ },
416
+ target: prop,
417
+ }));
418
+ }
419
+ }
420
+ }
421
+ return [diagnostics.length === 0 ? Related.true : Related.false, diagnostics];
422
+ }
423
+ /** If we should check for excess properties on the given model. */
424
+ function shouldCheckExcessProperties(model) {
425
+ return model.node?.kind === SyntaxKind.ObjectLiteral;
426
+ }
427
+ /** If we should check for this specific property */
428
+ function shouldCheckExcessProperty(prop) {
429
+ return (prop.node?.kind === SyntaxKind.ObjectLiteralProperty && prop.node.parent === prop.model?.node);
430
+ }
431
+ function getProperty(model, name) {
432
+ return (model.properties.get(name) ??
433
+ (model.baseModel !== undefined ? getProperty(model.baseModel, name) : undefined));
434
+ }
435
+ function arePropertiesAssignableToIndexer(properties, indexerConstaint, diagnosticTarget, relationCache) {
436
+ for (const prop of properties.values()) {
437
+ const [related, diagnostics] = isTypeAssignableToInternal(prop.type, indexerConstaint, diagnosticTarget, relationCache);
438
+ if (!related) {
439
+ return [Related.false, diagnostics];
440
+ }
441
+ }
442
+ return [Related.true, []];
443
+ }
444
+ /** Check that the source model has an index, the index key match and the value of the source index is assignable to the target index. */
445
+ function hasIndexAndIsAssignableTo(source, target, diagnosticTarget, relationCache) {
446
+ if (source.indexer === undefined || source.indexer.key !== target.indexer.key) {
447
+ return [
448
+ Related.false,
449
+ [
450
+ createDiagnostic({
451
+ code: "missing-index",
452
+ format: {
453
+ indexType: getTypeName(target.indexer.key),
454
+ sourceType: getTypeName(source),
455
+ },
456
+ target: diagnosticTarget,
457
+ }),
458
+ ],
459
+ ];
460
+ }
461
+ return isTypeAssignableToInternal(source.indexer.value, target.indexer.value, diagnosticTarget, relationCache);
462
+ }
463
+ function isTupleAssignableToArray(source, target, diagnosticTarget, relationCache) {
464
+ const minItems = getMinItems(program, target);
465
+ const maxItems = getMaxItems(program, target);
466
+ if (minItems !== undefined && source.values.length < minItems) {
467
+ return [
468
+ Related.false,
469
+ [
470
+ createDiagnostic({
471
+ code: "unassignable",
472
+ messageId: "withDetails",
473
+ format: {
474
+ sourceType: getEntityName(source),
475
+ targetType: getTypeName(target),
476
+ details: `Source has ${source.values.length} element(s) but target requires ${minItems}.`,
477
+ },
478
+ target: diagnosticTarget,
479
+ }),
480
+ ],
481
+ ];
482
+ }
483
+ if (maxItems !== undefined && source.values.length > maxItems) {
484
+ return [
485
+ Related.false,
486
+ [
487
+ createDiagnostic({
488
+ code: "unassignable",
489
+ messageId: "withDetails",
490
+ format: {
491
+ sourceType: getEntityName(source),
492
+ targetType: getTypeName(target),
493
+ details: `Source has ${source.values.length} element(s) but target only allows ${maxItems}.`,
494
+ },
495
+ target: diagnosticTarget,
496
+ }),
497
+ ],
498
+ ];
499
+ }
500
+ for (const item of source.values) {
501
+ const [related, diagnostics] = isTypeAssignableToInternal(item, target.indexer.value, diagnosticTarget, relationCache);
502
+ if (!related) {
503
+ return [Related.false, diagnostics];
504
+ }
505
+ }
506
+ return [Related.true, []];
507
+ }
508
+ function isTupleAssignableToTuple(source, target, diagnosticTarget, relationCache) {
509
+ if (source.values.length !== target.values.length) {
510
+ return [
511
+ Related.false,
512
+ [
513
+ createDiagnostic({
514
+ code: "unassignable",
515
+ messageId: "withDetails",
516
+ format: {
517
+ sourceType: getEntityName(source),
518
+ targetType: getTypeName(target),
519
+ details: `Source has ${source.values.length} element(s) but target requires ${target.values.length}.`,
520
+ },
521
+ target: diagnosticTarget,
522
+ }),
523
+ ],
524
+ ];
525
+ }
526
+ for (const [index, sourceItem] of source.values.entries()) {
527
+ const targetItem = target.values[index];
528
+ const [related, diagnostics] = isTypeAssignableToInternal(sourceItem, targetItem, diagnosticTarget, relationCache);
529
+ if (!related) {
530
+ return [Related.false, diagnostics];
531
+ }
532
+ }
533
+ return [Related.true, []];
534
+ }
535
+ function isAssignableToUnion(source, target, diagnosticTarget, relationCache) {
536
+ if (source.kind === "UnionVariant" && source.union === target) {
537
+ return [Related.true, []];
538
+ }
539
+ for (const option of target.variants.values()) {
540
+ const [related] = isTypeAssignableToInternal(source, option.type, diagnosticTarget, relationCache);
541
+ if (related) {
542
+ return [Related.true, []];
543
+ }
544
+ }
545
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
546
+ }
547
+ function isAssignableToEnum(source, target, diagnosticTarget) {
548
+ switch (source.kind) {
549
+ case "Enum":
550
+ if (source === target) {
551
+ return [Related.true, []];
552
+ }
553
+ else {
554
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
555
+ }
556
+ case "EnumMember":
557
+ if (source.enum === target) {
558
+ return [Related.true, []];
559
+ }
560
+ else {
561
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
562
+ }
563
+ default:
564
+ return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
565
+ }
566
+ }
567
+ function createUnassignableDiagnostic(source, target, diagnosticTarget) {
568
+ return createDiagnostic({
569
+ code: "unassignable",
570
+ format: { targetType: getEntityName(target), value: getEntityName(source) },
571
+ target: diagnosticTarget,
572
+ });
573
+ }
574
+ function isTypeSpecNamespace(namespace) {
575
+ return (namespace.name === "TypeSpec" &&
576
+ (namespace.namespace === checker.getGlobalNamespaceType() ||
577
+ namespace.namespace?.projectionBase === checker.getGlobalNamespaceType()));
578
+ }
579
+ }
580
+ //# sourceMappingURL=type-relation-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-relation-checker.js","sourceRoot":"","sources":["../../../src/core/type-relation-checker.ts"],"names":[],"mappings":"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"}
@@ -1777,6 +1777,24 @@ export interface TypeSpecLibraryDef<T extends {
1777
1777
  readonly linter?: LinterDefinition;
1778
1778
  readonly state?: Record<State, StateDef>;
1779
1779
  }
1780
+ /**
1781
+ * Type for the $decorators export from libraries.
1782
+ *
1783
+ * @example
1784
+ * ```
1785
+ * export const $decorators = {
1786
+ * "Azure.Core": {
1787
+ * flags: $flags,
1788
+ * "foo-bar": fooBarDecorator
1789
+ * }
1790
+ * }
1791
+ * ```
1792
+ */
1793
+ export interface DecoratorImplementations {
1794
+ readonly [namespace: string]: {
1795
+ readonly [name: string]: DecoratorFunction;
1796
+ };
1797
+ }
1780
1798
  export interface PackageFlags {
1781
1799
  /**
1782
1800
  * Decorator arg marshalling algorithm. Specify how TypeSpec values are marshalled to decorator arguments.
@@ -1929,6 +1947,8 @@ export interface ProcessedLog {
1929
1947
  level: LogLevel;
1930
1948
  message: string;
1931
1949
  code?: string;
1950
+ /** Documentation for the error code. */
1951
+ url?: string;
1932
1952
  sourceLocation?: SourceLocation;
1933
1953
  }
1934
1954
  export interface LogSink {