Skip to content

Commit 2003409

Browse files
author
Haff
committed
Allow for path filtering + specific schemas
1 parent ff37380 commit 2003409

File tree

5 files changed

+41
-16
lines changed

5 files changed

+41
-16
lines changed

packages/orval/dist/bin/orval.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,9 @@ var importOpenApi = async ({
492492
workspace
493493
}) => {
494494
const specs = await generateInputSpecs({ specs: data, input, workspace });
495-
const filteredOperations = input.filters?.schemaDependencyAnalysis ? getFilteredOperations(specs[target], input.filters) : void 0;
495+
const hasPathFilters = input.filters?.paths && input.filters.paths.length > 0;
496+
const shouldAnalyzeDependencies = input.filters?.schemaDependencyAnalysis ?? hasPathFilters;
497+
const filteredOperations = shouldAnalyzeDependencies ? getFilteredOperations(specs[target], input.filters) : void 0;
496498
const schemas = getApiSchemas({
497499
input,
498500
output,
@@ -564,15 +566,16 @@ var getApiSchemas = ({
564566
output
565567
};
566568
let parsedSchemas = spec.openapi ? spec.components?.schemas : getAllSchemas(spec, specKey);
567-
if (input.filters?.schemaDependencyAnalysis && filteredOperations) {
569+
if (filteredOperations && filteredOperations.length > 0) {
568570
const specFilteredOperations = filteredOperations.filter(
569571
(op) => op.path.startsWith(specKey) || specKey === target
570572
);
571573
if (specFilteredOperations.length > 0) {
572-
parsedSchemas = (0, import_core3.filterSchemasByDependencies)(
574+
const dependencySchemas = (0, import_core3.filterSchemasByDependencies)(
573575
specFilteredOperations,
574576
parsedSchemas
575577
);
578+
parsedSchemas = { ...parsedSchemas, ...dependencySchemas };
576579
}
577580
}
578581
const schemaDefinition = (0, import_core3.generateSchemasDefinition)(

packages/orval/dist/index.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,9 @@ var importOpenApi = async ({
404404
workspace
405405
}) => {
406406
const specs = await generateInputSpecs({ specs: data, input, workspace });
407-
const filteredOperations = input.filters?.schemaDependencyAnalysis ? getFilteredOperations(specs[target], input.filters) : void 0;
407+
const hasPathFilters = input.filters?.paths && input.filters.paths.length > 0;
408+
const shouldAnalyzeDependencies = input.filters?.schemaDependencyAnalysis ?? hasPathFilters;
409+
const filteredOperations = shouldAnalyzeDependencies ? getFilteredOperations(specs[target], input.filters) : void 0;
408410
const schemas = getApiSchemas({
409411
input,
410412
output,
@@ -476,15 +478,16 @@ var getApiSchemas = ({
476478
output
477479
};
478480
let parsedSchemas = spec.openapi ? spec.components?.schemas : getAllSchemas(spec, specKey);
479-
if (input.filters?.schemaDependencyAnalysis && filteredOperations) {
481+
if (filteredOperations && filteredOperations.length > 0) {
480482
const specFilteredOperations = filteredOperations.filter(
481483
(op) => op.path.startsWith(specKey) || specKey === target
482484
);
483485
if (specFilteredOperations.length > 0) {
484-
parsedSchemas = (0, import_core3.filterSchemasByDependencies)(
486+
const dependencySchemas = (0, import_core3.filterSchemasByDependencies)(
485487
specFilteredOperations,
486488
parsedSchemas
487489
);
490+
parsedSchemas = { ...parsedSchemas, ...dependencySchemas };
488491
}
489492
}
490493
const schemaDefinition = (0, import_core3.generateSchemasDefinition)(

packages/orval/dist/src/import-open-api.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/orval/src/import-open-api.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@ export const importOpenApi = async ({
4040
const specs = await generateInputSpecs({ specs: data, input, workspace });
4141

4242
// Get filtered operations for schema dependency analysis
43-
const filteredOperations = input.filters?.schemaDependencyAnalysis
43+
// Enable dependency analysis automatically when path filters are used
44+
const hasPathFilters = input.filters?.paths && input.filters.paths.length > 0;
45+
const shouldAnalyzeDependencies =
46+
input.filters?.schemaDependencyAnalysis ?? hasPathFilters;
47+
48+
const filteredOperations = shouldAnalyzeDependencies
4449
? getFilteredOperations(specs[target], input.filters)
4550
: undefined;
4651

@@ -142,16 +147,18 @@ const getApiSchemas = ({
142147
: getAllSchemas(spec, specKey);
143148

144149
// Apply schema dependency analysis if enabled and we have filtered operations
145-
if (input.filters?.schemaDependencyAnalysis && filteredOperations) {
150+
if (filteredOperations && filteredOperations.length > 0) {
146151
const specFilteredOperations = filteredOperations.filter(
147152
(op) => op.path.startsWith(specKey) || specKey === target,
148153
);
149154

150155
if (specFilteredOperations.length > 0) {
151-
parsedSchemas = filterSchemasByDependencies(
156+
const dependencySchemas = filterSchemasByDependencies(
152157
specFilteredOperations,
153158
parsedSchemas,
154159
);
160+
// Merge dependency schemas with original schemas to preserve explicit schema filters
161+
parsedSchemas = { ...parsedSchemas, ...dependencySchemas };
155162
}
156163
}
157164

tests/configs/default.config.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ export default defineConfig({
5151
filters: {
5252
paths: [
5353
['/pets', ['get', 'post']],
54-
['/pets/{petId}
55-
', ['get', 'put']],
54+
['/pets/{petId}', ['get', 'put']],
5655
],
5756
},
5857
},
@@ -63,12 +62,25 @@ export default defineConfig({
6362
target: '../specifications/petstore.yaml',
6463
filters: {
6564
mode: 'exclude',
66-
paths: [
67-
['/pets', ['delete']],
68-
],
65+
paths: [['/pets', ['delete']]],
66+
},
67+
},
68+
output:
69+
'../generated/default/petstore-filter-paths-methods-exclude/endpoints.ts',
70+
},
71+
'petstore-filter-paths-schema-dependency': {
72+
input: {
73+
target: '../specifications/petstore.yaml',
74+
filters: {
75+
paths: ['/health'],
6976
},
7077
},
71-
output: '../generated/default/petstore-filter-paths-methods-exclude/endpoints.ts',
78+
output: {
79+
target:
80+
'../generated/default/petstore-filter-paths-schema-dependency/endpoints.ts',
81+
schemas:
82+
'../generated/default/petstore-filter-paths-schema-dependency/model',
83+
},
7284
},
7385
'petstore-transfomer': {
7486
output: {

0 commit comments

Comments
 (0)