@standard-community/standard-openapi 0.0.1 → 0.1.1

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/README.md CHANGED
@@ -5,3 +5,51 @@
5
5
  [![license](https://img.shields.io/npm/l/@standard-community/standard-openapi)](LICENSE)
6
6
 
7
7
  Standard Schema Validator's OpenAPI Schema Converter
8
+
9
+ ## Installation
10
+
11
+ Install the main package -
12
+
13
+ ```sh
14
+ pnpm add @standard-community/standard-openapi
15
+ ```
16
+
17
+ For some specific vendor, install the respective package also -
18
+
19
+ | Vendor | Package |
20
+ | ------- | ------- |
21
+ | Zod | `zod-openapi` |
22
+ | Valibot | `@standard-community/standard-json` `@valibot/to-json-schema` `json-schema-walker` |
23
+ | ArkType | `@standard-community/standard-json` `json-schema-walker` |
24
+ | Effect Schema | `@standard-community/standard-json` `json-schema-walker` |
25
+
26
+ ## Usage
27
+
28
+ ```ts
29
+ import { toOpenAPISchema } from "@standard-community/standard-openapi";
30
+
31
+ // Define your schema
32
+ const schema = v.pipe(
33
+ v.object({
34
+ myString: v.string(),
35
+ myUnion: v.union([v.number(), v.boolean()]),
36
+ }),
37
+ v.description("My neat object schema"),
38
+ );
39
+
40
+ // Convert it to OpenAPI Schema
41
+ const openapiSchema = await toOpenAPISchema(schema);
42
+ ```
43
+
44
+ ## Compatibility
45
+
46
+ List of supported validators -
47
+
48
+ | Vendor | Supported |
49
+ | ------- | ------- |
50
+ | Zod | ✅ |
51
+ | Valibot | ✅ |
52
+ | ArkType | ✅ |
53
+ | Effect Schema | 🛠️ |
54
+
55
+ You can check the compatibility versions at [standardschema.dev](https://standardschema.dev/)
@@ -0,0 +1 @@
1
+ "use strict";var d=Object.defineProperty;var i=(e,t)=>d(e,"name",{value:t,configurable:!0});var u=require("json-schema-walker"),p=require("@standard-community/standard-json");const y=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];class c extends Error{static{i(this,"InvalidTypeError")}constructor(t){super(t),this.name="InvalidTypeError",this.message=t}}const f="x-",v=i(async(e,t)=>{if(typeof e!="object")return e;if(e.type){const r=new u.Walker;return await r.loadSchema({definitions:t.definitions||[],...e,$schema:t.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await r.walk(s,r.vocabularies.DRAFT_07),"definitions"in r.rootSchema&&(r.rootSchema.definitions=void 0),r.rootSchema}if(Array.isArray(e)){const r=e;if(r.includes("null")){const o=r.filter(a=>a!=="null");return{type:o.length===1?o[0]:o,nullable:!0}}}return e},"handleDefinition"),x=i(async e=>{const t=new u.Walker;await t.loadSchema(e),await t.walk(s,t.vocabularies.DRAFT_07);const n=t.rootSchema;if(n?.definitions)for(const r in n.definitions){const l=n.definitions[r];n.definitions[r]=await v(l,e)}return n},"convert");function w(e){return typeof e!="object"||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}i(w,"stripIllegalKeywords");function s(e){let t=e;return t&&(t=w(t),t=S(t),t=M(t),t=O(t),t=k(t),t=T(t),t=$(t),t=P(t),typeof t.patternProperties=="object"&&(t=g(t)),t.type==="array"&&typeof t.items>"u"&&(t.items={}),t=j(t),t)}i(s,"convertSchema");const b=new Set(["null","boolean","object","array","number","string","integer"]);function A(e){if(typeof e=="object"&&!Array.isArray(e)&&(e&&"$ref"in e&&e.$ref||e&&"properties"in e&&e.properties))return;const t=Array.isArray(e)?e:[e];for(const n of t)if(n&&!b.has(n))throw new c(`Type "${n}" is not a valid type`)}i(A,"validateType");function O(e){const t=e.dependencies;if(typeof t!="object")return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const r={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(r)}return e}i(O,"convertDependencies");function k(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n)||!n.some(o=>o.type==="null"))return e;const l=n.filter(o=>o.type!=="null");for(const o of l)o.nullable=!0;e[t]=l}return e}i(k,"convertNullable");function S(e){if(typeof e!="object"||e.type===void 0)return e;if(A(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter(n=>n!=="null");t.length===0?e.type=void 0:t.length===1?e.type=t[0]:(e.type=void 0,e.anyOf=t.map(n=>({type:n})))}else e.type==="null"&&(e.type=void 0,e.nullable=!0);return e}i(S,"convertTypes");function g(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}i(g,"convertPatternProperties");function j(e){const t=Object.keys(e);for(const n of t)if(!n.startsWith(f)&&!y.includes(n)){const r=`${f}${n}`;e[r]=e[n],e[n]=void 0}return e}i(j,"convertIllegalKeywordsAsExtensions");function P(e){return e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0),e}i(P,"convertExamples");function M(e){return typeof e.const<"u"&&(e.enum=[e.const],e.const=void 0),e}i(M,"rewriteConst");function T(e){return typeof e!="object"||"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0),e}i(T,"rewriteIfThenElse");function $(e){return typeof e.exclusiveMaximum=="number"&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0),typeof e.exclusiveMinimum=="number"&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0),e}i($,"rewriteExclusiveMinMax");const E=i(async e=>{const t=p.toJsonSchema(e);return{schema:await x(t)}},"generator");exports.generator=E;
@@ -0,0 +1 @@
1
+ var a=Object.defineProperty;var r=(e,t)=>a(e,"name",{value:t,configurable:!0});import{Walker as f}from"json-schema-walker";import{toJsonSchema as d}from"@standard-community/standard-json";const y=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];class c extends Error{static{r(this,"InvalidTypeError")}constructor(t){super(t),this.name="InvalidTypeError",this.message=t}}const u="x-",v=r(async(e,t)=>{if(typeof e!="object")return e;if(e.type){const i=new f;return await i.loadSchema({definitions:t.definitions||[],...e,$schema:t.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await i.walk(s,i.vocabularies.DRAFT_07),"definitions"in i.rootSchema&&(i.rootSchema.definitions=void 0),i.rootSchema}if(Array.isArray(e)){const i=e;if(i.includes("null")){const o=i.filter(p=>p!=="null");return{type:o.length===1?o[0]:o,nullable:!0}}}return e},"handleDefinition"),x=r(async e=>{const t=new f;await t.loadSchema(e),await t.walk(s,t.vocabularies.DRAFT_07);const n=t.rootSchema;if(n?.definitions)for(const i in n.definitions){const l=n.definitions[i];n.definitions[i]=await v(l,e)}return n},"convert");function w(e){return typeof e!="object"||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}r(w,"stripIllegalKeywords");function s(e){let t=e;return t&&(t=w(t),t=g(t),t=m(t),t=O(t),t=S(t),t=M(t),t=T(t),t=j(t),typeof t.patternProperties=="object"&&(t=k(t)),t.type==="array"&&typeof t.items>"u"&&(t.items={}),t=P(t),t)}r(s,"convertSchema");const b=new Set(["null","boolean","object","array","number","string","integer"]);function A(e){if(typeof e=="object"&&!Array.isArray(e)&&(e&&"$ref"in e&&e.$ref||e&&"properties"in e&&e.properties))return;const t=Array.isArray(e)?e:[e];for(const n of t)if(n&&!b.has(n))throw new c(`Type "${n}" is not a valid type`)}r(A,"validateType");function O(e){const t=e.dependencies;if(typeof t!="object")return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const i={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(i)}return e}r(O,"convertDependencies");function S(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n)||!n.some(o=>o.type==="null"))return e;const l=n.filter(o=>o.type!=="null");for(const o of l)o.nullable=!0;e[t]=l}return e}r(S,"convertNullable");function g(e){if(typeof e!="object"||e.type===void 0)return e;if(A(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter(n=>n!=="null");t.length===0?e.type=void 0:t.length===1?e.type=t[0]:(e.type=void 0,e.anyOf=t.map(n=>({type:n})))}else e.type==="null"&&(e.type=void 0,e.nullable=!0);return e}r(g,"convertTypes");function k(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}r(k,"convertPatternProperties");function P(e){const t=Object.keys(e);for(const n of t)if(!n.startsWith(u)&&!y.includes(n)){const i=`${u}${n}`;e[i]=e[n],e[n]=void 0}return e}r(P,"convertIllegalKeywordsAsExtensions");function j(e){return e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0),e}r(j,"convertExamples");function m(e){return typeof e.const<"u"&&(e.enum=[e.const],e.const=void 0),e}r(m,"rewriteConst");function M(e){return typeof e!="object"||"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0),e}r(M,"rewriteIfThenElse");function T(e){return typeof e.exclusiveMaximum=="number"&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0),typeof e.exclusiveMinimum=="number"&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0),e}r(T,"rewriteExclusiveMinMax");const $=r(async e=>{const t=d(e);return{schema:await x(t)}},"generator");export{$ as generator};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var t=(e,c)=>n(e,"name",{value:c,configurable:!0});const s=t(e=>({}),"toOpenAPISchema");exports.toOpenAPISchema=s;
1
+ "use strict";var a=Object.defineProperty;var n=(e,r)=>a(e,"name",{value:r,configurable:!0});const o=n(async e=>{const r=e["~standard"].vendor;let t;switch(r){case"arktype":case"effect":case"valibot":t=Promise.resolve().then(function(){return require("./default-C7_LgS8R.cjs")});break;case"zod":t=Promise.resolve().then(function(){return require("./zod-hd0-fbCt.cjs")});break;default:throw new Error(`standard-openapi: Unsupported schema vendor "${r}"`)}return await(await t).generator(e)},"toOpenAPISchema");exports.toOpenAPISchema=o;
package/dist/index.d.cts CHANGED
@@ -1,3 +1,5 @@
1
+ import * as zod_openapi from 'zod-openapi';
2
+
1
3
  /** The Standard Schema interface. */
2
4
  interface StandardSchemaV1<Input = unknown, Output = Input> {
3
5
  /** The Standard Schema properties. */
@@ -55,6 +57,6 @@ declare namespace StandardSchemaV1 {
55
57
  export { };
56
58
  }
57
59
 
58
- declare const toOpenAPISchema: (_schema: StandardSchemaV1) => {};
60
+ declare const toOpenAPISchema: (schema: StandardSchemaV1) => Promise<zod_openapi.SchemaResult>;
59
61
 
60
62
  export { toOpenAPISchema };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import * as zod_openapi from 'zod-openapi';
2
+
1
3
  /** The Standard Schema interface. */
2
4
  interface StandardSchemaV1<Input = unknown, Output = Input> {
3
5
  /** The Standard Schema properties. */
@@ -55,6 +57,6 @@ declare namespace StandardSchemaV1 {
55
57
  export { };
56
58
  }
57
59
 
58
- declare const toOpenAPISchema: (_schema: StandardSchemaV1) => {};
60
+ declare const toOpenAPISchema: (schema: StandardSchemaV1) => Promise<zod_openapi.SchemaResult>;
59
61
 
60
62
  export { toOpenAPISchema };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var n=Object.defineProperty;var t=(e,c)=>n(e,"name",{value:c,configurable:!0});const o=t(e=>({}),"toOpenAPISchema");export{o as toOpenAPISchema};
1
+ var o=Object.defineProperty;var t=(e,a)=>o(e,"name",{value:a,configurable:!0});const n=t(async e=>{const a=e["~standard"].vendor;let r;switch(a){case"arktype":case"effect":case"valibot":r=import("./default-PnsbTDiK.js");break;case"zod":r=import("./zod-B4Z3YRnT.js");break;default:throw new Error(`standard-openapi: Unsupported schema vendor "${a}"`)}return await(await r).generator(e)},"toOpenAPISchema");export{n as toOpenAPISchema};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var o=(e,r)=>t(e,"name",{value:r,configurable:!0});import{createSchema as a}from"zod-openapi";const c=o((e,r)=>a(e,r),"generator");export{c as generator};
@@ -0,0 +1 @@
1
+ "use strict";var t=Object.defineProperty;var a=(e,r)=>t(e,"name",{value:r,configurable:!0});var c=require("zod-openapi");const n=a((e,r)=>c.createSchema(e,r),"generator");exports.generator=n;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@standard-community/standard-openapi",
3
- "version": "0.0.1",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.cjs",
@@ -30,20 +30,40 @@
30
30
  "url": "https://github.com/standard-community/standard-openapi/issues"
31
31
  },
32
32
  "exports": {
33
- ".": {
34
- "import": {
35
- "types": "./dist/index.d.ts",
36
- "default": "./dist/index.js"
37
- },
38
- "require": {
39
- "types": "./dist/index.d.cts",
40
- "default": "./dist/index.cjs"
41
- }
33
+ "import": {
34
+ "types": "./dist/index.d.ts",
35
+ "default": "./dist/index.js"
36
+ },
37
+ "require": {
38
+ "types": "./dist/index.d.cts",
39
+ "default": "./dist/index.cjs"
40
+ }
41
+ },
42
+ "peerDependencies": {
43
+ "@standard-community/standard-json": "^0.1.0",
44
+ "json-schema-walker": "^2.0.0",
45
+ "zod-openapi": "^4.0.0"
46
+ },
47
+ "peerDependenciesMeta": {
48
+ "zod-openapi": {
49
+ "optional": true
50
+ },
51
+ "@standard-community/standard-json": {
52
+ "optional": true
53
+ },
54
+ "json-schema-walker": {
55
+ "optional": true
42
56
  }
43
57
  },
44
58
  "devDependencies": {
59
+ "@apidevtools/json-schema-ref-parser": "^11.9.3",
45
60
  "@standard-schema/spec": "^1.0.0",
46
- "pkgroll": "^2.5.1"
61
+ "@types/json-schema": "^7.0.15",
62
+ "arktype": "^2.1.9",
63
+ "openapi-types": "^12.1.3",
64
+ "pkgroll": "^2.5.1",
65
+ "valibot": "1.0.0-rc.4",
66
+ "zod": "^3.24.2"
47
67
  },
48
68
  "scripts": {
49
69
  "build": "pkgroll --minify --clean-dist"