@typespec/compiler 0.48.0-dev.12 → 0.48.0-dev.14

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/manifest.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export default {
2
- "version": "0.48.0-dev.12",
3
- "commit": "adbfc89945e7d3d085f8eeefb7f81af560b84f05"
2
+ "version": "0.48.0-dev.14",
3
+ "commit": "46a0a0ad6109b187f27f42d4c570e67de2b7b17c"
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _PendingResolutions_data;
1
7
  import { $docFromComment, getIndexer } from "../lib/decorators.js";
2
8
  import { createSymbol, createSymbolTable } from "./binder.js";
3
9
  import { getDeprecationDetails, markDeprecated } from "./deprecation.js";
@@ -63,7 +69,7 @@ export function createChecker(program) {
63
69
  * Set keeping track of node pending type resolution.
64
70
  * Key is the SymId of a node. It can be retrieved with getNodeSymId(node)
65
71
  */
66
- const pendingResolutions = new Set();
72
+ const pendingResolutions = new PendingResolutions();
67
73
  for (const file of program.jsSourceFiles.values()) {
68
74
  mergeSourceFile(file);
69
75
  }
@@ -1175,14 +1181,14 @@ export function createChecker(program) {
1175
1181
  // Ensure that we don't end up with a circular reference to the same operation
1176
1182
  const opSymId = getNodeSymId(operation);
1177
1183
  if (opSymId) {
1178
- pendingResolutions.add(opSymId);
1184
+ pendingResolutions.start(opSymId, ResolutionKind.BaseType);
1179
1185
  }
1180
1186
  const target = resolveTypeReferenceSym(opReference, mapper);
1181
1187
  if (target === undefined) {
1182
1188
  return undefined;
1183
1189
  }
1184
1190
  // Did we encounter a circular operation reference?
1185
- if (pendingResolutions.has(getNodeSymId(target.declarations[0]))) {
1191
+ if (pendingResolutions.has(getNodeSymId(target.declarations[0]), ResolutionKind.BaseType)) {
1186
1192
  if (mapper === undefined) {
1187
1193
  reportCheckerDiagnostic(createDiagnostic({
1188
1194
  code: "circular-op-signature",
@@ -1195,7 +1201,7 @@ export function createChecker(program) {
1195
1201
  // Resolve the base operation type
1196
1202
  const baseOperation = checkTypeReferenceSymbol(target, opReference, mapper);
1197
1203
  if (opSymId) {
1198
- pendingResolutions.delete(opSymId);
1204
+ pendingResolutions.finish(opSymId, ResolutionKind.BaseType);
1199
1205
  }
1200
1206
  if (isErrorType(baseOperation)) {
1201
1207
  return undefined;
@@ -2153,12 +2159,12 @@ export function createChecker(program) {
2153
2159
  return undefined;
2154
2160
  }
2155
2161
  const modelSymId = getNodeSymId(model);
2156
- pendingResolutions.add(modelSymId);
2162
+ pendingResolutions.start(modelSymId, ResolutionKind.BaseType);
2157
2163
  const target = resolveTypeReferenceSym(heritageRef, mapper);
2158
2164
  if (target === undefined) {
2159
2165
  return undefined;
2160
2166
  }
2161
- if (pendingResolutions.has(getNodeSymId(target.declarations[0]))) {
2167
+ if (pendingResolutions.has(getNodeSymId(target.declarations[0]), ResolutionKind.BaseType)) {
2162
2168
  if (mapper === undefined) {
2163
2169
  reportCheckerDiagnostic(createDiagnostic({
2164
2170
  code: "circular-base-type",
@@ -2169,7 +2175,7 @@ export function createChecker(program) {
2169
2175
  return undefined;
2170
2176
  }
2171
2177
  const heritageType = checkTypeReferenceSymbol(target, heritageRef, mapper);
2172
- pendingResolutions.delete(modelSymId);
2178
+ pendingResolutions.finish(modelSymId, ResolutionKind.BaseType);
2173
2179
  if (isErrorType(heritageType)) {
2174
2180
  compilerAssert(program.hasError(), "Should already have reported an error.", heritageRef);
2175
2181
  return undefined;
@@ -2191,7 +2197,7 @@ export function createChecker(program) {
2191
2197
  if (!isExpr)
2192
2198
  return undefined;
2193
2199
  const modelSymId = getNodeSymId(model);
2194
- pendingResolutions.add(modelSymId);
2200
+ pendingResolutions.start(modelSymId, ResolutionKind.BaseType);
2195
2201
  let isType;
2196
2202
  if (isExpr.kind === SyntaxKind.ModelExpression) {
2197
2203
  reportCheckerDiagnostic(createDiagnostic({
@@ -2209,7 +2215,7 @@ export function createChecker(program) {
2209
2215
  if (target === undefined) {
2210
2216
  return undefined;
2211
2217
  }
2212
- if (pendingResolutions.has(getNodeSymId(target.declarations[0]))) {
2218
+ if (pendingResolutions.has(getNodeSymId(target.declarations[0]), ResolutionKind.BaseType)) {
2213
2219
  if (mapper === undefined) {
2214
2220
  reportCheckerDiagnostic(createDiagnostic({
2215
2221
  code: "circular-base-type",
@@ -2225,7 +2231,7 @@ export function createChecker(program) {
2225
2231
  reportCheckerDiagnostic(createDiagnostic({ code: "is-model", target: isExpr }));
2226
2232
  return undefined;
2227
2233
  }
2228
- pendingResolutions.delete(modelSymId);
2234
+ pendingResolutions.finish(modelSymId, ResolutionKind.BaseType);
2229
2235
  if (isType.kind !== "Model") {
2230
2236
  reportCheckerDiagnostic(createDiagnostic({ code: "is-model", target: isExpr }));
2231
2237
  return;
@@ -2279,24 +2285,35 @@ export function createChecker(program) {
2279
2285
  }
2280
2286
  function checkModelProperty(prop, mapper) {
2281
2287
  var _a, _b, _c;
2288
+ const symId = getSymbolId(getSymbolForMember(prop));
2282
2289
  const links = getSymbolLinksForMember(prop);
2283
2290
  if (links && links.declaredType && mapper === undefined) {
2284
2291
  return links.declaredType;
2285
2292
  }
2286
2293
  const name = prop.id.sv;
2287
- const valueType = getTypeForNode(prop.value, mapper);
2288
- const defaultValue = prop.default && checkDefault(prop.default, valueType);
2289
2294
  const type = createType({
2290
2295
  kind: "ModelProperty",
2291
2296
  name,
2292
2297
  node: prop,
2293
2298
  optional: prop.optional,
2294
- type: valueType,
2299
+ type: undefined,
2295
2300
  decorators: [],
2296
- default: defaultValue,
2297
2301
  });
2298
- if (links) {
2299
- linkType(links, type, mapper);
2302
+ if (pendingResolutions.has(symId, ResolutionKind.Type) && mapper === undefined) {
2303
+ reportCheckerDiagnostic(createDiagnostic({
2304
+ code: "circular-prop",
2305
+ format: { propName: name },
2306
+ target: prop,
2307
+ }));
2308
+ type.type = errorType;
2309
+ }
2310
+ else {
2311
+ pendingResolutions.start(symId, ResolutionKind.Type);
2312
+ type.type = getTypeForNode(prop.value, mapper);
2313
+ type.default = prop.default && checkDefault(prop.default, type.type);
2314
+ if (links) {
2315
+ linkType(links, type, mapper);
2316
+ }
2300
2317
  }
2301
2318
  type.decorators = checkDecorators(type, prop, mapper);
2302
2319
  const parentTemplate = getParentTemplateNode(prop);
@@ -2314,6 +2331,7 @@ export function createChecker(program) {
2314
2331
  }
2315
2332
  finishType(type);
2316
2333
  }
2334
+ pendingResolutions.finish(symId, ResolutionKind.Type);
2317
2335
  return type;
2318
2336
  }
2319
2337
  function isValueType(type) {
@@ -2569,12 +2587,12 @@ export function createChecker(program) {
2569
2587
  }
2570
2588
  function checkScalarExtends(scalar, extendsRef, mapper) {
2571
2589
  const symId = getNodeSymId(scalar);
2572
- pendingResolutions.add(symId);
2590
+ pendingResolutions.start(symId, ResolutionKind.BaseType);
2573
2591
  const target = resolveTypeReferenceSym(extendsRef, mapper);
2574
2592
  if (target === undefined) {
2575
2593
  return undefined;
2576
2594
  }
2577
- if (pendingResolutions.has(getNodeSymId(target.declarations[0]))) {
2595
+ if (pendingResolutions.has(getNodeSymId(target.declarations[0]), ResolutionKind.BaseType)) {
2578
2596
  if (mapper === undefined) {
2579
2597
  reportCheckerDiagnostic(createDiagnostic({
2580
2598
  code: "circular-base-type",
@@ -2585,7 +2603,7 @@ export function createChecker(program) {
2585
2603
  return undefined;
2586
2604
  }
2587
2605
  const extendsType = checkTypeReferenceSymbol(target, extendsRef, mapper);
2588
- pendingResolutions.delete(symId);
2606
+ pendingResolutions.finish(symId, ResolutionKind.BaseType);
2589
2607
  if (isErrorType(extendsType)) {
2590
2608
  compilerAssert(program.hasError(), "Should already have reported an error.", extendsRef);
2591
2609
  return undefined;
@@ -2603,7 +2621,7 @@ export function createChecker(program) {
2603
2621
  }
2604
2622
  checkTemplateDeclaration(node, mapper);
2605
2623
  const aliasSymId = getNodeSymId(node);
2606
- if (pendingResolutions.has(aliasSymId)) {
2624
+ if (pendingResolutions.has(aliasSymId, ResolutionKind.Type)) {
2607
2625
  if (mapper === undefined) {
2608
2626
  reportCheckerDiagnostic(createDiagnostic({
2609
2627
  code: "circular-alias-type",
@@ -2614,10 +2632,10 @@ export function createChecker(program) {
2614
2632
  links.declaredType = errorType;
2615
2633
  return errorType;
2616
2634
  }
2617
- pendingResolutions.add(aliasSymId);
2635
+ pendingResolutions.start(aliasSymId, ResolutionKind.Type);
2618
2636
  const type = getTypeForNode(node.value, mapper);
2619
2637
  linkType(links, type, mapper);
2620
- pendingResolutions.delete(aliasSymId);
2638
+ pendingResolutions.finish(aliasSymId, ResolutionKind.Type);
2621
2639
  return type;
2622
2640
  }
2623
2641
  function checkEnum(node, mapper) {
@@ -4536,6 +4554,39 @@ const ReflectionNameToKind = {
4536
4554
  UnionVariant: "UnionVariant",
4537
4555
  };
4538
4556
  const _assertReflectionNameToKind = ReflectionNameToKind;
4557
+ var ResolutionKind;
4558
+ (function (ResolutionKind) {
4559
+ ResolutionKind[ResolutionKind["Type"] = 0] = "Type";
4560
+ ResolutionKind[ResolutionKind["BaseType"] = 1] = "BaseType";
4561
+ })(ResolutionKind || (ResolutionKind = {}));
4562
+ class PendingResolutions {
4563
+ constructor() {
4564
+ _PendingResolutions_data.set(this, new Map());
4565
+ }
4566
+ start(symId, kind) {
4567
+ let existing = __classPrivateFieldGet(this, _PendingResolutions_data, "f").get(symId);
4568
+ if (existing === undefined) {
4569
+ existing = new Set();
4570
+ __classPrivateFieldGet(this, _PendingResolutions_data, "f").set(symId, existing);
4571
+ }
4572
+ existing.add(kind);
4573
+ }
4574
+ has(symId, kind) {
4575
+ var _a, _b;
4576
+ return (_b = (_a = __classPrivateFieldGet(this, _PendingResolutions_data, "f").get(symId)) === null || _a === void 0 ? void 0 : _a.has(kind)) !== null && _b !== void 0 ? _b : false;
4577
+ }
4578
+ finish(symId, kind) {
4579
+ const existing = __classPrivateFieldGet(this, _PendingResolutions_data, "f").get(symId);
4580
+ if (existing === undefined) {
4581
+ return;
4582
+ }
4583
+ existing === null || existing === void 0 ? void 0 : existing.delete(kind);
4584
+ if (existing.size === 0) {
4585
+ __classPrivateFieldGet(this, _PendingResolutions_data, "f").delete(symId);
4586
+ }
4587
+ }
4588
+ }
4589
+ _PendingResolutions_data = new WeakMap();
4539
4590
  var Related;
4540
4591
  (function (Related) {
4541
4592
  Related[Related["false"] = 0] = "false";