@scalar/openapi-parser 0.8.5 → 0.8.6

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @scalar/openapi-parser
2
2
 
3
+ ## 0.8.6
4
+
5
+ ### Patch Changes
6
+
7
+ - d064a78: chore: make examples an array if it’s in a schema
8
+ - 3db9355: feat: upgrade Swagger 2.0 securityDefinitions
9
+
3
10
  ## 0.8.5
4
11
 
5
12
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{ERRORS,OpenApiSpecifications,OpenApiVersions}from"./configuration/index.js";export{Validator,jsonSchemaVersions}from"./lib/Validator/Validator.js";export{resolveReferences}from"./utils/resolveReferences.js";export{dereference}from"./utils/dereference.js";export{details}from"./utils/details.js";export{escapeJsonPointer}from"./utils/escapeJsonPointer.js";export{filter}from"./utils/filter.js";export{getEntrypoint}from"./utils/getEntrypoint.js";export{getListOfReferences}from"./utils/getListOfReferences.js";export{getSegmentsFromPath}from"./utils/getSegmentsFromPath.js";export{isFilesystem}from"./utils/isFilesystem.js";export{isJson}from"./utils/isJson.js";export{isObject}from"./utils/isObject.js";export{isYaml}from"./utils/isYaml.js";export{load}from"./utils/load/load.js";export{normalize}from"./utils/normalize.js";export{openapi}from"./utils/openapi/openapi.js";export{toJson}from"./utils/toJson.js";export{toYaml}from"./utils/toYaml.js";export{transformErrors}from"./utils/transformErrors.js";export{traverse}from"./utils/traverse.js";export{unescapeJsonPointer}from"./utils/unescapeJsonPointer.js";export{upgrade}from"./utils/upgrade.js";export{upgradeFromThreeToThreeOne}from"./utils/upgradeFromThreeToThreeOne.js";export{upgradeFromTwoToThree}from"./utils/upgradeFromTwoToThree.js";export{validate}from"./utils/validate.js";
1
+ export{ERRORS,OpenApiSpecifications,OpenApiVersions}from"./configuration/index.js";export{Validator,jsonSchemaVersions}from"./lib/Validator/Validator.js";export{resolveReferences}from"./utils/resolveReferences.js";export{dereference}from"./utils/dereference.js";export{details}from"./utils/details.js";export{escapeJsonPointer}from"./utils/escapeJsonPointer.js";export{filter}from"./utils/filter.js";export{getEntrypoint}from"./utils/getEntrypoint.js";export{getListOfReferences}from"./utils/getListOfReferences.js";export{getSegmentsFromPath}from"./utils/getSegmentsFromPath.js";export{isFilesystem}from"./utils/isFilesystem.js";export{isJson}from"./utils/isJson.js";export{isObject}from"./utils/isObject.js";export{isYaml}from"./utils/isYaml.js";export{load}from"./utils/load/load.js";export{normalize}from"./utils/normalize.js";export{openapi}from"./utils/openapi/openapi.js";export{toJson}from"./utils/toJson.js";export{toYaml}from"./utils/toYaml.js";export{transformErrors}from"./utils/transformErrors.js";export{traverse}from"./utils/traverse.js";export{unescapeJsonPointer}from"./utils/unescapeJsonPointer.js";export{upgrade}from"./utils/upgrade.js";export{isSchemaPath,upgradeFromThreeToThreeOne}from"./utils/upgradeFromThreeToThreeOne.js";export{upgradeFromTwoToThree}from"./utils/upgradeFromTwoToThree.js";export{validate}from"./utils/validate.js";
@@ -2,5 +2,5 @@ import type { AnyObject } from '../types';
2
2
  /**
3
3
  * Recursively traverses the specification and applies the transform function to each node.
4
4
  */
5
- export declare function traverse(specification: AnyObject, transform: (specification: AnyObject) => AnyObject): AnyObject;
5
+ export declare function traverse(specification: AnyObject, transform: (specification: AnyObject, path?: string[]) => AnyObject, path?: string[]): AnyObject;
6
6
  //# sourceMappingURL=traverse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/utils/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;GAEG;AACH,wBAAgB,QAAQ,CACtB,aAAa,EAAE,SAAS,EACxB,SAAS,EAAE,CAAC,aAAa,EAAE,SAAS,KAAK,SAAS,aAqBnD"}
1
+ {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/utils/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;GAEG;AACH,wBAAgB,QAAQ,CACtB,aAAa,EAAE,SAAS,EACxB,SAAS,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,SAAS,EACnE,IAAI,GAAE,MAAM,EAAO,aAqBpB"}
@@ -1 +1 @@
1
- function t(o,e){const r={};for(const[n,c]of Object.entries(o))Array.isArray(c)?r[n]=c.map((o=>"object"==typeof o&&null!==o?t(o,e):o)):r[n]="object"==typeof c&&null!==c?t(c,e):c;return e(r)}export{t as traverse};
1
+ function t(o,n,r=[]){const e={};for(const[c,f]of Object.entries(o)){const o=[...r,c];Array.isArray(f)?e[c]=f.map(((r,e)=>"object"==typeof r&&null!==r?t(r,n,[...o,e.toString()]):r)):e[c]="object"==typeof f&&null!==f?t(f,n,o):f}return n(e,r)}export{t as traverse};
@@ -4,5 +4,7 @@ import type { AnyObject } from '../types';
4
4
  *
5
5
  * https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0
6
6
  */
7
- export declare function upgradeFromThreeToThreeOne(specification: AnyObject): AnyObject;
7
+ export declare function upgradeFromThreeToThreeOne(originalSpecification: AnyObject): AnyObject;
8
+ /** Determine if the current path is within a schema */
9
+ export declare function isSchemaPath(path: string[]): boolean;
8
10
  //# sourceMappingURL=upgradeFromThreeToThreeOne.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeFromThreeToThreeOne.d.ts","sourceRoot":"","sources":["../../src/utils/upgradeFromThreeToThreeOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGzC;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,SAAS,aAkGlE"}
1
+ {"version":3,"file":"upgradeFromThreeToThreeOne.d.ts","sourceRoot":"","sources":["../../src/utils/upgradeFromThreeToThreeOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGzC;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,qBAAqB,EAAE,SAAS,aA2G1E;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAsBpD"}
@@ -1 +1 @@
1
- import{traverse as e}from"./traverse.js";function t(t){return t.openapi?.startsWith("3.0")?(t.openapi="3.1.0",t=e(t,(e=>("undefined"!==e.type&&!0===e.nullable&&(e.type=["null",e.type],delete e.nullable),e))),t=e(t,(e=>(!0===e.exclusiveMinimum?(e.exclusiveMinimum=e.minimum,delete e.minimum):!1===e.exclusiveMinimum&&delete e.exclusiveMinimum,!0===e.exclusiveMaximum?(e.exclusiveMaximum=e.maximum,delete e.maximum):!1===e.exclusiveMaximum&&delete e.exclusiveMaximum,e))),t=e(t,(e=>(void 0!==e.example&&(e.examples={default:e.example},delete e.example),e))),t=e(t,(e=>{if("object"===e.type&&void 0!==e.properties){const t=Object.entries(e.properties);for(const[e,i]of t)"object"==typeof i&&"string"===i.type&&"binary"===i.format&&(i.contentEncoding="application/octet-stream",delete i.format)}return e})),t=e(t,(e=>{if("string"!==e.type||"binary"!==e.format)return e})),t=e(t,(e=>"string"===e.type&&"base64"===e.format?{type:"string",contentEncoding:"base64"}:e))):t}export{t as upgradeFromThreeToThreeOne};
1
+ import{traverse as e}from"./traverse.js";function t(t){let m=t;return m.openapi?.startsWith("3.0")?(m.openapi="3.1.0",m=e(m,(e=>("undefined"!==e.type&&!0===e.nullable&&(e.type=["null",e.type],delete e.nullable),e))),m=e(m,(e=>(!0===e.exclusiveMinimum?(e.exclusiveMinimum=e.minimum,delete e.minimum):!1===e.exclusiveMinimum&&delete e.exclusiveMinimum,!0===e.exclusiveMaximum?(e.exclusiveMaximum=e.maximum,delete e.maximum):!1===e.exclusiveMaximum&&delete e.exclusiveMaximum,e))),m=e(m,((e,t)=>(void 0!==e.example&&(i(t)?e.examples=[e.example]:e.examples={default:e.example},delete e.example),e))),m=e(m,(e=>{if("object"===e.type&&void 0!==e.properties){const t=Object.entries(e.properties);for(const[e,i]of t)"object"==typeof i&&"string"===i.type&&"binary"===i.format&&(i.contentEncoding="application/octet-stream",delete i.format)}return e})),m=e(m,(e=>{if("string"!==e.type||"binary"!==e.format)return e})),m=e(m,(e=>"string"===e.type&&"base64"===e.format?{type:"string",contentEncoding:"base64"}:e)),m):m}function i(e){return[["components","schemas"],"properties","items","allOf","anyOf","oneOf","not","additionalProperties"].some((t=>Array.isArray(t)?t.every(((t,i)=>e[i]===t)):e.includes(t)))||e.includes("schema")||e.some((e=>e.endsWith("Schema")))}export{i as isSchemaPath,t as upgradeFromThreeToThreeOne};
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeFromTwoToThree.d.ts","sourceRoot":"","sources":["../../src/utils/upgradeFromTwoToThree.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGzC;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,aAoM7D"}
1
+ {"version":3,"file":"upgradeFromTwoToThree.d.ts","sourceRoot":"","sources":["../../src/utils/upgradeFromTwoToThree.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGzC;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,aA4O7D"}
@@ -1 +1 @@
1
- import{traverse as e}from"./traverse.js";function t(t){if(!t.swagger?.startsWith("2.0"))return t;if(t.openapi="3.0.3",delete t.swagger,console.warn("[upgradeFromTwoToThree] The upgrade from Swagger 2.0 to OpenAPI 3.0 documents is experimental and lacks features."),t.host){const e=t.schemes?.length?t.schemes:["http"];t.servers=e.map((e=>({url:`${e}://${t.host}${t.basePath??""}`}))),delete t.basePath,delete t.schemes,delete t.host}if(t.definitions&&("object"!=typeof t.components&&(t.components={}),t.components.schemas=t.definitions,delete t.definitions,t=e(t,(e=>(e.$ref?.startsWith("#/definitions/")&&(e.$ref=e.$ref.replace(/^#\/definitions\//,"#/components/schemas/")),e)))),t.paths)for(const e in t.paths)if(Object.hasOwn(t.paths,e)){const o=t.paths[e];for(const e in o)if(Object.hasOwn(o,e)){const s=o[e];if(s.parameters){const e=structuredClone(s.parameters.find((e=>"body"===e.in))??{});if(e&&Object.keys(e).length){delete e.name,delete e.in;const o=t.consumes??s.consumes??["application/json"];"object"!=typeof s.requestBody&&(s.requestBody={}),"object"!=typeof s.requestBody.content&&(s.requestBody.content={});const{schema:n,...r}=e;s.requestBody={...s.requestBody,...r};for(const e of o)s.requestBody.content[e]={schema:n}}s.parameters=s.parameters.filter((e=>"body"!==e.in)),delete s.consumes;const o=s.parameters.filter((e=>"formData"===e.in));if(o.length>0){"object"!=typeof s.requestBody&&(s.requestBody={}),"object"!=typeof s.requestBody.content&&(s.requestBody.content={}),s.requestBody.content["application/x-www-form-urlencoded"]={schema:{type:"object",properties:{},required:[]}};for(const e of o)s.requestBody.content["application/x-www-form-urlencoded"].schema.properties[e.name]={type:e.type,description:e.description},e.required&&s.requestBody.content["application/x-www-form-urlencoded"].schema.required.push(e.name);s.parameters=s.parameters.filter((e=>"formData"!==e.in))}}if(s.responses)for(const e in s.responses)if(Object.hasOwn(s.responses,e)){const o=s.responses[e];if(o.schema){const e=t.produces??s.produces??["application/json"];"object"!=typeof o.content&&(o.content={});for(const t of e)o.content[t]={schema:o.schema};delete o.schema}}delete s.produces,0===s.parameters?.length&&delete s.parameters}}return t}export{t as upgradeFromTwoToThree};
1
+ import{traverse as e}from"./traverse.js";function t(t){if(!t.swagger?.startsWith("2.0"))return t;if(t.openapi="3.0.3",delete t.swagger,console.warn("[upgradeFromTwoToThree] The upgrade from Swagger 2.0 to OpenAPI 3.0 documents is experimental and lacks features."),t.host){const e=t.schemes?.length?t.schemes:["http"];t.servers=e.map((e=>({url:`${e}://${t.host}${t.basePath??""}`}))),delete t.basePath,delete t.schemes,delete t.host}if(t.definitions&&("object"!=typeof t.components&&(t.components={}),t.components.schemas=t.definitions,delete t.definitions,t=e(t,(e=>(e.$ref?.startsWith("#/definitions/")&&(e.$ref=e.$ref.replace(/^#\/definitions\//,"#/components/schemas/")),e)))),t.paths)for(const e in t.paths)if(Object.hasOwn(t.paths,e)){const o=t.paths[e];for(const e in o)if(Object.hasOwn(o,e)){const s=o[e];if(s.parameters){const e=structuredClone(s.parameters.find((e=>"body"===e.in))??{});if(e&&Object.keys(e).length){delete e.name,delete e.in;const o=t.consumes??s.consumes??["application/json"];"object"!=typeof s.requestBody&&(s.requestBody={}),"object"!=typeof s.requestBody.content&&(s.requestBody.content={});const{schema:n,...r}=e;s.requestBody={...s.requestBody,...r};for(const e of o)s.requestBody.content[e]={schema:n}}s.parameters=s.parameters.filter((e=>"body"!==e.in)),delete s.consumes;const o=s.parameters.filter((e=>"formData"===e.in));if(o.length>0){"object"!=typeof s.requestBody&&(s.requestBody={}),"object"!=typeof s.requestBody.content&&(s.requestBody.content={}),s.requestBody.content["application/x-www-form-urlencoded"]={schema:{type:"object",properties:{},required:[]}};for(const e of o)s.requestBody.content["application/x-www-form-urlencoded"].schema.properties[e.name]={type:e.type,description:e.description},e.required&&s.requestBody.content["application/x-www-form-urlencoded"].schema.required.push(e.name);s.parameters=s.parameters.filter((e=>"formData"!==e.in))}}if(s.responses)for(const e in s.responses)if(Object.hasOwn(s.responses,e)){const o=s.responses[e];if(o.schema){const e=t.produces??s.produces??["application/json"];"object"!=typeof o.content&&(o.content={});for(const t of e)o.content[t]={schema:o.schema};delete o.schema}}delete s.produces,0===s.parameters?.length&&delete s.parameters}}if(t.securityDefinitions){"object"!=typeof t.components&&(t.components={}),t.components.securitySchemes={};for(const[e,o]of Object.entries(t.securityDefinitions))if("object"==typeof o)if("type"in o&&"oauth2"===o.type){const{flow:s,authorizationUrl:n,tokenUrl:r,scopes:c}=o;t.components.securitySchemes[e]={type:"oauth2",flows:{[s]:{...n&&{authorizationUrl:n},...r&&{tokenUrl:r},...c&&{scopes:c}}}}}else t.components.securitySchemes[e]=o;delete t.securityDefinitions}return t}export{t as upgradeFromTwoToThree};
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "parser",
18
18
  "typescript"
19
19
  ],
20
- "version": "0.8.5",
20
+ "version": "0.8.6",
21
21
  "engines": {
22
22
  "node": ">=18"
23
23
  },
@@ -63,7 +63,7 @@
63
63
  "rollup": "^4.16.4",
64
64
  "rollup-plugin-output-size": "^1.4.1",
65
65
  "tinybench": "^2.8.0",
66
- "@scalar/openapi-types": "0.1.1"
66
+ "@scalar/openapi-types": "0.1.2"
67
67
  },
68
68
  "scripts": {
69
69
  "build": "pnpm types:check && rollup -c --configPlugin typescript && pnpm types:build",