@typespec/compiler 0.52.0-dev.7 → 0.52.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 (146) hide show
  1. package/dist/.scripts/build-init-templates.js +11 -1
  2. package/dist/.scripts/build-init-templates.js.map +1 -1
  3. package/dist/manifest.js +2 -2
  4. package/dist/src/core/checker.d.ts.map +1 -1
  5. package/dist/src/core/checker.js +5 -2
  6. package/dist/src/core/checker.js.map +1 -1
  7. package/dist/src/core/index.d.ts +2 -2
  8. package/dist/src/core/index.d.ts.map +1 -1
  9. package/dist/src/core/index.js +2 -2
  10. package/dist/src/core/index.js.map +1 -1
  11. package/dist/src/core/library.d.ts +4 -3
  12. package/dist/src/core/library.d.ts.map +1 -1
  13. package/dist/src/core/library.js +12 -14
  14. package/dist/src/core/library.js.map +1 -1
  15. package/dist/src/core/linter.d.ts.map +1 -1
  16. package/dist/src/core/linter.js +11 -5
  17. package/dist/src/core/linter.js.map +1 -1
  18. package/dist/src/core/messages.d.ts +61 -2
  19. package/dist/src/core/messages.d.ts.map +1 -1
  20. package/dist/src/core/messages.js +20 -1
  21. package/dist/src/core/messages.js.map +1 -1
  22. package/dist/src/core/mime-type.d.ts +7 -0
  23. package/dist/src/core/mime-type.d.ts.map +1 -0
  24. package/dist/src/core/mime-type.js +19 -0
  25. package/dist/src/core/mime-type.js.map +1 -0
  26. package/dist/src/core/node-host.d.ts +1 -0
  27. package/dist/src/core/node-host.d.ts.map +1 -1
  28. package/dist/src/core/node-host.js +18 -5
  29. package/dist/src/core/node-host.js.map +1 -1
  30. package/dist/src/core/param-message.d.ts +3 -0
  31. package/dist/src/core/param-message.d.ts.map +1 -0
  32. package/dist/src/core/param-message.js +16 -0
  33. package/dist/src/core/param-message.js.map +1 -0
  34. package/dist/src/core/program.d.ts.map +1 -1
  35. package/dist/src/core/program.js +26 -14
  36. package/dist/src/core/program.js.map +1 -1
  37. package/dist/src/core/types.d.ts +15 -6
  38. package/dist/src/core/types.d.ts.map +1 -1
  39. package/dist/src/core/types.js.map +1 -1
  40. package/dist/src/core/util.d.ts +1 -2
  41. package/dist/src/core/util.d.ts.map +1 -1
  42. package/dist/src/core/util.js +2 -3
  43. package/dist/src/core/util.js.map +1 -1
  44. package/dist/src/init/core-templates.d.ts.map +1 -1
  45. package/dist/src/init/core-templates.js +2 -3
  46. package/dist/src/init/core-templates.js.map +1 -1
  47. package/dist/src/init/init.d.ts.map +1 -1
  48. package/dist/src/init/init.js +3 -4
  49. package/dist/src/init/init.js.map +1 -1
  50. package/dist/src/lib/decorators.d.ts +2 -1
  51. package/dist/src/lib/decorators.d.ts.map +1 -1
  52. package/dist/src/lib/decorators.js +1 -0
  53. package/dist/src/lib/decorators.js.map +1 -1
  54. package/dist/src/lib/encoded-names.d.ts +30 -0
  55. package/dist/src/lib/encoded-names.d.ts.map +1 -0
  56. package/dist/src/lib/encoded-names.js +132 -0
  57. package/dist/src/lib/encoded-names.js.map +1 -0
  58. package/dist/src/manifest.d.ts.map +1 -1
  59. package/dist/src/manifest.js +10 -3
  60. package/dist/src/manifest.js.map +1 -1
  61. package/dist/src/server/classify.d.ts +8 -0
  62. package/dist/src/server/classify.d.ts.map +1 -0
  63. package/dist/src/server/classify.js +310 -0
  64. package/dist/src/server/classify.js.map +1 -0
  65. package/dist/src/server/compile-service.d.ts +42 -0
  66. package/dist/src/server/compile-service.d.ts.map +1 -0
  67. package/dist/src/server/compile-service.js +163 -0
  68. package/dist/src/server/compile-service.js.map +1 -0
  69. package/dist/src/server/completion.js +1 -1
  70. package/dist/src/server/completion.js.map +1 -1
  71. package/dist/src/server/constants.d.ts +7 -0
  72. package/dist/src/server/constants.d.ts.map +1 -0
  73. package/dist/src/server/constants.js +13 -0
  74. package/dist/src/server/constants.js.map +1 -0
  75. package/dist/src/server/file-service.d.ts +18 -0
  76. package/dist/src/server/file-service.d.ts.map +1 -0
  77. package/dist/src/server/file-service.js +56 -0
  78. package/dist/src/server/file-service.js.map +1 -0
  79. package/dist/src/server/file-system-cache.d.ts +25 -0
  80. package/dist/src/server/file-system-cache.d.ts.map +1 -0
  81. package/dist/src/server/file-system-cache.js +27 -0
  82. package/dist/src/server/file-system-cache.js.map +1 -0
  83. package/dist/src/server/index.d.ts +2 -1
  84. package/dist/src/server/index.d.ts.map +1 -1
  85. package/dist/src/server/index.js +2 -1
  86. package/dist/src/server/index.js.map +1 -1
  87. package/dist/src/server/server.js.map +1 -1
  88. package/dist/src/server/serverlib.d.ts +1 -71
  89. package/dist/src/server/serverlib.d.ts.map +1 -1
  90. package/dist/src/server/serverlib.js +115 -622
  91. package/dist/src/server/serverlib.js.map +1 -1
  92. package/dist/src/server/types.d.ts +76 -0
  93. package/dist/src/server/types.d.ts.map +1 -0
  94. package/dist/src/server/types.js +26 -0
  95. package/dist/src/server/types.js.map +1 -0
  96. package/dist/src/server/update-manager.d.ts +19 -0
  97. package/dist/src/server/update-manager.d.ts.map +1 -0
  98. package/dist/src/server/update-manager.js +70 -0
  99. package/dist/src/server/update-manager.js.map +1 -0
  100. package/dist/src/testing/test-host.js +2 -2
  101. package/dist/src/testing/test-host.js.map +1 -1
  102. package/dist/src/testing/test-utils.d.ts +2 -0
  103. package/dist/src/testing/test-utils.d.ts.map +1 -1
  104. package/dist/src/testing/test-utils.js +8 -3
  105. package/dist/src/testing/test-utils.js.map +1 -1
  106. package/dist/src/testing/types.d.ts +2 -2
  107. package/dist/src/testing/types.d.ts.map +1 -1
  108. package/lib/decorators.tsp +26 -0
  109. package/package.json +11 -12
  110. package/templates/__snapshots__/emitter-ts/src/testing/index.ts +1 -1
  111. package/templates/__snapshots__/emitter-ts/test/hello.test.ts +1 -1
  112. package/templates/__snapshots__/emitter-ts/test/test-host.ts +2 -2
  113. package/templates/__snapshots__/library-ts/.eslintrc.yml +14 -0
  114. package/templates/__snapshots__/library-ts/lib/decorators.tsp +12 -0
  115. package/templates/__snapshots__/library-ts/lib/main.tsp +1 -0
  116. package/templates/__snapshots__/library-ts/package.json +40 -0
  117. package/templates/__snapshots__/library-ts/prettierrc.yaml +8 -0
  118. package/templates/__snapshots__/library-ts/src/decorators.ts +33 -0
  119. package/templates/__snapshots__/library-ts/src/index.ts +2 -0
  120. package/templates/__snapshots__/library-ts/src/lib.ts +20 -0
  121. package/templates/__snapshots__/library-ts/src/linter.ts +14 -0
  122. package/templates/__snapshots__/library-ts/src/rules/no-interfaces.rule.ts +19 -0
  123. package/templates/{emitter-ts → __snapshots__/library-ts}/src/testing/index.ts +2 -2
  124. package/templates/__snapshots__/library-ts/test/decorators.test.ts +48 -0
  125. package/templates/__snapshots__/library-ts/test/rules/no-interfaces.rule.test.ts +29 -0
  126. package/templates/__snapshots__/library-ts/test/test-host.ts +17 -0
  127. package/templates/__snapshots__/library-ts/tsconfig.json +17 -0
  128. package/templates/emitter-ts/src/testing/index.ts.mu +8 -0
  129. package/templates/emitter-ts/test/hello.test.ts +1 -1
  130. package/templates/emitter-ts/test/test-host.ts.mu +2 -2
  131. package/templates/library-ts/.eslintrc.yml +14 -0
  132. package/templates/library-ts/lib/decorators.tsp.mu +12 -0
  133. package/templates/library-ts/lib/main.tsp +1 -0
  134. package/templates/library-ts/package.json +40 -0
  135. package/templates/library-ts/prettierrc.yaml +8 -0
  136. package/templates/library-ts/src/decorators.ts +33 -0
  137. package/templates/library-ts/src/index.ts +2 -0
  138. package/templates/library-ts/src/lib.ts +20 -0
  139. package/templates/library-ts/src/linter.ts +14 -0
  140. package/templates/library-ts/src/rules/no-interfaces.rule.ts +19 -0
  141. package/templates/library-ts/src/testing/index.ts.mu +8 -0
  142. package/templates/library-ts/test/decorators.test.ts.mu +48 -0
  143. package/templates/library-ts/test/rules/no-interfaces.rule.test.ts +29 -0
  144. package/templates/library-ts/test/test-host.ts.mu +17 -0
  145. package/templates/library-ts/tsconfig.json +17 -0
  146. package/templates/scaffolding.json +80 -4
@@ -0,0 +1,48 @@
1
+ import { strictEqual } from "node:assert";
2
+ import { describe, it, beforeEach } from "node:test";
3
+ import { Operation } from "@typespec/compiler";
4
+ import { BasicTestRunner, expectDiagnostics, extractCursor } from "@typespec/compiler/testing";
5
+ import { getAlternateName } from "../src/decorators.js";
6
+ import { create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestRunner } from "./test-host.js";
7
+
8
+ describe("decorators", () => {
9
+ let runner: BasicTestRunner;
10
+
11
+ beforeEach(async () => {
12
+ runner = await create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestRunner();
13
+ })
14
+
15
+ describe("@alternateName", () => {
16
+ it("set alternate name on operation", async () => {
17
+ const { test } = (await runner.compile(
18
+ `@alternateName("bar") @test op test(): void;`
19
+ )) as { test: Operation };
20
+ strictEqual(getAlternateName(runner.program, test), "bar");
21
+ });
22
+
23
+ it("emit diagnostic if not used on an operation", async () => {
24
+ const diagnostics = await runner.diagnose(
25
+ `@alternateName("bar") model Test {}`
26
+ );
27
+ expectDiagnostics(diagnostics, {
28
+ severity: "error",
29
+ code: "decorator-wrong-target",
30
+ message: "Cannot apply @alternateName decorator to Test since it is not assignable to Operation"
31
+ })
32
+ });
33
+
34
+
35
+ it("emit diagnostic if using banned name", async () => {
36
+ const {pos, source} = extractCursor(`@alternateName(┆"banned") op test(): void;`)
37
+ const diagnostics = await runner.diagnose(
38
+ source
39
+ );
40
+ expectDiagnostics(diagnostics, {
41
+ severity: "error",
42
+ code: "{{name}}/banned-alternate-name",
43
+ message: `Banned alternate name "banned".`,
44
+ pos: pos + runner.autoCodeOffset
45
+ })
46
+ });
47
+ });
48
+ });
@@ -0,0 +1,29 @@
1
+ import {
2
+ LinterRuleTester,
3
+ createLinterRuleTester,
4
+ createTestRunner,
5
+ } from "@typespec/compiler/testing";
6
+ import { beforeEach, describe, it } from "node:test";
7
+ import { noInterfaceRule } from "../../src/rules/no-interfaces.rule.js";
8
+
9
+ describe("noInterfaceRule", () => {
10
+ let ruleTester: LinterRuleTester;
11
+
12
+ beforeEach(async () => {
13
+ const runner = await createTestRunner();
14
+ ruleTester = createLinterRuleTester(runner, noInterfaceRule, "{{name}}");
15
+ });
16
+
17
+ describe("models", () => {
18
+ it("emit diagnostics if using interfaces", async () => {
19
+ await ruleTester.expect(`interface Test {}`).toEmitDiagnostics({
20
+ code: "{{name}}/no-interface",
21
+ message: "Interface shouldn't be used with this library. Keep operations at the root.",
22
+ });
23
+ });
24
+
25
+ it("should be valid if operation is at the root", async () => {
26
+ await ruleTester.expect(`op test(): void;`).toBeValid();
27
+ });
28
+ });
29
+ });
@@ -0,0 +1,17 @@
1
+ import { createTestHost, createTestWrapper } from "@typespec/compiler/testing";
2
+ import { {{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestLibrary } from "../src/testing/index.js";
3
+
4
+ export async function create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestHost() {
5
+ return createTestHost({
6
+ libraries: [{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestLibrary],
7
+ });
8
+ }
9
+
10
+ export async function create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestRunner() {
11
+ const host = await create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestHost();
12
+
13
+ return createTestWrapper(host, {
14
+ autoUsings: ["{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}"]
15
+ });
16
+ }
17
+
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "useDefineForClassFields": true,
5
+ "module": "NodeNext",
6
+ "moduleResolution": "NodeNext",
7
+ "lib": ["ES2022"],
8
+ "rootDir": ".",
9
+ "outDir": "dist",
10
+ "sourceMap": true,
11
+ "declaration": true,
12
+
13
+ /* Linting */
14
+ "strict": true
15
+ },
16
+ "include": ["src", "test"]
17
+ }
@@ -3,12 +3,12 @@
3
3
  "title": "Empty project",
4
4
  "description": "Create an empty project.",
5
5
  "libraries": [],
6
- "compilerVersion": "0.51.0"
6
+ "compilerVersion": "0.52.0"
7
7
  },
8
8
  "rest": {
9
9
  "title": "Generic Rest API",
10
10
  "description": "Create a project representing a generic Rest API",
11
- "compilerVersion": "0.51.0",
11
+ "compilerVersion": "0.52.0",
12
12
  "libraries": [
13
13
  "@typespec/http",
14
14
  "@typespec/rest",
@@ -20,10 +20,86 @@
20
20
  ]
21
21
  }
22
22
  },
23
+ "library-ts": {
24
+ "title": "TypeSpec Library (With TypeScript)",
25
+ "description": "Create a new package to add decorators or linters to typespec.",
26
+ "compilerVersion": "0.52.0",
27
+ "libraries": [],
28
+ "files": [
29
+ {
30
+ "destination": "main.tsp",
31
+ "skipGeneration": true
32
+ },
33
+ {
34
+ "destination": "tspconfig.yaml",
35
+ "skipGeneration": true
36
+ },
37
+ {
38
+ "path": "library-ts/.eslintrc.yml",
39
+ "destination": ".eslintrc.yml"
40
+ },
41
+ {
42
+ "path": "library-ts/lib/decorators.tsp.mu",
43
+ "destination": "lib/decorators.tsp"
44
+ },
45
+ {
46
+ "path": "library-ts/lib/main.tsp",
47
+ "destination": "lib/main.tsp"
48
+ },
49
+ {
50
+ "path": "library-ts/package.json",
51
+ "destination": "package.json"
52
+ },
53
+ {
54
+ "path": "library-ts/prettierrc.yaml",
55
+ "destination": "prettierrc.yaml"
56
+ },
57
+ {
58
+ "path": "library-ts/src/decorators.ts",
59
+ "destination": "src/decorators.ts"
60
+ },
61
+ {
62
+ "path": "library-ts/src/index.ts",
63
+ "destination": "src/index.ts"
64
+ },
65
+ {
66
+ "path": "library-ts/src/lib.ts",
67
+ "destination": "src/lib.ts"
68
+ },
69
+ {
70
+ "path": "library-ts/src/linter.ts",
71
+ "destination": "src/linter.ts"
72
+ },
73
+ {
74
+ "path": "library-ts/src/rules/no-interfaces.rule.ts",
75
+ "destination": "src/rules/no-interfaces.rule.ts"
76
+ },
77
+ {
78
+ "path": "library-ts/src/testing/index.ts.mu",
79
+ "destination": "src/testing/index.ts"
80
+ },
81
+ {
82
+ "path": "library-ts/test/decorators.test.ts.mu",
83
+ "destination": "test/decorators.test.ts"
84
+ },
85
+ {
86
+ "path": "library-ts/test/rules/no-interfaces.rule.test.ts",
87
+ "destination": "test/rules/no-interfaces.rule.test.ts"
88
+ },
89
+ {
90
+ "path": "library-ts/test/test-host.ts.mu",
91
+ "destination": "test/test-host.ts"
92
+ },
93
+ {
94
+ "path": "library-ts/tsconfig.json",
95
+ "destination": "tsconfig.json"
96
+ }
97
+ ]
98
+ },
23
99
  "emitter-ts": {
24
100
  "title": "TypeSpec Emitter (With TypeScript)",
25
101
  "description": "Create a new package that will be emitting typespec",
26
- "compilerVersion": "0.51.0",
102
+ "compilerVersion": "0.52.0",
27
103
  "libraries": [],
28
104
  "files": [
29
105
  {
@@ -59,7 +135,7 @@
59
135
  "destination": "src/lib.ts"
60
136
  },
61
137
  {
62
- "path": "emitter-ts/src/testing/index.ts",
138
+ "path": "emitter-ts/src/testing/index.ts.mu",
63
139
  "destination": "src/testing/index.ts"
64
140
  },
65
141
  {