You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
What are you trying to achieve, or the steps to reproduce?
I want to merge all schemas from different API endpoint responses so i can let AI build a OpenAPI spec file for me
importfsfrom'fs/promises';importpathfrom'path';import{defaultResolver,mergeSchemas}from'@fastify/merge-json-schemas';asyncfunctiongetAllJsonFiles(directory){constfiles=awaitfs.readdir(directory);constjsonFiles=[];for(constfileoffiles){constfilePath=path.join(directory,file);conststats=awaitfs.stat(filePath);if(stats.isDirectory()){jsonFiles.push(...awaitgetAllJsonFiles(filePath));}elseif(path.extname(file)==='.json'){jsonFiles.push(filePath);}}returnjsonFiles;}asyncfunctionloadSchema(file){try{constcontent=awaitfs.readFile(file,'utf8');returnJSON.parse(content);}catch(error){console.error(`Error loading schema from ${file}:`,error);throwerror;}}asyncfunctionmergeSchemasWithFallback(files){letschemas=[];for(constfileoffiles){try{constschema=awaitloadSchema(file);// Check if the schema has a custom resolverif(schema.$ref&&!schema.$ref.startsWith('#')){console.log(`Found external reference: ${schema.$ref}`);// Try to resolve the $refletresolvedRef;try{resolvedRef=awaitfs.promises.readFile(schema.$ref,'utf8');resolvedRef=JSON.parse(resolvedRef);}catch(error){console.error(`Failed to resolve reference: ${schema.$ref}`,error);}// Merge the resolved schemaschemas.push(resolvedRef||schema);}else{schemas.push(schema);}}catch(error){console.error(`Error processing schema from ${file}:`,error);}}try{returnmergeSchemas(schemas,{onConflict: "first"});}catch(error){console.error('An error occurred during schema merging:',error);throwerror;}}asyncfunctionwriteMergedSchemaToFile(mergedSchema){try{awaitfs.writeFile('merged.schema.json',JSON.stringify(mergedSchema,null,2));console.log('Merged schema has been written to merged.schema.json');}catch(error){console.error('Error writing merged schema to file:',error);}}(async()=>{try{constjsonFiles=awaitgetAllJsonFiles(process.cwd());constmergedSchema=awaitmergeSchemasWithFallback(jsonFiles);// Write the merged schema to a fileawaitwriteMergedSchemaToFile(mergedSchema);console.log(JSON.stringify(mergedSchema,null,2));}catch(error){console.error('An error occurred:',error);}})();
What was the result you received?
PS C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\schemas\pietsmiet.de> node ..\..\scripts\merge-schemas.js
An error occurred during schema merging: MergeError [JsonSchemaMergeError]: Failed to merge "type" keyword schemas.
at hybridArraysIntersection (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\lib\resolvers.js:33:11)
at _mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:310:5)
at mergeProperties (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:208:34)
at _mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:310:5)
at mergeObjects (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:228:34)
at _mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:310:5)
at mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:353:24)
at mergeSchemasWithFallback (file:///C:/Users/blusc/AppData/Local/Temp/grayjay-source-pietsmietde/scripts/merge-schemas.js:64:12)
at async file:///C:/Users/blusc/AppData/Local/Temp/grayjay-source-pietsmietde/scripts/merge-schemas.js:84:26 {
code: 'JSON_SCHEMA_MERGE_ERROR',
schemas: [ [ 'null' ], [ 'null' ], [ 'string' ], [ 'string' ], [ 'string' ] ]
}
An error occurred: MergeError [JsonSchemaMergeError]: Failed to merge "type" keyword schemas.
at hybridArraysIntersection (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\lib\resolvers.js:33:11)
at _mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:310:5)
at mergeProperties (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:208:34)
at _mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:310:5)
at mergeObjects (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:228:34)
at _mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:310:5)
at mergeSchemas (C:\Users\blusc\AppData\Local\Temp\grayjay-source-pietsmietde\node_modules\@fastify\merge-json-schemas\index.js:353:24)
at mergeSchemasWithFallback (file:///C:/Users/blusc/AppData/Local/Temp/grayjay-source-pietsmietde/scripts/merge-schemas.js:64:12)
at async file:///C:/Users/blusc/AppData/Local/Temp/grayjay-source-pietsmietde/scripts/merge-schemas.js:84:26 {
code: 'JSON_SCHEMA_MERGE_ERROR',
schemas: [ [ 'null' ], [ 'null' ], [ 'string' ], [ 'string' ], [ 'string' ] ]
}
Please read this entire template before posting any issue. If you ignore these instructions
and post an issue here that does not follow the instructions, your issue might be closed,
locked, and assigned the missing discussion label.
The text was updated successfully, but these errors were encountered:
Can you provide steps to reproduce? We often need a reproducible example, e.g. some code that allows someone else to recreate your problem by just copying and pasting it. If it involves more than a couple of different file, create a new repository on GitHub and add a link to that.
I worked around this problem by generating a whole OpenAPI spec from scratch using a HAR file, which allowed me to extract all response schemas into one file.
You have already researched for similar issues?
I hope so
What are you trying to achieve, or the steps to reproduce?
I want to merge all schemas from different API endpoint responses so i can let AI build a OpenAPI spec file for me
What was the result you received?
What did you expect?
a merged.schema.json file in my directory
Context
Please read this entire template before posting any issue. If you ignore these instructions
and post an issue here that does not follow the instructions, your issue might be closed,
locked, and assigned the
missing discussion
label.The text was updated successfully, but these errors were encountered: