diff --git a/.chronus/changes/validate-playground-samples-2024-2-1-22-7-17.md b/.chronus/changes/validate-playground-samples-2024-2-1-22-7-17.md new file mode 100644 index 0000000000..bae681e078 --- /dev/null +++ b/.chronus/changes/validate-playground-samples-2024-2-1-22-7-17.md @@ -0,0 +1,8 @@ +--- +# Change versionKind to one of: internal, fix, dependencies, feature, deprecation, breaking +changeKind: fix +packages: + - "@typespec/json-schema" +--- + +Respect compiler `noEmit` flag diff --git a/docs/getting-started/getting-started-http.md b/docs/getting-started/getting-started-http.md index b10133f4cf..d665ce43c2 100644 --- a/docs/getting-started/getting-started-http.md +++ b/docs/getting-started/getting-started-http.md @@ -58,7 +58,6 @@ using TypeSpec.Rest; */ @service({ title: "Pet Store Service", - version: "2021-03-25", }) @server("https://example.com", "Single server endpoint") namespace PetStore; diff --git a/docs/getting-started/typespec-for-openapi-dev.md b/docs/getting-started/typespec-for-openapi-dev.md index 6ba8d473dc..a5b7639fd2 100644 --- a/docs/getting-started/typespec-for-openapi-dev.md +++ b/docs/getting-started/typespec-for-openapi-dev.md @@ -789,7 +789,6 @@ In TypeSpec this information is specified with [decorators on the namespace][typ @doc("The Contoso Widget Service provides access to the Contoso Widget API.") @service({ title: "Widget Service", - version: "1.0.0", }) @info({ contact: { diff --git a/packages/json-schema/src/json-schema-emitter.ts b/packages/json-schema/src/json-schema-emitter.ts index 6759e565bd..eaec06d930 100644 --- a/packages/json-schema/src/json-schema-emitter.ts +++ b/packages/json-schema/src/json-schema-emitter.ts @@ -634,6 +634,9 @@ export class JsonSchemaEmitter extends TypeEmitter, JSONSche } } async writeOutput(sourceFiles: SourceFile>[]): Promise { + if (this.emitter.getOptions().noEmit) { + return; + } this.#reportDuplicateIds(); const toEmit: EmittedSourceFile[] = []; diff --git a/packages/json-schema/test/utils.ts b/packages/json-schema/test/utils.ts index cdcdd73ceb..48c35436c3 100644 --- a/packages/json-schema/test/utils.ts +++ b/packages/json-schema/test/utils.ts @@ -16,6 +16,7 @@ export async function getHostForCadlFile(contents: string, decorators?: Record&1", "preview": "npm run build && vite preview", "start": "vite", + "test": "vitest run", + "test:watch": "vitest -w", "watch": "vite", "test:e2e": "cross-env PW_EXPERIMENTAL_TS_ESM=1 playwright test -c e2e ", "test:e2e:headed": "cross-env PW_EXPERIMENTAL_TS_ESM=1 playwright test -c e2e --headed", @@ -74,12 +76,15 @@ "@types/swagger-ui-react": "^4.18.3", "@typespec/eslint-config-typespec": "workspace:~", "@vitejs/plugin-react": "~4.2.1", + "@vitest/coverage-v8": "^1.2.2", + "@vitest/ui": "^1.2.2", "c8": "^9.1.0", "cross-env": "~7.0.3", "eslint": "^8.56.0", "rimraf": "~5.0.5", "rollup-plugin-visualizer": "~5.12.0", "typescript": "~5.3.3", - "vite": "^5.1.0" + "vite": "^5.1.0", + "vitest": "^1.2.2" } } diff --git a/packages/playground-website/samples/http.tsp b/packages/playground-website/samples/http.tsp index 9bac3f1393..253905052f 100644 --- a/packages/playground-website/samples/http.tsp +++ b/packages/playground-website/samples/http.tsp @@ -3,7 +3,6 @@ import "@typespec/http"; using TypeSpec.Http; @service({ title: "Widget Service", - version: "1.0.0", }) namespace DemoService; diff --git a/packages/playground-website/test/validate-samples.test.ts b/packages/playground-website/test/validate-samples.test.ts new file mode 100644 index 0000000000..5c14a256c0 --- /dev/null +++ b/packages/playground-website/test/validate-samples.test.ts @@ -0,0 +1,16 @@ +import { NodeHost, compile, resolvePath } from "@typespec/compiler"; +import { expectDiagnosticEmpty, findTestPackageRoot } from "@typespec/compiler/testing"; +import { it } from "vitest"; +import { TypeSpecPlaygroundConfig } from "../src/index.js"; + +const samples = TypeSpecPlaygroundConfig.samples; +const packageRoot = await findTestPackageRoot(import.meta.url); +for (const [name, sample] of Object.entries(samples)) { + it(`compile ${name}`, async () => { + const program = await compile(NodeHost, resolvePath(packageRoot, sample.filename), { + noEmit: true, + emit: [sample.preferredEmitter], + }); + expectDiagnosticEmpty(program.diagnostics); + }); +} diff --git a/packages/playground-website/vitest.config.ts b/packages/playground-website/vitest.config.ts new file mode 100644 index 0000000000..32f6e06a40 --- /dev/null +++ b/packages/playground-website/vitest.config.ts @@ -0,0 +1,11 @@ +import { configDefaults, defineConfig, mergeConfig } from "vitest/config"; +import { defaultTypeSpecVitestConfig } from "../../vitest.workspace.js"; + +export default mergeConfig( + defaultTypeSpecVitestConfig, + defineConfig({ + test: { + exclude: [...configDefaults.exclude, "dist-dev/**/*"], + }, + }) +); diff --git a/packages/website/static/tsp-samples/openapi3/interoperate/main.tsp b/packages/website/static/tsp-samples/openapi3/interoperate/main.tsp index 4a9d3fc101..0d8b255cc6 100644 --- a/packages/website/static/tsp-samples/openapi3/interoperate/main.tsp +++ b/packages/website/static/tsp-samples/openapi3/interoperate/main.tsp @@ -1,6 +1,5 @@ @service({ title: "Pet Store Service", - version: "2021-03-25", }) namespace PetStore; diff --git a/packages/website/static/tsp-samples/tooling/formatter/file.noformat.tsp b/packages/website/static/tsp-samples/tooling/formatter/file.noformat.tsp index 9fb04fe2fd..4610d02bf8 100644 --- a/packages/website/static/tsp-samples/tooling/formatter/file.noformat.tsp +++ b/packages/website/static/tsp-samples/tooling/formatter/file.noformat.tsp @@ -2,7 +2,7 @@ import "@typespec/http"; using TypeSpec.Http; -@service({ title: "Accounting firm", version: "1.0.0" }) namespace MyOrg.Accounting; +@service({ title: "Accounting firm" }) namespace MyOrg.Accounting; diff --git a/packages/website/static/tsp-samples/tooling/formatter/formatted.tsp b/packages/website/static/tsp-samples/tooling/formatter/formatted.tsp index c67c8090d8..c4e358a88c 100644 --- a/packages/website/static/tsp-samples/tooling/formatter/formatted.tsp +++ b/packages/website/static/tsp-samples/tooling/formatter/formatted.tsp @@ -4,7 +4,6 @@ using TypeSpec.Http; @service({ title: "Accounting firm", - version: "1.0.0", }) namespace MyOrg.Accounting; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 793de84065..894d8443ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -944,6 +944,12 @@ importers: '@vitejs/plugin-react': specifier: ~4.2.1 version: 4.2.1(vite@5.1.0) + '@vitest/coverage-v8': + specifier: ^1.2.2 + version: 1.2.2(vitest@1.2.2) + '@vitest/ui': + specifier: ^1.2.2 + version: 1.2.2(vitest@1.2.2) c8: specifier: ^9.1.0 version: 9.1.0 @@ -965,6 +971,9 @@ importers: vite: specifier: ^5.1.0 version: 5.1.0(@types/node@18.11.19) + vitest: + specifier: ^1.2.2 + version: 1.2.2(@types/node@18.11.19)(@vitest/ui@1.2.2) packages/prettier-plugin-typespec: dependencies: