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.
- package/README.md +66 -2
- package/dist/cli/ddd-boilerplate.d.ts +34 -0
- package/dist/cli/ddd-boilerplate.d.ts.map +1 -0
- package/dist/cli/ddd-boilerplate.js +339 -0
- package/dist/cli/ddd-boilerplate.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +69 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/swagger-generator.d.ts +2 -1
- package/dist/cli/swagger-generator.d.ts.map +1 -1
- package/dist/cli/swagger-generator.js +1 -0
- package/dist/cli/swagger-generator.js.map +1 -1
- package/dist/cli/type-generator.d.ts +2 -1
- package/dist/cli/type-generator.d.ts.map +1 -1
- package/dist/utils/async/debounce.d.ts.map +1 -1
- package/dist/utils/async/debounce.js.map +1 -1
- package/dist/utils/async/index.d.ts +8 -0
- package/dist/utils/async/index.d.ts.map +1 -1
- package/dist/utils/async/index.js +4 -0
- package/dist/utils/async/index.js.map +1 -1
- package/dist/utils/async/pipeline.d.ts +164 -0
- package/dist/utils/async/pipeline.d.ts.map +1 -0
- package/dist/utils/async/pipeline.js +154 -0
- package/dist/utils/async/pipeline.js.map +1 -0
- package/dist/utils/async/promise-pool.d.ts +59 -0
- package/dist/utils/async/promise-pool.d.ts.map +1 -0
- package/dist/utils/async/promise-pool.js +130 -0
- package/dist/utils/async/promise-pool.js.map +1 -0
- package/dist/utils/async/request-batcher.d.ts +82 -0
- package/dist/utils/async/request-batcher.d.ts.map +1 -0
- package/dist/utils/async/request-batcher.js +178 -0
- package/dist/utils/async/request-batcher.js.map +1 -0
- package/dist/utils/async/request-queue.d.ts +115 -0
- package/dist/utils/async/request-queue.d.ts.map +1 -0
- package/dist/utils/async/request-queue.js +236 -0
- package/dist/utils/async/request-queue.js.map +1 -0
- package/dist/utils/async/sequential.d.ts.map +1 -1
- package/dist/utils/async/sequential.js.map +1 -1
- package/dist/utils/async/throttle.d.ts.map +1 -1
- package/dist/utils/async/throttle.js.map +1 -1
- package/dist/utils/async/timeout.d.ts.map +1 -1
- package/dist/utils/async/timeout.js +1 -0
- package/dist/utils/async/timeout.js.map +1 -1
- package/dist/utils/async/types.d.ts.map +1 -1
- package/dist/utils/async/types.js +1 -0
- package/dist/utils/async/types.js.map +1 -1
- package/dist/utils/core/ApiClient.d.ts +26 -4
- package/dist/utils/core/ApiClient.d.ts.map +1 -1
- package/dist/utils/core/ApiClient.js +52 -3
- package/dist/utils/core/ApiClient.js.map +1 -1
- package/dist/utils/core/SchemaAdapter.d.ts.map +1 -1
- package/dist/utils/core/SchemaAdapter.js.map +1 -1
- package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -1
- package/dist/utils/helpers/CryptoUtils.js +1 -0
- package/dist/utils/helpers/CryptoUtils.js.map +1 -1
- package/dist/utils/helpers/FileUploadHelper.d.ts +68 -1
- package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -1
- package/dist/utils/helpers/FileUploadHelper.js +72 -19
- package/dist/utils/helpers/FileUploadHelper.js.map +1 -1
- package/dist/utils/helpers/PollingHelper.js +1 -1
- package/dist/utils/helpers/PollingHelper.js.map +1 -1
- package/dist/utils/helpers/StreamingHelper.d.ts +82 -0
- package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -1
- package/dist/utils/helpers/StreamingHelper.js +186 -0
- package/dist/utils/helpers/StreamingHelper.js.map +1 -1
- package/dist/utils/helpers/UrlHelper.d.ts.map +1 -1
- package/dist/utils/helpers/UrlHelper.js.map +1 -1
- package/dist/utils/helpers/WebSocketHelper.d.ts +30 -0
- package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -1
- package/dist/utils/helpers/WebSocketHelper.js +111 -3
- package/dist/utils/helpers/WebSocketHelper.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
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
|
-
##
|
|
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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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
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)) {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAyB7D,SAAS,YAAY,CAAC,IAAc;IAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,MAA0B,CAAC;IAC/B,IAAI,IAAwB,CAAC;IAC7B,IAAI,MAA0B,CAAC;IAC/B,IAAI,OAA6B,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,GAAG,GAAG;iBACR,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CACT,iFAAiF,CACpF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CACT,6GAA6G,CAChH,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO;QACH,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS;QACnC,OAAO;KACV,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,SAAS,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,sBAAsB,CAAC;YACnD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QACH,MAAM,WAAW,GACb,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,gBAAgB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACP,+DAA+D,OAAO,wBAAwB,IAAI,sBAAsB,OAAO,CAAC,IAAI,GAAG,WAAW,GAAG,CACxJ,CAAC;QACF,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAe;QACxB,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE;KACd,CAAC;IAEF,MAAM,aAAa,GAAiB;QAChC,KAAK;QACL,MAAM;QACN,KAAK;QACL,OAAO;QACP,QAAQ;KACX,CAAC;IAEF,yBAAyB;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,aAAa,CAAC,QAAQ,CAAC,WAAyB,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,MAAM,GAAG,WAAyB,CAAC;YAC/C,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,IACH,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YAC3B,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAC9B,CAAC;YACC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,uFAAuF;YACvF,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1D,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACjC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QACtB,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,mBAAmB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,oBAAoB,CAAC,OAAuC,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACJ,sDAAsD;QACtD,MAAM,iBAAiB,CAAC,OAAuC,CAAC,CAAC;IACrE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CAC/B,OAAqC;IAErC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;IAE5E,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC;IACnE,MAAM,aAAa,GACf,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,yBAAyB,CAAC;QAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,aAAa;KACtB,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC5B,OAAqC;IAErC,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,GAAG,OAAO,CAAC,OAAO;aACrB;YACD,IAAI,EAAE,OAAO,CAAC,IAAI;SACrB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACT,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,SAAS,SAAS;IACd,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCf,CAAC,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
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":"
|
|
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"}
|