@skmtc/core 0.0.785 → 0.0.787

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 (93) hide show
  1. package/esm/dsl/ContentSettings.d.ts +164 -0
  2. package/esm/dsl/ContentSettings.d.ts.map +1 -1
  3. package/esm/dsl/ContentSettings.js +151 -0
  4. package/esm/dsl/Definition.d.ts +199 -0
  5. package/esm/dsl/Definition.d.ts.map +1 -1
  6. package/esm/dsl/Definition.js +189 -0
  7. package/esm/dsl/EntityType.d.ts +83 -0
  8. package/esm/dsl/EntityType.d.ts.map +1 -1
  9. package/esm/dsl/EntityType.js +83 -0
  10. package/esm/dsl/Identifier.d.ts +152 -0
  11. package/esm/dsl/Identifier.d.ts.map +1 -1
  12. package/esm/dsl/Identifier.js +152 -0
  13. package/esm/dsl/Import.d.ts +221 -0
  14. package/esm/dsl/Import.d.ts.map +1 -1
  15. package/esm/dsl/Import.js +202 -0
  16. package/esm/dsl/operation/OperationBase.d.ts +181 -1
  17. package/esm/dsl/operation/OperationBase.d.ts.map +1 -1
  18. package/esm/dsl/operation/OperationBase.js +181 -1
  19. package/esm/oas/array/Array.d.ts +109 -1
  20. package/esm/oas/array/Array.d.ts.map +1 -1
  21. package/esm/oas/array/Array.js +93 -1
  22. package/esm/oas/document/Document.d.ts +155 -1
  23. package/esm/oas/document/Document.d.ts.map +1 -1
  24. package/esm/oas/document/Document.js +141 -2
  25. package/esm/oas/integer/Integer.d.ts +98 -0
  26. package/esm/oas/integer/Integer.d.ts.map +1 -1
  27. package/esm/oas/integer/Integer.js +80 -0
  28. package/esm/oas/object/Object.d.ts +255 -10
  29. package/esm/oas/object/Object.d.ts.map +1 -1
  30. package/esm/oas/object/Object.js +229 -10
  31. package/esm/oas/string/String.d.ts +103 -1
  32. package/esm/oas/string/String.d.ts.map +1 -1
  33. package/esm/oas/string/String.js +87 -1
  34. package/esm/types/Brand.d.ts +74 -0
  35. package/esm/types/Brand.d.ts.map +1 -1
  36. package/esm/types/Brand.js +9 -0
  37. package/esm/types/GeneratorKeys.d.ts +336 -0
  38. package/esm/types/GeneratorKeys.d.ts.map +1 -1
  39. package/esm/types/GeneratorKeys.js +243 -0
  40. package/esm/types/GeneratorType.d.ts +119 -0
  41. package/esm/types/GeneratorType.d.ts.map +1 -1
  42. package/esm/types/Method.d.ts +109 -0
  43. package/esm/types/Method.d.ts.map +1 -1
  44. package/esm/types/Method.js +84 -0
  45. package/esm/types/RefName.d.ts +61 -0
  46. package/esm/types/RefName.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/script/dsl/ContentSettings.d.ts +164 -0
  49. package/script/dsl/ContentSettings.d.ts.map +1 -1
  50. package/script/dsl/ContentSettings.js +151 -0
  51. package/script/dsl/Definition.d.ts +199 -0
  52. package/script/dsl/Definition.d.ts.map +1 -1
  53. package/script/dsl/Definition.js +189 -0
  54. package/script/dsl/EntityType.d.ts +83 -0
  55. package/script/dsl/EntityType.d.ts.map +1 -1
  56. package/script/dsl/EntityType.js +83 -0
  57. package/script/dsl/Identifier.d.ts +152 -0
  58. package/script/dsl/Identifier.d.ts.map +1 -1
  59. package/script/dsl/Identifier.js +152 -0
  60. package/script/dsl/Import.d.ts +221 -0
  61. package/script/dsl/Import.d.ts.map +1 -1
  62. package/script/dsl/Import.js +202 -0
  63. package/script/dsl/operation/OperationBase.d.ts +181 -1
  64. package/script/dsl/operation/OperationBase.d.ts.map +1 -1
  65. package/script/dsl/operation/OperationBase.js +181 -1
  66. package/script/oas/array/Array.d.ts +109 -1
  67. package/script/oas/array/Array.d.ts.map +1 -1
  68. package/script/oas/array/Array.js +93 -1
  69. package/script/oas/document/Document.d.ts +155 -1
  70. package/script/oas/document/Document.d.ts.map +1 -1
  71. package/script/oas/document/Document.js +141 -2
  72. package/script/oas/integer/Integer.d.ts +98 -0
  73. package/script/oas/integer/Integer.d.ts.map +1 -1
  74. package/script/oas/integer/Integer.js +80 -0
  75. package/script/oas/object/Object.d.ts +255 -10
  76. package/script/oas/object/Object.d.ts.map +1 -1
  77. package/script/oas/object/Object.js +229 -10
  78. package/script/oas/string/String.d.ts +103 -1
  79. package/script/oas/string/String.d.ts.map +1 -1
  80. package/script/oas/string/String.js +87 -1
  81. package/script/types/Brand.d.ts +74 -0
  82. package/script/types/Brand.d.ts.map +1 -1
  83. package/script/types/Brand.js +9 -0
  84. package/script/types/GeneratorKeys.d.ts +336 -0
  85. package/script/types/GeneratorKeys.d.ts.map +1 -1
  86. package/script/types/GeneratorKeys.js +243 -0
  87. package/script/types/GeneratorType.d.ts +119 -0
  88. package/script/types/GeneratorType.d.ts.map +1 -1
  89. package/script/types/Method.d.ts +109 -0
  90. package/script/types/Method.d.ts.map +1 -1
  91. package/script/types/Method.js +84 -0
  92. package/script/types/RefName.d.ts +61 -0
  93. package/script/types/RefName.d.ts.map +1 -1
@@ -1,21 +1,242 @@
1
+ /**
2
+ * Constructor arguments for {@link Import}.
3
+ */
1
4
  type ConstructorArgs = {
5
+ /** The module path to import from */
2
6
  module: string;
7
+ /** Array of import names (can be strings or alias objects) */
3
8
  importNames: ImportNameArg[];
4
9
  };
10
+ /**
11
+ * Represents a TypeScript import statement in the SKMTC DSL system.
12
+ *
13
+ * The `Import` class generates properly formatted import statements for TypeScript
14
+ * files, handling named imports with optional aliases. It's used throughout the
15
+ * code generation pipeline to manage module dependencies.
16
+ *
17
+ * This class supports both simple string imports and aliased imports, making it
18
+ * easy to avoid naming conflicts and provide cleaner import statements.
19
+ *
20
+ * @example Basic named imports
21
+ * ```typescript
22
+ * import { Import } from '@skmtc/core';
23
+ *
24
+ * const basicImport = new Import({
25
+ * module: './types',
26
+ * importNames: ['User', 'Product', 'Order']
27
+ * });
28
+ *
29
+ * console.log(basicImport.toString());
30
+ * // import { User, Product, Order } from './types'
31
+ * ```
32
+ *
33
+ * @example Imports with aliases
34
+ * ```typescript
35
+ * const aliasedImport = new Import({
36
+ * module: 'react',
37
+ * importNames: [
38
+ * 'useState',
39
+ * 'useEffect',
40
+ * { 'default': 'React' } // Import default as React
41
+ * ]
42
+ * });
43
+ *
44
+ * console.log(aliasedImport.toString());
45
+ * // import { useState, useEffect, default as React } from 'react'
46
+ * ```
47
+ *
48
+ * @example Mixed imports
49
+ * ```typescript
50
+ * const mixedImport = new Import({
51
+ * module: './api/client',
52
+ * importNames: [
53
+ * 'ApiClient',
54
+ * { 'RequestOptions': 'Options' }, // Alias to avoid conflicts
55
+ * 'ResponseType'
56
+ * ]
57
+ * });
58
+ *
59
+ * console.log(mixedImport.toString());
60
+ * // import { ApiClient, RequestOptions as Options, ResponseType } from './api/client'
61
+ * ```
62
+ *
63
+ * @example Using in File generation
64
+ * ```typescript
65
+ * import { File, Import } from '@skmtc/core';
66
+ *
67
+ * const file = new File({ path: './generated.ts', settings: undefined });
68
+ *
69
+ * // Add import to file
70
+ * file.imports.set('./types', new Set(['User', 'Product']));
71
+ *
72
+ * // Or create Import directly for more control
73
+ * const customImport = new Import({
74
+ * module: './helpers',
75
+ * importNames: [{ 'validateEmail': 'emailValidator' }]
76
+ * });
77
+ * ```
78
+ */
5
79
  export declare class Import {
80
+ /** The module path to import from */
6
81
  module: string;
82
+ /** Array of parsed import names with potential aliases */
7
83
  importNames: ImportName[];
84
+ /**
85
+ * Creates a new Import instance.
86
+ *
87
+ * @param args - Import configuration
88
+ * @param args.module - The module path to import from (e.g., './types', 'react')
89
+ * @param args.importNames - Array of import names, can be strings or alias objects
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const importStatement = new Import({
94
+ * module: './models/User',
95
+ * importNames: [
96
+ * 'User', // Simple import
97
+ * { 'UserType': 'IUser' }, // Aliased import
98
+ * 'createUser' // Another simple import
99
+ * ]
100
+ * });
101
+ * ```
102
+ */
8
103
  constructor({ module, importNames }: ConstructorArgs);
104
+ /**
105
+ * Converts the import to a record format.
106
+ *
107
+ * This method creates a record representation where the module path is the key
108
+ * and the import names are the value. Useful for serialization or when working
109
+ * with import maps.
110
+ *
111
+ * @returns A record with module as key and import names as value
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * const importStatement = new Import({
116
+ * module: './types',
117
+ * importNames: ['User', { 'Product': 'IProduct' }]
118
+ * });
119
+ *
120
+ * const record = importStatement.toRecord();
121
+ * console.log(record);
122
+ * // {
123
+ * // './types': ['User', { 'Product': 'IProduct' }]
124
+ * // }
125
+ * ```
126
+ */
9
127
  toRecord(): Record<string, ImportNameArg[]>;
128
+ /**
129
+ * Generates the TypeScript import statement string.
130
+ *
131
+ * This method produces a properly formatted ES6 import statement that can be
132
+ * written directly to a TypeScript file. It handles both simple and aliased
133
+ * imports correctly.
134
+ *
135
+ * @returns The formatted import statement string
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const basicImport = new Import({
140
+ * module: './utils',
141
+ * importNames: ['formatDate', 'parseJson']
142
+ * });
143
+ *
144
+ * console.log(basicImport.toString());
145
+ * // import { formatDate, parseJson } from './utils'
146
+ *
147
+ * const aliasedImport = new Import({
148
+ * module: 'lodash',
149
+ * importNames: [{ 'isEqual': 'deepEqual' }, 'cloneDeep']
150
+ * });
151
+ *
152
+ * console.log(aliasedImport.toString());
153
+ * // import { isEqual as deepEqual, cloneDeep } from 'lodash'
154
+ * ```
155
+ *
156
+ * @todo Move syntax to typescript package to enable language-agnostic use
157
+ */
10
158
  toString(): string;
11
159
  }
160
+ /**
161
+ * Argument type for import names - can be a simple string or an alias object.
162
+ *
163
+ * @example String import
164
+ * ```typescript
165
+ * const simpleImport: ImportNameArg = 'User';
166
+ * ```
167
+ *
168
+ * @example Aliased import
169
+ * ```typescript
170
+ * const aliasedImport: ImportNameArg = { 'User': 'IUser' };
171
+ * // This creates: User as IUser
172
+ * ```
173
+ */
12
174
  export type ImportNameArg = string | {
13
175
  [name: string]: string;
14
176
  };
177
+ /**
178
+ * Represents a single import name with optional aliasing.
179
+ *
180
+ * This class handles the parsing and formatting of individual import specifiers,
181
+ * supporting both simple imports and aliased imports. It's used internally by
182
+ * the {@link Import} class to manage import statement components.
183
+ *
184
+ * @example Simple import name
185
+ * ```typescript
186
+ * const simple = new ImportName('useState');
187
+ * console.log(simple.toString()); // 'useState'
188
+ * ```
189
+ *
190
+ * @example Aliased import name
191
+ * ```typescript
192
+ * const aliased = new ImportName({ 'React': 'ReactLib' });
193
+ * console.log(aliased.toString()); // 'React as ReactLib'
194
+ * ```
195
+ */
15
196
  export declare class ImportName {
197
+ /** The original name being imported */
16
198
  name: string;
199
+ /** The alias to use (if any) */
17
200
  alias?: string;
201
+ /**
202
+ * Creates a new ImportName instance.
203
+ *
204
+ * @param name - Either a string for simple imports or an object for aliased imports
205
+ *
206
+ * @example Simple import
207
+ * ```typescript
208
+ * const importName = new ImportName('User');
209
+ * // Results in: User
210
+ * ```
211
+ *
212
+ * @example Aliased import
213
+ * ```typescript
214
+ * const importName = new ImportName({ 'UserInterface': 'IUser' });
215
+ * // Results in: UserInterface as IUser
216
+ * ```
217
+ */
18
218
  constructor(name: ImportNameArg);
219
+ /**
220
+ * Generates the string representation of the import name.
221
+ *
222
+ * This method creates the appropriate import specifier syntax,
223
+ * either a simple name or an aliased import using TypeScript's
224
+ * 'as' keyword.
225
+ *
226
+ * @returns The formatted import specifier string
227
+ *
228
+ * @example Simple import
229
+ * ```typescript
230
+ * const simple = new ImportName('useState');
231
+ * console.log(simple.toString()); // 'useState'
232
+ * ```
233
+ *
234
+ * @example Aliased import
235
+ * ```typescript
236
+ * const aliased = new ImportName({ 'Component': 'ReactComponent' });
237
+ * console.log(aliased.toString()); // 'Component as ReactComponent'
238
+ * ```
239
+ */
19
240
  toString(): string;
20
241
  }
21
242
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Import.d.ts","sourceRoot":"","sources":["../../src/dsl/Import.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,aAAa,EAAE,CAAA;CAC7B,CAAA;AAED,qBAAa,MAAM;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,UAAU,EAAE,CAAA;gBAEb,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,eAAe;IAKpD,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAQ3C,QAAQ,IAAI,MAAM;CAKnB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAE/D,qBAAa,UAAU;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEF,IAAI,EAAE,aAAa;IAW/B,QAAQ,IAAI,MAAM;CAGnB"}
1
+ {"version":3,"file":"Import.d.ts","sourceRoot":"","sources":["../../src/dsl/Import.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,WAAW,EAAE,aAAa,EAAE,CAAA;CAC7B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,qBAAa,MAAM;IACjB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IAEd,0DAA0D;IAC1D,WAAW,EAAE,UAAU,EAAE,CAAA;IAEzB;;;;;;;;;;;;;;;;;;OAkBG;gBACS,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,eAAe;IAKpD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAQ3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,IAAI,MAAM;CAKnB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAU;IACrB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IAEZ,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;;;;;;;;;;;;;;OAgBG;gBACS,IAAI,EAAE,aAAa;IAW/B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,IAAI,MAAM;CAGnB"}
@@ -1,14 +1,104 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImportName = exports.Import = void 0;
4
+ /**
5
+ * Represents a TypeScript import statement in the SKMTC DSL system.
6
+ *
7
+ * The `Import` class generates properly formatted import statements for TypeScript
8
+ * files, handling named imports with optional aliases. It's used throughout the
9
+ * code generation pipeline to manage module dependencies.
10
+ *
11
+ * This class supports both simple string imports and aliased imports, making it
12
+ * easy to avoid naming conflicts and provide cleaner import statements.
13
+ *
14
+ * @example Basic named imports
15
+ * ```typescript
16
+ * import { Import } from '@skmtc/core';
17
+ *
18
+ * const basicImport = new Import({
19
+ * module: './types',
20
+ * importNames: ['User', 'Product', 'Order']
21
+ * });
22
+ *
23
+ * console.log(basicImport.toString());
24
+ * // import { User, Product, Order } from './types'
25
+ * ```
26
+ *
27
+ * @example Imports with aliases
28
+ * ```typescript
29
+ * const aliasedImport = new Import({
30
+ * module: 'react',
31
+ * importNames: [
32
+ * 'useState',
33
+ * 'useEffect',
34
+ * { 'default': 'React' } // Import default as React
35
+ * ]
36
+ * });
37
+ *
38
+ * console.log(aliasedImport.toString());
39
+ * // import { useState, useEffect, default as React } from 'react'
40
+ * ```
41
+ *
42
+ * @example Mixed imports
43
+ * ```typescript
44
+ * const mixedImport = new Import({
45
+ * module: './api/client',
46
+ * importNames: [
47
+ * 'ApiClient',
48
+ * { 'RequestOptions': 'Options' }, // Alias to avoid conflicts
49
+ * 'ResponseType'
50
+ * ]
51
+ * });
52
+ *
53
+ * console.log(mixedImport.toString());
54
+ * // import { ApiClient, RequestOptions as Options, ResponseType } from './api/client'
55
+ * ```
56
+ *
57
+ * @example Using in File generation
58
+ * ```typescript
59
+ * import { File, Import } from '@skmtc/core';
60
+ *
61
+ * const file = new File({ path: './generated.ts', settings: undefined });
62
+ *
63
+ * // Add import to file
64
+ * file.imports.set('./types', new Set(['User', 'Product']));
65
+ *
66
+ * // Or create Import directly for more control
67
+ * const customImport = new Import({
68
+ * module: './helpers',
69
+ * importNames: [{ 'validateEmail': 'emailValidator' }]
70
+ * });
71
+ * ```
72
+ */
4
73
  class Import {
74
+ /**
75
+ * Creates a new Import instance.
76
+ *
77
+ * @param args - Import configuration
78
+ * @param args.module - The module path to import from (e.g., './types', 'react')
79
+ * @param args.importNames - Array of import names, can be strings or alias objects
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * const importStatement = new Import({
84
+ * module: './models/User',
85
+ * importNames: [
86
+ * 'User', // Simple import
87
+ * { 'UserType': 'IUser' }, // Aliased import
88
+ * 'createUser' // Another simple import
89
+ * ]
90
+ * });
91
+ * ```
92
+ */
5
93
  constructor({ module, importNames }) {
94
+ /** The module path to import from */
6
95
  Object.defineProperty(this, "module", {
7
96
  enumerable: true,
8
97
  configurable: true,
9
98
  writable: true,
10
99
  value: void 0
11
100
  });
101
+ /** Array of parsed import names with potential aliases */
12
102
  Object.defineProperty(this, "importNames", {
13
103
  enumerable: true,
14
104
  configurable: true,
@@ -18,11 +108,64 @@ class Import {
18
108
  this.module = module;
19
109
  this.importNames = importNames.map(importName => new ImportName(importName));
20
110
  }
111
+ /**
112
+ * Converts the import to a record format.
113
+ *
114
+ * This method creates a record representation where the module path is the key
115
+ * and the import names are the value. Useful for serialization or when working
116
+ * with import maps.
117
+ *
118
+ * @returns A record with module as key and import names as value
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const importStatement = new Import({
123
+ * module: './types',
124
+ * importNames: ['User', { 'Product': 'IProduct' }]
125
+ * });
126
+ *
127
+ * const record = importStatement.toRecord();
128
+ * console.log(record);
129
+ * // {
130
+ * // './types': ['User', { 'Product': 'IProduct' }]
131
+ * // }
132
+ * ```
133
+ */
21
134
  toRecord() {
22
135
  return {
23
136
  [this.module]: this.importNames.map(({ name, alias }) => alias ? { [name]: alias } : name)
24
137
  };
25
138
  }
139
+ /**
140
+ * Generates the TypeScript import statement string.
141
+ *
142
+ * This method produces a properly formatted ES6 import statement that can be
143
+ * written directly to a TypeScript file. It handles both simple and aliased
144
+ * imports correctly.
145
+ *
146
+ * @returns The formatted import statement string
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const basicImport = new Import({
151
+ * module: './utils',
152
+ * importNames: ['formatDate', 'parseJson']
153
+ * });
154
+ *
155
+ * console.log(basicImport.toString());
156
+ * // import { formatDate, parseJson } from './utils'
157
+ *
158
+ * const aliasedImport = new Import({
159
+ * module: 'lodash',
160
+ * importNames: [{ 'isEqual': 'deepEqual' }, 'cloneDeep']
161
+ * });
162
+ *
163
+ * console.log(aliasedImport.toString());
164
+ * // import { isEqual as deepEqual, cloneDeep } from 'lodash'
165
+ * ```
166
+ *
167
+ * @todo Move syntax to typescript package to enable language-agnostic use
168
+ */
26
169
  toString() {
27
170
  // @TODO move syntax to typescript package to enable
28
171
  // language agnostic use
@@ -30,14 +173,52 @@ class Import {
30
173
  }
31
174
  }
32
175
  exports.Import = Import;
176
+ /**
177
+ * Represents a single import name with optional aliasing.
178
+ *
179
+ * This class handles the parsing and formatting of individual import specifiers,
180
+ * supporting both simple imports and aliased imports. It's used internally by
181
+ * the {@link Import} class to manage import statement components.
182
+ *
183
+ * @example Simple import name
184
+ * ```typescript
185
+ * const simple = new ImportName('useState');
186
+ * console.log(simple.toString()); // 'useState'
187
+ * ```
188
+ *
189
+ * @example Aliased import name
190
+ * ```typescript
191
+ * const aliased = new ImportName({ 'React': 'ReactLib' });
192
+ * console.log(aliased.toString()); // 'React as ReactLib'
193
+ * ```
194
+ */
33
195
  class ImportName {
196
+ /**
197
+ * Creates a new ImportName instance.
198
+ *
199
+ * @param name - Either a string for simple imports or an object for aliased imports
200
+ *
201
+ * @example Simple import
202
+ * ```typescript
203
+ * const importName = new ImportName('User');
204
+ * // Results in: User
205
+ * ```
206
+ *
207
+ * @example Aliased import
208
+ * ```typescript
209
+ * const importName = new ImportName({ 'UserInterface': 'IUser' });
210
+ * // Results in: UserInterface as IUser
211
+ * ```
212
+ */
34
213
  constructor(name) {
214
+ /** The original name being imported */
35
215
  Object.defineProperty(this, "name", {
36
216
  enumerable: true,
37
217
  configurable: true,
38
218
  writable: true,
39
219
  value: void 0
40
220
  });
221
+ /** The alias to use (if any) */
41
222
  Object.defineProperty(this, "alias", {
42
223
  enumerable: true,
43
224
  configurable: true,
@@ -53,6 +234,27 @@ class ImportName {
53
234
  this.alias = alias;
54
235
  }
55
236
  }
237
+ /**
238
+ * Generates the string representation of the import name.
239
+ *
240
+ * This method creates the appropriate import specifier syntax,
241
+ * either a simple name or an aliased import using TypeScript's
242
+ * 'as' keyword.
243
+ *
244
+ * @returns The formatted import specifier string
245
+ *
246
+ * @example Simple import
247
+ * ```typescript
248
+ * const simple = new ImportName('useState');
249
+ * console.log(simple.toString()); // 'useState'
250
+ * ```
251
+ *
252
+ * @example Aliased import
253
+ * ```typescript
254
+ * const aliased = new ImportName({ 'Component': 'ReactComponent' });
255
+ * console.log(aliased.toString()); // 'Component as ReactComponent'
256
+ * ```
257
+ */
56
258
  toString() {
57
259
  return this.alias ? `${this.name} as ${this.alias}` : this.name;
58
260
  }
@@ -199,10 +199,190 @@ export declare class OperationBase<EnrichmentType = undefined> extends ContentBa
199
199
  * ```
200
200
  */
201
201
  insertOperation<V extends GeneratedValue, EnrichmentType = undefined>(insertable: OperationInsertable<V, EnrichmentType>, operation: OasOperation, options?: Pick<InsertOperationOptions<'force'>, 'noExport'>): Inserted<V, 'force', EnrichmentType>;
202
+ /**
203
+ * Inserts a related model with forced generation.
204
+ *
205
+ * This method adds a model to the current generation context, typically used
206
+ * for request/response models or other types related to the operation. The model
207
+ * will be generated and can be referenced in the operation code.
208
+ *
209
+ * @template V - Type of generated value returned by the insertable
210
+ * @template EnrichmentType - Type of enrichment data for the insertable
211
+ * @param insertable - The model generator to insert
212
+ * @param refName - Reference name for the inserted model
213
+ * @param options - Insertion options
214
+ * @param options.noExport - Whether to skip exporting the inserted model
215
+ * @returns Inserted model reference with generated value
216
+ *
217
+ * @example Inserting request/response models
218
+ * ```typescript
219
+ * class ApiOperation extends OperationBase {
220
+ * toDefinition(): Definition {
221
+ * // Insert request model
222
+ * const requestModel = this.insertModel(
223
+ * new RequestModel({ ... }),
224
+ * 'CreateUserRequest'
225
+ * );
226
+ *
227
+ * // Insert response model
228
+ * const responseModel = this.insertModel(
229
+ * new ResponseModel({ ... }),
230
+ * 'CreateUserResponse'
231
+ * );
232
+ *
233
+ * return new Definition({
234
+ * name: this.operation.operationId,
235
+ * content: `async ${this.operation.operationId}(data: ${requestModel.value}): Promise<${responseModel.value}> {
236
+ * return this.request('${this.operation.method}', '${this.operation.path}', data);
237
+ * }`
238
+ * });
239
+ * }
240
+ * }
241
+ * ```
242
+ */
202
243
  insertModel<V extends GeneratedValue, EnrichmentType = undefined>(insertable: ModelInsertable<V, EnrichmentType>, refName: RefName, options?: Pick<InsertModelOptions<'force'>, 'noExport'>): Inserted<V, 'force', EnrichmentType>;
244
+ /**
245
+ * Inserts a related model with automatic schema normalization and reference resolution.
246
+ *
247
+ * This method intelligently handles schema references from operation request/response
248
+ * bodies, automatically resolving schema references to appropriate model names.
249
+ * This is particularly useful for operations with complex request/response schemas.
250
+ *
251
+ * @template V - Type of generated value returned by the insertable
252
+ * @template Schema - Type of OpenAPI schema (schema object, reference, or void)
253
+ * @template EnrichmentType - Type of enrichment data for the insertable
254
+ * @param insertable - The model generator to insert
255
+ * @param args - Schema normalization arguments
256
+ * @param args.schema - The OpenAPI schema to normalize (from request/response)
257
+ * @param args.fallbackName - Name to use if schema is not a reference
258
+ * @param options - Insertion options
259
+ * @param options.noExport - Whether to skip exporting the inserted model
260
+ * @returns Inserted model reference with normalized name and generated value
261
+ *
262
+ * @example Handling operation request/response schemas
263
+ * ```typescript
264
+ * class RestApiOperation extends OperationBase {
265
+ * toDefinition(): Definition {
266
+ * const operation = this.operation;
267
+ *
268
+ * // Handle request body schema
269
+ * let requestType = 'void';
270
+ * const requestSchema = operation.requestBody?.content?.['application/json']?.schema;
271
+ * if (requestSchema) {
272
+ * const requestModel = this.insertNormalizedModel(
273
+ * new TypeScriptInterface({ ... }),
274
+ * {
275
+ * schema: requestSchema,
276
+ * fallbackName: `${operation.operationId}Request`
277
+ * }
278
+ * );
279
+ * requestType = requestModel.value;
280
+ * }
281
+ *
282
+ * // Handle response schema
283
+ * const responseSchema = operation.responses?.['200']?.content?.['application/json']?.schema;
284
+ * const responseModel = this.insertNormalizedModel(
285
+ * new TypeScriptInterface({ ... }),
286
+ * {
287
+ * schema: responseSchema,
288
+ * fallbackName: `${operation.operationId}Response`
289
+ * }
290
+ * );
291
+ *
292
+ * return new Definition({
293
+ * name: operation.operationId,
294
+ * content: `async ${operation.operationId}(data: ${requestType}): Promise<${responseModel.value}>`
295
+ * });
296
+ * }
297
+ * }
298
+ * ```
299
+ */
203
300
  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>;
204
- /** @experimental */
301
+ /**
302
+ * Defines and registers a new definition in the generation context.
303
+ *
304
+ * This is an experimental method that allows creating and registering
305
+ * definitions directly without going through the standard insertion flow.
306
+ * Use with caution as the API may change in future versions.
307
+ *
308
+ * @experimental This method's API may change in future versions
309
+ * @template V - Type of generated value
310
+ * @param args - Definition arguments
311
+ * @param args.identifier - Unique identifier for the definition
312
+ * @param args.value - The generated value to associate with the definition
313
+ * @param args.noExport - Whether to skip exporting the definition
314
+ * @returns The created and registered definition
315
+ *
316
+ * @example Creating inline definitions
317
+ * ```typescript
318
+ * class InlineHelperOperation extends OperationBase {
319
+ * toDefinition(): Definition {
320
+ * // Create an inline helper function
321
+ * const helper = this.defineAndRegister({
322
+ * identifier: 'validateRequest',
323
+ * value: 'function validateRequest(data: any) { ... }',
324
+ * noExport: true
325
+ * });
326
+ *
327
+ * return new Definition({
328
+ * name: this.operation.operationId,
329
+ * content: `async ${this.operation.operationId}(data: any) {
330
+ * ${helper.value}(data);
331
+ * return this.request('${this.operation.method}', '${this.operation.path}', data);
332
+ * }`
333
+ * });
334
+ * }
335
+ * }
336
+ * ```
337
+ */
205
338
  defineAndRegister<V extends GeneratedValue>({ identifier, value, noExport }: Omit<DefineAndRegisterArgs<V>, 'destinationPath'>): Definition<V>;
339
+ /**
340
+ * Registers a file-level artifact with the generation context.
341
+ *
342
+ * This method allows the operation generator to register additional content
343
+ * (like imports, exports, or file-level definitions) that should be included
344
+ * in the generated file. The registration is automatically scoped to this
345
+ * operation's export path.
346
+ *
347
+ * @param args - Registration arguments
348
+ * @param args.content - The content to register (import, export, etc.)
349
+ * @param args.phase - When to register the content ('pre' or 'post')
350
+ *
351
+ * @example Registering API client imports
352
+ * ```typescript
353
+ * class HttpOperation extends OperationBase {
354
+ * toDefinition(): Definition {
355
+ * // Register imports needed for HTTP operations
356
+ * this.register({
357
+ * content: "import { ApiClient } from './client';",
358
+ * phase: 'pre'
359
+ * });
360
+ *
361
+ * this.register({
362
+ * content: "import { RequestOptions } from './types';",
363
+ * phase: 'pre'
364
+ * });
365
+ *
366
+ * return new Definition({ ... });
367
+ * }
368
+ * }
369
+ * ```
370
+ *
371
+ * @example Registering utility exports
372
+ * ```typescript
373
+ * class ApiOperationGroup extends OperationBase {
374
+ * toDefinition(): Definition {
375
+ * // Register a utility export after all operations
376
+ * this.register({
377
+ * content: "export const API_VERSION = '1.0';",
378
+ * phase: 'post'
379
+ * });
380
+ *
381
+ * return new Definition({ ... });
382
+ * }
383
+ * }
384
+ * ```
385
+ */
206
386
  register(args: BaseRegisterArgs): void;
207
387
  }
208
388
  //# sourceMappingURL=OperationBase.d.ts.map