@typespec/compiler 0.49.0-dev.8 → 0.49.0

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 (59) hide show
  1. package/dist/manifest.js +2 -2
  2. package/dist/src/config/config-to-options.d.ts +13 -5
  3. package/dist/src/config/config-to-options.d.ts.map +1 -1
  4. package/dist/src/config/config-to-options.js +18 -6
  5. package/dist/src/config/config-to-options.js.map +1 -1
  6. package/dist/src/core/checker.d.ts.map +1 -1
  7. package/dist/src/core/checker.js +87 -18
  8. package/dist/src/core/checker.js.map +1 -1
  9. package/dist/src/core/cli/actions/format.d.ts.map +1 -1
  10. package/dist/src/core/cli/actions/format.js +6 -1
  11. package/dist/src/core/cli/actions/format.js.map +1 -1
  12. package/dist/src/core/decorator-utils.d.ts +3 -0
  13. package/dist/src/core/decorator-utils.d.ts.map +1 -1
  14. package/dist/src/core/decorator-utils.js +6 -2
  15. package/dist/src/core/decorator-utils.js.map +1 -1
  16. package/dist/src/core/formatter-fs.d.ts +9 -1
  17. package/dist/src/core/formatter-fs.d.ts.map +1 -1
  18. package/dist/src/core/formatter-fs.js +12 -2
  19. package/dist/src/core/formatter-fs.js.map +1 -1
  20. package/dist/src/core/messages.d.ts +23 -2
  21. package/dist/src/core/messages.d.ts.map +1 -1
  22. package/dist/src/core/messages.js +9 -0
  23. package/dist/src/core/messages.js.map +1 -1
  24. package/dist/src/core/parser.d.ts.map +1 -1
  25. package/dist/src/core/parser.js +31 -0
  26. package/dist/src/core/parser.js.map +1 -1
  27. package/dist/src/core/scanner.d.ts +1 -1
  28. package/dist/src/core/scanner.d.ts.map +1 -1
  29. package/dist/src/core/scanner.js +2 -0
  30. package/dist/src/core/scanner.js.map +1 -1
  31. package/dist/src/core/types.d.ts +38 -34
  32. package/dist/src/core/types.d.ts.map +1 -1
  33. package/dist/src/core/types.js +34 -33
  34. package/dist/src/core/types.js.map +1 -1
  35. package/dist/src/formatter/print/printer.d.ts +1 -1
  36. package/dist/src/formatter/print/printer.d.ts.map +1 -1
  37. package/dist/src/formatter/print/printer.js +28 -33
  38. package/dist/src/formatter/print/printer.js.map +1 -1
  39. package/dist/src/index.d.ts +0 -1
  40. package/dist/src/index.d.ts.map +1 -1
  41. package/dist/src/index.js +0 -1
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/init/init.d.ts.map +1 -1
  44. package/dist/src/init/init.js +22 -5
  45. package/dist/src/init/init.js.map +1 -1
  46. package/dist/src/lib/decorators.d.ts +39 -2
  47. package/dist/src/lib/decorators.d.ts.map +1 -1
  48. package/dist/src/lib/decorators.js +134 -47
  49. package/dist/src/lib/decorators.js.map +1 -1
  50. package/dist/src/server/serverlib.d.ts.map +1 -1
  51. package/dist/src/server/serverlib.js +3 -2
  52. package/dist/src/server/serverlib.js.map +1 -1
  53. package/dist/src/server/tmlanguage.js +1 -1
  54. package/dist/src/server/tmlanguage.js.map +1 -1
  55. package/dist/src/server/type-details.js +1 -1
  56. package/dist/src/server/type-details.js.map +1 -1
  57. package/dist/typespec.tmLanguage +1 -1
  58. package/lib/decorators.tsp +30 -0
  59. package/package.json +27 -28
package/dist/manifest.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export default {
2
- "version": "0.49.0-dev.8",
3
- "commit": "8c35739ebc984431cc463eb03bfc8b9afc7db166"
2
+ "version": "0.49.0",
3
+ "commit": "e76223066e921ec2fb33f7d1427085a29647ad69"
4
4
  };
@@ -1,18 +1,19 @@
1
1
  import { CompilerOptions } from "../core/options.js";
2
2
  import { CompilerHost, Diagnostic } from "../core/types.js";
3
3
  import { TypeSpecConfig } from "./types.js";
4
- export interface ResolveCompilerOptionsOptions {
4
+ export interface ResolveCompilerOptionsOptions extends ConfigToOptionsOptions {
5
5
  /** Absolute entrypoint path */
6
6
  entrypoint: string;
7
7
  /** Explicit config path. */
8
8
  configPath?: string;
9
- /** Current working directory. This will be used to interpolate `{cwd}` in the config.
10
- * @default to `process.cwd()`
9
+ }
10
+ export interface ConfigToOptionsOptions {
11
+ /**
12
+ * Current working directory. This will be used to interpolate `{cwd}` in the config.
11
13
  */
12
- cwd?: string;
14
+ cwd: string;
13
15
  /**
14
16
  * Environment variables.
15
- * @default process.env
16
17
  */
17
18
  env?: Record<string, string | undefined>;
18
19
  /**
@@ -28,4 +29,11 @@ export interface ResolveCompilerOptionsOptions {
28
29
  * @param compilerOptions
29
30
  */
30
31
  export declare function resolveCompilerOptions(host: CompilerHost, options: ResolveCompilerOptionsOptions): Promise<[CompilerOptions, readonly Diagnostic[]]>;
32
+ /**
33
+ * Resolve the compiler options from the given raw TypeSpec config
34
+ * @param config TypeSpec config.
35
+ * @param options Options for interpolation in the config.
36
+ * @returns
37
+ */
38
+ export declare function resolveOptionsFromConfig(config: TypeSpecConfig, options: ConfigToOptionsOptions): import("../core/types.js").DiagnosticResult<CompilerOptions>;
31
39
  //# sourceMappingURL=config-to-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-to-options.d.ts","sourceRoot":"","sources":["../../../src/config/config-to-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI5D,OAAO,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,6BAA6B;IAC5C,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IAEnB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAEzC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,CAAC,eAAe,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CA+CnD"}
1
+ {"version":3,"file":"config-to-options.d.ts","sourceRoot":"","sources":["../../../src/config/config-to-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI5D,OAAO,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,6BAA8B,SAAQ,sBAAsB;IAC3E,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IAEnB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAEzC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,CAAC,eAAe,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CAsBnD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,gEA8B/F"}
@@ -8,22 +8,34 @@ import { loadTypeSpecConfigForPath, validateConfigPathsAbsolute } from "./config
8
8
  * @param compilerOptions
9
9
  */
10
10
  export async function resolveCompilerOptions(host, options) {
11
- var _a, _b, _c, _d, _e;
12
- const cwd = normalizePath((_a = options.cwd) !== null && _a !== void 0 ? _a : process.cwd());
11
+ var _a;
13
12
  const diagnostics = createDiagnosticCollector();
14
13
  const entrypointStat = await doIO(host.stat, options.entrypoint, (diag) => diagnostics.add(diag), { allowFileNotFound: true });
15
- const configPath = (_b = options.configPath) !== null && _b !== void 0 ? _b : ((entrypointStat === null || entrypointStat === void 0 ? void 0 : entrypointStat.isDirectory()) ? options.entrypoint : getDirectoryPath(options.entrypoint));
14
+ const configPath = (_a = options.configPath) !== null && _a !== void 0 ? _a : ((entrypointStat === null || entrypointStat === void 0 ? void 0 : entrypointStat.isDirectory()) ? options.entrypoint : getDirectoryPath(options.entrypoint));
16
15
  const config = await loadTypeSpecConfigForPath(host, configPath, options.configPath !== undefined, options.configPath === undefined);
17
16
  config.diagnostics.forEach((x) => diagnostics.add(x));
17
+ const compilerOptions = diagnostics.pipe(resolveOptionsFromConfig(config, options));
18
+ return diagnostics.wrap(compilerOptions);
19
+ }
20
+ /**
21
+ * Resolve the compiler options from the given raw TypeSpec config
22
+ * @param config TypeSpec config.
23
+ * @param options Options for interpolation in the config.
24
+ * @returns
25
+ */
26
+ export function resolveOptionsFromConfig(config, options) {
27
+ var _a, _b, _c;
28
+ const cwd = normalizePath(options.cwd);
29
+ const diagnostics = createDiagnosticCollector();
18
30
  const configWithOverrides = {
19
31
  ...config,
20
32
  ...options.overrides,
21
- options: mergeOptions(config.options, (_c = options.overrides) === null || _c === void 0 ? void 0 : _c.options),
33
+ options: mergeOptions(config.options, (_a = options.overrides) === null || _a === void 0 ? void 0 : _a.options),
22
34
  };
23
35
  const expandedConfig = diagnostics.pipe(expandConfigVariables(configWithOverrides, {
24
36
  cwd,
25
- outputDir: (_d = options.overrides) === null || _d === void 0 ? void 0 : _d.outputDir,
26
- env: (_e = options.env) !== null && _e !== void 0 ? _e : process.env,
37
+ outputDir: (_b = options.overrides) === null || _b === void 0 ? void 0 : _b.outputDir,
38
+ env: (_c = options.env) !== null && _c !== void 0 ? _c : {},
27
39
  args: options.args,
28
40
  }));
29
41
  validateConfigPathsAbsolute(expandedConfig).forEach((x) => diagnostics.add(x));
@@ -1 +1 @@
1
- {"version":3,"file":"config-to-options.js","sourceRoot":"","sources":["../../../src/config/config-to-options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-to-options.js","sourceRoot":"","sources":["../../../src/config/config-to-options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAqC,MAAM,oBAAoB,CAAC;AAGxF,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUzD,OAAO,EAIL,cAAc,EACd,kBAAkB,EAQlB,UAAU,EACV,gBAAgB,EAMhB,SAAS,EAKT,YAAY,EAEZ,cAAc,EAId,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,WAAW,EAOX,KAAK,EAGL,aAAa,EAKb,SAAS,EACT,sBAAsB,EACtB,SAAS,EACT,IAAI,EAEJ,cAAc,EACd,kBAAkB,EAiBlB,cAAc,EAGd,uBAAuB,EAIvB,MAAM,EAEN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,GAAG,EAYH,IAAI,EAIJ,iBAAiB,EACjB,kBAAkB,EAMlB,WAAW,EAEX,SAAS,EACT,QAAQ,EACT,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,aAAa,CAAC,CAAC;AAE7E,MAAM,WAAW,OAAO;IACtB,aAAa,EAAE,aAAa,CAAC;IAE7B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjD,YAAY,IAAI,IAAI,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,sBAAsB,IAAI,SAAS,CAAC;IACpC,sBAAsB,IAAI,sBAAsB,CAAC;IACjD,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACnE,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IACvD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAE/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAE3D;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IACnF,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAAE,GAAG,CAAC,CAAC;IACnF,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACvE,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,UAAU,EAAE,cAAc,EAC1B,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GAC1C,IAAI,CAAC;IACR,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;IACzD,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC9E,UAAU,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,GAAG,eAAe,GAAG,KAAK,EAC7D,OAAO,EAAE,CAAC,GACT,CAAC,GAAG,aAAa,GAAG;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,mBAAmB,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,GAAG,eAAe,GAAG,KAAK,EACtE,OAAO,EAAE,CAAC,GACT,CAAC,GAAG,aAAa,CAAC;IACrB,UAAU,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,YAAY,CAAC;IAChE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAC1E,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;IAC5E,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;IAC7E,iBAAiB,CACf,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAChC,IAAI,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GACjE,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IACnD,iBAAiB,CACf,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAChC,IAAI,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GACjE,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAEnD;;;;;;OAMG;IACH,kBAAkB,CAChB,MAAM,EAAE,IAAI,GAAG,SAAS,EACxB,MAAM,EAAE,IAAI,GAAG,SAAS,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEpC;;;;OAIG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI,IAAI,MAAM,GAAG;QAAE,IAAI,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAClD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,IAAI,IAAI,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAEnF;;;OAGG;IACH,UAAU,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3D;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,IAAI,GAAG,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEzF,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,aAAa;IACrB,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;CAC5D;AAED,6CAA6C;AAC7C,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,GAAG,CAAC;IAET;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CA0lKvD;AAqFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,GAC5C,KAAK,CAyEP;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GAAG,gBAAgB,EACnC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,GAC3C,KAAK,CAmCP;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAcxF;AAED;;;;;;;GAOG;AACH,wBAAiB,uBAAuB,CAAC,KAAK,EAAE,KAAK,2CAapD;AAYD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEpF"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAqC,MAAM,oBAAoB,CAAC;AAGxF,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUzD,OAAO,EAIL,cAAc,EACd,kBAAkB,EAQlB,UAAU,EACV,gBAAgB,EAMhB,SAAS,EAKT,YAAY,EAEZ,cAAc,EAId,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,WAAW,EAOX,KAAK,EAGL,aAAa,EAKb,SAAS,EACT,sBAAsB,EACtB,SAAS,EACT,IAAI,EAEJ,cAAc,EACd,kBAAkB,EAiBlB,cAAc,EAGd,uBAAuB,EAIvB,MAAM,EAEN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,GAAG,EAYH,IAAI,EAIJ,iBAAiB,EACjB,kBAAkB,EAMlB,WAAW,EAEX,SAAS,EACT,QAAQ,EACT,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,aAAa,CAAC,CAAC;AAE7E,MAAM,WAAW,OAAO;IACtB,aAAa,EAAE,aAAa,CAAC;IAE7B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjD,YAAY,IAAI,IAAI,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,sBAAsB,IAAI,SAAS,CAAC;IACpC,sBAAsB,IAAI,sBAAsB,CAAC;IACjD,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACnE,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IACvD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAE/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAE3D;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IACnF,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAAE,GAAG,CAAC,CAAC;IACnF,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACvE,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,UAAU,EAAE,cAAc,EAC1B,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GAC1C,IAAI,CAAC;IACR,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;IACzD,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC9E,UAAU,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,GAAG,eAAe,GAAG,KAAK,EAC7D,OAAO,EAAE,CAAC,GACT,CAAC,GAAG,aAAa,GAAG;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,mBAAmB,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,GAAG,eAAe,GAAG,KAAK,EACtE,OAAO,EAAE,CAAC,GACT,CAAC,GAAG,aAAa,CAAC;IACrB,UAAU,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,YAAY,CAAC;IAChE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAC1E,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;IAC5E,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;IAC7E,iBAAiB,CACf,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAChC,IAAI,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GACjE,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IACnD,iBAAiB,CACf,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAChC,IAAI,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GACjE,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAEnD;;;;;;OAMG;IACH,kBAAkB,CAChB,MAAM,EAAE,IAAI,GAAG,SAAS,EACxB,MAAM,EAAE,IAAI,GAAG,SAAS,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEpC;;;;OAIG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI,IAAI,MAAM,GAAG;QAAE,IAAI,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAClD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,IAAI,IAAI,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAEnF;;;OAGG;IACH,UAAU,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3D;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,IAAI,GAAG,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEzF,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,aAAa;IACrB,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;CAC5D;AAED,6CAA6C;AAC7C,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,GAAG,CAAC;IAET;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAipKvD;AAqFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,GAC5C,KAAK,CAyEP;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GAAG,gBAAgB,EACnC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,GAC3C,KAAK,CAmCP;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAcxF;AAED;;;;;;;GAOG;AACH,wBAAiB,uBAAuB,CAAC,KAAK,EAAE,KAAK,2CAapD;AAYD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEpF"}
@@ -42,7 +42,8 @@ export function createChecker(program) {
42
42
  };
43
43
  const globalNamespaceNode = createGlobalNamespaceNode();
44
44
  const globalNamespaceType = createGlobalNamespaceType();
45
- let typespecNamespaceNode;
45
+ // Caches the deprecation test of nodes in the program
46
+ const nodeDeprecationMap = new Map();
46
47
  const errorType = createType({ kind: "Intrinsic", name: "ErrorType" });
47
48
  const voidType = createType({ kind: "Intrinsic", name: "void" });
48
49
  const neverType = createType({ kind: "Intrinsic", name: "never" });
@@ -76,20 +77,19 @@ export function createChecker(program) {
76
77
  for (const file of program.sourceFiles.values()) {
77
78
  mergeSourceFile(file);
78
79
  }
79
- for (const file of program.sourceFiles.values()) {
80
- setUsingsForFile(file);
81
- }
82
80
  const typespecNamespaceBinding = globalNamespaceNode.symbol.exports.get("TypeSpec");
83
81
  if (typespecNamespaceBinding) {
84
82
  // the typespec namespace binding will be absent if we've passed
85
83
  // the no-std-lib option.
86
84
  // the first declaration here is the JS file for the typespec script.
87
- typespecNamespaceNode = typespecNamespaceBinding.declarations[1];
88
85
  initializeTypeSpecIntrinsics();
89
86
  for (const file of program.sourceFiles.values()) {
90
87
  addUsingSymbols(typespecNamespaceBinding.exports, file.locals);
91
88
  }
92
89
  }
90
+ for (const file of program.sourceFiles.values()) {
91
+ setUsingsForFile(file);
92
+ }
93
93
  let evalContext = undefined;
94
94
  const checker = {
95
95
  getTypeForNode,
@@ -191,9 +191,6 @@ export function createChecker(program) {
191
191
  usedUsing.add(namespaceSym);
192
192
  addUsingSymbols(sym.exports, parentNs.locals);
193
193
  }
194
- if (typespecNamespaceNode) {
195
- addUsingSymbols(typespecNamespaceBinding.exports, file.locals);
196
- }
197
194
  }
198
195
  function applyAugmentDecorators(node) {
199
196
  if (!node.statements || !isArray(node.statements)) {
@@ -525,6 +522,41 @@ export function createChecker(program) {
525
522
  reportDeprecation(program, target, deprecationDetails.message, reportCheckerDiagnostic);
526
523
  }
527
524
  }
525
+ function isTypeReferenceContextDeprecated(node) {
526
+ function checkDeprecatedNode(node) {
527
+ var _a;
528
+ // Perform a simple check if the parent node is deprecated. We do this
529
+ // out of band because `checkDirectives` usually gets called on the parent
530
+ // type after child types have already been checked (including their
531
+ // deprecations).
532
+ if (!nodeDeprecationMap.has(node)) {
533
+ nodeDeprecationMap.set(node, ((_a = node.directives) !== null && _a !== void 0 ? _a : []).findIndex((d) => d.target.sv === "deprecated") >= 0);
534
+ }
535
+ return nodeDeprecationMap.get(node);
536
+ }
537
+ // Walk the parent hierarchy up to a node which might have a
538
+ // deprecation which would mitigate the deprecation warning of the original
539
+ // type reference. This is done to prevent multiple deprecation notices from
540
+ // being raised when a parent context is already being deprecated.
541
+ switch (node.kind) {
542
+ case SyntaxKind.ModelStatement:
543
+ return checkDeprecatedNode(node);
544
+ case SyntaxKind.OperationStatement:
545
+ return (checkDeprecatedNode(node) ||
546
+ (node.parent.kind === SyntaxKind.InterfaceStatement &&
547
+ isTypeReferenceContextDeprecated(node.parent)));
548
+ case SyntaxKind.InterfaceStatement:
549
+ return checkDeprecatedNode(node);
550
+ case SyntaxKind.IntersectionExpression:
551
+ case SyntaxKind.UnionExpression:
552
+ case SyntaxKind.ModelProperty:
553
+ case SyntaxKind.OperationSignatureDeclaration:
554
+ case SyntaxKind.OperationSignatureReference:
555
+ return isTypeReferenceContextDeprecated(node.parent);
556
+ default:
557
+ return false;
558
+ }
559
+ }
528
560
  function checkTypeReferenceArgs(node, mapper) {
529
561
  const args = [];
530
562
  if (node.kind !== SyntaxKind.TypeReference) {
@@ -680,10 +712,14 @@ export function createChecker(program) {
680
712
  }
681
713
  }
682
714
  }
683
- // Check for deprecations here, first on symbol, then on type.
715
+ // Check for deprecations here, first on symbol, then on type. However,
716
+ // don't raise deprecation when the usage site is also a deprecated
717
+ // declaration.
684
718
  const declarationNode = sym === null || sym === void 0 ? void 0 : sym.declarations[0];
685
719
  if (declarationNode && mapper === undefined) {
686
- checkDeprecated(baseType, declarationNode, node);
720
+ if (!isTypeReferenceContextDeprecated(node.parent)) {
721
+ checkDeprecated(baseType, declarationNode, node);
722
+ }
687
723
  }
688
724
  return baseType;
689
725
  }
@@ -2323,10 +2359,7 @@ export function createChecker(program) {
2323
2359
  ((_c = prop.parent.parent.parent) === null || _c === void 0 ? void 0 : _c.kind) === SyntaxKind.OperationStatement) {
2324
2360
  const doc = extractParamDoc(prop.parent.parent.parent, type.name);
2325
2361
  if (doc) {
2326
- type.decorators.unshift({
2327
- decorator: $docFromComment,
2328
- args: [{ value: createLiteralType(doc), jsValue: doc }],
2329
- });
2362
+ type.decorators.unshift(createDocFromCommentDecorator("self", doc));
2330
2363
  }
2331
2364
  }
2332
2365
  finishType(type);
@@ -2334,6 +2367,15 @@ export function createChecker(program) {
2334
2367
  pendingResolutions.finish(symId, ResolutionKind.Type);
2335
2368
  return type;
2336
2369
  }
2370
+ function createDocFromCommentDecorator(key, doc) {
2371
+ return {
2372
+ decorator: $docFromComment,
2373
+ args: [
2374
+ { value: createLiteralType(key), jsValue: key },
2375
+ { value: createLiteralType(doc), jsValue: doc },
2376
+ ],
2377
+ };
2378
+ }
2337
2379
  function isValueType(type) {
2338
2380
  if (type === nullType) {
2339
2381
  return true;
@@ -2533,10 +2575,16 @@ export function createChecker(program) {
2533
2575
  // Doc comment should always be the first decorator in case an explicit @doc must override it.
2534
2576
  const docComment = extractMainDoc(targetType);
2535
2577
  if (docComment) {
2536
- decorators.unshift({
2537
- decorator: $docFromComment,
2538
- args: [{ value: createLiteralType(docComment), jsValue: docComment }],
2539
- });
2578
+ decorators.unshift(createDocFromCommentDecorator("self", docComment));
2579
+ }
2580
+ if (targetType.kind === "Operation") {
2581
+ const returnTypesDocs = extractReturnsDocs(targetType);
2582
+ if (returnTypesDocs.returns) {
2583
+ decorators.unshift(createDocFromCommentDecorator("returns", returnTypesDocs.returns));
2584
+ }
2585
+ if (returnTypesDocs.errors) {
2586
+ decorators.unshift(createDocFromCommentDecorator("errors", returnTypesDocs.errors));
2587
+ }
2540
2588
  }
2541
2589
  return decorators;
2542
2590
  }
@@ -4437,6 +4485,27 @@ function extractMainDoc(type) {
4437
4485
  const trimmed = mainDoc.trim();
4438
4486
  return trimmed === "" ? undefined : trimmed;
4439
4487
  }
4488
+ function extractReturnsDocs(type) {
4489
+ var _a;
4490
+ const result = {
4491
+ returns: undefined,
4492
+ errors: undefined,
4493
+ };
4494
+ if (((_a = type.node) === null || _a === void 0 ? void 0 : _a.docs) === undefined) {
4495
+ return result;
4496
+ }
4497
+ for (const doc of type.node.docs) {
4498
+ for (const tag of doc.tags) {
4499
+ if (tag.kind === SyntaxKind.DocReturnsTag) {
4500
+ result.returns = getDocContent(tag.content);
4501
+ }
4502
+ if (tag.kind === SyntaxKind.DocErrorsTag) {
4503
+ result.errors = getDocContent(tag.content);
4504
+ }
4505
+ }
4506
+ }
4507
+ return result;
4508
+ }
4440
4509
  function extractParamDoc(node, paramName) {
4441
4510
  if (node.docs === undefined) {
4442
4511
  return undefined;