@engjts/nexus 0.1.4 → 0.1.5

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.
@@ -9,10 +9,10 @@
9
9
  * const app = createApp();
10
10
  *
11
11
  * // Zero config
12
- * app.feature(postman());
12
+ * app.plugin(postman());
13
13
  *
14
14
  * // With config
15
- * app.feature(postman({
15
+ * app.plugin(postman({
16
16
  * path: '/postman',
17
17
  * name: 'My API',
18
18
  * baseUrl: 'http://localhost:3000'
@@ -10,10 +10,10 @@
10
10
  * const app = createApp();
11
11
  *
12
12
  * // Zero config
13
- * app.feature(postman());
13
+ * app.plugin(postman());
14
14
  *
15
15
  * // With config
16
- * app.feature(postman({
16
+ * app.plugin(postman({
17
17
  * path: '/postman',
18
18
  * name: 'My API',
19
19
  * baseUrl: 'http://localhost:3000'
@@ -10,13 +10,13 @@
10
10
  * const app = createApp();
11
11
  *
12
12
  * // Basic usage - serve from ./public
13
- * app.feature(serveStatic());
13
+ * app.plugin(serveStatic());
14
14
  *
15
15
  * // Custom directory
16
- * app.feature(serveStatic({ root: './assets' }));
16
+ * app.plugin(serveStatic({ root: './assets' }));
17
17
  *
18
18
  * // With prefix
19
- * app.feature(serveStatic({
19
+ * app.plugin(serveStatic({
20
20
  * root: './public',
21
21
  * prefix: '/static' // /static/image.png → ./public/image.png
22
22
  * }));
@@ -11,13 +11,13 @@
11
11
  * const app = createApp();
12
12
  *
13
13
  * // Basic usage - serve from ./public
14
- * app.feature(serveStatic());
14
+ * app.plugin(serveStatic());
15
15
  *
16
16
  * // Custom directory
17
- * app.feature(serveStatic({ root: './assets' }));
17
+ * app.plugin(serveStatic({ root: './assets' }));
18
18
  *
19
19
  * // With prefix
20
- * app.feature(serveStatic({
20
+ * app.plugin(serveStatic({
21
21
  * root: './public',
22
22
  * prefix: '/static' // /static/image.png → ./public/image.png
23
23
  * }));
@@ -4,8 +4,8 @@ import { Plugin } from '../../core/types';
4
4
  *
5
5
  * @example
6
6
  * ```typescript
7
- * app.feature(publicDir()); // ./public
8
- * app.feature(publicDir('./assets')); // ./assets
7
+ * app.plugin(publicDir()); // ./public
8
+ * app.plugin(publicDir('./assets')); // ./assets
9
9
  * ```
10
10
  */
11
11
  export declare function publicDir(root?: string): Plugin;
@@ -7,8 +7,8 @@ const serveStatic_1 = require("./serveStatic");
7
7
  *
8
8
  * @example
9
9
  * ```typescript
10
- * app.feature(publicDir()); // ./public
11
- * app.feature(publicDir('./assets')); // ./assets
10
+ * app.plugin(publicDir()); // ./public
11
+ * app.plugin(publicDir('./assets')); // ./assets
12
12
  * ```
13
13
  */
14
14
  function publicDir(root = './public') {
@@ -5,8 +5,8 @@ import { Plugin } from '../../core/types';
5
5
  *
6
6
  * @example
7
7
  * ```typescript
8
- * app.feature(spa()); // SPA from ./public
9
- * app.feature(spa('./dist')); // SPA from ./dist
8
+ * app.plugin(spa()); // SPA from ./public
9
+ * app.plugin(spa('./dist')); // SPA from ./dist
10
10
  * ```
11
11
  */
12
12
  export declare function spa(root?: string): Plugin;
@@ -8,8 +8,8 @@ const serveStatic_1 = require("./serveStatic");
8
8
  *
9
9
  * @example
10
10
  * ```typescript
11
- * app.feature(spa()); // SPA from ./public
12
- * app.feature(spa('./dist')); // SPA from ./dist
11
+ * app.plugin(spa()); // SPA from ./public
12
+ * app.plugin(spa('./dist')); // SPA from ./dist
13
13
  * ```
14
14
  */
15
15
  function spa(root = './public') {
@@ -9,10 +9,10 @@
9
9
  * const app = createApp();
10
10
  *
11
11
  * // Zero config - just works!
12
- * app.feature(swagger());
12
+ * app.plugin(swagger());
13
13
  *
14
14
  * // With config
15
- * app.feature(swagger({
15
+ * app.plugin(swagger({
16
16
  * path: '/docs',
17
17
  * info: { title: 'My API', version: '1.0.0' }
18
18
  * }));
@@ -10,10 +10,10 @@
10
10
  * const app = createApp();
11
11
  *
12
12
  * // Zero config - just works!
13
- * app.feature(swagger());
13
+ * app.plugin(swagger());
14
14
  *
15
15
  * // With config
16
- * app.feature(swagger({
16
+ * app.plugin(swagger({
17
17
  * path: '/docs',
18
18
  * info: { title: 'My API', version: '1.0.0' }
19
19
  * }));
@@ -6,10 +6,10 @@ import { SwaggerConfig } from './types';
6
6
  * @example
7
7
  * ```typescript
8
8
  * // Minimal setup - auto-detects everything
9
- * app.feature(swagger());
9
+ * app.plugin(swagger());
10
10
  *
11
11
  * // With custom info
12
- * app.feature(swagger({
12
+ * app.plugin(swagger({
13
13
  * info: {
14
14
  * title: 'My Awesome API',
15
15
  * version: '2.0.0',
@@ -18,7 +18,7 @@ import { SwaggerConfig } from './types';
18
18
  * }));
19
19
  *
20
20
  * // Full configuration
21
- * app.feature(swagger({
21
+ * app.plugin(swagger({
22
22
  * path: '/api-docs',
23
23
  * specPath: '/swagger.json',
24
24
  * theme: 'dark',
@@ -12,10 +12,10 @@ const generateSpec_1 = require("./generateSpec");
12
12
  * @example
13
13
  * ```typescript
14
14
  * // Minimal setup - auto-detects everything
15
- * app.feature(swagger());
15
+ * app.plugin(swagger());
16
16
  *
17
17
  * // With custom info
18
- * app.feature(swagger({
18
+ * app.plugin(swagger({
19
19
  * info: {
20
20
  * title: 'My Awesome API',
21
21
  * version: '2.0.0',
@@ -24,7 +24,7 @@ const generateSpec_1 = require("./generateSpec");
24
24
  * }));
25
25
  *
26
26
  * // Full configuration
27
- * app.feature(swagger({
27
+ * app.plugin(swagger({
28
28
  * path: '/api-docs',
29
29
  * specPath: '/swagger.json',
30
30
  * theme: 'dark',
@@ -21,19 +21,19 @@ class AddCommand {
21
21
  playground: {
22
22
  name: 'playground',
23
23
  import: 'playground',
24
- feature: 'playground()',
24
+ feature: 'plugin(playground())',
25
25
  description: 'Interactive API playground at /playground',
26
26
  },
27
27
  postman: {
28
28
  name: 'postman',
29
29
  import: 'postman',
30
- feature: 'postman()',
30
+ feature: 'plugin(postman())',
31
31
  description: 'Postman collection export at /postman',
32
32
  },
33
33
  swagger: {
34
34
  name: 'swagger',
35
35
  import: 'swagger',
36
- feature: 'swagger()',
36
+ feature: 'plugin(swagger())',
37
37
  description: 'Swagger/OpenAPI documentation at /docs',
38
38
  },
39
39
  };
@@ -63,7 +63,7 @@ class AddCommand {
63
63
  // Read current file
64
64
  let content = await file_system_1.FileSystem.readFile(fullPath);
65
65
  // Check if plugin is already added
66
- if (content.includes(`app.feature(${config.feature})`)) {
66
+ if (content.includes(`app.plugin(${config.feature})`)) {
67
67
  this.logger.info(`Plugin "${plugin}" is already added to your project`);
68
68
  return;
69
69
  }
@@ -82,22 +82,22 @@ class AddCommand {
82
82
  // Add new import at the top
83
83
  content = `import { ${config.import} } from '@engjts/nexus';\n${content}`;
84
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;
85
+ // Find where to add app.plugin()
86
+ // Look for existing app.plugin() calls or app.use() calls
87
+ const pluginPattern = /app\.plugin\([^)]+\);?\n?/g;
88
88
  const usePattern = /app\.use\([^)]+\);?\n?/;
89
89
  const listenPattern = /app\.listen\(/;
90
90
  let insertPosition = -1;
91
- let insertText = `app.feature(${config.feature});\n`;
92
- // Find last app.feature() call
93
- let lastFeatureMatch = null;
91
+ let insertText = `app.plugin(${config.feature});\n`;
92
+ // Find last app.plugin() call
93
+ let lastPluginMatch = null;
94
94
  let match;
95
- while ((match = featurePattern.exec(content)) !== null) {
96
- lastFeatureMatch = match;
95
+ while ((match = pluginPattern.exec(content)) !== null) {
96
+ lastPluginMatch = match;
97
97
  }
98
- if (lastFeatureMatch) {
99
- // Insert after last feature
100
- insertPosition = lastFeatureMatch.index + lastFeatureMatch[0].length;
98
+ if (lastPluginMatch) {
99
+ // Insert after last plugin
100
+ insertPosition = lastPluginMatch.index + lastPluginMatch[0].length;
101
101
  }
102
102
  else {
103
103
  // Find app.use() or app.listen()
@@ -106,20 +106,20 @@ class AddCommand {
106
106
  if (useMatch && useMatch.index !== undefined) {
107
107
  // Insert before first app.use()
108
108
  insertPosition = useMatch.index;
109
- insertText = `// Features\napp.feature(${config.feature});\n\n`;
109
+ insertText = `// Plugins\napp.plugin(${config.feature});\n\n`;
110
110
  }
111
111
  else if (listenMatch && listenMatch.index !== undefined) {
112
112
  // Insert before app.listen()
113
113
  insertPosition = listenMatch.index;
114
- insertText = `// Features\napp.feature(${config.feature});\n\n`;
114
+ insertText = `// Plugins\napp.plugin(${config.feature});\n\n`;
115
115
  }
116
116
  }
117
117
  if (insertPosition === -1) {
118
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 + ')');
119
+ this.logger.info('Please add manually: app.plugin(' + config.feature + ')');
120
120
  return;
121
121
  }
122
- // Insert the feature call
122
+ // Insert the plugin call
123
123
  content = content.slice(0, insertPosition) + insertText + content.slice(insertPosition);
124
124
  // Write back
125
125
  await file_system_1.FileSystem.writeFile(fullPath, content);
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
@@ -642,10 +642,10 @@ import { registerRoutes } from './routes';
642
642
 
643
643
  const app = createApp({ debug: true });
644
644
 
645
- // Features
646
- app.feature(swagger());
647
- app.feature(postman());
648
- app.feature(playground());
645
+ // Plugins
646
+ app.plugin(swagger());
647
+ app.plugin(postman());
648
+ app.plugin(playground());
649
649
 
650
650
  // Register all routes
651
651
  registerRoutes(app);
@@ -826,9 +826,9 @@ Class-based routes **otomatis terintegrasi** dengan:
826
826
  ```typescript
827
827
  const app = createApp();
828
828
 
829
- app.feature(swagger());
830
- app.feature(postman());
831
- app.feature(playground());
829
+ app.plugin(swagger());
830
+ app.plugin(postman());
831
+ app.plugin(playground());
832
832
 
833
833
  // Routes akan muncul di Swagger, Postman, dan Playground
834
834
  app.post(new RegisterRoute());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@engjts/nexus",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Nexus framework async-first web framework with type-safety and security built-in",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,10 +9,10 @@
9
9
  * const app = createApp();
10
10
  *
11
11
  * // Zero config
12
- * app.feature(postman());
12
+ * app.plugin(postman());
13
13
  *
14
14
  * // With config
15
- * app.feature(postman({
15
+ * app.plugin(postman({
16
16
  * path: '/postman',
17
17
  * name: 'My API',
18
18
  * baseUrl: 'http://localhost:3000'
@@ -10,13 +10,13 @@
10
10
  * const app = createApp();
11
11
  *
12
12
  * // Basic usage - serve from ./public
13
- * app.feature(serveStatic());
13
+ * app.plugin(serveStatic());
14
14
  *
15
15
  * // Custom directory
16
- * app.feature(serveStatic({ root: './assets' }));
16
+ * app.plugin(serveStatic({ root: './assets' }));
17
17
  *
18
18
  * // With prefix
19
- * app.feature(serveStatic({
19
+ * app.plugin(serveStatic({
20
20
  * root: './public',
21
21
  * prefix: '/static' // /static/image.png → ./public/image.png
22
22
  * }));
@@ -6,8 +6,8 @@ import { serveStatic } from './serveStatic';
6
6
  *
7
7
  * @example
8
8
  * ```typescript
9
- * app.feature(publicDir()); // ./public
10
- * app.feature(publicDir('./assets')); // ./assets
9
+ * app.plugin(publicDir()); // ./public
10
+ * app.plugin(publicDir('./assets')); // ./assets
11
11
  * ```
12
12
  */
13
13
 
@@ -7,8 +7,8 @@ import { serveStatic } from './serveStatic';
7
7
  *
8
8
  * @example
9
9
  * ```typescript
10
- * app.feature(spa()); // SPA from ./public
11
- * app.feature(spa('./dist')); // SPA from ./dist
10
+ * app.plugin(spa()); // SPA from ./public
11
+ * app.plugin(spa('./dist')); // SPA from ./dist
12
12
  * ```
13
13
  */
14
14
 
@@ -9,10 +9,10 @@
9
9
  * const app = createApp();
10
10
  *
11
11
  * // Zero config - just works!
12
- * app.feature(swagger());
12
+ * app.plugin(swagger());
13
13
  *
14
14
  * // With config
15
- * app.feature(swagger({
15
+ * app.plugin(swagger({
16
16
  * path: '/docs',
17
17
  * info: { title: 'My API', version: '1.0.0' }
18
18
  * }));
@@ -14,10 +14,10 @@ import { SwaggerConfig, StoredRoute, OpenAPISchema, SwaggerApplication } from '.
14
14
  * @example
15
15
  * ```typescript
16
16
  * // Minimal setup - auto-detects everything
17
- * app.feature(swagger());
17
+ * app.plugin(swagger());
18
18
  *
19
19
  * // With custom info
20
- * app.feature(swagger({
20
+ * app.plugin(swagger({
21
21
  * info: {
22
22
  * title: 'My Awesome API',
23
23
  * version: '2.0.0',
@@ -26,7 +26,7 @@ import { SwaggerConfig, StoredRoute, OpenAPISchema, SwaggerApplication } from '.
26
26
  * }));
27
27
  *
28
28
  * // Full configuration
29
- * app.feature(swagger({
29
+ * app.plugin(swagger({
30
30
  * path: '/api-docs',
31
31
  * specPath: '/swagger.json',
32
32
  * theme: 'dark',
@@ -31,19 +31,19 @@ export class AddCommand implements Command {
31
31
  playground: {
32
32
  name: 'playground',
33
33
  import: 'playground',
34
- feature: 'playground()',
34
+ feature: 'plugin(playground())',
35
35
  description: 'Interactive API playground at /playground',
36
36
  },
37
37
  postman: {
38
38
  name: 'postman',
39
39
  import: 'postman',
40
- feature: 'postman()',
40
+ feature: 'plugin(postman())',
41
41
  description: 'Postman collection export at /postman',
42
42
  },
43
43
  swagger: {
44
44
  name: 'swagger',
45
45
  import: 'swagger',
46
- feature: 'swagger()',
46
+ feature: 'plugin(swagger())',
47
47
  description: 'Swagger/OpenAPI documentation at /docs',
48
48
  },
49
49
  };
@@ -84,7 +84,7 @@ export class AddCommand implements Command {
84
84
  let content = await FileSystem.readFile(fullPath);
85
85
 
86
86
  // Check if plugin is already added
87
- if (content.includes(`app.feature(${config.feature})`)) {
87
+ if (content.includes(`app.plugin(${config.feature})`)) {
88
88
  this.logger.info(`Plugin "${plugin}" is already added to your project`);
89
89
  return;
90
90
  }
@@ -105,25 +105,25 @@ export class AddCommand implements Command {
105
105
  content = `import { ${config.import} } from '@engjts/nexus';\n${content}`;
106
106
  }
107
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;
108
+ // Find where to add app.plugin()
109
+ // Look for existing app.plugin() calls or app.use() calls
110
+ const pluginPattern = /app\.plugin\([^)]+\);?\n?/g;
111
111
  const usePattern = /app\.use\([^)]+\);?\n?/;
112
112
  const listenPattern = /app\.listen\(/;
113
113
 
114
114
  let insertPosition = -1;
115
- let insertText = `app.feature(${config.feature});\n`;
115
+ let insertText = `app.plugin(${config.feature});\n`;
116
116
 
117
- // Find last app.feature() call
118
- let lastFeatureMatch: RegExpExecArray | null = null;
117
+ // Find last app.plugin() call
118
+ let lastPluginMatch: RegExpExecArray | null = null;
119
119
  let match;
120
- while ((match = featurePattern.exec(content)) !== null) {
121
- lastFeatureMatch = match;
120
+ while ((match = pluginPattern.exec(content)) !== null) {
121
+ lastPluginMatch = match;
122
122
  }
123
123
 
124
- if (lastFeatureMatch) {
125
- // Insert after last feature
126
- insertPosition = lastFeatureMatch.index + lastFeatureMatch[0].length;
124
+ if (lastPluginMatch) {
125
+ // Insert after last plugin
126
+ insertPosition = lastPluginMatch.index + lastPluginMatch[0].length;
127
127
  } else {
128
128
  // Find app.use() or app.listen()
129
129
  const useMatch = content.match(usePattern);
@@ -132,21 +132,21 @@ export class AddCommand implements Command {
132
132
  if (useMatch && useMatch.index !== undefined) {
133
133
  // Insert before first app.use()
134
134
  insertPosition = useMatch.index;
135
- insertText = `// Features\napp.feature(${config.feature});\n\n`;
135
+ insertText = `// Plugins\napp.plugin(${config.feature});\n\n`;
136
136
  } else if (listenMatch && listenMatch.index !== undefined) {
137
137
  // Insert before app.listen()
138
138
  insertPosition = listenMatch.index;
139
- insertText = `// Features\napp.feature(${config.feature});\n\n`;
139
+ insertText = `// Plugins\napp.plugin(${config.feature});\n\n`;
140
140
  }
141
141
  }
142
142
 
143
143
  if (insertPosition === -1) {
144
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 + ')');
145
+ this.logger.info('Please add manually: app.plugin(' + config.feature + ')');
146
146
  return;
147
147
  }
148
148
 
149
- // Insert the feature call
149
+ // Insert the plugin call
150
150
  content = content.slice(0, insertPosition) + insertText + content.slice(insertPosition);
151
151
 
152
152
  // Write back