@cerios/openapi-to-zod 0.6.0 → 1.1.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.
@@ -0,0 +1,592 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/internal.ts
31
+ var internal_exports = {};
32
+ __export(internal_exports, {
33
+ LRUCache: () => LRUCache,
34
+ OperationFiltersSchema: () => OperationFiltersSchema,
35
+ RequestResponseOptionsSchema: () => RequestResponseOptionsSchema,
36
+ createFilterStatistics: () => createFilterStatistics,
37
+ createTypeScriptLoader: () => createTypeScriptLoader,
38
+ escapeJSDoc: () => escapeJSDoc,
39
+ executeBatch: () => executeBatch,
40
+ formatConfigValidationError: () => formatConfigValidationError,
41
+ formatFilterStatistics: () => formatFilterStatistics,
42
+ getBatchExitCode: () => getBatchExitCode,
43
+ shouldIncludeOperation: () => shouldIncludeOperation,
44
+ stripPathPrefix: () => stripPathPrefix,
45
+ stripPrefix: () => stripPrefix,
46
+ toCamelCase: () => toCamelCase,
47
+ toPascalCase: () => toPascalCase,
48
+ validateFilters: () => validateFilters
49
+ });
50
+ module.exports = __toCommonJS(internal_exports);
51
+
52
+ // src/errors.ts
53
+ var GeneratorError = class extends Error {
54
+ constructor(message, code, context) {
55
+ var _a;
56
+ super(message);
57
+ this.code = code;
58
+ this.context = context;
59
+ this.name = "GeneratorError";
60
+ (_a = Error.captureStackTrace) == null ? void 0 : _a.call(Error, this, this.constructor);
61
+ }
62
+ };
63
+ var ConfigurationError = class extends GeneratorError {
64
+ constructor(message, context) {
65
+ super(message, "CONFIGURATION_ERROR", context);
66
+ this.name = "ConfigurationError";
67
+ }
68
+ };
69
+
70
+ // src/batch-executor.ts
71
+ async function processSpec(spec, index, total, createGenerator) {
72
+ const specInput = spec.input || "spec";
73
+ const specOutput = spec.output || "output";
74
+ console.log(`Processing [${index + 1}/${total}] ${specInput}...`);
75
+ try {
76
+ const generator = createGenerator(spec);
77
+ generator.generate();
78
+ return {
79
+ spec,
80
+ success: true
81
+ };
82
+ } catch (error) {
83
+ const errorMessage = error instanceof Error ? error.message : String(error);
84
+ console.error(`\u2717 Failed to generate ${specOutput}: ${errorMessage}`);
85
+ return {
86
+ spec,
87
+ success: false,
88
+ error: errorMessage
89
+ };
90
+ }
91
+ }
92
+ async function executeParallel(specs, createGenerator, batchSize) {
93
+ console.log(`
94
+ Executing ${specs.length} specification(s) in parallel (batch size: ${batchSize})...
95
+ `);
96
+ const results = [];
97
+ for (let i = 0; i < specs.length; i += batchSize) {
98
+ const batch = specs.slice(i, Math.min(i + batchSize, specs.length));
99
+ const batchPromises = batch.map(
100
+ (spec, batchIndex) => processSpec(spec, i + batchIndex, specs.length, createGenerator)
101
+ );
102
+ const batchResults = await Promise.allSettled(batchPromises);
103
+ for (let j = 0; j < batchResults.length; j++) {
104
+ const result = batchResults[j];
105
+ if (result.status === "fulfilled") {
106
+ results.push(result.value);
107
+ } else {
108
+ results.push({
109
+ spec: batch[j],
110
+ success: false,
111
+ error: result.reason instanceof Error ? result.reason.message : String(result.reason)
112
+ });
113
+ }
114
+ }
115
+ }
116
+ return results;
117
+ }
118
+ async function executeSequential(specs, createGenerator) {
119
+ console.log(`
120
+ Executing ${specs.length} spec(s) sequentially...
121
+ `);
122
+ const results = [];
123
+ for (let i = 0; i < specs.length; i++) {
124
+ const result = await processSpec(specs[i], i, specs.length, createGenerator);
125
+ results.push(result);
126
+ }
127
+ return results;
128
+ }
129
+ function printSummary(summary) {
130
+ console.log(`
131
+ ${"=".repeat(50)}`);
132
+ console.log("Batch Execution Summary");
133
+ console.log("=".repeat(50));
134
+ console.log(`Total specs: ${summary.total}`);
135
+ console.log(`Successful: ${summary.successful}`);
136
+ console.log(`Failed: ${summary.failed}`);
137
+ if (summary.failed > 0) {
138
+ console.log("\nFailed specs:");
139
+ for (const result of summary.results) {
140
+ if (!result.success) {
141
+ const specInput = result.spec.input || "spec";
142
+ console.error(` \u2717 ${specInput}`);
143
+ console.error(` Error: ${result.error}`);
144
+ }
145
+ }
146
+ }
147
+ console.log(`${"=".repeat(50)}
148
+ `);
149
+ }
150
+ async function executeBatch(specs, executionMode = "parallel", createGenerator, batchSize) {
151
+ if (specs.length === 0) {
152
+ throw new ConfigurationError("No specs provided for batch execution", { specsCount: 0, executionMode });
153
+ }
154
+ let results = [];
155
+ try {
156
+ results = executionMode === "parallel" ? await executeParallel(specs, createGenerator, batchSize) : await executeSequential(specs, createGenerator);
157
+ const summary = {
158
+ total: results.length,
159
+ successful: results.filter((r) => r.success).length,
160
+ failed: results.filter((r) => !r.success).length,
161
+ results
162
+ };
163
+ printSummary(summary);
164
+ return summary;
165
+ } finally {
166
+ if (results.length > batchSize) {
167
+ for (const result of results) {
168
+ if (result.spec) {
169
+ result.spec = null;
170
+ }
171
+ }
172
+ if (global.gc) {
173
+ global.gc();
174
+ }
175
+ }
176
+ }
177
+ }
178
+ function getBatchExitCode(summary) {
179
+ return summary.failed > 0 ? 1 : 0;
180
+ }
181
+
182
+ // src/utils/config-schemas.ts
183
+ var import_zod = require("zod");
184
+ var RequestResponseOptionsSchema = import_zod.z.strictObject({
185
+ mode: import_zod.z.enum(["strict", "normal", "loose"]).optional(),
186
+ useDescribe: import_zod.z.boolean().optional(),
187
+ includeDescriptions: import_zod.z.boolean().optional()
188
+ });
189
+ var OperationFiltersSchema = import_zod.z.strictObject({
190
+ includeTags: import_zod.z.array(import_zod.z.string()).optional(),
191
+ excludeTags: import_zod.z.array(import_zod.z.string()).optional(),
192
+ includePaths: import_zod.z.array(import_zod.z.string()).optional(),
193
+ excludePaths: import_zod.z.array(import_zod.z.string()).optional(),
194
+ includeMethods: import_zod.z.array(import_zod.z.string()).optional(),
195
+ excludeMethods: import_zod.z.array(import_zod.z.string()).optional(),
196
+ includeOperationIds: import_zod.z.array(import_zod.z.string()).optional(),
197
+ excludeOperationIds: import_zod.z.array(import_zod.z.string()).optional(),
198
+ excludeDeprecated: import_zod.z.boolean().optional()
199
+ });
200
+
201
+ // src/utils/config-validation.ts
202
+ function formatConfigValidationError(error, filepath, configPath, additionalNotes) {
203
+ var _a;
204
+ const formattedErrors = ((_a = error.issues) == null ? void 0 : _a.map((err) => {
205
+ const path = err.path.length > 0 ? err.path.join(".") : "root";
206
+ return ` - ${path}: ${err.message}`;
207
+ }).join("\n")) || "Unknown validation error";
208
+ const configSource = filepath || configPath || "config file";
209
+ const lines = [
210
+ `Invalid configuration file at: ${configSource}`,
211
+ "",
212
+ "Validation errors:",
213
+ formattedErrors,
214
+ "",
215
+ "Please check your configuration file and ensure:",
216
+ " - All required fields are present (specs array with input/output)",
217
+ " - Field names are spelled correctly (no typos)",
218
+ " - Values match the expected types (e.g., mode: 'strict' | 'normal' | 'loose')",
219
+ " - No unknown/extra properties are included"
220
+ ];
221
+ if (additionalNotes && additionalNotes.length > 0) {
222
+ lines.push(...additionalNotes.map((note) => ` - ${note}`));
223
+ }
224
+ return lines.join("\n");
225
+ }
226
+
227
+ // src/utils/lru-cache.ts
228
+ var LRUCache = class {
229
+ constructor(maxSize) {
230
+ this.cache = /* @__PURE__ */ new Map();
231
+ this.maxSize = maxSize;
232
+ }
233
+ get capacity() {
234
+ return this.maxSize;
235
+ }
236
+ get(key) {
237
+ if (!this.cache.has(key)) return void 0;
238
+ const value = this.cache.get(key);
239
+ if (value === void 0) return void 0;
240
+ this.cache.delete(key);
241
+ this.cache.set(key, value);
242
+ return value;
243
+ }
244
+ set(key, value) {
245
+ if (this.cache.has(key)) {
246
+ this.cache.delete(key);
247
+ } else if (this.cache.size >= this.maxSize) {
248
+ const firstKey = this.cache.keys().next().value;
249
+ if (firstKey !== void 0) {
250
+ this.cache.delete(firstKey);
251
+ }
252
+ }
253
+ this.cache.set(key, value);
254
+ }
255
+ has(key) {
256
+ return this.cache.has(key);
257
+ }
258
+ clear() {
259
+ this.cache.clear();
260
+ }
261
+ size() {
262
+ return this.cache.size;
263
+ }
264
+ };
265
+
266
+ // src/utils/name-utils.ts
267
+ function sanitizeIdentifier(str) {
268
+ return str.replace(/[^a-zA-Z0-9._\-\s]+/g, "_");
269
+ }
270
+ function toCamelCase(str, options) {
271
+ const sanitized = sanitizeIdentifier(str);
272
+ const words = sanitized.split(/[.\-_\s]+/).filter((word) => word.length > 0);
273
+ let name;
274
+ if (words.length === 0) {
275
+ name = str.charAt(0).toLowerCase() + str.slice(1);
276
+ } else if (words.length === 1) {
277
+ name = words[0].charAt(0).toLowerCase() + words[0].slice(1);
278
+ } else {
279
+ name = words[0].charAt(0).toLowerCase() + words[0].slice(1) + words.slice(1).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
280
+ }
281
+ if (options == null ? void 0 : options.prefix) {
282
+ const prefix = options.prefix.toLowerCase();
283
+ name = prefix + name.charAt(0).toUpperCase() + name.slice(1);
284
+ }
285
+ if (options == null ? void 0 : options.suffix) {
286
+ const suffix = options.suffix;
287
+ name = name + suffix.charAt(0).toUpperCase() + suffix.slice(1).toLowerCase();
288
+ }
289
+ return name;
290
+ }
291
+ function toPascalCase(str) {
292
+ const stringValue = String(str);
293
+ const isAlreadyValidCase = /^[a-zA-Z][a-zA-Z0-9]*$/.test(stringValue);
294
+ if (isAlreadyValidCase) {
295
+ return stringValue.charAt(0).toUpperCase() + stringValue.slice(1);
296
+ }
297
+ const sanitized = sanitizeIdentifier(stringValue);
298
+ const words = sanitized.split(/[.\-_\s]+/).filter((word) => word.length > 0);
299
+ let result;
300
+ if (words.length === 0) {
301
+ result = "Value";
302
+ } else {
303
+ result = words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
304
+ }
305
+ if (/^\d/.test(result)) {
306
+ result = `N${result}`;
307
+ }
308
+ if (!result || /^_+$/.test(result)) {
309
+ return "Value";
310
+ }
311
+ return result;
312
+ }
313
+
314
+ // src/utils/operation-filters.ts
315
+ var import_minimatch = require("minimatch");
316
+ function createFilterStatistics() {
317
+ return {
318
+ totalOperations: 0,
319
+ includedOperations: 0,
320
+ filteredByTags: 0,
321
+ filteredByPaths: 0,
322
+ filteredByMethods: 0,
323
+ filteredByOperationIds: 0,
324
+ filteredByDeprecated: 0
325
+ };
326
+ }
327
+ function matchesAnyPattern(value, patterns) {
328
+ if (!patterns || patterns.length === 0) {
329
+ return false;
330
+ }
331
+ if (!value) {
332
+ return false;
333
+ }
334
+ return patterns.some((pattern) => (0, import_minimatch.minimatch)(value, pattern));
335
+ }
336
+ function containsAny(arr, values) {
337
+ if (!values || values.length === 0) {
338
+ return false;
339
+ }
340
+ if (!arr || arr.length === 0) {
341
+ return false;
342
+ }
343
+ return values.some((value) => arr.includes(value));
344
+ }
345
+ function shouldIncludeOperation(operation, path, method, filters, stats) {
346
+ if (!filters) {
347
+ return true;
348
+ }
349
+ const methodLower = method.toLowerCase();
350
+ const operationId = operation == null ? void 0 : operation.operationId;
351
+ const tags = (operation == null ? void 0 : operation.tags) || [];
352
+ const deprecated = (operation == null ? void 0 : operation.deprecated) === true;
353
+ if (filters.includeTags && filters.includeTags.length > 0) {
354
+ if (!containsAny(tags, filters.includeTags)) {
355
+ if (stats) stats.filteredByTags++;
356
+ return false;
357
+ }
358
+ }
359
+ if (filters.includePaths && filters.includePaths.length > 0) {
360
+ if (!matchesAnyPattern(path, filters.includePaths)) {
361
+ if (stats) stats.filteredByPaths++;
362
+ return false;
363
+ }
364
+ }
365
+ if (filters.includeMethods && filters.includeMethods.length > 0) {
366
+ const methodsLower = filters.includeMethods.map((m) => m.toLowerCase());
367
+ if (!methodsLower.includes(methodLower)) {
368
+ if (stats) stats.filteredByMethods++;
369
+ return false;
370
+ }
371
+ }
372
+ if (filters.includeOperationIds && filters.includeOperationIds.length > 0) {
373
+ if (!matchesAnyPattern(operationId, filters.includeOperationIds)) {
374
+ if (stats) stats.filteredByOperationIds++;
375
+ return false;
376
+ }
377
+ }
378
+ if (filters.excludeDeprecated === true && deprecated) {
379
+ if (stats) stats.filteredByDeprecated++;
380
+ return false;
381
+ }
382
+ if (filters.excludeTags && filters.excludeTags.length > 0) {
383
+ if (containsAny(tags, filters.excludeTags)) {
384
+ if (stats) stats.filteredByTags++;
385
+ return false;
386
+ }
387
+ }
388
+ if (filters.excludePaths && filters.excludePaths.length > 0) {
389
+ if (matchesAnyPattern(path, filters.excludePaths)) {
390
+ if (stats) stats.filteredByPaths++;
391
+ return false;
392
+ }
393
+ }
394
+ if (filters.excludeMethods && filters.excludeMethods.length > 0) {
395
+ const methodsLower = filters.excludeMethods.map((m) => m.toLowerCase());
396
+ if (methodsLower.includes(methodLower)) {
397
+ if (stats) stats.filteredByMethods++;
398
+ return false;
399
+ }
400
+ }
401
+ if (filters.excludeOperationIds && filters.excludeOperationIds.length > 0) {
402
+ if (matchesAnyPattern(operationId, filters.excludeOperationIds)) {
403
+ if (stats) stats.filteredByOperationIds++;
404
+ return false;
405
+ }
406
+ }
407
+ return true;
408
+ }
409
+ function validateFilters(stats, filters) {
410
+ if (!filters || stats.totalOperations === 0) {
411
+ return;
412
+ }
413
+ if (stats.includedOperations === 0) {
414
+ console.warn(
415
+ `\u26A0\uFE0F Warning: All ${stats.totalOperations} operations were filtered out. Check your operationFilters configuration.`
416
+ );
417
+ const filterBreakdown = [];
418
+ if (stats.filteredByTags > 0) filterBreakdown.push(`${stats.filteredByTags} by tags`);
419
+ if (stats.filteredByPaths > 0) filterBreakdown.push(`${stats.filteredByPaths} by paths`);
420
+ if (stats.filteredByMethods > 0) filterBreakdown.push(`${stats.filteredByMethods} by methods`);
421
+ if (stats.filteredByOperationIds > 0) filterBreakdown.push(`${stats.filteredByOperationIds} by operationIds`);
422
+ if (stats.filteredByDeprecated > 0) filterBreakdown.push(`${stats.filteredByDeprecated} by deprecated flag`);
423
+ if (filterBreakdown.length > 0) {
424
+ console.warn(` Filtered: ${filterBreakdown.join(", ")}`);
425
+ }
426
+ }
427
+ }
428
+ function formatFilterStatistics(stats) {
429
+ if (stats.totalOperations === 0) {
430
+ return "";
431
+ }
432
+ const lines = [];
433
+ lines.push("Operation Filtering:");
434
+ lines.push(` Total operations: ${stats.totalOperations}`);
435
+ lines.push(` Included operations: ${stats.includedOperations}`);
436
+ const filteredCount = stats.filteredByTags + stats.filteredByPaths + stats.filteredByMethods + stats.filteredByOperationIds + stats.filteredByDeprecated;
437
+ if (filteredCount > 0) {
438
+ lines.push(` Filtered operations: ${filteredCount}`);
439
+ if (stats.filteredByTags > 0) lines.push(` - By tags: ${stats.filteredByTags}`);
440
+ if (stats.filteredByPaths > 0) lines.push(` - By paths: ${stats.filteredByPaths}`);
441
+ if (stats.filteredByMethods > 0) lines.push(` - By methods: ${stats.filteredByMethods}`);
442
+ if (stats.filteredByOperationIds > 0) lines.push(` - By operationIds: ${stats.filteredByOperationIds}`);
443
+ if (stats.filteredByDeprecated > 0) lines.push(` - By deprecated: ${stats.filteredByDeprecated}`);
444
+ }
445
+ return lines.join("\n");
446
+ }
447
+
448
+ // src/utils/pattern-utils.ts
449
+ function isRegexPattern(pattern) {
450
+ if (pattern.startsWith("^") || pattern.endsWith("$")) {
451
+ return true;
452
+ }
453
+ if (/\\[dDwWsS]/.test(pattern)) {
454
+ return true;
455
+ }
456
+ if (/\.\*|\.\+/.test(pattern)) {
457
+ return true;
458
+ }
459
+ if (/[[\]()]/.test(pattern)) {
460
+ return true;
461
+ }
462
+ if (/[^/][+?*]\{/.test(pattern)) {
463
+ return true;
464
+ }
465
+ return false;
466
+ }
467
+ function patternToRegex(pattern) {
468
+ if (pattern instanceof RegExp) {
469
+ return pattern;
470
+ }
471
+ if (isRegexPattern(pattern)) {
472
+ try {
473
+ return new RegExp(pattern);
474
+ } catch (error) {
475
+ console.warn(`\u26A0\uFE0F Invalid regex pattern "${pattern}": ${error instanceof Error ? error.message : String(error)}`);
476
+ return null;
477
+ }
478
+ }
479
+ return null;
480
+ }
481
+ function stripPrefix(input, pattern, ensureLeadingChar) {
482
+ if (!pattern) {
483
+ return input;
484
+ }
485
+ const regex = patternToRegex(pattern);
486
+ if (regex) {
487
+ const match = input.match(regex);
488
+ if (match && match.index === 0) {
489
+ const stripped = input.substring(match[0].length);
490
+ if (ensureLeadingChar) {
491
+ if (stripped === "") {
492
+ return ensureLeadingChar;
493
+ }
494
+ if (!stripped.startsWith(ensureLeadingChar)) {
495
+ return `${ensureLeadingChar}${stripped}`;
496
+ }
497
+ }
498
+ return stripped;
499
+ }
500
+ } else {
501
+ const stringPattern = pattern;
502
+ if (input.startsWith(stringPattern)) {
503
+ const stripped = input.substring(stringPattern.length);
504
+ if (ensureLeadingChar) {
505
+ if (stripped === "") {
506
+ return ensureLeadingChar;
507
+ }
508
+ if (!stripped.startsWith(ensureLeadingChar)) {
509
+ return `${ensureLeadingChar}${stripped}`;
510
+ }
511
+ }
512
+ return stripped;
513
+ }
514
+ }
515
+ return input;
516
+ }
517
+ function stripPathPrefix(path, pattern) {
518
+ if (!pattern) {
519
+ return path;
520
+ }
521
+ const regex = patternToRegex(pattern);
522
+ if (!regex) {
523
+ let normalizedPattern = pattern.trim();
524
+ if (!normalizedPattern.startsWith("/")) {
525
+ normalizedPattern = `/${normalizedPattern}`;
526
+ }
527
+ if (normalizedPattern.endsWith("/") && normalizedPattern !== "/") {
528
+ normalizedPattern = normalizedPattern.slice(0, -1);
529
+ }
530
+ return stripPrefix(path, normalizedPattern, "/");
531
+ }
532
+ return stripPrefix(path, regex, "/");
533
+ }
534
+
535
+ // src/utils/string-utils.ts
536
+ function escapeJSDoc(str) {
537
+ return str.replace(/\*\//g, "*\\/");
538
+ }
539
+
540
+ // src/utils/typescript-loader.ts
541
+ function createTypeScriptLoader() {
542
+ return async (filepath) => {
543
+ try {
544
+ const esbuild = await import("esbuild");
545
+ const fs = await import("fs");
546
+ const path = await import("path");
547
+ const tsCode = fs.readFileSync(filepath, "utf-8");
548
+ const result = await esbuild.build({
549
+ stdin: {
550
+ contents: tsCode,
551
+ loader: "ts",
552
+ resolveDir: path.dirname(filepath),
553
+ sourcefile: filepath
554
+ },
555
+ format: "cjs",
556
+ platform: "node",
557
+ target: "node18",
558
+ bundle: false,
559
+ write: false
560
+ });
561
+ const jsCode = result.outputFiles[0].text;
562
+ const module2 = { exports: {} };
563
+ const func = new Function("exports", "module", "require", "__filename", "__dirname", jsCode);
564
+ func(module2.exports, module2, require, filepath, path.dirname(filepath));
565
+ return module2.exports.default || module2.exports;
566
+ } catch (error) {
567
+ throw new Error(
568
+ `Failed to load TypeScript config from ${filepath}: ${error instanceof Error ? error.message : String(error)}`
569
+ );
570
+ }
571
+ };
572
+ }
573
+ // Annotate the CommonJS export names for ESM import in node:
574
+ 0 && (module.exports = {
575
+ LRUCache,
576
+ OperationFiltersSchema,
577
+ RequestResponseOptionsSchema,
578
+ createFilterStatistics,
579
+ createTypeScriptLoader,
580
+ escapeJSDoc,
581
+ executeBatch,
582
+ formatConfigValidationError,
583
+ formatFilterStatistics,
584
+ getBatchExitCode,
585
+ shouldIncludeOperation,
586
+ stripPathPrefix,
587
+ stripPrefix,
588
+ toCamelCase,
589
+ toPascalCase,
590
+ validateFilters
591
+ });
592
+ //# sourceMappingURL=internal.js.map