@scalar/oas-utils
Version:
Open API spec and Yaml handling utilities
125 lines (123 loc) • 4.36 kB
JavaScript
/** V-2.4.0 to V-2.5.0 migration */
const migrate_v_2_5_0 = (data) => {
console.info('Performing data migration v-2.4.0 to v-2.5.0');
const cookies = Object.entries(data.cookies || {}).reduce((acc, [key, cookie]) => {
acc[key] = {
...cookie,
uid: cookie.uid,
};
return acc;
}, {});
const collections = Object.entries(data.collections || {}).reduce((acc, [key, collection]) => {
acc[key] = {
...collection,
info: collection.info ?? {
title: 'API',
version: '1.0',
},
uid: collection.uid,
selectedSecuritySchemeUids: collection.selectedSecuritySchemeUids,
servers: collection.servers.map((uid) => uid),
tags: collection.tags.map((uid) => uid),
requests: collection.requests.map((uid) => uid),
children: collection.children.map((uid) => uid),
selectedServerUid: collection.selectedServerUid,
useCollectionSecurity: false,
};
return acc;
}, {});
const environments = Object.entries(data.environments || {}).reduce((acc, [key, environment]) => {
acc[key] = {
...environment,
uid: environment.uid,
};
return acc;
}, {});
const requests = Object.entries(data.requests || {}).reduce((acc, [key, request]) => {
acc[key] = {
...request,
uid: request.uid,
servers: request.servers,
selectedServerUid: request.selectedServerUid,
examples: request.examples,
selectedSecuritySchemeUids: request.selectedSecuritySchemeUids,
};
return acc;
}, {});
const requestExamples = Object.entries(data.requestExamples || {}).reduce((acc, [key, example]) => {
const headers = example.parameters.headers;
// Check if "Accept" header exists
const hasAcceptHeader = headers.some((header) => header.key.toLowerCase() === 'accept');
if (!hasAcceptHeader) {
// Add "Accept" header as the first entry
headers.unshift({ key: 'Accept', value: '*/*', enabled: true });
}
// Update the example with potentially modified headers
acc[key] = {
...example,
uid: example.uid,
requestUid: example.requestUid,
parameters: {
...example.parameters,
headers,
},
};
return acc;
}, {});
const securitySchemes = Object.entries(data.securitySchemes || {}).reduce((acc, [key, securityScheme]) => {
acc[key] = {
...securityScheme,
uid: securityScheme.uid,
};
return acc;
}, {});
const servers = Object.entries(data.servers || {}).reduce((acc, [key, server]) => {
acc[key] = {
...server,
uid: server.uid,
variables: Object.entries(server.variables || {}).reduce((variablesAcc, [variableKey, variable]) => {
variablesAcc[variableKey] = {
default: variable.default ?? '',
description: variable.description ?? '',
...(variable.enum?.length && { enum: variable.enum }),
};
return variablesAcc;
}, {}),
};
return acc;
}, {});
const tags = Object.entries(data.tags || {}).reduce((acc, [key, tag]) => {
acc[key] = {
...tag,
uid: tag.uid,
children: tag.children,
};
return acc;
}, {});
const workspaces = Object.entries(data.workspaces || {}).reduce((acc, [key, workspace]) => {
acc[key] = {
...workspace,
uid: workspace.uid,
collections: workspace.collections.map((uid) => uid),
cookies: workspace.cookies.map((uid) => uid),
selectedHttpClient: {
targetKey: 'shell',
clientKey: 'curl',
},
};
return acc;
}, {});
return {
...data,
collections,
cookies,
environments,
requests,
requestExamples,
securitySchemes,
servers,
tags,
workspaces,
};
};
export { migrate_v_2_5_0 };