koa2-swagger-ui 5.2.1 → 5.5.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/README.md CHANGED
@@ -44,6 +44,7 @@ specPrefix: '/docs/spec', // route where the spec is returned
44
44
  exposeSpec: false, // expose spec file
45
45
  hideTopbar: false, // hide swagger top bar
46
46
  favicon: '/favicon.png', // default favicon
47
+ customCSS: `h1 { color: red }`, // Add Custom CSS on the html
47
48
  ```
48
49
 
49
50
  ## example
package/dist/index.d.ts CHANGED
@@ -22,5 +22,6 @@ export interface KoaSwaggerUiOptions {
22
22
  exposeSpec: boolean;
23
23
  hideTopbar: boolean;
24
24
  favicon: string;
25
+ customCSS: string;
25
26
  }
26
27
  export declare function koaSwagger(config?: Partial<KoaSwaggerUiOptions>): Middleware;
package/dist/index.hbs CHANGED
@@ -25,6 +25,10 @@
25
25
  margin:0;
26
26
  background: #fafafa;
27
27
  }
28
+
29
+ {{#if customCSS}}
30
+ {{{customCSS}}}
31
+ {{/if}}
28
32
  </style>
29
33
  </head>
30
34
 
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -39,6 +43,7 @@ const defaultOptions = {
39
43
  exposeSpec: false,
40
44
  hideTopbar: false,
41
45
  favicon: '/favicon.png',
46
+ customCSS: '',
42
47
  };
43
48
  function koaSwagger(config = {}) {
44
49
  if (config.swaggerVersion === undefined) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createReadStream, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { HelperDelegate, HelperOptions } from 'handlebars';\nimport * as Handlebars from 'handlebars';\nimport type { Context, Middleware, Next } from 'koa';\nimport { defaultsDeep } from 'lodash';\nimport { sync as readPkgUpSync } from 'read-pkg-up';\n\nexport interface SwaggerOptions {\n [key: string]:\n | string\n | boolean\n | string[]\n | Record<string, unknown>\n | null\n | undefined;\n dom_id?: string;\n url?: string;\n supportedSubmitMethods?: string[];\n docExpansion?: string;\n jsonEditor?: boolean;\n defaultModelRendering?: string;\n showRequestHeaders?: boolean;\n layout?: string;\n spec?: Record<string, unknown>;\n validatorUrl?: string | null;\n}\n\nexport interface KoaSwaggerUiOptions {\n title: string;\n oauthOptions: boolean | any;\n swaggerOptions: SwaggerOptions;\n swaggerVersion: string;\n routePrefix: string | false;\n specPrefix: string;\n exposeSpec: boolean;\n hideTopbar: boolean;\n favicon: string;\n}\n\nconst defaultOptions: KoaSwaggerUiOptions = {\n title: 'Swagger UI',\n oauthOptions: false,\n swaggerOptions: {\n dom_id: '#swagger-ui',\n url: 'https://petstore.swagger.io/v2/swagger.json',\n layout: 'StandaloneLayout',\n },\n routePrefix: '/docs',\n specPrefix: '/docs/spec',\n swaggerVersion: '',\n exposeSpec: false,\n hideTopbar: false,\n favicon: '/favicon.png',\n};\n\nexport function koaSwagger(\n config: Partial<KoaSwaggerUiOptions> = {},\n): Middleware {\n if (config.swaggerVersion === undefined) {\n const pkg = readPkgUpSync({ cwd: __dirname });\n if (pkg === undefined) {\n throw new Error('Package not found');\n }\n\n defaultOptions.swaggerVersion =\n pkg.packageJson.devDependencies!['swagger-ui-dist'];\n }\n\n // Setup icons\n const extFavicon = config.favicon;\n const faviconPath = join(__dirname, defaultOptions.favicon);\n\n // Setup default options\n const options: KoaSwaggerUiOptions = defaultsDeep(config, defaultOptions);\n\n const specPrefixRegex = new RegExp(`${options.specPrefix}[/]*$`, 'i');\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const routePrefixRegex = new RegExp(`${options.routePrefix}[/]*$`, 'i');\n\n Handlebars.registerHelper('json', (context) => JSON.stringify(context));\n Handlebars.registerHelper('strfnc', (fnc: HelperDelegate) => fnc);\n Handlebars.registerHelper(\n 'isset',\n function (this: any, conditional: any, opt: HelperOptions) {\n return conditional ? opt.fn(this) : opt.inverse(this);\n },\n );\n const index = Handlebars.compile(\n readFileSync(join(__dirname, './index.hbs'), 'utf-8'),\n );\n\n // eslint-disable-next-line func-names\n return function koaSwaggerUi(ctx: Context, next: Next) {\n if (options.exposeSpec && specPrefixRegex.test(ctx.path)) {\n ctx.body = options.swaggerOptions.spec;\n return true;\n }\n\n if (options.routePrefix === false || routePrefixRegex.test(ctx.path)) {\n ctx.type = 'text/html';\n ctx.body = index(options);\n return true;\n }\n\n if (extFavicon === undefined && ctx.path === defaultOptions.favicon) {\n ctx.type = 'image/png';\n ctx.body = createReadStream(faviconPath);\n return true;\n }\n\n return next();\n };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createReadStream, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { HelperDelegate, HelperOptions } from 'handlebars';\nimport * as Handlebars from 'handlebars';\nimport type { Context, Middleware, Next } from 'koa';\nimport { defaultsDeep } from 'lodash';\nimport { sync as readPkgUpSync } from 'read-pkg-up';\n\nexport interface SwaggerOptions {\n [key: string]:\n | string\n | boolean\n | string[]\n | Record<string, unknown>\n | null\n | undefined;\n dom_id?: string;\n url?: string;\n supportedSubmitMethods?: string[];\n docExpansion?: string;\n jsonEditor?: boolean;\n defaultModelRendering?: string;\n showRequestHeaders?: boolean;\n layout?: string;\n spec?: Record<string, unknown>;\n validatorUrl?: string | null;\n}\n\nexport interface KoaSwaggerUiOptions {\n title: string;\n oauthOptions: boolean | any;\n swaggerOptions: SwaggerOptions;\n swaggerVersion: string;\n routePrefix: string | false;\n specPrefix: string;\n exposeSpec: boolean;\n hideTopbar: boolean;\n favicon: string;\n customCSS: string;\n}\n\nconst defaultOptions: KoaSwaggerUiOptions = {\n title: 'Swagger UI',\n oauthOptions: false,\n swaggerOptions: {\n dom_id: '#swagger-ui',\n url: 'https://petstore.swagger.io/v2/swagger.json',\n layout: 'StandaloneLayout',\n },\n routePrefix: '/docs',\n specPrefix: '/docs/spec',\n swaggerVersion: '',\n exposeSpec: false,\n hideTopbar: false,\n favicon: '/favicon.png',\n customCSS: '',\n};\n\nexport function koaSwagger(\n config: Partial<KoaSwaggerUiOptions> = {},\n): Middleware {\n if (config.swaggerVersion === undefined) {\n const pkg = readPkgUpSync({ cwd: __dirname });\n if (pkg === undefined) {\n throw new Error('Package not found');\n }\n\n defaultOptions.swaggerVersion =\n pkg.packageJson.devDependencies!['swagger-ui-dist'];\n }\n\n // Setup icons\n const extFavicon = config.favicon;\n const faviconPath = join(__dirname, defaultOptions.favicon);\n\n // Setup default options\n const options: KoaSwaggerUiOptions = defaultsDeep(config, defaultOptions);\n\n const specPrefixRegex = new RegExp(`${options.specPrefix}[/]*$`, 'i');\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const routePrefixRegex = new RegExp(`${options.routePrefix}[/]*$`, 'i');\n\n Handlebars.registerHelper('json', (context) => JSON.stringify(context));\n Handlebars.registerHelper('strfnc', (fnc: HelperDelegate) => fnc);\n Handlebars.registerHelper(\n 'isset',\n function (this: any, conditional: any, opt: HelperOptions) {\n return conditional ? opt.fn(this) : opt.inverse(this);\n },\n );\n const index = Handlebars.compile(\n readFileSync(join(__dirname, './index.hbs'), 'utf-8'),\n );\n\n // eslint-disable-next-line func-names\n return function koaSwaggerUi(ctx: Context, next: Next) {\n if (options.exposeSpec && specPrefixRegex.test(ctx.path)) {\n ctx.body = options.swaggerOptions.spec;\n return true;\n }\n\n if (options.routePrefix === false || routePrefixRegex.test(ctx.path)) {\n ctx.type = 'text/html';\n ctx.body = index(options);\n return true;\n }\n\n if (extFavicon === undefined && ctx.path === defaultOptions.favicon) {\n ctx.type = 'image/png';\n ctx.body = createReadStream(faviconPath);\n return true;\n }\n\n return next();\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koa2-swagger-ui",
3
- "version": "5.2.1",
3
+ "version": "5.5.0",
4
4
  "description": "Swagger UI middleware for koa",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -25,22 +25,22 @@
25
25
  "read-pkg-up": "^7.0.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@babel/plugin-transform-modules-commonjs": "7.15.4",
29
- "@babel/preset-typescript": "7.15.0",
30
- "@ctrl/eslint-config": "2.1.1",
31
- "@jest/globals": "27.2.4",
28
+ "@babel/plugin-transform-modules-commonjs": "7.17.7",
29
+ "@babel/preset-typescript": "7.16.7",
30
+ "@ctrl/eslint-config": "3.3.1",
31
+ "@jest/globals": "27.5.1",
32
32
  "@types/koa-router": "7.4.4",
33
- "@types/lodash": "4.14.175",
34
- "@types/node": "16.10.2",
33
+ "@types/lodash": "4.14.179",
34
+ "@types/node": "17.0.21",
35
35
  "@types/supertest": "2.0.11",
36
36
  "del-cli": "4.0.1",
37
- "jest": "27.2.4",
38
- "koa": "2.13.3",
37
+ "jest": "27.5.1",
38
+ "koa": "2.13.4",
39
39
  "koa-router": "10.1.1",
40
- "supertest": "6.1.6",
41
- "swagger-ui-dist": "3.52.3",
42
- "ts-node": "10.2.1",
43
- "typescript": "4.4.3"
40
+ "supertest": "6.2.2",
41
+ "swagger-ui-dist": "4.6.2",
42
+ "ts-node": "10.7.0",
43
+ "typescript": "4.6.2"
44
44
  },
45
45
  "release": {
46
46
  "branch": "master"