@typespec/compiler 0.52.0-dev.9 → 0.53.0-dev.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.
- package/dist/.scripts/build-init-templates.js +11 -1
- package/dist/.scripts/build-init-templates.js.map +1 -1
- package/dist/manifest.js +2 -2
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +5 -2
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/core/index.d.ts +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +1 -1
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/library.d.ts +2 -2
- package/dist/src/core/library.d.ts.map +1 -1
- package/dist/src/core/library.js +1 -15
- package/dist/src/core/library.js.map +1 -1
- package/dist/src/core/messages.d.ts +61 -2
- package/dist/src/core/messages.d.ts.map +1 -1
- package/dist/src/core/messages.js +20 -1
- package/dist/src/core/messages.js.map +1 -1
- package/dist/src/core/mime-type.d.ts +7 -0
- package/dist/src/core/mime-type.d.ts.map +1 -0
- package/dist/src/core/mime-type.js +19 -0
- package/dist/src/core/mime-type.js.map +1 -0
- package/dist/src/core/node-host.d.ts +1 -0
- package/dist/src/core/node-host.d.ts.map +1 -1
- package/dist/src/core/node-host.js +18 -5
- package/dist/src/core/node-host.js.map +1 -1
- package/dist/src/core/param-message.d.ts +3 -0
- package/dist/src/core/param-message.d.ts.map +1 -0
- package/dist/src/core/param-message.js +16 -0
- package/dist/src/core/param-message.js.map +1 -0
- package/dist/src/core/program.d.ts.map +1 -1
- package/dist/src/core/program.js +25 -14
- package/dist/src/core/program.js.map +1 -1
- package/dist/src/core/util.d.ts +1 -2
- package/dist/src/core/util.d.ts.map +1 -1
- package/dist/src/core/util.js +2 -3
- package/dist/src/core/util.js.map +1 -1
- package/dist/src/init/core-templates.d.ts.map +1 -1
- package/dist/src/init/core-templates.js +2 -3
- package/dist/src/init/core-templates.js.map +1 -1
- package/dist/src/init/init.d.ts.map +1 -1
- package/dist/src/init/init.js +3 -4
- package/dist/src/init/init.js.map +1 -1
- package/dist/src/lib/decorators.d.ts +2 -1
- package/dist/src/lib/decorators.d.ts.map +1 -1
- package/dist/src/lib/decorators.js +1 -0
- package/dist/src/lib/decorators.js.map +1 -1
- package/dist/src/lib/encoded-names.d.ts +30 -0
- package/dist/src/lib/encoded-names.d.ts.map +1 -0
- package/dist/src/lib/encoded-names.js +132 -0
- package/dist/src/lib/encoded-names.js.map +1 -0
- package/dist/src/manifest.d.ts.map +1 -1
- package/dist/src/manifest.js +10 -3
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/server/classify.d.ts +8 -0
- package/dist/src/server/classify.d.ts.map +1 -0
- package/dist/src/server/classify.js +310 -0
- package/dist/src/server/classify.js.map +1 -0
- package/dist/src/server/compile-service.d.ts +42 -0
- package/dist/src/server/compile-service.d.ts.map +1 -0
- package/dist/src/server/compile-service.js +163 -0
- package/dist/src/server/compile-service.js.map +1 -0
- package/dist/src/server/completion.js +1 -1
- package/dist/src/server/completion.js.map +1 -1
- package/dist/src/server/constants.d.ts +7 -0
- package/dist/src/server/constants.d.ts.map +1 -0
- package/dist/src/server/constants.js +13 -0
- package/dist/src/server/constants.js.map +1 -0
- package/dist/src/server/file-service.d.ts +18 -0
- package/dist/src/server/file-service.d.ts.map +1 -0
- package/dist/src/server/file-service.js +56 -0
- package/dist/src/server/file-service.js.map +1 -0
- package/dist/src/server/file-system-cache.d.ts +25 -0
- package/dist/src/server/file-system-cache.d.ts.map +1 -0
- package/dist/src/server/file-system-cache.js +27 -0
- package/dist/src/server/file-system-cache.js.map +1 -0
- package/dist/src/server/index.d.ts +2 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +2 -1
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/server/serverlib.d.ts +1 -71
- package/dist/src/server/serverlib.d.ts.map +1 -1
- package/dist/src/server/serverlib.js +115 -622
- package/dist/src/server/serverlib.js.map +1 -1
- package/dist/src/server/types.d.ts +76 -0
- package/dist/src/server/types.d.ts.map +1 -0
- package/dist/src/server/types.js +26 -0
- package/dist/src/server/types.js.map +1 -0
- package/dist/src/server/update-manager.d.ts +19 -0
- package/dist/src/server/update-manager.d.ts.map +1 -0
- package/dist/src/server/update-manager.js +70 -0
- package/dist/src/server/update-manager.js.map +1 -0
- package/dist/src/testing/test-host.js +2 -2
- package/dist/src/testing/test-host.js.map +1 -1
- package/dist/src/testing/test-utils.d.ts +2 -0
- package/dist/src/testing/test-utils.d.ts.map +1 -1
- package/dist/src/testing/test-utils.js +8 -3
- package/dist/src/testing/test-utils.js.map +1 -1
- package/dist/src/testing/types.d.ts +2 -2
- package/dist/src/testing/types.d.ts.map +1 -1
- package/lib/decorators.tsp +26 -0
- package/package.json +11 -11
- package/templates/__snapshots__/emitter-ts/src/testing/index.ts +1 -1
- package/templates/__snapshots__/emitter-ts/test/hello.test.ts +1 -1
- package/templates/__snapshots__/emitter-ts/test/test-host.ts +2 -2
- package/templates/__snapshots__/library-ts/.eslintrc.yml +14 -0
- package/templates/__snapshots__/library-ts/lib/decorators.tsp +12 -0
- package/templates/__snapshots__/library-ts/lib/main.tsp +1 -0
- package/templates/__snapshots__/library-ts/package.json +40 -0
- package/templates/__snapshots__/library-ts/prettierrc.yaml +8 -0
- package/templates/__snapshots__/library-ts/src/decorators.ts +33 -0
- package/templates/__snapshots__/library-ts/src/index.ts +2 -0
- package/templates/__snapshots__/library-ts/src/lib.ts +20 -0
- package/templates/__snapshots__/library-ts/src/linter.ts +14 -0
- package/templates/__snapshots__/library-ts/src/rules/no-interfaces.rule.ts +19 -0
- package/templates/{emitter-ts → __snapshots__/library-ts}/src/testing/index.ts +2 -2
- package/templates/__snapshots__/library-ts/test/decorators.test.ts +48 -0
- package/templates/__snapshots__/library-ts/test/rules/no-interfaces.rule.test.ts +29 -0
- package/templates/__snapshots__/library-ts/test/test-host.ts +17 -0
- package/templates/__snapshots__/library-ts/tsconfig.json +17 -0
- package/templates/emitter-ts/src/testing/index.ts.mu +8 -0
- package/templates/emitter-ts/test/hello.test.ts +1 -1
- package/templates/emitter-ts/test/test-host.ts.mu +2 -2
- package/templates/library-ts/.eslintrc.yml +14 -0
- package/templates/library-ts/lib/decorators.tsp.mu +12 -0
- package/templates/library-ts/lib/main.tsp +1 -0
- package/templates/library-ts/package.json +40 -0
- package/templates/library-ts/prettierrc.yaml +8 -0
- package/templates/library-ts/src/decorators.ts +33 -0
- package/templates/library-ts/src/index.ts +2 -0
- package/templates/library-ts/src/lib.ts +20 -0
- package/templates/library-ts/src/linter.ts +14 -0
- package/templates/library-ts/src/rules/no-interfaces.rule.ts +19 -0
- package/templates/library-ts/src/testing/index.ts.mu +8 -0
- package/templates/library-ts/test/decorators.test.ts.mu +48 -0
- package/templates/library-ts/test/rules/no-interfaces.rule.test.ts +29 -0
- package/templates/library-ts/test/test-host.ts.mu +17 -0
- package/templates/library-ts/tsconfig.json +17 -0
- 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.
|
|
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.
|
|
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.
|
|
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
|
{
|