@devbie/apits 0.0.0-stage → 1.0.0

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 (51) hide show
  1. package/README.md +89 -2
  2. package/bin/apits +4 -0
  3. package/dist/cjs/core/cli.d.ts +29 -0
  4. package/dist/cjs/core/cli.js +396 -0
  5. package/dist/cjs/core/generator.d.ts +44 -0
  6. package/dist/cjs/core/generator.js +301 -0
  7. package/dist/cjs/core/writeRequestClient.d.ts +2 -0
  8. package/dist/cjs/core/writeRequestClient.js +93 -0
  9. package/dist/cjs/index.d.ts +2 -0
  10. package/dist/cjs/index.js +25 -0
  11. package/dist/cjs/types.d.ts +330 -0
  12. package/dist/cjs/types.js +90 -0
  13. package/dist/cjs/utils/console.d.ts +16 -0
  14. package/dist/cjs/utils/console.js +79 -0
  15. package/dist/cjs/utils/getOutputPath.d.ts +5 -0
  16. package/dist/cjs/utils/getOutputPath.js +43 -0
  17. package/dist/cjs/utils/helpers.d.ts +65 -0
  18. package/dist/cjs/utils/helpers.js +166 -0
  19. package/dist/cjs/utils/openApiToInterfaces.d.ts +14 -0
  20. package/dist/cjs/utils/openApiToInterfaces.js +229 -0
  21. package/dist/cjs/utils/spinner.d.ts +15 -0
  22. package/dist/cjs/utils/spinner.js +69 -0
  23. package/dist/cjs/utils/utils.d.ts +56 -0
  24. package/dist/cjs/utils/utils.js +355 -0
  25. package/dist/cjs/utils/vtilsLite.d.ts +55 -0
  26. package/dist/cjs/utils/vtilsLite.js +123 -0
  27. package/dist/esm/core/cli.d.mts +29 -0
  28. package/dist/esm/core/cli.mjs +713 -0
  29. package/dist/esm/core/generator.d.mts +44 -0
  30. package/dist/esm/core/generator.mjs +463 -0
  31. package/dist/esm/core/writeRequestClient.d.mts +2 -0
  32. package/dist/esm/core/writeRequestClient.mjs +54 -0
  33. package/dist/esm/index.d.mts +2 -0
  34. package/dist/esm/index.mjs +2 -0
  35. package/dist/esm/types.d.mts +330 -0
  36. package/dist/esm/types.mjs +94 -0
  37. package/dist/esm/utils/console.d.mts +16 -0
  38. package/dist/esm/utils/console.mjs +65 -0
  39. package/dist/esm/utils/getOutputPath.d.mts +5 -0
  40. package/dist/esm/utils/getOutputPath.mjs +12 -0
  41. package/dist/esm/utils/helpers.d.mts +65 -0
  42. package/dist/esm/utils/helpers.mjs +226 -0
  43. package/dist/esm/utils/openApiToInterfaces.d.mts +14 -0
  44. package/dist/esm/utils/openApiToInterfaces.mjs +326 -0
  45. package/dist/esm/utils/spinner.d.mts +15 -0
  46. package/dist/esm/utils/spinner.mjs +58 -0
  47. package/dist/esm/utils/utils.d.mts +56 -0
  48. package/dist/esm/utils/utils.mjs +545 -0
  49. package/dist/esm/utils/vtilsLite.d.mts +55 -0
  50. package/dist/esm/utils/vtilsLite.mjs +142 -0
  51. package/package.json +68 -4
@@ -0,0 +1,355 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/utils/utils.ts
20
+ var utils_exports = {};
21
+ __export(utils_exports, {
22
+ formatContent: () => formatContent,
23
+ getRequestDataJsonSchema: () => getRequestDataJsonSchema,
24
+ getResponseDataJsonSchema: () => getResponseDataJsonSchema,
25
+ jsonSchemaToTsCode: () => jsonSchemaToTsCode,
26
+ preprocessSchema: () => preprocessSchema,
27
+ processJsonSchema: () => processJsonSchema,
28
+ topNotesContent: () => topNotesContent
29
+ });
30
+ module.exports = __toCommonJS(utils_exports);
31
+ var import_vtilsLite = require("./vtilsLite.js");
32
+ var import_json_schema_to_typescript = require("json-schema-to-typescript");
33
+ var import_prettier = require("prettier");
34
+ var import_types = require("../types.js");
35
+ function upperFirst(value) {
36
+ return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;
37
+ }
38
+ function processJsonSchema(jsonSchema) {
39
+ if (!(0, import_vtilsLite.isObject)(jsonSchema))
40
+ return jsonSchema;
41
+ delete jsonSchema.title;
42
+ delete jsonSchema.id;
43
+ delete jsonSchema.minItems;
44
+ delete jsonSchema.maxItems;
45
+ delete jsonSchema.default;
46
+ if (jsonSchema.nullable === true) {
47
+ if (jsonSchema.type) {
48
+ const types = (0, import_vtilsLite.castArray)(jsonSchema.type).filter((t) => t !== "null");
49
+ if (!types.includes("null"))
50
+ types.push("null");
51
+ jsonSchema.type = types.length === 1 ? types[0] : types;
52
+ } else if (jsonSchema.enum && Array.isArray(jsonSchema.enum)) {
53
+ if (!jsonSchema.enum.includes(null)) {
54
+ jsonSchema.enum = [...jsonSchema.enum, null];
55
+ }
56
+ }
57
+ delete jsonSchema.nullable;
58
+ }
59
+ if (jsonSchema.type) {
60
+ const isMultiple = Array.isArray(jsonSchema.type);
61
+ const types = (0, import_vtilsLite.castArray)(jsonSchema.type).map((type) => {
62
+ type = type.toLowerCase();
63
+ type = {
64
+ int: "integer"
65
+ }[type] || type;
66
+ return type;
67
+ });
68
+ jsonSchema.type = isMultiple ? types : types[0];
69
+ }
70
+ if ((0, import_vtilsLite.isArray)(jsonSchema.properties)) {
71
+ jsonSchema.properties = jsonSchema.properties.reduce(
72
+ (props, js) => {
73
+ props[js.name] = js;
74
+ return props;
75
+ },
76
+ {}
77
+ );
78
+ }
79
+ if (jsonSchema.properties) {
80
+ (0, import_vtilsLite.forOwn)(jsonSchema.properties, (_, prop) => {
81
+ const propDef = jsonSchema.properties[prop];
82
+ delete jsonSchema.properties[prop];
83
+ jsonSchema.properties[prop.trim()] = propDef;
84
+ });
85
+ jsonSchema.required = jsonSchema.required && jsonSchema.required.map((prop) => prop.trim());
86
+ }
87
+ if (jsonSchema.properties) {
88
+ (0, import_vtilsLite.forOwn)(jsonSchema.properties, processJsonSchema);
89
+ }
90
+ if (jsonSchema.items) {
91
+ (0, import_vtilsLite.castArray)(jsonSchema.items).forEach(processJsonSchema);
92
+ }
93
+ if (jsonSchema.oneOf) {
94
+ jsonSchema.oneOf.forEach(processJsonSchema);
95
+ }
96
+ if (jsonSchema.anyOf) {
97
+ jsonSchema.anyOf.forEach(processJsonSchema);
98
+ }
99
+ if (jsonSchema.allOf) {
100
+ jsonSchema.allOf.forEach(processJsonSchema);
101
+ }
102
+ return jsonSchema;
103
+ }
104
+ function jsonSchemaStringToJsonSchema(str) {
105
+ return processJsonSchema(JSON.parse(str));
106
+ }
107
+ function propDefinitionsToJsonSchema(propDefinitions) {
108
+ return processJsonSchema({
109
+ type: "object",
110
+ required: propDefinitions.reduce((res, prop) => {
111
+ if (prop.required) {
112
+ res.push(prop.name);
113
+ }
114
+ return res;
115
+ }, []),
116
+ properties: propDefinitions.reduce((res, prop) => {
117
+ res[prop.name] = {
118
+ type: prop.type,
119
+ description: prop.comment,
120
+ // File fields emit the native DOM `File` type (or `File[]` for
121
+ // multi-file arrays) so generated code has no dangling reference
122
+ // to the generator-internal `FileData` class. Non-file fields with
123
+ // an enum constraint emit a literal union.
124
+ ...prop.type === "file" ? { tsType: prop.isArray ? "File[]" : "File" } : Array.isArray(prop.enum) && prop.enum.length ? { enum: prop.enum } : {}
125
+ };
126
+ return res;
127
+ }, {})
128
+ });
129
+ }
130
+ function preprocessSchema(schema) {
131
+ if (!(0, import_vtilsLite.isObject)(schema)) {
132
+ return schema;
133
+ }
134
+ if (Array.isArray(schema)) {
135
+ return schema.map(preprocessSchema);
136
+ }
137
+ const processed = { ...schema };
138
+ if (processed.enum && Array.isArray(processed.enum) && processed.enum.length === 0) {
139
+ delete processed.enum;
140
+ }
141
+ if (processed.nullable === true) {
142
+ if (processed.type) {
143
+ const typeList = (0, import_vtilsLite.castArray)(processed.type).filter((typeName) => typeName !== "null");
144
+ typeList.push("null");
145
+ processed.type = typeList.length === 1 ? typeList[0] : typeList;
146
+ } else if (Array.isArray(processed.enum)) {
147
+ if (!processed.enum.includes(null))
148
+ processed.enum = [...processed.enum, null];
149
+ }
150
+ delete processed.nullable;
151
+ }
152
+ for (const key in processed) {
153
+ if (processed.hasOwnProperty(key)) {
154
+ processed[key] = preprocessSchema(processed[key]);
155
+ }
156
+ }
157
+ return processed;
158
+ }
159
+ function jsonSchemaTypeToTs(propSchema) {
160
+ if (!propSchema || typeof propSchema !== "object") {
161
+ return "unknown";
162
+ }
163
+ if (propSchema.tsType) {
164
+ return propSchema.tsType;
165
+ }
166
+ if (propSchema.enum && Array.isArray(propSchema.enum) && propSchema.enum.length) {
167
+ return propSchema.enum.map((v) => v === null ? "null" : `'${String(v).replace(/'/g, "\\'")}'`).join(" | ");
168
+ }
169
+ switch (propSchema.type) {
170
+ case "integer":
171
+ case "number":
172
+ return "number";
173
+ case "boolean":
174
+ return "boolean";
175
+ case "string":
176
+ return "string";
177
+ case "null":
178
+ return "null";
179
+ case "array": {
180
+ const itemSchema = Array.isArray(propSchema.items) ? propSchema.items[0] : propSchema.items;
181
+ const itemTs = itemSchema && (itemSchema.tsType || jsonSchemaTypeToTs(itemSchema));
182
+ return itemTs ? `${itemTs}[]` : "any[]";
183
+ }
184
+ case "object":
185
+ case void 0:
186
+ default:
187
+ return "unknown";
188
+ }
189
+ }
190
+ async function jsonSchemaToTsCode(jsonSchema, typeName) {
191
+ jsonSchema = preprocessSchema(jsonSchema);
192
+ typeName = upperFirst(typeName);
193
+ if ((0, import_vtilsLite.isEmpty)(jsonSchema)) {
194
+ return `export interface ${typeName} {}`;
195
+ }
196
+ if (jsonSchema.__is_any__) {
197
+ delete jsonSchema.__is_any__;
198
+ return `export type ${typeName} = any`;
199
+ }
200
+ function rewriteRefs(obj) {
201
+ for (const key in obj) {
202
+ if (obj.hasOwnProperty(key)) {
203
+ if (key === "$ref" && typeof obj[key] === "string") {
204
+ let refValue = obj[key];
205
+ if (refValue.startsWith("#components")) {
206
+ refValue = refValue.replace("#components", "#/components");
207
+ }
208
+ if (refValue.startsWith("#/components/schemas/")) {
209
+ const interfaceName = refValue.replace("#/components/schemas/", "");
210
+ obj["tsType"] = upperFirst(interfaceName);
211
+ if (obj.properties) {
212
+ const requiredArr = Array.isArray(obj.required) ? obj.required : [];
213
+ const propParts = [];
214
+ Object.keys(obj.properties).forEach((key2) => {
215
+ const propSchema = obj.properties[key2];
216
+ const tsType = propSchema.tsType || jsonSchemaTypeToTs(propSchema);
217
+ const optional = requiredArr.includes(key2) ? "" : "?";
218
+ propParts.push(`${key2}${optional}: ${tsType}`);
219
+ });
220
+ obj["tsType"] += ` & { ${propParts.join("; ")} }`;
221
+ }
222
+ delete obj["$ref"];
223
+ }
224
+ } else if (typeof obj[key] === "object" && obj[key] !== null) {
225
+ rewriteRefs(obj[key]);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ rewriteRefs(jsonSchema);
231
+ const fakeTypeName = "THISISAFAKETYPENAME";
232
+ const code = await (0, import_json_schema_to_typescript.compile)(jsonSchema, fakeTypeName, {
233
+ bannerComment: "",
234
+ additionalProperties: false,
235
+ declareExternallyReferenced: false
236
+ });
237
+ delete jsonSchema.id;
238
+ return code.replace(fakeTypeName, typeName).trim();
239
+ }
240
+ function getRequestDataJsonSchema(interfaceInfo) {
241
+ let jsonSchema;
242
+ switch (interfaceInfo.req_body_type) {
243
+ case import_types.RequestBodyType.form:
244
+ jsonSchema = propDefinitionsToJsonSchema(
245
+ interfaceInfo.req_body_form.map((item) => ({
246
+ name: item.name,
247
+ required: item.required === import_types.Required.true,
248
+ type: item.type === import_types.RequestFormItemType.file ? "file" : "string",
249
+ comment: item.desc,
250
+ // Carry multi-file and enum markers from the OAS3 multipart schema
251
+ // expansion so propDefinitionsToJsonSchema can emit `File[]` and
252
+ // literal unions instead of collapsing every field to `string`.
253
+ ...item.isArray ? { isArray: true } : {},
254
+ ...Array.isArray(item.enum) && item.enum.length ? { enum: item.enum } : {}
255
+ }))
256
+ );
257
+ break;
258
+ case import_types.RequestBodyType.json:
259
+ if (interfaceInfo.req_body_other) {
260
+ jsonSchema = jsonSchemaStringToJsonSchema(interfaceInfo.req_body_other);
261
+ }
262
+ break;
263
+ default:
264
+ break;
265
+ }
266
+ if (jsonSchema && jsonSchema.type && jsonSchema.type !== "object" && !jsonSchema.properties && !jsonSchema.$ref && !jsonSchema.oneOf && !jsonSchema.anyOf && !jsonSchema.allOf) {
267
+ delete jsonSchema.type;
268
+ delete jsonSchema.tsType;
269
+ }
270
+ if ((0, import_vtilsLite.isArray)(interfaceInfo.req_query) && interfaceInfo.req_query.length) {
271
+ const queryJsonSchema = propDefinitionsToJsonSchema(
272
+ interfaceInfo.req_query.map((item) => ({
273
+ name: item.name,
274
+ required: item.required === import_types.Required.true,
275
+ type: item.type || "any",
276
+ // `object` resolves to `{}`, which causes declaration issues, so strip it for now
277
+ comment: item.desc
278
+ }))
279
+ );
280
+ if (jsonSchema) {
281
+ jsonSchema.properties = {
282
+ ...jsonSchema.properties,
283
+ ...queryJsonSchema.properties
284
+ };
285
+ jsonSchema.required = [
286
+ ...jsonSchema.required || [],
287
+ ...queryJsonSchema.required || []
288
+ ];
289
+ } else {
290
+ jsonSchema = queryJsonSchema;
291
+ }
292
+ }
293
+ if ((0, import_vtilsLite.isArray)(interfaceInfo.req_params) && interfaceInfo.req_params.length) {
294
+ const paramsJsonSchema = propDefinitionsToJsonSchema(
295
+ interfaceInfo.req_params.map((item) => ({
296
+ name: item.name,
297
+ required: true,
298
+ type: item.type || "string",
299
+ comment: item.desc
300
+ }))
301
+ );
302
+ if (jsonSchema) {
303
+ jsonSchema.properties = {
304
+ ...jsonSchema.properties,
305
+ ...paramsJsonSchema.properties
306
+ };
307
+ jsonSchema.required = [
308
+ ...jsonSchema.required || [],
309
+ ...paramsJsonSchema.required || []
310
+ ];
311
+ } else {
312
+ jsonSchema = paramsJsonSchema;
313
+ }
314
+ }
315
+ return jsonSchema;
316
+ }
317
+ function getResponseDataJsonSchema(interfaceInfo) {
318
+ let jsonSchema = {};
319
+ switch (interfaceInfo.res_body_type) {
320
+ case import_types.ResponseBodyType.json:
321
+ if (interfaceInfo.res_body) {
322
+ jsonSchema = jsonSchemaStringToJsonSchema(interfaceInfo.res_body);
323
+ }
324
+ break;
325
+ default:
326
+ jsonSchema = { __is_any__: true };
327
+ break;
328
+ }
329
+ return jsonSchema;
330
+ }
331
+ async function formatContent(content, filePath) {
332
+ if (!filePath) {
333
+ return (0, import_prettier.format)(content, { parser: "babel-ts" });
334
+ }
335
+ const consumerConfig = await (0, import_prettier.resolveConfig)(filePath) ?? {};
336
+ return (0, import_prettier.format)(content, { ...consumerConfig, filepath: filePath });
337
+ }
338
+ function topNotesContent() {
339
+ return `
340
+ /**
341
+ * Created By apits-gen
342
+ */
343
+
344
+ `;
345
+ }
346
+ // Annotate the CommonJS export names for ESM import in node:
347
+ 0 && (module.exports = {
348
+ formatContent,
349
+ getRequestDataJsonSchema,
350
+ getResponseDataJsonSchema,
351
+ jsonSchemaToTsCode,
352
+ preprocessSchema,
353
+ processJsonSchema,
354
+ topNotesContent
355
+ });
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Local replacements for the small subset of `vtils` helpers used by this
3
+ * project. `vtils` pulls in several deprecated dependencies (cuid, uuid,
4
+ * tough-cookie@0.12.1 with a ReDoS advisory) and is otherwise unmaintained,
5
+ * so these minimal local implementations keep the dependency tree clean.
6
+ *
7
+ * Behavior matches the upstream vtils functions for the call sites in this
8
+ * repository only; no attempt is made to be a drop-in replacement for the
9
+ * full vtils API.
10
+ */
11
+ /**
12
+ * Remove `undefined` from a type. Equivalent to vtils's `Defined<T>`.
13
+ */
14
+ export type Defined<T> = Exclude<T, undefined>;
15
+ /**
16
+ * Wrap a value in an array unless it is already an array.
17
+ */
18
+ export declare function castArray<T>(value: T | T[]): T[];
19
+ /**
20
+ * `Array.isArray` alias, kept for import symmetry with the other helpers.
21
+ */
22
+ export declare const isArray: (arg: any) => arg is any[];
23
+ /**
24
+ * Check whether a value is a plain object (not null, not an array, not a
25
+ * function, not a primitive). Matches vtils `isObject` for the JSON-Schema
26
+ * values used in this project.
27
+ */
28
+ export declare function isObject(value: any): value is Record<string, any>;
29
+ /**
30
+ * Check whether a value is "empty": null/undefined, empty string, empty
31
+ * array, or an object with no own enumerable string-keyed properties.
32
+ */
33
+ export declare function isEmpty(value: any): boolean;
34
+ /**
35
+ * Iterate over the own enumerable string-keyed properties of an object,
36
+ * invoking `callback(value, key)` for each.
37
+ */
38
+ export declare function forOwn<T extends object>(obj: T, callback: (value: T[keyof T], key: keyof T) => void): void;
39
+ /**
40
+ * Iterate over a collection (array or object), invoking `callback(value, key)`
41
+ * for each item. For arrays `key` is the numeric index. Types are intentionally
42
+ * loose (matching vtils) because call sites pass heterogeneous OpenAPI data.
43
+ */
44
+ export declare function each(collection: any, callback: (value: any, key: any) => void): void;
45
+ /**
46
+ * Return the first item in a collection for which `predicate` returns a
47
+ * truthy value, or `undefined` if none matches.
48
+ */
49
+ export declare function find(collection: any, predicate: (value: any, key: any) => boolean): any;
50
+ /**
51
+ * Tagged-template helper that strips the common leading whitespace from every
52
+ * line. Multi-line interpolations keep the indentation of the line they are
53
+ * embedded on (mirrors vtils `dedent`, which first runs `indent`).
54
+ */
55
+ export declare function dedent(literals: TemplateStringsArray, ...interpolations: any[]): string;
@@ -0,0 +1,123 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/utils/vtilsLite.ts
20
+ var vtilsLite_exports = {};
21
+ __export(vtilsLite_exports, {
22
+ castArray: () => castArray,
23
+ dedent: () => dedent,
24
+ each: () => each,
25
+ find: () => find,
26
+ forOwn: () => forOwn,
27
+ isArray: () => isArray,
28
+ isEmpty: () => isEmpty,
29
+ isObject: () => isObject
30
+ });
31
+ module.exports = __toCommonJS(vtilsLite_exports);
32
+ function castArray(value) {
33
+ return Array.isArray(value) ? value : [value];
34
+ }
35
+ var isArray = Array.isArray;
36
+ function isObject(value) {
37
+ return value != null && typeof value === "object" && !Array.isArray(value);
38
+ }
39
+ function isEmpty(value) {
40
+ if (value == null)
41
+ return true;
42
+ if (typeof value === "string" || Array.isArray(value))
43
+ return value.length === 0;
44
+ if (typeof value === "object")
45
+ return Object.keys(value).length === 0;
46
+ return true;
47
+ }
48
+ function forOwn(obj, callback) {
49
+ if (obj == null)
50
+ return;
51
+ Object.keys(obj).forEach((key) => {
52
+ callback(obj[key], key);
53
+ });
54
+ }
55
+ function each(collection, callback) {
56
+ if (collection == null)
57
+ return;
58
+ if (Array.isArray(collection)) {
59
+ collection.forEach((value, index) => callback(value, index));
60
+ } else if (typeof collection === "object") {
61
+ Object.keys(collection).forEach((key) => {
62
+ callback(collection[key], key);
63
+ });
64
+ }
65
+ }
66
+ function find(collection, predicate) {
67
+ if (collection == null)
68
+ return void 0;
69
+ if (Array.isArray(collection)) {
70
+ return collection.find((value, index) => predicate(value, index));
71
+ }
72
+ if (typeof collection === "object") {
73
+ for (const key of Object.keys(collection)) {
74
+ const value = collection[key];
75
+ if (predicate(value, key))
76
+ return value;
77
+ }
78
+ }
79
+ return void 0;
80
+ }
81
+ function dedent(literals, ...interpolations) {
82
+ let text = "";
83
+ for (let i = 0; i < interpolations.length; i++) {
84
+ const literal = literals[i];
85
+ const interpolation = String(interpolations[i]);
86
+ const match = literal.match(/(?:^|[\r\n]+)([^\S\r\n]*)$/);
87
+ if (match && match[1]) {
88
+ text += literal + interpolation.replace(/([\r\n]+)(?=[^\r\n])/g, `$1${match[1]}`);
89
+ } else {
90
+ text += literal + interpolation;
91
+ }
92
+ }
93
+ text += literals[literals.length - 1];
94
+ const lines = text.split(/[\r\n]/g);
95
+ let commonLeadingWhitespace = null;
96
+ let firstLineIndex = null;
97
+ let lastLineIndex = null;
98
+ for (let i = 0; i < lines.length; i++) {
99
+ const leadingWhitespace = lines[i].match(/^\s*/)[0];
100
+ if (leadingWhitespace.length !== lines[i].length) {
101
+ lastLineIndex = i;
102
+ if (firstLineIndex == null)
103
+ firstLineIndex = i;
104
+ if (commonLeadingWhitespace == null || leadingWhitespace.length < commonLeadingWhitespace.length) {
105
+ commonLeadingWhitespace = leadingWhitespace;
106
+ }
107
+ }
108
+ }
109
+ if (commonLeadingWhitespace == null)
110
+ return text;
111
+ return lines.slice(firstLineIndex, lastLineIndex + 1).map((line) => line.slice(commonLeadingWhitespace.length)).join("\n");
112
+ }
113
+ // Annotate the CommonJS export names for ESM import in node:
114
+ 0 && (module.exports = {
115
+ castArray,
116
+ dedent,
117
+ each,
118
+ find,
119
+ forOwn,
120
+ isArray,
121
+ isEmpty,
122
+ isObject
123
+ });
@@ -0,0 +1,29 @@
1
+ import yargs from "yargs";
2
+ /** Flags accepted by the `gen` command. */
3
+ interface GenFlags {
4
+ /** OpenAPI document URL or local file path. */
5
+ input?: string;
6
+ /** Output directory. */
7
+ output?: string;
8
+ /** File base name (CLI mode) or name filter (config-file mode). */
9
+ name?: string;
10
+ /** Runtime baseURL (string; `[code]:` prefix supported). */
11
+ baseUrl?: string;
12
+ /** Whether to scaffold the default request.ts client. */
13
+ client?: boolean;
14
+ /** Watch local input files and regenerate on change. */
15
+ watch?: boolean;
16
+ }
17
+ /** Scaffold an optional apits.config.ts template. */
18
+ export declare function genConfig(prefill?: {
19
+ input?: string;
20
+ }): Promise<void>;
21
+ export declare function start(flags?: GenFlags): Promise<void>;
22
+ export default class CLI {
23
+ run(args: string[]): {
24
+ [x: string]: any;
25
+ };
26
+ private genBuilder;
27
+ init(): yargs.Argv<any>;
28
+ }
29
+ export {};