schemastery
Advanced tools
Comparing version 3.3.3 to 3.4.0
@@ -1,1 +0,1 @@ | ||
var x=Object.defineProperty;var s=(e,t)=>x(e,"name",{value:t,configurable:!0});var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);import{clone as X,isNullable as p,isPlainObject as m,valueMap as f}from"cosmokit";var $=w((N,g)=>{var v=0,h=Symbol("schemastery"),r=s(function(e){let t=s(function(n){return r.resolve(n,t)[0]},"schema");if(e.refs){let n=f(e.refs,i=>new r(i)),o=s(i=>n[i],"getRef");for(let i in n){let c=n[i];c.sKey=o(c.sKey),c.inner=o(c.inner),c.list=c.list&&c.list.map(o),c.dict=c.dict&&f(c.dict,o)}return n[e.uid]}return Object.assign(t,e),Object.defineProperty(t,"uid",{value:v++}),Object.setPrototypeOf(t,r.prototype),t.meta||={},t},"Schema");r.prototype=Object.create(Function.prototype);r.prototype[h]=!0;var y;r.prototype.toJSON=s(function(){if(y)return y[this.uid]??=JSON.parse(JSON.stringify({...this})),this.uid;y={[this.uid]:{...this}},y[this.uid]=JSON.parse(JSON.stringify({...this}));let t={uid:this.uid,refs:y};return y=null,t},"toJSON");r.prototype.set=s(function(t,n){return this.dict[t]=n,this},"set");r.prototype.push=s(function(t){return this.list.push(t),this},"push");for(let e of["required","hidden"])Object.assign(r.prototype,{[e](t=!0){let n=r(this);return n.meta={...n.meta,[e]:t},n}});for(let e of["default","role","link","comment","description","max","min","step"])Object.assign(r.prototype,{[e](t){let n=r(this);return n.meta={...n.meta,[e]:t},n}});var T={};r.extend=s(function(t,n){T[t]=n},"extend");r.resolve=s(function(t,n,o){if(!n)return[t];if(p(t)){if(n.meta.required)throw new TypeError("missing required value");let c=n.meta.default;if(p(c))return[t];t=X(c)}let i=T[n.type];if(i)return i(t,n,o);throw new TypeError(`unsupported type "${n.type}"`)},"resolve");r.from=s(function(t){if(p(t))return r.any();if(["string","number","boolean"].includes(typeof t))return r.const(t).required();if(t[h])return t;if(typeof t=="function")switch(t){case String:return r.string().required();case Number:return r.number().required();case Boolean:return r.boolean().required();case Function:return r.function().required();default:return r.is(t).required()}else throw new TypeError(`cannot infer schema from ${t}`)},"from");r.natural=s(function(){return r.number().step(1).min(0)},"natural");r.percent=s(function(){return r.number().step(.01).min(0).max(1).role("slider")},"percent");r.extend("any",e=>[e]);r.extend("never",e=>{throw new TypeError(`expected nullable but got ${e}`)});r.extend("const",(e,{value:t})=>{if(e===t)return[t];throw new TypeError(`expected ${t} but got ${e}`)});function S(e,t,n){let{max:o=1/0,min:i=-1/0}=t;if(e>o)throw new TypeError(`expected ${n} <= ${o} but got ${e}`);if(e<i)throw new TypeError(`expected ${n} >= ${i} but got ${e}`)}s(S,"checkWithinRange");r.extend("string",(e,{meta:t})=>{if(typeof e!="string")throw new TypeError(`expected string but got ${e}`);return S(e.length,t,"string length"),[e]});r.extend("number",(e,{meta:t})=>{if(typeof e!="number")throw new TypeError(`expected number but got ${e}`);S(e,t,"number");let{step:n}=t;if(n){let o=Math.abs(e-(t.min??0))%n;if(o>=Number.EPSILON&&o<n-Number.EPSILON)throw new TypeError(`expected number multiple of ${n} but got ${e}`)}return[e]});r.extend("boolean",e=>{if(typeof e=="boolean")return[e];throw new TypeError(`expected boolean but got ${e}`)});r.extend("function",e=>{if(typeof e=="function")return[e];throw new TypeError(`expected function but got ${e}`)});r.extend("is",(e,{callback:t})=>{if(e instanceof t)return[e];throw new TypeError(`expected ${t.name} but got ${e}`)});function l(e,t,n){let[o,i]=r.resolve(e[t],n);return p(i)||(e[t]=i),o}s(l,"property");r.extend("array",(e,{inner:t,meta:n})=>{if(!Array.isArray(e))throw new TypeError(`expected array but got ${e}`);return S(e.length,n,"array length"),[e.map((o,i)=>l(e,i,t))]});r.extend("dict",(e,{inner:t,sKey:n},o)=>{if(!m(e))throw new TypeError(`expected object but got ${e}`);let i={};for(let c in e){let u;try{u=r.resolve(c,n)[0]}catch(d){if(o)continue;throw d}i[u]=l(e,c,t),e[u]=e[c],c!==u&&delete e[c]}return[i]});r.extend("tuple",(e,{list:t},n)=>{if(!Array.isArray(e))throw new TypeError(`expected array but got ${e}`);let o=t.map((i,c)=>l(e,c,i));return n?[o]:(o.push(...e.slice(t.length)),[o])});function b(e,t){for(let n in t)n in e||(e[n]=t[n])}s(b,"merge");r.extend("object",(e,{dict:t},n)=>{if(!m(e))throw new TypeError(`expected object but got ${e}`);let o={};for(let i in t){let c=l(e,i,t[i]);(!p(c)||i in e)&&(o[i]=c)}return n||b(o,e),[o]});r.extend("union",(e,{list:t,toString:n})=>{let o=[];for(let i of t)try{return r.resolve(e,i)}catch(c){o.push(c.message)}throw new TypeError(`expected ${n()} but got ${JSON.stringify(e)}`)});r.extend("intersect",(e,{list:t},n)=>{let o={};for(let i of t){let c=r.resolve(e,i,!0)[0];Object.assign(o,c)}return!n&&m(e)&&b(o,e),[o]});r.extend("transform",(e,{inner:t,callback:n})=>{let[o,i=e]=r.resolve(e,t,!0);if(m(e)){let c={};for(let u in o)u in e&&(c[u]=e[u],delete e[u]);return Object.assign(e,n(c)),[n(o)]}else return[n(o),n(i)]});function a(e,t,n){Object.assign(r,{[e](...o){let i=new r({type:e});return i.toString=n.bind(null,i),t.forEach((c,u)=>{switch(c){case"sKey":i.sKey=o[u]??r.string();break;case"inner":i.inner=r.from(o[u]);break;case"list":i.list=o[u].map(r.from);break;case"dict":i.dict=f(o[u],r.from);break;default:i[c]=o[u]}}),e==="object"||e==="dict"?i.meta.default={}:(e==="array"||e==="tuple")&&(i.meta.default=[]),i}})}s(a,"defineMethod");a("is",["callback"],({callback:e})=>e.name);a("any",[],()=>"any");a("never",[],()=>"never");a("const",["value"],({value:e})=>typeof e=="string"?JSON.stringify(e):e);a("string",[],()=>"string");a("number",[],()=>"number");a("boolean",[],()=>"boolean");a("function",[],()=>"function");a("array",["inner"],({inner:e})=>`${e.toString(!0)}[]`);a("dict",["inner","sKey"],({inner:e,sKey:t})=>`{ [key: ${t.toString()}]: ${e.toString()} }`);a("tuple",["list"],({list:e})=>`[${e.map(t=>t.toString()).join(", ")}]`);a("object",["dict"],({dict:e})=>Object.keys(e).length===0?"{}":`{ ${Object.entries(e).map(([t,n])=>`${t}${n.meta.required?"":"?"}: ${n.toString()}`).join(", ")} }`);a("union",["list"],({list:e},t)=>{let n=e.map(({toString:o})=>o()).join(" | ");return t?`(${n})`:n});a("intersect",["list"],({list:e})=>`${e.map(t=>t.toString(!0)).join(" & ")}`);a("transform",["inner","callback"],({inner:e},t)=>e.toString(t));g.exports=r});export default $(); | ||
var x=Object.defineProperty;var c=(e,t)=>x(e,"name",{value:t,configurable:!0});var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);import{clone as X,isNullable as p,isPlainObject as m,valueMap as f}from"cosmokit";var $=w((N,g)=>{var v=0,S=Symbol("schemastery"),r=c(function(e){let t=c(function(n){return r.resolve(n,t)[0]},"schema");if(e.refs){let n=f(e.refs,i=>new r(i)),o=c(i=>n[i],"getRef");for(let i in n){let s=n[i];s.sKey=o(s.sKey),s.inner=o(s.inner),s.list=s.list&&s.list.map(o),s.dict=s.dict&&f(s.dict,o)}return n[e.uid]}return Object.assign(t,e),Object.defineProperty(t,"uid",{value:v++}),Object.setPrototypeOf(t,r.prototype),t.meta||={},t},"Schema");r.prototype=Object.create(Function.prototype);r.prototype[S]=!0;var y;r.prototype.toJSON=c(function(){if(y)return y[this.uid]??=JSON.parse(JSON.stringify({...this})),this.uid;y={[this.uid]:{...this}},y[this.uid]=JSON.parse(JSON.stringify({...this}));let t={uid:this.uid,refs:y};return y=null,t},"toJSON");r.prototype.set=c(function(t,n){return this.dict[t]=n,this},"set");r.prototype.push=c(function(t){return this.list.push(t),this},"push");for(let e of["required","hidden"])Object.assign(r.prototype,{[e](t=!0){let n=r(this);return n.meta={...n.meta,[e]:t},n}});for(let e of["default","role","link","comment","description","max","min","step"])Object.assign(r.prototype,{[e](t){let n=r(this);return n.meta={...n.meta,[e]:t},n}});var T={};r.extend=c(function(t,n){T[t]=n},"extend");r.resolve=c(function(t,n,o){if(!n)return[t];if(p(t)){if(n.meta.required)throw new TypeError("missing required value");let s=n.meta.default;if(p(s))return[t];t=X(s)}let i=T[n.type];if(i)return i(t,n,o);throw new TypeError(`unsupported type "${n.type}"`)},"resolve");r.from=c(function(t){if(p(t))return r.any();if(["string","number","boolean"].includes(typeof t))return r.const(t).required();if(t[S])return t;if(typeof t=="function")switch(t){case String:return r.string().required();case Number:return r.number().required();case Boolean:return r.boolean().required();case Function:return r.function().required();default:return r.is(t).required()}else throw new TypeError(`cannot infer schema from ${t}`)},"from");r.natural=c(function(){return r.number().step(1).min(0)},"natural");r.percent=c(function(){return r.number().step(.01).min(0).max(1).role("slider")},"percent");r.extend("any",e=>[e]);r.extend("never",e=>{throw new TypeError(`expected nullable but got ${e}`)});r.extend("const",(e,{value:t})=>{if(e===t)return[t];throw new TypeError(`expected ${t} but got ${e}`)});function h(e,t,n){let{max:o=1/0,min:i=-1/0}=t;if(e>o)throw new TypeError(`expected ${n} <= ${o} but got ${e}`);if(e<i)throw new TypeError(`expected ${n} >= ${i} but got ${e}`)}c(h,"checkWithinRange");r.extend("string",(e,{meta:t})=>{if(typeof e!="string")throw new TypeError(`expected string but got ${e}`);return h(e.length,t,"string length"),[e]});r.extend("number",(e,{meta:t})=>{if(typeof e!="number")throw new TypeError(`expected number but got ${e}`);h(e,t,"number");let{step:n}=t;if(n){let o=Math.abs(e-(t.min??0))%n;if(o>=Number.EPSILON&&o<n-Number.EPSILON)throw new TypeError(`expected number multiple of ${n} but got ${e}`)}return[e]});r.extend("boolean",e=>{if(typeof e=="boolean")return[e];throw new TypeError(`expected boolean but got ${e}`)});r.extend("bitset",(e,{dict:t})=>{if(typeof e=="number")return[e];if(!Array.isArray(e))throw new TypeError(`expected array but got ${e}`);let n=0;for(let o of e){if(typeof o!="string")throw new TypeError(`expected string but got ${o}`);if(!(o in t))throw new TypeError(`unknown value ${o}`);n|=t[o]}return[n,n]});r.extend("function",e=>{if(typeof e=="function")return[e];throw new TypeError(`expected function but got ${e}`)});r.extend("is",(e,{callback:t})=>{if(e instanceof t)return[e];throw new TypeError(`expected ${t.name} but got ${e}`)});function l(e,t,n){let[o,i]=r.resolve(e[t],n);return p(i)||(e[t]=i),o}c(l,"property");r.extend("array",(e,{inner:t,meta:n})=>{if(!Array.isArray(e))throw new TypeError(`expected array but got ${e}`);return h(e.length,n,"array length"),[e.map((o,i)=>l(e,i,t))]});r.extend("dict",(e,{inner:t,sKey:n},o)=>{if(!m(e))throw new TypeError(`expected object but got ${e}`);let i={};for(let s in e){let a;try{a=r.resolve(s,n)[0]}catch(d){if(o)continue;throw d}i[a]=l(e,s,t),e[a]=e[s],s!==a&&delete e[s]}return[i]});r.extend("tuple",(e,{list:t},n)=>{if(!Array.isArray(e))throw new TypeError(`expected array but got ${e}`);let o=t.map((i,s)=>l(e,s,i));return n?[o]:(o.push(...e.slice(t.length)),[o])});function b(e,t){for(let n in t)n in e||(e[n]=t[n])}c(b,"merge");r.extend("object",(e,{dict:t},n)=>{if(!m(e))throw new TypeError(`expected object but got ${e}`);let o={};for(let i in t){let s=l(e,i,t[i]);(!p(s)||i in e)&&(o[i]=s)}return n||b(o,e),[o]});r.extend("union",(e,{list:t,toString:n})=>{let o=[];for(let i of t)try{return r.resolve(e,i)}catch(s){o.push(s.message)}throw new TypeError(`expected ${n()} but got ${JSON.stringify(e)}`)});r.extend("intersect",(e,{list:t},n)=>{let o={};for(let i of t){let s=r.resolve(e,i,!0)[0];Object.assign(o,s)}return!n&&m(e)&&b(o,e),[o]});r.extend("transform",(e,{inner:t,callback:n})=>{let[o,i=e]=r.resolve(e,t,!0);if(m(e)){let s={};for(let a in o)a in e&&(s[a]=e[a],delete e[a]);return Object.assign(e,n(s)),[n(o)]}else return[n(o),n(i)]});function u(e,t,n){Object.assign(r,{[e](...o){let i=new r({type:e});return i.toString=n.bind(null,i),t.forEach((s,a)=>{switch(s){case"sKey":i.sKey=o[a]??r.string();break;case"inner":i.inner=r.from(o[a]);break;case"list":i.list=o[a].map(r.from);break;case"dict":i.dict=f(o[a],r.from);break;default:i[s]=o[a]}}),e==="object"||e==="dict"?i.meta.default={}:(e==="array"||e==="tuple"||e==="bitset")&&(i.meta.default=[]),i}})}c(u,"defineMethod");u("is",["callback"],({callback:e})=>e.name);u("any",[],()=>"any");u("never",[],()=>"never");u("const",["value"],({value:e})=>typeof e=="string"?JSON.stringify(e):e);u("string",[],()=>"string");u("number",[],()=>"number");u("boolean",[],()=>"boolean");u("bitset",["dict"],()=>"bitset");u("function",[],()=>"function");u("array",["inner"],({inner:e})=>`${e.toString(!0)}[]`);u("dict",["inner","sKey"],({inner:e,sKey:t})=>`{ [key: ${t.toString()}]: ${e.toString()} }`);u("tuple",["list"],({list:e})=>`[${e.map(t=>t.toString()).join(", ")}]`);u("object",["dict"],({dict:e})=>Object.keys(e).length===0?"{}":`{ ${Object.entries(e).map(([t,n])=>`${t}${n.meta.required?"":"?"}: ${n.toString()}`).join(", ")} }`);u("union",["list"],({list:e},t)=>{let n=e.map(({toString:o})=>o()).join(" | ");return t?`(${n})`:n});u("intersect",["list"],({list:e})=>`${e.map(t=>t.toString(!0)).join(" & ")}`);u("transform",["inner","callback"],({inner:e},t)=>e.toString(t));g.exports=r});export default $(); |
@@ -22,3 +22,3 @@ var __defProp = Object.defineProperty; | ||
// packages/schemastery/src/index.ts | ||
// packages/schemastery/packages/core/src/index.ts | ||
var import_cosmokit = require("cosmokit"); | ||
@@ -184,2 +184,17 @@ var index = 0; | ||
}); | ||
Schema.extend("bitset", (data, { dict }) => { | ||
if (typeof data === "number") | ||
return [data]; | ||
if (!Array.isArray(data)) | ||
throw new TypeError(`expected array but got ${data}`); | ||
let result = 0; | ||
for (const value of data) { | ||
if (typeof value !== "string") | ||
throw new TypeError(`expected string but got ${value}`); | ||
if (!(value in dict)) | ||
throw new TypeError(`unknown value ${value}`); | ||
result |= dict[value]; | ||
} | ||
return [result, result]; | ||
}); | ||
Schema.extend("function", (data) => { | ||
@@ -322,3 +337,3 @@ if (typeof data === "function") | ||
schema.meta.default = {}; | ||
} else if (name === "array" || name === "tuple") { | ||
} else if (name === "array" || name === "tuple" || name === "bitset") { | ||
schema.meta.default = []; | ||
@@ -338,2 +353,3 @@ } | ||
defineMethod("boolean", [], () => "boolean"); | ||
defineMethod("bitset", ["dict"], () => "bitset"); | ||
defineMethod("function", [], () => "function"); | ||
@@ -340,0 +356,0 @@ defineMethod("array", ["inner"], ({ inner }) => `${inner.toString(true)}[]`); |
{ | ||
"name": "schemastery", | ||
"description": "Type driven schema validator", | ||
"version": "3.3.3", | ||
"version": "3.4.0", | ||
"main": "lib/node.js", | ||
@@ -13,28 +13,14 @@ "module": "lib/browser.js", | ||
"type": "git", | ||
"url": "git+https://github.com/cosmotype/schemastery.git" | ||
"url": "git+https://github.com/shigma/schemastery.git", | ||
"directory": "packages/core" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/cosmotype/schemastery/issues" | ||
"url": "https://github.com/shigma/schemastery/issues" | ||
}, | ||
"homepage": "https://github.com/cosmotype/schemastery", | ||
"homepage": "https://github.com/shigma/schemastery", | ||
"author": "Shigma <shigma10826@gmail.com>", | ||
"license": "MIT", | ||
"scripts": { | ||
"build": "tsc -b", | ||
"test": "mocha -r esbuild-register tests/*.spec.ts", | ||
"test:text": "rimraf coverage && c8 -r text yarn test", | ||
"test:json": "rimraf coverage && c8 -r json yarn test", | ||
"test:html": "rimraf coverage && c8 -r html yarn test" | ||
}, | ||
"devDependencies": { | ||
"@types/chai": "^4.3.0", | ||
"@types/mocha": "^9.1.0", | ||
"@types/node": "^17.0.23", | ||
"c8": "^7.11.0", | ||
"chai": "^4.3.6", | ||
"esbuild": "^0.14.31", | ||
"esbuild-register": "^3.3.2", | ||
"mocha": "^9.2.2", | ||
"rimraf": "^3.0.2", | ||
"typescript": "^4.6.3" | ||
"@types/chai": "^4.3.1", | ||
"chai": "^4.3.6" | ||
}, | ||
@@ -41,0 +27,0 @@ "dependencies": { |
# Schemastery | ||
[](https://codecov.io/gh/cosmotype/schemastery) | ||
[](https://codecov.io/gh/shigma/schemastery) | ||
[](https://www.npmjs.com/package/schemastery) | ||
[](https://www.npmjs.com/package/schemastery) | ||
[](https://github.com/shigma/schemastery/blob/master/LICENSE) | ||
@@ -6,0 +8,0 @@ Type Driven Schema Validator. |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
2
341
0
52077
5
396