From ebf0e542695ce92bcd940634622ba20f65921b9b Mon Sep 17 00:00:00 2001 From: saltyaom Date: Mon, 15 Jul 2024 17:38:36 +0700 Subject: [PATCH] :broom: chore: support optional path parameter --- .npmignore | 3 + .prettierrc | 7 + CHANGELOG.md | 5 + build.ts | 37 ++ bun.lockb | Bin 152041 -> 379120 bytes example/index.ts | 5 +- package.json | 132 ++-- src/index.ts | 288 +++++---- src/utils.ts | 584 +++++++++--------- test/index.test.ts | 304 +++++---- ...Schema.test.ts => validate-schema.test.ts} | 2 + tsconfig.cjs.json | 104 ---- tsconfig.esm.json => tsconfig.dts.json | 18 +- 13 files changed, 753 insertions(+), 736 deletions(-) create mode 100644 .prettierrc create mode 100644 build.ts rename test/{validateSchema.test.ts => validate-schema.test.ts} (99%) delete mode 100644 tsconfig.cjs.json rename tsconfig.esm.json => tsconfig.dts.json (91%) diff --git a/.npmignore b/.npmignore index 2f21828..38fa1bc 100644 --- a/.npmignore +++ b/.npmignore @@ -19,4 +19,7 @@ CHANGELOG.md .eslintrc.js tsconfig.cjs.json tsconfig.esm.json +tsconfig.dts.json +src +build.ts diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..de30132 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "useTabs": true, + "tabWidth": 4, + "semi": false, + "singleQuote": true, + "trailingComma": "none" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 3202445..3d53b2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ +# 1.1.0-rc.0 - 12 Jul 2024 +Change: +- Add support for Elysia 1.1 + + # 1.0.2 - 18 Mar 2024 Change: - Add support for Elysia 1.0 diff --git a/build.ts b/build.ts new file mode 100644 index 0000000..e1305dc --- /dev/null +++ b/build.ts @@ -0,0 +1,37 @@ +import { $ } from 'bun' +import { build, type Options } from 'tsup' + +await $`rm -rf dist` + +const tsupConfig: Options = { + entry: ['src/**/*.ts'], + splitting: false, + sourcemap: false, + clean: true, + bundle: true +} satisfies Options + +await Promise.all([ + // ? tsup esm + build({ + outDir: 'dist', + format: 'esm', + target: 'node20', + cjsInterop: false, + ...tsupConfig + }), + // ? tsup cjs + build({ + outDir: 'dist/cjs', + format: 'cjs', + target: 'node20', + // dts: true, + ...tsupConfig + }) +]) + +await $`tsc --project tsconfig.dts.json` + +await Promise.all([$`cp dist/*.d.ts dist/cjs`]) + +process.exit() diff --git a/bun.lockb b/bun.lockb index 9d75515584e8eaff578a55e5615d151f5777de24..e6f5bf87acdf1a25638fb259cf9fe7cd473f0474 100755 GIT binary patch literal 379120 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�agmv*+(ZLxn4;a3d+ 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

5cu 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 diff --git a/example/index.ts b/example/index.ts index 6072150..bcb386f 100644 --- a/example/index.ts +++ b/example/index.ts @@ -39,7 +39,6 @@ const app = new Elysia() } }) ) - .use(plugin) + // .use(plugin) + .get('/id/:id?', 'a') .listen(3000) - -console.log(app.routes) diff --git a/package.json b/package.json index da9b7e6..bf8f981 100644 --- a/package.json +++ b/package.json @@ -1,55 +1,81 @@ { - "name": "@elysiajs/swagger", - "version": "1.0.4", - "description": "Plugin for Elysia to auto-generate Swagger page", - "author": { - "name": "saltyAom", - "url": "https://github.com/SaltyAom", - "email": "saltyaom@gmail.com" - }, - "main": "./dist/index.js", - "exports": { - "bun": "./dist/index.js", - "node": "./dist/cjs/index.js", - "require": "./dist/cjs/index.js", - "import": "./dist/index.js", - "default": "./dist/index.js" - }, - "types": "./dist/index.d.ts", - "keywords": [ - "elysia", - "swagger" - ], - "homepage": "https://github.com/elysiajs/elysia-swagger", - "repository": { - "type": "git", - "url": "https://github.com/elysiajs/elysia-swagger" - }, - "bugs": "https://github.com/elysiajs/elysia-swagger/issues", - "license": "MIT", - "scripts": { - "dev": "bun run --watch example/index.ts", - "test": "bun test && npm run test:node", - "test:node": "npm install --prefix ./test/node/cjs/ && npm install --prefix ./test/node/esm/ && node ./test/node/cjs/index.js && node ./test/node/esm/index.js", - "build": "rimraf dist && tsc --project tsconfig.esm.json && tsc --project tsconfig.cjs.json", - "release": "npm run build && npm run test && npm publish --access public" - }, - "peerDependencies": { - "elysia": ">= 1.0.2" - }, - "devDependencies": { - "@apidevtools/swagger-parser": "^10.1.0", - "@scalar/api-reference": "^1.12.5", - "@types/bun": "^1.0.4", - "@types/lodash.clonedeep": "^4.5.7", - "@types/node": "^20.1.4", - "elysia": "1.0.2", - "eslint": "^8.40.0", - "rimraf": "4.3", - "typescript": "^5.0.4" - }, - "dependencies": { - "lodash.clonedeep": "^4.5.0", - "openapi-types": "^12.1.3" - } + "name": "@elysiajs/swagger", + "version": "1.1.0-rc.1", + "description": "Plugin for Elysia to auto-generate Swagger page", + "author": { + "name": "saltyAom", + "url": "https://github.com/SaltyAom", + "email": "saltyaom@gmail.com" + }, + "main": "./dist/cjs/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/cjs/index.js" + }, + "./types": { + "types": "./dist/types.d.ts", + "import": "./dist/types.mjs", + "require": "./dist/cjs/types.js" + }, + "./utils": { + "types": "./dist/utils.d.ts", + "import": "./dist/utils.mjs", + "require": "./dist/cjs/utils.js" + }, + "./scalar": { + "types": "./dist/scalar/index.d.ts", + "import": "./dist/scalar/index.mjs", + "require": "./dist/cjs/scalar/index.js" + }, + "./scalar/theme": { + "types": "./dist/scalar/theme.d.ts", + "import": "./dist/scalar/theme.mjs", + "require": "./dist/cjs/scalar/theme.js" + }, + "./scalar/types": { + "types": "./dist/scalar/types/index.d.ts", + "import": "./dist/scalar/types/index.mjs", + "require": "./dist/cjs/scalar/types/index.js" + } + }, + "keywords": [ + "elysia", + "swagger" + ], + "homepage": "https://github.com/elysiajs/elysia-swagger", + "repository": { + "type": "git", + "url": "https://github.com/elysiajs/elysia-swagger" + }, + "bugs": "https://github.com/elysiajs/elysia-swagger/issues", + "license": "MIT", + "scripts": { + "dev": "bun run --watch example/index.ts", + "test": "bun test && npm run test:node", + "test:node": "npm install --prefix ./test/node/cjs/ && npm install --prefix ./test/node/esm/ && node ./test/node/cjs/index.js && node ./test/node/esm/index.js", + "build": "bun build.ts", + "release": "npm run build && npm run test && npm publish --access public" + }, + "peerDependencies": { + "elysia": ">= 1.1.0-rc.2" + }, + "devDependencies": { + "@apidevtools/swagger-parser": "^10.1.0", + "@scalar/api-reference": "^1.12.5", + "@types/bun": "1.1.6", + "@types/lodash.clonedeep": "^4.5.9", + "elysia": ">= 1.1.0-rc.2", + "eslint": "9.6.0", + "tsup": "^8.1.0", + "typescript": "^5.5.3" + }, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "openapi-types": "^12.1.3" + } } diff --git a/src/index.ts b/src/index.ts index a247e45..3ff0bd5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,171 +1,165 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ -import { type Elysia, type InternalRoute } from 'elysia' +import { Elysia, type InternalRoute } from "elysia"; -import { SwaggerUIRender } from './swagger' -import { ScalarRender } from './scalar' +import { SwaggerUIRender } from "./swagger"; +import { ScalarRender } from "./scalar"; -import { filterPaths, registerSchemaPath } from './utils' +import { filterPaths, registerSchemaPath } from "./utils"; -import type { OpenAPIV3 } from 'openapi-types' -import type { ReferenceConfiguration } from './scalar/types' -import type { ElysiaSwaggerConfig } from './types' +import type { OpenAPIV3 } from "openapi-types"; +import type { ReferenceConfiguration } from "./scalar/types"; +import type { ElysiaSwaggerConfig } from "./types"; /** * Plugin for [elysia](https://github.com/elysiajs/elysia) that auto-generate Swagger page. * * @see https://github.com/elysiajs/elysia-swagger */ -export const swagger = - ( - { - provider = 'scalar', - scalarVersion = 'latest', - scalarCDN = '', - scalarConfig = {}, - documentation = {}, - version = '5.9.0', - excludeStaticFile = true, - path = '/swagger' as Path, - exclude = [], - swaggerOptions = {}, - theme = `https://unpkg.com/swagger-ui-dist@${version}/swagger-ui.css`, - autoDarkMode = true, - excludeMethods = ['OPTIONS'], - excludeTags = [] - }: ElysiaSwaggerConfig = { - provider: 'scalar', - scalarVersion: 'latest', - scalarCDN: '', - scalarConfig: {}, - documentation: {}, - version: '5.9.0', - excludeStaticFile: true, - path: '/swagger' as Path, - exclude: [], - swaggerOptions: {}, - autoDarkMode: true, - excludeMethods: ['OPTIONS'], - excludeTags: [] - } - ) => - (app: Elysia) => { - const schema = {} - let totalRoutes = 0 +export const swagger = async ( + { + provider = "scalar", + scalarVersion = "latest", + scalarCDN = "", + scalarConfig = {}, + documentation = {}, + version = "5.9.0", + excludeStaticFile = true, + path = "/swagger" as Path, + exclude = [], + swaggerOptions = {}, + theme = `https://unpkg.com/swagger-ui-dist@${version}/swagger-ui.css`, + autoDarkMode = true, + excludeMethods = ["OPTIONS"], + excludeTags = [], + }: ElysiaSwaggerConfig = { + provider: "scalar", + scalarVersion: "latest", + scalarCDN: "", + scalarConfig: {}, + documentation: {}, + version: "5.9.0", + excludeStaticFile: true, + path: "/swagger" as Path, + exclude: [], + swaggerOptions: {}, + autoDarkMode: true, + excludeMethods: ["OPTIONS"], + excludeTags: [], + }, +) => { + const schema = {}; + let totalRoutes = 0; - if (!version) - version = `https://unpkg.com/swagger-ui-dist@${version}/swagger-ui.css` + if (!version) + version = `https://unpkg.com/swagger-ui-dist@${version}/swagger-ui.css`; - const info = { - title: 'Elysia Documentation', - description: 'Development documentation', - version: '0.0.0', - ...documentation.info - } + const info = { + title: "Elysia Documentation", + description: "Development documentation", + version: "0.0.0", + ...documentation.info, + }; - const relativePath = path.startsWith('/') ? path.slice(1) : path + const relativePath = path.startsWith("/") ? path.slice(1) : path; - app.get( - path, - () => { - const combinedSwaggerOptions = { - url: `${relativePath}/json`, - dom_id: '#swagger-ui', - ...swaggerOptions - } + const app = new Elysia({ name: "@elysiajs/swagger" }); - const stringifiedSwaggerOptions = JSON.stringify( - combinedSwaggerOptions, - (key, value) => { - if (typeof value == 'function') return undefined + app.get(path, function documentation() { + const combinedSwaggerOptions = { + url: `${relativePath}/json`, + dom_id: "#swagger-ui", + ...swaggerOptions, + }; - return value - } - ) + const stringifiedSwaggerOptions = JSON.stringify( + combinedSwaggerOptions, + (key, value) => { + if (typeof value == "function") return undefined; - const scalarConfiguration: ReferenceConfiguration = { - spec: { - ...scalarConfig.spec, - url: `${relativePath}/json`, - }, - ...scalarConfig - } + return value; + }, + ); - return new Response( - provider === 'swagger-ui' - ? SwaggerUIRender( - info, - version, - theme, - stringifiedSwaggerOptions, - autoDarkMode - ) - : ScalarRender( - scalarVersion, - scalarConfiguration, - scalarCDN - ), - { - headers: { - 'content-type': 'text/html; charset=utf8' - } - } - ) - } - ).get( - path === '/' ? '/json' : `${path}/json`, - () => { - const routes = app.routes as InternalRoute[] + const scalarConfiguration: ReferenceConfiguration = { + spec: { + ...scalarConfig.spec, + url: `${relativePath}/json`, + }, + ...scalarConfig, + }; - if (routes.length !== totalRoutes) { - totalRoutes = routes.length + return new Response( + provider === "swagger-ui" + ? SwaggerUIRender( + info, + version, + theme, + stringifiedSwaggerOptions, + autoDarkMode, + ) + : ScalarRender(scalarVersion, scalarConfiguration, scalarCDN), + { + headers: { + "content-type": "text/html; charset=utf8", + }, + }, + ); + }).get(path === "/" ? "/json" : `${path}/json`, function openAPISchema() { + // @ts-expect-error Private property + const routes = app.getGlobalRoutes() as InternalRoute[]; - routes.forEach((route: InternalRoute) => { - if (excludeMethods.includes(route.method)) return + if (routes.length !== totalRoutes) { + totalRoutes = routes.length; - registerSchemaPath({ - schema, - hook: route.hooks, - method: route.method, - path: route.path, - // @ts-ignore - models: app.definitions?.type, - contentType: route.hooks.type - }) - }) - } + routes.forEach((route: InternalRoute) => { + if (excludeMethods.includes(route.method)) return; - return { - openapi: '3.0.3', - ...{ - ...documentation, - tags: documentation.tags?.filter((tag) => !excludeTags?.includes(tag?.name)), - info: { - title: 'Elysia Documentation', - description: 'Development documentation', - version: '0.0.0', - ...documentation.info - } - }, - paths: {...filterPaths(schema, { - excludeStaticFile, - exclude: Array.isArray(exclude) ? exclude : [exclude] - }), - ...documentation.paths - }, - components: { - ...documentation.components, - schemas: { - // @ts-ignore - ...app.definitions?.type, - ...documentation.components?.schemas - } - } - } satisfies OpenAPIV3.Document - } - ) + registerSchemaPath({ + schema, + hook: route.hooks, + method: route.method, + path: route.path, + // @ts-ignore + models: app.definitions?.type, + contentType: route.hooks.type, + }); + }); + } - // This is intentional to prevent deeply nested type - return app - } + return { + openapi: "3.0.3", + ...{ + ...documentation, + tags: documentation.tags?.filter( + (tag) => !excludeTags?.includes(tag?.name), + ), + info: { + title: "Elysia Documentation", + description: "Development documentation", + version: "0.0.0", + ...documentation.info, + }, + }, + paths: { + ...filterPaths(schema, { + excludeStaticFile, + exclude: Array.isArray(exclude) ? exclude : [exclude], + }), + ...documentation.paths, + }, + components: { + ...documentation.components, + schemas: { + // @ts-ignore + ...app.definitions?.type, + ...documentation.components?.schemas, + }, + }, + } satisfies OpenAPIV3.Document; + }); -export default swagger + // This is intentional to prevent deeply nested type + return app; +}; + +export default swagger; diff --git a/src/utils.ts b/src/utils.ts index bd2ed5a..a52ea84 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -8,338 +8,352 @@ import type { OpenAPIV3 } from 'openapi-types' import deepClone from 'lodash.clonedeep' export const toOpenAPIPath = (path: string) => - path - .split('/') - .map((x) => (x.startsWith(':') ? `{${x.slice(1, x.length)}}` : x)) - .join('/') + path + .split('/') + .map((x) => { + if (x.startsWith(':')) { + x = x.slice(1, x.length) + if (x.endsWith('?')) x = x.slice(0, -1) + x = `{${x}}` + } + + return x + }) + .join('/') export const mapProperties = ( - name: string, - schema: TSchema | string | undefined, - models: Record + name: string, + schema: TSchema | string | undefined, + models: Record ) => { - if (schema === undefined) return [] + if (schema === undefined) return [] - if (typeof schema === 'string') - if (schema in models) schema = models[schema] - else throw new Error(`Can't find model ${schema}`) + if (typeof schema === 'string') + if (schema in models) schema = models[schema] + else throw new Error(`Can't find model ${schema}`) - return Object.entries(schema?.properties ?? []).map(([key, value]) => { - const { type: valueType = undefined, description, examples, ...schemaKeywords } = value as any - return { - // @ts-ignore - description, examples, - schema: { type: valueType, ...schemaKeywords }, - in: name, - name: key, - // @ts-ignore - required: schema!.required?.includes(key) ?? false - } - }) + return Object.entries(schema?.properties ?? []).map(([key, value]) => { + const { + type: valueType = undefined, + description, + examples, + ...schemaKeywords + } = value as any + return { + // @ts-ignore + description, + examples, + schema: { type: valueType, ...schemaKeywords }, + in: name, + name: key, + // @ts-ignore + required: schema!.required?.includes(key) ?? false + } + }) } const mapTypesResponse = ( - types: string[], - schema: - | string - | { - type: string - properties: Object - required: string[] - } + types: string[], + schema: + | string + | { + type: string + properties: Object + required: string[] + } ) => { - if ( - typeof schema === 'object' && - ['void', 'undefined', 'null'].includes(schema.type) - ) - return + if ( + typeof schema === 'object' && + ['void', 'undefined', 'null'].includes(schema.type) + ) + return - const responses: Record = {} + const responses: Record = {} - for (const type of types) - responses[type] = { - schema: - typeof schema === 'string' - ? { - $ref: `#/components/schemas/${schema}` - } - : { ...(schema as any) } - } + for (const type of types) + responses[type] = { + schema: + typeof schema === 'string' + ? { + $ref: `#/components/schemas/${schema}` + } + : { ...(schema as any) } + } - return responses + return responses } export const capitalize = (word: string) => - word.charAt(0).toUpperCase() + word.slice(1) + word.charAt(0).toUpperCase() + word.slice(1) export const generateOperationId = (method: string, paths: string) => { - let operationId = method.toLowerCase() + let operationId = method.toLowerCase() - if (paths === '/') return operationId + 'Index' + if (paths === '/') return operationId + 'Index' - for (const path of paths.split('/')) { - if (path.charCodeAt(0) === 123) { - operationId += 'By' + capitalize(path.slice(1, -1)) - } else { - operationId += capitalize(path) - } - } + for (const path of paths.split('/')) { + if (path.charCodeAt(0) === 123) { + operationId += 'By' + capitalize(path.slice(1, -1)) + } else { + operationId += capitalize(path) + } + } - return operationId + return operationId } export const registerSchemaPath = ({ - schema, - path, - method, - hook, - models + schema, + path, + method, + hook, + models }: { - schema: Partial - contentType?: string | string[] - path: string - method: HTTPMethod - hook?: LocalHook - models: Record + schema: Partial + contentType?: string | string[] + path: string + method: HTTPMethod + hook?: LocalHook + models: Record }) => { - if (hook) hook = deepClone(hook) + if (hook) hook = deepClone(hook) - const contentType = hook?.type ?? [ - 'application/json', - 'multipart/form-data', - 'text/plain' - ] + const contentType = hook?.type ?? [ + 'application/json', + 'multipart/form-data', + 'text/plain' + ] - path = toOpenAPIPath(path) + path = toOpenAPIPath(path) - const contentTypes = - typeof contentType === 'string' - ? [contentType] - : contentType ?? ['application/json'] + const contentTypes = + typeof contentType === 'string' + ? [contentType] + : contentType ?? ['application/json'] - const bodySchema = hook?.body - const paramsSchema = hook?.params - const headerSchema = hook?.headers - const querySchema = hook?.query - let responseSchema = hook?.response as unknown as OpenAPIV3.ResponsesObject + const bodySchema = hook?.body + const paramsSchema = hook?.params + const headerSchema = hook?.headers + const querySchema = hook?.query + let responseSchema = hook?.response as unknown as OpenAPIV3.ResponsesObject - if (typeof responseSchema === 'object') { - if (Kind in responseSchema) { - const { - type, - properties, - required, - additionalProperties, - patternProperties, - ...rest - } = responseSchema as typeof responseSchema & { - type: string - properties: Object - required: string[] - } + if (typeof responseSchema === 'object') { + if (Kind in responseSchema) { + const { + type, + properties, + required, + additionalProperties, + patternProperties, + ...rest + } = responseSchema as typeof responseSchema & { + type: string + properties: Object + required: string[] + } - responseSchema = { - '200': { - ...rest, - description: rest.description as any, - content: mapTypesResponse( - contentTypes, - type === 'object' || type === 'array' - ? ({ - type, - properties, - patternProperties, - items: responseSchema.items, - required - } as any) - : responseSchema - ) - } - } - } else { - Object.entries(responseSchema as Record).forEach( - ([key, value]) => { - if (typeof value === 'string') { - if (!models[value]) return + responseSchema = { + '200': { + ...rest, + description: rest.description as any, + content: mapTypesResponse( + contentTypes, + type === 'object' || type === 'array' + ? ({ + type, + properties, + patternProperties, + items: responseSchema.items, + required + } as any) + : responseSchema + ) + } + } + } else { + Object.entries(responseSchema as Record).forEach( + ([key, value]) => { + if (typeof value === 'string') { + if (!models[value]) return - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { - type, - properties, - required, - additionalProperties: _1, - patternProperties: _2, - ...rest - } = models[value] as TSchema & { - type: string - properties: Object - required: string[] - } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { + type, + properties, + required, + additionalProperties: _1, + patternProperties: _2, + ...rest + } = models[value] as TSchema & { + type: string + properties: Object + required: string[] + } - responseSchema[key] = { - ...rest, - description: rest.description as any, - content: mapTypesResponse(contentTypes, value) - } - } else { - const { - type, - properties, - required, - additionalProperties, - patternProperties, - ...rest - } = value as typeof value & { - type: string - properties: Object - required: string[] - } + responseSchema[key] = { + ...rest, + description: rest.description as any, + content: mapTypesResponse(contentTypes, value) + } + } else { + const { + type, + properties, + required, + additionalProperties, + patternProperties, + ...rest + } = value as typeof value & { + type: string + properties: Object + required: string[] + } - responseSchema[key] = { - ...rest, - description: rest.description as any, - content: mapTypesResponse( - contentTypes, - type === 'object' || type === 'array' - ? ({ - type, - properties, - patternProperties, - items: value.items, - required - } as any) - : value - ) - } - } - } - ) - } - } else if (typeof responseSchema === 'string') { - if (!(responseSchema in models)) return + responseSchema[key] = { + ...rest, + description: rest.description as any, + content: mapTypesResponse( + contentTypes, + type === 'object' || type === 'array' + ? ({ + type, + properties, + patternProperties, + items: value.items, + required + } as any) + : value + ) + } + } + } + ) + } + } else if (typeof responseSchema === 'string') { + if (!(responseSchema in models)) return - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { - type, - properties, - required, - additionalProperties: _1, - patternProperties: _2, - ...rest - } = models[responseSchema] as TSchema & { - type: string - properties: Object - required: string[] - } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { + type, + properties, + required, + additionalProperties: _1, + patternProperties: _2, + ...rest + } = models[responseSchema] as TSchema & { + type: string + properties: Object + required: string[] + } - responseSchema = { - // @ts-ignore - '200': { - ...rest, - content: mapTypesResponse(contentTypes, responseSchema) - } - } - } + responseSchema = { + // @ts-ignore + '200': { + ...rest, + content: mapTypesResponse(contentTypes, responseSchema) + } + } + } - const parameters = [ - ...mapProperties('header', headerSchema, models), - ...mapProperties('path', paramsSchema, models), - ...mapProperties('query', querySchema, models) - ] + const parameters = [ + ...mapProperties('header', headerSchema, models), + ...mapProperties('path', paramsSchema, models), + ...mapProperties('query', querySchema, models) + ] - schema[path] = { - ...(schema[path] ? schema[path] : {}), - [method.toLowerCase()]: { - ...((headerSchema || paramsSchema || querySchema || bodySchema - ? ({ parameters } as any) - : {}) satisfies OpenAPIV3.ParameterObject), - ...(responseSchema - ? { - responses: responseSchema - } - : {}), - operationId: - hook?.detail?.operationId ?? generateOperationId(method, path), - ...hook?.detail, - ...(bodySchema - ? { - requestBody: { - required: true, - content: mapTypesResponse( - contentTypes, - typeof bodySchema === 'string' - ? { - $ref: `#/components/schemas/${bodySchema}` - } - : (bodySchema as any) - ) - } - } - : null) - } satisfies OpenAPIV3.OperationObject - } + schema[path] = { + ...(schema[path] ? schema[path] : {}), + [method.toLowerCase()]: { + ...((headerSchema || paramsSchema || querySchema || bodySchema + ? ({ parameters } as any) + : {}) satisfies OpenAPIV3.ParameterObject), + ...(responseSchema + ? { + responses: responseSchema + } + : {}), + operationId: + hook?.detail?.operationId ?? generateOperationId(method, path), + ...hook?.detail, + ...(bodySchema + ? { + requestBody: { + required: true, + content: mapTypesResponse( + contentTypes, + typeof bodySchema === 'string' + ? { + $ref: `#/components/schemas/${bodySchema}` + } + : (bodySchema as any) + ) + } + } + : null) + } satisfies OpenAPIV3.OperationObject + } } export const filterPaths = ( - paths: Record, - { - excludeStaticFile = true, - exclude = [] - }: { - excludeStaticFile: boolean - exclude: (string | RegExp)[] - } + paths: Record, + { + excludeStaticFile = true, + exclude = [] + }: { + excludeStaticFile: boolean + exclude: (string | RegExp)[] + } ) => { - const newPaths: Record = {} + const newPaths: Record = {} - for (const [key, value] of Object.entries(paths)) - if ( - !exclude.some((x) => { - if (typeof x === 'string') return key === x + for (const [key, value] of Object.entries(paths)) + if ( + !exclude.some((x) => { + if (typeof x === 'string') return key === x - return x.test(key) - }) && - !key.includes('/swagger') && - !key.includes('*') && - (excludeStaticFile ? !key.includes('.') : true) - ) { - Object.keys(value).forEach((method) => { - const schema = value[method] + return x.test(key) + }) && + !key.includes('/swagger') && + !key.includes('*') && + (excludeStaticFile ? !key.includes('.') : true) + ) { + Object.keys(value).forEach((method) => { + const schema = value[method] - if (key.includes('{')) { - if (!schema.parameters) schema.parameters = [] + if (key.includes('{')) { + if (!schema.parameters) schema.parameters = [] - schema.parameters = [ - ...key - .split('/') - .filter( - (x) => - x.startsWith('{') && - !schema.parameters.find( - (params: Record) => - params.in === 'path' && - params.name === - x.slice(1, x.length - 1) - ) - ) - .map((x) => ({ - schema: { type: 'string' }, - in: 'path', - name: x.slice(1, x.length - 1), - required: true - })), - ...schema.parameters - ] - } + schema.parameters = [ + ...key + .split('/') + .filter( + (x) => + x.startsWith('{') && + !schema.parameters.find( + (params: Record) => + params.in === 'path' && + params.name === + x.slice(1, x.length - 1) + ) + ) + .map((x) => ({ + schema: { type: 'string' }, + in: 'path', + name: x.slice(1, x.length - 1), + required: true + })), + ...schema.parameters + ] + } - if (!schema.responses) - schema.responses = { - 200: {} - } - }) + if (!schema.responses) + schema.responses = { + 200: {} + } + }) - newPaths[key] = value - } + newPaths[key] = value + } - return newPaths + return newPaths } diff --git a/test/index.test.ts b/test/index.test.ts index d5e32ba..b84c549 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -8,164 +8,196 @@ import { fail } from 'assert' const req = (path: string) => new Request(`http://localhost${path}`) describe('Swagger', () => { - it('show Swagger page', async () => { - const app = new Elysia().use(swagger()) + it('show Swagger page', async () => { + const app = new Elysia().use(swagger()) - const res = await app.handle(req('/swagger')) - expect(res.status).toBe(200) - }) + await app.modules - it('returns a valid Swagger/OpenAPI json config', async () => { - const app = new Elysia().use(swagger()) - const res = await app.handle(req('/swagger/json')).then((x) => x.json()) - expect(res.openapi).toBe('3.0.3') - await SwaggerParser.validate(res).catch((err) => fail(err)) - }) + const res = await app.handle(req('/swagger')) + expect(res.status).toBe(200) + }) - it('use custom Swagger version', async () => { - const app = new Elysia().use( - swagger({ - provider: 'swagger-ui', - version: '4.5.0' - }) - ) + it('returns a valid Swagger/OpenAPI json config', async () => { + const app = new Elysia().use(swagger()) - const res = await app.handle(req('/swagger')).then((x) => x.text()) - expect( - res.includes( - 'https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui-bundle.js' - ) - ).toBe(true) - }) + await app.modules - it('follow title and description', async () => { - const app = new Elysia().use( - swagger({ - version: '4.5.0', - provider: 'swagger-ui', - documentation: { - info: { - title: 'Elysia Documentation', - description: 'Herrscher of Human', - version: '1.0.0' - } - } - }) - ) + const res = await app.handle(req('/swagger/json')).then((x) => x.json()) + expect(res.openapi).toBe('3.0.3') + await SwaggerParser.validate(res).catch((err) => fail(err)) + }) - const res = await app.handle(req('/swagger')).then((x) => x.text()) + it('use custom Swagger version', async () => { + const app = new Elysia().use( + swagger({ + provider: 'swagger-ui', + version: '4.5.0' + }) + ) - expect(res.includes('Elysia Documentation')).toBe(true) - expect( - res.includes( - ` x.text()) + expect( + res.includes( + 'https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui-bundle.js' + ) + ).toBe(true) + }) + + it('follow title and description', async () => { + const app = new Elysia().use( + swagger({ + version: '4.5.0', + provider: 'swagger-ui', + documentation: { + info: { + title: 'Elysia Documentation', + description: 'Herrscher of Human', + version: '1.0.0' + } + } + }) + ) + + await app.modules + + const res = await app.handle(req('/swagger')).then((x) => x.text()) + + expect(res.includes('Elysia Documentation')).toBe(true) + expect( + res.includes( + `` - ) - ).toBe(true) - }) + ) + ).toBe(true) + }) - it('use custom path', async () => { - const app = new Elysia().use( - swagger({ - path: '/v2/swagger' - }) - ) + it('use custom path', async () => { + const app = new Elysia().use( + swagger({ + path: '/v2/swagger' + }) + ) - const res = await app.handle(req('/v2/swagger')) - expect(res.status).toBe(200) + await app.modules - const resJson = await app.handle(req('/v2/swagger/json')) - expect(resJson.status).toBe(200) - }) + const res = await app.handle(req('/v2/swagger')) + expect(res.status).toBe(200) - it('Swagger UI options', async () => { - const app = new Elysia().use( - swagger({ - provider: 'swagger-ui', - swaggerOptions: { - persistAuthorization: true - } - }) - ) - const res = await app.handle(req('/swagger')).then((x) => x.text()) - const expected = `"persistAuthorization":true` + const resJson = await app.handle(req('/v2/swagger/json')) + expect(resJson.status).toBe(200) + }) - expect(res.trim().includes(expected.trim())).toBe(true) - }) + it('Swagger UI options', async () => { + const app = new Elysia().use( + swagger({ + provider: 'swagger-ui', + swaggerOptions: { + persistAuthorization: true + } + }) + ) - it('should not return content response when using Void type', async () => { - const app = new Elysia().use(swagger()).get('/void', () => {}, { - response: { - 204: t.Void({ - description: 'Void response' - }) - } - }) + await app.modules - const res = await app.handle(req('/swagger/json')) - expect(res.status).toBe(200) - const response = await res.json() - expect(response.paths['/void'].get.responses['204'].description).toBe( - 'Void response' - ) - expect( - response.paths['/void'].get.responses['204'].content - ).toBeUndefined() - }) + const res = await app.handle(req('/swagger')).then((x) => x.text()) + const expected = `"persistAuthorization":true` - it('should not return content response when using Undefined type', async () => { - const app = new Elysia() - .use(swagger()) - .get('/undefined', () => undefined, { - response: { - 204: t.Undefined({ - description: 'Undefined response' - }) - } - }) + expect(res.trim().includes(expected.trim())).toBe(true) + }) - const res = await app.handle(req('/swagger/json')) - expect(res.status).toBe(200) - const response = await res.json() - expect( - response.paths['/undefined'].get.responses['204'].description - ).toBe('Undefined response') - expect( - response.paths['/undefined'].get.responses['204'].content - ).toBeUndefined() - }) + it('should not return content response when using Void type', async () => { + const app = new Elysia().use(swagger()).get('/void', () => {}, { + response: { + 204: t.Void({ + description: 'Void response' + }) + } + }) - it('should not return content response when using Null type', async () => { - const app = new Elysia().use(swagger()).get('/null', () => null, { - response: { - 204: t.Null({ - description: 'Null response' - }) - } - }) + await app.modules - const res = await app.handle(req('/swagger/json')) - expect(res.status).toBe(200) - const response = await res.json() - expect(response.paths['/null'].get.responses['204'].description).toBe( - 'Null response' - ) - expect( - response.paths['/null'].get.responses['204'].content - ).toBeUndefined() - }) + const res = await app.handle(req('/swagger/json')) + expect(res.status).toBe(200) + const response = await res.json() + expect(response.paths['/void'].get.responses['204'].description).toBe( + 'Void response' + ) + expect( + response.paths['/void'].get.responses['204'].content + ).toBeUndefined() + }) - it("should set the required field to true when a request body is present", async () => { - const app = new Elysia().use(swagger()).post("/post", () => {}, { - body: t.Object({ name: t.String() }), - }); + it('should not return content response when using Undefined type', async () => { + const app = new Elysia() + .use(swagger()) + .get('/undefined', () => undefined, { + response: { + 204: t.Undefined({ + description: 'Undefined response' + }) + } + }) - const res = await app.handle(req("/swagger/json")); - expect(res.status).toBe(200); - const response = await res.json(); - expect(response.paths['/post'].post.requestBody.required).toBe(true); - }) + await app.modules + const res = await app.handle(req('/swagger/json')) + expect(res.status).toBe(200) + const response = await res.json() + expect( + response.paths['/undefined'].get.responses['204'].description + ).toBe('Undefined response') + expect( + response.paths['/undefined'].get.responses['204'].content + ).toBeUndefined() + }) + + it('should not return content response when using Null type', async () => { + const app = new Elysia().use(swagger()).get('/null', () => null, { + response: { + 204: t.Null({ + description: 'Null response' + }) + } + }) + + await app.modules + + const res = await app.handle(req('/swagger/json')) + expect(res.status).toBe(200) + const response = await res.json() + expect(response.paths['/null'].get.responses['204'].description).toBe( + 'Null response' + ) + expect( + response.paths['/null'].get.responses['204'].content + ).toBeUndefined() + }) + + it('should set the required field to true when a request body is present', async () => { + const app = new Elysia().use(swagger()).post('/post', () => {}, { + body: t.Object({ name: t.String() }) + }) + + await app.modules + + const res = await app.handle(req('/swagger/json')) + expect(res.status).toBe(200) + const response = await res.json() + expect(response.paths['/post'].post.requestBody.required).toBe(true) + }) + + it('resolve optional param to param', async () => { + const app = new Elysia().use(swagger()).get('/id/:id?', () => {}) + + await app.modules + + const res = await app.handle(req('/swagger/json')) + expect(res.status).toBe(200) + const response = await res.json() + expect(response.paths).toContainKey('/id/{id}') + }) }) diff --git a/test/validateSchema.test.ts b/test/validate-schema.test.ts similarity index 99% rename from test/validateSchema.test.ts rename to test/validate-schema.test.ts index bcc74da..868e63b 100644 --- a/test/validateSchema.test.ts +++ b/test/validate-schema.test.ts @@ -78,6 +78,8 @@ it('returns a valid Swagger/OpenAPI json config for many routes', async () => { } ) + await app.modules + const res = await app.handle(req('/swagger/json')).then((x) => x.json()) await SwaggerParser.validate(res).catch((err) => fail(err)) }) diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json deleted file mode 100644 index a5f1b14..0000000 --- a/tsconfig.cjs.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "lib": ["ESNext", "DOM", "ScriptHost"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "CommonJS", /* Specify what module code is generated. */ - // "rootDir": "./src", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - "baseUrl": "./src", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - "types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist/cjs", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ - }, - "include": ["src/**/*"] -} diff --git a/tsconfig.esm.json b/tsconfig.dts.json similarity index 91% rename from tsconfig.esm.json rename to tsconfig.dts.json index 887c6e7..cd54e87 100644 --- a/tsconfig.esm.json +++ b/tsconfig.dts.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "preserveSymlinks": true, /* Visit https://aka.ms/tsconfig to read more about this file */ /* Projects */ @@ -12,7 +13,7 @@ /* Language and Environment */ "target": "ES2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "lib": ["ESNext", "DOM", "ScriptHost"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "lib": ["ESNext"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ @@ -26,16 +27,16 @@ /* Modules */ "module": "ES2022", /* Specify what module code is generated. */ - // "rootDir": "./src", /* Specify the root folder within your source files. */ + "rootDir": "./src", /* Specify the root folder within your source files. */ "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - "baseUrl": "./src", /* Specify the base directory to resolve non-relative module names. */ + // "baseUrl": "./src", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - "types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */ + // "types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ + "resolveJsonModule": true, /* Enable importing .json files. */ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ @@ -46,7 +47,7 @@ /* Emit */ "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ "outDir": "./dist", /* Specify an output folder for all emitted files. */ @@ -70,7 +71,7 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ @@ -100,5 +101,6 @@ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true, /* Skip type checking all .d.ts files. */ }, - "include": ["src/**/*"] + "exclude": ["node_modules", "test", "example", "dist", "build.ts"] + // "include": ["src/**/*"] }