@visulima/api-platform 1.2.12 → 1.2.14
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/CHANGELOG.md +33 -0
- package/bin/index.js +6 -8
- package/dist/{chunk-5B2CCUEK.js → chunk-3GKT5H3V.js} +2 -2
- package/dist/chunk-3GKT5H3V.js.map +1 -0
- package/dist/{chunk-OUWZ2PU5.js → chunk-4D6JZ4TL.js} +1 -1
- package/dist/chunk-AB7BFRZY.mjs +9 -0
- package/dist/chunk-AB7BFRZY.mjs.map +1 -0
- package/dist/chunk-ADVXXSKJ.js +24 -0
- package/dist/chunk-ADVXXSKJ.js.map +1 -0
- package/dist/chunk-EMJS7XMY.mjs +13 -0
- package/dist/chunk-EMJS7XMY.mjs.map +1 -0
- package/dist/chunk-HNWSVLC3.mjs +17 -0
- package/dist/chunk-HNWSVLC3.mjs.map +1 -0
- package/dist/{chunk-2BDDP26Z.mjs → chunk-IGJDNXIE.mjs} +2 -2
- package/dist/chunk-IGJDNXIE.mjs.map +1 -0
- package/dist/chunk-M5CDBLRM.js +25 -0
- package/dist/chunk-M5CDBLRM.js.map +1 -0
- package/dist/chunk-WYXGSYH5.js +13 -0
- package/dist/chunk-WYXGSYH5.js.map +1 -0
- package/dist/{chunk-YOXCJZNX.mjs → chunk-XIJ2ZQRX.mjs} +1 -1
- package/dist/framework/cli/commander/index.d.mts +5 -0
- package/dist/framework/cli/commander/index.js +3 -3
- package/dist/framework/cli/commander/index.js.map +1 -1
- package/dist/framework/cli/commander/index.mjs +3 -3
- package/dist/framework/cli/commander/index.mjs.map +1 -1
- package/dist/framework/cli/index.d.mts +11 -0
- package/dist/framework/cli/index.d.ts +4 -4
- package/dist/framework/cli/index.js +3 -3
- package/dist/framework/cli/index.mjs +2 -2
- package/dist/framework/next/index-browser.d.mts +5 -0
- package/dist/framework/next/index-browser.js +3 -3
- package/dist/framework/next/index-browser.mjs +2 -2
- package/dist/framework/next/index-server.d.mts +20 -0
- package/dist/framework/next/index-server.d.ts +5 -5
- package/dist/framework/next/index-server.js +11 -11
- package/dist/framework/next/index-server.js.map +1 -1
- package/dist/framework/next/index-server.mjs +7 -7
- package/dist/framework/next/index-server.mjs.map +1 -1
- package/dist/framework/next/routes/pages/redoc/index.d.mts +8 -0
- package/dist/framework/next/routes/pages/redoc/index.d.ts +3 -2
- package/dist/framework/next/routes/pages/redoc/index.js +4 -4
- package/dist/framework/next/routes/pages/redoc/index.js.map +1 -1
- package/dist/framework/next/routes/pages/redoc/index.mjs +4 -4
- package/dist/framework/next/routes/pages/redoc/index.mjs.map +1 -1
- package/dist/framework/next/routes/pages/swagger/index.d.mts +7 -0
- package/dist/framework/next/routes/pages/swagger/index.js +7 -7
- package/dist/framework/next/routes/pages/swagger/index.js.map +1 -1
- package/dist/framework/next/routes/pages/swagger/index.mjs +5 -5
- package/dist/framework/next/routes/pages/swagger/index.mjs.map +1 -1
- package/dist/index-browser.d.mts +2 -0
- package/dist/index-browser.d.ts +1 -1
- package/dist/index-browser.js +3 -3
- package/dist/index-browser.mjs +2 -2
- package/dist/index-server.d.mts +84 -0
- package/dist/index-server.d.ts +12 -14
- package/dist/index-server.js +87 -87
- package/dist/index-server.js.map +1 -1
- package/dist/index-server.mjs +10 -10
- package/dist/index-server.mjs.map +1 -1
- package/dist/{swagger-handler-8947e0f1.d.ts → swagger-handler-47360cd1.d.ts} +4 -6
- package/package.json +66 -58
- package/dist/chunk-2BDDP26Z.mjs.map +0 -1
- package/dist/chunk-5B2CCUEK.js.map +0 -1
- package/dist/chunk-EP2A5R2C.js +0 -13
- package/dist/chunk-EP2A5R2C.js.map +0 -1
- package/dist/chunk-JC55W6OX.js +0 -25
- package/dist/chunk-JC55W6OX.js.map +0 -1
- package/dist/chunk-MAUWX6TE.mjs +0 -13
- package/dist/chunk-MAUWX6TE.mjs.map +0 -1
- package/dist/chunk-RK2WQGNS.js +0 -24
- package/dist/chunk-RK2WQGNS.js.map +0 -1
- package/dist/chunk-S2NV4N4L.mjs +0 -17
- package/dist/chunk-S2NV4N4L.mjs.map +0 -1
- package/dist/chunk-WJDS32PO.mjs +0 -9
- package/dist/chunk-WJDS32PO.mjs.map +0 -1
- package/dist/{chunk-OUWZ2PU5.js.map → chunk-4D6JZ4TL.js.map} +0 -0
- package/dist/{chunk-YOXCJZNX.mjs.map → chunk-XIJ2ZQRX.mjs.map} +0 -0
- package/dist/{index-browser-bd61921e.d.ts → index-browser-48644724.d.ts} +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/api-platform",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.14",
|
|
4
4
|
"description": "Visulima API platform is a set of tools to build and consume web APIs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"anolilab",
|
|
@@ -106,14 +106,17 @@
|
|
|
106
106
|
"clean": "rimraf node_modules dist .eslintcache",
|
|
107
107
|
"coverage": "vitest run --coverage",
|
|
108
108
|
"dev": "pnpm run build --watch",
|
|
109
|
-
"lint:eslint": "
|
|
109
|
+
"lint:eslint": "eslint . --ext js,cjs,mjs,ts,tsx,json,yaml,yml,md,mdx --max-warnings=0 --config .eslintrc.js",
|
|
110
110
|
"lint:eslint:fix": "pnpm run lint:eslint --fix",
|
|
111
|
+
"lint:prettier": "prettier --config=.prettierrc.js --check .",
|
|
112
|
+
"lint:prettier:fix": "prettier --config=.prettierrc.js --write .",
|
|
113
|
+
"lint:types": "tsc --noEmit --project tsconfig.json",
|
|
111
114
|
"test": "vitest run",
|
|
112
115
|
"test:watch": "vitest"
|
|
113
116
|
},
|
|
114
117
|
"dependencies": {
|
|
115
|
-
"@visulima/connect": "1.3.
|
|
116
|
-
"@visulima/jsdoc-open-api": "1.3.
|
|
118
|
+
"@visulima/connect": "1.3.8",
|
|
119
|
+
"@visulima/jsdoc-open-api": "1.3.12",
|
|
117
120
|
"accepts": "^1.3.8",
|
|
118
121
|
"debug": "^4.3.4",
|
|
119
122
|
"http-errors": "^2.0.0",
|
|
@@ -122,17 +125,20 @@
|
|
|
122
125
|
"lodash.merge": "^4.6.2",
|
|
123
126
|
"schema-dts": "^1.1.2",
|
|
124
127
|
"ts-japi": "^1.8.0",
|
|
125
|
-
"yaml": "^2.3.
|
|
128
|
+
"yaml": "^2.3.1",
|
|
126
129
|
"zod-to-ts": "^1.1.4"
|
|
127
130
|
},
|
|
128
131
|
"devDependencies": {
|
|
129
|
-
"@anolilab/eslint-config": "^
|
|
130
|
-
"@anolilab/
|
|
132
|
+
"@anolilab/eslint-config": "^11.0.2",
|
|
133
|
+
"@anolilab/prettier-config": "^5.0.1",
|
|
134
|
+
"@anolilab/semantic-release-preset": "^6.0.2",
|
|
135
|
+
"@arthurgeron/eslint-plugin-react-usememo": "^1.1.4",
|
|
131
136
|
"@hapi/hapi": "^21.3.2",
|
|
132
137
|
"@koa/router": "^12.0.0",
|
|
133
|
-
"@
|
|
138
|
+
"@secretlint/secretlint-rule-preset-recommend": "^7.0.3",
|
|
134
139
|
"@testing-library/react": "^14.0.0",
|
|
135
140
|
"@testing-library/react-hooks": "^8.0.1",
|
|
141
|
+
"@total-typescript/ts-reset": "^0.4.2",
|
|
136
142
|
"@types/accepts": "^1.3.5",
|
|
137
143
|
"@types/cors": "^2.8.13",
|
|
138
144
|
"@types/debug": "^4.1.8",
|
|
@@ -140,68 +146,58 @@
|
|
|
140
146
|
"@types/express-serve-static-core": "^4.17.35",
|
|
141
147
|
"@types/http-errors": "^2.0.1",
|
|
142
148
|
"@types/jstoxml": "^2.0.2",
|
|
143
|
-
"@types/koa": "^2.13.
|
|
149
|
+
"@types/koa": "^2.13.7",
|
|
144
150
|
"@types/koa__router": "^12.0.0",
|
|
145
151
|
"@types/lodash.merge": "^4.6.7",
|
|
146
152
|
"@types/lodash.set": "^4.3.7",
|
|
147
|
-
"@types/node": "18.16.
|
|
153
|
+
"@types/node": "18.16.18",
|
|
148
154
|
"@types/qs": "^6.9.7",
|
|
149
|
-
"@types/react": "^18.2.
|
|
150
|
-
"@types/react-dom": "^18.2.
|
|
155
|
+
"@types/react": "^18.2.17",
|
|
156
|
+
"@types/react-dom": "^18.2.7",
|
|
151
157
|
"@types/swagger-ui-react": "^4.18.0",
|
|
152
158
|
"@types/webpack": "^5.28.1",
|
|
153
|
-
"@
|
|
154
|
-
"@
|
|
155
|
-
"@
|
|
156
|
-
"@visulima/readdir": "1.3.6",
|
|
157
|
-
"@vitest/coverage-c8": "^0.31.1",
|
|
159
|
+
"@visulima/crud": "1.0.14",
|
|
160
|
+
"@visulima/readdir": "1.3.8",
|
|
161
|
+
"@vitest/coverage-v8": "^0.33.0",
|
|
158
162
|
"chalk": "5.2.0",
|
|
159
|
-
"commander": "^
|
|
160
|
-
"core-js": "^3.
|
|
163
|
+
"commander": "^11.0.0",
|
|
164
|
+
"core-js": "^3.32.0",
|
|
161
165
|
"cors": "^2.8.5",
|
|
162
166
|
"cross-env": "^7.0.3",
|
|
163
|
-
"eslint": "^8.
|
|
164
|
-
"eslint-plugin-
|
|
165
|
-
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
166
|
-
"eslint-plugin-import": "^2.27.5",
|
|
167
|
-
"eslint-plugin-json": "^3.1.0",
|
|
167
|
+
"eslint": "^8.46.0",
|
|
168
|
+
"eslint-plugin-etc": "^2.0.3",
|
|
168
169
|
"eslint-plugin-jsx-a11y": "^6.7.1",
|
|
169
|
-
"eslint-plugin-
|
|
170
|
-
"eslint-plugin-
|
|
171
|
-
"eslint-plugin-no-secrets": "^0.8.9",
|
|
172
|
-
"eslint-plugin-node": "^11.1.0",
|
|
173
|
-
"eslint-plugin-optimize-regex": "^1.2.1",
|
|
174
|
-
"eslint-plugin-promise": "^6.1.1",
|
|
175
|
-
"eslint-plugin-react": "7.32.2",
|
|
170
|
+
"eslint-plugin-mdx": "^2.1.0",
|
|
171
|
+
"eslint-plugin-react": "7.33.0",
|
|
176
172
|
"eslint-plugin-react-hooks": "4.6.0",
|
|
177
|
-
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
178
|
-
"eslint-plugin-sort-keys-fix": "^1.1.2",
|
|
179
173
|
"eslint-plugin-testing-library": "^5.11.0",
|
|
180
|
-
"eslint-plugin-
|
|
181
|
-
"eslint-plugin-
|
|
182
|
-
"eslint-plugin-you-dont-need-momentjs": "^1.6.0",
|
|
174
|
+
"eslint-plugin-vitest": "^0.2.8",
|
|
175
|
+
"eslint-plugin-zod": "^1.4.0",
|
|
183
176
|
"express": "^4.18.2",
|
|
184
|
-
"fastify": "^4.
|
|
177
|
+
"fastify": "^4.21.0",
|
|
185
178
|
"koa": "^2.14.2",
|
|
186
|
-
"mobx": "^6.
|
|
187
|
-
"next": "^13.4.
|
|
179
|
+
"mobx": "^6.10.0",
|
|
180
|
+
"next": "^13.4.6",
|
|
188
181
|
"next-test-api-route-handler": "^4.0.0-canary.1",
|
|
189
182
|
"node-mocks-http": "^1.12.2",
|
|
190
183
|
"openapi-types": "^12.1.3",
|
|
191
|
-
"prettier": "^
|
|
192
|
-
"rate-limiter-flexible": "^2.4.
|
|
184
|
+
"prettier": "^3.0.0",
|
|
185
|
+
"rate-limiter-flexible": "^2.4.2",
|
|
193
186
|
"react": "^18.2.0",
|
|
194
187
|
"react-dom": "^18.2.0",
|
|
195
188
|
"redoc": "^2.0.0",
|
|
196
189
|
"rimraf": "^5.0.1",
|
|
197
|
-
"
|
|
198
|
-
"
|
|
199
|
-
"
|
|
200
|
-
"
|
|
201
|
-
"
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
190
|
+
"secretlint": "7.0.3",
|
|
191
|
+
"semantic-release": "^21.0.7",
|
|
192
|
+
"sort-package-json": "^2.5.1",
|
|
193
|
+
"styled-components": "^6.0.5",
|
|
194
|
+
"swagger-ui-dist": "^4.19.1",
|
|
195
|
+
"swagger-ui-react": "^4.19.1",
|
|
196
|
+
"tsup": "^7.1.0",
|
|
197
|
+
"type-fest": "^4.0.0",
|
|
198
|
+
"typescript": "^5.1.6",
|
|
199
|
+
"vitest": "^0.33.0",
|
|
200
|
+
"webpack": "^5.88.2",
|
|
205
201
|
"zod": "^3.21.4"
|
|
206
202
|
},
|
|
207
203
|
"peerDependencies": {
|
|
@@ -212,20 +208,20 @@
|
|
|
212
208
|
"optionalDependencies": {
|
|
213
209
|
"@hapi/hapi": "^21.3.2",
|
|
214
210
|
"@koa/router": "^12.0.0",
|
|
215
|
-
"@visulima/crud": "1.0.
|
|
216
|
-
"@visulima/readdir": "1.3.
|
|
211
|
+
"@visulima/crud": "1.0.14",
|
|
212
|
+
"@visulima/readdir": "1.3.8",
|
|
217
213
|
"chalk": "5.2.0",
|
|
218
|
-
"commander": "^
|
|
214
|
+
"commander": "^11.0.0",
|
|
219
215
|
"cors": "^2.8.5",
|
|
220
216
|
"express": "^4.18.2",
|
|
221
|
-
"fastify": "^4.
|
|
217
|
+
"fastify": "^4.21.0",
|
|
222
218
|
"koa": "^2.14.2",
|
|
223
|
-
"next": "^13.4.
|
|
224
|
-
"rate-limiter-flexible": "^2.4.
|
|
219
|
+
"next": "^13.4.5",
|
|
220
|
+
"rate-limiter-flexible": "^2.4.2",
|
|
225
221
|
"redoc": "^2.0.0",
|
|
226
|
-
"swagger-ui-dist": "^4.19.
|
|
227
|
-
"swagger-ui-react": "^4.19.
|
|
228
|
-
"webpack": "^5.
|
|
222
|
+
"swagger-ui-dist": "^4.19.1",
|
|
223
|
+
"swagger-ui-react": "^4.19.1",
|
|
224
|
+
"webpack": "^5.88.2"
|
|
229
225
|
},
|
|
230
226
|
"engines": {
|
|
231
227
|
"node": ">=16.18.0 <=20.*"
|
|
@@ -234,6 +230,18 @@
|
|
|
234
230
|
"access": "public",
|
|
235
231
|
"provenance": true
|
|
236
232
|
},
|
|
233
|
+
"anolilab": {
|
|
234
|
+
"eslint-config": {
|
|
235
|
+
"plugin": {
|
|
236
|
+
"tsdoc": false,
|
|
237
|
+
"testing-library-dom": false
|
|
238
|
+
},
|
|
239
|
+
"warn_on_unsupported_typescript_version": false,
|
|
240
|
+
"info_on_disabling_jsx_react_rule": false,
|
|
241
|
+
"info_on_disabling_prettier_conflict_rule": false,
|
|
242
|
+
"info_on_disabling_jsonc_sort_keys_rule": false
|
|
243
|
+
}
|
|
244
|
+
},
|
|
237
245
|
"sources": [
|
|
238
246
|
"src/index-browser.tsx",
|
|
239
247
|
"src/index-server.ts",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/framework/next/routes/pages/get-static-properties-swagger.ts"],"names":["debug","swaggerDebug","getStaticProps","swaggerUrl","swaggerData","get_static_properties_swagger_default"],"mappings":"AACA,OAAOA,MAAW,QAKlB,IAAMC,EAAeD,EAAM,6DAA6D,EAGlFE,EAA0DC,GAAe,SAKzE,CAGF,IAAMC,EAAc,MADH,MAAM,MAAMD,CAAU,GACJ,KAAK,EAExC,OAAAF,EAAaG,CAAW,EAEjB,CACH,MAAO,CACH,WAAAD,EACA,YAAa,KAAK,MAAM,KAAK,UAAUC,CAAW,CAAC,CACvD,CACJ,CACJ,EAEOC,EAAQH","sourcesContent":["// eslint-disable-next-line unicorn/prevent-abbreviations\nimport debug from \"debug\";\nimport type { GetStaticProps } from \"next\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\n// eslint-disable-next-line testing-library/no-debugging-utils\nconst swaggerDebug = debug(\"visulima:api-platform:swagger:get-static-properties-swagger\");\n\n// eslint-disable-next-line unicorn/consistent-function-scoping\nconst getStaticProps: (swaggerUrl: string) => GetStaticProps = (swaggerUrl) => async (): Promise<{\n props: {\n swaggerUrl: string;\n swaggerData: OpenAPIV3.Document;\n };\n}> => {\n // eslint-disable-next-line compat/compat\n const response = await fetch(swaggerUrl);\n const swaggerData = await response.json();\n\n swaggerDebug(swaggerData);\n\n return {\n props: {\n swaggerUrl,\n swaggerData: JSON.parse(JSON.stringify(swaggerData)),\n },\n };\n};\n\nexport default getStaticProps;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/framework/next/routes/pages/get-static-properties-swagger.ts"],"names":["debug","swaggerDebug","getStaticProps","swaggerUrl","swaggerData","get_static_properties_swagger_default"],"mappings":"AACA,OAAOA,MAAW,QAKlB,IAAMC,EAAeD,EAAM,6DAA6D,EAGlFE,EAA0DC,GAAe,SAKzE,CAGF,IAAMC,EAAc,MADH,MAAM,MAAMD,CAAU,GACJ,KAAK,EAExC,OAAAF,EAAaG,CAAW,EAEjB,CACH,MAAO,CACH,WAAAD,EACA,YAAa,KAAK,MAAM,KAAK,UAAUC,CAAW,CAAC,CACvD,CACJ,CACJ,EAEOC,EAAQH","sourcesContent":["// eslint-disable-next-line unicorn/prevent-abbreviations\nimport debug from \"debug\";\nimport type { GetStaticProps } from \"next\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\n// eslint-disable-next-line testing-library/no-debugging-utils\nconst swaggerDebug = debug(\"visulima:api-platform:swagger:get-static-properties-swagger\");\n\n// eslint-disable-next-line unicorn/consistent-function-scoping\nconst getStaticProps: (swaggerUrl: string) => GetStaticProps = (swaggerUrl) => async (): Promise<{\n props: {\n swaggerUrl: string;\n swaggerData: OpenAPIV3.Document;\n };\n}> => {\n // eslint-disable-next-line compat/compat\n const response = await fetch(swaggerUrl);\n const swaggerData = await response.json();\n\n swaggerDebug(swaggerData);\n\n return {\n props: {\n swaggerUrl,\n swaggerData: JSON.parse(JSON.stringify(swaggerData)),\n },\n };\n};\n\nexport default getStaticProps;\n"]}
|
package/dist/chunk-EP2A5R2C.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkOUWZ2PU5_js = require('./chunk-OUWZ2PU5.js');
|
|
4
|
-
var zodToTs = require('zod-to-ts');
|
|
5
|
-
var zod = require('zod');
|
|
6
|
-
|
|
7
|
-
var I={};chunkOUWZ2PU5_js.a(I,{dateIn:()=>K,dateOut:()=>w});var g="ZodDateIn",N=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?)?Z?$/,p=class extends zod.ZodType{_parse(t){let{status:d,ctx:e}=this._processInputParams(t);if(e.parsedType!==zod.ZodParsedType.string)return zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_type,expected:zod.ZodParsedType.string,received:e.parsedType}),zod.INVALID;N.test(e.data)||(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_string,validation:"regex"}),d.dirty());let c=new Date(e.data);return Number.isNaN(c.getTime())?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_date}),zod.INVALID):{status:d.value,value:c}}},a=p;a.create=()=>new p({typeName:g});var v="ZodDateOut",i=class extends zod.ZodType{_parse(t){let{status:d,ctx:e}=this._processInputParams(t);return e.parsedType!==zod.ZodParsedType.date?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_type,expected:zod.ZodParsedType.date,received:e.parsedType}),zod.INVALID):Number.isNaN(e.data.getTime())?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_date}),zod.INVALID):{status:d.value,value:e.data.toISOString()}}},r=i;r.create=()=>new i({typeName:v});var K=(...o)=>zodToTs.withGetType(a.create(...o),t=>t.factory.createKeywordTypeNode(t.SyntaxKind.StringKeyword)),w=(...o)=>zodToTs.withGetType(r.create(...o),t=>t.factory.createKeywordTypeNode(t.SyntaxKind.StringKeyword));
|
|
8
|
-
|
|
9
|
-
exports.a = K;
|
|
10
|
-
exports.b = w;
|
|
11
|
-
exports.c = I;
|
|
12
|
-
//# sourceMappingURL=out.js.map
|
|
13
|
-
//# sourceMappingURL=chunk-EP2A5R2C.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/zod/index.ts","../src/zod/date-in-schema.ts","../src/zod/date-out-schema.ts"],"names":["zod_exports","__export","dateIn","dateOut","withGetType","addIssueToContext","INVALID","ZodIssueCode","ZodParsedType","ZodType","zodDateInKind","isoDateRegex","_ZodDateIn","input","status","ctx","date","ZodDateIn","zodDateOutKind","_ZodDateOut","ZodDateOut","parameters","ts"],"mappings":"wCAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,YAAAC,IAAA,OAAS,eAAAC,MAAmB,YCC5B,OACI,qBAAAC,EAAmB,WAAAC,EAAS,gBAAAC,EAAc,iBAAAC,EAAe,WAAAC,MACtD,MAEP,IAAMC,EAAgB,YAOTC,EAAe,uDAOfC,EAAN,cAAwBH,CAAoC,CAExD,OAAOI,EAA0C,CAEpD,GAAM,CAAE,OAAAC,EAAQ,IAAAC,CAAI,EAAI,KAAK,oBAAoBF,CAAK,EACtD,GAAIE,EAAI,aAAeP,EAAc,OACjC,OAAAH,EAAkBU,EAAK,CACnB,KAAMR,EAAa,aACnB,SAAUC,EAAc,OACxB,SAAUO,EAAI,UAClB,CAAC,EACMT,EAGNK,EAAa,KAAKI,EAAI,IAAc,IACrCV,EAAkBU,EAAK,CACnB,KAAMR,EAAa,eACnB,WAAY,OAChB,CAAC,EACDO,EAAO,MAAM,GAGjB,IAAME,EAAO,IAAI,KAAKD,EAAI,IAAc,EAExC,OAAI,OAAO,MAAMC,EAAK,QAAQ,CAAC,GAC3BX,EAAkBU,EAAK,CACnB,KAAMR,EAAa,YACvB,CAAC,EACMD,GAGJ,CAAE,OAAQQ,EAAO,MAAO,MAAOE,CAAK,CAC/C,CAKJ,EArCaC,EAANL,EAAMK,EAkCK,OAAS,IAAiB,IAAIL,EAAU,CAClD,SAAUF,CACd,CAAC,ECtDL,OACI,qBAAAL,EAAmB,WAAAC,EAAS,gBAAAC,EAAc,iBAAAC,EAAe,WAAAC,MACtD,MAEP,IAAMS,EAAiB,aAOVC,EAAN,cAAyBV,CAAqC,CAE1D,OAAOI,EAA4C,CAEtD,GAAM,CAAE,OAAAC,EAAQ,IAAAC,CAAI,EAAI,KAAK,oBAAoBF,CAAK,EAEtD,OAAIE,EAAI,aAAeP,EAAc,MACjCH,EAAkBU,EAAK,CACnB,KAAMR,EAAa,aACnB,SAAUC,EAAc,KACxB,SAAUO,EAAI,UAClB,CAAC,EACMT,GAGP,OAAO,MAAMS,EAAI,KAAK,QAAQ,CAAC,GAC/BV,EAAkBU,EAAK,CACnB,KAAMR,EAAa,YACvB,CAAC,EACMD,GAGJ,CAAE,OAAQQ,EAAO,MAAO,MAAQC,EAAI,KAAc,YAAY,CAAE,CAC3E,CAKJ,EA5BaK,EAAND,EAAMC,EAyBK,OAAS,IAAkB,IAAID,EAAW,CACpD,SAAUD,CACd,CAAC,EFjCE,IAAMhB,EAAS,IAAImB,IAAoDjB,EAAYa,EAAU,OAAO,GAAGI,CAAU,EAAIC,GAAOA,EAAG,QAAQ,sBAAsBA,EAAG,WAAW,aAAa,CAAC,EAEnLnB,EAAU,IAAIkB,IAAqDjB,EAAYgB,EAAW,OAAO,GAAGC,CAAU,EAAIC,GAAOA,EAAG,QAAQ,sBAAsBA,EAAG,WAAW,aAAa,CAAC","sourcesContent":["import { withGetType } from \"zod-to-ts\";\n\nimport { ZodDateIn } from \"./date-in-schema\";\nimport { ZodDateOut } from \"./date-out-schema\";\n\n// eslint-disable-next-line max-len,@typescript-eslint/explicit-module-boundary-types\nexport const dateIn = (...parameters: Parameters<typeof ZodDateIn.create>) => withGetType(ZodDateIn.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n// eslint-disable-next-line max-len,@typescript-eslint/explicit-module-boundary-types\nexport const dateOut = (...parameters: Parameters<typeof ZodDateOut.create>) => withGetType(ZodDateOut.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport {\n addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType,\n} from \"zod\";\n\nconst zodDateInKind = \"ZodDateIn\";\n\n// simple regex for ISO date, supports the following formats:\n// 2021-01-01T00:00:00.000Z\n// 2021-01-01T00:00:00Z\n// 2021-01-01T00:00:00\n// 2021-01-01\nexport const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?)?Z?$/;\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateInDef extends ZodTypeDef {\n typeName: typeof zodDateInKind;\n}\n\nexport class ZodDateIn extends ZodType<Date, ZodDateInDef, string> {\n // eslint-disable-next-line no-underscore-dangle\n public _parse(input: ParseInput): ParseReturnType<Date> {\n // eslint-disable-next-line no-underscore-dangle\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.string) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (!isoDateRegex.test(ctx.data as string)) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"regex\",\n });\n status.dirty();\n }\n\n const date = new Date(ctx.data as string);\n\n if (Number.isNaN(date.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: date };\n }\n\n public static create = (): ZodDateIn => new ZodDateIn({\n typeName: zodDateInKind,\n });\n}\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport {\n addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType,\n} from \"zod\";\n\nconst zodDateOutKind = \"ZodDateOut\";\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateOutDef extends ZodTypeDef {\n typeName: typeof zodDateOutKind;\n}\n\nexport class ZodDateOut extends ZodType<string, ZodDateOutDef, Date> {\n // eslint-disable-next-line no-underscore-dangle\n public _parse(input: ParseInput): ParseReturnType<string> {\n // eslint-disable-next-line no-underscore-dangle\n const { status, ctx } = this._processInputParams(input);\n\n if (ctx.parsedType !== ZodParsedType.date) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (Number.isNaN(ctx.data.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: (ctx.data as Date).toISOString() };\n }\n\n public static create = (): ZodDateOut => new ZodDateOut({\n typeName: zodDateOutKind,\n });\n}\n"]}
|
package/dist/chunk-JC55W6OX.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var yaml = require('yaml');
|
|
4
|
-
var crud = require('@visulima/crud');
|
|
5
|
-
var v = require('debug');
|
|
6
|
-
var I = require('lodash.merge');
|
|
7
|
-
var fs = require('fs');
|
|
8
|
-
var S = require('path');
|
|
9
|
-
var y = require('jstoxml');
|
|
10
|
-
require('url');
|
|
11
|
-
|
|
12
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
|
|
14
|
-
var v__default = /*#__PURE__*/_interopDefault(v);
|
|
15
|
-
var I__default = /*#__PURE__*/_interopDefault(I);
|
|
16
|
-
var S__default = /*#__PURE__*/_interopDefault(S);
|
|
17
|
-
var y__default = /*#__PURE__*/_interopDefault(y);
|
|
18
|
-
|
|
19
|
-
var u=e=>yaml.stringify(e,{indent:2}),A=u;var g=e=>e.toLowerCase().replaceAll(/[^\s\w]/g," ").trimEnd().replaceAll(/\s+|_/g,"-").replaceAll(/\b\w/g,n=>n.toUpperCase());var P="application/json",j=(e,n,s)=>{e.responses[n].content===void 0&&(e.responses[n].content={}),e.responses[n].content?.[s]===void 0&&(e.responses[n].content[s]={});},x=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.schemas!="object"&&(e.components.schemas={}),e.components.schemas[n]===void 0&&(e.components.schemas[n]=s);},w=(e,n,s,r,f)=>{j(e,n,s),e.responses[n].content?.[s]?.schema===void 0&&(e.responses[n].content[s].schema={}),e.responses[n].content[s].schema=f?{type:"array",items:{$ref:`#/components/schemas/${r}`}}:{$ref:`#/components/schemas/${r}`};},h=(e,n,s,r,f,p)=>{let a,t;return Object.entries(n.content).forEach(([i,o])=>{if(typeof o.schema=="object"){let{schema:c}=o;i===P&&o.examples!==void 0?t=o.examples:i===P&&o.example!==void 0&&(a=o.example);let l=c.type==="array";Object.entries(s??{}).forEach(([O,d])=>{if(!d)return;let b;c?.$ref===void 0?(b=`${g(r.trim().replace("/",""))}${O==="application/ld+json"?".jsonld":""}`,x(f,b,c)):b=c.$ref.replace("#/components/schemas/",""),w(e,p,O,b,l);});}}),{examples:t,example:a}},E=(e,n,s,r,f,p)=>{Object.keys(n.content).forEach(a=>{a!==P&&Object.entries(r??{}).forEach(([t,i])=>{if(!i)return;j(e,s,t),e.responses[s].content?.[t]?.example===void 0&&(e.responses[s].content[t].example={});let o=!1;f.forEach(({regex:c,transformer:l})=>{!o&&c.test(t)&&(e.responses[s].content[t].example=l(p),o=!0);}),o||(e.responses[s].content[t].example=p);});});},M=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.examples!="object"&&(e.components.examples={}),e.components.examples[n]===void 0&&s[n]!==void 0&&(e.components.examples[n]=s[n]);},k=(e,n,s,r,f,p)=>{j(n,s,r),n.responses[s].content?.[r]?.examples===void 0&&(n.responses[s].content[r].examples={});let a={};Object.entries(p).forEach(([t,i])=>{let o=!1;f.forEach(({regex:c,transformer:l})=>{if(!o&&c.test(r)){let O="";e.components?.examples?.[t]?O=e.components.examples[t].value:i.$ref?O=(e.components?.examples?.[i.$ref.replace("#/components/examples/","")]).value:typeof i.value=="string"&&(O=i.value),a[t]={value:l(O)},o=!0;}}),o||(a[t]=e.components?.examples?.[t]===void 0?i:{$ref:`#/components/examples/${t}`});}),n.responses[s].content[r].examples=a;},T=(e,n,s,r,f,p,a,t)=>{let i=`${g(p.trim().replace("/",""))}`;Object.keys(r.content).forEach(o=>{o!==P&&Object.entries(f??{}).forEach(([c,l])=>{l&&(M(e,i,t),k(e,n,s,c,a,t));});});};function m(e,n,s=[{regex:/xml/,transformer:r=>y__default.default.toXML(r,{header:!0,indent:" "})},{regex:/yaml|yml/,transformer:r=>yaml.stringify(r,{indent:2})}]){return typeof e=="object"&&typeof e.paths=="object"&&Object.entries(e.paths).forEach(([r,f])=>{Object.values(f).forEach(p=>{typeof p.responses=="object"&&Object.entries(p.responses).forEach(([a,t])=>{if(typeof t.content=="object"){let{examples:i,example:o}=h(p,t,n,r,e,a);o!==void 0?E(p,t,a,n,s,o):i!==void 0&&T(e,p,a,t,n,r,s,i);}});});}),e}var H=v__default.default("visulima:api-platform:swagger:crud:get-static-properties-swagger"),q=(e={})=>{let{allowedMediaTypes:n={"application/json":!0},swaggerFilePath:s,crud:r,specs:f}=e;return async(p,a)=>{let t=S__default.default.join(process.cwd(),s??"swagger/swagger.json");if(!fs.existsSync(t))throw new Error(`Swagger file not found at "${t}".`);let i=fs.readFileSync(t,"utf8"),o=m(JSON.parse(i),n),c={};if(r!==void 0)try{let O=await crud.modelsToOpenApi(r);c={components:{schemas:O.schemas,examples:O.examples},tags:O.tags,paths:O.paths},c=m(c,n),H(JSON.stringify(c,null,2)),o=I__default.default(o,c);}catch(O){throw console.log(O),new Error("Please install @visulima/crud to use the crud swagger generator.")}Array.isArray(f)&&f.forEach(O=>{o=I__default.default(o,m(O,n));});let l;typeof p.headers.accept=="string"&&/yaml|yml/.test(p.headers.accept)?(a.setHeader("Content-Type",p.headers.accept),l=A(o)):(a.setHeader("Content-Type","application/json"),l=JSON.stringify(o,null,2)),a.statusCode=200,a.end(l);}},ne=q;
|
|
20
|
-
|
|
21
|
-
exports.a = g;
|
|
22
|
-
exports.b = A;
|
|
23
|
-
exports.c = ne;
|
|
24
|
-
//# sourceMappingURL=out.js.map
|
|
25
|
-
//# sourceMappingURL=chunk-JC55W6OX.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/swagger/api/swagger-handler.ts","../src/swagger/extend-swagger-spec.ts","../src/utils.ts"],"names":["stringify","yamlTransformer","data","yaml_default","modelsToOpenApi","debug","merge","existsSync","readFileSync","path","xml","urlParse","toHeaderCase","string_","c","jsonMediaType","prepareStatusContent","methodSpec","status","mediaType","extendComponentSchemas","spec","schemaName","schema","extendResponseSchema","schemaIsArray","extendSwaggerWithMediaTypeSchema","responseSpec","allowedMediaTypes","pathKey","example","examples","mediaName","contentSpec","allowed","extendSwaggerWithMediaTypeExample","transformers","transformed","regex","transformer","extendComponentExamples","exampleName","prepareResponseExamples","transformedExamples","extendSwaggerWithMediaTypeExamples","examplesName","extendSwaggerSpec","value","pathSpec","swaggerCrudDebug","swaggerHandler","options","swaggerFilePath","crud","specs","request","response","swaggerPath","fileContents","crudSwagger","modelsOpenApi","error","swagger_handler_default"],"mappings":"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","sourcesContent":["import { stringify } from \"yaml\";\n\nimport type { Serializer } from \"../types\";\n\nconst yamlTransformer: Serializer = (data) => stringify(data, { indent: 2 });\n\nexport default yamlTransformer;\n","// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\n// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\nimport merge from \"lodash.merge\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\nimport yamlTransformer from \"../../serializers/transformer/yaml\";\nimport extendSwaggerSpec from \"../extend-swagger-spec\";\n\n// eslint-disable-next-line testing-library/no-debugging-utils\nconst swaggerCrudDebug = debug(\"visulima:api-platform:swagger:crud:get-static-properties-swagger\");\n\nconst swaggerHandler = <M extends string, PrismaClient>(\n options: Partial<SwaggerHandlerOptions<M, PrismaClient>> = {},\n): ((request: IncomingMessage, response: ServerResponse) => Promise<void>) => {\n const {\n allowedMediaTypes = {\n \"application/json\": true,\n },\n swaggerFilePath,\n crud,\n specs,\n } = options;\n\n return async <Request extends IncomingMessage, Response extends ServerResponse>(request: Request, response: Response) => {\n const swaggerPath = path.join(process.cwd(), swaggerFilePath ?? \"swagger/swagger.json\");\n\n if (!existsSync(swaggerPath)) {\n throw new Error(`Swagger file not found at \"${swaggerPath}\".`);\n }\n\n const fileContents = readFileSync(swaggerPath, \"utf8\");\n\n let spec = extendSwaggerSpec(JSON.parse(fileContents) as OpenAPIV3.Document, allowedMediaTypes) as OpenAPIV3.Document;\n let crudSwagger: Partial<OpenAPIV3.Document> = {};\n\n if (crud !== undefined) {\n try {\n const modelsOpenApi = await modelsToOpenApi(crud);\n\n crudSwagger = {\n components: { schemas: modelsOpenApi.schemas, examples: modelsOpenApi.examples },\n tags: modelsOpenApi.tags,\n paths: modelsOpenApi.paths,\n };\n\n crudSwagger = extendSwaggerSpec(crudSwagger, allowedMediaTypes);\n\n swaggerCrudDebug(JSON.stringify(crudSwagger, null, 2));\n\n spec = merge(spec, crudSwagger);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n\n throw new Error(\"Please install @visulima/crud to use the crud swagger generator.\");\n }\n }\n\n if (Array.isArray(specs)) {\n specs.forEach((value) => {\n spec = merge(spec, extendSwaggerSpec(value, allowedMediaTypes));\n });\n }\n\n let data: Buffer | Uint8Array | string;\n\n if (typeof request.headers.accept === \"string\" && /yaml|yml/.test(request.headers.accept)) {\n response.setHeader(\"Content-Type\", request.headers.accept);\n\n data = yamlTransformer(spec);\n } else {\n response.setHeader(\"Content-Type\", \"application/json\");\n\n data = JSON.stringify(spec, null, 2);\n }\n\n response.statusCode = 200;\n response.end(data);\n };\n};\n\nexport type SwaggerHandlerOptions<M extends string, PrismaClient> = {\n allowedMediaTypes: { [key: string]: boolean };\n swaggerFilePath: string;\n crud: Exclude<ModelsToOpenApiParameters<M, PrismaClient>, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<M>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\n};\n\nexport default swaggerHandler;\n","import type { XmlElement } from \"jstoxml\";\nimport xml from \"jstoxml\";\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport { stringify } from \"yaml\";\n\nimport { toHeaderCase } from \"../utils\";\n\ntype Transformers = { regex: RegExp; transformer: (data: any) => string }[];\n\nconst jsonMediaType = \"application/json\";\n\nconst prepareStatusContent = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string) => {\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content === undefined) {\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content = {};\n }\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType] === undefined) {\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] = {} as OpenAPIV3.MediaTypeObject;\n }\n};\n\nconst extendComponentSchemas = (spec: Partial<OpenAPIV3.Document>, schemaName: string, schema: OpenAPIV3.SchemaObject) => {\n if (typeof spec.components !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components = {};\n }\n\n if (typeof spec.components.schemas !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas = {};\n }\n\n if (spec.components.schemas[schemaName] === undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas[schemaName] = schema;\n }\n};\n\nconst extendResponseSchema = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string, schemaName: string, schemaIsArray: boolean) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.schema === undefined) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).schema = {} as OpenAPIV3.SchemaObject;\n }\n\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).schema = schemaIsArray\n ? {\n type: \"array\",\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n };\n} => {\n let example: any | undefined;\n let examples:\n | {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n }\n | undefined;\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n Object.entries(responseSpec.content as object).forEach(([mediaName, contentSpec]) => {\n if (typeof contentSpec.schema === \"object\") {\n const { schema } = contentSpec;\n\n if (mediaName === jsonMediaType && contentSpec.examples !== undefined) {\n examples = contentSpec.examples;\n } else if (mediaName === jsonMediaType && contentSpec.example !== undefined) {\n example = contentSpec.example;\n }\n\n const schemaIsArray = (schema as OpenAPIV3.SchemaObject).type === \"array\";\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n let schemaName: string;\n\n if (schema?.$ref === undefined) {\n // eslint-disable-next-line max-len\n schemaName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}${mediaType === \"application/ld+json\" ? \".jsonld\" : \"\"}`;\n\n extendComponentSchemas(spec as OpenAPIV3.Document, schemaName, schema as OpenAPIV3.SchemaObject);\n } else {\n // eslint-disable-next-line max-len\n schemaName = (schema as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/schemas/\", \"\");\n }\n\n extendResponseSchema(methodSpec, status, mediaType, schemaName, schemaIsArray);\n });\n }\n });\n\n return { examples, example };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n transformers: Transformers,\n example: any,\n) => {\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.example === undefined\n ) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = {};\n }\n\n let transformed: boolean = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = transformer(example);\n\n transformed = true;\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!transformed) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n },\n) => {\n if (typeof spec.components !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components = {};\n }\n\n if (typeof spec.components.examples !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples = {};\n }\n\n if (spec.components.examples[exampleName] === undefined && examples[exampleName] !== undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples[exampleName] = examples[exampleName] as OpenAPIV3.ExampleObject;\n }\n};\n\nconst prepareResponseExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n mediaType: string,\n transformers: Transformers,\n examples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity\n) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.examples === undefined) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).examples = {};\n }\n\n const transformedExamples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n } = {};\n\n Object.entries(examples).forEach(([exampleName, example]) => {\n let transformed: boolean = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n let data: any = \"\";\n\n if (spec.components?.examples?.[exampleName]) {\n data = (spec.components.examples[exampleName] as OpenAPIV3.ExampleObject).value;\n } else if ((example as OpenAPIV3.ReferenceObject).$ref) {\n data = (\n spec.components?.examples?.[\n (example as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/examples/\", \"\")\n ] as OpenAPIV3.ExampleObject\n ).value;\n } else if (typeof (example as OpenAPIV3.ExampleObject).value === \"string\") {\n data = (example as OpenAPIV3.ExampleObject).value;\n }\n\n transformedExamples[exampleName] = {\n value: transformer(data),\n };\n\n transformed = true;\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!transformed) {\n transformedExamples[exampleName] = spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).examples = transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n },\n) => {\n const examplesName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}`;\n\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n extendComponentExamples(spec, examplesName, examples);\n\n prepareResponseExamples(spec, methodSpec, status, mediaType, transformers, examples);\n });\n });\n};\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport default function extendSwaggerSpec(\n spec: Partial<OpenAPIV3.Document>,\n allowedMediaTypes?: { [key: string]: boolean },\n transformers: Transformers = [\n {\n regex: /xml/,\n transformer: (value: XmlElement | XmlElement[] | undefined) => xml.toXML(value, {\n header: true,\n indent: \" \",\n }),\n },\n {\n regex: /yaml|yml/,\n transformer: (value) => stringify(value, { indent: 2 }),\n },\n ],\n): Partial<OpenAPIV3.Document> {\n if (typeof spec === \"object\" && typeof spec.paths === \"object\") {\n Object.entries(spec.paths).forEach(([pathKey, pathSpec]) => {\n Object.values(pathSpec as OpenAPIV3.OperationObject & OpenAPIV3.PathsObject).forEach((methodSpec) => {\n if (typeof (methodSpec as OpenAPIV3.OperationObject).responses === \"object\") {\n Object.entries((methodSpec as OpenAPIV3.OperationObject).responses).forEach(([status, responseSpec]) => {\n if (typeof (responseSpec as OpenAPIV3.ResponseObject).content === \"object\") {\n const { examples, example } = extendSwaggerWithMediaTypeSchema(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n spec,\n status,\n );\n\n if (example !== undefined) {\n extendSwaggerWithMediaTypeExample(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n status,\n allowedMediaTypes,\n transformers,\n example,\n );\n } else if (examples !== undefined) {\n extendSwaggerWithMediaTypeExamples(\n spec,\n methodSpec as OpenAPIV3.OperationObject,\n status,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n transformers,\n examples,\n );\n }\n }\n });\n }\n });\n });\n }\n\n return spec;\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { parse as urlParse } from \"node:url\";\n\ntype IncomingApiRequest<TApiRequest = IncomingMessage> = TApiRequest & {\n body?: any;\n query?: any;\n};\n\nexport const jsonResponse = (response: ServerResponse, status: number, data?: unknown): void => {\n response.statusCode = status;\n response.setHeader(\"Content-Type\", \"application/json\");\n response.end(data ? JSON.stringify(data) : \"\");\n};\n\nexport const parseBody = async (request: IncomingApiRequest): Promise<any> => {\n if (request.body) {\n return request.body;\n }\n\n const buffers = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for await (const chunk of request) {\n buffers.push(chunk);\n }\n\n const data = Buffer.concat(buffers).toString();\n\n return data ? JSON.parse(data) : null;\n};\n\nexport const parseQuery = (request: IncomingApiRequest): unknown => {\n if (request.query) {\n return request.query;\n }\n\n return urlParse(request.url ?? \"\", true).query;\n};\n\nexport const toHeaderCase = (string_: string): string => string_\n .toLowerCase()\n .replaceAll(/[^\\s\\w]/g, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replaceAll(/\\s+|_/g, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replaceAll(/\\b\\w/g, (c) => c.toUpperCase());\n"]}
|
package/dist/chunk-MAUWX6TE.mjs
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { stringify } from 'yaml';
|
|
2
|
-
import { modelsToOpenApi } from '@visulima/crud';
|
|
3
|
-
import v from 'debug';
|
|
4
|
-
import I from 'lodash.merge';
|
|
5
|
-
import { existsSync, readFileSync } from 'fs';
|
|
6
|
-
import S from 'path';
|
|
7
|
-
import y from 'jstoxml';
|
|
8
|
-
|
|
9
|
-
var u=e=>stringify(e,{indent:2}),A=u;var g=e=>e.toLowerCase().replaceAll(/[^\s\w]/g," ").trimEnd().replaceAll(/\s+|_/g,"-").replaceAll(/\b\w/g,n=>n.toUpperCase());var P="application/json",j=(e,n,s)=>{e.responses[n].content===void 0&&(e.responses[n].content={}),e.responses[n].content?.[s]===void 0&&(e.responses[n].content[s]={});},x=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.schemas!="object"&&(e.components.schemas={}),e.components.schemas[n]===void 0&&(e.components.schemas[n]=s);},w=(e,n,s,r,f)=>{j(e,n,s),e.responses[n].content?.[s]?.schema===void 0&&(e.responses[n].content[s].schema={}),e.responses[n].content[s].schema=f?{type:"array",items:{$ref:`#/components/schemas/${r}`}}:{$ref:`#/components/schemas/${r}`};},h=(e,n,s,r,f,p)=>{let a,t;return Object.entries(n.content).forEach(([i,o])=>{if(typeof o.schema=="object"){let{schema:c}=o;i===P&&o.examples!==void 0?t=o.examples:i===P&&o.example!==void 0&&(a=o.example);let l=c.type==="array";Object.entries(s??{}).forEach(([O,d])=>{if(!d)return;let b;c?.$ref===void 0?(b=`${g(r.trim().replace("/",""))}${O==="application/ld+json"?".jsonld":""}`,x(f,b,c)):b=c.$ref.replace("#/components/schemas/",""),w(e,p,O,b,l);});}}),{examples:t,example:a}},E=(e,n,s,r,f,p)=>{Object.keys(n.content).forEach(a=>{a!==P&&Object.entries(r??{}).forEach(([t,i])=>{if(!i)return;j(e,s,t),e.responses[s].content?.[t]?.example===void 0&&(e.responses[s].content[t].example={});let o=!1;f.forEach(({regex:c,transformer:l})=>{!o&&c.test(t)&&(e.responses[s].content[t].example=l(p),o=!0);}),o||(e.responses[s].content[t].example=p);});});},M=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.examples!="object"&&(e.components.examples={}),e.components.examples[n]===void 0&&s[n]!==void 0&&(e.components.examples[n]=s[n]);},k=(e,n,s,r,f,p)=>{j(n,s,r),n.responses[s].content?.[r]?.examples===void 0&&(n.responses[s].content[r].examples={});let a={};Object.entries(p).forEach(([t,i])=>{let o=!1;f.forEach(({regex:c,transformer:l})=>{if(!o&&c.test(r)){let O="";e.components?.examples?.[t]?O=e.components.examples[t].value:i.$ref?O=(e.components?.examples?.[i.$ref.replace("#/components/examples/","")]).value:typeof i.value=="string"&&(O=i.value),a[t]={value:l(O)},o=!0;}}),o||(a[t]=e.components?.examples?.[t]===void 0?i:{$ref:`#/components/examples/${t}`});}),n.responses[s].content[r].examples=a;},T=(e,n,s,r,f,p,a,t)=>{let i=`${g(p.trim().replace("/",""))}`;Object.keys(r.content).forEach(o=>{o!==P&&Object.entries(f??{}).forEach(([c,l])=>{l&&(M(e,i,t),k(e,n,s,c,a,t));});});};function m(e,n,s=[{regex:/xml/,transformer:r=>y.toXML(r,{header:!0,indent:" "})},{regex:/yaml|yml/,transformer:r=>stringify(r,{indent:2})}]){return typeof e=="object"&&typeof e.paths=="object"&&Object.entries(e.paths).forEach(([r,f])=>{Object.values(f).forEach(p=>{typeof p.responses=="object"&&Object.entries(p.responses).forEach(([a,t])=>{if(typeof t.content=="object"){let{examples:i,example:o}=h(p,t,n,r,e,a);o!==void 0?E(p,t,a,n,s,o):i!==void 0&&T(e,p,a,t,n,r,s,i);}});});}),e}var H=v("visulima:api-platform:swagger:crud:get-static-properties-swagger"),q=(e={})=>{let{allowedMediaTypes:n={"application/json":!0},swaggerFilePath:s,crud:r,specs:f}=e;return async(p,a)=>{let t=S.join(process.cwd(),s??"swagger/swagger.json");if(!existsSync(t))throw new Error(`Swagger file not found at "${t}".`);let i=readFileSync(t,"utf8"),o=m(JSON.parse(i),n),c={};if(r!==void 0)try{let O=await modelsToOpenApi(r);c={components:{schemas:O.schemas,examples:O.examples},tags:O.tags,paths:O.paths},c=m(c,n),H(JSON.stringify(c,null,2)),o=I(o,c);}catch(O){throw console.log(O),new Error("Please install @visulima/crud to use the crud swagger generator.")}Array.isArray(f)&&f.forEach(O=>{o=I(o,m(O,n));});let l;typeof p.headers.accept=="string"&&/yaml|yml/.test(p.headers.accept)?(a.setHeader("Content-Type",p.headers.accept),l=A(o)):(a.setHeader("Content-Type","application/json"),l=JSON.stringify(o,null,2)),a.statusCode=200,a.end(l);}},N=q;
|
|
10
|
-
|
|
11
|
-
export { g as a, A as b, N as c };
|
|
12
|
-
//# sourceMappingURL=out.js.map
|
|
13
|
-
//# sourceMappingURL=chunk-MAUWX6TE.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/swagger/api/swagger-handler.ts","../src/swagger/extend-swagger-spec.ts","../src/utils.ts"],"names":["stringify","yamlTransformer","data","yaml_default","modelsToOpenApi","debug","merge","existsSync","readFileSync","path","xml","toHeaderCase","string_","c","jsonMediaType","prepareStatusContent","methodSpec","status","mediaType","extendComponentSchemas","spec","schemaName","schema","extendResponseSchema","schemaIsArray","extendSwaggerWithMediaTypeSchema","responseSpec","allowedMediaTypes","pathKey","example","examples","mediaName","contentSpec","allowed","extendSwaggerWithMediaTypeExample","transformers","transformed","regex","transformer","extendComponentExamples","exampleName","prepareResponseExamples","transformedExamples","extendSwaggerWithMediaTypeExamples","examplesName","extendSwaggerSpec","value","pathSpec","swaggerCrudDebug","swaggerHandler","options","swaggerFilePath","crud","specs","request","response","swaggerPath","fileContents","crudSwagger","modelsOpenApi","error","swagger_handler_default"],"mappings":"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","sourcesContent":["import { stringify } from \"yaml\";\n\nimport type { Serializer } from \"../types\";\n\nconst yamlTransformer: Serializer = (data) => stringify(data, { indent: 2 });\n\nexport default yamlTransformer;\n","// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\n// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\nimport merge from \"lodash.merge\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\nimport yamlTransformer from \"../../serializers/transformer/yaml\";\nimport extendSwaggerSpec from \"../extend-swagger-spec\";\n\n// eslint-disable-next-line testing-library/no-debugging-utils\nconst swaggerCrudDebug = debug(\"visulima:api-platform:swagger:crud:get-static-properties-swagger\");\n\nconst swaggerHandler = <M extends string, PrismaClient>(\n options: Partial<SwaggerHandlerOptions<M, PrismaClient>> = {},\n): ((request: IncomingMessage, response: ServerResponse) => Promise<void>) => {\n const {\n allowedMediaTypes = {\n \"application/json\": true,\n },\n swaggerFilePath,\n crud,\n specs,\n } = options;\n\n return async <Request extends IncomingMessage, Response extends ServerResponse>(request: Request, response: Response) => {\n const swaggerPath = path.join(process.cwd(), swaggerFilePath ?? \"swagger/swagger.json\");\n\n if (!existsSync(swaggerPath)) {\n throw new Error(`Swagger file not found at \"${swaggerPath}\".`);\n }\n\n const fileContents = readFileSync(swaggerPath, \"utf8\");\n\n let spec = extendSwaggerSpec(JSON.parse(fileContents) as OpenAPIV3.Document, allowedMediaTypes) as OpenAPIV3.Document;\n let crudSwagger: Partial<OpenAPIV3.Document> = {};\n\n if (crud !== undefined) {\n try {\n const modelsOpenApi = await modelsToOpenApi(crud);\n\n crudSwagger = {\n components: { schemas: modelsOpenApi.schemas, examples: modelsOpenApi.examples },\n tags: modelsOpenApi.tags,\n paths: modelsOpenApi.paths,\n };\n\n crudSwagger = extendSwaggerSpec(crudSwagger, allowedMediaTypes);\n\n swaggerCrudDebug(JSON.stringify(crudSwagger, null, 2));\n\n spec = merge(spec, crudSwagger);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n\n throw new Error(\"Please install @visulima/crud to use the crud swagger generator.\");\n }\n }\n\n if (Array.isArray(specs)) {\n specs.forEach((value) => {\n spec = merge(spec, extendSwaggerSpec(value, allowedMediaTypes));\n });\n }\n\n let data: Buffer | Uint8Array | string;\n\n if (typeof request.headers.accept === \"string\" && /yaml|yml/.test(request.headers.accept)) {\n response.setHeader(\"Content-Type\", request.headers.accept);\n\n data = yamlTransformer(spec);\n } else {\n response.setHeader(\"Content-Type\", \"application/json\");\n\n data = JSON.stringify(spec, null, 2);\n }\n\n response.statusCode = 200;\n response.end(data);\n };\n};\n\nexport type SwaggerHandlerOptions<M extends string, PrismaClient> = {\n allowedMediaTypes: { [key: string]: boolean };\n swaggerFilePath: string;\n crud: Exclude<ModelsToOpenApiParameters<M, PrismaClient>, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<M>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\n};\n\nexport default swaggerHandler;\n","import type { XmlElement } from \"jstoxml\";\nimport xml from \"jstoxml\";\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport { stringify } from \"yaml\";\n\nimport { toHeaderCase } from \"../utils\";\n\ntype Transformers = { regex: RegExp; transformer: (data: any) => string }[];\n\nconst jsonMediaType = \"application/json\";\n\nconst prepareStatusContent = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string) => {\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content === undefined) {\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content = {};\n }\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType] === undefined) {\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] = {} as OpenAPIV3.MediaTypeObject;\n }\n};\n\nconst extendComponentSchemas = (spec: Partial<OpenAPIV3.Document>, schemaName: string, schema: OpenAPIV3.SchemaObject) => {\n if (typeof spec.components !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components = {};\n }\n\n if (typeof spec.components.schemas !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas = {};\n }\n\n if (spec.components.schemas[schemaName] === undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas[schemaName] = schema;\n }\n};\n\nconst extendResponseSchema = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string, schemaName: string, schemaIsArray: boolean) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.schema === undefined) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).schema = {} as OpenAPIV3.SchemaObject;\n }\n\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).schema = schemaIsArray\n ? {\n type: \"array\",\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n };\n} => {\n let example: any | undefined;\n let examples:\n | {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n }\n | undefined;\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n Object.entries(responseSpec.content as object).forEach(([mediaName, contentSpec]) => {\n if (typeof contentSpec.schema === \"object\") {\n const { schema } = contentSpec;\n\n if (mediaName === jsonMediaType && contentSpec.examples !== undefined) {\n examples = contentSpec.examples;\n } else if (mediaName === jsonMediaType && contentSpec.example !== undefined) {\n example = contentSpec.example;\n }\n\n const schemaIsArray = (schema as OpenAPIV3.SchemaObject).type === \"array\";\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n let schemaName: string;\n\n if (schema?.$ref === undefined) {\n // eslint-disable-next-line max-len\n schemaName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}${mediaType === \"application/ld+json\" ? \".jsonld\" : \"\"}`;\n\n extendComponentSchemas(spec as OpenAPIV3.Document, schemaName, schema as OpenAPIV3.SchemaObject);\n } else {\n // eslint-disable-next-line max-len\n schemaName = (schema as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/schemas/\", \"\");\n }\n\n extendResponseSchema(methodSpec, status, mediaType, schemaName, schemaIsArray);\n });\n }\n });\n\n return { examples, example };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n transformers: Transformers,\n example: any,\n) => {\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.example === undefined\n ) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = {};\n }\n\n let transformed: boolean = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = transformer(example);\n\n transformed = true;\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!transformed) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n },\n) => {\n if (typeof spec.components !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components = {};\n }\n\n if (typeof spec.components.examples !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples = {};\n }\n\n if (spec.components.examples[exampleName] === undefined && examples[exampleName] !== undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples[exampleName] = examples[exampleName] as OpenAPIV3.ExampleObject;\n }\n};\n\nconst prepareResponseExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n mediaType: string,\n transformers: Transformers,\n examples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n },\n // eslint-disable-next-line sonarjs/cognitive-complexity\n) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.examples === undefined) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).examples = {};\n }\n\n const transformedExamples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n } = {};\n\n Object.entries(examples).forEach(([exampleName, example]) => {\n let transformed: boolean = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n let data: any = \"\";\n\n if (spec.components?.examples?.[exampleName]) {\n data = (spec.components.examples[exampleName] as OpenAPIV3.ExampleObject).value;\n } else if ((example as OpenAPIV3.ReferenceObject).$ref) {\n data = (\n spec.components?.examples?.[\n (example as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/examples/\", \"\")\n ] as OpenAPIV3.ExampleObject\n ).value;\n } else if (typeof (example as OpenAPIV3.ExampleObject).value === \"string\") {\n data = (example as OpenAPIV3.ExampleObject).value;\n }\n\n transformedExamples[exampleName] = {\n value: transformer(data),\n };\n\n transformed = true;\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!transformed) {\n transformedExamples[exampleName] = spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).examples = transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: {\n [media: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;\n },\n) => {\n const examplesName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}`;\n\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n extendComponentExamples(spec, examplesName, examples);\n\n prepareResponseExamples(spec, methodSpec, status, mediaType, transformers, examples);\n });\n });\n};\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport default function extendSwaggerSpec(\n spec: Partial<OpenAPIV3.Document>,\n allowedMediaTypes?: { [key: string]: boolean },\n transformers: Transformers = [\n {\n regex: /xml/,\n transformer: (value: XmlElement | XmlElement[] | undefined) => xml.toXML(value, {\n header: true,\n indent: \" \",\n }),\n },\n {\n regex: /yaml|yml/,\n transformer: (value) => stringify(value, { indent: 2 }),\n },\n ],\n): Partial<OpenAPIV3.Document> {\n if (typeof spec === \"object\" && typeof spec.paths === \"object\") {\n Object.entries(spec.paths).forEach(([pathKey, pathSpec]) => {\n Object.values(pathSpec as OpenAPIV3.OperationObject & OpenAPIV3.PathsObject).forEach((methodSpec) => {\n if (typeof (methodSpec as OpenAPIV3.OperationObject).responses === \"object\") {\n Object.entries((methodSpec as OpenAPIV3.OperationObject).responses).forEach(([status, responseSpec]) => {\n if (typeof (responseSpec as OpenAPIV3.ResponseObject).content === \"object\") {\n const { examples, example } = extendSwaggerWithMediaTypeSchema(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n spec,\n status,\n );\n\n if (example !== undefined) {\n extendSwaggerWithMediaTypeExample(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n status,\n allowedMediaTypes,\n transformers,\n example,\n );\n } else if (examples !== undefined) {\n extendSwaggerWithMediaTypeExamples(\n spec,\n methodSpec as OpenAPIV3.OperationObject,\n status,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n transformers,\n examples,\n );\n }\n }\n });\n }\n });\n });\n }\n\n return spec;\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { parse as urlParse } from \"node:url\";\n\ntype IncomingApiRequest<TApiRequest = IncomingMessage> = TApiRequest & {\n body?: any;\n query?: any;\n};\n\nexport const jsonResponse = (response: ServerResponse, status: number, data?: unknown): void => {\n response.statusCode = status;\n response.setHeader(\"Content-Type\", \"application/json\");\n response.end(data ? JSON.stringify(data) : \"\");\n};\n\nexport const parseBody = async (request: IncomingApiRequest): Promise<any> => {\n if (request.body) {\n return request.body;\n }\n\n const buffers = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for await (const chunk of request) {\n buffers.push(chunk);\n }\n\n const data = Buffer.concat(buffers).toString();\n\n return data ? JSON.parse(data) : null;\n};\n\nexport const parseQuery = (request: IncomingApiRequest): unknown => {\n if (request.query) {\n return request.query;\n }\n\n return urlParse(request.url ?? \"\", true).query;\n};\n\nexport const toHeaderCase = (string_: string): string => string_\n .toLowerCase()\n .replaceAll(/[^\\s\\w]/g, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replaceAll(/\\s+|_/g, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replaceAll(/\\b\\w/g, (c) => c.toUpperCase());\n"]}
|
package/dist/chunk-RK2WQGNS.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var u = require('chalk');
|
|
4
|
-
var child_process = require('child_process');
|
|
5
|
-
var fs = require('fs');
|
|
6
|
-
var path = require('path');
|
|
7
|
-
var d = require('process');
|
|
8
|
-
var jsdocOpenApi = require('@visulima/jsdoc-open-api');
|
|
9
|
-
var readdir = require('@visulima/readdir');
|
|
10
|
-
|
|
11
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
|
|
13
|
-
var u__default = /*#__PURE__*/_interopDefault(u);
|
|
14
|
-
var d__default = /*#__PURE__*/_interopDefault(d);
|
|
15
|
-
|
|
16
|
-
var Y=(e,o)=>{if(o.length===0)throw new Error("must include atleast one key to map");let t=e.toString();return o.forEach(r=>{t=r.optional?t.replace("(?:\\/([^\\/]+?))?\\",`/:${r.name}?`):t.replace("(?:([^\\/]+?))",`:${r.name}`);}),t.replace("/?(?=\\/|$)/i","").replace("/^","").replaceAll(/\\/gi,"").replaceAll(/\/{2,}/gi,"/")},P=Y;var z=(e,o)=>{if(typeof e=="string")return e;if(e.fast_slash)return "";if(e.fast_star)return "*";let t="";o.length>0&&(t=P(e,o));let r=/^\/\^((?:\\[$()*+./?[\\\]^{|}]|[^$()*+./?[\\\]^{|}])*)\$\//.exec(e.toString().replace("\\/?","").replace("(?=\\/|$)","$"));return Array.isArray(r)&&r.length>1?r[1].replaceAll(/\\(.)/g,"$1").slice(1):t?t.slice(1):e.toString()},S=z;var Q=(e,o,t)=>{let r=e.route.stack.at(-1),a=o.map(i=>({name:i.name,in:"path",required:!i.optional})),s=e.route.stack.filter(i=>i?.handle?.metadata);if(s.length>1)throw new Error("Only one metadata middleware is allowed per route");let n=(t+e.route.path).replaceAll(/\/{2,}/gi,"/");return s.length===0?{path:n,pathParams:a,method:r.method}:{path:n,pathParams:a,method:r.method,metadata:s[0].handle.metadata}},T=(e,o,t,r)=>{r=[...r,...t.keys],t.name==="router"&&t.handle&&t.handle.stack.forEach(a=>{o=o||"",T(e,`${o}/${S(t.regexp,t.keys)}`,a,r);}),!(!t.route||t.route.stack.length===0)&&e.push(Q(t,r,o));},V=e=>{let o=e._router||e.router,t=[];return o.stack.forEach(r=>{T(t,"",r,[]);}),t},k=V;var Z=e=>{let o=[];return k(e).forEach(t=>{o.push({path:t.path,method:t.method.toUpperCase(),tags:[],file:"unknown"});}),o},D=Z;var $=e=>e.replaceAll(/ \(.*\)/g,"").trim(),j=e=>e.trim().split(" ")[1].slice(1,-1),ee=e=>{let t=e.printRoutes().replaceAll(/[─│└├]/g," ").trimEnd().split(`
|
|
17
|
-
`),r=t.reduce((s,n,i)=>{let p=$(n);if($(t[i-1]??"")===p){let X=s.filter(A=>A.index<i&&A.segment===p),{methods:w}=X.at(-1);return w!==null&&w.push(j(n)),s}let l=n.replaceAll(/ \(.*\)/g,"").match(/ /g);if(l===null)throw new Error("Invalid spaces");let f=l.length/4,m=n.includes("("),y=m?[j(n)]:null;return s.push({segment:p,index:i,depth:f,isRoute:m,methods:y}),s},[]),a=[];return r.filter(s=>s.isRoute).forEach(s=>{let i=[...r.filter(p=>p.index<s.index&&p.depth<s.depth).filter((p,c,l)=>!l.find(f=>f.depth===p.depth&&f.index>p.index)).map(p=>p.segment),s.segment].join("");if(s.methods===null)throw new Error("Invalid methods");s.methods.forEach(p=>{a.push({path:i,method:p.toUpperCase(),tags:[],file:"unknown"});});}),a},O=ee;var te=e=>{let t=e._core.router.routes,r=[];return [...t.keys()].forEach(a=>{t.get(a).routes.forEach(s=>{r.push({path:s.path,method:s.route.method.toUpperCase(),tags:[],file:"unknown"});});}),r},v=te;var re=e=>{let o=[];return e.middleware.filter(t=>t.router).flatMap(t=>t.router.stack).forEach(t=>{o.push({path:t.path,method:t.methods.join("|").toUpperCase(),tags:[],file:"unknown"});}),o},b=re;var C=/\.(js|ts|mjs|cjs)$/,ae=(e,o,t=!1)=>{let r=[],a=jsdocOpenApi.parseFile(e,jsdocOpenApi.jsDocumentCommentsToOpenApi,t);r=[...r,...a.map(i=>i.spec)];let s=jsdocOpenApi.parseFile(e,jsdocOpenApi.swaggerJsDocumentCommentsToOpenApi,t);r=[...r,...s.map(i=>i.spec)];let n=[];return r.length===0?(fs.readFileSync(e,"utf8").split(/\r?\n/).forEach(p=>{let c=/[=aces|]+\s["'|](GET|POST|PUT|PATCH|HEAD|DELETE|OPTIONS)["'|]/.exec(p);if(c){let[,l]=c;l==="GET"&&(l="GET|HEAD"),n.push({method:l,path:e.replace(o,"").replace(C,"").replaceAll("\\","/"),tags:[],file:e.replace(`${d__default.default.cwd()}${d__default.default.platform==="win32"?"\\":"/"}`,"")});}}),n.length===0&&n.push({method:"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS",path:e.replace(o,"").replace(C,"").replaceAll("\\","/"),tags:[],file:e.replace(`${d__default.default.cwd()}${d__default.default.platform==="win32"?"\\":"/"}`,"")}),n):(r.forEach(i=>{Object.entries(i.paths).forEach(([c,l])=>{Object.entries(l).forEach(([m,y])=>{n.push({path:c.replaceAll("\\","/"),method:m.toUpperCase(),tags:y.tags,file:e.replace(`${d__default.default.cwd()}${d__default.default.platform==="win32"?"\\":"/"}`,"")});});});}),n)},L=ae;var g=[".js",".ts",".mjs",".cjs"],M=e=>{let o=path.parse(e);for(;o.base&&o.root!==o.dir;){if(fs.readdirSync(o.dir).find(a=>a==="package.json"))return o.dir;o=path.parse(o.dir);}return null},I=e=>{let o=`${e}/package.json`,t=JSON.parse(fs.readFileSync(o).toString()),{dependencies:r}=t;return r.express?"express":r.koa&&(r["@koa/router"]||r["koa-router"])?"koa":r.next?"next":r["@hapi/hapi"]?"hapi":r.fastify?"fastify":null},H=(e,o)=>Object.keys(e).length===0?null:o==="hapi"?typeof e.app?.app=="string"?e.app:e:e.app??e;var G=e=>{try{return fs.statSync(e).isDirectory()}catch{return !1}},ue=async(e="",o=!1)=>{let t=path.join(e,"pages/api");return !G(t)&&(t=path.join(e,"src/pages/api"),!G(t))?[]:readdir.collect(t,{extensions:g,includeDirs:!1,minimatchOptions:{match:{debug:o,matchBase:!0},skip:{debug:o,matchBase:!0}}})},_=ue;async function E(e,o,t){if(o==="express")return D(e);if(o==="koa")return b(e);if(o==="hapi")return v(e);if(o==="fastify")return O(e);if(o==="next"){let r=await _(e,t);if(r.length===0)throw new Error(`No API routes found, in "${e}".`);return r.flatMap(a=>L(a,e,t))}return null}var fe=(e,o)=>{let t=new Map;return e.forEach(r=>{let a=o(r),s=t.get(a);s?s.push(r):t.set(a,[r]);}),t},B=fe;var me=(e,o)=>{let t={GET:u__default.default.blue,POST:u__default.default.yellow,PATCH:u__default.default.yellow,PUT:u__default.default.yellow,DELETE:u__default.default.redBright,OPTIONS:u__default.default.hex("#6C7280"),ANY:u__default.default.redBright,HEAD:u__default.default.hex("#6C7280")},r;if(e==="GET|HEAD")r=`${u__default.default.blue("GET")}${u__default.default.grey("|HEAD")}`;else {let c=t[e](e);r=e==="GET"?`${c}${u__default.default.grey("|HEAD")}`:c;}let a=e==="GET"?6:14-e.length,s=Array.from({length:a}).fill(" ").join(""),n=process.stdout.columns-16-o.length-4,i=n>0?Array.from({length:n}).fill(".").join(""):"",p=o.split("/").map(c=>["[",":"].includes(c[0]??"")?u__default.default.yellowBright(c):c).join("/");return ` ${r}${s}${p}${u__default.default.grey(i)}`},de=(e,o={})=>e.map(t=>{if(!(Array.isArray(o.methods)&&o.methods.includes(t.method)))return t.method==="GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS"&&(t.method="ANY"),me(t.method,t.path.replace("/pages",""))}).filter(Boolean),x=de;var ye=async(e,o,t={})=>{let r=path.join(d__default.default.cwd(),o);if(!fs.existsSync(r))throw new Error("No such file, invalid path provided.");let a=M(r);if(!a)throw new Error("Please initialize local package.json.");if(e===void 0){let n=I(a);if(!n)throw new Error("Couldn't detect supported back-end framework.");e=n;}let s=null;if(e==="next")s=await E(r,"next",t.verbose??!1);else {if(!fs.statSync(r).isFile())throw new Error(`${r} is directory, but file expected.`);if(!g.includes(path.extname(r)))throw new Error("Please specify application .ts/.js/.mjs/.cjs file.");let n=`${a}/.env`;fs.existsSync(n)&&(await import(`${a}/node_modules/dotenv/lib/main.js`)).config({path:n});let i=path.extname(r)===".ts",p=path.join(a,"node_modules/.bin/tsc");if(i&&!fs.existsSync(p))throw new Error(`Please install typescript in ${a}`);try{if(i)try{child_process.execSync(`${p} --outDir framework-list >&2`,{cwd:a});}catch(f){console.log(`TSC compilation failed. Please resolve issues in your project.
|
|
18
|
-
`),console.log(f),fs.rmSync(path.join(a,"framework-list"),{recursive:!0});}let c=i?path.join(a,"framework-list",r.replace(a,"").replace(".ts",".js")):r,{default:l}=await import(c);s=await E(["AsyncFunction","Function"].includes(l.constructor.name)?await l():H(l,e),e,t.verbose??!1);}finally{i&&fs.rmSync(path.join(a,"framework-list"),{recursive:!0});}}if(s===null)throw new Error(`Framework "${e}" is not supported.`);if(Array.isArray(t.includePaths)&&t.includePaths.length>0&&(s=t.includePaths.flatMap(n=>s.filter(i=>i.path.startsWith(n)))),Array.isArray(t.excludePaths)&&t.excludePaths.length>0&&(s=t.excludePaths.flatMap(n=>s.filter(i=>!i.path.startsWith(n)))),typeof t.group=="string"&&t.group!==""){console.log();let n=B(s,p=>t.group==="path"?p.path.replace("/pages","").split("/")[1]:p.tags[0]??"unsorted"),i=0;n.forEach((p,c)=>{i>0&&console.log();let l=(d__default.default.stdout.columns-16-c.length)/2,f=l>0?Array.from({length:l}).fill(" ").join(""):"";console.log(f+u__default.default.bold.underline(c)),x(p,t).forEach(m=>{console.log(m);}),i+=1;});}else console.log(),x(s,t).forEach(n=>{console.log(n);});console.log(`
|
|
19
|
-
Listed ${u__default.default.greenBright(String(s.length))} HTTP ${s.length===1?"route":"routes"}.
|
|
20
|
-
`);},nt=ye;
|
|
21
|
-
|
|
22
|
-
exports.a = nt;
|
|
23
|
-
//# sourceMappingURL=out.js.map
|
|
24
|
-
//# sourceMappingURL=chunk-RK2WQGNS.js.map
|