@lark-apaas/coding-preset-vite-react 1.0.13-alpha.2 → 1.0.13-alpha.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/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/plugins/server-log.d.ts +17 -7
- package/lib/plugins/server-log.d.ts.map +1 -1
- package/lib/plugins/server-log.js +27 -7
- package/lib/plugins/server-log.js.map +1 -1
- package/lib/server-log/dev-logs/api-list-handler.d.ts.map +1 -1
- package/lib/server-log/dev-logs/api-list-handler.js +7 -9
- package/lib/server-log/dev-logs/api-list-handler.js.map +1 -1
- package/lib/server-log/openapi/controller.d.ts +7 -0
- package/lib/server-log/openapi/controller.d.ts.map +1 -0
- package/lib/server-log/openapi/controller.js +60 -0
- package/lib/server-log/openapi/controller.js.map +1 -0
- package/lib/server-log/openapi/index.d.ts +10 -0
- package/lib/server-log/openapi/index.d.ts.map +1 -0
- package/lib/server-log/openapi/index.js +48 -0
- package/lib/server-log/openapi/index.js.map +1 -0
- package/lib/server-log/openapi/router.d.ts +20 -0
- package/lib/server-log/openapi/router.d.ts.map +1 -0
- package/lib/server-log/openapi/router.js +26 -0
- package/lib/server-log/openapi/router.js.map +1 -0
- package/lib/server-log/openapi/services.d.ts +15 -0
- package/lib/server-log/openapi/services.d.ts.map +1 -0
- package/lib/server-log/openapi/services.js +276 -0
- package/lib/server-log/openapi/services.js.map +1 -0
- package/lib/server-log/openapi/spec-controller.d.ts +4 -0
- package/lib/server-log/openapi/spec-controller.d.ts.map +1 -0
- package/lib/server-log/openapi/spec-controller.js +136 -0
- package/lib/server-log/openapi/spec-controller.js.map +1 -0
- package/lib/server-log/openapi/types.d.ts +56 -0
- package/lib/server-log/openapi/types.d.ts.map +1 -0
- package/lib/server-log/openapi/types.js +3 -0
- package/lib/server-log/openapi/types.js.map +1 -0
- package/lib/server-log/openapi/utils.d.ts +18 -0
- package/lib/server-log/openapi/utils.d.ts.map +1 -0
- package/lib/server-log/openapi/utils.js +128 -0
- package/lib/server-log/openapi/utils.js.map +1 -0
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -318,7 +318,7 @@ function defineConfig(overrides = {}, options = {}) {
|
|
|
318
318
|
isFullstack && (0, basename_1.basenamePlugin)({ envBasePath: clientBasePath }),
|
|
319
319
|
// 挂 devtool-kits 的 dev-logs middleware:提供 /server-logs SSE 等 endpoints
|
|
320
320
|
// 给妙搭外壳实时读 NestJS server.log;require() 加载,包未装时自动跳过
|
|
321
|
-
isFullstack && (0, server_log_1.serverLogPlugin)({ basePath: clientBasePath }),
|
|
321
|
+
isFullstack && (0, server_log_1.serverLogPlugin)({ basePath: clientBasePath, rootDir }),
|
|
322
322
|
].filter(Boolean),
|
|
323
323
|
resolve: {
|
|
324
324
|
// Vite 8 原生 tsconfig paths 解析
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGA,oCA4XC;AAreD,4CAA8B;AAC9B,gDAAkC;AAElC,+BAAqF;AACrF,wEAAyC;AACzC,6DAA4C;AAE5C,6CAAgD;AAChD,uDAAyD;AACzD,2DAA6D;AAC7D,yDAAkE;AAClE,2DAA6D;AAC7D,qDAAuD;AACvD,uDAAyD;AACzD,6CAA0D;AAC1D,yDAA2D;AAC3D,yDAA2D;AAC3D,+CAAiD;AACjD,yDAA2D;AAC3D,iDAAoD;AACpD,mEAAoE;AACpE,+CAAkD;AAClD,iDAAmD;AAEnD,mDAAmD;AACnD,mDAAqD;AACrD,uDAAyD;AACzD,iDAAoD;AACpD,qDAAuD;AAEvD,qEAGqC;AACrC,yDAAuE;AAEvE;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,OAAe,EAAE,GAAW;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACxF,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAgB;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,mCAAmC,CAAsC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAsCD,SAAgB,YAAY,CAC1B,YAAwB,EAAE,EAC1B,UAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAG,IAAA,uCAAiB,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACvE,yEAAyE;IACzE,+DAA+D;IAC/D,kEAAkE;IAClE,yBAAyB;IACzB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC;IACxD,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IACvD,yEAAyE;IACzE,uEAAuE;IACvE,+DAA+D;IAC/D,MAAM,aAAa,GAAG,IAAA,2DAAqC,EAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEzF,0DAA0D;IAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEjD,4CAA4C;IAC5C,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,eAAe;QAC3B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;QACrD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,eAAe,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;IAE1E,4DAA4D;IAC5D,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,KAAK,CAAC;IAEV,wDAAwD;IACxD,mEAAmE;IACnE,kEAAkE;IAClE,uFAAuF;IACvF,wCAAwC;IACxC,MAAM,SAAS,GAAG;QAChB,2CAA2C;QAC3C,MAAM,EAAE,YAAY;QACpB,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;QAC5E,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACtD,8BAA8B,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QAC9D,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QACjD,qEAAqE;QACrE,yCAAyC,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;YAChF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACzD,CAAC,CAAC,WAAW;QACf,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC1D,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAChD,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QACjD,6BAA6B,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YACxD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC7C,CAAC,CAAC,WAAW;QACf,kCAAkC,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAClE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAClD,CAAC,CAAC,WAAW;QACf,sCAAsC;QACtC,wDAAwD;QACxD,+BAA+B,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC5D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC/C,CAAC,CAAC,WAAW;QACf,wCAAwC;QACxC,yCAAyC,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;YAChF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACzD,CAAC,CAAC,WAAW;KAChB,CAAC;IAEF,iEAAiE;IACjE,iDAAiD;IACjD,sEAAsE;IACtE,sDAAsD;IACtD,oEAAoE;IACpE,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE;YACP,YAAY;YACZ,OAAO;YACP,WAAW;YACX,mBAAmB;YACnB,uBAAuB;YACvB,6DAA6D;YAC7D,kBAAkB;YAClB,cAAc;YACd,UAAU;YACV,eAAe;YACf,SAAS;YACT,mBAAmB;YACnB,QAAQ;YACR,MAAM;YACN,0BAA0B;YAC1B,gBAAgB;YAChB,UAAU;YACV,KAAK;YACL,iBAAiB;YACjB,qBAAqB;YACrB,gEAAgE;YAChE,2BAA2B;YAC3B,8BAA8B;YAC9B,8BAA8B;YAC9B,wBAAwB;YACxB,0BAA0B;YAC1B,6BAA6B;YAC7B,8BAA8B;YAC9B,wBAAwB;YACxB,+BAA+B;YAC/B,4BAA4B;YAC5B,uBAAuB;YACvB,yBAAyB;YACzB,iCAAiC;YACjC,yBAAyB;YACzB,0BAA0B;YAC1B,6BAA6B;YAC7B,6BAA6B;YAC7B,wBAAwB;YACxB,2BAA2B;YAC3B,wBAAwB;YACxB,sBAAsB;YACtB,wBAAwB;YACxB,sBAAsB;YACtB,wBAAwB;YACxB,8BAA8B;YAC9B,yBAAyB;YACzB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D;QACD,4DAA4D;QAC5D,uDAAuD;QACvD,0EAA0E;QAC1E,iDAAiD;QACjD,mEAAmE;QACnE,mEAAmE;QACnE,eAAe,EAAE;YACf,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SACjC;QACD,8DAA8D;QAC9D,wEAAwE;QACxE,4DAA4D;QAC5D,oEAAoE;QACpE,2DAA2D;QAC3D,iEAAiE;QACjE,qDAAqD;QACrD,qDAAqD;QACrD,eAAe;QACf,EAAE;QACF,8DAA8D;QAC9D,uCAAuC;QACvC,0DAA0D;QAC1D,8DAA8D;QAC9D,kCAAkC;QAClC,+DAA+D;QAC/D,+CAA+C;QAC/C,6DAA6D;QAC7D,oBAAoB;QACpB,sBAAsB,EAAE,IAAI;KAC7B,CAAC;IAEF,MAAM,UAAU,GAAe;QAC7B,IAAI,EAAE,OAAO;QACb,IAAI;QAEJ,OAAO,EAAE;YACP,2CAA2C;YAC3C,KAAK,IAAI,IAAA,yCAAqB,GAAE;YAEhC,2EAA2E;YAC3E,yDAAyD;YACzD,IAAA,uCAAwB,GAAE;YAE1B,oCAAoC;YACpC,KAAK,IAAI,IAAA,kCAAkB,EAAC,EAAE,cAAc,EAAE,CAAC;YAE/C,wEAAwE;YACxE,IAAA,kCAAkB,EAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;YAE/C,mEAAmE;YACnE,6CAA6C;YAC7C,GAAG,gBAAgB,CAAC,eAAe,CAAC;YAEpC,IAAA,sBAAK,GAAE;YACP,IAAA,cAAW,GAAE;YAEb,4EAA4E;YAC5E,IAAA,gCAAiB,GAAE;YAEnB,kDAAkD;YAClD,IAAA,qBAAY,EAAC;gBACX,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;oBACjE,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,eAAe;gBACnB,aAAa,EAAE,cAAc;gBAC7B,2CAA2C;gBAC3C,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnC,CAAC;YAEF,2EAA2E;YAC3E,yDAAyD;YACzD,0DAA0D;YAC1D,IAAA,sBAAY,GAAE;YAEd,8CAA8C;YAC9C,yCAAyC;YACzC,iFAAiF;YACjF,IAAA,uBAAa,EAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;YACtC,IAAA,gCAAiB,EAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAEvD,iCAAiC;YACjC,CAAC,KAAK,IAAI,IAAA,yBAAc,GAAE;YAE1B,oCAAoC;YACpC,IAAA,8BAAgB,GAAE;YAElB,iBAAiB;YACjB,KAAK,IAAI,IAAA,4BAAe,GAAE;YAC1B,KAAK,IAAI,IAAA,8BAAgB,EAAC,EAAE,cAAc,EAAE,CAAC;YAC7C,KAAK,IAAI,IAAA,+BAAsB,GAAE;YACjC,oDAAoD;YACpD,KAAK,IAAI,IAAA,wBAAa,EAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;YAEpD,wDAAwD;YACxD,IAAA,gCAAiB,GAAE;YAEnB,kEAAkE;YAClE,yDAAyD;YACzD,yDAAyD;YACzD,WAAW;gBACT,IAAA,0BAAc,EAAC;oBACb,UAAU,EAAE,mBAAmB;oBAC/B,cAAc;oBACd,KAAK;iBACN,CAAC;YACJ,wEAAwE;YACxE,WAAW,IAAI,IAAA,8BAAgB,EAAC;gBAC9B,KAAK;gBACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;aAC7C,CAAC;YACF,iDAAiD;YACjD,WAAW,IAAI,IAAA,yBAAc,EAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;YAC9D,uEAAuE;YACvE,mDAAmD;YACnD,WAAW,IAAI,IAAA,4BAAe,EAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;SACtE,CAAC,MAAM,CAAC,OAAO,CAAa;QAE7B,OAAO,EAAE;YACP,8BAA8B;YAC9B,4EAA4E;YAC5E,aAAa,EAAE,IAAI;YACnB,oCAAoC;YACpC,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;YACzC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;YACnD,KAAK,EAAE;gBACL,iDAAiD;gBACjD,6CAA6C;gBAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;gBAC9D,6DAA6D;gBAC7D,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC;gBAClE,yCAAyC;gBACzC,GAAG,CAAC,CAAC,KAAK;oBACR,CAAC,CAAC;wBACE,8BAA8B,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,0BAA0B,CAAC;qBACpF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR;SACF;QAED,0EAA0E;QAC1E,MAAM,EAAE,SAAS;QAEjB,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI;YACjD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW;YAChD,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACzC,CAAC,CAAC,EAAE,6BAA6B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;oBAC5E,CAAC,CAAC,EAAE,CAAC;aACR;YACD,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,CAAC,oBAAoB,EAAE,YAAY,CAAC;aAC9C;YACD,uDAAuD;YACvD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;gBAC7B,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;gBACrF,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACvC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;oBAClC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YAErB,yCAAyC;YACzC,wCAAwC;YACxC,oCAAoC;YACpC,MAAM,EAAE;gBACN,WAAW,EAAE,CAAC,KAAK,YAAY,gBAAgB,CAAC;aACjD;SACF;QAED,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;YAC5C,yDAAyD;YACzD,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;YAClC,MAAM,EAAE,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;YAC5C,aAAa,EAAE;gBACb,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC;gBAC/C,MAAM,EAAE;oBACN,uBAAuB;oBACvB,YAAY,CAAC,EAAU;wBACrB,IAAI,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;4BAAE,OAAO,SAAS,CAAC;wBACrE,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;4BAAE,OAAO,OAAO,CAAC;wBAC7C,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;4BAAE,OAAO,UAAU,CAAC;wBACjD,OAAO,SAAS,CAAC;oBACnB,CAAC;iBACF;aACF;YACD,aAAa,EAAE,IAAI;SACpB;QAED,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC;QAE/C,YAAY;KACb,CAAC;IAEF,iFAAiF;IACjF,IAAI,KAAK,EAAE,CAAC;QACT,UAAU,CAAC,OAAoB,CAAC,IAAI,CAAC;YACpC,IAAI,EAAE,wBAAwB;YAC9B,KAAK,CAAC,eAAe,CAAC,MAAqB;gBACzC,oEAAoE;gBACpE,4DAA4D;gBAC5D,iEAAiE;gBACjE,kBAAkB;gBAClB,EAAE;gBACF,uDAAuD;gBACvD,wDAAwD;gBACxD,+CAA+C;gBAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAChD,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,MAAM,gBAAgB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,KAAK,GACT,MAAM,CAAC,WACR,CAAC,KAAK,CAAC;oBACR,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,KAAK,CAAC,OAAO,CAAC;4BACZ,KAAK,EAAE,EAAE;4BACT,MAAM,EAAE,CACN,GAAoB,EACpB,IAAoB,EACpB,IAAgB,EAChB,EAAE;gCACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gCAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCAC9B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gCACtD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gCAChD,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oCAClC,GAAG,CAAC,GAAG,GAAG,gBAAgB,GAAG,GAAG,GAAG,MAAM,CAAC;gCAC5C,CAAC;gCACD,IAAI,EAAE,CAAC;4BACT,CAAC;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,iCAAiC;gBACjC,IAAA,8CAA8B,EAAC,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;gBAChF,yDAAyD;gBACzD,iDAAiD;YACnD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAA,kBAAW,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,cAAc;AACd,kBAAe,YAAY,CAAC;AAE5B,QAAQ;AACR,2CAA6D;AAApD,sGAAA,YAAY,OAAA;AAAE,qGAAA,WAAW,OAAA;AAClC,qDAAsF;AAA7E,+GAAA,gBAAgB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AACtD,yDAA6D;AAApD,mHAAA,kBAAkB,OAAA;AAC3B,uDAAkE;AAAzD,wHAAA,wBAAwB,OAAA;AACjC,yDAA6D;AAApD,mHAAA,kBAAkB,OAAA;AAC3B,mDAAuD;AAA9C,6GAAA,eAAe,OAAA;AACxB,qDAAyD;AAAhD,+GAAA,gBAAgB,OAAA;AACzB,2CAA0D;AAAjD,gHAAA,sBAAsB,OAAA;AAC/B,uDAA2D;AAAlD,iHAAA,iBAAiB,OAAA;AAC1B,uDAA2D;AAAlD,iHAAA,iBAAiB,OAAA;AAC1B,6CAAiD;AAAxC,uGAAA,YAAY,OAAA;AACrB,uDAA2D;AAAlD,iHAAA,iBAAiB,OAAA;AAC1B,+CAAoD;AAA3C,0GAAA,cAAc,OAAA;AACvB,iEAAoE;AAA3D,0HAAA,qBAAqB,OAAA;AAC9B,6CAAkD;AAAzC,wGAAA,aAAa,OAAA;AACtB,+CAAmD;AAA1C,yGAAA,aAAa,OAAA;AACtB,uDAAuD;AACvD,iDAAqD;AAA5C,2GAAA,cAAc,OAAA;AACvB,qDAAyD;AAAhD,+GAAA,gBAAgB,OAAA;AACzB,+CAAoD;AAA3C,0GAAA,cAAc,OAAA;AACvB,mDAAuD;AAA9C,6GAAA,eAAe,OAAA;AACxB,mEAGqC;AAFnC,wHAAA,iBAAiB,OAAA;AACjB,4IAAA,qCAAqC,OAAA;AAEvC,uDAAuE;AAA9D,+HAAA,8BAA8B,OAAA"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server-Log Middleware Plugin(dev only)for nestjs-vite-react fullstack 形态。
|
|
3
3
|
*
|
|
4
|
-
* 在 vite dev server 上挂内联的 dev-logs
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 在 vite dev server 上挂内联的 dev-logs + openapi middleware,让妙搭外壳(编辑器
|
|
5
|
+
* 侧)能够:
|
|
6
|
+
* - 实时拿到 Nest server 写的日志(server.log / trace.log / *.std.log)
|
|
7
|
+
* - 拉取 OpenAPI spec 渲染「开放 API」面板
|
|
7
8
|
*
|
|
8
|
-
* 提供的 endpoints(挂在 `<basePath>/dev/logs` 下):
|
|
9
|
+
* dev-logs 提供的 endpoints(挂在 `<basePath>/dev/logs` 下):
|
|
9
10
|
* - GET /server-logs/stream SSE 实时流
|
|
10
11
|
* - GET /server-logs 合并读所有日志文件(分页 / 过滤)
|
|
11
12
|
* - GET /files/:fileName 单文件分页读
|
|
@@ -17,14 +18,18 @@
|
|
|
17
18
|
* - GET /health 健康检查
|
|
18
19
|
* - GET /api-list 所有 API 路由
|
|
19
20
|
*
|
|
21
|
+
* openapi 提供的 endpoints(挂在 `<basePath>/dev` 下):
|
|
22
|
+
* - GET /openapi.json 运行时 openapi.json(enhanceOpenApiWithSourceInfo 追加 x-source)
|
|
23
|
+
* - GET /openapi/spec docs/openapi.json 过滤后的 spec(前端「开放 API」面板消费)
|
|
24
|
+
*
|
|
20
25
|
* 跟 `coding-preset-vite-react/plugins/dev-logs.ts`(jsPage 的浏览器端 batch logger
|
|
21
26
|
* 收集 `/dev/logs/collect-batch` → `browser.log`)互不冲突——前者读 server 端日志
|
|
22
27
|
* 文件提供给外壳;后者收浏览器端 batch 上报写 `browser.log`。
|
|
23
28
|
*
|
|
24
29
|
* 实现原本来自 `@lark-apaas/devtool-kits`(`packages/tools/fullstack-toolkits/`
|
|
25
30
|
* 的发布名),按产品要求 user app node_modules 不能出现 devtool-kits 包名,整段
|
|
26
|
-
* source 内联到 `../server-log/`(包含 dev-logs/ + registerMiddlewares
|
|
27
|
-
*
|
|
31
|
+
* source 内联到 `../server-log/`(包含 dev-logs/ + openapi/ + registerMiddlewares
|
|
32
|
+
* 入口)。行为跟 `fullstack-vite-preset` 通过 devtool-kits 间接挂载的版本完全一致。
|
|
28
33
|
*
|
|
29
34
|
* 调用方在 `src/index.ts` 已经做了 `isFullstack && serverLogPlugin(...)` gating,
|
|
30
35
|
* jsPage 形态根本不会挂这个 plugin —— 此处不再重复判断。
|
|
@@ -35,9 +40,14 @@ export interface ServerLogPluginOptions {
|
|
|
35
40
|
logDir?: string;
|
|
36
41
|
/** 挂载基路径(沙箱 base path),内部把 routes 挂到 `<basePath>/dev/logs/...` */
|
|
37
42
|
basePath?: string;
|
|
43
|
+
/**
|
|
44
|
+
* 项目根目录,用来定位 openapi 相关文件(`./client/src/api/gen/openapi.json`
|
|
45
|
+
* / `./docs/openapi.json` / `./server`)。默认 `process.cwd()`
|
|
46
|
+
*/
|
|
47
|
+
rootDir?: string;
|
|
38
48
|
}
|
|
39
49
|
/**
|
|
40
|
-
* Vite plugin: 挂载内联的 dev-logs
|
|
50
|
+
* Vite plugin: 挂载内联的 dev-logs + openapi middleware。
|
|
41
51
|
* 仅 dev 模式启用;build 时不影响。
|
|
42
52
|
*/
|
|
43
53
|
export declare function serverLogPlugin(options?: ServerLogPluginOptions): Plugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-log.d.ts","sourceRoot":"","sources":["../../src/plugins/server-log.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server-log.d.ts","sourceRoot":"","sources":["../../src/plugins/server-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAKlD,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAgC5E;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Server-Log Middleware Plugin(dev only)for nestjs-vite-react fullstack 形态。
|
|
4
4
|
*
|
|
5
|
-
* 在 vite dev server 上挂内联的 dev-logs
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* 在 vite dev server 上挂内联的 dev-logs + openapi middleware,让妙搭外壳(编辑器
|
|
6
|
+
* 侧)能够:
|
|
7
|
+
* - 实时拿到 Nest server 写的日志(server.log / trace.log / *.std.log)
|
|
8
|
+
* - 拉取 OpenAPI spec 渲染「开放 API」面板
|
|
8
9
|
*
|
|
9
|
-
* 提供的 endpoints(挂在 `<basePath>/dev/logs` 下):
|
|
10
|
+
* dev-logs 提供的 endpoints(挂在 `<basePath>/dev/logs` 下):
|
|
10
11
|
* - GET /server-logs/stream SSE 实时流
|
|
11
12
|
* - GET /server-logs 合并读所有日志文件(分页 / 过滤)
|
|
12
13
|
* - GET /files/:fileName 单文件分页读
|
|
@@ -18,29 +19,39 @@
|
|
|
18
19
|
* - GET /health 健康检查
|
|
19
20
|
* - GET /api-list 所有 API 路由
|
|
20
21
|
*
|
|
22
|
+
* openapi 提供的 endpoints(挂在 `<basePath>/dev` 下):
|
|
23
|
+
* - GET /openapi.json 运行时 openapi.json(enhanceOpenApiWithSourceInfo 追加 x-source)
|
|
24
|
+
* - GET /openapi/spec docs/openapi.json 过滤后的 spec(前端「开放 API」面板消费)
|
|
25
|
+
*
|
|
21
26
|
* 跟 `coding-preset-vite-react/plugins/dev-logs.ts`(jsPage 的浏览器端 batch logger
|
|
22
27
|
* 收集 `/dev/logs/collect-batch` → `browser.log`)互不冲突——前者读 server 端日志
|
|
23
28
|
* 文件提供给外壳;后者收浏览器端 batch 上报写 `browser.log`。
|
|
24
29
|
*
|
|
25
30
|
* 实现原本来自 `@lark-apaas/devtool-kits`(`packages/tools/fullstack-toolkits/`
|
|
26
31
|
* 的发布名),按产品要求 user app node_modules 不能出现 devtool-kits 包名,整段
|
|
27
|
-
* source 内联到 `../server-log/`(包含 dev-logs/ + registerMiddlewares
|
|
28
|
-
*
|
|
32
|
+
* source 内联到 `../server-log/`(包含 dev-logs/ + openapi/ + registerMiddlewares
|
|
33
|
+
* 入口)。行为跟 `fullstack-vite-preset` 通过 devtool-kits 间接挂载的版本完全一致。
|
|
29
34
|
*
|
|
30
35
|
* 调用方在 `src/index.ts` 已经做了 `isFullstack && serverLogPlugin(...)` gating,
|
|
31
36
|
* jsPage 形态根本不会挂这个 plugin —— 此处不再重复判断。
|
|
32
37
|
*/
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
33
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
42
|
exports.serverLogPlugin = serverLogPlugin;
|
|
43
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
35
44
|
const register_1 = require("../server-log/register");
|
|
36
45
|
const dev_logs_1 = require("../server-log/dev-logs");
|
|
46
|
+
const openapi_1 = require("../server-log/openapi");
|
|
37
47
|
/**
|
|
38
|
-
* Vite plugin: 挂载内联的 dev-logs
|
|
48
|
+
* Vite plugin: 挂载内联的 dev-logs + openapi middleware。
|
|
39
49
|
* 仅 dev 模式启用;build 时不影响。
|
|
40
50
|
*/
|
|
41
51
|
function serverLogPlugin(options = {}) {
|
|
42
52
|
const logDir = options.logDir ?? process.env.LOG_DIR ?? './logs';
|
|
43
53
|
const basePath = options.basePath ?? '';
|
|
54
|
+
const rootDir = options.rootDir ?? process.cwd();
|
|
44
55
|
return {
|
|
45
56
|
name: 'nestjs-vite-react-server-log',
|
|
46
57
|
apply: 'serve',
|
|
@@ -49,9 +60,18 @@ function serverLogPlugin(options = {}) {
|
|
|
49
60
|
(0, dev_logs_1.createDevLogsMiddleware)({
|
|
50
61
|
logDir,
|
|
51
62
|
}),
|
|
63
|
+
// 注册 openapi middleware —— 参数与 fullstack-vite-preset 完全一致
|
|
64
|
+
// (commit e66dd8d8 引入 openapiSpecFilePath 时遗漏了本包)
|
|
65
|
+
(0, openapi_1.createOpenapiMiddleware)({
|
|
66
|
+
openapiFilePath: node_path_1.default.resolve(rootDir, './client/src/api/gen/openapi.json'),
|
|
67
|
+
openapiSpecFilePath: node_path_1.default.resolve(rootDir, './docs/openapi.json'),
|
|
68
|
+
serverDir: node_path_1.default.resolve(rootDir, './server'),
|
|
69
|
+
enableEnhancement: true,
|
|
70
|
+
}),
|
|
52
71
|
], {
|
|
53
72
|
basePath,
|
|
54
73
|
isDev: true,
|
|
74
|
+
rootDir,
|
|
55
75
|
});
|
|
56
76
|
},
|
|
57
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-log.js","sourceRoot":"","sources":["../../src/plugins/server-log.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"server-log.js","sourceRoot":"","sources":["../../src/plugins/server-log.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;;;AAwBH,0CAgCC;AAtDD,0DAA6B;AAE7B,qDAA6D;AAC7D,qDAAiE;AACjE,mDAAgE;AAchE;;;GAGG;AACH,SAAgB,eAAe,CAAC,UAAkC,EAAE;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjD,OAAO;QACL,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,OAAO;QACd,eAAe,CAAC,MAAqB;YACnC,IAAA,8BAAmB,EACjB,MAAM,CAAC,WAAW,EAClB;gBACE,IAAA,kCAAuB,EAAC;oBACtB,MAAM;iBACP,CAAC;gBACF,0DAA0D;gBAC1D,kDAAkD;gBAClD,IAAA,iCAAuB,EAAC;oBACtB,eAAe,EAAE,mBAAI,CAAC,OAAO,CAAC,OAAO,EAAE,mCAAmC,CAAC;oBAC3E,mBAAmB,EAAE,mBAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC;oBACjE,SAAS,EAAE,mBAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;oBAC5C,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH,EACD;gBACE,QAAQ;gBACR,KAAK,EAAE,IAAI;gBACX,OAAO;aACR,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-list-handler.d.ts","sourceRoot":"","sources":["../../../src/server-log/dev-logs/api-list-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"api-list-handler.d.ts","sourceRoot":"","sources":["../../../src/server-log/dev-logs/api-list-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAC;AAwK5D;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAsBrD"}
|
|
@@ -7,9 +7,9 @@ const SERVER_PORT = process.env.SERVER_PORT || '3000';
|
|
|
7
7
|
*/
|
|
8
8
|
function extractModuleFromPath(path) {
|
|
9
9
|
const segments = path.split('/').filter(Boolean);
|
|
10
|
-
// 跳过 'api'
|
|
10
|
+
// 跳过 'api' 前缀
|
|
11
11
|
let startIndex = 0;
|
|
12
|
-
if (segments[0] === 'api'
|
|
12
|
+
if (segments[0] === 'api') {
|
|
13
13
|
startIndex = 1;
|
|
14
14
|
}
|
|
15
15
|
// 跳过版本号 (v1, v2, etc.)
|
|
@@ -81,10 +81,8 @@ async function fetchRoutesFromBackend(basePath) {
|
|
|
81
81
|
const debugRoutes = routeConfig.routes;
|
|
82
82
|
return debugRoutes
|
|
83
83
|
.filter((route) => {
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
const isOpenApi = route.path.includes('/openapi/');
|
|
87
|
-
return (isBusinessApi || isOpenApi) &&
|
|
84
|
+
// 只保留包含 /api/ 的路由,排除内部路由和 capability 路由
|
|
85
|
+
return route.path.includes('/api/') &&
|
|
88
86
|
!route.path.includes('__framework__') &&
|
|
89
87
|
!route.path.includes('__innerapi__') &&
|
|
90
88
|
!route.path.includes('__platform__') &&
|
|
@@ -93,9 +91,9 @@ async function fetchRoutesFromBackend(basePath) {
|
|
|
93
91
|
!route.path.includes('/api/sdk_innerapi');
|
|
94
92
|
})
|
|
95
93
|
.map((route) => {
|
|
96
|
-
//
|
|
97
|
-
const
|
|
98
|
-
const apiPath =
|
|
94
|
+
// 从完整路径中提取 /api/... 部分
|
|
95
|
+
const apiPathMatch = route.path.match(/\/api\/.*/);
|
|
96
|
+
const apiPath = apiPathMatch ? apiPathMatch[0] : route.path;
|
|
99
97
|
const method = route.method || 'ALL';
|
|
100
98
|
return {
|
|
101
99
|
id: generateRouteId(method, apiPath),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-list-handler.js","sourceRoot":"","sources":["../../../src/server-log/dev-logs/api-list-handler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"api-list-handler.js","sourceRoot":"","sources":["../../../src/server-log/dev-logs/api-list-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Request, Response } from 'express';
|
|
2
|
+
import type { MiddlewareContext } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Create OpenAPI request handler with caching
|
|
5
|
+
*/
|
|
6
|
+
export declare function createOpenapiHandler(openapiFilePath: string, enableEnhancement: boolean, serverDir?: string): (_req: Request, res: Response, context: MiddlewareContext) => Promise<Response<any, Record<string, any>> | undefined>;
|
|
7
|
+
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/controller.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,OAAO,EAC1B,SAAS,CAAC,EAAE,MAAM,IAKJ,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,SAAS,iBAAiB,6DAiDvE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createOpenapiHandler = createOpenapiHandler;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
9
|
+
const services_1 = require("./services");
|
|
10
|
+
const utils_1 = require("./utils");
|
|
11
|
+
/**
|
|
12
|
+
* Create OpenAPI request handler with caching
|
|
13
|
+
*/
|
|
14
|
+
function createOpenapiHandler(openapiFilePath, enableEnhancement, serverDir) {
|
|
15
|
+
// In-memory cache
|
|
16
|
+
let cache = null;
|
|
17
|
+
return async (_req, res, context) => {
|
|
18
|
+
try {
|
|
19
|
+
// Read OpenAPI file
|
|
20
|
+
const fileBuffer = await promises_1.default.readFile(openapiFilePath, 'utf-8');
|
|
21
|
+
// Calculate file hash for cache invalidation
|
|
22
|
+
const currentHash = node_crypto_1.default.createHash('md5').update(fileBuffer).digest('hex');
|
|
23
|
+
// Use cache if file content hasn't changed
|
|
24
|
+
if (cache && cache.fileHash === currentHash) {
|
|
25
|
+
return res.json(cache.data);
|
|
26
|
+
}
|
|
27
|
+
// Parse OpenAPI
|
|
28
|
+
let payload = JSON.parse(fileBuffer);
|
|
29
|
+
// Enhance with x-source if enabled
|
|
30
|
+
if (enableEnhancement && context.isDev) {
|
|
31
|
+
const { openapi: enhancedPayload, stats } = await (0, services_1.enhanceOpenApiWithSourceInfo)({
|
|
32
|
+
openapiData: payload,
|
|
33
|
+
writeFile: false, // Don't write to file, keep in memory
|
|
34
|
+
serverDir: serverDir || context.rootDir, // Use provided serverDir or fallback to context.rootDir
|
|
35
|
+
});
|
|
36
|
+
payload = enhancedPayload;
|
|
37
|
+
// Log performance
|
|
38
|
+
console.log(`[OpenAPI] Enhanced in ${stats.duration}ms (${stats.endpointsEnhanced} endpoints)`);
|
|
39
|
+
}
|
|
40
|
+
// Transform paths: remove basePath prefix from all API paths
|
|
41
|
+
const result = (0, utils_1.transformOpenapiPaths)(payload, context.basePath);
|
|
42
|
+
// Update cache
|
|
43
|
+
cache = {
|
|
44
|
+
data: result,
|
|
45
|
+
fileHash: currentHash,
|
|
46
|
+
};
|
|
47
|
+
res.json(result);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
52
|
+
res.status(500).json({
|
|
53
|
+
error: 'Failed to load OpenAPI spec',
|
|
54
|
+
message,
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/server-log/openapi/controller.ts"],"names":[],"mappings":";;;;;AAaA,oDAyDC;AAtED,gEAAkC;AAClC,8DAAiC;AAEjC,yCAA0D;AAC1D,mCAAgD;AAMhD;;GAEG;AACH,SAAgB,oBAAoB,CAClC,eAAuB,EACvB,iBAA0B,EAC1B,SAAkB;IAElB,kBAAkB;IAClB,IAAI,KAAK,GAAwB,IAAI,CAAC;IAEtC,OAAO,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,OAA0B,EAAE,EAAE;QACxE,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,UAAU,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAE/D,6CAA6C;YAC7C,MAAM,WAAW,GAAG,qBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE9E,2CAA2C;YAC3C,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC5C,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAED,gBAAgB;YAChB,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAErC,mCAAmC;YACnC,IAAI,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,uCAA4B,EAAC;oBAC7E,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,KAAK,EAAE,sCAAsC;oBACxD,SAAS,EAAE,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,wDAAwD;iBAClG,CAAC,CAAC;gBACH,OAAO,GAAG,eAAe,CAAC;gBAE1B,kBAAkB;gBAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,iBAAiB,aAAa,CAAC,CAAC;YAClG,CAAC;YAED,6DAA6D;YAC7D,MAAM,MAAM,GAAG,IAAA,6BAAqB,EAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAEhE,eAAe;YACf,KAAK,GAAG;gBACN,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,WAAW;aACtB,CAAC;YAEF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,6BAA6B;gBACpC,OAAO;aACR,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RouteMiddleware } from '../types';
|
|
2
|
+
import type { OpenapiMiddlewareOptions } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Creates OpenAPI middleware that serves enhanced openapi.json
|
|
5
|
+
* Supports both rspack/webpack and Vite dev servers
|
|
6
|
+
*/
|
|
7
|
+
export declare function createOpenapiMiddleware(options: OpenapiMiddlewareOptions): RouteMiddleware;
|
|
8
|
+
export type { OpenapiMiddlewareOptions, SourceInfo, EnhanceOptions, EnhanceResult } from './types';
|
|
9
|
+
export { enhanceOpenApiWithSourceInfo, parseApiRoutes } from './services';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAmBxD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,eAAe,CA0B1F;AAGD,YAAY,EAAE,wBAAwB,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseApiRoutes = exports.enhanceOpenApiWithSourceInfo = void 0;
|
|
4
|
+
exports.createOpenapiMiddleware = createOpenapiMiddleware;
|
|
5
|
+
const router_1 = require("./router");
|
|
6
|
+
/**
|
|
7
|
+
* Routes provided by OpenAPI middleware
|
|
8
|
+
*/
|
|
9
|
+
const OPENAPI_ROUTES = [
|
|
10
|
+
{
|
|
11
|
+
method: 'GET',
|
|
12
|
+
path: '/openapi.json',
|
|
13
|
+
description: 'Serve enhanced OpenAPI specification with source code references',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
method: 'GET',
|
|
17
|
+
path: '/openapi/spec',
|
|
18
|
+
description: 'Serve OpenAPI specification for /openapi/*',
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Creates OpenAPI middleware that serves enhanced openapi.json
|
|
23
|
+
* Supports both rspack/webpack and Vite dev servers
|
|
24
|
+
*/
|
|
25
|
+
function createOpenapiMiddleware(options) {
|
|
26
|
+
const { openapiFilePath, openapiSpecFilePath, enableEnhancement = true, serverDir } = options;
|
|
27
|
+
const routes = openapiSpecFilePath
|
|
28
|
+
? OPENAPI_ROUTES
|
|
29
|
+
: OPENAPI_ROUTES.filter((route) => route.path !== '/openapi/spec');
|
|
30
|
+
return {
|
|
31
|
+
name: 'openapi',
|
|
32
|
+
mountPath: '/dev',
|
|
33
|
+
routes,
|
|
34
|
+
enabled: (context) => context.isDev,
|
|
35
|
+
createRouter: (context) => {
|
|
36
|
+
return (0, router_1.createOpenapiRouter)({
|
|
37
|
+
openapiFilePath,
|
|
38
|
+
openapiSpecFilePath,
|
|
39
|
+
enableEnhancement,
|
|
40
|
+
serverDir,
|
|
41
|
+
}, context);
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
var services_1 = require("./services");
|
|
46
|
+
Object.defineProperty(exports, "enhanceOpenApiWithSourceInfo", { enumerable: true, get: function () { return services_1.enhanceOpenApiWithSourceInfo; } });
|
|
47
|
+
Object.defineProperty(exports, "parseApiRoutes", { enumerable: true, get: function () { return services_1.parseApiRoutes; } });
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server-log/openapi/index.ts"],"names":[],"mappings":";;;AAwBA,0DA0BC;AAhDD,qCAA+C;AAE/C;;GAEG;AACH,MAAM,cAAc,GAAgB;IAClC;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,kEAAkE;KAChF;IACD;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4CAA4C;KAC1D;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,OAAiC;IACvE,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE9F,MAAM,MAAM,GAAG,mBAAmB;QAChC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;IAErE,OAAO;QACL,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,MAAM;QACjB,MAAM;QAEN,OAAO,EAAE,CAAC,OAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK;QAEtD,YAAY,EAAE,CAAC,OAA0B,EAAE,EAAE;YAC3C,OAAO,IAAA,4BAAmB,EACxB;gBACE,eAAe;gBACf,mBAAmB;gBACnB,iBAAiB;gBACjB,SAAS;aACV,EACD,OAAO,CACR,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAID,uCAA0E;AAAjE,wHAAA,4BAA4B,OAAA;AAAE,0GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import type { MiddlewareContext } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Options for creating OpenAPI router
|
|
5
|
+
*/
|
|
6
|
+
export interface OpenapiRouterOptions {
|
|
7
|
+
/** Path to the openapi.json file */
|
|
8
|
+
openapiFilePath: string;
|
|
9
|
+
/** Path to the OpenAPI spec source file for /openapi/spec; when omitted, the route is not registered */
|
|
10
|
+
openapiSpecFilePath?: string;
|
|
11
|
+
/** Enable source code enhancement */
|
|
12
|
+
enableEnhancement: boolean;
|
|
13
|
+
/** Server directory for source code scanning */
|
|
14
|
+
serverDir?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create OpenAPI router
|
|
18
|
+
*/
|
|
19
|
+
export declare function createOpenapiRouter(options: OpenapiRouterOptions, context: MiddlewareContext): Router;
|
|
20
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/router.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,wGAAwG;IACxG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAeR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createOpenapiRouter = createOpenapiRouter;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const controller_1 = require("./controller");
|
|
9
|
+
const spec_controller_1 = require("./spec-controller");
|
|
10
|
+
/**
|
|
11
|
+
* Create OpenAPI router
|
|
12
|
+
*/
|
|
13
|
+
function createOpenapiRouter(options, context) {
|
|
14
|
+
const { openapiFilePath, openapiSpecFilePath, enableEnhancement, serverDir } = options;
|
|
15
|
+
const router = express_1.default.Router();
|
|
16
|
+
const handler = (0, controller_1.createOpenapiHandler)(openapiFilePath, enableEnhancement, serverDir);
|
|
17
|
+
// GET /openapi.json - Serve enhanced OpenAPI specification with x-source
|
|
18
|
+
router.get('/openapi.json', (req, res) => handler(req, res, context));
|
|
19
|
+
// GET /openapi/spec - Serve filtered OpenAPI spec for /openapi/* with refs resolved
|
|
20
|
+
if (openapiSpecFilePath) {
|
|
21
|
+
const specHandler = (0, spec_controller_1.createOpenapiSpecHandler)(openapiSpecFilePath);
|
|
22
|
+
router.get('/openapi/spec', (req, res) => specHandler(req, res, context));
|
|
23
|
+
}
|
|
24
|
+
return router;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/server-log/openapi/router.ts"],"names":[],"mappings":";;;;;AAsBA,kDAkBC;AAxCD,sDAA0C;AAE1C,6CAAoD;AACpD,uDAA6D;AAgB7D;;GAEG;AACH,SAAgB,mBAAmB,CACjC,OAA6B,EAC7B,OAA0B;IAE1B,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACvF,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAA,iCAAoB,EAAC,eAAe,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAEpF,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtE,oFAAoF;IACpF,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,IAAA,0CAAwB,EAAC,mBAAmB,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EnhanceOptions, EnhanceResult } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Enhances OpenAPI JSON with source file location metadata
|
|
4
|
+
* Can be called programmatically or run as a script
|
|
5
|
+
*/
|
|
6
|
+
export declare function enhanceOpenApiWithSourceInfo(options?: EnhanceOptions): Promise<EnhanceResult>;
|
|
7
|
+
/**
|
|
8
|
+
* Scan serverDir for NestJS controller files and extract all parameterized API routes.
|
|
9
|
+
* Synchronous — safe to call at preset config time (before bundling).
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseApiRoutes(serverDir: string): Array<{
|
|
12
|
+
method: string;
|
|
13
|
+
path: string;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/services.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGzE;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoCvG;AA8MD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAQzF"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.enhanceOpenApiWithSourceInfo = enhanceOpenApiWithSourceInfo;
|
|
40
|
+
exports.parseApiRoutes = parseApiRoutes;
|
|
41
|
+
const node_fs_1 = require("node:fs");
|
|
42
|
+
const fsSync = __importStar(require("node:fs"));
|
|
43
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
44
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
45
|
+
const utils_1 = require("./utils");
|
|
46
|
+
/**
|
|
47
|
+
* Enhances OpenAPI JSON with source file location metadata
|
|
48
|
+
* Can be called programmatically or run as a script
|
|
49
|
+
*/
|
|
50
|
+
async function enhanceOpenApiWithSourceInfo(options = {}) {
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
const openapiPath = options.openapiPath || node_path_1.default.resolve(__dirname, '../client/src/api/gen/openapi.json');
|
|
53
|
+
const serverDir = options.serverDir || node_path_1.default.resolve(__dirname, '../server');
|
|
54
|
+
const writeFile = options.writeFile !== false;
|
|
55
|
+
let openapi;
|
|
56
|
+
if (options.openapiData) {
|
|
57
|
+
// Use provided data (for in-memory enhancement)
|
|
58
|
+
openapi = JSON.parse(JSON.stringify(options.openapiData)); // Deep clone
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Read from file
|
|
62
|
+
const openapiContent = await node_fs_1.promises.readFile(openapiPath, 'utf-8');
|
|
63
|
+
openapi = JSON.parse(openapiContent);
|
|
64
|
+
}
|
|
65
|
+
const controllerFiles = await (0, utils_1.findControllerFiles)(serverDir);
|
|
66
|
+
const sourceMap = await (0, utils_1.buildSourceMap)(controllerFiles, processControllerFile);
|
|
67
|
+
const enhanced = (0, utils_1.enhanceOpenApiPaths)(openapi, sourceMap);
|
|
68
|
+
if (writeFile) {
|
|
69
|
+
await node_fs_1.promises.writeFile(openapiPath, JSON.stringify(openapi, null, 2) + '\n', 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
const duration = Date.now() - startTime;
|
|
72
|
+
return {
|
|
73
|
+
openapi,
|
|
74
|
+
stats: {
|
|
75
|
+
duration,
|
|
76
|
+
controllersFound: controllerFiles.length,
|
|
77
|
+
endpointsExtracted: sourceMap.size,
|
|
78
|
+
endpointsEnhanced: enhanced,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Process a single controller file
|
|
84
|
+
*/
|
|
85
|
+
async function processControllerFile(filePath) {
|
|
86
|
+
const relativePath = node_path_1.default.relative(process.cwd(), filePath);
|
|
87
|
+
// Parse file
|
|
88
|
+
const content = await node_fs_1.promises.readFile(filePath, 'utf-8');
|
|
89
|
+
const sourceFile = typescript_1.default.createSourceFile(filePath, content, typescript_1.default.ScriptTarget.Latest, true);
|
|
90
|
+
return extractControllerMetadata(sourceFile, relativePath);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Extract controller metadata from TypeScript source file
|
|
94
|
+
*/
|
|
95
|
+
function extractControllerMetadata(sourceFile, filePath) {
|
|
96
|
+
const metadata = new Map();
|
|
97
|
+
let controllerPath = '';
|
|
98
|
+
let className = '';
|
|
99
|
+
// Helper function to get decorators from both old and new TypeScript APIs
|
|
100
|
+
function getDecorators(node) {
|
|
101
|
+
// TypeScript 5.x: decorators are in modifiers array
|
|
102
|
+
if ('modifiers' in node && Array.isArray(node.modifiers)) {
|
|
103
|
+
return node.modifiers.filter((mod) => mod.kind === typescript_1.default.SyntaxKind.Decorator);
|
|
104
|
+
}
|
|
105
|
+
// TypeScript 4.x: decorators are in decorators array
|
|
106
|
+
if ('decorators' in node && Array.isArray(node.decorators)) {
|
|
107
|
+
return node.decorators;
|
|
108
|
+
}
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
function visit(node) {
|
|
112
|
+
// Extract @Controller decorator and its path
|
|
113
|
+
if (typescript_1.default.isClassDeclaration(node)) {
|
|
114
|
+
const decorators = getDecorators(node);
|
|
115
|
+
// Extract class name
|
|
116
|
+
if (node.name) {
|
|
117
|
+
className = node.name.getText(sourceFile);
|
|
118
|
+
}
|
|
119
|
+
for (const decorator of decorators) {
|
|
120
|
+
if (typescript_1.default.isCallExpression(decorator.expression)) {
|
|
121
|
+
const expression = decorator.expression;
|
|
122
|
+
const decoratorName = expression.expression.getText(sourceFile);
|
|
123
|
+
if (decoratorName === 'Controller') {
|
|
124
|
+
if (expression.arguments.length > 0) {
|
|
125
|
+
const arg = expression.arguments[0];
|
|
126
|
+
if (typescript_1.default.isStringLiteral(arg)) {
|
|
127
|
+
controllerPath = arg.text;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Extract methods with HTTP decorators
|
|
135
|
+
if (typescript_1.default.isMethodDeclaration(node) && node.name) {
|
|
136
|
+
const methodName = node.name.getText(sourceFile);
|
|
137
|
+
let httpMethod = '';
|
|
138
|
+
let routePath = '';
|
|
139
|
+
const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
|
|
140
|
+
const decorators = getDecorators(node);
|
|
141
|
+
for (const decorator of decorators) {
|
|
142
|
+
if (typescript_1.default.isCallExpression(decorator.expression)) {
|
|
143
|
+
const decoratorName = decorator.expression.expression.getText(sourceFile);
|
|
144
|
+
if (['Get', 'Post', 'Put', 'Delete', 'Patch', 'Options', 'Head', 'All'].includes(decoratorName)) {
|
|
145
|
+
httpMethod = decoratorName.toLowerCase();
|
|
146
|
+
if (decorator.expression.arguments.length > 0) {
|
|
147
|
+
const arg = decorator.expression.arguments[0];
|
|
148
|
+
if (typescript_1.default.isStringLiteral(arg)) {
|
|
149
|
+
routePath = arg.text;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (httpMethod && methodName && className) {
|
|
156
|
+
const operationId = `${className}_${methodName}`;
|
|
157
|
+
metadata.set(operationId, {
|
|
158
|
+
file: filePath,
|
|
159
|
+
line: line + 1,
|
|
160
|
+
method: httpMethod,
|
|
161
|
+
controllerPath,
|
|
162
|
+
routePath,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
typescript_1.default.forEachChild(node, visit);
|
|
167
|
+
}
|
|
168
|
+
visit(sourceFile);
|
|
169
|
+
return metadata;
|
|
170
|
+
}
|
|
171
|
+
// --- API Route Parsing (synchronous, for build-time injection) ---
|
|
172
|
+
const HTTP_DECORATOR_NAMES = ['Get', 'Post', 'Put', 'Delete', 'Patch', 'Options', 'Head', 'All'];
|
|
173
|
+
function findControllerFilesSync(dir) {
|
|
174
|
+
const files = [];
|
|
175
|
+
function scan(currentDir) {
|
|
176
|
+
let entries;
|
|
177
|
+
try {
|
|
178
|
+
entries = fsSync.readdirSync(currentDir, { withFileTypes: true });
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
for (const entry of entries) {
|
|
184
|
+
const fullPath = node_path_1.default.join(currentDir, entry.name);
|
|
185
|
+
if (entry.isDirectory()) {
|
|
186
|
+
scan(fullPath);
|
|
187
|
+
}
|
|
188
|
+
else if (entry.isFile() && entry.name.endsWith('.controller.ts')) {
|
|
189
|
+
files.push(fullPath);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
scan(dir);
|
|
194
|
+
return files;
|
|
195
|
+
}
|
|
196
|
+
function normalizeApiPath(controllerPath, routePath) {
|
|
197
|
+
const combined = routePath ? `${controllerPath}/${routePath}` : controllerPath;
|
|
198
|
+
let normalized = combined.replace(/\/+/g, '/');
|
|
199
|
+
if (!normalized.startsWith('/'))
|
|
200
|
+
normalized = `/${normalized}`;
|
|
201
|
+
if (normalized.length > 1 && normalized.endsWith('/'))
|
|
202
|
+
normalized = normalized.slice(0, -1);
|
|
203
|
+
return normalized;
|
|
204
|
+
}
|
|
205
|
+
function parseControllerRoutes(filePath) {
|
|
206
|
+
let content;
|
|
207
|
+
try {
|
|
208
|
+
content = fsSync.readFileSync(filePath, 'utf-8');
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
const sourceFile = typescript_1.default.createSourceFile(filePath, content, typescript_1.default.ScriptTarget.Latest, true);
|
|
214
|
+
const routes = [];
|
|
215
|
+
function getDecoratorsCompat(node) {
|
|
216
|
+
if ('modifiers' in node && Array.isArray(node.modifiers)) {
|
|
217
|
+
return node.modifiers.filter((mod) => mod.kind === typescript_1.default.SyntaxKind.Decorator);
|
|
218
|
+
}
|
|
219
|
+
if ('decorators' in node && Array.isArray(node.decorators)) {
|
|
220
|
+
return node.decorators;
|
|
221
|
+
}
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
function getStringArg(expr) {
|
|
225
|
+
if (expr.arguments.length > 0 && typescript_1.default.isStringLiteral(expr.arguments[0])) {
|
|
226
|
+
return expr.arguments[0].text;
|
|
227
|
+
}
|
|
228
|
+
return '';
|
|
229
|
+
}
|
|
230
|
+
function visit(node) {
|
|
231
|
+
if (typescript_1.default.isClassDeclaration(node)) {
|
|
232
|
+
let controllerPath = '';
|
|
233
|
+
for (const dec of getDecoratorsCompat(node)) {
|
|
234
|
+
if (typescript_1.default.isCallExpression(dec.expression)) {
|
|
235
|
+
const name = dec.expression.expression.getText(sourceFile);
|
|
236
|
+
if (name === 'Controller') {
|
|
237
|
+
controllerPath = getStringArg(dec.expression);
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
for (const member of node.members) {
|
|
243
|
+
if (!typescript_1.default.isMethodDeclaration(member))
|
|
244
|
+
continue;
|
|
245
|
+
for (const dec of getDecoratorsCompat(member)) {
|
|
246
|
+
if (!typescript_1.default.isCallExpression(dec.expression))
|
|
247
|
+
continue;
|
|
248
|
+
const decoratorName = dec.expression.expression.getText(sourceFile);
|
|
249
|
+
if (!HTTP_DECORATOR_NAMES.includes(decoratorName))
|
|
250
|
+
continue;
|
|
251
|
+
const routePath = getStringArg(dec.expression);
|
|
252
|
+
const fullPath = normalizeApiPath(controllerPath, routePath);
|
|
253
|
+
const method = decoratorName === 'All' ? '*' : decoratorName.toUpperCase();
|
|
254
|
+
routes.push({ method, path: fullPath });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
typescript_1.default.forEachChild(node, visit);
|
|
259
|
+
}
|
|
260
|
+
visit(sourceFile);
|
|
261
|
+
return routes;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Scan serverDir for NestJS controller files and extract all parameterized API routes.
|
|
265
|
+
* Synchronous — safe to call at preset config time (before bundling).
|
|
266
|
+
*/
|
|
267
|
+
function parseApiRoutes(serverDir) {
|
|
268
|
+
const resolvedDir = node_path_1.default.resolve(serverDir);
|
|
269
|
+
const controllerFiles = findControllerFilesSync(resolvedDir);
|
|
270
|
+
const routes = [];
|
|
271
|
+
for (const filePath of controllerFiles) {
|
|
272
|
+
routes.push(...parseControllerRoutes(filePath));
|
|
273
|
+
}
|
|
274
|
+
return routes;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/server-log/openapi/services.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Request, Response } from 'express';
|
|
2
|
+
import type { MiddlewareContext } from '../types';
|
|
3
|
+
export declare function createOpenapiSpecHandler(openapiSpecFilePath: string): (_req: Request, res: Response, context: MiddlewareContext) => Promise<Response<any, Record<string, any>> | undefined>;
|
|
4
|
+
//# sourceMappingURL=spec-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-controller.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/spec-controller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAclD,wBAAgB,wBAAwB,CAAC,mBAAmB,EAAE,MAAM,IAGpD,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,SAAS,iBAAiB,6DAqDvE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createOpenapiSpecHandler = createOpenapiSpecHandler;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
9
|
+
const MAX_REF_DEPTH = 5;
|
|
10
|
+
const EMPTY_OPENAPI_SPEC = {
|
|
11
|
+
openapi: '3.0.0',
|
|
12
|
+
info: { title: '开放 API', version: '0.0.0' },
|
|
13
|
+
paths: {},
|
|
14
|
+
components: { schemas: {} },
|
|
15
|
+
};
|
|
16
|
+
function createOpenapiSpecHandler(openapiSpecFilePath) {
|
|
17
|
+
let cache = null;
|
|
18
|
+
return async (_req, res, context) => {
|
|
19
|
+
try {
|
|
20
|
+
let fileBuffer;
|
|
21
|
+
try {
|
|
22
|
+
fileBuffer = await promises_1.default.readFile(openapiSpecFilePath, 'utf-8');
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (err?.code === 'ENOENT') {
|
|
26
|
+
return res.json(EMPTY_OPENAPI_SPEC);
|
|
27
|
+
}
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
const currentHash = node_crypto_1.default.createHash('md5').update(fileBuffer).digest('hex');
|
|
31
|
+
if (cache && cache.fileHash === currentHash) {
|
|
32
|
+
return res.json(cache.data);
|
|
33
|
+
}
|
|
34
|
+
let parsed;
|
|
35
|
+
try {
|
|
36
|
+
parsed = JSON.parse(fileBuffer);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
const message = err instanceof Error ? err.message : 'Invalid JSON';
|
|
40
|
+
return res.status(500).json({
|
|
41
|
+
error: 'Failed to load OpenAPI spec',
|
|
42
|
+
message: `${openapiSpecFilePath} invalid: ${message}`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (!parsed || typeof parsed !== 'object' || !parsed.paths || typeof parsed.paths !== 'object') {
|
|
46
|
+
return res.status(500).json({
|
|
47
|
+
error: 'Failed to load OpenAPI spec',
|
|
48
|
+
message: `${openapiSpecFilePath} missing "paths"`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const result = buildFilteredSpec(parsed, context.basePath ?? '');
|
|
52
|
+
cache = {
|
|
53
|
+
data: result,
|
|
54
|
+
fileHash: currentHash,
|
|
55
|
+
};
|
|
56
|
+
res.json(result);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
61
|
+
res.status(500).json({
|
|
62
|
+
error: 'Failed to load OpenAPI spec',
|
|
63
|
+
message,
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function buildFilteredSpec(spec, globalPrefix) {
|
|
70
|
+
const schemas = (spec.components?.schemas ?? {});
|
|
71
|
+
const paths = (spec.paths ?? {});
|
|
72
|
+
const filteredPaths = {};
|
|
73
|
+
const cleanPrefix = globalPrefix.replace(/\/+$/, '');
|
|
74
|
+
for (const [pathKey, methods] of Object.entries(paths)) {
|
|
75
|
+
const cleanPath = stripPrefix(pathKey, cleanPrefix);
|
|
76
|
+
if (!cleanPath.startsWith('/openapi'))
|
|
77
|
+
continue;
|
|
78
|
+
filteredPaths[cleanPath] = {};
|
|
79
|
+
for (const [method, operation] of Object.entries(methods)) {
|
|
80
|
+
if (['parameters', 'summary', 'description', 'servers'].includes(method))
|
|
81
|
+
continue;
|
|
82
|
+
filteredPaths[cleanPath][method] = resolveRefsDeep(structuredClone(operation), schemas);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
openapi: spec.openapi ?? '3.0.0',
|
|
87
|
+
paths: filteredPaths,
|
|
88
|
+
components: {
|
|
89
|
+
schemas: resolveAllSchemaRefs(structuredClone(schemas)),
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function stripPrefix(pathStr, prefix) {
|
|
94
|
+
if (prefix && pathStr.startsWith(prefix)) {
|
|
95
|
+
return pathStr.slice(prefix.length);
|
|
96
|
+
}
|
|
97
|
+
return pathStr;
|
|
98
|
+
}
|
|
99
|
+
function resolveRefsDeep(obj, schemas, depth = 0) {
|
|
100
|
+
if (depth > MAX_REF_DEPTH || obj === null || obj === undefined)
|
|
101
|
+
return obj;
|
|
102
|
+
if (typeof obj !== 'object')
|
|
103
|
+
return obj;
|
|
104
|
+
if (Array.isArray(obj)) {
|
|
105
|
+
return obj.map((item) => resolveRefsDeep(item, schemas, depth));
|
|
106
|
+
}
|
|
107
|
+
const record = obj;
|
|
108
|
+
if (typeof record['$ref'] === 'string') {
|
|
109
|
+
const resolved = resolveRef(record['$ref'], schemas);
|
|
110
|
+
if (resolved !== undefined) {
|
|
111
|
+
return resolveRefsDeep(structuredClone(resolved), schemas, depth + 1);
|
|
112
|
+
}
|
|
113
|
+
return record;
|
|
114
|
+
}
|
|
115
|
+
const result = {};
|
|
116
|
+
for (const [key, value] of Object.entries(record)) {
|
|
117
|
+
result[key] = resolveRefsDeep(value, schemas, depth);
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
function resolveRef(ref, schemas) {
|
|
122
|
+
const prefix = '#/components/schemas/';
|
|
123
|
+
if (ref.startsWith(prefix)) {
|
|
124
|
+
const name = ref.slice(prefix.length);
|
|
125
|
+
return schemas[name];
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
function resolveAllSchemaRefs(schemas) {
|
|
130
|
+
const result = {};
|
|
131
|
+
for (const [name, schema] of Object.entries(schemas)) {
|
|
132
|
+
result[name] = resolveRefsDeep(schema, schemas);
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=spec-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-controller.js","sourceRoot":"","sources":["../../../src/server-log/openapi/spec-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for OpenAPI middleware
|
|
3
|
+
*/
|
|
4
|
+
export interface OpenapiMiddlewareOptions {
|
|
5
|
+
/** Path to the openapi.json file */
|
|
6
|
+
openapiFilePath: string;
|
|
7
|
+
/** Path to the OpenAPI spec source file (when set, serves /openapi/spec with /openapi/* filtered and $refs resolved) */
|
|
8
|
+
openapiSpecFilePath?: string;
|
|
9
|
+
/** Enable source code enhancement */
|
|
10
|
+
enableEnhancement?: boolean;
|
|
11
|
+
/** Server directory for source code scanning (defaults to context.rootDir) */
|
|
12
|
+
serverDir?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Source file information for API endpoint
|
|
16
|
+
*/
|
|
17
|
+
export interface SourceInfo {
|
|
18
|
+
file: string;
|
|
19
|
+
line: number;
|
|
20
|
+
method: string;
|
|
21
|
+
controllerPath: string;
|
|
22
|
+
routePath: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Options for enhancing OpenAPI specification
|
|
26
|
+
*/
|
|
27
|
+
export interface EnhanceOptions {
|
|
28
|
+
openapiPath?: string;
|
|
29
|
+
serverDir?: string;
|
|
30
|
+
openapiData?: any;
|
|
31
|
+
writeFile?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Statistics about the enhancement process
|
|
35
|
+
*/
|
|
36
|
+
export interface EnhanceStats {
|
|
37
|
+
duration: number;
|
|
38
|
+
controllersFound: number;
|
|
39
|
+
endpointsExtracted: number;
|
|
40
|
+
endpointsEnhanced: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of OpenAPI enhancement
|
|
44
|
+
*/
|
|
45
|
+
export interface EnhanceResult {
|
|
46
|
+
openapi: any;
|
|
47
|
+
stats: EnhanceStats;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* OpenAPI cache entry
|
|
51
|
+
*/
|
|
52
|
+
export interface OpenapiCache {
|
|
53
|
+
data: any;
|
|
54
|
+
fileHash: string;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,wHAAwH;IACxH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server-log/openapi/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SourceInfo } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Find all controller files in a directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function findControllerFiles(dir: string): Promise<string[]>;
|
|
6
|
+
/**
|
|
7
|
+
* Build source map from controller files
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildSourceMap(controllerFiles: string[], processFile: (filePath: string) => Promise<Map<string, SourceInfo>>): Promise<Map<string, SourceInfo>>;
|
|
10
|
+
/**
|
|
11
|
+
* Enhance OpenAPI paths with source information
|
|
12
|
+
*/
|
|
13
|
+
export declare function enhanceOpenApiPaths(openapi: any, sourceMap: Map<string, SourceInfo>): number;
|
|
14
|
+
/**
|
|
15
|
+
* Transform OpenAPI paths by removing basePath prefix
|
|
16
|
+
*/
|
|
17
|
+
export declare function transformOpenapiPaths(openapi: any, basePath: string): any;
|
|
18
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/server-log/openapi/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBxE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAClE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAqBlC;AAqCD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAyB5F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAgBzE"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.findControllerFiles = findControllerFiles;
|
|
7
|
+
exports.buildSourceMap = buildSourceMap;
|
|
8
|
+
exports.enhanceOpenApiPaths = enhanceOpenApiPaths;
|
|
9
|
+
exports.transformOpenapiPaths = transformOpenapiPaths;
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
/**
|
|
13
|
+
* Find all controller files in a directory
|
|
14
|
+
*/
|
|
15
|
+
async function findControllerFiles(dir) {
|
|
16
|
+
const files = [];
|
|
17
|
+
async function scan(currentDir) {
|
|
18
|
+
const entries = await node_fs_1.promises.readdir(currentDir, { withFileTypes: true });
|
|
19
|
+
for (const entry of entries) {
|
|
20
|
+
const fullPath = node_path_1.default.join(currentDir, entry.name);
|
|
21
|
+
if (entry.isDirectory()) {
|
|
22
|
+
await scan(fullPath);
|
|
23
|
+
}
|
|
24
|
+
else if (entry.isFile() && entry.name.endsWith('.controller.ts')) {
|
|
25
|
+
files.push(fullPath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
await scan(dir);
|
|
30
|
+
return files;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build source map from controller files
|
|
34
|
+
*/
|
|
35
|
+
async function buildSourceMap(controllerFiles, processFile) {
|
|
36
|
+
const sourceMap = new Map();
|
|
37
|
+
// Process files in parallel with a concurrency limit
|
|
38
|
+
const concurrency = 10;
|
|
39
|
+
const results = [];
|
|
40
|
+
for (let i = 0; i < controllerFiles.length; i += concurrency) {
|
|
41
|
+
const batch = controllerFiles.slice(i, i + concurrency);
|
|
42
|
+
const batchResults = await Promise.all(batch.map((filePath) => processFile(filePath)));
|
|
43
|
+
results.push(...batchResults);
|
|
44
|
+
}
|
|
45
|
+
// Merge results
|
|
46
|
+
for (const metadata of results) {
|
|
47
|
+
for (const [operationId, info] of metadata.entries()) {
|
|
48
|
+
sourceMap.set(operationId, info);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return sourceMap;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Try to match operationId with different formats
|
|
55
|
+
* Supports:
|
|
56
|
+
* - Direct match: ClassName_methodName
|
|
57
|
+
* - Camel case: classNameMethodName
|
|
58
|
+
* - Method only: methodName
|
|
59
|
+
*/
|
|
60
|
+
function findSourceInfo(operationId, sourceMap) {
|
|
61
|
+
// Try direct match first
|
|
62
|
+
const directMatch = sourceMap.get(operationId);
|
|
63
|
+
if (directMatch) {
|
|
64
|
+
return directMatch;
|
|
65
|
+
}
|
|
66
|
+
// Try matching with different formats
|
|
67
|
+
for (const [key, value] of sourceMap.entries()) {
|
|
68
|
+
// key format: ClassName_methodName
|
|
69
|
+
const [className, methodName] = key.split('_');
|
|
70
|
+
if (!className || !methodName)
|
|
71
|
+
continue;
|
|
72
|
+
// Try camelCase format: classNameMethodName
|
|
73
|
+
const camelCaseId = className.charAt(0).toLowerCase() + className.slice(1) + methodName.charAt(0).toUpperCase() + methodName.slice(1);
|
|
74
|
+
if (operationId === camelCaseId) {
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
// Try method name only
|
|
78
|
+
if (operationId === methodName) {
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Enhance OpenAPI paths with source information
|
|
86
|
+
*/
|
|
87
|
+
function enhanceOpenApiPaths(openapi, sourceMap) {
|
|
88
|
+
let enhancedCount = 0;
|
|
89
|
+
if (!openapi.paths) {
|
|
90
|
+
return enhancedCount;
|
|
91
|
+
}
|
|
92
|
+
for (const pathItem of Object.values(openapi.paths)) {
|
|
93
|
+
if (!pathItem || typeof pathItem !== 'object')
|
|
94
|
+
continue;
|
|
95
|
+
for (const operation of Object.values(pathItem)) {
|
|
96
|
+
if (operation && typeof operation === 'object' && 'operationId' in operation) {
|
|
97
|
+
const sourceInfo = findSourceInfo(operation.operationId, sourceMap);
|
|
98
|
+
if (sourceInfo) {
|
|
99
|
+
operation['x-source'] = {
|
|
100
|
+
file: sourceInfo.file,
|
|
101
|
+
line: sourceInfo.line,
|
|
102
|
+
};
|
|
103
|
+
enhancedCount++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return enhancedCount;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Transform OpenAPI paths by removing basePath prefix
|
|
112
|
+
*/
|
|
113
|
+
function transformOpenapiPaths(openapi, basePath) {
|
|
114
|
+
if (basePath === '/' || !openapi.paths) {
|
|
115
|
+
return openapi;
|
|
116
|
+
}
|
|
117
|
+
const newPaths = {};
|
|
118
|
+
Object.keys(openapi.paths).forEach((key) => {
|
|
119
|
+
const staticApiKey = key.startsWith(basePath) ? key.slice(basePath.length) : key;
|
|
120
|
+
newPaths[staticApiKey] = openapi.paths[key];
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
...openapi,
|
|
124
|
+
paths: newPaths,
|
|
125
|
+
basePath,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/server-log/openapi/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/coding-preset-vite-react",
|
|
3
|
-
"version": "1.0.13-alpha.
|
|
3
|
+
"version": "1.0.13-alpha.3",
|
|
4
4
|
"description": "Vite 8 preset for miaoda-coding vite-react (jsPage) templates — pure frontend, no fullstack baggage",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|