@skmtc/core 0.0.782 → 0.0.785

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 (61) hide show
  1. package/esm/context/CoreContext.d.ts +175 -0
  2. package/esm/context/CoreContext.d.ts.map +1 -1
  3. package/esm/context/CoreContext.js +178 -0
  4. package/esm/dsl/ContentBase.d.ts +115 -0
  5. package/esm/dsl/ContentBase.d.ts.map +1 -1
  6. package/esm/dsl/ContentBase.js +110 -0
  7. package/esm/dsl/File.d.ts +208 -0
  8. package/esm/dsl/File.d.ts.map +1 -1
  9. package/esm/dsl/File.js +197 -0
  10. package/esm/dsl/model/ModelBase.d.ts +257 -0
  11. package/esm/dsl/model/ModelBase.d.ts.map +1 -1
  12. package/esm/dsl/model/ModelBase.js +248 -0
  13. package/esm/dsl/operation/OperationBase.d.ts +175 -0
  14. package/esm/dsl/operation/OperationBase.d.ts.map +1 -1
  15. package/esm/dsl/operation/OperationBase.js +166 -0
  16. package/esm/helpers/strings.d.ts +63 -0
  17. package/esm/helpers/strings.d.ts.map +1 -1
  18. package/esm/helpers/strings.js +59 -0
  19. package/esm/mod.d.ts +66 -0
  20. package/esm/mod.d.ts.map +1 -1
  21. package/esm/mod.js +66 -0
  22. package/esm/run/toArtifacts.d.ts +114 -0
  23. package/esm/run/toArtifacts.d.ts.map +1 -1
  24. package/esm/run/toArtifacts.js +86 -0
  25. package/esm/types/Settings.d.ts +129 -0
  26. package/esm/types/Settings.d.ts.map +1 -1
  27. package/esm/types/Settings.js +3 -0
  28. package/esm/typescript/List.d.ts +111 -0
  29. package/esm/typescript/List.d.ts.map +1 -1
  30. package/esm/typescript/List.js +106 -0
  31. package/package.json +5 -1
  32. package/script/context/CoreContext.d.ts +175 -0
  33. package/script/context/CoreContext.d.ts.map +1 -1
  34. package/script/context/CoreContext.js +178 -0
  35. package/script/dsl/ContentBase.d.ts +115 -0
  36. package/script/dsl/ContentBase.d.ts.map +1 -1
  37. package/script/dsl/ContentBase.js +110 -0
  38. package/script/dsl/File.d.ts +208 -0
  39. package/script/dsl/File.d.ts.map +1 -1
  40. package/script/dsl/File.js +197 -0
  41. package/script/dsl/model/ModelBase.d.ts +257 -0
  42. package/script/dsl/model/ModelBase.d.ts.map +1 -1
  43. package/script/dsl/model/ModelBase.js +248 -0
  44. package/script/dsl/operation/OperationBase.d.ts +175 -0
  45. package/script/dsl/operation/OperationBase.d.ts.map +1 -1
  46. package/script/dsl/operation/OperationBase.js +166 -0
  47. package/script/helpers/strings.d.ts +63 -0
  48. package/script/helpers/strings.d.ts.map +1 -1
  49. package/script/helpers/strings.js +59 -0
  50. package/script/mod.d.ts +66 -0
  51. package/script/mod.d.ts.map +1 -1
  52. package/script/mod.js +66 -0
  53. package/script/run/toArtifacts.d.ts +114 -0
  54. package/script/run/toArtifacts.d.ts.map +1 -1
  55. package/script/run/toArtifacts.js +86 -0
  56. package/script/types/Settings.d.ts +129 -0
  57. package/script/types/Settings.d.ts.map +1 -1
  58. package/script/types/Settings.js +3 -0
  59. package/script/typescript/List.d.ts +111 -0
  60. package/script/typescript/List.d.ts.map +1 -1
  61. package/script/typescript/List.js +106 -0
@@ -12,17 +12,192 @@ import type { RefName } from '../../types/RefName.js';
12
12
  import { OasSchema } from '../../oas/schema/Schema.js';
13
13
  import { OasRef } from '../../oas/ref/Ref.js';
14
14
  import { OasVoid } from '../../oas/void/Void.js';
15
+ /**
16
+ * Constructor arguments for {@link OperationBase}.
17
+ *
18
+ * @template EnrichmentType - Optional type for custom enrichment data
19
+ */
15
20
  export type OperationBaseArgs<EnrichmentType = undefined> = {
21
+ /** The generation context providing access to the processing pipeline */
16
22
  context: GenerateContext;
23
+ /** Content settings including export path and enrichment configuration */
17
24
  settings: ContentSettings<EnrichmentType>;
25
+ /** Unique identifier for this generator type */
18
26
  generatorKey: GeneratorKey;
27
+ /** The OpenAPI operation being processed */
19
28
  operation: OasOperation;
20
29
  };
30
+ /**
31
+ * Base class for operation generators in the SKMTC DSL system.
32
+ *
33
+ * `OperationBase` extends {@link ContentBase} to provide specialized functionality for
34
+ * generating code from OpenAPI operations. It offers type-safe methods for inserting
35
+ * related operations and models, managing complex operation dependencies, and handling
36
+ * enrichments specific to API operations.
37
+ *
38
+ * This class serves as the foundation for creating custom operation generators that
39
+ * transform OpenAPI operations into various code artifacts like API clients, server
40
+ * handlers, validation middleware, or documentation.
41
+ *
42
+ * ## Key Features
43
+ *
44
+ * - **Operation Insertion**: Insert related operations with automatic dependency tracking
45
+ * - **Model Integration**: Seamlessly insert related models from operation schemas
46
+ * - **Schema Normalization**: Handle complex request/response schema references
47
+ * - **Export Management**: Control which operations are exported from generated files
48
+ * - **Enrichment Support**: Extend functionality with operation-specific enrichment data
49
+ * - **Type Safety**: Full TypeScript support with generic enrichment types
50
+ *
51
+ * @template EnrichmentType - Optional type for custom enrichment data
52
+ *
53
+ * @example Basic API client generator
54
+ * ```typescript
55
+ * import { OperationBase, Definition } from '@skmtc/core';
56
+ *
57
+ * class ApiClientMethod extends OperationBase {
58
+ * toDefinition(): Definition {
59
+ * const { method, path, operationId } = this.operation;
60
+ *
61
+ * return new Definition({
62
+ * name: operationId || `${method}${this.pascalCasePath()}`,
63
+ * content: `async ${operationId}(${this.generateParameters()}) {
64
+ * return this.request('${method}', '${path}', ${this.generateRequestBody()});
65
+ * }`
66
+ * });
67
+ * }
68
+ * }
69
+ * ```
70
+ *
71
+ * @example With request/response models
72
+ * ```typescript
73
+ * class TypedApiMethod extends OperationBase {
74
+ * toDefinition(): Definition {
75
+ * const operation = this.operation;
76
+ *
77
+ * // Generate request model if needed
78
+ * let requestType = 'void';
79
+ * if (operation.requestBody?.content?.['application/json']?.schema) {
80
+ * const requestModel = this.insertNormalizedModel(
81
+ * new RequestModel({ ... }),
82
+ * {
83
+ * schema: operation.requestBody.content['application/json'].schema,
84
+ * fallbackName: `${operation.operationId}Request`
85
+ * }
86
+ * );
87
+ * requestType = requestModel.value;
88
+ * }
89
+ *
90
+ * // Generate response model
91
+ * const responseSchema = operation.responses?.['200']?.content?.['application/json']?.schema;
92
+ * const responseModel = this.insertNormalizedModel(
93
+ * new ResponseModel({ ... }),
94
+ * { schema: responseSchema, fallbackName: `${operation.operationId}Response` }
95
+ * );
96
+ *
97
+ * return new Definition({
98
+ * name: operation.operationId,
99
+ * content: `async ${operation.operationId}(data: ${requestType}): Promise<${responseModel.value}> {
100
+ * return this.request('${operation.method}', '${operation.path}', data);
101
+ * }`
102
+ * });
103
+ * }
104
+ * }
105
+ * ```
106
+ *
107
+ * @example With enrichments
108
+ * ```typescript
109
+ * type AuthEnrichment = {
110
+ * requiresAuth: boolean;
111
+ * permissions: string[];
112
+ * };
113
+ *
114
+ * class SecuredApiMethod extends OperationBase<AuthEnrichment> {
115
+ * toDefinition(): Definition {
116
+ * const enrichment = this.settings.enrichment;
117
+ * const requiresAuth = enrichment?.requiresAuth ?? false;
118
+ *
119
+ * const authCheck = requiresAuth
120
+ * ? 'this.checkAuth();'
121
+ * : '';
122
+ *
123
+ * return new Definition({
124
+ * name: this.operation.operationId,
125
+ * content: `async ${this.operation.operationId}() {
126
+ * ${authCheck}
127
+ * return this.request('${this.operation.method}', '${this.operation.path}');
128
+ * }`
129
+ * });
130
+ * }
131
+ * }
132
+ * ```
133
+ */
21
134
  export declare class OperationBase<EnrichmentType = undefined> extends ContentBase {
135
+ /** Content settings including export path and enrichment configuration */
22
136
  settings: ContentSettings<EnrichmentType>;
137
+ /** The OpenAPI operation being processed */
23
138
  operation: OasOperation;
139
+ /** Generator key identifying this generator type */
24
140
  generatorKey: GeneratorKey;
141
+ /**
142
+ * Creates a new OperationBase instance.
143
+ *
144
+ * @param args - Operation generator configuration
145
+ * @param args.context - The generation context providing pipeline access
146
+ * @param args.settings - Content settings with export path and enrichments
147
+ * @param args.generatorKey - Unique identifier for this generator type
148
+ * @param args.operation - The OpenAPI operation being processed
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const operation = new OperationBase({
153
+ * context: generateContext,
154
+ * settings: {
155
+ * exportPath: './src/api.ts',
156
+ * enrichment: customEnrichments
157
+ * },
158
+ * generatorKey: 'api-client',
159
+ * operation: oasOperation
160
+ * });
161
+ * ```
162
+ */
25
163
  constructor({ context, generatorKey, settings, operation }: OperationBaseArgs<EnrichmentType>);
164
+ /**
165
+ * Inserts a related operation with forced generation.
166
+ *
167
+ * This method adds a related operation to the current generation context, ensuring
168
+ * it will be generated regardless of whether it already exists. This is useful for
169
+ * operations that depend on other operations or need to generate helper operations.
170
+ *
171
+ * @template V - Type of generated value returned by the insertable
172
+ * @template EnrichmentType - Type of enrichment data for the insertable
173
+ * @param insertable - The operation generator to insert
174
+ * @param operation - The OpenAPI operation to process
175
+ * @param options - Insertion options
176
+ * @param options.noExport - Whether to skip exporting the inserted operation
177
+ * @returns Inserted operation reference with generated value
178
+ *
179
+ * @example Inserting helper operations
180
+ * ```typescript
181
+ * class CrudApiClient extends OperationBase {
182
+ * toDefinition(): Definition {
183
+ * // Insert a related validation operation
184
+ * const validator = this.insertOperation(
185
+ * new ValidationOperation({ ... }),
186
+ * this.operation,
187
+ * { noExport: true }
188
+ * );
189
+ *
190
+ * return new Definition({
191
+ * name: this.operation.operationId,
192
+ * content: `async ${this.operation.operationId}(data: any) {
193
+ * ${validator.value}(data);
194
+ * return this.request('${this.operation.method}', '${this.operation.path}', data);
195
+ * }`
196
+ * });
197
+ * }
198
+ * }
199
+ * ```
200
+ */
26
201
  insertOperation<V extends GeneratedValue, EnrichmentType = undefined>(insertable: OperationInsertable<V, EnrichmentType>, operation: OasOperation, options?: Pick<InsertOperationOptions<'force'>, 'noExport'>): Inserted<V, 'force', EnrichmentType>;
27
202
  insertModel<V extends GeneratedValue, EnrichmentType = undefined>(insertable: ModelInsertable<V, EnrichmentType>, refName: RefName, options?: Pick<InsertModelOptions<'force'>, 'noExport'>): Inserted<V, 'force', EnrichmentType>;
28
203
  insertNormalizedModel<V extends GeneratedValue, Schema extends OasSchema | OasRef<'schema'> | OasVoid, EnrichmentType = undefined>(insertable: ModelInsertable<V, EnrichmentType>, { schema, fallbackName }: Omit<InsertNormalisedModelArgs<Schema>, 'destinationPath'>, options?: Pick<InsertModelOptions<'force'>, 'noExport'>): InsertNormalisedModelReturn<V, Schema>;
@@ -1 +1 @@
1
- {"version":3,"file":"OperationBase.d.ts","sourceRoot":"","sources":["../../../src/dsl/operation/OperationBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEf,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,kCAAkC,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,MAAM,MAAM,iBAAiB,CAAC,cAAc,GAAG,SAAS,IAAI;IAC1D,OAAO,EAAE,eAAe,CAAA;IACxB,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,CAAA;IACzC,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,YAAY,CAAA;CACxB,CAAA;AAED,qBAAa,aAAa,CAAC,cAAc,GAAG,SAAS,CAAE,SAAQ,WAAW;IACxE,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,CAAA;IACzC,SAAS,EAAE,YAAY,CAAA;IACd,YAAY,EAAE,YAAY,CAAA;gBAEvB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,CAAC,cAAc,CAAC;IAQ7F,eAAe,CAAC,CAAC,SAAS,cAAc,EAAE,cAAc,GAAG,SAAS,EAClE,UAAU,EAAE,mBAAmB,CAAC,CAAC,EAAE,cAAc,CAAC,EAClD,SAAS,EAAE,YAAY,EACvB,OAAO,GAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAM,GAC9D,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC;IAQvC,WAAW,CAAC,CAAC,SAAS,cAAc,EAAE,cAAc,GAAG,SAAS,EAC9D,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,EAC9C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAM,GAC1D,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC;IAQvC,qBAAqB,CACnB,CAAC,SAAS,cAAc,EACxB,MAAM,SAAS,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,EACrD,cAAc,GAAG,SAAS,EAE1B,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,EAC9C,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,EACpF,OAAO,GAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAM,GAC1D,2BAA2B,CAAC,CAAC,EAAE,MAAM,CAAC;IAYzC,oBAAoB;IACpB,iBAAiB,CAAC,CAAC,SAAS,cAAc,EAAE,EAC1C,UAAU,EACV,KAAK,EACL,QAAQ,EACT,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAS3D,QAAQ,CAAC,IAAI,EAAE,gBAAgB;CAMzC"}
1
+ {"version":3,"file":"OperationBase.d.ts","sourceRoot":"","sources":["../../../src/dsl/operation/OperationBase.ts"],"names":[],"mappings":"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"}
@@ -2,21 +2,150 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OperationBase = void 0;
4
4
  const ContentBase_js_1 = require("../ContentBase.js");
5
+ /**
6
+ * Base class for operation generators in the SKMTC DSL system.
7
+ *
8
+ * `OperationBase` extends {@link ContentBase} to provide specialized functionality for
9
+ * generating code from OpenAPI operations. It offers type-safe methods for inserting
10
+ * related operations and models, managing complex operation dependencies, and handling
11
+ * enrichments specific to API operations.
12
+ *
13
+ * This class serves as the foundation for creating custom operation generators that
14
+ * transform OpenAPI operations into various code artifacts like API clients, server
15
+ * handlers, validation middleware, or documentation.
16
+ *
17
+ * ## Key Features
18
+ *
19
+ * - **Operation Insertion**: Insert related operations with automatic dependency tracking
20
+ * - **Model Integration**: Seamlessly insert related models from operation schemas
21
+ * - **Schema Normalization**: Handle complex request/response schema references
22
+ * - **Export Management**: Control which operations are exported from generated files
23
+ * - **Enrichment Support**: Extend functionality with operation-specific enrichment data
24
+ * - **Type Safety**: Full TypeScript support with generic enrichment types
25
+ *
26
+ * @template EnrichmentType - Optional type for custom enrichment data
27
+ *
28
+ * @example Basic API client generator
29
+ * ```typescript
30
+ * import { OperationBase, Definition } from '@skmtc/core';
31
+ *
32
+ * class ApiClientMethod extends OperationBase {
33
+ * toDefinition(): Definition {
34
+ * const { method, path, operationId } = this.operation;
35
+ *
36
+ * return new Definition({
37
+ * name: operationId || `${method}${this.pascalCasePath()}`,
38
+ * content: `async ${operationId}(${this.generateParameters()}) {
39
+ * return this.request('${method}', '${path}', ${this.generateRequestBody()});
40
+ * }`
41
+ * });
42
+ * }
43
+ * }
44
+ * ```
45
+ *
46
+ * @example With request/response models
47
+ * ```typescript
48
+ * class TypedApiMethod extends OperationBase {
49
+ * toDefinition(): Definition {
50
+ * const operation = this.operation;
51
+ *
52
+ * // Generate request model if needed
53
+ * let requestType = 'void';
54
+ * if (operation.requestBody?.content?.['application/json']?.schema) {
55
+ * const requestModel = this.insertNormalizedModel(
56
+ * new RequestModel({ ... }),
57
+ * {
58
+ * schema: operation.requestBody.content['application/json'].schema,
59
+ * fallbackName: `${operation.operationId}Request`
60
+ * }
61
+ * );
62
+ * requestType = requestModel.value;
63
+ * }
64
+ *
65
+ * // Generate response model
66
+ * const responseSchema = operation.responses?.['200']?.content?.['application/json']?.schema;
67
+ * const responseModel = this.insertNormalizedModel(
68
+ * new ResponseModel({ ... }),
69
+ * { schema: responseSchema, fallbackName: `${operation.operationId}Response` }
70
+ * );
71
+ *
72
+ * return new Definition({
73
+ * name: operation.operationId,
74
+ * content: `async ${operation.operationId}(data: ${requestType}): Promise<${responseModel.value}> {
75
+ * return this.request('${operation.method}', '${operation.path}', data);
76
+ * }`
77
+ * });
78
+ * }
79
+ * }
80
+ * ```
81
+ *
82
+ * @example With enrichments
83
+ * ```typescript
84
+ * type AuthEnrichment = {
85
+ * requiresAuth: boolean;
86
+ * permissions: string[];
87
+ * };
88
+ *
89
+ * class SecuredApiMethod extends OperationBase<AuthEnrichment> {
90
+ * toDefinition(): Definition {
91
+ * const enrichment = this.settings.enrichment;
92
+ * const requiresAuth = enrichment?.requiresAuth ?? false;
93
+ *
94
+ * const authCheck = requiresAuth
95
+ * ? 'this.checkAuth();'
96
+ * : '';
97
+ *
98
+ * return new Definition({
99
+ * name: this.operation.operationId,
100
+ * content: `async ${this.operation.operationId}() {
101
+ * ${authCheck}
102
+ * return this.request('${this.operation.method}', '${this.operation.path}');
103
+ * }`
104
+ * });
105
+ * }
106
+ * }
107
+ * ```
108
+ */
5
109
  class OperationBase extends ContentBase_js_1.ContentBase {
110
+ /**
111
+ * Creates a new OperationBase instance.
112
+ *
113
+ * @param args - Operation generator configuration
114
+ * @param args.context - The generation context providing pipeline access
115
+ * @param args.settings - Content settings with export path and enrichments
116
+ * @param args.generatorKey - Unique identifier for this generator type
117
+ * @param args.operation - The OpenAPI operation being processed
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const operation = new OperationBase({
122
+ * context: generateContext,
123
+ * settings: {
124
+ * exportPath: './src/api.ts',
125
+ * enrichment: customEnrichments
126
+ * },
127
+ * generatorKey: 'api-client',
128
+ * operation: oasOperation
129
+ * });
130
+ * ```
131
+ */
6
132
  constructor({ context, generatorKey, settings, operation }) {
7
133
  super({ context });
134
+ /** Content settings including export path and enrichment configuration */
8
135
  Object.defineProperty(this, "settings", {
9
136
  enumerable: true,
10
137
  configurable: true,
11
138
  writable: true,
12
139
  value: void 0
13
140
  });
141
+ /** The OpenAPI operation being processed */
14
142
  Object.defineProperty(this, "operation", {
15
143
  enumerable: true,
16
144
  configurable: true,
17
145
  writable: true,
18
146
  value: void 0
19
147
  });
148
+ /** Generator key identifying this generator type */
20
149
  Object.defineProperty(this, "generatorKey", {
21
150
  enumerable: true,
22
151
  configurable: true,
@@ -27,6 +156,43 @@ class OperationBase extends ContentBase_js_1.ContentBase {
27
156
  this.operation = operation;
28
157
  this.settings = settings;
29
158
  }
159
+ /**
160
+ * Inserts a related operation with forced generation.
161
+ *
162
+ * This method adds a related operation to the current generation context, ensuring
163
+ * it will be generated regardless of whether it already exists. This is useful for
164
+ * operations that depend on other operations or need to generate helper operations.
165
+ *
166
+ * @template V - Type of generated value returned by the insertable
167
+ * @template EnrichmentType - Type of enrichment data for the insertable
168
+ * @param insertable - The operation generator to insert
169
+ * @param operation - The OpenAPI operation to process
170
+ * @param options - Insertion options
171
+ * @param options.noExport - Whether to skip exporting the inserted operation
172
+ * @returns Inserted operation reference with generated value
173
+ *
174
+ * @example Inserting helper operations
175
+ * ```typescript
176
+ * class CrudApiClient extends OperationBase {
177
+ * toDefinition(): Definition {
178
+ * // Insert a related validation operation
179
+ * const validator = this.insertOperation(
180
+ * new ValidationOperation({ ... }),
181
+ * this.operation,
182
+ * { noExport: true }
183
+ * );
184
+ *
185
+ * return new Definition({
186
+ * name: this.operation.operationId,
187
+ * content: `async ${this.operation.operationId}(data: any) {
188
+ * ${validator.value}(data);
189
+ * return this.request('${this.operation.method}', '${this.operation.path}', data);
190
+ * }`
191
+ * });
192
+ * }
193
+ * }
194
+ * ```
195
+ */
30
196
  insertOperation(insertable, operation, options = {}) {
31
197
  return this.context.insertOperation(insertable, operation, {
32
198
  generation: 'force',
@@ -1,9 +1,72 @@
1
+ /**
2
+ * Capitalizes the first character of a string.
3
+ *
4
+ * @param str - The string to capitalize
5
+ * @returns The string with the first character uppercased
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * capitalize('hello world'); // 'Hello world'
10
+ * capitalize('API'); // 'API'
11
+ * capitalize(''); // ''
12
+ * ```
13
+ */
1
14
  import "../_dnt.polyfills.js";
2
15
  export declare const capitalize: (str: string) => string;
16
+ /**
17
+ * Decapitalizes (lowercases) the first character of a string.
18
+ *
19
+ * @param str - The string to decapitalize
20
+ * @returns The string with the first character lowercased
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * decapitalize('Hello World'); // 'hello World'
25
+ * decapitalize('API'); // 'aPI'
26
+ * decapitalize(''); // ''
27
+ * ```
28
+ */
3
29
  export declare const decapitalize: (str: string) => string;
30
+ /**
31
+ * Options for controlling camelCase conversion behavior.
32
+ */
4
33
  type CamelCaseOptions = {
34
+ /** Whether to capitalize the first character (PascalCase) */
5
35
  upperFirst?: boolean;
6
36
  };
37
+ /**
38
+ * Converts a string to camelCase, removing non-alphanumeric characters.
39
+ *
40
+ * This function handles various input formats including kebab-case, snake_case,
41
+ * space-separated words, and mixed formats. It intelligently capitalizes words
42
+ * after the first unless `upperFirst` is specified.
43
+ *
44
+ * @param str - The string to convert to camelCase
45
+ * @param options - Options to control the conversion
46
+ * @param options.upperFirst - Whether to capitalize the first character (default: false)
47
+ * @returns The camelCase version of the input string
48
+ *
49
+ * @example Basic usage
50
+ * ```typescript
51
+ * camelCase('hello world'); // 'helloWorld'
52
+ * camelCase('user-name'); // 'userName'
53
+ * camelCase('api_key'); // 'apiKey'
54
+ * camelCase('HTTP-Response'); // 'httpResponse'
55
+ * ```
56
+ *
57
+ * @example PascalCase (upperFirst)
58
+ * ```typescript
59
+ * camelCase('user profile', { upperFirst: true }); // 'UserProfile'
60
+ * camelCase('api-client', { upperFirst: true }); // 'ApiClient'
61
+ * ```
62
+ *
63
+ * @example Complex inputs
64
+ * ```typescript
65
+ * camelCase('get-user-by-id'); // 'getUserById'
66
+ * camelCase('XML_HTTP_Request'); // 'xmlHttpRequest'
67
+ * camelCase('2fa-enabled'); // '2faEnabled'
68
+ * ```
69
+ */
7
70
  export declare const camelCase: (str: string, { upperFirst }?: CamelCaseOptions) => string;
8
71
  export {};
9
72
  //# sourceMappingURL=strings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/helpers/strings.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAExC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAE1C,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,iBAAgB,gBAAqB,KAAG,MAgB9E,CAAA"}
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/helpers/strings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,sBAAsB,CAAC;AAE9B,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAExC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAE1C,CAAA;AAED;;GAEG;AACH,KAAK,gBAAgB,GAAG;IACtB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,iBAAgB,gBAAqB,KAAG,MAgB9E,CAAA"}
@@ -1,15 +1,74 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.camelCase = exports.decapitalize = exports.capitalize = void 0;
4
+ /**
5
+ * Capitalizes the first character of a string.
6
+ *
7
+ * @param str - The string to capitalize
8
+ * @returns The string with the first character uppercased
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * capitalize('hello world'); // 'Hello world'
13
+ * capitalize('API'); // 'API'
14
+ * capitalize(''); // ''
15
+ * ```
16
+ */
4
17
  require("../_dnt.polyfills.js");
5
18
  const capitalize = (str) => {
6
19
  return str.charAt(0).toUpperCase() + str.slice(1);
7
20
  };
8
21
  exports.capitalize = capitalize;
22
+ /**
23
+ * Decapitalizes (lowercases) the first character of a string.
24
+ *
25
+ * @param str - The string to decapitalize
26
+ * @returns The string with the first character lowercased
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * decapitalize('Hello World'); // 'hello World'
31
+ * decapitalize('API'); // 'aPI'
32
+ * decapitalize(''); // ''
33
+ * ```
34
+ */
9
35
  const decapitalize = (str) => {
10
36
  return str.charAt(0).toLocaleLowerCase() + str.slice(1);
11
37
  };
12
38
  exports.decapitalize = decapitalize;
39
+ /**
40
+ * Converts a string to camelCase, removing non-alphanumeric characters.
41
+ *
42
+ * This function handles various input formats including kebab-case, snake_case,
43
+ * space-separated words, and mixed formats. It intelligently capitalizes words
44
+ * after the first unless `upperFirst` is specified.
45
+ *
46
+ * @param str - The string to convert to camelCase
47
+ * @param options - Options to control the conversion
48
+ * @param options.upperFirst - Whether to capitalize the first character (default: false)
49
+ * @returns The camelCase version of the input string
50
+ *
51
+ * @example Basic usage
52
+ * ```typescript
53
+ * camelCase('hello world'); // 'helloWorld'
54
+ * camelCase('user-name'); // 'userName'
55
+ * camelCase('api_key'); // 'apiKey'
56
+ * camelCase('HTTP-Response'); // 'httpResponse'
57
+ * ```
58
+ *
59
+ * @example PascalCase (upperFirst)
60
+ * ```typescript
61
+ * camelCase('user profile', { upperFirst: true }); // 'UserProfile'
62
+ * camelCase('api-client', { upperFirst: true }); // 'ApiClient'
63
+ * ```
64
+ *
65
+ * @example Complex inputs
66
+ * ```typescript
67
+ * camelCase('get-user-by-id'); // 'getUserById'
68
+ * camelCase('XML_HTTP_Request'); // 'xmlHttpRequest'
69
+ * camelCase('2fa-enabled'); // '2faEnabled'
70
+ * ```
71
+ */
13
72
  const camelCase = (str, { upperFirst } = {}) => {
14
73
  let doCapitalize = Boolean(upperFirst);
15
74
  const camelCased = str.replace(/[^a-zA-Z0-9]+([a-zA-Z0-9]+)/g, (_, matched) => {
package/script/mod.d.ts CHANGED
@@ -1,3 +1,69 @@
1
+ /**
2
+ * @module SKMTC Core
3
+ *
4
+ * SKMTC (Schema Kit Mapping & Type Conversion) is a powerful TypeScript/Deno library
5
+ * for processing OpenAPI v3 documents and generating code artifacts. It provides a
6
+ * comprehensive three-phase pipeline for parsing, generating, and rendering OpenAPI
7
+ * schemas into various output formats.
8
+ *
9
+ * ## Quick Start
10
+ *
11
+ * ```typescript
12
+ * import { toArtifacts } from '@skmtc/core';
13
+ *
14
+ * const result = await toArtifacts({
15
+ * traceId: 'my-trace',
16
+ * spanId: 'my-span',
17
+ * documentObject: openApiDoc,
18
+ * settings: clientSettings,
19
+ * toGeneratorConfigMap: () => generatorMap,
20
+ * startAt: Date.now(),
21
+ * silent: false
22
+ * });
23
+ *
24
+ * console.log(result.artifacts); // Generated code files
25
+ * console.log(result.manifest); // Generation metadata
26
+ * ```
27
+ *
28
+ * ## Architecture
29
+ *
30
+ * The library follows a three-phase pipeline:
31
+ * - **Parse Phase**: Converts OpenAPI v3 JSON into internal OAS objects
32
+ * - **Generate Phase**: Transforms OAS objects into generator artifacts
33
+ * - **Render Phase**: Renders artifacts to formatted files
34
+ *
35
+ * ## Key Components
36
+ *
37
+ * - {@link CoreContext} - Main orchestration class for the pipeline
38
+ * - {@link toArtifacts} - Primary transformation function
39
+ * - {@link ContentBase} - Base class for creating generators
40
+ * - {@link ModelBase} and {@link OperationBase} - DSL building blocks
41
+ * - {@link List} - Powerful string manipulation and code generation utility
42
+ *
43
+ * ## Type System
44
+ *
45
+ * The library provides comprehensive TypeScript types for OpenAPI schemas,
46
+ * generator configurations, and output artifacts. All major types are
47
+ * validated using Valibot schemas for runtime safety.
48
+ *
49
+ * @example Basic Usage
50
+ * ```typescript
51
+ * import { CoreContext } from '@skmtc/core';
52
+ *
53
+ * const context = new CoreContext({
54
+ * spanId: 'my-span',
55
+ * silent: false
56
+ * });
57
+ *
58
+ * const result = await context.toArtifacts({
59
+ * documentObject: myOpenApiDoc,
60
+ * settings: mySettings,
61
+ * toGeneratorConfigMap: () => myGenerators,
62
+ * prettier: prettierConfig,
63
+ * silent: false
64
+ * });
65
+ * ```
66
+ */
1
67
  import "./_dnt.polyfills.js";
2
68
  export * from './app/validate.js';
3
69
  export * from './context/CoreContext.js';
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,oCAAoC,CAAA;AAClD,cAAc,oCAAoC,CAAA;AAClD,cAAc,qCAAqC,CAAA;AACnD,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qCAAqC,CAAA;AACnD,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sCAAsC,CAAA;AACpD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kBAAkB,CAAA;AAChC,cAAc,kCAAkC,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mCAAmC,CAAA;AACjD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uCAAuC,CAAA;AACrD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,OAAO,qBAAqB,CAAC;AAG7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,oCAAoC,CAAA;AAClD,cAAc,oCAAoC,CAAA;AAClD,cAAc,qCAAqC,CAAA;AACnD,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qCAAqC,CAAA;AACnD,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sCAAsC,CAAA;AACpD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kBAAkB,CAAA;AAChC,cAAc,kCAAkC,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mCAAmC,CAAA;AACjD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uCAAuC,CAAA;AACrD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA"}