@scalar/openapi-parser 0.26.1 → 0.27.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/lib/Validator/Validator.d.ts +4 -3
  5. package/dist/lib/Validator/Validator.d.ts.map +1 -1
  6. package/dist/lib/Validator/Validator.js +15 -2
  7. package/dist/types/index.d.ts +33 -13
  8. package/dist/types/index.d.ts.map +1 -1
  9. package/dist/utils/filter.d.ts +2 -2
  10. package/dist/utils/filter.d.ts.map +1 -1
  11. package/dist/utils/join/join.d.ts +2 -2
  12. package/dist/utils/join/join.d.ts.map +1 -1
  13. package/dist/utils/join/join.js +9 -6
  14. package/dist/utils/load/load.d.ts.map +1 -1
  15. package/dist/utils/load/load.js +1 -4
  16. package/dist/utils/make-filesystem.d.ts +2 -2
  17. package/dist/utils/make-filesystem.d.ts.map +1 -1
  18. package/dist/utils/make-filesystem.js +3 -0
  19. package/dist/utils/openapi/commands/loadCommand.d.ts +46 -46
  20. package/dist/utils/openapi/commands/loadCommand.d.ts.map +1 -1
  21. package/dist/utils/openapi/commands/upgradeCommand.d.ts +23 -23
  22. package/dist/utils/openapi/commands/upgradeCommand.d.ts.map +1 -1
  23. package/dist/utils/openapi/commands/validateCommand.d.ts +23 -23
  24. package/dist/utils/openapi/commands/validateCommand.d.ts.map +1 -1
  25. package/dist/utils/openapi/openapi.d.ts +397 -397
  26. package/dist/utils/resolve-references.d.ts +2 -3
  27. package/dist/utils/resolve-references.d.ts.map +1 -1
  28. package/dist/utils/resolve-references.js +3 -0
  29. package/dist/utils/transform/sanitize.d.ts +2 -3
  30. package/dist/utils/transform/sanitize.d.ts.map +1 -1
  31. package/dist/utils/upgrade.d.ts +3 -3
  32. package/dist/utils/upgrade.d.ts.map +1 -1
  33. package/dist/utils/validate.d.ts +2 -2
  34. package/dist/utils/validate.d.ts.map +1 -1
  35. package/dist/utils/validate.js +36 -1
  36. package/package.json +4 -4
@@ -1,9 +1,8 @@
1
- import type { OpenAPI } from '@scalar/openapi-types';
2
- import type { AnyObject, ErrorObject, Filesystem, FilesystemEntry, ThrowOnErrorOption } from '../types/index.js';
1
+ import type { AnyObject, ErrorObject, Filesystem, FilesystemEntry, ThrowOnErrorOption, UnknownObject } from '../types/index.js';
3
2
  type ResolveReferencesResult = {
4
3
  valid: boolean;
5
4
  errors: ErrorObject[];
6
- schema: OpenAPI.Document;
5
+ schema: UnknownObject;
7
6
  };
8
7
  export type ResolveReferencesOptions = ThrowOnErrorOption & {
9
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-references.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-references.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAgB5G,KAAK,uBAAuB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,GAAG;IAC1D;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,IAAI,CAAA;CACxF,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAE/B,KAAK,EAAE,SAAS,GAAG,UAAU,EAE7B,OAAO,CAAC,EAAE,wBAAwB,EAElC,IAAI,CAAC,EAAE,eAAe,EAEtB,MAAM,GAAE,WAAW,EAAO,GACzB,uBAAuB,CAuCzB"}
1
+ {"version":3,"file":"resolve-references.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-references.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACd,MAAM,eAAe,CAAA;AAgBtB,KAAK,uBAAuB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,GAAG;IAC1D;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,IAAI,CAAA;CACxF,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAE/B,KAAK,EAAE,SAAS,GAAG,UAAU,EAE7B,OAAO,CAAC,EAAE,wBAAwB,EAElC,IAAI,CAAC,EAAE,eAAe,EAEtB,MAAM,GAAE,WAAW,EAAO,GACzB,uBAAuB,CAuCzB"}
@@ -166,6 +166,9 @@ resolve, errors) {
166
166
  // Try to find the URI
167
167
  try {
168
168
  return segments.reduce((acc, key) => {
169
+ if (typeof acc !== 'object' || acc === null || !(key in acc)) {
170
+ throw new Error(ERRORS.INVALID_REFERENCE.replace('%s', uri));
171
+ }
169
172
  return acc[key];
170
173
  }, file.specification);
171
174
  }
@@ -1,5 +1,4 @@
1
- import type { OpenAPI } from '@scalar/openapi-types';
2
- import type { AnyObject } from '../../types/index.js';
1
+ import type { AnyObject, UnknownObject } from '../../types/index.js';
3
2
  export { DEFAULT_TITLE } from './utils/addInfoObject.js';
4
3
  export { DEFAULT_OPENAPI_VERSION } from './utils/addLatestOpenApiVersion.js';
5
4
  /**
@@ -7,5 +6,5 @@ export { DEFAULT_OPENAPI_VERSION } from './utils/addLatestOpenApiVersion.js';
7
6
  *
8
7
  * @deprecated We're about to drop this from the package.
9
8
  */
10
- export declare function sanitize(definition: AnyObject): OpenAPI.Document;
9
+ export declare function sanitize(definition: AnyObject): UnknownObject;
11
10
  //# sourceMappingURL=sanitize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/utils/transform/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAS9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEzE;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAUhE"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/utils/transform/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAS7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEzE;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,aAAa,CAU7D"}
@@ -1,7 +1,7 @@
1
- import type { OpenAPIV3_1 } from '@scalar/openapi-types';
2
- import type { AnyObject, Filesystem, UpgradeResult } from '../types/index.js';
1
+ import type { Document as OpenApiDocumentV3_1 } from '@scalar/openapi-types/3.1';
2
+ import type { Filesystem, UnknownObject, UpgradeResult } from '../types/index.js';
3
3
  /**
4
4
  * Upgrade specification to OpenAPI 3.1.0
5
5
  */
6
- export declare function upgrade(value: string | AnyObject | Filesystem): UpgradeResult<OpenAPIV3_1.Document>;
6
+ export declare function upgrade(value: string | UnknownObject | Filesystem): UpgradeResult<OpenApiDocumentV3_1>;
7
7
  //# sourceMappingURL=upgrade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/utils/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAIxD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAMzE;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAmBnG"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/utils/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAGhF,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAM7E;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAmBtG"}
@@ -1,7 +1,7 @@
1
- import type { AnyObject, Filesystem, ThrowOnErrorOption, ValidateResult } from '../types/index.js';
1
+ import type { Filesystem, ThrowOnErrorOption, UnknownObject, ValidateResult } from '../types/index.js';
2
2
  export type ValidateOptions = ThrowOnErrorOption;
3
3
  /**
4
4
  * Validates an OpenAPI document
5
5
  */
6
- export declare function validate(value: string | AnyObject | Filesystem, options?: ValidateOptions): Promise<ValidateResult>;
6
+ export declare function validate(value: string | UnknownObject | Filesystem, options?: ValidateOptions): Promise<ValidateResult>;
7
7
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9F,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAA;AAEhD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBnH"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACf,MAAM,eAAe,CAAA;AAItB,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAA;AAqBhD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,EAC1C,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CA6CzB"}
@@ -1,5 +1,17 @@
1
1
  import { Validator } from '../lib/Validator/Validator.js';
2
2
  import { makeFilesystem } from './make-filesystem.js';
3
+ const withStrictSpecification = (specification, version) => {
4
+ if (!specification || typeof specification !== 'object') {
5
+ return undefined;
6
+ }
7
+ if (version === '2.0' && specification.swagger === '2.0') {
8
+ return specification;
9
+ }
10
+ if ((version === '3.0' || version === '3.1' || version === '3.2') && typeof specification.openapi === 'string') {
11
+ return specification;
12
+ }
13
+ return undefined;
14
+ };
3
15
  /**
4
16
  * Validates an OpenAPI document
5
17
  */
@@ -12,8 +24,31 @@ export function validate(value, options) {
12
24
  * Currently contains no asynchronous logic, but returns a Promise
13
25
  * to preserve API compatibility and allow async logic in the future.
14
26
  */
27
+ if (result.valid) {
28
+ const specification = withStrictSpecification(validator.specification, validator.version);
29
+ if (!specification) {
30
+ return Promise.resolve({
31
+ valid: false,
32
+ errors: [
33
+ {
34
+ message: `Validated OpenAPI ${validator.version} document is missing required top-level version field.`,
35
+ },
36
+ ],
37
+ schema: result.schema,
38
+ specification: validator.specification,
39
+ version: validator.version,
40
+ });
41
+ }
42
+ return Promise.resolve({
43
+ ...result,
44
+ specification,
45
+ version: validator.version,
46
+ });
47
+ }
15
48
  return Promise.resolve({
16
- ...result,
49
+ valid: false,
50
+ errors: result.errors,
51
+ schema: result.schema,
17
52
  specification: validator.specification,
18
53
  version: validator.version,
19
54
  });
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "parser",
18
18
  "typescript"
19
19
  ],
20
- "version": "0.26.1",
20
+ "version": "0.27.0",
21
21
  "engines": {
22
22
  "node": ">=22"
23
23
  },
@@ -53,11 +53,11 @@
53
53
  "ajv-formats": "^3.0.1",
54
54
  "jsonpointer": "^5.0.1",
55
55
  "leven": "^4.0.0",
56
- "yaml": "^2.8.0",
56
+ "yaml": "^2.8.3",
57
57
  "@scalar/helpers": "0.5.3",
58
- "@scalar/json-magic": "0.12.9",
58
+ "@scalar/openapi-upgrader": "0.2.6",
59
59
  "@scalar/openapi-types": "0.8.0",
60
- "@scalar/openapi-upgrader": "0.2.6"
60
+ "@scalar/json-magic": "0.12.9"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@apidevtools/swagger-parser": "10.1.0",