bytekit 2.1.1 → 2.2.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.
Files changed (72) hide show
  1. package/README.md +66 -2
  2. package/dist/cli/ddd-boilerplate.d.ts +34 -0
  3. package/dist/cli/ddd-boilerplate.d.ts.map +1 -0
  4. package/dist/cli/ddd-boilerplate.js +339 -0
  5. package/dist/cli/ddd-boilerplate.js.map +1 -0
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +69 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/swagger-generator.d.ts +2 -1
  10. package/dist/cli/swagger-generator.d.ts.map +1 -1
  11. package/dist/cli/swagger-generator.js +1 -0
  12. package/dist/cli/swagger-generator.js.map +1 -1
  13. package/dist/cli/type-generator.d.ts +2 -1
  14. package/dist/cli/type-generator.d.ts.map +1 -1
  15. package/dist/utils/async/debounce.d.ts.map +1 -1
  16. package/dist/utils/async/debounce.js.map +1 -1
  17. package/dist/utils/async/index.d.ts +8 -0
  18. package/dist/utils/async/index.d.ts.map +1 -1
  19. package/dist/utils/async/index.js +4 -0
  20. package/dist/utils/async/index.js.map +1 -1
  21. package/dist/utils/async/pipeline.d.ts +164 -0
  22. package/dist/utils/async/pipeline.d.ts.map +1 -0
  23. package/dist/utils/async/pipeline.js +154 -0
  24. package/dist/utils/async/pipeline.js.map +1 -0
  25. package/dist/utils/async/promise-pool.d.ts +59 -0
  26. package/dist/utils/async/promise-pool.d.ts.map +1 -0
  27. package/dist/utils/async/promise-pool.js +130 -0
  28. package/dist/utils/async/promise-pool.js.map +1 -0
  29. package/dist/utils/async/request-batcher.d.ts +82 -0
  30. package/dist/utils/async/request-batcher.d.ts.map +1 -0
  31. package/dist/utils/async/request-batcher.js +178 -0
  32. package/dist/utils/async/request-batcher.js.map +1 -0
  33. package/dist/utils/async/request-queue.d.ts +115 -0
  34. package/dist/utils/async/request-queue.d.ts.map +1 -0
  35. package/dist/utils/async/request-queue.js +236 -0
  36. package/dist/utils/async/request-queue.js.map +1 -0
  37. package/dist/utils/async/sequential.d.ts.map +1 -1
  38. package/dist/utils/async/sequential.js.map +1 -1
  39. package/dist/utils/async/throttle.d.ts.map +1 -1
  40. package/dist/utils/async/throttle.js.map +1 -1
  41. package/dist/utils/async/timeout.d.ts.map +1 -1
  42. package/dist/utils/async/timeout.js +1 -0
  43. package/dist/utils/async/timeout.js.map +1 -1
  44. package/dist/utils/async/types.d.ts.map +1 -1
  45. package/dist/utils/async/types.js +1 -0
  46. package/dist/utils/async/types.js.map +1 -1
  47. package/dist/utils/core/ApiClient.d.ts +26 -4
  48. package/dist/utils/core/ApiClient.d.ts.map +1 -1
  49. package/dist/utils/core/ApiClient.js +52 -3
  50. package/dist/utils/core/ApiClient.js.map +1 -1
  51. package/dist/utils/core/SchemaAdapter.d.ts.map +1 -1
  52. package/dist/utils/core/SchemaAdapter.js.map +1 -1
  53. package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -1
  54. package/dist/utils/helpers/CryptoUtils.js +1 -0
  55. package/dist/utils/helpers/CryptoUtils.js.map +1 -1
  56. package/dist/utils/helpers/FileUploadHelper.d.ts +68 -1
  57. package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -1
  58. package/dist/utils/helpers/FileUploadHelper.js +72 -19
  59. package/dist/utils/helpers/FileUploadHelper.js.map +1 -1
  60. package/dist/utils/helpers/PollingHelper.js +1 -1
  61. package/dist/utils/helpers/PollingHelper.js.map +1 -1
  62. package/dist/utils/helpers/StreamingHelper.d.ts +82 -0
  63. package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -1
  64. package/dist/utils/helpers/StreamingHelper.js +186 -0
  65. package/dist/utils/helpers/StreamingHelper.js.map +1 -1
  66. package/dist/utils/helpers/UrlHelper.d.ts.map +1 -1
  67. package/dist/utils/helpers/UrlHelper.js.map +1 -1
  68. package/dist/utils/helpers/WebSocketHelper.d.ts +30 -0
  69. package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -1
  70. package/dist/utils/helpers/WebSocketHelper.js +111 -3
  71. package/dist/utils/helpers/WebSocketHelper.js.map +1 -1
  72. package/package.json +5 -5
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # bytekit
1
+ # Bytekit
2
2
 
3
3
  > **Previously known as:** `@sebamar88/utils` (v0.1.9 and earlier)
4
4
 
@@ -93,9 +93,71 @@ import { retry, timeout } from "bytekit/async";
93
93
  import { UrlSlugHelper } from "bytekit/url-slug-helper";
94
94
  ```
95
95
 
96
- ## 📚 Core Modules
96
+ ## �️ CLI
97
+
98
+ Bytekit includes a command-line tool for rapid scaffolding directly from your terminal.
99
+
100
+ ### Type Generation from an API Endpoint
101
+
102
+ ```bash
103
+ # Generates src/types/users.ts with a typed interface inferred from the JSON response
104
+ bytekit --type https://api.example.com/users
105
+ ```
106
+
107
+ ### Type Generation from Swagger / OpenAPI
108
+
109
+ ```bash
110
+ # Generates src/types/api-docs.ts with all DTOs from the spec
111
+ bytekit --swagger https://api.example.com/swagger.json
112
+ ```
113
+
114
+ ### DDD Bounded-Context Scaffolding
115
+
116
+ Generate a full **Domain-Driven Design** folder structure with hexagonal ports, entity, repository interface, use cases, and an HTTP adapter that uses `ApiClient`:
117
+
118
+ ```bash
119
+ # Minimal: creates the DDD directory tree + hexagonal port stubs
120
+ bytekit --ddd --domain=Product --port=ProductRepository
121
+
122
+ # Full: also generates entity, repository interface, use cases & HTTP adapter
123
+ bytekit --ddd --domain=Product --port=ProductRepository --actions=create,findById,update,delete
124
+ ```
125
+
126
+ The generated HTTP infrastructure repository always imports `ApiClient` from `bytekit/api-client`, keeping your data layer consistent with the rest of the toolkit.
127
+
128
+ <details>
129
+ <summary>Generated file tree (with <code>--actions</code>)</summary>
130
+
131
+ ```text
132
+ product/
133
+ ├── domain/
134
+ │ ├── entities/ → ProductEntity.ts
135
+ │ ├── value-objects/
136
+ │ ├── aggregates/
137
+ │ ├── events/
138
+ │ ├── repositories/ → IProductRepository.ts
139
+ │ └── services/
140
+ ├── application/
141
+ │ ├── use-cases/ → CreateProductUseCase.ts, FindByIdProductUseCase.ts, …
142
+ │ ├── dto/
143
+ │ └── ports/
144
+ │ ├── inbound/ → product-primary.port.ts
145
+ │ └── outbound/ → product-repository.port.ts
146
+ ├── infrastructure/
147
+ │ ├── persistence/ → HttpProductRepository.ts (uses ApiClient)
148
+ │ └── config/
149
+ └── presentation/
150
+ └── http/
151
+ ├── routes/
152
+ └── controllers/
153
+ ```
154
+
155
+ </details>
156
+
157
+ ## �📚 Core Modules
97
158
 
98
159
  ### 🔧 Networking & Resilience
160
+
99
161
  - **`ApiClient`** - Typed HTTP client with interceptors, retries, and schema validation support.
100
162
  - **`SchemaAdapter`** - Generic adapter to plug your favorite validation library (Zod, Valibot).
101
163
  - **`RetryPolicy` & `CircuitBreaker`** - Prevent failures and handle flaky endpoints.
@@ -103,11 +165,13 @@ import { UrlSlugHelper } from "bytekit/url-slug-helper";
103
165
  - **`RateLimiter`** - Throttle your outbound requests.
104
166
 
105
167
  ### ⚡ Async Toolkit
168
+
106
169
  - Concurrency: **`parallel`**, **`race`**, **`allSettled`**, **`sequential`**.
107
170
  - Execution: **`retry`**, **`debounceAsync`**, **`throttleAsync`**.
108
171
  - Timing: **`sleep`**, **`timeout`**.
109
172
 
110
173
  ### 🛠️ Key Helpers
174
+
111
175
  - **`Logger` & `Profiler`** - Structured logs and performance monitoring.
112
176
  - **`UrlSlugHelper`** - Generate SEO-friendly URL slugs.
113
177
  - **`QueryStringHelper`** - Powerful object-to-query-string serialization.
@@ -0,0 +1,34 @@
1
+ export interface DddBoilerplateOptions {
2
+ /** Bounded context / módulo de dominio (nombre legible o slug). */
3
+ domain: string;
4
+ /**
5
+ * Nombre del puerto secundario (driven): persistencia, APIs externas, mensajería, etc.
6
+ * Se genera como interfaz TypeScript en `application/ports/outbound/`.
7
+ */
8
+ port: string;
9
+ /** Directorio base de salida (por defecto: `./<dominio-slug>`). */
10
+ outDir?: string;
11
+ /**
12
+ * Domain actions to scaffold. For each action a use case class is generated and a method
13
+ * is added to the repository interface and the HTTP infrastructure adapter.
14
+ * Supported: create · findById · findAll · update · patch · delete — plus any custom name.
15
+ */
16
+ actions?: string[];
17
+ }
18
+ /**
19
+ * Normaliza el nombre del dominio a kebab-case para rutas y carpetas.
20
+ */
21
+ export declare function slugifyDomain(domain: string): string;
22
+ /**
23
+ * Convierte un slug kebab-case a identificador PascalCase.
24
+ */
25
+ export declare function pascalFromKebabSlug(slug: string): string;
26
+ /**
27
+ * Crea la estructura de carpetas DDD + interfaces de puertos hexagonales
28
+ * (primario en inbound, secundario en outbound).
29
+ */
30
+ export declare function generateDddBoilerplate(options: DddBoilerplateOptions): Promise<{
31
+ rootDir: string;
32
+ slug: string;
33
+ }>;
34
+ //# sourceMappingURL=ddd-boilerplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddd-boilerplate.d.ts","sourceRoot":"","sources":["../../src/cli/ddd-boilerplate.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IAClC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAwBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAYpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMxD;AAkQD;;;GAGG;AACH,wBAAsB,sBAAsB,CACxC,OAAO,EAAE,qBAAqB,GAC/B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAsJ5C"}
@@ -0,0 +1,339 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const DDD_RELATIVE_DIRS = [
4
+ "domain/entities",
5
+ "domain/value-objects",
6
+ "domain/aggregates",
7
+ "domain/events",
8
+ "domain/repositories",
9
+ "domain/services",
10
+ "application/use-cases",
11
+ "application/dto",
12
+ "application/ports/inbound",
13
+ "application/ports/outbound",
14
+ "infrastructure/persistence",
15
+ "infrastructure/config",
16
+ "presentation/http/routes",
17
+ "presentation/http/controllers",
18
+ ];
19
+ const PORT_DIRS_SKIP_GITKEEP = new Set([
20
+ "application/ports/inbound",
21
+ "application/ports/outbound",
22
+ ]);
23
+ /**
24
+ * Normaliza el nombre del dominio a kebab-case para rutas y carpetas.
25
+ */
26
+ export function slugifyDomain(domain) {
27
+ const trimmed = domain.trim();
28
+ if (!trimmed) {
29
+ return "domain";
30
+ }
31
+ return trimmed
32
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
33
+ .replace(/[\s_]+/g, "-")
34
+ .replace(/[^a-zA-Z0-9-]/g, "-")
35
+ .replace(/-+/g, "-")
36
+ .replace(/^-|-$/g, "")
37
+ .toLowerCase();
38
+ }
39
+ /**
40
+ * Convierte un slug kebab-case a identificador PascalCase.
41
+ */
42
+ export function pascalFromKebabSlug(slug) {
43
+ return slug
44
+ .split("-")
45
+ .filter(Boolean)
46
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
47
+ .join("");
48
+ }
49
+ function inferHttpVerb(action) {
50
+ const a = action.toLowerCase();
51
+ if (/^(create|add|save|insert)/.test(a))
52
+ return "POST";
53
+ if (/^(update|replace)/.test(a))
54
+ return "PUT";
55
+ if (/^patch/.test(a))
56
+ return "PATCH";
57
+ if (/^(delete|remove|destroy)/.test(a))
58
+ return "DELETE";
59
+ return "GET";
60
+ }
61
+ function resolveActionConfig(action, pascal) {
62
+ const verb = inferHttpVerb(action);
63
+ const isList = /all|many|list|search/.test(action.toLowerCase());
64
+ switch (verb) {
65
+ case "POST":
66
+ return {
67
+ action,
68
+ verb,
69
+ params: [{ name: "entity", type: `${pascal}Entity` }],
70
+ returnType: `${pascal}Entity`,
71
+ hasIdSegment: false,
72
+ bodyArg: "entity",
73
+ };
74
+ case "PUT":
75
+ return {
76
+ action,
77
+ verb,
78
+ params: [
79
+ { name: "id", type: "string" },
80
+ { name: "entity", type: `${pascal}Entity` },
81
+ ],
82
+ returnType: `${pascal}Entity`,
83
+ hasIdSegment: true,
84
+ bodyArg: "entity",
85
+ };
86
+ case "PATCH":
87
+ return {
88
+ action,
89
+ verb,
90
+ params: [
91
+ { name: "id", type: "string" },
92
+ { name: "data", type: `Partial<${pascal}EntityProps>` },
93
+ ],
94
+ returnType: `${pascal}Entity`,
95
+ hasIdSegment: true,
96
+ bodyArg: "data",
97
+ };
98
+ case "DELETE":
99
+ return {
100
+ action,
101
+ verb,
102
+ params: [{ name: "id", type: "string" }],
103
+ returnType: "void",
104
+ hasIdSegment: true,
105
+ };
106
+ default: // GET
107
+ return {
108
+ action,
109
+ verb,
110
+ params: isList ? [] : [{ name: "id", type: "string" }],
111
+ returnType: isList
112
+ ? `${pascal}Entity[]`
113
+ : `${pascal}Entity | null`,
114
+ hasIdSegment: !isList,
115
+ };
116
+ }
117
+ }
118
+ // ─── Source generators ────────────────────────────────────────────────────────
119
+ function generateEntitySource(slug, pascal) {
120
+ return `/**
121
+ * Aggregate root entity for the ${pascal} bounded context.
122
+ * Contains core domain invariants — keep business rules here, not in use cases.
123
+ *
124
+ * @generated bytekit --ddd
125
+ */
126
+ export class ${pascal}Entity {
127
+ readonly id: string;
128
+ readonly createdAt: Date;
129
+
130
+ constructor(props: ${pascal}EntityProps) {
131
+ if (!props.id?.trim()) {
132
+ throw new Error("${pascal}Entity: 'id' is required and cannot be empty.");
133
+ }
134
+ this.id = props.id.trim();
135
+ this.createdAt = props.createdAt ?? new Date();
136
+ }
137
+ }
138
+
139
+ /** Constructor properties for {@link ${pascal}Entity}. */
140
+ export interface ${pascal}EntityProps {
141
+ id: string;
142
+ createdAt?: Date;
143
+ }
144
+ `;
145
+ }
146
+ function generateRepoInterfaceSource(slug, pascal, configs) {
147
+ const needsProps = configs.some((c) => c.params.some((p) => p.type.includes("Props")));
148
+ const entityImport = needsProps
149
+ ? `import type { ${pascal}Entity, ${pascal}EntityProps } from "../entities/${slug}.entity.js";`
150
+ : `import type { ${pascal}Entity } from "../entities/${slug}.entity.js";`;
151
+ const methods = configs
152
+ .map((c) => {
153
+ const sig = c.params.map((p) => `${p.name}: ${p.type}`).join(", ");
154
+ return ` ${c.action}(${sig}): Promise<${c.returnType}>;`;
155
+ })
156
+ .join("\n");
157
+ return `${entityImport}
158
+
159
+ /**
160
+ * Outbound port (secondary): persistence and data-access contract for ${pascal}.
161
+ * Domain and application layers depend on this interface — never on its implementations.
162
+ *
163
+ * @generated bytekit --ddd
164
+ */
165
+ export interface I${pascal}Repository {
166
+ ${methods}
167
+ }
168
+ `;
169
+ }
170
+ function generateUseCaseSource(config, slug, pascal) {
171
+ const actionPascal = config.action.charAt(0).toUpperCase() + config.action.slice(1);
172
+ const paramStr = config.params
173
+ .map((p) => `${p.name}: ${p.type}`)
174
+ .join(", ");
175
+ const callArgs = config.params.map((p) => p.name).join(", ");
176
+ const needsEntity = config.params.some((p) => p.type.includes(`${pascal}Entity`)) ||
177
+ config.returnType.includes(`${pascal}Entity`);
178
+ const needsProps = config.params.some((p) => p.type.includes(`${pascal}EntityProps`));
179
+ const namedImports = [
180
+ needsEntity ? `${pascal}Entity` : "",
181
+ needsProps ? `${pascal}EntityProps` : "",
182
+ ]
183
+ .filter(Boolean)
184
+ .join(", ");
185
+ const entityImportLine = namedImports
186
+ ? `import type { ${namedImports} } from "../../domain/entities/${slug}.entity.js";\n`
187
+ : "";
188
+ return `import type { I${pascal}Repository } from "../../domain/repositories/i-${slug}.repository.js";
189
+ ${entityImportLine}
190
+ /**
191
+ * Use case: ${actionPascal} ${pascal}.
192
+ * Orchestrates domain logic without containing it — delegates to the repository port.
193
+ *
194
+ * @generated bytekit --ddd
195
+ */
196
+ export class ${actionPascal}${pascal}UseCase {
197
+ constructor(private readonly repository: I${pascal}Repository) {}
198
+
199
+ async execute(${paramStr}): Promise<${config.returnType}> {
200
+ return this.repository.${config.action}(${callArgs});
201
+ }
202
+ }
203
+ `;
204
+ }
205
+ function generateHttpRepoSource(slug, pascal, configs) {
206
+ const needsProps = configs.some((c) => c.params.some((p) => p.type.includes("Props")));
207
+ const entityImportParts = [
208
+ `${pascal}Entity`,
209
+ needsProps ? `${pascal}EntityProps` : "",
210
+ ]
211
+ .filter(Boolean)
212
+ .join(", ");
213
+ const header = [
214
+ `import { ApiClient } from "bytekit/api-client";`,
215
+ `import type { ${entityImportParts} } from "../../domain/entities/${slug}.entity.js";`,
216
+ `import type { I${pascal}Repository } from "../../domain/repositories/i-${slug}.repository.js";`,
217
+ ].join("\n");
218
+ const methods = configs
219
+ .map((c) => generateHttpMethod(c, slug, pascal))
220
+ .join("\n\n");
221
+ return `${header}
222
+
223
+ /**
224
+ * HTTP adapter: implements {@link I${pascal}Repository} using {@link ApiClient} from bytekit.
225
+ * Lives in the infrastructure layer — domain and application layers must not import this class.
226
+ *
227
+ * @generated bytekit --ddd
228
+ */
229
+ export class Http${pascal}Repository implements I${pascal}Repository {
230
+ constructor(private readonly client: ApiClient) {}
231
+
232
+ ${methods}
233
+ }
234
+ `;
235
+ }
236
+ function generateHttpMethod(c, slug, _pascal) {
237
+ const paramStr = c.params.map((p) => `${p.name}: ${p.type}`).join(", ");
238
+ const urlPath = c.hasIdSegment ? `/${slug}/\${id}` : `/${slug}`;
239
+ const clientUrl = c.hasIdSegment ? `\`${urlPath}\`` : `"${urlPath}"`;
240
+ if (c.verb === "DELETE") {
241
+ return ` async ${c.action}(${paramStr}): Promise<${c.returnType}> {\n await this.client.delete<void>(${clientUrl});\n }`;
242
+ }
243
+ if (c.bodyArg) {
244
+ const method = c.verb.toLowerCase();
245
+ return ` async ${c.action}(${paramStr}): Promise<${c.returnType}> {\n return this.client.${method}<${c.returnType}>(${clientUrl}, ${c.bodyArg});\n }`;
246
+ }
247
+ return ` async ${c.action}(${paramStr}): Promise<${c.returnType}> {\n return this.client.get<${c.returnType}>(${clientUrl});\n }`;
248
+ }
249
+ // ─── Main generator ───────────────────────────────────────────────────────────
250
+ /**
251
+ * Crea la estructura de carpetas DDD + interfaces de puertos hexagonales
252
+ * (primario en inbound, secundario en outbound).
253
+ */
254
+ export async function generateDddBoilerplate(options) {
255
+ const slug = slugifyDomain(options.domain);
256
+ if (!options.domain.trim()) {
257
+ throw new Error("El dominio no puede estar vacío.");
258
+ }
259
+ const portLabel = options.port.trim();
260
+ if (!portLabel) {
261
+ throw new Error("El puerto (interfaz driven/outbound) no puede estar vacío.");
262
+ }
263
+ const rootDir = path.resolve(process.cwd(), options.outDir?.trim() || slug);
264
+ const contextPascal = pascalFromKebabSlug(slug);
265
+ const outboundSlug = slugifyDomain(portLabel);
266
+ const outboundPascal = pascalFromKebabSlug(outboundSlug);
267
+ for (const rel of DDD_RELATIVE_DIRS) {
268
+ await fs.mkdir(path.join(rootDir, rel), { recursive: true });
269
+ }
270
+ for (const rel of DDD_RELATIVE_DIRS) {
271
+ if (PORT_DIRS_SKIP_GITKEEP.has(rel)) {
272
+ continue;
273
+ }
274
+ const gitkeep = path.join(rootDir, rel, ".gitkeep");
275
+ try {
276
+ await fs.writeFile(gitkeep, "", { flag: "wx" });
277
+ }
278
+ catch (e) {
279
+ if (e instanceof Error &&
280
+ "code" in e &&
281
+ e.code === "EEXIST") {
282
+ continue;
283
+ }
284
+ throw e;
285
+ }
286
+ }
287
+ const inboundFile = path.join(rootDir, "application", "ports", "inbound", `${slug}-primary.port.ts`);
288
+ const inboundSource = `/**
289
+ * Puerto primario (driving): contrato por el que el mundo exterior invoca la aplicación
290
+ * (HTTP, CLI, jobs, mensajes, etc.). Los adaptadores de entrada lo implementan o llaman a los casos de uso.
291
+ *
292
+ * Contexto: ${slug}
293
+ * Generado por bytekit --ddd
294
+ */
295
+ export interface ${contextPascal}PrimaryPort {
296
+ // Ej.: firmas que exponen comandos o consultas hacia el dominio / casos de uso
297
+ }
298
+ `;
299
+ const outboundFile = path.join(rootDir, "application", "ports", "outbound", `${outboundSlug}.port.ts`);
300
+ const outboundSource = `/**
301
+ * Puerto secundario (driven): contrato que la aplicación define para hablar con el exterior
302
+ * (persistencia, APIs de terceros, sistema de archivos, colas, etc.).
303
+ * Las implementaciones viven en infrastructure/.
304
+ *
305
+ * Puerto: ${outboundPascal}
306
+ * Contexto: ${slug}
307
+ * Generado por bytekit --ddd
308
+ */
309
+ export interface ${outboundPascal} {
310
+ // Ej.: guardar o recuperar agregados, publicar eventos, llamar a un servicio externo
311
+ }
312
+ `;
313
+ await fs.writeFile(inboundFile, inboundSource, "utf8");
314
+ await fs.writeFile(outboundFile, outboundSource, "utf8");
315
+ // ── DDD full-layer generation (requires --actions) ────────────────────────
316
+ if (options.actions && options.actions.length > 0) {
317
+ const normalizedActions = options.actions
318
+ .map((a) => a.trim())
319
+ .filter(Boolean);
320
+ const configs = normalizedActions.map((a) => resolveActionConfig(a, contextPascal));
321
+ // 1. Entity
322
+ const entityFile = path.join(rootDir, "domain", "entities", `${slug}.entity.ts`);
323
+ await fs.writeFile(entityFile, generateEntitySource(slug, contextPascal), "utf8");
324
+ // 2. Repository interface
325
+ const repoInterfaceFile = path.join(rootDir, "domain", "repositories", `i-${slug}.repository.ts`);
326
+ await fs.writeFile(repoInterfaceFile, generateRepoInterfaceSource(slug, contextPascal, configs), "utf8");
327
+ // 3. Use cases (one file per action)
328
+ for (const config of configs) {
329
+ const actionSlug = slugifyDomain(config.action);
330
+ const useCaseFile = path.join(rootDir, "application", "use-cases", `${actionSlug}-${slug}.use-case.ts`);
331
+ await fs.writeFile(useCaseFile, generateUseCaseSource(config, slug, contextPascal), "utf8");
332
+ }
333
+ // 4. HTTP infrastructure repository
334
+ const httpRepoFile = path.join(rootDir, "infrastructure", "persistence", `http-${slug}.repository.ts`);
335
+ await fs.writeFile(httpRepoFile, generateHttpRepoSource(slug, contextPascal, configs), "utf8");
336
+ }
337
+ return { rootDir, slug };
338
+ }
339
+ //# sourceMappingURL=ddd-boilerplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddd-boilerplate.js","sourceRoot":"","sources":["../../src/cli/ddd-boilerplate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AA4EA;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF1D"}
package/dist/cli/index.js CHANGED
@@ -1,8 +1,50 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
+ import { generateDddBoilerplate } from "./ddd-boilerplate.js";
4
5
  import { generateTypesFromEndpoint } from "./type-generator.js";
5
6
  import { generateFromSwagger } from "./swagger-generator.js";
7
+ function parseDddArgs(argv) {
8
+ if (!argv.includes("--ddd")) {
9
+ return null;
10
+ }
11
+ let domain;
12
+ let port;
13
+ let outDir;
14
+ let actions;
15
+ for (const arg of argv) {
16
+ if (arg.startsWith("--domain=")) {
17
+ domain = arg.slice("--domain=".length);
18
+ }
19
+ else if (arg.startsWith("--port=")) {
20
+ port = arg.slice("--port=".length);
21
+ }
22
+ else if (arg.startsWith("--out=")) {
23
+ outDir = arg.slice("--out=".length);
24
+ }
25
+ else if (arg.startsWith("--actions=")) {
26
+ const raw = arg.slice("--actions=".length);
27
+ actions = raw
28
+ .split(",")
29
+ .map((a) => a.trim())
30
+ .filter(Boolean);
31
+ }
32
+ }
33
+ if (!domain?.trim()) {
34
+ console.error("\u001b[31mError:\u001b[0m --ddd requiere --domain=<nombre del contexto acotado>");
35
+ process.exit(1);
36
+ }
37
+ if (!port?.trim()) {
38
+ console.error("\u001b[31mError:\u001b[0m --ddd requiere --port=<nombre del puerto driven/outbound>, p. ej. OrderRepository");
39
+ process.exit(1);
40
+ }
41
+ return {
42
+ domain: domain.trim(),
43
+ port: port.trim(),
44
+ outDir: outDir?.trim() || undefined,
45
+ actions,
46
+ };
47
+ }
6
48
  /**
7
49
  * Main CLI entry point for bytekit
8
50
  */
@@ -11,6 +53,20 @@ export async function runCli(argv) {
11
53
  printHelp();
12
54
  return;
13
55
  }
56
+ const dddArgs = parseDddArgs(argv);
57
+ if (dddArgs) {
58
+ const { rootDir, slug } = await generateDddBoilerplate({
59
+ domain: dddArgs.domain,
60
+ port: dddArgs.port,
61
+ outDir: dddArgs.outDir,
62
+ actions: dddArgs.actions,
63
+ });
64
+ const actionsNote = dddArgs.actions && dddArgs.actions.length > 0
65
+ ? ` · acciones: ${dddArgs.actions.join(", ")}`
66
+ : "";
67
+ console.log(`\u001b[32m✓\u001b[0m Estructura DDD / hexagonal en \u001b[1m${rootDir}\u001b[0m (contexto: ${slug}, puerto outbound: ${dddArgs.port}${actionsNote})`);
68
+ return;
69
+ }
14
70
  const options = {
15
71
  method: "GET",
16
72
  headers: {},
@@ -118,6 +174,16 @@ function printHelp() {
118
174
  Saves to src/types/{endpoint}.ts
119
175
  --swagger Generate all TypeScript DTOs from a Swagger/OpenAPI spec.
120
176
  Saves to src/types/api-docs.ts
177
+ --ddd Genera carpetas DDD y stubs de puertos hexagonales (interfaces).
178
+ Requiere --domain=<contexto> y --port=<interfaz outbound>.
179
+ Crea ./<dominio-slug>/ por defecto; usa --out=<ruta> para otra raíz.
180
+ --domain=<name> Bounded context (solo con --ddd).
181
+ --port=<name> Puertos driven: interfaz hacia exterior (ej. OrderRepository).
182
+ --out=<dir> Directorio de salida para --ddd (opcional).
183
+ --actions=<list> Acciones de dominio separadas por coma (solo con --ddd).
184
+ Genera entidad, interfaz de repositorio, casos de uso e
185
+ implementación HTTP (vía ApiClient de bytekit) por cada acción.
186
+ Ej. --actions=create,findById,update,delete
121
187
  --method=<METHOD> HTTP method (GET, POST, PUT, DELETE, PATCH). Default: GET.
122
188
  --body=<body> JSON body for the request.
123
189
  --header=<key:val> Custom HTTP header (can be used multiple times).
@@ -128,6 +194,9 @@ function printHelp() {
128
194
  bytekit --type https://api.example.com/users
129
195
  bytekit --swagger https://api.example.com/swagger.json
130
196
  bytekit --type --method=POST --body='{"name":"test"}' https://api.example.com/users
197
+ bytekit --ddd --domain=orders --port=OrderRepository
198
+ bytekit --ddd --domain="User Management" --port=notification-gateway --out=./apps/billing
199
+ bytekit --ddd --domain=Product --port=ProductRepository --actions=create,findById,update,delete
131
200
  `);
132
201
  }
133
202
  if (process.argv[1] === fileURLToPath(import.meta.url)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export interface SwaggerOptions {
1
+ interface SwaggerOptions {
2
2
  url: string | URL;
3
3
  output?: string;
4
4
  }
@@ -6,4 +6,5 @@ export interface SwaggerOptions {
6
6
  * Generate TypeScript interfaces from an OpenAPI/Swagger specification
7
7
  */
8
8
  export declare function generateFromSwagger(options: SwaggerOptions): Promise<void>;
9
+ export {};
9
10
  //# sourceMappingURL=swagger-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"swagger-generator.d.ts","sourceRoot":"","sources":["../../src/cli/swagger-generator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAqGf"}
1
+ {"version":3,"file":"swagger-generator.d.ts","sourceRoot":"","sources":["../../src/cli/swagger-generator.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACpB,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAqGf"}
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import fs from "node:fs/promises";
2
3
  import path from "node:path";
3
4
  /**