@visulima/api-platform 3.0.1 → 3.0.3
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 +30 -0
- package/dist/chunk-DY57MKPR.js +27 -0
- package/dist/chunk-DY57MKPR.js.map +1 -0
- package/dist/{chunk-BYMOIJWB.js → chunk-IAHCIZME.js} +3 -4
- package/dist/chunk-IAHCIZME.js.map +1 -0
- package/dist/{chunk-4CYX3UMQ.mjs → chunk-IRBDVWUD.mjs} +3 -3
- package/dist/chunk-IRBDVWUD.mjs.map +1 -0
- package/dist/chunk-LTJU3JVK.mjs +19 -0
- package/dist/chunk-LTJU3JVK.mjs.map +1 -0
- package/dist/framework/cli/commander/index.js +2 -2
- package/dist/framework/cli/commander/index.mjs +1 -1
- package/dist/framework/cli/index.js +3 -3
- package/dist/framework/cli/index.mjs +1 -1
- package/dist/framework/next/index-browser.js +1 -1
- package/dist/framework/next/index-server.d.mts +1 -1
- package/dist/framework/next/index-server.d.ts +1 -1
- package/dist/framework/next/index-server.js +4 -5
- package/dist/framework/next/index-server.js.map +1 -1
- package/dist/framework/next/index-server.mjs +3 -3
- package/dist/framework/next/index-server.mjs.map +1 -1
- package/dist/index-browser.d.mts +1 -1
- package/dist/index-browser.d.ts +1 -1
- package/dist/index-browser.js +1 -1
- package/dist/index-server.d.mts +2 -2
- package/dist/index-server.d.ts +2 -2
- package/dist/index-server.js +57 -57
- package/dist/index-server.mjs +2 -2
- package/package.json +16 -16
- package/dist/chunk-4CYX3UMQ.mjs.map +0 -1
- package/dist/chunk-BYMOIJWB.js.map +0 -1
- package/dist/chunk-IWQGMV5V.js +0 -28
- package/dist/chunk-IWQGMV5V.js.map +0 -1
- package/dist/chunk-LZNF7WWH.mjs +0 -20
- package/dist/chunk-LZNF7WWH.mjs.map +0 -1
- /package/dist/{index-browser-siaokSlR.d.mts → index-browser-4YWjgmTg.d.mts} +0 -0
- /package/dist/{index-browser-siaokSlR.d.ts → index-browser-4YWjgmTg.d.ts} +0 -0
- /package/dist/{swagger-handler-RUaF1sKn.d.mts → swagger-handler-CsN63rqo.d.mts} +0 -0
- /package/dist/{swagger-handler-RUaF1sKn.d.ts → swagger-handler-CsN63rqo.d.ts} +0 -0
package/dist/index-server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkUPRO35MO_js = require('./chunk-UPRO35MO.js');
|
|
4
|
-
var
|
|
4
|
+
var chunkIAHCIZME_js = require('./chunk-IAHCIZME.js');
|
|
5
5
|
require('./chunk-4C666HHU.js');
|
|
6
6
|
var connect = require('@visulima/connect');
|
|
7
7
|
var q = require('http-errors');
|
|
@@ -20,217 +20,217 @@ var ee__default = /*#__PURE__*/_interopDefault(ee);
|
|
|
20
20
|
var Q__default = /*#__PURE__*/_interopDefault(Q);
|
|
21
21
|
var ie__default = /*#__PURE__*/_interopDefault(ie);
|
|
22
22
|
|
|
23
|
-
var u=(e,o)=>{let t=o.headers??{};Object.keys(t).forEach(r=>{e.setHeader(r,t[r]);});},l=(e,o)=>{e.setHeader("content-type","application/json; charset=utf-8"),e.end(JSON.stringify(o));},R=(e,o)=>{o.statusCode!==void 0&&(e.statusCode=o.statusCode),o.status!==void 0&&(e.statusCode=o.status),e.statusCode<400&&(e.statusCode=httpStatusCodes.StatusCodes.INTERNAL_SERVER_ERROR);};var z="An error occurred",U=(e,o,t)=>{if(R(t,e),u(t,e),e instanceof x__default.default.JapiError||x__default.default.JapiError.isLikeJapiError(e)){let r=new x__default.default.ErrorSerializer;l(t,r.serialize(e));}else if(e instanceof q.HttpError){let{message:r,statusCode:n,title:a}=e;l(t,{errors:[{code:n,title:a||httpStatusCodes.getReasonPhrase(n)||z,detail:r}]});}else {let{message:r}=e;l(t,{errors:[{code:"500",title:httpStatusCodes.getReasonPhrase(t.statusCode)||z,detail:r}]});}},T=U;var M="https://tools.ietf.org/html/rfc2616#section-10",C="An error occurred",F=(e,o,t)=>{let{message:r,stack:n}=e;if(e instanceof q.HttpError){let{expose:a,statusCode:s,title:i,type:d}=e;t.statusCode=s,u(t,e),l(t,{type:d||M,title:i||httpStatusCodes.getReasonPhrase(s)||C,details:r,...a?{trace:n}:{}});}else R(t,e),l(t,{type:M,title:httpStatusCodes.getReasonPhrase(t.statusCode)||C,details:r,...e.expose?{trace:n}:{}});},I=F;var h=(e,o)=>async(t,r,n)=>{let a=r.headers.accept,s=I;a==="application/vnd.api+json"&&(s=T);for(let{handler:i,regex:d}of e)if(d.test(a)){s=i;break}t.expose=o,s(t,r,n);},H=async(e,o,t)=>{let r=[...new Set(t.map(n=>n.method))].join(", ");throw o.setHeader("Allow",r),o.statusCode=405,q__default.default(405,`No route with [${e.method}] method found.`)};var O={alpn:"ALPN","c-pep":"C-PEP","c-pep-info":"C-PEP-Info","caldav-timezones":"CalDAV-Timezones","content-id":"Content-ID","content-md5":"Content-MD5",dasl:"DASL",dav:"DAV",dnt:"DNT",etag:"ETag",getprofile:"GetProfile","http2-settings":"HTTP2-Settings","last-event-id":"Last-Event-ID","mime-version":"MIME-Version","optional-www-authenticate":"Optional-WWW-Authenticate","sec-webSocket-key":"Sec-WebSocket-Key","sec-webSocket-protocol":"Sec-WebSocket-Protocol","sec-webSocket-version":"Sec-WebSocket-Version","sec-websocket-accept":"Sec-WebSocket-Accept","sec-websocket-extensions":"Sec-WebSocket-Extensions",slug:"SLUG",tcn:"TCN",te:"TE",ttl:"TTL","www-authenticate":"WWW-Authenticate","x-att-deviceid":"X-ATT-DeviceId","x-dnsprefetch-control":"X-DNSPrefetch-Control","x-uidh":"X-UIDH"},K=(e,o)=>{let t=e.toLowerCase();return o?O[t]?O[t]:t.split("-").map(r=>r[0]?.toUpperCase()+r.slice(1)).join("-"):t},Z={canonical:!1,normalizeHeaderKey:K},B=e=>{let o={...Z,...e};return async(t,r,n)=>{let a={},s={};return Object.keys(t.headers).forEach(i=>{a[i]=t.headers[i];let d=o.normalizeHeaderKey(i,o.canonical);d&&(s[d]=t.headers[i]);}),t.headers=s,t.rawHeaders=a,n()}},S=B;var G=e=>{if(typeof e!="string")return !1;try{let o=JSON.parse(e),t=Object.prototype.toString.call(o);return t==="[object Object]"||t==="[object Array]"}catch{return !1}},E=G;var $=e=>jstoxml.toXML(e,{header:!0,indent:" "}),y=$;var g="Content-Type",Y=(e,o,t,r,n)=>{if(typeof t.getHeader(g)=="string")return r;let i=[...Q__default.default(o).types(),n.defaultContentType],d=r,N=!1;return i.forEach(c=>{e.forEach(({regex:P,serializer:k})=>{P.test(c)&&(t.setHeader(g,c),d=k(d),N=!0);}),N||(/yaml|yml/.test(c)?(t.setHeader(g,c),d=
|
|
23
|
+
var u=(e,o)=>{let t=o.headers??{};Object.keys(t).forEach(r=>{e.setHeader(r,t[r]);});},l=(e,o)=>{e.setHeader("content-type","application/json; charset=utf-8"),e.end(JSON.stringify(o));},R=(e,o)=>{o.statusCode!==void 0&&(e.statusCode=o.statusCode),o.status!==void 0&&(e.statusCode=o.status),e.statusCode<400&&(e.statusCode=httpStatusCodes.StatusCodes.INTERNAL_SERVER_ERROR);};var z="An error occurred",U=(e,o,t)=>{if(R(t,e),u(t,e),e instanceof x__default.default.JapiError||x__default.default.JapiError.isLikeJapiError(e)){let r=new x__default.default.ErrorSerializer;l(t,r.serialize(e));}else if(e instanceof q.HttpError){let{message:r,statusCode:n,title:a}=e;l(t,{errors:[{code:n,title:a||httpStatusCodes.getReasonPhrase(n)||z,detail:r}]});}else {let{message:r}=e;l(t,{errors:[{code:"500",title:httpStatusCodes.getReasonPhrase(t.statusCode)||z,detail:r}]});}},T=U;var M="https://tools.ietf.org/html/rfc2616#section-10",C="An error occurred",F=(e,o,t)=>{let{message:r,stack:n}=e;if(e instanceof q.HttpError){let{expose:a,statusCode:s,title:i,type:d}=e;t.statusCode=s,u(t,e),l(t,{type:d||M,title:i||httpStatusCodes.getReasonPhrase(s)||C,details:r,...a?{trace:n}:{}});}else R(t,e),l(t,{type:M,title:httpStatusCodes.getReasonPhrase(t.statusCode)||C,details:r,...e.expose?{trace:n}:{}});},I=F;var h=(e,o)=>async(t,r,n)=>{let a=r.headers.accept,s=I;a==="application/vnd.api+json"&&(s=T);for(let{handler:i,regex:d}of e)if(d.test(a)){s=i;break}t.expose=o,s(t,r,n);},H=async(e,o,t)=>{let r=[...new Set(t.map(n=>n.method))].join(", ");throw o.setHeader("Allow",r),o.statusCode=405,q__default.default(405,`No route with [${e.method}] method found.`)};var O={alpn:"ALPN","c-pep":"C-PEP","c-pep-info":"C-PEP-Info","caldav-timezones":"CalDAV-Timezones","content-id":"Content-ID","content-md5":"Content-MD5",dasl:"DASL",dav:"DAV",dnt:"DNT",etag:"ETag",getprofile:"GetProfile","http2-settings":"HTTP2-Settings","last-event-id":"Last-Event-ID","mime-version":"MIME-Version","optional-www-authenticate":"Optional-WWW-Authenticate","sec-webSocket-key":"Sec-WebSocket-Key","sec-webSocket-protocol":"Sec-WebSocket-Protocol","sec-webSocket-version":"Sec-WebSocket-Version","sec-websocket-accept":"Sec-WebSocket-Accept","sec-websocket-extensions":"Sec-WebSocket-Extensions",slug:"SLUG",tcn:"TCN",te:"TE",ttl:"TTL","www-authenticate":"WWW-Authenticate","x-att-deviceid":"X-ATT-DeviceId","x-dnsprefetch-control":"X-DNSPrefetch-Control","x-uidh":"X-UIDH"},K=(e,o)=>{let t=e.toLowerCase();return o?O[t]?O[t]:t.split("-").map(r=>r[0]?.toUpperCase()+r.slice(1)).join("-"):t},Z={canonical:!1,normalizeHeaderKey:K},B=e=>{let o={...Z,...e};return async(t,r,n)=>{let a={},s={};return Object.keys(t.headers).forEach(i=>{a[i]=t.headers[i];let d=o.normalizeHeaderKey(i,o.canonical);d&&(s[d]=t.headers[i]);}),t.headers=s,t.rawHeaders=a,n()}},S=B;var G=e=>{if(typeof e!="string")return !1;try{let o=JSON.parse(e),t=Object.prototype.toString.call(o);return t==="[object Object]"||t==="[object Array]"}catch{return !1}},E=G;var $=e=>jstoxml.toXML(e,{header:!0,indent:" "}),y=$;var g="Content-Type",Y=(e,o,t,r,n)=>{if(typeof t.getHeader(g)=="string")return r;let i=[...Q__default.default(o).types(),n.defaultContentType],d=r,N=!1;return i.forEach(c=>{e.forEach(({regex:P,serializer:k})=>{P.test(c)&&(t.setHeader(g,c),d=k(d),N=!0);}),N||(/yaml|yml/.test(c)?(t.setHeader(g,c),d=chunkIAHCIZME_js.b(E(r)?JSON.parse(r):r)):c.includes("xml")&&(t.setHeader(g,c),d=y({[chunkIAHCIZME_js.a(`${o.url?.replace("/api/","")}`.trim())]:E(r)?JSON.parse(r):r})));}),d},m=Y;var te=ee__default.default("api-platform:connect:serializers-middleware"),re=(e=[],o="application/json; charset=utf-8")=>async(t,r,n)=>{if(typeof r.send=="function"){let a=r.send;r.send=s=>{r.send=a,s=m(e,t,r,s,{defaultContentType:o}),r.send(s);};}else if(typeof r.json=="function")te("response.json() is not supported by @visulima/api-platform serializer. Use response.send() or response.end() instead.");else {let a=r.end;r.end=(s,...i)=>(r.end=a,s=m(e,t,r,s,{defaultContentType:o}),r.end(s,...i));}return n()},w=re;var se=(e={})=>new connect.NodeRouter({onError:h(e.errorHandlers??[],e.showTrace??!1),onNoMatch:H}).use(S(e.middlewares?.["http-header-normalizer"]??{})).use(w(e.middlewares?.serializers?.serializers??[],e.middlewares?.serializers?.defaultContentType??"application/json; charset=utf-8")),ne=se;var de=e=>connect.expressWrapper(ie__default.default(e)),pe=de;var le=e=>e.ip??e.headers["x-forwarded-for"]??e.headers["x-real-ip"]??e.socket.remoteAddress,ce=(e,o)=>async(t,r,n)=>{let a=le(t);if(a===void 0)throw q__default.default(400,"Missing IP");try{let s=await e.consume(a),i={"Retry-After":Math.round(s.msBeforeNext/1e3)||1,"X-RateLimit-Remaining":s.remainingPoints,"X-RateLimit-Reset":new Date(Date.now()+s.msBeforeNext).toISOString(),...o};Object.keys(i).forEach(d=>{r.setHeader(d,i[d]);}),await n();}catch{throw q__default.default(429,"Too Many Requests")}},me=ce;
|
|
24
24
|
|
|
25
|
-
Object.defineProperty(exports,
|
|
25
|
+
Object.defineProperty(exports, "dateIn", {
|
|
26
26
|
enumerable: true,
|
|
27
27
|
get: function () { return chunkUPRO35MO_js.a; }
|
|
28
28
|
});
|
|
29
|
-
Object.defineProperty(exports,
|
|
29
|
+
Object.defineProperty(exports, "dateOut", {
|
|
30
30
|
enumerable: true,
|
|
31
31
|
get: function () { return chunkUPRO35MO_js.b; }
|
|
32
32
|
});
|
|
33
|
-
Object.defineProperty(exports,
|
|
33
|
+
Object.defineProperty(exports, "zod", {
|
|
34
34
|
enumerable: true,
|
|
35
35
|
get: function () { return chunkUPRO35MO_js.c; }
|
|
36
36
|
});
|
|
37
|
-
Object.defineProperty(exports,
|
|
37
|
+
Object.defineProperty(exports, "swaggerHandler", {
|
|
38
38
|
enumerable: true,
|
|
39
|
-
get: function () { return
|
|
39
|
+
get: function () { return chunkIAHCIZME_js.c; }
|
|
40
40
|
});
|
|
41
|
-
Object.defineProperty(exports,
|
|
41
|
+
Object.defineProperty(exports, "yamlTransformer", {
|
|
42
42
|
enumerable: true,
|
|
43
|
-
get: function () { return
|
|
43
|
+
get: function () { return chunkIAHCIZME_js.b; }
|
|
44
44
|
});
|
|
45
|
-
Object.defineProperty(exports,
|
|
45
|
+
Object.defineProperty(exports, "EdgeRouter", {
|
|
46
46
|
enumerable: true,
|
|
47
47
|
get: function () { return connect.EdgeRouter; }
|
|
48
48
|
});
|
|
49
|
-
Object.defineProperty(exports,
|
|
49
|
+
Object.defineProperty(exports, "NodeRouter", {
|
|
50
50
|
enumerable: true,
|
|
51
51
|
get: function () { return connect.NodeRouter; }
|
|
52
52
|
});
|
|
53
|
-
Object.defineProperty(exports,
|
|
53
|
+
Object.defineProperty(exports, "Router", {
|
|
54
54
|
enumerable: true,
|
|
55
55
|
get: function () { return connect.Router; }
|
|
56
56
|
});
|
|
57
|
-
Object.defineProperty(exports,
|
|
57
|
+
Object.defineProperty(exports, "createEdgeRouter", {
|
|
58
58
|
enumerable: true,
|
|
59
59
|
get: function () { return connect.createEdgeRouter; }
|
|
60
60
|
});
|
|
61
|
-
Object.defineProperty(exports,
|
|
61
|
+
Object.defineProperty(exports, "expressWrapper", {
|
|
62
62
|
enumerable: true,
|
|
63
63
|
get: function () { return connect.expressWrapper; }
|
|
64
64
|
});
|
|
65
|
-
Object.defineProperty(exports,
|
|
65
|
+
Object.defineProperty(exports, "sendJson", {
|
|
66
66
|
enumerable: true,
|
|
67
67
|
get: function () { return connect.sendJson; }
|
|
68
68
|
});
|
|
69
|
-
Object.defineProperty(exports,
|
|
69
|
+
Object.defineProperty(exports, "withZod", {
|
|
70
70
|
enumerable: true,
|
|
71
71
|
get: function () { return connect.withZod; }
|
|
72
72
|
});
|
|
73
|
-
Object.defineProperty(exports,
|
|
73
|
+
Object.defineProperty(exports, "BadGateway", {
|
|
74
74
|
enumerable: true,
|
|
75
75
|
get: function () { return q.BadGateway; }
|
|
76
76
|
});
|
|
77
|
-
Object.defineProperty(exports,
|
|
77
|
+
Object.defineProperty(exports, "BadRequest", {
|
|
78
78
|
enumerable: true,
|
|
79
79
|
get: function () { return q.BadRequest; }
|
|
80
80
|
});
|
|
81
|
-
Object.defineProperty(exports,
|
|
81
|
+
Object.defineProperty(exports, "BandwidthLimitExceeded", {
|
|
82
82
|
enumerable: true,
|
|
83
83
|
get: function () { return q.BandwidthLimitExceeded; }
|
|
84
84
|
});
|
|
85
|
-
Object.defineProperty(exports,
|
|
85
|
+
Object.defineProperty(exports, "Conflict", {
|
|
86
86
|
enumerable: true,
|
|
87
87
|
get: function () { return q.Conflict; }
|
|
88
88
|
});
|
|
89
|
-
Object.defineProperty(exports,
|
|
89
|
+
Object.defineProperty(exports, "ExpectationFailed", {
|
|
90
90
|
enumerable: true,
|
|
91
91
|
get: function () { return q.ExpectationFailed; }
|
|
92
92
|
});
|
|
93
|
-
Object.defineProperty(exports,
|
|
93
|
+
Object.defineProperty(exports, "FailedDependency", {
|
|
94
94
|
enumerable: true,
|
|
95
95
|
get: function () { return q.FailedDependency; }
|
|
96
96
|
});
|
|
97
|
-
Object.defineProperty(exports,
|
|
97
|
+
Object.defineProperty(exports, "Forbidden", {
|
|
98
98
|
enumerable: true,
|
|
99
99
|
get: function () { return q.Forbidden; }
|
|
100
100
|
});
|
|
101
|
-
Object.defineProperty(exports,
|
|
101
|
+
Object.defineProperty(exports, "GatewayTimeout", {
|
|
102
102
|
enumerable: true,
|
|
103
103
|
get: function () { return q.GatewayTimeout; }
|
|
104
104
|
});
|
|
105
|
-
Object.defineProperty(exports,
|
|
105
|
+
Object.defineProperty(exports, "Gone", {
|
|
106
106
|
enumerable: true,
|
|
107
107
|
get: function () { return q.Gone; }
|
|
108
108
|
});
|
|
109
|
-
Object.defineProperty(exports,
|
|
109
|
+
Object.defineProperty(exports, "HTTPVersionNotSupported", {
|
|
110
110
|
enumerable: true,
|
|
111
111
|
get: function () { return q.HTTPVersionNotSupported; }
|
|
112
112
|
});
|
|
113
|
-
Object.defineProperty(exports,
|
|
113
|
+
Object.defineProperty(exports, "ImATeapot", {
|
|
114
114
|
enumerable: true,
|
|
115
115
|
get: function () { return q.ImATeapot; }
|
|
116
116
|
});
|
|
117
|
-
Object.defineProperty(exports,
|
|
117
|
+
Object.defineProperty(exports, "InsufficientStorage", {
|
|
118
118
|
enumerable: true,
|
|
119
119
|
get: function () { return q.InsufficientStorage; }
|
|
120
120
|
});
|
|
121
|
-
Object.defineProperty(exports,
|
|
121
|
+
Object.defineProperty(exports, "InternalServerError", {
|
|
122
122
|
enumerable: true,
|
|
123
123
|
get: function () { return q.InternalServerError; }
|
|
124
124
|
});
|
|
125
|
-
Object.defineProperty(exports,
|
|
125
|
+
Object.defineProperty(exports, "LengthRequired", {
|
|
126
126
|
enumerable: true,
|
|
127
127
|
get: function () { return q.LengthRequired; }
|
|
128
128
|
});
|
|
129
|
-
Object.defineProperty(exports,
|
|
129
|
+
Object.defineProperty(exports, "Locked", {
|
|
130
130
|
enumerable: true,
|
|
131
131
|
get: function () { return q.Locked; }
|
|
132
132
|
});
|
|
133
|
-
Object.defineProperty(exports,
|
|
133
|
+
Object.defineProperty(exports, "LoopDetected", {
|
|
134
134
|
enumerable: true,
|
|
135
135
|
get: function () { return q.LoopDetected; }
|
|
136
136
|
});
|
|
137
|
-
Object.defineProperty(exports,
|
|
137
|
+
Object.defineProperty(exports, "MethodNotAllowed", {
|
|
138
138
|
enumerable: true,
|
|
139
139
|
get: function () { return q.MethodNotAllowed; }
|
|
140
140
|
});
|
|
141
|
-
Object.defineProperty(exports,
|
|
141
|
+
Object.defineProperty(exports, "MisdirectedRequest", {
|
|
142
142
|
enumerable: true,
|
|
143
143
|
get: function () { return q.MisdirectedRequest; }
|
|
144
144
|
});
|
|
145
|
-
Object.defineProperty(exports,
|
|
145
|
+
Object.defineProperty(exports, "NetworkAuthenticationRequire", {
|
|
146
146
|
enumerable: true,
|
|
147
147
|
get: function () { return q.NetworkAuthenticationRequire; }
|
|
148
148
|
});
|
|
149
|
-
Object.defineProperty(exports,
|
|
149
|
+
Object.defineProperty(exports, "NotAcceptable", {
|
|
150
150
|
enumerable: true,
|
|
151
151
|
get: function () { return q.NotAcceptable; }
|
|
152
152
|
});
|
|
153
|
-
Object.defineProperty(exports,
|
|
153
|
+
Object.defineProperty(exports, "NotExtended", {
|
|
154
154
|
enumerable: true,
|
|
155
155
|
get: function () { return q.NotExtended; }
|
|
156
156
|
});
|
|
157
|
-
Object.defineProperty(exports,
|
|
157
|
+
Object.defineProperty(exports, "NotFound", {
|
|
158
158
|
enumerable: true,
|
|
159
159
|
get: function () { return q.NotFound; }
|
|
160
160
|
});
|
|
161
|
-
Object.defineProperty(exports,
|
|
161
|
+
Object.defineProperty(exports, "NotImplemented", {
|
|
162
162
|
enumerable: true,
|
|
163
163
|
get: function () { return q.NotImplemented; }
|
|
164
164
|
});
|
|
165
|
-
Object.defineProperty(exports,
|
|
165
|
+
Object.defineProperty(exports, "PayloadTooLarge", {
|
|
166
166
|
enumerable: true,
|
|
167
167
|
get: function () { return q.PayloadTooLarge; }
|
|
168
168
|
});
|
|
169
|
-
Object.defineProperty(exports,
|
|
169
|
+
Object.defineProperty(exports, "PaymentRequired", {
|
|
170
170
|
enumerable: true,
|
|
171
171
|
get: function () { return q.PaymentRequired; }
|
|
172
172
|
});
|
|
173
|
-
Object.defineProperty(exports,
|
|
173
|
+
Object.defineProperty(exports, "PreconditionFailed", {
|
|
174
174
|
enumerable: true,
|
|
175
175
|
get: function () { return q.PreconditionFailed; }
|
|
176
176
|
});
|
|
177
|
-
Object.defineProperty(exports,
|
|
177
|
+
Object.defineProperty(exports, "PreconditionRequired", {
|
|
178
178
|
enumerable: true,
|
|
179
179
|
get: function () { return q.PreconditionRequired; }
|
|
180
180
|
});
|
|
181
|
-
Object.defineProperty(exports,
|
|
181
|
+
Object.defineProperty(exports, "ProxyAuthenticationRequired", {
|
|
182
182
|
enumerable: true,
|
|
183
183
|
get: function () { return q.ProxyAuthenticationRequired; }
|
|
184
184
|
});
|
|
185
|
-
Object.defineProperty(exports,
|
|
185
|
+
Object.defineProperty(exports, "RangeNotSatisfiable", {
|
|
186
186
|
enumerable: true,
|
|
187
187
|
get: function () { return q.RangeNotSatisfiable; }
|
|
188
188
|
});
|
|
189
|
-
Object.defineProperty(exports,
|
|
189
|
+
Object.defineProperty(exports, "RequestHeaderFieldsTooLarge", {
|
|
190
190
|
enumerable: true,
|
|
191
191
|
get: function () { return q.RequestHeaderFieldsTooLarge; }
|
|
192
192
|
});
|
|
193
|
-
Object.defineProperty(exports,
|
|
193
|
+
Object.defineProperty(exports, "RequestTimeout", {
|
|
194
194
|
enumerable: true,
|
|
195
195
|
get: function () { return q.RequestTimeout; }
|
|
196
196
|
});
|
|
197
|
-
Object.defineProperty(exports,
|
|
197
|
+
Object.defineProperty(exports, "ServiceUnavailable", {
|
|
198
198
|
enumerable: true,
|
|
199
199
|
get: function () { return q.ServiceUnavailable; }
|
|
200
200
|
});
|
|
201
|
-
Object.defineProperty(exports,
|
|
201
|
+
Object.defineProperty(exports, "TooManyRequests", {
|
|
202
202
|
enumerable: true,
|
|
203
203
|
get: function () { return q.TooManyRequests; }
|
|
204
204
|
});
|
|
205
|
-
Object.defineProperty(exports,
|
|
205
|
+
Object.defineProperty(exports, "URITooLong", {
|
|
206
206
|
enumerable: true,
|
|
207
207
|
get: function () { return q.URITooLong; }
|
|
208
208
|
});
|
|
209
|
-
Object.defineProperty(exports,
|
|
209
|
+
Object.defineProperty(exports, "Unauthorized", {
|
|
210
210
|
enumerable: true,
|
|
211
211
|
get: function () { return q.Unauthorized; }
|
|
212
212
|
});
|
|
213
|
-
Object.defineProperty(exports,
|
|
213
|
+
Object.defineProperty(exports, "UnavailableForLegalReasons", {
|
|
214
214
|
enumerable: true,
|
|
215
215
|
get: function () { return q.UnavailableForLegalReasons; }
|
|
216
216
|
});
|
|
217
|
-
Object.defineProperty(exports,
|
|
217
|
+
Object.defineProperty(exports, "UnprocessableEntity", {
|
|
218
218
|
enumerable: true,
|
|
219
219
|
get: function () { return q.UnprocessableEntity; }
|
|
220
220
|
});
|
|
221
|
-
Object.defineProperty(exports,
|
|
221
|
+
Object.defineProperty(exports, "UnsupportedMediaType", {
|
|
222
222
|
enumerable: true,
|
|
223
223
|
get: function () { return q.UnsupportedMediaType; }
|
|
224
224
|
});
|
|
225
|
-
Object.defineProperty(exports,
|
|
225
|
+
Object.defineProperty(exports, "UpgradeRequired", {
|
|
226
226
|
enumerable: true,
|
|
227
227
|
get: function () { return q.UpgradeRequired; }
|
|
228
228
|
});
|
|
229
|
-
Object.defineProperty(exports,
|
|
229
|
+
Object.defineProperty(exports, "VariantAlsoNegotiates", {
|
|
230
230
|
enumerable: true,
|
|
231
231
|
get: function () { return q.VariantAlsoNegotiates; }
|
|
232
232
|
});
|
|
233
|
-
Object.defineProperty(exports,
|
|
233
|
+
Object.defineProperty(exports, "createHttpError", {
|
|
234
234
|
enumerable: true,
|
|
235
235
|
get: function () { return q__default.default; }
|
|
236
236
|
});
|
package/dist/index-server.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { a as dateIn, b as dateOut, c as zod } from './chunk-66EUOAFS.mjs';
|
|
2
|
-
import { b, a } from './chunk-
|
|
3
|
-
export { c as swaggerHandler, b as yamlTransformer } from './chunk-
|
|
2
|
+
import { b, a } from './chunk-IRBDVWUD.mjs';
|
|
3
|
+
export { c as swaggerHandler, b as yamlTransformer } from './chunk-IRBDVWUD.mjs';
|
|
4
4
|
import './chunk-HZWWJL43.mjs';
|
|
5
5
|
import { NodeRouter, expressWrapper } from '@visulima/connect';
|
|
6
6
|
export { EdgeRouter, NodeRouter, Router, createEdgeRouter, expressWrapper, sendJson, withZod } from '@visulima/connect';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/api-platform",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Visulima API platform is a set of tools to build and consume web APIs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"anolilab",
|
|
@@ -125,18 +125,18 @@
|
|
|
125
125
|
"LICENSE.md"
|
|
126
126
|
],
|
|
127
127
|
"dependencies": {
|
|
128
|
-
"@visulima/connect": "3.0.
|
|
129
|
-
"@visulima/jsdoc-open-api": "2.0.
|
|
128
|
+
"@visulima/connect": "3.0.11",
|
|
129
|
+
"@visulima/jsdoc-open-api": "2.0.45",
|
|
130
|
+
"@visulima/path": "1.0.1",
|
|
130
131
|
"accepts": "^1.3.8",
|
|
131
|
-
"debug": "^4.3.
|
|
132
|
+
"debug": "^4.3.5",
|
|
132
133
|
"http-errors": "^2.0.0",
|
|
133
134
|
"http-status-codes": "^2.3.0",
|
|
134
135
|
"jstoxml": "^5.0.1",
|
|
135
136
|
"lodash.merge": "^4.6.2",
|
|
136
|
-
"pathe": "^1.1.2",
|
|
137
137
|
"schema-dts": "^1.1.2",
|
|
138
138
|
"ts-japi": "^1.11.4",
|
|
139
|
-
"yaml": "^2.4.
|
|
139
|
+
"yaml": "^2.4.3",
|
|
140
140
|
"zod-to-ts": "^1.2.0"
|
|
141
141
|
},
|
|
142
142
|
"devDependencies": {
|
|
@@ -145,17 +145,17 @@
|
|
|
145
145
|
"@anolilab/semantic-release-pnpm": "^1.1.0",
|
|
146
146
|
"@anolilab/semantic-release-preset": "^8.1.0",
|
|
147
147
|
"@arthurgeron/eslint-plugin-react-usememo": "^2.4.0",
|
|
148
|
-
"@babel/core": "^7.24.
|
|
148
|
+
"@babel/core": "^7.24.6",
|
|
149
149
|
"@hapi/hapi": "^21.3.9",
|
|
150
150
|
"@koa/router": "^12.0.1",
|
|
151
151
|
"@secretlint/secretlint-rule-preset-recommend": "^8.2.4",
|
|
152
|
-
"@testing-library/react": "^
|
|
152
|
+
"@testing-library/react": "^16.0.0",
|
|
153
153
|
"@total-typescript/ts-reset": "^0.5.1",
|
|
154
154
|
"@types/accepts": "^1.3.7",
|
|
155
155
|
"@types/cors": "^2.8.17",
|
|
156
156
|
"@types/debug": "^4.1.12",
|
|
157
157
|
"@types/express": "^4.17.21",
|
|
158
|
-
"@types/express-serve-static-core": "^4.19.
|
|
158
|
+
"@types/express-serve-static-core": "^4.19.3",
|
|
159
159
|
"@types/http-errors": "^2.0.4",
|
|
160
160
|
"@types/jstoxml": "^2.0.4",
|
|
161
161
|
"@types/koa": "^2.15.0",
|
|
@@ -163,12 +163,12 @@
|
|
|
163
163
|
"@types/lodash.merge": "^4.6.9",
|
|
164
164
|
"@types/node": "18.18.14",
|
|
165
165
|
"@types/qs": "^6.9.15",
|
|
166
|
-
"@types/react": "^18.3.
|
|
166
|
+
"@types/react": "^18.3.3",
|
|
167
167
|
"@types/react-dom": "^18.3.0",
|
|
168
168
|
"@types/swagger-ui-react": "^4.18.3",
|
|
169
169
|
"@types/webpack": "^5.28.5",
|
|
170
170
|
"@visulima/crud": "2.0.21",
|
|
171
|
-
"@visulima/fs": "2.1.
|
|
171
|
+
"@visulima/fs": "2.1.3",
|
|
172
172
|
"@vitest/coverage-v8": "^1.6.0",
|
|
173
173
|
"@vitest/ui": "^1.6.0",
|
|
174
174
|
"chalk": "5.3.0",
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
"cors": "^2.8.5",
|
|
178
178
|
"cross-env": "^7.0.3",
|
|
179
179
|
"eslint": "^8.57.0",
|
|
180
|
-
"eslint-plugin-deprecation": "^
|
|
180
|
+
"eslint-plugin-deprecation": "^3.0.0",
|
|
181
181
|
"eslint-plugin-etc": "^2.0.3",
|
|
182
182
|
"eslint-plugin-import": "npm:eslint-plugin-i@^2.29.1",
|
|
183
183
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
|
@@ -198,19 +198,19 @@
|
|
|
198
198
|
"next-test-api-route-handler": "^4.0.7",
|
|
199
199
|
"node-mocks-http": "^1.14.1",
|
|
200
200
|
"openapi-types": "^12.1.3",
|
|
201
|
-
"prettier": "^3.
|
|
201
|
+
"prettier": "^3.3.0",
|
|
202
202
|
"rate-limiter-flexible": "^5.0.3",
|
|
203
203
|
"react": "^18.3.1",
|
|
204
204
|
"react-dom": "^18.3.1",
|
|
205
205
|
"redoc": "^2.1.4",
|
|
206
206
|
"rimraf": "^5.0.7",
|
|
207
207
|
"secretlint": "8.2.3",
|
|
208
|
-
"semantic-release": "
|
|
208
|
+
"semantic-release": "23.1.1",
|
|
209
209
|
"styled-components": "^6.1.11",
|
|
210
210
|
"swagger-ui-dist": "^4.19.1",
|
|
211
211
|
"swagger-ui-react": "^4.19.1",
|
|
212
|
-
"tsup": "^8.0
|
|
213
|
-
"type-fest": "^4.
|
|
212
|
+
"tsup": "^8.1.0",
|
|
213
|
+
"type-fest": "^4.19.0",
|
|
214
214
|
"typescript": "^5.4.5",
|
|
215
215
|
"vitest": "^1.6.0",
|
|
216
216
|
"webpack": "^5.91.0",
|
|
@@ -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","existsSync","readFileSync","path","modelsToOpenApi","debug","merge","toXML","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","crud","specs","swaggerFilePath","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","import { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\n// eslint-disable-next-line no-restricted-imports\nimport merge from \"lodash.merge\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\nimport yamlTransformer from \"../../serializers/transformer/yaml\";\nimport extendSwaggerSpec from \"../extend-swagger-spec\";\n\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 crud,\n specs,\n swaggerFilePath,\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: { examples: modelsOpenApi.examples, schemas: modelsOpenApi.schemas },\n paths: modelsOpenApi.paths,\n tags: modelsOpenApi.tags,\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 interface SwaggerHandlerOptions<M extends string, PrismaClient> {\n allowedMediaTypes: Record<string, boolean>;\n crud: Exclude<ModelsToOpenApiParameters<M, PrismaClient>, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<M>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\n swaggerFilePath: string;\n}\n\nexport default swaggerHandler;\n","import type { XmlElement } from \"jstoxml\";\nimport { toXML } 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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] = {} 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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n {} as OpenAPIV3.SchemaObject;\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n schemaIsArray\n ? {\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n type: \"array\",\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>;\n} => {\n let example: any | undefined;\n let examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> | 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 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 schemaName = (schema as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/schemas/\", \"\");\n }\n\n extendResponseSchema(methodSpec, status, mediaType, schemaName, schemaIsArray);\n });\n }\n });\n\n return { example, examples };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: Record<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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n {};\n }\n\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n transformer(example);\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\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: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n {};\n }\n\n const transformedExamples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> = {};\n\n Object.entries(examples).forEach(([exampleName, example]) => {\n let transformed = 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 if (!transformed) {\n transformedExamples[exampleName] =\n spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\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?: Record<string, boolean>,\n transformers: Transformers = [\n {\n regex: /xml/u,\n transformer: (value: XmlElement | XmlElement[] | undefined) =>\n 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 { example, examples } = 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 { URL } 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,no-loops/no-loops\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): Record<string, unknown> => {\n if (request.query) {\n return request.query;\n }\n\n if (!request.url) {\n return {};\n }\n\n // Note: Fake protocol is required to parse query string\n const url = new URL(`https://${request.headers.host?.replace(/\\/$/u, \"\")}/${request.url}`);\n\n return Object.fromEntries(url.searchParams.entries());\n};\n\nexport const toHeaderCase = (string_: string): string =>\n string_\n .toLowerCase()\n .replaceAll(/[^\\s\\w]/gu, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replaceAll(/\\s+|_/gu, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replaceAll(/\\b\\w/gu, (c) => c.toUpperCase());\n"]}
|
|
@@ -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","existsSync","readFileSync","path","modelsToOpenApi","debug","merge","toXML","URL","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","crud","specs","swaggerFilePath","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","import { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\n// eslint-disable-next-line no-restricted-imports\nimport merge from \"lodash.merge\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\nimport yamlTransformer from \"../../serializers/transformer/yaml\";\nimport extendSwaggerSpec from \"../extend-swagger-spec\";\n\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 crud,\n specs,\n swaggerFilePath,\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: { examples: modelsOpenApi.examples, schemas: modelsOpenApi.schemas },\n paths: modelsOpenApi.paths,\n tags: modelsOpenApi.tags,\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 interface SwaggerHandlerOptions<M extends string, PrismaClient> {\n allowedMediaTypes: Record<string, boolean>;\n crud: Exclude<ModelsToOpenApiParameters<M, PrismaClient>, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<M>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\n swaggerFilePath: string;\n}\n\nexport default swaggerHandler;\n","import type { XmlElement } from \"jstoxml\";\nimport { toXML } 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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] = {} 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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n {} as OpenAPIV3.SchemaObject;\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n schemaIsArray\n ? {\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n type: \"array\",\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>;\n} => {\n let example: any | undefined;\n let examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> | 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 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 schemaName = (schema as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/schemas/\", \"\");\n }\n\n extendResponseSchema(methodSpec, status, mediaType, schemaName, schemaIsArray);\n });\n }\n });\n\n return { example, examples };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: Record<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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n {};\n }\n\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n transformer(example);\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\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: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\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 // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n {};\n }\n\n const transformedExamples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> = {};\n\n Object.entries(examples).forEach(([exampleName, example]) => {\n let transformed = 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 if (!transformed) {\n transformedExamples[exampleName] =\n spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\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?: Record<string, boolean>,\n transformers: Transformers = [\n {\n regex: /xml/u,\n transformer: (value: XmlElement | XmlElement[] | undefined) =>\n 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 { example, examples } = 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 { URL } 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,no-loops/no-loops\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): Record<string, unknown> => {\n if (request.query) {\n return request.query;\n }\n\n if (!request.url) {\n return {};\n }\n\n // Note: Fake protocol is required to parse query string\n const url = new URL(`https://${request.headers.host?.replace(/\\/$/u, \"\")}/${request.url}`);\n\n return Object.fromEntries(url.searchParams.entries());\n};\n\nexport const toHeaderCase = (string_: string): string =>\n string_\n .toLowerCase()\n .replaceAll(/[^\\s\\w]/gu, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replaceAll(/\\s+|_/gu, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replaceAll(/\\b\\w/gu, (c) => c.toUpperCase());\n"]}
|
package/dist/chunk-IWQGMV5V.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var child_process = require('child_process');
|
|
4
|
-
var fs = require('fs');
|
|
5
|
-
var path = require('path');
|
|
6
|
-
var oe = require('process');
|
|
7
|
-
var y = require('chalk');
|
|
8
|
-
var jsdocOpenApi = require('@visulima/jsdoc-open-api');
|
|
9
|
-
var pathe = require('pathe');
|
|
10
|
-
var url = require('url');
|
|
11
|
-
var promises = require('fs/promises');
|
|
12
|
-
require('zlib');
|
|
13
|
-
require('yaml');
|
|
14
|
-
|
|
15
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
-
|
|
17
|
-
var oe__default = /*#__PURE__*/_interopDefault(oe);
|
|
18
|
-
var y__default = /*#__PURE__*/_interopDefault(y);
|
|
19
|
-
|
|
20
|
-
var ie=(e,t)=>{if(t.length===0)throw new Error("must include at least one key to map");let r=e.toString();return t.forEach(o=>{r=o.optional?r.replace("(?:\\/([^\\/]+?))?\\",`/:${o.name}?`):r.replace("(?:([^\\/]+?))",`:${o.name}`);}),r.replace("/?(?=\\/|$)/i","").replace("/^","").replaceAll("\\","").replaceAll(/\/{2,}/gu,"/")},T=ie;var se=(e,t)=>{if(typeof e=="string")return e;if(e.fast_slash)return "";if(e.fast_star)return "*";let r="";t.length>0&&(r=T(e,t));let o=/^\/\^((?:\\[$()*+./?[\\\]^{|}]|[^$()*+./?[\\\]^{|}])*)\$\//u.exec(e.toString().replace("\\/?","").replace("(?=\\/|$)","$"));return Array.isArray(o)&&o.length>1?o[1].replaceAll(/\\(.)/gu,"$1").slice(1):r?r.slice(1):e.toString()},D=se;var ae=(e,t,r)=>{let o=e.route.stack.at(-1),n=t.map(a=>({in:"path",name:a.name,required:!a.optional})),i=e.route.stack.filter(a=>a.handle.metadata);if(i.length>1)throw new Error("Only one metadata middleware is allowed per route");let l=(r+e.route.path).replaceAll(/\/{2,}/gu,"/");return i.length===0?{method:o.method,path:l,pathParams:n}:{metadata:i[0].handle.metadata,method:o.method,path:l,pathParams:n}},R=(e,t,r,o)=>{o=[...o,...r.keys],r.name==="router"&&r.handle&&r.handle.stack.forEach(n=>{t=t||"",R(e,`${t}/${D(r.regexp,r.keys)}`,n,o);}),!(!r.route||r.route.stack.length===0)&&e.push(ae(r,o,t));},ce=e=>{let t=e._router||e.router,r=[];return t.stack.forEach(o=>{R(r,"",o,[]);}),r},P=ce;var le=e=>{let t=[];return P(e).forEach(r=>{t.push({file:"unknown",method:r.method.toUpperCase(),path:r.path,tags:[]});}),t},F=le;var N=e=>e.replaceAll(/ \(.*\)/gu,"").trim(),O=e=>e.trim().split(" ")[1].slice(1,-1),pe=e=>{let r=e.printRoutes().replaceAll(/[─│└├]/gu," ").trimEnd().split(`
|
|
21
|
-
`),o=r.reduce((i,l,a)=>{let c=N(l);if(N(r[a-1]??"")===c){let v=i.filter($=>$.index<a&&$.segment===c),{methods:b}=v.at(-1);return b!==null&&b.push(O(l)),i}let p=l.replaceAll(/ \(.*\)/gu,"").match(/ /gu);if(p===null)throw new Error("Invalid spaces");let s=p.length/4,m=l.includes("("),E=m?[O(l)]:null;return i.push({depth:s,index:a,isRoute:m,methods:E,segment:c}),i},[]),n=[];return o.filter(i=>i.isRoute).forEach(i=>{let a=[...o.filter(c=>c.index<i.index&&c.depth<i.depth).filter((c,f,p)=>!p.find(s=>s.depth===c.depth&&s.index>c.index)).map(c=>c.segment),i.segment].join("");if(i.methods===null)throw new Error("Invalid methods");i.methods.forEach(c=>{n.push({file:"unknown",method:c.toUpperCase(),path:a,tags:[]});});}),n},L=pe;var fe=e=>{let r=e._core.router.routes,o=[];return [...r.keys()].forEach(n=>{r.get(n).routes.forEach(i=>{o.push({file:"unknown",method:i.route.method.toUpperCase(),path:i.path,tags:[]});});}),o},I=fe;var ue=e=>{let t=[];return e.middleware.filter(r=>r.router).flatMap(r=>r.router.stack).forEach(r=>{t.push({file:"unknown",method:r.methods.join("|").toUpperCase(),path:r.path,tags:[]});}),t},j=ue;var M=/\.(js|ts|mjs|cjs)$/u,ge=(e,t,r=!1)=>{e=pathe.toNamespacedPath(e);let o=pathe.toNamespacedPath(oe.cwd()),n=[],i=jsdocOpenApi.parseFile(e,jsdocOpenApi.jsDocumentCommentsToOpenApi,r);n=[...n,...i.map(c=>c.spec)];let l=jsdocOpenApi.parseFile(e,jsdocOpenApi.swaggerJsDocumentCommentsToOpenApi,r);n=[...n,...l.map(c=>c.spec)];let a=[];return n.length===0?(fs.readFileSync(e,"utf8").split(/\r?\n/u).forEach(f=>{let p=/[=aces|]+\s["'|](GET|POST|PUT|PATCH|HEAD|DELETE|OPTIONS)["'|]/u.exec(f);if(p){let[,s]=p;s==="GET"&&(s="GET|HEAD"),a.push({file:e.replace(`${o}/`,""),method:s,path:pathe.toNamespacedPath(e.replace(t,"").replace(M,"")),tags:[]});}}),a.length===0&&a.push({file:e.replace(`${o}/`,""),method:"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS",path:pathe.toNamespacedPath(e.replace(t,"").replace(M,"")),tags:[]}),a):(n.forEach(c=>{Object.entries(c?.paths??{}).forEach(([p,s])=>{Object.entries(s).forEach(([E,v])=>{a.push({file:e.replace(`${o}/`,""),method:E.toUpperCase(),path:pathe.toNamespacedPath(p),tags:v.tags});});});}),a)},U=ge;var we=class extends Error{root;constructor(e,t){super(`${e instanceof Error?e.message:e} for path "${t}"`),this.cause=e,this.root=t;}get name(){return "WalkError"}set name(e){throw new Error("Cannot overwrite name of WalkError")}},S=we;var ve=e=>{if(!e||!(e instanceof URL)&&typeof e!="string")throw new TypeError("Path must be a non-empty string or URL.")},J=ve,Se=e=>e instanceof URL?url.fileURLToPath(e):e,K=Se;var xe=globalThis.process||Object.create(null),W={versions:{}},ke=new Proxy(xe,{get(e,t){if(t in e)return e[t];if(t in W)return W[t]}}),_=ke;_.platform==="win32"&&!_.env?.WT_SESSION?">":"\u276F";process.platform==="win32"||/^(?:msys|cygwin)$/.test(process.env.OSTYPE);process.platform==="win32"||/^(?:msys|cygwin)$/.test(process.env.OSTYPE);var Fe=e=>{let t=e.replace(/\.\*/g,".([^/]*)").replace(/\*\*/g,"(.*)").replace(/(?<!\.)\*(?!\*)/g,"([^/]*)").replace(/\?/g,"[^/]").replace(/\.(?!\*)/g,"\\.").replace(/\{/g,"(").replace(/\}/g,")").replace(/,/g,"|").replace(/\[!(.*?)\]/g,"[^$1]");return new RegExp(`^${t}$`)},G=Fe,Ne=(e,t,r,o)=>Array.isArray(t)&&t.length>0&&!t.some(n=>e.endsWith(n))||r&&!r.some(n=>n.test(e))?!1:!(o&&o.some(n=>n.test(e))),g=Ne,Oe=async e=>{let t=pathe.normalize(e),r=pathe.basename(t),o=await promises.stat(t);return {isDirectory:o.isDirectory,isFile:o.isFile,isSymbolicLink:o.isSymbolicLink,name:r,path:t}};async function*H(e,{extensions:t,followSymlinks:r=!1,includeDirs:o=!0,includeFiles:n=!0,includeSymlinks:i=!0,match:l,maxDepth:a=Number.POSITIVE_INFINITY,skip:c}={}){if(J(e),a<0)return;let f=l?l.map(s=>typeof s=="string"?G(s):s):void 0,p=c?c.map(s=>typeof s=="string"?G(s):s):void 0;if(e=pathe.resolve(K(e)),o&&g(e,t,f,p)&&(yield await Oe(e)),!(a<1||!g(e,void 0,void 0,p)))try{for await(let s of await promises.readdir(e,{withFileTypes:!0})){let m=pathe.join(e,s.name);if(s.isSymbolicLink())if(r)m=await promises.realpath(m);else if(i&&g(m,t,f,p))yield {isDirectory:s.isDirectory,isFile:s.isFile,isSymbolicLink:s.isSymbolicLink,name:s.name,path:m};else continue;s.isSymbolicLink()||s.isDirectory()?yield*H(m,{extensions:t,followSymlinks:r,includeDirs:o,includeFiles:n,includeSymlinks:i,match:f,maxDepth:a-1,skip:p}):s.isFile()&&n&&g(m,t,f,p)&&(yield {isDirectory:s.isDirectory,isFile:s.isFile,isSymbolicLink:s.isSymbolicLink,name:s.name,path:m});}}catch(s){throw s instanceof S?s:new S(s,e)}}var Le=async(e,t={})=>{Array.isArray(t.extensions)||(t.extensions=["js","mjs","cjs","ts"]);let r=[];for await(let o of H(e,t))r.push(o.path);return r},B=Le;new TextEncoder;var w=[".js",".ts",".mjs",".cjs"],X=e=>{let t=pathe.parse(e);for(;t.base&&t.root!==t.dir;){if(fs.readdirSync(t.dir).find(n=>n==="package.json"))return t.dir;t=pathe.parse(t.dir);}return null},q=e=>{let t=`${e}/package.json`,{dependencies:r}=JSON.parse(fs.readFileSync(t).toString());return r?.express?"express":r?.koa&&(r["@koa/router"]||r["koa-router"])?"koa":r?.next?"next":r?.["@hapi/hapi"]?"hapi":r?.fastify?"fastify":null},z=(e,t)=>Object.keys(e).length===0?null:t==="hapi"?typeof e.app.app=="string"?e.app:e:e.app??e;var Q=e=>{try{return fs.statSync(e).isDirectory()}catch{return !1}},Me=async(e="")=>{let t=path.join(e,"pages/api");return !Q(t)&&(t=path.join(e,"src/pages/api"),!Q(t))?[]:B(t,{extensions:w,includeDirs:!1})},Z=Me;var x=async(e,t,r)=>{if(t==="express")return F(e);if(t==="koa")return j(e);if(t==="hapi")return I(e);if(t==="fastify")return L(e);if(t==="next"){let o=await Z(e);if(o.length===0)throw new Error(`No API routes found, in "${e}".`);return o.flatMap(n=>U(n,e,r))}return null};var Ue=(e,t)=>{let r=new Map;return e.forEach(o=>{let n=t(o),i=r.get(n);i?i.push(o):r.set(n,[o]);}),r},ee=Ue;var We=(e,t)=>{let r={ANY:y__default.default.redBright,DELETE:y__default.default.redBright,GET:y__default.default.blue,HEAD:y__default.default.hex("#6C7280"),OPTIONS:y__default.default.hex("#6C7280"),PATCH:y__default.default.yellow,POST:y__default.default.yellow,PUT:y__default.default.yellow},o;if(e==="GET|HEAD")o=`${y__default.default.blue("GET")}${y__default.default.grey("|HEAD")}`;else {let f=r[e](e);o=e==="GET"?`${f}${y__default.default.grey("|HEAD")}`:f;}let n=e==="GET"?6:14-e.length,i=Array.from({length:n}).fill(" ").join(""),l=process.stdout.columns-16-t.length-4,a=l>0?Array.from({length:l}).fill(".").join(""):"",c=t.split("/").map(f=>[":","["].includes(f[0]??"")?y__default.default.yellowBright(f):f).join("/");return ` ${o}${i}${c}${y__default.default.grey(a)}`},_e=(e,t={})=>e.map(r=>{if(!(Array.isArray(t.methods)&&t.methods.includes(r.method)))return r.method==="GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS"&&(r.method="ANY"),We(r.method,r.path.replace("/pages",""))}).filter(Boolean),k=_e;var Ge=async(e,t,r={})=>{let o=path.join(oe__default.default.cwd(),t);if(!fs.existsSync(o))throw new Error("No such file, invalid path provided.");let n=X(o);if(!n)throw new Error("Please initialize local package.json.");if(e===void 0){let l=q(n);if(!l)throw new Error("Couldn't detect supported back-end framework.");e=l;}let i=null;if(e==="next")i=await x(o,"next",r.verbose??!1);else {if(!fs.statSync(o).isFile())throw new Error(`${o} is directory, but file expected.`);if(!w.includes(path.extname(o)))throw new Error("Please specify application .ts/.js/.mjs/.cjs file.");let l=`${n}/.env`;fs.existsSync(l)&&(await import(`${n}/node_modules/dotenv/lib/main.js`)).config({path:l});let a=path.extname(o)===".ts",c=path.join(n,"node_modules/.bin/tsc");if(a&&!fs.existsSync(c))throw new Error(`Please install typescript in ${n}`);try{if(a)try{child_process.execSync(`${c} --outDir framework-list >&2`,{cwd:n});}catch(s){console.log(`TSC compilation failed. Please resolve issues in your project.
|
|
22
|
-
`),console.log(s),fs.rmSync(path.join(n,"framework-list"),{recursive:!0});}let f=a?path.join(n,"framework-list",o.replace(n,"").replace(".ts",".js")):o,{default:p}=await import(f);i=await x(["AsyncFunction","Function"].includes(p.constructor.name)?await p():z(p,e),e,r.verbose??!1);}finally{a&&fs.rmSync(path.join(n,"framework-list"),{recursive:!0});}}if(i===null)throw new Error(`Framework "${e}" is not supported.`);if(Array.isArray(r.includePaths)&&r.includePaths.length>0&&(i=r.includePaths.flatMap(l=>i.filter(a=>a.path.startsWith(l)))),Array.isArray(r.excludePaths)&&r.excludePaths.length>0&&(i=r.excludePaths.flatMap(l=>i.filter(a=>!a.path.startsWith(l)))),typeof r.group=="string"&&r.group!==""){console.log();let l=ee(i,c=>r.group==="path"?c.path.replace("/pages","").split("/")[1]:c.tags[0]??"unsorted"),a=0;l.forEach((c,f)=>{a>0&&console.log();let p=(oe__default.default.stdout.columns-16-f.length)/2,s=p>0?Array.from({length:p}).fill(" ").join(""):"";console.log(s+y__default.default.bold.underline(f)),k(c,r).forEach(m=>{console.log(m);}),a+=1;});}else console.log(),k(i,r).forEach(l=>{console.log(l);});console.log(`
|
|
23
|
-
Listed ${y__default.default.greenBright(String(i.length))} HTTP ${i.length===1?"route":"routes"}.
|
|
24
|
-
`);},io=Ge;
|
|
25
|
-
|
|
26
|
-
exports.a = io;
|
|
27
|
-
//# sourceMappingURL=out.js.map
|
|
28
|
-
//# sourceMappingURL=chunk-IWQGMV5V.js.map
|