xypriss-swagger 1.0.12 → 1.0.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/README.md +14 -5
- package/dist/cjs/configs/meta.js +1 -1
- package/dist/cjs/configs/meta.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server.js +1 -1
- package/dist/cjs/server.js.map +1 -1
- package/dist/esm/configs/meta.js +1 -1
- package/dist/esm/configs/meta.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server.js +1 -1
- package/dist/esm/server.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/package.json +6 -3
- package/src/configs/meta.ts +2 -2
- package/src/index.ts +2 -5
- package/src/server.ts +27 -2
- package/tsconfig.json +1 -1
package/README.md
CHANGED
|
@@ -16,17 +16,26 @@ This module is designed to be loaded natively by the XyPriss plugin manager. Ens
|
|
|
16
16
|
{
|
|
17
17
|
"$internal": {
|
|
18
18
|
"xypriss-swagger": {
|
|
19
|
+
"type": "plugin",
|
|
19
20
|
"__meta__": {
|
|
20
|
-
"path": "
|
|
21
|
+
"path": "ROOT://",
|
|
21
22
|
},
|
|
22
23
|
"__xfs__": {
|
|
23
|
-
"path": "CWD
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
"path": "CWD://",
|
|
25
|
+
},
|
|
26
|
+
"permissions": {
|
|
27
|
+
"allowedHooks": ["PLG.OPS.AUXILIARY_SERVER", "PLG.SECURITY.ACCESS_CONFIGS"],
|
|
28
|
+
"policy": "allow",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
27
32
|
}
|
|
33
|
+
|
|
28
34
|
```
|
|
29
35
|
|
|
36
|
+
> [!NOTE]
|
|
37
|
+
> For a deep dive into how XyPriss manages plugin isolation and filesystem access, see the [Workspace System Guide](../core/WORKSPACE_SYSTEM.md).
|
|
38
|
+
|
|
30
39
|
## Security & Permissions
|
|
31
40
|
|
|
32
41
|
In order to properly analyze your project's codebase and generate accurate Swagger documentation, this plugin requires the `CWD://` (Current Working Directory) context permission.
|
package/dist/cjs/configs/meta.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";const s=__sys__.__root__,_=__sys__.fs.readJsonSync(__sys__.fs.join(s,"package.json"));exports.meta=_,exports.toPascalCase=(s,_="-")=>s.split(_).map(s=>s[0].toUpperCase()+s.slice(1)).join(" ");
|
|
2
2
|
//# sourceMappingURL=meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sources":["../../../../../src/configs/meta.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"meta.js","sources":["../../../../../src/configs/meta.ts"],"sourcesContent":["import { ISwaggerJSONStructure } from \"../types\";\n\n// console.log(\"[PLUGIN:META] 🥸 la 'root' du plugin: \", __sys__?.__root__);\n\nconst root = __sys__.__root__;\n\nexport const meta = __sys__.fs.readJsonSync(\n __sys__.fs.join(root, \"package.json\"),\n) as ISwaggerJSONStructure;\n\nexport const toPascalCase = (str: string, spliter = \"-\") =>\n str\n .split(spliter)\n .map((n) => n[0].toUpperCase() + n.slice(1))\n .join(\" \");\n\n"],"names":["root","__sys__","__root__","meta","fs","readJsonSync","join","str","spliter","split","map","n","toUpperCase","slice"],"mappings":"aAIA,MAAMA,EAAOC,QAAQC,SAERC,EAAOF,QAAQG,GAAGC,aAC3BJ,QAAQG,GAAGE,KAAKN,EAAM,qDAGE,CAACO,EAAaC,EAAU,MAChDD,EACKE,MAAMD,GACNE,IAAKC,GAAMA,EAAE,GAAGC,cAAgBD,EAAEE,MAAM,IACxCP,KAAK"}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/index.ts"],"sourcesContent":["import { logger, Logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { SwaggerServer } from \"./server\";\nimport { SwaggerConfig } from \"./types\";\nimport { Plugin } from \"xypriss\";\n\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/index.ts"],"sourcesContent":["import { logger, Logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { SwaggerServer } from \"./server\";\nimport { SwaggerConfig } from \"./types\";\nimport { Plugin } from \"xypriss\";\n\nconst pluginName = toPascalCase(meta.name);\nexport function SwaggerPlugin(config: SwaggerConfig) {\n return Plugin.create(\n {\n name: meta.name,\n version: meta.version,\n description: meta.description,\n onRegister(_error) {\n const log = Logger.for(\"Bootstrap\");\n log.info(\"Starting swagger plugin...\");\n if (_error) {\n log.error(pluginName + \" plugin failed to start:\", _error);\n }\n },\n onServerStart(server) {\n logger.success(pluginName + \" plugin has started\");\n\n server.app.get(\"/swagger\", (_req: any, res: any) => {\n res.redirect(`http://localhost:${config.port}`);\n });\n },\n onAuxiliaryServerDeploy(ops, server) {\n SwaggerServer(config, ops, server);\n },\n }, \n __sys__.__root__,\n );\n}\n\n"],"names":["pluginName","toPascalCase","meta","name","config","Plugin","create","version","description","onRegister","_error","log","Logger","for","info","error","onServerStart","server","logger","success","app","get","_req","res","redirect","port","onAuxiliaryServerDeploy","ops","SwaggerServer","__sys__","__root__"],"mappings":"+HAMA,MAAMA,EAAaC,EAAAA,aAAaC,EAAAA,KAAKC,4BAC/B,SAAwBC,GAC1B,OAAOC,EAAAA,OAAOC,OACV,CACIH,KAAMD,EAAAA,KAAKC,KACXI,QAASL,EAAAA,KAAKK,QACdC,YAAaN,EAAAA,KAAKM,YAClB,UAAAC,CAAWC,GACP,MAAMC,EAAMC,EAAAA,OAAOC,IAAI,aACvBF,EAAIG,KAAK,8BACLJ,GACAC,EAAII,MAAMf,EAAa,2BAA4BU,EAE3D,EACA,aAAAM,CAAcC,GACVC,SAAOC,QAAQnB,EAAa,uBAE5BiB,EAAOG,IAAIC,IAAI,WAAY,CAACC,EAAWC,KACnCA,EAAIC,SAAS,oBAAoBpB,EAAOqB,SAEhD,EACA,uBAAAC,CAAwBC,EAAKV,GACzBW,EAAAA,cAAcxB,EAAQuB,EAC1B,GAEJE,QAAQC,SAEhB"}
|
package/dist/cjs/server.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("./configs/Logger.js"),
|
|
1
|
+
"use strict";var e=require("./configs/Logger.js"),o=require("./configs/meta.js"),t=require("./openapi.js"),r=require("./ui.js");exports.SwaggerServer=function(s,n,i){const a=s.path||"/docs",_=`${a}/swagger.json`;console.log("plugin root path: ",__sys__.__root__),console.log("😇 env de HELLO depuis le plugin: ",__sys__.__env__.get("HELLO")),console.log("🤧 env de COMMON_VAR du root du project (devrait être undefined): ",__sys__.__env__.get("COMMON_VAR")),console.log("🤠 env from root using __sys__ (devrait être strictement undefined vue que ici, sys.__root__ devrait conduire vers '/home/idevo/Documents/projects/XyPriss/mods/swagger') pourtant le .env de cette root n'a pas de name: ",__sys__.__env__.get("NAME"));const g=__sys__.plugins.get(o.meta.name);if(!g)throw new Error(o.toPascalCase(o.meta.name,"-")+" is not authorized in your xypriss.config.jsonc or xypriss.config.json. Please add ");console.log("🤠 env from root using workspaceSYS (devrait être undefined selon la config de l'utilisateur: en mode ROOT:// ça devrait conduire vers _sys__.root ('/home/idevo/Documents/projects/XyPriss/mods/swagger') et CWD:// devrait envoyer process.cwd() ('/home/idevo/Documents/projects/XyPriss' (vue qu'on excute la cmd ici))): ",g.__env__.get("NAME")),console.log("😝 root path: ",g.__root__),console.log("😅 listing directory path: ",g.fs.ls("."));const c=s.port||7070,d=n.createAuxiliaryServer({server:{port:c},security:{enabled:!1}});d.get(_,(o,r)=>{try{let e=[];n.getRouteRegistry&&(e=n.getRouteRegistry());const o=t.generateOpenAPI(e,s);r.json(o)}catch(o){e.logger.error("Error generating OpenAPI spec:",o),r.status(500).json({error:"Failed to generate documentation"})}}),d.get(a,(e,o)=>{const t=s.title||g?.vars?.__name__||"API Documentation",n=r.getSwaggerUIStream(_,t);o.setHeader("Content-Type","text/html"),n.pipe(o)}),d.redirect("/",a,301);const l=`http://localhost:${c}${a}`;d.start(()=>{e.logger.swagger(`${o.toPascalCase(o.meta.name)} Server isolated on port ${c}`),e.logger.http(`GET ${l}`)})};
|
|
2
2
|
//# sourceMappingURL=server.js.map
|
package/dist/cjs/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../../src/server.ts"],"sourcesContent":["import { logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { generateOpenAPI } from \"./openapi\";\nimport { SwaggerConfig } from \"./types\";\nimport { getSwaggerUIStream } from \"./ui\";\nimport { Plugin } from \"xypriss\";\n
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../../../../src/server.ts"],"sourcesContent":["import { logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { generateOpenAPI } from \"./openapi\";\nimport { SwaggerConfig } from \"./types\";\nimport { getSwaggerUIStream } from \"./ui\";\nimport { Plugin } from \"xypriss\";\n\ntype auxis = NonNullable<\n ReturnType<typeof Plugin.create>[\"onAuxiliaryServerDeploy\"]\n>;\nexport type OpsServerManager = Parameters<auxis>[\"0\"] & {\n getRouteRegistry?: () => any[];\n};\n\nexport type XyPrissServer = Parameters<auxis>[\"1\"];\n\nexport function SwaggerServer(\n config: SwaggerConfig,\n ops: OpsServerManager,\n _XServer: XyPrissServer,\n) {\n const docPath = config.path || \"/docs\";\n const specPath = `${docPath}/swagger.json`;\n console.log(\"plugin root path: \", __sys__.__root__);\n\n console.log(\n \"😇 env de HELLO depuis le plugin: \",\n __sys__.__env__.get(\"HELLO\"),\n );\n console.log(\n \"🤧 env de COMMON_VAR du root du project (devrait être undefined): \",\n __sys__.__env__.get(\"COMMON_VAR\"),\n );\n\n console.log(\n \"🤠 env from root using __sys__ (devrait être strictement undefined vue que ici, sys.__root__ devrait conduire vers '/home/idevo/Documents/projects/XyPriss/mods/swagger') pourtant le .env de cette root n'a pas de name: \",\n __sys__.__env__.get(\"NAME\"),\n );\n\n const workspaceSYS = __sys__.plugins.get(meta.name);\n\n // console.log(\"workspaceFS: \", workspaceFS);\n\n if (!workspaceSYS) {\n throw new Error(\n toPascalCase(meta.name, \"-\") +\n \" is not authorized in your xypriss.config.jsonc or xypriss.config.json. Please add \",\n );\n }\n console.log(\n \"🤠 env from root using workspaceSYS (devrait être undefined selon la config de l'utilisateur: en mode ROOT:// ça devrait conduire vers _sys__.root ('/home/idevo/Documents/projects/XyPriss/mods/swagger') et CWD:// devrait envoyer process.cwd() ('/home/idevo/Documents/projects/XyPriss' (vue qu'on excute la cmd ici))): \",\n workspaceSYS.__env__.get(\"NAME\"),\n );\n console.log(\"😝 root path: \", workspaceSYS.__root__);\n console.log(\"😅 listing directory path: \", workspaceSYS.fs.ls(\".\"));\n\n const port = config.port || 7070;\n const server = ops.createAuxiliaryServer({\n server: { port },\n security: {\n enabled: false,\n },\n });\n\n // Serve the raw OpenAPI JSON specification\n server.get(specPath, (_req, res) => {\n try {\n let registry: any[] = [];\n\n if (ops.getRouteRegistry) {\n registry = ops.getRouteRegistry();\n }\n\n const spec = generateOpenAPI(registry, config);\n res.json(spec);\n } catch (error) {\n logger.error(\"Error generating OpenAPI spec:\", error);\n res.status(500).json({\n error: \"Failed to generate documentation\",\n });\n }\n });\n\n // Serve the Swagger HTML Viewer\n server.get(docPath, (_req, res) => {\n const title =\n config.title || workspaceSYS?.vars?.__name__ || \"API Documentation\";\n const stream = getSwaggerUIStream(specPath, title);\n\n res.setHeader(\"Content-Type\", \"text/html\");\n stream.pipe(res);\n });\n\n // Redirect root path of the sub-server to docPath\n server.redirect(\"/\", docPath, 301);\n\n // Boot the auxiliary server immediately\n const url = `http://localhost:${port}${docPath}`;\n server.start(() => {\n logger.swagger(\n `${toPascalCase(meta.name)} Server isolated on port ${port}`,\n );\n logger.http(`GET ${url}`);\n });\n}\n"],"names":["config","ops","_XServer","docPath","path","specPath","console","log","__sys__","__root__","__env__","get","workspaceSYS","plugins","meta","name","Error","toPascalCase","fs","ls","port","server","createAuxiliaryServer","security","enabled","_req","res","registry","getRouteRegistry","spec","generateOpenAPI","json","error","logger","status","title","vars","__name__","stream","getSwaggerUIStream","setHeader","pipe","redirect","url","start","swagger","http"],"mappings":"+JAiBIA,EACAC,EACAC,GAEA,MAAMC,EAAUH,EAAOI,MAAQ,QACzBC,EAAW,GAAGF,iBACpBG,QAAQC,IAAI,qBAAsBC,QAAQC,UAE1CH,QAAQC,IACJ,qCACAC,QAAQE,QAAQC,IAAI,UAExBL,QAAQC,IACJ,qEACAC,QAAQE,QAAQC,IAAI,eAGxBL,QAAQC,IACJ,6NACAC,QAAQE,QAAQC,IAAI,SAGxB,MAAMC,EAAeJ,QAAQK,QAAQF,IAAIG,EAAAA,KAAKC,MAI9C,IAAKH,EACD,MAAM,IAAII,MACNC,EAAAA,aAAaH,EAAAA,KAAKC,KAAM,KACpB,uFAGZT,QAAQC,IACJ,iUACAK,EAAaF,QAAQC,IAAI,SAE7BL,QAAQC,IAAI,iBAAkBK,EAAaH,UAC3CH,QAAQC,IAAI,8BAA+BK,EAAaM,GAAGC,GAAG,MAE9D,MAAMC,EAAOpB,EAAOoB,MAAQ,KACtBC,EAASpB,EAAIqB,sBAAsB,CACrCD,OAAQ,CAAED,QACVG,SAAU,CACNC,SAAS,KAKjBH,EAAOV,IAAIN,EAAU,CAACoB,EAAMC,KACxB,IACI,IAAIC,EAAkB,GAElB1B,EAAI2B,mBACJD,EAAW1B,EAAI2B,oBAGnB,MAAMC,EAAOC,EAAAA,gBAAgBH,EAAU3B,GACvC0B,EAAIK,KAAKF,EACb,CAAE,MAAOG,GACLC,SAAOD,MAAM,iCAAkCA,GAC/CN,EAAIQ,OAAO,KAAKH,KAAK,CACjBC,MAAO,oCAEf,IAIJX,EAAOV,IAAIR,EAAS,CAACsB,EAAMC,KACvB,MAAMS,EACFnC,EAAOmC,OAASvB,GAAcwB,MAAMC,UAAY,oBAC9CC,EAASC,EAAAA,mBAAmBlC,EAAU8B,GAE5CT,EAAIc,UAAU,eAAgB,aAC9BF,EAAOG,KAAKf,KAIhBL,EAAOqB,SAAS,IAAKvC,EAAS,KAG9B,MAAMwC,EAAM,oBAAoBvB,IAAOjB,IACvCkB,EAAOuB,MAAM,KACTX,SAAOY,QACH,GAAG5B,eAAaH,EAAAA,KAAKC,iCAAiCK,KAE1Da,EAAAA,OAAOa,KAAK,OAAOH,MAE3B"}
|
package/dist/esm/configs/meta.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
const _=__sys__.__root__,s=__sys__.fs.readJsonSync(__sys__.fs.join(_,"package.json")),o=(_,s="-")=>_.split(s).map(_=>_[0].toUpperCase()+_.slice(1)).join(" ");export{s as meta,o as toPascalCase};
|
|
2
2
|
//# sourceMappingURL=meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sources":["../../../../../src/configs/meta.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"meta.js","sources":["../../../../../src/configs/meta.ts"],"sourcesContent":["import { ISwaggerJSONStructure } from \"../types\";\n\n// console.log(\"[PLUGIN:META] 🥸 la 'root' du plugin: \", __sys__?.__root__);\n\nconst root = __sys__.__root__;\n\nexport const meta = __sys__.fs.readJsonSync(\n __sys__.fs.join(root, \"package.json\"),\n) as ISwaggerJSONStructure;\n\nexport const toPascalCase = (str: string, spliter = \"-\") =>\n str\n .split(spliter)\n .map((n) => n[0].toUpperCase() + n.slice(1))\n .join(\" \");\n\n"],"names":["root","__sys__","__root__","meta","fs","readJsonSync","join","toPascalCase","str","spliter","split","map","n","toUpperCase","slice"],"mappings":"AAIA,MAAMA,EAAOC,QAAQC,SAERC,EAAOF,QAAQG,GAAGC,aAC3BJ,QAAQG,GAAGE,KAAKN,EAAM,iBAGbO,EAAe,CAACC,EAAaC,EAAU,MAChDD,EACKE,MAAMD,GACNE,IAAKC,GAAMA,EAAE,GAAGC,cAAgBD,EAAEE,MAAM,IACxCR,KAAK"}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/index.ts"],"sourcesContent":["import { logger, Logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { SwaggerServer } from \"./server\";\nimport { SwaggerConfig } from \"./types\";\nimport { Plugin } from \"xypriss\";\n\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/index.ts"],"sourcesContent":["import { logger, Logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { SwaggerServer } from \"./server\";\nimport { SwaggerConfig } from \"./types\";\nimport { Plugin } from \"xypriss\";\n\nconst pluginName = toPascalCase(meta.name);\nexport function SwaggerPlugin(config: SwaggerConfig) {\n return Plugin.create(\n {\n name: meta.name,\n version: meta.version,\n description: meta.description,\n onRegister(_error) {\n const log = Logger.for(\"Bootstrap\");\n log.info(\"Starting swagger plugin...\");\n if (_error) {\n log.error(pluginName + \" plugin failed to start:\", _error);\n }\n },\n onServerStart(server) {\n logger.success(pluginName + \" plugin has started\");\n\n server.app.get(\"/swagger\", (_req: any, res: any) => {\n res.redirect(`http://localhost:${config.port}`);\n });\n },\n onAuxiliaryServerDeploy(ops, server) {\n SwaggerServer(config, ops, server);\n },\n }, \n __sys__.__root__,\n );\n}\n\n"],"names":["pluginName","toPascalCase","meta","name","SwaggerPlugin","config","Plugin","create","version","description","onRegister","_error","log","Logger","for","info","error","onServerStart","server","logger","success","app","get","_req","res","redirect","port","onAuxiliaryServerDeploy","ops","SwaggerServer","__sys__","__root__"],"mappings":"iMAMA,MAAMA,EAAaC,EAAaC,EAAKC,MAC/B,SAAUC,EAAcC,GAC1B,OAAOC,EAAOC,OACV,CACIJ,KAAMD,EAAKC,KACXK,QAASN,EAAKM,QACdC,YAAaP,EAAKO,YAClB,UAAAC,CAAWC,GACP,MAAMC,EAAMC,EAAOC,IAAI,aACvBF,EAAIG,KAAK,8BACLJ,GACAC,EAAII,MAAMhB,EAAa,2BAA4BW,EAE3D,EACA,aAAAM,CAAcC,GACVC,EAAOC,QAAQpB,EAAa,uBAE5BkB,EAAOG,IAAIC,IAAI,WAAY,CAACC,EAAWC,KACnCA,EAAIC,SAAS,oBAAoBpB,EAAOqB,SAEhD,EACA,uBAAAC,CAAwBC,EAAKV,GACzBW,EAAcxB,EAAQuB,EAC1B,GAEJE,QAAQC,SAEhB"}
|
package/dist/esm/server.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{logger as
|
|
1
|
+
import{logger as e}from"./configs/Logger.js";import{meta as o,toPascalCase as t}from"./configs/meta.js";import{generateOpenAPI as r}from"./openapi.js";import{getSwaggerUIStream as s}from"./ui.js";function n(n,i,_){const c=n.path||"/docs",a=`${c}/swagger.json`;console.log("plugin root path: ",__sys__.__root__),console.log("😇 env de HELLO depuis le plugin: ",__sys__.__env__.get("HELLO")),console.log("🤧 env de COMMON_VAR du root du project (devrait être undefined): ",__sys__.__env__.get("COMMON_VAR")),console.log("🤠 env from root using __sys__ (devrait être strictement undefined vue que ici, sys.__root__ devrait conduire vers '/home/idevo/Documents/projects/XyPriss/mods/swagger') pourtant le .env de cette root n'a pas de name: ",__sys__.__env__.get("NAME"));const g=__sys__.plugins.get(o.name);if(!g)throw new Error(t(o.name,"-")+" is not authorized in your xypriss.config.jsonc or xypriss.config.json. Please add ");console.log("🤠 env from root using workspaceSYS (devrait être undefined selon la config de l'utilisateur: en mode ROOT:// ça devrait conduire vers _sys__.root ('/home/idevo/Documents/projects/XyPriss/mods/swagger') et CWD:// devrait envoyer process.cwd() ('/home/idevo/Documents/projects/XyPriss' (vue qu'on excute la cmd ici))): ",g.__env__.get("NAME")),console.log("😝 root path: ",g.__root__),console.log("😅 listing directory path: ",g.fs.ls("."));const d=n.port||7070,l=i.createAuxiliaryServer({server:{port:d},security:{enabled:!1}});l.get(a,(o,t)=>{try{let e=[];i.getRouteRegistry&&(e=i.getRouteRegistry());const o=r(e,n);t.json(o)}catch(o){e.error("Error generating OpenAPI spec:",o),t.status(500).json({error:"Failed to generate documentation"})}}),l.get(c,(e,o)=>{const t=n.title||g?.vars?.__name__||"API Documentation",r=s(a,t);o.setHeader("Content-Type","text/html"),r.pipe(o)}),l.redirect("/",c,301);const p=`http://localhost:${d}${c}`;l.start(()=>{e.swagger(`${t(o.name)} Server isolated on port ${d}`),e.http(`GET ${p}`)})}export{n as SwaggerServer};
|
|
2
2
|
//# sourceMappingURL=server.js.map
|
package/dist/esm/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../../src/server.ts"],"sourcesContent":["import { logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { generateOpenAPI } from \"./openapi\";\nimport { SwaggerConfig } from \"./types\";\nimport { getSwaggerUIStream } from \"./ui\";\nimport { Plugin } from \"xypriss\";\n
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../../../../src/server.ts"],"sourcesContent":["import { logger } from \"./configs/Logger\";\nimport { meta, toPascalCase } from \"./configs/meta\";\nimport { generateOpenAPI } from \"./openapi\";\nimport { SwaggerConfig } from \"./types\";\nimport { getSwaggerUIStream } from \"./ui\";\nimport { Plugin } from \"xypriss\";\n\ntype auxis = NonNullable<\n ReturnType<typeof Plugin.create>[\"onAuxiliaryServerDeploy\"]\n>;\nexport type OpsServerManager = Parameters<auxis>[\"0\"] & {\n getRouteRegistry?: () => any[];\n};\n\nexport type XyPrissServer = Parameters<auxis>[\"1\"];\n\nexport function SwaggerServer(\n config: SwaggerConfig,\n ops: OpsServerManager,\n _XServer: XyPrissServer,\n) {\n const docPath = config.path || \"/docs\";\n const specPath = `${docPath}/swagger.json`;\n console.log(\"plugin root path: \", __sys__.__root__);\n\n console.log(\n \"😇 env de HELLO depuis le plugin: \",\n __sys__.__env__.get(\"HELLO\"),\n );\n console.log(\n \"🤧 env de COMMON_VAR du root du project (devrait être undefined): \",\n __sys__.__env__.get(\"COMMON_VAR\"),\n );\n\n console.log(\n \"🤠 env from root using __sys__ (devrait être strictement undefined vue que ici, sys.__root__ devrait conduire vers '/home/idevo/Documents/projects/XyPriss/mods/swagger') pourtant le .env de cette root n'a pas de name: \",\n __sys__.__env__.get(\"NAME\"),\n );\n\n const workspaceSYS = __sys__.plugins.get(meta.name);\n\n // console.log(\"workspaceFS: \", workspaceFS);\n\n if (!workspaceSYS) {\n throw new Error(\n toPascalCase(meta.name, \"-\") +\n \" is not authorized in your xypriss.config.jsonc or xypriss.config.json. Please add \",\n );\n }\n console.log(\n \"🤠 env from root using workspaceSYS (devrait être undefined selon la config de l'utilisateur: en mode ROOT:// ça devrait conduire vers _sys__.root ('/home/idevo/Documents/projects/XyPriss/mods/swagger') et CWD:// devrait envoyer process.cwd() ('/home/idevo/Documents/projects/XyPriss' (vue qu'on excute la cmd ici))): \",\n workspaceSYS.__env__.get(\"NAME\"),\n );\n console.log(\"😝 root path: \", workspaceSYS.__root__);\n console.log(\"😅 listing directory path: \", workspaceSYS.fs.ls(\".\"));\n\n const port = config.port || 7070;\n const server = ops.createAuxiliaryServer({\n server: { port },\n security: {\n enabled: false,\n },\n });\n\n // Serve the raw OpenAPI JSON specification\n server.get(specPath, (_req, res) => {\n try {\n let registry: any[] = [];\n\n if (ops.getRouteRegistry) {\n registry = ops.getRouteRegistry();\n }\n\n const spec = generateOpenAPI(registry, config);\n res.json(spec);\n } catch (error) {\n logger.error(\"Error generating OpenAPI spec:\", error);\n res.status(500).json({\n error: \"Failed to generate documentation\",\n });\n }\n });\n\n // Serve the Swagger HTML Viewer\n server.get(docPath, (_req, res) => {\n const title =\n config.title || workspaceSYS?.vars?.__name__ || \"API Documentation\";\n const stream = getSwaggerUIStream(specPath, title);\n\n res.setHeader(\"Content-Type\", \"text/html\");\n stream.pipe(res);\n });\n\n // Redirect root path of the sub-server to docPath\n server.redirect(\"/\", docPath, 301);\n\n // Boot the auxiliary server immediately\n const url = `http://localhost:${port}${docPath}`;\n server.start(() => {\n logger.swagger(\n `${toPascalCase(meta.name)} Server isolated on port ${port}`,\n );\n logger.http(`GET ${url}`);\n });\n}\n"],"names":["SwaggerServer","config","ops","_XServer","docPath","path","specPath","console","log","__sys__","__root__","__env__","get","workspaceSYS","plugins","meta","name","Error","toPascalCase","fs","ls","port","server","createAuxiliaryServer","security","enabled","_req","res","registry","getRouteRegistry","spec","generateOpenAPI","json","error","logger","status","title","vars","__name__","stream","getSwaggerUIStream","setHeader","pipe","redirect","url","start","swagger","http"],"mappings":"6MAgBgBA,EACZC,EACAC,EACAC,GAEA,MAAMC,EAAUH,EAAOI,MAAQ,QACzBC,EAAW,GAAGF,iBACpBG,QAAQC,IAAI,qBAAsBC,QAAQC,UAE1CH,QAAQC,IACJ,qCACAC,QAAQE,QAAQC,IAAI,UAExBL,QAAQC,IACJ,qEACAC,QAAQE,QAAQC,IAAI,eAGxBL,QAAQC,IACJ,6NACAC,QAAQE,QAAQC,IAAI,SAGxB,MAAMC,EAAeJ,QAAQK,QAAQF,IAAIG,EAAKC,MAI9C,IAAKH,EACD,MAAM,IAAII,MACNC,EAAaH,EAAKC,KAAM,KACpB,uFAGZT,QAAQC,IACJ,iUACAK,EAAaF,QAAQC,IAAI,SAE7BL,QAAQC,IAAI,iBAAkBK,EAAaH,UAC3CH,QAAQC,IAAI,8BAA+BK,EAAaM,GAAGC,GAAG,MAE9D,MAAMC,EAAOpB,EAAOoB,MAAQ,KACtBC,EAASpB,EAAIqB,sBAAsB,CACrCD,OAAQ,CAAED,QACVG,SAAU,CACNC,SAAS,KAKjBH,EAAOV,IAAIN,EAAU,CAACoB,EAAMC,KACxB,IACI,IAAIC,EAAkB,GAElB1B,EAAI2B,mBACJD,EAAW1B,EAAI2B,oBAGnB,MAAMC,EAAOC,EAAgBH,EAAU3B,GACvC0B,EAAIK,KAAKF,EACb,CAAE,MAAOG,GACLC,EAAOD,MAAM,iCAAkCA,GAC/CN,EAAIQ,OAAO,KAAKH,KAAK,CACjBC,MAAO,oCAEf,IAIJX,EAAOV,IAAIR,EAAS,CAACsB,EAAMC,KACvB,MAAMS,EACFnC,EAAOmC,OAASvB,GAAcwB,MAAMC,UAAY,oBAC9CC,EAASC,EAAmBlC,EAAU8B,GAE5CT,EAAIc,UAAU,eAAgB,aAC9BF,EAAOG,KAAKf,KAIhBL,EAAOqB,SAAS,IAAKvC,EAAS,KAG9B,MAAMwC,EAAM,oBAAoBvB,IAAOjB,IACvCkB,EAAOuB,MAAM,KACTX,EAAOY,QACH,GAAG5B,EAAaH,EAAKC,iCAAiCK,KAE1Da,EAAOa,KAAK,OAAOH,MAE3B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as xypriss from 'xypriss';
|
|
2
|
+
|
|
1
3
|
interface SwaggerConfig {
|
|
2
4
|
/**
|
|
3
5
|
* The path where the UI will be served.
|
|
@@ -14,6 +16,6 @@ interface SwaggerConfig {
|
|
|
14
16
|
port?: number;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
declare function SwaggerPlugin(config: SwaggerConfig):
|
|
19
|
+
declare function SwaggerPlugin(config: SwaggerConfig): xypriss.XyPrissPlugin;
|
|
18
20
|
|
|
19
21
|
export { SwaggerPlugin };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xypriss-swagger",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"description": "Auto-documentation plugin for XyPriss Router V2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -20,8 +20,9 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"nehoid": "^2.1.4",
|
|
23
|
-
"xypriss": "
|
|
24
|
-
"xypriss
|
|
23
|
+
"xypriss-security": "^2.1.13",
|
|
24
|
+
"xypriss": "9.6.80"
|
|
25
|
+
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
28
|
"@rollup/plugin-commonjs": "^29.0.2",
|
|
@@ -34,5 +35,7 @@
|
|
|
34
35
|
"rollup-plugin-dts": "^6.4.1",
|
|
35
36
|
"tslib": "^2.8.1",
|
|
36
37
|
"typescript": "^5.0.0"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
37
40
|
}
|
|
38
41
|
}
|
package/src/configs/meta.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import "xypriss";
|
|
2
1
|
import { ISwaggerJSONStructure } from "../types";
|
|
3
2
|
|
|
4
3
|
// console.log("[PLUGIN:META] 🥸 la 'root' du plugin: ", __sys__?.__root__);
|
|
5
4
|
|
|
6
|
-
const root = __sys__
|
|
5
|
+
const root = __sys__.__root__;
|
|
7
6
|
|
|
8
7
|
export const meta = __sys__.fs.readJsonSync(
|
|
9
8
|
__sys__.fs.join(root, "package.json"),
|
|
@@ -14,3 +13,4 @@ export const toPascalCase = (str: string, spliter = "-") =>
|
|
|
14
13
|
.split(spliter)
|
|
15
14
|
.map((n) => n[0].toUpperCase() + n.slice(1))
|
|
16
15
|
.join(" ");
|
|
16
|
+
|
package/src/index.ts
CHANGED
|
@@ -4,16 +4,13 @@ import { SwaggerServer } from "./server";
|
|
|
4
4
|
import { SwaggerConfig } from "./types";
|
|
5
5
|
import { Plugin } from "xypriss";
|
|
6
6
|
|
|
7
|
-
// console.log("[swagger] internal plugin sys", __sys__.__root__);
|
|
8
|
-
|
|
9
7
|
const pluginName = toPascalCase(meta.name);
|
|
10
|
-
export function SwaggerPlugin(config: SwaggerConfig)
|
|
8
|
+
export function SwaggerPlugin(config: SwaggerConfig) {
|
|
11
9
|
return Plugin.create(
|
|
12
10
|
{
|
|
13
11
|
name: meta.name,
|
|
14
12
|
version: meta.version,
|
|
15
13
|
description: meta.description,
|
|
16
|
-
|
|
17
14
|
onRegister(_error) {
|
|
18
15
|
const log = Logger.for("Bootstrap");
|
|
19
16
|
log.info("Starting swagger plugin...");
|
|
@@ -31,7 +28,7 @@ export function SwaggerPlugin(config: SwaggerConfig): any {
|
|
|
31
28
|
onAuxiliaryServerDeploy(ops, server) {
|
|
32
29
|
SwaggerServer(config, ops, server);
|
|
33
30
|
},
|
|
34
|
-
},
|
|
31
|
+
},
|
|
35
32
|
__sys__.__root__,
|
|
36
33
|
);
|
|
37
34
|
}
|
package/src/server.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { generateOpenAPI } from "./openapi";
|
|
|
4
4
|
import { SwaggerConfig } from "./types";
|
|
5
5
|
import { getSwaggerUIStream } from "./ui";
|
|
6
6
|
import { Plugin } from "xypriss";
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
type auxis = NonNullable<
|
|
9
9
|
ReturnType<typeof Plugin.create>["onAuxiliaryServerDeploy"]
|
|
10
10
|
>;
|
|
@@ -21,14 +21,39 @@ export function SwaggerServer(
|
|
|
21
21
|
) {
|
|
22
22
|
const docPath = config.path || "/docs";
|
|
23
23
|
const specPath = `${docPath}/swagger.json`;
|
|
24
|
+
console.log("plugin root path: ", __sys__.__root__);
|
|
25
|
+
|
|
26
|
+
console.log(
|
|
27
|
+
"😇 env de HELLO depuis le plugin: ",
|
|
28
|
+
__sys__.__env__.get("HELLO"),
|
|
29
|
+
);
|
|
30
|
+
console.log(
|
|
31
|
+
"🤧 env de COMMON_VAR du root du project (devrait être undefined): ",
|
|
32
|
+
__sys__.__env__.get("COMMON_VAR"),
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
console.log(
|
|
36
|
+
"🤠 env from root using __sys__ (devrait être strictement undefined vue que ici, sys.__root__ devrait conduire vers '/home/idevo/Documents/projects/XyPriss/mods/swagger') pourtant le .env de cette root n'a pas de name: ",
|
|
37
|
+
__sys__.__env__.get("NAME"),
|
|
38
|
+
);
|
|
39
|
+
|
|
24
40
|
const workspaceSYS = __sys__.plugins.get(meta.name);
|
|
25
41
|
|
|
42
|
+
// console.log("workspaceFS: ", workspaceFS);
|
|
43
|
+
|
|
26
44
|
if (!workspaceSYS) {
|
|
27
45
|
throw new Error(
|
|
28
46
|
toPascalCase(meta.name, "-") +
|
|
29
47
|
" is not authorized in your xypriss.config.jsonc or xypriss.config.json. Please add ",
|
|
30
48
|
);
|
|
31
49
|
}
|
|
50
|
+
console.log(
|
|
51
|
+
"🤠 env from root using workspaceSYS (devrait être undefined selon la config de l'utilisateur: en mode ROOT:// ça devrait conduire vers _sys__.root ('/home/idevo/Documents/projects/XyPriss/mods/swagger') et CWD:// devrait envoyer process.cwd() ('/home/idevo/Documents/projects/XyPriss' (vue qu'on excute la cmd ici))): ",
|
|
52
|
+
workspaceSYS.__env__.get("NAME"),
|
|
53
|
+
);
|
|
54
|
+
console.log("😝 root path: ", workspaceSYS.__root__);
|
|
55
|
+
console.log("😅 listing directory path: ", workspaceSYS.fs.ls("."));
|
|
56
|
+
|
|
32
57
|
const port = config.port || 7070;
|
|
33
58
|
const server = ops.createAuxiliaryServer({
|
|
34
59
|
server: { port },
|
|
@@ -77,4 +102,4 @@ export function SwaggerServer(
|
|
|
77
102
|
);
|
|
78
103
|
logger.http(`GET ${url}`);
|
|
79
104
|
});
|
|
80
|
-
}
|
|
105
|
+
}
|
package/tsconfig.json
CHANGED