@engjts/nexus 0.1.2 → 0.1.4
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/dist/advanced/realtime/websocket.d.ts +0 -1
- package/dist/advanced/realtime/websocket.d.ts.map +1 -1
- package/dist/advanced/realtime/websocket.js +19 -36
- package/dist/advanced/realtime/websocket.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +3 -0
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/add.d.ts +14 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +150 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +4 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/templates/generators.d.ts +2 -1
- package/dist/cli/templates/generators.d.ts.map +1 -1
- package/dist/cli/templates/generators.js +46 -2
- package/dist/cli/templates/generators.js.map +1 -1
- package/dist/cli/templates/index.d.ts.map +1 -1
- package/dist/cli/templates/index.js +4 -2
- package/dist/cli/templates/index.js.map +1 -1
- package/package.json +1 -1
- package/src/advanced/realtime/websocket.ts +30 -10
- package/src/cli/cli.ts +3 -0
- package/src/cli/commands/add.ts +178 -0
- package/src/cli/commands/generate.ts +5 -3
- package/src/cli/templates/generators.ts +50 -3
- package/src/cli/templates/index.ts +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/advanced/realtime/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/advanced/realtime/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAetC,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,GAAG,EAAE;QACD,GAAG,EAAE,eAAe,CAAC;KACxB,CAAC;CACL;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,oBAAoB;IACxD,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,GAAG,CAAC,CAAM;IAClB,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,WAAW,CAA4C;IAE/D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB;IAOnD,MAAM,CAAC,MAAM,EAAE,UAAU;IAuCzB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;IAWpC,UAAU,CAAC,IAAI,EAAE,MAAM;IAMvB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAUxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IASzC,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,IAAI,WAAW;uBAEQ,MAAM;qBACR,MAAM,UAAU,SAAS;sBACxB,MAAM,UAAU,SAAS;0BACrB,MAAM,WAAW,GAAG;;MAG7C;CACJ"}
|
|
@@ -1,42 +1,20 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.WebSocketGateway = void 0;
|
|
37
4
|
const url_1 = require("url");
|
|
38
5
|
const events_1 = require("events");
|
|
39
|
-
|
|
6
|
+
let WebSocket;
|
|
7
|
+
let WebSocketServer;
|
|
8
|
+
let RawData;
|
|
9
|
+
try {
|
|
10
|
+
const wsModule = require('ws');
|
|
11
|
+
WebSocket = wsModule.default || wsModule;
|
|
12
|
+
WebSocketServer = wsModule.WebSocketServer;
|
|
13
|
+
RawData = wsModule.RawData;
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
// ws module not installed
|
|
17
|
+
}
|
|
40
18
|
/**
|
|
41
19
|
* WebSocket gateway with room management and authentication hooks
|
|
42
20
|
*/
|
|
@@ -56,7 +34,12 @@ class WebSocketGateway extends events_1.EventEmitter {
|
|
|
56
34
|
if (this.wss) {
|
|
57
35
|
return;
|
|
58
36
|
}
|
|
59
|
-
|
|
37
|
+
if (!WebSocketServer) {
|
|
38
|
+
throw new Error('WebSocket support requires the "ws" package to be installed.\n' +
|
|
39
|
+
'Install it with: npm install ws\n' +
|
|
40
|
+
'Or if using the CLI: nexus create my-app --skip-install && npm install');
|
|
41
|
+
}
|
|
42
|
+
this.wss = new WebSocketServer({ noServer: true });
|
|
60
43
|
server.on('upgrade', async (req, socket, head) => {
|
|
61
44
|
try {
|
|
62
45
|
const pathname = (0, url_1.parse)(req.url || '').pathname || '/';
|
|
@@ -83,7 +66,7 @@ class WebSocketGateway extends events_1.EventEmitter {
|
|
|
83
66
|
if (!sockets)
|
|
84
67
|
return;
|
|
85
68
|
for (const socket of sockets) {
|
|
86
|
-
if (socket.readyState ===
|
|
69
|
+
if (socket.readyState === WebSocket.OPEN) {
|
|
87
70
|
socket.send(JSON.stringify(payload));
|
|
88
71
|
}
|
|
89
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/advanced/realtime/websocket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/advanced/realtime/websocket.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,qBAAa,GAAG;IACd,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAAgB;;IAM9B,OAAO,CAAC,gBAAgB;IAiBlB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCxC,OAAO,CAAC,SAAS;IAkCjB,OAAO,CAAC,WAAW;CAgCpB"}
|
package/dist/cli/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.CLI = void 0;
|
|
|
4
4
|
const create_1 = require("./commands/create");
|
|
5
5
|
const init_1 = require("./commands/init");
|
|
6
6
|
const generate_1 = require("./commands/generate");
|
|
7
|
+
const add_1 = require("./commands/add");
|
|
7
8
|
const dev_1 = require("./commands/dev");
|
|
8
9
|
const build_1 = require("./commands/build");
|
|
9
10
|
const help_1 = require("./commands/help");
|
|
@@ -20,6 +21,7 @@ class CLI {
|
|
|
20
21
|
new create_1.CreateCommand(),
|
|
21
22
|
new init_1.InitCommand(),
|
|
22
23
|
new generate_1.GenerateCommand(),
|
|
24
|
+
new add_1.AddCommand(),
|
|
23
25
|
new dev_1.DevCommand(),
|
|
24
26
|
new build_1.BuildCommand(),
|
|
25
27
|
new help_1.HelpCommand(() => this.commands),
|
|
@@ -116,6 +118,7 @@ class CLI {
|
|
|
116
118
|
create <name> Create a new Nexus project
|
|
117
119
|
init Initialize Nexus in current directory
|
|
118
120
|
generate <type> Generate components (route, middleware, etc.)
|
|
121
|
+
add <plugin> Add plugins (swagger, playground, postman)
|
|
119
122
|
dev Start development server
|
|
120
123
|
build Build for production
|
|
121
124
|
|
package/dist/cli/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";;;AAAA,8CAAkD;AAClD,0CAA8C;AAC9C,kDAAsD;AACtD,wCAA4C;AAC5C,4CAAgD;AAChD,0CAA8C;AAC9C,gDAAoD;AACpD,2CAAwC;AAkBxC,MAAa,GAAG;IACN,QAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC3C,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;IAE9B;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,MAAM,QAAQ,GAAc;YAC1B,IAAI,sBAAa,EAAE;YACnB,IAAI,kBAAW,EAAE;YACjB,IAAI,0BAAe,EAAE;YACrB,IAAI,gBAAU,EAAE;YAChB,IAAI,oBAAY,EAAE;YAClB,IAAI,kBAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,wBAAc,EAAE;SACrB,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAc;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAEpC,sBAAsB;QACtB,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,IAAc;QAI9B,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAqC,EAAE,CAAC;QAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IAEO,WAAW;QACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;IAcZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;;IAExD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command, CommandOption } from '../cli';
|
|
2
|
+
export declare class AddCommand implements Command {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
usage: string;
|
|
6
|
+
options: CommandOption[];
|
|
7
|
+
private logger;
|
|
8
|
+
private validPlugins;
|
|
9
|
+
private pluginConfigs;
|
|
10
|
+
execute(args: string[], options: Record<string, string | boolean>): Promise<void>;
|
|
11
|
+
private addPlugin;
|
|
12
|
+
private showUsage;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAahD,qBAAa,UAAW,YAAW,OAAO;IACxC,IAAI,SAAS;IACb,WAAW,SAAuC;IAClD,KAAK,SAAkC;IACvC,OAAO,EAAE,aAAa,EAAE,CAOtB;IAEF,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAsD;IAE1E,OAAO,CAAC,aAAa,CAmBnB;IAEI,OAAO,CACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC;YAkBF,SAAS;IAuFvB,OAAO,CAAC,SAAS;CAmBlB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddCommand = void 0;
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
const file_system_1 = require("../utils/file-system");
|
|
6
|
+
class AddCommand {
|
|
7
|
+
name = 'add';
|
|
8
|
+
description = 'Add plugins to your Nexus project';
|
|
9
|
+
usage = 'nexus add <plugin> [options]';
|
|
10
|
+
options = [
|
|
11
|
+
{
|
|
12
|
+
name: 'path',
|
|
13
|
+
alias: 'p',
|
|
14
|
+
description: 'Path to the entry file (default: src/index.ts)',
|
|
15
|
+
defaultValue: 'src/index.ts',
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
logger = new logger_1.Logger();
|
|
19
|
+
validPlugins = ['playground', 'postman', 'swagger'];
|
|
20
|
+
pluginConfigs = {
|
|
21
|
+
playground: {
|
|
22
|
+
name: 'playground',
|
|
23
|
+
import: 'playground',
|
|
24
|
+
feature: 'playground()',
|
|
25
|
+
description: 'Interactive API playground at /playground',
|
|
26
|
+
},
|
|
27
|
+
postman: {
|
|
28
|
+
name: 'postman',
|
|
29
|
+
import: 'postman',
|
|
30
|
+
feature: 'postman()',
|
|
31
|
+
description: 'Postman collection export at /postman',
|
|
32
|
+
},
|
|
33
|
+
swagger: {
|
|
34
|
+
name: 'swagger',
|
|
35
|
+
import: 'swagger',
|
|
36
|
+
feature: 'swagger()',
|
|
37
|
+
description: 'Swagger/OpenAPI documentation at /docs',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
async execute(args, options) {
|
|
41
|
+
if (args.length < 1) {
|
|
42
|
+
this.showUsage();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const [plugin] = args;
|
|
46
|
+
if (!this.validPlugins.includes(plugin)) {
|
|
47
|
+
this.logger.error(`Invalid plugin: ${plugin}`);
|
|
48
|
+
this.logger.info(`Valid plugins: ${this.validPlugins.join(', ')}`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const entryPath = options.path || 'src/index.ts';
|
|
52
|
+
await this.addPlugin(plugin, entryPath);
|
|
53
|
+
}
|
|
54
|
+
async addPlugin(plugin, entryPath) {
|
|
55
|
+
const fullPath = file_system_1.FileSystem.joinPath(process.cwd(), entryPath);
|
|
56
|
+
const config = this.pluginConfigs[plugin];
|
|
57
|
+
// Check if entry file exists
|
|
58
|
+
if (!(await file_system_1.FileSystem.exists(fullPath))) {
|
|
59
|
+
this.logger.error(`Entry file not found: ${fullPath}`);
|
|
60
|
+
this.logger.info('Use --path to specify your entry file');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Read current file
|
|
64
|
+
let content = await file_system_1.FileSystem.readFile(fullPath);
|
|
65
|
+
// Check if plugin is already added
|
|
66
|
+
if (content.includes(`app.feature(${config.feature})`)) {
|
|
67
|
+
this.logger.info(`Plugin "${plugin}" is already added to your project`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Check if import already exists
|
|
71
|
+
const importRegex = new RegExp(`import\\s*{([^}]*)}\\s*from\\s*['"]@engjts/nexus['"]`);
|
|
72
|
+
const importMatch = content.match(importRegex);
|
|
73
|
+
if (importMatch) {
|
|
74
|
+
const currentImports = importMatch[1];
|
|
75
|
+
if (!currentImports.includes(config.import)) {
|
|
76
|
+
// Add to existing import
|
|
77
|
+
const newImports = currentImports.trim() + ', ' + config.import;
|
|
78
|
+
content = content.replace(importRegex, `import {${newImports}} from '@engjts/nexus'`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Add new import at the top
|
|
83
|
+
content = `import { ${config.import} } from '@engjts/nexus';\n${content}`;
|
|
84
|
+
}
|
|
85
|
+
// Find where to add app.feature()
|
|
86
|
+
// Look for existing app.feature() calls or app.use() calls
|
|
87
|
+
const featurePattern = /app\.feature\([^)]+\);?\n?/g;
|
|
88
|
+
const usePattern = /app\.use\([^)]+\);?\n?/;
|
|
89
|
+
const listenPattern = /app\.listen\(/;
|
|
90
|
+
let insertPosition = -1;
|
|
91
|
+
let insertText = `app.feature(${config.feature});\n`;
|
|
92
|
+
// Find last app.feature() call
|
|
93
|
+
let lastFeatureMatch = null;
|
|
94
|
+
let match;
|
|
95
|
+
while ((match = featurePattern.exec(content)) !== null) {
|
|
96
|
+
lastFeatureMatch = match;
|
|
97
|
+
}
|
|
98
|
+
if (lastFeatureMatch) {
|
|
99
|
+
// Insert after last feature
|
|
100
|
+
insertPosition = lastFeatureMatch.index + lastFeatureMatch[0].length;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Find app.use() or app.listen()
|
|
104
|
+
const useMatch = content.match(usePattern);
|
|
105
|
+
const listenMatch = content.match(listenPattern);
|
|
106
|
+
if (useMatch && useMatch.index !== undefined) {
|
|
107
|
+
// Insert before first app.use()
|
|
108
|
+
insertPosition = useMatch.index;
|
|
109
|
+
insertText = `// Features\napp.feature(${config.feature});\n\n`;
|
|
110
|
+
}
|
|
111
|
+
else if (listenMatch && listenMatch.index !== undefined) {
|
|
112
|
+
// Insert before app.listen()
|
|
113
|
+
insertPosition = listenMatch.index;
|
|
114
|
+
insertText = `// Features\napp.feature(${config.feature});\n\n`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (insertPosition === -1) {
|
|
118
|
+
this.logger.error('Could not find a suitable location to add the plugin');
|
|
119
|
+
this.logger.info('Please add manually: app.feature(' + config.feature + ')');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Insert the feature call
|
|
123
|
+
content = content.slice(0, insertPosition) + insertText + content.slice(insertPosition);
|
|
124
|
+
// Write back
|
|
125
|
+
await file_system_1.FileSystem.writeFile(fullPath, content);
|
|
126
|
+
this.logger.success(`Added "${plugin}" plugin to your project`);
|
|
127
|
+
this.logger.info(` ${config.description}`);
|
|
128
|
+
}
|
|
129
|
+
showUsage() {
|
|
130
|
+
console.log(`
|
|
131
|
+
${this.logger.colors.bright}Usage:${this.logger.colors.reset} nexus add <plugin> [options]
|
|
132
|
+
|
|
133
|
+
${this.logger.colors.bright}Plugins:${this.logger.colors.reset}
|
|
134
|
+
playground Add interactive API playground
|
|
135
|
+
postman Add Postman collection export
|
|
136
|
+
swagger Add Swagger/OpenAPI documentation
|
|
137
|
+
|
|
138
|
+
${this.logger.colors.bright}Examples:${this.logger.colors.reset}
|
|
139
|
+
nexus add swagger
|
|
140
|
+
nexus add playground
|
|
141
|
+
nexus add postman
|
|
142
|
+
nexus add swagger --path src/app.ts
|
|
143
|
+
|
|
144
|
+
${this.logger.colors.bright}Options:${this.logger.colors.reset}
|
|
145
|
+
--path, -p Path to entry file (default: src/index.ts)
|
|
146
|
+
`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.AddCommand = AddCommand;
|
|
150
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAOhD,qBAAa,eAAgB,YAAW,OAAO;IAC7C,IAAI,SAAc;IAClB,WAAW,SAA+D;IAC1E,KAAK,SAA4C;IACjD,OAAO,EAAE,aAAa,EAAE,CAYtB;IAEF,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAOhD,qBAAa,eAAgB,YAAW,OAAO;IAC7C,IAAI,SAAc;IAClB,WAAW,SAA+D;IAC1E,KAAK,SAA4C;IACjD,OAAO,EAAE,aAAa,EAAE,CAYtB;IAEF,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAA0G;IAEtH,OAAO,CACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC;YAoBF,QAAQ;IAsBtB,OAAO,CAAC,SAAS;CAyBlB"}
|
|
@@ -22,7 +22,7 @@ class GenerateCommand {
|
|
|
22
22
|
},
|
|
23
23
|
];
|
|
24
24
|
logger = new logger_1.Logger();
|
|
25
|
-
validTypes = ['route', 'middleware', 'controller', 'service', 'model', 'validator'];
|
|
25
|
+
validTypes = ['route', 'route-class', 'middleware', 'controller', 'service', 'model', 'validator'];
|
|
26
26
|
async execute(args, options) {
|
|
27
27
|
if (args.length < 2) {
|
|
28
28
|
this.showUsage();
|
|
@@ -57,7 +57,8 @@ class GenerateCommand {
|
|
|
57
57
|
${this.logger.colors.bright}Usage:${this.logger.colors.reset} nexus generate <type> <name> [options]
|
|
58
58
|
|
|
59
59
|
${this.logger.colors.bright}Types:${this.logger.colors.reset}
|
|
60
|
-
route Generate a route handler
|
|
60
|
+
route Generate a function-based route handler
|
|
61
|
+
route-class Generate a class-based route (with meta, schema, onBefore)
|
|
61
62
|
middleware Generate a middleware
|
|
62
63
|
controller Generate a controller class
|
|
63
64
|
service Generate a service class
|
|
@@ -66,6 +67,7 @@ ${this.logger.colors.bright}Types:${this.logger.colors.reset}
|
|
|
66
67
|
|
|
67
68
|
${this.logger.colors.bright}Examples:${this.logger.colors.reset}
|
|
68
69
|
nexus generate route users
|
|
70
|
+
nexus generate route-class users
|
|
69
71
|
nexus generate controller UserController
|
|
70
72
|
nexus generate middleware auth
|
|
71
73
|
nexus generate route products --methods get,post,put,delete
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":";;;AACA,4CAAyC;AACzC,sDAAkD;AAClD,wDAA6D;AAI7D,MAAa,eAAe;IAC1B,IAAI,GAAG,UAAU,CAAC;IAClB,WAAW,GAAG,2DAA2D,CAAC;IAC1E,KAAK,GAAG,wCAAwC,CAAC;IACjD,OAAO,GAAoB;QACzB;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,oCAAoC;SAClD;QACD;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,0CAA0C;YACvD,YAAY,EAAE,KAAK;SACpB;KACF,CAAC;IAEM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;IACtB,UAAU,GAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type GeneratorType = 'route' | 'middleware' | 'controller' | 'service' | 'model' | 'validator';
|
|
1
|
+
type GeneratorType = 'route' | 'route-class' | 'middleware' | 'controller' | 'service' | 'model' | 'validator';
|
|
2
2
|
interface GeneratorResult {
|
|
3
3
|
filePath: string;
|
|
4
4
|
content: string;
|
|
@@ -12,6 +12,7 @@ export declare class GeneratorTemplates {
|
|
|
12
12
|
private toPascalCase;
|
|
13
13
|
private toCamelCase;
|
|
14
14
|
private generateRoute;
|
|
15
|
+
private generateRouteClass;
|
|
15
16
|
private generateMiddleware;
|
|
16
17
|
private generateController;
|
|
17
18
|
private generateService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAE/
|
|
1
|
+
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAE/G,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe;IAqBvF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;IA4D1B,OAAO,CAAC,eAAe;IAwEvB,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,iBAAiB;CA8C1B"}
|
|
@@ -6,6 +6,8 @@ class GeneratorTemplates {
|
|
|
6
6
|
switch (type) {
|
|
7
7
|
case 'route':
|
|
8
8
|
return this.generateRoute(name, options.methods);
|
|
9
|
+
case 'route-class':
|
|
10
|
+
return this.generateRouteClass(name, options.methods);
|
|
9
11
|
case 'middleware':
|
|
10
12
|
return this.generateMiddleware(name);
|
|
11
13
|
case 'controller':
|
|
@@ -37,9 +39,9 @@ class GeneratorTemplates {
|
|
|
37
39
|
return `
|
|
38
40
|
// ${method.toUpperCase()} /${name}
|
|
39
41
|
${routeName}Routes.${method}('/', async (ctx) => {
|
|
40
|
-
return
|
|
42
|
+
return {
|
|
41
43
|
message: '${method.toUpperCase()} /${name}',
|
|
42
|
-
}
|
|
44
|
+
};
|
|
43
45
|
});`;
|
|
44
46
|
})
|
|
45
47
|
.join('\n');
|
|
@@ -47,6 +49,48 @@ ${routeName}Routes.${method}('/', async (ctx) => {
|
|
|
47
49
|
|
|
48
50
|
export const ${routeName}Routes = new Router();
|
|
49
51
|
${routeHandlers}
|
|
52
|
+
`;
|
|
53
|
+
return {
|
|
54
|
+
filePath: `src/routes/${name}.ts`,
|
|
55
|
+
content,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
generateRouteClass(name, methods) {
|
|
59
|
+
const className = this.toPascalCase(name);
|
|
60
|
+
const baseName = name.toLowerCase();
|
|
61
|
+
const method = methods[0] || 'get';
|
|
62
|
+
const content = `import { Route, Context, z } from '@engjts/nexus';
|
|
63
|
+
|
|
64
|
+
export class ${className}Route extends Route {
|
|
65
|
+
pathName = '/${baseName}';
|
|
66
|
+
|
|
67
|
+
meta() {
|
|
68
|
+
return {
|
|
69
|
+
summary: '${className} route',
|
|
70
|
+
description: '${className} route description',
|
|
71
|
+
tags: ['${className}'],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
schema() {
|
|
76
|
+
return {
|
|
77
|
+
// params: z.object({}),
|
|
78
|
+
// query: z.object({}),
|
|
79
|
+
// body: z.object({}),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async onBefore(ctx: Context) {
|
|
84
|
+
// Hook sebelum handler
|
|
85
|
+
// Return value untuk skip handler dan langsung return response
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async handler(ctx: Context) {
|
|
89
|
+
return {
|
|
90
|
+
message: '${method.toUpperCase()} /${baseName}',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
50
94
|
`;
|
|
51
95
|
return {
|
|
52
96
|
filePath: `src/routes/${name}.ts`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IACf,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEvC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYjD,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IACf,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEvC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYjD,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,SAAS;IA8DjB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,aAAa;IAgErB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,cAAc;IAqDtB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,YAAY;IA4EpB,OAAO,CAAC,WAAW;CAiBpB"}
|
|
@@ -61,11 +61,13 @@ class ProjectTemplates {
|
|
|
61
61
|
test: 'jest',
|
|
62
62
|
};
|
|
63
63
|
const dependencies = {
|
|
64
|
-
'@engjts/nexus': '^0.1.
|
|
64
|
+
'@engjts/nexus': '^0.1.3',
|
|
65
65
|
zod: '^3.22.4',
|
|
66
|
+
ws: '^8.16.0',
|
|
66
67
|
};
|
|
67
68
|
const devDependencies = {
|
|
68
69
|
'@types/node': '^20.10.0',
|
|
70
|
+
'@types/ws': '^8.18.1',
|
|
69
71
|
typescript: '^5.3.3',
|
|
70
72
|
tsx: '^4.7.0',
|
|
71
73
|
};
|
|
@@ -76,7 +78,7 @@ class ProjectTemplates {
|
|
|
76
78
|
}
|
|
77
79
|
return JSON.stringify({
|
|
78
80
|
name: this.projectName,
|
|
79
|
-
version: '1.0
|
|
81
|
+
version: '0.1.0',
|
|
80
82
|
description: `${this.projectName} - Powered by Nexus`,
|
|
81
83
|
main: 'dist/index.js',
|
|
82
84
|
scripts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAgB;IACP;IAApB,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE3C,WAAW,CAAC,IAAY;QACtB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrC,KAAK,OAAO,CAAC;YACb;gBACE,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC5C,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;YACpC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YAC7B,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;YACpC,qBAAqB,EAAE,IAAI,CAAC,cAAc,EAAE;SAC7C,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC1C,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACzC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YAC7B,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;YAClC,qBAAqB,EAAE,IAAI,CAAC,YAAY,EAAE;YAC1C,qBAAqB,EAAE,IAAI,CAAC,aAAa,EAAE;YAC3C,wBAAwB,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAClD,0BAA0B,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACtD,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE;YACrD,kCAAkC,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3D,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtC,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,OAAO;YACL,GAAG,IAAI,CAAC,cAAc,EAAE;YACxB,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE;YACzC,sBAAsB,EAAE,IAAI,CAAC,YAAY,EAAE;YAC3C,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE;SACvC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,MAAM,OAAO,GAA2B;YACtC,GAAG,EAAE,wBAAwB;YAC7B,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,MAAM,YAAY,GAA2B;YAC3C,eAAe,EAAE,QAAQ;YACzB,GAAG,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/templates/index.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAgB;IACP;IAApB,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE3C,WAAW,CAAC,IAAY;QACtB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrC,KAAK,OAAO,CAAC;YACb;gBACE,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC5C,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;YACpC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YAC7B,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;YACpC,qBAAqB,EAAE,IAAI,CAAC,cAAc,EAAE;SAC7C,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC1C,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACzC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YAC7B,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;YAClC,qBAAqB,EAAE,IAAI,CAAC,YAAY,EAAE;YAC1C,qBAAqB,EAAE,IAAI,CAAC,aAAa,EAAE;YAC3C,wBAAwB,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAClD,0BAA0B,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACtD,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE;YACrD,kCAAkC,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3D,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtC,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,OAAO;YACL,GAAG,IAAI,CAAC,cAAc,EAAE;YACxB,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE;YACzC,sBAAsB,EAAE,IAAI,CAAC,YAAY,EAAE;YAC3C,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE;SACvC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,MAAM,OAAO,GAA2B;YACtC,GAAG,EAAE,wBAAwB;YAC7B,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,MAAM,YAAY,GAA2B;YAC3C,eAAe,EAAE,QAAQ;YACzB,GAAG,EAAE,SAAS;YACd,EAAE,EAAE,SAAS;SACd,CAAC;QAEF,MAAM,eAAe,GAA2B;YAC9C,aAAa,EAAE,UAAU;YACzB,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,QAAQ;SACd,CAAC;QAEF,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3C,eAAe,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;YAC5C,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YACpC,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,qBAAqB;YACrD,IAAI,EAAE,eAAe;YACrB,OAAO;YACP,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC;YACxC,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,eAAe;SAChB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,eAAe,EAAE;gBACf,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,UAAU;gBAClB,gBAAgB,EAAE,UAAU;gBAC5B,GAAG,EAAE,CAAC,QAAQ,CAAC;gBACf,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,IAAI;gBACZ,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,IAAI;gBAClB,gCAAgC,EAAE,IAAI;gBACtC,iBAAiB,EAAE,IAAI;gBACvB,WAAW,EAAE,IAAI;gBACjB,cAAc,EAAE,IAAI;gBACpB,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;SAClC,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCV,CAAC;IACA,CAAC;IAEO,aAAa,CAAC,IAAI,GAAG,OAAO;QAClC,IAAI,GAAG,GAAG;;;;CAIb,CAAC;QAEE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,GAAG,IAAI;;;;;;;;;;;CAWZ,CAAC;QACE,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,SAAS;QACf,OAAO,KAAK,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0D/B,CAAC;IACA,CAAC;IAEO,aAAa;QACnB,OAAO;;;;;;;;;;;;;;CAcV,CAAC;IACA,CAAC;IAEO,cAAc;QACpB,OAAO;;;;;;;;;;;;;;;;;CAiBV,CAAC;IACA,CAAC;IAEO,WAAW;QACjB,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBV,CAAC;IACA,CAAC;IAEO,YAAY;QAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAyBV,CAAC;IACA,CAAC;IAEO,aAAa;QACnB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DV,CAAC;IACA,CAAC;IAEO,iBAAiB;QACvB,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBV,CAAC;IACA,CAAC;IAEO,mBAAmB;QACzB,OAAO;;;;;;;;;;;;;;;CAeV,CAAC;IACA,CAAC;IAEO,cAAc;QACpB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDV,CAAC;IACA,CAAC;IAEO,gBAAgB;QACtB,OAAO;;;;;;;;;;;;;;;CAeV,CAAC;IACA,CAAC;IAEO,QAAQ;QACd,OAAO;;;;;;;;;;;;;;;;;;;;;;;;CAwBV,CAAC;IACA,CAAC;IAEO,aAAa;QACnB,OAAO;;;;;WAKA,IAAI,CAAC,WAAW;;;;;;YAMf,IAAI,CAAC,WAAW;;;;;;;;;;;;kBAYV,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW;;;;;;;CAO7D,CAAC;IACA,CAAC;IAEO,YAAY;QAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEV,CAAC;IACA,CAAC;IAEO,WAAW;QACjB,OAAO;;iBAEM,IAAI,CAAC,WAAW;;;;;;;;;;;;CAYhC,CAAC;IACA,CAAC;CACF;AAvqBD,4CAuqBC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { IncomingMessage, Server as HTTPServer } from 'http';
|
|
2
2
|
import { parse as parseUrl } from 'url';
|
|
3
3
|
import { EventEmitter } from 'events';
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
let WebSocket: any;
|
|
6
|
+
let WebSocketServer: any;
|
|
7
|
+
let RawData: any;
|
|
8
|
+
|
|
9
|
+
try {
|
|
10
|
+
const wsModule = require('ws');
|
|
11
|
+
WebSocket = wsModule.default || wsModule;
|
|
12
|
+
WebSocketServer = wsModule.WebSocketServer;
|
|
13
|
+
RawData = wsModule.RawData;
|
|
14
|
+
} catch (error) {
|
|
15
|
+
// ws module not installed
|
|
16
|
+
}
|
|
5
17
|
|
|
6
18
|
export interface WebSocketContext {
|
|
7
19
|
path: string;
|
|
@@ -38,10 +50,10 @@ export interface ConnectionState {
|
|
|
38
50
|
*/
|
|
39
51
|
export class WebSocketGateway extends EventEmitter {
|
|
40
52
|
private routes: Map<string, WebSocketRoute> = new Map();
|
|
41
|
-
private wss?:
|
|
42
|
-
private connections: WeakMap<
|
|
43
|
-
private rooms: Map<string, Set<
|
|
44
|
-
private socketRooms: WeakMap<
|
|
53
|
+
private wss?: any;
|
|
54
|
+
private connections: WeakMap<any, ConnectionState> = new WeakMap();
|
|
55
|
+
private rooms: Map<string, Set<any>> = new Map();
|
|
56
|
+
private socketRooms: WeakMap<any, Set<string>> = new WeakMap();
|
|
45
57
|
|
|
46
58
|
register(path: string, config: WebSocketRouteConfig) {
|
|
47
59
|
if (!path.startsWith('/')) {
|
|
@@ -55,6 +67,14 @@ export class WebSocketGateway extends EventEmitter {
|
|
|
55
67
|
return;
|
|
56
68
|
}
|
|
57
69
|
|
|
70
|
+
if (!WebSocketServer) {
|
|
71
|
+
throw new Error(
|
|
72
|
+
'WebSocket support requires the "ws" package to be installed.\n' +
|
|
73
|
+
'Install it with: npm install ws\n' +
|
|
74
|
+
'Or if using the CLI: nexus create my-app --skip-install && npm install'
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
58
78
|
this.wss = new WebSocketServer({ noServer: true });
|
|
59
79
|
|
|
60
80
|
server.on('upgrade', async (req, socket, head) => {
|
|
@@ -117,11 +137,11 @@ export class WebSocketGateway extends EventEmitter {
|
|
|
117
137
|
joinedRooms?.delete(room);
|
|
118
138
|
}
|
|
119
139
|
|
|
120
|
-
private bindConnection(socket:
|
|
140
|
+
private bindConnection(socket: any, route: WebSocketRoute, ctx: WebSocketContext) {
|
|
121
141
|
this.connections.set(socket, { ctx, route });
|
|
122
142
|
this.emit('connection', socket, ctx);
|
|
123
143
|
|
|
124
|
-
socket.on('message', async (data:
|
|
144
|
+
socket.on('message', async (data: any) => {
|
|
125
145
|
try {
|
|
126
146
|
const payload = this.parseMessage(data);
|
|
127
147
|
await route.onMessage?.(socket, payload, ctx);
|
|
@@ -161,7 +181,7 @@ export class WebSocketGateway extends EventEmitter {
|
|
|
161
181
|
};
|
|
162
182
|
}
|
|
163
183
|
|
|
164
|
-
private parseMessage(data:
|
|
184
|
+
private parseMessage(data: any): any {
|
|
165
185
|
if (Buffer.isBuffer(data) || data instanceof ArrayBuffer) {
|
|
166
186
|
const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
167
187
|
const stringPayload = buffer.toString('utf-8');
|
|
@@ -173,7 +193,7 @@ export class WebSocketGateway extends EventEmitter {
|
|
|
173
193
|
}
|
|
174
194
|
|
|
175
195
|
if (Array.isArray(data)) {
|
|
176
|
-
return data.map((item): any => this.parseMessage(item
|
|
196
|
+
return data.map((item): any => this.parseMessage(item));
|
|
177
197
|
}
|
|
178
198
|
|
|
179
199
|
// Handle string case
|
|
@@ -184,7 +204,7 @@ export class WebSocketGateway extends EventEmitter {
|
|
|
184
204
|
}
|
|
185
205
|
}
|
|
186
206
|
|
|
187
|
-
private cleanupSocket(socket:
|
|
207
|
+
private cleanupSocket(socket: any) {
|
|
188
208
|
const rooms = this.socketRooms.get(socket);
|
|
189
209
|
if (rooms) {
|
|
190
210
|
for (const room of rooms) {
|
package/src/cli/cli.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CreateCommand } from './commands/create';
|
|
2
2
|
import { InitCommand } from './commands/init';
|
|
3
3
|
import { GenerateCommand } from './commands/generate';
|
|
4
|
+
import { AddCommand } from './commands/add';
|
|
4
5
|
import { DevCommand } from './commands/dev';
|
|
5
6
|
import { BuildCommand } from './commands/build';
|
|
6
7
|
import { HelpCommand } from './commands/help';
|
|
@@ -36,6 +37,7 @@ export class CLI {
|
|
|
36
37
|
new CreateCommand(),
|
|
37
38
|
new InitCommand(),
|
|
38
39
|
new GenerateCommand(),
|
|
40
|
+
new AddCommand(),
|
|
39
41
|
new DevCommand(),
|
|
40
42
|
new BuildCommand(),
|
|
41
43
|
new HelpCommand(() => this.commands),
|
|
@@ -142,6 +144,7 @@ export class CLI {
|
|
|
142
144
|
create <name> Create a new Nexus project
|
|
143
145
|
init Initialize Nexus in current directory
|
|
144
146
|
generate <type> Generate components (route, middleware, etc.)
|
|
147
|
+
add <plugin> Add plugins (swagger, playground, postman)
|
|
145
148
|
dev Start development server
|
|
146
149
|
build Build for production
|
|
147
150
|
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { Command, CommandOption } from '../cli';
|
|
2
|
+
import { Logger } from '../utils/logger';
|
|
3
|
+
import { FileSystem } from '../utils/file-system';
|
|
4
|
+
|
|
5
|
+
type PluginType = 'playground' | 'postman' | 'swagger';
|
|
6
|
+
|
|
7
|
+
interface PluginConfig {
|
|
8
|
+
name: string;
|
|
9
|
+
import: string;
|
|
10
|
+
feature: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class AddCommand implements Command {
|
|
15
|
+
name = 'add';
|
|
16
|
+
description = 'Add plugins to your Nexus project';
|
|
17
|
+
usage = 'nexus add <plugin> [options]';
|
|
18
|
+
options: CommandOption[] = [
|
|
19
|
+
{
|
|
20
|
+
name: 'path',
|
|
21
|
+
alias: 'p',
|
|
22
|
+
description: 'Path to the entry file (default: src/index.ts)',
|
|
23
|
+
defaultValue: 'src/index.ts',
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
private logger = new Logger();
|
|
28
|
+
private validPlugins: PluginType[] = ['playground', 'postman', 'swagger'];
|
|
29
|
+
|
|
30
|
+
private pluginConfigs: Record<PluginType, PluginConfig> = {
|
|
31
|
+
playground: {
|
|
32
|
+
name: 'playground',
|
|
33
|
+
import: 'playground',
|
|
34
|
+
feature: 'playground()',
|
|
35
|
+
description: 'Interactive API playground at /playground',
|
|
36
|
+
},
|
|
37
|
+
postman: {
|
|
38
|
+
name: 'postman',
|
|
39
|
+
import: 'postman',
|
|
40
|
+
feature: 'postman()',
|
|
41
|
+
description: 'Postman collection export at /postman',
|
|
42
|
+
},
|
|
43
|
+
swagger: {
|
|
44
|
+
name: 'swagger',
|
|
45
|
+
import: 'swagger',
|
|
46
|
+
feature: 'swagger()',
|
|
47
|
+
description: 'Swagger/OpenAPI documentation at /docs',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
async execute(
|
|
52
|
+
args: string[],
|
|
53
|
+
options: Record<string, string | boolean>
|
|
54
|
+
): Promise<void> {
|
|
55
|
+
if (args.length < 1) {
|
|
56
|
+
this.showUsage();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const [plugin] = args;
|
|
61
|
+
|
|
62
|
+
if (!this.validPlugins.includes(plugin as PluginType)) {
|
|
63
|
+
this.logger.error(`Invalid plugin: ${plugin}`);
|
|
64
|
+
this.logger.info(`Valid plugins: ${this.validPlugins.join(', ')}`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const entryPath = (options.path as string) || 'src/index.ts';
|
|
69
|
+
await this.addPlugin(plugin as PluginType, entryPath);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private async addPlugin(plugin: PluginType, entryPath: string): Promise<void> {
|
|
73
|
+
const fullPath = FileSystem.joinPath(process.cwd(), entryPath);
|
|
74
|
+
const config = this.pluginConfigs[plugin];
|
|
75
|
+
|
|
76
|
+
// Check if entry file exists
|
|
77
|
+
if (!(await FileSystem.exists(fullPath))) {
|
|
78
|
+
this.logger.error(`Entry file not found: ${fullPath}`);
|
|
79
|
+
this.logger.info('Use --path to specify your entry file');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Read current file
|
|
84
|
+
let content = await FileSystem.readFile(fullPath);
|
|
85
|
+
|
|
86
|
+
// Check if plugin is already added
|
|
87
|
+
if (content.includes(`app.feature(${config.feature})`)) {
|
|
88
|
+
this.logger.info(`Plugin "${plugin}" is already added to your project`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Check if import already exists
|
|
93
|
+
const importRegex = new RegExp(`import\\s*{([^}]*)}\\s*from\\s*['"]@engjts/nexus['"]`);
|
|
94
|
+
const importMatch = content.match(importRegex);
|
|
95
|
+
|
|
96
|
+
if (importMatch) {
|
|
97
|
+
const currentImports = importMatch[1];
|
|
98
|
+
if (!currentImports.includes(config.import)) {
|
|
99
|
+
// Add to existing import
|
|
100
|
+
const newImports = currentImports.trim() + ', ' + config.import;
|
|
101
|
+
content = content.replace(importRegex, `import {${newImports}} from '@engjts/nexus'`);
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
// Add new import at the top
|
|
105
|
+
content = `import { ${config.import} } from '@engjts/nexus';\n${content}`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Find where to add app.feature()
|
|
109
|
+
// Look for existing app.feature() calls or app.use() calls
|
|
110
|
+
const featurePattern = /app\.feature\([^)]+\);?\n?/g;
|
|
111
|
+
const usePattern = /app\.use\([^)]+\);?\n?/;
|
|
112
|
+
const listenPattern = /app\.listen\(/;
|
|
113
|
+
|
|
114
|
+
let insertPosition = -1;
|
|
115
|
+
let insertText = `app.feature(${config.feature});\n`;
|
|
116
|
+
|
|
117
|
+
// Find last app.feature() call
|
|
118
|
+
let lastFeatureMatch: RegExpExecArray | null = null;
|
|
119
|
+
let match;
|
|
120
|
+
while ((match = featurePattern.exec(content)) !== null) {
|
|
121
|
+
lastFeatureMatch = match;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (lastFeatureMatch) {
|
|
125
|
+
// Insert after last feature
|
|
126
|
+
insertPosition = lastFeatureMatch.index + lastFeatureMatch[0].length;
|
|
127
|
+
} else {
|
|
128
|
+
// Find app.use() or app.listen()
|
|
129
|
+
const useMatch = content.match(usePattern);
|
|
130
|
+
const listenMatch = content.match(listenPattern);
|
|
131
|
+
|
|
132
|
+
if (useMatch && useMatch.index !== undefined) {
|
|
133
|
+
// Insert before first app.use()
|
|
134
|
+
insertPosition = useMatch.index;
|
|
135
|
+
insertText = `// Features\napp.feature(${config.feature});\n\n`;
|
|
136
|
+
} else if (listenMatch && listenMatch.index !== undefined) {
|
|
137
|
+
// Insert before app.listen()
|
|
138
|
+
insertPosition = listenMatch.index;
|
|
139
|
+
insertText = `// Features\napp.feature(${config.feature});\n\n`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (insertPosition === -1) {
|
|
144
|
+
this.logger.error('Could not find a suitable location to add the plugin');
|
|
145
|
+
this.logger.info('Please add manually: app.feature(' + config.feature + ')');
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Insert the feature call
|
|
150
|
+
content = content.slice(0, insertPosition) + insertText + content.slice(insertPosition);
|
|
151
|
+
|
|
152
|
+
// Write back
|
|
153
|
+
await FileSystem.writeFile(fullPath, content);
|
|
154
|
+
|
|
155
|
+
this.logger.success(`Added "${plugin}" plugin to your project`);
|
|
156
|
+
this.logger.info(` ${config.description}`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private showUsage(): void {
|
|
160
|
+
console.log(`
|
|
161
|
+
${this.logger.colors.bright}Usage:${this.logger.colors.reset} nexus add <plugin> [options]
|
|
162
|
+
|
|
163
|
+
${this.logger.colors.bright}Plugins:${this.logger.colors.reset}
|
|
164
|
+
playground Add interactive API playground
|
|
165
|
+
postman Add Postman collection export
|
|
166
|
+
swagger Add Swagger/OpenAPI documentation
|
|
167
|
+
|
|
168
|
+
${this.logger.colors.bright}Examples:${this.logger.colors.reset}
|
|
169
|
+
nexus add swagger
|
|
170
|
+
nexus add playground
|
|
171
|
+
nexus add postman
|
|
172
|
+
nexus add swagger --path src/app.ts
|
|
173
|
+
|
|
174
|
+
${this.logger.colors.bright}Options:${this.logger.colors.reset}
|
|
175
|
+
--path, -p Path to entry file (default: src/index.ts)
|
|
176
|
+
`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -3,7 +3,7 @@ import { Logger } from '../utils/logger';
|
|
|
3
3
|
import { FileSystem } from '../utils/file-system';
|
|
4
4
|
import { GeneratorTemplates } from '../templates/generators';
|
|
5
5
|
|
|
6
|
-
type GeneratorType = 'route' | 'middleware' | 'controller' | 'service' | 'model' | 'validator';
|
|
6
|
+
type GeneratorType = 'route' | 'route-class' | 'middleware' | 'controller' | 'service' | 'model' | 'validator';
|
|
7
7
|
|
|
8
8
|
export class GenerateCommand implements Command {
|
|
9
9
|
name = 'generate';
|
|
@@ -24,7 +24,7 @@ export class GenerateCommand implements Command {
|
|
|
24
24
|
];
|
|
25
25
|
|
|
26
26
|
private logger = new Logger();
|
|
27
|
-
private validTypes: GeneratorType[] = ['route', 'middleware', 'controller', 'service', 'model', 'validator'];
|
|
27
|
+
private validTypes: GeneratorType[] = ['route', 'route-class', 'middleware', 'controller', 'service', 'model', 'validator'];
|
|
28
28
|
|
|
29
29
|
async execute(
|
|
30
30
|
args: string[],
|
|
@@ -76,7 +76,8 @@ export class GenerateCommand implements Command {
|
|
|
76
76
|
${this.logger.colors.bright}Usage:${this.logger.colors.reset} nexus generate <type> <name> [options]
|
|
77
77
|
|
|
78
78
|
${this.logger.colors.bright}Types:${this.logger.colors.reset}
|
|
79
|
-
route Generate a route handler
|
|
79
|
+
route Generate a function-based route handler
|
|
80
|
+
route-class Generate a class-based route (with meta, schema, onBefore)
|
|
80
81
|
middleware Generate a middleware
|
|
81
82
|
controller Generate a controller class
|
|
82
83
|
service Generate a service class
|
|
@@ -85,6 +86,7 @@ ${this.logger.colors.bright}Types:${this.logger.colors.reset}
|
|
|
85
86
|
|
|
86
87
|
${this.logger.colors.bright}Examples:${this.logger.colors.reset}
|
|
87
88
|
nexus generate route users
|
|
89
|
+
nexus generate route-class users
|
|
88
90
|
nexus generate controller UserController
|
|
89
91
|
nexus generate middleware auth
|
|
90
92
|
nexus generate route products --methods get,post,put,delete
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type GeneratorType = 'route' | 'middleware' | 'controller' | 'service' | 'model' | 'validator';
|
|
1
|
+
type GeneratorType = 'route' | 'route-class' | 'middleware' | 'controller' | 'service' | 'model' | 'validator';
|
|
2
2
|
|
|
3
3
|
interface GeneratorResult {
|
|
4
4
|
filePath: string;
|
|
@@ -15,6 +15,8 @@ export class GeneratorTemplates {
|
|
|
15
15
|
switch (type) {
|
|
16
16
|
case 'route':
|
|
17
17
|
return this.generateRoute(name, options.methods);
|
|
18
|
+
case 'route-class':
|
|
19
|
+
return this.generateRouteClass(name, options.methods);
|
|
18
20
|
case 'middleware':
|
|
19
21
|
return this.generateMiddleware(name);
|
|
20
22
|
case 'controller':
|
|
@@ -49,9 +51,9 @@ export class GeneratorTemplates {
|
|
|
49
51
|
return `
|
|
50
52
|
// ${method.toUpperCase()} /${name}
|
|
51
53
|
${routeName}Routes.${method}('/', async (ctx) => {
|
|
52
|
-
return
|
|
54
|
+
return {
|
|
53
55
|
message: '${method.toUpperCase()} /${name}',
|
|
54
|
-
}
|
|
56
|
+
};
|
|
55
57
|
});`;
|
|
56
58
|
})
|
|
57
59
|
.join('\n');
|
|
@@ -68,6 +70,51 @@ ${routeHandlers}
|
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
72
|
|
|
73
|
+
private generateRouteClass(name: string, methods: string[]): GeneratorResult {
|
|
74
|
+
const className = this.toPascalCase(name);
|
|
75
|
+
const baseName = name.toLowerCase();
|
|
76
|
+
const method = methods[0] || 'get';
|
|
77
|
+
|
|
78
|
+
const content = `import { Route, Context, z } from '@engjts/nexus';
|
|
79
|
+
|
|
80
|
+
export class ${className}Route extends Route {
|
|
81
|
+
pathName = '/${baseName}';
|
|
82
|
+
|
|
83
|
+
meta() {
|
|
84
|
+
return {
|
|
85
|
+
summary: '${className} route',
|
|
86
|
+
description: '${className} route description',
|
|
87
|
+
tags: ['${className}'],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
schema() {
|
|
92
|
+
return {
|
|
93
|
+
// params: z.object({}),
|
|
94
|
+
// query: z.object({}),
|
|
95
|
+
// body: z.object({}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async onBefore(ctx: Context) {
|
|
100
|
+
// Hook sebelum handler
|
|
101
|
+
// Return value untuk skip handler dan langsung return response
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async handler(ctx: Context) {
|
|
105
|
+
return {
|
|
106
|
+
message: '${method.toUpperCase()} /${baseName}',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
`;
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
filePath: `src/routes/${name}.ts`,
|
|
114
|
+
content,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
71
118
|
private generateMiddleware(name: string): GeneratorResult {
|
|
72
119
|
const middlewareName = this.toCamelCase(name);
|
|
73
120
|
|
|
@@ -61,12 +61,14 @@ export class ProjectTemplates {
|
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
const dependencies: Record<string, string> = {
|
|
64
|
-
'@engjts/nexus': '^0.1.
|
|
64
|
+
'@engjts/nexus': '^0.1.3',
|
|
65
65
|
zod: '^3.22.4',
|
|
66
|
+
ws: '^8.16.0',
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
const devDependencies: Record<string, string> = {
|
|
69
70
|
'@types/node': '^20.10.0',
|
|
71
|
+
'@types/ws': '^8.18.1',
|
|
70
72
|
typescript: '^5.3.3',
|
|
71
73
|
tsx: '^4.7.0',
|
|
72
74
|
};
|
|
@@ -80,7 +82,7 @@ export class ProjectTemplates {
|
|
|
80
82
|
return JSON.stringify(
|
|
81
83
|
{
|
|
82
84
|
name: this.projectName,
|
|
83
|
-
version: '1.0
|
|
85
|
+
version: '0.1.0',
|
|
84
86
|
description: `${this.projectName} - Powered by Nexus`,
|
|
85
87
|
main: 'dist/index.js',
|
|
86
88
|
scripts,
|