@api-now/cli 1.7.2 → 1.8.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.
- package/dist/index.js +39 -39
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var ko=Object.create;var is=Object.defineProperty;var wo=Object.getOwnPropertyDescriptor;var vo=Object.getOwnPropertyNames;var _o=Object.getPrototypeOf,So=Object.prototype.hasOwnProperty;var Ao=(o,e)=>()=>{try{return e||o((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ma=(o,e)=>{for(var t in e)is(o,t,{get:e[t],enumerable:!0})},xo=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of vo(e))!So.call(o,i)&&i!==t&&is(o,i,{get:()=>e[i],enumerable:!(r=wo(e,i))||r.enumerable});return o};var Eo=(o,e,t)=>(t=o!=null?ko(_o(o)):{},xo(e||!o||!o.__esModule?is(t,"default",{value:o,enumerable:!0}):t,o));var $n=Ao((cb,Nn)=>{var Xs=Object.defineProperty,Ic=Object.getOwnPropertyDescriptor,Pc=Object.getOwnPropertyNames,Oc=Object.prototype.hasOwnProperty,Cc=(o,e)=>{for(var t in e)Xs(o,t,{get:e[t],enumerable:!0})},Rc=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Pc(e))!Oc.call(o,i)&&i!==t&&Xs(o,i,{get:()=>e[i],enumerable:!(r=Ic(e,i))||r.enumerable});return o},Tc=o=>Rc(Xs({},"__esModule",{value:!0}),o),Sn={};Cc(Sn,{AmfModelExpander:()=>Uc,JsonLd:()=>It,JsonLdOptions:()=>xn});Nn.exports=Tc(Sn);var Dc=class An{validate(e){if(e===void 0)throw new Error("Node must not be undefined");if(Array.isArray(e))throw new Error("Node must not be an array");if(e["@id"]===void 0)throw new Error("Node must have an @id")}static empty(){return new An}withNode(e){this.validate(e);let t=e["@id"];if(this[t]!==void 0)throw new Error(`Cannot add node with duplicate id ${e["@id"]} to dictionary`);return this[t]=e,this}withNodes(e){return e.forEach(t=>this.withNode(t)),this}},Pi=class{static targetOrLink(o,e){let t=e[o["@id"]];return t!==void 0?t:o}static isLinkObject(o){let e=typeof o=="object",t=!Array.isArray(o),r=o["@id"]!==void 0,i=Object.keys(o).length===1;return e&&t&&r&&i}static isArrayOfLinks(o){return o.every(e=>this.isLinkObject(e))}},zc=class{static embedNodeLinks(o,e,t){let i=t||(()=>!0);return Object.entries(o).filter(([s,a])=>i(s,a)).forEach(([s,a])=>{typeof a=="object"&&(Pi.isLinkObject(a)?o[s]=Pi.targetOrLink(a,e):Array.isArray(a)&&Pi.isArrayOfLinks(a)&&(o[s]=a.map(n=>Pi.targetOrLink(n,e))))}),o}},vn=class Ws{static expandIris(e,t){Object.entries(e).forEach(([r,i])=>{delete e[r];let s=Ws.expandIri(r,t);e[s]=i})}static compactIris(e,t){Object.entries(e).forEach(([r,i])=>{delete e[r];let s=Ws.compactIri(r,t);e[s]=i})}static compactIri(e,t){switch(typeof t){case"string":return e.replace(t,"");case"object":if(Array.isArray(t))throw new Error("Context must be either an object or a string");if(this.isCompacted(e,t))return e;try{let[r,i]=Object.entries(t).find(([s,a])=>e.startsWith(a));return e.replace(i,`${r}:`)}catch{return e}default:throw new Error("Context must be either an object or a string")}}static expandIri(e,t){switch(typeof t){case"string":return`${t}${e}`;case"object":if(Array.isArray(t))throw new Error("Context must be either an object or a string");if(this.isCompacted(e,t))try{let[r,i]=Object.entries(t).find(([s,a])=>e.startsWith(s));return e.replace(`${r}:`,i)}catch{return e}else return e;default:throw new Error("Context must be either an object or a string")}}static isCompacted(e,t){let r=!0;return Object.values(t).forEach(i=>{e.startsWith(i)&&(r=!1)}),r}},_n=class{static expandStructure(o){return Object.entries(o).forEach(([e,t])=>{switch(e){case"@id":break;case"@type":this.expandType(o,t);break;default:this.expandValue(o,e,t);break}}),o}static expandType(o,e){typeof e=="string"?o["@type"]=[e]:o["@type"]=e}static expandValue(o,e,t){switch(typeof t){case"string":case"number":case"boolean":o[e]=[{"@value":t}];break;case"object":Array.isArray(t)?t.map(i=>{switch(typeof i){case"string":case"number":case"boolean":return[{"@value":t}];default:return i}}):o[e]=[t]}}static compactStructure(o){if(Array.isArray(o)){let[e]=o;return this.compactStructure(e)}else return Object.entries(o).forEach(([e,t])=>{switch(e){case"@id":break;case"@type":this.compactType(o,t);break;default:this.compactValue(o,e,t);break}}),o}static compactType(o,e){Array.isArray(e)&&e.length===1&&(o["@type"]=e[0])}static compactValue(o,e,t){if(t.length===1){let[r]=t;this.isWrappedScalar(r)?o[e]=r["@value"]:o[e]=r}else t.map(r=>this.isWrappedScalar(r)?r["@value"]:r)}static isWrappedScalar(o){return o["@value"]!==void 0}},It=class{static process(o,e){let t=this.getGraph(o),r=this.getContext(o),i=Dc.empty().withNodes(t);t.forEach(a=>{e.embeddedLinks&&zc.embedNodeLinks(a,i,e.linkEmbeddingFilter),r!==void 0&&(e.expandedIris?vn.expandIris(a,r):e.compactedIris&&vn.compactIris(a,r)),e.expandedStructure?_n.expandStructure(a):e.compactedStructure&&_n.compactStructure(a)});let s=e.rootNodeId===void 0?{"@graph":t}:this.findNode(t,e.rootNodeId);return r!==void 0&&(s["@context"]=r),e.expandedStructure?[s]:s}static getContext(o){return o["@context"]}static getGraph(o){return o["@graph"]}static findNode(o,e){return o.find(t=>t["@id"]===e)}static stringify(o,e=!1){return JSON.stringify(o,null,e?2:0)}},xn=class En{expandedIris;expandedStructure;embeddedLinks;compactedIris;compactedStructure;rootNodeId;linkEmbeddingFilter;static apply(){return new En}withCompactedStructure(){return this.expandedStructure=!1,this.compactedStructure=!0,this}withRootNode(e){return this.rootNodeId=e,this}withExpandedStructure(){return this.expandedStructure=!0,this.compactedStructure=!1,this}withExpandedIris(){return this.expandedIris=!0,this.compactedIris=!1,this}withCompactedIris(){return this.expandedIris=!1,this.compactedIris=!0,this}withEmbeddedLinks(e){return this.linkEmbeddingFilter=e,this.embeddedLinks=!0,this}},Uc=class{static expand(o){if(this.isInExpandedForm(o))return o;{let e=(i,s)=>!i.endsWith("fixPoint");this.preprocessLegacyRootNodeId(o);let t=this.resolveRootNodeId(o),r=xn.apply().withEmbeddedLinks(e).withCompactedIris().withExpandedStructure().withRootNode(t);return It.process(o,r)}}static isInExpandedForm(o){return o["@graph"]===void 0}static preprocessLegacyRootNodeId(o){let e=It.getGraph(o);if(e!=null){let t=It.findNode(e,"./");t!=null&&(t["@id"]="")}}static resolveRootNodeId(o){let e=It.getGraph(o);if(e==null||It.findNode(e,"")!=null)return"";let t=It.getContext(o);if(t!=null&&t["@base"]!=null){let i=t["@base"];if(It.findNode(e,i)!=null)return i}let r=e.find(i=>Object.entries(i).some(([s,a])=>(s==="doc:root"||s==="http://a.ml/vocabularies/document#root")&&a===!0));return r!=null?r["@id"]:""}}});import cd from"update-notifier";import{Command as dd}from"commander";var hr={name:"@api-now/cli",description:"API Now! CLI",version:"1.7.2",private:!1,publishConfig:{registry:"https://registry.npmjs.org/","@api-now:registry":"https://registry.npmjs.org/",access:"public"},files:["dist"],engines:{node:">=22.0.0"},type:"module",bin:{apinow:"dist/index.js"},scripts:{build:"node esbuild.config.js",postbuild:"node dist/index.js --help",dev:"tsx src/index.ts",typecheck:"tsc --noEmit",lint:'eslint "src/**/*.ts"',format:'prettier --write "src/**/*.ts"',test:"tsx --test tests/**/*.test.ts",prepare:"husky",prepublishOnly:"npm run build",knip:"knip"},dependencies:{"@inquirer/prompts":"^8.5.0",commander:"^15.0.0",dompurify:"^3.4.11",jsdom:"^29.1.1",nanoid:"^5.1.6",open:"^11.0.0",tslib:"^2.8.1","update-notifier":"^7.3.1",winston:"^3.19.0"},devDependencies:{"@api-now/core":"^1.10.0","@api-now/json":"^1.0.0","@commitlint/cli":"^21.0.1","@commitlint/config-conventional":"^21.0.1","@eslint/js":"^10.0.1","@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@types/node":"^25.9.1","@types/update-notifier":"^6.0.8",esbuild:"^0.28.0",eslint:"^10.4.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6",globals:"^17.6.0",husky:"^9.1.7",knip:"^6.14.2",prettier:"^3.8.3","semantic-release":"^25.0.3",tsx:"^4.7.1",typescript:"^6.0.3","typescript-eslint":"^8.60.0"}};import ss from"node:os";import ot from"node:path";import be from"node:fs";var Jr="https://api.apinow.app",as="apinow-cli",$o="config.json",ns=class{_resolved=null;get resolved(){this._resolved||this.load();let e=this._resolved;if(!e)throw new Error("Configuration could not be loaded.");return e}configDir=this.#e();configPath=ot.join(this.configDir,$o);load(){let e=this.#r(),t=this.#i(),r=process.env.APINOW_API_TOKEN||process.env.APINOW_TOKEN||t.token||e.token,i=process.env.APINOW_API_URL||t.apiUrl||e.apiUrl||Jr,s=t.org||e.org||"";this._resolved={token:r,apiUrl:i,org:s,format:"text"}}saturate(e){this._resolved||this.load();let t=this._resolved;if(!t)throw new Error("Configuration could not be loaded.");this._resolved={token:t.token,apiUrl:e.apiUrl||t.apiUrl,org:t.org,format:e.format==="json"?"json":"text"}}#e(){if(process.platform==="win32"){let e=process.env.APPDATA||ot.join(ss.homedir(),"AppData","Roaming");if(!e)throw new Error("Could not determine the configuration directory.");return ot.join(e,as)}return process.platform==="darwin"?ot.join(ss.homedir(),"Library","Preferences",as):ot.join(process.env.XDG_CONFIG_HOME||ot.join(ss.homedir(),".config"),as)}#t(){let e=process.cwd();for(;;){let t=ot.join(e,"apinow.json");if(be.existsSync(t))try{if(be.statSync(t).isFile())return t}catch{}let r=ot.join(e,".apinowrc.json");if(be.existsSync(r))try{if(be.statSync(r).isFile())return r}catch{}let i=ot.dirname(e);if(i===e)break;e=i}return null}#i(){let e=this.#t();if(!e)return{};try{let t=be.readFileSync(e,"utf8");return JSON.parse(t)}catch{return{}}}#r(){try{if(!be.existsSync(this.configPath))return{apiUrl:Jr};let e=be.readFileSync(this.configPath,"utf8"),t=JSON.parse(e);return{apiUrl:Jr,...t}}catch{return{apiUrl:Jr}}}writeProperty(e,t){let r=this.#r();r[e]=t,this.#s(r)}#s(e){try{let r={...this.#r(),...e};be.existsSync(this.configDir)||be.mkdirSync(this.configDir,{recursive:!0}),be.writeFileSync(this.configPath,JSON.stringify(r,null,2),"utf8")}catch(t){console.error("Failed to write configuration:",t)}}clearConfigKey(e){try{let t=this.#r();delete t[e],be.existsSync(this.configDir)||be.mkdirSync(this.configDir,{recursive:!0}),be.writeFileSync(this.configPath,JSON.stringify(t,null,2),"utf8")}catch(t){console.error(`Failed to clear key ${e} from configuration:`,t)}}reset(){try{be.existsSync(this.configPath)&&be.unlinkSync(this.configPath),be.existsSync(this.configDir)&&be.readdirSync(this.configDir).length===0&&be.rmdirSync(this.configDir),this._resolved=null}catch(e){console.error("Failed to reset configuration:",e)}}},O=new ns;import{styleText as Bt}from"node:util";import jo from"node:path";import Io from"node:os";import Po from"node:crypto";import Me from"winston";var Oo=Po.randomBytes(4).toString("hex"),Co=Date.now(),qr=jo.join(Io.tmpdir(),`apinow-cli-${Co}-${Oo}.log`),fa=new Me.transports.Console({stderrLevels:Object.keys(Me.config.cli.levels),level:"info",format:Me.format.combine(Me.format.colorize(),Me.format.simple())}),Ro=new Me.transports.File({filename:qr,level:"debug",format:Me.format.combine(Me.format.timestamp(),Me.format.printf(({timestamp:o,level:e,message:t})=>{let r=typeof t=="string"?t.replace(/\u001b\[\d+m/g,""):t;return`${o} [${e.toUpperCase()}]: ${r}`}))}),v=Me.createLogger({levels:Me.config.cli.levels,level:"debug",transports:[fa,Ro]});function ga(o){fa.level=o}var os=hr.version;var X={green:o=>Bt("green",o),red:o=>Bt("red",o),yellow:o=>Bt("yellow",o),cyan:o=>Bt("cyan",o),dim:o=>Bt("dim",o),bold:o=>Bt("bold",o)};function To(o,e,t){if(o.length===0)return"No data available.";let r={},i=t||e;for(let l=0;l<e.length;l++){let c=e[l],p=i[l]||c;r[c]=p.length}for(let l of o)for(let c of e){let p=typeof l[c]=="object"&&l[c]!==null?JSON.stringify(l[c]):String(l[c]??"");p.length>(r[c]||0)&&(r[c]=p.length)}let s=e.map((l,c)=>(i[c]||l).toUpperCase().padEnd(r[l])).join(" "),a=e.map(l=>"-".repeat(r[l])).join(" "),n=o.map(l=>e.map(c=>(typeof l[c]=="object"&&l[c]!==null?JSON.stringify(l[c]):String(l[c]??"")).padEnd(r[c])).join(" "));return[s,a,...n].join(`
|
|
3
|
-
`)}var
|
|
4
|
-
Validation errors:`);for(let
|
|
2
|
+
var Eo=Object.create;var ds=Object.defineProperty;var xo=Object.getOwnPropertyDescriptor;var No=Object.getOwnPropertyNames;var $o=Object.getPrototypeOf,jo=Object.prototype.hasOwnProperty;var Io=(o,e)=>()=>{try{return e||o((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},va=(o,e)=>{for(var t in e)ds(o,t,{get:e[t],enumerable:!0})},Po=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of No(e))!jo.call(o,r)&&r!==t&&ds(o,r,{get:()=>e[r],enumerable:!(i=xo(e,r))||i.enumerable});return o};var Oo=(o,e,t)=>(t=o!=null?Eo($o(o)):{},Po(e||!o||!o.__esModule?ds(t,"default",{value:o,enumerable:!0}):t,o));var Rn=Io((fb,Cn)=>{var ra=Object.defineProperty,Dc=Object.getOwnPropertyDescriptor,zc=Object.getOwnPropertyNames,Uc=Object.prototype.hasOwnProperty,Mc=(o,e)=>{for(var t in e)ra(o,t,{get:e[t],enumerable:!0})},Vc=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of zc(e))!Uc.call(o,r)&&r!==t&&ra(o,r,{get:()=>e[r],enumerable:!(i=Dc(e,r))||i.enumerable});return o},Lc=o=>Vc(ra({},"__esModule",{value:!0}),o),jn={};Mc(jn,{AmfModelExpander:()=>Jc,JsonLd:()=>Rt,JsonLdOptions:()=>Pn});Cn.exports=Lc(jn);var Kc=class In{validate(e){if(e===void 0)throw new Error("Node must not be undefined");if(Array.isArray(e))throw new Error("Node must not be an array");if(e["@id"]===void 0)throw new Error("Node must have an @id")}static empty(){return new In}withNode(e){this.validate(e);let t=e["@id"];if(this[t]!==void 0)throw new Error(`Cannot add node with duplicate id ${e["@id"]} to dictionary`);return this[t]=e,this}withNodes(e){return e.forEach(t=>this.withNode(t)),this}},Dr=class{static targetOrLink(o,e){let t=e[o["@id"]];return t!==void 0?t:o}static isLinkObject(o){let e=typeof o=="object",t=!Array.isArray(o),i=o["@id"]!==void 0,r=Object.keys(o).length===1;return e&&t&&i&&r}static isArrayOfLinks(o){return o.every(e=>this.isLinkObject(e))}},Fc=class{static embedNodeLinks(o,e,t){let r=t||(()=>!0);return Object.entries(o).filter(([s,a])=>r(s,a)).forEach(([s,a])=>{typeof a=="object"&&(Dr.isLinkObject(a)?o[s]=Dr.targetOrLink(a,e):Array.isArray(a)&&Dr.isArrayOfLinks(a)&&(o[s]=a.map(n=>Dr.targetOrLink(n,e))))}),o}},Nn=class ia{static expandIris(e,t){Object.entries(e).forEach(([i,r])=>{delete e[i];let s=ia.expandIri(i,t);e[s]=r})}static compactIris(e,t){Object.entries(e).forEach(([i,r])=>{delete e[i];let s=ia.compactIri(i,t);e[s]=r})}static compactIri(e,t){switch(typeof t){case"string":return e.replace(t,"");case"object":if(Array.isArray(t))throw new Error("Context must be either an object or a string");if(this.isCompacted(e,t))return e;try{let[i,r]=Object.entries(t).find(([s,a])=>e.startsWith(a));return e.replace(r,`${i}:`)}catch{return e}default:throw new Error("Context must be either an object or a string")}}static expandIri(e,t){switch(typeof t){case"string":return`${t}${e}`;case"object":if(Array.isArray(t))throw new Error("Context must be either an object or a string");if(this.isCompacted(e,t))try{let[i,r]=Object.entries(t).find(([s,a])=>e.startsWith(s));return e.replace(`${i}:`,r)}catch{return e}else return e;default:throw new Error("Context must be either an object or a string")}}static isCompacted(e,t){let i=!0;return Object.values(t).forEach(r=>{e.startsWith(r)&&(i=!1)}),i}},$n=class{static expandStructure(o){return Object.entries(o).forEach(([e,t])=>{switch(e){case"@id":break;case"@type":this.expandType(o,t);break;default:this.expandValue(o,e,t);break}}),o}static expandType(o,e){typeof e=="string"?o["@type"]=[e]:o["@type"]=e}static expandValue(o,e,t){switch(typeof t){case"string":case"number":case"boolean":o[e]=[{"@value":t}];break;case"object":Array.isArray(t)?t.map(r=>{switch(typeof r){case"string":case"number":case"boolean":return[{"@value":t}];default:return r}}):o[e]=[t]}}static compactStructure(o){if(Array.isArray(o)){let[e]=o;return this.compactStructure(e)}else return Object.entries(o).forEach(([e,t])=>{switch(e){case"@id":break;case"@type":this.compactType(o,t);break;default:this.compactValue(o,e,t);break}}),o}static compactType(o,e){Array.isArray(e)&&e.length===1&&(o["@type"]=e[0])}static compactValue(o,e,t){if(t.length===1){let[i]=t;this.isWrappedScalar(i)?o[e]=i["@value"]:o[e]=i}else t.map(i=>this.isWrappedScalar(i)?i["@value"]:i)}static isWrappedScalar(o){return o["@value"]!==void 0}},Rt=class{static process(o,e){let t=this.getGraph(o),i=this.getContext(o),r=Kc.empty().withNodes(t);t.forEach(a=>{e.embeddedLinks&&Fc.embedNodeLinks(a,r,e.linkEmbeddingFilter),i!==void 0&&(e.expandedIris?Nn.expandIris(a,i):e.compactedIris&&Nn.compactIris(a,i)),e.expandedStructure?$n.expandStructure(a):e.compactedStructure&&$n.compactStructure(a)});let s=e.rootNodeId===void 0?{"@graph":t}:this.findNode(t,e.rootNodeId);return i!==void 0&&(s["@context"]=i),e.expandedStructure?[s]:s}static getContext(o){return o["@context"]}static getGraph(o){return o["@graph"]}static findNode(o,e){return o.find(t=>t["@id"]===e)}static stringify(o,e=!1){return JSON.stringify(o,null,e?2:0)}},Pn=class On{expandedIris;expandedStructure;embeddedLinks;compactedIris;compactedStructure;rootNodeId;linkEmbeddingFilter;static apply(){return new On}withCompactedStructure(){return this.expandedStructure=!1,this.compactedStructure=!0,this}withRootNode(e){return this.rootNodeId=e,this}withExpandedStructure(){return this.expandedStructure=!0,this.compactedStructure=!1,this}withExpandedIris(){return this.expandedIris=!0,this.compactedIris=!1,this}withCompactedIris(){return this.expandedIris=!1,this.compactedIris=!0,this}withEmbeddedLinks(e){return this.linkEmbeddingFilter=e,this.embeddedLinks=!0,this}},Jc=class{static expand(o){if(this.isInExpandedForm(o))return o;{let e=(r,s)=>!r.endsWith("fixPoint");this.preprocessLegacyRootNodeId(o);let t=this.resolveRootNodeId(o),i=Pn.apply().withEmbeddedLinks(e).withCompactedIris().withExpandedStructure().withRootNode(t);return Rt.process(o,i)}}static isInExpandedForm(o){return o["@graph"]===void 0}static preprocessLegacyRootNodeId(o){let e=Rt.getGraph(o);if(e!=null){let t=Rt.findNode(e,"./");t!=null&&(t["@id"]="")}}static resolveRootNodeId(o){let e=Rt.getGraph(o);if(e==null||Rt.findNode(e,"")!=null)return"";let t=Rt.getContext(o);if(t!=null&&t["@base"]!=null){let r=t["@base"];if(Rt.findNode(e,r)!=null)return r}let i=e.find(r=>Object.entries(r).some(([s,a])=>(s==="doc:root"||s==="http://a.ml/vocabularies/document#root")&&a===!0));return i!=null?i["@id"]:""}}});import fd from"update-notifier";import{Command as gd}from"commander";var bi={name:"@api-now/cli",description:"API Now! CLI",version:"1.8.0",private:!1,publishConfig:{registry:"https://registry.npmjs.org/","@api-now:registry":"https://registry.npmjs.org/",access:"public"},files:["dist"],engines:{node:">=22.0.0"},type:"module",bin:{apinow:"dist/index.js"},scripts:{build:"node esbuild.config.js",postbuild:"node dist/index.js --help",dev:"tsx src/index.ts",typecheck:"tsc --noEmit",lint:'eslint "src/**/*.ts"',format:'prettier --write "src/**/*.ts"',test:"tsx --test tests/**/*.test.ts",prepare:"husky",prepublishOnly:"npm run build",knip:"knip"},dependencies:{"@inquirer/prompts":"^8.5.0",commander:"^15.0.0",dompurify:"^3.4.11",jsdom:"^30.0.1",nanoid:"^6.0.1",open:"^11.0.0",tslib:"^2.8.1","update-notifier":"^7.3.1",winston:"^3.19.0"},devDependencies:{"@api-now/core":"^1.10.0","@api-now/json":"^1.0.0","@commitlint/cli":"^21.0.1","@commitlint/config-conventional":"^21.0.1","@eslint/js":"^10.0.1","@semantic-release/changelog":"^7.0.0","@semantic-release/git":"^11.0.1","@types/node":"^26.2.0","@types/update-notifier":"^6.0.8",esbuild:"^0.28.0",eslint:"^10.4.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6",globals:"^17.6.0",husky:"^9.1.7",knip:"^6.14.2",prettier:"^3.8.3","semantic-release":"^25.0.3",tsx:"^4.7.1",typescript:"^6.0.3","typescript-eslint":"^8.60.0"}};import ps from"node:os";import ut from"node:path";import ve from"node:fs";var Hi="https://api.apinow.app",us="apinow-cli",Ro="config.json",hs=class{_resolved=null;get resolved(){this._resolved||this.load();let e=this._resolved;if(!e)throw new Error("Configuration could not be loaded.");return e}configDir=this.#e();configPath=ut.join(this.configDir,Ro);load(){let e=this.#i(),t=this.#r(),i=process.env.APINOW_API_TOKEN||process.env.APINOW_TOKEN||t.token||e.token,r=process.env.APINOW_API_URL||t.apiUrl||e.apiUrl||Hi,s=t.org||e.org||"";this._resolved={token:i,apiUrl:r,org:s,format:"text"}}saturate(e){this._resolved||this.load();let t=this._resolved;if(!t)throw new Error("Configuration could not be loaded.");this._resolved={token:t.token,apiUrl:e.apiUrl||t.apiUrl,org:t.org,format:e.format==="json"?"json":"text"}}#e(){if(process.platform==="win32"){let e=process.env.APPDATA||ut.join(ps.homedir(),"AppData","Roaming");if(!e)throw new Error("Could not determine the configuration directory.");return ut.join(e,us)}return process.platform==="darwin"?ut.join(ps.homedir(),"Library","Preferences",us):ut.join(process.env.XDG_CONFIG_HOME||ut.join(ps.homedir(),".config"),us)}#t(){let e=process.cwd();for(;;){let t=ut.join(e,"apinow.json");if(ve.existsSync(t))try{if(ve.statSync(t).isFile())return t}catch{}let i=ut.join(e,".apinowrc.json");if(ve.existsSync(i))try{if(ve.statSync(i).isFile())return i}catch{}let r=ut.dirname(e);if(r===e)break;e=r}return null}#r(){let e=this.#t();if(!e)return{};try{let t=ve.readFileSync(e,"utf8");return JSON.parse(t)}catch{return{}}}#i(){try{if(!ve.existsSync(this.configPath))return{apiUrl:Hi};let e=ve.readFileSync(this.configPath,"utf8"),t=JSON.parse(e);return{apiUrl:Hi,...t}}catch{return{apiUrl:Hi}}}writeProperty(e,t){let i=this.#i();i[e]=t,this.#s(i)}#s(e){try{let i={...this.#i(),...e};ve.existsSync(this.configDir)||ve.mkdirSync(this.configDir,{recursive:!0}),ve.writeFileSync(this.configPath,JSON.stringify(i,null,2),"utf8")}catch(t){console.error("Failed to write configuration:",t)}}clearConfigKey(e){try{let t=this.#i();delete t[e],ve.existsSync(this.configDir)||ve.mkdirSync(this.configDir,{recursive:!0}),ve.writeFileSync(this.configPath,JSON.stringify(t,null,2),"utf8")}catch(t){console.error(`Failed to clear key ${e} from configuration:`,t)}}reset(){try{ve.existsSync(this.configPath)&&ve.unlinkSync(this.configPath),ve.existsSync(this.configDir)&&ve.readdirSync(this.configDir).length===0&&ve.rmdirSync(this.configDir),this._resolved=null}catch(e){console.error("Failed to reset configuration:",e)}}},P=new hs;import{styleText as Zt}from"node:util";import To from"node:path";import Do from"node:os";import zo from"node:crypto";import qe from"winston";var Uo=zo.randomBytes(4).toString("hex"),Mo=Date.now(),Wi=To.join(Do.tmpdir(),`apinow-cli-${Mo}-${Uo}.log`),_a=new qe.transports.Console({stderrLevels:Object.keys(qe.config.cli.levels),level:"info",format:qe.format.combine(qe.format.colorize(),qe.format.simple())}),Vo=new qe.transports.File({filename:Wi,level:"debug",format:qe.format.combine(qe.format.timestamp(),qe.format.printf(({timestamp:o,level:e,message:t})=>{let i=typeof t=="string"?t.replace(/\u001b\[\d+m/g,""):t;return`${o} [${e.toUpperCase()}]: ${i}`}))}),_=qe.createLogger({levels:qe.config.cli.levels,level:"debug",transports:[_a,Vo]});function Sa(o){_a.level=o}var ms=bi.version;var Q={green:o=>Zt("green",o),red:o=>Zt("red",o),yellow:o=>Zt("yellow",o),cyan:o=>Zt("cyan",o),dim:o=>Zt("dim",o),bold:o=>Zt("bold",o)};function Lo(o,e,t){if(o.length===0)return"No data available.";let i={},r=t||e;for(let l=0;l<e.length;l++){let c=e[l],p=r[l]||c;i[c]=p.length}for(let l of o)for(let c of e){let p=typeof l[c]=="object"&&l[c]!==null?JSON.stringify(l[c]):String(l[c]??"");p.length>(i[c]||0)&&(i[c]=p.length)}let s=e.map((l,c)=>(r[c]||l).toUpperCase().padEnd(i[l])).join(" "),a=e.map(l=>"-".repeat(i[l])).join(" "),n=o.map(l=>e.map(c=>(typeof l[c]=="object"&&l[c]!==null?JSON.stringify(l[c]):String(l[c]??"")).padEnd(i[c])).join(" "));return[s,a,...n].join(`
|
|
3
|
+
`)}var H=class{format;constructor(e={}){this.format=e.format||"text"}success(e,t){this.format==="json"?console.log(JSON.stringify({success:!0,message:e,data:t},null,2)):(console.log(Q.green(`\u2714 ${e}`)),t!==void 0&&(typeof t=="object"&&t!==null?this.object(t):console.log(t)))}error(e){let t=e.code||"CLI_ERR_UNKNOWN";if(this.format==="json")console.error(JSON.stringify({success:!1,code:t,cliVersion:ms,logFile:Wi,...e},null,2));else{if(console.error(Q.red(`\u2716 Error [${t}]: ${e.message}`)),e.detail&&console.error(Q.dim(e.detail)),e.errors&&e.errors.length>0){console.error(`
|
|
4
|
+
Validation errors:`);for(let i of e.errors)console.error(` - ${Q.yellow(i.field)}: ${i.message}`)}if(console.error(Q.dim(`(cli v${ms})`)),console.error(Q.dim(`Log file: ${Wi}`)),t==="CLI_ERR_UNKNOWN"){let i="https://github.com/api-now/cli",r=encodeURIComponent(`[BUG] CLI Crash: ${e.message}`),s=encodeURIComponent(`**CLI Version:** ${ms}
|
|
5
5
|
**Error Code:** ${t}
|
|
6
6
|
|
|
7
7
|
**Error Message:**
|
|
@@ -11,46 +11,46 @@ ${e.message}
|
|
|
11
11
|
\`\`\`
|
|
12
12
|
${e.detail||"No stack trace available"}
|
|
13
13
|
\`\`\`
|
|
14
|
-
`),a=`${
|
|
15
|
-
Please report this bug: ${a}`)}}}list(e,t,
|
|
16
|
-
`)}*keys(){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield this._map[t].name)}*values(){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield this._map[t].value)}*entries(){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield[this._map[t].name,this._map[t].value])}*[Symbol.iterator](){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield[this._map[t].name,this._map[t].value])}};function cs(o,e){let t=o.toLowerCase();return t==="authorization"||t==="proxy-authorization"?e.toLowerCase().startsWith("bearer ")?"Bearer **********":"**********":t==="cookie"||t==="set-cookie"||t==="x-api-key"||t==="api-key"?"**********":e}function ls(o){if(o==null)return o;if(Array.isArray(o))return o.map(e=>ls(e));if(typeof o=="object"){let e={};for(let[t,r]of Object.entries(o)){let i=t.toLowerCase();i.includes("token")||i.includes("password")||i.includes("secret")||i.includes("key")?e[t]="**********":e[t]=ls(r)}return e}return o}function ds(o){if(!o)return o;try{let e=JSON.parse(o),t=ls(e);return JSON.stringify(t,null,2)}catch{return o}}var g=class extends Error{name;status;static fromRawException(e,t){let r=e,i={};if(r.code!==void 0&&(i.code=String(r.code)),r.status!==void 0){let n=Number(r.status);isNaN(n)||(i.status=n)}r.help!==void 0&&(i.help=String(r.help));let s=r.message!==void 0?String(r.message):t,a=new this(s,i);return r.name!==void 0&&(a.name=String(r.name)),a}constructor(e,t){super(e,t);let r=this.constructor;this.name=r.name,this.message=e??r.message??"",this.status=t?.status??r.status??500;let i=t?.code??r.code;i!==void 0&&(this.code=i);let s=t?.help??r.help;s!==void 0&&(this.help=s),Error.captureStackTrace(this,r)}setHelp(e){return this.help=e,this}setCode(e){return this.code=e,this}setStatus(e){return this.status=e,this}get[Symbol.toStringTag](){return this.constructor.name}toString(){return this.code?`${this.name} [${this.code}]: ${this.message}`:`${this.name}: ${this.message}`}toJSON(){let e={name:this.name,message:this.message};return this.status&&(e.status=this.status),this.code&&(e.code=this.code),this.help&&(e.help=this.help),e}};var D="Invalid JSON response.",R="The response has no value.",E="Invalid response status: ",V="Unknown response from the server.";var Z=class{sdk;constructor(e){this.sdk=e}logInvalidResponse(e){if(!this.sdk.silent&&e.body)try{let t=JSON.parse(e.body);t.message&&console.warn(`[Store message]: ${t.message}`)}catch{}}inspectCommonStatusCodes(e){let{status:t,body:r}=e;if(t===404){let i=this.createApiError("Not found",r);throw i.status!==404&&i.setStatus(404),i.code!=="E_NOT_FOUND"&&i.setCode("E_NOT_FOUND"),i}if(t===403){let i=this.createApiError("You have no access to this resource",r);throw i.status!==403&&i.setStatus(403),i.code!=="E_FORBIDDEN"&&i.setCode("E_FORBIDDEN"),i}if(t===401){this.sdk.dispatchEvent(new Event("unauthorized"));let i=this.createApiError("Not authorized",r);throw i.status!==401&&i.setStatus(401),i.code!=="E_UNAUTHORIZED"&&i.setCode("E_UNAUTHORIZED"),i}}createApiError(e,t){if(!t)return new g(e);let r;try{r=JSON.parse(t)}catch{return new g(e)}return!r||typeof r!="object"||!r.message?new g(e):g.fromRawException(r,e)}async genericBatchDelete(e,t,r={}){let{token:i}=r,s=await this.sdk.http.post(e.toString(),{token:i,body:JSON.stringify(t)});this.inspectCommonStatusCodes(s);let a="Unable to delete in batch. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${E}${s.status}`,s.body);if(!s.body)throw new g(`${a}${R}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body)}catch{throw new g(`${a}${D}`,{code:"E_INVALID_JSON",status:s.status})}if(!Array.isArray(n.data))throw new g(`${a}${V}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}async genericDelete(e,t={}){let{token:r}=t,i=await this.sdk.http.delete(e.toString(),{token:r});this.inspectCommonStatusCodes(i);let s="Unable to delete the object. ";if(i.status!==204)throw this.logInvalidResponse(i),this.createApiError(`${s}${E}${i.status}`,i.body)}async genericList(e,t,r={}){let{token:i}=r;this.sdk.appendListOptions(e,t);let s=await this.sdk.http.get(e.toString(),{token:i});this.inspectCommonStatusCodes(s);let a="Unable to list revisions for a file. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${E}${s.status}`,s.body);if(!s.body)throw new g(`${a}${R}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body)}catch{throw new g(`${a}${D}`,{code:"E_INVALID_JSON",status:s.status})}if(!Array.isArray(n.data))throw new g(`${a}${V}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}readResponseBody(e,t){if(![200,202].includes(e.status))throw this.logInvalidResponse(e),this.createApiError(`${t}${E}${e.status}`,e.body);if(!e.body)throw new g(`${t}${R}`,{code:"E_RESPONSE_NO_VALUE",status:e.status});return e.body}readResponseJSON(e,t){let r=this.readResponseBody(e,t),i;try{i=JSON.parse(r)}catch{throw new g(`${t}${D}`,{code:"E_INVALID_JSON",status:e.status})}return i}processListResponse(e,t){this.inspectCommonStatusCodes(e);let r=this.readResponseJSON(e,t);if(!Array.isArray(r.data))throw new g(`${t}${V}`,{code:"E_RESPONSE_UNKNOWN",status:e.status});return r}assertObjectKind(e,t,r){if(t!==r)throw new g(`${e}${V}`,{code:"E_RESPONSE_UNKNOWN",status:500})}};var Ct=class extends Error{status;response;constructor(e,t){super(`HTTP Error: ${e}`),this.status=e,this.response=t}},Br=class extends Z{logRequest(e,t,r){if(!this.sdk.logger)return;let i=r?.headers||{},s={};for(let[c,p]of Object.entries(i))s[c]=cs(c,p);(r?.token||this.sdk.token)&&!s.authorization&&!s.Authorization&&(s.Authorization="Bearer **********");let n=r?.body,l=ds(n);this.sdk.logger.log("debug",`--> HTTP ${e} ${t}`),Object.keys(s).length>0&&this.sdk.logger.log("debug",`Headers: ${JSON.stringify(s,null,2)}`),l&&this.sdk.logger.log("debug",`Body: ${l}`)}logResponse(e,t,r){if(!this.sdk.logger)return;let i=r.headers?r.headers.toJSON():{},s={};for(let[n,l]of Object.entries(i))s[n]=cs(n,l);let a=ds(r.body);this.sdk.logger.log("debug",`<-- HTTP ${r.status} ${e} ${t}`),Object.keys(s).length>0&&this.sdk.logger.log("debug",`Headers: ${JSON.stringify(s,null,2)}`),a&&this.sdk.logger.log("debug",`Body: ${a}`)}logError(e,t,r){if(!this.sdk.logger)return;let i=r instanceof Error?r.message:String(r);this.sdk.logger.log("debug",`<-- HTTP ${e} ${t} Failed: ${i}`)}};function zo(o,e=1e3){return globalThis.__MOCK_RETRY_DELAY_MS__!==void 0?globalThis.__MOCK_RETRY_DELAY_MS__:o<=0?e:e*Math.pow(2,o-1)}function Uo(o){let{status:e}=o;return!(typeof e=="number"&&e>=400&&e<500)}async function ps(o,e={}){let{retries:t=3,delayMs:r=zo,shouldRetry:i=Uo}=e,s;for(let n=0;n<t;n++)try{return await o()}catch(l){if(s=l,!i(s)||n===t-1)throw s;let c=typeof r=="function"?r(n+1):r;c>0&&await new Promise(p=>setTimeout(p,c))}throw s||new Error("Retry operation failed without a specific error.")}var Gr=class extends Br{async get(e,t={}){let r=async()=>{this.logRequest("GET",e,t);try{let i=await this._get(e,t);if(this.logResponse("GET",e,i),[301,302,308,307].includes(i.status)){let s=i.headers.get("location");if(!s)throw new Error('Expected redirection but no "location" header.');let a=new URL(s,e);return this.get(a.toString(),t)}if(t.retry&&i.status>=400)throw new Ct(i.status,i);return i}catch(i){throw this.logError("GET",e,i),i}};if(t.retry)try{let i=typeof t.retry=="object"?t.retry:{};return await ps(r,i)}catch(i){if(i instanceof Ct)return i.response;throw i}return r()}_get(e,t={}){return new Promise((r,i)=>{let{method:s="GET",headers:a={},token:n=this.sdk.token}=t,l={...a};n&&(l.authorization=`Bearer ${n}`);let u=(e.startsWith("https:")?wa:ka).request(e,{method:s,headers:l,rejectUnauthorized:!1});u.on("response",h=>{let m={status:h.statusCode,headers:new fr(h.headers),body:""};h.on("data",f=>{m.body+=f}),h.on("end",()=>r(m))}),u.on("error",h=>i(h)),u.end()})}async post(e,t={}){let r=t.method||"POST",i=async()=>{this.logRequest(r,e,t);let s=await new Promise((a,n)=>{let{headers:l={},token:c=this.sdk.token}=t,p={...l};c&&(p.authorization=`Bearer ${c}`),t.body&&!p["content-type"]&&!p["Content-Type"]&&(p["content-type"]="application/json");let m=(e.startsWith("https:")?wa:ka).request(e,{method:r,headers:p});m.on("response",f=>{let k={status:f.statusCode,headers:new fr(f.headers),body:""};f.on("data",b=>{k.body+=b}),f.on("end",()=>{this.logResponse(r,e,k),a(k)})}),m.on("error",f=>{this.logError(r,e,f),n(f)}),t.body&&m.write(t.body),m.end()});if(t.retry&&s.status>=400)throw new Ct(s.status,s);return s};if(t.retry)try{let s=typeof t.retry=="object"?t.retry:{};return await ps(i,s)}catch(s){if(s instanceof Ct)return s.response;throw s}return i()}patch(e,t={}){let r={...t,method:"PATCH"};return this.post(e,r)}put(e,t={}){let r={...t,method:"PUT"};return this.post(e,r)}delete(e,t={}){let r={...t,method:"DELETE"};return this.post(e,r)}};var A=class o{static folders(e){return`/v1/orgs/${e}/folders`}static files(e){return`/v1/orgs/${e}/files`}static filesSearch(e){return`${o.files(e)}/search`}static filesAccess(e,t){return`${o.file(e,t)}/access`}static filesBatch(e){return`${o.files(e)}/batch/read-meta`}static file(e,t){return`${o.files(e)}/${t}`}static fileMedia(e,t){return`${o.file(e,t)}/media`}static fileUsers(e,t){return`${o.file(e,t)}/users`}static fileRevisions(e,t){return`${o.file(e,t)}/revisions`}static fileBreadcrumbs(e,t){return`${o.file(e,t)}/breadcrumbs`}static fileRename(e,t){return`${o.file(e,t)}/rename`}static history(){return"/history"}static historyBatchCreate(){return"/history/batch/create"}static historyBatchDelete(){return"/history/batch/delete"}static historyItem(e){return`/history/${e}`}static historyClear(e,...t){return`/history/clear/${e}/${t.join("/")}`}static shared(e){return`/v1/orgs/${e}/shared`}static trash(e){return`/v1/orgs/${e}/trash`}static trashItem(e,t){return`${o.trash(e)}/${t}`}static trashRestore(e,t){return`${o.trashItem(e,t)}/restore`}static trashEmpty(e){return`${o.trash(e)}/empty`}static trashBatchRestore(e){return`${o.trash(e)}/restore`}static trashBatchDelete(e){return`${o.trash(e)}/delete`}static projectExecutions(){return"/project/execution"}static projectExecution(e){return`/project/execution/${e}`}static projectExecutionBulkDelete(){return"/project/execution/delete"}static projectExecutionClear(e){return`/project/execution/clear/${e}`}static organizations(){return"/v1/orgs"}static organization(e){return`/v1/orgs/${e}`}static organizationUsers(e){return`${this.organization(e)}/users`}static organizationUserBatch(e){return`${this.organization(e)}/users/batch/read`}static organizationUser(e,t){return`${this.organization(e)}/users/${t}`}static organizationUserDeactivate(e,t){return`${this.organization(e)}/users/${t}/deactivate`}static organizationUserActivate(e,t){return`${this.organization(e)}/users/${t}/activate`}static invitations(e){return`${this.organization(e)}/invitations`}static invitation(e,t){return`${this.invitations(e)}/${t}`}static findInvitation(){return`${this.organizations()}/find-invitation`}static declineInvitation(e,t){return`${this.invitation(e,t)}/decline`}static resendInvitation(e,t){return`${this.invitation(e,t)}/resend`}static authGoogle(){return"/auth/google"}static authLogout(){return"/auth/logout"}static usersMe(){return"/v1/users/me"}static usersMeTokens(){return`${o.usersMe()}/tokens`}static usersMeToken(e){return`${o.usersMeTokens()}/${e}`}static dataCatalog(){return"/v1/datacatalog"}static dataCatalogStatus(e){return`${o.dataCatalog()}/status/${e}`}static dataCatalogEntry(e){return`${o.dataCatalog()}/${e}`}static dataCatalogEntryVersions(e){return`${o.dataCatalogEntry(e)}/versions`}static dataCatalogDependencies(){return`${o.dataCatalog()}/dependencies`}static dataCatalogUpdates(){return`${o.dataCatalog()}/updates`}static dataCatalogVersion(e,t){return`${o.dataCatalogEntry(e)}/${t}`}static dataCatalogDeprecate(e){return`${o.dataCatalogEntry(e)}/deprecate`}static dataCatalogUnpublish(e){return`${o.dataCatalogEntry(e)}/unpublish`}static dataCatalogVersionDeprecate(e,t){return`${o.dataCatalogVersion(e,t)}/deprecate`}static dataCatalogVersionUnpublish(e,t){return`${o.dataCatalogVersion(e,t)}/unpublish`}static groups(e){return`/v1/orgs/${e}/groups`}static group(e,t){return`/v1/orgs/${e}/groups/${t}`}static groupUsers(e,t){return`/v1/orgs/${e}/groups/${t}/users`}static aiModifyDomain(e,t){return`${this.organization(e)}/ai/domains/${t}/modify/stream`}static aiModifyApi(e,t){return`${this.organization(e)}/ai/apis/${t}/modify/stream`}static aiSessions(e,t){return`${this.organization(e)}/ai/sessions/${t}`}static aiSession(e,t,r){return`${o.aiSessions(e,t)}/${r}`}static aiMessages(e,t){return`${this.organization(e)}/ai/messages/${t}`}static aiMessage(e,t,r){return`${o.aiMessages(e,t)}/${r}`}static orgSlugGenerate(){return"/v1/orgs/slugs/generate"}static orgSlugValidate(){return"/v1/orgs/slugs/validate"}static deployments(e){return`/v1/orgs/${e}/deployments`}static deploymentsApis(e){return`${o.deployments(e)}/apis`}static deployment(e,t){return`${o.deployments(e)}/${t}`}static deploymentsForApi(e,t){return`${o.deploymentsApis(e)}/${t}`}static deploymentsApisByEnvLatest(e,t){return`${o.deploymentsApis(e)}/${t}/environments/latest`}static rollback(e,t){return`${o.deployment(e,t)}/rollback`}static deploymentsApiRuntimeUsersUpdate(e,t){return`${o.deploymentsApis(e)}/${t}/runtime/users/update`}static job(e,t){return`/v1/orgs/${e}/jobs/${t}`}};var Hr=class extends Z{oauthRedirect(e,t={}){let{redirect:r,token:i,type:s="redirect"}=t,a=new URL(this.sdk.baseUri);if(!["google","github","linkedin"].includes(e))throw new Error(`Invalid provider: ${e}`);let n=new URL(`/auth/${e}/redirect`,a);return r&&n.searchParams.set("r",r),i&&n.searchParams.set("token",i),s==="redirect"?(window.location.href=n.toString(),null):window.open(n.toString(),"_blank")}async logout(e={}){let{token:t,retry:r=!0}=e,i=this.sdk.getUrl(A.authLogout()),s=await this.sdk.http.post(i.toString(),{token:t,retry:r});this.inspectCommonStatusCodes(s);let a="Unable to log out. ";if(s.status!==204)throw this.logInvalidResponse(s),this.createApiError(`${a}${E}${s.status}`,s.body)}};import{customAlphabet as Vo}from"nanoid";var M=Vo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_",21);var He="Core#Permission",Ge=["reader","commenter","writer","owner"],kt=class o{kind=He;key="";type="user";granteeId="";role="reader";displayName;expirationTime;addingUser="";itemId="";depth=0;sourceRule="direct_user_grant";static fromUserRole(e,t,r,i){let s={key:M(),kind:He,itemId:t,granteeId:r,role:e,type:"user",addingUser:i,depth:0,sourceRule:"direct_user_grant"};return new o(s)}static fromGroupRole(e,t,r,i){let s={key:M(),kind:He,itemId:t,granteeId:r,role:e,type:"group",addingUser:i,depth:0,sourceRule:"direct_user_grant"};return new o(s)}static fromOrganizationRole(e,t,r,i){let s={key:M(),kind:He,itemId:t,granteeId:r,role:e,type:"organization",addingUser:i,depth:0,sourceRule:"direct_user_grant"};return new o(s)}static fromValues(e){return new o({...e,key:M(),kind:He})}constructor(e){let t;typeof e=="string"?t=JSON.parse(e):typeof e=="object"?t=e:t={kind:He,key:M(),granteeId:"",itemId:"",role:"reader",type:"user",addingUser:"",depth:0,sourceRule:"direct_user_grant"},this.new(t)}new(e){if(!o.isPermission(e))throw new Error("Not a permission.");let{key:t=M(),granteeId:r,role:i,type:s,displayName:a,expirationTime:n,addingUser:l,itemId:c,depth:p,sourceRule:u}=e;this.kind=He,this.key=t,this.granteeId=r,this.itemId=c,this.role=i,this.type=s,this.addingUser=l,this.depth=p||0,this.sourceRule=u||"direct_user_grant",a?this.displayName=a:this.displayName=void 0,typeof n=="number"?this.expirationTime=n:this.expirationTime=void 0}static isPermission(e){return!(!e||e.kind!==He)}static hasRole(e,t){if(!t)return!1;let r=Ge.indexOf(t),i=Ge.indexOf(e);return r>=i}static isHigherRole(e,t){let r=Ge.indexOf(e),i=Ge.indexOf(t);return r>i}hasRole(e){return o.hasRole(e,this.role)}static hasRoleIn(e,t){if(!t||!t.length)return!1;let r=[...t].sort((l,c)=>l.depth-c.depth),i=r[0].depth,s=r.filter(l=>l.depth===i),a,n=s.filter(l=>l.type==="user");if(n.length)a=n.sort((l,c)=>Ge.indexOf(c.role)-Ge.indexOf(l.role))[0];else{let l=s.filter(c=>c.type==="group");if(l.length)a=l.sort((c,p)=>Ge.indexOf(p.role)-Ge.indexOf(c.role))[0];else{let c=s.filter(p=>p.type==="organization");c.length&&(a=c.sort((p,u)=>Ge.indexOf(u.role)-Ge.indexOf(p.role))[0])}}return a?o.hasRole(e,a.role):!1}toJSON(){let e={kind:He,key:this.key,role:this.role,type:this.type,addingUser:this.addingUser,granteeId:this.granteeId,itemId:this.itemId,depth:this.depth,sourceRule:this.sourceRule};return this.displayName&&(e.displayName=this.displayName),this.expirationTime&&(e.expirationTime=this.expirationTime),e}};var wt="Core#Thing",Ce="Core#Folder";var gr="Core#User",vt="Data#DomainFile",Re="Data#Domain",ge="Domain#Namespace",he="Domain#Model",W="Domain#Entity",fe="Domain#Association",oe="Domain#Property",ct="Core#DataCatalog",dt="Core#DataCatalogVersion";var Gt="Core#Deployment",Ae="Core#ApiModel",_t="Core#ExposedEntity",va="Core#ApiFile";var yr="Core#AiSession",us="Core#AiMessage",hs="Core#Job";var Q=class o{kind=wt;name;displayName;description;version;static fromName(e){return new o({name:e,kind:wt})}static fromJSON(e={},t={}){let r=new o,{name:i,displayName:s,description:a,version:n}=e||{};return typeof i=="string"?r.name=i:typeof t.name=="string"&&(r.name=t.name),typeof s=="string"?r.displayName=s:typeof t.displayName=="string"&&(r.displayName=t.displayName),a?r.description=a:typeof t.description=="string"&&(r.description=t.description),n?r.version=n:typeof t.version=="string"&&(r.version=t.version),r}constructor(e){let t;typeof e=="string"?t=JSON.parse(e):typeof e=="object"?t=e:t={kind:wt},this.new(t)}new(e){if(!o.isThing(e))throw new Error("Not a thing.");let{description:t,name:r,version:i,displayName:s}=e;this.kind=wt,this.name=r,this.displayName=s,this.description=t,this.version=i}static validate(e,t={}){let{strict:r}=t;return e&&typeof e=="object"?!(r&&e.kind!==wt):!1}static isThing(e){return!!(e&&e.kind===wt)}toJSON(){let e={kind:wt};return typeof this.name=="string"&&(e.name=this.name),typeof this.displayName=="string"&&(e.displayName=this.displayName),this.description&&(e.description=this.description),this.version&&(e.version=this.version),e}getLabel(e){return this.displayName||this.name||e||"Unnamed object"}};var ms=Symbol("parents"),Wr=Symbol("deleted"),Xr=Symbol("deletedInfo"),Yr=Symbol("lastModified"),fs=Symbol("capabilities"),gs=Symbol("permissions"),ys=Symbol("permissionIds"),bs=Symbol("shortcutTarget"),br=class{kind="";key="";info=Q.fromName("");iconColor;get isShortcut(){return!!this.shortcutTarget}[bs];get shortcutTarget(){return this[bs]}set shortcutTarget(e){this[bs]=e}static createSchema(e={}){let{key:t=M(),kind:r,iconColor:i,shortcutTarget:s}=e,a={key:t,kind:r||"",info:Q.fromJSON(e.info,{name:"Unnamed file"}).toJSON()};return i&&(a.iconColor=i),s&&(a.isShortcut=!0,a.shortcutTarget=s),a}constructor(e){this.kind=e.kind,this.key=e.key,this.info=new Q(e.info),e.iconColor&&(this.iconColor=e.iconColor),e.shortcutTarget&&(this.shortcutTarget=e.shortcutTarget)}toJSON(){let e={key:this.key,kind:this.kind,info:this.info.toJSON()};return this.iconColor&&(e.iconColor=this.iconColor),this.shortcutTarget&&(e.isShortcut=!0,e.shortcutTarget=this.shortcutTarget),e}static createFileCapabilities(e,t){let r=kt.hasRole("commenter",t),i=kt.hasRole("owner",t),s=kt.hasRole("reader",t),a=kt.hasRole("writer",t),n=e.kind===Ce;return{canReadMedia:!n&&s,canListChildren:n&&s,canComment:!n&&r,canEditMedia:!n&&a,canEditMeta:a,canReadRevisions:a,canAddChildren:n&&a,canDelete:i,canTrash:i,canUntrash:i,canShare:a,canMove:a}}createFileCapabilities(e){return pt.createFileCapabilities(this,e)}static updateByMeMeta(e,t){e.deletedInfo&&(e.deletedInfo.byMe=e.deletedInfo.user===t),e.lastModified&&(e.lastModified.byMe=e.lastModified.user===t)}static setLastModified(e,t){if(!e)throw new Error("The file is required.");if(!t)throw new Error("The user is required.");if(t.kind!==gr)throw new Error('Invalid value for the user when setting "lastModified".');return e.lastModified={byMe:!1,time:Date.now(),user:t.key,name:t.name},e}static setDeleted(e,t){if(!e)throw new Error("The file is required.");if(!t)throw new Error("The user is required.");if(t.kind!==gr)throw new Error('Invalid value for the user when setting "deletedInfo".');return e.deleted=!0,e.deletedInfo={byMe:!1,time:Date.now(),user:t.key,name:t.name},e}},pt=class o extends br{[ms]=[];get parents(){return this[ms]}[ys]=[];get permissionIds(){return this[ys]}[Wr];get deleted(){return this[Wr]||!1}[Xr];get deletedInfo(){return this[Xr]}[Yr]={user:"",time:0,byMe:!1};get lastModified(){return this[Yr]}labels;[fs];get capabilities(){return this[fs]}[gs]=[];get permissions(){return this[gs]}static createSchema(e={}){let t=br.createSchema(e);return Array.isArray(e.parents)?t.parents=[...e.parents]:t.parents=[],Array.isArray(e.permissionIds)?t.permissionIds=[...e.permissionIds]:t.permissionIds=[],Array.isArray(e.permissions)?t.permissions=e.permissions.map(r=>({...r})):t.permissions=[],e.capabilities&&(t.capabilities={...e.capabilities}),e.lastModified?t.lastModified={...e.lastModified}:t.lastModified={user:"",time:0,byMe:!1},typeof e.deleted=="boolean"&&(t.deleted=e.deleted,t.deletedInfo=e.deletedInfo?{...e.deletedInfo}:void 0),Array.isArray(e.labels)&&(t.labels=[...e.labels]),typeof e.shortcutTarget=="string"&&(t.shortcutTarget=e.shortcutTarget),t}constructor(e){let t=o.createSchema(e);super(t),this[ms]=[...t.parents],this[ys]=[...t.permissionIds],this[gs]=t.permissions.map(r=>({...r})),this[fs]=t.capabilities?{...t.capabilities}:void 0,this[Yr]=Object.freeze({...t.lastModified}),typeof t.deleted=="boolean"&&(this[Wr]=t.deleted,this[Xr]=t.deletedInfo?Object.freeze({...t.deletedInfo}):void 0),Array.isArray(t.labels)&&(this.labels=[...t.labels])}toJSON(){let e={...super.toJSON(),parents:[...this.parents],permissionIds:[...this.permissionIds],lastModified:{...this.lastModified},permissions:[...this.permissions]};return this.deleted&&(e.deleted=this.deleted,e.deletedInfo={...this.deletedInfo}),Array.isArray(this.labels)&&(e.labels=[...this.labels]),e}static fromName(e,t){return new o({kind:t,info:{name:e}})}shortcutTo(e){return this.shortcutTarget=e,this}setLastModified(e){if(!e)throw new Error("The user is required.");if(e.kind!==gr)throw new Error('Invalid value for the user when setting "lastModified".');this[Yr]={byMe:!1,time:Date.now(),user:e.key,name:e.name}}addLabel(e){if(typeof e!="string")throw new Error("The label must be a string.");if(!e.trim())throw new Error("The label is required.");Array.isArray(this.labels)||(this.labels=[]),!this.labels.includes(e)&&this.labels.push(e)}setDeleted(e){if(!e)throw new Error("The user is required.");if(e.kind!==gr)throw new Error('Invalid value for the user when setting "deletedInfo".');this[Wr]=!0,this[Xr]={byMe:!1,time:Date.now(),user:e.key,name:e.name}}isFile(){return this.kind!==Ce}isFolder(){return this.kind===Ce}};var kr=class extends pt{kind=Ce;static fromName(e){return super.fromName(e,Ce)}constructor(e){let t=pt.createSchema(e);t.kind=Ce,super(t)}static isFolder(e){return!(!e||e.kind!==Ce)}toJSON(){return{...super.toJSON(),kind:Ce}}};var Zr=class extends Z{async list(e,t={},r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a={...t},n=this.sdk.getUrl(A.files(e));this.sdk.appendListOptions(n,a);let l=await this.sdk.http.get(n.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(l);let c="Unable to list files. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async search(e,t={},r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.filesSearch(e)),{searchParams:n}=a;if(t.cursor&&n.set("cursor",t.cursor),typeof t.limit=="number"&&n.set("limit",String(t.limit)),t.parent&&n.set("parent",t.parent),t.kind)for(let c of t.kind)n.append("kind",c);if(t.query)for(let c of t.query)n.append("query",c);let l=await this.sdk.http.get(a.toString(),{token:i,retry:s});return this.processListResponse(l,"Unable to search files. ")}async create(e,t,r,i={},s={}){let a=await this.createMeta(e,r,i,s);return await this.createMedia(t,r,a.key,i,s),a}async createMeta(e,t,r={},i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.files(t));r.parent&&n.searchParams.set("parent",r.parent);let l=JSON.stringify(e),c=await this.sdk.http.post(n.toString(),{token:s,body:l,retry:a,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(c);let p="Unable to create a file. ";if(c.status!==201)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}async createMedia(e,t,r,i={},s={}){let{token:a=this.sdk.token,retry:n=!0}=s,l=A.fileMedia(t,r),c=this.sdk.getUrl(l),p=i.mime||"application/json",u;p.includes("json")?u=JSON.stringify(e):u=String(e);let h=await this.sdk.http.put(c.toString(),{token:a,body:u,retry:n,headers:{"content-type":p}});this.inspectCommonStatusCodes(h);let m="Unable to create a file. ";if(h.status!==200)throw this.logInvalidResponse(h),this.createApiError(`${m}${E}${h.status}`,h.body)}async createFolder(e,t,r={},i={}){let s=kr.fromName(e),{token:a=this.sdk.token,retry:n=!0}=i,l=this.sdk.getUrl(A.files(t));r.parent&&l.searchParams.set("parent",r.parent);let c=JSON.stringify(s),p=await this.sdk.http.post(l.toString(),{token:a,body:c,retry:n,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(p);let u="Unable to create a file. ";if(p.status!==201)throw this.logInvalidResponse(p),this.createApiError(`${u}${E}${p.status}`,p.body);if(!p.body)throw new g(`${u}${R}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${D}`,{code:"E_INVALID_JSON",status:p.status})}if(!h.key)throw new g(`${u}${V}`,{code:"E_RESPONSE_UNKNOWN",status:p.status});return h}async read(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.file(e,t)),n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read a file. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async readMedia(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.fileMedia(e,t)),n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read a file media. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!c||typeof c!="object"||!("data"in c)||!("meta"in c))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});let{data:p,meta:u}=c;if(!u||typeof u!="object"||typeof u.version!="number"||typeof u.updated!="number"||isNaN(u.version)||isNaN(u.updated))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return{media:p,meta:u}}async readBulk(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.filesBatch(e)),n=JSON.stringify({ids:t}),l=await this.sdk.http.post(a.toString(),{token:i,body:n,retry:s});this.inspectCommonStatusCodes(l);let c="Unable to read files in bulk. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async patch(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=A.file(e,t),l=this.sdk.getUrl(n),c=JSON.stringify(r),p=await this.sdk.http.patch(l.toString(),{token:s,body:c,retry:a});this.inspectCommonStatusCodes(p);let u="Unable to patch a file. ";if(p.status!==200)throw this.logInvalidResponse(p),this.createApiError(`${u}${E}${p.status}`,p.body);if(!p.body)throw new g(`${u}${R}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${D}`,{code:"E_INVALID_JSON",status:p.status})}if(!h.kind)throw new g(`${u}${V}`,{code:"E_RESPONSE_UNKNOWN",status:p.status});return h}async patchMedia(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=A.fileMedia(e,t),l=this.sdk.getUrl(n),c=JSON.stringify(r),p=await this.sdk.http.patch(l.toString(),{token:s,body:c,retry:a});this.inspectCommonStatusCodes(p);let u="Unable to patch a file contents. ";if(p.status!==200)throw this.logInvalidResponse(p),this.createApiError(`${u}${E}${p.status}`,p.body);if(!p.body)throw new g(`${u}${R}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${D}`,{code:"E_INVALID_JSON",status:p.status})}return h}async delete(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.file(e,t)),n=await this.sdk.http.delete(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to trash a file. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body)}async deleteBulk(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.files(e)),n=await this.sdk.http.delete(a.toString(),{token:i,body:JSON.stringify({ids:t}),retry:s});this.inspectCommonStatusCodes(n);let l="Unable to trash files. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body)}async patchUsers(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.filesAccess(e,t)),l=JSON.stringify(r),c=await this.sdk.http.patch(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to patch the file. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}async addUser(e,t,r,i,s,a){let n={op:"add",type:"user",value:i,id:r};typeof s=="number"&&(n.expirationTime=s);let l={patch:[n],id:M()};return this.patchUsers(e,t,l,a)}async removeUser(e,t,r,i){let a={patch:[{op:"remove",type:"user",id:r}],id:M()};return this.patchUsers(e,t,a,i)}async listUsers(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.fileUsers(e,t)),n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list users in the file. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async breadcrumbs(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.fileBreadcrumbs(e,t)),n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read breadcrumbs. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async rename(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.fileRename(e,t)),l=await this.sdk.http.put(n.toString(),{token:s,body:JSON.stringify({name:r}),retry:a});this.inspectCommonStatusCodes(l);let c="Unable to rename file. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}return p}};var Qr=class extends Z{async me(e={}){let{token:t=this.sdk.token,retry:r=!0}=e,i=this.sdk.getUrl(A.usersMe()),s=await this.sdk.http.get(i.toString(),{token:t,retry:r});this.inspectCommonStatusCodes(s);let a="Unable to read a user. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${E}${s.status}`,s.body);if(!s.body)throw new g(`${a}${R}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body).data}catch{throw new g(`${a}${D}`,{code:"E_INVALID_JSON",status:s.status})}if(!n.key)throw new g(`${a}${V}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}async listTokens(e={}){let{token:t=this.sdk.token,retry:r=!0}=e,i=this.sdk.getUrl(A.usersMeTokens()),s=await this.sdk.http.get(i.toString(),{token:t,retry:r});this.inspectCommonStatusCodes(s);let a="Unable to list tokens. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${E}${s.status}`,s.body);if(!s.body)throw new g(`${a}${R}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body).data}catch{throw new g(`${a}${D}`,{code:"E_INVALID_JSON",status:s.status})}return n}async createToken(e={},t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.usersMeTokens()),a=JSON.stringify(e),n=await this.sdk.http.post(s.toString(),{token:r,body:a,retry:i,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(n);let l="Unable to create a token. ";if(n.status!==200&&n.status!==201)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}return c}async deleteToken(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.usersMeToken(e)),a=await this.sdk.http.delete(s.toString(),{token:r,retry:i});this.inspectCommonStatusCodes(a);let n="Unable to delete a token. ";if(a.status!==204)throw this.logInvalidResponse(a),this.createApiError(`${n}${E}${a.status}`,a.body)}};var ei=class extends Z{async list(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.shared(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list shared files. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}};var ti=class extends Z{async list(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.fileRevisions(e,t));this.sdk.appendListOptions(n,r);let l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to list revisions for a file. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}};var ri=class extends Z{async list(e,t={},r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.trash(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list trash. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async delete(e,t,r={}){let i=A.trashBatchDelete(e),s=this.sdk.getUrl(i),{token:a=this.sdk.token,retry:n=!0}=r,l=await this.sdk.http.delete(s.toString(),{token:a,body:JSON.stringify({ids:t}),retry:n});this.inspectCommonStatusCodes(l);let c="Unable to delete trash. ";if(l.status!==204)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body)}async restore(e,t,r={}){let i=this.sdk.getUrl(A.trashBatchRestore(e)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.post(i.toString(),{token:s,body:JSON.stringify({ids:t}),retry:a});this.inspectCommonStatusCodes(n);let l="Unable to restore from trash. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body)}async empty(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.trashEmpty(e)),a=await this.sdk.http.delete(s.toString(),{token:r,retry:i});this.inspectCommonStatusCodes(a);let n="Unable to empty trash. ";if(a.status!==204)throw this.logInvalidResponse(a),this.createApiError(`${n}${E}${a.status}`,a.body)}};var ii=class extends Z{async list(e={}){let{token:t=this.sdk.token,retry:r=!0}=e,i=this.sdk.getUrl(A.organizations()),s=await this.sdk.http.get(i.toString(),{token:t,retry:r});this.inspectCommonStatusCodes(s);let a="Unable to list your organizations. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${E}${s.status}`,s.body);if(!s.body)throw new g(`${a}${R}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body)}catch{throw new g(`${a}${D}`,{code:"E_INVALID_JSON",status:s.status})}if(!Array.isArray(n.data))throw new g(`${a}${V}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}async create(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizations()),n={name:e,slug:t},l=await this.sdk.http.post(a.toString(),{body:JSON.stringify(n),token:i,headers:{"Content-Type":"application/json"},retry:s});this.inspectCommonStatusCodes(l);let c="Unable to create an organization. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.kind)throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}invitations={list:async(e,t={})=>{let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.invitations(e)),a=await this.sdk.http.get(s.toString(),{token:r,retry:i});this.inspectCommonStatusCodes(a);let n="Unable to list organization invitations. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${E}${a.status}`,a.body);if(!a.body)throw new g(`${n}${R}`,{code:"E_RESPONSE_NO_VALUE",status:a.status});let l;try{l=JSON.parse(a.body)}catch{throw new g(`${n}${D}`,{code:"E_INVALID_JSON",status:a.status})}if(!Array.isArray(l.data))throw new g(`${n}${V}`,{code:"E_RESPONSE_UNKNOWN",status:a.status});return l},create:async(e,t,r,i,s={})=>{let{token:a=this.sdk.token,retry:n=!0}=s,l=this.sdk.getUrl(A.invitations(e)),c={email:t,name:i,grant_type:r},p=await this.sdk.http.post(l.toString(),{body:JSON.stringify(c),token:a,headers:{"Content-Type":"application/json"},retry:n});this.inspectCommonStatusCodes(p);let u="Unable to create an invitation. ";if(p.status!==200)throw this.logInvalidResponse(p),this.createApiError(`${u}${E}${p.status}`,p.body);if(!p.body)throw new g(`${u}${R}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${D}`,{code:"E_INVALID_JSON",status:p.status})}if(!h.kind)throw new g(`${u}${V}`,{code:"E_RESPONSE_UNKNOWN",status:p.status});return h},findByToken:async(e,t={})=>{let r=this.sdk.getUrl(A.findInvitation());r.searchParams.append("token",e);let{retry:i=!0,token:s}=t,a=await this.sdk.http.get(r.toString(),{token:s,retry:i});this.inspectCommonStatusCodes(a);let n="Unable to find invitation by token. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${E}${a.status}`,a.body);if(!a.body)throw new g(`${n}${R}`,{code:"E_RESPONSE_NO_VALUE",status:a.status});let l;try{l=JSON.parse(a.body).data}catch{throw new g(`${n}${D}`,{code:"E_INVALID_JSON",status:a.status})}if(!l.kind)throw new g(`${n}${V}`,{code:"E_RESPONSE_UNKNOWN",status:a.status});return l},decline:async(e,t,r={})=>{let i=this.sdk.getUrl(A.declineInvitation(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.post(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to decline invitation. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},delete:async(e,t,r={})=>{let i=this.sdk.getUrl(A.invitation(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.delete(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to delete invitation. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},patch:async(e,t,r,i={})=>{let s=this.sdk.getUrl(A.invitation(e,t)),{token:a=this.sdk.token,retry:n=!0}=i,l=await this.sdk.http.patch(s.toString(),{body:JSON.stringify(r),token:a,headers:{"Content-Type":"application/json"},retry:n});this.inspectCommonStatusCodes(l);let c="Unable to update invitation. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.kind)throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},resend:async(e,t,r={})=>{let i=this.sdk.getUrl(A.resendInvitation(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.put(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to resend invitation. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}};users={list:async(e,t,r={})=>{let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizationUsers(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list projects. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},read:async(e,t,r={})=>{let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizationUser(e,t)),n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read the user info. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}return c},readBatch:async(e,t,r={})=>{let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizationUserBatch(e)),n={ids:t},l=await this.sdk.http.post(a.toString(),{body:JSON.stringify(n),token:i,retry:s});this.inspectCommonStatusCodes(l);let c="Unable to read the user batch info. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},activate:async(e,t,r={})=>{let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizationUserActivate(e,t)),n=await this.sdk.http.post(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to activate the user. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}return c},deactivate:async(e,t,r={})=>{let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizationUserDeactivate(e,t)),n=await this.sdk.http.post(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to deactivate the user. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}return c},delete:async(e,t,r={})=>{let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.organizationUser(e,t)),n=await this.sdk.http.delete(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to delete the user. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body)}};slugs={generate:async(e,t={})=>{let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.orgSlugGenerate()).toString(),a={name:e},n=await this.sdk.http.post(s,{body:JSON.stringify(a),token:r,retry:i});this.inspectCommonStatusCodes(n);let l="Unable to generate the slug. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.slug)throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c.slug},validate:async(e,t={})=>{let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.orgSlugValidate()).toString(),a={slug:e},n=await this.sdk.http.post(s,{body:JSON.stringify(a),token:r,retry:i});this.inspectCommonStatusCodes(n);let l="Unable to validate the slug. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);if(!n.body)throw new g(`${l}${R}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${D}`,{code:"E_INVALID_JSON",status:n.status})}if(typeof c.valid!="boolean")throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}}};var si=class extends Z{async list(e={},t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s={...e},a=this.sdk.getUrl(A.dataCatalog());this.sdk.appendListOptions(a,s),s.scope&&a.searchParams.set("scope",s.scope);let n=await this.sdk.http.get(a.toString(),{token:r,retry:i});return this.processListResponse(n,"Unable to list data domains. ")}async listVersions(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.dataCatalogEntryVersions(e)),a=await this.sdk.http.get(s.toString(),{token:r,retry:i});return this.processListResponse(a,"Unable to list data domain versions. ")}async publish(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.dataCatalog()),a=JSON.stringify(e),n=await this.sdk.http.post(s.toString(),{token:r,body:a,retry:i,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(n);let l="Unable to publish data domain. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,ct,c.kind),c}async read(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.dataCatalogEntry(e)),a=await this.sdk.http.get(s.toString(),{token:r,retry:i});this.inspectCommonStatusCodes(a);let n="Unable to read data domain. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${E}${a.status}`,a.body);let l=this.readResponseJSON(a,n).data;return this.assertObjectKind(n,ct,l.kind),l}async deprecate(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.dataCatalogDeprecate(e)),n=JSON.stringify({reason:t}),l=await this.sdk.http.put(a.toString(),{token:i,body:n,retry:s,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(l);let c="Unable to deprecate data domain. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);let p=this.readResponseJSON(l,c).data;return this.assertObjectKind(c,ct,p.kind),p}async unpublish(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.dataCatalogUnpublish(e)),a=await this.sdk.http.put(s.toString(),{token:r,retry:i});this.inspectCommonStatusCodes(a);let n="Unable to unpublish data domain. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${E}${a.status}`,a.body);let l=this.readResponseJSON(a,n).data;return this.assertObjectKind(n,ct,l.kind),l}async publishVersion(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.dataCatalogEntryVersions(e)),n=JSON.stringify(t),l=await this.sdk.http.post(a.toString(),{token:i,body:n,retry:s,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(l);let c="Unable to publish data domain version. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);let p=this.readResponseJSON(l,c).data;return this.assertObjectKind(c,dt,p.kind),p}async readVersion(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.dataCatalogVersion(e,t)),n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read data domain version. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,dt,c.kind),c}async listDependencies(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=this.sdk.getUrl(A.dataCatalogDependencies()),a=JSON.stringify({items:e}),n=await this.sdk.http.post(s.toString(),{token:r,body:a,retry:i,headers:{"content-type":"application/json"}});return this.processListResponse(n,"Unable to list data domain dependencies. ")}async checkUpdates(e,t={}){let{token:r=this.sdk.token,retry:i=!0}=t,s=e.map(c=>({fid:c.key,version:c.version})),a=this.sdk.getUrl(A.dataCatalogUpdates()),n=JSON.stringify({dependencies:s}),l=await this.sdk.http.post(a.toString(),{token:r,body:n,retry:i,headers:{"content-type":"application/json"}});return this.processListResponse(l,"Unable to check for data domain updates. ")}async deprecateVersion(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.dataCatalogVersionDeprecate(e,t)),l=JSON.stringify({reason:r}),c=await this.sdk.http.put(n.toString(),{token:s,body:l,retry:a,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(c);let p="Unable to deprecate data domain version. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);let u=this.readResponseJSON(c,p).data;return this.assertObjectKind(p,dt,u.kind),u}async unpublishVersion(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.dataCatalogVersionUnpublish(e,t)),n=await this.sdk.http.put(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to unpublish data domain version. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,dt,c.kind),c}async checkPublicationStatus(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.dataCatalogStatus(e));t&&a.searchParams.set("oid",t);let n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to check data domain publication status. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,ct,c.kind),c}};var ai=class extends Z{async create(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.groups(e)),n=JSON.stringify(t),l=await this.sdk.http.post(a.toString(),{token:i,body:n,headers:{"content-type":"application/json"},retry:s});this.inspectCommonStatusCodes(l);let c="Unable to create a group. ";if(l.status!==201)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.key)throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async list(e,t={},r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.groups(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to create a group. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(l+E+n.status,n.body);if(!n.body)throw new g(l+R,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(l+D,{code:"E_INVALID_JSON",status:n.status})}return c}async update(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.group(e,t.key)),n=JSON.stringify(t),l=await this.sdk.http.put(a.toString(),{token:i,body:n,headers:{"content-type":"application/json"},retry:s});this.inspectCommonStatusCodes(l);let c="Unable to update a group. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.key)throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async delete(e,t,r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.group(e,t)),n=await this.sdk.http.delete(a.toString(),{token:i,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to delete a group. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body)}async addUsers(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.groupUsers(e,t)),l=JSON.stringify({ids:r}),c=await this.sdk.http.post(n.toString(),{token:s,body:l,headers:{"content-type":"application/json"},retry:a});this.inspectCommonStatusCodes(c);let p="Unable to add users to a group. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}async removeUsers(e,t,r,i={}){let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.groupUsers(e,t)),l=JSON.stringify({ids:r}),c=await this.sdk.http.delete(n.toString(),{token:s,body:l,headers:{"content-type":"application/json"},retry:a});this.inspectCommonStatusCodes(c);let p="Unable to remove users from a group. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}};var ni=class extends Z{async*modifyDomain(e,t,r,i,s={}){let{token:a=this.sdk.token,signal:n}=s,l=this.sdk.getUrl(A.aiModifyDomain(e,t)),c=JSON.stringify({goal:r,sid:i}),p={method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream",authorization:`Bearer ${a}`},redirect:"follow",credentials:"include",body:c,signal:n},u=await fetch(l,p);if(!u.ok){let k=await u.text();throw new g(`Failed to modify domain: ${u.status} ${k}`)}let h=u.body?.getReader();if(!h)throw new g("Failed to get reader from response");let m=new TextDecoder,f="";for(;;){let{done:k,value:b}=await h.read();if(k)return;f+=m.decode(b,{stream:!0});let y;for(;(y=f.indexOf(`
|
|
14
|
+
`),a=`${i}/issues/new?title=${r}&body=${s}`;console.error(`
|
|
15
|
+
Please report this bug: ${a}`)}}}list(e,t,i={}){if(this.format==="json")console.log(JSON.stringify(e,null,2));else{if(e.length===0){console.log("No records found.");return}console.log(Lo(e,t,i.headers))}}object(e){let t=e;if(this.format==="json")console.log(JSON.stringify(t,null,2));else for(let[i,r]of Object.entries(t)){let s=typeof r=="object"&&r!==null?JSON.stringify(r):String(r);console.log(`${Q.bold(i)}: ${s}`)}}};function Aa(o){let e=o.command("config").description("Manage CLI configuration settings");e.command("get <key>").description("Get a configuration value").action(t=>{let i=new H({format:P.resolved.format});_.debug(`[config:get] Retrieving configuration key '${t}'...`);let r=P.resolved;if(t in r){let s=r[t];_.debug(`[config:get] Key found. Value: ${t==="token"?"**********":s}`),P.resolved.format==="json"?i.object({[t]:s}):console.log(s)}else _.debug(`[config:get] Configuration key '${t}' not found.`),i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Configuration key '${t}' not found.`,detail:`Run \`apinow config set ${t} <value>\` to define it.`}),process.exit(1)}),e.command("set <key> <value>").description("Set a configuration value").action((t,i)=>{let r=new H({format:P.resolved.format});_.debug(`[config:set] Setting configuration key '${t}' to '${t==="token"?"**********":i}'...`);let s=["apiUrl","token","org"];s.includes(t)||(_.debug(`[config:set] Invalid configuration key '${t}' rejected.`),r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid configuration key '${t}'.`,detail:`Allowed keys: ${s.join(", ")}`}),process.exit(1)),P.writeProperty(t,i),_.debug("[config:set] Configuration property written successfully."),r.success(`Configuration '${t}' set to '${i}'.`)}),e.command("reset").description("Reset all configuration settings and remove stored files").action(()=>{let t=new H({format:P.resolved.format});_.debug("[config:reset] Resetting CLI configuration..."),P.reset(),_.debug("[config:reset] Configuration reset completed successfully."),t.success("Configuration has been reset successfully.")})}import{Argument as Xo}from"commander";import Yo from"node:http";import Zo from"open";import xa from"http";import Na from"https";function ki(o){return typeof o!="string"&&(o=String(o)),o.toLowerCase()}function Ea(o){return typeof o!="string"&&(o=String(o)),o}function*Ko(o){if(!o||o.trim()==="")return[];let e=o.split(/\n(?=[^ \t]+)/gim);for(let t=0,i=e.length;t<i;t++){let r=e[t].trim();if(r==="")continue;let s=r.startsWith("#");s&&(r=r.replace("#","").trim());let a=r.indexOf(":");if(a===-1)yield{name:r,value:"",enabled:!s};else{let n=r.substring(0,a),l=r.substring(a+1).trim();yield{name:n,value:l,enabled:!s}}}}var wi=class o{_map={};constructor(e){if(e instanceof o)e.forEach((t,i)=>this.append(i,t));else if(typeof e=="string")for(let t of Ko(e))this.append(t.name,t.value,t.enabled);else e&&Object.keys(e).forEach(t=>this.append(t,e[t]))}append(e,t,i=!0){if(Array.isArray(t)){t.forEach(a=>this.append(e,a));return}let r=ki(e);t=t?Ea(t):"";let s=this._map[r];if(s){let a=s.value;s.value=a?`${a},${t}`:t}else s={name:e,value:t,enabled:i};this._map[r]=s}delete(e){delete this._map[ki(e)]}get(e){if(e=ki(e),!!this.has(e)&&this._map[e].enabled)return this._map[e].value}has(e){let t=ki(e);return Object.prototype.hasOwnProperty.call(this._map,t)&&this._map[t].enabled}set(e,t,i=!0){let r=ki(e);this._map[r]={value:Ea(t),name:e,enabled:i}}forEach(e,t){Object.keys(this._map).forEach(r=>{let s=this._map[r];e.call(t,s.value,s.name,s.enabled,this)})}map(e,t){let i=Object.keys(this._map),r=[];for(let s of i){let a=this._map[s],n=e.call(t,a.value,a.name,a.enabled);r.push(n)}return r}toString(){return this._generateString()}toRawString(){return this._generateString(!0)}toJSON(){let e={};for(let[t,i]of this.entries())e[t]=i;return e}_generateString(e=!1){let t=[],i=Object.keys(this._map);for(let r of i){let s=this._map[r],a="";if(!s.enabled)if(e)a+="# ";else continue;a+=`${s.name}: `,s.value&&(a+=s.value),t.push(a)}return t.join(`
|
|
16
|
+
`)}*keys(){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield this._map[t].name)}*values(){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield this._map[t].value)}*entries(){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield[this._map[t].name,this._map[t].value])}*[Symbol.iterator](){let e=Object.keys(this._map);for(let t of e)this._map[t].enabled&&(yield[this._map[t].name,this._map[t].value])}};function gs(o,e){let t=o.toLowerCase();return t==="authorization"||t==="proxy-authorization"?e.toLowerCase().startsWith("bearer ")?"Bearer **********":"**********":t==="cookie"||t==="set-cookie"||t==="x-api-key"||t==="api-key"?"**********":e}function fs(o){if(o==null)return o;if(Array.isArray(o))return o.map(e=>fs(e));if(typeof o=="object"){let e={};for(let[t,i]of Object.entries(o)){let r=t.toLowerCase();r.includes("token")||r.includes("password")||r.includes("secret")||r.includes("key")?e[t]="**********":e[t]=fs(i)}return e}return o}function ys(o){if(!o)return o;try{let e=JSON.parse(o),t=fs(e);return JSON.stringify(t,null,2)}catch{return o}}var g=class extends Error{name;status;static fromRawException(e,t){let i=e,r={};if(i.code!==void 0&&(r.code=String(i.code)),i.status!==void 0){let n=Number(i.status);isNaN(n)||(r.status=n)}i.help!==void 0&&(r.help=String(i.help));let s=i.message!==void 0?String(i.message):t,a=new this(s,r);return i.name!==void 0&&(a.name=String(i.name)),a}constructor(e,t){super(e,t);let i=this.constructor;this.name=i.name,this.message=e??i.message??"",this.status=t?.status??i.status??500;let r=t?.code??i.code;r!==void 0&&(this.code=r);let s=t?.help??i.help;s!==void 0&&(this.help=s),Error.captureStackTrace(this,i)}setHelp(e){return this.help=e,this}setCode(e){return this.code=e,this}setStatus(e){return this.status=e,this}get[Symbol.toStringTag](){return this.constructor.name}toString(){return this.code?`${this.name} [${this.code}]: ${this.message}`:`${this.name}: ${this.message}`}toJSON(){let e={name:this.name,message:this.message};return this.status&&(e.status=this.status),this.code&&(e.code=this.code),this.help&&(e.help=this.help),e}};var V="Invalid JSON response.",U="The response has no value.",x="Invalid response status: ",F="Unknown response from the server.";var te=class{sdk;constructor(e){this.sdk=e}logInvalidResponse(e){if(!this.sdk.silent&&e.body)try{let t=JSON.parse(e.body);t.message&&console.warn(`[Store message]: ${t.message}`)}catch{}}inspectCommonStatusCodes(e){let{status:t,body:i}=e;if(t===404){let r=this.createApiError("Not found",i);throw r.status!==404&&r.setStatus(404),r.code!=="E_NOT_FOUND"&&r.setCode("E_NOT_FOUND"),r}if(t===403){let r=this.createApiError("You have no access to this resource",i);throw r.status!==403&&r.setStatus(403),r.code!=="E_FORBIDDEN"&&r.setCode("E_FORBIDDEN"),r}if(t===401){this.sdk.dispatchEvent(new Event("unauthorized"));let r=this.createApiError("Not authorized",i);throw r.status!==401&&r.setStatus(401),r.code!=="E_UNAUTHORIZED"&&r.setCode("E_UNAUTHORIZED"),r}}createApiError(e,t){if(!t)return new g(e);let i;try{i=JSON.parse(t)}catch{return new g(e)}return!i||typeof i!="object"||!i.message?new g(e):g.fromRawException(i,e)}async genericBatchDelete(e,t,i={}){let{token:r}=i,s=await this.sdk.http.post(e.toString(),{token:r,body:JSON.stringify(t)});this.inspectCommonStatusCodes(s);let a="Unable to delete in batch. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${x}${s.status}`,s.body);if(!s.body)throw new g(`${a}${U}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body)}catch{throw new g(`${a}${V}`,{code:"E_INVALID_JSON",status:s.status})}if(!Array.isArray(n.data))throw new g(`${a}${F}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}async genericDelete(e,t={}){let{token:i}=t,r=await this.sdk.http.delete(e.toString(),{token:i});this.inspectCommonStatusCodes(r);let s="Unable to delete the object. ";if(r.status!==204)throw this.logInvalidResponse(r),this.createApiError(`${s}${x}${r.status}`,r.body)}async genericList(e,t,i={}){let{token:r}=i;this.sdk.appendListOptions(e,t);let s=await this.sdk.http.get(e.toString(),{token:r});this.inspectCommonStatusCodes(s);let a="Unable to list revisions for a file. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${x}${s.status}`,s.body);if(!s.body)throw new g(`${a}${U}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body)}catch{throw new g(`${a}${V}`,{code:"E_INVALID_JSON",status:s.status})}if(!Array.isArray(n.data))throw new g(`${a}${F}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}readResponseBody(e,t){if(![200,202].includes(e.status))throw this.logInvalidResponse(e),this.createApiError(`${t}${x}${e.status}`,e.body);if(!e.body)throw new g(`${t}${U}`,{code:"E_RESPONSE_NO_VALUE",status:e.status});return e.body}readResponseJSON(e,t){let i=this.readResponseBody(e,t),r;try{r=JSON.parse(i)}catch{throw new g(`${t}${V}`,{code:"E_INVALID_JSON",status:e.status})}return r}processListResponse(e,t){this.inspectCommonStatusCodes(e);let i=this.readResponseJSON(e,t);if(!Array.isArray(i.data))throw new g(`${t}${F}`,{code:"E_RESPONSE_UNKNOWN",status:e.status});return i}assertObjectKind(e,t,i){if(t!==i)throw new g(`${e}${F}`,{code:"E_RESPONSE_UNKNOWN",status:500})}};var Vt=class extends Error{status;response;constructor(e,t){super(`HTTP Error: ${e}`),this.status=e,this.response=t}},Xi=class extends te{logRequest(e,t,i){if(!this.sdk.logger)return;let r=i?.headers||{},s={};for(let[c,p]of Object.entries(r))s[c]=gs(c,p);(i?.token||this.sdk.token)&&!s.authorization&&!s.Authorization&&(s.Authorization="Bearer **********");let n=i?.body,l=ys(n);this.sdk.logger.log("debug",`--> HTTP ${e} ${t}`),Object.keys(s).length>0&&this.sdk.logger.log("debug",`Headers: ${JSON.stringify(s,null,2)}`),l&&this.sdk.logger.log("debug",`Body: ${l}`)}logResponse(e,t,i){if(!this.sdk.logger)return;let r=i.headers?i.headers.toJSON():{},s={};for(let[n,l]of Object.entries(r))s[n]=gs(n,l);let a=ys(i.body);this.sdk.logger.log("debug",`<-- HTTP ${i.status} ${e} ${t}`),Object.keys(s).length>0&&this.sdk.logger.log("debug",`Headers: ${JSON.stringify(s,null,2)}`),a&&this.sdk.logger.log("debug",`Body: ${a}`)}logError(e,t,i){if(!this.sdk.logger)return;let r=i instanceof Error?i.message:String(i);this.sdk.logger.log("debug",`<-- HTTP ${e} ${t} Failed: ${r}`)}};function Fo(o,e=1e3){return globalThis.__MOCK_RETRY_DELAY_MS__!==void 0?globalThis.__MOCK_RETRY_DELAY_MS__:o<=0?e:e*Math.pow(2,o-1)}function Jo(o){let{status:e}=o;return!(typeof e=="number"&&e>=400&&e<500)}async function bs(o,e={}){let{retries:t=3,delayMs:i=Fo,shouldRetry:r=Jo}=e,s;for(let n=0;n<t;n++)try{return await o()}catch(l){if(s=l,!r(s)||n===t-1)throw s;let c=typeof i=="function"?i(n+1):i;c>0&&await new Promise(p=>setTimeout(p,c))}throw s||new Error("Retry operation failed without a specific error.")}var Yi=class extends Xi{async get(e,t={}){let i=async()=>{this.logRequest("GET",e,t);try{let r=await this._get(e,t);if(this.logResponse("GET",e,r),[301,302,308,307].includes(r.status)){let s=r.headers.get("location");if(!s)throw new Error('Expected redirection but no "location" header.');let a=new URL(s,e);return this.get(a.toString(),t)}if(t.retry&&r.status>=400)throw new Vt(r.status,r);return r}catch(r){throw this.logError("GET",e,r),r}};if(t.retry)try{let r=typeof t.retry=="object"?t.retry:{};return await bs(i,r)}catch(r){if(r instanceof Vt)return r.response;throw r}return i()}_get(e,t={}){return new Promise((i,r)=>{let{method:s="GET",headers:a={},token:n=this.sdk.token}=t,l={...a};n&&(l.authorization=`Bearer ${n}`);let u=(e.startsWith("https:")?Na:xa).request(e,{method:s,headers:l,rejectUnauthorized:!1});u.on("response",h=>{let m={status:h.statusCode,headers:new wi(h.headers),body:""};h.on("data",f=>{m.body+=f}),h.on("end",()=>i(m))}),u.on("error",h=>r(h)),u.end()})}async post(e,t={}){let i=t.method||"POST",r=async()=>{this.logRequest(i,e,t);let s=await new Promise((a,n)=>{let{headers:l={},token:c=this.sdk.token}=t,p={...l};c&&(p.authorization=`Bearer ${c}`),t.body&&!p["content-type"]&&!p["Content-Type"]&&(p["content-type"]="application/json");let m=(e.startsWith("https:")?Na:xa).request(e,{method:i,headers:p});m.on("response",f=>{let b={status:f.statusCode,headers:new wi(f.headers),body:""};f.on("data",k=>{b.body+=k}),f.on("end",()=>{this.logResponse(i,e,b),a(b)})}),m.on("error",f=>{this.logError(i,e,f),n(f)}),t.body&&m.write(t.body),m.end()});if(t.retry&&s.status>=400)throw new Vt(s.status,s);return s};if(t.retry)try{let s=typeof t.retry=="object"?t.retry:{};return await bs(r,s)}catch(s){if(s instanceof Vt)return s.response;throw s}return r()}patch(e,t={}){let i={...t,method:"PATCH"};return this.post(e,i)}put(e,t={}){let i={...t,method:"PUT"};return this.post(e,i)}delete(e,t={}){let i={...t,method:"DELETE"};return this.post(e,i)}};var A=class o{static folders(e){return`/v1/orgs/${e}/folders`}static files(e){return`/v1/orgs/${e}/files`}static filesSearch(e){return`${o.files(e)}/search`}static filesAccess(e,t){return`${o.file(e,t)}/access`}static filesBatch(e){return`${o.files(e)}/batch/read-meta`}static file(e,t){return`${o.files(e)}/${t}`}static fileMedia(e,t){return`${o.file(e,t)}/media`}static fileUsers(e,t){return`${o.file(e,t)}/users`}static fileRevisions(e,t){return`${o.file(e,t)}/revisions`}static fileBreadcrumbs(e,t){return`${o.file(e,t)}/breadcrumbs`}static fileRename(e,t){return`${o.file(e,t)}/rename`}static history(){return"/history"}static historyBatchCreate(){return"/history/batch/create"}static historyBatchDelete(){return"/history/batch/delete"}static historyItem(e){return`/history/${e}`}static historyClear(e,...t){return`/history/clear/${e}/${t.join("/")}`}static shared(e){return`/v1/orgs/${e}/shared`}static trash(e){return`/v1/orgs/${e}/trash`}static trashItem(e,t){return`${o.trash(e)}/${t}`}static trashRestore(e,t){return`${o.trashItem(e,t)}/restore`}static trashEmpty(e){return`${o.trash(e)}/empty`}static trashBatchRestore(e){return`${o.trash(e)}/restore`}static trashBatchDelete(e){return`${o.trash(e)}/delete`}static projectExecutions(){return"/project/execution"}static projectExecution(e){return`/project/execution/${e}`}static projectExecutionBulkDelete(){return"/project/execution/delete"}static projectExecutionClear(e){return`/project/execution/clear/${e}`}static organizations(){return"/v1/orgs"}static organization(e){return`/v1/orgs/${e}`}static organizationUsers(e){return`${this.organization(e)}/users`}static organizationUserBatch(e){return`${this.organization(e)}/users/batch/read`}static organizationUser(e,t){return`${this.organization(e)}/users/${t}`}static organizationUserDeactivate(e,t){return`${this.organization(e)}/users/${t}/deactivate`}static organizationUserActivate(e,t){return`${this.organization(e)}/users/${t}/activate`}static invitations(e){return`${this.organization(e)}/invitations`}static invitation(e,t){return`${this.invitations(e)}/${t}`}static findInvitation(){return`${this.organizations()}/find-invitation`}static declineInvitation(e,t){return`${this.invitation(e,t)}/decline`}static resendInvitation(e,t){return`${this.invitation(e,t)}/resend`}static authGoogle(){return"/auth/google"}static authLogout(){return"/auth/logout"}static usersMe(){return"/v1/users/me"}static usersMeTokens(){return`${o.usersMe()}/tokens`}static usersMeToken(e){return`${o.usersMeTokens()}/${e}`}static dataCatalog(){return"/v1/datacatalog"}static dataCatalogStatus(e){return`${o.dataCatalog()}/status/${e}`}static dataCatalogEntry(e){return`${o.dataCatalog()}/${e}`}static dataCatalogEntryVersions(e){return`${o.dataCatalogEntry(e)}/versions`}static dataCatalogDependencies(){return`${o.dataCatalog()}/dependencies`}static dataCatalogUpdates(){return`${o.dataCatalog()}/updates`}static dataCatalogVersion(e,t){return`${o.dataCatalogEntry(e)}/${t}`}static dataCatalogDeprecate(e){return`${o.dataCatalogEntry(e)}/deprecate`}static dataCatalogUnpublish(e){return`${o.dataCatalogEntry(e)}/unpublish`}static dataCatalogVersionDeprecate(e,t){return`${o.dataCatalogVersion(e,t)}/deprecate`}static dataCatalogVersionUnpublish(e,t){return`${o.dataCatalogVersion(e,t)}/unpublish`}static dataCatalogUsage(e){return`${o.dataCatalogEntry(e)}/apis`}static dataCatalogVersionUsage(e,t){return`${o.dataCatalogVersion(e,t)}/apis`}static groups(e){return`/v1/orgs/${e}/groups`}static group(e,t){return`/v1/orgs/${e}/groups/${t}`}static groupUsers(e,t){return`/v1/orgs/${e}/groups/${t}/users`}static aiModifyDomain(e,t){return`${this.organization(e)}/ai/domains/${t}/modify/stream`}static aiModifyApi(e,t){return`${this.organization(e)}/ai/apis/${t}/modify/stream`}static aiSessions(e,t){return`${this.organization(e)}/ai/sessions/${t}`}static aiSession(e,t,i){return`${o.aiSessions(e,t)}/${i}`}static aiMessages(e,t){return`${this.organization(e)}/ai/messages/${t}`}static aiMessage(e,t,i){return`${o.aiMessages(e,t)}/${i}`}static orgSlugGenerate(){return"/v1/orgs/slugs/generate"}static orgSlugValidate(){return"/v1/orgs/slugs/validate"}static deployments(e){return`/v1/orgs/${e}/deployments`}static deploymentsApis(e){return`${o.deployments(e)}/apis`}static deployment(e,t){return`${o.deployments(e)}/${t}`}static deploymentsForApi(e,t){return`${o.deploymentsApis(e)}/${t}`}static deploymentsApisByEnvLatest(e,t){return`${o.deploymentsApis(e)}/${t}/environments/latest`}static rollback(e,t){return`${o.deployment(e,t)}/rollback`}static deploymentsApiRuntimeUsersUpdate(e,t){return`${o.deploymentsApis(e)}/${t}/runtime/users/update`}static job(e,t){return`/v1/orgs/${e}/jobs/${t}`}};var Zi=class extends te{oauthRedirect(e,t={}){let{redirect:i,token:r,type:s="redirect"}=t,a=new URL(this.sdk.baseUri);if(!["google","github","linkedin"].includes(e))throw new Error(`Invalid provider: ${e}`);let n=new URL(`/auth/${e}/redirect`,a);return i&&n.searchParams.set("r",i),r&&n.searchParams.set("token",r),s==="redirect"?(window.location.href=n.toString(),null):window.open(n.toString(),"_blank")}async logout(e={}){let{token:t,retry:i=!0}=e,r=this.sdk.getUrl(A.authLogout()),s=await this.sdk.http.post(r.toString(),{token:t,retry:i});this.inspectCommonStatusCodes(s);let a="Unable to log out. ";if(s.status!==204)throw this.logInvalidResponse(s),this.createApiError(`${a}${x}${s.status}`,s.body)}};import{customAlphabet as qo}from"nanoid";var q=qo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_",21);var Qe="Core#Permission",Ze=["reader","commenter","writer","owner"],St=class o{kind=Qe;key="";type="user";granteeId="";role="reader";displayName;expirationTime;addingUser="";itemId="";depth=0;sourceRule="direct_user_grant";static fromUserRole(e,t,i,r){let s={key:q(),kind:Qe,itemId:t,granteeId:i,role:e,type:"user",addingUser:r,depth:0,sourceRule:"direct_user_grant"};return new o(s)}static fromGroupRole(e,t,i,r){let s={key:q(),kind:Qe,itemId:t,granteeId:i,role:e,type:"group",addingUser:r,depth:0,sourceRule:"direct_user_grant"};return new o(s)}static fromOrganizationRole(e,t,i,r){let s={key:q(),kind:Qe,itemId:t,granteeId:i,role:e,type:"organization",addingUser:r,depth:0,sourceRule:"direct_user_grant"};return new o(s)}static fromValues(e){return new o({...e,key:q(),kind:Qe})}constructor(e){let t;typeof e=="string"?t=JSON.parse(e):typeof e=="object"?t=e:t={kind:Qe,key:q(),granteeId:"",itemId:"",role:"reader",type:"user",addingUser:"",depth:0,sourceRule:"direct_user_grant"},this.new(t)}new(e){if(!o.isPermission(e))throw new Error("Not a permission.");let{key:t=q(),granteeId:i,role:r,type:s,displayName:a,expirationTime:n,addingUser:l,itemId:c,depth:p,sourceRule:u}=e;this.kind=Qe,this.key=t,this.granteeId=i,this.itemId=c,this.role=r,this.type=s,this.addingUser=l,this.depth=p||0,this.sourceRule=u||"direct_user_grant",a?this.displayName=a:this.displayName=void 0,typeof n=="number"?this.expirationTime=n:this.expirationTime=void 0}static isPermission(e){return!(!e||e.kind!==Qe)}static hasRole(e,t){if(!t)return!1;let i=Ze.indexOf(t),r=Ze.indexOf(e);return i>=r}static isHigherRole(e,t){let i=Ze.indexOf(e),r=Ze.indexOf(t);return i>r}hasRole(e){return o.hasRole(e,this.role)}static hasRoleIn(e,t){if(!t||!t.length)return!1;let i=[...t].sort((l,c)=>l.depth-c.depth),r=i[0].depth,s=i.filter(l=>l.depth===r),a,n=s.filter(l=>l.type==="user");if(n.length)a=n.sort((l,c)=>Ze.indexOf(c.role)-Ze.indexOf(l.role))[0];else{let l=s.filter(c=>c.type==="group");if(l.length)a=l.sort((c,p)=>Ze.indexOf(p.role)-Ze.indexOf(c.role))[0];else{let c=s.filter(p=>p.type==="organization");c.length&&(a=c.sort((p,u)=>Ze.indexOf(u.role)-Ze.indexOf(p.role))[0])}}return a?o.hasRole(e,a.role):!1}toJSON(){let e={kind:Qe,key:this.key,role:this.role,type:this.type,addingUser:this.addingUser,granteeId:this.granteeId,itemId:this.itemId,depth:this.depth,sourceRule:this.sourceRule};return this.displayName&&(e.displayName=this.displayName),this.expirationTime&&(e.expirationTime=this.expirationTime),e}};var At="Core#Thing",De="Core#Folder";var vi="Core#User",Et="Data#DomainFile",ze="Data#Domain",ke="Domain#Namespace",ye="Domain#Model",N="Domain#Entity",ae="Domain#Association",ne="Domain#Property",mt="Core#DataCatalog",ft="Core#DataCatalogVersion";var Qt="Core#Deployment",$e="Core#ApiModel",xt="Core#ExposedEntity",$a="Core#ApiFile";var _i="Core#AiSession",ks="Core#AiMessage",ws="Core#Job";var ie=class o{kind=At;name;displayName;description;version;static fromName(e){return new o({name:e,kind:At})}static fromJSON(e={},t={}){let i=new o,{name:r,displayName:s,description:a,version:n}=e||{};return typeof r=="string"?i.name=r:typeof t.name=="string"&&(i.name=t.name),typeof s=="string"?i.displayName=s:typeof t.displayName=="string"&&(i.displayName=t.displayName),a?i.description=a:typeof t.description=="string"&&(i.description=t.description),n?i.version=n:typeof t.version=="string"&&(i.version=t.version),i}constructor(e){let t;typeof e=="string"?t=JSON.parse(e):typeof e=="object"?t=e:t={kind:At},this.new(t)}new(e){if(!o.isThing(e))throw new Error("Not a thing.");let{description:t,name:i,version:r,displayName:s}=e;this.kind=At,this.name=i,this.displayName=s,this.description=t,this.version=r}static validate(e,t={}){let{strict:i}=t;return e&&typeof e=="object"?!(i&&e.kind!==At):!1}static isThing(e){return!!(e&&e.kind===At)}toJSON(){let e={kind:At};return typeof this.name=="string"&&(e.name=this.name),typeof this.displayName=="string"&&(e.displayName=this.displayName),this.description&&(e.description=this.description),this.version&&(e.version=this.version),e}getLabel(e){return this.displayName||this.name||e||"Unnamed object"}};var vs=Symbol("parents"),Qi=Symbol("deleted"),er=Symbol("deletedInfo"),tr=Symbol("lastModified"),_s=Symbol("capabilities"),Ss=Symbol("permissions"),As=Symbol("permissionIds"),Es=Symbol("shortcutTarget"),Si=class{kind="";key="";info=ie.fromName("");iconColor;get isShortcut(){return!!this.shortcutTarget}[Es];get shortcutTarget(){return this[Es]}set shortcutTarget(e){this[Es]=e}static createSchema(e={}){let{key:t=q(),kind:i,iconColor:r,shortcutTarget:s}=e,a={key:t,kind:i||"",info:ie.fromJSON(e.info,{name:"Unnamed file"}).toJSON()};return r&&(a.iconColor=r),s&&(a.isShortcut=!0,a.shortcutTarget=s),a}constructor(e){this.kind=e.kind,this.key=e.key,this.info=new ie(e.info),e.iconColor&&(this.iconColor=e.iconColor),e.shortcutTarget&&(this.shortcutTarget=e.shortcutTarget)}toJSON(){let e={key:this.key,kind:this.kind,info:this.info.toJSON()};return this.iconColor&&(e.iconColor=this.iconColor),this.shortcutTarget&&(e.isShortcut=!0,e.shortcutTarget=this.shortcutTarget),e}static createFileCapabilities(e,t){let i=St.hasRole("commenter",t),r=St.hasRole("owner",t),s=St.hasRole("reader",t),a=St.hasRole("writer",t),n=e.kind===De;return{canReadMedia:!n&&s,canListChildren:n&&s,canComment:!n&&i,canEditMedia:!n&&a,canEditMeta:a,canReadRevisions:a,canAddChildren:n&&a,canDelete:r,canTrash:r,canUntrash:r,canShare:a,canMove:a}}createFileCapabilities(e){return gt.createFileCapabilities(this,e)}static updateByMeMeta(e,t){e.deletedInfo&&(e.deletedInfo.byMe=e.deletedInfo.user===t),e.lastModified&&(e.lastModified.byMe=e.lastModified.user===t)}static setLastModified(e,t){if(!e)throw new Error("The file is required.");if(!t)throw new Error("The user is required.");if(t.kind!==vi)throw new Error('Invalid value for the user when setting "lastModified".');return e.lastModified={byMe:!1,time:Date.now(),user:t.key,name:t.name},e}static setDeleted(e,t){if(!e)throw new Error("The file is required.");if(!t)throw new Error("The user is required.");if(t.kind!==vi)throw new Error('Invalid value for the user when setting "deletedInfo".');return e.deleted=!0,e.deletedInfo={byMe:!1,time:Date.now(),user:t.key,name:t.name},e}},gt=class o extends Si{[vs]=[];get parents(){return this[vs]}[As]=[];get permissionIds(){return this[As]}[Qi];get deleted(){return this[Qi]||!1}[er];get deletedInfo(){return this[er]}[tr]={user:"",time:0,byMe:!1};get lastModified(){return this[tr]}labels;[_s];get capabilities(){return this[_s]}[Ss]=[];get permissions(){return this[Ss]}static createSchema(e={}){let t=Si.createSchema(e);return Array.isArray(e.parents)?t.parents=[...e.parents]:t.parents=[],Array.isArray(e.permissionIds)?t.permissionIds=[...e.permissionIds]:t.permissionIds=[],Array.isArray(e.permissions)?t.permissions=e.permissions.map(i=>({...i})):t.permissions=[],e.capabilities&&(t.capabilities={...e.capabilities}),e.lastModified?t.lastModified={...e.lastModified}:t.lastModified={user:"",time:0,byMe:!1},typeof e.deleted=="boolean"&&(t.deleted=e.deleted,t.deletedInfo=e.deletedInfo?{...e.deletedInfo}:void 0),Array.isArray(e.labels)&&(t.labels=[...e.labels]),typeof e.shortcutTarget=="string"&&(t.shortcutTarget=e.shortcutTarget),t}constructor(e){let t=o.createSchema(e);super(t),this[vs]=[...t.parents],this[As]=[...t.permissionIds],this[Ss]=t.permissions.map(i=>({...i})),this[_s]=t.capabilities?{...t.capabilities}:void 0,this[tr]=Object.freeze({...t.lastModified}),typeof t.deleted=="boolean"&&(this[Qi]=t.deleted,this[er]=t.deletedInfo?Object.freeze({...t.deletedInfo}):void 0),Array.isArray(t.labels)&&(this.labels=[...t.labels])}toJSON(){let e={...super.toJSON(),parents:[...this.parents],permissionIds:[...this.permissionIds],lastModified:{...this.lastModified},permissions:[...this.permissions]};return this.deleted&&(e.deleted=this.deleted,e.deletedInfo={...this.deletedInfo}),Array.isArray(this.labels)&&(e.labels=[...this.labels]),e}static fromName(e,t){return new o({kind:t,info:{name:e}})}shortcutTo(e){return this.shortcutTarget=e,this}setLastModified(e){if(!e)throw new Error("The user is required.");if(e.kind!==vi)throw new Error('Invalid value for the user when setting "lastModified".');this[tr]={byMe:!1,time:Date.now(),user:e.key,name:e.name}}addLabel(e){if(typeof e!="string")throw new Error("The label must be a string.");if(!e.trim())throw new Error("The label is required.");Array.isArray(this.labels)||(this.labels=[]),!this.labels.includes(e)&&this.labels.push(e)}setDeleted(e){if(!e)throw new Error("The user is required.");if(e.kind!==vi)throw new Error('Invalid value for the user when setting "deletedInfo".');this[Qi]=!0,this[er]={byMe:!1,time:Date.now(),user:e.key,name:e.name}}isFile(){return this.kind!==De}isFolder(){return this.kind===De}};var Ai=class extends gt{kind=De;static fromName(e){return super.fromName(e,De)}constructor(e){let t=gt.createSchema(e);t.kind=De,super(t)}static isFolder(e){return!(!e||e.kind!==De)}toJSON(){return{...super.toJSON(),kind:De}}};var ir=class extends te{async list(e,t={},i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a={...t},n=this.sdk.getUrl(A.files(e));this.sdk.appendListOptions(n,a);let l=await this.sdk.http.get(n.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(l);let c="Unable to list files. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async search(e,t={},i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.filesSearch(e)),{searchParams:n}=a;if(t.cursor&&n.set("cursor",t.cursor),typeof t.limit=="number"&&n.set("limit",String(t.limit)),t.parent&&n.set("parent",t.parent),t.kind)for(let c of t.kind)n.append("kind",c);if(t.query)for(let c of t.query)n.append("query",c);let l=await this.sdk.http.get(a.toString(),{token:r,retry:s});return this.processListResponse(l,"Unable to search files. ")}async create(e,t,i,r={},s={}){let a=await this.createMeta(e,i,r,s);return await this.createMedia(t,i,a.key,r,s),a}async createMeta(e,t,i={},r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.files(t));i.parent&&n.searchParams.set("parent",i.parent);let l=JSON.stringify(e),c=await this.sdk.http.post(n.toString(),{token:s,body:l,retry:a,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(c);let p="Unable to create a file. ";if(c.status!==201)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}async createMedia(e,t,i,r={},s={}){let{token:a=this.sdk.token,retry:n=!0}=s,l=A.fileMedia(t,i),c=this.sdk.getUrl(l),p=r.mime||"application/json",u;p.includes("json")?u=JSON.stringify(e):u=String(e);let h=await this.sdk.http.put(c.toString(),{token:a,body:u,retry:n,headers:{"content-type":p}});this.inspectCommonStatusCodes(h);let m="Unable to create a file. ";if(h.status!==200)throw this.logInvalidResponse(h),this.createApiError(`${m}${x}${h.status}`,h.body)}async createFolder(e,t,i={},r={}){let s=Ai.fromName(e),{token:a=this.sdk.token,retry:n=!0}=r,l=this.sdk.getUrl(A.files(t));i.parent&&l.searchParams.set("parent",i.parent);let c=JSON.stringify(s),p=await this.sdk.http.post(l.toString(),{token:a,body:c,retry:n,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(p);let u="Unable to create a file. ";if(p.status!==201)throw this.logInvalidResponse(p),this.createApiError(`${u}${x}${p.status}`,p.body);if(!p.body)throw new g(`${u}${U}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${V}`,{code:"E_INVALID_JSON",status:p.status})}if(!h.key)throw new g(`${u}${F}`,{code:"E_RESPONSE_UNKNOWN",status:p.status});return h}async read(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.file(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read a file. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async readMedia(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.fileMedia(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read a file media. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!c||typeof c!="object"||!("data"in c)||!("meta"in c))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});let{data:p,meta:u}=c;if(!u||typeof u!="object"||typeof u.version!="number"||typeof u.updated!="number"||isNaN(u.version)||isNaN(u.updated))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return{media:p,meta:u}}async readBulk(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.filesBatch(e)),n=JSON.stringify({ids:t}),l=await this.sdk.http.post(a.toString(),{token:r,body:n,retry:s});this.inspectCommonStatusCodes(l);let c="Unable to read files in bulk. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async patch(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=A.file(e,t),l=this.sdk.getUrl(n),c=JSON.stringify(i),p=await this.sdk.http.patch(l.toString(),{token:s,body:c,retry:a});this.inspectCommonStatusCodes(p);let u="Unable to patch a file. ";if(p.status!==200)throw this.logInvalidResponse(p),this.createApiError(`${u}${x}${p.status}`,p.body);if(!p.body)throw new g(`${u}${U}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${V}`,{code:"E_INVALID_JSON",status:p.status})}if(!h.kind)throw new g(`${u}${F}`,{code:"E_RESPONSE_UNKNOWN",status:p.status});return h}async patchMedia(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=A.fileMedia(e,t),l=this.sdk.getUrl(n),c=JSON.stringify(i),p=await this.sdk.http.patch(l.toString(),{token:s,body:c,retry:a});this.inspectCommonStatusCodes(p);let u="Unable to patch a file contents. ";if(p.status!==200)throw this.logInvalidResponse(p),this.createApiError(`${u}${x}${p.status}`,p.body);if(!p.body)throw new g(`${u}${U}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${V}`,{code:"E_INVALID_JSON",status:p.status})}return h}async delete(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.file(e,t)),n=await this.sdk.http.delete(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to trash a file. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body)}async deleteBulk(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.files(e)),n=await this.sdk.http.delete(a.toString(),{token:r,body:JSON.stringify({ids:t}),retry:s});this.inspectCommonStatusCodes(n);let l="Unable to trash files. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body)}async patchUsers(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.filesAccess(e,t)),l=JSON.stringify(i),c=await this.sdk.http.patch(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to patch the file. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}async addUser(e,t,i,r,s,a){let n={op:"add",type:"user",value:r,id:i};typeof s=="number"&&(n.expirationTime=s);let l={patch:[n],id:q()};return this.patchUsers(e,t,l,a)}async removeUser(e,t,i,r){let a={patch:[{op:"remove",type:"user",id:i}],id:q()};return this.patchUsers(e,t,a,r)}async listUsers(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.fileUsers(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list users in the file. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async breadcrumbs(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.fileBreadcrumbs(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read breadcrumbs. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async rename(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.fileRename(e,t)),l=await this.sdk.http.put(n.toString(),{token:s,body:JSON.stringify({name:i}),retry:a});this.inspectCommonStatusCodes(l);let c="Unable to rename file. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}return p}};var rr=class extends te{async me(e={}){let{token:t=this.sdk.token,retry:i=!0}=e,r=this.sdk.getUrl(A.usersMe()),s=await this.sdk.http.get(r.toString(),{token:t,retry:i});this.inspectCommonStatusCodes(s);let a="Unable to read a user. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${x}${s.status}`,s.body);if(!s.body)throw new g(`${a}${U}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body).data}catch{throw new g(`${a}${V}`,{code:"E_INVALID_JSON",status:s.status})}if(!n.key)throw new g(`${a}${F}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}async listTokens(e={}){let{token:t=this.sdk.token,retry:i=!0}=e,r=this.sdk.getUrl(A.usersMeTokens()),s=await this.sdk.http.get(r.toString(),{token:t,retry:i});this.inspectCommonStatusCodes(s);let a="Unable to list tokens. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${x}${s.status}`,s.body);if(!s.body)throw new g(`${a}${U}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body).data}catch{throw new g(`${a}${V}`,{code:"E_INVALID_JSON",status:s.status})}return n}async createToken(e={},t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.usersMeTokens()),a=JSON.stringify(e),n=await this.sdk.http.post(s.toString(),{token:i,body:a,retry:r,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(n);let l="Unable to create a token. ";if(n.status!==200&&n.status!==201)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}return c}async deleteToken(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.usersMeToken(e)),a=await this.sdk.http.delete(s.toString(),{token:i,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to delete a token. ";if(a.status!==204)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body)}};var sr=class extends te{async list(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.shared(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list shared files. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}};var ar=class extends te{async list(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.fileRevisions(e,t));this.sdk.appendListOptions(n,i);let l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to list revisions for a file. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}};var nr=class extends te{async list(e,t={},i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.trash(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list trash. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}async delete(e,t,i={}){let r=A.trashBatchDelete(e),s=this.sdk.getUrl(r),{token:a=this.sdk.token,retry:n=!0}=i,l=await this.sdk.http.delete(s.toString(),{token:a,body:JSON.stringify({ids:t}),retry:n});this.inspectCommonStatusCodes(l);let c="Unable to delete trash. ";if(l.status!==204)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body)}async restore(e,t,i={}){let r=this.sdk.getUrl(A.trashBatchRestore(e)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.post(r.toString(),{token:s,body:JSON.stringify({ids:t}),retry:a});this.inspectCommonStatusCodes(n);let l="Unable to restore from trash. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body)}async empty(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.trashEmpty(e)),a=await this.sdk.http.delete(s.toString(),{token:i,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to empty trash. ";if(a.status!==204)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body)}};var or=class extends te{async list(e={}){let{token:t=this.sdk.token,retry:i=!0}=e,r=this.sdk.getUrl(A.organizations()),s=await this.sdk.http.get(r.toString(),{token:t,retry:i});this.inspectCommonStatusCodes(s);let a="Unable to list your organizations. ";if(s.status!==200)throw this.logInvalidResponse(s),this.createApiError(`${a}${x}${s.status}`,s.body);if(!s.body)throw new g(`${a}${U}`,{code:"E_RESPONSE_NO_VALUE",status:s.status});let n;try{n=JSON.parse(s.body)}catch{throw new g(`${a}${V}`,{code:"E_INVALID_JSON",status:s.status})}if(!Array.isArray(n.data))throw new g(`${a}${F}`,{code:"E_RESPONSE_UNKNOWN",status:s.status});return n}async create(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizations()),n={name:e,slug:t},l=await this.sdk.http.post(a.toString(),{body:JSON.stringify(n),token:r,headers:{"Content-Type":"application/json"},retry:s});this.inspectCommonStatusCodes(l);let c="Unable to create an organization. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.kind)throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}invitations={list:async(e,t={})=>{let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.invitations(e)),a=await this.sdk.http.get(s.toString(),{token:i,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to list organization invitations. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body);if(!a.body)throw new g(`${n}${U}`,{code:"E_RESPONSE_NO_VALUE",status:a.status});let l;try{l=JSON.parse(a.body)}catch{throw new g(`${n}${V}`,{code:"E_INVALID_JSON",status:a.status})}if(!Array.isArray(l.data))throw new g(`${n}${F}`,{code:"E_RESPONSE_UNKNOWN",status:a.status});return l},create:async(e,t,i,r,s={})=>{let{token:a=this.sdk.token,retry:n=!0}=s,l=this.sdk.getUrl(A.invitations(e)),c={email:t,name:r,grant_type:i},p=await this.sdk.http.post(l.toString(),{body:JSON.stringify(c),token:a,headers:{"Content-Type":"application/json"},retry:n});this.inspectCommonStatusCodes(p);let u="Unable to create an invitation. ";if(p.status!==200)throw this.logInvalidResponse(p),this.createApiError(`${u}${x}${p.status}`,p.body);if(!p.body)throw new g(`${u}${U}`,{code:"E_RESPONSE_NO_VALUE",status:p.status});let h;try{h=JSON.parse(p.body).data}catch{throw new g(`${u}${V}`,{code:"E_INVALID_JSON",status:p.status})}if(!h.kind)throw new g(`${u}${F}`,{code:"E_RESPONSE_UNKNOWN",status:p.status});return h},findByToken:async(e,t={})=>{let i=this.sdk.getUrl(A.findInvitation());i.searchParams.append("token",e);let{retry:r=!0,token:s}=t,a=await this.sdk.http.get(i.toString(),{token:s,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to find invitation by token. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body);if(!a.body)throw new g(`${n}${U}`,{code:"E_RESPONSE_NO_VALUE",status:a.status});let l;try{l=JSON.parse(a.body).data}catch{throw new g(`${n}${V}`,{code:"E_INVALID_JSON",status:a.status})}if(!l.kind)throw new g(`${n}${F}`,{code:"E_RESPONSE_UNKNOWN",status:a.status});return l},decline:async(e,t,i={})=>{let r=this.sdk.getUrl(A.declineInvitation(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.post(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to decline invitation. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},delete:async(e,t,i={})=>{let r=this.sdk.getUrl(A.invitation(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.delete(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to delete invitation. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},patch:async(e,t,i,r={})=>{let s=this.sdk.getUrl(A.invitation(e,t)),{token:a=this.sdk.token,retry:n=!0}=r,l=await this.sdk.http.patch(s.toString(),{body:JSON.stringify(i),token:a,headers:{"Content-Type":"application/json"},retry:n});this.inspectCommonStatusCodes(l);let c="Unable to update invitation. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.kind)throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},resend:async(e,t,i={})=>{let r=this.sdk.getUrl(A.resendInvitation(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.put(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to resend invitation. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.kind)throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}};users={list:async(e,t,i={})=>{let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizationUsers(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to list projects. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!Array.isArray(c.data))throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},read:async(e,t,i={})=>{let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizationUser(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read the user info. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}return c},readBatch:async(e,t,i={})=>{let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizationUserBatch(e)),n={ids:t},l=await this.sdk.http.post(a.toString(),{body:JSON.stringify(n),token:r,retry:s});this.inspectCommonStatusCodes(l);let c="Unable to read the user batch info. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},activate:async(e,t,i={})=>{let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizationUserActivate(e,t)),n=await this.sdk.http.post(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to activate the user. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}return c},deactivate:async(e,t,i={})=>{let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizationUserDeactivate(e,t)),n=await this.sdk.http.post(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to deactivate the user. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}return c},delete:async(e,t,i={})=>{let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.organizationUser(e,t)),n=await this.sdk.http.delete(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to delete the user. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body)}};slugs={generate:async(e,t={})=>{let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.orgSlugGenerate()).toString(),a={name:e},n=await this.sdk.http.post(s,{body:JSON.stringify(a),token:i,retry:r});this.inspectCommonStatusCodes(n);let l="Unable to generate the slug. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(!c.slug)throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c.slug},validate:async(e,t={})=>{let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.orgSlugValidate()).toString(),a={slug:e},n=await this.sdk.http.post(s,{body:JSON.stringify(a),token:i,retry:r});this.inspectCommonStatusCodes(n);let l="Unable to validate the slug. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);if(!n.body)throw new g(`${l}${U}`,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body).data}catch{throw new g(`${l}${V}`,{code:"E_INVALID_JSON",status:n.status})}if(typeof c.valid!="boolean")throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c}}};var lr=class extends te{async list(e={},t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s={...e},a=this.sdk.getUrl(A.dataCatalog());this.sdk.appendListOptions(a,s),s.scope&&a.searchParams.set("scope",s.scope);let n=await this.sdk.http.get(a.toString(),{token:i,retry:r});return this.processListResponse(n,"Unable to list data domains. ")}async listVersions(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.dataCatalogEntryVersions(e)),a=await this.sdk.http.get(s.toString(),{token:i,retry:r});return this.processListResponse(a,"Unable to list data domain versions. ")}async publish(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.dataCatalog()),a=JSON.stringify(e),n=await this.sdk.http.post(s.toString(),{token:i,body:a,retry:r,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(n);let l="Unable to publish data domain. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,mt,c.kind),c}async read(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.dataCatalogEntry(e)),a=await this.sdk.http.get(s.toString(),{token:i,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to read data domain. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body);let l=this.readResponseJSON(a,n).data;return this.assertObjectKind(n,mt,l.kind),l}async deprecate(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.dataCatalogDeprecate(e)),n=JSON.stringify({reason:t}),l=await this.sdk.http.put(a.toString(),{token:r,body:n,retry:s,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(l);let c="Unable to deprecate data domain. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);let p=this.readResponseJSON(l,c).data;return this.assertObjectKind(c,mt,p.kind),p}async unpublish(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.dataCatalogUnpublish(e)),a=await this.sdk.http.put(s.toString(),{token:i,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to unpublish data domain. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body);let l=this.readResponseJSON(a,n).data;return this.assertObjectKind(n,mt,l.kind),l}async publishVersion(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.dataCatalogEntryVersions(e)),n=JSON.stringify(t),l=await this.sdk.http.post(a.toString(),{token:r,body:n,retry:s,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(l);let c="Unable to publish data domain version. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);let p=this.readResponseJSON(l,c).data;return this.assertObjectKind(c,ft,p.kind),p}async readVersion(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.dataCatalogVersion(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to read data domain version. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,ft,c.kind),c}async listDependencies(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.dataCatalogDependencies()),a=JSON.stringify({items:e}),n=await this.sdk.http.post(s.toString(),{token:i,body:a,retry:r,headers:{"content-type":"application/json"}});return this.processListResponse(n,"Unable to list data domain dependencies. ")}async checkUpdates(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=e.map(c=>({fid:c.key,version:c.version})),a=this.sdk.getUrl(A.dataCatalogUpdates()),n=JSON.stringify({dependencies:s}),l=await this.sdk.http.post(a.toString(),{token:i,body:n,retry:r,headers:{"content-type":"application/json"}});return this.processListResponse(l,"Unable to check for data domain updates. ")}async deprecateVersion(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.dataCatalogVersionDeprecate(e,t)),l=JSON.stringify({reason:i}),c=await this.sdk.http.put(n.toString(),{token:s,body:l,retry:a,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(c);let p="Unable to deprecate data domain version. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);let u=this.readResponseJSON(c,p).data;return this.assertObjectKind(p,ft,u.kind),u}async unpublishVersion(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.dataCatalogVersionUnpublish(e,t)),n=await this.sdk.http.put(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to unpublish data domain version. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,ft,c.kind),c}async checkPublicationStatus(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.dataCatalogStatus(e));t&&a.searchParams.set("oid",t);let n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to check data domain publication status. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,mt,c.kind),c}async getUsageFiles(e,t={}){let{token:i=this.sdk.token,retry:r=!0}=t,s=this.sdk.getUrl(A.dataCatalogUsage(e)),a=await this.sdk.http.get(s.toString(),{token:i,retry:r});this.inspectCommonStatusCodes(a);let n="Unable to get data catalog usage files. ";if(a.status!==200)throw this.logInvalidResponse(a),this.createApiError(`${n}${x}${a.status}`,a.body);return this.processListResponse(a,n)}async getVersionUsageFiles(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.dataCatalogVersionUsage(e,t)),n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to get data catalog version usage files. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);return this.processListResponse(n,l)}};var cr=class extends te{async create(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.groups(e)),n=JSON.stringify(t),l=await this.sdk.http.post(a.toString(),{token:r,body:n,headers:{"content-type":"application/json"},retry:s});this.inspectCommonStatusCodes(l);let c="Unable to create a group. ";if(l.status!==201)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.key)throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async list(e,t={},i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.groups(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to create a group. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(l+x+n.status,n.body);if(!n.body)throw new g(l+U,{code:"E_RESPONSE_NO_VALUE",status:n.status});let c;try{c=JSON.parse(n.body)}catch{throw new g(l+V,{code:"E_INVALID_JSON",status:n.status})}return c}async update(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.group(e,t.key)),n=JSON.stringify(t),l=await this.sdk.http.put(a.toString(),{token:r,body:n,headers:{"content-type":"application/json"},retry:s});this.inspectCommonStatusCodes(l);let c="Unable to update a group. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!p.key)throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p}async delete(e,t,i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.group(e,t)),n=await this.sdk.http.delete(a.toString(),{token:r,retry:s});this.inspectCommonStatusCodes(n);let l="Unable to delete a group. ";if(n.status!==204)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body)}async addUsers(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.groupUsers(e,t)),l=JSON.stringify({ids:i}),c=await this.sdk.http.post(n.toString(),{token:s,body:l,headers:{"content-type":"application/json"},retry:a});this.inspectCommonStatusCodes(c);let p="Unable to add users to a group. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}async removeUsers(e,t,i,r={}){let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.groupUsers(e,t)),l=JSON.stringify({ids:i}),c=await this.sdk.http.delete(n.toString(),{token:s,body:l,headers:{"content-type":"application/json"},retry:a});this.inspectCommonStatusCodes(c);let p="Unable to remove users from a group. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(!u.key)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}};var dr=class extends te{async*modifyDomain(e,t,i,r,s={}){let{token:a=this.sdk.token,signal:n}=s,l=this.sdk.getUrl(A.aiModifyDomain(e,t)),c=JSON.stringify({goal:i,sid:r}),p={method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream",authorization:`Bearer ${a}`},redirect:"follow",credentials:"include",body:c,signal:n},u=await fetch(l,p);if(!u.ok){let b=await u.text();throw new g(`Failed to modify domain: ${u.status} ${b}`)}let h=u.body?.getReader();if(!h)throw new g("Failed to get reader from response");let m=new TextDecoder,f="";for(;;){let{done:b,value:k}=await h.read();if(b)return;f+=m.decode(k,{stream:!0});let S;for(;(S=f.indexOf(`
|
|
17
17
|
|
|
18
|
-
`))>=0;){let
|
|
19
|
-
`),S="message",N="";for(let z of x)z.startsWith("event:")?S=z.substring(6).trim():z.startsWith("data:")&&(N+=z.substring(5).trim());if(!N)continue;let $;try{$=JSON.parse(N)}catch{console.error("Failed to parse SSE JSON data:",N);continue}switch(S){case"user-message":yield{event:S,data:$};break;case"agent-message":yield{event:S,data:$};break;case"thought-chunk":case"text-chunk":yield{event:S,data:$};break;case"done":yield{event:S,data:$};return;case"error":yield{event:S,data:g.fromRawException($,"Failed to generate results")};break;case"session-updated":yield{event:S,data:$};break;default:console.warn(`Unknown SSE event: ${S}`)}}}}sessions={list:async(e,t,r={},i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiSessions(e,t));this.sdk.appendListOptions(n,r);let l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to list sessions. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},read:async(e,t,r,i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiSession(e,t,r)),l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to read session. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(p.kind!==yr)throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},create:async(e,t,r,i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiSessions(e,t)),l=JSON.stringify(r),c=await this.sdk.http.post(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to create session. ";if(c.status!==201)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(u.kind!==yr)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u},delete:async(e,t,r,i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiSession(e,t,r)),l=await this.sdk.http.delete(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to delete session. ";if(l.status!==204)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body)},update:async(e,t,r,i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiSession(e,t,r.key)),l=JSON.stringify(r),c=await this.sdk.http.put(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to update session. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(u.kind!==yr)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}};messages={list:async(e,t,r={},i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiMessages(e,t));this.sdk.appendListOptions(n,r);let l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to list messages. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body);if(!l.body)throw new g(`${c}${R}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${D}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${V}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},delete:async(e,t,r,i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiMessage(e,t,r)),l=await this.sdk.http.delete(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to delete message. ";if(l.status!==204)throw this.logInvalidResponse(l),this.createApiError(`${c}${E}${l.status}`,l.body)},update:async(e,t,r,i={})=>{let{token:s=this.sdk.token,retry:a=!0}=i,n=this.sdk.getUrl(A.aiMessage(e,t,r.key)),l=JSON.stringify(r),c=await this.sdk.http.put(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to update message. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${E}${c.status}`,c.body);if(!c.body)throw new g(`${p}${R}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${D}`,{code:"E_INVALID_JSON",status:c.status})}if(u.kind!==us)throw new g(`${p}${V}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}}};var ks;(function(o){o.Pending="pending",o.Active="active",o.Inactive="inactive",o.Failed="failed"})(ks||(ks={}));var Ht;(function(o){o.PROD="prod",o.STAGING="staging",o.DEV="dev"})(Ht||(Ht={}));var oi=class extends Z{async list(e,t={},r={}){let{token:i=this.sdk.token,retry:s=!0}=r,a=this.sdk.getUrl(A.deployments(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:i,retry:s});return this.processListResponse(n,"Unable to list deployments. ")}async create(e,t,r={}){if(t.env===Ht.PROD&&!t.version)throw new g(`Version must not be empty for production environment: ${t.env}`,{code:"INVALID_DEPLOYMENT_VERSION",help:"Please provide a version for production environment",status:400});if(t.env!==Ht.PROD&&t.version)throw new g(`Version must not be present for non-production environment: ${t.env}`,{code:"INVALID_DEPLOYMENT_VERSION",help:"Please remove the version for non-production environment",status:400});let i=this.sdk.getUrl(A.deployments(e)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.post(i.toString(),{token:s,body:JSON.stringify(t),retry:a,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(n);let l="Unable to create a deployment. ";if(n.status!==202)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Gt,c.kind),c}async read(e,t,r={}){let i=this.sdk.getUrl(A.deployment(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.get(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to read a deployment. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Gt,c.kind),c}async deactivate(e,t,r={}){let i=this.sdk.getUrl(A.deployment(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.delete(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to deactivate a deployment. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Gt,c.kind),c}async rollback(e,t,r={}){let i=this.sdk.getUrl(A.rollback(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.post(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to rollback a deployment. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Gt,c.kind),c}apis={getLatestPerEnvironment:async(e,t,r={})=>{let i=this.sdk.getUrl(A.deploymentsApisByEnvLatest(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.get(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to list latest deployments for an API. ",c=this.readResponseJSON(n,l);if(!c.data)throw new g(`${l}${V}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},list:async(e,t={})=>{let r=this.sdk.getUrl(A.deploymentsApis(e)),{token:i=this.sdk.token,retry:s=!0}=t,a=await this.sdk.http.get(r.toString(),{token:i,retry:s});return this.processListResponse(a,"Unable to list APIs. ")},listDeployments:async(e,t,r={},i={})=>{let s=this.sdk.getUrl(A.deploymentsForApi(e,t));this.sdk.appendListOptions(s,r);let{token:a=this.sdk.token,retry:n=!0}=i,l=await this.sdk.http.get(s.toString(),{token:a,retry:n});return this.processListResponse(l,"Unable to list deployments. ")},updateRuntimeUser:async(e,t,r,i,s="production",a={})=>{let n=this.sdk.getUrl(A.deploymentsApiRuntimeUsersUpdate(e,t)),{token:l=this.sdk.token,retry:c=!0}=a,p=JSON.stringify({userId:r,properties:i,env:s}),u=await this.sdk.http.post(n.toString(),{token:l,body:p,retry:c,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(u);let h="Unable to update runtime user. ";if(u.status!==200)throw this.logInvalidResponse(u),this.createApiError(`${h}${E}${u.status}`,u.body);if(!u.body)throw new g(`${h}${R}`,{code:"E_RESPONSE_NO_VALUE",status:u.status});return this.readResponseJSON(u,h)}}};var ws;(function(o){o.Pending="pending",o.Running="running",o.Completed="completed",o.Failed="failed"})(ws||(ws={}));var li=class extends Z{async checkStatus(e,t,r={}){let i=this.sdk.getUrl(A.job(e,t)),{token:s=this.sdk.token,retry:a=!0}=r,n=await this.sdk.http.get(i.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to check job status. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${E}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,hs,c.kind),c}};var vs=Symbol("baseUri"),ci=class extends EventTarget{basePath;#e;logger;get token(){return this.#e}set token(e){this.#e=e}auth=new Hr(this);files=new Zr(this);users=new Qr(this);shared=new ei(this);revisions=new ti(this);trash=new ri(this);organizations=new ii(this);dataCatalog=new si(this);groups=new ai(this);ai=new ni(this);deployments=new oi(this);jobs=new li(this);silent=!1;[vs]="";get baseUri(){return this[vs]}set baseUri(e){if(!e)throw new Error("Invalid value for the baseUri");let t;try{t=new URL(e)}catch{throw new Error("Invalid baseUri: Not an URL")}this[vs]=t.origin;let{pathname:r}=t;r&&r!=="/"?this.basePath=r:this.basePath=void 0}constructor(e,t){super(),this.basePath=t,this.baseUri=e}getUrl(e="/"){if(e.startsWith("http:")||e.startsWith("https:"))return new URL(e);let{baseUri:t,basePath:r=""}=this,i=e;return r&&i.startsWith(r)&&(i=i.substring(r.length)),new URL(`${r}${i}`,t)}appendListOptions(e,t={}){let{searchParams:r}=e;if(t.cursor&&r.set("cursor",t.cursor),typeof t.limit=="number"&&r.set("limit",String(t.limit)),t.parent&&r.set("parent",t.parent),t.since&&r.set("since",String(t.since)),t.sort&&r.set("sort",String(t.sort)),t.order&&r.set("order",String(t.order)),t.oid&&r.set("oid",String(t.oid)),t.uid&&r.set("uid",String(t.uid)),t.filter){let i=new TextEncoder().encode(JSON.stringify(t.filter)),s=Array.from(i,a=>String.fromCodePoint(a)).join("");r.set("filter",btoa(s))}}};var di=class extends ci{http=new Gr(this)};function ee(o={}){let e=O.resolved,t=o.apiUrl||e.apiUrl,r=new di(t);return e.token&&(r.token=e.token),r.logger=v,r}function ie(o){if(o&&typeof o=="object"){let t=o,r=t.status,i=t.code,s=t.message||"An unknown error occurred.",a=t.help;return r===401?(s="Unauthorized. Please login using `auth login`.",{message:s,status:r,code:"CLI_ERR_UNAUTHORIZED",help:a}):{message:s,status:r,code:i||"CLI_ERR_API_FAILURE",help:a}}return{message:o?.message||"An unknown error occurred.",code:"CLI_ERR_UNKNOWN"}}function St(o,e){return o.token||(e.error({code:"CLI_ERR_UNAUTHORIZED",message:"Not logged in.",detail:"Use `apinow auth login <provider>` to authenticate."}),process.exit(1)),o.token}import{input as Lo,confirm as Mo,select as Fo}from"@inquirer/prompts";async function Fe(o,e){return(await Lo({message:o,default:e})).trim()}async function _a(o,e=!0){return Mo({message:o,default:e})}async function ut(o,e){return Fo({message:o,choices:e})}async function _s(o,e){let t;try{t=(await o.organizations.list({token:o.token})).data||[]}catch{return}if(t.length>0){if(!O.resolved.org){let a=t[0],n=a.key;O.writeProperty("org",n),e.format!=="json"&&console.log(`
|
|
20
|
-
`+
|
|
21
|
-
`+
|
|
22
|
-
Creating organization "${
|
|
23
|
-
`+
|
|
24
|
-
`+
|
|
25
|
-
`),console.log(`${
|
|
26
|
-
`))}catch(
|
|
27
|
-
${h}`));try{await Bo(h)}catch{}})})}function xa(o){let e=o.command("orgs").description("Manage organization configurations");e.command("list").description("List all organizations you belong to").action(async()=>{let t=new B({format:O.resolved.format});v.debug("[orgs:list] Listing all authorized organizations...");try{let r=ee(),s=(await r.organizations.list({token:r.token})).data||[];v.debug(`[orgs:list] Found ${s.length} organizations.`);let a=O.resolved,n=s.map(l=>({id:l.key,name:l.name,slug:l.slug,isDefault:l.key===a.org?"Yes":"No"}));t.list(n,["id","name","slug","isDefault"],{headers:["ID","NAME","SLUG","DEFAULT"]})}catch(r){let i=ie(r);t.error(i),process.exit(1)}}),e.command("set-default <oid>").description("Set your default organization ID").action(async t=>{let r=new B({format:O.resolved.format});v.debug(`[orgs:set-default] Setting default organization ID to '${t}'...`);try{let i=ee();v.debug("[orgs:set-default] Validating organization ID in user's authorized list..."),((await i.organizations.list({token:i.token})).data||[]).some(l=>l.key===t)||(v.debug(`[orgs:set-default] Organization ID '${t}' not found.`),r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Organization ID '${t}' not found in your authorized list.`,detail:"Run `apinow orgs list` to see all authorized organizations and their IDs."}),process.exit(1)),v.debug(`[orgs:set-default] Organization ID validated. Writing 'org' property as '${t}'...`),O.writeProperty("org",t),v.debug("[orgs:set-default] Configuration property written successfully."),r.success(`Default organization ID set to '${t}'.`)}catch(i){let s=ie(i);r.error(s),process.exit(1)}}),e.command("default").alias("get-default").description("Get the default configured organization").action(async()=>{let t=new B({format:O.resolved.format});v.debug("[orgs:default] Retrieving the default configured organization...");try{let r=O.resolved;r.org||(v.debug("[orgs:default] No default organization configured in local settings."),t.error({code:"CLI_ERR_MISSING_REQUIRED",message:"No default organization configured.",detail:"Set one using `apinow orgs set-default <oid>`. Run `apinow orgs list` to list available organizations."}),process.exit(1));let i=ee();v.debug(`[orgs:default] Fetching organization list to validate configured org '${r.org}'...`);let n=((await i.organizations.list({token:i.token})).data||[]).find(l=>l.key===r.org);n||(v.debug(`[orgs:default] Configured org '${r.org}' not found in authorized list.`),t.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Default organization ID '${r.org}' not found in your authorized list.`,detail:"Run `apinow orgs set-default <oid>` to configure a valid default organization."}),process.exit(1)),v.debug(`[orgs:default] Default organization validated successfully: ${n.name}`),t.object({id:n.key,name:n.name,slug:n.slug})}catch(r){let i=ie(r);t.error(i),process.exit(1)}})}import Ea from"node:fs";import Wo from"node:path";function $a(o){let e=o.command("files").description("Manage files and metadata");e.command("list").description("List files in an organization").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--kind <kind>","Filter by file kind (e.g. domain, api, folder)").option("--parent <parent>","Filter by parent folder ID").action(async t=>{let r=new B({format:O.resolved.format}),i=O.resolved,s=t.org||i.org;v.debug(`[files:list] Listing files for org: ${s}, kind: ${t.kind||"all"}, parent: ${t.parent||"root"}`),s||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1));try{let a=ee(),n={};if(t.parent&&(n.parent=t.parent),t.kind){let u=Na(t.kind);n.filter={field:"kind",operator:"eq",value:u}}let c=(await a.files.list(s,n,{token:a.token})).data||[];v.debug(`[files:list] Found ${c.length} files.`);let p=c.map(u=>({id:u.key,name:u.info?.name||"",kind:u.kind,isShortcut:u.isShortcut?"Yes":"No"}));r.list(p,["id","name","kind","isShortcut"],{headers:["ID","NAME","KIND","SHORTCUT"]})}catch(a){let n=ie(a);r.error(n),process.exit(1)}}),e.command("create").description("Create a new file metadata record (and optionally upload media)").option("--name <name>","Name of the file").option("--kind <kind>","Kind of the file (e.g., domain, api)").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--parent <parent>","Parent folder ID").option("--media <path>","Local path to the file content/media to upload").option("--stdin","Read media content from STDIN").action(async t=>{let r=new B({format:O.resolved.format}),i=O.resolved,s=t.org||i.org;v.debug(`[files:create] Creating file with options: name=${t.name}, kind=${t.kind}, org=${s}, parent=${t.parent}, media=${t.media}, stdin=${t.stdin}`),s||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1)),t.media&&t.stdin&&(r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Cannot specify both --media <path> and --stdin"}),process.exit(1));let a=t.name;!a&&process.stdout.isTTY&&(a=await Fe("Enter file name:")),a||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Name is required.",detail:"Specify --name <name>."}),process.exit(1));let n=t.kind;!n&&process.stdout.isTTY&&(n=await ut("Select file kind:",[{name:"API Domain / Schema (domain)",value:"domain"},{name:"API Schema (api)",value:"api"},{name:"Folder (folder)",value:"folder"}])),n||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Kind is required.",detail:"Specify --kind <kind> (allowed: api, domain, folder)."}),process.exit(1));try{let l;if(t.media){let b=Wo.resolve(t.media);v.debug(`[files:create] Reading local media file from path: ${b}`),Ea.existsSync(b)||(r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Media file not found at path: ${b}`}),process.exit(1)),l=Ea.readFileSync(b,"utf8")}else t.stdin&&(v.debug("[files:create] Reading media content from STDIN..."),l=await Xo());let c,p;if(l!==void 0){try{p=JSON.parse(l)}catch{throw new Error("invalid API now platform file")}if(!p||typeof p!="object"||Array.isArray(p)||!("key"in p)||typeof p.key!="string"||!p.key.trim())throw new Error("invalid API now platform file");c=p.key}let u=ee(),h=pt.createSchema({kind:Na(n),info:{name:a},key:c}),m={};t.parent&&(m.parent=t.parent),v.debug("[files:create] Sending request to create file metadata...");let f=await u.files.createMeta(h,s,m,{token:u.token}),k=f.key;v.debug(`[files:create] Created file metadata successfully. Key: ${k}`),l!==void 0&&(v.debug("[files:create] Uploading file media..."),await u.files.createMedia(p,s,k,{},{token:u.token}),v.debug("[files:create] Media uploaded successfully.")),r.success("File created successfully!",f)}catch(l){let c=ie(l);r.error({code:"CLI_ERR_API_FAILURE",...c}),process.exit(1)}}),e.command("read").description("Read file metadata or media content").option("--id <fid>","File ID").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--meta","Read file metadata (default)").option("--media","Read file media/content").action(async t=>{let r=new B({format:O.resolved.format}),i=O.resolved,s=t.org||i.org;v.debug(`[files:read] Reading file with options: id=${t.id}, org=${s}, meta=${t.meta}, media=${t.media}`),s||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1));let a=t.id;if(!a&&process.stdout.isTTY){v.debug("[files:read] ID not provided, fetching files list for interactive selection...");try{let n=ee(),c=(await n.files.list(s,{},{token:n.token})).data||[];c.length>0&&(a=await ut("Select a file to read:",c.map(p=>({name:`${p.info?.name||"Unnamed"} (${p.kind})`,value:p.key}))))}catch{}}a||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID is required.",detail:"Specify --id <fid>."}),process.exit(1));try{let n=ee();if(t.media){v.debug(`[files:read] Fetching media content for file ID '${a}'...`);let c=(await n.files.readMedia(s,a,{token:n.token})).media;v.debug("[files:read] Media retrieved successfully."),i.format==="json"?console.log(JSON.stringify(c,null,2)):console.log(typeof c=="object"&&c!==null?JSON.stringify(c,null,2):c)}else{v.debug(`[files:read] Fetching metadata for file ID '${a}'...`);let l=await n.files.read(s,a,{token:n.token});v.debug("[files:read] Metadata retrieved successfully."),r.object(l)}}catch(n){let l=ie(n);r.error(l),process.exit(1)}})}function Na(o){let e=o.toLowerCase();if(e==="api")return va;if(e==="domain")return vt;if(e==="folder")return Ce;throw new Error(`Unsupported file kind "${o}". Allowed: api, domain, folder`)}async function Xo(){return new Promise((o,e)=>{let t="";process.stdin.setEncoding("utf8"),process.stdin.on("data",r=>{t+=r}),process.stdin.on("end",()=>{o(t)}),process.stdin.on("error",r=>{e(r)})})}var wr=class o{key;get kind(){return dt}catalogKey;scope;lifecycle;version;publishedBy;unpublishedAt;deprecated;deprecatedAt;deprecatedBy;deprecationReason;createdAt;updatedAt;changelog;static createSchema(e){let{key:t="",scope:r="private",publishedBy:i="",createdAt:s=0,updatedAt:a=0,catalogKey:n="",lifecycle:l="stable",version:c=""}=e;if(["public","private","organization"].indexOf(r)===-1)throw new Error(`Invalid scope: ${r}`);let p={key:t,kind:dt,scope:r,publishedBy:i,createdAt:s,updatedAt:a,catalogKey:n,lifecycle:l,version:c};return typeof e.deprecated=="boolean"&&(p.deprecated=e.deprecated),typeof e.deprecatedAt=="number"&&(p.deprecatedAt=e.deprecatedAt),typeof e.deprecatedBy=="string"&&(p.deprecatedBy=e.deprecatedBy),typeof e.changelog=="string"&&(p.changelog=e.changelog),typeof e.deprecationReason=="string"&&(p.deprecationReason=e.deprecationReason),typeof e.unpublishedAt=="number"&&(p.unpublishedAt=e.unpublishedAt),p}constructor(e={}){let t=o.createSchema(e);this.key=t.key,this.catalogKey=t.catalogKey,this.lifecycle=t.lifecycle,this.scope=t.scope,this.version=t.version,this.publishedBy=t.publishedBy,this.createdAt=t.createdAt,this.updatedAt=t.updatedAt,typeof t.changelog=="string"&&(this.changelog=t.changelog),typeof t.deprecated=="boolean"&&(this.deprecated=t.deprecated),typeof t.deprecatedAt=="number"&&(this.deprecatedAt=t.deprecatedAt),typeof t.deprecatedBy=="string"&&(this.deprecatedBy=t.deprecatedBy),typeof t.deprecationReason=="string"&&(this.deprecationReason=t.deprecationReason),typeof t.unpublishedAt=="number"&&(this.unpublishedAt=t.unpublishedAt)}toJSON(){let e={key:this.key,kind:dt,scope:this.scope,publishedBy:this.publishedBy,createdAt:this.createdAt,updatedAt:this.updatedAt,catalogKey:this.catalogKey,lifecycle:this.lifecycle,version:this.version};return typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),typeof this.deprecatedAt=="number"&&(e.deprecatedAt=this.deprecatedAt),typeof this.deprecatedBy=="string"&&(e.deprecatedBy=this.deprecatedBy),typeof this.deprecationReason=="string"&&(e.deprecationReason=this.deprecationReason),typeof this.unpublishedAt=="number"&&(e.unpublishedAt=this.unpublishedAt),typeof this.changelog=="string"&&this.changelog&&(e.changelog=this.changelog),e}};var w;(function(o){o.User="Semantic#User",o.Address="Semantic#Address",o.Password="Semantic#Password",o.Username="Semantic#Username",o.CreatedTimestamp="Semantic#CreatedTimestamp",o.UpdatedTimestamp="Semantic#UpdatedTimestamp",o.DeletedTimestamp="Semantic#DeletedTimestamp",o.DeletedFlag="Semantic#DeletedFlag",o.PublicUniqueName="Semantic#PublicUniqueName",o.Title="Semantic#Title",o.Name="Semantic#Name",o.UserRole="Semantic#UserRole",o.Status="Semantic#Status",o.Version="Semantic#Version",o.ImageURL="Semantic#ImageURL",o.FileURL="Semantic#FileURL",o.Markdown="Semantic#Markdown",o.HTML="Semantic#HTML",o.GeospatialCoordinates="Semantic#GeospatialCoordinates",o.Email="Semantic#Email",o.Phone="Semantic#Phone",o.Currency="Semantic#Currency",o.URL="Semantic#URL",o.SKU="Semantic#SKU",o.Description="Semantic#Description",o.Summary="Semantic#Summary",o.Calculated="Semantic#Calculated",o.Derived="Semantic#Derived",o.ClientIPAddress="Semantic#ClientIPAddress",o.StreetAddress="Semantic#StreetAddress",o.StreetAddressSupplemental="Semantic#StreetAddressSupplemental",o.City="Semantic#City",o.PostalCode="Semantic#PostalCode",o.Country="Semantic#Country",o.Region="Semantic#Region",o.ResourceOwnerIdentifier="Semantic#ResourceOwnerIdentifier",o.RelationalResourceOwner="Semantic#RelationalResourceOwner",o.CreatedBy="Semantic#CreatedBy",o.UpdatedBy="Semantic#UpdatedBy",o.DeletedBy="Semantic#DeletedBy",o.Tags="Semantic#Tags",o.Categories="Semantic#Categories"})(w||(w={}));var L;(function(o){o.Entity="Entity",o.Property="Property",o.Association="Association"})(L||(L={}));var F;(function(o){o.Identity="Identity & Authentication",o.Lifecycle="Timestamps & Versioning",o.Content="Content & Media",o.Business="Business Data",o.Organization="Classification & Organization",o.Location="Location & Geography",o.Contact="Contact Information",o.Computed="Computed Values"})(F||(F={}));var ja=o=>o.scope===L.Entity,pi=o=>o.scope===L.Property,Ia=o=>o.scope===L.Association,ht={[w.User]:{id:w.User,displayName:"User Entity",scope:L.Entity,description:"System users and accounts",category:F.Identity,hasConfig:!1},[w.Password]:{id:w.Password,displayName:"User Password",scope:L.Property,description:"Secure password field",category:F.Identity,applicableDataTypes:["string"],hasConfig:!0},[w.Username]:{id:w.Username,displayName:"Username",scope:L.Property,description:"User authentication identifier",category:F.Identity,applicableDataTypes:["string"],hasConfig:!1},[w.UserRole]:{id:w.UserRole,displayName:"User Role Field",scope:L.Property,description:"User permissions and access level",category:F.Identity,applicableDataTypes:["string"],hasConfig:!0},[w.ResourceOwnerIdentifier]:{id:w.ResourceOwnerIdentifier,displayName:"Resource Owner Identifier",scope:L.Association,description:"Links record to owner user",category:F.Identity,hasConfig:!1},[w.RelationalResourceOwner]:{id:w.RelationalResourceOwner,displayName:"Relational Resource Owner",scope:L.Association,description:"Specifies that the target entity of this association acts as the relational owner context for ownership verification.",category:F.Identity,hasConfig:!1},[w.CreatedBy]:{id:w.CreatedBy,displayName:"Created By",scope:L.Association,description:"Links record to the user who created it",category:F.Identity,hasConfig:!1},[w.UpdatedBy]:{id:w.UpdatedBy,displayName:"Updated By",scope:L.Association,description:"Links record to the user who last updated it",category:F.Identity,hasConfig:!1},[w.DeletedBy]:{id:w.DeletedBy,displayName:"Deleted By",scope:L.Association,description:"Links record to the user who soft-deleted it",category:F.Identity,hasConfig:!1},[w.CreatedTimestamp]:{id:w.CreatedTimestamp,displayName:"Creation Timestamp",scope:L.Property,description:"When record was created",category:F.Lifecycle,applicableDataTypes:["datetime"],hasConfig:!1},[w.UpdatedTimestamp]:{id:w.UpdatedTimestamp,displayName:"Update Timestamp",scope:L.Property,description:"When record was last modified",category:F.Lifecycle,applicableDataTypes:["datetime"],hasConfig:!1},[w.DeletedTimestamp]:{id:w.DeletedTimestamp,displayName:"Soft Delete Timestamp",scope:L.Property,description:"When record was marked deleted",category:F.Lifecycle,applicableDataTypes:["datetime"],hasConfig:!1},[w.DeletedFlag]:{id:w.DeletedFlag,displayName:"Soft Delete Flag",scope:L.Property,description:"Mark record as deleted",category:F.Lifecycle,applicableDataTypes:["boolean"],hasConfig:!1},[w.Address]:{id:w.Address,displayName:"Address Entity",scope:L.Entity,description:"Physical address entity",category:F.Contact,hasConfig:!1},[w.StreetAddress]:{id:w.StreetAddress,displayName:"Street Address",scope:L.Property,description:"Street address line",category:F.Contact,applicableDataTypes:["string"],hasConfig:!1},[w.StreetAddressSupplemental]:{id:w.StreetAddressSupplemental,displayName:"Street Address Supplemental",scope:L.Property,description:"Supplemental street address line (e.g., Unit, Suite, Apartment, Floor)",category:F.Contact,applicableDataTypes:["string"],hasConfig:!1},[w.City]:{id:w.City,displayName:"City",scope:L.Property,description:"City or locality",category:F.Contact,applicableDataTypes:["string"],hasConfig:!1},[w.PostalCode]:{id:w.PostalCode,displayName:"Postal Code",scope:L.Property,description:"Postal or zip code",category:F.Contact,applicableDataTypes:["string"],hasConfig:!0},[w.Country]:{id:w.Country,displayName:"Country",scope:L.Property,description:"Country name or code",category:F.Contact,applicableDataTypes:["string"],hasConfig:!0},[w.Region]:{id:w.Region,displayName:"Region",scope:L.Property,description:"State, province, or region",category:F.Contact,applicableDataTypes:["string"],hasConfig:!1},[w.Version]:{id:w.Version,displayName:"Version Number",scope:L.Property,description:"Auto-incrementing version counter",category:F.Lifecycle,applicableDataTypes:["number"],hasConfig:!1},[w.Title]:{id:w.Title,displayName:"Record Title",scope:L.Property,description:"Main title or heading",category:F.Content,applicableDataTypes:["string"],hasConfig:!1},[w.Name]:{id:w.Name,displayName:"Name",scope:L.Property,description:"A person or pet name",category:F.Content,applicableDataTypes:["string"],hasConfig:!1},[w.Description]:{id:w.Description,displayName:"Description",scope:L.Property,description:"Detailed description text",category:F.Content,applicableDataTypes:["string"],hasConfig:!1},[w.Summary]:{id:w.Summary,displayName:"Summary",scope:L.Property,description:"Brief summary text",category:F.Content,applicableDataTypes:["string"],hasConfig:!1},[w.Markdown]:{id:w.Markdown,displayName:"Markdown Content",scope:L.Property,description:"Formatted text content",category:F.Content,applicableDataTypes:["string"],hasConfig:!0},[w.HTML]:{id:w.HTML,displayName:"HTML Content",scope:L.Property,description:"Rich HTML content",category:F.Content,applicableDataTypes:["string"],hasConfig:!0},[w.ImageURL]:{id:w.ImageURL,displayName:"Image URL",scope:L.Property,description:"Link to image file",category:F.Content,applicableDataTypes:["string"],hasConfig:!0},[w.FileURL]:{id:w.FileURL,displayName:"File URL",scope:L.Property,description:"Link to file attachment",category:F.Content,applicableDataTypes:["string"],hasConfig:!0},[w.Status]:{id:w.Status,displayName:"Record Status",scope:L.Property,description:"Current state of record",category:F.Business,applicableDataTypes:["string"],hasConfig:!0},[w.Currency]:{id:w.Currency,displayName:"Currency",scope:L.Property,description:"Monetary value with currency",category:F.Business,applicableDataTypes:["number","string"],hasConfig:!0},[w.SKU]:{id:w.SKU,displayName:"SKU",scope:L.Property,description:"Product identification code",category:F.Business,applicableDataTypes:["string"],hasConfig:!0},[w.Email]:{id:w.Email,displayName:"Email",scope:L.Property,description:"Email address",category:F.Contact,applicableDataTypes:["string"],hasConfig:!0},[w.Phone]:{id:w.Phone,displayName:"Phone",scope:L.Property,description:"Phone number",category:F.Contact,applicableDataTypes:["string"],hasConfig:!0},[w.URL]:{id:w.URL,displayName:"URL",scope:L.Property,description:"Web address or link",category:F.Contact,applicableDataTypes:["string"],hasConfig:!0},[w.ClientIPAddress]:{id:w.ClientIPAddress,displayName:"Client IP Address",scope:L.Property,description:"Automatically populated client IP address",category:F.Contact,applicableDataTypes:["string"],hasConfig:!1},[w.PublicUniqueName]:{id:w.PublicUniqueName,displayName:"Public Unique Name (Slug)",scope:L.Property,description:"URL-friendly unique identifier",category:F.Organization,applicableDataTypes:["string"],hasConfig:!0},[w.Tags]:{id:w.Tags,displayName:"Tags",scope:L.Association,description:"Enable tagging functionality",category:F.Organization,hasConfig:!0},[w.Categories]:{id:w.Categories,displayName:"Categories",scope:L.Association,description:"Enable categorization functionality",category:F.Organization,hasConfig:!0},[w.GeospatialCoordinates]:{id:w.GeospatialCoordinates,displayName:"Geospatial Coordinates",scope:L.Property,description:"Location coordinates",category:F.Location,applicableDataTypes:["string"],hasConfig:!0},[w.Calculated]:{id:w.Calculated,displayName:"Calculated",scope:L.Property,description:"Auto-calculated field value",category:F.Computed,applicableDataTypes:["string","number","boolean","date","datetime","time","binary"],hasConfig:!0},[w.Derived]:{id:w.Derived,displayName:"Derived",scope:L.Property,description:"Value derived from other fields",category:F.Computed,applicableDataTypes:["string"],hasConfig:!0}};var Ss;(function(o){o[o.Initializing=0]="Initializing",o[o.PendingDns=1]="PendingDns",o[o.Issuing=2]="Issuing",o[o.Active=3]="Active",o[o.Error=4]="Error"})(Ss||(Ss={}));var ce=class o extends Error{static E_VALIDATION_ERROR="E_VALIDATION_ERROR";code=o.E_VALIDATION_ERROR;issues;constructor(e,t){let r=e[0];super(t??`Validation failed: ${r?.path??""} - ${r?.message??""}`),this.name="OperationValidationException",this.issues=e,Error.captureStackTrace&&Error.captureStackTrace(this,o)}};function ui(o,e){if(o==="-")return;let t=new ce([{message:"Invalid pointer",path:`/${o}`}]),{length:r}=o;if(r>1&&o[0]==="0")throw t;let i=+o;if(Number.isNaN(i)||Math.abs(i).toString()!==o||i<0||i>e)throw t}function Wt(o,e){let{length:t}=e,r=o,i;for(let s=0;s<t-1;s++){if(i=e[s],Array.isArray(r))ui(i,r.length);else if(typeof r!="object"||r===null)throw new Error("Cannot be walked");r instanceof Map?r=r.get(i):r instanceof Set?r=Array.from(r)[+i]:r=r[i]}if(i=e[t-1],Array.isArray(r))ui(i,r.length);else if(typeof r!="object"||r===null)throw new Error("Invalid target");return{token:i,parent:r}}function Ke(o,e){let t=e.tokens,r=t.length;if(r===0||r===1&&t[0]==="")throw new ce([{message:"Cannot walk empty path.",path:e.raw}]);try{let i=Wt(o,t);return{token:i.token,parent:i.parent}}catch{throw new ce([{message:"Path not found.",path:e.raw}])}}var Yo=["boolean","string","number","null"];function At(o){let e=typeof o;if(e==="boolean"||e==="string")return e;if(e==="number"&&Number.isFinite(o))return"number";if(e==="object"){if(Array.isArray(o)||o instanceof Set)return"array";if(o instanceof Map)return"object";if(o===null)return"null";if(e==="object")return"object"}}function hi(o){return o===void 0?!0:Yo.includes(o)}function Pa(o,e="/"){return o.replace(/~0/g,"~").replace(/~1/g,e)}function As(o,e="/"){let t="",r=o;typeof r=="number"&&(r=String(r));for(let i=0,s=r.length;i<s;i++){let a=r.charAt(i);a==="~"?t+="~0":a===e?t+="~1":t+=a}return t}function de(o,e="/"){let t="";for(let r=0,i=o.length;r<i;r++)t+=e+As(o[r],e);return t}function Je(o,e="/"){if(Array.isArray(o))return o;if(o.length===0)return[];if(o.charAt(0)!==e)throw new ce([{message:"Invalid pointer.",path:o}]);let t=[""],r=0;for(let i=1,s=o.length;i<s;i++){let a=o.charAt(i);if(a===e){let n=t[t.length-1];if(n==="constructor"||n==="__proto__")throw new Error("Prototype pollution attempt");t.push(""),r++}else a==="~"?o.charAt(i+1)==="1"?(t[r]+=e,i++):o.charAt(i+1)==="0"?(t[r]+="~",i++):t[r]+=a:t[r]+=a}return t}function mi(o,e,t){let r,i;return typeof o=="string"?r=Je(o,t):r=o,typeof e=="string"?i=[e]:i=e,de(r.concat(i),t)}function Zo(o,e){if(o instanceof Set){let t=0;for(let r of o)e(r,t+=1)}else if(Array.isArray(o)||o instanceof Map)o.forEach(e);else if(typeof o=="object"&&o!==null)Object.keys(o).forEach(t=>{e(o[t],t)});else throw new TypeError(`${o} is not a structure`)}function Oa(o,e,t,r){r(o,e,t),!(o===null||typeof o!="object")&&Zo(o,(i,s)=>{Oa(i,s,o,r)})}function fi(o,e){let t=Object.create(null);function r(s){for(let a in t)if(t[a]===s)return a}function i(s,a,n){let l=mi(n&&r(n),a);t[l]=s}Oa(o,void 0,void 0,(s,a,n)=>{if(s!==null&&typeof s=="object"&&(n===void 0||a===void 0?i(s,[],""):i(s,a.toString(),n)),a===void 0||n===void 0)e(s,"");else{let l=r(n);e(s,mi(l,a.toString()),n,l)}})}var te=class o{_raw="";_tokens=[];_separator;_index;_parent;constructor(e,t="/"){if(e instanceof o&&e.separator===t)return e;this._separator=t,Array.isArray(e)?(this._tokens=e,this._raw=de(e,this._separator)):typeof e=="string"?(this._raw=e,this._tokens=Je(e,this._separator)):(this._raw=e._raw,this._tokens=e._tokens)}get raw(){return this._raw}get tokens(){return[...this._tokens]}get separator(){return this._separator}getToken(e){return e<0||e>=this._tokens.length?null:this._tokens[e]}getParent(){return this._parent!==void 0?this._parent:(this._tokens.length===0||this._tokens.length===1&&this._tokens[0]===""?this._parent=null:this._parent=new o(this._tokens.slice(0,-1),this._separator),this._parent)}isRoot(){return this._tokens.length===0||this._tokens[0]===""}append(e){return new o([...this._tokens,String(e)],this._separator)}prefix(e){if(e<0||e>this._tokens.length)throw new Error("Levels out of bound.");return new o(this._tokens.slice(0,e),this._separator)}escape(e){return As(e,this._separator)}unescape(e){return Pa(e,this._separator)}static encode(e,t="/"){return de(e,t)}encode(e=this._separator){return de(this._tokens,e)}static decode(e,t="/"){return Je(e,t)}find(e){let{tokens:t}=this;if(t.length===0)return e;let r;try{r=Wt(e,t)}catch{return}let{token:i,parent:s}=r;return s[i]}findValue(e){return this.isRoot()?e:this.find(e)}findParentValue(e){return this.isRoot()?e:this.getParent().find(e)}static find(e,t){return new o(t).find(e)}findAndTest(e,t){let r=this.find(e);return{found:r!==void 0,value:r,equal:r===t}}static isValidArrayToken(e,t){if(e==="-")return;let r=new ce([{message:"Invalid pointer.",path:`/${e}`}]),{length:i}=e;if(i>1&&e[0]==="0")throw r;let s=+e;if(Number.isNaN(s)||Math.abs(s).toString()!==e||s<0||s>t)throw r}getIndex(){if(this._index!==void 0)return this._index;let e=this._tokens;if(e.length===0)return null;let t=e[e.length-1];if(t==="-")return-1;let r=parseInt(t,10);return isNaN(r)?null:r}static getIndex(e){return new o(e).getIndex()}setIndex(e){let t=this._tokens,r=t[t.length-1];if(r===void 0)return new o(`/${e}`,this._separator);if(isNaN(+r))return new o([...t,e.toString()],this._separator);let i=Array.from(t);return i[i.length-1]=e.toString(),new o(i,this._separator)}static index(e){let t=Object.create(null);return fi(e,(r,i)=>{t[i]=r}),t}static join(e,t,r){let i,s;if(typeof e=="string"?i=Je(e,r):i=e,typeof t=="string"){if(!t)return de(i,r);let a=t,n=r||"/";a.startsWith(n)||(a=`${n}${a}`),s=Je(a,r)}else s=t;return de(i.concat(s),r)}static unflatten(e){let t=Object.keys(e),r=e[""];for(let i of t){if(i==="")continue;let s=Je(i),a=Wt(r,s),{parent:n,token:l}=a;n instanceof Map?n.set(l,e[i]):n instanceof Set?n.add(e[i]):Array.isArray(n)?n.push(e[i]):n[l]=e[i]}return r}static flatten(e){let t=Object.create(null);return fi(e,(r,i)=>{let s;Array.isArray(r)?s=[]:r instanceof Map?s=new Map:r instanceof Set?s=new Set:typeof r=="object"&&r!==null?s={}:s=r,t[i]=s}),t}equals(e){return e?["","/"].includes(this._raw)&&["/",""].includes(e._raw)?!0:this.raw===e.raw:!1}isAfter(e){let t=e.getIndex(),r=this.getIndex();return t===null||r===null||t===-1||r===-1?!1:t<r}isAfterOrAt(e){let t=e.getIndex(),r=this.getIndex();return t===null||r===null||t===-1||r===-1?!1:t!==null&&r!==null&&t<=r}contains(e){if(this.isRoot())return!0;let t=e.tokens;if(t.length<=this._tokens.length)return!1;for(let r=0;r<this._tokens.length;r++)if(this._tokens[r]!==t[r])return!1;return!0}parentEquals(e){let t=this.getParent();return t&&e?t.equals(e):t===e}};function Rt(o,e){let t=new te(e);if(t.tokens.length===0||t.tokens.length===1&&t.tokens[0]==="")return o;let{parent:r,token:i}=Ke(o,t);if(Array.isArray(r))te.isValidArrayToken(i,r.length);else if(typeof r=="object"&&r!==null&&!(i in r))throw new ce([{path:`/${i}`,message:"The target does not exists."}]);return r[i]}function We(o,e,t){let r=new te(e),i=structuredClone(t);if(r.tokens.length===0||r.tokens.length===1&&r.tokens[0]==="")return{doc:i,previous:o};let{token:s,parent:a}=Ke(o,r),n,l;if(Array.isArray(a))s==="-"?(a.push(i),l=a.length-1):a.splice(parseInt(s,10),0,i);else{n=a[s];let c=a;c[s]=i}return{doc:o,previous:n,idx:l}}function mt(o,e){let t=new te(e);if(t.tokens.length===0||t.tokens.length===1&&t.tokens[0]==="")return{doc:void 0,previous:o};let{parent:r,token:i}=Ke(o,t),s=r[i];if(s===void 0)throw new ce([{message:"Parent does not exists.",path:t.raw}]);return Array.isArray(r)?r.splice(parseInt(i,10),1):delete r[i],{doc:o,previous:s}}function Xt(o,e,t){let r=new te(e),i=structuredClone(t);if(r.tokens.length===0||r.tokens.length===1&&r.tokens[0]==="")return{doc:i,previous:o};let{parent:s,token:a}=Ke(o,r),n=s[a];if(n===void 0)throw new ce([{message:"Location not found.",path:r.raw}]);return s[a]=i,{doc:o,previous:n}}function vr(o,e,t){let r=new te(e),i=new te(t);if(r.tokens.length===0||r.tokens.length===1&&r.tokens[0]==="")return{doc:mt(o,r).previous,previous:o};let s=mt(o,r);return We(s.doc,i,s.previous)}function Yt(o,e,t){let r=new te(e),i=new te(t),s=Rt(o,r);return e===""||e==="/"?{doc:s,previous:o}:We(o,i,s)}function Ca(o){let e=[];return o.forEach(t=>{e.push(t)}),e}function Ra(o){let e=Object.create(null);return o.forEach((t,r)=>{e[r]=t}),e}function xs(o,e,t,r){let i=At(o),s=At(e);if(i!==s)return!1;switch(i){case"number":return o===0&&1/o===-1/0?e===0&&1/e===-1/0:o===e;case"string":case"null":case"boolean":return o===e;default:}let a,n,l=t.indexOf(o);if(l!==-1)return r[l]===e;if(t.push(o),r.push(e),i==="array"){o instanceof Set&&(o=Ca(o)),e instanceof Set&&(e=Ca(e));let c=o,p=e;if(c.length!==p.length)return t.pop(),r.pop(),!1;for(a=0,n=c.length;a<n;a++)if(!xs(c[a],p[a],t,r))return t.pop(),r.pop(),!1;return!0}if(i==="object"){o instanceof Map&&(o=Ra(o)),e instanceof Map&&(e=Ra(e));let c=o,p=e,u=Object.keys(c),h=Object.keys(p);if(u.length!==h.length)return t.pop(),r.pop(),!1;for(u.sort(),h.sort(),a=0,n=u.length;a<n;a++){let m=u[a],f=h[a];if(m!==f||!Object.prototype.hasOwnProperty.call(p,m)||!xs(c[m],p[m],t,r))return t.pop(),r.pop(),!1}return t.pop(),r.pop(),!0}return t.pop(),r.pop(),!0}function Xe(o,e){return xs(o,e,[],[])}function Ta(o){let e=o.command("catalog").description("Manage Data Catalog items");e.command("publish").description("Publish a data domain file to the data catalog").option("--file <fid>","File ID of the data domain").option("--name <name>","Name for the catalog entry").option("--description <desc>","Description of the catalog entry").option("--scope <scope>","Publish scope: public, organization, private").option("-v, --catalog-version <ver>","Semantic version (e.g. 1.0.0)").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--lifecycle <lifecycle>","Version lifecycle status (dev, beta, stable)","stable").option("--changelog <changelog>","Changelog description for this version").action(async t=>{let r=new B({format:O.resolved.format}),i=O.resolved;v.debug(`[catalog:publish] Starting publish flow with options: file=${t.file}, name=${t.name}, scope=${t.scope}, version=${t.catalogVersion}, org=${t.org||i.org}, lifecycle=${t.lifecycle}`);let s=t.org||i.org;s||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1));let a=t.file;if(!a&&process.stdout.isTTY){v.debug("[catalog:publish] File ID not provided; listing data domain files for selection...");try{let m=ee(),k=(await m.files.list(s,{filter:{field:"kind",operator:"eq",value:vt}},{token:m.token})).data||[];k.length>0&&(a=await ut("Select a data domain file to publish:",k.map(b=>({name:`${b.info?.name||"Unnamed"} (${b.key})`,value:b.key}))))}catch{}}a||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID is required.",detail:"Specify --file <fid>."}),process.exit(1));let n=t.name;!n&&process.stdout.isTTY&&(n=await Fe("Enter catalog entry name:")),n||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Name is required.",detail:"Specify --name <name>."}),process.exit(1));let l=t.description;!l&&process.stdout.isTTY&&(l=await Fe("Enter catalog entry description:")),l||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Description is required.",detail:"Specify --description <desc>."}),process.exit(1));let c=t.scope;!c&&process.stdout.isTTY&&(c=await ut("Select publish scope:",[{name:"Public (public)",value:"public"},{name:"Organization (organization)",value:"organization"},{name:"Private (private)",value:"private"}])),c||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Scope is required.",detail:"Specify --scope <scope> (allowed: public, organization, private)."}),process.exit(1));let p=["public","organization","private"];p.includes(c)||(r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid scope '${c}'.`,detail:`Allowed: ${p.join(", ")}`}),process.exit(1));let u=t.catalogVersion;!u&&process.stdout.isTTY&&(u=await Fe("Enter semantic version:","1.0.0")),u||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Version is required.",detail:"Specify --catalog-version <ver> or -v <ver>."}),process.exit(1));let h=["dev","beta","stable"];h.includes(t.lifecycle)||(r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid lifecycle '${t.lifecycle}'.`,detail:`Allowed: ${h.join(", ")}`}),process.exit(1));try{let m=ee(),f=null;v.debug(`[catalog:publish] Checking publication status for file ID '${a}' in organization '${s}'...`);try{f=(await m.dataCatalog.checkPublicationStatus(a,s,{token:m.token})).key,v.debug(`[catalog:publish] Found existing catalog entry key: ${f}`)}catch(y){if(ie(y).status!==404)throw y;v.debug("[catalog:publish] Catalog entry does not exist yet.")}if(f)v.debug(`[catalog:publish] Using existing catalog entry key: ${f}`),O.resolved.format!=="json"&&console.log(`Catalog entry already exists (ID: ${f}). Publishing new version...`);else{v.debug("[catalog:publish] Creating a new catalog entry..."),O.resolved.format!=="json"&&console.log("Catalog entry does not exist. Creating new catalog entry...");let y={key:"",kind:ct,organization:s,file:a,scope:c,name:n,description:l,publishedBy:"",publishedAt:0,createdAt:0,updatedAt:0,tags:[]};f=(await m.dataCatalog.publish(y,{token:m.token})).key,v.debug(`[catalog:publish] Created new catalog entry with key: ${f}`)}let k=wr.createSchema({scope:c,lifecycle:t.lifecycle,version:u,changelog:t.changelog||void 0});v.debug(`[catalog:publish] Publishing version '${u}' for catalog key '${f}'...`);let b=await m.dataCatalog.publishVersion(f,k,{token:m.token});v.debug(`[catalog:publish] Version published successfully. Version key: ${b.key}`),r.success(`Successfully published version '${u}' to the data catalog!`,b)}catch(m){let f=ie(m);r.error(f),process.exit(1)}}),e.command("list").description("List published data catalog items or versions of a specific catalog entry").option("--scope <scope>","Filter by scope: all, public, organization, private","all").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--key <key>","Data catalog item key to list all versions of a specific data domain").action(async t=>{let r=new B({format:O.resolved.format}),i=O.resolved,s=t.org||i.org;v.debug(`[catalog:list] Listing catalog with options: scope=${t.scope}, org=${s}, key=${t.key}`);let a=["all","public","organization","private"];a.includes(t.scope)||(r.error({message:`Invalid scope '${t.scope}'. Allowed: ${a.join(", ")}`}),process.exit(1)),["organization","private"].includes(t.scope)&&!s&&(r.error({message:`Organization ID (--org <oid>) is required when filtering by scope '${t.scope}'.`}),process.exit(1));try{let n=ee();if(t.key){v.debug(`[catalog:list] Fetching versions for catalog entry key '${t.key}'...`);let c=(await n.dataCatalog.listVersions(t.key,{token:n.token})).data||[];v.debug(`[catalog:list] Found ${c.length} versions.`);let p=c.map(u=>({key:u.key,version:u.version,published:new Date(u.published).toLocaleString()}));r.list(p,["key","version","published"],{headers:["VERSION KEY","VERSION","PUBLISHED AT"]})}else{let l=[];if(t.scope==="all"){v.debug("[catalog:list] Fetching public catalog entries...");let h=await n.dataCatalog.list({scope:"public",oid:s},{token:n.token});if(l.push(...h.data||[]),s){v.debug(`[catalog:list] Fetching organization catalog entries for org '${s}'...`);try{let m=await n.dataCatalog.list({scope:"organization",oid:s},{token:n.token});l.push(...m.data||[])}catch{v.debug("[catalog:list] Failed to fetch organization catalog entries.")}v.debug(`[catalog:list] Fetching private catalog entries for org '${s}'...`);try{let m=await n.dataCatalog.list({scope:"private",oid:s},{token:n.token});l.push(...m.data||[])}catch{v.debug("[catalog:list] Failed to fetch private catalog entries.")}}}else{v.debug(`[catalog:list] Fetching catalog entries for scope '${t.scope}' and org '${s}'...`);let h=await n.dataCatalog.list({scope:t.scope,oid:s},{token:n.token});l.push(...h.data||[])}v.debug(`[catalog:list] Total raw catalog entries fetched: ${l.length}`);let c=new Set,p=l.filter(h=>{let m=h.key;return c.has(m)?!1:(c.add(m),!0)});v.debug(`[catalog:list] Total unique catalog entries: ${p.length}`);let u=p.map(h=>{let m=h.versions&&h.versions[0]?h.versions[0].version:"N/A";return{key:h.key,name:h.name,scope:h.scope,lastVersion:m,organization:h.organization||"N/A"}});r.list(u,["key","name","scope","lastVersion","organization"],{headers:["KEY","NAME","SCOPE","LAST VERSION","ORGANIZATION"]})}}catch(n){let l=ie(n);r.error(l),process.exit(1)}})}import es from"node:fs";import co from"node:path";var Te=class{root;get domain(){return this.root}#e;get key(){return this.#e}#t;get namespace(){return this.#t}constructor(e,t){this.root=e,this.#e=t,this.#t=e.key}};var tl="http://a.ml/",ft=`${tl}vocabularies/`,K=`${ft}document#`,ae=`${ft}core#`,H=`${ft}security#`,P=`${ft}apiContract#`,_r=`${ft}apiBinding#`,U=`${ft}shapes#`,pe=`${ft}data#`,qe=`${ft}document-source-maps#`,Sr="http://www.w3.org/",re=`${Sr}ns/shacl#`,xe=`${Sr}2001/XMLSchema#`,gi=`${Sr}1999/02/22-rdf-syntax-ns#`,Es=`${Sr}2000/01/rdf-schema#`,d={aml:{key:"http://a.ml/",vocabularies:{key:ft,document:{key:K,Module:`${K}Module`,Document:`${K}Document`,Fragment:`${K}Fragment`,Unit:`${K}Unit`,SecuritySchemeFragment:`${K}SecuritySchemeFragment`,UserDocumentation:`${K}UserDocumentation`,DataType:`${K}DataType`,NamedExamples:`${K}NamedExamples`,DomainElement:`${K}DomainElement`,DomainProperty:`${K}DomainProperty`,ParametrizedDeclaration:`${K}ParametrizedDeclaration`,AbstractDeclaration:`${K}AbstractDeclaration`,VariableValue:`${K}VariableValue`,ExternalFragment:`${K}ExternalFragment`,ExternalDomainElement:`${K}ExternalDomainElement`,RootDomainElement:`${K}RootDomainElement`,APIContractProcessingData:`${K}APIContractProcessingData`,BaseUnitProcessingData:`${K}BaseUnitProcessingData`,customDomainProperties:`${K}customDomainProperties`,encodes:`${K}encodes`,declares:`${K}declares`,references:`${K}references`,examples:`${K}examples`,linkTarget:`${K}link-target`,linkLabel:`${K}link-label`,referenceId:`${K}reference-id`,structuredValue:`${K}structuredValue`,raw:`${K}raw`,extends:`${K}extends`,value:`${K}value`,name:`${K}name`,strict:`${K}strict`,deprecated:`${K}deprecated`,location:`${K}location`,variable:`${K}variable`,target:`${K}target`,dataNode:`${K}dataNode`,root:`${K}root`,usage:`${K}usage`,version:`${K}version`},core:{key:ae,CreativeWork:`${ae}CreativeWork`,Parameter:`${ae}Parameter`,Organization:`${ae}Organization`,License:`${ae}License`,Operation:`${ae}Operation`,Response:`${ae}Response`,Payload:`${ae}Payload`,Request:`${ae}Request`,version:`${ae}version`,urlTemplate:`${ae}urlTemplate`,displayName:`${ae}displayName`,title:`${ae}title`,name:`${ae}name`,description:`${ae}description`,documentation:`${ae}documentation`,summary:`${ae}summary`,provider:`${ae}provider`,email:`${ae}email`,url:`${ae}url`,termsOfService:`${ae}termsOfService`,license:`${ae}license`,mediaType:`${ae}mediaType`,extensionName:`${ae}extensionName`,deprecated:`${ae}deprecated`},security:{key:H,ParametrizedSecurityScheme:`${H}ParametrizedSecurityScheme`,SecuritySchemeFragment:`${H}SecuritySchemeFragment`,SecurityScheme:`${H}SecurityScheme`,OAuth1Settings:`${H}OAuth1Settings`,OAuth2Settings:`${H}OAuth2Settings`,OAuth2Flow:`${H}OAuth2Flow`,Scope:`${H}Scope`,Settings:`${H}Settings`,HttpSettings:`${H}HttpSettings`,ApiKeySettings:`${H}ApiKeySettings`,OpenIdConnectSettings:`${H}OpenIdConnectSettings`,SecurityRequirement:`${H}SecurityRequirement`,security:`${H}security`,scheme:`${H}scheme`,schemes:`${H}schemes`,settings:`${H}settings`,name:`${H}name`,type:`${H}type`,scope:`${H}scope`,accessTokenUri:`${H}accessTokenUri`,authorizationUri:`${H}authorizationUri`,authorizationGrant:`${H}authorizationGrant`,flows:`${H}flows`,flow:`${H}flow`,signature:`${H}signature`,tokenCredentialsUri:`${H}tokenCredentialsUri`,requestTokenUri:`${H}requestTokenUri`,refreshUri:`${H}refreshUri`,securityRequirement:`${H}SecurityRequirement`,openIdConnectUrl:`${H}openIdConnectUrl`,bearerFormat:`${H}bearerFormat`,in:`${H}in`},apiContract:{key:P,Payload:`${P}Payload`,Request:`${P}Request`,Response:`${P}Response`,EndPoint:`${P}EndPoint`,Parameter:`${P}Parameter`,Operation:`${P}Operation`,WebAPI:`${P}WebAPI`,API:`${P}API`,AsyncAPI:`${P}AsyncAPI`,UserDocumentationFragment:`${P}UserDocumentationFragment`,Example:`${P}Example`,Server:`${P}Server`,ResourceType:`${P}ResourceType`,Trait:`${P}Trait`,TraitFragment:`${P}TraitFragment`,ParametrizedResourceType:`${P}ParametrizedResourceType`,ParametrizedTrait:`${P}ParametrizedTrait`,Callback:`${P}Callback`,TemplatedLink:`${P}TemplatedLink`,IriTemplateMapping:`${P}IriTemplateMapping`,Tag:`${P}Tag`,Message:`${P}Message`,DomainExtension:`${P}DomainExtension`,Encoding:`${P}Encoding`,header:`${P}header`,parameter:`${P}parameter`,paramName:`${P}paramName`,uriParameter:`${P}uriParameter`,cookieParameter:`${P}cookieParameter`,variable:`${P}variable`,payload:`${P}payload`,server:`${P}server`,path:`${P}path`,url:`${P}url`,scheme:`${P}scheme`,endpoint:`${P}endpoint`,queryString:`${P}queryString`,accepts:`${P}accepts`,guiSummary:`${P}guiSummary`,binding:`${P}binding`,response:`${P}response`,returns:`${P}returns`,expects:`${P}expects`,examples:`${P}examples`,supportedOperation:`${P}supportedOperation`,messageId:`${P}messageId`,statusCode:`${P}statusCode`,method:`${P}method`,required:`${P}required`,callback:`${P}callback`,expression:`${P}expression`,link:`${P}link`,linkExpression:`${P}linkExpression`,templateVariable:`${P}templateVariable`,mapping:`${P}mapping`,operationId:`${P}operationId`,protocol:`${P}protocol`,protocolVersion:`${P}protocolVersion`,headerSchema:`${P}headerSchema`,contentType:`${P}contentType`,allowEmptyValue:`${P}allowEmptyValue`,style:`${P}style`,explode:`${P}explode`,allowReserved:`${P}allowReserved`,tag:`${P}tag`,tags:`${P}tags`},apiBinding:{key:_r,binding:`${_r}binding`,bindings:`${_r}bindings`,messageKey:`${_r}messageKey`,type:`${_r}type`},shapes:{key:U,Shape:`${U}Shape`,ScalarShape:`${U}ScalarShape`,ArrayShape:`${U}ArrayShape`,UnionShape:`${U}UnionShape`,NilShape:`${U}NilShape`,FileShape:`${U}FileShape`,AnyShape:`${U}AnyShape`,SchemaShape:`${U}SchemaShape`,MatrixShape:`${U}MatrixShape`,TupleShape:`${U}TupleShape`,RecursiveShape:`${U}RecursiveShape`,DataTypeFragment:`${U}DataTypeFragment`,XMLSerializer:`${U}XMLSerializer`,number:`${U}number`,integer:`${U}integer`,long:`${U}long`,double:`${U}double`,boolean:`${U}boolean`,float:`${U}float`,nil:`${U}nil`,password:`${U}password`,int32:`${U}int32`,int64:`${U}int64`,uint32:`${U}uint32`,uint64:`${U}uint64`,sint32:`${U}sint32`,sint64:`${U}sint64`,fixed32:`${U}fixed32`,fixed64:`${U}fixed64`,sfixed32:`${U}sfixed32`,sfixed64:`${U}sfixed64`,dateTimeOnly:`${U}dateTimeOnly`,range:`${U}range`,items:`${U}items`,anyOf:`${U}anyOf`,fileType:`${U}fileType`,schema:`${U}schema`,xmlSerialization:`${U}xmlSerialization`,xmlName:`${U}xmlName`,xmlAttribute:`${U}xmlAttribute`,xmlWrapped:`${U}xmlWrapped`,xmlNamespace:`${U}xmlNamespace`,xmlPrefix:`${U}xmlPrefix`,readOnly:`${U}readOnly`,writeOnly:`${U}writeOnly`,deprecated:`${U}deprecated`,fixPoint:`${U}fixPoint`,discriminator:`${U}discriminator`,discriminatorValue:`${U}discriminatorValue`,format:`${U}format`,multipleOf:`${U}multipleOf`,uniqueItems:`${U}uniqueItems`},data:{key:pe,Scalar:`${pe}Scalar`,Object:`${pe}Object`,Array:`${pe}Array`,Node:`${pe}Node`,value:`${pe}value`,type:`${pe}type`,description:`${pe}description`,required:`${pe}required`,displayName:`${pe}displayName`,minLength:`${pe}minLength`,maxLength:`${pe}maxLength`,default:`${pe}default`,multipleOf:`${pe}multipleOf`,minimum:`${pe}minimum`,maximum:`${pe}maximum`,enum:`${pe}enum`,pattern:`${pe}pattern`,items:`${pe}items`,format:`${pe}format`,example:`${pe}example`,examples:`${pe}examples`},docSourceMaps:{key:qe,SourceMap:`${qe}SourceMap`,sources:`${qe}sources`,element:`${qe}element`,value:`${qe}value`,declaredElement:`${qe}declared-element`,trackedElement:`${qe}tracked-element`,parsedJsonSchema:`${qe}parsed-json-schema`,autoGeneratedName:`${qe}auto-generated-name`,lexical:`${qe}lexical`,synthesizedField:`${qe}synthesized-field`}}},w3:{key:Sr,shacl:{key:re,Shape:`${re}Shape`,NodeShape:`${re}NodeShape`,SchemaShape:`${re}SchemaShape`,PropertyShape:`${re}PropertyShape`,in:`${re}in`,defaultValue:`${re}defaultValue`,defaultValueStr:`${re}defaultValueStr`,pattern:`${re}pattern`,minInclusive:`${re}minInclusive`,maxInclusive:`${re}maxInclusive`,multipleOf:`${re}multipleOf`,minLength:`${re}minLength`,maxLength:`${re}maxLength`,fileType:`${re}fileType`,and:`${re}and`,property:`${re}property`,name:`${re}name`,raw:`${re}raw`,datatype:`${re}datatype`,minCount:`${re}minCount`,maxCount:`${re}maxCount`,xone:`${re}xone`,not:`${re}not`,or:`${re}or`,closed:`${re}closed`,path:`${re}path`,additionalPropertiesSchema:`${re}additionalPropertiesSchema`},xmlSchema:{key:xe,boolean:`${xe}boolean`,string:`${xe}string`,number:`${xe}number`,integer:`${xe}integer`,long:`${xe}long`,double:`${xe}double`,float:`${xe}float`,nil:`${xe}nil`,dateTime:`${xe}dateTime`,time:`${xe}time`,date:`${xe}date`,base64Binary:`${xe}base64Binary`,byte:`${xe}byte`},rdfSyntax:{key:gi,Seq:`${gi}Seq`,Property:`${gi}Property`,member:`${gi}member`},rdfSchema:{key:Es,Seq:`${Es}Seq`,member:`${Es}member`}}};function Zt(o,e=0){if(typeof o!="object")return o;let t="",r=new Array(e).fill(" ").join("");return Object.keys(o).forEach(i=>{t+=Array.isArray(o[i])?"":`${r}<${i}>`,Array.isArray(o[i])?o[i].forEach(s=>{t+=r,t+=`<${i}>
|
|
28
|
-
`,t+=
|
|
29
|
-
`}):typeof o[
|
|
30
|
-
`,t+=
|
|
31
|
-
`}),t=t.replace(/<\/?[0-9]{1,}>/g,""),t}function
|
|
18
|
+
`))>=0;){let I=f.slice(0,S);if(f=f.slice(S+2),!I.trim())continue;let D=I.split(`
|
|
19
|
+
`),w="message",v="";for(let R of D)R.startsWith("event:")?w=R.substring(6).trim():R.startsWith("data:")&&(v+=R.substring(5).trim());if(!v)continue;let E;try{E=JSON.parse(v)}catch{console.error("Failed to parse SSE JSON data:",v);continue}switch(w){case"user-message":yield{event:w,data:E};break;case"agent-message":yield{event:w,data:E};break;case"thought-chunk":case"text-chunk":yield{event:w,data:E};break;case"done":yield{event:w,data:E};return;case"error":yield{event:w,data:g.fromRawException(E,"Failed to generate results")};break;case"session-updated":yield{event:w,data:E};break;default:console.warn(`Unknown SSE event: ${w}`)}}}}sessions={list:async(e,t,i={},r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiSessions(e,t));this.sdk.appendListOptions(n,i);let l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to list sessions. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},read:async(e,t,i,r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiSession(e,t,i)),l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to read session. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body).data}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(p.kind!==_i)throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},create:async(e,t,i,r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiSessions(e,t)),l=JSON.stringify(i),c=await this.sdk.http.post(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to create session. ";if(c.status!==201)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(u.kind!==_i)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u},delete:async(e,t,i,r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiSession(e,t,i)),l=await this.sdk.http.delete(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to delete session. ";if(l.status!==204)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body)},update:async(e,t,i,r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiSession(e,t,i.key)),l=JSON.stringify(i),c=await this.sdk.http.put(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to update session. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(u.kind!==_i)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}};messages={list:async(e,t,i={},r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiMessages(e,t));this.sdk.appendListOptions(n,i);let l=await this.sdk.http.get(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to list messages. ";if(l.status!==200)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body);if(!l.body)throw new g(`${c}${U}`,{code:"E_RESPONSE_NO_VALUE",status:l.status});let p;try{p=JSON.parse(l.body)}catch{throw new g(`${c}${V}`,{code:"E_INVALID_JSON",status:l.status})}if(!Array.isArray(p.data))throw new g(`${c}${F}`,{code:"E_RESPONSE_UNKNOWN",status:l.status});return p},delete:async(e,t,i,r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiMessage(e,t,i)),l=await this.sdk.http.delete(n.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(l);let c="Unable to delete message. ";if(l.status!==204)throw this.logInvalidResponse(l),this.createApiError(`${c}${x}${l.status}`,l.body)},update:async(e,t,i,r={})=>{let{token:s=this.sdk.token,retry:a=!0}=r,n=this.sdk.getUrl(A.aiMessage(e,t,i.key)),l=JSON.stringify(i),c=await this.sdk.http.put(n.toString(),{token:s,body:l,retry:a});this.inspectCommonStatusCodes(c);let p="Unable to update message. ";if(c.status!==200)throw this.logInvalidResponse(c),this.createApiError(`${p}${x}${c.status}`,c.body);if(!c.body)throw new g(`${p}${U}`,{code:"E_RESPONSE_NO_VALUE",status:c.status});let u;try{u=JSON.parse(c.body).data}catch{throw new g(`${p}${V}`,{code:"E_INVALID_JSON",status:c.status})}if(u.kind!==ks)throw new g(`${p}${F}`,{code:"E_RESPONSE_UNKNOWN",status:c.status});return u}}};var xs;(function(o){o.Pending="pending",o.Active="active",o.Inactive="inactive",o.Failed="failed"})(xs||(xs={}));var ei;(function(o){o.PROD="prod",o.STAGING="staging",o.DEV="dev"})(ei||(ei={}));var pr=class extends te{async list(e,t={},i={}){let{token:r=this.sdk.token,retry:s=!0}=i,a=this.sdk.getUrl(A.deployments(e));this.sdk.appendListOptions(a,t);let n=await this.sdk.http.get(a.toString(),{token:r,retry:s});return this.processListResponse(n,"Unable to list deployments. ")}async create(e,t,i={}){if(t.env===ei.PROD&&!t.version)throw new g(`Version must not be empty for production environment: ${t.env}`,{code:"INVALID_DEPLOYMENT_VERSION",help:"Please provide a version for production environment",status:400});if(t.env!==ei.PROD&&t.version)throw new g(`Version must not be present for non-production environment: ${t.env}`,{code:"INVALID_DEPLOYMENT_VERSION",help:"Please remove the version for non-production environment",status:400});let r=this.sdk.getUrl(A.deployments(e)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.post(r.toString(),{token:s,body:JSON.stringify(t),retry:a,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(n);let l="Unable to create a deployment. ";if(n.status!==202)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Qt,c.kind),c}async read(e,t,i={}){let r=this.sdk.getUrl(A.deployment(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.get(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to read a deployment. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Qt,c.kind),c}async deactivate(e,t,i={}){let r=this.sdk.getUrl(A.deployment(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.delete(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to deactivate a deployment. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Qt,c.kind),c}async rollback(e,t,i={}){let r=this.sdk.getUrl(A.rollback(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.post(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to rollback a deployment. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,Qt,c.kind),c}apis={getLatestPerEnvironment:async(e,t,i={})=>{let r=this.sdk.getUrl(A.deploymentsApisByEnvLatest(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.get(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to list latest deployments for an API. ",c=this.readResponseJSON(n,l);if(!c.data)throw new g(`${l}${F}`,{code:"E_RESPONSE_UNKNOWN",status:n.status});return c},list:async(e,t={})=>{let i=this.sdk.getUrl(A.deploymentsApis(e)),{token:r=this.sdk.token,retry:s=!0}=t,a=await this.sdk.http.get(i.toString(),{token:r,retry:s});return this.processListResponse(a,"Unable to list APIs. ")},listDeployments:async(e,t,i={},r={})=>{let s=this.sdk.getUrl(A.deploymentsForApi(e,t));this.sdk.appendListOptions(s,i);let{token:a=this.sdk.token,retry:n=!0}=r,l=await this.sdk.http.get(s.toString(),{token:a,retry:n});return this.processListResponse(l,"Unable to list deployments. ")},updateRuntimeUser:async(e,t,i,r,s="production",a={})=>{let n=this.sdk.getUrl(A.deploymentsApiRuntimeUsersUpdate(e,t)),{token:l=this.sdk.token,retry:c=!0}=a,p=JSON.stringify({userId:i,properties:r,env:s}),u=await this.sdk.http.post(n.toString(),{token:l,body:p,retry:c,headers:{"content-type":"application/json"}});this.inspectCommonStatusCodes(u);let h="Unable to update runtime user. ";if(u.status!==200)throw this.logInvalidResponse(u),this.createApiError(`${h}${x}${u.status}`,u.body);if(!u.body)throw new g(`${h}${U}`,{code:"E_RESPONSE_NO_VALUE",status:u.status});return this.readResponseJSON(u,h)}}};var Ns;(function(o){o.Pending="pending",o.Running="running",o.Completed="completed",o.Failed="failed"})(Ns||(Ns={}));var ur=class extends te{async checkStatus(e,t,i={}){let r=this.sdk.getUrl(A.job(e,t)),{token:s=this.sdk.token,retry:a=!0}=i,n=await this.sdk.http.get(r.toString(),{token:s,retry:a});this.inspectCommonStatusCodes(n);let l="Unable to check job status. ";if(n.status!==200)throw this.logInvalidResponse(n),this.createApiError(`${l}${x}${n.status}`,n.body);let c=this.readResponseJSON(n,l).data;return this.assertObjectKind(l,ws,c.kind),c}};var $s=Symbol("baseUri"),hr=class extends EventTarget{basePath;#e;logger;get token(){return this.#e}set token(e){this.#e=e}auth=new Zi(this);files=new ir(this);users=new rr(this);shared=new sr(this);revisions=new ar(this);trash=new nr(this);organizations=new or(this);dataCatalog=new lr(this);groups=new cr(this);ai=new dr(this);deployments=new pr(this);jobs=new ur(this);silent=!1;[$s]="";get baseUri(){return this[$s]}set baseUri(e){if(!e)throw new Error("Invalid value for the baseUri");let t;try{t=new URL(e)}catch{throw new Error("Invalid baseUri: Not an URL")}this[$s]=t.origin;let{pathname:i}=t;i&&i!=="/"?this.basePath=i:this.basePath=void 0}constructor(e,t){super(),this.basePath=t,this.baseUri=e}getUrl(e="/"){if(e.startsWith("http:")||e.startsWith("https:"))return new URL(e);let{baseUri:t,basePath:i=""}=this,r=e;return i&&r.startsWith(i)&&(r=r.substring(i.length)),new URL(`${i}${r}`,t)}appendListOptions(e,t={}){let{searchParams:i}=e;if(t.cursor&&i.set("cursor",t.cursor),typeof t.limit=="number"&&i.set("limit",String(t.limit)),t.parent&&i.set("parent",t.parent),t.since&&i.set("since",String(t.since)),t.sort&&i.set("sort",String(t.sort)),t.order&&i.set("order",String(t.order)),t.oid&&i.set("oid",String(t.oid)),t.uid&&i.set("uid",String(t.uid)),t.filter){let r=new TextEncoder().encode(JSON.stringify(t.filter)),s=Array.from(r,a=>String.fromCodePoint(a)).join("");i.set("filter",btoa(s))}}};var mr=class extends hr{http=new Yi(this)};function X(o={}){let e=P.resolved,t=o.apiUrl||e.apiUrl,i=new mr(t);return e.token&&(i.token=e.token),i.logger=_,i}function Z(o){if(o&&typeof o=="object"){let t=o,i=t.status,r=t.code,s=t.message||"An unknown error occurred.",a=t.help;return i===401?(s="Unauthorized. Please login using `auth login`.",{message:s,status:i,code:"CLI_ERR_UNAUTHORIZED",help:a}):{message:s,status:i,code:r||"CLI_ERR_API_FAILURE",help:a}}return{message:o?.message||"An unknown error occurred.",code:"CLI_ERR_UNKNOWN"}}function Nt(o,e){return o.token||(e.error({code:"CLI_ERR_UNAUTHORIZED",message:"Not logged in.",detail:"Use `apinow auth login <provider>` to authenticate."}),process.exit(1)),o.token}import{input as Bo,confirm as Go,select as Ho}from"@inquirer/prompts";async function Ue(o,e){return(await Bo({message:o,default:e})).trim()}async function ja(o,e=!0){return Go({message:o,default:e})}async function yt(o,e){return Ho({message:o,choices:e})}async function js(o,e){let t;try{t=(await o.organizations.list({token:o.token})).data||[]}catch{return}if(t.length>0){if(!P.resolved.org){let a=t[0],n=a.key;P.writeProperty("org",n),e.format!=="json"&&console.log(`
|
|
20
|
+
`+Q.cyan(`\u2139 Automatically set default organization to "${a.name}" (${n}).`))}return}if(e.format==="json")return;console.log(`
|
|
21
|
+
`+Q.yellow("\u26A0 It looks like you do not have any organizations yet.")),console.log("Let's set up your first organization now.");let i="";for(;!i;)i=await Ue("Enter organization name:"),i||console.log(Q.red("Error: Organization name cannot be empty."));let r;try{r=await o.organizations.slugs.generate(i,{token:o.token})}catch{r=i.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}if(!await ja(`Use suggested organization slug "${r}"?`,!0)){let a=!1;for(;!a;){let n=await Ue("Enter organization slug:");if(!n){console.log(Q.red("Error: Slug cannot be empty."));continue}try{let l=await o.organizations.slugs.validate(n,{token:o.token});l.valid?(r=n,a=!0):console.log(Q.red(`Error: ${l.reason||"Invalid slug"}`))}catch{console.log(Q.red("Error validating slug with server. Please try another slug."))}}}console.log(`
|
|
22
|
+
Creating organization "${i}" with slug "${r}"...`);try{let n=(await o.organizations.create(i,r,{token:o.token})).key;P.writeProperty("org",n),console.log(`
|
|
23
|
+
`+Q.green(`\u2714 Organization "${i}" created successfully!`)),console.log(`Set as default organization: ${Q.cyan(n)}`)}catch(a){let n=Z(a);console.log(Q.red(`Error creating organization: ${n.message}`))}}function Wo(){let o=P.resolved.token;if(!o)return null;try{let e=o.split(".");if(e.length===3){let t=e[1],i=Buffer.from(t,"base64url").toString("utf8"),r=JSON.parse(i);if(r&&typeof r=="object")return r.jti||r.id||null}}catch{}return null}function Ia(o){let e=o.command("tokens").description("Manage personal access tokens");e.command("list").description("List all personal access tokens").action(async()=>{let t=new H({format:P.resolved.format});try{_.debug("[auth:tokens] Listing personal access tokens...");let i=X();Nt(i,t);let r=await i.users.listTokens({token:i.token});_.debug(`[auth:tokens] Retrieved ${r.length} personal access token(s)`);let s=Wo(),a=r.map(n=>({id:n.id,name:n.name||"N/A",lastUsedAt:n.lastUsedAt||"Never",expiresAt:n.expiresAt||"Never",active:n.id===s?"Yes":"No"}));t.list(a,["id","name","lastUsedAt","expiresAt","active"],{headers:["ID","NAME","LAST USED","EXPIRES","ACTIVE"]})}catch(i){let r=Z(i);t.error(r),process.exit(1)}}),e.command("create").description("Create a new personal access token").option("--name <name>","Optional name to identify the token").option("--expires-at <expires>",'Optional expiration time (e.g. "30 days", "10 minutes", or timestamp)').action(async t=>{let i=new H({format:P.resolved.format});try{_.debug(`[auth:tokens] Creating personal access token with name="${t.name||"default"}"`);let r=X();Nt(r,i);let s={};t.name&&(s.name=t.name),t.expiresAt&&(/^\d+$/.test(t.expiresAt)?s.expiresAt=parseInt(t.expiresAt,10):s.expiresAt=t.expiresAt);let a=await r.users.createToken(s,{token:r.token});_.debug(`[auth:tokens] Token created successfully with ID="${a.id}"`),P.resolved.format==="json"?i.success("Token created successfully!",a):(i.success("Token created successfully!"),console.log(`
|
|
24
|
+
`+Q.yellow("\u26A0 WARNING: Make sure to copy your personal access token now. You will NOT be able to see it again!")+`
|
|
25
|
+
`),console.log(`${Q.bold("Raw Token")}: ${Q.cyan(a.token)}`),console.log(`${Q.bold("ID")}: ${a.id}`),console.log(`${Q.bold("Name")}: ${a.name||"N/A"}`),console.log(`${Q.bold("Type")}: ${a.type}`),console.log(`${Q.bold("Expires At")}: ${a.expiresAt||"Never"}
|
|
26
|
+
`))}catch(r){let s=Z(r);i.error(s),process.exit(1)}}),e.command("delete <id>").description("Delete a personal access token by ID").action(async t=>{let i=new H({format:P.resolved.format});try{_.debug(`[auth:tokens] Deleting personal access token with ID="${t}"`);let r=X();Nt(r,i),await r.users.deleteToken(t,{token:r.token}),_.debug(`[auth:tokens] Successfully deleted token ID="${t}"`),i.success(`Token '${t}' deleted successfully.`)}catch(r){let s=Z(r);i.error(s),process.exit(1)}})}import{readFileSync as Qo}from"node:fs";function Pa(o){let e=o.command("auth").description("Manage CLI authentication");Ia(e),e.command("login").description("Authenticate with the API platform using OAuth2 (google, github, or linkedin)").addArgument(new Xo("provider","Authentication provider").choices(["google","github","linkedin"])).action(async t=>{let i=new H({format:P.resolved.format});_.debug(`[auth] Initiating authentication flow for provider '${t}'...`);let r=["google","github","linkedin"];r.includes(t)||(i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid provider '${t}'. Allowed: ${r.join(", ")}`}),process.exit(1));let s=P.resolved.apiUrl;P.resolved.format!=="json"&&console.log(`Starting authentication flow using provider '${t}'...`);try{await el(s,t,i),_.debug("[auth] Login server callback received token successfully."),i.success("Successfully authenticated!");let a=X();_.debug("[auth] Checking/setting up first organization for authenticated user..."),await js(a,i)}catch(a){a instanceof Error?i.error({code:"CLI_ERR_UNAUTHORIZED",message:a.message}):i.error({code:"CLI_ERR_UNAUTHORIZED",message:"Authentication failed."}),process.exit(1)}}),e.command("logout").description("Log out and clear the stored token").action(()=>{let t=new H({format:P.resolved.format});_.debug("[auth] Executing logout command, clearing configuration token..."),P.clearConfigKey("token"),_.debug("[auth] Token cleared successfully."),t.success("Logged out successfully.")}),e.command("status").description("Check current authentication status").action(async()=>{let t=new H({format:P.resolved.format}),i=P.resolved;_.debug("[auth] Checking current authentication status...");let r=X();Nt(r,t);try{_.debug("[auth] Retrieving user profile details from platform...");let s=await r.users.me({token:r.token});if(_.debug(`[auth] User retrieved successfully: ${s.name}`),i.format==="json")t.object({authenticated:!0,user:s});else{console.log(Q.green("\u2714 Authenticated successfully!"));let a="",n=s.email;if(Array.isArray(n)){let l=n[0];l&&typeof l=="object"&&"email"in l&&(a=String(l.email||""))}else typeof n=="string"&&(a=n);console.log(`User: ${s.name} (${a})`),console.log(`Default Org: ${i.org||"None"}`)}_.debug("[auth] Checking default organization status..."),await js(r,t)}catch(s){let a=Z(s);t.error({code:a.code||"CLI_ERR_UNAUTHORIZED",message:"Authentication token is invalid or expired.",detail:a.message}),process.exit(1)}})}function el(o,e,t){return new Promise((i,r)=>{let s=Yo.createServer((c,p)=>{if(c.method==="GET"&&c.url?.startsWith("/callback")){_.debug(`[auth] Received request for callback: ${c.url}`),p.writeHead(200,{"Content-Type":"text/html"});let u=new URL("./templates/login.html",import.meta.url),m=Qo(u,"utf8").replaceAll("{{API_URL}}",o);p.end(m);return}if(c.method==="POST"&&c.url==="/token"){let u="";c.on("data",h=>{u+=h}),c.on("end",()=>{try{let h=JSON.parse(u);h.token?(_.debug("[auth] Storing retrieved token to CLI configuration..."),P.writeProperty("token",h.token),p.writeHead(200,{"Content-Type":"application/json"}),p.end(JSON.stringify({success:!0})),i(h.token)):(p.writeHead(400,{"Content-Type":"application/json"}),p.end(JSON.stringify({error:"Token missing"})),r(new Error("Token missing from browser callback.")))}catch(h){h instanceof Error?(p.writeHead(400,{"Content-Type":"application/json"}),p.end(JSON.stringify({error:h.message})),r(new Error("Invalid body received: "+h.message))):(p.writeHead(400,{"Content-Type":"application/json"}),p.end(JSON.stringify({error:"Invalid body received"})),r(new Error("Invalid body received")))}finally{l()}});return}if(c.method==="POST"&&c.url==="/error"){let u="";c.on("data",h=>{u+=h}),c.on("end",()=>{try{let h=JSON.parse(u);_.debug(`[auth] Received login error from browser callback: ${h.message}`),r(new Error(h.message||"Browser login failed"))}catch{r(new Error("Browser login failed"))}finally{l()}});return}p.writeHead(404),p.end()}),a=()=>{l(),process.exit(130)};process.on("SIGINT",a),process.on("SIGTERM",a);let n=setTimeout(()=>{r(new Error("Authentication timed out.")),l()},3e5);function l(){clearTimeout(n),process.off("SIGINT",a),process.off("SIGTERM",a),s.close()}s.listen(0,"127.0.0.1",async()=>{let c=s.address().port,u=new URL(o).hostname==="localhost"?"localhost":"127.0.0.1",h=`${o}/auth/${e}/redirect?r=http://${u}:${c}/callback`;_.debug(`[auth] Ephemeral loopback server listening on http://127.0.0.1:${c}`),_.debug(`[auth] Browser callback origin configured to http://${u}:${c}`),t.format!=="json"&&(console.log("Opening browser to log in..."),console.log(`If it doesn't open automatically, navigate to:
|
|
27
|
+
${h}`));try{await Zo(h)}catch{}})})}function Oa(o){let e=o.command("orgs").description("Manage organization configurations");e.command("list").description("List all organizations you belong to").action(async()=>{let t=new H({format:P.resolved.format});_.debug("[orgs:list] Listing all authorized organizations...");try{let i=X(),s=(await i.organizations.list({token:i.token})).data||[];_.debug(`[orgs:list] Found ${s.length} organizations.`);let a=P.resolved,n=s.map(l=>({id:l.key,name:l.name,slug:l.slug,isDefault:l.key===a.org?"Yes":"No"}));t.list(n,["id","name","slug","isDefault"],{headers:["ID","NAME","SLUG","DEFAULT"]})}catch(i){let r=Z(i);t.error(r),process.exit(1)}}),e.command("set-default <oid>").description("Set your default organization ID").action(async t=>{let i=new H({format:P.resolved.format});_.debug(`[orgs:set-default] Setting default organization ID to '${t}'...`);try{let r=X();_.debug("[orgs:set-default] Validating organization ID in user's authorized list..."),((await r.organizations.list({token:r.token})).data||[]).some(l=>l.key===t)||(_.debug(`[orgs:set-default] Organization ID '${t}' not found.`),i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Organization ID '${t}' not found in your authorized list.`,detail:"Run `apinow orgs list` to see all authorized organizations and their IDs."}),process.exit(1)),_.debug(`[orgs:set-default] Organization ID validated. Writing 'org' property as '${t}'...`),P.writeProperty("org",t),_.debug("[orgs:set-default] Configuration property written successfully."),i.success(`Default organization ID set to '${t}'.`)}catch(r){let s=Z(r);i.error(s),process.exit(1)}}),e.command("default").alias("get-default").description("Get the default configured organization").action(async()=>{let t=new H({format:P.resolved.format});_.debug("[orgs:default] Retrieving the default configured organization...");try{let i=P.resolved;i.org||(_.debug("[orgs:default] No default organization configured in local settings."),t.error({code:"CLI_ERR_MISSING_REQUIRED",message:"No default organization configured.",detail:"Set one using `apinow orgs set-default <oid>`. Run `apinow orgs list` to list available organizations."}),process.exit(1));let r=X();_.debug(`[orgs:default] Fetching organization list to validate configured org '${i.org}'...`);let n=((await r.organizations.list({token:r.token})).data||[]).find(l=>l.key===i.org);n||(_.debug(`[orgs:default] Configured org '${i.org}' not found in authorized list.`),t.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Default organization ID '${i.org}' not found in your authorized list.`,detail:"Run `apinow orgs set-default <oid>` to configure a valid default organization."}),process.exit(1)),_.debug(`[orgs:default] Default organization validated successfully: ${n.name}`),t.object({id:n.key,name:n.name,slug:n.slug})}catch(i){let r=Z(i);t.error(r),process.exit(1)}})}import Ca from"node:fs";import tl from"node:path";function Ta(o){let e=o.command("files").description("Manage files and metadata");e.command("list").description("List files in an organization").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--kind <kind>","Filter by file kind (e.g. domain, api, folder)").option("--parent <parent>","Filter by parent folder ID").action(async t=>{let i=new H({format:P.resolved.format}),r=P.resolved,s=t.org||r.org;_.debug(`[files:list] Listing files for org: ${s}, kind: ${t.kind||"all"}, parent: ${t.parent||"root"}`),s||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1));try{let a=X(),n={};if(t.parent&&(n.parent=t.parent),t.kind){let u=Ra(t.kind);n.filter={field:"kind",operator:"eq",value:u}}let c=(await a.files.list(s,n,{token:a.token})).data||[];_.debug(`[files:list] Found ${c.length} files.`);let p=c.map(u=>({id:u.key,name:u.info?.name||"",kind:u.kind,isShortcut:u.isShortcut?"Yes":"No"}));i.list(p,["id","name","kind","isShortcut"],{headers:["ID","NAME","KIND","SHORTCUT"]})}catch(a){let n=Z(a);i.error(n),process.exit(1)}}),e.command("create").description("Create a new file metadata record (and optionally upload media)").option("--name <name>","Name of the file").option("--kind <kind>","Kind of the file (e.g., domain, api)").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--parent <parent>","Parent folder ID").option("--media <path>","Local path to the file content/media to upload").option("--stdin","Read media content from STDIN").action(async t=>{let i=new H({format:P.resolved.format}),r=P.resolved,s=t.org||r.org;_.debug(`[files:create] Creating file with options: name=${t.name}, kind=${t.kind}, org=${s}, parent=${t.parent}, media=${t.media}, stdin=${t.stdin}`),s||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1)),t.media&&t.stdin&&(i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Cannot specify both --media <path> and --stdin"}),process.exit(1));let a=t.name;!a&&process.stdout.isTTY&&(a=await Ue("Enter file name:")),a||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Name is required.",detail:"Specify --name <name>."}),process.exit(1));let n=t.kind;!n&&process.stdout.isTTY&&(n=await yt("Select file kind:",[{name:"API Domain / Schema (domain)",value:"domain"},{name:"API Schema (api)",value:"api"},{name:"Folder (folder)",value:"folder"}])),n||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Kind is required.",detail:"Specify --kind <kind> (allowed: api, domain, folder)."}),process.exit(1));try{let l;if(t.media){let k=tl.resolve(t.media);_.debug(`[files:create] Reading local media file from path: ${k}`),Ca.existsSync(k)||(i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Media file not found at path: ${k}`}),process.exit(1)),l=Ca.readFileSync(k,"utf8")}else t.stdin&&(_.debug("[files:create] Reading media content from STDIN..."),l=await il());let c,p;if(l!==void 0){try{p=JSON.parse(l)}catch{throw new Error("invalid API now platform file")}if(!p||typeof p!="object"||Array.isArray(p)||!("key"in p)||typeof p.key!="string"||!p.key.trim())throw new Error("invalid API now platform file");c=p.key}let u=X(),h=gt.createSchema({kind:Ra(n),info:{name:a},key:c}),m={};t.parent&&(m.parent=t.parent),_.debug("[files:create] Sending request to create file metadata...");let f=await u.files.createMeta(h,s,m,{token:u.token}),b=f.key;_.debug(`[files:create] Created file metadata successfully. Key: ${b}`),l!==void 0&&(_.debug("[files:create] Uploading file media..."),await u.files.createMedia(p,s,b,{},{token:u.token}),_.debug("[files:create] Media uploaded successfully.")),i.success("File created successfully!",f)}catch(l){let c=Z(l);i.error({code:"CLI_ERR_API_FAILURE",...c}),process.exit(1)}}),e.command("read").description("Read file metadata or media content").option("--id <fid>","File ID").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--meta","Read file metadata (default)").option("--media","Read file media/content").action(async t=>{let i=new H({format:P.resolved.format}),r=P.resolved,s=t.org||r.org;_.debug(`[files:read] Reading file with options: id=${t.id}, org=${s}, meta=${t.meta}, media=${t.media}`),s||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1));let a=t.id;if(!a&&process.stdout.isTTY){_.debug("[files:read] ID not provided, fetching files list for interactive selection...");try{let n=X(),c=(await n.files.list(s,{},{token:n.token})).data||[];c.length>0&&(a=await yt("Select a file to read:",c.map(p=>({name:`${p.info?.name||"Unnamed"} (${p.kind})`,value:p.key}))))}catch{}}a||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID is required.",detail:"Specify --id <fid>."}),process.exit(1));try{let n=X();if(t.media){_.debug(`[files:read] Fetching media content for file ID '${a}'...`);let c=(await n.files.readMedia(s,a,{token:n.token})).media;_.debug("[files:read] Media retrieved successfully."),r.format==="json"?console.log(JSON.stringify(c,null,2)):console.log(typeof c=="object"&&c!==null?JSON.stringify(c,null,2):c)}else{_.debug(`[files:read] Fetching metadata for file ID '${a}'...`);let l=await n.files.read(s,a,{token:n.token});_.debug("[files:read] Metadata retrieved successfully."),i.object(l)}}catch(n){let l=Z(n);i.error(l),process.exit(1)}})}function Ra(o){let e=o.toLowerCase();if(e==="api")return $a;if(e==="domain")return Et;if(e==="folder")return De;throw new Error(`Unsupported file kind "${o}". Allowed: api, domain, folder`)}async function il(){return new Promise((o,e)=>{let t="";process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{t+=i}),process.stdin.on("end",()=>{o(t)}),process.stdin.on("error",i=>{e(i)})})}var Ei=class o{key;get kind(){return ft}catalogKey;scope;lifecycle;version;publishedBy;unpublishedAt;deprecated;deprecatedAt;deprecatedBy;deprecationReason;createdAt;updatedAt;changelog;static createSchema(e){let{key:t="",scope:i="private",publishedBy:r="",createdAt:s=0,updatedAt:a=0,catalogKey:n="",lifecycle:l="stable",version:c=""}=e;if(["public","private","organization"].indexOf(i)===-1)throw new Error(`Invalid scope: ${i}`);let p={key:t,kind:ft,scope:i,publishedBy:r,createdAt:s,updatedAt:a,catalogKey:n,lifecycle:l,version:c};return typeof e.deprecated=="boolean"&&(p.deprecated=e.deprecated),typeof e.deprecatedAt=="number"&&(p.deprecatedAt=e.deprecatedAt),typeof e.deprecatedBy=="string"&&(p.deprecatedBy=e.deprecatedBy),typeof e.changelog=="string"&&(p.changelog=e.changelog),typeof e.deprecationReason=="string"&&(p.deprecationReason=e.deprecationReason),typeof e.unpublishedAt=="number"&&(p.unpublishedAt=e.unpublishedAt),p}constructor(e={}){let t=o.createSchema(e);this.key=t.key,this.catalogKey=t.catalogKey,this.lifecycle=t.lifecycle,this.scope=t.scope,this.version=t.version,this.publishedBy=t.publishedBy,this.createdAt=t.createdAt,this.updatedAt=t.updatedAt,typeof t.changelog=="string"&&(this.changelog=t.changelog),typeof t.deprecated=="boolean"&&(this.deprecated=t.deprecated),typeof t.deprecatedAt=="number"&&(this.deprecatedAt=t.deprecatedAt),typeof t.deprecatedBy=="string"&&(this.deprecatedBy=t.deprecatedBy),typeof t.deprecationReason=="string"&&(this.deprecationReason=t.deprecationReason),typeof t.unpublishedAt=="number"&&(this.unpublishedAt=t.unpublishedAt)}toJSON(){let e={key:this.key,kind:ft,scope:this.scope,publishedBy:this.publishedBy,createdAt:this.createdAt,updatedAt:this.updatedAt,catalogKey:this.catalogKey,lifecycle:this.lifecycle,version:this.version};return typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),typeof this.deprecatedAt=="number"&&(e.deprecatedAt=this.deprecatedAt),typeof this.deprecatedBy=="string"&&(e.deprecatedBy=this.deprecatedBy),typeof this.deprecationReason=="string"&&(e.deprecationReason=this.deprecationReason),typeof this.unpublishedAt=="number"&&(e.unpublishedAt=this.unpublishedAt),typeof this.changelog=="string"&&this.changelog&&(e.changelog=this.changelog),e}};var y;(function(o){o.User="Semantic#User",o.Address="Semantic#Address",o.Organization="Semantic#Organization",o.Project="Semantic#Project",o.AbstractManyToMany="Semantic#AbstractManyToMany",o.Password="Semantic#Password",o.Username="Semantic#Username",o.CreatedTimestamp="Semantic#CreatedTimestamp",o.UpdatedTimestamp="Semantic#UpdatedTimestamp",o.DeletedTimestamp="Semantic#DeletedTimestamp",o.DeletedFlag="Semantic#DeletedFlag",o.PublicUniqueName="Semantic#PublicUniqueName",o.Title="Semantic#Title",o.Name="Semantic#Name",o.UserRole="Semantic#UserRole",o.OrganizationRole="Semantic#OrganizationRole",o.ProjectRole="Semantic#ProjectRole",o.AssociationRole="Semantic#AssociationRole",o.Status="Semantic#Status",o.Version="Semantic#Version",o.ImageURL="Semantic#ImageURL",o.FileURL="Semantic#FileURL",o.Markdown="Semantic#Markdown",o.HTML="Semantic#HTML",o.GeospatialCoordinates="Semantic#GeospatialCoordinates",o.Email="Semantic#Email",o.Phone="Semantic#Phone",o.Currency="Semantic#Currency",o.URL="Semantic#URL",o.SKU="Semantic#SKU",o.Description="Semantic#Description",o.Summary="Semantic#Summary",o.Calculated="Semantic#Calculated",o.Derived="Semantic#Derived",o.ClientIPAddress="Semantic#ClientIPAddress",o.StreetAddress="Semantic#StreetAddress",o.StreetAddressSupplemental="Semantic#StreetAddressSupplemental",o.City="Semantic#City",o.PostalCode="Semantic#PostalCode",o.Country="Semantic#Country",o.Region="Semantic#Region",o.ResourceOwnerIdentifier="Semantic#ResourceOwnerIdentifier",o.RelationalResourceOwner="Semantic#RelationalResourceOwner",o.OrganizationMembers="Semantic#OrganizationMembers",o.ProjectMembers="Semantic#ProjectMembers",o.OrganizationResource="Semantic#OrganizationResource",o.ProjectResource="Semantic#ProjectResource",o.CreatedBy="Semantic#CreatedBy",o.UpdatedBy="Semantic#UpdatedBy",o.DeletedBy="Semantic#DeletedBy",o.Tags="Semantic#Tags",o.Categories="Semantic#Categories"})(y||(y={}));var M;(function(o){o.Entity="Entity",o.Property="Property",o.Association="Association"})(M||(M={}));var L;(function(o){o.Identity="Identity & Authentication",o.Lifecycle="Timestamps & Versioning",o.Content="Content & Media",o.Business="Business Data",o.Organization="Classification & Organization",o.Location="Location & Geography",o.Contact="Contact Information",o.Computed="Computed Values"})(L||(L={}));var Da=o=>o.scope===M.Entity,fr=o=>o.scope===M.Property,gr=o=>o.scope===M.Association,Be={[y.User]:{id:y.User,displayName:"User Entity",scope:M.Entity,description:"System users and accounts",category:L.Identity,hasConfig:!1},[y.Password]:{id:y.Password,displayName:"User Password",scope:M.Property,description:"Secure password field",category:L.Identity,applicableDataTypes:["string"],hasConfig:!0},[y.Username]:{id:y.Username,displayName:"Username",scope:M.Property,description:"User authentication identifier",category:L.Identity,applicableDataTypes:["string"],hasConfig:!1},[y.UserRole]:{id:y.UserRole,displayName:"User Role Field",scope:M.Property,description:"User permissions and access level",category:L.Identity,applicableDataTypes:["string"],hasConfig:!0},[y.ResourceOwnerIdentifier]:{id:y.ResourceOwnerIdentifier,displayName:"Resource Owner Identifier",scope:M.Association,description:"Links record to owner user",category:L.Identity,hasConfig:!1},[y.RelationalResourceOwner]:{id:y.RelationalResourceOwner,displayName:"Relational Resource Owner",scope:M.Association,description:"Specifies that the target entity of this association acts as the relational owner context for ownership verification.",category:L.Identity,hasConfig:!1},[y.Organization]:{id:y.Organization,displayName:"Organization Entity",scope:M.Entity,description:"Applied to the top-level Organization entity",category:L.Identity,hasConfig:!1},[y.AbstractManyToMany]:{id:y.AbstractManyToMany,displayName:"Abstract Many-To-Many",scope:M.Association,description:"Hidden parent semantic for all M:N relationships",category:L.Organization,hasConfig:!1,isHidden:!0,isManyToMany:!0},[y.OrganizationMembers]:{id:y.OrganizationMembers,displayName:"Organization Members",scope:M.Association,description:"Applied to the association pointing from Organization to User",category:L.Identity,hasConfig:!0,isManyToMany:!0,inheritsFrom:y.AbstractManyToMany,preconditions:[{kind:"associationMultiple",multiple:!0,unmetMessage:"Organization Members semantic can only be applied to multi-valued (array) associations."},{kind:"entityPairs",entityPairs:[{parent:y.Organization,target:y.User},{parent:y.User,target:y.Organization}],unmetMessage:"Organization Members semantic can only be applied to an association connecting an Organization entity and a User entity."}],properties:[{meta:{required:!0},value:{info:{name:"role",displayName:"Role",description:"The role of the user in the organization"},semantics:[{id:y.OrganizationRole}],type:"string",index:!0,required:!0,schema:{enum:["owner","admin","editor","viewer"],defaultValue:{type:"literal",value:"viewer"}}}},{meta:{required:!1},value:{info:{name:"status",displayName:"Status",description:"The status of the user in the organization"},semantics:[{id:y.Status}],type:"string",index:!0,required:!0,schema:{enum:["active","inactive","invited"],defaultValue:{type:"literal",value:"invited"}}}}]},[y.Project]:{id:y.Project,displayName:"Project Entity",scope:M.Entity,description:"Applied to a Project entity",category:L.Identity,hasConfig:!1},[y.ProjectMembers]:{id:y.ProjectMembers,displayName:"Project Members",scope:M.Association,description:"Applied to the association pointing from Project to User",category:L.Identity,hasConfig:!0,isManyToMany:!0,inheritsFrom:y.AbstractManyToMany,preconditions:[{kind:"associationMultiple",multiple:!0,unmetMessage:"Project Members semantic can only be applied to multi-valued (array) associations."},{kind:"entityPairs",entityPairs:[{parent:y.Project,target:y.User},{parent:y.User,target:y.Project}],unmetMessage:"Project Members semantic can only be applied to an association connecting a Project entity and a User entity."}],properties:[{meta:{required:!0},value:{info:{name:"role",displayName:"Role",description:"The role of the user in the project"},semantics:[{id:y.ProjectRole}],type:"string",index:!0,required:!0,schema:{enum:["owner","admin","editor","viewer"],defaultValue:{type:"literal",value:"viewer"}}}},{meta:{required:!1},value:{info:{name:"status",displayName:"Status",description:"The status of the user in the project"},semantics:[{id:y.Status}],type:"string",index:!0,required:!0,schema:{enum:["active","inactive","invited"],defaultValue:{type:"literal",value:"invited"}}}}]},[y.OrganizationRole]:{id:y.OrganizationRole,displayName:"Organization Role Property",scope:M.Property,description:"Represents a membership role inside an organization",category:L.Identity,applicableDataTypes:["string"],hasConfig:!1},[y.ProjectRole]:{id:y.ProjectRole,displayName:"Project Role Property",scope:M.Property,description:"Represents a membership role inside a project",category:L.Identity,applicableDataTypes:["string"],hasConfig:!1},[y.AssociationRole]:{id:y.AssociationRole,displayName:"Association Role Property",scope:M.Property,description:"Represents a membership access role on a many-to-many association",category:L.Identity,applicableDataTypes:["string"],hasConfig:!1},[y.OrganizationResource]:{id:y.OrganizationResource,displayName:"Organization Resources",scope:M.Association,description:"Represents resources owned by an organization",category:L.Identity,hasConfig:!1},[y.ProjectResource]:{id:y.ProjectResource,displayName:"Project Resources",scope:M.Association,description:"Represents resources owned by a project",category:L.Identity,hasConfig:!1},[y.CreatedBy]:{id:y.CreatedBy,displayName:"Created By",scope:M.Association,description:"Links record to the user who created it",category:L.Identity,hasConfig:!1},[y.UpdatedBy]:{id:y.UpdatedBy,displayName:"Updated By",scope:M.Association,description:"Links record to the user who last updated it",category:L.Identity,hasConfig:!1},[y.DeletedBy]:{id:y.DeletedBy,displayName:"Deleted By",scope:M.Association,description:"Links record to the user who soft-deleted it",category:L.Identity,hasConfig:!1},[y.CreatedTimestamp]:{id:y.CreatedTimestamp,displayName:"Creation Timestamp",scope:M.Property,description:"When record was created",category:L.Lifecycle,applicableDataTypes:["datetime"],hasConfig:!1},[y.UpdatedTimestamp]:{id:y.UpdatedTimestamp,displayName:"Update Timestamp",scope:M.Property,description:"When record was last modified",category:L.Lifecycle,applicableDataTypes:["datetime"],hasConfig:!1},[y.DeletedTimestamp]:{id:y.DeletedTimestamp,displayName:"Soft Delete Timestamp",scope:M.Property,description:"When record was marked deleted",category:L.Lifecycle,applicableDataTypes:["datetime"],hasConfig:!1},[y.DeletedFlag]:{id:y.DeletedFlag,displayName:"Soft Delete Flag",scope:M.Property,description:"Mark record as deleted",category:L.Lifecycle,applicableDataTypes:["boolean"],hasConfig:!1},[y.Address]:{id:y.Address,displayName:"Address Entity",scope:M.Entity,description:"Physical address entity",category:L.Contact,hasConfig:!1},[y.StreetAddress]:{id:y.StreetAddress,displayName:"Street Address",scope:M.Property,description:"Street address line",category:L.Contact,applicableDataTypes:["string"],hasConfig:!1},[y.StreetAddressSupplemental]:{id:y.StreetAddressSupplemental,displayName:"Street Address Supplemental",scope:M.Property,description:"Supplemental street address line (e.g., Unit, Suite, Apartment, Floor)",category:L.Contact,applicableDataTypes:["string"],hasConfig:!1},[y.City]:{id:y.City,displayName:"City",scope:M.Property,description:"City or locality",category:L.Contact,applicableDataTypes:["string"],hasConfig:!1},[y.PostalCode]:{id:y.PostalCode,displayName:"Postal Code",scope:M.Property,description:"Postal or zip code",category:L.Contact,applicableDataTypes:["string"],hasConfig:!0},[y.Country]:{id:y.Country,displayName:"Country",scope:M.Property,description:"Country name or code",category:L.Contact,applicableDataTypes:["string"],hasConfig:!0},[y.Region]:{id:y.Region,displayName:"Region",scope:M.Property,description:"State, province, or region",category:L.Contact,applicableDataTypes:["string"],hasConfig:!1},[y.Version]:{id:y.Version,displayName:"Version Number",scope:M.Property,description:"Auto-incrementing version counter",category:L.Lifecycle,applicableDataTypes:["number"],hasConfig:!1},[y.Title]:{id:y.Title,displayName:"Record Title",scope:M.Property,description:"Main title or heading",category:L.Content,applicableDataTypes:["string"],hasConfig:!1},[y.Name]:{id:y.Name,displayName:"Name",scope:M.Property,description:"A person or pet name",category:L.Content,applicableDataTypes:["string"],hasConfig:!1},[y.Description]:{id:y.Description,displayName:"Description",scope:M.Property,description:"Detailed description text",category:L.Content,applicableDataTypes:["string"],hasConfig:!1},[y.Summary]:{id:y.Summary,displayName:"Summary",scope:M.Property,description:"Brief summary text",category:L.Content,applicableDataTypes:["string"],hasConfig:!1},[y.Markdown]:{id:y.Markdown,displayName:"Markdown Content",scope:M.Property,description:"Formatted text content",category:L.Content,applicableDataTypes:["string"],hasConfig:!0},[y.HTML]:{id:y.HTML,displayName:"HTML Content",scope:M.Property,description:"Rich HTML content",category:L.Content,applicableDataTypes:["string"],hasConfig:!0},[y.ImageURL]:{id:y.ImageURL,displayName:"Image URL",scope:M.Property,description:"Link to image file",category:L.Content,applicableDataTypes:["string"],hasConfig:!0},[y.FileURL]:{id:y.FileURL,displayName:"File URL",scope:M.Property,description:"Link to file attachment",category:L.Content,applicableDataTypes:["string"],hasConfig:!0},[y.Status]:{id:y.Status,displayName:"Record Status",scope:M.Property,description:"Current state of record",category:L.Business,applicableDataTypes:["string"],hasConfig:!0},[y.Currency]:{id:y.Currency,displayName:"Currency",scope:M.Property,description:"Monetary value with currency",category:L.Business,applicableDataTypes:["number","string"],hasConfig:!0},[y.SKU]:{id:y.SKU,displayName:"SKU",scope:M.Property,description:"Product identification code",category:L.Business,applicableDataTypes:["string"],hasConfig:!0},[y.Email]:{id:y.Email,displayName:"Email",scope:M.Property,description:"Email address",category:L.Contact,applicableDataTypes:["string"],hasConfig:!0},[y.Phone]:{id:y.Phone,displayName:"Phone",scope:M.Property,description:"Phone number",category:L.Contact,applicableDataTypes:["string"],hasConfig:!0},[y.URL]:{id:y.URL,displayName:"URL",scope:M.Property,description:"Web address or link",category:L.Contact,applicableDataTypes:["string"],hasConfig:!0},[y.ClientIPAddress]:{id:y.ClientIPAddress,displayName:"Client IP Address",scope:M.Property,description:"Automatically populated client IP address",category:L.Contact,applicableDataTypes:["string"],hasConfig:!1},[y.PublicUniqueName]:{id:y.PublicUniqueName,displayName:"Public Unique Name (Slug)",scope:M.Property,description:"URL-friendly unique identifier",category:L.Organization,applicableDataTypes:["string"],hasConfig:!0},[y.Tags]:{id:y.Tags,displayName:"Tags",scope:M.Association,description:"Enable tagging functionality",category:L.Organization,hasConfig:!0,isManyToMany:!0,inheritsFrom:y.AbstractManyToMany},[y.Categories]:{id:y.Categories,displayName:"Categories",scope:M.Association,description:"Enable categorization functionality",category:L.Organization,hasConfig:!0,isManyToMany:!0,inheritsFrom:y.AbstractManyToMany},[y.GeospatialCoordinates]:{id:y.GeospatialCoordinates,displayName:"Geospatial Coordinates",scope:M.Property,description:"Location coordinates",category:L.Location,applicableDataTypes:["string"],hasConfig:!0},[y.Calculated]:{id:y.Calculated,displayName:"Calculated",scope:M.Property,description:"Auto-calculated field value",category:L.Computed,applicableDataTypes:["string","number","boolean","date","datetime","time","binary"],hasConfig:!0},[y.Derived]:{id:y.Derived,displayName:"Derived",scope:M.Property,description:"Value derived from other fields",category:L.Computed,applicableDataTypes:["string"],hasConfig:!0}};var Is;(function(o){o[o.Initializing=0]="Initializing",o[o.PendingDns=1]="PendingDns",o[o.Issuing=2]="Issuing",o[o.Active=3]="Active",o[o.Error=4]="Error"})(Is||(Is={}));var ue=class o extends Error{static E_VALIDATION_ERROR="E_VALIDATION_ERROR";code=o.E_VALIDATION_ERROR;issues;constructor(e,t){let i=e[0];super(t??`Validation failed: ${i?.path??""} - ${i?.message??""}`),this.name="OperationValidationException",this.issues=e,Error.captureStackTrace&&Error.captureStackTrace(this,o)}};function yr(o,e){if(o==="-")return;let t=new ue([{message:"Invalid pointer",path:`/${o}`}]),{length:i}=o;if(i>1&&o[0]==="0")throw t;let r=+o;if(Number.isNaN(r)||Math.abs(r).toString()!==o||r<0||r>e)throw t}function ti(o,e){let{length:t}=e,i=o,r;for(let s=0;s<t-1;s++){if(r=e[s],Array.isArray(i))yr(r,i.length);else if(typeof i!="object"||i===null)throw new Error("Cannot be walked");i instanceof Map?i=i.get(r):i instanceof Set?i=Array.from(i)[+r]:i=i[r]}if(r=e[t-1],Array.isArray(i))yr(r,i.length);else if(typeof i!="object"||i===null)throw new Error("Invalid target");return{token:r,parent:i}}function Ge(o,e){let t=e.tokens,i=t.length;if(i===0||i===1&&t[0]==="")throw new ue([{message:"Cannot walk empty path.",path:e.raw}]);try{let r=ti(o,t);return{token:r.token,parent:r.parent}}catch{throw new ue([{message:"Path not found.",path:e.raw}])}}var rl=["boolean","string","number","null"];function $t(o){let e=typeof o;if(e==="boolean"||e==="string")return e;if(e==="number"&&Number.isFinite(o))return"number";if(e==="object"){if(Array.isArray(o)||o instanceof Set)return"array";if(o instanceof Map)return"object";if(o===null)return"null";if(e==="object")return"object"}}function br(o){return o===void 0?!0:rl.includes(o)}function za(o,e="/"){return o.replace(/~0/g,"~").replace(/~1/g,e)}function Ps(o,e="/"){let t="",i=o;typeof i=="number"&&(i=String(i));for(let r=0,s=i.length;r<s;r++){let a=i.charAt(r);a==="~"?t+="~0":a===e?t+="~1":t+=a}return t}function he(o,e="/"){let t="";for(let i=0,r=o.length;i<r;i++)t+=e+Ps(o[i],e);return t}function He(o,e="/"){if(Array.isArray(o))return o;if(o.length===0)return[];if(o.charAt(0)!==e)throw new ue([{message:"Invalid pointer.",path:o}]);let t=[""],i=0;for(let r=1,s=o.length;r<s;r++){let a=o.charAt(r);if(a===e){let n=t[t.length-1];if(n==="constructor"||n==="__proto__")throw new Error("Prototype pollution attempt");t.push(""),i++}else a==="~"?o.charAt(r+1)==="1"?(t[i]+=e,r++):o.charAt(r+1)==="0"?(t[i]+="~",r++):t[i]+=a:t[i]+=a}return t}function kr(o,e,t){let i,r;return typeof o=="string"?i=He(o,t):i=o,typeof e=="string"?r=[e]:r=e,he(i.concat(r),t)}function sl(o,e){if(o instanceof Set){let t=0;for(let i of o)e(i,t+=1)}else if(Array.isArray(o)||o instanceof Map)o.forEach(e);else if(typeof o=="object"&&o!==null)Object.keys(o).forEach(t=>{e(o[t],t)});else throw new TypeError(`${o} is not a structure`)}function Ua(o,e,t,i){i(o,e,t),!(o===null||typeof o!="object")&&sl(o,(r,s)=>{Ua(r,s,o,i)})}function wr(o,e){let t=Object.create(null);function i(s){for(let a in t)if(t[a]===s)return a}function r(s,a,n){let l=kr(n&&i(n),a);t[l]=s}Ua(o,void 0,void 0,(s,a,n)=>{if(s!==null&&typeof s=="object"&&(n===void 0||a===void 0?r(s,[],""):r(s,a.toString(),n)),a===void 0||n===void 0)e(s,"");else{let l=i(n);e(s,kr(l,a.toString()),n,l)}})}var re=class o{_raw="";_tokens=[];_separator;_index;_parent;constructor(e,t="/"){if(e instanceof o&&e.separator===t)return e;this._separator=t,Array.isArray(e)?(this._tokens=e,this._raw=he(e,this._separator)):typeof e=="string"?(this._raw=e,this._tokens=He(e,this._separator)):(this._raw=e._raw,this._tokens=e._tokens)}get raw(){return this._raw}get tokens(){return[...this._tokens]}get separator(){return this._separator}getToken(e){return e<0||e>=this._tokens.length?null:this._tokens[e]}getParent(){return this._parent!==void 0?this._parent:(this._tokens.length===0||this._tokens.length===1&&this._tokens[0]===""?this._parent=null:this._parent=new o(this._tokens.slice(0,-1),this._separator),this._parent)}isRoot(){return this._tokens.length===0||this._tokens[0]===""}append(e){return new o([...this._tokens,String(e)],this._separator)}prefix(e){if(e<0||e>this._tokens.length)throw new Error("Levels out of bound.");return new o(this._tokens.slice(0,e),this._separator)}escape(e){return Ps(e,this._separator)}unescape(e){return za(e,this._separator)}static encode(e,t="/"){return he(e,t)}encode(e=this._separator){return he(this._tokens,e)}static decode(e,t="/"){return He(e,t)}find(e){let{tokens:t}=this;if(t.length===0)return e;let i;try{i=ti(e,t)}catch{return}let{token:r,parent:s}=i;return s[r]}findValue(e){return this.isRoot()?e:this.find(e)}findParentValue(e){return this.isRoot()?e:this.getParent().find(e)}static find(e,t){return new o(t).find(e)}findAndTest(e,t){let i=this.find(e);return{found:i!==void 0,value:i,equal:i===t}}static isValidArrayToken(e,t){if(e==="-")return;let i=new ue([{message:"Invalid pointer.",path:`/${e}`}]),{length:r}=e;if(r>1&&e[0]==="0")throw i;let s=+e;if(Number.isNaN(s)||Math.abs(s).toString()!==e||s<0||s>t)throw i}getIndex(){if(this._index!==void 0)return this._index;let e=this._tokens;if(e.length===0)return null;let t=e[e.length-1];if(t==="-")return-1;let i=parseInt(t,10);return isNaN(i)?null:i}static getIndex(e){return new o(e).getIndex()}setIndex(e){let t=this._tokens,i=t[t.length-1];if(i===void 0)return new o(`/${e}`,this._separator);if(isNaN(+i))return new o([...t,e.toString()],this._separator);let r=Array.from(t);return r[r.length-1]=e.toString(),new o(r,this._separator)}static index(e){let t=Object.create(null);return wr(e,(i,r)=>{t[r]=i}),t}static join(e,t,i){let r,s;if(typeof e=="string"?r=He(e,i):r=e,typeof t=="string"){if(!t)return he(r,i);let a=t,n=i||"/";a.startsWith(n)||(a=`${n}${a}`),s=He(a,i)}else s=t;return he(r.concat(s),i)}static unflatten(e){let t=Object.keys(e),i=e[""];for(let r of t){if(r==="")continue;let s=He(r),a=ti(i,s),{parent:n,token:l}=a;n instanceof Map?n.set(l,e[r]):n instanceof Set?n.add(e[r]):Array.isArray(n)?n.push(e[r]):n[l]=e[r]}return i}static flatten(e){let t=Object.create(null);return wr(e,(i,r)=>{let s;Array.isArray(i)?s=[]:i instanceof Map?s=new Map:i instanceof Set?s=new Set:typeof i=="object"&&i!==null?s={}:s=i,t[r]=s}),t}equals(e){return e?["","/"].includes(this._raw)&&["/",""].includes(e._raw)?!0:this.raw===e.raw:!1}isAfter(e){let t=e.getIndex(),i=this.getIndex();return t===null||i===null||t===-1||i===-1?!1:t<i}isAfterOrAt(e){let t=e.getIndex(),i=this.getIndex();return t===null||i===null||t===-1||i===-1?!1:t!==null&&i!==null&&t<=i}contains(e){if(this.isRoot())return!0;let t=e.tokens;if(t.length<=this._tokens.length)return!1;for(let i=0;i<this._tokens.length;i++)if(this._tokens[i]!==t[i])return!1;return!0}parentEquals(e){let t=this.getParent();return t&&e?t.equals(e):t===e}};function Lt(o,e){let t=new re(e);if(t.tokens.length===0||t.tokens.length===1&&t.tokens[0]==="")return o;let{parent:i,token:r}=Ge(o,t);if(Array.isArray(i))re.isValidArrayToken(r,i.length);else if(typeof i=="object"&&i!==null&&!(r in i))throw new ue([{path:`/${r}`,message:"The target does not exists."}]);return i[r]}function et(o,e,t){let i=new re(e),r=structuredClone(t);if(i.tokens.length===0||i.tokens.length===1&&i.tokens[0]==="")return{doc:r,previous:o};let{token:s,parent:a}=Ge(o,i),n,l;if(Array.isArray(a))s==="-"?(a.push(r),l=a.length-1):a.splice(parseInt(s,10),0,r);else{n=a[s];let c=a;c[s]=r}return{doc:o,previous:n,idx:l}}function bt(o,e){let t=new re(e);if(t.tokens.length===0||t.tokens.length===1&&t.tokens[0]==="")return{doc:void 0,previous:o};let{parent:i,token:r}=Ge(o,t),s=i[r];if(s===void 0)throw new ue([{message:"Parent does not exists.",path:t.raw}]);return Array.isArray(i)?i.splice(parseInt(r,10),1):delete i[r],{doc:o,previous:s}}function ii(o,e,t){let i=new re(e),r=structuredClone(t);if(i.tokens.length===0||i.tokens.length===1&&i.tokens[0]==="")return{doc:r,previous:o};let{parent:s,token:a}=Ge(o,i),n=s[a];if(n===void 0)throw new ue([{message:"Location not found.",path:i.raw}]);return s[a]=r,{doc:o,previous:n}}function xi(o,e,t){let i=new re(e),r=new re(t);if(i.tokens.length===0||i.tokens.length===1&&i.tokens[0]==="")return{doc:bt(o,i).previous,previous:o};let s=bt(o,i);return et(s.doc,r,s.previous)}function ri(o,e,t){let i=new re(e),r=new re(t),s=Lt(o,i);return e===""||e==="/"?{doc:s,previous:o}:et(o,r,s)}function Ma(o){let e=[];return o.forEach(t=>{e.push(t)}),e}function Va(o){let e=Object.create(null);return o.forEach((t,i)=>{e[i]=t}),e}function Os(o,e,t,i){let r=$t(o),s=$t(e);if(r!==s)return!1;switch(r){case"number":return o===0&&1/o===-1/0?e===0&&1/e===-1/0:o===e;case"string":case"null":case"boolean":return o===e;default:}let a,n,l=t.indexOf(o);if(l!==-1)return i[l]===e;if(t.push(o),i.push(e),r==="array"){o instanceof Set&&(o=Ma(o)),e instanceof Set&&(e=Ma(e));let c=o,p=e;if(c.length!==p.length)return t.pop(),i.pop(),!1;for(a=0,n=c.length;a<n;a++)if(!Os(c[a],p[a],t,i))return t.pop(),i.pop(),!1;return!0}if(r==="object"){o instanceof Map&&(o=Va(o)),e instanceof Map&&(e=Va(e));let c=o,p=e,u=Object.keys(c),h=Object.keys(p);if(u.length!==h.length)return t.pop(),i.pop(),!1;for(u.sort(),h.sort(),a=0,n=u.length;a<n;a++){let m=u[a],f=h[a];if(m!==f||!Object.prototype.hasOwnProperty.call(p,m)||!Os(c[m],p[m],t,i))return t.pop(),i.pop(),!1}return t.pop(),i.pop(),!0}return t.pop(),i.pop(),!0}function tt(o,e){return Os(o,e,[],[])}function La(o){let e=o.command("catalog").description("Manage Data Catalog items");e.command("publish").description("Publish a data domain file to the data catalog").option("--file <fid>","File ID of the data domain").option("--name <name>","Name for the catalog entry").option("--description <desc>","Description of the catalog entry").option("--scope <scope>","Publish scope: public, organization, private").option("--catalog-version <ver>","Semantic version (e.g. 1.0.0)").option("--ver <ver>","Semantic version alias (e.g. 1.0.0)").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--lifecycle <lifecycle>","Version lifecycle status (dev, beta, stable)","stable").option("--changelog <changelog>","Changelog description for this version").action(async t=>{let i=new H({format:P.resolved.format}),r=P.resolved,s=t.catalogVersion||t.ver;_.debug(`[catalog:publish] Starting publish flow with options: file=${t.file}, name=${t.name}, scope=${t.scope}, version=${s}, org=${t.org||r.org}, lifecycle=${t.lifecycle}`);let a=t.org||r.org;a||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1));let n=t.file;if(!n&&process.stdout.isTTY){_.debug("[catalog:publish] File ID not provided; listing data domain files for selection...");try{let f=X(),k=(await f.files.list(a,{filter:{field:"kind",operator:"eq",value:Et}},{token:f.token})).data||[];k.length>0&&(n=await yt("Select a data domain file to publish:",k.map(S=>({name:`${S.info?.name||"Unnamed"} (${S.key})`,value:S.key}))))}catch{}}n||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID is required.",detail:"Specify --file <fid>."}),process.exit(1));let l=t.name;!l&&process.stdout.isTTY&&(l=await Ue("Enter catalog entry name:")),l||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Name is required.",detail:"Specify --name <name>."}),process.exit(1));let c=t.description;!c&&process.stdout.isTTY&&(c=await Ue("Enter catalog entry description:")),c||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Description is required.",detail:"Specify --description <desc>."}),process.exit(1));let p=t.scope;!p&&process.stdout.isTTY&&(p=await yt("Select publish scope:",[{name:"Public (public)",value:"public"},{name:"Organization (organization)",value:"organization"},{name:"Private (private)",value:"private"}])),p||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Scope is required.",detail:"Specify --scope <scope> (allowed: public, organization, private)."}),process.exit(1));let u=["public","organization","private"];u.includes(p)||(i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid scope '${p}'.`,detail:`Allowed: ${u.join(", ")}`}),process.exit(1));let h=s;!h&&process.stdout.isTTY&&(h=await Ue("Enter semantic version:","1.0.0")),h||(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Version is required.",detail:"Specify --catalog-version <ver> or --ver <ver>."}),process.exit(1));let m=["dev","beta","stable"];m.includes(t.lifecycle)||(i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid lifecycle '${t.lifecycle}'.`,detail:`Allowed: ${m.join(", ")}`}),process.exit(1));try{let f=X(),b=null;_.debug(`[catalog:publish] Checking publication status for file ID '${n}' in organization '${a}'...`);try{b=(await f.dataCatalog.checkPublicationStatus(n,a,{token:f.token})).key,_.debug(`[catalog:publish] Found existing catalog entry key: ${b}`)}catch(I){if(Z(I).status!==404)throw I;_.debug("[catalog:publish] Catalog entry does not exist yet.")}if(b)_.debug(`[catalog:publish] Using existing catalog entry key: ${b}`),P.resolved.format!=="json"&&console.log(`Catalog entry already exists (ID: ${b}). Publishing new version...`);else{_.debug("[catalog:publish] Creating a new catalog entry..."),P.resolved.format!=="json"&&console.log("Catalog entry does not exist. Creating new catalog entry...");let I={key:"",kind:mt,organization:a,file:n,scope:p,name:l,description:c,publishedBy:"",publishedAt:0,createdAt:0,updatedAt:0,tags:[]};b=(await f.dataCatalog.publish(I,{token:f.token})).key,_.debug(`[catalog:publish] Created new catalog entry with key: ${b}`)}let k=Ei.createSchema({scope:p,lifecycle:t.lifecycle,version:h,changelog:t.changelog||void 0});_.debug(`[catalog:publish] Publishing version '${h}' for catalog key '${b}'...`);let S=await f.dataCatalog.publishVersion(b,k,{token:f.token});_.debug(`[catalog:publish] Version published successfully. Version key: ${S.key}`),i.success(`Successfully published version '${h}' to the data catalog!`,S)}catch(f){let b=Z(f);i.error(b),process.exit(1)}}),e.command("list").description("List published data catalog items or versions of a specific catalog entry").option("--scope <scope>","Filter by scope: all, public, organization, private","all").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--key <key>","Data catalog item key to list all versions of a specific data domain").action(async t=>{let i=new H({format:P.resolved.format}),r=P.resolved,s=t.org||r.org;_.debug(`[catalog:list] Listing catalog with options: scope=${t.scope}, org=${s}, key=${t.key}`);let a=["all","public","organization","private"];a.includes(t.scope)||(i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid scope '${t.scope}'. Allowed: ${a.join(", ")}`}),process.exit(1)),["organization","private"].includes(t.scope)&&!s&&(i.error({code:"CLI_ERR_MISSING_REQUIRED",message:`Organization ID (--org <oid>) is required when filtering by scope '${t.scope}'.`}),process.exit(1));try{let n=X();if(t.key){_.debug(`[catalog:list] Fetching versions for catalog entry key '${t.key}'...`);let c=(await n.dataCatalog.listVersions(t.key,{token:n.token})).data||[];_.debug(`[catalog:list] Found ${c.length} versions.`);let p=c.map(u=>({key:u.key,version:u.version,published:new Date(u.published).toLocaleString()}));i.list(p,["key","version","published"],{headers:["VERSION KEY","VERSION","PUBLISHED AT"]})}else{let l=[];if(t.scope==="all"){_.debug("[catalog:list] Fetching public catalog entries...");let h=await n.dataCatalog.list({scope:"public",oid:s},{token:n.token});if(l.push(...h.data||[]),s){_.debug(`[catalog:list] Fetching organization catalog entries for org '${s}'...`);try{let m=await n.dataCatalog.list({scope:"organization",oid:s},{token:n.token});l.push(...m.data||[])}catch{_.debug("[catalog:list] Failed to fetch organization catalog entries.")}_.debug(`[catalog:list] Fetching private catalog entries for org '${s}'...`);try{let m=await n.dataCatalog.list({scope:"private",oid:s},{token:n.token});l.push(...m.data||[])}catch{_.debug("[catalog:list] Failed to fetch private catalog entries.")}}}else{_.debug(`[catalog:list] Fetching catalog entries for scope '${t.scope}' and org '${s}'...`);let h=await n.dataCatalog.list({scope:t.scope,oid:s},{token:n.token});l.push(...h.data||[])}_.debug(`[catalog:list] Total raw catalog entries fetched: ${l.length}`);let c=new Set,p=l.filter(h=>{let m=h.key;return c.has(m)?!1:(c.add(m),!0)});_.debug(`[catalog:list] Total unique catalog entries: ${p.length}`);let u=p.map(h=>{let m=h.versions&&h.versions[0]?h.versions[0].version:"N/A";return{key:h.key,name:h.name,scope:h.scope,lastVersion:m,organization:h.organization||"N/A"}});i.list(u,["key","name","scope","lastVersion","organization"],{headers:["KEY","NAME","SCOPE","LAST VERSION","ORGANIZATION"]})}}catch(n){let l=Z(n);i.error(l),process.exit(1)}}),e.command("show <key>").alias("read").description("Show details of a data catalog entry or a specific version").option("--catalog-version <ver>","Semantic version to read").option("--ver <ver>","Semantic version alias").option("--org <oid>","Organization ID (optional, defaults to configured default org)").action(async(t,i)=>{let r=new H({format:P.resolved.format}),s=X(),a=i.catalogVersion||i.ver;_.debug(`[catalog:show] Reading catalog entry key='${t}', version='${a||"latest"}'`);try{if(a){let n=await s.dataCatalog.readVersion(t,a,{token:s.token});r.object(n)}else{let n=await s.dataCatalog.read(t,{token:s.token});r.object(n)}}catch(n){let l=Z(n);r.error(l),process.exit(1)}}),e.command("deprecate <key>").description("Mark a data catalog entry or specific version as deprecated").option("--catalog-version <ver>","Version string to deprecate").option("--ver <ver>","Version string alias").option("--reason <reason>","Reason for deprecating this catalog entry or version").option("--org <oid>","Organization ID (optional, defaults to configured default org)").action(async(t,i)=>{let r=new H({format:P.resolved.format}),s=i.catalogVersion||i.ver,a=i.reason;!a&&process.stdout.isTTY&&(a=await Ue("Enter reason for deprecation:")),a||(r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Deprecation reason is required.",detail:"Specify --reason <reason>."}),process.exit(1));try{let n=X();if(s){_.debug(`[catalog:deprecate] Deprecating version '${s}' of catalog entry '${t}'...`);let l=await n.dataCatalog.deprecateVersion(t,s,a,{token:n.token});r.success(`Successfully deprecated version '${s}' of data catalog entry '${t}'.`,l)}else{_.debug(`[catalog:deprecate] Deprecating catalog entry '${t}'...`);let l=await n.dataCatalog.deprecate(t,a,{token:n.token});r.success(`Successfully deprecated data catalog entry '${t}'.`,l)}}catch(n){let l=Z(n);r.error(l),process.exit(1)}}),e.command("unpublish <key>").description("Unpublish (mark as private) a data catalog entry or specific version").option("--catalog-version <ver>","Version string to unpublish").option("--ver <ver>","Version string alias").option("--org <oid>","Organization ID (optional, defaults to configured default org)").action(async(t,i)=>{let r=new H({format:P.resolved.format}),s=i.catalogVersion||i.ver;try{let a=X();if(s){_.debug(`[catalog:unpublish] Unpublishing version '${s}' of catalog entry '${t}'...`);let n=await a.dataCatalog.unpublishVersion(t,s,{token:a.token});r.success(`Successfully unpublished version '${s}' of data catalog entry '${t}'.`,n)}else{_.debug(`[catalog:unpublish] Unpublishing catalog entry '${t}'...`);let n=await a.dataCatalog.unpublish(t,{token:a.token});r.success(`Successfully unpublished data catalog entry '${t}'.`,n)}}catch(a){let n=Z(a);r.error(n),process.exit(1)}}),e.command("dependent-apis <key>").alias("usage").description("List all APIs referencing a published data catalog item or version").option("--catalog-version <ver>","Filter usage by a specific version").option("--ver <ver>","Filter usage by a specific version alias").option("--org <oid>","Organization ID (optional, defaults to configured default org)").action(async(t,i)=>{let r=new H({format:P.resolved.format}),s=i.catalogVersion||i.ver;try{let a=X(),n;s?(_.debug(`[catalog:dependent-apis] Fetching usage files for catalog entry '${t}' version '${s}'`),n=await a.dataCatalog.getVersionUsageFiles(t,s,{token:a.token})):(_.debug(`[catalog:dependent-apis] Fetching usage files for catalog entry '${t}'`),n=await a.dataCatalog.getUsageFiles(t,{token:a.token}));let c=(n.data||[]).map(p=>({fileId:p.value.key,name:p.value.info?.name||"Unnamed",version:p.meta?.version||"N/A"}));r.list(c,["fileId","name","version"],{headers:["FILE ID","NAME","VERSION USED"]})}catch(a){let n=Z(a);r.error(n),process.exit(1)}}),e.command("status <fid>").description("Check the publication status and versions of a data domain file").option("--org <oid>","Organization ID (optional, defaults to configured default org)").action(async(t,i)=>{let r=new H({format:P.resolved.format}),s=P.resolved,a=i.org||s.org;try{let n=X();_.debug(`[catalog:status] Checking publication status for file '${t}' in org '${a||"N/A"}'`);let l=await n.dataCatalog.checkPublicationStatus(t,a,{token:n.token});r.object(l)}catch(n){let l=Z(n);r.error(l),process.exit(1)}})}import os from"node:fs";import go from"node:path";var Me=class{root;get domain(){return this.root}#e;get key(){return this.#e}#t;get namespace(){return this.#t}constructor(e,t){this.root=e,this.#e=t,this.#t=e.key}};var ol="http://a.ml/",kt=`${ol}vocabularies/`,B=`${kt}document#`,de=`${kt}core#`,Y=`${kt}security#`,T=`${kt}apiContract#`,Ni=`${kt}apiBinding#`,K=`${kt}shapes#`,me=`${kt}data#`,We=`${kt}document-source-maps#`,$i="http://www.w3.org/",se=`${$i}ns/shacl#`,je=`${$i}2001/XMLSchema#`,vr=`${$i}1999/02/22-rdf-syntax-ns#`,Cs=`${$i}2000/01/rdf-schema#`,d={aml:{key:"http://a.ml/",vocabularies:{key:kt,document:{key:B,Module:`${B}Module`,Document:`${B}Document`,Fragment:`${B}Fragment`,Unit:`${B}Unit`,SecuritySchemeFragment:`${B}SecuritySchemeFragment`,UserDocumentation:`${B}UserDocumentation`,DataType:`${B}DataType`,NamedExamples:`${B}NamedExamples`,DomainElement:`${B}DomainElement`,DomainProperty:`${B}DomainProperty`,ParametrizedDeclaration:`${B}ParametrizedDeclaration`,AbstractDeclaration:`${B}AbstractDeclaration`,VariableValue:`${B}VariableValue`,ExternalFragment:`${B}ExternalFragment`,ExternalDomainElement:`${B}ExternalDomainElement`,RootDomainElement:`${B}RootDomainElement`,APIContractProcessingData:`${B}APIContractProcessingData`,BaseUnitProcessingData:`${B}BaseUnitProcessingData`,customDomainProperties:`${B}customDomainProperties`,encodes:`${B}encodes`,declares:`${B}declares`,references:`${B}references`,examples:`${B}examples`,linkTarget:`${B}link-target`,linkLabel:`${B}link-label`,referenceId:`${B}reference-id`,structuredValue:`${B}structuredValue`,raw:`${B}raw`,extends:`${B}extends`,value:`${B}value`,name:`${B}name`,strict:`${B}strict`,deprecated:`${B}deprecated`,location:`${B}location`,variable:`${B}variable`,target:`${B}target`,dataNode:`${B}dataNode`,root:`${B}root`,usage:`${B}usage`,version:`${B}version`},core:{key:de,CreativeWork:`${de}CreativeWork`,Parameter:`${de}Parameter`,Organization:`${de}Organization`,License:`${de}License`,Operation:`${de}Operation`,Response:`${de}Response`,Payload:`${de}Payload`,Request:`${de}Request`,version:`${de}version`,urlTemplate:`${de}urlTemplate`,displayName:`${de}displayName`,title:`${de}title`,name:`${de}name`,description:`${de}description`,documentation:`${de}documentation`,summary:`${de}summary`,provider:`${de}provider`,email:`${de}email`,url:`${de}url`,termsOfService:`${de}termsOfService`,license:`${de}license`,mediaType:`${de}mediaType`,extensionName:`${de}extensionName`,deprecated:`${de}deprecated`},security:{key:Y,ParametrizedSecurityScheme:`${Y}ParametrizedSecurityScheme`,SecuritySchemeFragment:`${Y}SecuritySchemeFragment`,SecurityScheme:`${Y}SecurityScheme`,OAuth1Settings:`${Y}OAuth1Settings`,OAuth2Settings:`${Y}OAuth2Settings`,OAuth2Flow:`${Y}OAuth2Flow`,Scope:`${Y}Scope`,Settings:`${Y}Settings`,HttpSettings:`${Y}HttpSettings`,ApiKeySettings:`${Y}ApiKeySettings`,OpenIdConnectSettings:`${Y}OpenIdConnectSettings`,SecurityRequirement:`${Y}SecurityRequirement`,security:`${Y}security`,scheme:`${Y}scheme`,schemes:`${Y}schemes`,settings:`${Y}settings`,name:`${Y}name`,type:`${Y}type`,scope:`${Y}scope`,accessTokenUri:`${Y}accessTokenUri`,authorizationUri:`${Y}authorizationUri`,authorizationGrant:`${Y}authorizationGrant`,flows:`${Y}flows`,flow:`${Y}flow`,signature:`${Y}signature`,tokenCredentialsUri:`${Y}tokenCredentialsUri`,requestTokenUri:`${Y}requestTokenUri`,refreshUri:`${Y}refreshUri`,securityRequirement:`${Y}SecurityRequirement`,openIdConnectUrl:`${Y}openIdConnectUrl`,bearerFormat:`${Y}bearerFormat`,in:`${Y}in`},apiContract:{key:T,Payload:`${T}Payload`,Request:`${T}Request`,Response:`${T}Response`,EndPoint:`${T}EndPoint`,Parameter:`${T}Parameter`,Operation:`${T}Operation`,WebAPI:`${T}WebAPI`,API:`${T}API`,AsyncAPI:`${T}AsyncAPI`,UserDocumentationFragment:`${T}UserDocumentationFragment`,Example:`${T}Example`,Server:`${T}Server`,ResourceType:`${T}ResourceType`,Trait:`${T}Trait`,TraitFragment:`${T}TraitFragment`,ParametrizedResourceType:`${T}ParametrizedResourceType`,ParametrizedTrait:`${T}ParametrizedTrait`,Callback:`${T}Callback`,TemplatedLink:`${T}TemplatedLink`,IriTemplateMapping:`${T}IriTemplateMapping`,Tag:`${T}Tag`,Message:`${T}Message`,DomainExtension:`${T}DomainExtension`,Encoding:`${T}Encoding`,header:`${T}header`,parameter:`${T}parameter`,paramName:`${T}paramName`,uriParameter:`${T}uriParameter`,cookieParameter:`${T}cookieParameter`,variable:`${T}variable`,payload:`${T}payload`,server:`${T}server`,path:`${T}path`,url:`${T}url`,scheme:`${T}scheme`,endpoint:`${T}endpoint`,queryString:`${T}queryString`,accepts:`${T}accepts`,guiSummary:`${T}guiSummary`,binding:`${T}binding`,response:`${T}response`,returns:`${T}returns`,expects:`${T}expects`,examples:`${T}examples`,supportedOperation:`${T}supportedOperation`,messageId:`${T}messageId`,statusCode:`${T}statusCode`,method:`${T}method`,required:`${T}required`,callback:`${T}callback`,expression:`${T}expression`,link:`${T}link`,linkExpression:`${T}linkExpression`,templateVariable:`${T}templateVariable`,mapping:`${T}mapping`,operationId:`${T}operationId`,protocol:`${T}protocol`,protocolVersion:`${T}protocolVersion`,headerSchema:`${T}headerSchema`,contentType:`${T}contentType`,allowEmptyValue:`${T}allowEmptyValue`,style:`${T}style`,explode:`${T}explode`,allowReserved:`${T}allowReserved`,tag:`${T}tag`,tags:`${T}tags`},apiBinding:{key:Ni,binding:`${Ni}binding`,bindings:`${Ni}bindings`,messageKey:`${Ni}messageKey`,type:`${Ni}type`},shapes:{key:K,Shape:`${K}Shape`,ScalarShape:`${K}ScalarShape`,ArrayShape:`${K}ArrayShape`,UnionShape:`${K}UnionShape`,NilShape:`${K}NilShape`,FileShape:`${K}FileShape`,AnyShape:`${K}AnyShape`,SchemaShape:`${K}SchemaShape`,MatrixShape:`${K}MatrixShape`,TupleShape:`${K}TupleShape`,RecursiveShape:`${K}RecursiveShape`,DataTypeFragment:`${K}DataTypeFragment`,XMLSerializer:`${K}XMLSerializer`,number:`${K}number`,integer:`${K}integer`,long:`${K}long`,double:`${K}double`,boolean:`${K}boolean`,float:`${K}float`,nil:`${K}nil`,password:`${K}password`,int32:`${K}int32`,int64:`${K}int64`,uint32:`${K}uint32`,uint64:`${K}uint64`,sint32:`${K}sint32`,sint64:`${K}sint64`,fixed32:`${K}fixed32`,fixed64:`${K}fixed64`,sfixed32:`${K}sfixed32`,sfixed64:`${K}sfixed64`,dateTimeOnly:`${K}dateTimeOnly`,range:`${K}range`,items:`${K}items`,anyOf:`${K}anyOf`,fileType:`${K}fileType`,schema:`${K}schema`,xmlSerialization:`${K}xmlSerialization`,xmlName:`${K}xmlName`,xmlAttribute:`${K}xmlAttribute`,xmlWrapped:`${K}xmlWrapped`,xmlNamespace:`${K}xmlNamespace`,xmlPrefix:`${K}xmlPrefix`,readOnly:`${K}readOnly`,writeOnly:`${K}writeOnly`,deprecated:`${K}deprecated`,fixPoint:`${K}fixPoint`,discriminator:`${K}discriminator`,discriminatorValue:`${K}discriminatorValue`,format:`${K}format`,multipleOf:`${K}multipleOf`,uniqueItems:`${K}uniqueItems`},data:{key:me,Scalar:`${me}Scalar`,Object:`${me}Object`,Array:`${me}Array`,Node:`${me}Node`,value:`${me}value`,type:`${me}type`,description:`${me}description`,required:`${me}required`,displayName:`${me}displayName`,minLength:`${me}minLength`,maxLength:`${me}maxLength`,default:`${me}default`,multipleOf:`${me}multipleOf`,minimum:`${me}minimum`,maximum:`${me}maximum`,enum:`${me}enum`,pattern:`${me}pattern`,items:`${me}items`,format:`${me}format`,example:`${me}example`,examples:`${me}examples`},docSourceMaps:{key:We,SourceMap:`${We}SourceMap`,sources:`${We}sources`,element:`${We}element`,value:`${We}value`,declaredElement:`${We}declared-element`,trackedElement:`${We}tracked-element`,parsedJsonSchema:`${We}parsed-json-schema`,autoGeneratedName:`${We}auto-generated-name`,lexical:`${We}lexical`,synthesizedField:`${We}synthesized-field`}}},w3:{key:$i,shacl:{key:se,Shape:`${se}Shape`,NodeShape:`${se}NodeShape`,SchemaShape:`${se}SchemaShape`,PropertyShape:`${se}PropertyShape`,in:`${se}in`,defaultValue:`${se}defaultValue`,defaultValueStr:`${se}defaultValueStr`,pattern:`${se}pattern`,minInclusive:`${se}minInclusive`,maxInclusive:`${se}maxInclusive`,multipleOf:`${se}multipleOf`,minLength:`${se}minLength`,maxLength:`${se}maxLength`,fileType:`${se}fileType`,and:`${se}and`,property:`${se}property`,name:`${se}name`,raw:`${se}raw`,datatype:`${se}datatype`,minCount:`${se}minCount`,maxCount:`${se}maxCount`,xone:`${se}xone`,not:`${se}not`,or:`${se}or`,closed:`${se}closed`,path:`${se}path`,additionalPropertiesSchema:`${se}additionalPropertiesSchema`},xmlSchema:{key:je,boolean:`${je}boolean`,string:`${je}string`,number:`${je}number`,integer:`${je}integer`,long:`${je}long`,double:`${je}double`,float:`${je}float`,nil:`${je}nil`,dateTime:`${je}dateTime`,time:`${je}time`,date:`${je}date`,base64Binary:`${je}base64Binary`,byte:`${je}byte`},rdfSyntax:{key:vr,Seq:`${vr}Seq`,Property:`${vr}Property`,member:`${vr}member`},rdfSchema:{key:Cs,Seq:`${Cs}Seq`,member:`${Cs}member`}}};function si(o,e=0){if(typeof o!="object")return o;let t="",i=new Array(e).fill(" ").join("");return Object.keys(o).forEach(r=>{t+=Array.isArray(o[r])?"":`${i}<${r}>`,Array.isArray(o[r])?o[r].forEach(s=>{t+=i,t+=`<${r}>
|
|
28
|
+
`,t+=si({...s},e+1),t+=i,t+=`</${r}>
|
|
29
|
+
`}):typeof o[r]=="object"?(t+=`
|
|
30
|
+
`,t+=si({...o[r]},e+1),t+=i):t+=`${o[r]}`,t+=Array.isArray(o[r])?"":`</${r}>
|
|
31
|
+
`}),t=t.replace(/<\/?[0-9]{1,}>/g,""),t}function _r(o,e){return String(e).split(`
|
|
32
32
|
`).filter(s=>!!s).map(s=>`${o}${s}`).join(`
|
|
33
|
-
`)}function
|
|
34
|
-
`):`${Zt({[t]:i})}`:`${Zt(i,s)}`}};var Ee={};ma(Ee,{anyShape:()=>Et,arrayShape:()=>tc,fileShape:()=>ec,nodeShape:()=>Yl,propertyShape:()=>ic,recursiveShape:()=>sc,scalarShape:()=>Zl,shape:()=>Ks,tupleShape:()=>rc,unionShape:()=>Ql,xmlSerializer:()=>Da});var Ar={};ma(Ar,{IAmfAPIContractProcessingDataTypes:()=>Tl,IAmfAnyTypes:()=>Ds,IAmfApiKeySettingsTypes:()=>_l,IAmfArrayNodeTypes:()=>Ms,IAmfArrayTypes:()=>Ps,IAmfAsyncApiTypes:()=>Xl,IAmfBaseUnitProcessingDataTypes:()=>Wl,IAmfCallbackTypes:()=>xl,IAmfCreativeWorkTypes:()=>Cl,IAmfDataTypeFragmentTypes:()=>Kl,IAmfDocumentTypes:()=>Ol,IAmfDomainExtensionTypes:()=>Il,IAmfDomainPropertyTypes:()=>Gl,IAmfEncodingTypes:()=>Rl,IAmfEndpointType:()=>dl,IAmfExampleTypes:()=>sl,IAmfExternalDomainElementTypes:()=>Hl,IAmfExternalFragmentTypes:()=>Jl,IAmfFileTypes:()=>Ts,IAmfHttpSettingsTypes:()=>vl,IAmfIriTemplateMappingTypes:()=>Nl,IAmfLicenseTypes:()=>cl,IAmfMessageTypes:()=>jl,IAmfModuleTypes:()=>Fl,IAmfNilTypes:()=>rl,IAmfNodeTypes:()=>Os,IAmfOAuth1SettingsTypes:()=>wl,IAmfOAuth2FlowTypes:()=>kl,IAmfOAuth2SettingsTypes:()=>bl,IAmfObjectNodeTypes:()=>Fs,IAmfOpenIdConnectSettingsTypes:()=>Sl,IAmfParameterTypes:()=>ol,IAmfParametrizedResourceTypeTypes:()=>zl,IAmfParametrizedSecuritySchemeTypes:()=>gl,IAmfParametrizedTraitTypes:()=>Ul,IAmfPayloadTypes:()=>ml,IAmfPropertyTypes:()=>Cs,IAmfProviderTypes:()=>ll,IAmfRdfsSeqType:()=>Dl,IAmfRecursiveTypes:()=>Us,IAmfRequestTypes:()=>ul,IAmfResourceTypeTypes:()=>Vl,IAmfResponseTypes:()=>hl,IAmfScalarNodeTypes:()=>Ls,IAmfScalarTypes:()=>Is,IAmfSchemaTypes:()=>il,IAmfScopeTypes:()=>Al,IAmfSecurityRequirementTypes:()=>fl,IAmfSecuritySchemeFragmentTypes:()=>Bl,IAmfSecuritySchemeTypes:()=>yl,IAmfServerType:()=>nl,IAmfSourceMapTypes:()=>Pl,IAmfSupportedOperationTypes:()=>pl,IAmfTagTypes:()=>$l,IAmfTemplatedLinkTypes:()=>El,IAmfTraitFragmentTypes:()=>ql,IAmfTraitTypes:()=>Ll,IAmfTupleTypes:()=>zs,IAmfUnionTypes:()=>Rs,IAmfVariableValueTypes:()=>Ml,IAmfWebApiType:()=>al,IAmfXmlSerializationTypes:()=>Vs});var Is=[d.aml.vocabularies.shapes.ScalarShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Ps=[d.aml.vocabularies.shapes.ArrayShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Os=[d.w3.shacl.NodeShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Cs=[d.w3.shacl.PropertyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],rl=[d.aml.vocabularies.shapes.NilShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Rs=[d.aml.vocabularies.shapes.UnionShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Ts=[d.aml.vocabularies.shapes.FileShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Ds=[d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],il=[d.aml.vocabularies.shapes.SchemaShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],zs=[d.aml.vocabularies.shapes.TupleShape,d.aml.vocabularies.shapes.ArrayShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Us=[d.aml.vocabularies.shapes.RecursiveShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Vs=[d.aml.vocabularies.shapes.XMLSerializer,d.aml.vocabularies.document.DomainElement],Ls=[d.aml.vocabularies.data.Scalar,d.aml.vocabularies.data.Node,d.aml.vocabularies.document.DomainElement],Ms=[d.aml.vocabularies.data.Array,d.w3.rdfSyntax.Seq,d.aml.vocabularies.data.Node,d.aml.vocabularies.document.DomainElement],Fs=[d.aml.vocabularies.data.Object,d.aml.vocabularies.data.Node,d.aml.vocabularies.document.DomainElement],sl=[d.aml.vocabularies.apiContract.Example,d.aml.vocabularies.document.DomainElement],al=[d.aml.vocabularies.apiContract.WebAPI,d.aml.vocabularies.apiContract.API,d.aml.vocabularies.document.RootDomainElement,d.aml.vocabularies.document.DomainElement],nl=[d.aml.vocabularies.apiContract.Server,d.aml.vocabularies.document.DomainElement],ol=[d.aml.vocabularies.apiContract.Parameter,d.aml.vocabularies.core.Parameter,d.aml.vocabularies.document.DomainElement],ll=[d.aml.vocabularies.core.Organization,d.aml.vocabularies.document.DomainElement],cl=[d.aml.vocabularies.core.License,d.aml.vocabularies.document.DomainElement],dl=[d.aml.vocabularies.apiContract.EndPoint,d.aml.vocabularies.document.DomainElement],pl=[d.aml.vocabularies.apiContract.Operation,d.aml.vocabularies.core.Operation,d.aml.vocabularies.document.DomainElement],ul=[d.aml.vocabularies.apiContract.Request,d.aml.vocabularies.core.Request,d.aml.vocabularies.apiContract.Message,d.aml.vocabularies.document.DomainElement],hl=[d.aml.vocabularies.apiContract.Response,d.aml.vocabularies.core.Response,d.aml.vocabularies.apiContract.Message,d.aml.vocabularies.document.DomainElement],ml=[d.aml.vocabularies.apiContract.Payload,d.aml.vocabularies.core.Payload,d.aml.vocabularies.document.DomainElement],fl=[d.aml.vocabularies.security.SecurityRequirement,d.aml.vocabularies.document.DomainElement],gl=[d.aml.vocabularies.security.ParametrizedSecurityScheme,d.aml.vocabularies.document.DomainElement],yl=[d.aml.vocabularies.security.SecurityScheme,d.aml.vocabularies.document.DomainElement],bl=[d.aml.vocabularies.security.OAuth2Settings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],kl=[d.aml.vocabularies.security.OAuth2Flow,d.aml.vocabularies.document.DomainElement],wl=[d.aml.vocabularies.security.OAuth1Settings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],vl=[d.aml.vocabularies.security.HttpSettings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],_l=[d.aml.vocabularies.security.ApiKeySettings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],Sl=[d.aml.vocabularies.security.OpenIdConnectSettings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],Al=[d.aml.vocabularies.security.Scope,d.aml.vocabularies.document.DomainElement],xl=[d.aml.vocabularies.apiContract.Callback,d.aml.vocabularies.document.DomainElement],El=[d.aml.vocabularies.apiContract.TemplatedLink,d.aml.vocabularies.document.DomainElement],Nl=[d.aml.vocabularies.apiContract.IriTemplateMapping,d.aml.vocabularies.document.DomainElement],$l=[d.aml.vocabularies.apiContract.Tag,d.aml.vocabularies.document.DomainElement],jl=[d.aml.vocabularies.apiContract.Message,d.aml.vocabularies.document.DomainElement],Il=[d.aml.vocabularies.apiContract.DomainExtension,d.aml.vocabularies.document.DomainElement],Pl=[d.aml.vocabularies.docSourceMaps.SourceMap],Ol=[d.aml.vocabularies.document.Document,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Module,d.aml.vocabularies.document.Unit],Cl=[d.aml.vocabularies.core.CreativeWork,d.aml.vocabularies.document.DomainElement],Rl=[d.aml.vocabularies.apiContract.Encoding,d.aml.vocabularies.document.DomainElement],Tl=[d.aml.vocabularies.document.APIContractProcessingData],Dl=[d.w3.rdfSchema.Seq],zl=[d.aml.vocabularies.apiContract.ParametrizedResourceType,d.aml.vocabularies.document.ParametrizedDeclaration,d.aml.vocabularies.document.DomainElement],Ul=[d.aml.vocabularies.apiContract.ParametrizedTrait,d.aml.vocabularies.document.ParametrizedDeclaration,d.aml.vocabularies.document.DomainElement],Vl=[d.aml.vocabularies.apiContract.ResourceType,d.aml.vocabularies.document.AbstractDeclaration,d.aml.vocabularies.document.DomainElement],Ll=[d.aml.vocabularies.apiContract.Trait,d.aml.vocabularies.document.AbstractDeclaration,d.aml.vocabularies.document.DomainElement],Ml=[d.aml.vocabularies.document.VariableValue,d.aml.vocabularies.document.DomainElement],Fl=[d.aml.vocabularies.document.Module,d.aml.vocabularies.document.Unit],Kl=[d.aml.vocabularies.shapes.DataTypeFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Jl=[d.aml.vocabularies.document.ExternalFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],ql=[d.aml.vocabularies.apiContract.TraitFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Bl=[d.aml.vocabularies.security.SecuritySchemeFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Gl=[d.aml.vocabularies.document.DomainProperty,d.w3.rdfSyntax.Property,d.aml.vocabularies.document.DomainElement],Hl=[d.aml.vocabularies.document.ExternalDomainElement,d.aml.vocabularies.document.DomainElement],Wl=[d.aml.vocabularies.document.BaseUnitProcessingData],Xl=[d.aml.vocabularies.apiContract.AsyncAPI,d.aml.vocabularies.apiContract.API,d.aml.vocabularies.document.RootDomainElement,d.aml.vocabularies.document.DomainElement];function Da(o){return{id:`xml-serializer-${o}`,types:Vs,customDomainProperties:[]}}function Ks(o){return{id:o,types:[],values:[],inherits:[],or:[],and:[],xone:[],customDomainProperties:[]}}function Et(o){return{...Ks(o),types:Ds,examples:[],xmlSerialization:Da(o)}}function Yl(o){let e=Et(o);return e.types=Os,e.id=`node-shape-${o}`,{...e,properties:[],dependencies:[],customShapeProperties:[],customShapePropertyDefinitions:[]}}function Zl(o){let e=Et(o);return e.id=`scalar-shape-${o}`,e.types=Is,e}function Ql(o){let e=Et(o);return e.id=`union-shape-${o}`,e.types=Rs,{...e,anyOf:[]}}function ec(o){let e=Et(o);return e.id=`file-shape-${o}`,e.types=Ts,e}function tc(o){let e=Et(o);return e.id=`array-shape-${o}`,e.types=Ps,e}function rc(o){let e=Et(o);return e.id=`tuple-shape-${o}`,e.types=zs,{...e,items:[]}}function ic(o){let e=Et(o);return e.types=Cs,e}function sc(o,e){return{...Ks(o),id:`recursive-${o}`,types:Us,fixPoint:e||""}}import{customAlphabet as ac}from"nanoid";var za=ac("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_",21);var Ye=class o{id=za();types;name;properties;value;dataType;members;customDomainProperties=[];static scalar(e,t){let r=new o("scalar");return r.value=e,r.dataType=t,r}constructor(e){if(typeof e=="string"){if(e==="scalar")this.types=Ls;else if(e==="array")this.types=Ms;else if(e==="object")this.types=Fs;else throw new Error(`Invalid data node init option: ${e}`);return}if(!e)throw new Error("Expected an initialization option.");let t=e,{id:r,types:i,customDomainProperties:s}=t;if(this.id=r,this.types=i,this.customDomainProperties=s,i.includes(d.aml.vocabularies.data.Scalar)){let a=t;this.value=a.value,this.dataType=a.dataType}else if(i.includes(d.aml.vocabularies.data.Object)){let a=t,n={};this.properties=n,Object.keys(a.properties).forEach(l=>{let c=new o(a.properties[l]);n[l]=c})}else if(i.includes(d.aml.vocabularies.data.Array)){let a=t,n=[];this.members=n,Array.isArray(a.members)&&a.members.forEach(l=>{let c=new o(l);n.push(c)})}}toJSON(){let{id:e,customDomainProperties:t,types:r,name:i}=this,s={id:e,types:r,customDomainProperties:t};if(i&&(s.name=i),r.includes(d.aml.vocabularies.data.Scalar)){let a=s;a.dataType=this.dataType,a.value=this.value}else if(r.includes(d.aml.vocabularies.data.Object)){let a=s;a.properties={};let n=this.properties;n&&Object.keys(n).forEach(l=>{a.properties[l]=n[l].toJSON()})}else if(r.includes(d.aml.vocabularies.data.Array)){let a=s;a.members=[],this.members&&this.members.forEach(n=>{a.members.push(n.toJSON())})}return s}addMember(e){if(!this.types.includes(d.aml.vocabularies.data.Array))throw new Error("Not an ArrayNode.");this.members||(this.members=[]),this.members.push(e)}removeMember(e){if(!this.types.includes(d.aml.vocabularies.data.Array))throw new Error("Not an ArrayNode.");if(!this.members)return;let t=this.members.findIndex(r=>r.id===e);t>=0&&this.members.splice(t,1)}addProperty(e,t){if(!this.types.includes(d.aml.vocabularies.data.Object))throw new Error("Not an ObjectNode.");this.properties||(this.properties={}),this.properties[e]=t}removeProperty(e){if(!this.types.includes(d.aml.vocabularies.data.Object))throw new Error("Not an ObjectNode.");this.properties&&delete this.properties[e]}};var ke=Symbol("nValue"),xr=Symbol("mValue"),Ua=Symbol("matrixAValue"),wi=Symbol("upperMaskValue"),vi=Symbol("lowerMaskValue"),G=Symbol("mtValue"),Pe=Symbol("mtiValue"),_i=Symbol("instancesValue"),Nt=class o{static[_i]=new Map;[ke]=624;[xr]=397;[Ua]=2567483615;[wi]=2147483648;[vi]=2147483647;[G]=new Array(this[ke]);[Pe]=this[ke]+1;constructor(e=o.seedFn()){this.initGenRand(e)}static seedFn(){return Math.floor(Math.random()*10**13)}static fromSeed(e=o.seedFn()){if(this[_i].has(e))return this[_i].get(e);let t=new o(e);return this[_i].set(e,t),t}initGenRand(e){let t=e;for(this[G][0]=t>>>0,this[Pe]=1;this[Pe]<this[ke];this[Pe]++)t=this[G][this[Pe]-1]^this[G][this[Pe]-1]>>>30,this[G][this[Pe]]=(((t&4294901760)>>>16)*1812433253<<16)+(t&65535)*1812433253+this[Pe],this[G][this[Pe]]>>>=0}initByArray(e,t){let r=1,i=0,s;this.initGenRand(19650218);let a=this[ke]>t?this[ke]:t;for(;a;a--)s=this[G][r-1]^this[G][r-1]>>>30,this[G][r]=(this[G][r]^(((s&4294901760)>>>16)*1664525<<16)+(s&65535)*1664525)+e[i]+i,this[G][r]>>>=0,r++,i++,r>=this[ke]&&(this[G][0]=this[G][this[ke]-1],r=1),i>=t&&(i=0);for(a=this[ke]-1;a;a--)s=this[G][r-1]^this[G][r-1]>>>30,this[G][r]=(this[G][r]^(((s&4294901760)>>>16)*1566083941<<16)+(s&65535)*1566083941)-r,this[G][r]>>>=0,r++,r>=this[ke]&&(this[G][0]=this[G][this[ke]-1],r=1);this[G][0]=2147483648}int32(){let e,t=[0,this[Ua]];if(this[Pe]>=this[ke]){let r;for(this[Pe]===this[ke]+1&&this.initGenRand(5489),r=0;r<this[ke]-this[xr];r++)e=this[G][r]&this[wi]|this[G][r+1]&this[vi],this[G][r]=this[G][r+this[xr]]^e>>>1^t[e&1];for(;r<this[ke]-1;r++)e=this[G][r]&this[wi]|this[G][r+1]&this[vi],this[G][r]=this[G][r+(this[xr]-this[ke])]^e>>>1^t[e&1];e=this[G][this[ke]-1]&this[wi]|this[G][0]&this[vi],this[G][this[ke]-1]=this[G][this[xr]-1]^e>>>1^t[e&1],this[Pe]=0}return e=this[G][this[Pe]++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0}int31(){return this.int32()>>>1}real1(){return this.int32()*(1/4294967295)}random(e=32768,t=0){return Math.floor(this.real2()*(e-t)+t)}real2(){return this.int32()*(1/4294967296)}real3(){return(this.int32()+.5)*(1/4294967296)}res53(){let e=this.int32()>>>5,t=this.int32()>>>6;return(e*67108864+t)*(1/9007199254740992)}};var Si="0123456789",Er="abcdefghijklmnopqrstuvwxyz",Ai=Er.toUpperCase(),Js=`${Si}abcdef`;function Va(o=""){return o.replace(/ /g,"-").replace(/[^一-龠ぁ-ゔァ-ヴー\w.-]+/g,"")}function Ze(o,e={}){let t={};typeof e=="number"?t.max=e:typeof e=="object"&&(t={...e}),typeof t.min!="number"&&(t.min=0),typeof t.max!="number"&&(t.max=99999),typeof t.precision!="number"&&(t.precision=1),t.max>0&&(t.max+=t.precision);let r=Math.floor(o.random(t.max/t.precision,t.min/t.precision));return t.precision===1||(r/=1/t.precision),r}function xi(o,e={}){let t={};return typeof e=="number"?t.precision=e:typeof e=="object"&&(t={...e}),typeof t.precision!="number"&&(t.precision=.01),Ze(o,t)}function La(o,e=10,t){let r=typeof t=="string"?t:Ai+Er,i={min:0,max:r.length-1};return new Array(e).fill("").map(()=>r[Ze(o,i)]).join("")}function Ma(o,e={}){let t={...e},r;switch(t.casing){case"lower":r=Er;break;case"upper":r=Ai;break;default:r=Er+Ai}if(!t.pool){t.pool="";let i="!@#$%^&*()[]";t.alpha&&(t.pool+=r),t.numeric&&(t.pool+=Si),t.symbols&&(t.pool+=i),t.pool||(t.pool=`${r}${Si}${i}`)}return t.pool.charAt(Ze(o,t.pool.length-1))}function Fa(o,e={}){let t={};typeof e=="number"?t.max=e:typeof e=="object"&&(t={...e});let r=864e13;(typeof t.min!="number"||t.min<r*-1)&&(t.min=new Date().setFullYear(1970,1,1)),(typeof t.max!="number"||t.max>r)&&(t.max=new Date().setFullYear(2100,1,1));let i=Ze(o,t);return new Date(i)}var Qt=Symbol("mtValue"),$t=class{[Qt];constructor(e){this[Qt]=Nt.fromSeed(e)}seed(e){this[Qt]=Nt.fromSeed(e)}pick(e,t){let r=t;typeof r!="number"?r=Ze(this[Qt],{min:1,max:e.length}):r>e.length?r=e.length:r<0&&(r=0);let i=[...e],s=i.length,a=s-r,n,l;for(;s-- >a;)l=Math.floor((s+1)*xi(this[Qt],{min:0,max:.99})),n=i[l],i[l]=i[s],i[s]=n;return i.slice(a)}pickOne(e){let t=Ze(this[Qt],{max:e.length-1});return e[t]}};var Nr=Symbol("randomValue"),Qe=Symbol("mtValue"),De=class{[Qe];[Nr];constructor(e){this[Qe]=Nt.fromSeed(e),this[Nr]=new $t(e)}seed(e){this[Qe]=Nt.fromSeed(e),this[Nr].seed(e)}number(e={}){return Ze(this[Qe],e)}float(e={}){return xi(this[Qe],e)}datetime(e={}){return Fa(this[Qe],e)}string(e=10,t){return La(this[Qe],e,t)}character(e={}){return Ma(this[Qe],e)}uuid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let r=this.number({min:0,max:15});return(t==="x"?r:r&3|8).toString(16)})}hash(e={}){let{length:t=40,casing:r="lower"}=e,i=r==="upper"?Js.toUpperCase():Js;return this.string(t,i)}boolean(e={}){let t={};if(typeof e=="number"?t.likelihood=e:typeof e=="object"&&(t={...e}),typeof t.likelihood>"u"&&(t.likelihood=Ze(this[Qe],{min:0,max:100})),t.likelihood<0||t.likelihood>100)throw new RangeError("Invalid likelihood range. Accepted range is [0, 100].");return this[Qe].real2()*100<t.likelihood}falsy(e={}){let t=e.pool||[!1,null,0,NaN,""];return this[Nr].pickOne(t)}hexaDecimal(e=1){let t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","A","B","C","D","E","F"];return`0x${this[Nr].pick(t,e).join("")}`}};var nc={names:["January","February","March","April","May","June","July","August","September","October","November","December"],abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},Ja=nc;var oc={names:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},qa=oc;var lc={month:Ja,weekday:qa},Ba=lc;var cc=Object.freeze({consonants:"bcdfghjklmnprstvwz",vowels:"aeiou"}),Ga=cc;var dc={free:["gmail.com","yahoo.com","hotmail.com"],example:["example.org","example.com","example.net"]},Ha=dc;var pc={suffix:["com","biz","info","name","net","org"]},Wa=pc;var uc=["0therplanet_128.jpg","1markiz_128.jpg","2fockus_128.jpg","8d3k_128.jpg","91bilal_128.jpg","9lessons_128.jpg","AM_Kn2_128.jpg","AlbertoCococi_128.jpg","BenouarradeM_128.jpg","BillSKenney_128.jpg","BrianPurkiss_128.jpg","BroumiYoussef_128.jpg","BryanHorsey_128.jpg","Chakintosh_128.jpg","ChrisFarina78_128.jpg","Elt_n_128.jpg","GavicoInd_128.jpg","HenryHoffman_128.jpg","IsaryAmairani_128.jpg","Karimmove_128.jpg","LucasPerdidao_128.jpg","ManikRathee_128.jpg","RussellBishop_128.jpg","S0ufi4n3_128.jpg","SULiik_128.jpg","Shriiiiimp_128.jpg","Silveredge9_128.jpg","Skyhartman_128.jpg","SlaapMe_128.jpg","Stievius_128.jpg","Talbi_ConSept_128.jpg","VMilescu_128.jpg","VinThomas_128.jpg","YoungCutlass_128.jpg","ZacharyZorbas_128.jpg","_dwite__128.jpg","_kkga_128.jpg","_pedropinho_128.jpg","_ragzor_128.jpg","_scottburgess_128.jpg","_shahedk_128.jpg","_victa_128.jpg","_vojto_128.jpg","_williamguerra_128.jpg","_yardenoon_128.jpg","a1chapone_128.jpg","a_brixen_128.jpg","a_harris88_128.jpg","aaronalfred_128.jpg","aaroni_128.jpg","aaronkwhite_128.jpg","abdots_128.jpg","abdulhyeuk_128.jpg","abdullindenis_128.jpg","abelcabans_128.jpg","abotap_128.jpg","abovefunction_128.jpg","adamawesomeface_128.jpg","adammarsbar_128.jpg","adamnac_128.jpg","adamsxu_128.jpg","adellecharles_128.jpg","ademilter_128.jpg","adhamdannaway_128.jpg","adhiardana_128.jpg","adityasutomo_128.jpg","adobi_128.jpg","adrienths_128.jpg","aeon56_128.jpg","afusinatto_128.jpg","agromov_128.jpg","agustincruiz_128.jpg","ah_lice_128.jpg","ahmadajmi_128.jpg","ahmetalpbalkan_128.jpg","ahmetsulek_128.jpg","aiiaiiaii_128.jpg","ainsleywagon_128.jpg","aio____128.jpg","airskylar_128.jpg","aislinnkelly_128.jpg","ajaxy_ru_128.jpg","aka_james_128.jpg","akashsharma39_128.jpg","akmalfikri_128.jpg","akmur_128.jpg","al_li_128.jpg","alagoon_128.jpg","alan_zhang__128.jpg","albertaugustin_128.jpg","alecarpentier_128.jpg","aleclarsoniv_128.jpg","aleinadsays_128.jpg","alek_djuric_128.jpg","aleksitappura_128.jpg","alessandroribe_128.jpg","alevizio_128.jpg","alexandermayes_128.jpg","alexivanichkin_128.jpg","algunsanabria_128.jpg","allagringaus_128.jpg","allfordesign_128.jpg","allthingssmitty_128.jpg","alsobrooks_128.jpg","alterchuca_128.jpg","aluisio_azevedo_128.jpg","alxleroydeval_128.jpg","alxndrustinov_128.jpg","amandabuzard_128.jpg","amanruzaini_128.jpg","amayvs_128.jpg","amywebbb_128.jpg","anaami_128.jpg","anasnakawa_128.jpg","anatolinicolae_128.jpg","andrea211087_128.jpg","andreas_pr_128.jpg","andresdjasso_128.jpg","andresenfredrik_128.jpg","andrewabogado_128.jpg","andrewarrow_128.jpg","andrewcohen_128.jpg","andrewofficer_128.jpg","andyisonline_128.jpg","andysolomon_128.jpg","andytlaw_128.jpg","angelceballos_128.jpg","angelcolberg_128.jpg","angelcreative_128.jpg","anjhero_128.jpg","ankitind_128.jpg","anoff_128.jpg","anthonysukow_128.jpg","antjanus_128.jpg","antongenkin_128.jpg","antonyryndya_128.jpg","antonyzotov_128.jpg","aoimedia_128.jpg","apriendeau_128.jpg","arashmanteghi_128.jpg","areandacom_128.jpg","areus_128.jpg","ariffsetiawan_128.jpg","ariil_128.jpg","arindam__128.jpg","arishi__128.jpg","arkokoley_128.jpg","aroon_sharma_128.jpg","arpitnj_128.jpg","artd_sign_128.jpg","artem_kostenko_128.jpg","arthurholcombe1_128.jpg","artvavs_128.jpg","ashernatali_128.jpg","ashocka18_128.jpg","atanism_128.jpg","atariboy_128.jpg","ateneupopular_128.jpg","attacks_128.jpg","aviddayentonbay_128.jpg","axel_128.jpg","badlittleduck_128.jpg","bagawarman_128.jpg","baires_128.jpg","balakayuriy_128.jpg","balintorosz_128.jpg","baliomega_128.jpg","baluli_128.jpg","bargaorobalo_128.jpg","barputro_128.jpg","bartjo_128.jpg","bartoszdawydzik_128.jpg","bassamology_128.jpg","batsirai_128.jpg","baumann_alex_128.jpg","baumannzone_128.jpg","bboy1895_128.jpg","bcrad_128.jpg","begreative_128.jpg","belyaev_rs_128.jpg","benefritz_128.jpg","benjamin_knight_128.jpg","bennyjien_128.jpg","benoitboucart_128.jpg","bereto_128.jpg","bergmartin_128.jpg","bermonpainter_128.jpg","bertboerland_128.jpg","besbujupi_128.jpg","beshur_128.jpg","betraydan_128.jpg","beweinreich_128.jpg","bfrohs_128.jpg","bighanddesign_128.jpg","bigmancho_128.jpg","billyroshan_128.jpg","bistrianiosip_128.jpg","blakehawksworth_128.jpg","blakesimkins_128.jpg","bluefx__128.jpg","bluesix_128.jpg","bobbytwoshoes_128.jpg","bobwassermann_128.jpg","bolzanmarco_128.jpg","borantula_128.jpg","borges_marcos_128.jpg","bowbrick_128.jpg","boxmodel_128.jpg","bpartridge_128.jpg","bradenhamm_128.jpg","brajeshwar_128.jpg","brandclay_128.jpg","brandonburke_128.jpg","brandonflatsoda_128.jpg","brandonmorreale_128.jpg","brenmurrell_128.jpg","brenton_clarke_128.jpg","bruno_mart_128.jpg","brunodesign1206_128.jpg","bryan_topham_128.jpg","bu7921_128.jpg","bublienko_128.jpg","buddhasource_128.jpg","buleswapnil_128.jpg","bungiwan_128.jpg","buryaknick_128.jpg","buzzusborne_128.jpg","byrnecore_128.jpg","byryan_128.jpg","cadikkara_128.jpg","calebjoyce_128.jpg","calebogden_128.jpg","canapud_128.jpg","carbontwelve_128.jpg","carlfairclough_128.jpg","carlosblanco_eu_128.jpg","carlosgavina_128.jpg","carlosjgsousa_128.jpg","carlosm_128.jpg","carlyson_128.jpg","caseycavanagh_128.jpg","caspergrl_128.jpg","catadeleon_128.jpg","catarino_128.jpg","cboller1_128.jpg","cbracco_128.jpg","ccinojasso1_128.jpg","cdavis565_128.jpg","cdharrison_128.jpg","ceekaytweet_128.jpg","cemshid_128.jpg","cggaurav_128.jpg","chaabane_wail_128.jpg","chacky14_128.jpg","chadami_128.jpg","chadengle_128.jpg","chaensel_128.jpg","chandlervdw_128.jpg","chanpory_128.jpg","charlesrpratt_128.jpg","charliecwaite_128.jpg","charliegann_128.jpg","chatyrko_128.jpg","cherif_b_128.jpg","chris_frees_128.jpg","chris_witko_128.jpg","chrismj83_128.jpg","chrisslowik_128.jpg","chrisstumph_128.jpg","christianoliff_128.jpg","chrisvanderkooi_128.jpg","ciaranr_128.jpg","cicerobr_128.jpg","claudioguglieri_128.jpg","cloudstudio_128.jpg","clubb3rry_128.jpg","cocolero_128.jpg","codepoet_ru_128.jpg","coderdiaz_128.jpg","codysanfilippo_128.jpg","cofla_128.jpg","colgruv_128.jpg","colirpixoil_128.jpg","collegeman_128.jpg","commadelimited_128.jpg","conspirator_128.jpg","constantx_128.jpg","coreyginnivan_128.jpg","coreyhaggard_128.jpg","coreyweb_128.jpg","craigelimeliah_128.jpg","craighenneberry_128.jpg","craigrcoles_128.jpg","creartinc_128.jpg","croakx_128.jpg","curiousoffice_128.jpg","curiousonaut_128.jpg","cybind_128.jpg","cynthiasavard_128.jpg","cyril_gaillard_128.jpg","d00maz_128.jpg","d33pthought_128.jpg","d_kobelyatsky_128.jpg","d_nny_m_cher_128.jpg","dactrtr_128.jpg","dahparra_128.jpg","dallasbpeters_128.jpg","damenleeturks_128.jpg","danillos_128.jpg","daniloc_128.jpg","danmartin70_128.jpg","dannol_128.jpg","danpliego_128.jpg","danro_128.jpg","dansowter_128.jpg","danthms_128.jpg","danvernon_128.jpg","danvierich_128.jpg","darcystonge_128.jpg","darylws_128.jpg","davecraige_128.jpg","davidbaldie_128.jpg","davidcazalis_128.jpg","davidhemphill_128.jpg","davidmerrique_128.jpg","davidsasda_128.jpg","dawidwu_128.jpg","daykiine_128.jpg","dc_user_128.jpg","dcalonaci_128.jpg","ddggccaa_128.jpg","de_ascanio_128.jpg","deeenright_128.jpg","demersdesigns_128.jpg","denisepires_128.jpg","depaulawagner_128.jpg","derekcramer_128.jpg","derekebradley_128.jpg","derienzo777_128.jpg","desastrozo_128.jpg","designervzm_128.jpg","dev_essentials_128.jpg","devankoshal_128.jpg","deviljho__128.jpg","devinhalladay_128.jpg","dgajjar_128.jpg","dgclegg_128.jpg","dhilipsiva_128.jpg","dhoot_amit_128.jpg","dhooyenga_128.jpg","dhrubo_128.jpg","diansigitp_128.jpg","dicesales_128.jpg","diesellaws_128.jpg","digitalmaverick_128.jpg","dimaposnyy_128.jpg","dingyi_128.jpg","divya_128.jpg","dixchen_128.jpg","djsherman_128.jpg","dmackerman_128.jpg","dmitriychuta_128.jpg","dnezkumar_128.jpg","dnirmal_128.jpg","donjain_128.jpg","doooon_128.jpg","doronmalki_128.jpg","dorphern_128.jpg","dotgridline_128.jpg","dparrelli_128.jpg","dpmachado_128.jpg","dreizle_128.jpg","drewbyreese_128.jpg","dshster_128.jpg","dss49_128.jpg","dudestein_128.jpg","duivvv_128.jpg","dutchnadia_128.jpg","dvdwinden_128.jpg","dzantievm_128.jpg","ecommerceil_128.jpg","eddiechen_128.jpg","edgarchris99_128.jpg","edhenderson_128.jpg","edkf_128.jpg","edobene_128.jpg","eduardostuart_128.jpg","ehsandiary_128.jpg","eitarafa_128.jpg","el_fuertisimo_128.jpg","elbuscainfo_128.jpg","elenadissi_128.jpg","elisabethkjaer_128.jpg","elliotlewis_128.jpg","elliotnolten_128.jpg","embrcecreations_128.jpg","emileboudeling_128.jpg","emmandenn_128.jpg","emmeffess_128.jpg","emsgulam_128.jpg","enda_128.jpg","enjoythetau_128.jpg","enricocicconi_128.jpg","envex_128.jpg","ernestsemerda_128.jpg","erwanhesry_128.jpg","estebanuribe_128.jpg","eugeneeweb_128.jpg","evandrix_128.jpg","evanshajed_128.jpg","exentrich_128.jpg","eyronn_128.jpg","fabbianz_128.jpg","fabbrucci_128.jpg","faisalabid_128.jpg","falconerie_128.jpg","falling_soul_128.jpg","falvarad_128.jpg","felipeapiress_128.jpg","felipecsl_128.jpg","ffbel_128.jpg","finchjke_128.jpg","findingjenny_128.jpg","fiterik_128.jpg","fjaguero_128.jpg","flashmurphy_128.jpg","flexrs_128.jpg","foczzi_128.jpg","fotomagin_128.jpg","fran_mchamy_128.jpg","francis_vega_128.jpg","franciscoamk_128.jpg","frankiefreesbie_128.jpg","fronx_128.jpg","funwatercat_128.jpg","g3d_128.jpg","gaborenton_128.jpg","gabrielizalo_128.jpg","gabrielrosser_128.jpg","ganserene_128.jpg","garand_128.jpg","gauchomatt_128.jpg","gauravjassal_128.jpg","gavr1l0_128.jpg","gcmorley_128.jpg","gearpixels_128.jpg","geneseleznev_128.jpg","geobikas_128.jpg","geran7_128.jpg","geshan_128.jpg","giancarlon_128.jpg","gipsy_raf_128.jpg","giuliusa_128.jpg","gizmeedevil1991_128.jpg","gkaam_128.jpg","gmourier_128.jpg","goddardlewis_128.jpg","gofrasdesign_128.jpg","gojeanyn_128.jpg","gonzalorobaina_128.jpg","grahamkennery_128.jpg","greenbes_128.jpg","gregkilian_128.jpg","gregrwilkinson_128.jpg","gregsqueeb_128.jpg","grrr_nl_128.jpg","gseguin_128.jpg","gt_128.jpg","gu5taf_128.jpg","guiiipontes_128.jpg","guillemboti_128.jpg","guischmitt_128.jpg","gusoto_128.jpg","h1brd_128.jpg","hafeeskhan_128.jpg","hai_ninh_nguyen_128.jpg","haligaliharun_128.jpg","hanna_smi_128.jpg","happypeter1983_128.jpg","harry_sistalam_128.jpg","haruintesettden_128.jpg","hasslunsford_128.jpg","haydn_woods_128.jpg","helderleal_128.jpg","hellofeverrrr_128.jpg","her_ruu_128.jpg","herbigt_128.jpg","herkulano_128.jpg","hermanobrother_128.jpg","herrhaase_128.jpg","heycamtaylor_128.jpg","heyimjuani_128.jpg","heykenneth_128.jpg","hfalucas_128.jpg","hgharrygo_128.jpg","hiemil_128.jpg","hjartstrorn_128.jpg","hoangloi_128.jpg","holdenweb_128.jpg","homka_128.jpg","horaciobella_128.jpg","hota_v_128.jpg","hsinyo23_128.jpg","hugocornejo_128.jpg","hugomano_128.jpg","iamgarth_128.jpg","iamglimy_128.jpg","iamjdeleon_128.jpg","iamkarna_128.jpg","iamkeithmason_128.jpg","iamsteffen_128.jpg","id835559_128.jpg","idiot_128.jpg","iduuck_128.jpg","ifarafonow_128.jpg","igorgarybaldi_128.jpg","illyzoren_128.jpg","ilya_pestov_128.jpg","imammuht_128.jpg","imcoding_128.jpg","imomenui_128.jpg","imsoper_128.jpg","increase_128.jpg","incubo82_128.jpg","instalox_128.jpg","ionuss_128.jpg","ipavelek_128.jpg","iqbalperkasa_128.jpg","iqonicd_128.jpg","irae_128.jpg","isaacfifth_128.jpg","isacosta_128.jpg","ismail_biltagi_128.jpg","isnifer_128.jpg","itolmach_128.jpg","itsajimithing_128.jpg","itskawsar_128.jpg","itstotallyamy_128.jpg","ivanfilipovbg_128.jpg","j04ntoh_128.jpg","j2deme_128.jpg","j_drake__128.jpg","jackiesaik_128.jpg","jacksonlatka_128.jpg","jacobbennett_128.jpg","jagan123_128.jpg","jakemoore_128.jpg","jamiebrittain_128.jpg","janpalounek_128.jpg","jarjan_128.jpg","jarsen_128.jpg","jasonmarkjones_128.jpg","javorszky_128.jpg","jay_wilburn_128.jpg","jayphen_128.jpg","jayrobinson_128.jpg","jcubic_128.jpg","jedbridges_128.jpg","jefffis_128.jpg","jeffgolenski_128.jpg","jehnglynn_128.jpg","jennyshen_128.jpg","jennyyo_128.jpg","jeremery_128.jpg","jeremiaha_128.jpg","jeremiespoken_128.jpg","jeremymouton_128.jpg","jeremyshimko_128.jpg","jeremyworboys_128.jpg","jerrybai1907_128.jpg","jervo_128.jpg","jesseddy_128.jpg","jffgrdnr_128.jpg","jghyllebert_128.jpg","jimmuirhead_128.jpg","jitachi_128.jpg","jjshaw14_128.jpg","jjsiii_128.jpg","jlsolerdeltoro_128.jpg","jm_denis_128.jpg","jmfsocial_128.jpg","jmillspaysbills_128.jpg","jnmnrd_128.jpg","joannefournier_128.jpg","joaoedumedeiros_128.jpg","jodytaggart_128.jpg","joe_black_128.jpg","joelcipriano_128.jpg","joelhelin_128.jpg","joemdesign_128.jpg","joetruesdell_128.jpg","joeymurdah_128.jpg","johannesneu_128.jpg","johncafazza_128.jpg","johndezember_128.jpg","johnriordan_128.jpg","johnsmithagency_128.jpg","joki4_128.jpg","jomarmen_128.jpg","jonathansimmons_128.jpg","jonkspr_128.jpg","jonsgotwood_128.jpg","jordyvdboom_128.jpg","joreira_128.jpg","josecarlospsh_128.jpg","josemarques_128.jpg","josep_martins_128.jpg","josevnclch_128.jpg","joshaustin_128.jpg","joshhemsley_128.jpg","joshmedeski_128.jpg","joshuaraichur_128.jpg","joshuasortino_128.jpg","jpenico_128.jpg","jpscribbles_128.jpg","jqiuss_128.jpg","juamperro_128.jpg","juangomezw_128.jpg","juanmamartinez_128.jpg","juaumlol_128.jpg","judzhin_miles_128.jpg","justinrgraham_128.jpg","justinrhee_128.jpg","justinrob_128.jpg","justme_timothyg_128.jpg","jwalter14_128.jpg","jydesign_128.jpg","kaelifa_128.jpg","kalmerrautam_128.jpg","kamal_chaneman_128.jpg","kanickairaj_128.jpg","kapaluccio_128.jpg","karalek_128.jpg","karlkanall_128.jpg","karolkrakowiak__128.jpg","karsh_128.jpg","karthipanraj_128.jpg","kaspernordkvist_128.jpg","katiemdaly_128.jpg","kaysix_dizzy_128.jpg","kazaky999_128.jpg","kennyadr_128.jpg","kerem_128.jpg","kerihenare_128.jpg","keryilmaz_128.jpg","kevinjohndayy_128.jpg","kevinoh_128.jpg","kevka_128.jpg","keyuri85_128.jpg","kianoshp_128.jpg","kijanmaharjan_128.jpg","kikillo_128.jpg","kimcool_128.jpg","kinday_128.jpg","kirangopal_128.jpg","kiwiupover_128.jpg","kkusaa_128.jpg","klefue_128.jpg","klimmka_128.jpg","knilob_128.jpg","kohette_128.jpg","kojourin_128.jpg","kolage_128.jpg","kolmarlopez_128.jpg","kolsvein_128.jpg","konus_128.jpg","koridhandy_128.jpg","kosmar_128.jpg","kostaspt_128.jpg","krasnoukhov_128.jpg","krystalfister_128.jpg","kucingbelang4_128.jpg","kudretkeskin_128.jpg","kuldarkalvik_128.jpg","kumarrajan12123_128.jpg","kurafire_128.jpg","kurtinc_128.jpg","kushsolitary_128.jpg","kvasnic_128.jpg","ky_128.jpg","kylefoundry_128.jpg","kylefrost_128.jpg","laasli_128.jpg","lanceguyatt_128.jpg","langate_128.jpg","larrybolt_128.jpg","larrygerard_128.jpg","laurengray_128.jpg","lawlbwoy_128.jpg","layerssss_128.jpg","leandrovaranda_128.jpg","lebinoclard_128.jpg","lebronjennan_128.jpg","leehambley_128.jpg","leeiio_128.jpg","leemunroe_128.jpg","leonfedotov_128.jpg","lepetitogre_128.jpg","lepinski_128.jpg","levisan_128.jpg","lewisainslie_128.jpg","lhausermann_128.jpg","liminha_128.jpg","lingeswaran_128.jpg","linkibol_128.jpg","linux29_128.jpg","lisovsky_128.jpg","llun_128.jpg","lmjabreu_128.jpg","loganjlambert_128.jpg","logorado_128.jpg","lokesh_coder_128.jpg","lonesomelemon_128.jpg","longlivemyword_128.jpg","looneydoodle_128.jpg","lososina_128.jpg","louis_currie_128.jpg","low_res_128.jpg","lowie_128.jpg","lu4sh1i_128.jpg","ludwiczakpawel_128.jpg","luxe_128.jpg","lvovenok_128.jpg","m4rio_128.jpg","m_kalibry_128.jpg","ma_tiax_128.jpg","mactopus_128.jpg","macxim_128.jpg","madcampos_128.jpg","madebybrenton_128.jpg","madebyvadim_128.jpg","madewulf_128.jpg","madshensel_128.jpg","madysondesigns_128.jpg","magoo04_128.jpg","magugzbrand2d_128.jpg","mahdif_128.jpg","mahmoudmetwally_128.jpg","maikelk_128.jpg","maiklam_128.jpg","malgordon_128.jpg","malykhinv_128.jpg","mandalareopens_128.jpg","manekenthe_128.jpg","mangosango_128.jpg","manigm_128.jpg","marakasina_128.jpg","marciotoledo_128.jpg","marclgonzales_128.jpg","marcobarbosa_128.jpg","marcomano__128.jpg","marcoramires_128.jpg","marcusgorillius_128.jpg","markjenkins_128.jpg","marklamb_128.jpg","markolschesky_128.jpg","markretzloff_128.jpg","markwienands_128.jpg","marlinjayakody_128.jpg","marosholly_128.jpg","marrimo_128.jpg","marshallchen__128.jpg","martinansty_128.jpg","martip07_128.jpg","mashaaaaal_128.jpg","mastermindesign_128.jpg","matbeedotcom_128.jpg","mateaodviteza_128.jpg","matkins_128.jpg","matt3224_128.jpg","mattbilotti_128.jpg","mattdetails_128.jpg","matthewkay__128.jpg","mattlat_128.jpg","mattsapii_128.jpg","mauriolg_128.jpg","maximseshuk_128.jpg","maximsorokin_128.jpg","maxlinderman_128.jpg","maz_128.jpg","mbilalsiddique1_128.jpg","mbilderbach_128.jpg","mcflydesign_128.jpg","mds_128.jpg","mdsisto_128.jpg","meelford_128.jpg","megdraws_128.jpg","mekal_128.jpg","meln1ks_128.jpg","melvindidit_128.jpg","mfacchinello_128.jpg","mgonto_128.jpg","mhaligowski_128.jpg","mhesslow_128.jpg","mhudobivnik_128.jpg","michaelabehsera_128.jpg","michaelbrooksjr_128.jpg","michaelcolenso_128.jpg","michaelcomiskey_128.jpg","michaelkoper_128.jpg","michaelmartinho_128.jpg","michalhron_128.jpg","michigangraham_128.jpg","michzen_128.jpg","mighty55_128.jpg","miguelkooreman_128.jpg","miguelmendes_128.jpg","mikaeljorhult_128.jpg","mikebeecham_128.jpg","mikemai2awesome_128.jpg","millinet_128.jpg","mirfanqureshi_128.jpg","missaaamy_128.jpg","mizhgan_128.jpg","mizko_128.jpg","mkginfo_128.jpg","mocabyte_128.jpg","mohanrohith_128.jpg","moscoz_128.jpg","motionthinks_128.jpg","moynihan_128.jpg","mr_shiznit_128.jpg","mr_subtle_128.jpg","mrebay007_128.jpg","mrjamesnoble_128.jpg","mrmartineau_128.jpg","mrxloka_128.jpg","mslarkina_128.jpg","msveet_128.jpg","mtolokonnikov_128.jpg","mufaddal_mw_128.jpg","mugukamil_128.jpg","muridrahhal_128.jpg","muringa_128.jpg","murrayswift_128.jpg","mutlu82_128.jpg","mutu_krish_128.jpg","mvdheuvel_128.jpg","mwarkentin_128.jpg","myastro_128.jpg","mylesb_128.jpg","mymyboy_128.jpg","n1ght_coder_128.jpg","n3dmax_128.jpg","n_tassone_128.jpg","nacho_128.jpg","naitanamoreno_128.jpg","namankreative_128.jpg","nandini_m_128.jpg","nasirwd_128.jpg","nastya_mane_128.jpg","nateschulte_128.jpg","nathalie_fs_128.jpg","naupintos_128.jpg","nbirckel_128.jpg","nckjrvs_128.jpg","necodymiconer_128.jpg","nehfy_128.jpg","nellleo_128.jpg","nelshd_128.jpg","nelsonjoyce_128.jpg","nemanjaivanovic_128.jpg","nepdud_128.jpg","nerdgr8_128.jpg","nerrsoft_128.jpg","nessoila_128.jpg","netonet_il_128.jpg","newbrushes_128.jpg","nfedoroff_128.jpg","nickfratter_128.jpg","nicklacke_128.jpg","nicolai_larsen_128.jpg","nicolasfolliot_128.jpg","nicoleglynn_128.jpg","nicollerich_128.jpg","nilshelmersson_128.jpg","nilshoenson_128.jpg","ninjad3m0_128.jpg","nitinhayaran_128.jpg","nomidesigns_128.jpg","normanbox_128.jpg","notbadart_128.jpg","noufalibrahim_128.jpg","noxdzine_128.jpg","nsamoylov_128.jpg","ntfblog_128.jpg","nutzumi_128.jpg","nvkznemo_128.jpg","nwdsha_128.jpg","nyancecom_128.jpg","oaktreemedia_128.jpg","okandungel_128.jpg","okansurreel_128.jpg","okcoker_128.jpg","oksanafrewer_128.jpg","okseanjay_128.jpg","oktayelipek_128.jpg","olaolusoga_128.jpg","olgary_128.jpg","omnizya_128.jpg","ooomz_128.jpg","operatino_128.jpg","opnsrce_128.jpg","orkuncaylar_128.jpg","oscarowusu_128.jpg","oskamaya_128.jpg","oskarlevinson_128.jpg","osmanince_128.jpg","osmond_128.jpg","ostirbu_128.jpg","osvaldas_128.jpg","otozk_128.jpg","ovall_128.jpg","overcloacked_128.jpg","overra_128.jpg","panchajanyag_128.jpg","panghal0_128.jpg","patrickcoombe_128.jpg","paulfarino_128.jpg","pcridesagain_128.jpg","peachananr_128.jpg","pechkinator_128.jpg","peejfancher_128.jpg","pehamondello_128.jpg","perfectflow_128.jpg","perretmagali_128.jpg","petar_prog_128.jpg","petebernardo_128.jpg","peter576_128.jpg","peterlandt_128.jpg","petrangr_128.jpg","phillapier_128.jpg","picard102_128.jpg","pierre_nel_128.jpg","pierrestoffe_128.jpg","pifagor_128.jpg","pixage_128.jpg","plasticine_128.jpg","plbabin_128.jpg","pmeissner_128.jpg","polarity_128.jpg","ponchomendivil_128.jpg","poormini_128.jpg","popey_128.jpg","posterjob_128.jpg","praveen_vijaya_128.jpg","prheemo_128.jpg","primozcigler_128.jpg","prinzadi_128.jpg","privetwagner_128.jpg","prrstn_128.jpg","psaikali_128.jpg","psdesignuk_128.jpg","puzik_128.jpg","pyronite_128.jpg","quailandquasar_128.jpg","r_garcia_128.jpg","r_oy_128.jpg","rachelreveley_128.jpg","rahmeen_128.jpg","ralph_lam_128.jpg","ramanathan_pdy_128.jpg","randomlies_128.jpg","rangafangs_128.jpg","raphaelnikson_128.jpg","raquelwilson_128.jpg","ratbus_128.jpg","rawdiggie_128.jpg","rdbannon_128.jpg","rdsaunders_128.jpg","reabo101_128.jpg","reetajayendra_128.jpg","rehatkathuria_128.jpg","reideiredale_128.jpg","renbyrd_128.jpg","rez___a_128.jpg","ricburton_128.jpg","richardgarretts_128.jpg","richwild_128.jpg","rickdt_128.jpg","rickyyean_128.jpg","rikas_128.jpg","ripplemdk_128.jpg","rmlewisuk_128.jpg","rob_thomas10_128.jpg","robbschiller_128.jpg","robergd_128.jpg","robinclediere_128.jpg","robinlayfield_128.jpg","robturlinckx_128.jpg","rodnylobos_128.jpg","rohixx_128.jpg","romanbulah_128.jpg","roxanejammet_128.jpg","roybarberuk_128.jpg","rpatey_128.jpg","rpeezy_128.jpg","rtgibbons_128.jpg","rtyukmaev_128.jpg","rude_128.jpg","ruehldesign_128.jpg","runningskull_128.jpg","russell_baylis_128.jpg","russoedu_128.jpg","ruzinav_128.jpg","rweve_128.jpg","ryandownie_128.jpg","ryanjohnson_me_128.jpg","ryankirkman_128.jpg","ryanmclaughlin_128.jpg","ryhanhassan_128.jpg","ryuchi311_128.jpg","s4f1_128.jpg","saarabpreet_128.jpg","sachacorazzi_128.jpg","sachingawas_128.jpg","safrankov_128.jpg","sainraja_128.jpg","salimianoff_128.jpg","salleedesign_128.jpg","salvafc_128.jpg","samgrover_128.jpg","samihah_128.jpg","samscouto_128.jpg","samuelkraft_128.jpg","sandywoodruff_128.jpg","sangdth_128.jpg","santi_urso_128.jpg","saschadroste_128.jpg","saschamt_128.jpg","sasha_shestakov_128.jpg","saulihirvi_128.jpg","sawalazar_128.jpg","sawrb_128.jpg","sbtransparent_128.jpg","scips_128.jpg","scott_riley_128.jpg","scottfeltham_128.jpg","scottgallant_128.jpg","scottiedude_128.jpg","scottkclark_128.jpg","scrapdnb_128.jpg","sdidonato_128.jpg","sebashton_128.jpg","sementiy_128.jpg","serefka_128.jpg","sergeyalmone_128.jpg","sergeysafonov_128.jpg","sethlouey_128.jpg","seyedhossein1_128.jpg","sgaurav_baghel_128.jpg","shadeed9_128.jpg","shalt0ni_128.jpg","shaneIxD_128.jpg","shanehudson_128.jpg","sharvin_128.jpg","shesgared_128.jpg","shinze_128.jpg","shoaib253_128.jpg","shojberg_128.jpg","shvelo96_128.jpg","silv3rgvn_128.jpg","silvanmuhlemann_128.jpg","simobenso_128.jpg","sindresorhus_128.jpg","sircalebgrove_128.jpg","skkirilov_128.jpg","slowspock_128.jpg","smaczny_128.jpg","smalonso_128.jpg","smenov_128.jpg","snowshade_128.jpg","snowwrite_128.jpg","sokaniwaal_128.jpg","solid_color_128.jpg","souperphly_128.jpg","souuf_128.jpg","sovesove_128.jpg","soyjavi_128.jpg","spacewood__128.jpg","spbroma_128.jpg","spedwig_128.jpg","sprayaga_128.jpg","sreejithexp_128.jpg","ssbb_me_128.jpg","ssiskind_128.jpg","sta1ex_128.jpg","stalewine_128.jpg","stan_128.jpg","stayuber_128.jpg","stefanotirloni_128.jpg","stefanozoffoli_128.jpg","stefooo_128.jpg","stefvdham_128.jpg","stephcoue_128.jpg","sterlingrules_128.jpg","stevedesigner_128.jpg","steynviljoen_128.jpg","strikewan_128.jpg","stushona_128.jpg","sulaqo_128.jpg","sunlandictwin_128.jpg","sunshinedgirl_128.jpg","superoutman_128.jpg","supervova_128.jpg","supjoey_128.jpg","suprb_128.jpg","sur4dye_128.jpg","surgeonist_128.jpg","suribbles_128.jpg","svenlen_128.jpg","swaplord_128.jpg","sweetdelisa_128.jpg","switmer777_128.jpg","swooshycueb_128.jpg","sydlawrence_128.jpg","syropian_128.jpg","tanveerrao_128.jpg","taybenlor_128.jpg","taylorling_128.jpg","tbakdesigns_128.jpg","teddyzetterlund_128.jpg","teeragit_128.jpg","tereshenkov_128.jpg","terpimost_128.jpg","terrorpixel_128.jpg","terryxlife_128.jpg","teylorfeliz_128.jpg","tgerken_128.jpg","tgormtx_128.jpg","thaisselenator__128.jpg","thaodang17_128.jpg","thatonetommy_128.jpg","the_purplebunny_128.jpg","the_winslet_128.jpg","thedamianhdez_128.jpg","thedjpetersen_128.jpg","thehacker_128.jpg","thekevinjones_128.jpg","themadray_128.jpg","themikenagle_128.jpg","themrdave_128.jpg","theonlyzeke_128.jpg","therealmarvin_128.jpg","thewillbeard_128.jpg","thiagovernetti_128.jpg","thibaut_re_128.jpg","thierrykoblentz_128.jpg","thierrymeier__128.jpg","thimo_cz_128.jpg","thinkleft_128.jpg","thomasgeisen_128.jpg","thomasschrijer_128.jpg","timgthomas_128.jpg","timmillwood_128.jpg","timothycd_128.jpg","timpetricola_128.jpg","tjrus_128.jpg","to_soham_128.jpg","tobysaxon_128.jpg","toddrew_128.jpg","tom_even_128.jpg","tomas_janousek_128.jpg","tonymillion_128.jpg","traneblow_128.jpg","travis_arnold_128.jpg","travishines_128.jpg","tristanlegros_128.jpg","trubeatto_128.jpg","trueblood_33_128.jpg","tumski_128.jpg","tur8le_128.jpg","turkutuuli_128.jpg","tweetubhai_128.jpg","twittypork_128.jpg","txcx_128.jpg","uberschizo_128.jpg","ultragex_128.jpg","umurgdk_128.jpg","unterdreht_128.jpg","urrutimeoli_128.jpg","uxalex_128.jpg","uxpiper_128.jpg","uxward_128.jpg","vanchesz_128.jpg","vaughanmoffitt_128.jpg","vc27_128.jpg","vicivadeline_128.jpg","victorDubugras_128.jpg","victor_haydin_128.jpg","victordeanda_128.jpg","victorerixon_128.jpg","victorquinn_128.jpg","victorstuber_128.jpg","vigobronx_128.jpg","vijaykarthik_128.jpg","vikashpathak18_128.jpg","vikasvinfotech_128.jpg","vimarethomas_128.jpg","vinciarts_128.jpg","vitor376_128.jpg","vitorleal_128.jpg","vivekprvr_128.jpg","vj_demien_128.jpg","vladarbatov_128.jpg","vladimirdevic_128.jpg","vladyn_128.jpg","vlajki_128.jpg","vm_f_128.jpg","vocino_128.jpg","vonachoo_128.jpg","vovkasolovev_128.jpg","vytautas_a_128.jpg","waghner_128.jpg","wake_gs_128.jpg","we_social_128.jpg","wearesavas_128.jpg","weavermedia_128.jpg","webtanya_128.jpg","weglov_128.jpg","wegotvices_128.jpg","wesleytrankin_128.jpg","wikiziner_128.jpg","wiljanslofstra_128.jpg","wim1k_128.jpg","wintopia_128.jpg","woodsman001_128.jpg","woodydotmx_128.jpg","wtrsld_128.jpg","xadhix_128.jpg","xalionmalik_128.jpg","xamorep_128.jpg","xiel_128.jpg","xilantra_128.jpg","xravil_128.jpg","xripunov_128.jpg","xtopherpaul_128.jpg","y2graphic_128.jpg","yalozhkin_128.jpg","yassiryahya_128.jpg","yayteejay_128.jpg","yecidsm_128.jpg","yehudab_128.jpg","yesmeck_128.jpg","yigitpinarbasi_128.jpg","zackeeler_128.jpg","zaki3d_128.jpg","zauerkraut_128.jpg","zforrester_128.jpg","zvchkelly_128.jpg"],Xa=uc;var hc={email:Ha,domain:Wa,avatar:Xa},Ya=hc;var mc={female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna","Rebecca","Virginia","Kathleen","Pamela","Martha","Debra","Amanda","Stephanie","Carolyn","Christine","Marie","Janet","Catherine","Frances","Ann","Joyce","Diane","Alice","Julie","Heather","Teresa","Doris","Gloria","Evelyn","Jean","Cheryl","Mildred","Katherine","Joan","Ashley","Judith","Rose","Janice","Kelly","Nicole","Judy","Christina","Kathy","Theresa","Beverly","Denise","Tammy","Irene","Jane","Lori","Rachel","Marilyn","Andrea","Kathryn","Louise","Sara","Anne","Jacqueline","Wanda","Bonnie","Julia","Ruby","Lois","Tina","Phyllis","Norma","Paula","Diana","Annie","Lillian","Emily","Robin","Peggy","Crystal","Gladys","Rita","Dawn","Connie","Florence","Tracy","Edna","Tiffany","Carmen","Rosa","Cindy","Grace","Wendy","Victoria","Edith","Kim","Sherry","Sylvia","Josephine","Thelma","Shannon","Sheila","Ethel","Ellen","Elaine","Marjorie","Carrie","Charlotte","Monica","Esther","Pauline","Emma","Juanita","Anita","Rhonda","Hazel","Amber","Eva","Debbie","April","Leslie","Clara","Lucille","Jamie","Joanne","Eleanor","Valerie","Danielle","Megan","Alicia","Suzanne","Michele","Gail","Bertha","Darlene","Veronica","Jill","Erin","Geraldine","Lauren","Cathy","Joann","Lorraine","Lynn","Sally","Regina","Erica","Beatrice","Dolores","Bernice","Audrey","Yvonne","Annette","June","Samantha","Marion","Dana","Stacy","Ana","Renee","Ida","Vivian","Roberta","Holly","Brittany","Melanie","Loretta","Yolanda","Jeanette","Laurie","Katie","Kristen","Vanessa","Alma","Sue","Elsie","Beth","Jeanne","Vicki","Carla","Tara","Rosemary","Eileen","Terri","Gertrude","Lucy","Tonya","Ella","Stacey","Wilma","Gina","Kristin","Jessie","Natalie","Agnes","Vera","Willie","Charlene","Bessie","Delores","Melinda","Pearl","Arlene","Maureen","Colleen","Allison","Tamara","Joy","Georgia","Constance","Lillie","Claudia","Jackie","Marcia","Tanya","Nellie","Minnie","Marlene","Heidi","Glenda","Lydia","Viola","Courtney","Marian","Stella","Caroline","Dora","Jo","Vickie","Mattie","Terry","Maxine","Irma","Mabel","Marsha","Myrtle","Lena","Christy","Deanna","Patsy","Hilda","Gwendolyn","Jennie","Nora","Margie","Nina","Cassandra","Leah","Penny","Kay","Priscilla","Naomi","Carole","Brandy","Olga","Billie","Dianne","Tracey","Leona","Jenny","Felicia","Sonia","Miriam","Velma","Becky","Bobbie","Violet","Kristina","Toni","Misty","Mae","Shelly","Daisy","Ramona","Sherri","Erika","Katrina","Claire","Lindsey","Lindsay","Geneva","Guadalupe","Belinda","Margarita","Sheryl","Cora","Faye","Ada","Natasha","Sabrina","Isabel","Marguerite","Hattie","Harriet","Molly","Cecilia","Kristi","Brandi","Blanche","Sandy","Rosie","Joanna","Iris","Eunice","Angie","Inez","Lynda","Madeline","Amelia","Alberta","Genevieve","Monique","Jodi","Janie","Maggie","Kayla","Sonya","Jan","Lee","Kristine","Candace","Fannie","Maryann","Opal","Alison","Yvette","Melody","Luz","Susie","Olivia","Flora","Shelley","Kristy","Mamie","Lula","Lola","Verna","Beulah","Antoinette","Candice","Juana","Jeannette","Pam","Kelli","Hannah","Whitney","Bridget","Karla","Celia","Latoya","Patty","Shelia","Gayle","Della","Vicky","Lynne","Sheri","Marianne","Kara","Jacquelyn","Erma","Blanca","Myra","Leticia","Pat","Krista","Roxanne","Angelica","Johnnie","Robyn","Francis","Adrienne","Rosalie","Alexandra","Brooke","Bethany","Sadie","Bernadette","Traci","Jody","Kendra","Jasmine","Nichole","Rachael","Chelsea","Mable","Ernestine","Muriel","Marcella","Elena","Krystal","Angelina","Nadine","Kari","Estelle","Dianna","Paulette","Lora","Mona","Doreen","Rosemarie","Angel","Desiree","Antonia","Hope","Ginger","Janis","Betsy","Christie","Freda","Mercedes","Meredith","Lynette","Teri","Cristina","Eula","Leigh","Meghan","Sophia","Eloise","Rochelle","Gretchen","Cecelia","Raquel","Henrietta","Alyssa","Jana","Kelley","Gwen","Kerry","Jenna","Tricia","Laverne","Olive","Alexis","Tasha","Silvia","Elvira","Casey","Delia","Sophie","Kate","Patti","Lorena","Kellie","Sonja","Lila","Lana","Darla","May","Mindy","Essie","Mandy","Lorene","Elsa","Josefina","Jeannie","Miranda","Dixie","Lucia","Marta","Faith","Lela","Johanna","Shari","Camille","Tami","Shawna","Elisa","Ebony","Melba","Ora","Nettie","Tabitha","Ollie","Jaime","Winifred","Kristie"],male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric","Stephen","Andrew","Raymond","Gregory","Joshua","Jerry","Dennis","Walter","Patrick","Peter","Harold","Douglas","Henry","Carl","Arthur","Ryan","Roger","Joe","Juan","Jack","Albert","Jonathan","Justin","Terry","Gerald","Keith","Samuel","Willie","Ralph","Lawrence","Nicholas","Roy","Benjamin","Bruce","Brandon","Adam","Harry","Fred","Wayne","Billy","Steve","Louis","Jeremy","Aaron","Randy","Howard","Eugene","Carlos","Russell","Bobby","Victor","Martin","Ernest","Phillip","Todd","Jesse","Craig","Alan","Shawn","Clarence","Sean","Philip","Chris","Johnny","Earl","Jimmy","Antonio","Danny","Bryan","Tony","Luis","Mike","Stanley","Leonard","Nathan","Dale","Manuel","Rodney","Curtis","Norman","Allen","Marvin","Vincent","Glenn","Jeffery","Travis","Jeff","Chad","Jacob","Lee","Melvin","Alfred","Kyle","Francis","Bradley","Jesus","Herbert","Frederick","Ray","Joel","Edwin","Don","Eddie","Ricky","Troy","Randall","Barry","Alexander","Bernard","Mario","Leroy","Francisco","Marcus","Micheal","Theodore","Clifford","Miguel","Oscar","Jay","Jim","Tom","Calvin","Alex","Jon","Ronnie","Bill","Lloyd","Tommy","Leon","Derek","Warren","Darrell","Jerome","Floyd","Leo","Alvin","Tim","Wesley","Gordon","Dean","Greg","Jorge","Dustin","Pedro","Derrick","Dan","Lewis","Zachary","Corey","Herman","Maurice","Vernon","Roberto","Clyde","Glen","Hector","Shane","Ricardo","Sam","Rick","Lester","Brent","Ramon","Charlie","Tyler","Gilbert","Gene","Marc","Reginald","Ruben","Brett","Angel","Nathaniel","Rafael","Leslie","Edgar","Milton","Raul","Ben","Chester","Cecil","Duane","Franklin","Andre","Elmer","Brad","Gabriel","Ron","Mitchell","Roland","Arnold","Harvey","Jared","Adrian","Karl","Cory","Claude","Erik","Darryl","Jamie","Neil","Jessie","Christian","Javier","Fernando","Clinton","Ted","Mathew","Tyrone","Darren","Lonnie","Lance","Cody","Julio","Kelly","Kurt","Allan","Nelson","Guy","Clayton","Hugh","Max","Dwayne","Dwight","Armando","Felix","Jimmie","Everett","Jordan","Ian","Wallace","Ken","Bob","Jaime","Casey","Alfredo","Alberto","Dave","Ivan","Johnnie","Sidney","Byron","Julian","Isaac","Morris","Clifton","Willard","Daryl","Ross","Virgil","Andy","Marshall","Salvador","Perry","Kirk","Sergio","Marion","Tracy","Seth","Kent","Terrance","Rene","Eduardo","Terrence","Enrique","Freddie","Wade","Austin","Stuart","Fredrick","Arturo","Alejandro","Jackie","Joey","Nick","Luther","Wendell","Jeremiah","Evan","Julius","Dana","Donnie","Otis","Shannon","Trevor","Oliver","Luke","Homer","Gerard","Doug","Kenny","Hubert","Angelo","Shaun","Lyle","Matt","Lynn","Alfonso","Orlando","Rex","Carlton","Ernesto","Cameron","Neal","Pablo","Lorenzo","Omar","Wilbur","Blake","Grant","Horace","Roderick","Kerry","Abraham","Willis","Rickey","Jean","Ira","Andres","Cesar","Johnathan","Malcolm","Rudolph","Damon","Kelvin","Rudy","Preston","Alton","Archie","Marco","Wm","Pete","Randolph","Garry","Geoffrey","Jonathon","Felipe","Bennie","Gerardo","Ed","Dominic","Robin","Loren","Delbert","Colin","Guillermo","Earnest","Lucas","Benny","Noel","Spencer","Rodolfo","Myron","Edmund","Garrett","Salvatore","Cedric","Lowell","Gregg","Sherman","Wilson","Devin","Sylvester","Kim","Roosevelt","Israel","Jermaine","Forrest","Wilbert","Leland","Simon","Guadalupe","Clark","Irving","Carroll","Bryant","Owen","Rufus","Woodrow","Sammy","Kristopher","Mack","Levi","Marcos","Gustavo","Jake","Lionel","Marty","Taylor","Ellis","Dallas","Gilberto","Clint","Nicolas","Laurence","Ismael","Orville","Drew","Jody","Ervin","Dewey","Al","Wilfred","Josh","Hugo","Ignacio","Caleb","Tomas","Sheldon","Erick","Frankie","Stewart","Doyle","Darrel","Rogelio","Terence","Santiago","Alonzo","Elias","Bert","Elbert","Ramiro","Conrad","Pat","Noah","Grady","Phil","Cornelius","Lamar","Rolando","Clay","Percy","Dexter","Bradford","Merle","Darin","Amos","Terrell","Moses","Irvin","Saul","Roman","Darnell","Randal","Tommie","Timmy","Darrin","Winston","Brendan","Toby","Van","Abel","Dominick","Boyd","Courtney","Jan","Emilio","Elijah","Cary","Domingo","Santos","Aubrey","Emmett","Marlon","Emanuel","Jerald","Edmond"]},Za=mc;var qs=["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"],fc={general:qs,female:qs,male:qs},Qa=fc;var gc={binary:["Female","Male"],pool:["Asexual","Female to male trans man","Female to male transgender man","Female to male transsexual man","F2M","Gender neutral","Hermaphrodite","Intersex man","Intersex person","Intersex woman","Male to female trans woman","Male to female transgender woman","Male to female transsexual woman","Man","M2F","Polygender","T* man","T* woman","Two* person","Two-spirit person","Woman","Agender","Androgyne","Androgynes","Androgynous","Bigender","Cis","Cis Female","Cis Male","Cis Man","Cis Woman","Cisgender","Cisgender Female","Cisgender Male","Cisgender Man","Cisgender Woman","Female to Male","FTM","Gender Fluid","Gender Nonconforming","Gender Questioning","Gender Variant","Genderqueer","Intersex","Male to Female","MTF","Neither","Neutrois","Non-binary","Other","Pangender","Trans","Trans Female","Trans Male","Trans Man","Trans Person","Trans*Female","Trans*Male","Trans*Man","Trans*Person","Trans*Woman","Transexual","Transexual Female","Transexual Male","Transexual Man","Transexual Person","Transexual Woman","Transgender Female","Transgender Person","Transmasculine","Two-spirit"]},en=gc;var yc={descriptor:["Lead","Senior","Direct","Corporate","Dynamic","Future","Product","National","Regional","District","Central","Global","Customer","Investor","Dynamic","International","Legacy","Forward","Internal","Human","Chief","Principal"],level:["Solutions","Program","Brand","Security","Research","Marketing","Directives","Implementation","Integration","Functionality","Response","Paradigm","Tactics","Identity","Markets","Group","Division","Applications","Optimization","Operations","Infrastructure","Intranet","Communications","Web","Branding","Quality","Assurance","Mobility","Accounts","Data","Creative","Configuration","Accountability","Interactions","Factors","Usability","Metrics"],job:["Supervisor","Associate","Executive","Liaison","Officer","Manager","Engineer","Specialist","Director","Coordinator","Administrator","Architect","Analyst","Designer","Planner","Orchestrator","Technician","Developer","Producer","Consultant","Assistant","Facilitator","Agent","Representative","Strategist"]},tn=yc;var Bs=["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"],bc={gender:en,firstName:Za,lastName:Qa,title:tn,suffix:{general:Bs,female:Bs,male:Bs},prefix:{general:["Mr.","Mrs.","Ms.","Miss","Dr."],female:["Mrs.","Ms.","Miss"],male:["Mr.","Dr."]},templates:["#{prefix} #{first_name} #{last_name}","#{first_name} #{last_name} #{suffix}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{male_first_name} #{last_name}","#{female_first_name} #{last_name}"]},rn=bc;var sn=["abandoned","able","absolute","adorable","adventurous","academic","acceptable","acclaimed","accomplished","accurate","aching","acidic","acrobatic","active","actual","adept","admirable","admired","adolescent","adorable","adored","advanced","afraid","affectionate","aged","aggravating","aggressive","agile","agitated","agonizing","agreeable","ajar","alarmed","alarming","alert","alienated","alive","all","altruistic","amazing","ambitious","ample","amused","amusing","anchored","ancient","angelic","angry","anguished","animated","annual","another","antique","anxious","any","apprehensive","appropriate","apt","arctic","arid","aromatic","artistic","ashamed","assured","astonishing","athletic","attached","attentive","attractive","austere","authentic","authorized","automatic","avaricious","average","aware","awesome","awful","awkward","babyish","bad","back","baggy","bare","barren","basic","beautiful","belated","beloved","beneficial","better","best","bewitched","big","big-hearted","biodegradable","bite-sized","bitter","black","black-and-white","bland","blank","blaring","bleak","blind","blissful","blond","blue","blushing","bogus","boiling","bold","bony","boring","bossy","both","bouncy","bountiful","bowed","brave","breakable","brief","bright","brilliant","brisk","broken","bronze","brown","bruised","bubbly","bulky","bumpy","buoyant","burdensome","burly","bustling","busy","buttery","buzzing","calculating","calm","candid","canine","capital","carefree","careful","careless","caring","cautious","cavernous","celebrated","charming","cheap","cheerful","cheery","chief","chilly","chubby","circular","classic","clean","clear","clear-cut","clever","close","closed","cloudy","clueless","clumsy","cluttered","coarse","cold","colorful","colorless","colossal","comfortable","common","compassionate","competent","complete","complex","complicated","composed","concerned","concrete","confused","conscious","considerate","constant","content","conventional","cooked","cool","cooperative","coordinated","corny","corrupt","costly","courageous","courteous","crafty","crazy","creamy","creative","creepy","criminal","crisp","critical","crooked","crowded","cruel","crushing","cuddly","cultivated","cultured","cumbersome","curly","curvy","cute","cylindrical","damaged","damp","dangerous","dapper","daring","darling","dark","dazzling","dead","deadly","deafening","dear","dearest","decent","decimal","decisive","deep","defenseless","defensive","defiant","deficient","definite","definitive","delayed","delectable","delicious","delightful","delirious","demanding","dense","dental","dependable","dependent","descriptive","deserted","detailed","determined","devoted","different","difficult","digital","diligent","dim","dimpled","dimwitted","direct","disastrous","discrete","disfigured","disgusting","disloyal","dismal","distant","downright","dreary","dirty","disguised","dishonest","dismal","distant","distinct","distorted","dizzy","dopey","doting","double","downright","drab","drafty","dramatic","dreary","droopy","dry","dual","dull","dutiful","each","eager","earnest","early","easy","easy-going","ecstatic","edible","educated","elaborate","elastic","elated","elderly","electric","elegant","elementary","elliptical","embarrassed","embellished","eminent","emotional","empty","enchanted","enchanting","energetic","enlightened","enormous","enraged","entire","envious","equal","equatorial","essential","esteemed","ethical","euphoric","even","evergreen","everlasting","every","evil","exalted","excellent","exemplary","exhausted","excitable","excited","exciting","exotic","expensive","experienced","expert","extraneous","extroverted","extra-large","extra-small","fabulous","failing","faint","fair","faithful","fake","false","familiar","famous","fancy","fantastic","far","faraway","far-flung","far-off","fast","fat","fatal","fatherly","favorable","favorite","fearful","fearless","feisty","feline","female","feminine","few","fickle","filthy","fine","finished","firm","first","firsthand","fitting","fixed","flaky","flamboyant","flashy","flat","flawed","flawless","flickering","flimsy","flippant","flowery","fluffy","fluid","flustered","focused","fond","foolhardy","foolish","forceful","forked","formal","forsaken","forthright","fortunate","fragrant","frail","frank","frayed","free","french","fresh","frequent","friendly","frightened","frightening","frigid","frilly","frizzy","frivolous","front","frosty","frozen","frugal","fruitful","full","fumbling","functional","funny","fussy","fuzzy","gargantuan","gaseous","general","generous","gentle","genuine","giant","giddy","gigantic","gifted","giving","glamorous","glaring","glass","gleaming","gleeful","glistening","glittering","gloomy","glorious","glossy","glum","golden","good","good-natured","gorgeous","graceful","gracious","grand","grandiose","granular","grateful","grave","gray","great","greedy","green","gregarious","grim","grimy","gripping","grizzled","gross","grotesque","grouchy","grounded","growing","growling","grown","grubby","gruesome","grumpy","guilty","gullible","gummy","hairy","half","handmade","handsome","handy","happy","happy-go-lucky","hard","hard-to-find","harmful","harmless","harmonious","harsh","hasty","hateful","haunting","healthy","heartfelt","hearty","heavenly","heavy","hefty","helpful","helpless","hidden","hideous","high","high-level","hilarious","hoarse","hollow","homely","honest","honorable","honored","hopeful","horrible","hospitable","hot","huge","humble","humiliating","humming","humongous","hungry","hurtful","husky","icky","icy","ideal","idealistic","identical","idle","idiotic","idolized","ignorant","ill","illegal","ill-fated","ill-informed","illiterate","illustrious","imaginary","imaginative","immaculate","immaterial","immediate","immense","impassioned","impeccable","impartial","imperfect","imperturbable","impish","impolite","important","impossible","impractical","impressionable","impressive","improbable","impure","inborn","incomparable","incompatible","incomplete","inconsequential","incredible","indelible","inexperienced","indolent","infamous","infantile","infatuated","inferior","infinite","informal","innocent","insecure","insidious","insignificant","insistent","instructive","insubstantial","intelligent","intent","intentional","interesting","internal","international","intrepid","ironclad","irresponsible","irritating","itchy","jaded","jagged","jam-packed","jaunty","jealous","jittery","joint","jolly","jovial","joyful","joyous","jubilant","judicious","juicy","jumbo","junior","jumpy","juvenile","kaleidoscopic","keen","key","kind","kindhearted","kindly","klutzy","knobby","knotty","knowledgeable","knowing","known","kooky","kosher","lame","lanky","large","last","lasting","late","lavish","lawful","lazy","leading","lean","leafy","left","legal","legitimate","light","lighthearted","likable","likely","limited","limp","limping","linear","lined","liquid","little","live","lively","livid","loathsome","lone","lonely","long","long-term","loose","lopsided","lost","loud","lovable","lovely","loving","low","loyal","lucky","lumbering","luminous","lumpy","lustrous","luxurious","mad","made-up","magnificent","majestic","major","male","mammoth","married","marvelous","masculine","massive","mature","meager","mealy","mean","measly","meaty","medical","mediocre","medium","meek","mellow","melodic","memorable","menacing","merry","messy","metallic","mild","milky","mindless","miniature","minor","minty","miserable","miserly","misguided","misty","mixed","modern","modest","moist","monstrous","monthly","monumental","moral","mortified","motherly","motionless","mountainous","muddy","muffled","multicolored","mundane","murky","mushy","musty","muted","mysterious","naive","narrow","nasty","natural","naughty","nautical","near","neat","necessary","needy","negative","neglected","negligible","neighboring","nervous","new","next","nice","nifty","nimble","nippy","nocturnal","noisy","nonstop","normal","notable","noted","noteworthy","novel","noxious","numb","nutritious","nutty","obedient","obese","oblong","oily","oblong","obvious","occasional","odd","oddball","offbeat","offensive","official","old","old-fashioned","only","open","optimal","optimistic","opulent","orange","orderly","organic","ornate","ornery","ordinary","original","other","our","outlying","outgoing","outlandish","outrageous","outstanding","oval","overcooked","overdue","overjoyed","overlooked","palatable","pale","paltry","parallel","parched","partial","passionate","past","pastel","peaceful","peppery","perfect","perfumed","periodic","perky","personal","pertinent","pesky","pessimistic","petty","phony","physical","piercing","pink","pitiful","plain","plaintive","plastic","playful","pleasant","pleased","pleasing","plump","plush","polished","polite","political","pointed","pointless","poised","poor","popular","portly","posh","positive","possible","potable","powerful","powerless","practical","precious","present","prestigious","pretty","precious","previous","pricey","prickly","primary","prime","pristine","private","prize","probable","productive","profitable","profuse","proper","proud","prudent","punctual","pungent","puny","pure","purple","pushy","putrid","puzzled","puzzling","quaint","qualified","quarrelsome","quarterly","queasy","querulous","questionable","quick","quick-witted","quiet","quintessential","quirky","quixotic","quizzical","radiant","ragged","rapid","rare","rash","raw","recent","reckless","rectangular","ready","real","realistic","reasonable","red","reflecting","regal","regular","reliable","relieved","remarkable","remorseful","remote","repentant","required","respectful","responsible","repulsive","revolving","rewarding","rich","rigid","right","ringed","ripe","roasted","robust","rosy","rotating","rotten","rough","round","rowdy","royal","rubbery","rundown","ruddy","rude","runny","rural","rusty","sad","safe","salty","same","sandy","sane","sarcastic","sardonic","satisfied","scaly","scarce","scared","scary","scented","scholarly","scientific","scornful","scratchy","scrawny","second","secondary","second-hand","secret","self-assured","self-reliant","selfish","sentimental","separate","serene","serious","serpentine","several","severe","shabby","shadowy","shady","shallow","shameful","shameless","sharp","shimmering","shiny","shocked","shocking","shoddy","short","short-term","showy","shrill","shy","sick","silent","silky","silly","silver","similar","simple","simplistic","sinful","single","sizzling","skeletal","skinny","sleepy","slight","slim","slimy","slippery","slow","slushy","small","smart","smoggy","smooth","smug","snappy","snarling","sneaky","sniveling","snoopy","sociable","soft","soggy","solid","somber","some","spherical","sophisticated","sore","sorrowful","soulful","soupy","sour","spanish","sparkling","sparse","specific","spectacular","speedy","spicy","spiffy","spirited","spiteful","splendid","spotless","spotted","spry","square","squeaky","squiggly","stable","staid","stained","stale","standard","starchy","stark","starry","steep","sticky","stiff","stimulating","stingy","stormy","straight","strange","steel","strict","strident","striking","striped","strong","studious","stunning","stupendous","stupid","sturdy","stylish","subdued","submissive","substantial","subtle","suburban","sudden","sugary","sunny","super","superb","superficial","superior","supportive","sure-footed","surprised","suspicious","svelte","sweaty","sweet","sweltering","swift","sympathetic","tall","talkative","tame","tan","tangible","tart","tasty","tattered","taut","tedious","teeming","tempting","tender","tense","tepid","terrible","terrific","testy","thankful","that","these","thick","thin","third","thirsty","this","thorough","thorny","those","thoughtful","threadbare","thrifty","thunderous","tidy","tight","timely","tinted","tiny","tired","torn","total","tough","traumatic","treasured","tremendous","tragic","trained","tremendous","triangular","tricky","trifling","trim","trivial","troubled","true","trusting","trustworthy","trusty","truthful","tubby","turbulent","twin","ugly","ultimate","unacceptable","unaware","uncomfortable","uncommon","unconscious","understated","unequaled","uneven","unfinished","unfit","unfolded","unfortunate","unhappy","unhealthy","uniform","unimportant","unique","united","unkempt","unknown","unlawful","unlined","unlucky","unnatural","unpleasant","unrealistic","unripe","unruly","unselfish","unsightly","unsteady","unsung","untidy","untimely","untried","untrue","unused","unusual","unwelcome","unwieldy","unwilling","unwitting","unwritten","upbeat","upright","upset","urban","usable","used","useful","useless","utilized","utter","vacant","vague","vain","valid","valuable","vapid","variable","vast","velvety","venerated","vengeful","verifiable","vibrant","vicious","victorious","vigilant","vigorous","villainous","violet","violent","virtual","virtuous","visible","vital","vivacious","vivid","voluminous","wan","warlike","warm","warmhearted","warped","wary","wasteful","watchful","waterlogged","watery","wavy","wealthy","weak","weary","webbed","wee","weekly","weepy","weighty","weird","welcome","well-documented","well-groomed","well-informed","well-lit","well-made","well-off","well-to-do","well-worn","wet","which","whimsical","whirlwind","whispered","white","whole","whopping","wicked","wide","wide-eyed","wiggly","wild","willing","wilted","winding","windy","winged","wiry","wise","witty","wobbly","woeful","wonderful","wooden","woozy","wordy","worldly","worn","worried","worrisome","worse","worst","worthless","worthwhile","worthy","wrathful","wretched","writhing","wrong","wry","yawning","yearly","yellow","yellowish","young","youthful","yummy","zany","zealous","zesty","zigzag"];var an=["abnormally","absentmindedly","accidentally","acidly","actually","adventurously","afterwards","almost","always","angrily","annually","anxiously","arrogantly","awkwardly","badly","bashfully","beautifully","bitterly","bleakly","blindly","blissfully","boastfully","boldly","bravely","briefly","brightly","briskly","broadly","busily","calmly","carefully","carelessly","cautiously","certainly","cheerfully","clearly","cleverly","closely","coaxingly","colorfully","commonly","continually","coolly","correctly","courageously","crossly","cruelly","curiously","daily","daintily","dearly","deceivingly","deeply","defiantly","deliberately","delightfully","diligently","dimly","doubtfully","dreamily","easily","elegantly","energetically","enormously","enthusiastically","equally","especially","even","evenly","eventually","exactly","excitedly","extremely","fairly","faithfully","famously","far","fast","fatally","ferociously","fervently","fiercely","fondly","foolishly","fortunately","frankly","frantically","freely","frenetically","frightfully","fully","furiously","generally","generously","gently","gladly","gleefully","gracefully","gratefully","greatly","greedily","happily","hastily","healthily","heavily","helpfully","helplessly","highly","honestly","hopelessly","hourly","hungrily","immediately","innocently","inquisitively","instantly","intensely","intently","interestingly","inwardly","irritably","jaggedly","jealously","joshingly","jovially","joyfully","joyously","jubilantly","judgementally","justly","keenly","kiddingly","kindheartedly","kindly","kissingly","knavishly","knottily","knowingly","knowledgeably","kookily","lazily","less","lightly","likely","limply","lively","loftily","longingly","loosely","loudly","lovingly","loyally","madly","majestically","meaningfully","mechanically","merrily","miserably","mockingly","monthly","more","mortally","mostly","mysteriously","naturally","nearly","neatly","needily","nervously","never","nicely","noisily","not","obediently","obnoxiously","oddly","offensively","officially","often","only","openly","optimistically","overconfidently","owlishly","painfully","partially","patiently","perfectly","physically","playfully","politely","poorly","positively","potentially","powerfully","promptly","properly","punctually","quaintly","quarrelsomely","queasily","queerly","questionably","questioningly","quicker","quickly","quietly","quirkily","quizzically","rapidly","rarely","readily","really","reassuringly","recklessly","regularly","reluctantly","repeatedly","reproachfully","restfully","righteously","rightfully","rigidly","roughly","rudely","sadly","safely","scarcely","scarily","searchingly","sedately","seemingly","seldom","selfishly","separately","seriously","shakily","sharply","sheepishly","shrilly","shyly","silently","sleepily","slowly","smoothly","softly","solemnly","solidly","sometimes","soon","speedily","stealthily","sternly","strictly","successfully","suddenly","surprisingly","suspiciously","sweetly","swiftly","sympathetically","tenderly","tensely","terribly","thankfully","thoroughly","thoughtfully","tightly","tomorrow","too","tremendously","triumphantly","truly","truthfully","ultimately","unabashedly","unaccountably","unbearably","unethically","unexpectedly","unfortunately","unimpressively","unnaturally","unnecessarily","upbeat","upliftingly","upright","upside-down","upward","upwardly","urgently","usefully","uselessly","usually","utterly","vacantly","vaguely","vainly","valiantly","vastly","verbally","very","viciously","victoriously","violently","vivaciously","voluntarily","warmly","weakly","wearily","well","wetly","wholly","wildly","willfully","wisely","woefully","wonderfully","worriedly","wrongly","yawningly","yearly","yearningly","yesterday","yieldingly","youthfully"];var nn=["after","after all","although","and","as","as a result","as if","as long as","as much as","as soon as","as though","because","before","but","consequently","even","even if","even though","finally","for","for example","furthermore","hence","however","if","if only","if then","if when","in addition","in fact","in order that","inasmuch","incidentally","indeed","instead","just as","lest","likewise","meanwhile","nor","now","now since","now that","now when","once","or","provided","provided that","rather than","since","so","so that","supposing","that","though","until","whenever","whereas","wherever","which","who","yet"];var on=["yuck","oh","phooey","blah","boo","whoa","yowza","huzzah","boo hoo","fooey","geez","pfft","ew","ah","yum","brr","hm","yahoo","aha","woot","drat","gah","meh","psst","aw","ugh","yippee","eek","gee","bah","gadzooks","duh","ha","mmm","tsk tsk","ouch","phew","ack","uh-huh","gosh","hmph","pish","zowie","er","ick","oof","um"];var ln=["ATM","CD","SUV","TV","aardvark","abacus","abbey","abbreviation","abdomen","ability","abnormality","abolishment","abortion","abrogation","absence","abundance","abuse","academics","academy","accelerant","accelerator","accent","acceptance","access","accessory","accident","accommodation","accompanist","accomplishment","accord","accordance","accordion","account","accountability","accountant","accounting","accuracy","accusation","acetate","achievement","achiever","acid","acknowledgment","acorn","acoustics","acquaintance","acquisition","acre","acrylic","act","action","activation","activist","activity","actor","actress","acupuncture","ad","adaptation","adapter","addiction","addition","address","adjective","adjustment","admin","administration","administrator","admire","admission","adobe","adoption","adrenalin","adrenaline","adult","adulthood","advance","advancement","advantage","advent","adverb","advertisement","advertising","advice","adviser","advocacy","advocate","affair","affect","affidavit","affiliate","affinity","afoul","afterlife","aftermath","afternoon","aftershave","aftershock","afterthought","age","agency","agenda","agent","aggradation","aggression","aglet","agony","agreement","agriculture","aid","aide","aim","air","airbag","airbus","aircraft","airfare","airfield","airforce","airline","airmail","airman","airplane","airport","airship","airspace","alarm","alb","albatross","album","alcohol","alcove","alder","ale","alert","alfalfa","algebra","algorithm","alias","alibi","alien","allegation","allergist","alley","alliance","alligator","allocation","allowance","alloy","alluvium","almanac","almighty","almond","alpaca","alpenglow","alpenhorn","alpha","alphabet","altar","alteration","alternative","altitude","alto","aluminium","aluminum","amazement","amazon","ambassador","amber","ambience","ambiguity","ambition","ambulance","amendment","amenity","ammunition","amnesty","amount","amusement","anagram","analgesia","analog","analogue","analogy","analysis","analyst","analytics","anarchist","anarchy","anatomy","ancestor","anchovy","android","anesthesiologist","anesthesiology","angel","anger","angina","angiosperm","angle","angora","angstrom","anguish","animal","anime","anise","ankle","anklet","anniversary","announcement","annual","anorak","answer","ant","anteater","antecedent","antechamber","antelope","antennae","anterior","anthropology","antibody","anticipation","anticodon","antigen","antique","antiquity","antler","antling","anxiety","anybody","anyone","anything","anywhere","apartment","ape","aperitif","apology","app","apparatus","apparel","appeal","appearance","appellation","appendix","appetiser","appetite","appetizer","applause","apple","applewood","appliance","application","appointment","appreciation","apprehension","approach","appropriation","approval","apricot","apron","apse","aquarium","aquifer","arcade","arch","arch-rival","archaeologist","archaeology","archeology","archer","architect","architecture","archives","area","arena","argument","arithmetic","ark","arm","arm-rest","armadillo","armament","armchair","armoire","armor","armour","armpit","armrest","army","arrangement","array","arrest","arrival","arrogance","arrow","art","artery","arthur","artichoke","article","artifact","artificer","artist","ascend","ascent","ascot","ash","ashram","ashtray","aside","asparagus","aspect","asphalt","aspic","ass","assassination","assault","assembly","assertion","assessment","asset","assignment","assist","assistance","assistant","associate","association","assumption","assurance","asterisk","astrakhan","astrolabe","astrologer","astrology","astronomy","asymmetry","atelier","atheist","athlete","athletics","atmosphere","atom","atrium","attachment","attack","attacker","attainment","attempt","attendance","attendant","attention","attenuation","attic","attitude","attorney","attraction","attribute","auction","audience","audit","auditorium","aunt","authentication","authenticity","author","authorisation","authority","authorization","auto","autoimmunity","automation","automaton","autumn","availability","avalanche","avenue","average","avocado","award","awareness","awe","axis","azimuth","babe","baboon","babushka","baby","bachelor","back","back-up","backbone","backburn","backdrop","background","backpack","backup","backyard","bacon","bacterium","badge","badger","bafflement","bag","bagel","baggage","baggie","baggy","bagpipe","bail","bait","bake","baker","bakery","bakeware","balaclava","balalaika","balance","balcony","ball","ballet","balloon","balloonist","ballot","ballpark","bamboo","ban","banana","band","bandana","bandanna","bandolier","bandwidth","bangle","banjo","bank","bankbook","banker","banking","bankruptcy","banner","banquette","banyan","baobab","bar","barbecue","barbeque","barber","barbiturate","bargain","barge","baritone","barium","bark","barley","barn","barometer","barracks","barrage","barrel","barrier","barstool","bartender","base","baseball","baseboard","baseline","basement","basics","basil","basin","basis","basket","basketball","bass","bassinet","bassoon","bat","bath","bather","bathhouse","bathrobe","bathroom","bathtub","battalion","batter","battery","batting","battle","battleship","bay","bayou","beach","bead","beak","beam","bean","beancurd","beanie","beanstalk","bear","beard","beast","beastie","beat","beating","beauty","beaver","beck","bed","bedrock","bedroom","bee","beech","beef","beer","beet","beetle","beggar","beginner","beginning","begonia","behalf","behavior","behaviour","beheading","behest","behold","being","belfry","belief","believer","bell","belligerency","bellows","belly","belt","bench","bend","beneficiary","benefit","beret","berry","best-seller","bestseller","bet","beverage","beyond","bias","bibliography","bicycle","bid","bidder","bidding","bidet","bifocals","bijou","bike","bikini","bill","billboard","billing","billion","bin","binoculars","biology","biopsy","biosphere","biplane","birch","bird","bird-watcher","birdbath","birdcage","birdhouse","birth","birthday","biscuit","bit","bite","bitten","bitter","black","blackberry","blackbird","blackboard","blackfish","blackness","bladder","blade","blame","blank","blanket","blast","blazer","blend","blessing","blight","blind","blinker","blister","blizzard","block","blocker","blog","blogger","blood","bloodflow","bloom","bloomer","blossom","blouse","blow","blowgun","blowhole","blue","blueberry","blush","boar","board","boat","boatload","boatyard","bob","bobcat","body","bog","bolero","bolt","bomb","bomber","bombing","bond","bonding","bondsman","bone","bonfire","bongo","bonnet","bonsai","bonus","boogeyman","book","bookcase","bookend","booking","booklet","bookmark","boolean","boom","boon","boost","booster","boot","bootee","bootie","booty","border","bore","borrower","borrowing","bosom","boss","botany","bother","bottle","bottling","bottom","bottom-line","boudoir","bough","boulder","boulevard","boundary","bouquet","bourgeoisie","bout","boutique","bow","bower","bowl","bowler","bowling","bowtie","box","boxer","boxspring","boy","boycott","boyfriend","boyhood","boysenberry","bra","brace","bracelet","bracket","brain","brake","bran","branch","brand","brandy","brass","brassiere","bratwurst","bread","breadcrumb","breadfruit","break","breakdown","breakfast","breakpoint","breakthrough","breast","breastplate","breath","breeze","brewer","bribery","brick","bricklaying","bride","bridge","brief","briefing","briefly","briefs","brilliant","brink","brisket","broad","broadcast","broccoli","brochure","brocolli","broiler","broker","bronchitis","bronco","bronze","brooch","brood","brook","broom","brother","brother-in-law","brow","brown","brownie","browser","browsing","brunch","brush","brushfire","brushing","bubble","buck","bucket","buckle","buckwheat","bud","buddy","budget","buffalo","buffer","buffet","bug","buggy","bugle","builder","building","bulb","bulk","bull","bull-fighter","bulldozer","bullet","bump","bumper","bun","bunch","bungalow","bunghole","bunkhouse","burden","bureau","burglar","burial","burlesque","burn","burn-out","burning","burrito","burro","burrow","burst","bus","bush","business","businessman","bust","bustle","butane","butcher","butler","butter","butterfly","button","buy","buyer","buying","buzz","buzzard","c-clamp","cabana","cabbage","cabin","cabinet","cable","caboose","cacao","cactus","caddy","cadet","cafe","caffeine","caftan","cage","cake","calcification","calculation","calculator","calculus","calendar","calf","caliber","calibre","calico","call","calm","calorie","camel","cameo","camera","camp","campaign","campaigning","campanile","camper","campus","can","canal","cancer","candelabra","candidacy","candidate","candle","candy","cane","cannibal","cannon","canoe","canon","canopy","cantaloupe","canteen","canvas","cap","capability","capacity","cape","caper","capital","capitalism","capitulation","capon","cappelletti","cappuccino","captain","caption","captor","car","carabao","caramel","caravan","carbohydrate","carbon","carboxyl","card","cardboard","cardigan","care","career","cargo","caribou","carload","carnation","carnival","carol","carotene","carp","carpenter","carpet","carpeting","carport","carriage","carrier","carrot","carry","cart","cartel","carter","cartilage","cartload","cartoon","cartridge","carving","cascade","case","casement","cash","cashew","cashier","casino","casket","cassava","casserole","cassock","cast","castanet","castle","casualty","cat","catacomb","catalogue","catalysis","catalyst","catamaran","catastrophe","catch","catcher","category","caterpillar","cathedral","cation","catsup","cattle","cauliflower","causal","cause","causeway","caution","cave","caviar","cayenne","ceiling","celebration","celebrity","celeriac","celery","cell","cellar","cello","celsius","cement","cemetery","cenotaph","census","cent","center","centimeter","centre","centurion","century","cephalopod","ceramic","ceramics","cereal","ceremony","certainty","certificate","certification","cesspool","chafe","chain","chainstay","chair","chairlift","chairman","chairperson","chaise","chalet","chalice","chalk","challenge","chamber","champagne","champion","championship","chance","chandelier","change","channel","chaos","chap","chapel","chaplain","chapter","character","characteristic","characterization","chard","charge","charger","charity","charlatan","charm","charset","chart","charter","chasm","chassis","chastity","chasuble","chateau","chatter","chauffeur","chauvinist","check","checkbook","checking","checkout","checkroom","cheddar","cheek","cheer","cheese","cheesecake","cheetah","chef","chem","chemical","chemistry","chemotaxis","cheque","cherry","chess","chest","chestnut","chick","chicken","chicory","chief","chiffonier","child","childbirth","childhood","chili","chill","chime","chimpanzee","chin","chinchilla","chino","chip","chipmunk","chit-chat","chivalry","chive","chives","chocolate","choice","choir","choker","cholesterol","choosing","chop","chops","chopstick","chopsticks","chord","chorus","chow","chowder","chrome","chromolithograph","chronicle","chronograph","chronometer","chrysalis","chub","chuck","chug","church","churn","chutney","cicada","cigarette","cilantro","cinder","cinema","cinnamon","circadian","circle","circuit","circulation","circumference","circumstance","cirrhosis","cirrus","citizen","citizenship","citron","citrus","city","civilian","civilisation","civilization","claim","clam","clamp","clan","clank","clapboard","clarification","clarinet","clarity","clasp","class","classic","classification","classmate","classroom","clause","clave","clavicle","clavier","claw","clay","cleaner","clearance","clearing","cleat","cleavage","clef","cleft","clergyman","cleric","clerk","click","client","cliff","climate","climb","clinic","clip","clipboard","clipper","cloak","cloakroom","clock","clockwork","clogs","cloister","clone","close","closet","closing","closure","cloth","clothes","clothing","cloud","cloudburst","clove","clover","cloves","club","clue","cluster","clutch","co-producer","coach","coal","coalition","coast","coaster","coat","cob","cobbler","cobweb","cock","cockpit","cockroach","cocktail","cocoa","coconut","cod","code","codepage","codling","codon","codpiece","coevolution","cofactor","coffee","coffin","cohesion","cohort","coil","coin","coincidence","coinsurance","coke","cold","coleslaw","coliseum","collaboration","collagen","collapse","collar","collard","collateral","colleague","collection","collectivisation","collectivization","collector","college","collision","colloquy","colon","colonial","colonialism","colonisation","colonization","colony","color","colorlessness","colt","column","columnist","comb","combat","combination","combine","comeback","comedy","comestible","comfort","comfortable","comic","comics","comma","command","commander","commandment","comment","commerce","commercial","commission","commitment","committee","commodity","common","commonsense","commotion","communicant","communication","communion","communist","community","commuter","company","comparison","compass","compassion","compassionate","compensation","competence","competition","competitor","complaint","complement","completion","complex","complexity","compliance","complication","complicity","compliment","component","comportment","composer","composite","composition","compost","comprehension","compress","compromise","comptroller","compulsion","computer","comradeship","con","concentrate","concentration","concept","conception","concern","concert","conclusion","concrete","condition","conditioner","condominium","condor","conduct","conductor","cone","confectionery","conference","confidence","confidentiality","configuration","confirmation","conflict","conformation","confusion","conga","congo","congregation","congress","congressman","congressperson","conifer","connection","connotation","conscience","consciousness","consensus","consent","consequence","conservation","conservative","consideration","consignment","consist","consistency","console","consonant","conspiracy","conspirator","constant","constellation","constitution","constraint","construction","consul","consulate","consulting","consumer","consumption","contact","contact lens","contagion","container","content","contention","contest","context","continent","contingency","continuity","contour","contract","contractor","contrail","contrary","contrast","contribution","contributor","control","controller","controversy","convection","convenience","convention","conversation","conversion","convert","convertible","conviction","cook","cookbook","cookie","cooking","coonskin","cooperation","coordination","coordinator","cop","cop-out","cope","copper","copy","copying","copyright","copywriter","coral","cord","corduroy","core","cork","cormorant","corn","corner","cornerstone","cornet","cornflakes","cornmeal","corporal","corporation","corporatism","corps","corral","correspondence","correspondent","corridor","corruption","corsage","cosset","cost","costume","cot","cottage","cotton","couch","cougar","cough","council","councilman","councilor","councilperson","counsel","counseling","counselling","counsellor","counselor","count","counter","counter-force","counterpart","counterterrorism","countess","country","countryside","county","couple","coupon","courage","course","court","courthouse","courtroom","cousin","covariate","cover","coverage","coverall","cow","cowbell","cowboy","coyote","crab","crack","cracker","crackers","cradle","craft","craftsman","cranberry","crane","cranky","crap","crash","crate","cravat","craw","crawdad","crayfish","crayon","crazy","cream","creation","creationism","creationist","creative","creativity","creator","creature","creche","credential","credenza","credibility","credit","creditor","creek","creme brulee","crepe","crest","crew","crewman","crewmate","crewmember","crewmen","cria","crib","cribbage","cricket","cricketer","crime","criminal","crinoline","crisis","crisp","criteria","criterion","critic","criticism","crocodile","crocus","croissant","crook","crop","cross","cross-contamination","cross-stitch","crotch","croup","crow","crowd","crown","crucifixion","crude","cruelty","cruise","crumb","crunch","crusader","crush","crust","cry","crystal","crystallography","cub","cube","cuckoo","cucumber","cue","cuff-link","cuisine","cultivar","cultivator","culture","culvert","cummerbund","cup","cupboard","cupcake","cupola","curd","cure","curio","curiosity","curl","curler","currant","currency","current","curriculum","curry","curse","cursor","curtailment","curtain","curve","cushion","custard","custody","custom","customer","cut","cuticle","cutlet","cutover","cutting","cyclamen","cycle","cyclone","cyclooxygenase","cygnet","cylinder","cymbal","cynic","cyst","cytokine","cytoplasm","dad","daddy","daffodil","dagger","dahlia","daikon","daily","dairy","daisy","dam","damage","dame","damn","dance","dancer","dancing","dandelion","danger","dare","dark","darkness","darn","dart","dash","dashboard","data","database","date","daughter","dawn","day","daybed","daylight","dead","deadline","deal","dealer","dealing","dearest","death","deathwatch","debate","debris","debt","debtor","decade","decadence","decency","decimal","decision","decision-making","deck","declaration","declination","decline","decoder","decongestant","decoration","decrease","decryption","dedication","deduce","deduction","deed","deep","deer","default","defeat","defendant","defender","defense","deficit","definition","deformation","degradation","degree","delay","deliberation","delight","delivery","demand","democracy","democrat","demon","demur","den","denim","denominator","density","dentist","deodorant","department","departure","dependency","dependent","deployment","deposit","deposition","depot","depression","depressive","depth","deputy","derby","derivation","derivative","derrick","descendant","descent","description","desert","design","designation","designer","desire","desk","desktop","dessert","destination","destiny","destroyer","destruction","detail","detainee","detainment","detection","detective","detector","detention","determination","detour","devastation","developer","developing","development","developmental","deviance","deviation","device","devil","dew","dhow","diabetes","diadem","diagnosis","diagram","dial","dialect","dialogue","diam","diamond","diaper","diaphragm","diarist","diary","dibble","dick","dickey","dictaphone","dictator","diction","dictionary","die","diesel","diet","difference","differential","difficulty","diffuse","dig","digestion","digestive","digger","digging","digit","dignity","dilapidation","dill","dilution","dime","dimension","dimple","diner","dinghy","dining","dinner","dinosaur","dioxide","dip","diploma","diplomacy","dipstick","direction","directive","director","directory","dirndl","dirt","disability","disadvantage","disagreement","disappointment","disarmament","disaster","discharge","discipline","disclaimer","disclosure","disco","disconnection","discount","discourse","discovery","discrepancy","discretion","discrimination","discussion","disdain","disease","disembodiment","disengagement","disguise","disgust","dish","dishwasher","disk","disparity","dispatch","displacement","display","disposal","disposer","disposition","dispute","disregard","disruption","dissemination","dissonance","distance","distinction","distortion","distribution","distributor","district","divalent","divan","diver","diversity","divide","dividend","divider","divine","diving","division","divorce","doc","dock","doctor","doctorate","doctrine","document","documentary","documentation","doe","dog","doggie","dogsled","dogwood","doing","doll","dollar","dollop","dolman","dolor","dolphin","domain","dome","domination","donation","donkey","donor","donut","door","doorbell","doorknob","doorpost","doorway","dory","dose","dot","double","doubling","doubt","doubter","dough","doughnut","down","downfall","downforce","downgrade","download","downstairs","downtown","downturn","dozen","draft","drag","dragon","dragonfly","dragonfruit","dragster","drain","drainage","drake","drama","dramaturge","drapes","draw","drawbridge","drawer","drawing","dream","dreamer","dredger","dress","dresser","dressing","drill","drink","drinking","drive","driver","driveway","driving","drizzle","dromedary","drop","drudgery","drug","drum","drummer","drunk","dryer","duck","duckling","dud","dude","due","duel","dueling","duffel","dugout","dulcimer","dumbwaiter","dump","dump truck","dune","dune buggy","dungarees","dungeon","duplexer","duration","durian","dusk","dust","dust storm","duster","duty","dwarf","dwell","dwelling","dynamics","dynamite","dynamo","dynasty","dysfunction","e-book","e-mail","e-reader","eagle","eaglet","ear","eardrum","earmuffs","earnings","earplug","earring","earrings","earth","earthquake","earthworm","ease","easel","east","eating","eaves","eavesdropper","ecclesia","echidna","eclipse","ecliptic","ecology","economics","economy","ecosystem","ectoderm","ectodermal","ecumenist","eddy","edge","edger","edible","editing","edition","editor","editorial","education","eel","effacement","effect","effective","effectiveness","effector","efficacy","efficiency","effort","egg","egghead","eggnog","eggplant","ego","eicosanoid","ejector","elbow","elderberry","election","electricity","electrocardiogram","electronics","element","elephant","elevation","elevator","eleventh","elf","elicit","eligibility","elimination","elite","elixir","elk","ellipse","elm","elongation","elver","email","emanate","embarrassment","embassy","embellishment","embossing","embryo","emerald","emergence","emergency","emergent","emery","emission","emitter","emotion","emphasis","empire","employ","employee","employer","employment","empowerment","emu","enactment","encirclement","enclave","enclosure","encounter","encouragement","encyclopedia","end","endive","endoderm","endorsement","endothelium","endpoint","enemy","energy","enforcement","engagement","engine","engineer","engineering","enigma","enjoyment","enquiry","enrollment","enterprise","entertainment","enthusiasm","entirety","entity","entrance","entree","entrepreneur","entry","envelope","environment","envy","enzyme","epauliere","epee","ephemera","ephemeris","ephyra","epic","episode","epithelium","epoch","eponym","epoxy","equal","equality","equation","equinox","equipment","equity","equivalent","era","eraser","erection","erosion","error","escalator","escape","escort","espadrille","espalier","essay","essence","essential","establishment","estate","estimate","estrogen","estuary","eternity","ethernet","ethics","ethnicity","ethyl","euphonium","eurocentrism","evaluation","evaluator","evaporation","eve","evening","evening-wear","event","everybody","everyone","everything","eviction","evidence","evil","evocation","evolution","ex-husband","ex-wife","exaggeration","exam","examination","examiner","example","exasperation","excellence","exception","excerpt","excess","exchange","excitement","exclamation","excursion","excuse","execution","executive","executor","exercise","exhaust","exhaustion","exhibit","exhibition","exile","existence","exit","exocrine","expansion","expansionism","expectancy","expectation","expedition","expense","experience","experiment","experimentation","expert","expertise","explanation","exploration","explorer","explosion","export","expose","exposition","exposure","expression","extension","extent","exterior","external","extinction","extreme","extremist","eye","eyeball","eyebrow","eyebrows","eyeglasses","eyelash","eyelashes","eyelid","eyelids","eyeliner","eyestrain","eyrie","fabric","face","facelift","facet","facility","facsimile","fact","factor","factory","faculty","fahrenheit","fail","failure","fairness","fairy","faith","faithful","fall","fallacy","falling-out","fame","familiar","familiarity","family","fan","fang","fanlight","fanny","fanny-pack","fantasy","farm","farmer","farming","farmland","farrow","fascia","fashion","fat","fate","father","father-in-law","fatigue","fatigues","faucet","fault","fav","fava","favor","favorite","fawn","fax","fear","feast","feather","feature","fedelini","federation","fedora","fee","feed","feedback","feeding","feel","feeling","fellow","felony","female","fen","fence","fencing","fender","feng","fennel","ferret","ferry","ferryboat","fertilizer","festival","fetus","few","fiber","fiberglass","fibre","fibroblast","fibrosis","ficlet","fiction","fiddle","field","fiery","fiesta","fifth","fig","fight","fighter","figure","figurine","file","filing","fill","fillet","filly","film","filter","filth","final","finance","financing","finding","fine","finer","finger","fingerling","fingernail","finish","finisher","fir","fire","fireman","fireplace","firewall","firm","first","fish","fishbone","fisherman","fishery","fishing","fishmonger","fishnet","fisting","fit","fitness","fix","fixture","flag","flair","flame","flan","flanker","flare","flash","flat","flatboat","flavor","flax","fleck","fledgling","fleece","flesh","flexibility","flick","flicker","flight","flint","flintlock","flip-flops","flock","flood","floodplain","floor","floozie","flour","flow","flower","flu","flugelhorn","fluke","flume","flung","flute","fly","flytrap","foal","foam","fob","focus","fog","fold","folder","folk","folklore","follower","following","fondue","font","food","foodstuffs","fool","foot","footage","football","footnote","footprint","footrest","footstep","footstool","footwear","forage","forager","foray","force","ford","forearm","forebear","forecast","forehead","foreigner","forelimb","forest","forestry","forever","forgery","fork","form","formal","formamide","format","formation","former","formicarium","formula","fort","forte","fortnight","fortress","fortune","forum","foundation","founder","founding","fountain","fourths","fowl","fox","foxglove","fraction","fragrance","frame","framework","fratricide","fraud","fraudster","freak","freckle","freedom","freelance","freezer","freezing","freight","freighter","frenzy","freon","frequency","fresco","friction","fridge","friend","friendship","fries","frigate","fright","fringe","fritter","frock","frog","front","frontier","frost","frosting","frown","fruit","frustration","fry","fuck","fuel","fugato","fulfillment","full","fun","function","functionality","fund","funding","fundraising","funeral","fur","furnace","furniture","furry","fusarium","futon","future","gadget","gaffe","gaffer","gain","gaiters","gale","gall-bladder","gallery","galley","gallon","galoshes","gambling","game","gamebird","gaming","gamma-ray","gander","gang","gap","garage","garb","garbage","garden","garlic","garment","garter","gas","gasket","gasoline","gasp","gastronomy","gastropod","gate","gateway","gather","gathering","gator","gauge","gauntlet","gavel","gazebo","gazelle","gear","gearshift","geek","gel","gelatin","gelding","gem","gemsbok","gender","gene","general","generation","generator","generosity","genetics","genie","genius","genocide","genre","gentleman","geography","geology","geometry","geranium","gerbil","gesture","geyser","gherkin","ghost","giant","gift","gig","gigantism","giggle","ginger","gingerbread","ginseng","giraffe","girdle","girl","girlfriend","git","glacier","gladiolus","glance","gland","glass","glasses","glee","glen","glider","gliding","glimpse","globe","glockenspiel","gloom","glory","glove","glow","glucose","glue","glut","glutamate","gnat","gnu","go-kart","goal","goat","gobbler","god","goddess","godfather","godmother","godparent","goggles","going","gold","goldfish","golf","gondola","gong","good","good-bye","goodbye","goodie","goodness","goodnight","goodwill","goose","gopher","gorilla","gosling","gossip","governance","government","governor","gown","grab-bag","grace","grade","gradient","graduate","graduation","graffiti","graft","grain","gram","grammar","gran","grand","grandchild","granddaughter","grandfather","grandma","grandmom","grandmother","grandpa","grandparent","grandson","granny","granola","grant","grape","grapefruit","graph","graphic","grasp","grass","grasshopper","grassland","gratitude","gravel","gravitas","gravity","gravy","gray","grease","great-grandfather","great-grandmother","greatness","greed","green","greenhouse","greens","grenade","grey","grid","grief","grill","grin","grip","gripper","grit","grocery","ground","group","grouper","grouse","grove","growth","grub","guacamole","guarantee","guard","guava","guerrilla","guess","guest","guestbook","guidance","guide","guideline","guilder","guilt","guilty","guinea","guitar","guitarist","gum","gumshoe","gun","gunpowder","gutter","guy","gym","gymnast","gymnastics","gynaecology","gyro","habit","habitat","hacienda","hacksaw","hackwork","hail","hair","haircut","hake","half","half-brother","half-sister","halibut","hall","halloween","hallway","halt","ham","hamburger","hammer","hammock","hamster","hand","hand-holding","handball","handful","handgun","handicap","handle","handlebar","handmaiden","handover","handrail","handsaw","hanger","happening","happiness","harald","harbor","harbour","hard-hat","hardboard","hardcover","hardening","hardhat","hardship","hardware","hare","harm","harmonica","harmonise","harmonize","harmony","harp","harpooner","harpsichord","harvest","harvester","hash","hashtag","hassock","haste","hat","hatbox","hatchet","hatchling","hate","hatred","haunt","haven","haversack","havoc","hawk","hay","haze","hazel","hazelnut","head","headache","headlight","headline","headphones","headquarters","headrest","health","health-care","hearing","hearsay","heart","heart-throb","heartache","heartbeat","hearth","hearthside","heartwood","heat","heater","heating","heaven","heavy","hectare","hedge","hedgehog","heel","heifer","height","heir","heirloom","helicopter","helium","hell","hellcat","hello","helmet","helo","help","hemisphere","hemp","hen","hepatitis","herb","herbs","heritage","hermit","hero","heroine","heron","herring","hesitation","heterosexual","hexagon","heyday","hiccups","hide","hierarchy","high","high-rise","highland","highlight","highway","hike","hiking","hill","hint","hip","hippodrome","hippopotamus","hire","hiring","historian","history","hit","hive","hobbit","hobby","hockey","hoe","hog","hold","holder","hole","holiday","home","homeland","homeownership","hometown","homework","homicide","homogenate","homonym","homosexual","homosexuality","honesty","honey","honeybee","honeydew","honor","honoree","hood","hoof","hook","hop","hope","hops","horde","horizon","hormone","horn","hornet","horror","horse","horseradish","horst","hose","hosiery","hospice","hospital","hospitalisation","hospitality","hospitalization","host","hostel","hostess","hotdog","hotel","hound","hour","hourglass","house","houseboat","household","housewife","housework","housing","hovel","hovercraft","howard","howitzer","hub","hubcap","hubris","hug","hugger","hull","human","humanity","humidity","hummus","humor","humour","hunchback","hundred","hunger","hunt","hunter","hunting","hurdle","hurdler","hurricane","hurry","hurt","husband","hut","hutch","hyacinth","hybridisation","hybridization","hydrant","hydraulics","hydrocarb","hydrocarbon","hydrofoil","hydrogen","hydrolyse","hydrolysis","hydrolyze","hydroxyl","hyena","hygienic","hype","hyphenation","hypochondria","hypothermia","hypothesis","ice","ice-cream","iceberg","icebreaker","icecream","icicle","icing","icon","icy","id","idea","ideal","identification","identity","ideology","idiom","idiot","igloo","ignorance","ignorant","ikebana","illegal","illiteracy","illness","illusion","illustration","image","imagination","imbalance","imitation","immigrant","immigration","immortal","impact","impairment","impala","impediment","implement","implementation","implication","import","importance","impostor","impress","impression","imprisonment","impropriety","improvement","impudence","impulse","in-joke","in-laws","inability","inauguration","inbox","incandescence","incarnation","incense","incentive","inch","incidence","incident","incision","inclusion","income","incompetence","inconvenience","increase","incubation","independence","independent","index","indication","indicator","indigence","individual","industrialisation","industrialization","industry","inequality","inevitable","infancy","infant","infarction","infection","infiltration","infinite","infix","inflammation","inflation","influence","influx","info","information","infrastructure","infusion","inglenook","ingrate","ingredient","inhabitant","inheritance","inhibition","inhibitor","initial","initialise","initialize","initiative","injunction","injury","injustice","ink","inlay","inn","innervation","innocence","innocent","innovation","input","inquiry","inscription","insect","insectarium","insert","inside","insight","insolence","insomnia","inspection","inspector","inspiration","installation","instance","instant","instinct","institute","institution","instruction","instructor","instrument","instrumentalist","instrumentation","insulation","insurance","insurgence","insurrection","integer","integral","integration","integrity","intellect","intelligence","intensity","intent","intention","intentionality","interaction","interchange","interconnection","intercourse","interest","interface","interferometer","interior","interject","interloper","internet","interpretation","interpreter","interval","intervenor","intervention","interview","interviewer","intestine","introduction","intuition","invader","invasion","invention","inventor","inventory","inverse","inversion","investigation","investigator","investment","investor","invitation","invite","invoice","involvement","iridescence","iris","iron","ironclad","irony","irrigation","ischemia","island","isogloss","isolation","issue","item","itinerary","ivory","jack","jackal","jacket","jackfruit","jade","jaguar","jail","jailhouse","jalape\xC3\xB1o","jam","jar","jasmine","jaw","jazz","jealousy","jeans","jeep","jelly","jellybeans","jellyfish","jerk","jet","jewel","jeweller","jewellery","jewelry","jicama","jiffy","job","jockey","jodhpurs","joey","jogging","joint","joke","jot","journal","journalism","journalist","journey","joy","judge","judgment","judo","jug","juggernaut","juice","julienne","jumbo","jump","jumper","jumpsuit","jungle","junior","junk","junker","junket","jury","justice","justification","jute","kale","kamikaze","kangaroo","karate","kayak","kazoo","kebab","keep","keeper","kendo","kennel","ketch","ketchup","kettle","kettledrum","key","keyboard","keyboarding","keystone","kick","kick-off","kid","kidney","kielbasa","kill","killer","killing","kilogram","kilometer","kilt","kimono","kinase","kind","kindness","king","kingdom","kingfish","kiosk","kiss","kit","kitchen","kite","kitsch","kitten","kitty","kiwi","knee","kneejerk","knickers","knife","knife-edge","knight","knitting","knock","knot","know-how","knowledge","knuckle","koala","kohlrabi","kumquat","lab","label","labor","laboratory","laborer","labour","labourer","lace","lack","lacquerware","lad","ladder","ladle","lady","ladybug","lag","lake","lamb","lambkin","lament","lamp","lanai","land","landform","landing","landmine","landscape","lane","language","lantern","lap","laparoscope","lapdog","laptop","larch","lard","larder","lark","larva","laryngitis","lasagna","lashes","last","latency","latex","lathe","latitude","latte","latter","laugh","laughter","laundry","lava","law","lawmaker","lawn","lawsuit","lawyer","lay","layer","layout","lead","leader","leadership","leading","leaf","league","leaker","leap","learning","leash","leather","leave","leaver","lecture","leek","leeway","left","leg","legacy","legal","legend","legging","legislation","legislator","legislature","legitimacy","legume","leisure","lemon","lemonade","lemur","lender","lending","length","lens","lentil","leopard","leprosy","leptocephalus","lesbian","lesson","letter","lettuce","level","lever","leverage","leveret","liability","liar","liberty","libido","library","licence","license","licensing","licorice","lid","lie","lieu","lieutenant","life","lifestyle","lifetime","lift","ligand","light","lighting","lightning","lightscreen","ligula","likelihood","likeness","lilac","lily","limb","lime","limestone","limit","limitation","limo","line","linen","liner","linguist","linguistics","lining","link","linkage","linseed","lion","lip","lipid","lipoprotein","lipstick","liquid","liquidity","liquor","list","listening","listing","literate","literature","litigation","litmus","litter","littleneck","liver","livestock","living","lizard","llama","load","loading","loaf","loafer","loan","lobby","lobotomy","lobster","local","locality","location","lock","locker","locket","locomotive","locust","lode","loft","log","loggia","logic","login","logistics","logo","loincloth","lollipop","loneliness","longboat","longitude","look","lookout","loop","loophole","loquat","lord","loss","lot","lotion","lottery","lounge","louse","lout","love","lover","lox","loyalty","luck","luggage","lumber","lumberman","lunch","luncheonette","lunchmeat","lunchroom","lung","lunge","lust","lute","luxury","lychee","lycra","lye","lymphocyte","lynx","lyocell","lyre","lyrics","lysine","mRNA","macadamia","macaroni","macaroon","macaw","machine","machinery","macrame","macro","macrofauna","madam","maelstrom","maestro","magazine","maggot","magic","magnet","magnitude","maid","maiden","mail","mailbox","mailer","mailing","mailman","main","mainland","mainstream","maintainer","maintenance","maize","major","major-league","majority","makeover","maker","makeup","making","male","malice","mall","mallard","mallet","malnutrition","mama","mambo","mammoth","man","manacle","management","manager","manatee","mandarin","mandate","mandolin","mangle","mango","mangrove","manhunt","maniac","manicure","manifestation","manipulation","mankind","manner","manor","mansard","manservant","mansion","mantel","mantle","mantua","manufacturer","manufacturing","many","map","maple","mapping","maracas","marathon","marble","march","mare","margarine","margin","mariachi","marimba","marines","marionberry","mark","marker","market","marketer","marketing","marketplace","marksman","markup","marmalade","marriage","marsh","marshland","marshmallow","marten","marxism","mascara","mask","masonry","mass","massage","mast","master","masterpiece","mastication","mastoid","mat","match","matchmaker","mate","material","maternity","math","mathematics","matrix","matter","mattock","mattress","max","maximum","maybe","mayonnaise","mayor","meadow","meal","mean","meander","meaning","means","meantime","measles","measure","measurement","meat","meatball","meatloaf","mecca","mechanic","mechanism","med","medal","media","median","medication","medicine","medium","meet","meeting","melatonin","melody","melon","member","membership","membrane","meme","memo","memorial","memory","men","menopause","menorah","mention","mentor","menu","merchandise","merchant","mercury","meridian","meringue","merit","mesenchyme","mess","message","messenger","messy","metabolite","metal","metallurgist","metaphor","meteor","meteorology","meter","methane","method","methodology","metric","metro","metronome","mezzanine","microlending","micronutrient","microphone","microwave","mid-course","midden","middle","middleman","midline","midnight","midwife","might","migrant","migration","mile","mileage","milepost","milestone","military","milk","milkshake","mill","millennium","millet","millimeter","million","millisecond","millstone","mime","mimosa","min","mincemeat","mind","mine","mineral","mineshaft","mini","mini-skirt","minibus","minimalism","minimum","mining","minion","minister","mink","minnow","minor","minor-league","minority","mint","minute","miracle","mirror","miscarriage","miscommunication","misfit","misnomer","misogyny","misplacement","misreading","misrepresentation","miss","missile","mission","missionary","mist","mistake","mister","misunderstand","miter","mitten","mix","mixer","mixture","moai","moat","mob","mobile","mobility","mobster","moccasins","mocha","mochi","mode","model","modeling","modem","modernist","modernity","modification","molar","molasses","molding","mole","molecule","mom","moment","monastery","monasticism","money","monger","monitor","monitoring","monk","monkey","monocle","monopoly","monotheism","monsoon","monster","month","monument","mood","moody","moon","moonlight","moonscape","moonshine","moose","mop","morale","morbid","morbidity","morning","moron","morphology","morsel","mortal","mortality","mortgage","mortise","mosque","mosquito","most","motel","moth","mother","mother-in-law","motion","motivation","motive","motor","motorboat","motorcar","motorcycle","mound","mountain","mouse","mouser","mousse","moustache","mouth","mouton","movement","mover","movie","mower","mozzarella","mud","muffin","mug","mukluk","mule","multimedia","murder","muscat","muscatel","muscle","musculature","museum","mushroom","music","music-box","music-making","musician","muskrat","mussel","mustache","mustard","mutation","mutt","mutton","mycoplasma","mystery","myth","mythology","nail","name","naming","nanoparticle","napkin","narrative","nasal","nation","nationality","native","naturalisation","nature","navigation","necessity","neck","necklace","necktie","nectar","nectarine","need","needle","neglect","negligee","negotiation","neighbor","neighborhood","neighbour","neighbourhood","neologism","neon","neonate","nephew","nerve","nest","nestling","nestmate","net","netball","netbook","netsuke","network","networking","neurobiologist","neuron","neuropathologist","neuropsychiatry","news","newsletter","newspaper","newsprint","newsstand","nexus","nibble","nicety","niche","nick","nickel","nickname","niece","night","nightclub","nightgown","nightingale","nightlife","nightlight","nightmare","ninja","nit","nitrogen","nobody","nod","node","noir","noise","nonbeliever","nonconformist","nondisclosure","nonsense","noodle","noodles","noon","norm","normal","normalisation","normalization","north","nose","notation","note","notebook","notepad","nothing","notice","notion","notoriety","nougat","noun","nourishment","novel","nucleotidase","nucleotide","nudge","nuke","number","numeracy","numeric","numismatist","nun","nurse","nursery","nursing","nurture","nut","nutmeg","nutrient","nutrition","nylon","nymph","oak","oar","oasis","oat","oatmeal","oats","obedience","obesity","obi","object","objection","objective","obligation","oboe","observation","observatory","obsession","obsidian","obstacle","occasion","occupation","occurrence","ocean","ocelot","octagon","octave","octavo","octet","octopus","odometer","odyssey","oeuvre","off-ramp","offence","offense","offer","offering","office","officer","official","offset","oil","okra","oldie","oleo","olive","omega","omelet","omission","omnivore","oncology","onion","online","onset","opening","opera","operating","operation","operator","ophthalmologist","opinion","opium","opossum","opponent","opportunist","opportunity","opposite","opposition","optimal","optimisation","optimist","optimization","option","orange","orangutan","orator","orchard","orchestra","orchid","order","ordinary","ordination","ore","oregano","organ","organisation","organising","organization","organizing","orient","orientation","origin","original","originality","ornament","osmosis","osprey","ostrich","other","otter","ottoman","ounce","outback","outcome","outfielder","outfit","outhouse","outlaw","outlay","outlet","outline","outlook","output","outrage","outrigger","outrun","outset","outside","oval","ovary","oven","overcharge","overclocking","overcoat","overexertion","overflight","overhead","overheard","overload","overnighter","overshoot","oversight","overview","overweight","owl","owner","ownership","ox","oxford","oxygen","oyster","ozone","pace","pacemaker","pack","package","packaging","packet","pad","paddle","paddock","pagan","page","pagoda","pail","pain","paint","painter","painting","paintwork","pair","pajamas","palace","palate","palm","pamphlet","pan","pancake","pancreas","panda","panel","panic","pannier","panpipe","pansy","panther","panties","pantologist","pantology","pantry","pants","pantsuit","panty","pantyhose","papa","papaya","paper","paperback","paperwork","parable","parachute","parade","paradise","paragraph","parallelogram","paramecium","paramedic","parameter","paranoia","parcel","parchment","pard","pardon","parent","parenthesis","parenting","park","parka","parking","parliament","parole","parrot","parser","parsley","parsnip","part","participant","participation","particle","particular","partner","partnership","partridge","party","pass","passage","passbook","passenger","passing","passion","passive","passport","password","past","pasta","paste","pastor","pastoralist","pastry","pasture","pat","patch","pate","patent","patentee","path","pathogenesis","pathology","pathway","patience","patient","patina","patio","patriarch","patrimony","patriot","patrol","patroller","patrolling","patron","pattern","patty","pattypan","pause","pavement","pavilion","paw","pawnshop","pay","payee","payment","payoff","pea","peace","peach","peacoat","peacock","peak","peanut","pear","pearl","peasant","pecan","pecker","pedal","peek","peen","peer","peer-to-peer","pegboard","pelican","pelt","pen","penalty","pence","pencil","pendant","pendulum","penguin","penicillin","peninsula","penis","pennant","penny","pension","pentagon","peony","people","pepper","pepperoni","percent","percentage","perception","perch","perennial","perfection","performance","perfume","period","periodical","peripheral","permafrost","permission","permit","perp","perpendicular","persimmon","person","personal","personality","personnel","perspective","pest","pet","petal","petition","petitioner","petticoat","pew","pharmacist","pharmacopoeia","phase","pheasant","phenomenon","phenotype","pheromone","philanthropy","philosopher","philosophy","phone","phosphate","photo","photodiode","photograph","photographer","photography","photoreceptor","phrase","phrasing","physical","physics","physiology","pianist","piano","piccolo","pick","pickax","pickaxe","picket","pickle","pickup","picnic","picture","picturesque","pie","piece","pier","piety","pig","pigeon","piglet","pigpen","pigsty","pike","pilaf","pile","pilgrim","pilgrimage","pill","pillar","pillbox","pillow","pilot","pimp","pimple","pin","pinafore","pince-nez","pine","pineapple","pinecone","ping","pink","pinkie","pinot","pinstripe","pint","pinto","pinworm","pioneer","pipe","pipeline","piracy","pirate","piss","pistol","pit","pita","pitch","pitcher","pitching","pith","pizza","place","placebo","placement","placode","plagiarism","plain","plaintiff","plan","plane","planet","planning","plant","plantation","planter","planula","plaster","plasterboard","plastic","plate","platelet","platform","platinum","platter","platypus","play","player","playground","playroom","playwright","plea","pleasure","pleat","pledge","plenty","plier","pliers","plight","plot","plough","plover","plow","plowman","plug","plugin","plum","plumber","plume","plunger","plywood","pneumonia","pocket","pocket-watch","pocketbook","pod","podcast","poem","poet","poetry","poignance","point","poison","poisoning","poker","polarisation","polarization","pole","polenta","police","policeman","policy","polish","politician","politics","poll","polliwog","pollutant","pollution","polo","polyester","polyp","pomegranate","pomelo","pompom","poncho","pond","pony","pool","poor","pop","popcorn","poppy","popsicle","popularity","population","populist","porcelain","porch","porcupine","pork","porpoise","port","porter","portfolio","porthole","portion","portrait","position","possession","possibility","possible","post","postage","postbox","poster","posterior","postfix","pot","potato","potential","pottery","potty","pouch","poultry","pound","pounding","poverty","powder","power","practice","practitioner","prairie","praise","pray","prayer","precedence","precedent","precipitation","precision","predecessor","preface","preference","prefix","pregnancy","prejudice","prelude","premeditation","premier","premise","premium","preoccupation","preparation","prescription","presence","present","presentation","preservation","preserves","presidency","president","press","pressroom","pressure","pressurisation","pressurization","prestige","presume","pretzel","prevalence","prevention","prey","price","pricing","pride","priest","priesthood","primary","primate","prince","princess","principal","principle","print","printer","printing","prior","priority","prison","prisoner","privacy","private","privilege","prize","prizefight","probability","probation","probe","problem","procedure","proceedings","process","processing","processor","proctor","procurement","produce","producer","product","production","productivity","profession","professional","professor","profile","profit","progenitor","program","programme","programming","progress","progression","prohibition","project","proliferation","promenade","promise","promotion","prompt","pronoun","pronunciation","proof","proof-reader","propaganda","propane","property","prophet","proponent","proportion","proposal","proposition","proprietor","prose","prosecution","prosecutor","prospect","prosperity","prostacyclin","prostanoid","prostrate","protection","protein","protest","protocol","providence","provider","province","provision","prow","proximal","proximity","prune","pruner","pseudocode","pseudoscience","psychiatrist","psychoanalyst","psychologist","psychology","ptarmigan","pub","public","publication","publicity","publisher","publishing","pudding","puddle","puffin","pug","puggle","pulley","pulse","puma","pump","pumpernickel","pumpkin","pumpkinseed","pun","punch","punctuation","punishment","pup","pupa","pupil","puppet","puppy","purchase","puritan","purity","purple","purpose","purr","purse","pursuit","push","pusher","put","puzzle","pyramid","pyridine","quadrant","quail","qualification","quality","quantity","quart","quarter","quartet","quartz","queen","query","quest","question","questioner","questionnaire","quiche","quicksand","quiet","quill","quilt","quince","quinoa","quit","quiver","quota","quotation","quote","rabbi","rabbit","raccoon","race","racer","racing","racism","racist","rack","radar","radiator","radio","radiosonde","radish","raffle","raft","rag","rage","raid","rail","railing","railroad","railway","raiment","rain","rainbow","raincoat","rainmaker","rainstorm","rainy","raise","raisin","rake","rally","ram","rambler","ramen","ramie","ranch","rancher","randomisation","randomization","range","ranger","rank","rap","rape","raspberry","rat","rate","ratepayer","rating","ratio","rationale","rations","raven","ravioli","rawhide","ray","rayon","razor","reach","reactant","reaction","read","reader","readiness","reading","real","reality","realization","realm","reamer","rear","reason","reasoning","rebel","rebellion","reboot","recall","recapitulation","receipt","receiver","reception","receptor","recess","recession","recipe","recipient","reciprocity","reclamation","recliner","recognition","recollection","recommendation","reconsideration","record","recorder","recording","recovery","recreation","recruit","rectangle","red","redesign","redhead","redirect","rediscovery","reduction","reef","refectory","reference","referendum","reflection","reform","refreshments","refrigerator","refuge","refund","refusal","refuse","regard","regime","region","regionalism","register","registration","registry","regret","regulation","regulator","rehospitalisation","rehospitalization","reindeer","reinscription","reject","relation","relationship","relative","relaxation","relay","release","reliability","relief","religion","relish","reluctance","remains","remark","reminder","remnant","remote","removal","renaissance","rent","reorganisation","reorganization","repair","reparation","repayment","repeat","replacement","replica","replication","reply","report","reporter","reporting","repository","representation","representative","reprocessing","republic","republican","reputation","request","requirement","resale","rescue","research","researcher","resemblance","reservation","reserve","reservoir","reset","residence","resident","residue","resist","resistance","resolution","resolve","resort","resource","respect","respite","response","responsibility","rest","restaurant","restoration","restriction","restroom","restructuring","result","resume","retailer","retention","rethinking","retina","retirement","retouching","retreat","retrospect","retrospective","retrospectivity","return","reunion","revascularisation","revascularization","reveal","revelation","revenant","revenge","revenue","reversal","reverse","review","revitalisation","revitalization","revival","revolution","revolver","reward","rhetoric","rheumatism","rhinoceros","rhubarb","rhyme","rhythm","rib","ribbon","rice","riddle","ride","rider","ridge","riding","rifle","right","rim","ring","ringworm","riot","rip","ripple","rise","riser","risk","rite","ritual","river","riverbed","rivulet","road","roadway","roar","roast","robe","robin","robot","robotics","rock","rocker","rocket","rocket-ship","rod","role","roll","roller","romaine","romance","roof","room","roommate","rooster","root","rope","rose","rosemary","roster","rostrum","rotation","round","roundabout","route","router","routine","row","rowboat","rowing","rubber","rubbish","rubric","ruby","ruckus","rudiment","ruffle","rug","rugby","ruin","rule","ruler","ruling","rum","rumor","run","runaway","runner","running","runway","rush","rust","rutabaga","rye","sabre","sac","sack","saddle","sadness","safari","safe","safeguard","safety","saffron","sage","sail","sailboat","sailing","sailor","saint","sake","salad","salami","salary","sale","salesman","salmon","salon","saloon","salsa","salt","salute","samovar","sampan","sample","samurai","sanction","sanctity","sanctuary","sand","sandal","sandbar","sandpaper","sandwich","sanity","sardine","sari","sarong","sash","satellite","satin","satire","satisfaction","sauce","saucer","sauerkraut","sausage","savage","savannah","saving","savings","savior","saviour","savory","saw","saxophone","scaffold","scale","scallion","scallops","scalp","scam","scanner","scarecrow","scarf","scarification","scenario","scene","scenery","scent","schedule","scheduling","schema","scheme","schizophrenic","schnitzel","scholar","scholarship","school","schoolhouse","schooner","science","scientist","scimitar","scissors","scooter","scope","score","scorn","scorpion","scotch","scout","scow","scrambled","scrap","scraper","scratch","screamer","screen","screening","screenwriting","screw","screw-up","screwdriver","scrim","scrip","script","scripture","scrutiny","sculpting","sculptural","sculpture","sea","seabass","seafood","seagull","seal","seaplane","search","seashore","seaside","season","seat","seaweed","second","secrecy","secret","secretariat","secretary","secretion","section","sectional","sector","security","sediment","seed","seeder","seeker","seep","segment","seizure","selection","self","self-confidence","self-control","self-esteem","seller","selling","semantics","semester","semicircle","semicolon","semiconductor","seminar","senate","senator","sender","senior","sense","sensibility","sensitive","sensitivity","sensor","sentence","sentencing","sentiment","sepal","separation","septicaemia","sequel","sequence","serial","series","sermon","serum","serval","servant","server","service","servitude","sesame","session","set","setback","setting","settlement","settler","severity","sewer","sex","sexuality","shack","shackle","shade","shadow","shadowbox","shakedown","shaker","shallot","shallows","shame","shampoo","shanty","shape","share","shareholder","shark","shaw","shawl","shear","shearling","sheath","shed","sheep","sheet","shelf","shell","shelter","sherbet","sherry","shield","shift","shin","shine","shingle","ship","shipper","shipping","shipyard","shirt","shirtdress","shit","shoat","shock","shoe","shoe-horn","shoehorn","shoelace","shoemaker","shoes","shoestring","shofar","shoot","shootdown","shop","shopper","shopping","shore","shoreline","short","shortage","shorts","shortwave","shot","shoulder","shout","shovel","show","show-stopper","shower","shred","shrimp","shrine","shutdown","sibling","sick","sickness","side","sideboard","sideburns","sidecar","sidestream","sidewalk","siding","siege","sigh","sight","sightseeing","sign","signal","signature","signet","significance","signify","signup","silence","silica","silicon","silk","silkworm","sill","silly","silo","silver","similarity","simple","simplicity","simplification","simvastatin","sin","singer","singing","singular","sink","sinuosity","sip","sir","sister","sister-in-law","sitar","site","situation","size","skate","skating","skean","skeleton","ski","skiing","skill","skin","skirt","skull","skullcap","skullduggery","skunk","sky","skylight","skyline","skyscraper","skywalk","slang","slapstick","slash","slate","slave","slavery","slaw","sled","sledge","sleep","sleepiness","sleeping","sleet","sleuth","slice","slide","slider","slime","slip","slipper","slippers","slope","slot","sloth","slump","smell","smelting","smile","smith","smock","smog","smoke","smoking","smolt","smuggling","snack","snail","snake","snakebite","snap","snarl","sneaker","sneakers","sneeze","sniffle","snob","snorer","snow","snowboarding","snowflake","snowman","snowmobiling","snowplow","snowstorm","snowsuit","snuck","snug","snuggle","soap","soccer","socialism","socialist","society","sociology","sock","socks","soda","sofa","softball","softdrink","softening","software","soil","soldier","sole","solicitation","solicitor","solidarity","solidity","soliloquy","solitaire","solution","solvency","sombrero","somebody","someone","someplace","somersault","something","somewhere","son","sonar","sonata","song","songbird","sonnet","soot","sophomore","soprano","sorbet","sorghum","sorrel","sorrow","sort","soul","soulmate","sound","soundness","soup","source","sourwood","sousaphone","south","southeast","souvenir","sovereignty","sow","soy","soybean","space","spacing","spade","spaghetti","span","spandex","spank","sparerib","spark","sparrow","spasm","spat","spatula","spawn","speaker","speakerphone","speaking","spear","spec","special","specialist","specialty","species","specification","spectacle","spectacles","spectrograph","spectrum","speculation","speech","speed","speedboat","spell","spelling","spelt","spending","sphere","sphynx","spice","spider","spiderling","spike","spill","spinach","spine","spiral","spirit","spiritual","spirituality","spit","spite","spleen","splendor","split","spokesman","spokeswoman","sponge","sponsor","sponsorship","spool","spoon","spork","sport","sportsman","spot","spotlight","spouse","sprag","sprat","spray","spread","spreadsheet","spree","spring","sprinkles","sprinter","sprout","spruce","spud","spume","spur","spy","spyglass","square","squash","squatter","squeegee","squid","squirrel","stab","stability","stable","stack","stacking","stadium","staff","stag","stage","stain","stair","staircase","stake","stalk","stall","stallion","stamen","stamina","stamp","stance","stand","standard","standardisation","standardization","standing","standoff","standpoint","star","starboard","start","starter","state","statement","statin","station","station-wagon","statistic","statistics","statue","status","statute","stay","steak","stealth","steam","steamroller","steel","steeple","stem","stench","stencil","step","step-aunt","step-brother","step-daughter","step-father","step-grandfather","step-grandmother","step-mother","step-sister","step-son","step-uncle","stepdaughter","stepmother","stepping-stone","stepson","stereo","stew","steward","stick","sticker","stiletto","still","stimulation","stimulus","sting","stinger","stir-fry","stitch","stitcher","stock","stock-in-trade","stockings","stole","stomach","stone","stonework","stool","stop","stopsign","stopwatch","storage","store","storey","storm","story","story-telling","storyboard","stot","stove","strait","strand","stranger","strap","strategy","straw","strawberry","strawman","stream","street","streetcar","strength","stress","stretch","strife","strike","string","strip","stripe","strobe","stroke","structure","strudel","struggle","stucco","stud","student","studio","study","stuff","stumbling","stump","stupidity","sturgeon","sty","style","styling","stylus","sub","subcomponent","subconscious","subcontractor","subexpression","subgroup","subject","submarine","submitter","subprime","subroutine","subscription","subsection","subset","subsidence","subsidiary","subsidy","substance","substitution","subtitle","suburb","subway","success","succotash","suck","sucker","suede","suet","suffocation","sugar","suggestion","suicide","suit","suitcase","suite","sulfur","sultan","sum","summary","summer","summit","sun","sunbeam","sunbonnet","sundae","sunday","sundial","sunflower","sunglasses","sunlamp","sunlight","sunrise","sunroom","sunset","sunshine","superiority","supermarket","supernatural","supervision","supervisor","supper","supplement","supplier","supply","support","supporter","suppression","supreme","surface","surfboard","surge","surgeon","surgery","surname","surplus","surprise","surround","surroundings","surrounds","survey","survival","survivor","sushi","suspect","suspenders","suspension","sustainment","sustenance","swallow","swamp","swan","swanling","swath","sweat","sweater","sweatshirt","sweatshop","sweatsuit","sweets","swell","swim","swimming","swimsuit","swine","swing","switch","switchboard","switching","swivel","sword","swordfight","swordfish","sycamore","symbol","symmetry","sympathy","symptom","syndicate","syndrome","synergy","synod","synonym","synthesis","syrup","system","t-shirt","tab","tabby","tabernacle","table","tablecloth","tablet","tabletop","tachometer","tackle","taco","tactics","tactile","tadpole","tag","tail","tailbud","tailor","tailspin","take-out","takeover","tale","talent","talk","talking","tam-o'-shanter","tamale","tambour","tambourine","tan","tandem","tangerine","tank","tank-top","tanker","tankful","tap","tape","tapioca","target","taro","tarragon","tart","task","tassel","taste","tatami","tattler","tattoo","tavern","tax","taxi","taxicab","taxpayer","tea","teacher","teaching","team","teammate","teapot","tear","tech","technician","technique","technologist","technology","tectonics","teen","teenager","teepee","telephone","telescreen","teletype","television","tell","teller","temp","temper","temperature","temple","tempo","temporariness","temporary","temptation","temptress","tenant","tendency","tender","tenement","tenet","tennis","tenor","tension","tensor","tent","tentacle","tenth","tepee","teriyaki","term","terminal","termination","terminology","termite","terrace","terracotta","terrapin","terrarium","territory","terror","terrorism","terrorist","test","testament","testimonial","testimony","testing","text","textbook","textual","texture","thanks","thaw","theater","theft","theism","theme","theology","theory","therapist","therapy","thermals","thermometer","thermostat","thesis","thickness","thief","thigh","thing","thinking","thirst","thistle","thong","thongs","thorn","thought","thousand","thread","threat","threshold","thrift","thrill","throat","throne","thrush","thrust","thug","thumb","thump","thunder","thunderbolt","thunderhead","thunderstorm","thyme","tiara","tic","tick","ticket","tide","tie","tiger","tights","tile","till","tilt","timbale","timber","time","timeline","timeout","timer","timetable","timing","timpani","tin","tinderbox","tinkle","tintype","tip","tire","tissue","titanium","title","toad","toast","toaster","tobacco","today","toe","toenail","toffee","tofu","tog","toga","toilet","tolerance","tolerant","toll","tom-tom","tomatillo","tomato","tomb","tomography","tomorrow","ton","tonality","tone","tongue","tonic","tonight","tool","toot","tooth","toothbrush","toothpaste","toothpick","top","top-hat","topic","topsail","toque","toreador","tornado","torso","torte","tortellini","tortilla","tortoise","tosser","total","tote","touch","tough-guy","tour","tourism","tourist","tournament","tow-truck","towel","tower","town","townhouse","township","toy","trace","trachoma","track","tracking","tracksuit","tract","tractor","trade","trader","trading","tradition","traditionalism","traffic","trafficker","tragedy","trail","trailer","trailpatrol","train","trainer","training","trait","tram","tramp","trance","transaction","transcript","transfer","transformation","transit","transition","translation","transmission","transom","transparency","transplantation","transport","transportation","trap","trapdoor","trapezium","trapezoid","trash","travel","traveler","tray","treasure","treasury","treat","treatment","treaty","tree","trek","trellis","tremor","trench","trend","triad","trial","triangle","tribe","tributary","trick","trigger","trigonometry","trillion","trim","trinket","trip","tripod","tritone","triumph","trolley","trombone","troop","trooper","trophy","trouble","trousers","trout","trove","trowel","truck","trumpet","trunk","trust","trustee","truth","try","tsunami","tub","tuba","tube","tuber","tug","tugboat","tuition","tulip","tumbler","tummy","tuna","tune","tune-up","tunic","tunnel","turban","turf","turkey","turmeric","turn","turning","turnip","turnover","turnstile","turret","turtle","tusk","tussle","tutu","tuxedo","tweet","tweezers","twig","twilight","twine","twins","twist","twister","twitter","type","typeface","typewriter","typhoon","ukulele","ultimatum","umbrella","unblinking","uncertainty","uncle","underclothes","underestimate","underground","underneath","underpants","underpass","undershirt","understanding","understatement","undertaker","underwear","underweight","underwire","underwriting","unemployment","unibody","uniform","uniformity","union","unique","unit","unity","universe","university","update","upgrade","uplift","upper","upstairs","upward","urge","urgency","urn","usage","use","user","usher","usual","utensil","utilisation","utility","utilization","vacation","vaccine","vacuum","vagrant","valance","valentine","validate","validity","valley","valuable","value","vampire","van","vanadyl","vane","vanilla","vanity","variability","variable","variant","variation","variety","vascular","vase","vault","vaulting","veal","vector","vegetable","vegetarian","vegetarianism","vegetation","vehicle","veil","vein","veldt","vellum","velocity","velodrome","velvet","vendor","veneer","vengeance","venison","venom","venti","venture","venue","veranda","verb","verdict","verification","vermicelli","vernacular","verse","version","vertigo","verve","vessel","vest","vestment","vet","veteran","veterinarian","veto","viability","vibe","vibraphone","vibration","vibrissae","vice","vicinity","victim","victory","video","view","viewer","vignette","villa","village","vine","vinegar","vineyard","vintage","vintner","vinyl","viola","violation","violence","violet","violin","virginal","virtue","virus","visa","viscose","vise","vision","visit","visitor","visor","vista","visual","vitality","vitamin","vitro","vivo","vixen","vodka","vogue","voice","void","vol","volatility","volcano","volleyball","volume","volunteer","volunteering","vomit","vote","voter","voting","voyage","vulture","wad","wafer","waffle","wage","wagon","waist","waistband","wait","waiter","waiting","waitress","waiver","wake","walk","walker","walking","walkway","wall","wallaby","wallet","walnut","walrus","wampum","wannabe","want","war","warden","wardrobe","warfare","warlock","warlord","warm-up","warming","warmth","warning","warrant","warren","warrior","wasabi","wash","washbasin","washcloth","washer","washtub","wasp","waste","wastebasket","wasting","watch","watcher","watchmaker","water","waterbed","watercress","waterfall","waterfront","watermelon","waterskiing","waterspout","waterwheel","wave","waveform","wax","way","weakness","wealth","weapon","wear","weasel","weather","web","webinar","webmail","webpage","website","wedding","wedge","weed","weeder","weedkiller","week","weekend","weekender","weight","weird","welcome","welfare","well","well-being","west","western","wet-bar","wetland","wetsuit","whack","whale","wharf","wheat","wheel","whelp","whey","whip","whirlpool","whirlwind","whisker","whiskey","whisper","whistle","white","whole","wholesale","wholesaler","whorl","wick","widget","widow","width","wife","wifi","wild","wildebeest","wilderness","wildlife","will","willingness","willow","win","wind","wind-chime","windage","window","windscreen","windshield","wine","winery","wing","wingman","wingtip","wink","winner","winter","wire","wiretap","wiring","wisdom","wiseguy","wish","wisteria","wit","witch","witch-hunt","withdrawal","witness","wok","wolf","woman","wombat","wonder","wont","wood","woodchuck","woodland","woodshed","woodwind","wool","woolens","word","wording","work","workbench","worker","workforce","workhorse","working","workout","workplace","workshop","world","worm","worry","worship","worshiper","worth","wound","wrap","wraparound","wrapper","wrapping","wreck","wrecker","wren","wrench","wrestler","wriggler","wrinkle","wrist","writer","writing","wrong","xylophone","yacht","yahoo","yak","yam","yang","yard","yarmulke","yarn","yawl","year","yeast","yellow","yellowjacket","yesterday","yew","yin","yoga","yogurt","yoke","yolk","young","youngster","yourself","youth","yoyo","yurt","zampone","zebra","zebrafish","zen","zephyr","zero","ziggurat","zinc","zipper","zither","zombie","zone","zoo","zoologist","zoology","zoot-suit","zucchini"];var cn=["a","abaft","aboard","about","above","absent","across","afore","after","against","along","alongside","amid","amidst","among","amongst","an","anenst","anti","apropos","apud","around","as","aside","astride","at","athwart","atop","barring","before","behind","below","beneath","beside","besides","between","beyond","but","by","circa","concerning","considering","despite","down","during","except","excepting","excluding","failing","following","for","forenenst","from","given","in","including","inside","into","lest","like","mid","midst","minus","modulo","near","next","notwithstanding","of","off","on","onto","opposite","out","outside","over","pace","past","per","plus","pro","qua","regarding","round","sans","save","since","than","the","through","throughout","till","times","to","toward","towards","under","underneath","unlike","until","unto","up","upon","versus","via","vice","with","within","without","worth"];var dn=["abandon","abase","abate","abbreviate","abdicate","abduct","abet","abhor","abide","abjure","abnegate","abolish","abominate","abort","abound","abrade","abridge","abrogate","abscond","abseil","absent","absolve","absorb","abstain","abstract","abuse","abut","accede","accelerate","accent","accentuate","accept","access","accessorise","accessorize","acclaim","acclimate","acclimatise","acclimatize","accommodate","accompany","accomplish","accord","accost","account","accouter","accoutre","accredit","accrue","acculturate","accumulate","accuse","accustom","ace","ache","achieve","acidify","acknowledge","acquaint","acquiesce","acquire","acquit","act","action","activate","actualise","actualize","actuate","adapt","add","addle","address","adduce","adhere","adjoin","adjourn","adjudge","adjudicate","adjure","adjust","administer","admire","admit","admonish","adopt","adore","adorn","adsorb","adulterate","adumbrate","advance","advantage","advertise","advise","advocate","aerate","affect","affiliate","affirm","affix","afflict","afford","afforest","affront","age","agglomerate","aggravate","aggregate","agitate","agonise","agonize","agree","aid","ail","aim","air","airbrush","airdrop","airfreight","airlift","alarm","alert","alienate","alight","align","allay","allege","alleviate","allocate","allot","allow","alloy","allude","ally","alphabetise","alphabetize","alter","alternate","amalgamate","amass","amaze","amble","ambush","ameliorate","amend","amortise","amortize","amount","amplify","amputate","amuse","anaesthetise","anaesthetize","analyse","anchor","anesthetize","anger","angle","anglicise","anglicize","animate","anneal","annex","annihilate","annotate","announce","annoy","annul","anodise","anodize","anoint","anonymise","anonymize","answer","antagonise","antagonize","antedate","anthologise","anthologize","anticipate","ape","apologise","apologize","apostrophise","apostrophize","appal","appall","appeal","appear","appease","append","appertain","applaud","apply","appoint","apportion","appraise","appreciate","apprehend","apprentice","apprise","approach","appropriate","approve","approximate","aquaplane","arbitrate","arc","arch","archive","argue","arise","arm","arouse","arraign","arrange","array","arrest","arrive","arrogate","arse","art","articulate","ascend","ascertain","ascribe","ask","asphyxiate","aspirate","aspire","assail","assassinate","assault","assay","assemble","assent","assert","assess","assign","assimilate","assist","associate","assuage","assume","assure","asterisk","astonish","astound","atomise","atomize","atone","atrophy","attach","attack","attain","attempt","attend","attenuate","attest","attract","attribute","auction","audit","audition","augment","augur","authenticate","author","authorise","authorize","autograph","automate","autosave","autowind","avail","avenge","aver","average","avert","avoid","avow","await","awake","awaken","award","awe","ax","axe","baa","babble","baby","babysit","back","backcomb","backdate","backfill","backfire","backlight","backpack","backspace","backtrack","badger","baffle","bag","bail","bait","bake","balance","bale","ball","balloon","ballot","balls","bamboozle","ban","band","bandage","bandy","bang","bangs","banish","bank","bankroll","bankrupt","banter","baptise","baptize","bar","barbecue","bare","barf","bargain","barge","bark","barnstorm","barrack","barrel","barricade","barter","base","bash","bask","bastardise","bastardize","baste","bat","batch","bath","bathe","batten","batter","battle","baulk","bawl","bay","bayonet","be","beach","beam","bean","bear","beard","beat","beatbox","beatboxer","beatify","beautify","beaver","beckon","become","bed","bedazzle","bedeck","bedevil","beef","beep","beetle","befall","befit","befog","befriend","beg","beget","beggar","begin","begrudge","beguile","behave","behead","behold","behoove","behove","belabor","belabour","belay","belch","belie","believe","belittle","bellow","belly","bellyache","belong","belt","bemoan","bemuse","benchmark","bend","benefit","bequeath","berate","bereave","berth","beseech","beset","besiege","besmirch","bespatter","bespeak","best","bestir","bestow","bestride","bet","betake","betide","betoken","betray","better","bewail","beware","bewilder","bewitch","bias","bicker","bicycle","bid","bide","biff","bifurcate","big","bike","bilk","bill","billet","billow","bin","bind","binge","biodegrade","bird","bisect","bitch","bite","bitmap","bivouac","bivvy","blab","blabber","black","blackball","blacken","blacklist","blackmail","blag","blame","blanch","blank","blanket","blare","blaspheme","blast","blather","blaze","blazon","bleach","bleat","bleed","bleep","blemish","blench","blend","bless","blight","blind","blindfold","blindfolded","blindside","blink","bliss","blister","blitz","bloat","block","blockade","blog","blood","bloom","bloop","blossom","blot","blow","blub","blubber","bludge","bludgeon","bluff","blunder","blunt","blur","blurt","blush","bluster","board","boast","bob","bobble","bode","bodge","bog","boggle","boil","bolster","bolt","bomb","bombard","bond","bone","bonk","boo","boob","boogie","book","bookmark","boom","boomerang","boost","boot","bootleg","booze","bop","border","bore","born","borrow","boss","botch","bother","bottle","bottleful","bottom","bounce","bound","bow","bowdlerise","bowdlerize","bowl","bowlful","box","boycott","braai","brace","braces","bracket","brag","braid","brain","brainstorm","brainwash","braise","brake","branch","brand","brandish","brave","brawl","bray","brazen","breach","break","breakfast","breast","breastfeed","breathalyse","breathalyze","breathe","breed","breeze","brew","bribe","brick","bridge","bridle","brief","brighten","brim","bring","bristle","broach","broadcast","broaden","broadside","broil","broker","brood","brook","browbeat","brown","browse","bruise","bruit","brush","brutalise","brutalize","bubble","buck","bucket","bucketful","buckle","bud","buddy","budge","budget","buff","buffer","buffet","bug","bugger","build","bulge","bulk","bulldoze","bullshit","bully","bum","bumble","bump","bunch","bundle","bung","bungle","bunk","bunker","bunt","buoy","burble","burden","burgeon","burglarize","burgle","burn","burnish","burp","burrow","burst","bury","bus","bushwhack","busk","bust","bustle","busy","butcher","butt","butter","button","buttonhole","buttress","buy","buzz","buzzing","bypass","cable","cache","cackle","caddie","cadge","cage","cajole","cake","calcify","calculate","calibrate","call","calm","calve","camouflage","camp","campaign","can","canalise","canalize","cancel","cane","cannibalise","cannibalize","cannon","cannulate","canoe","canonise","canonize","canoodle","canst","cant","canter","canvass","cap","caper","capitalise","capitalize","capitulate","capsize","captain","caption","captivate","capture","caramelise","caramelize","carbonise","carbonize","carburise","carburize","card","care","careen","career","caress","caricature","carjack","carol","carom","carouse","carp","carpet","carpool","carry","cart","cartwheel","carve","cascade","case","cash","cashier","casserole","cast","castigate","castrate","catalog","catalogue","catalyse","catalyze","catapult","catch","categorise","categorize","cater","caterwaul","catnap","caucus","caulk","cause","cauterise","cauterize","caution","cave","cavil","cavort","caw","cc","cease","cede","celebrate","cement","censor","censure","centralise","centralize","centre","certificate","certify","chafe","chaff","chain","chair","chalk","challenge","champ","champion","chance","change","channel","chant","chaperon","chaperone","char","characterise","characterize","charbroil","charge","chargesheet","chargrill","charm","chart","charter","chase","chasten","chastise","chat","chatter","chauffeur","cheapen","cheat","cheater","check","checkmate","cheek","cheep","cheer","cherish","chew","chicken","chide","chill","chillax","chime","chink","chip","chirp","chisel","chivvy","chlorinate","choke","chomp","choose","chop","choreograph","chortle","chorus","christen","chromakey","chronicle","chuck","chuckle","chug","chunder","chunter","churn","cinch","circle","circulate","circumcise","circumnavigate","circumscribe","circumvent","cite","civilise","civilize","clack","claim","clam","clamber","clamor","clamour","clamp","clang","clank","clap","clarify","clash","clasp","class","classify","clatter","claw","clean","cleanse","clear","cleave","clench","clerk","click","climax","climb","clinch","cling","clink","clinking","clip","cloak","clobber","clock","clog","clone","clonk","close","closet","clot","clothe","cloud","clout","clown","club","cluck","clue","clump","clunk","cluster","clutch","clutter","coach","coagulate","coalesce","coarsen","coast","coat","coax","cobble","cock","cocoon","coddle","code","codify","coerce","coexist","cogitate","cohabit","cohere","coil","coin","coincide","collaborate","collapse","collar","collate","collect","collectivise","collectivize","collide","colligate","collocate","collude","colonise","colonize","colorize","colour","comb","combat","combine","combust","come","comfort","command","commandeer","commemorate","commence","commend","comment","commentate","commercialise","commercialize","commingle","commiserate","commission","commit","commune","communicate","commute","compact","compare","compartmentalise","compartmentalize","compel","compensate","compete","compile","complain","complement","complete","complicate","compliment","comply","comport","compose","compost","compound","comprehend","compress","comprise","compromise","compute","computerise","computerize","con","conceal","concede","conceive","concentrate","conceptualise","conceptualize","concern","concertina","conciliate","conclude","concoct","concrete","concur","concuss","condemn","condense","condescend","condition","condone","conduct","cone","confer","confess","confide","configure","confine","confirm","confiscate","conflate","conflict","conform","confound","confront","confuse","confute","congeal","congratulate","congregate","conjecture","conjoin","conjugate","conjure","conk","connect","connive","connote","conquer","conscientise","conscientize","conscript","consecrate","consent","conserve","consider","consign","consist","console","consolidate","consort","conspire","constitute","constrain","constrict","construct","construe","consult","consume","consummate","contact","contain","contaminate","contemplate","contend","content","contest","contextualise","contextualize","continue","contort","contract","contradict","contraindicate","contrast","contravene","contribute","contrive","control","controvert","convalesce","convene","converge","converse","convert","convey","convict","convince","convoke","convulse","coo","cook","cool","coop","cooperate","coordinate","cop","cope","coppice","copulate","copy","copyright","cordon","core","cork","corkscrew","corner","corral","correct","correlate","correspond","corrode","corrupt","coruscate","cosh","cosset","cost","cosy","cotton","couch","cough","counsel","count","countenance","counter","counteract","counterbalance","counterfeit","countermand","counterpoint","countersign","couple","courier","course","court","covenant","cover","covet","cow","cower","cox","cozy","crack","crackle","cradle","craft","cram","cramp","crane","crank","crap","crash","crate","crave","crawl","crayon","creak","creaking","cream","crease","create","credential","credit","creep","cremate","creolise","creolize","creosote","crest","crew","crib","crick","criminalise","criminalize","crimp","cringe","crinkle","cripple","crisp","criticise","criticize","critique","croak","crochet","crook","croon","crop","cross","crouch","crow","crowd","crown","crucify","cruise","crumble","crumple","crunch","crusade","crush","cry","crystallise","crystallize","cube","cuckold","cuddle","cudgel","cue","cuff","cull","culminate","cultivate","culture","cup","curate","curb","curdle","cure","curl","curry","curse","curtail","curtain","curtsy","curve","cushion","cuss","customise","customize","cut","cwtch","cycle","dab","dabble","dally","dam","damage","dammit","damn","damp","dampen","dance","dandle","dangle","dare","darken","darn","dart","dash","date","daub","daunt","dawdle","dawn","daydream","dazzle","deactivate","deaden","deadhead","deafen","deal","debar","debase","debate","debilitate","debit","debrief","debug","debunk","debut","decamp","decant","decapitate","decay","deceive","decelerate","decentralise","decentralize","decide","decimalise","decimalize","decimate","decipher","deck","declaim","declare","declassify","decline","declutter","decode","decommission","decompose","decompress","deconsecrate","deconstruct","decontaminate","decontrol","decorate","decouple","decoy","decrease","decree","decriminalise","decriminalize","decry","decrypt","dedicate","deduce","deduct","deejay","deem","deepen","deface","defame","default","defeat","defecate","defect","defend","defer","defile","define","deflate","deflect","deflower","defog","defoliate","deforest","deform","defrag","defragment","defraud","defray","defrock","defrost","defuse","defy","degenerate","deglaze","degrade","degrease","dehumanise","dehumanize","dehydrate","deify","deign","delay","delegate","delete","deliberate","delight","delimit","delineate","deliquesce","deliver","delouse","delude","deluge","delve","demand","demarcate","demean","demerge","demilitarise","demilitarize","demineralise","demineralize","demist","demo","demob","demobilise","demobilize","democratise","democratize","demolish","demonise","demonize","demonstrate","demoralise","demoralize","demote","demotivate","demur","demystify","denationalise","denationalize","denigrate","denitrify","denominate","denote","denounce","dent","denude","deny","depart","depend","depersonalise","depersonalize","depict","deplane","deplete","deplore","deploy","depopulate","deport","depose","deposit","deprave","deprecate","depreciate","depress","depressurise","depressurize","deprive","depute","deputise","deputize","deracinate","derail","dereference","deregulate","deride","derive","derogate","descale","descend","describe","descry","desecrate","desegregate","deselect","desensitise","desensitize","desert","deserve","design","designate","desire","desist","deskill","desolate","despair","despise","despoil","destabilise","destabilize","destock","destroy","detach","detail","detain","detect","deter","deteriorate","determine","detest","dethrone","detonate","detour","detoxify","detract","detrain","devalue","devastate","develop","deviate","devise","devoice","devolve","devote","devour","diagnose","dial","dice","dicker","dictate","diddle","die","diet","differ","differentiate","diffract","diffuse","dig","digest","digitalise","digitalize","digitise","digitize","dignify","digress","dilate","dilute","diluted","dim","diminish","dimple","dine","ding","dink","dip","diphthongise","diphthongize","direct","dirty","dis","disable","disabuse","disadvantage","disaffiliate","disafforest","disagree","disallow","disambiguate","disappear","disappoint","disapprove","disarm","disarrange","disassemble","disassociate","disavow","disband","disbar","disbelieve","disburse","discard","discern","discharge","discipline","disclaim","disclose","discolor","discolour","discomfit","discomfort","discompose","disconcert","disconnect","discontinue","discount","discourage","discourse","discover","discredit","discriminate","discuss","disdain","disembark","disembowel","disenfranchise","disengage","disentangle","disestablish","disfigure","disgorge","disgrace","disguise","disgust","dish","dishearten","dishonor","dishonour","disillusion","disincentivise","disincentivize","disinfect","disinherit","disinhibit","disintegrate","disinter","disinvest","dislike","dislocate","dislodge","dismantle","dismay","dismember","dismiss","dismount","disobey","disorient","disorientate","disown","disparage","dispatch","dispel","dispense","disperse","displace","display","displease","disport","dispose","dispossess","disprove","dispute","disqualify","disregard","disrespect","disrobe","disrupt","dissect","dissemble","disseminate","dissent","dissimulate","dissipate","dissociate","dissolve","dissuade","distance","distend","distil","distill","distinguish","distort","distract","distress","distribute","distrust","disturb","disunite","ditch","dither","dive","diverge","diversify","divert","divest","divide","divine","divorce","divulge","divvy","do","dob","dock","doctor","document","dodge","doff","dog","dole","doll","dollarise","dollarize","domesticate","dominate","don","donate","doodle","doom","doorstep","dop","dope","dose","doss","dot","dote","double","doubt","douche","douse","dovetail","down","downchange","downgrade","downlink","download","downplay","downshift","downsize","dowse","doze","draft","drag","dragoon","drain","dramatise","dramatize","drape","draught","draw","drawl","dread","dream","dredge","drench","dress","dribble","drift","drill","drink","drip","drive","drivel","drizzle","drone","drool","droop","drop","drown","drowse","drug","drum","dry","dub","duck","duckie","ducks","duel","duff","dull","dumb","dumbfound","dummy","dump","dunk","dunt","dupe","duplicate","dust","dwarf","dwell","dwindle","dye","dynamite","earmark","earn","earth","ease","eat","eavesdrop","ebb","echo","eclipse","economise","economize","eddy","edge","edify","edit","editorialise","editorialize","educate","eff","efface","effect","effectuate","egg","ejaculate","eject","eke","elaborate","elapse","elbow","elect","electrify","electrocute","electroplate","elevate","elicit","elide","eliminate","elongate","elope","elucidate","elude","email","emanate","emancipate","emasculate","embalm","embargo","embark","embarrass","embed","embellish","embezzle","embitter","emblazon","embody","embolden","emboss","embrace","embroider","embroil","emcee","emend","emerge","emigrate","emit","emote","empathise","empathize","emphasise","emphasize","employ","empower","empty","emulate","emulsify","enable","enact","encamp","encapsulate","encase","encash","enchant","encircle","enclose","encode","encompass","encounter","encourage","encroach","encrypt","encumber","end","endanger","endear","endeavor","endeavour","endorse","endow","endure","energise","energize","enervate","enfeeble","enfold","enforce","enfranchise","engage","engender","engineer","engorge","engrave","engross","engulf","enhance","enjoin","enjoy","enlarge","enlighten","enlist","enliven","enmesh","ennoble","enquire","enrage","enrapture","enrich","enrol","enroll","ensconce","enshrine","enshroud","enslave","ensnare","ensue","ensure","entail","entangle","enter","entertain","enthral","enthrall","enthrone","enthuse","entice","entitle","entomb","entrance","entrap","entreat","entrench","entrust","entwine","enumerate","enunciate","envelop","envisage","envision","envy","epitomise","epitomize","equal","equalise","equalize","equate","equip","equivocate","eradicate","erase","erect","erode","err","erupt","escalate","escape","eschew","escort","espouse","espy","essay","establish","esteem","estimate","etch","eulogise","eulogize","euthanise","euthanize","evacuate","evade","evaluate","evangelise","evangelize","evaporate","even","eventuate","evict","evidence","evince","eviscerate","evoke","evolve","exacerbate","exact","exaggerate","exalt","examine","exasperate","excavate","exceed","excel","except","excerpt","exchange","excise","excite","exclaim","exclude","excommunicate","excoriate","excrete","exculpate","excuse","execute","exemplify","exempt","exercise","exert","exeunt","exfoliate","exhale","exhaust","exhibit","exhilarate","exhort","exhume","exile","exist","exit","exonerate","exorcise","exorcize","expand","expatiate","expect","expectorate","expedite","expel","expend","experience","experiment","expiate","expire","explain","explicate","explode","exploit","explore","export","expose","expostulate","expound","express","expropriate","expunge","expurgate","extemporise","extemporize","extend","exterminate","externalise","externalize","extinguish","extirpate","extol","extort","extract","extradite","extrapolate","extricate","extrude","exude","exult","eye","eyeball","eyeglasses","fabricate","face","facilitate","factor","factorise","factorize","fade","faff","fail","faint","fake","fall","falsify","falter","familiarise","familiarize","fan","fancy","fantasise","fantasize","fare","farewell","farm","farrow","fart","fascinate","fashion","fast","fasten","father","fathom","fatten","fault","favor","favour","fawn","fax","faze","fear","feast","feather","feature","federate","feed","feel","feign","feint","fell","fellate","feminise","feminize","fence","fend","ferment","ferret","ferry","fertilise","fertilize","fess","fester","festoon","fetch","fete","fetishise","fetishize","fetter","feud","fib","fictionalise","fictionalize","fiddle","fidget","field","fight","figure","filch","file","filibuster","fill","fillet","film","filter","finagle","finalise","finalize","finance","find","fine","finesse","finger","fingerprint","finish","fire","firebomb","firm","fish","fishtail","fit","fix","fizz","fizzle","flag","flagellate","flail","flake","flame","flank","flap","flare","flash","flat","flatline","flatten","flatter","flaunt","flavour","flay","fleck","flee","fleece","flesh","flex","flick","flicker","flight","flinch","fling","flip","flirt","flit","float","flock","flog","flood","floodlight","floor","flop","floss","flounce","flounder","flour","flourish","flout","flow","flower","flub","fluctuate","fluff","flummox","flunk","flush","fluster","flutter","fly","foal","foam","fob","focalise","focalize","focus","fog","foil","foist","fold","follow","foment","fondle","fool","foot","forage","forbear","forbid","force","ford","forearm","forecast","foreclose","foregather","foreground","foresee","foreshadow","foreshorten","forestall","foretell","forewarn","forfeit","forfend","forgather","forge","forget","forgive","forgo","fork","form","formalise","formalize","format","formulate","fornicate","forsake","forswear","fortify","forward","forwards","fossick","fossilise","fossilize","foster","foul","found","founder","fox","fracture","fragment","frame","franchise","frank","fraternise","fraternize","fray","freak","free","freelance","freeload","freestyle","freewheel","freeze","freight","frequent","freshen","fret","frighten","fringe","frisk","fritter","frizz","frizzle","frogmarch","frolic","front","frost","froth","frown","fruit","frustrate","fry","fuck","fudge","fuel","fulfil","fulfill","fulminate","fumble","fume","fumigate","function","fund","funk","funnel","furl","furlough","furnish","furrow","further","fuse","fuss","gab","gabble","gad","gag","gain","gainsay","gall","gallivant","gallop","galumph","galvanise","galvanize","gamble","gambol","gang","gape","garage","garden","gargle","garland","garner","garnish","garrison","garrote","garrotte","gas","gash","gasp","gatecrash","gather","gauge","gawk","gawp","gaze","gazump","gazunder","gear","gee","gel","geld","gen","generalise","generalize","generate","gentrify","genuflect","germinate","gerrymander","gestate","gesticulate","gesture","get","ghost","ghostwrite","gibber","gift","giggle","gild","ginger","gird","girdle","give","gladden","glamorise","glamorize","glance","glare","glass","glaze","gleam","glean","glide","glimmer","glimmering","glimpse","glint","glisten","glister","glitter","gloat","globalise","globalize","glom","glorify","glory","gloss","glow","glower","glue","glug","glut","gnash","gnaw","go","goad","gob","gobble","goggle","goldbrick","goof","google","goose","gore","gorge","gossip","gouge","govern","grab","grace","grade","graduate","graft","grant","grapple","grasp","grass","grate","gratify","gravitate","graze","grease","green","greet","grey","grieve","grill","grimace","grin","grind","grip","gripe","grit","grizzle","groan","grok","groom","grope","gross","grouch","ground","group","grouse","grout","grovel","grow","growl","grub","grudge","grumble","grunt","guarantee","guard","guess","guest","guffaw","guide","guillotine","guilt","gulp","gum","gun","gurgle","gurn","gush","gussy","gust","gut","gutter","guzzle","gybe","gyp","gyrate","hack","haemorrhage","haggle","hail","hallmark","halloo","hallucinate","halt","halve","ham","hammer","hamper","hamstring","hand","handcuff","handicap","handle","hang","hanker","happen","harangue","harass","harbor","harbour","harden","hare","hark","harm","harmonise","harmonize","harness","harp","harpoon","harrow","harrumph","harry","harvest","hash","hassle","hasten","hatch","hate","haul","haunt","have","haw","hawk","hazard","haze","head","headbutt","headhunt","headline","heal","heap","hear","hearken","hearten","heat","heave","heckle","hector","hedge","heed","heel","heft","heighten","heist","help","hem","hemorrhage","herald","herd","hesitate","hew","hex","hibernate","hiccough","hiccup","hide","hie","highball","highlight","hightail","hijack","hike","hinder","hinge","hint","hire","hiss","hit","hitch","hitchhike","hive","hoard","hoax","hobble","hobnob","hock","hoe","hog","hoick","hoist","hold","hole","holiday","holler","hollow","holster","home","homeschool","homestead","hone","honeymoon","honk","honour","hoodwink","hoof","hook","hoon","hoot","hoover","hop","hope","horn","horrify","horse","horsewhip","hose","hosepipe","hospitalise","hospitalize","host","hot","hotfoot","hound","house","hover","howl","huddle","huff","hug","hull","hum","humanise","humanize","humble","humiliate","humour","hump","hunch","hunger","hunker","hunt","hurdle","hurl","hurry","hurt","hurtle","husband","hush","husk","hustle","hybridise","hybridize","hydrate","hydroplane","hype","hyperventilate","hyphenate","hypnotise","hypnotize","hypothesise","hypothesize","ice","iconify","idealise","idealize","ideate","identify","idle","idolise","idolize","ignite","ignore","illuminate","illumine","illustrate","imagine","imagineer","imbibe","imbue","imitate","immerse","immigrate","immobilise","immobilize","immolate","immortalise","immortalize","immunise","immunize","immure","impact","impair","impale","impanel","impart","impeach","impede","impel","imperil","impersonate","impinge","implant","implement","implicate","implode","implore","imply","import","importune","impose","impound","impoverish","impregnate","impress","imprint","imprison","improve","improvise","impugn","inactivate","inaugurate","incapacitate","incarcerate","incarnate","incense","incentivise","incentivize","inch","incinerate","incise","incite","incline","include","incommode","inconvenience","incorporate","increase","incriminate","incubate","inculcate","incur","indemnify","indent","index","indicate","indict","individualise","individualize","individuate","indoctrinate","induce","induct","indulge","industrialise","industrialize","infantilise","infantilize","infect","infer","infest","infill","infiltrate","inflame","inflate","inflect","inflict","influence","inform","infringe","infuriate","infuse","ingest","ingratiate","inhabit","inhale","inhere","inherit","inhibit","initial","initialise","initialize","initiate","inject","injure","ink","inlay","innovate","inoculate","input","inscribe","inseminate","insert","inset","insinuate","insist","inspect","inspire","install","instance","instigate","instil","instill","institute","institutionalise","institutionalize","instruct","insulate","insult","insure","integrate","intend","intensify","inter","interact","interbreed","intercede","intercept","interchange","interconnect","intercut","interest","interface","interfere","interject","interlace","interleave","interlink","interlock","intermarry","intermesh","intermingle","intermix","intern","internalise","internalize","internationalise","internationalize","interpenetrate","interpolate","interpose","interpret","interrelate","interrogate","interrupt","intersect","intersperse","intertwine","intervene","interview","interweave","interwork","intimate","intimidate","intone","intoxicate","intrigue","introduce","intrude","intubate","intuit","inundate","inure","invade","invalid","invalidate","inveigh","inveigle","invent","inventory","invert","invest","investigate","invigilate","invigorate","invite","invoice","invoke","involve","ionise","ionize","irk","iron","irradiate","irrigate","irritate","irrupt","isolate","issue","italicise","italicize","itch","itemise","itemize","iterate","jab","jabber","jack","jackknife","jail","jam","jangle","jar","jaw","jaywalk","jazz","jeer","jell","jeopardise","jeopardize","jerk","jest","jet","jettison","jib","jibe","jig","jiggle","jilt","jingle","jink","jinx","jive","jockey","jog","joggle","join","joint","joke","jol","jolly","jolt","josh","jostle","jot","journey","joust","judder","judge","juggle","juice","jumble","jump","junk","justify","jut","juxtapose","keel","keelhaul","keen","keep","ken","key","keyboard","kibitz","kick","kid","kidnap","kill","kindle","kink","kip","kiss","kit","kite","klap","kludge","knacker","knead","knee","kneecap","kneel","knife","knight","knit","knock","knot","know","knuckle","kowtow","kvetch","label","labour","lace","lacerate","lack","lacquer","lactate","ladder","ladle","lag","lam","lamb","lambast","lambaste","lament","lamp","lampoon","lance","land","lands","landscape","languish","lap","lapse","lard","large","lark","lash","lasso","last","latch","lather","laud","laugh","launch","launder","lavish","lay","layer","laze","leach","lead","leaf","leaflet","leak","lean","leap","leapfrog","learn","lease","leash","leave","leaven","lech","lecture","leer","leg","legalise","legalize","legislate","legitimise","legitimize","lend","lengthen","lessen","let","letter","letterbox","level","lever","leverage","levitate","levy","liaise","libel","liberalise","liberalize","liberate","license","lick","lie","lift","ligate","light","lighten","like","liken","limber","lime","limit","limp","line","linger","link","lionise","lionize","liquefy","liquidate","liquidise","liquidize","lisp","list","listen","litigate","litter","live","liven","load","loads","loaf","loan","loathe","lob","lobby","lobotomise","lobotomize","localise","localize","locate","lock","lodge","loft","log","loiter","loll","lollop","long","look","looks","loom","loop","loose","loosen","loot","lop","lope","lord","lose","lounge","lour","louse","love","low","lowball","lower","lubricate","luck","lug","lull","lumber","lump","lunch","lunge","lurch","lure","lurk","lust","luxuriate","lynch","macerate","machine","madden","magic","magnetise","magnetize","magnify","mail","maim","mainline","mainstream","maintain","major","make","malfunction","malign","malinger","maltreat","man","manacle","manage","mandate","mangle","manhandle","manicure","manifest","manipulate","manoeuvre","mantle","manufacture","manure","map","mar","march","marginalise","marginalize","marinate","mark","market","maroon","marry","marshal","martyr","marvel","masculinise","masculinize","mash","mask","masquerade","mass","massacre","massage","master","mastermind","masticate","masturbate","match","mate","materialise","materialize","matriculate","matter","mature","maul","maunder","max","maximise","maximize","mean","meander","measure","mechanise","mechanize","medal","meddle","mediate","medicate","meditate","meet","meld","mellow","melt","memorialise","memorialize","memorise","memorize","menace","mend","menstruate","mention","meow","mercerise","mercerize","merchandise","merge","merit","mesh","mesmerise","mesmerize","mess","message","metabolise","metabolize","metamorphose","mete","meter","methinks","mew","mewl","miaow","microblog","microchip","micromanage","microwave","micturate","migrate","militarise","militarize","militate","milk","mill","mime","mimic","mince","mind","mine","mingle","miniaturise","miniaturize","minimise","minimize","minister","minor","mint","minute","mirror","misapply","misappropriate","misbehave","miscalculate","miscarry","miscast","misconceive","misconstrue","miscount","misdiagnose","misdial","misdirect","misfile","misfire","misgovern","mishandle","mishear","mishit","misinform","misinterpret","misjudge","miskey","mislay","mislead","mismanage","mismatch","misname","misplace","misplay","mispronounce","misquote","misread","misreport","misrepresent","miss","mission","misspell","misspend","mist","mistake","mistime","mistreat","mistrust","misunderstand","misuse","mitigate","mitre","mix","moan","mob","mobilise","mobilize","mock","mod","model","moderate","modernise","modernize","modify","modulate","moisten","moisturise","moisturize","mold","molder","molest","mollify","mollycoddle","molt","monitor","monopolise","monopolize","moo","mooch","moon","moonlight","moonwalk","moor","moot","mop","mope","moralise","moralize","morph","mortar","mortgage","mortify","mosey","mosh","mothball","mother","motion","motivate","motor","mould","moulder","moult","mount","mourn","mouse","mouth","move","movies","mow","muck","muddle","muddy","muff","muffle","mug","mulch","mull","multicast","multiply","multitask","mumble","mumbling","mummify","munch","murder","murmur","murmuring","murmurings","muscle","muse","mushroom","muss","muster","mutate","mute","mutilate","mutiny","mutter","muzzle","mystify","nab","nag","nail","name","namecheck","nap","narrate","narrow","narrowcast","nasalise","nasalize","nationalise","nationalize","natter","naturalise","naturalize","nauseate","navigate","near","nearer","nearest","neaten","necessitate","neck","necklace","need","needle","negate","negative","neglect","negotiate","neigh","nerve","nest","nestle","net","nettle","network","neuter","neutralise","neutralize","nibble","nick","nickname","niggle","nip","nitrify","nix","nobble","nod","nominalize","nominate","norm","normalise","normalize","nose","nosedive","nosh","notarise","notarize","notch","note","notice","notify","nourish","nudge","nuke","nullify","numb","number","nurse","nurture","nut","nuzzle","obey","obfuscate","object","objectify","oblige","obliterate","obscure","observe","obsess","obstruct","obtain","obtrude","obviate","occasion","occlude","occupy","occur","off","offend","offer","officiate","offload","offset","offshore","ogle","oil","okay","omit","ooze","open","operate","opine","oppose","oppress","opt","optimise","optimize","option","orbit","orchestrate","ordain","order","organise","organize","orient","orientate","originate","ornament","orphan","oscillate","ossify","ostracise","ostracize","oust","out","outbid","outclass","outdistance","outdo","outface","outfit","outflank","outfox","outgrow","outgun","outlast","outlaw","outline","outlive","outmaneuver","outmanoeuvre","outnumber","outpace","outperform","outplay","outpoint","output","outrage","outrank","outrun","outsell","outshine","outsmart","outsource","outstay","outstrip","outvote","outweigh","outwit","overachieve","overact","overawe","overbalance","overbook","overburden","overcharge","overcome","overcompensate","overcook","overdevelop","overdo","overdose","overdraw","overdub","overeat","overemphasize","overestimate","overexpose","overextend","overfeed","overflow","overfly","overgeneralise","overgeneralize","overgraze","overhang","overhaul","overhear","overheat","overindulge","overlap","overlay","overlie","overload","overlook","overpay","overplay","overpower","overprint","overproduce","overrate","overreach","overreact","override","overrule","overrun","oversee","oversell","overshadow","overshoot","oversimplify","oversleep","overspend","overstate","overstay","overstep","overstock","overstretch","overtake","overtax","overthrow","overtrain","overturn","overuse","overvalue","overwhelm","overwinter","overwork","overwrite","ovulate","owe","own","oxidise","oxidize","oxygenate","pace","pacify","pack","package","packetise","packetize","pad","paddle","padlock","page","paginate","pailful","pain","paint","pair","pal","palatalise","palatalize","pale","pall","palliate","palm","palpate","palpitate","pamper","pan","pander","panel","panhandle","panic","pant","paper","parachute","parade","parallel","paralyse","paralyze","paraphrase","parboil","parcel","parch","pardon","pare","park","parlay","parley","parody","parole","parrot","parry","parse","part","partake","participate","particularise","particularize","partition","partner","party","pass","passivise","passivize","paste","pasteurise","pasteurize","pasture","pat","patch","patent","patrol","patronise","patronize","patter","pattern","pause","pave","paw","pawn","pay","peak","peal","peck","pedal","peddle","pedestrianise","pedestrianize","pee","peek","peel","peep","peer","peg","pelt","pen","penalise","penalize","pencil","penetrate","pension","people","pep","pepper","perambulate","perceive","perch","percolate","perfect","perforate","perform","perfume","perish","perjure","perk","perm","permeate","permit","perpetrate","perpetuate","perplex","persecute","persevere","persist","personalise","personalize","personify","perspire","persuade","pertain","perturb","peruse","pervade","pervert","pester","pet","peter","petition","petrify","phase","philosophise","philosophize","phone","photocopy","photograph","photoshop","photosynthesise","photosynthesize","phrase","pick","picket","pickle","picnic","picture","picturise","picturize","piddle","piece","pierce","pig","pigeonhole","piggyback","pike","pile","pilfer","pill","pillage","pillory","pillow","pilot","pimp","pin","pinch","pine","ping","pinion","pink","pinpoint","pioneer","pip","pipe","pique","pirate","pirouette","piss","pit","pitch","pity","pivot","pixelate","pixellate","placate","place","plagiarise","plagiarize","plague","plait","plan","plane","plant","plaster","plasticise","plasticize","plate","plateau","play","plead","please","pledge","plight","plod","plonk","plop","plot","plough","pluck","plug","plumb","plummet","plump","plunder","plunge","plunk","pluralise","pluralize","ply","poach","pocket","point","poise","poison","poke","polarise","polarize","pole","poleax","poleaxe","police","polish","politicise","politicize","poll","pollard","pollinate","pollute","polymerise","polymerize","ponce","ponder","pong","pontificate","pony","poo","pooh","pool","poop","pootle","pop","popularise","popularize","populate","pore","port","portend","portion","portray","pose","posit","position","possess","posset","post","postmark","postpone","postulate","posture","pot","potter","pounce","pound","pour","pout","powder","power","practice","practise","praise","praises","prance","prang","prate","prattle","pray","preach","precede","precipitate","precis","preclude","predate","predecease","predetermine","predicate","predict","predispose","predominate","preen","preface","prefer","prefigure","prefix","preheat","prejudge","prejudice","preload","premaster","premiere","preoccupy","prep","prepare","prepone","preregister","presage","prescind","prescribe","preselect","presell","present","preserve","preset","preside","press","pressure","pressurise","pressurize","presume","presuppose","pretend","pretest","prettify","prevail","prevaricate","prevent","preview","prey","price","prick","prickle","pride","prime","primp","print","prioritise","prioritize","prise","privatise","privatize","privilege","prize","probate","probe","proceed","process","proclaim","procrastinate","procreate","proctor","procure","prod","produce","profane","profess","professionalise","professionalize","proffer","profile","profit","program","programme","progress","prohibit","project","proliferate","prolong","promenade","promise","promote","prompt","promulgate","pronounce","proof","proofread","prop","propagandise","propagandize","propagate","propel","prophesy","propitiate","propose","proposition","propound","proscribe","prosecute","proselytise","proselytize","prospect","prosper","prostitute","prostrate","protect","protest","protrude","prove","provide","provision","provoke","prowl","prune","pry","psych","psychoanalyse","publicise","publicize","publish","pucker","puff","puke","pull","pullulate","pulp","pulsate","pulse","pulverise","pulverize","pummel","pump","pun","punch","punctuate","puncture","punish","punt","pupate","purchase","purge","purify","purl","purloin","purport","purr","purse","pursue","purvey","push","pussyfoot","put","putrefy","putt","putter","puzzle","quack","quadruple","quaff","quail","quake","qualify","quantify","quarantine","quarrel","quarry","quarter","quarterback","quash","quaver","queer","quell","quench","query","quest","question","queue","quibble","quicken","quiet","quieten","quintuple","quip","quirk","quit","quiver","quiz","quote","quoth","rabbit","race","rack","radiate","radicalise","radicalize","radio","raffle","rag","rage","raid","rail","railroad","rain","raise","rake","rally","ram","ramble","ramp","rampage","randomise","randomize","range","rank","rankle","ransack","ransom","rant","rap","rape","rappel","rasp","rasterise","rasterize","rat","ratchet","rate","ratify","ration","rationalise","rationalize","rattle","ravage","rave","ravel","ravish","raze","razz","reach","reacquaint","react","reactivate","read","readdress","readies","readjust","readmit","ready","reaffirm","realign","realise","realize","reallocate","ream","reanimate","reap","reappear","reapply","reappoint","reappraise","rear","rearm","rearrange","reason","reassemble","reassert","reassess","reassign","reassure","reawaken","rebel","reboot","reborn","rebound","rebrand","rebuff","rebuild","rebuke","rebut","recall","recant","recap","recapitulate","recapture","recast","recede","receive","recess","recharge","reciprocate","recite","reckon","reclaim","reclassify","recline","recognise","recognize","recoil","recollect","recommence","recommend","recompense","reconcile","recondition","reconfigure","reconfirm","reconnect","reconnoitre","reconquer","reconsider","reconstitute","reconstruct","reconvene","record","recount","recoup","recover","recreate","recrudesce","recruit","rectify","recuperate","recur","recycle","redact","redden","redecorate","redeem","redefine","redeploy","redesign","redevelop","redial","redirect","rediscover","redistribute","redistrict","redo","redouble","redound","redraft","redraw","redress","reduce","reduplicate","reef","reek","reel","ref","refer","referee","reference","refill","refinance","refine","refit","reflate","reflect","refloat","refocus","reform","reformat","reformulate","refract","refrain","refresh","refrigerate","refuel","refund","refurbish","refuse","refute","regain","regale","regard","regenerate","register","regress","regret","regroup","regularise","regularize","regulate","regurgitate","rehabilitate","rehash","rehear","rehearse","reheat","rehome","rehouse","reign","reignite","reimburse","rein","reincarnate","reinforce","reinstate","reinterpret","reintroduce","reinvent","reinvest","reinvigorate","reissue","reiterate","reject","rejig","rejigger","rejoice","rejoin","rejuvenate","rekindle","relapse","relate","relaunch","relax","relay","release","relegate","relent","relieve","relinquish","relish","relive","reload","relocate","rely","remain","remainder","remake","remand","remap","remark","remarry","remaster","remediate","remedy","remember","remind","reminisce","remit","remix","remodel","remonstrate","remortgage","remould","remount","remove","remunerate","rename","rend","render","rendezvous","renege","renew","renounce","renovate","rent","reoccur","reoffend","reopen","reorder","reorganise","reorganize","reorient","repackage","repair","repatriate","repay","repeal","repeat","repel","repent","rephrase","replace","replay","replenish","replicate","reply","report","repose","repossess","represent","repress","reprieve","reprimand","reprint","reproach","reprocess","reproduce","reprove","repudiate","repulse","repurpose","request","require","requisition","requite","rerun","reschedule","rescind","rescue","research","researches","resect","resell","resemble","resent","reserve","reset","resettle","reshape","reshuffle","reside","resign","resist","resit","resize","reskill","resolve","resonate","resort","resound","resource","respect","respire","respond","respray","rest","restart","restate","restock","restore","restrain","restrict","restring","restructure","result","resume","resupply","resurface","resurrect","resuscitate","retail","retain","retake","retaliate","retard","retch","retell","retest","rethink","retire","retool","retort","retouch","retrace","retract","retrain","retreat","retrench","retrieve","retrofit","retry","return","reunify","reunite","reuse","rev","revalue","revamp","reveal","revel","revenge","reverberate","revere","reverse","revert","review","revile","revise","revisit","revitalise","revitalize","revive","revivify","revoke","revolt","revolutionise","revolutionize","revolve","reward","rewind","rewire","reword","rework","rewrite","rhapsodise","rhapsodize","rhyme","rib","rick","ricochet","rid","riddle","ride","ridge","ridicule","riffle","rifle","rig","right","rightsize","rile","rim","ring","rinse","riot","rip","ripen","riposte","ripple","rise","risk","ritualise","ritualize","rival","rivet","roam","roar","roast","rob","robe","rock","rocket","roger","roll","romance","romanticise","romanticize","romp","roof","room","roost","root","rope","rosin","roster","rot","rotate","rouge","rough","roughen","roughhouse","round","rouse","roust","rout","route","rove","row","rub","rubberneck","rubbish","ruck","rue","ruffle","ruin","ruins","rule","rumble","ruminate","rummage","rumor","rumour","rumple","run","rupture","rush","rust","rustle","sabotage","sack","sacrifice","sadden","saddle","safeguard","sag","sail","salaam","salivate","sally","salt","salute","salvage","salve","sample","sanctify","sanction","sand","sandbag","sandblast","sandpaper","sandwich","sanitise","sanitize","sap","sashay","sass","sate","satiate","satirise","satirize","satisfy","saturate","saunter","savage","save","savor","savour","saw","say","scald","scale","scallop","scalp","scamper","scan","scandalise","scandalize","scapegoat","scar","scare","scarf","scarify","scarper","scatter","scattering","scavenge","scent","schedule","schematise","schematize","scheme","schlep","schlepp","schmooze","school","schtup","schuss","scoff","scold","scoop","scoot","scope","scorch","score","scorn","scotch","scour","scourge","scout","scowl","scrabble","scram","scramble","scrap","scrape","scratch","scrawl","scream","screech","screen","screw","scribble","scrimp","script","scroll","scrounge","scrub","scrummage","scrunch","scruple","scrutinise","scrutinize","scud","scuff","scuffle","scull","sculpt","scupper","scurry","scuttle","scythe","seal","sealift","sear","search","season","seat","secede","seclude","second","secrete","section","secularise","secularize","secure","sedate","seduce","see","seed","seek","seep","seethe","segment","segregate","segue","seize","select","sell","sellotape","semaphore","send","sensationalise","sensationalize","sense","sensitise","sensitize","sentence","sentimentalise","sentimentalize","separate","sequence","sequester","sequestrate","serenade","serialise","serialize","sermonise","sermonize","serve","service","set","settle","sever","sew","sex","sexualise","sexualize","shack","shackle","shade","shadow","shaft","shag","shake","shalt","sham","shamble","shame","shampoo","shanghai","shape","share","sharpen","shatter","shave","shear","sheathe","shed","sheer","shell","shellac","shelter","shelve","shepherd","shield","shift","shimmer","shimmy","shin","shine","shinny","ship","shipwreck","shirk","shit","shiver","shock","shoe","shoehorn","shoo","shoot","shop","shoplift","shore","short","shorten","shortlist","shoulder","shout","shove","shovel","show","showboat","showcase","shower","shred","shriek","shrill","shrink","shrivel","shroom","shroud","shrug","shtup","shuck","shudder","shuffle","shun","shunt","shush","shut","shuttle","shy","sic","sick","sicken","side","sideline","sidestep","sideswipe","sidetrack","sidle","sieve","sift","sigh","sight","sightsee","sign","signal","signify","signpost","silence","silhouette","silt","silver","simmer","simper","simplify","simulate","simulcast","sin","sing","singe","single","sink","sip","siphon","sire","sit","site","situate","size","sizzle","skate","skateboard","skedaddle","sketch","skew","skewer","ski","skid","skim","skimp","skin","skip","skipper","skirmish","skirt","skitter","skive","skivvy","skulk","sky","skyjack","skyrocket","slack","slacken","slag","slake","slam","slander","slant","slap","slash","slate","slather","slaughter","slave","slaver","slay","sledge","sleek","sleep","sleepwalk","sleet","slew","slice","slick","slide","slight","slim","sling","slink","slip","slit","slither","slob","slobber","slog","slop","slope","slosh","slot","slouch","slough","slow","slug","sluice","slum","slumber","slump","slur","slurp","smack","smart","smarten","smash","smear","smell","smelt","smile","smirk","smite","smoke","smooch","smoodge","smooth","smother","smoulder","smudge","smuggle","snack","snaffle","snag","snaggle","snake","snap","snare","snarf","snarl","snatch","sneak","sneer","sneeze","snicker","sniff","sniffle","snigger","snip","snipe","snitch","snivel","snog","snooker","snoop","snooper","snooze","snore","snorkel","snort","snow","snowball","snowplough","snowplow","snub","snuff","snuffle","snuffling","snuggle","soak","soap","soar","sob","sober","socialise","socialize","sock","sod","sodomise","sodomize","soften","soil","sojourn","solace","solder","soldier","sole","solemnise","solemnize","solicit","solidify","soliloquize","solve","somersault","soothe","sorrow","sort","sough","sound","soundproof","soup","sour","source","souse","sow","space","span","spangle","spank","spar","spare","spark","sparkle","spatter","spattering","spawn","spay","speak","spear","spearhead","spec","specialise","specialize","specify","spectacles","spectate","speculate","speed","spell","spellcheck","spend","spew","spice","spiff","spike","spill","spin","spiral","spirit","spit","spite","splash","splatter","splay","splice","splinter","split","splosh","splurge","splutter","spoil","sponge","sponsor","spoof","spook","spool","spoon","sport","sports","spot","spotlight","spout","sprain","sprawl","spray","spread","spreadeagle","spring","springboard","sprinkle","sprint","spritz","sprout","spruce","spur","spurn","spurt","sputter","spy","squabble","squall","squander","square","squash","squat","squawk","squeak","squeal","squeeze","squelch","squint","squirm","squirrel","squirt","squish","stab","stabilise","stabilize","stable","stables","stack","staff","stage","stagger","stagnate","stain","stake","stalk","stall","stammer","stamp","stampede","stanch","stand","standardise","standardize","staple","star","starch","stare","start","startle","starve","stash","state","statement","station","staunch","stave","stay","steady","steal","steam","steamroller","steel","steep","steepen","steer","stem","stencil","step","stereotype","sterilise","sterilize","stew","stick","stickybeak","stiff","stiffen","stifle","stigmatise","stigmatize","still","stimulate","sting","stinger","stink","stint","stipple","stipulate","stir","stitch","stock","stockpile","stoke","stomach","stomp","stone","stonewall","stoop","stop","stopper","store","storm","storyboard","stow","straddle","strafe","straggle","straighten","strain","strand","strangle","strap","stratify","stravage","stravaig","stray","streak","stream","streamline","strengthen","stress","stretch","stretcher","strew","stride","strike","string","strip","strive","stroke","stroll","structure","struggle","strum","strut","stub","stud","study","stuff","stultify","stumble","stump","stun","stunt","stupefy","stutter","style","stymie","sub","subcontract","subdivide","subdue","subedit","subject","subjugate","sublet","sublimate","submerge","submit","subordinate","suborn","subpoena","subscribe","subside","subsidise","subsidize","subsist","substantiate","substitute","subsume","subtend","subtitle","subtract","subvert","succeed","succor","succour","succumb","suck","sucker","suckle","suction","sue","suffer","suffice","suffocate","suffuse","sugar","suggest","suit","sulk","sulks","sully","sum","summarise","summarize","summon","summons","sun","sunbathe","sunder","sunset","sup","superimpose","superintend","superpose","supersede","supersize","supersized","supervene","supervise","supplant","supplement","supply","support","suppose","suppress","suppurate","surcharge","surf","surface","surge","surmise","surmount","surpass","surprise","surrender","surround","survey","survive","suspect","suspend","suspenders","suss","sustain","suture","swab","swaddle","swagger","swallow","swamp","swan","swank","swap","swarm","swat","swath","swathe","sway","swear","sweat","sweep","sweeps","sweeten","swell","swelter","swerve","swig","swill","swim","swindle","swing","swipe","swirl","swish","switch","swivel","swoon","swoop","swoosh","swot","symbolise","symbolize","sympathise","sympathize","symptomize","synchronise","synchronize","syndicate","synthesise","synthesize","syringe","systematise","systematize","tab","table","tabulate","tack","tackle","tag","tail","tailgate","tailor","taint","take","talk","tally","tame","tamp","tamper","tan","tangle","tango","tank","tankful","tantalise","tantalize","tap","tape","taper","tar","target","tarmac","tarnish","tarry","tart","task","taste","tattle","tattoo","taunt","tauten","tax","taxi","taxicab","teach","team","tear","tease","tee","teem","teeter","teethe","telecast","telecommute","teleconference","telegraph","telemeter","teleoperate","telephone","teleport","telescope","televise","telex","tell","telnet","temp","temper","temporise","temporize","tempt","tenant","tend","tender","tenderise","tenderize","tense","tension","tergiversate","term","terminate","terraform","terrify","terrorise","terrorize","test","testify","tether","text","thank","thatch","thaw","theorise","theorize","thicken","thin","think","thirst","thrash","thread","threaten","thresh","thrill","thrive","throb","throbbing","throng","throttle","throw","thrust","thud","thumb","thump","thunder","thwack","thwart","tick","ticket","tickle","tide","tidy","tie","tighten","tile","till","tilt","time","timetable","tinge","tingle","tingling","tinker","tinkle","tinkling","tint","tip","tippex","tipple","tiptoe","tire","titillate","titivate","title","titrate","titter","toady","toast","toboggan","toddle","toe","tog","toggle","toil","toke","tolerate","toll","tone","tongue","tonify","tool","toot","tootle","top","topple","torch","torment","torpedo","torture","toss","tot","total","tote","totter","touch","tough","toughen","tour","tousle","tout","tow","towel","tower","toy","trace","track","trade","traduce","traffic","trail","train","traipse","trammel","tramp","trample","trampoline","tranquilize","tranquillize","transact","transcend","transcribe","transfer","transfigure","transfix","transform","transfuse","transgress","transit","translate","transliterate","transmit","transmogrify","transmute","transpire","transplant","transport","transpose","trap","trash","traumatise","traumatize","travel","traverse","trawl","tread","treasure","treat","treble","trek","tremble","trembling","trepan","trespass","trial","trick","trickle","trifle","trigger","trill","trim","trip","triple","triumph","trivialise","trivialize","troll","tromp","troop","trot","trouble","troubleshoot","trounce","trouser","truant","truck","trudge","trump","trumpet","truncate","trundle","truss","trust","try","tuck","tug","tugboat","tumble","tune","tunnel","turbocharge","turf","turn","tussle","tut","tutor","twang","tweak","tweet","twiddle","twig","twin","twine","twinkle","twirl","twist","twitch","twitter","twittering","type","typecast","typeset","typify","tyrannise","tyrannize","ulcerate","ululate","ump","umpire","unbalance","unban","unbend","unblock","unbuckle","unburden","unbutton","uncoil","uncork","uncouple","uncover","uncurl","undelete","underachieve","underbid","undercharge","undercook","undercut","underestimate","underestimation","underexpose","undergo","underlie","underline","undermine","underpay","underperform","underpin","underplay","underrate","underscore","undersell","undershoot","underspend","understand","understate","understudy","undertake","undervalue","underwrite","undo","undock","undress","undulate","unearth","unfasten","unfold","unfreeze","unfurl","unhand","unhinge","unhitch","unhook","unify","uninstall","unionise","unionize","unite","unlace","unlearn","unleash","unload","unlock","unloose","unloosen","unmask","unnerve","unpack","unpick","unplug","unravel","unroll","unsaddle","unscramble","unscrew","unseat","unsettle","unsubscribe","untangle","untie","unveil","unwind","unwrap","unzip","up","upbraid","upchange","upchuck","update","upend","upgrade","uphold","upholster","uplift","upload","uproot","upsell","upset","upshift","upskill","upstage","urge","urinate","use","usher","usurp","utilise","utilize","utter","vacate","vacation","vaccinate","vacillate","vacuum","valet","validate","value","vamoose","vandalise","vandalize","vanish","vanquish","vaporise","vaporize","varnish","vary","vault","veer","veg","vegetate","veil","vend","veneer","venerate","vent","ventilate","venture","verbalise","verbalize","verge","verify","versify","vest","vet","veto","vex","vibrate","victimise","victimize","vide","video","videotape","vie","view","viewing","vilify","vindicate","violate","visit","visualise","visualize","vitiate","vitrify","vocalize","voice","void","volley","volumise","volumize","volunteer","vomit","vote","vouch","vouchsafe","vow","voyage","vulgarise","vulgarize","wad","waddle","wade","waffle","waft","wag","wage","wager","waggle","wail","wait","waive","wake","wakeboard","waken","walk","wall","wallop","wallow","wallpaper","waltz","wander","wane","wangle","wank","want","warble","ward","warm","warn","warp","warrant","wash","wassail","waste","watch","water","waterproof","waterski","wave","waver","wax","waylay","weaken","wean","weaponise","weaponize","wear","weary","weasel","weather","weatherise","weatherize","weave","wed","wedge","wee","weed","weekend","weep","weigh","weight","weird","welch","welcome","weld","well","welly","welsh","wend","westernise","westernize","wet","whack","wheedle","wheel","wheeze","whelp","whet","whiff","while","whilst","whimper","whine","whinge","whinny","whip","whirl","whirr","whirring","whisk","whisper","whispering","whistle","whiten","whitewash","whittle","whiz","whizz","whoop","whoosh","whup","wick","widen","widow","wield","wig","wiggle","wildcat","will","wilt","wimp","win","wince","winch","wind","winds","windsurf","wine","wing","wink","winkle","winnow","winter","wipe","wire","wiretap","wise","wisecrack","wish","withdraw","wither","withhold","withstand","witness","witter","wobble","wolf","wonder","woo","woof","word","work","worm","worry","worsen","worship","worst","wound","wow","wowee","wrangle","wrap","wreak","wreathe","wreck","wrench","wrest","wrestle","wriggle","wring","wrinkle","writ","write","writhe","wrong","wrought","xerox","yack","yak","yank","yap","yaw","yawn","yearn","yell","yellow","yelp","yield","yodel","yoke","yomp","yowl","yuppify","zap","zero","zigzag","zing","zip","zone","zoom"];var kc=Object.freeze({adjective:sn,adverb:an,conjunction:nn,interjection:on,noun:ln,preposition:cn,verb:dn}),pn=kc;var wc=Object.freeze({title:"English",syntax:Ga,time:Ba,internet:Ya,person:rn,word:pn}),se=wc;var et=["male","female"],me=Symbol("randomValue"),$r=Symbol("typesValue"),ze=Symbol("localeValue"),Ei=class{[$r];[me];[ze];constructor(e={}){this[$r]=new De(e.seed),this[me]=new $t(e.seed),this[ze]=e.locale||se}seed(e){this[me].seed(e),this[$r].seed(e)}locale(e){this[ze]=e||se}firstName(e){let{person:t}=this[ze],r=e&&et.includes(e)?e:this[me].pickOne(et),i;t&&t.firstName&&t.firstName[r]?i=t.firstName:i=se.person.firstName;let s=i[r];return this[me].pickOne(s)}lastName(e){let{person:t}=this[ze];if(!e){let a=t&&t.lastName||se.person.lastName;if(Array.isArray(a.general)&&a.general.length)return this[me].pickOne(a.general);throw new Error("The locale does not have a general last name pool.")}let r=e&&et.includes(e)?e:this[me].pickOne(et),i;t&&t.lastName&&t.lastName[r]?i=t.lastName:i=se.person.lastName;let s=i[r];return this[me].pickOne(s)}middleName(e){let{person:t}=this[ze],r=t&&t.middleName||t&&t.firstName||se.person.firstName,i=e&&et.includes(e)?e:this[me].pickOne(et),s=r[i];return this[me].pickOne(s)}name(e={}){let{firstName:t,lastName:r,gender:i}=e,s=[];return this[$r].boolean({likelihood:10})&&s.push(this.prefix(i)),s.push(t||this.firstName(i)),s.push(r||this.lastName(i)),this[$r].boolean({likelihood:10})&&s.push(this.suffix(i)),s.join(" ")}gender(e){let{person:t}=this[ze],r=t&&t.gender||se.person.gender;return e?this[me].pickOne(r.binary||se.person.gender.binary):this[me].pickOne(r.pool||se.person.gender.pool)}prefix(e){let{person:t}=this[ze],r=t&&t.prefix||se.person.prefix;if(!e&&Array.isArray(r.general)&&r.general.length)return this[me].pickOne(r.general);let i=e&&et.includes(e)?e:this[me].pickOne(et),s=r[i]||se.person.prefix[i];return this[me].pickOne(s)}suffix(e){let{person:t}=this[ze],r=t&&t.suffix||se.person.suffix;if(Array.isArray(r.general)&&r.general.length)return this[me].pickOne(r.general);let i=e&&et.includes(e)?e:this[me].pickOne(et),s=r[i]||se.person.suffix[i];return this[me].pickOne(s)}jobTitle(){let e=this.jobDescriptor(),t=this.jobArea(),r=this.jobType();return`${e} ${t} ${r}`}jobDescriptor(){let{person:e}=this[ze],t;return e&&e.title&&e.title.descriptor?t=e.title:t=se.person.title,this[me].pickOne(t.descriptor)}jobArea(){let{person:e}=this[ze],t;return e&&e.title&&e.title.level?t=e.title:t=se.person.title,this[me].pickOne(t.level)}jobType(){let{person:e}=this[ze],t;return e&&e.title&&e.title.job?t=e.title:t=se.person.title,this[me].pickOne(t.job||[])}};var Ni=Symbol("randomValue"),Ue=Symbol("typesValue"),$i=Symbol("localeValue"),ji=class{[Ue];[Ni];[$i];constructor(e={}){this[Ue]=new De(e.seed),this[Ni]=new $t(e.seed),this[$i]=e.locale||se}seed(e){this[Ni].seed(e),this[Ue].seed(e)}locale(e){this[$i]=e||se}word(e={}){let t={...e};if(typeof t.syllables=="number"&&typeof t.length=="number")throw new RangeError('Cannot specify both "syllables" and "length".');let r="";if(typeof t.length=="number"){do r+=this.syllable();while(r.length<t.length);r=r.substring(0,t.length)}else{let i=t.syllables||this[Ue].number({min:1,max:3});for(let s=0;s<i;s++)r+=this.syllable()}return t.capitalize&&(r=this.capitalize(r)),r}capitalize(e){return e.charAt(0).toUpperCase()+e.substr(1)}words(e=3){return new Array(e).fill("").map(()=>this.word()).join(" ")}sentence(e={}){let t={...e},{words:r=this[Ue].number({min:12,max:18})}=t,i=new Array(r).fill("").map(()=>this.word()).join(" ");i=this.capitalize(i);let{punctuation:s}=t;return s!==!1&&!/^[.?;!:]$/.test(String(s))&&(s="."),s&&(i+=s),i}sentences(e={}){let t={};typeof e=="number"?t.size=e:t={...e};let{size:r=this[Ue].number({min:2,max:6})}=t;return new Array(r).fill("").map(()=>this.sentence()).join(" ")}slug(e){let t=this.words(e);return Va(t)}paragraph(e={}){let t={};typeof e=="number"?t.sentences=e:t={...e};let{lineBreak:r,sentences:i=this[Ue].number({min:3,max:7})}=t;return new Array(i).fill("").map(()=>this.sentence()).join(r===!0?`\r
|
|
35
|
-
`:" ")}paragraphs(e={}){let t={};typeof e=="number"?t.size=e:t={...e};let{separator:
|
|
36
|
-
`,size:i=this[Ue].number({min:1,max:7})}=t;return new Array(i).fill("").map(()=>this.paragraph()).join(r)}syllable(e={}){let{syntax:t}=this[$i],r={...e},i=r.length||this[Ue].number({min:2,max:3}),s=t&&t.consonants||se.syntax.consonants,a=t&&t.vowels||se.syntax.vowels,n=s+a,l="",c;for(let p=0;p<i;p++)p===0?c=this[Ue].character({pool:n}):c&&a.includes(c)?c=this[Ue].character({pool:s}):c=this[Ue].character({pool:a}),l+=c;return r.capitalize&&(l=this.capitalize(l)),l}lorem(){let e=["word","words","sentence","sentences","paragraph","paragraphs"],t=this[Ni].pickOne(e);return this[t]()}};var Ve=Symbol("typesValue"),jr=Symbol("localeValue"),Tt=class{[Ve];[jr];constructor(e={}){this[Ve]=new De(e.seed),this[jr]=e.locale||se}seed(e){this[Ve].seed(e)}locale(e){this[jr]=e||se}date(e){return this[Ve].datetime(e)}amPm(){return this[Ve].boolean()?"am":"pm"}timestamp(e){return this[Ve].datetime(e).getTime()}hour(e={}){let t={...e};if(typeof t.min!="number"&&(t.min=t.twentyFour?0:1),typeof t.max!="number"&&(t.max=t.twentyFour?23:12),t.min<0)throw new RangeError(`Provided value ${t.min} for min is less than 0.`);if(t.max>23&&t.twentyFour||t.max>12&&!t.twentyFour)throw new RangeError(`Provided value ${t.max} for max is greater than ${t.twentyFour?23:12}.`);if(t.min>t.max)throw new RangeError(`The min value (${t.min}) cannot be greater than max value (${t.max}).`);return this[Ve].number({min:t.min,max:t.max})}minute(e={}){let{min:t=0,max:r=59}=e;if(t<0)throw new RangeError(`Provided value ${t} for min is less than 0.`);if(r>59)throw new RangeError(`Provided value ${r} for max is greater than 59.`);if(t>r)throw new RangeError(`The min value (${t}) cannot be greater than max value (${r}).`);return this[Ve].number({min:t,max:r})}millisecond(){return this[Ve].number({max:999})}second(){return this[Ve].number({max:59})}month(e={}){let{min:t=1,max:r=12}=e;if(t<1)throw new RangeError(`Provided value ${t} for min is less than 1.`);if(r>12)throw new RangeError(`Provided value ${r} for max is greater than 12.`);if(t>r)throw new RangeError(`The min value (${t}) cannot be greater than max value (${r}).`);return this[Ve].number({min:t,max:r})}monthName(e={}){let t=this.month(e);return this.months(e.abbr)[t-1]}months(e=!1){let{time:t}=this[jr],r;return t&&t.month&&t.month.abbr&&t.month.abbr.length>0?r=t.month:r=se.time.month,e?r.abbr:r.names}weekdays(e=!1){let{time:t}=this[jr],r;return t&&t.weekday&&t.weekday.abbr&&t.weekday.abbr.length>0?r=t.weekday:r=se.time.weekday,e?r.abbr:r.names}weekday(e={}){let{min:t=1,max:r=7}=e;if(t<1)throw new RangeError(`Provided value ${t} for min is less than 1.`);if(r>7)throw new RangeError(`Provided value ${r} for max is greater than 7.`);if(t>r)throw new RangeError(`The min value (${t}) cannot be greater than max value (${r}).`);return this[Ve].number({min:t,max:r})}weekdayName(e={}){let t=this.weekday(e);return this.weekdays(e.abbr)[t-1]}midnight(e=Date.now()){let t=new Date(e);return t.setHours(0,0,0,0),t.getTime()}dateOnly(e){let t=this.date(e),r=t.getFullYear(),i=(t.getMonth()+1).toString().padStart(2,"0"),s=t.getDate().toString().padStart(2,"0");return`${r}-${i}-${s}`}timeOnly(e){let t=this.date(e),r=t.getHours().toString().padStart(2,"0"),i=t.getMinutes().toString().padStart(2,"0"),s=t.getSeconds().toString().padStart(2,"0");return`${r}:${i}:${s}`}dateTime(e="rfc3339",t){let r=this.date(t);if(e==="rfc2616")return r.toUTCString();if(e==="rfc3339"){let i=r.getUTCFullYear(),s=(r.getUTCMonth()+1).toString().padStart(2,"0"),a=r.getUTCDate().toString().padStart(2,"0"),n=r.getUTCHours().toString().padStart(2,"0"),l=r.getUTCMinutes().toString().padStart(2,"0"),c=r.getUTCSeconds().toString().padStart(2,"0"),p=r.getUTCMilliseconds().toString().padStart(3,"0");return`${i}-${s}-${a}T${n}:${l}:${c}.${p}Z`}return""}dateTimeOnly(e){let t=this.date(e),r=t.getFullYear(),i=(t.getMonth()+1).toString().padStart(2,"0"),s=t.getDate().toString().padStart(2,"0"),a=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0"),l=t.getSeconds().toString().padStart(2,"0");return`${r}-${i}-${s}T${a}:${n}:${l}`}};var I;(function(o){o[o.ROOT=0]="ROOT",o[o.GROUP=1]="GROUP",o[o.POSITION=2]="POSITION",o[o.SET=3]="SET",o[o.RANGE=4]="RANGE",o[o.REPETITION=5]="REPETITION",o[o.REFERENCE=6]="REFERENCE",o[o.CHAR=7]="CHAR"})(I||(I={}));var vc=()=>({type:I.POSITION,value:"b"}),_c=()=>({type:I.POSITION,value:"B"}),Sc=()=>({type:I.POSITION,value:"^"}),Ac=()=>({type:I.POSITION,value:"$"}),Gs=()=>[{type:I.RANGE,from:48,to:57}],un=()=>[{type:I.CHAR,value:95},{type:I.RANGE,from:97,to:122},{type:I.RANGE,from:65,to:90},...Gs()],hn=()=>[{type:I.CHAR,value:9},{type:I.CHAR,value:10},{type:I.CHAR,value:11},{type:I.CHAR,value:12},{type:I.CHAR,value:13},{type:I.CHAR,value:32},{type:I.CHAR,value:160},{type:I.CHAR,value:5760},{type:I.CHAR,value:6158},{type:I.CHAR,value:8192},{type:I.CHAR,value:8193},{type:I.CHAR,value:8194},{type:I.CHAR,value:8195},{type:I.CHAR,value:8196},{type:I.CHAR,value:8197},{type:I.CHAR,value:8198},{type:I.CHAR,value:8199},{type:I.CHAR,value:8200},{type:I.CHAR,value:8201},{type:I.CHAR,value:8202},{type:I.CHAR,value:8232},{type:I.CHAR,value:8233},{type:I.CHAR,value:8239},{type:I.CHAR,value:8287},{type:I.CHAR,value:12288},{type:I.CHAR,value:65279}],xc=()=>[{type:I.CHAR,value:10},{type:I.CHAR,value:13},{type:I.CHAR,value:8232},{type:I.CHAR,value:8233}],mn=()=>({type:I.SET,set:un(),not:!1}),fn=()=>({type:I.SET,set:un(),not:!0}),gn=()=>({type:I.SET,set:Gs(),not:!1}),yn=()=>({type:I.SET,set:Gs(),not:!0}),bn=()=>({type:I.SET,set:hn(),not:!1}),kn=()=>({type:I.SET,set:hn(),not:!0}),Ec=()=>({type:I.SET,set:xc(),not:!0}),Nc={0:0,t:9,n:10,v:11,f:12,r:13},$c=o=>{let e=/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\]^?])|([0tnvfr]))/g;return o.replace(e,(t,r,i,s,a,n,l,c)=>{if(i)return t;let p=r?8:s?parseInt(s,16):a?parseInt(a,16):n?parseInt(n,8):l?"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?".indexOf(l):Nc[c],u=String.fromCharCode(p);return/[[{}^$.|?*+()]/.test(u)&&(u=`\\${u}`),u})},jc=(o,e)=>{let t=[],r=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g,i,s;for(;(i=r.exec(o))!==null;)if(i[1])t.push(mn());else if(i[2])t.push(gn());else if(i[3])t.push(bn());else if(i[4])t.push(fn());else if(i[5])t.push(yn());else if(i[6])t.push(kn());else if(i[7])t.push({type:I.RANGE,from:(i[8]||i[9]).charCodeAt(0),to:i[10].charCodeAt(0)});else if(s=i[12])t.push({type:I.CHAR,value:s.charCodeAt(0)});else return[t,r.lastIndex];throw new SyntaxError(`Invalid regular expression: /${e}/: Unterminated character class`)},Ii=(o,e)=>{throw new SyntaxError(`Invalid regular expression: /${o}/: ${e}`)},wn=o=>{let e=0,t={type:I.ROOT,stack:[]},r=t,i=t.stack,s=[],a=l=>Ii(o,`Nothing to repeat at column ${l-1}`),n=$c(o);for(;e<n.length;){let l=n[e++];switch(l){case"\\":switch(l=n[e++],l){case"b":i.push(vc());break;case"B":i.push(_c());break;case"w":i.push(mn());break;case"W":i.push(fn());break;case"d":i.push(gn());break;case"D":i.push(yn());break;case"s":i.push(bn());break;case"S":i.push(kn());break;default:/\d/.test(l)?i.push({type:I.REFERENCE,value:parseInt(l,10)}):i.push({type:I.CHAR,value:l.charCodeAt(0)})}break;case"^":i.push(Sc());break;case"$":i.push(Ac());break;case"[":{let c=!1;n[e]==="^"&&(c=!0,e++);let[p,u]=jc(n.slice(e),o);e+=u,i.push({type:I.SET,set:p,not:c});break}case".":i.push(Ec());break;case"(":{let c={type:I.GROUP,stack:[],remember:!0};n[e]==="?"&&(l=n[e+1],e+=2,l==="="?c.followedBy=!0:l==="!"?c.notFollowedBy=!0:l!==":"&&Ii(o,`Invalid group, character '${l}' after '?' at column ${e-1}`),c.remember=!1),i.push(c),s.push(r),r=c,i=c.stack;break}case")":s.length===0&&Ii(o,`Unmatched ) at column ${e-1}`),r=s.pop(),i=r.options?r.options[r.options.length-1]:r.stack;break;case"|":r.options||(r.options=[r.stack],delete r.stack);{let c=[];r.options.push(c),i=c}break;case"{":{let c=/^(\d+)(,(\d+)?)?\}/.exec(n.slice(e));if(c){i.length===0&&a(e);let p=parseInt(c[1],10),u=c[2]?c[3]?parseInt(c[3],10):1/0:p;e+=c[0].length,i.push({type:I.REPETITION,min:p,max:u,value:i.pop()})}else i.push({type:I.CHAR,value:123});break}case"?":i.length===0&&a(e),i.push({type:I.REPETITION,min:0,max:1,value:i.pop()});break;case"+":i.length===0&&a(e),i.push({type:I.REPETITION,min:1,max:1/0,value:i.pop()});break;case"*":i.length===0&&a(e),i.push({type:I.REPETITION,min:0,max:1/0,value:i.pop()});break;default:i.push({type:I.CHAR,value:l.charCodeAt(0)})}}return s.length!==0&&Ii(o,"Unterminated group"),t};var Ir=class o{types;constructor(e={}){this.types=new De(e.seed)}seed(e){this.types.seed(e)}fromPattern(e,t={}){let r,i;e instanceof globalThis.RegExp?(i=e.ignoreCase,r=e.source):(i=t.flags?.includes("i")??!1,r=e);let s=10;typeof t.max=="number"&&(s=t.max);let a=wn(r),n=Array.from({length:95},(l,c)=>c+32);return this._gen(a,[],i,n,s)}_gen(e,t,r,i,s){let a,n,l,c;switch(e.type){case I.ROOT:case I.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&e.groupNumber===void 0&&(e.groupNumber=t.push(null)-1),a=e.options?this._choice(e.options):e.stack,n="",l=0,c=a.length;l<c;l++)n+=this._gen(a[l],t,r,i,s);return e.remember&&(t[e.groupNumber]=n),n;case I.POSITION:return"";case I.SET:{let p=this._processSet(e,r,i);return p.length?String.fromCharCode(this._choice(p)):""}case I.REPETITION:{let p=e.max===1/0?Math.max(e.min,s):e.max,u=this.types.number({min:e.min,max:p});for(n="",l=0;l<u;l++)n+=this._gen(e.value,t,r,i,s);return n}case I.REFERENCE:return t[e.value-1]||"";case I.CHAR:{let p=r&&this._coin()?o._toCaseInverse(e.value):e.value;return String.fromCharCode(p)}}return""}_processSet(e,t,r){if(e.type===I.CHAR)return[e.value];if(e.type===I.RANGE){let s=[];for(let a=e.from;a<=e.to;a++)s.push(a);return s}let i=new Set;for(let s of e.set){let a=this._processSet(s,t,r);if(a.forEach(n=>i.add(n)),t)for(let n of a){let l=n,c=o._toCaseInverse(l);l!==c&&i.add(c)}}return e.not?r.filter(s=>!i.has(s)):Array.from(i)}static _toCaseInverse(e){return e>=97&&e<=122?e-32:e>=65&&e<=90?e+32:e}_coin(){return this.types.number({min:0,max:1})===0}_choice(e){return e[this.types.number({min:0,max:e.length-1})]}};var jt=class o{static types=new De;static person=new Ei;static lorem=new ji;static regExp=new Ir;static readInputValue(e,t,r={}){let{required:i}=e,{defaultValueStr:s,values:a}=t;if(!(!i&&r.requiredOnly===!0)){if(s)return o.readTypedValue(s,t.dataType);if(Array.isArray(a)&&a.length){let n=a[0];return o.readTypedValue(n.value,n.dataType)}if(r.fromExamples){let n;if(Array.isArray(e.examples)&&e.examples.length?n=e.examples.filter(l=>typeof l!="string"):Array.isArray(t.examples)&&t.examples.length&&(n=t.examples),n&&n.length)return o.inputValueFromExamples(n)}return o.generateDefaultValue(t)}}static readInputValues(e,t,r={}){if(!e.required&&r.requiredOnly===!0)return[];let{defaultValue:i}=t;if(i){let n=new Ie().processNode(i);if(Array.isArray(n))return n}let s=t;if(r.fromExamples){let a;return Array.isArray(e.examples)&&e.examples.length?a=e.examples.filter(n=>typeof n!="string"):Array.isArray(s.examples)&&s.examples.length&&(a=s.examples),o.arrayValuesFromExamples(a)}return[]}static inputValueFromExamples(e){if(!Array.isArray(e)||!e.length)return;let[t]=e,{structuredValue:r}=t;if(r&&r.types.includes(d.aml.vocabularies.data.Scalar)){let i=r;return o.readTypedValue(i.value,i.dataType)}}static arrayValuesFromExamples(e){let t=[];if(!Array.isArray(e)||!e.length)return t;let[r]=e;if(!r.structuredValue||!r.structuredValue.types.includes(d.aml.vocabularies.data.Array))return t;let i=r.structuredValue,{members:s}=i;return!Array.isArray(s)||!s.length||s.forEach(a=>{let n=a;if(!n.value)return;let l=o.readTypedValue(n.value,n.dataType);typeof i<"u"&&i!==null&&t.push(l)}),t}static generateDefaultValue(e){let{dataType:t}=e;return this.defaultValue(t)}static generateMockedValue(e){let{dataType:t}=e;switch(t){case d.w3.xmlSchema.string:case d.aml.vocabularies.shapes.password:return this.generateStringValue(e);case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:return this.generateNumberValue(e);case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return this.types.boolean();case d.aml.vocabularies.shapes.nil:case d.w3.xmlSchema.nil:return null;case d.w3.xmlSchema.date:return new Tt().dateOnly();case d.w3.xmlSchema.dateTime:return new Tt().dateTime(e.format==="date-time"?"rfc3339":e.format);case d.aml.vocabularies.shapes.dateTimeOnly:return new Tt().dateTimeOnly();case d.w3.xmlSchema.time:return new Tt().timeOnly();default:return}}static defaultValue(e){switch(e){case d.w3.xmlSchema.string:case d.aml.vocabularies.shapes.password:return"";case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:return 0;case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return!1;case d.aml.vocabularies.shapes.nil:case d.w3.xmlSchema.nil:return null;case d.w3.xmlSchema.date:return"";case d.w3.xmlSchema.dateTime:return"";case d.aml.vocabularies.shapes.dateTimeOnly:return"";case d.w3.xmlSchema.time:return"";default:return}}static generateNumberValue(e){let{minimum:t,maximum:r,format:i,multipleOf:s}=e,a={};typeof t=="number"&&(a.min=t),typeof r=="number"&&(a.max=r);let n;return i&&["float","double"].includes(i)?n=this.types.float.bind(this.types):i&&["uint32","uint64","fixed32","fixed64"].includes(i)&&(a.min=0,a.max&&a.max<0&&delete a.max),n||(n=this.types.number.bind(this.types)),typeof s=="number"&&(a.precision=s),n(a)}static generateStringValue(e){let{minLength:t,maxLength:r,name:i="",format:s,pattern:a}=e;if(a)return new Ir().fromPattern(a,{max:10});let n=i.toLowerCase();if(n==="description")return this.lorem.paragraph();if(s==="uuid")return this.types.uuid();if(n==="id"){let p={length:12},u=typeof t=="number";return u?p.length=t:!u&&typeof r=="number"&&(p.length=r),this.types.hash(p)}if(["name","fullname"].includes(n))return this.person.name();if(n==="firstname")return this.person.firstName();if(n==="lastname")return this.person.lastName();let l={},c=typeof t=="number";return c?l.length=t:!c&&typeof r=="number"&&(l.length=r),this.lorem.word(l)}static readTypedValue(e,t){return bi(e,t)}static readInputType(e){switch(e){case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:return"number";case d.w3.xmlSchema.date:return"date";case d.w3.xmlSchema.time:return"time";case d.w3.xmlSchema.dateTime:case d.aml.vocabularies.shapes.dateTimeOnly:return"datetime-local";case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return"boolean";case d.aml.vocabularies.shapes.password:return"password";default:return"text"}}static parseNumberInput(e,t){return Ns(e,t)}static parseBooleanInput(e,t){return $s(e,t)}static parseDateOnlyInput(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return;let r=t.toJSON(),i=r.indexOf("T");return r.substring(0,i)}static parseTimeOnlyInput(e){let t=String(e).trim();if(/^\d\d:\d\d$/.test(t))return`${t}:00`;if(/^\d\d:\d\d:\d\d$/.test(t))return t}static parseDateTimeInput(e,t="rfc3339"){let r=new Date(e);if(!Number.isNaN(r.getTime())){if(t==="rfc2616")return r.toUTCString();if(["rfc3339","date-time"].includes(t))return r.toISOString()}}static parseDateTimeOnlyInput(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return;let r=t.toJSON(),i=r.indexOf(".");return r.substring(0,i)}static parseArrayInput(e,t){let{items:r}=t;return r?o.parseUserInput(e,r):String(e)}static parseUserInput(e,t){if(!t||e===void 0||e===null)return e;let{types:r}=t;return r.includes(d.aml.vocabularies.shapes.ScalarShape)?o.parseScalarInput(e,t):r.includes(d.aml.vocabularies.shapes.ArrayShape)||r.includes(d.aml.vocabularies.shapes.MatrixShape)?o.parseArrayInput(e,t):e}static parseScalarInput(e,t){return this.parseScalar(e,t.dataType,t.format)}static parseScalar(e,t,r){switch(t){case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:return o.parseNumberInput(e);case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return o.parseBooleanInput(e);case d.w3.xmlSchema.date:return o.parseDateOnlyInput(e);case d.w3.xmlSchema.time:return o.parseTimeOnlyInput(e);case d.w3.xmlSchema.dateTime:return o.parseDateTimeInput(e,r);case d.aml.vocabularies.shapes.dateTimeOnly:return o.parseDateTimeOnlyInput(e);default:return String(e)}}};var Dt=class{opts;constructor(e={}){this.opts=Object.freeze({...e})}_scalarValue(e){let{defaultValue:t,examples:r,values:i,inherits:s,dataType:a}=e;if(this.opts.renderExamples&&r&&r.length){let n=r.find(c=>!!c.structuredValue),l=this._exampleToObject(n);if(typeof l<"u")return jt.readTypedValue(l,a)}if(t)return new Ie().processNode(t);if(i&&i.length){let n=i[0];if(n.value!==void 0)return jt.readTypedValue(n.value,a)}if(Array.isArray(s)&&s.length)for(let n=0,l=s.length;n<l;n+=1){let c=this._scalarValue(s[n]);if(c!==void 0)return c}return this.opts.renderMocked?jt.generateMockedValue(e):jt.generateDefaultValue(e)}_isNotRequiredUnion(e){let t=0,r=!1;return e.forEach(i=>{i.types.includes(d.aml.vocabularies.shapes.NilShape)?r=!0:i.types.includes(d.aml.vocabularies.shapes.ScalarShape)?i.dataType===d.w3.xmlSchema.nil?r=!0:t+=1:i.types.includes(d.aml.vocabularies.shapes.FileShape)&&(t+=1)}),r?t===e.length-1:!1}};var Pr=class extends Dt{generate(e){let t;return e.types.includes(d.w3.shacl.PropertyShape)?t=this._propertyShapeObject(e):t=this.toObject(e),t!==null&&typeof t=="object"?this.serialize(t):t}toObject(e){let{types:t}=e;return t.includes(d.aml.vocabularies.shapes.ScalarShape)?this._scalarShapeObject(e):t.includes(d.w3.shacl.NodeShape)?this._nodeShapeObject(e):t.includes(d.aml.vocabularies.shapes.UnionShape)?this._unionShapeObject(e):t.includes(d.aml.vocabularies.shapes.FileShape)?this._fileShapeObject():t.includes(d.aml.vocabularies.shapes.SchemaShape)?this._schemaShapeObject():t.includes(d.aml.vocabularies.shapes.TupleShape)?this._tupleShapeObject(e):t.includes(d.aml.vocabularies.shapes.ArrayShape)||t.includes(d.aml.vocabularies.shapes.MatrixShape)?this._arrayShapeObject(e):this._anyShapeObject(e)}serialize(e){return JSON.stringify(e,null,2)}_scalarShapeObject(e){return this._scalarValue(e)}_nilShapeObject(){}_nodeShapeObject(e){let{inherits:t}=e,{examples:r=[]}=e;if(Array.isArray(t)&&t.length&&t.forEach(a=>{let n=a;Array.isArray(n.examples)&&n.examples.length&&(r=r.concat(n.examples))}),this.opts.renderExamples&&r.length){let a=r.find(l=>!!l.structuredValue),n=this._exampleToObject(a);if(n!==void 0)return n}let i={},{properties:s}=e;return Array.isArray(t)&&t.length&&t.forEach(a=>{let n=this.toObject(a);typeof n=="object"&&(i={...i,...n})}),s.forEach(a=>{let{name:n}=a,l=this._propertyShapeObject(a);typeof l<"u"&&n&&(i[n]=l)}),i}_unionShapeObject(e){return e.and&&e.and.length?this._allOfUnion(e):e.xone&&e.xone.length?this._oneOfUnion(e):this._anyOfUnion(e)}_anyOfUnion(e){let{anyOf:t=[],examples:r=[]}=e;Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(n=>{let l=n;Array.isArray(l.examples)&&l.examples.length&&(r=r.concat(l.examples));let c=n;Array.isArray(c.anyOf)&&c.anyOf.length&&(t=t.concat(c.anyOf))});let{opts:i}=this;if(this._isNotRequiredUnion(t))return;if(this.opts.renderExamples){let n=r.find(c=>!!c.structuredValue),l=this._exampleToObject(n);if(l!==void 0)return l}if(e.defaultValue)return this._unionDefaultValue(t,e.defaultValue);let{selectedUnions:s}=i,a;if(s&&s.length?a=t.find(n=>s.includes(n.id)):[a]=t,a)return this.toObject(a)}_oneOfUnion(e){let{examples:t=[]}=e,{xone:r=[]}=e;Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(n=>{let l=n;Array.isArray(l.examples)&&l.examples.length&&(t=t.concat(l.examples))});let{opts:i}=this;if(this.opts.renderExamples){let n=t.find(c=>!!c.structuredValue),l=this._exampleToObject(n);if(l!==void 0)return l}if(e.defaultValue)return this._unionDefaultValue(r,e.defaultValue);let{selectedUnions:s}=i,a;if(s&&s.length?a=r.find(n=>s.includes(n.id)):[a]=r,a)return this.toObject(a)}_allOfUnion(e){let{examples:t=[]}=e,{and:r=[]}=e;if(Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(s=>{let a=s;Array.isArray(a.examples)&&a.examples.length&&(t=t.concat(a.examples))}),this.opts.renderExamples){let s=t.find(n=>!!n.structuredValue),a=this._exampleToObject(s);if(a!==void 0)return a}let i={};return r.forEach(s=>{let a=this.toObject(s);typeof a=="object"&&(i={...i,...a})}),i}_unionDefaultValue(e,t){let i=new Ie().generate(t),s=!1,a=!1,n=!1;if(e.forEach(l=>{if(l.types.includes(d.aml.vocabularies.shapes.NilShape)&&(n=!0),!l.types.includes(d.aml.vocabularies.shapes.ScalarShape))return;let c=l;a||(a=c.dataType===d.w3.xmlSchema.boolean),s||(s=[d.w3.xmlSchema.number,d.w3.xmlSchema.long,d.w3.xmlSchema.integer,d.w3.xmlSchema.float,d.w3.xmlSchema.double,d.aml.vocabularies.shapes.number,d.aml.vocabularies.shapes.long,d.aml.vocabularies.shapes.integer,d.aml.vocabularies.shapes.float,d.aml.vocabularies.shapes.double].includes(c.dataType)),n||(n=c.dataType===d.w3.xmlSchema.nil)}),s){let l=Number(i);if(!Number.isNaN(l))return l}if(a){if(i==="true")return!0;if(i==="false")return!1}return n&&(i==="null"||i==="nil")?null:i}_arrayShapeObject(e){let{items:t}=e,r=e.defaultValue||t&&t.defaultValue,{examples:i=[]}=e,s=t;if(Array.isArray(s.examples)&&(i=i.concat(s.examples)),this.opts.renderExamples&&i&&i.length){let a=i.find(l=>!!l.structuredValue),n=this._exampleToObject(a);if(Array.isArray(n))return n;if(typeof n<"u")return[n]}if(r){let n=new Ie().processNode(r);if(Array.isArray(n))return n;if(n)return[n]}if(t){let a=this.toObject(t);if(typeof a<"u")return[a]}return[]}_tupleShapeObject(e){let{items:t,examples:r}=e;if(this.opts.renderExamples&&r&&r.length){let i=r.find(a=>!!a.structuredValue),s=this._exampleToObject(i);if(typeof s<"u")return[s]}if(e.defaultValue){let s=new Ie().processNode(e.defaultValue);if(Array.isArray(s))return s}if(t.length){let i=[];return t.forEach(s=>{let a=this.toObject(s);typeof a<"u"&&i.push(a)}),i}return[]}_anyShapeObject(e){let{and:t=[],xone:r=[],or:i=[]}=e;if(t.length){let s={};return t.forEach(a=>{let n=this.toObject(a);typeof n=="object"&&(s={...s,...n})}),s}if(r.length){let{selectedUnions:s=[]}=this.opts,a=r.find(n=>s.includes(n.id));return a||(a=r[0]),this.toObject(a)}if(i.length){let{selectedUnions:s=[]}=this.opts,a=i.find(n=>s.includes(n.id));return a||(a=i[0]),this.toObject(a)}return this._scalarShapeObject(e)}_propertyShapeObject(e){let{minCount:t=0}=e;if(t===0&&!this.opts.renderOptional)return;let{range:r}=e;if(!r)return;let{types:i}=r;if(i.includes(d.aml.vocabularies.shapes.ScalarShape)){let s=r;return this._scalarShapeObject(s)}return this.toObject(r)}_exampleToObject(e){if(e&&e.structuredValue)return new Ie().processNode(e.structuredValue)}_fileShapeObject(){}_schemaShapeObject(){}};var Ne=o=>o.replace(/[^a-zA-Z0-9-_.]/g,""),Hs="unknown-type";function tt(o){let{name:e,inherits:t=[],xmlSerialization:r}=o,i=r&&r.name?r.name:e||Hs;if(i==="schema"&&t.length){let s=t.find(a=>a.name&&a.name!=="schema");s&&(i=s.name==="type"&&s.displayName||s.name)}return Ne(String(i))}var Or=class extends Dt{generate(e){let t;return e.types.includes(d.w3.shacl.PropertyShape)?t=this._propertyShapeObject(e):t=this.processNode(e,{},!0),t}processNode(e,t={},r=!1){let{types:i}=e;return i.includes(d.aml.vocabularies.shapes.ScalarShape)?this._scalarShapeObject(e,t):i.includes(d.w3.shacl.NodeShape)?this._nodeShapeObject(e,t):i.includes(d.aml.vocabularies.shapes.UnionShape)?this._unionShapeObject(e):i.includes(d.aml.vocabularies.shapes.FileShape)?this._fileShapeObject():i.includes(d.aml.vocabularies.shapes.SchemaShape)?this._schemaShapeObject():i.includes(d.aml.vocabularies.shapes.TupleShape)?this._tupleShapeObject():i.includes(d.aml.vocabularies.shapes.ArrayShape)||i.includes(d.aml.vocabularies.shapes.MatrixShape)?this._arrayShapeObject(e,t,r):this._anyShapeObject(e)}serialize(e){return e}_readCurrentUnion(e){let{selectedUnions:t}=this.opts;return js(e,t)}_collectProperties(e){let{selectedUnions:t}=this.opts;return ki(e,t)}_nodeShapeObject(e,t={}){let r=t.forceName||tt(e),i=[],s=t.indent||0,a=this._collectExamples(e,{tagFill:new Array(s*2+0).fill(" ").join(""),indent:s+1,nodeName:r});if(a)return a;let n=[];if(this._collectProperties(e).forEach(u=>{let{range:h,minCount:m=0}=u;if(m===0&&!this.opts.renderOptional||!h)return;let f=h;if(f.xmlSerialization&&f.xmlSerialization.attribute&&f.types.includes(d.aml.vocabularies.shapes.ScalarShape)){let b=Ne(f.xmlSerialization.name?f.xmlSerialization.name:u.name||f.name||Hs);f.xmlSerialization.prefix&&(b=`${f.xmlSerialization.prefix}:${b}`);let y=this._scalarValue(f);n.push(`${b}="${y}"`);return}let k=this._propertyShapeObject(u,{indent:s});if(typeof k<"u"){let b=t.noWrap?0:2,y=new Array(s*2+b).fill(" ").join("");i.push(yi(y,k))}}),t.noWrap)return i.join(`
|
|
37
|
-
`);let c=`<${
|
|
38
|
-
`)}_scalarShapeObject(e,t={}){let{xmlSerialization:
|
|
39
|
-
`)}_createTabs(e=0,t=0){return new Array(e*2+t).fill(" ").join("")}_nodePropertyObject(e,t={}){let
|
|
40
|
-
`)}let u=`${a}<${
|
|
41
|
-
`)}_nodePropertyArray(e,t={}){let
|
|
42
|
-
`)}_arrayShapeObject(e,t={},
|
|
43
|
-
`)}}if(s&&e.defaultValue){let m=new
|
|
44
|
-
`)}return""}_scalarItems(e,t={}){let
|
|
45
|
-
`)}}if(e.defaultValue){let p=new
|
|
46
|
-
`)}_exampleToObject(e){if(e&&e.structuredValue)return new
|
|
33
|
+
`)}function Rs(o,e){if(typeof o=="number")return o;let t=Number(o);return Number.isNaN(t)?e:t}function Ts(o,e){let t=typeof o;if(t==="boolean")return o;if(t==="string"){let i=o.trim();if(i==="true")return!0;if(i==="false")return!1}return e}function Sr(o,e){switch(e){case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:return Rs(o,0);case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return Ts(o,!1);case d.w3.xmlSchema.string:case d.aml.vocabularies.shapes.password:return o??"";case d.aml.vocabularies.shapes.nil:case d.w3.xmlSchema.nil:return null;default:return o}}function Ds(o,e=[]){let t;return Array.isArray(e)&&e.length&&(t=o.find(i=>e.includes(i.id))),t||([t]=o),t}function Ar(o,e){let t=[],{properties:i,inherits:r}=o;i.length&&(t=[...i]),Array.isArray(r)&&r.length&&r.forEach(a=>{let n=a;if(n.types.includes(d.aml.vocabularies.shapes.UnionShape)){let p=n,{anyOf:u=[]}=p;n=Ds(u,e)}if(!n.types.includes(d.w3.shacl.NodeShape))return;let c=Ar(n);c.length&&(t=t.concat(c))});let s=[];return t.forEach(a=>{s.find(l=>l.name===a.name)||s.push(a)}),s}var jt=class{processNode(e){let{types:t}=e;if(t.includes(d.aml.vocabularies.data.Scalar))return this.processScalarNode(e);if(t.includes(d.aml.vocabularies.data.Array))return this.processArrayNode(e);if(t.includes(d.aml.vocabularies.data.Object))return this.processObjectNode(e)}processScalarNode(e){return Sr(e.value,e.dataType)}processArrayNode(e){let t=[];return e.members.forEach(i=>{let r=this.processNode(i);r!==void 0&&t.push(r)}),t}processObjectNode(e){let t={},{properties:i}=e;return Object.keys(i).forEach(r=>{let s=i[r],a=this.processNode(s);if(typeof a<"u"){let n=this.normalizePropertyName(r);t[n]=a}}),t}normalizePropertyName(e){let t=e;try{t=decodeURIComponent(t)}catch{}return t}};var Ce=class extends jt{generate(e){let t=this.processNode(e);return!t||typeof t=="string"?t:JSON.stringify(t,null,2)}};var xe=class extends jt{generate(e,t,i={}){let r=this.processNode(e);if(!r)return r;let{indent:s=0}=i,a=new Array(s).fill(" ").join("");return t?Array.isArray(r)?r.map(n=>`${a}<${t}>${si(n)}</${t}>`).filter(n=>!!n).join(`
|
|
34
|
+
`):`${si({[t]:r})}`:`${si(r,s)}`}};var Ie={};va(Ie,{anyShape:()=>It,arrayShape:()=>oc,fileShape:()=>nc,nodeShape:()=>rc,propertyShape:()=>cc,recursiveShape:()=>dc,scalarShape:()=>sc,shape:()=>Xs,tupleShape:()=>lc,unionShape:()=>ac,xmlSerializer:()=>Ka});var ji={};va(ji,{IAmfAPIContractProcessingDataTypes:()=>Ll,IAmfAnyTypes:()=>Fs,IAmfApiKeySettingsTypes:()=>$l,IAmfArrayNodeTypes:()=>Hs,IAmfArrayTypes:()=>Us,IAmfAsyncApiTypes:()=>ic,IAmfBaseUnitProcessingDataTypes:()=>tc,IAmfCallbackTypes:()=>Pl,IAmfCreativeWorkTypes:()=>Ml,IAmfDataTypeFragmentTypes:()=>Wl,IAmfDocumentTypes:()=>Ul,IAmfDomainExtensionTypes:()=>Dl,IAmfDomainPropertyTypes:()=>Ql,IAmfEncodingTypes:()=>Vl,IAmfEndpointType:()=>gl,IAmfExampleTypes:()=>dl,IAmfExternalDomainElementTypes:()=>ec,IAmfExternalFragmentTypes:()=>Xl,IAmfFileTypes:()=>Ks,IAmfHttpSettingsTypes:()=>Nl,IAmfIriTemplateMappingTypes:()=>Cl,IAmfLicenseTypes:()=>fl,IAmfMessageTypes:()=>Tl,IAmfModuleTypes:()=>Hl,IAmfNilTypes:()=>ll,IAmfNodeTypes:()=>Ms,IAmfOAuth1SettingsTypes:()=>xl,IAmfOAuth2FlowTypes:()=>El,IAmfOAuth2SettingsTypes:()=>Al,IAmfObjectNodeTypes:()=>Ws,IAmfOpenIdConnectSettingsTypes:()=>jl,IAmfParameterTypes:()=>hl,IAmfParametrizedResourceTypeTypes:()=>Fl,IAmfParametrizedSecuritySchemeTypes:()=>_l,IAmfParametrizedTraitTypes:()=>Jl,IAmfPayloadTypes:()=>wl,IAmfPropertyTypes:()=>Vs,IAmfProviderTypes:()=>ml,IAmfRdfsSeqType:()=>Kl,IAmfRecursiveTypes:()=>qs,IAmfRequestTypes:()=>bl,IAmfResourceTypeTypes:()=>ql,IAmfResponseTypes:()=>kl,IAmfScalarNodeTypes:()=>Gs,IAmfScalarTypes:()=>zs,IAmfSchemaTypes:()=>cl,IAmfScopeTypes:()=>Il,IAmfSecurityRequirementTypes:()=>vl,IAmfSecuritySchemeFragmentTypes:()=>Zl,IAmfSecuritySchemeTypes:()=>Sl,IAmfServerType:()=>ul,IAmfSourceMapTypes:()=>zl,IAmfSupportedOperationTypes:()=>yl,IAmfTagTypes:()=>Rl,IAmfTemplatedLinkTypes:()=>Ol,IAmfTraitFragmentTypes:()=>Yl,IAmfTraitTypes:()=>Bl,IAmfTupleTypes:()=>Js,IAmfUnionTypes:()=>Ls,IAmfVariableValueTypes:()=>Gl,IAmfWebApiType:()=>pl,IAmfXmlSerializationTypes:()=>Bs});var zs=[d.aml.vocabularies.shapes.ScalarShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Us=[d.aml.vocabularies.shapes.ArrayShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Ms=[d.w3.shacl.NodeShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Vs=[d.w3.shacl.PropertyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],ll=[d.aml.vocabularies.shapes.NilShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Ls=[d.aml.vocabularies.shapes.UnionShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Ks=[d.aml.vocabularies.shapes.FileShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Fs=[d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],cl=[d.aml.vocabularies.shapes.SchemaShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Js=[d.aml.vocabularies.shapes.TupleShape,d.aml.vocabularies.shapes.ArrayShape,d.aml.vocabularies.shapes.AnyShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],qs=[d.aml.vocabularies.shapes.RecursiveShape,d.w3.shacl.Shape,d.aml.vocabularies.shapes.Shape,d.aml.vocabularies.document.DomainElement],Bs=[d.aml.vocabularies.shapes.XMLSerializer,d.aml.vocabularies.document.DomainElement],Gs=[d.aml.vocabularies.data.Scalar,d.aml.vocabularies.data.Node,d.aml.vocabularies.document.DomainElement],Hs=[d.aml.vocabularies.data.Array,d.w3.rdfSyntax.Seq,d.aml.vocabularies.data.Node,d.aml.vocabularies.document.DomainElement],Ws=[d.aml.vocabularies.data.Object,d.aml.vocabularies.data.Node,d.aml.vocabularies.document.DomainElement],dl=[d.aml.vocabularies.apiContract.Example,d.aml.vocabularies.document.DomainElement],pl=[d.aml.vocabularies.apiContract.WebAPI,d.aml.vocabularies.apiContract.API,d.aml.vocabularies.document.RootDomainElement,d.aml.vocabularies.document.DomainElement],ul=[d.aml.vocabularies.apiContract.Server,d.aml.vocabularies.document.DomainElement],hl=[d.aml.vocabularies.apiContract.Parameter,d.aml.vocabularies.core.Parameter,d.aml.vocabularies.document.DomainElement],ml=[d.aml.vocabularies.core.Organization,d.aml.vocabularies.document.DomainElement],fl=[d.aml.vocabularies.core.License,d.aml.vocabularies.document.DomainElement],gl=[d.aml.vocabularies.apiContract.EndPoint,d.aml.vocabularies.document.DomainElement],yl=[d.aml.vocabularies.apiContract.Operation,d.aml.vocabularies.core.Operation,d.aml.vocabularies.document.DomainElement],bl=[d.aml.vocabularies.apiContract.Request,d.aml.vocabularies.core.Request,d.aml.vocabularies.apiContract.Message,d.aml.vocabularies.document.DomainElement],kl=[d.aml.vocabularies.apiContract.Response,d.aml.vocabularies.core.Response,d.aml.vocabularies.apiContract.Message,d.aml.vocabularies.document.DomainElement],wl=[d.aml.vocabularies.apiContract.Payload,d.aml.vocabularies.core.Payload,d.aml.vocabularies.document.DomainElement],vl=[d.aml.vocabularies.security.SecurityRequirement,d.aml.vocabularies.document.DomainElement],_l=[d.aml.vocabularies.security.ParametrizedSecurityScheme,d.aml.vocabularies.document.DomainElement],Sl=[d.aml.vocabularies.security.SecurityScheme,d.aml.vocabularies.document.DomainElement],Al=[d.aml.vocabularies.security.OAuth2Settings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],El=[d.aml.vocabularies.security.OAuth2Flow,d.aml.vocabularies.document.DomainElement],xl=[d.aml.vocabularies.security.OAuth1Settings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],Nl=[d.aml.vocabularies.security.HttpSettings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],$l=[d.aml.vocabularies.security.ApiKeySettings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],jl=[d.aml.vocabularies.security.OpenIdConnectSettings,d.aml.vocabularies.security.Settings,d.aml.vocabularies.document.DomainElement],Il=[d.aml.vocabularies.security.Scope,d.aml.vocabularies.document.DomainElement],Pl=[d.aml.vocabularies.apiContract.Callback,d.aml.vocabularies.document.DomainElement],Ol=[d.aml.vocabularies.apiContract.TemplatedLink,d.aml.vocabularies.document.DomainElement],Cl=[d.aml.vocabularies.apiContract.IriTemplateMapping,d.aml.vocabularies.document.DomainElement],Rl=[d.aml.vocabularies.apiContract.Tag,d.aml.vocabularies.document.DomainElement],Tl=[d.aml.vocabularies.apiContract.Message,d.aml.vocabularies.document.DomainElement],Dl=[d.aml.vocabularies.apiContract.DomainExtension,d.aml.vocabularies.document.DomainElement],zl=[d.aml.vocabularies.docSourceMaps.SourceMap],Ul=[d.aml.vocabularies.document.Document,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Module,d.aml.vocabularies.document.Unit],Ml=[d.aml.vocabularies.core.CreativeWork,d.aml.vocabularies.document.DomainElement],Vl=[d.aml.vocabularies.apiContract.Encoding,d.aml.vocabularies.document.DomainElement],Ll=[d.aml.vocabularies.document.APIContractProcessingData],Kl=[d.w3.rdfSchema.Seq],Fl=[d.aml.vocabularies.apiContract.ParametrizedResourceType,d.aml.vocabularies.document.ParametrizedDeclaration,d.aml.vocabularies.document.DomainElement],Jl=[d.aml.vocabularies.apiContract.ParametrizedTrait,d.aml.vocabularies.document.ParametrizedDeclaration,d.aml.vocabularies.document.DomainElement],ql=[d.aml.vocabularies.apiContract.ResourceType,d.aml.vocabularies.document.AbstractDeclaration,d.aml.vocabularies.document.DomainElement],Bl=[d.aml.vocabularies.apiContract.Trait,d.aml.vocabularies.document.AbstractDeclaration,d.aml.vocabularies.document.DomainElement],Gl=[d.aml.vocabularies.document.VariableValue,d.aml.vocabularies.document.DomainElement],Hl=[d.aml.vocabularies.document.Module,d.aml.vocabularies.document.Unit],Wl=[d.aml.vocabularies.shapes.DataTypeFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Xl=[d.aml.vocabularies.document.ExternalFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Yl=[d.aml.vocabularies.apiContract.TraitFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Zl=[d.aml.vocabularies.security.SecuritySchemeFragment,d.aml.vocabularies.document.Fragment,d.aml.vocabularies.document.Unit],Ql=[d.aml.vocabularies.document.DomainProperty,d.w3.rdfSyntax.Property,d.aml.vocabularies.document.DomainElement],ec=[d.aml.vocabularies.document.ExternalDomainElement,d.aml.vocabularies.document.DomainElement],tc=[d.aml.vocabularies.document.BaseUnitProcessingData],ic=[d.aml.vocabularies.apiContract.AsyncAPI,d.aml.vocabularies.apiContract.API,d.aml.vocabularies.document.RootDomainElement,d.aml.vocabularies.document.DomainElement];function Ka(o){return{id:`xml-serializer-${o}`,types:Bs,customDomainProperties:[]}}function Xs(o){return{id:o,types:[],values:[],inherits:[],or:[],and:[],xone:[],customDomainProperties:[]}}function It(o){return{...Xs(o),types:Fs,examples:[],xmlSerialization:Ka(o)}}function rc(o){let e=It(o);return e.types=Ms,e.id=`node-shape-${o}`,{...e,properties:[],dependencies:[],customShapeProperties:[],customShapePropertyDefinitions:[]}}function sc(o){let e=It(o);return e.id=`scalar-shape-${o}`,e.types=zs,e}function ac(o){let e=It(o);return e.id=`union-shape-${o}`,e.types=Ls,{...e,anyOf:[]}}function nc(o){let e=It(o);return e.id=`file-shape-${o}`,e.types=Ks,e}function oc(o){let e=It(o);return e.id=`array-shape-${o}`,e.types=Us,e}function lc(o){let e=It(o);return e.id=`tuple-shape-${o}`,e.types=Js,{...e,items:[]}}function cc(o){let e=It(o);return e.types=Vs,e}function dc(o,e){return{...Xs(o),id:`recursive-${o}`,types:qs,fixPoint:e||""}}import{customAlphabet as pc}from"nanoid";var Fa=pc("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_",21);var it=class o{id=Fa();types;name;properties;value;dataType;members;customDomainProperties=[];static scalar(e,t){let i=new o("scalar");return i.value=e,i.dataType=t,i}constructor(e){if(typeof e=="string"){if(e==="scalar")this.types=Gs;else if(e==="array")this.types=Hs;else if(e==="object")this.types=Ws;else throw new Error(`Invalid data node init option: ${e}`);return}if(!e)throw new Error("Expected an initialization option.");let t=e,{id:i,types:r,customDomainProperties:s}=t;if(this.id=i,this.types=r,this.customDomainProperties=s,r.includes(d.aml.vocabularies.data.Scalar)){let a=t;this.value=a.value,this.dataType=a.dataType}else if(r.includes(d.aml.vocabularies.data.Object)){let a=t,n={};this.properties=n,Object.keys(a.properties).forEach(l=>{let c=new o(a.properties[l]);n[l]=c})}else if(r.includes(d.aml.vocabularies.data.Array)){let a=t,n=[];this.members=n,Array.isArray(a.members)&&a.members.forEach(l=>{let c=new o(l);n.push(c)})}}toJSON(){let{id:e,customDomainProperties:t,types:i,name:r}=this,s={id:e,types:i,customDomainProperties:t};if(r&&(s.name=r),i.includes(d.aml.vocabularies.data.Scalar)){let a=s;a.dataType=this.dataType,a.value=this.value}else if(i.includes(d.aml.vocabularies.data.Object)){let a=s;a.properties={};let n=this.properties;n&&Object.keys(n).forEach(l=>{a.properties[l]=n[l].toJSON()})}else if(i.includes(d.aml.vocabularies.data.Array)){let a=s;a.members=[],this.members&&this.members.forEach(n=>{a.members.push(n.toJSON())})}return s}addMember(e){if(!this.types.includes(d.aml.vocabularies.data.Array))throw new Error("Not an ArrayNode.");this.members||(this.members=[]),this.members.push(e)}removeMember(e){if(!this.types.includes(d.aml.vocabularies.data.Array))throw new Error("Not an ArrayNode.");if(!this.members)return;let t=this.members.findIndex(i=>i.id===e);t>=0&&this.members.splice(t,1)}addProperty(e,t){if(!this.types.includes(d.aml.vocabularies.data.Object))throw new Error("Not an ObjectNode.");this.properties||(this.properties={}),this.properties[e]=t}removeProperty(e){if(!this.types.includes(d.aml.vocabularies.data.Object))throw new Error("Not an ObjectNode.");this.properties&&delete this.properties[e]}};var _e=Symbol("nValue"),Ii=Symbol("mValue"),Ja=Symbol("matrixAValue"),Er=Symbol("upperMaskValue"),xr=Symbol("lowerMaskValue"),W=Symbol("mtValue"),Re=Symbol("mtiValue"),Nr=Symbol("instancesValue"),Pt=class o{static[Nr]=new Map;[_e]=624;[Ii]=397;[Ja]=2567483615;[Er]=2147483648;[xr]=2147483647;[W]=new Array(this[_e]);[Re]=this[_e]+1;constructor(e=o.seedFn()){this.initGenRand(e)}static seedFn(){return Math.floor(Math.random()*10**13)}static fromSeed(e=o.seedFn()){if(this[Nr].has(e))return this[Nr].get(e);let t=new o(e);return this[Nr].set(e,t),t}initGenRand(e){let t=e;for(this[W][0]=t>>>0,this[Re]=1;this[Re]<this[_e];this[Re]++)t=this[W][this[Re]-1]^this[W][this[Re]-1]>>>30,this[W][this[Re]]=(((t&4294901760)>>>16)*1812433253<<16)+(t&65535)*1812433253+this[Re],this[W][this[Re]]>>>=0}initByArray(e,t){let i=1,r=0,s;this.initGenRand(19650218);let a=this[_e]>t?this[_e]:t;for(;a;a--)s=this[W][i-1]^this[W][i-1]>>>30,this[W][i]=(this[W][i]^(((s&4294901760)>>>16)*1664525<<16)+(s&65535)*1664525)+e[r]+r,this[W][i]>>>=0,i++,r++,i>=this[_e]&&(this[W][0]=this[W][this[_e]-1],i=1),r>=t&&(r=0);for(a=this[_e]-1;a;a--)s=this[W][i-1]^this[W][i-1]>>>30,this[W][i]=(this[W][i]^(((s&4294901760)>>>16)*1566083941<<16)+(s&65535)*1566083941)-i,this[W][i]>>>=0,i++,i>=this[_e]&&(this[W][0]=this[W][this[_e]-1],i=1);this[W][0]=2147483648}int32(){let e,t=[0,this[Ja]];if(this[Re]>=this[_e]){let i;for(this[Re]===this[_e]+1&&this.initGenRand(5489),i=0;i<this[_e]-this[Ii];i++)e=this[W][i]&this[Er]|this[W][i+1]&this[xr],this[W][i]=this[W][i+this[Ii]]^e>>>1^t[e&1];for(;i<this[_e]-1;i++)e=this[W][i]&this[Er]|this[W][i+1]&this[xr],this[W][i]=this[W][i+(this[Ii]-this[_e])]^e>>>1^t[e&1];e=this[W][this[_e]-1]&this[Er]|this[W][0]&this[xr],this[W][this[_e]-1]=this[W][this[Ii]-1]^e>>>1^t[e&1],this[Re]=0}return e=this[W][this[Re]++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0}int31(){return this.int32()>>>1}real1(){return this.int32()*(1/4294967295)}random(e=32768,t=0){return Math.floor(this.real2()*(e-t)+t)}real2(){return this.int32()*(1/4294967296)}real3(){return(this.int32()+.5)*(1/4294967296)}res53(){let e=this.int32()>>>5,t=this.int32()>>>6;return(e*67108864+t)*(1/9007199254740992)}};var $r="0123456789",Pi="abcdefghijklmnopqrstuvwxyz",jr=Pi.toUpperCase(),Ys=`${$r}abcdef`;function qa(o=""){return o.replace(/ /g,"-").replace(/[^一-龠ぁ-ゔァ-ヴー\w.-]+/g,"")}function rt(o,e={}){let t={};typeof e=="number"?t.max=e:typeof e=="object"&&(t={...e}),typeof t.min!="number"&&(t.min=0),typeof t.max!="number"&&(t.max=99999),typeof t.precision!="number"&&(t.precision=1),t.max>0&&(t.max+=t.precision);let i=Math.floor(o.random(t.max/t.precision,t.min/t.precision));return t.precision===1||(i/=1/t.precision),i}function Ir(o,e={}){let t={};return typeof e=="number"?t.precision=e:typeof e=="object"&&(t={...e}),typeof t.precision!="number"&&(t.precision=.01),rt(o,t)}function Ba(o,e=10,t){let i=typeof t=="string"?t:jr+Pi,r={min:0,max:i.length-1};return new Array(e).fill("").map(()=>i[rt(o,r)]).join("")}function Ga(o,e={}){let t={...e},i;switch(t.casing){case"lower":i=Pi;break;case"upper":i=jr;break;default:i=Pi+jr}if(!t.pool){t.pool="";let r="!@#$%^&*()[]";t.alpha&&(t.pool+=i),t.numeric&&(t.pool+=$r),t.symbols&&(t.pool+=r),t.pool||(t.pool=`${i}${$r}${r}`)}return t.pool.charAt(rt(o,t.pool.length-1))}function Ha(o,e={}){let t={};typeof e=="number"?t.max=e:typeof e=="object"&&(t={...e});let i=864e13;(typeof t.min!="number"||t.min<i*-1)&&(t.min=new Date().setFullYear(1970,1,1)),(typeof t.max!="number"||t.max>i)&&(t.max=new Date().setFullYear(2100,1,1));let r=rt(o,t);return new Date(r)}var ai=Symbol("mtValue"),Ot=class{[ai];constructor(e){this[ai]=Pt.fromSeed(e)}seed(e){this[ai]=Pt.fromSeed(e)}pick(e,t){let i=t;typeof i!="number"?i=rt(this[ai],{min:1,max:e.length}):i>e.length?i=e.length:i<0&&(i=0);let r=[...e],s=r.length,a=s-i,n,l;for(;s-- >a;)l=Math.floor((s+1)*Ir(this[ai],{min:0,max:.99})),n=r[l],r[l]=r[s],r[s]=n;return r.slice(a)}pickOne(e){let t=rt(this[ai],{max:e.length-1});return e[t]}};var Oi=Symbol("randomValue"),st=Symbol("mtValue"),Ve=class{[st];[Oi];constructor(e){this[st]=Pt.fromSeed(e),this[Oi]=new Ot(e)}seed(e){this[st]=Pt.fromSeed(e),this[Oi].seed(e)}number(e={}){return rt(this[st],e)}float(e={}){return Ir(this[st],e)}datetime(e={}){return Ha(this[st],e)}string(e=10,t){return Ba(this[st],e,t)}character(e={}){return Ga(this[st],e)}uuid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let i=this.number({min:0,max:15});return(t==="x"?i:i&3|8).toString(16)})}hash(e={}){let{length:t=40,casing:i="lower"}=e,r=i==="upper"?Ys.toUpperCase():Ys;return this.string(t,r)}boolean(e={}){let t={};if(typeof e=="number"?t.likelihood=e:typeof e=="object"&&(t={...e}),typeof t.likelihood>"u"&&(t.likelihood=rt(this[st],{min:0,max:100})),t.likelihood<0||t.likelihood>100)throw new RangeError("Invalid likelihood range. Accepted range is [0, 100].");return this[st].real2()*100<t.likelihood}falsy(e={}){let t=e.pool||[!1,null,0,NaN,""];return this[Oi].pickOne(t)}hexaDecimal(e=1){let t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","A","B","C","D","E","F"];return`0x${this[Oi].pick(t,e).join("")}`}};var uc={names:["January","February","March","April","May","June","July","August","September","October","November","December"],abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},Xa=uc;var hc={names:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},Ya=hc;var mc={month:Xa,weekday:Ya},Za=mc;var fc=Object.freeze({consonants:"bcdfghjklmnprstvwz",vowels:"aeiou"}),Qa=fc;var gc={free:["gmail.com","yahoo.com","hotmail.com"],example:["example.org","example.com","example.net"]},en=gc;var yc={suffix:["com","biz","info","name","net","org"]},tn=yc;var bc=["0therplanet_128.jpg","1markiz_128.jpg","2fockus_128.jpg","8d3k_128.jpg","91bilal_128.jpg","9lessons_128.jpg","AM_Kn2_128.jpg","AlbertoCococi_128.jpg","BenouarradeM_128.jpg","BillSKenney_128.jpg","BrianPurkiss_128.jpg","BroumiYoussef_128.jpg","BryanHorsey_128.jpg","Chakintosh_128.jpg","ChrisFarina78_128.jpg","Elt_n_128.jpg","GavicoInd_128.jpg","HenryHoffman_128.jpg","IsaryAmairani_128.jpg","Karimmove_128.jpg","LucasPerdidao_128.jpg","ManikRathee_128.jpg","RussellBishop_128.jpg","S0ufi4n3_128.jpg","SULiik_128.jpg","Shriiiiimp_128.jpg","Silveredge9_128.jpg","Skyhartman_128.jpg","SlaapMe_128.jpg","Stievius_128.jpg","Talbi_ConSept_128.jpg","VMilescu_128.jpg","VinThomas_128.jpg","YoungCutlass_128.jpg","ZacharyZorbas_128.jpg","_dwite__128.jpg","_kkga_128.jpg","_pedropinho_128.jpg","_ragzor_128.jpg","_scottburgess_128.jpg","_shahedk_128.jpg","_victa_128.jpg","_vojto_128.jpg","_williamguerra_128.jpg","_yardenoon_128.jpg","a1chapone_128.jpg","a_brixen_128.jpg","a_harris88_128.jpg","aaronalfred_128.jpg","aaroni_128.jpg","aaronkwhite_128.jpg","abdots_128.jpg","abdulhyeuk_128.jpg","abdullindenis_128.jpg","abelcabans_128.jpg","abotap_128.jpg","abovefunction_128.jpg","adamawesomeface_128.jpg","adammarsbar_128.jpg","adamnac_128.jpg","adamsxu_128.jpg","adellecharles_128.jpg","ademilter_128.jpg","adhamdannaway_128.jpg","adhiardana_128.jpg","adityasutomo_128.jpg","adobi_128.jpg","adrienths_128.jpg","aeon56_128.jpg","afusinatto_128.jpg","agromov_128.jpg","agustincruiz_128.jpg","ah_lice_128.jpg","ahmadajmi_128.jpg","ahmetalpbalkan_128.jpg","ahmetsulek_128.jpg","aiiaiiaii_128.jpg","ainsleywagon_128.jpg","aio____128.jpg","airskylar_128.jpg","aislinnkelly_128.jpg","ajaxy_ru_128.jpg","aka_james_128.jpg","akashsharma39_128.jpg","akmalfikri_128.jpg","akmur_128.jpg","al_li_128.jpg","alagoon_128.jpg","alan_zhang__128.jpg","albertaugustin_128.jpg","alecarpentier_128.jpg","aleclarsoniv_128.jpg","aleinadsays_128.jpg","alek_djuric_128.jpg","aleksitappura_128.jpg","alessandroribe_128.jpg","alevizio_128.jpg","alexandermayes_128.jpg","alexivanichkin_128.jpg","algunsanabria_128.jpg","allagringaus_128.jpg","allfordesign_128.jpg","allthingssmitty_128.jpg","alsobrooks_128.jpg","alterchuca_128.jpg","aluisio_azevedo_128.jpg","alxleroydeval_128.jpg","alxndrustinov_128.jpg","amandabuzard_128.jpg","amanruzaini_128.jpg","amayvs_128.jpg","amywebbb_128.jpg","anaami_128.jpg","anasnakawa_128.jpg","anatolinicolae_128.jpg","andrea211087_128.jpg","andreas_pr_128.jpg","andresdjasso_128.jpg","andresenfredrik_128.jpg","andrewabogado_128.jpg","andrewarrow_128.jpg","andrewcohen_128.jpg","andrewofficer_128.jpg","andyisonline_128.jpg","andysolomon_128.jpg","andytlaw_128.jpg","angelceballos_128.jpg","angelcolberg_128.jpg","angelcreative_128.jpg","anjhero_128.jpg","ankitind_128.jpg","anoff_128.jpg","anthonysukow_128.jpg","antjanus_128.jpg","antongenkin_128.jpg","antonyryndya_128.jpg","antonyzotov_128.jpg","aoimedia_128.jpg","apriendeau_128.jpg","arashmanteghi_128.jpg","areandacom_128.jpg","areus_128.jpg","ariffsetiawan_128.jpg","ariil_128.jpg","arindam__128.jpg","arishi__128.jpg","arkokoley_128.jpg","aroon_sharma_128.jpg","arpitnj_128.jpg","artd_sign_128.jpg","artem_kostenko_128.jpg","arthurholcombe1_128.jpg","artvavs_128.jpg","ashernatali_128.jpg","ashocka18_128.jpg","atanism_128.jpg","atariboy_128.jpg","ateneupopular_128.jpg","attacks_128.jpg","aviddayentonbay_128.jpg","axel_128.jpg","badlittleduck_128.jpg","bagawarman_128.jpg","baires_128.jpg","balakayuriy_128.jpg","balintorosz_128.jpg","baliomega_128.jpg","baluli_128.jpg","bargaorobalo_128.jpg","barputro_128.jpg","bartjo_128.jpg","bartoszdawydzik_128.jpg","bassamology_128.jpg","batsirai_128.jpg","baumann_alex_128.jpg","baumannzone_128.jpg","bboy1895_128.jpg","bcrad_128.jpg","begreative_128.jpg","belyaev_rs_128.jpg","benefritz_128.jpg","benjamin_knight_128.jpg","bennyjien_128.jpg","benoitboucart_128.jpg","bereto_128.jpg","bergmartin_128.jpg","bermonpainter_128.jpg","bertboerland_128.jpg","besbujupi_128.jpg","beshur_128.jpg","betraydan_128.jpg","beweinreich_128.jpg","bfrohs_128.jpg","bighanddesign_128.jpg","bigmancho_128.jpg","billyroshan_128.jpg","bistrianiosip_128.jpg","blakehawksworth_128.jpg","blakesimkins_128.jpg","bluefx__128.jpg","bluesix_128.jpg","bobbytwoshoes_128.jpg","bobwassermann_128.jpg","bolzanmarco_128.jpg","borantula_128.jpg","borges_marcos_128.jpg","bowbrick_128.jpg","boxmodel_128.jpg","bpartridge_128.jpg","bradenhamm_128.jpg","brajeshwar_128.jpg","brandclay_128.jpg","brandonburke_128.jpg","brandonflatsoda_128.jpg","brandonmorreale_128.jpg","brenmurrell_128.jpg","brenton_clarke_128.jpg","bruno_mart_128.jpg","brunodesign1206_128.jpg","bryan_topham_128.jpg","bu7921_128.jpg","bublienko_128.jpg","buddhasource_128.jpg","buleswapnil_128.jpg","bungiwan_128.jpg","buryaknick_128.jpg","buzzusborne_128.jpg","byrnecore_128.jpg","byryan_128.jpg","cadikkara_128.jpg","calebjoyce_128.jpg","calebogden_128.jpg","canapud_128.jpg","carbontwelve_128.jpg","carlfairclough_128.jpg","carlosblanco_eu_128.jpg","carlosgavina_128.jpg","carlosjgsousa_128.jpg","carlosm_128.jpg","carlyson_128.jpg","caseycavanagh_128.jpg","caspergrl_128.jpg","catadeleon_128.jpg","catarino_128.jpg","cboller1_128.jpg","cbracco_128.jpg","ccinojasso1_128.jpg","cdavis565_128.jpg","cdharrison_128.jpg","ceekaytweet_128.jpg","cemshid_128.jpg","cggaurav_128.jpg","chaabane_wail_128.jpg","chacky14_128.jpg","chadami_128.jpg","chadengle_128.jpg","chaensel_128.jpg","chandlervdw_128.jpg","chanpory_128.jpg","charlesrpratt_128.jpg","charliecwaite_128.jpg","charliegann_128.jpg","chatyrko_128.jpg","cherif_b_128.jpg","chris_frees_128.jpg","chris_witko_128.jpg","chrismj83_128.jpg","chrisslowik_128.jpg","chrisstumph_128.jpg","christianoliff_128.jpg","chrisvanderkooi_128.jpg","ciaranr_128.jpg","cicerobr_128.jpg","claudioguglieri_128.jpg","cloudstudio_128.jpg","clubb3rry_128.jpg","cocolero_128.jpg","codepoet_ru_128.jpg","coderdiaz_128.jpg","codysanfilippo_128.jpg","cofla_128.jpg","colgruv_128.jpg","colirpixoil_128.jpg","collegeman_128.jpg","commadelimited_128.jpg","conspirator_128.jpg","constantx_128.jpg","coreyginnivan_128.jpg","coreyhaggard_128.jpg","coreyweb_128.jpg","craigelimeliah_128.jpg","craighenneberry_128.jpg","craigrcoles_128.jpg","creartinc_128.jpg","croakx_128.jpg","curiousoffice_128.jpg","curiousonaut_128.jpg","cybind_128.jpg","cynthiasavard_128.jpg","cyril_gaillard_128.jpg","d00maz_128.jpg","d33pthought_128.jpg","d_kobelyatsky_128.jpg","d_nny_m_cher_128.jpg","dactrtr_128.jpg","dahparra_128.jpg","dallasbpeters_128.jpg","damenleeturks_128.jpg","danillos_128.jpg","daniloc_128.jpg","danmartin70_128.jpg","dannol_128.jpg","danpliego_128.jpg","danro_128.jpg","dansowter_128.jpg","danthms_128.jpg","danvernon_128.jpg","danvierich_128.jpg","darcystonge_128.jpg","darylws_128.jpg","davecraige_128.jpg","davidbaldie_128.jpg","davidcazalis_128.jpg","davidhemphill_128.jpg","davidmerrique_128.jpg","davidsasda_128.jpg","dawidwu_128.jpg","daykiine_128.jpg","dc_user_128.jpg","dcalonaci_128.jpg","ddggccaa_128.jpg","de_ascanio_128.jpg","deeenright_128.jpg","demersdesigns_128.jpg","denisepires_128.jpg","depaulawagner_128.jpg","derekcramer_128.jpg","derekebradley_128.jpg","derienzo777_128.jpg","desastrozo_128.jpg","designervzm_128.jpg","dev_essentials_128.jpg","devankoshal_128.jpg","deviljho__128.jpg","devinhalladay_128.jpg","dgajjar_128.jpg","dgclegg_128.jpg","dhilipsiva_128.jpg","dhoot_amit_128.jpg","dhooyenga_128.jpg","dhrubo_128.jpg","diansigitp_128.jpg","dicesales_128.jpg","diesellaws_128.jpg","digitalmaverick_128.jpg","dimaposnyy_128.jpg","dingyi_128.jpg","divya_128.jpg","dixchen_128.jpg","djsherman_128.jpg","dmackerman_128.jpg","dmitriychuta_128.jpg","dnezkumar_128.jpg","dnirmal_128.jpg","donjain_128.jpg","doooon_128.jpg","doronmalki_128.jpg","dorphern_128.jpg","dotgridline_128.jpg","dparrelli_128.jpg","dpmachado_128.jpg","dreizle_128.jpg","drewbyreese_128.jpg","dshster_128.jpg","dss49_128.jpg","dudestein_128.jpg","duivvv_128.jpg","dutchnadia_128.jpg","dvdwinden_128.jpg","dzantievm_128.jpg","ecommerceil_128.jpg","eddiechen_128.jpg","edgarchris99_128.jpg","edhenderson_128.jpg","edkf_128.jpg","edobene_128.jpg","eduardostuart_128.jpg","ehsandiary_128.jpg","eitarafa_128.jpg","el_fuertisimo_128.jpg","elbuscainfo_128.jpg","elenadissi_128.jpg","elisabethkjaer_128.jpg","elliotlewis_128.jpg","elliotnolten_128.jpg","embrcecreations_128.jpg","emileboudeling_128.jpg","emmandenn_128.jpg","emmeffess_128.jpg","emsgulam_128.jpg","enda_128.jpg","enjoythetau_128.jpg","enricocicconi_128.jpg","envex_128.jpg","ernestsemerda_128.jpg","erwanhesry_128.jpg","estebanuribe_128.jpg","eugeneeweb_128.jpg","evandrix_128.jpg","evanshajed_128.jpg","exentrich_128.jpg","eyronn_128.jpg","fabbianz_128.jpg","fabbrucci_128.jpg","faisalabid_128.jpg","falconerie_128.jpg","falling_soul_128.jpg","falvarad_128.jpg","felipeapiress_128.jpg","felipecsl_128.jpg","ffbel_128.jpg","finchjke_128.jpg","findingjenny_128.jpg","fiterik_128.jpg","fjaguero_128.jpg","flashmurphy_128.jpg","flexrs_128.jpg","foczzi_128.jpg","fotomagin_128.jpg","fran_mchamy_128.jpg","francis_vega_128.jpg","franciscoamk_128.jpg","frankiefreesbie_128.jpg","fronx_128.jpg","funwatercat_128.jpg","g3d_128.jpg","gaborenton_128.jpg","gabrielizalo_128.jpg","gabrielrosser_128.jpg","ganserene_128.jpg","garand_128.jpg","gauchomatt_128.jpg","gauravjassal_128.jpg","gavr1l0_128.jpg","gcmorley_128.jpg","gearpixels_128.jpg","geneseleznev_128.jpg","geobikas_128.jpg","geran7_128.jpg","geshan_128.jpg","giancarlon_128.jpg","gipsy_raf_128.jpg","giuliusa_128.jpg","gizmeedevil1991_128.jpg","gkaam_128.jpg","gmourier_128.jpg","goddardlewis_128.jpg","gofrasdesign_128.jpg","gojeanyn_128.jpg","gonzalorobaina_128.jpg","grahamkennery_128.jpg","greenbes_128.jpg","gregkilian_128.jpg","gregrwilkinson_128.jpg","gregsqueeb_128.jpg","grrr_nl_128.jpg","gseguin_128.jpg","gt_128.jpg","gu5taf_128.jpg","guiiipontes_128.jpg","guillemboti_128.jpg","guischmitt_128.jpg","gusoto_128.jpg","h1brd_128.jpg","hafeeskhan_128.jpg","hai_ninh_nguyen_128.jpg","haligaliharun_128.jpg","hanna_smi_128.jpg","happypeter1983_128.jpg","harry_sistalam_128.jpg","haruintesettden_128.jpg","hasslunsford_128.jpg","haydn_woods_128.jpg","helderleal_128.jpg","hellofeverrrr_128.jpg","her_ruu_128.jpg","herbigt_128.jpg","herkulano_128.jpg","hermanobrother_128.jpg","herrhaase_128.jpg","heycamtaylor_128.jpg","heyimjuani_128.jpg","heykenneth_128.jpg","hfalucas_128.jpg","hgharrygo_128.jpg","hiemil_128.jpg","hjartstrorn_128.jpg","hoangloi_128.jpg","holdenweb_128.jpg","homka_128.jpg","horaciobella_128.jpg","hota_v_128.jpg","hsinyo23_128.jpg","hugocornejo_128.jpg","hugomano_128.jpg","iamgarth_128.jpg","iamglimy_128.jpg","iamjdeleon_128.jpg","iamkarna_128.jpg","iamkeithmason_128.jpg","iamsteffen_128.jpg","id835559_128.jpg","idiot_128.jpg","iduuck_128.jpg","ifarafonow_128.jpg","igorgarybaldi_128.jpg","illyzoren_128.jpg","ilya_pestov_128.jpg","imammuht_128.jpg","imcoding_128.jpg","imomenui_128.jpg","imsoper_128.jpg","increase_128.jpg","incubo82_128.jpg","instalox_128.jpg","ionuss_128.jpg","ipavelek_128.jpg","iqbalperkasa_128.jpg","iqonicd_128.jpg","irae_128.jpg","isaacfifth_128.jpg","isacosta_128.jpg","ismail_biltagi_128.jpg","isnifer_128.jpg","itolmach_128.jpg","itsajimithing_128.jpg","itskawsar_128.jpg","itstotallyamy_128.jpg","ivanfilipovbg_128.jpg","j04ntoh_128.jpg","j2deme_128.jpg","j_drake__128.jpg","jackiesaik_128.jpg","jacksonlatka_128.jpg","jacobbennett_128.jpg","jagan123_128.jpg","jakemoore_128.jpg","jamiebrittain_128.jpg","janpalounek_128.jpg","jarjan_128.jpg","jarsen_128.jpg","jasonmarkjones_128.jpg","javorszky_128.jpg","jay_wilburn_128.jpg","jayphen_128.jpg","jayrobinson_128.jpg","jcubic_128.jpg","jedbridges_128.jpg","jefffis_128.jpg","jeffgolenski_128.jpg","jehnglynn_128.jpg","jennyshen_128.jpg","jennyyo_128.jpg","jeremery_128.jpg","jeremiaha_128.jpg","jeremiespoken_128.jpg","jeremymouton_128.jpg","jeremyshimko_128.jpg","jeremyworboys_128.jpg","jerrybai1907_128.jpg","jervo_128.jpg","jesseddy_128.jpg","jffgrdnr_128.jpg","jghyllebert_128.jpg","jimmuirhead_128.jpg","jitachi_128.jpg","jjshaw14_128.jpg","jjsiii_128.jpg","jlsolerdeltoro_128.jpg","jm_denis_128.jpg","jmfsocial_128.jpg","jmillspaysbills_128.jpg","jnmnrd_128.jpg","joannefournier_128.jpg","joaoedumedeiros_128.jpg","jodytaggart_128.jpg","joe_black_128.jpg","joelcipriano_128.jpg","joelhelin_128.jpg","joemdesign_128.jpg","joetruesdell_128.jpg","joeymurdah_128.jpg","johannesneu_128.jpg","johncafazza_128.jpg","johndezember_128.jpg","johnriordan_128.jpg","johnsmithagency_128.jpg","joki4_128.jpg","jomarmen_128.jpg","jonathansimmons_128.jpg","jonkspr_128.jpg","jonsgotwood_128.jpg","jordyvdboom_128.jpg","joreira_128.jpg","josecarlospsh_128.jpg","josemarques_128.jpg","josep_martins_128.jpg","josevnclch_128.jpg","joshaustin_128.jpg","joshhemsley_128.jpg","joshmedeski_128.jpg","joshuaraichur_128.jpg","joshuasortino_128.jpg","jpenico_128.jpg","jpscribbles_128.jpg","jqiuss_128.jpg","juamperro_128.jpg","juangomezw_128.jpg","juanmamartinez_128.jpg","juaumlol_128.jpg","judzhin_miles_128.jpg","justinrgraham_128.jpg","justinrhee_128.jpg","justinrob_128.jpg","justme_timothyg_128.jpg","jwalter14_128.jpg","jydesign_128.jpg","kaelifa_128.jpg","kalmerrautam_128.jpg","kamal_chaneman_128.jpg","kanickairaj_128.jpg","kapaluccio_128.jpg","karalek_128.jpg","karlkanall_128.jpg","karolkrakowiak__128.jpg","karsh_128.jpg","karthipanraj_128.jpg","kaspernordkvist_128.jpg","katiemdaly_128.jpg","kaysix_dizzy_128.jpg","kazaky999_128.jpg","kennyadr_128.jpg","kerem_128.jpg","kerihenare_128.jpg","keryilmaz_128.jpg","kevinjohndayy_128.jpg","kevinoh_128.jpg","kevka_128.jpg","keyuri85_128.jpg","kianoshp_128.jpg","kijanmaharjan_128.jpg","kikillo_128.jpg","kimcool_128.jpg","kinday_128.jpg","kirangopal_128.jpg","kiwiupover_128.jpg","kkusaa_128.jpg","klefue_128.jpg","klimmka_128.jpg","knilob_128.jpg","kohette_128.jpg","kojourin_128.jpg","kolage_128.jpg","kolmarlopez_128.jpg","kolsvein_128.jpg","konus_128.jpg","koridhandy_128.jpg","kosmar_128.jpg","kostaspt_128.jpg","krasnoukhov_128.jpg","krystalfister_128.jpg","kucingbelang4_128.jpg","kudretkeskin_128.jpg","kuldarkalvik_128.jpg","kumarrajan12123_128.jpg","kurafire_128.jpg","kurtinc_128.jpg","kushsolitary_128.jpg","kvasnic_128.jpg","ky_128.jpg","kylefoundry_128.jpg","kylefrost_128.jpg","laasli_128.jpg","lanceguyatt_128.jpg","langate_128.jpg","larrybolt_128.jpg","larrygerard_128.jpg","laurengray_128.jpg","lawlbwoy_128.jpg","layerssss_128.jpg","leandrovaranda_128.jpg","lebinoclard_128.jpg","lebronjennan_128.jpg","leehambley_128.jpg","leeiio_128.jpg","leemunroe_128.jpg","leonfedotov_128.jpg","lepetitogre_128.jpg","lepinski_128.jpg","levisan_128.jpg","lewisainslie_128.jpg","lhausermann_128.jpg","liminha_128.jpg","lingeswaran_128.jpg","linkibol_128.jpg","linux29_128.jpg","lisovsky_128.jpg","llun_128.jpg","lmjabreu_128.jpg","loganjlambert_128.jpg","logorado_128.jpg","lokesh_coder_128.jpg","lonesomelemon_128.jpg","longlivemyword_128.jpg","looneydoodle_128.jpg","lososina_128.jpg","louis_currie_128.jpg","low_res_128.jpg","lowie_128.jpg","lu4sh1i_128.jpg","ludwiczakpawel_128.jpg","luxe_128.jpg","lvovenok_128.jpg","m4rio_128.jpg","m_kalibry_128.jpg","ma_tiax_128.jpg","mactopus_128.jpg","macxim_128.jpg","madcampos_128.jpg","madebybrenton_128.jpg","madebyvadim_128.jpg","madewulf_128.jpg","madshensel_128.jpg","madysondesigns_128.jpg","magoo04_128.jpg","magugzbrand2d_128.jpg","mahdif_128.jpg","mahmoudmetwally_128.jpg","maikelk_128.jpg","maiklam_128.jpg","malgordon_128.jpg","malykhinv_128.jpg","mandalareopens_128.jpg","manekenthe_128.jpg","mangosango_128.jpg","manigm_128.jpg","marakasina_128.jpg","marciotoledo_128.jpg","marclgonzales_128.jpg","marcobarbosa_128.jpg","marcomano__128.jpg","marcoramires_128.jpg","marcusgorillius_128.jpg","markjenkins_128.jpg","marklamb_128.jpg","markolschesky_128.jpg","markretzloff_128.jpg","markwienands_128.jpg","marlinjayakody_128.jpg","marosholly_128.jpg","marrimo_128.jpg","marshallchen__128.jpg","martinansty_128.jpg","martip07_128.jpg","mashaaaaal_128.jpg","mastermindesign_128.jpg","matbeedotcom_128.jpg","mateaodviteza_128.jpg","matkins_128.jpg","matt3224_128.jpg","mattbilotti_128.jpg","mattdetails_128.jpg","matthewkay__128.jpg","mattlat_128.jpg","mattsapii_128.jpg","mauriolg_128.jpg","maximseshuk_128.jpg","maximsorokin_128.jpg","maxlinderman_128.jpg","maz_128.jpg","mbilalsiddique1_128.jpg","mbilderbach_128.jpg","mcflydesign_128.jpg","mds_128.jpg","mdsisto_128.jpg","meelford_128.jpg","megdraws_128.jpg","mekal_128.jpg","meln1ks_128.jpg","melvindidit_128.jpg","mfacchinello_128.jpg","mgonto_128.jpg","mhaligowski_128.jpg","mhesslow_128.jpg","mhudobivnik_128.jpg","michaelabehsera_128.jpg","michaelbrooksjr_128.jpg","michaelcolenso_128.jpg","michaelcomiskey_128.jpg","michaelkoper_128.jpg","michaelmartinho_128.jpg","michalhron_128.jpg","michigangraham_128.jpg","michzen_128.jpg","mighty55_128.jpg","miguelkooreman_128.jpg","miguelmendes_128.jpg","mikaeljorhult_128.jpg","mikebeecham_128.jpg","mikemai2awesome_128.jpg","millinet_128.jpg","mirfanqureshi_128.jpg","missaaamy_128.jpg","mizhgan_128.jpg","mizko_128.jpg","mkginfo_128.jpg","mocabyte_128.jpg","mohanrohith_128.jpg","moscoz_128.jpg","motionthinks_128.jpg","moynihan_128.jpg","mr_shiznit_128.jpg","mr_subtle_128.jpg","mrebay007_128.jpg","mrjamesnoble_128.jpg","mrmartineau_128.jpg","mrxloka_128.jpg","mslarkina_128.jpg","msveet_128.jpg","mtolokonnikov_128.jpg","mufaddal_mw_128.jpg","mugukamil_128.jpg","muridrahhal_128.jpg","muringa_128.jpg","murrayswift_128.jpg","mutlu82_128.jpg","mutu_krish_128.jpg","mvdheuvel_128.jpg","mwarkentin_128.jpg","myastro_128.jpg","mylesb_128.jpg","mymyboy_128.jpg","n1ght_coder_128.jpg","n3dmax_128.jpg","n_tassone_128.jpg","nacho_128.jpg","naitanamoreno_128.jpg","namankreative_128.jpg","nandini_m_128.jpg","nasirwd_128.jpg","nastya_mane_128.jpg","nateschulte_128.jpg","nathalie_fs_128.jpg","naupintos_128.jpg","nbirckel_128.jpg","nckjrvs_128.jpg","necodymiconer_128.jpg","nehfy_128.jpg","nellleo_128.jpg","nelshd_128.jpg","nelsonjoyce_128.jpg","nemanjaivanovic_128.jpg","nepdud_128.jpg","nerdgr8_128.jpg","nerrsoft_128.jpg","nessoila_128.jpg","netonet_il_128.jpg","newbrushes_128.jpg","nfedoroff_128.jpg","nickfratter_128.jpg","nicklacke_128.jpg","nicolai_larsen_128.jpg","nicolasfolliot_128.jpg","nicoleglynn_128.jpg","nicollerich_128.jpg","nilshelmersson_128.jpg","nilshoenson_128.jpg","ninjad3m0_128.jpg","nitinhayaran_128.jpg","nomidesigns_128.jpg","normanbox_128.jpg","notbadart_128.jpg","noufalibrahim_128.jpg","noxdzine_128.jpg","nsamoylov_128.jpg","ntfblog_128.jpg","nutzumi_128.jpg","nvkznemo_128.jpg","nwdsha_128.jpg","nyancecom_128.jpg","oaktreemedia_128.jpg","okandungel_128.jpg","okansurreel_128.jpg","okcoker_128.jpg","oksanafrewer_128.jpg","okseanjay_128.jpg","oktayelipek_128.jpg","olaolusoga_128.jpg","olgary_128.jpg","omnizya_128.jpg","ooomz_128.jpg","operatino_128.jpg","opnsrce_128.jpg","orkuncaylar_128.jpg","oscarowusu_128.jpg","oskamaya_128.jpg","oskarlevinson_128.jpg","osmanince_128.jpg","osmond_128.jpg","ostirbu_128.jpg","osvaldas_128.jpg","otozk_128.jpg","ovall_128.jpg","overcloacked_128.jpg","overra_128.jpg","panchajanyag_128.jpg","panghal0_128.jpg","patrickcoombe_128.jpg","paulfarino_128.jpg","pcridesagain_128.jpg","peachananr_128.jpg","pechkinator_128.jpg","peejfancher_128.jpg","pehamondello_128.jpg","perfectflow_128.jpg","perretmagali_128.jpg","petar_prog_128.jpg","petebernardo_128.jpg","peter576_128.jpg","peterlandt_128.jpg","petrangr_128.jpg","phillapier_128.jpg","picard102_128.jpg","pierre_nel_128.jpg","pierrestoffe_128.jpg","pifagor_128.jpg","pixage_128.jpg","plasticine_128.jpg","plbabin_128.jpg","pmeissner_128.jpg","polarity_128.jpg","ponchomendivil_128.jpg","poormini_128.jpg","popey_128.jpg","posterjob_128.jpg","praveen_vijaya_128.jpg","prheemo_128.jpg","primozcigler_128.jpg","prinzadi_128.jpg","privetwagner_128.jpg","prrstn_128.jpg","psaikali_128.jpg","psdesignuk_128.jpg","puzik_128.jpg","pyronite_128.jpg","quailandquasar_128.jpg","r_garcia_128.jpg","r_oy_128.jpg","rachelreveley_128.jpg","rahmeen_128.jpg","ralph_lam_128.jpg","ramanathan_pdy_128.jpg","randomlies_128.jpg","rangafangs_128.jpg","raphaelnikson_128.jpg","raquelwilson_128.jpg","ratbus_128.jpg","rawdiggie_128.jpg","rdbannon_128.jpg","rdsaunders_128.jpg","reabo101_128.jpg","reetajayendra_128.jpg","rehatkathuria_128.jpg","reideiredale_128.jpg","renbyrd_128.jpg","rez___a_128.jpg","ricburton_128.jpg","richardgarretts_128.jpg","richwild_128.jpg","rickdt_128.jpg","rickyyean_128.jpg","rikas_128.jpg","ripplemdk_128.jpg","rmlewisuk_128.jpg","rob_thomas10_128.jpg","robbschiller_128.jpg","robergd_128.jpg","robinclediere_128.jpg","robinlayfield_128.jpg","robturlinckx_128.jpg","rodnylobos_128.jpg","rohixx_128.jpg","romanbulah_128.jpg","roxanejammet_128.jpg","roybarberuk_128.jpg","rpatey_128.jpg","rpeezy_128.jpg","rtgibbons_128.jpg","rtyukmaev_128.jpg","rude_128.jpg","ruehldesign_128.jpg","runningskull_128.jpg","russell_baylis_128.jpg","russoedu_128.jpg","ruzinav_128.jpg","rweve_128.jpg","ryandownie_128.jpg","ryanjohnson_me_128.jpg","ryankirkman_128.jpg","ryanmclaughlin_128.jpg","ryhanhassan_128.jpg","ryuchi311_128.jpg","s4f1_128.jpg","saarabpreet_128.jpg","sachacorazzi_128.jpg","sachingawas_128.jpg","safrankov_128.jpg","sainraja_128.jpg","salimianoff_128.jpg","salleedesign_128.jpg","salvafc_128.jpg","samgrover_128.jpg","samihah_128.jpg","samscouto_128.jpg","samuelkraft_128.jpg","sandywoodruff_128.jpg","sangdth_128.jpg","santi_urso_128.jpg","saschadroste_128.jpg","saschamt_128.jpg","sasha_shestakov_128.jpg","saulihirvi_128.jpg","sawalazar_128.jpg","sawrb_128.jpg","sbtransparent_128.jpg","scips_128.jpg","scott_riley_128.jpg","scottfeltham_128.jpg","scottgallant_128.jpg","scottiedude_128.jpg","scottkclark_128.jpg","scrapdnb_128.jpg","sdidonato_128.jpg","sebashton_128.jpg","sementiy_128.jpg","serefka_128.jpg","sergeyalmone_128.jpg","sergeysafonov_128.jpg","sethlouey_128.jpg","seyedhossein1_128.jpg","sgaurav_baghel_128.jpg","shadeed9_128.jpg","shalt0ni_128.jpg","shaneIxD_128.jpg","shanehudson_128.jpg","sharvin_128.jpg","shesgared_128.jpg","shinze_128.jpg","shoaib253_128.jpg","shojberg_128.jpg","shvelo96_128.jpg","silv3rgvn_128.jpg","silvanmuhlemann_128.jpg","simobenso_128.jpg","sindresorhus_128.jpg","sircalebgrove_128.jpg","skkirilov_128.jpg","slowspock_128.jpg","smaczny_128.jpg","smalonso_128.jpg","smenov_128.jpg","snowshade_128.jpg","snowwrite_128.jpg","sokaniwaal_128.jpg","solid_color_128.jpg","souperphly_128.jpg","souuf_128.jpg","sovesove_128.jpg","soyjavi_128.jpg","spacewood__128.jpg","spbroma_128.jpg","spedwig_128.jpg","sprayaga_128.jpg","sreejithexp_128.jpg","ssbb_me_128.jpg","ssiskind_128.jpg","sta1ex_128.jpg","stalewine_128.jpg","stan_128.jpg","stayuber_128.jpg","stefanotirloni_128.jpg","stefanozoffoli_128.jpg","stefooo_128.jpg","stefvdham_128.jpg","stephcoue_128.jpg","sterlingrules_128.jpg","stevedesigner_128.jpg","steynviljoen_128.jpg","strikewan_128.jpg","stushona_128.jpg","sulaqo_128.jpg","sunlandictwin_128.jpg","sunshinedgirl_128.jpg","superoutman_128.jpg","supervova_128.jpg","supjoey_128.jpg","suprb_128.jpg","sur4dye_128.jpg","surgeonist_128.jpg","suribbles_128.jpg","svenlen_128.jpg","swaplord_128.jpg","sweetdelisa_128.jpg","switmer777_128.jpg","swooshycueb_128.jpg","sydlawrence_128.jpg","syropian_128.jpg","tanveerrao_128.jpg","taybenlor_128.jpg","taylorling_128.jpg","tbakdesigns_128.jpg","teddyzetterlund_128.jpg","teeragit_128.jpg","tereshenkov_128.jpg","terpimost_128.jpg","terrorpixel_128.jpg","terryxlife_128.jpg","teylorfeliz_128.jpg","tgerken_128.jpg","tgormtx_128.jpg","thaisselenator__128.jpg","thaodang17_128.jpg","thatonetommy_128.jpg","the_purplebunny_128.jpg","the_winslet_128.jpg","thedamianhdez_128.jpg","thedjpetersen_128.jpg","thehacker_128.jpg","thekevinjones_128.jpg","themadray_128.jpg","themikenagle_128.jpg","themrdave_128.jpg","theonlyzeke_128.jpg","therealmarvin_128.jpg","thewillbeard_128.jpg","thiagovernetti_128.jpg","thibaut_re_128.jpg","thierrykoblentz_128.jpg","thierrymeier__128.jpg","thimo_cz_128.jpg","thinkleft_128.jpg","thomasgeisen_128.jpg","thomasschrijer_128.jpg","timgthomas_128.jpg","timmillwood_128.jpg","timothycd_128.jpg","timpetricola_128.jpg","tjrus_128.jpg","to_soham_128.jpg","tobysaxon_128.jpg","toddrew_128.jpg","tom_even_128.jpg","tomas_janousek_128.jpg","tonymillion_128.jpg","traneblow_128.jpg","travis_arnold_128.jpg","travishines_128.jpg","tristanlegros_128.jpg","trubeatto_128.jpg","trueblood_33_128.jpg","tumski_128.jpg","tur8le_128.jpg","turkutuuli_128.jpg","tweetubhai_128.jpg","twittypork_128.jpg","txcx_128.jpg","uberschizo_128.jpg","ultragex_128.jpg","umurgdk_128.jpg","unterdreht_128.jpg","urrutimeoli_128.jpg","uxalex_128.jpg","uxpiper_128.jpg","uxward_128.jpg","vanchesz_128.jpg","vaughanmoffitt_128.jpg","vc27_128.jpg","vicivadeline_128.jpg","victorDubugras_128.jpg","victor_haydin_128.jpg","victordeanda_128.jpg","victorerixon_128.jpg","victorquinn_128.jpg","victorstuber_128.jpg","vigobronx_128.jpg","vijaykarthik_128.jpg","vikashpathak18_128.jpg","vikasvinfotech_128.jpg","vimarethomas_128.jpg","vinciarts_128.jpg","vitor376_128.jpg","vitorleal_128.jpg","vivekprvr_128.jpg","vj_demien_128.jpg","vladarbatov_128.jpg","vladimirdevic_128.jpg","vladyn_128.jpg","vlajki_128.jpg","vm_f_128.jpg","vocino_128.jpg","vonachoo_128.jpg","vovkasolovev_128.jpg","vytautas_a_128.jpg","waghner_128.jpg","wake_gs_128.jpg","we_social_128.jpg","wearesavas_128.jpg","weavermedia_128.jpg","webtanya_128.jpg","weglov_128.jpg","wegotvices_128.jpg","wesleytrankin_128.jpg","wikiziner_128.jpg","wiljanslofstra_128.jpg","wim1k_128.jpg","wintopia_128.jpg","woodsman001_128.jpg","woodydotmx_128.jpg","wtrsld_128.jpg","xadhix_128.jpg","xalionmalik_128.jpg","xamorep_128.jpg","xiel_128.jpg","xilantra_128.jpg","xravil_128.jpg","xripunov_128.jpg","xtopherpaul_128.jpg","y2graphic_128.jpg","yalozhkin_128.jpg","yassiryahya_128.jpg","yayteejay_128.jpg","yecidsm_128.jpg","yehudab_128.jpg","yesmeck_128.jpg","yigitpinarbasi_128.jpg","zackeeler_128.jpg","zaki3d_128.jpg","zauerkraut_128.jpg","zforrester_128.jpg","zvchkelly_128.jpg"],rn=bc;var kc={email:en,domain:tn,avatar:rn},sn=kc;var wc={female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna","Rebecca","Virginia","Kathleen","Pamela","Martha","Debra","Amanda","Stephanie","Carolyn","Christine","Marie","Janet","Catherine","Frances","Ann","Joyce","Diane","Alice","Julie","Heather","Teresa","Doris","Gloria","Evelyn","Jean","Cheryl","Mildred","Katherine","Joan","Ashley","Judith","Rose","Janice","Kelly","Nicole","Judy","Christina","Kathy","Theresa","Beverly","Denise","Tammy","Irene","Jane","Lori","Rachel","Marilyn","Andrea","Kathryn","Louise","Sara","Anne","Jacqueline","Wanda","Bonnie","Julia","Ruby","Lois","Tina","Phyllis","Norma","Paula","Diana","Annie","Lillian","Emily","Robin","Peggy","Crystal","Gladys","Rita","Dawn","Connie","Florence","Tracy","Edna","Tiffany","Carmen","Rosa","Cindy","Grace","Wendy","Victoria","Edith","Kim","Sherry","Sylvia","Josephine","Thelma","Shannon","Sheila","Ethel","Ellen","Elaine","Marjorie","Carrie","Charlotte","Monica","Esther","Pauline","Emma","Juanita","Anita","Rhonda","Hazel","Amber","Eva","Debbie","April","Leslie","Clara","Lucille","Jamie","Joanne","Eleanor","Valerie","Danielle","Megan","Alicia","Suzanne","Michele","Gail","Bertha","Darlene","Veronica","Jill","Erin","Geraldine","Lauren","Cathy","Joann","Lorraine","Lynn","Sally","Regina","Erica","Beatrice","Dolores","Bernice","Audrey","Yvonne","Annette","June","Samantha","Marion","Dana","Stacy","Ana","Renee","Ida","Vivian","Roberta","Holly","Brittany","Melanie","Loretta","Yolanda","Jeanette","Laurie","Katie","Kristen","Vanessa","Alma","Sue","Elsie","Beth","Jeanne","Vicki","Carla","Tara","Rosemary","Eileen","Terri","Gertrude","Lucy","Tonya","Ella","Stacey","Wilma","Gina","Kristin","Jessie","Natalie","Agnes","Vera","Willie","Charlene","Bessie","Delores","Melinda","Pearl","Arlene","Maureen","Colleen","Allison","Tamara","Joy","Georgia","Constance","Lillie","Claudia","Jackie","Marcia","Tanya","Nellie","Minnie","Marlene","Heidi","Glenda","Lydia","Viola","Courtney","Marian","Stella","Caroline","Dora","Jo","Vickie","Mattie","Terry","Maxine","Irma","Mabel","Marsha","Myrtle","Lena","Christy","Deanna","Patsy","Hilda","Gwendolyn","Jennie","Nora","Margie","Nina","Cassandra","Leah","Penny","Kay","Priscilla","Naomi","Carole","Brandy","Olga","Billie","Dianne","Tracey","Leona","Jenny","Felicia","Sonia","Miriam","Velma","Becky","Bobbie","Violet","Kristina","Toni","Misty","Mae","Shelly","Daisy","Ramona","Sherri","Erika","Katrina","Claire","Lindsey","Lindsay","Geneva","Guadalupe","Belinda","Margarita","Sheryl","Cora","Faye","Ada","Natasha","Sabrina","Isabel","Marguerite","Hattie","Harriet","Molly","Cecilia","Kristi","Brandi","Blanche","Sandy","Rosie","Joanna","Iris","Eunice","Angie","Inez","Lynda","Madeline","Amelia","Alberta","Genevieve","Monique","Jodi","Janie","Maggie","Kayla","Sonya","Jan","Lee","Kristine","Candace","Fannie","Maryann","Opal","Alison","Yvette","Melody","Luz","Susie","Olivia","Flora","Shelley","Kristy","Mamie","Lula","Lola","Verna","Beulah","Antoinette","Candice","Juana","Jeannette","Pam","Kelli","Hannah","Whitney","Bridget","Karla","Celia","Latoya","Patty","Shelia","Gayle","Della","Vicky","Lynne","Sheri","Marianne","Kara","Jacquelyn","Erma","Blanca","Myra","Leticia","Pat","Krista","Roxanne","Angelica","Johnnie","Robyn","Francis","Adrienne","Rosalie","Alexandra","Brooke","Bethany","Sadie","Bernadette","Traci","Jody","Kendra","Jasmine","Nichole","Rachael","Chelsea","Mable","Ernestine","Muriel","Marcella","Elena","Krystal","Angelina","Nadine","Kari","Estelle","Dianna","Paulette","Lora","Mona","Doreen","Rosemarie","Angel","Desiree","Antonia","Hope","Ginger","Janis","Betsy","Christie","Freda","Mercedes","Meredith","Lynette","Teri","Cristina","Eula","Leigh","Meghan","Sophia","Eloise","Rochelle","Gretchen","Cecelia","Raquel","Henrietta","Alyssa","Jana","Kelley","Gwen","Kerry","Jenna","Tricia","Laverne","Olive","Alexis","Tasha","Silvia","Elvira","Casey","Delia","Sophie","Kate","Patti","Lorena","Kellie","Sonja","Lila","Lana","Darla","May","Mindy","Essie","Mandy","Lorene","Elsa","Josefina","Jeannie","Miranda","Dixie","Lucia","Marta","Faith","Lela","Johanna","Shari","Camille","Tami","Shawna","Elisa","Ebony","Melba","Ora","Nettie","Tabitha","Ollie","Jaime","Winifred","Kristie"],male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric","Stephen","Andrew","Raymond","Gregory","Joshua","Jerry","Dennis","Walter","Patrick","Peter","Harold","Douglas","Henry","Carl","Arthur","Ryan","Roger","Joe","Juan","Jack","Albert","Jonathan","Justin","Terry","Gerald","Keith","Samuel","Willie","Ralph","Lawrence","Nicholas","Roy","Benjamin","Bruce","Brandon","Adam","Harry","Fred","Wayne","Billy","Steve","Louis","Jeremy","Aaron","Randy","Howard","Eugene","Carlos","Russell","Bobby","Victor","Martin","Ernest","Phillip","Todd","Jesse","Craig","Alan","Shawn","Clarence","Sean","Philip","Chris","Johnny","Earl","Jimmy","Antonio","Danny","Bryan","Tony","Luis","Mike","Stanley","Leonard","Nathan","Dale","Manuel","Rodney","Curtis","Norman","Allen","Marvin","Vincent","Glenn","Jeffery","Travis","Jeff","Chad","Jacob","Lee","Melvin","Alfred","Kyle","Francis","Bradley","Jesus","Herbert","Frederick","Ray","Joel","Edwin","Don","Eddie","Ricky","Troy","Randall","Barry","Alexander","Bernard","Mario","Leroy","Francisco","Marcus","Micheal","Theodore","Clifford","Miguel","Oscar","Jay","Jim","Tom","Calvin","Alex","Jon","Ronnie","Bill","Lloyd","Tommy","Leon","Derek","Warren","Darrell","Jerome","Floyd","Leo","Alvin","Tim","Wesley","Gordon","Dean","Greg","Jorge","Dustin","Pedro","Derrick","Dan","Lewis","Zachary","Corey","Herman","Maurice","Vernon","Roberto","Clyde","Glen","Hector","Shane","Ricardo","Sam","Rick","Lester","Brent","Ramon","Charlie","Tyler","Gilbert","Gene","Marc","Reginald","Ruben","Brett","Angel","Nathaniel","Rafael","Leslie","Edgar","Milton","Raul","Ben","Chester","Cecil","Duane","Franklin","Andre","Elmer","Brad","Gabriel","Ron","Mitchell","Roland","Arnold","Harvey","Jared","Adrian","Karl","Cory","Claude","Erik","Darryl","Jamie","Neil","Jessie","Christian","Javier","Fernando","Clinton","Ted","Mathew","Tyrone","Darren","Lonnie","Lance","Cody","Julio","Kelly","Kurt","Allan","Nelson","Guy","Clayton","Hugh","Max","Dwayne","Dwight","Armando","Felix","Jimmie","Everett","Jordan","Ian","Wallace","Ken","Bob","Jaime","Casey","Alfredo","Alberto","Dave","Ivan","Johnnie","Sidney","Byron","Julian","Isaac","Morris","Clifton","Willard","Daryl","Ross","Virgil","Andy","Marshall","Salvador","Perry","Kirk","Sergio","Marion","Tracy","Seth","Kent","Terrance","Rene","Eduardo","Terrence","Enrique","Freddie","Wade","Austin","Stuart","Fredrick","Arturo","Alejandro","Jackie","Joey","Nick","Luther","Wendell","Jeremiah","Evan","Julius","Dana","Donnie","Otis","Shannon","Trevor","Oliver","Luke","Homer","Gerard","Doug","Kenny","Hubert","Angelo","Shaun","Lyle","Matt","Lynn","Alfonso","Orlando","Rex","Carlton","Ernesto","Cameron","Neal","Pablo","Lorenzo","Omar","Wilbur","Blake","Grant","Horace","Roderick","Kerry","Abraham","Willis","Rickey","Jean","Ira","Andres","Cesar","Johnathan","Malcolm","Rudolph","Damon","Kelvin","Rudy","Preston","Alton","Archie","Marco","Wm","Pete","Randolph","Garry","Geoffrey","Jonathon","Felipe","Bennie","Gerardo","Ed","Dominic","Robin","Loren","Delbert","Colin","Guillermo","Earnest","Lucas","Benny","Noel","Spencer","Rodolfo","Myron","Edmund","Garrett","Salvatore","Cedric","Lowell","Gregg","Sherman","Wilson","Devin","Sylvester","Kim","Roosevelt","Israel","Jermaine","Forrest","Wilbert","Leland","Simon","Guadalupe","Clark","Irving","Carroll","Bryant","Owen","Rufus","Woodrow","Sammy","Kristopher","Mack","Levi","Marcos","Gustavo","Jake","Lionel","Marty","Taylor","Ellis","Dallas","Gilberto","Clint","Nicolas","Laurence","Ismael","Orville","Drew","Jody","Ervin","Dewey","Al","Wilfred","Josh","Hugo","Ignacio","Caleb","Tomas","Sheldon","Erick","Frankie","Stewart","Doyle","Darrel","Rogelio","Terence","Santiago","Alonzo","Elias","Bert","Elbert","Ramiro","Conrad","Pat","Noah","Grady","Phil","Cornelius","Lamar","Rolando","Clay","Percy","Dexter","Bradford","Merle","Darin","Amos","Terrell","Moses","Irvin","Saul","Roman","Darnell","Randal","Tommie","Timmy","Darrin","Winston","Brendan","Toby","Van","Abel","Dominick","Boyd","Courtney","Jan","Emilio","Elijah","Cary","Domingo","Santos","Aubrey","Emmett","Marlon","Emanuel","Jerald","Edmond"]},an=wc;var Zs=["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"],vc={general:Zs,female:Zs,male:Zs},nn=vc;var _c={binary:["Female","Male"],pool:["Asexual","Female to male trans man","Female to male transgender man","Female to male transsexual man","F2M","Gender neutral","Hermaphrodite","Intersex man","Intersex person","Intersex woman","Male to female trans woman","Male to female transgender woman","Male to female transsexual woman","Man","M2F","Polygender","T* man","T* woman","Two* person","Two-spirit person","Woman","Agender","Androgyne","Androgynes","Androgynous","Bigender","Cis","Cis Female","Cis Male","Cis Man","Cis Woman","Cisgender","Cisgender Female","Cisgender Male","Cisgender Man","Cisgender Woman","Female to Male","FTM","Gender Fluid","Gender Nonconforming","Gender Questioning","Gender Variant","Genderqueer","Intersex","Male to Female","MTF","Neither","Neutrois","Non-binary","Other","Pangender","Trans","Trans Female","Trans Male","Trans Man","Trans Person","Trans*Female","Trans*Male","Trans*Man","Trans*Person","Trans*Woman","Transexual","Transexual Female","Transexual Male","Transexual Man","Transexual Person","Transexual Woman","Transgender Female","Transgender Person","Transmasculine","Two-spirit"]},on=_c;var Sc={descriptor:["Lead","Senior","Direct","Corporate","Dynamic","Future","Product","National","Regional","District","Central","Global","Customer","Investor","Dynamic","International","Legacy","Forward","Internal","Human","Chief","Principal"],level:["Solutions","Program","Brand","Security","Research","Marketing","Directives","Implementation","Integration","Functionality","Response","Paradigm","Tactics","Identity","Markets","Group","Division","Applications","Optimization","Operations","Infrastructure","Intranet","Communications","Web","Branding","Quality","Assurance","Mobility","Accounts","Data","Creative","Configuration","Accountability","Interactions","Factors","Usability","Metrics"],job:["Supervisor","Associate","Executive","Liaison","Officer","Manager","Engineer","Specialist","Director","Coordinator","Administrator","Architect","Analyst","Designer","Planner","Orchestrator","Technician","Developer","Producer","Consultant","Assistant","Facilitator","Agent","Representative","Strategist"]},ln=Sc;var Qs=["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"],Ac={gender:on,firstName:an,lastName:nn,title:ln,suffix:{general:Qs,female:Qs,male:Qs},prefix:{general:["Mr.","Mrs.","Ms.","Miss","Dr."],female:["Mrs.","Ms.","Miss"],male:["Mr.","Dr."]},templates:["#{prefix} #{first_name} #{last_name}","#{first_name} #{last_name} #{suffix}","#{first_name} #{last_name}","#{first_name} #{last_name}","#{male_first_name} #{last_name}","#{female_first_name} #{last_name}"]},cn=Ac;var dn=["abandoned","able","absolute","adorable","adventurous","academic","acceptable","acclaimed","accomplished","accurate","aching","acidic","acrobatic","active","actual","adept","admirable","admired","adolescent","adorable","adored","advanced","afraid","affectionate","aged","aggravating","aggressive","agile","agitated","agonizing","agreeable","ajar","alarmed","alarming","alert","alienated","alive","all","altruistic","amazing","ambitious","ample","amused","amusing","anchored","ancient","angelic","angry","anguished","animated","annual","another","antique","anxious","any","apprehensive","appropriate","apt","arctic","arid","aromatic","artistic","ashamed","assured","astonishing","athletic","attached","attentive","attractive","austere","authentic","authorized","automatic","avaricious","average","aware","awesome","awful","awkward","babyish","bad","back","baggy","bare","barren","basic","beautiful","belated","beloved","beneficial","better","best","bewitched","big","big-hearted","biodegradable","bite-sized","bitter","black","black-and-white","bland","blank","blaring","bleak","blind","blissful","blond","blue","blushing","bogus","boiling","bold","bony","boring","bossy","both","bouncy","bountiful","bowed","brave","breakable","brief","bright","brilliant","brisk","broken","bronze","brown","bruised","bubbly","bulky","bumpy","buoyant","burdensome","burly","bustling","busy","buttery","buzzing","calculating","calm","candid","canine","capital","carefree","careful","careless","caring","cautious","cavernous","celebrated","charming","cheap","cheerful","cheery","chief","chilly","chubby","circular","classic","clean","clear","clear-cut","clever","close","closed","cloudy","clueless","clumsy","cluttered","coarse","cold","colorful","colorless","colossal","comfortable","common","compassionate","competent","complete","complex","complicated","composed","concerned","concrete","confused","conscious","considerate","constant","content","conventional","cooked","cool","cooperative","coordinated","corny","corrupt","costly","courageous","courteous","crafty","crazy","creamy","creative","creepy","criminal","crisp","critical","crooked","crowded","cruel","crushing","cuddly","cultivated","cultured","cumbersome","curly","curvy","cute","cylindrical","damaged","damp","dangerous","dapper","daring","darling","dark","dazzling","dead","deadly","deafening","dear","dearest","decent","decimal","decisive","deep","defenseless","defensive","defiant","deficient","definite","definitive","delayed","delectable","delicious","delightful","delirious","demanding","dense","dental","dependable","dependent","descriptive","deserted","detailed","determined","devoted","different","difficult","digital","diligent","dim","dimpled","dimwitted","direct","disastrous","discrete","disfigured","disgusting","disloyal","dismal","distant","downright","dreary","dirty","disguised","dishonest","dismal","distant","distinct","distorted","dizzy","dopey","doting","double","downright","drab","drafty","dramatic","dreary","droopy","dry","dual","dull","dutiful","each","eager","earnest","early","easy","easy-going","ecstatic","edible","educated","elaborate","elastic","elated","elderly","electric","elegant","elementary","elliptical","embarrassed","embellished","eminent","emotional","empty","enchanted","enchanting","energetic","enlightened","enormous","enraged","entire","envious","equal","equatorial","essential","esteemed","ethical","euphoric","even","evergreen","everlasting","every","evil","exalted","excellent","exemplary","exhausted","excitable","excited","exciting","exotic","expensive","experienced","expert","extraneous","extroverted","extra-large","extra-small","fabulous","failing","faint","fair","faithful","fake","false","familiar","famous","fancy","fantastic","far","faraway","far-flung","far-off","fast","fat","fatal","fatherly","favorable","favorite","fearful","fearless","feisty","feline","female","feminine","few","fickle","filthy","fine","finished","firm","first","firsthand","fitting","fixed","flaky","flamboyant","flashy","flat","flawed","flawless","flickering","flimsy","flippant","flowery","fluffy","fluid","flustered","focused","fond","foolhardy","foolish","forceful","forked","formal","forsaken","forthright","fortunate","fragrant","frail","frank","frayed","free","french","fresh","frequent","friendly","frightened","frightening","frigid","frilly","frizzy","frivolous","front","frosty","frozen","frugal","fruitful","full","fumbling","functional","funny","fussy","fuzzy","gargantuan","gaseous","general","generous","gentle","genuine","giant","giddy","gigantic","gifted","giving","glamorous","glaring","glass","gleaming","gleeful","glistening","glittering","gloomy","glorious","glossy","glum","golden","good","good-natured","gorgeous","graceful","gracious","grand","grandiose","granular","grateful","grave","gray","great","greedy","green","gregarious","grim","grimy","gripping","grizzled","gross","grotesque","grouchy","grounded","growing","growling","grown","grubby","gruesome","grumpy","guilty","gullible","gummy","hairy","half","handmade","handsome","handy","happy","happy-go-lucky","hard","hard-to-find","harmful","harmless","harmonious","harsh","hasty","hateful","haunting","healthy","heartfelt","hearty","heavenly","heavy","hefty","helpful","helpless","hidden","hideous","high","high-level","hilarious","hoarse","hollow","homely","honest","honorable","honored","hopeful","horrible","hospitable","hot","huge","humble","humiliating","humming","humongous","hungry","hurtful","husky","icky","icy","ideal","idealistic","identical","idle","idiotic","idolized","ignorant","ill","illegal","ill-fated","ill-informed","illiterate","illustrious","imaginary","imaginative","immaculate","immaterial","immediate","immense","impassioned","impeccable","impartial","imperfect","imperturbable","impish","impolite","important","impossible","impractical","impressionable","impressive","improbable","impure","inborn","incomparable","incompatible","incomplete","inconsequential","incredible","indelible","inexperienced","indolent","infamous","infantile","infatuated","inferior","infinite","informal","innocent","insecure","insidious","insignificant","insistent","instructive","insubstantial","intelligent","intent","intentional","interesting","internal","international","intrepid","ironclad","irresponsible","irritating","itchy","jaded","jagged","jam-packed","jaunty","jealous","jittery","joint","jolly","jovial","joyful","joyous","jubilant","judicious","juicy","jumbo","junior","jumpy","juvenile","kaleidoscopic","keen","key","kind","kindhearted","kindly","klutzy","knobby","knotty","knowledgeable","knowing","known","kooky","kosher","lame","lanky","large","last","lasting","late","lavish","lawful","lazy","leading","lean","leafy","left","legal","legitimate","light","lighthearted","likable","likely","limited","limp","limping","linear","lined","liquid","little","live","lively","livid","loathsome","lone","lonely","long","long-term","loose","lopsided","lost","loud","lovable","lovely","loving","low","loyal","lucky","lumbering","luminous","lumpy","lustrous","luxurious","mad","made-up","magnificent","majestic","major","male","mammoth","married","marvelous","masculine","massive","mature","meager","mealy","mean","measly","meaty","medical","mediocre","medium","meek","mellow","melodic","memorable","menacing","merry","messy","metallic","mild","milky","mindless","miniature","minor","minty","miserable","miserly","misguided","misty","mixed","modern","modest","moist","monstrous","monthly","monumental","moral","mortified","motherly","motionless","mountainous","muddy","muffled","multicolored","mundane","murky","mushy","musty","muted","mysterious","naive","narrow","nasty","natural","naughty","nautical","near","neat","necessary","needy","negative","neglected","negligible","neighboring","nervous","new","next","nice","nifty","nimble","nippy","nocturnal","noisy","nonstop","normal","notable","noted","noteworthy","novel","noxious","numb","nutritious","nutty","obedient","obese","oblong","oily","oblong","obvious","occasional","odd","oddball","offbeat","offensive","official","old","old-fashioned","only","open","optimal","optimistic","opulent","orange","orderly","organic","ornate","ornery","ordinary","original","other","our","outlying","outgoing","outlandish","outrageous","outstanding","oval","overcooked","overdue","overjoyed","overlooked","palatable","pale","paltry","parallel","parched","partial","passionate","past","pastel","peaceful","peppery","perfect","perfumed","periodic","perky","personal","pertinent","pesky","pessimistic","petty","phony","physical","piercing","pink","pitiful","plain","plaintive","plastic","playful","pleasant","pleased","pleasing","plump","plush","polished","polite","political","pointed","pointless","poised","poor","popular","portly","posh","positive","possible","potable","powerful","powerless","practical","precious","present","prestigious","pretty","precious","previous","pricey","prickly","primary","prime","pristine","private","prize","probable","productive","profitable","profuse","proper","proud","prudent","punctual","pungent","puny","pure","purple","pushy","putrid","puzzled","puzzling","quaint","qualified","quarrelsome","quarterly","queasy","querulous","questionable","quick","quick-witted","quiet","quintessential","quirky","quixotic","quizzical","radiant","ragged","rapid","rare","rash","raw","recent","reckless","rectangular","ready","real","realistic","reasonable","red","reflecting","regal","regular","reliable","relieved","remarkable","remorseful","remote","repentant","required","respectful","responsible","repulsive","revolving","rewarding","rich","rigid","right","ringed","ripe","roasted","robust","rosy","rotating","rotten","rough","round","rowdy","royal","rubbery","rundown","ruddy","rude","runny","rural","rusty","sad","safe","salty","same","sandy","sane","sarcastic","sardonic","satisfied","scaly","scarce","scared","scary","scented","scholarly","scientific","scornful","scratchy","scrawny","second","secondary","second-hand","secret","self-assured","self-reliant","selfish","sentimental","separate","serene","serious","serpentine","several","severe","shabby","shadowy","shady","shallow","shameful","shameless","sharp","shimmering","shiny","shocked","shocking","shoddy","short","short-term","showy","shrill","shy","sick","silent","silky","silly","silver","similar","simple","simplistic","sinful","single","sizzling","skeletal","skinny","sleepy","slight","slim","slimy","slippery","slow","slushy","small","smart","smoggy","smooth","smug","snappy","snarling","sneaky","sniveling","snoopy","sociable","soft","soggy","solid","somber","some","spherical","sophisticated","sore","sorrowful","soulful","soupy","sour","spanish","sparkling","sparse","specific","spectacular","speedy","spicy","spiffy","spirited","spiteful","splendid","spotless","spotted","spry","square","squeaky","squiggly","stable","staid","stained","stale","standard","starchy","stark","starry","steep","sticky","stiff","stimulating","stingy","stormy","straight","strange","steel","strict","strident","striking","striped","strong","studious","stunning","stupendous","stupid","sturdy","stylish","subdued","submissive","substantial","subtle","suburban","sudden","sugary","sunny","super","superb","superficial","superior","supportive","sure-footed","surprised","suspicious","svelte","sweaty","sweet","sweltering","swift","sympathetic","tall","talkative","tame","tan","tangible","tart","tasty","tattered","taut","tedious","teeming","tempting","tender","tense","tepid","terrible","terrific","testy","thankful","that","these","thick","thin","third","thirsty","this","thorough","thorny","those","thoughtful","threadbare","thrifty","thunderous","tidy","tight","timely","tinted","tiny","tired","torn","total","tough","traumatic","treasured","tremendous","tragic","trained","tremendous","triangular","tricky","trifling","trim","trivial","troubled","true","trusting","trustworthy","trusty","truthful","tubby","turbulent","twin","ugly","ultimate","unacceptable","unaware","uncomfortable","uncommon","unconscious","understated","unequaled","uneven","unfinished","unfit","unfolded","unfortunate","unhappy","unhealthy","uniform","unimportant","unique","united","unkempt","unknown","unlawful","unlined","unlucky","unnatural","unpleasant","unrealistic","unripe","unruly","unselfish","unsightly","unsteady","unsung","untidy","untimely","untried","untrue","unused","unusual","unwelcome","unwieldy","unwilling","unwitting","unwritten","upbeat","upright","upset","urban","usable","used","useful","useless","utilized","utter","vacant","vague","vain","valid","valuable","vapid","variable","vast","velvety","venerated","vengeful","verifiable","vibrant","vicious","victorious","vigilant","vigorous","villainous","violet","violent","virtual","virtuous","visible","vital","vivacious","vivid","voluminous","wan","warlike","warm","warmhearted","warped","wary","wasteful","watchful","waterlogged","watery","wavy","wealthy","weak","weary","webbed","wee","weekly","weepy","weighty","weird","welcome","well-documented","well-groomed","well-informed","well-lit","well-made","well-off","well-to-do","well-worn","wet","which","whimsical","whirlwind","whispered","white","whole","whopping","wicked","wide","wide-eyed","wiggly","wild","willing","wilted","winding","windy","winged","wiry","wise","witty","wobbly","woeful","wonderful","wooden","woozy","wordy","worldly","worn","worried","worrisome","worse","worst","worthless","worthwhile","worthy","wrathful","wretched","writhing","wrong","wry","yawning","yearly","yellow","yellowish","young","youthful","yummy","zany","zealous","zesty","zigzag"];var pn=["abnormally","absentmindedly","accidentally","acidly","actually","adventurously","afterwards","almost","always","angrily","annually","anxiously","arrogantly","awkwardly","badly","bashfully","beautifully","bitterly","bleakly","blindly","blissfully","boastfully","boldly","bravely","briefly","brightly","briskly","broadly","busily","calmly","carefully","carelessly","cautiously","certainly","cheerfully","clearly","cleverly","closely","coaxingly","colorfully","commonly","continually","coolly","correctly","courageously","crossly","cruelly","curiously","daily","daintily","dearly","deceivingly","deeply","defiantly","deliberately","delightfully","diligently","dimly","doubtfully","dreamily","easily","elegantly","energetically","enormously","enthusiastically","equally","especially","even","evenly","eventually","exactly","excitedly","extremely","fairly","faithfully","famously","far","fast","fatally","ferociously","fervently","fiercely","fondly","foolishly","fortunately","frankly","frantically","freely","frenetically","frightfully","fully","furiously","generally","generously","gently","gladly","gleefully","gracefully","gratefully","greatly","greedily","happily","hastily","healthily","heavily","helpfully","helplessly","highly","honestly","hopelessly","hourly","hungrily","immediately","innocently","inquisitively","instantly","intensely","intently","interestingly","inwardly","irritably","jaggedly","jealously","joshingly","jovially","joyfully","joyously","jubilantly","judgementally","justly","keenly","kiddingly","kindheartedly","kindly","kissingly","knavishly","knottily","knowingly","knowledgeably","kookily","lazily","less","lightly","likely","limply","lively","loftily","longingly","loosely","loudly","lovingly","loyally","madly","majestically","meaningfully","mechanically","merrily","miserably","mockingly","monthly","more","mortally","mostly","mysteriously","naturally","nearly","neatly","needily","nervously","never","nicely","noisily","not","obediently","obnoxiously","oddly","offensively","officially","often","only","openly","optimistically","overconfidently","owlishly","painfully","partially","patiently","perfectly","physically","playfully","politely","poorly","positively","potentially","powerfully","promptly","properly","punctually","quaintly","quarrelsomely","queasily","queerly","questionably","questioningly","quicker","quickly","quietly","quirkily","quizzically","rapidly","rarely","readily","really","reassuringly","recklessly","regularly","reluctantly","repeatedly","reproachfully","restfully","righteously","rightfully","rigidly","roughly","rudely","sadly","safely","scarcely","scarily","searchingly","sedately","seemingly","seldom","selfishly","separately","seriously","shakily","sharply","sheepishly","shrilly","shyly","silently","sleepily","slowly","smoothly","softly","solemnly","solidly","sometimes","soon","speedily","stealthily","sternly","strictly","successfully","suddenly","surprisingly","suspiciously","sweetly","swiftly","sympathetically","tenderly","tensely","terribly","thankfully","thoroughly","thoughtfully","tightly","tomorrow","too","tremendously","triumphantly","truly","truthfully","ultimately","unabashedly","unaccountably","unbearably","unethically","unexpectedly","unfortunately","unimpressively","unnaturally","unnecessarily","upbeat","upliftingly","upright","upside-down","upward","upwardly","urgently","usefully","uselessly","usually","utterly","vacantly","vaguely","vainly","valiantly","vastly","verbally","very","viciously","victoriously","violently","vivaciously","voluntarily","warmly","weakly","wearily","well","wetly","wholly","wildly","willfully","wisely","woefully","wonderfully","worriedly","wrongly","yawningly","yearly","yearningly","yesterday","yieldingly","youthfully"];var un=["after","after all","although","and","as","as a result","as if","as long as","as much as","as soon as","as though","because","before","but","consequently","even","even if","even though","finally","for","for example","furthermore","hence","however","if","if only","if then","if when","in addition","in fact","in order that","inasmuch","incidentally","indeed","instead","just as","lest","likewise","meanwhile","nor","now","now since","now that","now when","once","or","provided","provided that","rather than","since","so","so that","supposing","that","though","until","whenever","whereas","wherever","which","who","yet"];var hn=["yuck","oh","phooey","blah","boo","whoa","yowza","huzzah","boo hoo","fooey","geez","pfft","ew","ah","yum","brr","hm","yahoo","aha","woot","drat","gah","meh","psst","aw","ugh","yippee","eek","gee","bah","gadzooks","duh","ha","mmm","tsk tsk","ouch","phew","ack","uh-huh","gosh","hmph","pish","zowie","er","ick","oof","um"];var mn=["ATM","CD","SUV","TV","aardvark","abacus","abbey","abbreviation","abdomen","ability","abnormality","abolishment","abortion","abrogation","absence","abundance","abuse","academics","academy","accelerant","accelerator","accent","acceptance","access","accessory","accident","accommodation","accompanist","accomplishment","accord","accordance","accordion","account","accountability","accountant","accounting","accuracy","accusation","acetate","achievement","achiever","acid","acknowledgment","acorn","acoustics","acquaintance","acquisition","acre","acrylic","act","action","activation","activist","activity","actor","actress","acupuncture","ad","adaptation","adapter","addiction","addition","address","adjective","adjustment","admin","administration","administrator","admire","admission","adobe","adoption","adrenalin","adrenaline","adult","adulthood","advance","advancement","advantage","advent","adverb","advertisement","advertising","advice","adviser","advocacy","advocate","affair","affect","affidavit","affiliate","affinity","afoul","afterlife","aftermath","afternoon","aftershave","aftershock","afterthought","age","agency","agenda","agent","aggradation","aggression","aglet","agony","agreement","agriculture","aid","aide","aim","air","airbag","airbus","aircraft","airfare","airfield","airforce","airline","airmail","airman","airplane","airport","airship","airspace","alarm","alb","albatross","album","alcohol","alcove","alder","ale","alert","alfalfa","algebra","algorithm","alias","alibi","alien","allegation","allergist","alley","alliance","alligator","allocation","allowance","alloy","alluvium","almanac","almighty","almond","alpaca","alpenglow","alpenhorn","alpha","alphabet","altar","alteration","alternative","altitude","alto","aluminium","aluminum","amazement","amazon","ambassador","amber","ambience","ambiguity","ambition","ambulance","amendment","amenity","ammunition","amnesty","amount","amusement","anagram","analgesia","analog","analogue","analogy","analysis","analyst","analytics","anarchist","anarchy","anatomy","ancestor","anchovy","android","anesthesiologist","anesthesiology","angel","anger","angina","angiosperm","angle","angora","angstrom","anguish","animal","anime","anise","ankle","anklet","anniversary","announcement","annual","anorak","answer","ant","anteater","antecedent","antechamber","antelope","antennae","anterior","anthropology","antibody","anticipation","anticodon","antigen","antique","antiquity","antler","antling","anxiety","anybody","anyone","anything","anywhere","apartment","ape","aperitif","apology","app","apparatus","apparel","appeal","appearance","appellation","appendix","appetiser","appetite","appetizer","applause","apple","applewood","appliance","application","appointment","appreciation","apprehension","approach","appropriation","approval","apricot","apron","apse","aquarium","aquifer","arcade","arch","arch-rival","archaeologist","archaeology","archeology","archer","architect","architecture","archives","area","arena","argument","arithmetic","ark","arm","arm-rest","armadillo","armament","armchair","armoire","armor","armour","armpit","armrest","army","arrangement","array","arrest","arrival","arrogance","arrow","art","artery","arthur","artichoke","article","artifact","artificer","artist","ascend","ascent","ascot","ash","ashram","ashtray","aside","asparagus","aspect","asphalt","aspic","ass","assassination","assault","assembly","assertion","assessment","asset","assignment","assist","assistance","assistant","associate","association","assumption","assurance","asterisk","astrakhan","astrolabe","astrologer","astrology","astronomy","asymmetry","atelier","atheist","athlete","athletics","atmosphere","atom","atrium","attachment","attack","attacker","attainment","attempt","attendance","attendant","attention","attenuation","attic","attitude","attorney","attraction","attribute","auction","audience","audit","auditorium","aunt","authentication","authenticity","author","authorisation","authority","authorization","auto","autoimmunity","automation","automaton","autumn","availability","avalanche","avenue","average","avocado","award","awareness","awe","axis","azimuth","babe","baboon","babushka","baby","bachelor","back","back-up","backbone","backburn","backdrop","background","backpack","backup","backyard","bacon","bacterium","badge","badger","bafflement","bag","bagel","baggage","baggie","baggy","bagpipe","bail","bait","bake","baker","bakery","bakeware","balaclava","balalaika","balance","balcony","ball","ballet","balloon","balloonist","ballot","ballpark","bamboo","ban","banana","band","bandana","bandanna","bandolier","bandwidth","bangle","banjo","bank","bankbook","banker","banking","bankruptcy","banner","banquette","banyan","baobab","bar","barbecue","barbeque","barber","barbiturate","bargain","barge","baritone","barium","bark","barley","barn","barometer","barracks","barrage","barrel","barrier","barstool","bartender","base","baseball","baseboard","baseline","basement","basics","basil","basin","basis","basket","basketball","bass","bassinet","bassoon","bat","bath","bather","bathhouse","bathrobe","bathroom","bathtub","battalion","batter","battery","batting","battle","battleship","bay","bayou","beach","bead","beak","beam","bean","beancurd","beanie","beanstalk","bear","beard","beast","beastie","beat","beating","beauty","beaver","beck","bed","bedrock","bedroom","bee","beech","beef","beer","beet","beetle","beggar","beginner","beginning","begonia","behalf","behavior","behaviour","beheading","behest","behold","being","belfry","belief","believer","bell","belligerency","bellows","belly","belt","bench","bend","beneficiary","benefit","beret","berry","best-seller","bestseller","bet","beverage","beyond","bias","bibliography","bicycle","bid","bidder","bidding","bidet","bifocals","bijou","bike","bikini","bill","billboard","billing","billion","bin","binoculars","biology","biopsy","biosphere","biplane","birch","bird","bird-watcher","birdbath","birdcage","birdhouse","birth","birthday","biscuit","bit","bite","bitten","bitter","black","blackberry","blackbird","blackboard","blackfish","blackness","bladder","blade","blame","blank","blanket","blast","blazer","blend","blessing","blight","blind","blinker","blister","blizzard","block","blocker","blog","blogger","blood","bloodflow","bloom","bloomer","blossom","blouse","blow","blowgun","blowhole","blue","blueberry","blush","boar","board","boat","boatload","boatyard","bob","bobcat","body","bog","bolero","bolt","bomb","bomber","bombing","bond","bonding","bondsman","bone","bonfire","bongo","bonnet","bonsai","bonus","boogeyman","book","bookcase","bookend","booking","booklet","bookmark","boolean","boom","boon","boost","booster","boot","bootee","bootie","booty","border","bore","borrower","borrowing","bosom","boss","botany","bother","bottle","bottling","bottom","bottom-line","boudoir","bough","boulder","boulevard","boundary","bouquet","bourgeoisie","bout","boutique","bow","bower","bowl","bowler","bowling","bowtie","box","boxer","boxspring","boy","boycott","boyfriend","boyhood","boysenberry","bra","brace","bracelet","bracket","brain","brake","bran","branch","brand","brandy","brass","brassiere","bratwurst","bread","breadcrumb","breadfruit","break","breakdown","breakfast","breakpoint","breakthrough","breast","breastplate","breath","breeze","brewer","bribery","brick","bricklaying","bride","bridge","brief","briefing","briefly","briefs","brilliant","brink","brisket","broad","broadcast","broccoli","brochure","brocolli","broiler","broker","bronchitis","bronco","bronze","brooch","brood","brook","broom","brother","brother-in-law","brow","brown","brownie","browser","browsing","brunch","brush","brushfire","brushing","bubble","buck","bucket","buckle","buckwheat","bud","buddy","budget","buffalo","buffer","buffet","bug","buggy","bugle","builder","building","bulb","bulk","bull","bull-fighter","bulldozer","bullet","bump","bumper","bun","bunch","bungalow","bunghole","bunkhouse","burden","bureau","burglar","burial","burlesque","burn","burn-out","burning","burrito","burro","burrow","burst","bus","bush","business","businessman","bust","bustle","butane","butcher","butler","butter","butterfly","button","buy","buyer","buying","buzz","buzzard","c-clamp","cabana","cabbage","cabin","cabinet","cable","caboose","cacao","cactus","caddy","cadet","cafe","caffeine","caftan","cage","cake","calcification","calculation","calculator","calculus","calendar","calf","caliber","calibre","calico","call","calm","calorie","camel","cameo","camera","camp","campaign","campaigning","campanile","camper","campus","can","canal","cancer","candelabra","candidacy","candidate","candle","candy","cane","cannibal","cannon","canoe","canon","canopy","cantaloupe","canteen","canvas","cap","capability","capacity","cape","caper","capital","capitalism","capitulation","capon","cappelletti","cappuccino","captain","caption","captor","car","carabao","caramel","caravan","carbohydrate","carbon","carboxyl","card","cardboard","cardigan","care","career","cargo","caribou","carload","carnation","carnival","carol","carotene","carp","carpenter","carpet","carpeting","carport","carriage","carrier","carrot","carry","cart","cartel","carter","cartilage","cartload","cartoon","cartridge","carving","cascade","case","casement","cash","cashew","cashier","casino","casket","cassava","casserole","cassock","cast","castanet","castle","casualty","cat","catacomb","catalogue","catalysis","catalyst","catamaran","catastrophe","catch","catcher","category","caterpillar","cathedral","cation","catsup","cattle","cauliflower","causal","cause","causeway","caution","cave","caviar","cayenne","ceiling","celebration","celebrity","celeriac","celery","cell","cellar","cello","celsius","cement","cemetery","cenotaph","census","cent","center","centimeter","centre","centurion","century","cephalopod","ceramic","ceramics","cereal","ceremony","certainty","certificate","certification","cesspool","chafe","chain","chainstay","chair","chairlift","chairman","chairperson","chaise","chalet","chalice","chalk","challenge","chamber","champagne","champion","championship","chance","chandelier","change","channel","chaos","chap","chapel","chaplain","chapter","character","characteristic","characterization","chard","charge","charger","charity","charlatan","charm","charset","chart","charter","chasm","chassis","chastity","chasuble","chateau","chatter","chauffeur","chauvinist","check","checkbook","checking","checkout","checkroom","cheddar","cheek","cheer","cheese","cheesecake","cheetah","chef","chem","chemical","chemistry","chemotaxis","cheque","cherry","chess","chest","chestnut","chick","chicken","chicory","chief","chiffonier","child","childbirth","childhood","chili","chill","chime","chimpanzee","chin","chinchilla","chino","chip","chipmunk","chit-chat","chivalry","chive","chives","chocolate","choice","choir","choker","cholesterol","choosing","chop","chops","chopstick","chopsticks","chord","chorus","chow","chowder","chrome","chromolithograph","chronicle","chronograph","chronometer","chrysalis","chub","chuck","chug","church","churn","chutney","cicada","cigarette","cilantro","cinder","cinema","cinnamon","circadian","circle","circuit","circulation","circumference","circumstance","cirrhosis","cirrus","citizen","citizenship","citron","citrus","city","civilian","civilisation","civilization","claim","clam","clamp","clan","clank","clapboard","clarification","clarinet","clarity","clasp","class","classic","classification","classmate","classroom","clause","clave","clavicle","clavier","claw","clay","cleaner","clearance","clearing","cleat","cleavage","clef","cleft","clergyman","cleric","clerk","click","client","cliff","climate","climb","clinic","clip","clipboard","clipper","cloak","cloakroom","clock","clockwork","clogs","cloister","clone","close","closet","closing","closure","cloth","clothes","clothing","cloud","cloudburst","clove","clover","cloves","club","clue","cluster","clutch","co-producer","coach","coal","coalition","coast","coaster","coat","cob","cobbler","cobweb","cock","cockpit","cockroach","cocktail","cocoa","coconut","cod","code","codepage","codling","codon","codpiece","coevolution","cofactor","coffee","coffin","cohesion","cohort","coil","coin","coincidence","coinsurance","coke","cold","coleslaw","coliseum","collaboration","collagen","collapse","collar","collard","collateral","colleague","collection","collectivisation","collectivization","collector","college","collision","colloquy","colon","colonial","colonialism","colonisation","colonization","colony","color","colorlessness","colt","column","columnist","comb","combat","combination","combine","comeback","comedy","comestible","comfort","comfortable","comic","comics","comma","command","commander","commandment","comment","commerce","commercial","commission","commitment","committee","commodity","common","commonsense","commotion","communicant","communication","communion","communist","community","commuter","company","comparison","compass","compassion","compassionate","compensation","competence","competition","competitor","complaint","complement","completion","complex","complexity","compliance","complication","complicity","compliment","component","comportment","composer","composite","composition","compost","comprehension","compress","compromise","comptroller","compulsion","computer","comradeship","con","concentrate","concentration","concept","conception","concern","concert","conclusion","concrete","condition","conditioner","condominium","condor","conduct","conductor","cone","confectionery","conference","confidence","confidentiality","configuration","confirmation","conflict","conformation","confusion","conga","congo","congregation","congress","congressman","congressperson","conifer","connection","connotation","conscience","consciousness","consensus","consent","consequence","conservation","conservative","consideration","consignment","consist","consistency","console","consonant","conspiracy","conspirator","constant","constellation","constitution","constraint","construction","consul","consulate","consulting","consumer","consumption","contact","contact lens","contagion","container","content","contention","contest","context","continent","contingency","continuity","contour","contract","contractor","contrail","contrary","contrast","contribution","contributor","control","controller","controversy","convection","convenience","convention","conversation","conversion","convert","convertible","conviction","cook","cookbook","cookie","cooking","coonskin","cooperation","coordination","coordinator","cop","cop-out","cope","copper","copy","copying","copyright","copywriter","coral","cord","corduroy","core","cork","cormorant","corn","corner","cornerstone","cornet","cornflakes","cornmeal","corporal","corporation","corporatism","corps","corral","correspondence","correspondent","corridor","corruption","corsage","cosset","cost","costume","cot","cottage","cotton","couch","cougar","cough","council","councilman","councilor","councilperson","counsel","counseling","counselling","counsellor","counselor","count","counter","counter-force","counterpart","counterterrorism","countess","country","countryside","county","couple","coupon","courage","course","court","courthouse","courtroom","cousin","covariate","cover","coverage","coverall","cow","cowbell","cowboy","coyote","crab","crack","cracker","crackers","cradle","craft","craftsman","cranberry","crane","cranky","crap","crash","crate","cravat","craw","crawdad","crayfish","crayon","crazy","cream","creation","creationism","creationist","creative","creativity","creator","creature","creche","credential","credenza","credibility","credit","creditor","creek","creme brulee","crepe","crest","crew","crewman","crewmate","crewmember","crewmen","cria","crib","cribbage","cricket","cricketer","crime","criminal","crinoline","crisis","crisp","criteria","criterion","critic","criticism","crocodile","crocus","croissant","crook","crop","cross","cross-contamination","cross-stitch","crotch","croup","crow","crowd","crown","crucifixion","crude","cruelty","cruise","crumb","crunch","crusader","crush","crust","cry","crystal","crystallography","cub","cube","cuckoo","cucumber","cue","cuff-link","cuisine","cultivar","cultivator","culture","culvert","cummerbund","cup","cupboard","cupcake","cupola","curd","cure","curio","curiosity","curl","curler","currant","currency","current","curriculum","curry","curse","cursor","curtailment","curtain","curve","cushion","custard","custody","custom","customer","cut","cuticle","cutlet","cutover","cutting","cyclamen","cycle","cyclone","cyclooxygenase","cygnet","cylinder","cymbal","cynic","cyst","cytokine","cytoplasm","dad","daddy","daffodil","dagger","dahlia","daikon","daily","dairy","daisy","dam","damage","dame","damn","dance","dancer","dancing","dandelion","danger","dare","dark","darkness","darn","dart","dash","dashboard","data","database","date","daughter","dawn","day","daybed","daylight","dead","deadline","deal","dealer","dealing","dearest","death","deathwatch","debate","debris","debt","debtor","decade","decadence","decency","decimal","decision","decision-making","deck","declaration","declination","decline","decoder","decongestant","decoration","decrease","decryption","dedication","deduce","deduction","deed","deep","deer","default","defeat","defendant","defender","defense","deficit","definition","deformation","degradation","degree","delay","deliberation","delight","delivery","demand","democracy","democrat","demon","demur","den","denim","denominator","density","dentist","deodorant","department","departure","dependency","dependent","deployment","deposit","deposition","depot","depression","depressive","depth","deputy","derby","derivation","derivative","derrick","descendant","descent","description","desert","design","designation","designer","desire","desk","desktop","dessert","destination","destiny","destroyer","destruction","detail","detainee","detainment","detection","detective","detector","detention","determination","detour","devastation","developer","developing","development","developmental","deviance","deviation","device","devil","dew","dhow","diabetes","diadem","diagnosis","diagram","dial","dialect","dialogue","diam","diamond","diaper","diaphragm","diarist","diary","dibble","dick","dickey","dictaphone","dictator","diction","dictionary","die","diesel","diet","difference","differential","difficulty","diffuse","dig","digestion","digestive","digger","digging","digit","dignity","dilapidation","dill","dilution","dime","dimension","dimple","diner","dinghy","dining","dinner","dinosaur","dioxide","dip","diploma","diplomacy","dipstick","direction","directive","director","directory","dirndl","dirt","disability","disadvantage","disagreement","disappointment","disarmament","disaster","discharge","discipline","disclaimer","disclosure","disco","disconnection","discount","discourse","discovery","discrepancy","discretion","discrimination","discussion","disdain","disease","disembodiment","disengagement","disguise","disgust","dish","dishwasher","disk","disparity","dispatch","displacement","display","disposal","disposer","disposition","dispute","disregard","disruption","dissemination","dissonance","distance","distinction","distortion","distribution","distributor","district","divalent","divan","diver","diversity","divide","dividend","divider","divine","diving","division","divorce","doc","dock","doctor","doctorate","doctrine","document","documentary","documentation","doe","dog","doggie","dogsled","dogwood","doing","doll","dollar","dollop","dolman","dolor","dolphin","domain","dome","domination","donation","donkey","donor","donut","door","doorbell","doorknob","doorpost","doorway","dory","dose","dot","double","doubling","doubt","doubter","dough","doughnut","down","downfall","downforce","downgrade","download","downstairs","downtown","downturn","dozen","draft","drag","dragon","dragonfly","dragonfruit","dragster","drain","drainage","drake","drama","dramaturge","drapes","draw","drawbridge","drawer","drawing","dream","dreamer","dredger","dress","dresser","dressing","drill","drink","drinking","drive","driver","driveway","driving","drizzle","dromedary","drop","drudgery","drug","drum","drummer","drunk","dryer","duck","duckling","dud","dude","due","duel","dueling","duffel","dugout","dulcimer","dumbwaiter","dump","dump truck","dune","dune buggy","dungarees","dungeon","duplexer","duration","durian","dusk","dust","dust storm","duster","duty","dwarf","dwell","dwelling","dynamics","dynamite","dynamo","dynasty","dysfunction","e-book","e-mail","e-reader","eagle","eaglet","ear","eardrum","earmuffs","earnings","earplug","earring","earrings","earth","earthquake","earthworm","ease","easel","east","eating","eaves","eavesdropper","ecclesia","echidna","eclipse","ecliptic","ecology","economics","economy","ecosystem","ectoderm","ectodermal","ecumenist","eddy","edge","edger","edible","editing","edition","editor","editorial","education","eel","effacement","effect","effective","effectiveness","effector","efficacy","efficiency","effort","egg","egghead","eggnog","eggplant","ego","eicosanoid","ejector","elbow","elderberry","election","electricity","electrocardiogram","electronics","element","elephant","elevation","elevator","eleventh","elf","elicit","eligibility","elimination","elite","elixir","elk","ellipse","elm","elongation","elver","email","emanate","embarrassment","embassy","embellishment","embossing","embryo","emerald","emergence","emergency","emergent","emery","emission","emitter","emotion","emphasis","empire","employ","employee","employer","employment","empowerment","emu","enactment","encirclement","enclave","enclosure","encounter","encouragement","encyclopedia","end","endive","endoderm","endorsement","endothelium","endpoint","enemy","energy","enforcement","engagement","engine","engineer","engineering","enigma","enjoyment","enquiry","enrollment","enterprise","entertainment","enthusiasm","entirety","entity","entrance","entree","entrepreneur","entry","envelope","environment","envy","enzyme","epauliere","epee","ephemera","ephemeris","ephyra","epic","episode","epithelium","epoch","eponym","epoxy","equal","equality","equation","equinox","equipment","equity","equivalent","era","eraser","erection","erosion","error","escalator","escape","escort","espadrille","espalier","essay","essence","essential","establishment","estate","estimate","estrogen","estuary","eternity","ethernet","ethics","ethnicity","ethyl","euphonium","eurocentrism","evaluation","evaluator","evaporation","eve","evening","evening-wear","event","everybody","everyone","everything","eviction","evidence","evil","evocation","evolution","ex-husband","ex-wife","exaggeration","exam","examination","examiner","example","exasperation","excellence","exception","excerpt","excess","exchange","excitement","exclamation","excursion","excuse","execution","executive","executor","exercise","exhaust","exhaustion","exhibit","exhibition","exile","existence","exit","exocrine","expansion","expansionism","expectancy","expectation","expedition","expense","experience","experiment","experimentation","expert","expertise","explanation","exploration","explorer","explosion","export","expose","exposition","exposure","expression","extension","extent","exterior","external","extinction","extreme","extremist","eye","eyeball","eyebrow","eyebrows","eyeglasses","eyelash","eyelashes","eyelid","eyelids","eyeliner","eyestrain","eyrie","fabric","face","facelift","facet","facility","facsimile","fact","factor","factory","faculty","fahrenheit","fail","failure","fairness","fairy","faith","faithful","fall","fallacy","falling-out","fame","familiar","familiarity","family","fan","fang","fanlight","fanny","fanny-pack","fantasy","farm","farmer","farming","farmland","farrow","fascia","fashion","fat","fate","father","father-in-law","fatigue","fatigues","faucet","fault","fav","fava","favor","favorite","fawn","fax","fear","feast","feather","feature","fedelini","federation","fedora","fee","feed","feedback","feeding","feel","feeling","fellow","felony","female","fen","fence","fencing","fender","feng","fennel","ferret","ferry","ferryboat","fertilizer","festival","fetus","few","fiber","fiberglass","fibre","fibroblast","fibrosis","ficlet","fiction","fiddle","field","fiery","fiesta","fifth","fig","fight","fighter","figure","figurine","file","filing","fill","fillet","filly","film","filter","filth","final","finance","financing","finding","fine","finer","finger","fingerling","fingernail","finish","finisher","fir","fire","fireman","fireplace","firewall","firm","first","fish","fishbone","fisherman","fishery","fishing","fishmonger","fishnet","fisting","fit","fitness","fix","fixture","flag","flair","flame","flan","flanker","flare","flash","flat","flatboat","flavor","flax","fleck","fledgling","fleece","flesh","flexibility","flick","flicker","flight","flint","flintlock","flip-flops","flock","flood","floodplain","floor","floozie","flour","flow","flower","flu","flugelhorn","fluke","flume","flung","flute","fly","flytrap","foal","foam","fob","focus","fog","fold","folder","folk","folklore","follower","following","fondue","font","food","foodstuffs","fool","foot","footage","football","footnote","footprint","footrest","footstep","footstool","footwear","forage","forager","foray","force","ford","forearm","forebear","forecast","forehead","foreigner","forelimb","forest","forestry","forever","forgery","fork","form","formal","formamide","format","formation","former","formicarium","formula","fort","forte","fortnight","fortress","fortune","forum","foundation","founder","founding","fountain","fourths","fowl","fox","foxglove","fraction","fragrance","frame","framework","fratricide","fraud","fraudster","freak","freckle","freedom","freelance","freezer","freezing","freight","freighter","frenzy","freon","frequency","fresco","friction","fridge","friend","friendship","fries","frigate","fright","fringe","fritter","frock","frog","front","frontier","frost","frosting","frown","fruit","frustration","fry","fuck","fuel","fugato","fulfillment","full","fun","function","functionality","fund","funding","fundraising","funeral","fur","furnace","furniture","furry","fusarium","futon","future","gadget","gaffe","gaffer","gain","gaiters","gale","gall-bladder","gallery","galley","gallon","galoshes","gambling","game","gamebird","gaming","gamma-ray","gander","gang","gap","garage","garb","garbage","garden","garlic","garment","garter","gas","gasket","gasoline","gasp","gastronomy","gastropod","gate","gateway","gather","gathering","gator","gauge","gauntlet","gavel","gazebo","gazelle","gear","gearshift","geek","gel","gelatin","gelding","gem","gemsbok","gender","gene","general","generation","generator","generosity","genetics","genie","genius","genocide","genre","gentleman","geography","geology","geometry","geranium","gerbil","gesture","geyser","gherkin","ghost","giant","gift","gig","gigantism","giggle","ginger","gingerbread","ginseng","giraffe","girdle","girl","girlfriend","git","glacier","gladiolus","glance","gland","glass","glasses","glee","glen","glider","gliding","glimpse","globe","glockenspiel","gloom","glory","glove","glow","glucose","glue","glut","glutamate","gnat","gnu","go-kart","goal","goat","gobbler","god","goddess","godfather","godmother","godparent","goggles","going","gold","goldfish","golf","gondola","gong","good","good-bye","goodbye","goodie","goodness","goodnight","goodwill","goose","gopher","gorilla","gosling","gossip","governance","government","governor","gown","grab-bag","grace","grade","gradient","graduate","graduation","graffiti","graft","grain","gram","grammar","gran","grand","grandchild","granddaughter","grandfather","grandma","grandmom","grandmother","grandpa","grandparent","grandson","granny","granola","grant","grape","grapefruit","graph","graphic","grasp","grass","grasshopper","grassland","gratitude","gravel","gravitas","gravity","gravy","gray","grease","great-grandfather","great-grandmother","greatness","greed","green","greenhouse","greens","grenade","grey","grid","grief","grill","grin","grip","gripper","grit","grocery","ground","group","grouper","grouse","grove","growth","grub","guacamole","guarantee","guard","guava","guerrilla","guess","guest","guestbook","guidance","guide","guideline","guilder","guilt","guilty","guinea","guitar","guitarist","gum","gumshoe","gun","gunpowder","gutter","guy","gym","gymnast","gymnastics","gynaecology","gyro","habit","habitat","hacienda","hacksaw","hackwork","hail","hair","haircut","hake","half","half-brother","half-sister","halibut","hall","halloween","hallway","halt","ham","hamburger","hammer","hammock","hamster","hand","hand-holding","handball","handful","handgun","handicap","handle","handlebar","handmaiden","handover","handrail","handsaw","hanger","happening","happiness","harald","harbor","harbour","hard-hat","hardboard","hardcover","hardening","hardhat","hardship","hardware","hare","harm","harmonica","harmonise","harmonize","harmony","harp","harpooner","harpsichord","harvest","harvester","hash","hashtag","hassock","haste","hat","hatbox","hatchet","hatchling","hate","hatred","haunt","haven","haversack","havoc","hawk","hay","haze","hazel","hazelnut","head","headache","headlight","headline","headphones","headquarters","headrest","health","health-care","hearing","hearsay","heart","heart-throb","heartache","heartbeat","hearth","hearthside","heartwood","heat","heater","heating","heaven","heavy","hectare","hedge","hedgehog","heel","heifer","height","heir","heirloom","helicopter","helium","hell","hellcat","hello","helmet","helo","help","hemisphere","hemp","hen","hepatitis","herb","herbs","heritage","hermit","hero","heroine","heron","herring","hesitation","heterosexual","hexagon","heyday","hiccups","hide","hierarchy","high","high-rise","highland","highlight","highway","hike","hiking","hill","hint","hip","hippodrome","hippopotamus","hire","hiring","historian","history","hit","hive","hobbit","hobby","hockey","hoe","hog","hold","holder","hole","holiday","home","homeland","homeownership","hometown","homework","homicide","homogenate","homonym","homosexual","homosexuality","honesty","honey","honeybee","honeydew","honor","honoree","hood","hoof","hook","hop","hope","hops","horde","horizon","hormone","horn","hornet","horror","horse","horseradish","horst","hose","hosiery","hospice","hospital","hospitalisation","hospitality","hospitalization","host","hostel","hostess","hotdog","hotel","hound","hour","hourglass","house","houseboat","household","housewife","housework","housing","hovel","hovercraft","howard","howitzer","hub","hubcap","hubris","hug","hugger","hull","human","humanity","humidity","hummus","humor","humour","hunchback","hundred","hunger","hunt","hunter","hunting","hurdle","hurdler","hurricane","hurry","hurt","husband","hut","hutch","hyacinth","hybridisation","hybridization","hydrant","hydraulics","hydrocarb","hydrocarbon","hydrofoil","hydrogen","hydrolyse","hydrolysis","hydrolyze","hydroxyl","hyena","hygienic","hype","hyphenation","hypochondria","hypothermia","hypothesis","ice","ice-cream","iceberg","icebreaker","icecream","icicle","icing","icon","icy","id","idea","ideal","identification","identity","ideology","idiom","idiot","igloo","ignorance","ignorant","ikebana","illegal","illiteracy","illness","illusion","illustration","image","imagination","imbalance","imitation","immigrant","immigration","immortal","impact","impairment","impala","impediment","implement","implementation","implication","import","importance","impostor","impress","impression","imprisonment","impropriety","improvement","impudence","impulse","in-joke","in-laws","inability","inauguration","inbox","incandescence","incarnation","incense","incentive","inch","incidence","incident","incision","inclusion","income","incompetence","inconvenience","increase","incubation","independence","independent","index","indication","indicator","indigence","individual","industrialisation","industrialization","industry","inequality","inevitable","infancy","infant","infarction","infection","infiltration","infinite","infix","inflammation","inflation","influence","influx","info","information","infrastructure","infusion","inglenook","ingrate","ingredient","inhabitant","inheritance","inhibition","inhibitor","initial","initialise","initialize","initiative","injunction","injury","injustice","ink","inlay","inn","innervation","innocence","innocent","innovation","input","inquiry","inscription","insect","insectarium","insert","inside","insight","insolence","insomnia","inspection","inspector","inspiration","installation","instance","instant","instinct","institute","institution","instruction","instructor","instrument","instrumentalist","instrumentation","insulation","insurance","insurgence","insurrection","integer","integral","integration","integrity","intellect","intelligence","intensity","intent","intention","intentionality","interaction","interchange","interconnection","intercourse","interest","interface","interferometer","interior","interject","interloper","internet","interpretation","interpreter","interval","intervenor","intervention","interview","interviewer","intestine","introduction","intuition","invader","invasion","invention","inventor","inventory","inverse","inversion","investigation","investigator","investment","investor","invitation","invite","invoice","involvement","iridescence","iris","iron","ironclad","irony","irrigation","ischemia","island","isogloss","isolation","issue","item","itinerary","ivory","jack","jackal","jacket","jackfruit","jade","jaguar","jail","jailhouse","jalape\xC3\xB1o","jam","jar","jasmine","jaw","jazz","jealousy","jeans","jeep","jelly","jellybeans","jellyfish","jerk","jet","jewel","jeweller","jewellery","jewelry","jicama","jiffy","job","jockey","jodhpurs","joey","jogging","joint","joke","jot","journal","journalism","journalist","journey","joy","judge","judgment","judo","jug","juggernaut","juice","julienne","jumbo","jump","jumper","jumpsuit","jungle","junior","junk","junker","junket","jury","justice","justification","jute","kale","kamikaze","kangaroo","karate","kayak","kazoo","kebab","keep","keeper","kendo","kennel","ketch","ketchup","kettle","kettledrum","key","keyboard","keyboarding","keystone","kick","kick-off","kid","kidney","kielbasa","kill","killer","killing","kilogram","kilometer","kilt","kimono","kinase","kind","kindness","king","kingdom","kingfish","kiosk","kiss","kit","kitchen","kite","kitsch","kitten","kitty","kiwi","knee","kneejerk","knickers","knife","knife-edge","knight","knitting","knock","knot","know-how","knowledge","knuckle","koala","kohlrabi","kumquat","lab","label","labor","laboratory","laborer","labour","labourer","lace","lack","lacquerware","lad","ladder","ladle","lady","ladybug","lag","lake","lamb","lambkin","lament","lamp","lanai","land","landform","landing","landmine","landscape","lane","language","lantern","lap","laparoscope","lapdog","laptop","larch","lard","larder","lark","larva","laryngitis","lasagna","lashes","last","latency","latex","lathe","latitude","latte","latter","laugh","laughter","laundry","lava","law","lawmaker","lawn","lawsuit","lawyer","lay","layer","layout","lead","leader","leadership","leading","leaf","league","leaker","leap","learning","leash","leather","leave","leaver","lecture","leek","leeway","left","leg","legacy","legal","legend","legging","legislation","legislator","legislature","legitimacy","legume","leisure","lemon","lemonade","lemur","lender","lending","length","lens","lentil","leopard","leprosy","leptocephalus","lesbian","lesson","letter","lettuce","level","lever","leverage","leveret","liability","liar","liberty","libido","library","licence","license","licensing","licorice","lid","lie","lieu","lieutenant","life","lifestyle","lifetime","lift","ligand","light","lighting","lightning","lightscreen","ligula","likelihood","likeness","lilac","lily","limb","lime","limestone","limit","limitation","limo","line","linen","liner","linguist","linguistics","lining","link","linkage","linseed","lion","lip","lipid","lipoprotein","lipstick","liquid","liquidity","liquor","list","listening","listing","literate","literature","litigation","litmus","litter","littleneck","liver","livestock","living","lizard","llama","load","loading","loaf","loafer","loan","lobby","lobotomy","lobster","local","locality","location","lock","locker","locket","locomotive","locust","lode","loft","log","loggia","logic","login","logistics","logo","loincloth","lollipop","loneliness","longboat","longitude","look","lookout","loop","loophole","loquat","lord","loss","lot","lotion","lottery","lounge","louse","lout","love","lover","lox","loyalty","luck","luggage","lumber","lumberman","lunch","luncheonette","lunchmeat","lunchroom","lung","lunge","lust","lute","luxury","lychee","lycra","lye","lymphocyte","lynx","lyocell","lyre","lyrics","lysine","mRNA","macadamia","macaroni","macaroon","macaw","machine","machinery","macrame","macro","macrofauna","madam","maelstrom","maestro","magazine","maggot","magic","magnet","magnitude","maid","maiden","mail","mailbox","mailer","mailing","mailman","main","mainland","mainstream","maintainer","maintenance","maize","major","major-league","majority","makeover","maker","makeup","making","male","malice","mall","mallard","mallet","malnutrition","mama","mambo","mammoth","man","manacle","management","manager","manatee","mandarin","mandate","mandolin","mangle","mango","mangrove","manhunt","maniac","manicure","manifestation","manipulation","mankind","manner","manor","mansard","manservant","mansion","mantel","mantle","mantua","manufacturer","manufacturing","many","map","maple","mapping","maracas","marathon","marble","march","mare","margarine","margin","mariachi","marimba","marines","marionberry","mark","marker","market","marketer","marketing","marketplace","marksman","markup","marmalade","marriage","marsh","marshland","marshmallow","marten","marxism","mascara","mask","masonry","mass","massage","mast","master","masterpiece","mastication","mastoid","mat","match","matchmaker","mate","material","maternity","math","mathematics","matrix","matter","mattock","mattress","max","maximum","maybe","mayonnaise","mayor","meadow","meal","mean","meander","meaning","means","meantime","measles","measure","measurement","meat","meatball","meatloaf","mecca","mechanic","mechanism","med","medal","media","median","medication","medicine","medium","meet","meeting","melatonin","melody","melon","member","membership","membrane","meme","memo","memorial","memory","men","menopause","menorah","mention","mentor","menu","merchandise","merchant","mercury","meridian","meringue","merit","mesenchyme","mess","message","messenger","messy","metabolite","metal","metallurgist","metaphor","meteor","meteorology","meter","methane","method","methodology","metric","metro","metronome","mezzanine","microlending","micronutrient","microphone","microwave","mid-course","midden","middle","middleman","midline","midnight","midwife","might","migrant","migration","mile","mileage","milepost","milestone","military","milk","milkshake","mill","millennium","millet","millimeter","million","millisecond","millstone","mime","mimosa","min","mincemeat","mind","mine","mineral","mineshaft","mini","mini-skirt","minibus","minimalism","minimum","mining","minion","minister","mink","minnow","minor","minor-league","minority","mint","minute","miracle","mirror","miscarriage","miscommunication","misfit","misnomer","misogyny","misplacement","misreading","misrepresentation","miss","missile","mission","missionary","mist","mistake","mister","misunderstand","miter","mitten","mix","mixer","mixture","moai","moat","mob","mobile","mobility","mobster","moccasins","mocha","mochi","mode","model","modeling","modem","modernist","modernity","modification","molar","molasses","molding","mole","molecule","mom","moment","monastery","monasticism","money","monger","monitor","monitoring","monk","monkey","monocle","monopoly","monotheism","monsoon","monster","month","monument","mood","moody","moon","moonlight","moonscape","moonshine","moose","mop","morale","morbid","morbidity","morning","moron","morphology","morsel","mortal","mortality","mortgage","mortise","mosque","mosquito","most","motel","moth","mother","mother-in-law","motion","motivation","motive","motor","motorboat","motorcar","motorcycle","mound","mountain","mouse","mouser","mousse","moustache","mouth","mouton","movement","mover","movie","mower","mozzarella","mud","muffin","mug","mukluk","mule","multimedia","murder","muscat","muscatel","muscle","musculature","museum","mushroom","music","music-box","music-making","musician","muskrat","mussel","mustache","mustard","mutation","mutt","mutton","mycoplasma","mystery","myth","mythology","nail","name","naming","nanoparticle","napkin","narrative","nasal","nation","nationality","native","naturalisation","nature","navigation","necessity","neck","necklace","necktie","nectar","nectarine","need","needle","neglect","negligee","negotiation","neighbor","neighborhood","neighbour","neighbourhood","neologism","neon","neonate","nephew","nerve","nest","nestling","nestmate","net","netball","netbook","netsuke","network","networking","neurobiologist","neuron","neuropathologist","neuropsychiatry","news","newsletter","newspaper","newsprint","newsstand","nexus","nibble","nicety","niche","nick","nickel","nickname","niece","night","nightclub","nightgown","nightingale","nightlife","nightlight","nightmare","ninja","nit","nitrogen","nobody","nod","node","noir","noise","nonbeliever","nonconformist","nondisclosure","nonsense","noodle","noodles","noon","norm","normal","normalisation","normalization","north","nose","notation","note","notebook","notepad","nothing","notice","notion","notoriety","nougat","noun","nourishment","novel","nucleotidase","nucleotide","nudge","nuke","number","numeracy","numeric","numismatist","nun","nurse","nursery","nursing","nurture","nut","nutmeg","nutrient","nutrition","nylon","nymph","oak","oar","oasis","oat","oatmeal","oats","obedience","obesity","obi","object","objection","objective","obligation","oboe","observation","observatory","obsession","obsidian","obstacle","occasion","occupation","occurrence","ocean","ocelot","octagon","octave","octavo","octet","octopus","odometer","odyssey","oeuvre","off-ramp","offence","offense","offer","offering","office","officer","official","offset","oil","okra","oldie","oleo","olive","omega","omelet","omission","omnivore","oncology","onion","online","onset","opening","opera","operating","operation","operator","ophthalmologist","opinion","opium","opossum","opponent","opportunist","opportunity","opposite","opposition","optimal","optimisation","optimist","optimization","option","orange","orangutan","orator","orchard","orchestra","orchid","order","ordinary","ordination","ore","oregano","organ","organisation","organising","organization","organizing","orient","orientation","origin","original","originality","ornament","osmosis","osprey","ostrich","other","otter","ottoman","ounce","outback","outcome","outfielder","outfit","outhouse","outlaw","outlay","outlet","outline","outlook","output","outrage","outrigger","outrun","outset","outside","oval","ovary","oven","overcharge","overclocking","overcoat","overexertion","overflight","overhead","overheard","overload","overnighter","overshoot","oversight","overview","overweight","owl","owner","ownership","ox","oxford","oxygen","oyster","ozone","pace","pacemaker","pack","package","packaging","packet","pad","paddle","paddock","pagan","page","pagoda","pail","pain","paint","painter","painting","paintwork","pair","pajamas","palace","palate","palm","pamphlet","pan","pancake","pancreas","panda","panel","panic","pannier","panpipe","pansy","panther","panties","pantologist","pantology","pantry","pants","pantsuit","panty","pantyhose","papa","papaya","paper","paperback","paperwork","parable","parachute","parade","paradise","paragraph","parallelogram","paramecium","paramedic","parameter","paranoia","parcel","parchment","pard","pardon","parent","parenthesis","parenting","park","parka","parking","parliament","parole","parrot","parser","parsley","parsnip","part","participant","participation","particle","particular","partner","partnership","partridge","party","pass","passage","passbook","passenger","passing","passion","passive","passport","password","past","pasta","paste","pastor","pastoralist","pastry","pasture","pat","patch","pate","patent","patentee","path","pathogenesis","pathology","pathway","patience","patient","patina","patio","patriarch","patrimony","patriot","patrol","patroller","patrolling","patron","pattern","patty","pattypan","pause","pavement","pavilion","paw","pawnshop","pay","payee","payment","payoff","pea","peace","peach","peacoat","peacock","peak","peanut","pear","pearl","peasant","pecan","pecker","pedal","peek","peen","peer","peer-to-peer","pegboard","pelican","pelt","pen","penalty","pence","pencil","pendant","pendulum","penguin","penicillin","peninsula","penis","pennant","penny","pension","pentagon","peony","people","pepper","pepperoni","percent","percentage","perception","perch","perennial","perfection","performance","perfume","period","periodical","peripheral","permafrost","permission","permit","perp","perpendicular","persimmon","person","personal","personality","personnel","perspective","pest","pet","petal","petition","petitioner","petticoat","pew","pharmacist","pharmacopoeia","phase","pheasant","phenomenon","phenotype","pheromone","philanthropy","philosopher","philosophy","phone","phosphate","photo","photodiode","photograph","photographer","photography","photoreceptor","phrase","phrasing","physical","physics","physiology","pianist","piano","piccolo","pick","pickax","pickaxe","picket","pickle","pickup","picnic","picture","picturesque","pie","piece","pier","piety","pig","pigeon","piglet","pigpen","pigsty","pike","pilaf","pile","pilgrim","pilgrimage","pill","pillar","pillbox","pillow","pilot","pimp","pimple","pin","pinafore","pince-nez","pine","pineapple","pinecone","ping","pink","pinkie","pinot","pinstripe","pint","pinto","pinworm","pioneer","pipe","pipeline","piracy","pirate","piss","pistol","pit","pita","pitch","pitcher","pitching","pith","pizza","place","placebo","placement","placode","plagiarism","plain","plaintiff","plan","plane","planet","planning","plant","plantation","planter","planula","plaster","plasterboard","plastic","plate","platelet","platform","platinum","platter","platypus","play","player","playground","playroom","playwright","plea","pleasure","pleat","pledge","plenty","plier","pliers","plight","plot","plough","plover","plow","plowman","plug","plugin","plum","plumber","plume","plunger","plywood","pneumonia","pocket","pocket-watch","pocketbook","pod","podcast","poem","poet","poetry","poignance","point","poison","poisoning","poker","polarisation","polarization","pole","polenta","police","policeman","policy","polish","politician","politics","poll","polliwog","pollutant","pollution","polo","polyester","polyp","pomegranate","pomelo","pompom","poncho","pond","pony","pool","poor","pop","popcorn","poppy","popsicle","popularity","population","populist","porcelain","porch","porcupine","pork","porpoise","port","porter","portfolio","porthole","portion","portrait","position","possession","possibility","possible","post","postage","postbox","poster","posterior","postfix","pot","potato","potential","pottery","potty","pouch","poultry","pound","pounding","poverty","powder","power","practice","practitioner","prairie","praise","pray","prayer","precedence","precedent","precipitation","precision","predecessor","preface","preference","prefix","pregnancy","prejudice","prelude","premeditation","premier","premise","premium","preoccupation","preparation","prescription","presence","present","presentation","preservation","preserves","presidency","president","press","pressroom","pressure","pressurisation","pressurization","prestige","presume","pretzel","prevalence","prevention","prey","price","pricing","pride","priest","priesthood","primary","primate","prince","princess","principal","principle","print","printer","printing","prior","priority","prison","prisoner","privacy","private","privilege","prize","prizefight","probability","probation","probe","problem","procedure","proceedings","process","processing","processor","proctor","procurement","produce","producer","product","production","productivity","profession","professional","professor","profile","profit","progenitor","program","programme","programming","progress","progression","prohibition","project","proliferation","promenade","promise","promotion","prompt","pronoun","pronunciation","proof","proof-reader","propaganda","propane","property","prophet","proponent","proportion","proposal","proposition","proprietor","prose","prosecution","prosecutor","prospect","prosperity","prostacyclin","prostanoid","prostrate","protection","protein","protest","protocol","providence","provider","province","provision","prow","proximal","proximity","prune","pruner","pseudocode","pseudoscience","psychiatrist","psychoanalyst","psychologist","psychology","ptarmigan","pub","public","publication","publicity","publisher","publishing","pudding","puddle","puffin","pug","puggle","pulley","pulse","puma","pump","pumpernickel","pumpkin","pumpkinseed","pun","punch","punctuation","punishment","pup","pupa","pupil","puppet","puppy","purchase","puritan","purity","purple","purpose","purr","purse","pursuit","push","pusher","put","puzzle","pyramid","pyridine","quadrant","quail","qualification","quality","quantity","quart","quarter","quartet","quartz","queen","query","quest","question","questioner","questionnaire","quiche","quicksand","quiet","quill","quilt","quince","quinoa","quit","quiver","quota","quotation","quote","rabbi","rabbit","raccoon","race","racer","racing","racism","racist","rack","radar","radiator","radio","radiosonde","radish","raffle","raft","rag","rage","raid","rail","railing","railroad","railway","raiment","rain","rainbow","raincoat","rainmaker","rainstorm","rainy","raise","raisin","rake","rally","ram","rambler","ramen","ramie","ranch","rancher","randomisation","randomization","range","ranger","rank","rap","rape","raspberry","rat","rate","ratepayer","rating","ratio","rationale","rations","raven","ravioli","rawhide","ray","rayon","razor","reach","reactant","reaction","read","reader","readiness","reading","real","reality","realization","realm","reamer","rear","reason","reasoning","rebel","rebellion","reboot","recall","recapitulation","receipt","receiver","reception","receptor","recess","recession","recipe","recipient","reciprocity","reclamation","recliner","recognition","recollection","recommendation","reconsideration","record","recorder","recording","recovery","recreation","recruit","rectangle","red","redesign","redhead","redirect","rediscovery","reduction","reef","refectory","reference","referendum","reflection","reform","refreshments","refrigerator","refuge","refund","refusal","refuse","regard","regime","region","regionalism","register","registration","registry","regret","regulation","regulator","rehospitalisation","rehospitalization","reindeer","reinscription","reject","relation","relationship","relative","relaxation","relay","release","reliability","relief","religion","relish","reluctance","remains","remark","reminder","remnant","remote","removal","renaissance","rent","reorganisation","reorganization","repair","reparation","repayment","repeat","replacement","replica","replication","reply","report","reporter","reporting","repository","representation","representative","reprocessing","republic","republican","reputation","request","requirement","resale","rescue","research","researcher","resemblance","reservation","reserve","reservoir","reset","residence","resident","residue","resist","resistance","resolution","resolve","resort","resource","respect","respite","response","responsibility","rest","restaurant","restoration","restriction","restroom","restructuring","result","resume","retailer","retention","rethinking","retina","retirement","retouching","retreat","retrospect","retrospective","retrospectivity","return","reunion","revascularisation","revascularization","reveal","revelation","revenant","revenge","revenue","reversal","reverse","review","revitalisation","revitalization","revival","revolution","revolver","reward","rhetoric","rheumatism","rhinoceros","rhubarb","rhyme","rhythm","rib","ribbon","rice","riddle","ride","rider","ridge","riding","rifle","right","rim","ring","ringworm","riot","rip","ripple","rise","riser","risk","rite","ritual","river","riverbed","rivulet","road","roadway","roar","roast","robe","robin","robot","robotics","rock","rocker","rocket","rocket-ship","rod","role","roll","roller","romaine","romance","roof","room","roommate","rooster","root","rope","rose","rosemary","roster","rostrum","rotation","round","roundabout","route","router","routine","row","rowboat","rowing","rubber","rubbish","rubric","ruby","ruckus","rudiment","ruffle","rug","rugby","ruin","rule","ruler","ruling","rum","rumor","run","runaway","runner","running","runway","rush","rust","rutabaga","rye","sabre","sac","sack","saddle","sadness","safari","safe","safeguard","safety","saffron","sage","sail","sailboat","sailing","sailor","saint","sake","salad","salami","salary","sale","salesman","salmon","salon","saloon","salsa","salt","salute","samovar","sampan","sample","samurai","sanction","sanctity","sanctuary","sand","sandal","sandbar","sandpaper","sandwich","sanity","sardine","sari","sarong","sash","satellite","satin","satire","satisfaction","sauce","saucer","sauerkraut","sausage","savage","savannah","saving","savings","savior","saviour","savory","saw","saxophone","scaffold","scale","scallion","scallops","scalp","scam","scanner","scarecrow","scarf","scarification","scenario","scene","scenery","scent","schedule","scheduling","schema","scheme","schizophrenic","schnitzel","scholar","scholarship","school","schoolhouse","schooner","science","scientist","scimitar","scissors","scooter","scope","score","scorn","scorpion","scotch","scout","scow","scrambled","scrap","scraper","scratch","screamer","screen","screening","screenwriting","screw","screw-up","screwdriver","scrim","scrip","script","scripture","scrutiny","sculpting","sculptural","sculpture","sea","seabass","seafood","seagull","seal","seaplane","search","seashore","seaside","season","seat","seaweed","second","secrecy","secret","secretariat","secretary","secretion","section","sectional","sector","security","sediment","seed","seeder","seeker","seep","segment","seizure","selection","self","self-confidence","self-control","self-esteem","seller","selling","semantics","semester","semicircle","semicolon","semiconductor","seminar","senate","senator","sender","senior","sense","sensibility","sensitive","sensitivity","sensor","sentence","sentencing","sentiment","sepal","separation","septicaemia","sequel","sequence","serial","series","sermon","serum","serval","servant","server","service","servitude","sesame","session","set","setback","setting","settlement","settler","severity","sewer","sex","sexuality","shack","shackle","shade","shadow","shadowbox","shakedown","shaker","shallot","shallows","shame","shampoo","shanty","shape","share","shareholder","shark","shaw","shawl","shear","shearling","sheath","shed","sheep","sheet","shelf","shell","shelter","sherbet","sherry","shield","shift","shin","shine","shingle","ship","shipper","shipping","shipyard","shirt","shirtdress","shit","shoat","shock","shoe","shoe-horn","shoehorn","shoelace","shoemaker","shoes","shoestring","shofar","shoot","shootdown","shop","shopper","shopping","shore","shoreline","short","shortage","shorts","shortwave","shot","shoulder","shout","shovel","show","show-stopper","shower","shred","shrimp","shrine","shutdown","sibling","sick","sickness","side","sideboard","sideburns","sidecar","sidestream","sidewalk","siding","siege","sigh","sight","sightseeing","sign","signal","signature","signet","significance","signify","signup","silence","silica","silicon","silk","silkworm","sill","silly","silo","silver","similarity","simple","simplicity","simplification","simvastatin","sin","singer","singing","singular","sink","sinuosity","sip","sir","sister","sister-in-law","sitar","site","situation","size","skate","skating","skean","skeleton","ski","skiing","skill","skin","skirt","skull","skullcap","skullduggery","skunk","sky","skylight","skyline","skyscraper","skywalk","slang","slapstick","slash","slate","slave","slavery","slaw","sled","sledge","sleep","sleepiness","sleeping","sleet","sleuth","slice","slide","slider","slime","slip","slipper","slippers","slope","slot","sloth","slump","smell","smelting","smile","smith","smock","smog","smoke","smoking","smolt","smuggling","snack","snail","snake","snakebite","snap","snarl","sneaker","sneakers","sneeze","sniffle","snob","snorer","snow","snowboarding","snowflake","snowman","snowmobiling","snowplow","snowstorm","snowsuit","snuck","snug","snuggle","soap","soccer","socialism","socialist","society","sociology","sock","socks","soda","sofa","softball","softdrink","softening","software","soil","soldier","sole","solicitation","solicitor","solidarity","solidity","soliloquy","solitaire","solution","solvency","sombrero","somebody","someone","someplace","somersault","something","somewhere","son","sonar","sonata","song","songbird","sonnet","soot","sophomore","soprano","sorbet","sorghum","sorrel","sorrow","sort","soul","soulmate","sound","soundness","soup","source","sourwood","sousaphone","south","southeast","souvenir","sovereignty","sow","soy","soybean","space","spacing","spade","spaghetti","span","spandex","spank","sparerib","spark","sparrow","spasm","spat","spatula","spawn","speaker","speakerphone","speaking","spear","spec","special","specialist","specialty","species","specification","spectacle","spectacles","spectrograph","spectrum","speculation","speech","speed","speedboat","spell","spelling","spelt","spending","sphere","sphynx","spice","spider","spiderling","spike","spill","spinach","spine","spiral","spirit","spiritual","spirituality","spit","spite","spleen","splendor","split","spokesman","spokeswoman","sponge","sponsor","sponsorship","spool","spoon","spork","sport","sportsman","spot","spotlight","spouse","sprag","sprat","spray","spread","spreadsheet","spree","spring","sprinkles","sprinter","sprout","spruce","spud","spume","spur","spy","spyglass","square","squash","squatter","squeegee","squid","squirrel","stab","stability","stable","stack","stacking","stadium","staff","stag","stage","stain","stair","staircase","stake","stalk","stall","stallion","stamen","stamina","stamp","stance","stand","standard","standardisation","standardization","standing","standoff","standpoint","star","starboard","start","starter","state","statement","statin","station","station-wagon","statistic","statistics","statue","status","statute","stay","steak","stealth","steam","steamroller","steel","steeple","stem","stench","stencil","step","step-aunt","step-brother","step-daughter","step-father","step-grandfather","step-grandmother","step-mother","step-sister","step-son","step-uncle","stepdaughter","stepmother","stepping-stone","stepson","stereo","stew","steward","stick","sticker","stiletto","still","stimulation","stimulus","sting","stinger","stir-fry","stitch","stitcher","stock","stock-in-trade","stockings","stole","stomach","stone","stonework","stool","stop","stopsign","stopwatch","storage","store","storey","storm","story","story-telling","storyboard","stot","stove","strait","strand","stranger","strap","strategy","straw","strawberry","strawman","stream","street","streetcar","strength","stress","stretch","strife","strike","string","strip","stripe","strobe","stroke","structure","strudel","struggle","stucco","stud","student","studio","study","stuff","stumbling","stump","stupidity","sturgeon","sty","style","styling","stylus","sub","subcomponent","subconscious","subcontractor","subexpression","subgroup","subject","submarine","submitter","subprime","subroutine","subscription","subsection","subset","subsidence","subsidiary","subsidy","substance","substitution","subtitle","suburb","subway","success","succotash","suck","sucker","suede","suet","suffocation","sugar","suggestion","suicide","suit","suitcase","suite","sulfur","sultan","sum","summary","summer","summit","sun","sunbeam","sunbonnet","sundae","sunday","sundial","sunflower","sunglasses","sunlamp","sunlight","sunrise","sunroom","sunset","sunshine","superiority","supermarket","supernatural","supervision","supervisor","supper","supplement","supplier","supply","support","supporter","suppression","supreme","surface","surfboard","surge","surgeon","surgery","surname","surplus","surprise","surround","surroundings","surrounds","survey","survival","survivor","sushi","suspect","suspenders","suspension","sustainment","sustenance","swallow","swamp","swan","swanling","swath","sweat","sweater","sweatshirt","sweatshop","sweatsuit","sweets","swell","swim","swimming","swimsuit","swine","swing","switch","switchboard","switching","swivel","sword","swordfight","swordfish","sycamore","symbol","symmetry","sympathy","symptom","syndicate","syndrome","synergy","synod","synonym","synthesis","syrup","system","t-shirt","tab","tabby","tabernacle","table","tablecloth","tablet","tabletop","tachometer","tackle","taco","tactics","tactile","tadpole","tag","tail","tailbud","tailor","tailspin","take-out","takeover","tale","talent","talk","talking","tam-o'-shanter","tamale","tambour","tambourine","tan","tandem","tangerine","tank","tank-top","tanker","tankful","tap","tape","tapioca","target","taro","tarragon","tart","task","tassel","taste","tatami","tattler","tattoo","tavern","tax","taxi","taxicab","taxpayer","tea","teacher","teaching","team","teammate","teapot","tear","tech","technician","technique","technologist","technology","tectonics","teen","teenager","teepee","telephone","telescreen","teletype","television","tell","teller","temp","temper","temperature","temple","tempo","temporariness","temporary","temptation","temptress","tenant","tendency","tender","tenement","tenet","tennis","tenor","tension","tensor","tent","tentacle","tenth","tepee","teriyaki","term","terminal","termination","terminology","termite","terrace","terracotta","terrapin","terrarium","territory","terror","terrorism","terrorist","test","testament","testimonial","testimony","testing","text","textbook","textual","texture","thanks","thaw","theater","theft","theism","theme","theology","theory","therapist","therapy","thermals","thermometer","thermostat","thesis","thickness","thief","thigh","thing","thinking","thirst","thistle","thong","thongs","thorn","thought","thousand","thread","threat","threshold","thrift","thrill","throat","throne","thrush","thrust","thug","thumb","thump","thunder","thunderbolt","thunderhead","thunderstorm","thyme","tiara","tic","tick","ticket","tide","tie","tiger","tights","tile","till","tilt","timbale","timber","time","timeline","timeout","timer","timetable","timing","timpani","tin","tinderbox","tinkle","tintype","tip","tire","tissue","titanium","title","toad","toast","toaster","tobacco","today","toe","toenail","toffee","tofu","tog","toga","toilet","tolerance","tolerant","toll","tom-tom","tomatillo","tomato","tomb","tomography","tomorrow","ton","tonality","tone","tongue","tonic","tonight","tool","toot","tooth","toothbrush","toothpaste","toothpick","top","top-hat","topic","topsail","toque","toreador","tornado","torso","torte","tortellini","tortilla","tortoise","tosser","total","tote","touch","tough-guy","tour","tourism","tourist","tournament","tow-truck","towel","tower","town","townhouse","township","toy","trace","trachoma","track","tracking","tracksuit","tract","tractor","trade","trader","trading","tradition","traditionalism","traffic","trafficker","tragedy","trail","trailer","trailpatrol","train","trainer","training","trait","tram","tramp","trance","transaction","transcript","transfer","transformation","transit","transition","translation","transmission","transom","transparency","transplantation","transport","transportation","trap","trapdoor","trapezium","trapezoid","trash","travel","traveler","tray","treasure","treasury","treat","treatment","treaty","tree","trek","trellis","tremor","trench","trend","triad","trial","triangle","tribe","tributary","trick","trigger","trigonometry","trillion","trim","trinket","trip","tripod","tritone","triumph","trolley","trombone","troop","trooper","trophy","trouble","trousers","trout","trove","trowel","truck","trumpet","trunk","trust","trustee","truth","try","tsunami","tub","tuba","tube","tuber","tug","tugboat","tuition","tulip","tumbler","tummy","tuna","tune","tune-up","tunic","tunnel","turban","turf","turkey","turmeric","turn","turning","turnip","turnover","turnstile","turret","turtle","tusk","tussle","tutu","tuxedo","tweet","tweezers","twig","twilight","twine","twins","twist","twister","twitter","type","typeface","typewriter","typhoon","ukulele","ultimatum","umbrella","unblinking","uncertainty","uncle","underclothes","underestimate","underground","underneath","underpants","underpass","undershirt","understanding","understatement","undertaker","underwear","underweight","underwire","underwriting","unemployment","unibody","uniform","uniformity","union","unique","unit","unity","universe","university","update","upgrade","uplift","upper","upstairs","upward","urge","urgency","urn","usage","use","user","usher","usual","utensil","utilisation","utility","utilization","vacation","vaccine","vacuum","vagrant","valance","valentine","validate","validity","valley","valuable","value","vampire","van","vanadyl","vane","vanilla","vanity","variability","variable","variant","variation","variety","vascular","vase","vault","vaulting","veal","vector","vegetable","vegetarian","vegetarianism","vegetation","vehicle","veil","vein","veldt","vellum","velocity","velodrome","velvet","vendor","veneer","vengeance","venison","venom","venti","venture","venue","veranda","verb","verdict","verification","vermicelli","vernacular","verse","version","vertigo","verve","vessel","vest","vestment","vet","veteran","veterinarian","veto","viability","vibe","vibraphone","vibration","vibrissae","vice","vicinity","victim","victory","video","view","viewer","vignette","villa","village","vine","vinegar","vineyard","vintage","vintner","vinyl","viola","violation","violence","violet","violin","virginal","virtue","virus","visa","viscose","vise","vision","visit","visitor","visor","vista","visual","vitality","vitamin","vitro","vivo","vixen","vodka","vogue","voice","void","vol","volatility","volcano","volleyball","volume","volunteer","volunteering","vomit","vote","voter","voting","voyage","vulture","wad","wafer","waffle","wage","wagon","waist","waistband","wait","waiter","waiting","waitress","waiver","wake","walk","walker","walking","walkway","wall","wallaby","wallet","walnut","walrus","wampum","wannabe","want","war","warden","wardrobe","warfare","warlock","warlord","warm-up","warming","warmth","warning","warrant","warren","warrior","wasabi","wash","washbasin","washcloth","washer","washtub","wasp","waste","wastebasket","wasting","watch","watcher","watchmaker","water","waterbed","watercress","waterfall","waterfront","watermelon","waterskiing","waterspout","waterwheel","wave","waveform","wax","way","weakness","wealth","weapon","wear","weasel","weather","web","webinar","webmail","webpage","website","wedding","wedge","weed","weeder","weedkiller","week","weekend","weekender","weight","weird","welcome","welfare","well","well-being","west","western","wet-bar","wetland","wetsuit","whack","whale","wharf","wheat","wheel","whelp","whey","whip","whirlpool","whirlwind","whisker","whiskey","whisper","whistle","white","whole","wholesale","wholesaler","whorl","wick","widget","widow","width","wife","wifi","wild","wildebeest","wilderness","wildlife","will","willingness","willow","win","wind","wind-chime","windage","window","windscreen","windshield","wine","winery","wing","wingman","wingtip","wink","winner","winter","wire","wiretap","wiring","wisdom","wiseguy","wish","wisteria","wit","witch","witch-hunt","withdrawal","witness","wok","wolf","woman","wombat","wonder","wont","wood","woodchuck","woodland","woodshed","woodwind","wool","woolens","word","wording","work","workbench","worker","workforce","workhorse","working","workout","workplace","workshop","world","worm","worry","worship","worshiper","worth","wound","wrap","wraparound","wrapper","wrapping","wreck","wrecker","wren","wrench","wrestler","wriggler","wrinkle","wrist","writer","writing","wrong","xylophone","yacht","yahoo","yak","yam","yang","yard","yarmulke","yarn","yawl","year","yeast","yellow","yellowjacket","yesterday","yew","yin","yoga","yogurt","yoke","yolk","young","youngster","yourself","youth","yoyo","yurt","zampone","zebra","zebrafish","zen","zephyr","zero","ziggurat","zinc","zipper","zither","zombie","zone","zoo","zoologist","zoology","zoot-suit","zucchini"];var fn=["a","abaft","aboard","about","above","absent","across","afore","after","against","along","alongside","amid","amidst","among","amongst","an","anenst","anti","apropos","apud","around","as","aside","astride","at","athwart","atop","barring","before","behind","below","beneath","beside","besides","between","beyond","but","by","circa","concerning","considering","despite","down","during","except","excepting","excluding","failing","following","for","forenenst","from","given","in","including","inside","into","lest","like","mid","midst","minus","modulo","near","next","notwithstanding","of","off","on","onto","opposite","out","outside","over","pace","past","per","plus","pro","qua","regarding","round","sans","save","since","than","the","through","throughout","till","times","to","toward","towards","under","underneath","unlike","until","unto","up","upon","versus","via","vice","with","within","without","worth"];var gn=["abandon","abase","abate","abbreviate","abdicate","abduct","abet","abhor","abide","abjure","abnegate","abolish","abominate","abort","abound","abrade","abridge","abrogate","abscond","abseil","absent","absolve","absorb","abstain","abstract","abuse","abut","accede","accelerate","accent","accentuate","accept","access","accessorise","accessorize","acclaim","acclimate","acclimatise","acclimatize","accommodate","accompany","accomplish","accord","accost","account","accouter","accoutre","accredit","accrue","acculturate","accumulate","accuse","accustom","ace","ache","achieve","acidify","acknowledge","acquaint","acquiesce","acquire","acquit","act","action","activate","actualise","actualize","actuate","adapt","add","addle","address","adduce","adhere","adjoin","adjourn","adjudge","adjudicate","adjure","adjust","administer","admire","admit","admonish","adopt","adore","adorn","adsorb","adulterate","adumbrate","advance","advantage","advertise","advise","advocate","aerate","affect","affiliate","affirm","affix","afflict","afford","afforest","affront","age","agglomerate","aggravate","aggregate","agitate","agonise","agonize","agree","aid","ail","aim","air","airbrush","airdrop","airfreight","airlift","alarm","alert","alienate","alight","align","allay","allege","alleviate","allocate","allot","allow","alloy","allude","ally","alphabetise","alphabetize","alter","alternate","amalgamate","amass","amaze","amble","ambush","ameliorate","amend","amortise","amortize","amount","amplify","amputate","amuse","anaesthetise","anaesthetize","analyse","anchor","anesthetize","anger","angle","anglicise","anglicize","animate","anneal","annex","annihilate","annotate","announce","annoy","annul","anodise","anodize","anoint","anonymise","anonymize","answer","antagonise","antagonize","antedate","anthologise","anthologize","anticipate","ape","apologise","apologize","apostrophise","apostrophize","appal","appall","appeal","appear","appease","append","appertain","applaud","apply","appoint","apportion","appraise","appreciate","apprehend","apprentice","apprise","approach","appropriate","approve","approximate","aquaplane","arbitrate","arc","arch","archive","argue","arise","arm","arouse","arraign","arrange","array","arrest","arrive","arrogate","arse","art","articulate","ascend","ascertain","ascribe","ask","asphyxiate","aspirate","aspire","assail","assassinate","assault","assay","assemble","assent","assert","assess","assign","assimilate","assist","associate","assuage","assume","assure","asterisk","astonish","astound","atomise","atomize","atone","atrophy","attach","attack","attain","attempt","attend","attenuate","attest","attract","attribute","auction","audit","audition","augment","augur","authenticate","author","authorise","authorize","autograph","automate","autosave","autowind","avail","avenge","aver","average","avert","avoid","avow","await","awake","awaken","award","awe","ax","axe","baa","babble","baby","babysit","back","backcomb","backdate","backfill","backfire","backlight","backpack","backspace","backtrack","badger","baffle","bag","bail","bait","bake","balance","bale","ball","balloon","ballot","balls","bamboozle","ban","band","bandage","bandy","bang","bangs","banish","bank","bankroll","bankrupt","banter","baptise","baptize","bar","barbecue","bare","barf","bargain","barge","bark","barnstorm","barrack","barrel","barricade","barter","base","bash","bask","bastardise","bastardize","baste","bat","batch","bath","bathe","batten","batter","battle","baulk","bawl","bay","bayonet","be","beach","beam","bean","bear","beard","beat","beatbox","beatboxer","beatify","beautify","beaver","beckon","become","bed","bedazzle","bedeck","bedevil","beef","beep","beetle","befall","befit","befog","befriend","beg","beget","beggar","begin","begrudge","beguile","behave","behead","behold","behoove","behove","belabor","belabour","belay","belch","belie","believe","belittle","bellow","belly","bellyache","belong","belt","bemoan","bemuse","benchmark","bend","benefit","bequeath","berate","bereave","berth","beseech","beset","besiege","besmirch","bespatter","bespeak","best","bestir","bestow","bestride","bet","betake","betide","betoken","betray","better","bewail","beware","bewilder","bewitch","bias","bicker","bicycle","bid","bide","biff","bifurcate","big","bike","bilk","bill","billet","billow","bin","bind","binge","biodegrade","bird","bisect","bitch","bite","bitmap","bivouac","bivvy","blab","blabber","black","blackball","blacken","blacklist","blackmail","blag","blame","blanch","blank","blanket","blare","blaspheme","blast","blather","blaze","blazon","bleach","bleat","bleed","bleep","blemish","blench","blend","bless","blight","blind","blindfold","blindfolded","blindside","blink","bliss","blister","blitz","bloat","block","blockade","blog","blood","bloom","bloop","blossom","blot","blow","blub","blubber","bludge","bludgeon","bluff","blunder","blunt","blur","blurt","blush","bluster","board","boast","bob","bobble","bode","bodge","bog","boggle","boil","bolster","bolt","bomb","bombard","bond","bone","bonk","boo","boob","boogie","book","bookmark","boom","boomerang","boost","boot","bootleg","booze","bop","border","bore","born","borrow","boss","botch","bother","bottle","bottleful","bottom","bounce","bound","bow","bowdlerise","bowdlerize","bowl","bowlful","box","boycott","braai","brace","braces","bracket","brag","braid","brain","brainstorm","brainwash","braise","brake","branch","brand","brandish","brave","brawl","bray","brazen","breach","break","breakfast","breast","breastfeed","breathalyse","breathalyze","breathe","breed","breeze","brew","bribe","brick","bridge","bridle","brief","brighten","brim","bring","bristle","broach","broadcast","broaden","broadside","broil","broker","brood","brook","browbeat","brown","browse","bruise","bruit","brush","brutalise","brutalize","bubble","buck","bucket","bucketful","buckle","bud","buddy","budge","budget","buff","buffer","buffet","bug","bugger","build","bulge","bulk","bulldoze","bullshit","bully","bum","bumble","bump","bunch","bundle","bung","bungle","bunk","bunker","bunt","buoy","burble","burden","burgeon","burglarize","burgle","burn","burnish","burp","burrow","burst","bury","bus","bushwhack","busk","bust","bustle","busy","butcher","butt","butter","button","buttonhole","buttress","buy","buzz","buzzing","bypass","cable","cache","cackle","caddie","cadge","cage","cajole","cake","calcify","calculate","calibrate","call","calm","calve","camouflage","camp","campaign","can","canalise","canalize","cancel","cane","cannibalise","cannibalize","cannon","cannulate","canoe","canonise","canonize","canoodle","canst","cant","canter","canvass","cap","caper","capitalise","capitalize","capitulate","capsize","captain","caption","captivate","capture","caramelise","caramelize","carbonise","carbonize","carburise","carburize","card","care","careen","career","caress","caricature","carjack","carol","carom","carouse","carp","carpet","carpool","carry","cart","cartwheel","carve","cascade","case","cash","cashier","casserole","cast","castigate","castrate","catalog","catalogue","catalyse","catalyze","catapult","catch","categorise","categorize","cater","caterwaul","catnap","caucus","caulk","cause","cauterise","cauterize","caution","cave","cavil","cavort","caw","cc","cease","cede","celebrate","cement","censor","censure","centralise","centralize","centre","certificate","certify","chafe","chaff","chain","chair","chalk","challenge","champ","champion","chance","change","channel","chant","chaperon","chaperone","char","characterise","characterize","charbroil","charge","chargesheet","chargrill","charm","chart","charter","chase","chasten","chastise","chat","chatter","chauffeur","cheapen","cheat","cheater","check","checkmate","cheek","cheep","cheer","cherish","chew","chicken","chide","chill","chillax","chime","chink","chip","chirp","chisel","chivvy","chlorinate","choke","chomp","choose","chop","choreograph","chortle","chorus","christen","chromakey","chronicle","chuck","chuckle","chug","chunder","chunter","churn","cinch","circle","circulate","circumcise","circumnavigate","circumscribe","circumvent","cite","civilise","civilize","clack","claim","clam","clamber","clamor","clamour","clamp","clang","clank","clap","clarify","clash","clasp","class","classify","clatter","claw","clean","cleanse","clear","cleave","clench","clerk","click","climax","climb","clinch","cling","clink","clinking","clip","cloak","clobber","clock","clog","clone","clonk","close","closet","clot","clothe","cloud","clout","clown","club","cluck","clue","clump","clunk","cluster","clutch","clutter","coach","coagulate","coalesce","coarsen","coast","coat","coax","cobble","cock","cocoon","coddle","code","codify","coerce","coexist","cogitate","cohabit","cohere","coil","coin","coincide","collaborate","collapse","collar","collate","collect","collectivise","collectivize","collide","colligate","collocate","collude","colonise","colonize","colorize","colour","comb","combat","combine","combust","come","comfort","command","commandeer","commemorate","commence","commend","comment","commentate","commercialise","commercialize","commingle","commiserate","commission","commit","commune","communicate","commute","compact","compare","compartmentalise","compartmentalize","compel","compensate","compete","compile","complain","complement","complete","complicate","compliment","comply","comport","compose","compost","compound","comprehend","compress","comprise","compromise","compute","computerise","computerize","con","conceal","concede","conceive","concentrate","conceptualise","conceptualize","concern","concertina","conciliate","conclude","concoct","concrete","concur","concuss","condemn","condense","condescend","condition","condone","conduct","cone","confer","confess","confide","configure","confine","confirm","confiscate","conflate","conflict","conform","confound","confront","confuse","confute","congeal","congratulate","congregate","conjecture","conjoin","conjugate","conjure","conk","connect","connive","connote","conquer","conscientise","conscientize","conscript","consecrate","consent","conserve","consider","consign","consist","console","consolidate","consort","conspire","constitute","constrain","constrict","construct","construe","consult","consume","consummate","contact","contain","contaminate","contemplate","contend","content","contest","contextualise","contextualize","continue","contort","contract","contradict","contraindicate","contrast","contravene","contribute","contrive","control","controvert","convalesce","convene","converge","converse","convert","convey","convict","convince","convoke","convulse","coo","cook","cool","coop","cooperate","coordinate","cop","cope","coppice","copulate","copy","copyright","cordon","core","cork","corkscrew","corner","corral","correct","correlate","correspond","corrode","corrupt","coruscate","cosh","cosset","cost","cosy","cotton","couch","cough","counsel","count","countenance","counter","counteract","counterbalance","counterfeit","countermand","counterpoint","countersign","couple","courier","course","court","covenant","cover","covet","cow","cower","cox","cozy","crack","crackle","cradle","craft","cram","cramp","crane","crank","crap","crash","crate","crave","crawl","crayon","creak","creaking","cream","crease","create","credential","credit","creep","cremate","creolise","creolize","creosote","crest","crew","crib","crick","criminalise","criminalize","crimp","cringe","crinkle","cripple","crisp","criticise","criticize","critique","croak","crochet","crook","croon","crop","cross","crouch","crow","crowd","crown","crucify","cruise","crumble","crumple","crunch","crusade","crush","cry","crystallise","crystallize","cube","cuckold","cuddle","cudgel","cue","cuff","cull","culminate","cultivate","culture","cup","curate","curb","curdle","cure","curl","curry","curse","curtail","curtain","curtsy","curve","cushion","cuss","customise","customize","cut","cwtch","cycle","dab","dabble","dally","dam","damage","dammit","damn","damp","dampen","dance","dandle","dangle","dare","darken","darn","dart","dash","date","daub","daunt","dawdle","dawn","daydream","dazzle","deactivate","deaden","deadhead","deafen","deal","debar","debase","debate","debilitate","debit","debrief","debug","debunk","debut","decamp","decant","decapitate","decay","deceive","decelerate","decentralise","decentralize","decide","decimalise","decimalize","decimate","decipher","deck","declaim","declare","declassify","decline","declutter","decode","decommission","decompose","decompress","deconsecrate","deconstruct","decontaminate","decontrol","decorate","decouple","decoy","decrease","decree","decriminalise","decriminalize","decry","decrypt","dedicate","deduce","deduct","deejay","deem","deepen","deface","defame","default","defeat","defecate","defect","defend","defer","defile","define","deflate","deflect","deflower","defog","defoliate","deforest","deform","defrag","defragment","defraud","defray","defrock","defrost","defuse","defy","degenerate","deglaze","degrade","degrease","dehumanise","dehumanize","dehydrate","deify","deign","delay","delegate","delete","deliberate","delight","delimit","delineate","deliquesce","deliver","delouse","delude","deluge","delve","demand","demarcate","demean","demerge","demilitarise","demilitarize","demineralise","demineralize","demist","demo","demob","demobilise","demobilize","democratise","democratize","demolish","demonise","demonize","demonstrate","demoralise","demoralize","demote","demotivate","demur","demystify","denationalise","denationalize","denigrate","denitrify","denominate","denote","denounce","dent","denude","deny","depart","depend","depersonalise","depersonalize","depict","deplane","deplete","deplore","deploy","depopulate","deport","depose","deposit","deprave","deprecate","depreciate","depress","depressurise","depressurize","deprive","depute","deputise","deputize","deracinate","derail","dereference","deregulate","deride","derive","derogate","descale","descend","describe","descry","desecrate","desegregate","deselect","desensitise","desensitize","desert","deserve","design","designate","desire","desist","deskill","desolate","despair","despise","despoil","destabilise","destabilize","destock","destroy","detach","detail","detain","detect","deter","deteriorate","determine","detest","dethrone","detonate","detour","detoxify","detract","detrain","devalue","devastate","develop","deviate","devise","devoice","devolve","devote","devour","diagnose","dial","dice","dicker","dictate","diddle","die","diet","differ","differentiate","diffract","diffuse","dig","digest","digitalise","digitalize","digitise","digitize","dignify","digress","dilate","dilute","diluted","dim","diminish","dimple","dine","ding","dink","dip","diphthongise","diphthongize","direct","dirty","dis","disable","disabuse","disadvantage","disaffiliate","disafforest","disagree","disallow","disambiguate","disappear","disappoint","disapprove","disarm","disarrange","disassemble","disassociate","disavow","disband","disbar","disbelieve","disburse","discard","discern","discharge","discipline","disclaim","disclose","discolor","discolour","discomfit","discomfort","discompose","disconcert","disconnect","discontinue","discount","discourage","discourse","discover","discredit","discriminate","discuss","disdain","disembark","disembowel","disenfranchise","disengage","disentangle","disestablish","disfigure","disgorge","disgrace","disguise","disgust","dish","dishearten","dishonor","dishonour","disillusion","disincentivise","disincentivize","disinfect","disinherit","disinhibit","disintegrate","disinter","disinvest","dislike","dislocate","dislodge","dismantle","dismay","dismember","dismiss","dismount","disobey","disorient","disorientate","disown","disparage","dispatch","dispel","dispense","disperse","displace","display","displease","disport","dispose","dispossess","disprove","dispute","disqualify","disregard","disrespect","disrobe","disrupt","dissect","dissemble","disseminate","dissent","dissimulate","dissipate","dissociate","dissolve","dissuade","distance","distend","distil","distill","distinguish","distort","distract","distress","distribute","distrust","disturb","disunite","ditch","dither","dive","diverge","diversify","divert","divest","divide","divine","divorce","divulge","divvy","do","dob","dock","doctor","document","dodge","doff","dog","dole","doll","dollarise","dollarize","domesticate","dominate","don","donate","doodle","doom","doorstep","dop","dope","dose","doss","dot","dote","double","doubt","douche","douse","dovetail","down","downchange","downgrade","downlink","download","downplay","downshift","downsize","dowse","doze","draft","drag","dragoon","drain","dramatise","dramatize","drape","draught","draw","drawl","dread","dream","dredge","drench","dress","dribble","drift","drill","drink","drip","drive","drivel","drizzle","drone","drool","droop","drop","drown","drowse","drug","drum","dry","dub","duck","duckie","ducks","duel","duff","dull","dumb","dumbfound","dummy","dump","dunk","dunt","dupe","duplicate","dust","dwarf","dwell","dwindle","dye","dynamite","earmark","earn","earth","ease","eat","eavesdrop","ebb","echo","eclipse","economise","economize","eddy","edge","edify","edit","editorialise","editorialize","educate","eff","efface","effect","effectuate","egg","ejaculate","eject","eke","elaborate","elapse","elbow","elect","electrify","electrocute","electroplate","elevate","elicit","elide","eliminate","elongate","elope","elucidate","elude","email","emanate","emancipate","emasculate","embalm","embargo","embark","embarrass","embed","embellish","embezzle","embitter","emblazon","embody","embolden","emboss","embrace","embroider","embroil","emcee","emend","emerge","emigrate","emit","emote","empathise","empathize","emphasise","emphasize","employ","empower","empty","emulate","emulsify","enable","enact","encamp","encapsulate","encase","encash","enchant","encircle","enclose","encode","encompass","encounter","encourage","encroach","encrypt","encumber","end","endanger","endear","endeavor","endeavour","endorse","endow","endure","energise","energize","enervate","enfeeble","enfold","enforce","enfranchise","engage","engender","engineer","engorge","engrave","engross","engulf","enhance","enjoin","enjoy","enlarge","enlighten","enlist","enliven","enmesh","ennoble","enquire","enrage","enrapture","enrich","enrol","enroll","ensconce","enshrine","enshroud","enslave","ensnare","ensue","ensure","entail","entangle","enter","entertain","enthral","enthrall","enthrone","enthuse","entice","entitle","entomb","entrance","entrap","entreat","entrench","entrust","entwine","enumerate","enunciate","envelop","envisage","envision","envy","epitomise","epitomize","equal","equalise","equalize","equate","equip","equivocate","eradicate","erase","erect","erode","err","erupt","escalate","escape","eschew","escort","espouse","espy","essay","establish","esteem","estimate","etch","eulogise","eulogize","euthanise","euthanize","evacuate","evade","evaluate","evangelise","evangelize","evaporate","even","eventuate","evict","evidence","evince","eviscerate","evoke","evolve","exacerbate","exact","exaggerate","exalt","examine","exasperate","excavate","exceed","excel","except","excerpt","exchange","excise","excite","exclaim","exclude","excommunicate","excoriate","excrete","exculpate","excuse","execute","exemplify","exempt","exercise","exert","exeunt","exfoliate","exhale","exhaust","exhibit","exhilarate","exhort","exhume","exile","exist","exit","exonerate","exorcise","exorcize","expand","expatiate","expect","expectorate","expedite","expel","expend","experience","experiment","expiate","expire","explain","explicate","explode","exploit","explore","export","expose","expostulate","expound","express","expropriate","expunge","expurgate","extemporise","extemporize","extend","exterminate","externalise","externalize","extinguish","extirpate","extol","extort","extract","extradite","extrapolate","extricate","extrude","exude","exult","eye","eyeball","eyeglasses","fabricate","face","facilitate","factor","factorise","factorize","fade","faff","fail","faint","fake","fall","falsify","falter","familiarise","familiarize","fan","fancy","fantasise","fantasize","fare","farewell","farm","farrow","fart","fascinate","fashion","fast","fasten","father","fathom","fatten","fault","favor","favour","fawn","fax","faze","fear","feast","feather","feature","federate","feed","feel","feign","feint","fell","fellate","feminise","feminize","fence","fend","ferment","ferret","ferry","fertilise","fertilize","fess","fester","festoon","fetch","fete","fetishise","fetishize","fetter","feud","fib","fictionalise","fictionalize","fiddle","fidget","field","fight","figure","filch","file","filibuster","fill","fillet","film","filter","finagle","finalise","finalize","finance","find","fine","finesse","finger","fingerprint","finish","fire","firebomb","firm","fish","fishtail","fit","fix","fizz","fizzle","flag","flagellate","flail","flake","flame","flank","flap","flare","flash","flat","flatline","flatten","flatter","flaunt","flavour","flay","fleck","flee","fleece","flesh","flex","flick","flicker","flight","flinch","fling","flip","flirt","flit","float","flock","flog","flood","floodlight","floor","flop","floss","flounce","flounder","flour","flourish","flout","flow","flower","flub","fluctuate","fluff","flummox","flunk","flush","fluster","flutter","fly","foal","foam","fob","focalise","focalize","focus","fog","foil","foist","fold","follow","foment","fondle","fool","foot","forage","forbear","forbid","force","ford","forearm","forecast","foreclose","foregather","foreground","foresee","foreshadow","foreshorten","forestall","foretell","forewarn","forfeit","forfend","forgather","forge","forget","forgive","forgo","fork","form","formalise","formalize","format","formulate","fornicate","forsake","forswear","fortify","forward","forwards","fossick","fossilise","fossilize","foster","foul","found","founder","fox","fracture","fragment","frame","franchise","frank","fraternise","fraternize","fray","freak","free","freelance","freeload","freestyle","freewheel","freeze","freight","frequent","freshen","fret","frighten","fringe","frisk","fritter","frizz","frizzle","frogmarch","frolic","front","frost","froth","frown","fruit","frustrate","fry","fuck","fudge","fuel","fulfil","fulfill","fulminate","fumble","fume","fumigate","function","fund","funk","funnel","furl","furlough","furnish","furrow","further","fuse","fuss","gab","gabble","gad","gag","gain","gainsay","gall","gallivant","gallop","galumph","galvanise","galvanize","gamble","gambol","gang","gape","garage","garden","gargle","garland","garner","garnish","garrison","garrote","garrotte","gas","gash","gasp","gatecrash","gather","gauge","gawk","gawp","gaze","gazump","gazunder","gear","gee","gel","geld","gen","generalise","generalize","generate","gentrify","genuflect","germinate","gerrymander","gestate","gesticulate","gesture","get","ghost","ghostwrite","gibber","gift","giggle","gild","ginger","gird","girdle","give","gladden","glamorise","glamorize","glance","glare","glass","glaze","gleam","glean","glide","glimmer","glimmering","glimpse","glint","glisten","glister","glitter","gloat","globalise","globalize","glom","glorify","glory","gloss","glow","glower","glue","glug","glut","gnash","gnaw","go","goad","gob","gobble","goggle","goldbrick","goof","google","goose","gore","gorge","gossip","gouge","govern","grab","grace","grade","graduate","graft","grant","grapple","grasp","grass","grate","gratify","gravitate","graze","grease","green","greet","grey","grieve","grill","grimace","grin","grind","grip","gripe","grit","grizzle","groan","grok","groom","grope","gross","grouch","ground","group","grouse","grout","grovel","grow","growl","grub","grudge","grumble","grunt","guarantee","guard","guess","guest","guffaw","guide","guillotine","guilt","gulp","gum","gun","gurgle","gurn","gush","gussy","gust","gut","gutter","guzzle","gybe","gyp","gyrate","hack","haemorrhage","haggle","hail","hallmark","halloo","hallucinate","halt","halve","ham","hammer","hamper","hamstring","hand","handcuff","handicap","handle","hang","hanker","happen","harangue","harass","harbor","harbour","harden","hare","hark","harm","harmonise","harmonize","harness","harp","harpoon","harrow","harrumph","harry","harvest","hash","hassle","hasten","hatch","hate","haul","haunt","have","haw","hawk","hazard","haze","head","headbutt","headhunt","headline","heal","heap","hear","hearken","hearten","heat","heave","heckle","hector","hedge","heed","heel","heft","heighten","heist","help","hem","hemorrhage","herald","herd","hesitate","hew","hex","hibernate","hiccough","hiccup","hide","hie","highball","highlight","hightail","hijack","hike","hinder","hinge","hint","hire","hiss","hit","hitch","hitchhike","hive","hoard","hoax","hobble","hobnob","hock","hoe","hog","hoick","hoist","hold","hole","holiday","holler","hollow","holster","home","homeschool","homestead","hone","honeymoon","honk","honour","hoodwink","hoof","hook","hoon","hoot","hoover","hop","hope","horn","horrify","horse","horsewhip","hose","hosepipe","hospitalise","hospitalize","host","hot","hotfoot","hound","house","hover","howl","huddle","huff","hug","hull","hum","humanise","humanize","humble","humiliate","humour","hump","hunch","hunger","hunker","hunt","hurdle","hurl","hurry","hurt","hurtle","husband","hush","husk","hustle","hybridise","hybridize","hydrate","hydroplane","hype","hyperventilate","hyphenate","hypnotise","hypnotize","hypothesise","hypothesize","ice","iconify","idealise","idealize","ideate","identify","idle","idolise","idolize","ignite","ignore","illuminate","illumine","illustrate","imagine","imagineer","imbibe","imbue","imitate","immerse","immigrate","immobilise","immobilize","immolate","immortalise","immortalize","immunise","immunize","immure","impact","impair","impale","impanel","impart","impeach","impede","impel","imperil","impersonate","impinge","implant","implement","implicate","implode","implore","imply","import","importune","impose","impound","impoverish","impregnate","impress","imprint","imprison","improve","improvise","impugn","inactivate","inaugurate","incapacitate","incarcerate","incarnate","incense","incentivise","incentivize","inch","incinerate","incise","incite","incline","include","incommode","inconvenience","incorporate","increase","incriminate","incubate","inculcate","incur","indemnify","indent","index","indicate","indict","individualise","individualize","individuate","indoctrinate","induce","induct","indulge","industrialise","industrialize","infantilise","infantilize","infect","infer","infest","infill","infiltrate","inflame","inflate","inflect","inflict","influence","inform","infringe","infuriate","infuse","ingest","ingratiate","inhabit","inhale","inhere","inherit","inhibit","initial","initialise","initialize","initiate","inject","injure","ink","inlay","innovate","inoculate","input","inscribe","inseminate","insert","inset","insinuate","insist","inspect","inspire","install","instance","instigate","instil","instill","institute","institutionalise","institutionalize","instruct","insulate","insult","insure","integrate","intend","intensify","inter","interact","interbreed","intercede","intercept","interchange","interconnect","intercut","interest","interface","interfere","interject","interlace","interleave","interlink","interlock","intermarry","intermesh","intermingle","intermix","intern","internalise","internalize","internationalise","internationalize","interpenetrate","interpolate","interpose","interpret","interrelate","interrogate","interrupt","intersect","intersperse","intertwine","intervene","interview","interweave","interwork","intimate","intimidate","intone","intoxicate","intrigue","introduce","intrude","intubate","intuit","inundate","inure","invade","invalid","invalidate","inveigh","inveigle","invent","inventory","invert","invest","investigate","invigilate","invigorate","invite","invoice","invoke","involve","ionise","ionize","irk","iron","irradiate","irrigate","irritate","irrupt","isolate","issue","italicise","italicize","itch","itemise","itemize","iterate","jab","jabber","jack","jackknife","jail","jam","jangle","jar","jaw","jaywalk","jazz","jeer","jell","jeopardise","jeopardize","jerk","jest","jet","jettison","jib","jibe","jig","jiggle","jilt","jingle","jink","jinx","jive","jockey","jog","joggle","join","joint","joke","jol","jolly","jolt","josh","jostle","jot","journey","joust","judder","judge","juggle","juice","jumble","jump","junk","justify","jut","juxtapose","keel","keelhaul","keen","keep","ken","key","keyboard","kibitz","kick","kid","kidnap","kill","kindle","kink","kip","kiss","kit","kite","klap","kludge","knacker","knead","knee","kneecap","kneel","knife","knight","knit","knock","knot","know","knuckle","kowtow","kvetch","label","labour","lace","lacerate","lack","lacquer","lactate","ladder","ladle","lag","lam","lamb","lambast","lambaste","lament","lamp","lampoon","lance","land","lands","landscape","languish","lap","lapse","lard","large","lark","lash","lasso","last","latch","lather","laud","laugh","launch","launder","lavish","lay","layer","laze","leach","lead","leaf","leaflet","leak","lean","leap","leapfrog","learn","lease","leash","leave","leaven","lech","lecture","leer","leg","legalise","legalize","legislate","legitimise","legitimize","lend","lengthen","lessen","let","letter","letterbox","level","lever","leverage","levitate","levy","liaise","libel","liberalise","liberalize","liberate","license","lick","lie","lift","ligate","light","lighten","like","liken","limber","lime","limit","limp","line","linger","link","lionise","lionize","liquefy","liquidate","liquidise","liquidize","lisp","list","listen","litigate","litter","live","liven","load","loads","loaf","loan","loathe","lob","lobby","lobotomise","lobotomize","localise","localize","locate","lock","lodge","loft","log","loiter","loll","lollop","long","look","looks","loom","loop","loose","loosen","loot","lop","lope","lord","lose","lounge","lour","louse","love","low","lowball","lower","lubricate","luck","lug","lull","lumber","lump","lunch","lunge","lurch","lure","lurk","lust","luxuriate","lynch","macerate","machine","madden","magic","magnetise","magnetize","magnify","mail","maim","mainline","mainstream","maintain","major","make","malfunction","malign","malinger","maltreat","man","manacle","manage","mandate","mangle","manhandle","manicure","manifest","manipulate","manoeuvre","mantle","manufacture","manure","map","mar","march","marginalise","marginalize","marinate","mark","market","maroon","marry","marshal","martyr","marvel","masculinise","masculinize","mash","mask","masquerade","mass","massacre","massage","master","mastermind","masticate","masturbate","match","mate","materialise","materialize","matriculate","matter","mature","maul","maunder","max","maximise","maximize","mean","meander","measure","mechanise","mechanize","medal","meddle","mediate","medicate","meditate","meet","meld","mellow","melt","memorialise","memorialize","memorise","memorize","menace","mend","menstruate","mention","meow","mercerise","mercerize","merchandise","merge","merit","mesh","mesmerise","mesmerize","mess","message","metabolise","metabolize","metamorphose","mete","meter","methinks","mew","mewl","miaow","microblog","microchip","micromanage","microwave","micturate","migrate","militarise","militarize","militate","milk","mill","mime","mimic","mince","mind","mine","mingle","miniaturise","miniaturize","minimise","minimize","minister","minor","mint","minute","mirror","misapply","misappropriate","misbehave","miscalculate","miscarry","miscast","misconceive","misconstrue","miscount","misdiagnose","misdial","misdirect","misfile","misfire","misgovern","mishandle","mishear","mishit","misinform","misinterpret","misjudge","miskey","mislay","mislead","mismanage","mismatch","misname","misplace","misplay","mispronounce","misquote","misread","misreport","misrepresent","miss","mission","misspell","misspend","mist","mistake","mistime","mistreat","mistrust","misunderstand","misuse","mitigate","mitre","mix","moan","mob","mobilise","mobilize","mock","mod","model","moderate","modernise","modernize","modify","modulate","moisten","moisturise","moisturize","mold","molder","molest","mollify","mollycoddle","molt","monitor","monopolise","monopolize","moo","mooch","moon","moonlight","moonwalk","moor","moot","mop","mope","moralise","moralize","morph","mortar","mortgage","mortify","mosey","mosh","mothball","mother","motion","motivate","motor","mould","moulder","moult","mount","mourn","mouse","mouth","move","movies","mow","muck","muddle","muddy","muff","muffle","mug","mulch","mull","multicast","multiply","multitask","mumble","mumbling","mummify","munch","murder","murmur","murmuring","murmurings","muscle","muse","mushroom","muss","muster","mutate","mute","mutilate","mutiny","mutter","muzzle","mystify","nab","nag","nail","name","namecheck","nap","narrate","narrow","narrowcast","nasalise","nasalize","nationalise","nationalize","natter","naturalise","naturalize","nauseate","navigate","near","nearer","nearest","neaten","necessitate","neck","necklace","need","needle","negate","negative","neglect","negotiate","neigh","nerve","nest","nestle","net","nettle","network","neuter","neutralise","neutralize","nibble","nick","nickname","niggle","nip","nitrify","nix","nobble","nod","nominalize","nominate","norm","normalise","normalize","nose","nosedive","nosh","notarise","notarize","notch","note","notice","notify","nourish","nudge","nuke","nullify","numb","number","nurse","nurture","nut","nuzzle","obey","obfuscate","object","objectify","oblige","obliterate","obscure","observe","obsess","obstruct","obtain","obtrude","obviate","occasion","occlude","occupy","occur","off","offend","offer","officiate","offload","offset","offshore","ogle","oil","okay","omit","ooze","open","operate","opine","oppose","oppress","opt","optimise","optimize","option","orbit","orchestrate","ordain","order","organise","organize","orient","orientate","originate","ornament","orphan","oscillate","ossify","ostracise","ostracize","oust","out","outbid","outclass","outdistance","outdo","outface","outfit","outflank","outfox","outgrow","outgun","outlast","outlaw","outline","outlive","outmaneuver","outmanoeuvre","outnumber","outpace","outperform","outplay","outpoint","output","outrage","outrank","outrun","outsell","outshine","outsmart","outsource","outstay","outstrip","outvote","outweigh","outwit","overachieve","overact","overawe","overbalance","overbook","overburden","overcharge","overcome","overcompensate","overcook","overdevelop","overdo","overdose","overdraw","overdub","overeat","overemphasize","overestimate","overexpose","overextend","overfeed","overflow","overfly","overgeneralise","overgeneralize","overgraze","overhang","overhaul","overhear","overheat","overindulge","overlap","overlay","overlie","overload","overlook","overpay","overplay","overpower","overprint","overproduce","overrate","overreach","overreact","override","overrule","overrun","oversee","oversell","overshadow","overshoot","oversimplify","oversleep","overspend","overstate","overstay","overstep","overstock","overstretch","overtake","overtax","overthrow","overtrain","overturn","overuse","overvalue","overwhelm","overwinter","overwork","overwrite","ovulate","owe","own","oxidise","oxidize","oxygenate","pace","pacify","pack","package","packetise","packetize","pad","paddle","padlock","page","paginate","pailful","pain","paint","pair","pal","palatalise","palatalize","pale","pall","palliate","palm","palpate","palpitate","pamper","pan","pander","panel","panhandle","panic","pant","paper","parachute","parade","parallel","paralyse","paralyze","paraphrase","parboil","parcel","parch","pardon","pare","park","parlay","parley","parody","parole","parrot","parry","parse","part","partake","participate","particularise","particularize","partition","partner","party","pass","passivise","passivize","paste","pasteurise","pasteurize","pasture","pat","patch","patent","patrol","patronise","patronize","patter","pattern","pause","pave","paw","pawn","pay","peak","peal","peck","pedal","peddle","pedestrianise","pedestrianize","pee","peek","peel","peep","peer","peg","pelt","pen","penalise","penalize","pencil","penetrate","pension","people","pep","pepper","perambulate","perceive","perch","percolate","perfect","perforate","perform","perfume","perish","perjure","perk","perm","permeate","permit","perpetrate","perpetuate","perplex","persecute","persevere","persist","personalise","personalize","personify","perspire","persuade","pertain","perturb","peruse","pervade","pervert","pester","pet","peter","petition","petrify","phase","philosophise","philosophize","phone","photocopy","photograph","photoshop","photosynthesise","photosynthesize","phrase","pick","picket","pickle","picnic","picture","picturise","picturize","piddle","piece","pierce","pig","pigeonhole","piggyback","pike","pile","pilfer","pill","pillage","pillory","pillow","pilot","pimp","pin","pinch","pine","ping","pinion","pink","pinpoint","pioneer","pip","pipe","pique","pirate","pirouette","piss","pit","pitch","pity","pivot","pixelate","pixellate","placate","place","plagiarise","plagiarize","plague","plait","plan","plane","plant","plaster","plasticise","plasticize","plate","plateau","play","plead","please","pledge","plight","plod","plonk","plop","plot","plough","pluck","plug","plumb","plummet","plump","plunder","plunge","plunk","pluralise","pluralize","ply","poach","pocket","point","poise","poison","poke","polarise","polarize","pole","poleax","poleaxe","police","polish","politicise","politicize","poll","pollard","pollinate","pollute","polymerise","polymerize","ponce","ponder","pong","pontificate","pony","poo","pooh","pool","poop","pootle","pop","popularise","popularize","populate","pore","port","portend","portion","portray","pose","posit","position","possess","posset","post","postmark","postpone","postulate","posture","pot","potter","pounce","pound","pour","pout","powder","power","practice","practise","praise","praises","prance","prang","prate","prattle","pray","preach","precede","precipitate","precis","preclude","predate","predecease","predetermine","predicate","predict","predispose","predominate","preen","preface","prefer","prefigure","prefix","preheat","prejudge","prejudice","preload","premaster","premiere","preoccupy","prep","prepare","prepone","preregister","presage","prescind","prescribe","preselect","presell","present","preserve","preset","preside","press","pressure","pressurise","pressurize","presume","presuppose","pretend","pretest","prettify","prevail","prevaricate","prevent","preview","prey","price","prick","prickle","pride","prime","primp","print","prioritise","prioritize","prise","privatise","privatize","privilege","prize","probate","probe","proceed","process","proclaim","procrastinate","procreate","proctor","procure","prod","produce","profane","profess","professionalise","professionalize","proffer","profile","profit","program","programme","progress","prohibit","project","proliferate","prolong","promenade","promise","promote","prompt","promulgate","pronounce","proof","proofread","prop","propagandise","propagandize","propagate","propel","prophesy","propitiate","propose","proposition","propound","proscribe","prosecute","proselytise","proselytize","prospect","prosper","prostitute","prostrate","protect","protest","protrude","prove","provide","provision","provoke","prowl","prune","pry","psych","psychoanalyse","publicise","publicize","publish","pucker","puff","puke","pull","pullulate","pulp","pulsate","pulse","pulverise","pulverize","pummel","pump","pun","punch","punctuate","puncture","punish","punt","pupate","purchase","purge","purify","purl","purloin","purport","purr","purse","pursue","purvey","push","pussyfoot","put","putrefy","putt","putter","puzzle","quack","quadruple","quaff","quail","quake","qualify","quantify","quarantine","quarrel","quarry","quarter","quarterback","quash","quaver","queer","quell","quench","query","quest","question","queue","quibble","quicken","quiet","quieten","quintuple","quip","quirk","quit","quiver","quiz","quote","quoth","rabbit","race","rack","radiate","radicalise","radicalize","radio","raffle","rag","rage","raid","rail","railroad","rain","raise","rake","rally","ram","ramble","ramp","rampage","randomise","randomize","range","rank","rankle","ransack","ransom","rant","rap","rape","rappel","rasp","rasterise","rasterize","rat","ratchet","rate","ratify","ration","rationalise","rationalize","rattle","ravage","rave","ravel","ravish","raze","razz","reach","reacquaint","react","reactivate","read","readdress","readies","readjust","readmit","ready","reaffirm","realign","realise","realize","reallocate","ream","reanimate","reap","reappear","reapply","reappoint","reappraise","rear","rearm","rearrange","reason","reassemble","reassert","reassess","reassign","reassure","reawaken","rebel","reboot","reborn","rebound","rebrand","rebuff","rebuild","rebuke","rebut","recall","recant","recap","recapitulate","recapture","recast","recede","receive","recess","recharge","reciprocate","recite","reckon","reclaim","reclassify","recline","recognise","recognize","recoil","recollect","recommence","recommend","recompense","reconcile","recondition","reconfigure","reconfirm","reconnect","reconnoitre","reconquer","reconsider","reconstitute","reconstruct","reconvene","record","recount","recoup","recover","recreate","recrudesce","recruit","rectify","recuperate","recur","recycle","redact","redden","redecorate","redeem","redefine","redeploy","redesign","redevelop","redial","redirect","rediscover","redistribute","redistrict","redo","redouble","redound","redraft","redraw","redress","reduce","reduplicate","reef","reek","reel","ref","refer","referee","reference","refill","refinance","refine","refit","reflate","reflect","refloat","refocus","reform","reformat","reformulate","refract","refrain","refresh","refrigerate","refuel","refund","refurbish","refuse","refute","regain","regale","regard","regenerate","register","regress","regret","regroup","regularise","regularize","regulate","regurgitate","rehabilitate","rehash","rehear","rehearse","reheat","rehome","rehouse","reign","reignite","reimburse","rein","reincarnate","reinforce","reinstate","reinterpret","reintroduce","reinvent","reinvest","reinvigorate","reissue","reiterate","reject","rejig","rejigger","rejoice","rejoin","rejuvenate","rekindle","relapse","relate","relaunch","relax","relay","release","relegate","relent","relieve","relinquish","relish","relive","reload","relocate","rely","remain","remainder","remake","remand","remap","remark","remarry","remaster","remediate","remedy","remember","remind","reminisce","remit","remix","remodel","remonstrate","remortgage","remould","remount","remove","remunerate","rename","rend","render","rendezvous","renege","renew","renounce","renovate","rent","reoccur","reoffend","reopen","reorder","reorganise","reorganize","reorient","repackage","repair","repatriate","repay","repeal","repeat","repel","repent","rephrase","replace","replay","replenish","replicate","reply","report","repose","repossess","represent","repress","reprieve","reprimand","reprint","reproach","reprocess","reproduce","reprove","repudiate","repulse","repurpose","request","require","requisition","requite","rerun","reschedule","rescind","rescue","research","researches","resect","resell","resemble","resent","reserve","reset","resettle","reshape","reshuffle","reside","resign","resist","resit","resize","reskill","resolve","resonate","resort","resound","resource","respect","respire","respond","respray","rest","restart","restate","restock","restore","restrain","restrict","restring","restructure","result","resume","resupply","resurface","resurrect","resuscitate","retail","retain","retake","retaliate","retard","retch","retell","retest","rethink","retire","retool","retort","retouch","retrace","retract","retrain","retreat","retrench","retrieve","retrofit","retry","return","reunify","reunite","reuse","rev","revalue","revamp","reveal","revel","revenge","reverberate","revere","reverse","revert","review","revile","revise","revisit","revitalise","revitalize","revive","revivify","revoke","revolt","revolutionise","revolutionize","revolve","reward","rewind","rewire","reword","rework","rewrite","rhapsodise","rhapsodize","rhyme","rib","rick","ricochet","rid","riddle","ride","ridge","ridicule","riffle","rifle","rig","right","rightsize","rile","rim","ring","rinse","riot","rip","ripen","riposte","ripple","rise","risk","ritualise","ritualize","rival","rivet","roam","roar","roast","rob","robe","rock","rocket","roger","roll","romance","romanticise","romanticize","romp","roof","room","roost","root","rope","rosin","roster","rot","rotate","rouge","rough","roughen","roughhouse","round","rouse","roust","rout","route","rove","row","rub","rubberneck","rubbish","ruck","rue","ruffle","ruin","ruins","rule","rumble","ruminate","rummage","rumor","rumour","rumple","run","rupture","rush","rust","rustle","sabotage","sack","sacrifice","sadden","saddle","safeguard","sag","sail","salaam","salivate","sally","salt","salute","salvage","salve","sample","sanctify","sanction","sand","sandbag","sandblast","sandpaper","sandwich","sanitise","sanitize","sap","sashay","sass","sate","satiate","satirise","satirize","satisfy","saturate","saunter","savage","save","savor","savour","saw","say","scald","scale","scallop","scalp","scamper","scan","scandalise","scandalize","scapegoat","scar","scare","scarf","scarify","scarper","scatter","scattering","scavenge","scent","schedule","schematise","schematize","scheme","schlep","schlepp","schmooze","school","schtup","schuss","scoff","scold","scoop","scoot","scope","scorch","score","scorn","scotch","scour","scourge","scout","scowl","scrabble","scram","scramble","scrap","scrape","scratch","scrawl","scream","screech","screen","screw","scribble","scrimp","script","scroll","scrounge","scrub","scrummage","scrunch","scruple","scrutinise","scrutinize","scud","scuff","scuffle","scull","sculpt","scupper","scurry","scuttle","scythe","seal","sealift","sear","search","season","seat","secede","seclude","second","secrete","section","secularise","secularize","secure","sedate","seduce","see","seed","seek","seep","seethe","segment","segregate","segue","seize","select","sell","sellotape","semaphore","send","sensationalise","sensationalize","sense","sensitise","sensitize","sentence","sentimentalise","sentimentalize","separate","sequence","sequester","sequestrate","serenade","serialise","serialize","sermonise","sermonize","serve","service","set","settle","sever","sew","sex","sexualise","sexualize","shack","shackle","shade","shadow","shaft","shag","shake","shalt","sham","shamble","shame","shampoo","shanghai","shape","share","sharpen","shatter","shave","shear","sheathe","shed","sheer","shell","shellac","shelter","shelve","shepherd","shield","shift","shimmer","shimmy","shin","shine","shinny","ship","shipwreck","shirk","shit","shiver","shock","shoe","shoehorn","shoo","shoot","shop","shoplift","shore","short","shorten","shortlist","shoulder","shout","shove","shovel","show","showboat","showcase","shower","shred","shriek","shrill","shrink","shrivel","shroom","shroud","shrug","shtup","shuck","shudder","shuffle","shun","shunt","shush","shut","shuttle","shy","sic","sick","sicken","side","sideline","sidestep","sideswipe","sidetrack","sidle","sieve","sift","sigh","sight","sightsee","sign","signal","signify","signpost","silence","silhouette","silt","silver","simmer","simper","simplify","simulate","simulcast","sin","sing","singe","single","sink","sip","siphon","sire","sit","site","situate","size","sizzle","skate","skateboard","skedaddle","sketch","skew","skewer","ski","skid","skim","skimp","skin","skip","skipper","skirmish","skirt","skitter","skive","skivvy","skulk","sky","skyjack","skyrocket","slack","slacken","slag","slake","slam","slander","slant","slap","slash","slate","slather","slaughter","slave","slaver","slay","sledge","sleek","sleep","sleepwalk","sleet","slew","slice","slick","slide","slight","slim","sling","slink","slip","slit","slither","slob","slobber","slog","slop","slope","slosh","slot","slouch","slough","slow","slug","sluice","slum","slumber","slump","slur","slurp","smack","smart","smarten","smash","smear","smell","smelt","smile","smirk","smite","smoke","smooch","smoodge","smooth","smother","smoulder","smudge","smuggle","snack","snaffle","snag","snaggle","snake","snap","snare","snarf","snarl","snatch","sneak","sneer","sneeze","snicker","sniff","sniffle","snigger","snip","snipe","snitch","snivel","snog","snooker","snoop","snooper","snooze","snore","snorkel","snort","snow","snowball","snowplough","snowplow","snub","snuff","snuffle","snuffling","snuggle","soak","soap","soar","sob","sober","socialise","socialize","sock","sod","sodomise","sodomize","soften","soil","sojourn","solace","solder","soldier","sole","solemnise","solemnize","solicit","solidify","soliloquize","solve","somersault","soothe","sorrow","sort","sough","sound","soundproof","soup","sour","source","souse","sow","space","span","spangle","spank","spar","spare","spark","sparkle","spatter","spattering","spawn","spay","speak","spear","spearhead","spec","specialise","specialize","specify","spectacles","spectate","speculate","speed","spell","spellcheck","spend","spew","spice","spiff","spike","spill","spin","spiral","spirit","spit","spite","splash","splatter","splay","splice","splinter","split","splosh","splurge","splutter","spoil","sponge","sponsor","spoof","spook","spool","spoon","sport","sports","spot","spotlight","spout","sprain","sprawl","spray","spread","spreadeagle","spring","springboard","sprinkle","sprint","spritz","sprout","spruce","spur","spurn","spurt","sputter","spy","squabble","squall","squander","square","squash","squat","squawk","squeak","squeal","squeeze","squelch","squint","squirm","squirrel","squirt","squish","stab","stabilise","stabilize","stable","stables","stack","staff","stage","stagger","stagnate","stain","stake","stalk","stall","stammer","stamp","stampede","stanch","stand","standardise","standardize","staple","star","starch","stare","start","startle","starve","stash","state","statement","station","staunch","stave","stay","steady","steal","steam","steamroller","steel","steep","steepen","steer","stem","stencil","step","stereotype","sterilise","sterilize","stew","stick","stickybeak","stiff","stiffen","stifle","stigmatise","stigmatize","still","stimulate","sting","stinger","stink","stint","stipple","stipulate","stir","stitch","stock","stockpile","stoke","stomach","stomp","stone","stonewall","stoop","stop","stopper","store","storm","storyboard","stow","straddle","strafe","straggle","straighten","strain","strand","strangle","strap","stratify","stravage","stravaig","stray","streak","stream","streamline","strengthen","stress","stretch","stretcher","strew","stride","strike","string","strip","strive","stroke","stroll","structure","struggle","strum","strut","stub","stud","study","stuff","stultify","stumble","stump","stun","stunt","stupefy","stutter","style","stymie","sub","subcontract","subdivide","subdue","subedit","subject","subjugate","sublet","sublimate","submerge","submit","subordinate","suborn","subpoena","subscribe","subside","subsidise","subsidize","subsist","substantiate","substitute","subsume","subtend","subtitle","subtract","subvert","succeed","succor","succour","succumb","suck","sucker","suckle","suction","sue","suffer","suffice","suffocate","suffuse","sugar","suggest","suit","sulk","sulks","sully","sum","summarise","summarize","summon","summons","sun","sunbathe","sunder","sunset","sup","superimpose","superintend","superpose","supersede","supersize","supersized","supervene","supervise","supplant","supplement","supply","support","suppose","suppress","suppurate","surcharge","surf","surface","surge","surmise","surmount","surpass","surprise","surrender","surround","survey","survive","suspect","suspend","suspenders","suss","sustain","suture","swab","swaddle","swagger","swallow","swamp","swan","swank","swap","swarm","swat","swath","swathe","sway","swear","sweat","sweep","sweeps","sweeten","swell","swelter","swerve","swig","swill","swim","swindle","swing","swipe","swirl","swish","switch","swivel","swoon","swoop","swoosh","swot","symbolise","symbolize","sympathise","sympathize","symptomize","synchronise","synchronize","syndicate","synthesise","synthesize","syringe","systematise","systematize","tab","table","tabulate","tack","tackle","tag","tail","tailgate","tailor","taint","take","talk","tally","tame","tamp","tamper","tan","tangle","tango","tank","tankful","tantalise","tantalize","tap","tape","taper","tar","target","tarmac","tarnish","tarry","tart","task","taste","tattle","tattoo","taunt","tauten","tax","taxi","taxicab","teach","team","tear","tease","tee","teem","teeter","teethe","telecast","telecommute","teleconference","telegraph","telemeter","teleoperate","telephone","teleport","telescope","televise","telex","tell","telnet","temp","temper","temporise","temporize","tempt","tenant","tend","tender","tenderise","tenderize","tense","tension","tergiversate","term","terminate","terraform","terrify","terrorise","terrorize","test","testify","tether","text","thank","thatch","thaw","theorise","theorize","thicken","thin","think","thirst","thrash","thread","threaten","thresh","thrill","thrive","throb","throbbing","throng","throttle","throw","thrust","thud","thumb","thump","thunder","thwack","thwart","tick","ticket","tickle","tide","tidy","tie","tighten","tile","till","tilt","time","timetable","tinge","tingle","tingling","tinker","tinkle","tinkling","tint","tip","tippex","tipple","tiptoe","tire","titillate","titivate","title","titrate","titter","toady","toast","toboggan","toddle","toe","tog","toggle","toil","toke","tolerate","toll","tone","tongue","tonify","tool","toot","tootle","top","topple","torch","torment","torpedo","torture","toss","tot","total","tote","totter","touch","tough","toughen","tour","tousle","tout","tow","towel","tower","toy","trace","track","trade","traduce","traffic","trail","train","traipse","trammel","tramp","trample","trampoline","tranquilize","tranquillize","transact","transcend","transcribe","transfer","transfigure","transfix","transform","transfuse","transgress","transit","translate","transliterate","transmit","transmogrify","transmute","transpire","transplant","transport","transpose","trap","trash","traumatise","traumatize","travel","traverse","trawl","tread","treasure","treat","treble","trek","tremble","trembling","trepan","trespass","trial","trick","trickle","trifle","trigger","trill","trim","trip","triple","triumph","trivialise","trivialize","troll","tromp","troop","trot","trouble","troubleshoot","trounce","trouser","truant","truck","trudge","trump","trumpet","truncate","trundle","truss","trust","try","tuck","tug","tugboat","tumble","tune","tunnel","turbocharge","turf","turn","tussle","tut","tutor","twang","tweak","tweet","twiddle","twig","twin","twine","twinkle","twirl","twist","twitch","twitter","twittering","type","typecast","typeset","typify","tyrannise","tyrannize","ulcerate","ululate","ump","umpire","unbalance","unban","unbend","unblock","unbuckle","unburden","unbutton","uncoil","uncork","uncouple","uncover","uncurl","undelete","underachieve","underbid","undercharge","undercook","undercut","underestimate","underestimation","underexpose","undergo","underlie","underline","undermine","underpay","underperform","underpin","underplay","underrate","underscore","undersell","undershoot","underspend","understand","understate","understudy","undertake","undervalue","underwrite","undo","undock","undress","undulate","unearth","unfasten","unfold","unfreeze","unfurl","unhand","unhinge","unhitch","unhook","unify","uninstall","unionise","unionize","unite","unlace","unlearn","unleash","unload","unlock","unloose","unloosen","unmask","unnerve","unpack","unpick","unplug","unravel","unroll","unsaddle","unscramble","unscrew","unseat","unsettle","unsubscribe","untangle","untie","unveil","unwind","unwrap","unzip","up","upbraid","upchange","upchuck","update","upend","upgrade","uphold","upholster","uplift","upload","uproot","upsell","upset","upshift","upskill","upstage","urge","urinate","use","usher","usurp","utilise","utilize","utter","vacate","vacation","vaccinate","vacillate","vacuum","valet","validate","value","vamoose","vandalise","vandalize","vanish","vanquish","vaporise","vaporize","varnish","vary","vault","veer","veg","vegetate","veil","vend","veneer","venerate","vent","ventilate","venture","verbalise","verbalize","verge","verify","versify","vest","vet","veto","vex","vibrate","victimise","victimize","vide","video","videotape","vie","view","viewing","vilify","vindicate","violate","visit","visualise","visualize","vitiate","vitrify","vocalize","voice","void","volley","volumise","volumize","volunteer","vomit","vote","vouch","vouchsafe","vow","voyage","vulgarise","vulgarize","wad","waddle","wade","waffle","waft","wag","wage","wager","waggle","wail","wait","waive","wake","wakeboard","waken","walk","wall","wallop","wallow","wallpaper","waltz","wander","wane","wangle","wank","want","warble","ward","warm","warn","warp","warrant","wash","wassail","waste","watch","water","waterproof","waterski","wave","waver","wax","waylay","weaken","wean","weaponise","weaponize","wear","weary","weasel","weather","weatherise","weatherize","weave","wed","wedge","wee","weed","weekend","weep","weigh","weight","weird","welch","welcome","weld","well","welly","welsh","wend","westernise","westernize","wet","whack","wheedle","wheel","wheeze","whelp","whet","whiff","while","whilst","whimper","whine","whinge","whinny","whip","whirl","whirr","whirring","whisk","whisper","whispering","whistle","whiten","whitewash","whittle","whiz","whizz","whoop","whoosh","whup","wick","widen","widow","wield","wig","wiggle","wildcat","will","wilt","wimp","win","wince","winch","wind","winds","windsurf","wine","wing","wink","winkle","winnow","winter","wipe","wire","wiretap","wise","wisecrack","wish","withdraw","wither","withhold","withstand","witness","witter","wobble","wolf","wonder","woo","woof","word","work","worm","worry","worsen","worship","worst","wound","wow","wowee","wrangle","wrap","wreak","wreathe","wreck","wrench","wrest","wrestle","wriggle","wring","wrinkle","writ","write","writhe","wrong","wrought","xerox","yack","yak","yank","yap","yaw","yawn","yearn","yell","yellow","yelp","yield","yodel","yoke","yomp","yowl","yuppify","zap","zero","zigzag","zing","zip","zone","zoom"];var Ec=Object.freeze({adjective:dn,adverb:pn,conjunction:un,interjection:hn,noun:mn,preposition:fn,verb:gn}),yn=Ec;var xc=Object.freeze({title:"English",syntax:Qa,time:Za,internet:sn,person:cn,word:yn}),oe=xc;var at=["male","female"],be=Symbol("randomValue"),Ci=Symbol("typesValue"),Le=Symbol("localeValue"),Pr=class{[Ci];[be];[Le];constructor(e={}){this[Ci]=new Ve(e.seed),this[be]=new Ot(e.seed),this[Le]=e.locale||oe}seed(e){this[be].seed(e),this[Ci].seed(e)}locale(e){this[Le]=e||oe}firstName(e){let{person:t}=this[Le],i=e&&at.includes(e)?e:this[be].pickOne(at),r;t&&t.firstName&&t.firstName[i]?r=t.firstName:r=oe.person.firstName;let s=r[i];return this[be].pickOne(s)}lastName(e){let{person:t}=this[Le];if(!e){let a=t&&t.lastName||oe.person.lastName;if(Array.isArray(a.general)&&a.general.length)return this[be].pickOne(a.general);throw new Error("The locale does not have a general last name pool.")}let i=e&&at.includes(e)?e:this[be].pickOne(at),r;t&&t.lastName&&t.lastName[i]?r=t.lastName:r=oe.person.lastName;let s=r[i];return this[be].pickOne(s)}middleName(e){let{person:t}=this[Le],i=t&&t.middleName||t&&t.firstName||oe.person.firstName,r=e&&at.includes(e)?e:this[be].pickOne(at),s=i[r];return this[be].pickOne(s)}name(e={}){let{firstName:t,lastName:i,gender:r}=e,s=[];return this[Ci].boolean({likelihood:10})&&s.push(this.prefix(r)),s.push(t||this.firstName(r)),s.push(i||this.lastName(r)),this[Ci].boolean({likelihood:10})&&s.push(this.suffix(r)),s.join(" ")}gender(e){let{person:t}=this[Le],i=t&&t.gender||oe.person.gender;return e?this[be].pickOne(i.binary||oe.person.gender.binary):this[be].pickOne(i.pool||oe.person.gender.pool)}prefix(e){let{person:t}=this[Le],i=t&&t.prefix||oe.person.prefix;if(!e&&Array.isArray(i.general)&&i.general.length)return this[be].pickOne(i.general);let r=e&&at.includes(e)?e:this[be].pickOne(at),s=i[r]||oe.person.prefix[r];return this[be].pickOne(s)}suffix(e){let{person:t}=this[Le],i=t&&t.suffix||oe.person.suffix;if(Array.isArray(i.general)&&i.general.length)return this[be].pickOne(i.general);let r=e&&at.includes(e)?e:this[be].pickOne(at),s=i[r]||oe.person.suffix[r];return this[be].pickOne(s)}jobTitle(){let e=this.jobDescriptor(),t=this.jobArea(),i=this.jobType();return`${e} ${t} ${i}`}jobDescriptor(){let{person:e}=this[Le],t;return e&&e.title&&e.title.descriptor?t=e.title:t=oe.person.title,this[be].pickOne(t.descriptor)}jobArea(){let{person:e}=this[Le],t;return e&&e.title&&e.title.level?t=e.title:t=oe.person.title,this[be].pickOne(t.level)}jobType(){let{person:e}=this[Le],t;return e&&e.title&&e.title.job?t=e.title:t=oe.person.title,this[be].pickOne(t.job||[])}};var Or=Symbol("randomValue"),Ke=Symbol("typesValue"),Cr=Symbol("localeValue"),Rr=class{[Ke];[Or];[Cr];constructor(e={}){this[Ke]=new Ve(e.seed),this[Or]=new Ot(e.seed),this[Cr]=e.locale||oe}seed(e){this[Or].seed(e),this[Ke].seed(e)}locale(e){this[Cr]=e||oe}word(e={}){let t={...e};if(typeof t.syllables=="number"&&typeof t.length=="number")throw new RangeError('Cannot specify both "syllables" and "length".');let i="";if(typeof t.length=="number"){do i+=this.syllable();while(i.length<t.length);i=i.substring(0,t.length)}else{let r=t.syllables||this[Ke].number({min:1,max:3});for(let s=0;s<r;s++)i+=this.syllable()}return t.capitalize&&(i=this.capitalize(i)),i}capitalize(e){return e.charAt(0).toUpperCase()+e.substr(1)}words(e=3){return new Array(e).fill("").map(()=>this.word()).join(" ")}sentence(e={}){let t={...e},{words:i=this[Ke].number({min:12,max:18})}=t,r=new Array(i).fill("").map(()=>this.word()).join(" ");r=this.capitalize(r);let{punctuation:s}=t;return s!==!1&&!/^[.?;!:]$/.test(String(s))&&(s="."),s&&(r+=s),r}sentences(e={}){let t={};typeof e=="number"?t.size=e:t={...e};let{size:i=this[Ke].number({min:2,max:6})}=t;return new Array(i).fill("").map(()=>this.sentence()).join(" ")}slug(e){let t=this.words(e);return qa(t)}paragraph(e={}){let t={};typeof e=="number"?t.sentences=e:t={...e};let{lineBreak:i,sentences:r=this[Ke].number({min:3,max:7})}=t;return new Array(r).fill("").map(()=>this.sentence()).join(i===!0?`\r
|
|
35
|
+
`:" ")}paragraphs(e={}){let t={};typeof e=="number"?t.size=e:t={...e};let{separator:i=`\r
|
|
36
|
+
`,size:r=this[Ke].number({min:1,max:7})}=t;return new Array(r).fill("").map(()=>this.paragraph()).join(i)}syllable(e={}){let{syntax:t}=this[Cr],i={...e},r=i.length||this[Ke].number({min:2,max:3}),s=t&&t.consonants||oe.syntax.consonants,a=t&&t.vowels||oe.syntax.vowels,n=s+a,l="",c;for(let p=0;p<r;p++)p===0?c=this[Ke].character({pool:n}):c&&a.includes(c)?c=this[Ke].character({pool:s}):c=this[Ke].character({pool:a}),l+=c;return i.capitalize&&(l=this.capitalize(l)),l}lorem(){let e=["word","words","sentence","sentences","paragraph","paragraphs"],t=this[Or].pickOne(e);return this[t]()}};var Fe=Symbol("typesValue"),Ri=Symbol("localeValue"),Kt=class{[Fe];[Ri];constructor(e={}){this[Fe]=new Ve(e.seed),this[Ri]=e.locale||oe}seed(e){this[Fe].seed(e)}locale(e){this[Ri]=e||oe}date(e){return this[Fe].datetime(e)}amPm(){return this[Fe].boolean()?"am":"pm"}timestamp(e){return this[Fe].datetime(e).getTime()}hour(e={}){let t={...e};if(typeof t.min!="number"&&(t.min=t.twentyFour?0:1),typeof t.max!="number"&&(t.max=t.twentyFour?23:12),t.min<0)throw new RangeError(`Provided value ${t.min} for min is less than 0.`);if(t.max>23&&t.twentyFour||t.max>12&&!t.twentyFour)throw new RangeError(`Provided value ${t.max} for max is greater than ${t.twentyFour?23:12}.`);if(t.min>t.max)throw new RangeError(`The min value (${t.min}) cannot be greater than max value (${t.max}).`);return this[Fe].number({min:t.min,max:t.max})}minute(e={}){let{min:t=0,max:i=59}=e;if(t<0)throw new RangeError(`Provided value ${t} for min is less than 0.`);if(i>59)throw new RangeError(`Provided value ${i} for max is greater than 59.`);if(t>i)throw new RangeError(`The min value (${t}) cannot be greater than max value (${i}).`);return this[Fe].number({min:t,max:i})}millisecond(){return this[Fe].number({max:999})}second(){return this[Fe].number({max:59})}month(e={}){let{min:t=1,max:i=12}=e;if(t<1)throw new RangeError(`Provided value ${t} for min is less than 1.`);if(i>12)throw new RangeError(`Provided value ${i} for max is greater than 12.`);if(t>i)throw new RangeError(`The min value (${t}) cannot be greater than max value (${i}).`);return this[Fe].number({min:t,max:i})}monthName(e={}){let t=this.month(e);return this.months(e.abbr)[t-1]}months(e=!1){let{time:t}=this[Ri],i;return t&&t.month&&t.month.abbr&&t.month.abbr.length>0?i=t.month:i=oe.time.month,e?i.abbr:i.names}weekdays(e=!1){let{time:t}=this[Ri],i;return t&&t.weekday&&t.weekday.abbr&&t.weekday.abbr.length>0?i=t.weekday:i=oe.time.weekday,e?i.abbr:i.names}weekday(e={}){let{min:t=1,max:i=7}=e;if(t<1)throw new RangeError(`Provided value ${t} for min is less than 1.`);if(i>7)throw new RangeError(`Provided value ${i} for max is greater than 7.`);if(t>i)throw new RangeError(`The min value (${t}) cannot be greater than max value (${i}).`);return this[Fe].number({min:t,max:i})}weekdayName(e={}){let t=this.weekday(e);return this.weekdays(e.abbr)[t-1]}midnight(e=Date.now()){let t=new Date(e);return t.setHours(0,0,0,0),t.getTime()}dateOnly(e){let t=this.date(e),i=t.getFullYear(),r=(t.getMonth()+1).toString().padStart(2,"0"),s=t.getDate().toString().padStart(2,"0");return`${i}-${r}-${s}`}timeOnly(e){let t=this.date(e),i=t.getHours().toString().padStart(2,"0"),r=t.getMinutes().toString().padStart(2,"0"),s=t.getSeconds().toString().padStart(2,"0");return`${i}:${r}:${s}`}dateTime(e="rfc3339",t){let i=this.date(t);if(e==="rfc2616")return i.toUTCString();if(e==="rfc3339"){let r=i.getUTCFullYear(),s=(i.getUTCMonth()+1).toString().padStart(2,"0"),a=i.getUTCDate().toString().padStart(2,"0"),n=i.getUTCHours().toString().padStart(2,"0"),l=i.getUTCMinutes().toString().padStart(2,"0"),c=i.getUTCSeconds().toString().padStart(2,"0"),p=i.getUTCMilliseconds().toString().padStart(3,"0");return`${r}-${s}-${a}T${n}:${l}:${c}.${p}Z`}return""}dateTimeOnly(e){let t=this.date(e),i=t.getFullYear(),r=(t.getMonth()+1).toString().padStart(2,"0"),s=t.getDate().toString().padStart(2,"0"),a=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0"),l=t.getSeconds().toString().padStart(2,"0");return`${i}-${r}-${s}T${a}:${n}:${l}`}};var C;(function(o){o[o.ROOT=0]="ROOT",o[o.GROUP=1]="GROUP",o[o.POSITION=2]="POSITION",o[o.SET=3]="SET",o[o.RANGE=4]="RANGE",o[o.REPETITION=5]="REPETITION",o[o.REFERENCE=6]="REFERENCE",o[o.CHAR=7]="CHAR"})(C||(C={}));var Nc=()=>({type:C.POSITION,value:"b"}),$c=()=>({type:C.POSITION,value:"B"}),jc=()=>({type:C.POSITION,value:"^"}),Ic=()=>({type:C.POSITION,value:"$"}),ea=()=>[{type:C.RANGE,from:48,to:57}],bn=()=>[{type:C.CHAR,value:95},{type:C.RANGE,from:97,to:122},{type:C.RANGE,from:65,to:90},...ea()],kn=()=>[{type:C.CHAR,value:9},{type:C.CHAR,value:10},{type:C.CHAR,value:11},{type:C.CHAR,value:12},{type:C.CHAR,value:13},{type:C.CHAR,value:32},{type:C.CHAR,value:160},{type:C.CHAR,value:5760},{type:C.CHAR,value:6158},{type:C.CHAR,value:8192},{type:C.CHAR,value:8193},{type:C.CHAR,value:8194},{type:C.CHAR,value:8195},{type:C.CHAR,value:8196},{type:C.CHAR,value:8197},{type:C.CHAR,value:8198},{type:C.CHAR,value:8199},{type:C.CHAR,value:8200},{type:C.CHAR,value:8201},{type:C.CHAR,value:8202},{type:C.CHAR,value:8232},{type:C.CHAR,value:8233},{type:C.CHAR,value:8239},{type:C.CHAR,value:8287},{type:C.CHAR,value:12288},{type:C.CHAR,value:65279}],Pc=()=>[{type:C.CHAR,value:10},{type:C.CHAR,value:13},{type:C.CHAR,value:8232},{type:C.CHAR,value:8233}],wn=()=>({type:C.SET,set:bn(),not:!1}),vn=()=>({type:C.SET,set:bn(),not:!0}),_n=()=>({type:C.SET,set:ea(),not:!1}),Sn=()=>({type:C.SET,set:ea(),not:!0}),An=()=>({type:C.SET,set:kn(),not:!1}),En=()=>({type:C.SET,set:kn(),not:!0}),Oc=()=>({type:C.SET,set:Pc(),not:!0}),Cc={0:0,t:9,n:10,v:11,f:12,r:13},Rc=o=>{let e=/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\]^?])|([0tnvfr]))/g;return o.replace(e,(t,i,r,s,a,n,l,c)=>{if(r)return t;let p=i?8:s?parseInt(s,16):a?parseInt(a,16):n?parseInt(n,8):l?"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?".indexOf(l):Cc[c],u=String.fromCharCode(p);return/[[{}^$.|?*+()]/.test(u)&&(u=`\\${u}`),u})},Tc=(o,e)=>{let t=[],i=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g,r,s;for(;(r=i.exec(o))!==null;)if(r[1])t.push(wn());else if(r[2])t.push(_n());else if(r[3])t.push(An());else if(r[4])t.push(vn());else if(r[5])t.push(Sn());else if(r[6])t.push(En());else if(r[7])t.push({type:C.RANGE,from:(r[8]||r[9]).charCodeAt(0),to:r[10].charCodeAt(0)});else if(s=r[12])t.push({type:C.CHAR,value:s.charCodeAt(0)});else return[t,i.lastIndex];throw new SyntaxError(`Invalid regular expression: /${e}/: Unterminated character class`)},Tr=(o,e)=>{throw new SyntaxError(`Invalid regular expression: /${o}/: ${e}`)},xn=o=>{let e=0,t={type:C.ROOT,stack:[]},i=t,r=t.stack,s=[],a=l=>Tr(o,`Nothing to repeat at column ${l-1}`),n=Rc(o);for(;e<n.length;){let l=n[e++];switch(l){case"\\":switch(l=n[e++],l){case"b":r.push(Nc());break;case"B":r.push($c());break;case"w":r.push(wn());break;case"W":r.push(vn());break;case"d":r.push(_n());break;case"D":r.push(Sn());break;case"s":r.push(An());break;case"S":r.push(En());break;default:/\d/.test(l)?r.push({type:C.REFERENCE,value:parseInt(l,10)}):r.push({type:C.CHAR,value:l.charCodeAt(0)})}break;case"^":r.push(jc());break;case"$":r.push(Ic());break;case"[":{let c=!1;n[e]==="^"&&(c=!0,e++);let[p,u]=Tc(n.slice(e),o);e+=u,r.push({type:C.SET,set:p,not:c});break}case".":r.push(Oc());break;case"(":{let c={type:C.GROUP,stack:[],remember:!0};n[e]==="?"&&(l=n[e+1],e+=2,l==="="?c.followedBy=!0:l==="!"?c.notFollowedBy=!0:l!==":"&&Tr(o,`Invalid group, character '${l}' after '?' at column ${e-1}`),c.remember=!1),r.push(c),s.push(i),i=c,r=c.stack;break}case")":s.length===0&&Tr(o,`Unmatched ) at column ${e-1}`),i=s.pop(),r=i.options?i.options[i.options.length-1]:i.stack;break;case"|":i.options||(i.options=[i.stack],delete i.stack);{let c=[];i.options.push(c),r=c}break;case"{":{let c=/^(\d+)(,(\d+)?)?\}/.exec(n.slice(e));if(c){r.length===0&&a(e);let p=parseInt(c[1],10),u=c[2]?c[3]?parseInt(c[3],10):1/0:p;e+=c[0].length,r.push({type:C.REPETITION,min:p,max:u,value:r.pop()})}else r.push({type:C.CHAR,value:123});break}case"?":r.length===0&&a(e),r.push({type:C.REPETITION,min:0,max:1,value:r.pop()});break;case"+":r.length===0&&a(e),r.push({type:C.REPETITION,min:1,max:1/0,value:r.pop()});break;case"*":r.length===0&&a(e),r.push({type:C.REPETITION,min:0,max:1/0,value:r.pop()});break;default:r.push({type:C.CHAR,value:l.charCodeAt(0)})}}return s.length!==0&&Tr(o,"Unterminated group"),t};var Ti=class o{types;constructor(e={}){this.types=new Ve(e.seed)}seed(e){this.types.seed(e)}fromPattern(e,t={}){let i,r;e instanceof globalThis.RegExp?(r=e.ignoreCase,i=e.source):(r=t.flags?.includes("i")??!1,i=e);let s=10;typeof t.max=="number"&&(s=t.max);let a=xn(i),n=Array.from({length:95},(l,c)=>c+32);return this._gen(a,[],r,n,s)}_gen(e,t,i,r,s){let a,n,l,c;switch(e.type){case C.ROOT:case C.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&e.groupNumber===void 0&&(e.groupNumber=t.push(null)-1),a=e.options?this._choice(e.options):e.stack,n="",l=0,c=a.length;l<c;l++)n+=this._gen(a[l],t,i,r,s);return e.remember&&(t[e.groupNumber]=n),n;case C.POSITION:return"";case C.SET:{let p=this._processSet(e,i,r);return p.length?String.fromCharCode(this._choice(p)):""}case C.REPETITION:{let p=e.max===1/0?Math.max(e.min,s):e.max,u=this.types.number({min:e.min,max:p});for(n="",l=0;l<u;l++)n+=this._gen(e.value,t,i,r,s);return n}case C.REFERENCE:return t[e.value-1]||"";case C.CHAR:{let p=i&&this._coin()?o._toCaseInverse(e.value):e.value;return String.fromCharCode(p)}}return""}_processSet(e,t,i){if(e.type===C.CHAR)return[e.value];if(e.type===C.RANGE){let s=[];for(let a=e.from;a<=e.to;a++)s.push(a);return s}let r=new Set;for(let s of e.set){let a=this._processSet(s,t,i);if(a.forEach(n=>r.add(n)),t)for(let n of a){let l=n,c=o._toCaseInverse(l);l!==c&&r.add(c)}}return e.not?i.filter(s=>!r.has(s)):Array.from(r)}static _toCaseInverse(e){return e>=97&&e<=122?e-32:e>=65&&e<=90?e+32:e}_coin(){return this.types.number({min:0,max:1})===0}_choice(e){return e[this.types.number({min:0,max:e.length-1})]}};var Ct=class o{static types=new Ve;static person=new Pr;static lorem=new Rr;static regExp=new Ti;static readInputValue(e,t,i={}){let{required:r}=e,{defaultValueStr:s,values:a}=t;if(!(!r&&i.requiredOnly===!0)){if(s)return o.readTypedValue(s,t.dataType);if(Array.isArray(a)&&a.length){let n=a[0];return o.readTypedValue(n.value,n.dataType)}if(i.fromExamples){let n;if(Array.isArray(e.examples)&&e.examples.length?n=e.examples.filter(l=>typeof l!="string"):Array.isArray(t.examples)&&t.examples.length&&(n=t.examples),n&&n.length)return o.inputValueFromExamples(n)}return o.generateDefaultValue(t)}}static readInputValues(e,t,i={}){if(!e.required&&i.requiredOnly===!0)return[];let{defaultValue:r}=t;if(r){let n=new Ce().processNode(r);if(Array.isArray(n))return n}let s=t;if(i.fromExamples){let a;return Array.isArray(e.examples)&&e.examples.length?a=e.examples.filter(n=>typeof n!="string"):Array.isArray(s.examples)&&s.examples.length&&(a=s.examples),o.arrayValuesFromExamples(a)}return[]}static inputValueFromExamples(e){if(!Array.isArray(e)||!e.length)return;let[t]=e,{structuredValue:i}=t;if(i&&i.types.includes(d.aml.vocabularies.data.Scalar)){let r=i;return o.readTypedValue(r.value,r.dataType)}}static arrayValuesFromExamples(e){let t=[];if(!Array.isArray(e)||!e.length)return t;let[i]=e;if(!i.structuredValue||!i.structuredValue.types.includes(d.aml.vocabularies.data.Array))return t;let r=i.structuredValue,{members:s}=r;return!Array.isArray(s)||!s.length||s.forEach(a=>{let n=a;if(!n.value)return;let l=o.readTypedValue(n.value,n.dataType);typeof r<"u"&&r!==null&&t.push(l)}),t}static generateDefaultValue(e){let{dataType:t}=e;return this.defaultValue(t)}static generateMockedValue(e){let{dataType:t}=e;switch(t){case d.w3.xmlSchema.string:case d.aml.vocabularies.shapes.password:return this.generateStringValue(e);case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:return this.generateNumberValue(e);case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return this.types.boolean();case d.aml.vocabularies.shapes.nil:case d.w3.xmlSchema.nil:return null;case d.w3.xmlSchema.date:return new Kt().dateOnly();case d.w3.xmlSchema.dateTime:return new Kt().dateTime(e.format==="date-time"?"rfc3339":e.format);case d.aml.vocabularies.shapes.dateTimeOnly:return new Kt().dateTimeOnly();case d.w3.xmlSchema.time:return new Kt().timeOnly();default:return}}static defaultValue(e){switch(e){case d.w3.xmlSchema.string:case d.aml.vocabularies.shapes.password:return"";case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:return 0;case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return!1;case d.aml.vocabularies.shapes.nil:case d.w3.xmlSchema.nil:return null;case d.w3.xmlSchema.date:return"";case d.w3.xmlSchema.dateTime:return"";case d.aml.vocabularies.shapes.dateTimeOnly:return"";case d.w3.xmlSchema.time:return"";default:return}}static generateNumberValue(e){let{minimum:t,maximum:i,format:r,multipleOf:s}=e,a={};typeof t=="number"&&(a.min=t),typeof i=="number"&&(a.max=i);let n;return r&&["float","double"].includes(r)?n=this.types.float.bind(this.types):r&&["uint32","uint64","fixed32","fixed64"].includes(r)&&(a.min=0,a.max&&a.max<0&&delete a.max),n||(n=this.types.number.bind(this.types)),typeof s=="number"&&(a.precision=s),n(a)}static generateStringValue(e){let{minLength:t,maxLength:i,name:r="",format:s,pattern:a}=e;if(a)return new Ti().fromPattern(a,{max:10});let n=r.toLowerCase();if(n==="description")return this.lorem.paragraph();if(s==="uuid")return this.types.uuid();if(n==="id"){let p={length:12},u=typeof t=="number";return u?p.length=t:!u&&typeof i=="number"&&(p.length=i),this.types.hash(p)}if(["name","fullname"].includes(n))return this.person.name();if(n==="firstname")return this.person.firstName();if(n==="lastname")return this.person.lastName();let l={},c=typeof t=="number";return c?l.length=t:!c&&typeof i=="number"&&(l.length=i),this.lorem.word(l)}static readTypedValue(e,t){return Sr(e,t)}static readInputType(e){switch(e){case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:return"number";case d.w3.xmlSchema.date:return"date";case d.w3.xmlSchema.time:return"time";case d.w3.xmlSchema.dateTime:case d.aml.vocabularies.shapes.dateTimeOnly:return"datetime-local";case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return"boolean";case d.aml.vocabularies.shapes.password:return"password";default:return"text"}}static parseNumberInput(e,t){return Rs(e,t)}static parseBooleanInput(e,t){return Ts(e,t)}static parseDateOnlyInput(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return;let i=t.toJSON(),r=i.indexOf("T");return i.substring(0,r)}static parseTimeOnlyInput(e){let t=String(e).trim();if(/^\d\d:\d\d$/.test(t))return`${t}:00`;if(/^\d\d:\d\d:\d\d$/.test(t))return t}static parseDateTimeInput(e,t="rfc3339"){let i=new Date(e);if(!Number.isNaN(i.getTime())){if(t==="rfc2616")return i.toUTCString();if(["rfc3339","date-time"].includes(t))return i.toISOString()}}static parseDateTimeOnlyInput(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return;let i=t.toJSON(),r=i.indexOf(".");return i.substring(0,r)}static parseArrayInput(e,t){let{items:i}=t;return i?o.parseUserInput(e,i):String(e)}static parseUserInput(e,t){if(!t||e===void 0||e===null)return e;let{types:i}=t;return i.includes(d.aml.vocabularies.shapes.ScalarShape)?o.parseScalarInput(e,t):i.includes(d.aml.vocabularies.shapes.ArrayShape)||i.includes(d.aml.vocabularies.shapes.MatrixShape)?o.parseArrayInput(e,t):e}static parseScalarInput(e,t){return this.parseScalar(e,t.dataType,t.format)}static parseScalar(e,t,i){switch(t){case d.aml.vocabularies.shapes.number:case d.aml.vocabularies.shapes.integer:case d.aml.vocabularies.shapes.float:case d.aml.vocabularies.shapes.long:case d.aml.vocabularies.shapes.double:case d.w3.xmlSchema.number:case d.w3.xmlSchema.integer:case d.w3.xmlSchema.float:case d.w3.xmlSchema.long:case d.w3.xmlSchema.double:return o.parseNumberInput(e);case d.aml.vocabularies.shapes.boolean:case d.w3.xmlSchema.boolean:return o.parseBooleanInput(e);case d.w3.xmlSchema.date:return o.parseDateOnlyInput(e);case d.w3.xmlSchema.time:return o.parseTimeOnlyInput(e);case d.w3.xmlSchema.dateTime:return o.parseDateTimeInput(e,i);case d.aml.vocabularies.shapes.dateTimeOnly:return o.parseDateTimeOnlyInput(e);default:return String(e)}}};var Ft=class{opts;constructor(e={}){this.opts=Object.freeze({...e})}_scalarValue(e){let{defaultValue:t,examples:i,values:r,inherits:s,dataType:a}=e;if(this.opts.renderExamples&&i&&i.length){let n=i.find(c=>!!c.structuredValue),l=this._exampleToObject(n);if(typeof l<"u")return Ct.readTypedValue(l,a)}if(t)return new Ce().processNode(t);if(r&&r.length){let n=r[0];if(n.value!==void 0)return Ct.readTypedValue(n.value,a)}if(Array.isArray(s)&&s.length)for(let n=0,l=s.length;n<l;n+=1){let c=this._scalarValue(s[n]);if(c!==void 0)return c}return this.opts.renderMocked?Ct.generateMockedValue(e):Ct.generateDefaultValue(e)}_isNotRequiredUnion(e){let t=0,i=!1;return e.forEach(r=>{r.types.includes(d.aml.vocabularies.shapes.NilShape)?i=!0:r.types.includes(d.aml.vocabularies.shapes.ScalarShape)?r.dataType===d.w3.xmlSchema.nil?i=!0:t+=1:r.types.includes(d.aml.vocabularies.shapes.FileShape)&&(t+=1)}),i?t===e.length-1:!1}};var Di=class extends Ft{generate(e){let t;return e.types.includes(d.w3.shacl.PropertyShape)?t=this._propertyShapeObject(e):t=this.toObject(e),t!==null&&typeof t=="object"?this.serialize(t):t}toObject(e){let{types:t}=e;return t.includes(d.aml.vocabularies.shapes.ScalarShape)?this._scalarShapeObject(e):t.includes(d.w3.shacl.NodeShape)?this._nodeShapeObject(e):t.includes(d.aml.vocabularies.shapes.UnionShape)?this._unionShapeObject(e):t.includes(d.aml.vocabularies.shapes.FileShape)?this._fileShapeObject():t.includes(d.aml.vocabularies.shapes.SchemaShape)?this._schemaShapeObject():t.includes(d.aml.vocabularies.shapes.TupleShape)?this._tupleShapeObject(e):t.includes(d.aml.vocabularies.shapes.ArrayShape)||t.includes(d.aml.vocabularies.shapes.MatrixShape)?this._arrayShapeObject(e):this._anyShapeObject(e)}serialize(e){return JSON.stringify(e,null,2)}_scalarShapeObject(e){return this._scalarValue(e)}_nilShapeObject(){}_nodeShapeObject(e){let{inherits:t}=e,{examples:i=[]}=e;if(Array.isArray(t)&&t.length&&t.forEach(a=>{let n=a;Array.isArray(n.examples)&&n.examples.length&&(i=i.concat(n.examples))}),this.opts.renderExamples&&i.length){let a=i.find(l=>!!l.structuredValue),n=this._exampleToObject(a);if(n!==void 0)return n}let r={},{properties:s}=e;return Array.isArray(t)&&t.length&&t.forEach(a=>{let n=this.toObject(a);typeof n=="object"&&(r={...r,...n})}),s.forEach(a=>{let{name:n}=a,l=this._propertyShapeObject(a);typeof l<"u"&&n&&(r[n]=l)}),r}_unionShapeObject(e){return e.and&&e.and.length?this._allOfUnion(e):e.xone&&e.xone.length?this._oneOfUnion(e):this._anyOfUnion(e)}_anyOfUnion(e){let{anyOf:t=[],examples:i=[]}=e;Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(n=>{let l=n;Array.isArray(l.examples)&&l.examples.length&&(i=i.concat(l.examples));let c=n;Array.isArray(c.anyOf)&&c.anyOf.length&&(t=t.concat(c.anyOf))});let{opts:r}=this;if(this._isNotRequiredUnion(t))return;if(this.opts.renderExamples){let n=i.find(c=>!!c.structuredValue),l=this._exampleToObject(n);if(l!==void 0)return l}if(e.defaultValue)return this._unionDefaultValue(t,e.defaultValue);let{selectedUnions:s}=r,a;if(s&&s.length?a=t.find(n=>s.includes(n.id)):[a]=t,a)return this.toObject(a)}_oneOfUnion(e){let{examples:t=[]}=e,{xone:i=[]}=e;Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(n=>{let l=n;Array.isArray(l.examples)&&l.examples.length&&(t=t.concat(l.examples))});let{opts:r}=this;if(this.opts.renderExamples){let n=t.find(c=>!!c.structuredValue),l=this._exampleToObject(n);if(l!==void 0)return l}if(e.defaultValue)return this._unionDefaultValue(i,e.defaultValue);let{selectedUnions:s}=r,a;if(s&&s.length?a=i.find(n=>s.includes(n.id)):[a]=i,a)return this.toObject(a)}_allOfUnion(e){let{examples:t=[]}=e,{and:i=[]}=e;if(Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(s=>{let a=s;Array.isArray(a.examples)&&a.examples.length&&(t=t.concat(a.examples))}),this.opts.renderExamples){let s=t.find(n=>!!n.structuredValue),a=this._exampleToObject(s);if(a!==void 0)return a}let r={};return i.forEach(s=>{let a=this.toObject(s);typeof a=="object"&&(r={...r,...a})}),r}_unionDefaultValue(e,t){let r=new Ce().generate(t),s=!1,a=!1,n=!1;if(e.forEach(l=>{if(l.types.includes(d.aml.vocabularies.shapes.NilShape)&&(n=!0),!l.types.includes(d.aml.vocabularies.shapes.ScalarShape))return;let c=l;a||(a=c.dataType===d.w3.xmlSchema.boolean),s||(s=[d.w3.xmlSchema.number,d.w3.xmlSchema.long,d.w3.xmlSchema.integer,d.w3.xmlSchema.float,d.w3.xmlSchema.double,d.aml.vocabularies.shapes.number,d.aml.vocabularies.shapes.long,d.aml.vocabularies.shapes.integer,d.aml.vocabularies.shapes.float,d.aml.vocabularies.shapes.double].includes(c.dataType)),n||(n=c.dataType===d.w3.xmlSchema.nil)}),s){let l=Number(r);if(!Number.isNaN(l))return l}if(a){if(r==="true")return!0;if(r==="false")return!1}return n&&(r==="null"||r==="nil")?null:r}_arrayShapeObject(e){let{items:t}=e,i=e.defaultValue||t&&t.defaultValue,{examples:r=[]}=e,s=t;if(Array.isArray(s.examples)&&(r=r.concat(s.examples)),this.opts.renderExamples&&r&&r.length){let a=r.find(l=>!!l.structuredValue),n=this._exampleToObject(a);if(Array.isArray(n))return n;if(typeof n<"u")return[n]}if(i){let n=new Ce().processNode(i);if(Array.isArray(n))return n;if(n)return[n]}if(t){let a=this.toObject(t);if(typeof a<"u")return[a]}return[]}_tupleShapeObject(e){let{items:t,examples:i}=e;if(this.opts.renderExamples&&i&&i.length){let r=i.find(a=>!!a.structuredValue),s=this._exampleToObject(r);if(typeof s<"u")return[s]}if(e.defaultValue){let s=new Ce().processNode(e.defaultValue);if(Array.isArray(s))return s}if(t.length){let r=[];return t.forEach(s=>{let a=this.toObject(s);typeof a<"u"&&r.push(a)}),r}return[]}_anyShapeObject(e){let{and:t=[],xone:i=[],or:r=[]}=e;if(t.length){let s={};return t.forEach(a=>{let n=this.toObject(a);typeof n=="object"&&(s={...s,...n})}),s}if(i.length){let{selectedUnions:s=[]}=this.opts,a=i.find(n=>s.includes(n.id));return a||(a=i[0]),this.toObject(a)}if(r.length){let{selectedUnions:s=[]}=this.opts,a=r.find(n=>s.includes(n.id));return a||(a=r[0]),this.toObject(a)}return this._scalarShapeObject(e)}_propertyShapeObject(e){let{minCount:t=0}=e;if(t===0&&!this.opts.renderOptional)return;let{range:i}=e;if(!i)return;let{types:r}=i;if(r.includes(d.aml.vocabularies.shapes.ScalarShape)){let s=i;return this._scalarShapeObject(s)}return this.toObject(i)}_exampleToObject(e){if(e&&e.structuredValue)return new Ce().processNode(e.structuredValue)}_fileShapeObject(){}_schemaShapeObject(){}};var Pe=o=>o.replace(/[^a-zA-Z0-9-_.]/g,""),ta="unknown-type";function nt(o){let{name:e,inherits:t=[],xmlSerialization:i}=o,r=i&&i.name?i.name:e||ta;if(r==="schema"&&t.length){let s=t.find(a=>a.name&&a.name!=="schema");s&&(r=s.name==="type"&&s.displayName||s.name)}return Pe(String(r))}var zi=class extends Ft{generate(e){let t;return e.types.includes(d.w3.shacl.PropertyShape)?t=this._propertyShapeObject(e):t=this.processNode(e,{},!0),t}processNode(e,t={},i=!1){let{types:r}=e;return r.includes(d.aml.vocabularies.shapes.ScalarShape)?this._scalarShapeObject(e,t):r.includes(d.w3.shacl.NodeShape)?this._nodeShapeObject(e,t):r.includes(d.aml.vocabularies.shapes.UnionShape)?this._unionShapeObject(e):r.includes(d.aml.vocabularies.shapes.FileShape)?this._fileShapeObject():r.includes(d.aml.vocabularies.shapes.SchemaShape)?this._schemaShapeObject():r.includes(d.aml.vocabularies.shapes.TupleShape)?this._tupleShapeObject():r.includes(d.aml.vocabularies.shapes.ArrayShape)||r.includes(d.aml.vocabularies.shapes.MatrixShape)?this._arrayShapeObject(e,t,i):this._anyShapeObject(e)}serialize(e){return e}_readCurrentUnion(e){let{selectedUnions:t}=this.opts;return Ds(e,t)}_collectProperties(e){let{selectedUnions:t}=this.opts;return Ar(e,t)}_nodeShapeObject(e,t={}){let i=t.forceName||nt(e),r=[],s=t.indent||0,a=this._collectExamples(e,{tagFill:new Array(s*2+0).fill(" ").join(""),indent:s+1,nodeName:i});if(a)return a;let n=[];if(this._collectProperties(e).forEach(u=>{let{range:h,minCount:m=0}=u;if(m===0&&!this.opts.renderOptional||!h)return;let f=h;if(f.xmlSerialization&&f.xmlSerialization.attribute&&f.types.includes(d.aml.vocabularies.shapes.ScalarShape)){let k=Pe(f.xmlSerialization.name?f.xmlSerialization.name:u.name||f.name||ta);f.xmlSerialization.prefix&&(k=`${f.xmlSerialization.prefix}:${k}`);let S=this._scalarValue(f);n.push(`${k}="${S}"`);return}let b=this._propertyShapeObject(u,{indent:s});if(typeof b<"u"){let k=t.noWrap?0:2,S=new Array(s*2+k).fill(" ").join("");r.push(_r(S,b))}}),t.noWrap)return r.join(`
|
|
37
|
+
`);let c=`<${i}`;n.length&&(c+=" ",c+=n.join(" ")),r.unshift(`${c}>`);let p=new Array(s*2).fill(" ").join("");return r.push(`${p}</${i}>`),r.join(`
|
|
38
|
+
`)}_scalarShapeObject(e,t={}){let{xmlSerialization:i,defaultValue:r}=e,s;r?s=new xe().processNode(r):s=this._scalarValue(e);let a=t.forceName||nt(e),n=[],l=[];if(i){let{namespace:p,prefix:u}=i;if(p){let h=u?`xmlns:${u}`:"xmlns";n.push(`${h}="${p}"`)}u&&(a=`${u}:${a}`)}let c=`<${a}`;return n.length&&(c+=" ",c+=n.join(" ")),c+=">",l.push(c),l.push(s),l.push(`</${a}>`),l.join("")}_nilShapeObject(e,t={}){let{xmlSerialization:i}=e,r="",s=t.forceName||nt(e),a=[],n=[];if(i){let{namespace:c,prefix:p}=i;if(c){let u=p?`xmlns:${p}`:"xmlns";a.push(`${u}="${c}"`)}p&&(s=`${p}:${s}`)}let l=`<${s}`;return a.length&&(l+=" ",l+=a.join(" ")),l+=">",n.push(l),n.push(r),n.push(`</${s}>`),n.join("")}_propertyShapeObject(e,t={}){let{range:i,minCount:r=0}=e;if(r===0&&!this.opts.renderOptional||!i)return;let{types:s}=i;if(s.includes(d.aml.vocabularies.shapes.ScalarShape))return this._scalarShapeObject(i,{...t});if(s.includes(d.aml.vocabularies.shapes.NilShape)){let n=nt(e);return this._nilShapeObject(i,{...t,forceName:n})}if(s.includes(d.aml.vocabularies.shapes.RecursiveShape))return;if(s.includes(d.w3.shacl.NodeShape))return this._nodePropertyObject(e,t);if(s.includes(d.aml.vocabularies.shapes.ArrayShape)||s.includes(d.aml.vocabularies.shapes.MatrixShape))return this._nodePropertyArray(e,t);let a=nt(e);return this.processNode(i,{...t,forceName:a})}_collectExamples(e,t={}){if(!this.opts.renderExamples)return;let{isWrapped:i,nodeName:r,tagFill:s="",indent:a=0}=t,{examples:n=[]}=e,{inherits:l}=e;Array.isArray(l)&&l.length&&l.forEach(h=>{let m=h;if(m.types.includes(d.aml.vocabularies.shapes.UnionShape)){let b=m,{anyOf:k=[]}=b;m=this._readCurrentUnion(k)}let f=m;Array.isArray(f.examples)&&f.examples.length&&(n=n.concat(f.examples))});let c=n.filter(h=>!!h.structuredValue);if(!c.length)return;let p=[];i&&p.push(`${s}<${r}>`);let u=new xe;return c.forEach(h=>{let m=u.generate(h.structuredValue,r,{indent:a+1});m!==void 0&&p.push(m)}),i&&p.push(`${s}</${r}>`),p.join(`
|
|
39
|
+
`)}_createTabs(e=0,t=0){return new Array(e*2+t).fill(" ").join("")}_nodePropertyObject(e,t={}){let i=[],r=Pe(String(e.name)),{indent:s=0}=t,a=this._createTabs(s),n,l=e.range,c=this._collectExamples(l,{tagFill:a,indent:s+1,nodeName:r}),p=[];if(c)n=c;else{let h=[];this._collectProperties(l).forEach(f=>{let{range:b,minCount:k=0}=f;if(k===0&&!this.opts.renderOptional)return;let S=b;if(S.xmlSerialization){let{prefix:D,attribute:w}=S.xmlSerialization;if(w&&S.types.includes(d.aml.vocabularies.shapes.ScalarShape)){let v=Pe(S.xmlSerialization.name?S.xmlSerialization.name:f.name||S.name||ta);D&&(v=`${D}:${v}`);let E=this._scalarValue(S);p.push(`${v}="${E}"`);return}}let I=this._propertyShapeObject(f,{indent:s});if(I!==void 0){let D=this._createTabs(s,2);h.push(_r(D,I))}}),n=h.join(`
|
|
40
|
+
`)}let u=`${a}<${r}`;return p.length&&(u+=" ",u+=p.join(" ")),i.unshift(`${u}>`),i.push(n),i.push(`${a}</${r}>`),i.join(`
|
|
41
|
+
`)}_nodePropertyArray(e,t={}){let i=e.range,r=[],s;i.xmlSerialization&&i.xmlSerialization.name?s=Pe(i.xmlSerialization.name):s=Pe(String(e.name));let{indent:a=0}=t,n=!!i.items&&i.items.types.includes(d.aml.vocabularies.shapes.ScalarShape),l=this._createTabs(a);n||r.push(`${l}<${s}>`);let c=this._arrayShapeObject(i,{...t,indent:a});return r.push(c),n||r.push(`${l}</${s}>`),r.join(`
|
|
42
|
+
`)}_arrayShapeObject(e,t={},i=!1){let{items:r}=e,s=!!r&&r.types.includes(d.aml.vocabularies.shapes.ScalarShape),a;i&&e.xmlSerialization&&e.xmlSerialization.name?a=Pe(e.xmlSerialization.name):i&&e.name?a=Pe(e.name):!s&&r?.name?a=Pe(r.name):e.name&&(a=Pe(e.name));let n=!1;e.xmlSerialization&&typeof e.xmlSerialization.wrapped=="boolean"&&(n=!0);let l=!!e.xmlSerialization&&!!e.xmlSerialization.wrapped,c=t.indent||0,p=new Array(c*2+0).fill(" ").join(""),u=new Array(c*2+(l?2:0)).fill(" ").join("");if(this.opts.renderExamples){let{examples:h=[]}=e,m=h.filter(f=>!!f.structuredValue);if(m.length){let f=[],b=new xe;if(s&&!l){let[k]=m;!a&&r?.name&&(a=Pe(r.name));let S=b.generate(k.structuredValue,a,{indent:c});S!==void 0&&f.push(S)}else if(s&&l){let[k]=m,S=b.generate(k.structuredValue,a,{indent:c});f.push(`${p}<${a}>`),S!==void 0&&f.push(S),f.push(`${p}</${a}>`)}else l?m.forEach(k=>{f.push(`${p}<${a}>`);let S=b.generate(k.structuredValue,void 0,{indent:c+2});S!==void 0&&f.push(S),f.push(`${p}</${a}>`)}):m.forEach(k=>{let S=b.generate(k.structuredValue,void 0,{indent:c});S!==void 0&&f.push(S)});return f.join(`
|
|
43
|
+
`)}}if(s&&e.defaultValue){let m=new xe().generate(e.defaultValue);return!a&&r?.name&&(a=Pe(r.name)),`<${a}>${m?.trim()}</${a}>`}if(r){let h=[];l&&s&&h.push(`${p}<${a}>`);let m={indent:c+1};a&&(m.forceName=a),!i&&(!n||n&&!l)&&(m.noWrap=!0);let f=this.processNode(r,m);return f!==void 0&&h.push(`${u}${f}`),l&&s&&h.push(`${p}</${a}>`),h.join(`
|
|
44
|
+
`)}return""}_scalarItems(e,t={}){let i=e.items,r=t.indent||0,s=new Array(r*2).fill(" ").join(""),a="";if(i.xmlSerialization&&i.xmlSerialization.name?a=Pe(i.xmlSerialization.name):a=nt(e.name?e:i),this.opts.renderExamples){let{examples:c=[]}=e;Array.isArray(i.examples)&&(c=c.concat(i.examples));let p=c.filter(u=>!!u.structuredValue);if(p.length){let u=[],h=new xe;return p.forEach(m=>{let f=h.generate(m.structuredValue,a);f!==void 0&&u.push(`${s}${f}`)}),u.join(`
|
|
45
|
+
`)}}if(e.defaultValue){let p=new xe().generate(e.defaultValue,a);if(p!==void 0)return`${s}${p}`}let n={indent:r+1,forceName:a},l=this.processNode(i,n);return`${s}${l}`}_nodeItems(e,t={}){let i=e.items,r=t.indent||0,s=new Array(r*2).fill(" ").join(""),a=e.xmlSerialization&&!!e.xmlSerialization.wrapped,n=e.defaultValue||i.defaultValue,l="";i.xmlSerialization&&i.xmlSerialization.name?l=Pe(i.xmlSerialization.name):l=nt(e.name?e:i);let c=a?new Array(r*2+2).fill(" ").join(""):s,p=[];a&&p.push(`${s}<${l}>`);let u=!1;if(this.opts.renderExamples){let{examples:h=[]}=e;Array.isArray(i.examples)&&(h=h.concat(i.examples));let m=h.filter(f=>!!f.structuredValue);if(m.length){let f=[],b=new xe;m.forEach(k=>{let S=b.generate(k.structuredValue,l);S!==void 0&&f.push(`${s}${S}`)}),u=!0}}if(!u&&n){let m=new xe().generate(n,l);m!==void 0&&(p.push(`${s}${m}`),u=!0)}return u||this._collectProperties(i).forEach(m=>{let f=this._propertyShapeObject(m);f&&p.push(`${c}${f}`)}),a&&p.push(`${s}</${l}>`),p.join(`
|
|
46
|
+
`)}_exampleToObject(e){if(e&&e.structuredValue)return new xe().generate(e.structuredValue)}_unionShapeObject(e,t={}){let{anyOf:i=[],examples:r=[]}=e;if(Array.isArray(e.inherits)&&e.inherits&&e.inherits.forEach(s=>{let a=s;Array.isArray(a.examples)&&a.examples.length&&(r=r.concat(a.examples));let n=s;Array.isArray(n.anyOf)&&n.anyOf.length&&(i=i.concat(n.anyOf))}),Array.isArray(i)&&i.length){if(this._isNotRequiredUnion(i))return;let s=r.find(l=>!!l.structuredValue),a=this._exampleToObject(s);if(a!==void 0){let l=nt(e),c=t.indent||0,p=new Array(c*2).fill(" ").join(""),u=new Array(c*2+2).fill(" ").join(""),h=[];h.push(`${p}<${l}>`);let m=String(a).split(`
|
|
47
47
|
`).filter(f=>!!f).map(f=>`${u}${f}`).join(`
|
|
48
48
|
`);return h.push(`${m}`),h.push(`${p}</${l}>`),h.join(`
|
|
49
|
-
`)}if(e.defaultValue)return this._unionDefaultValue(e,e.defaultValue);let n=this._readCurrentUnion(
|
|
50
|
-
`)}_fileShapeObject(){}_schemaShapeObject(){}_tupleShapeObject(){}_anyShapeObject(e){let{and:t=[],xone:
|
|
51
|
-
`)}return this._scalarShapeObject(e)}};var Pn=Eo($n(),1);var Oi=Symbol("findAmfType"),jn=Symbol("findReferenceObject"),ue=Symbol("getArrayItems"),In=Symbol("computeReferenceSecurity"),Ys=o=>{class e extends o{_amf;__cachedKeys;__lastSetValue;get amf(){return this._amf}set amf(r){if(this._amf===r||this.__lastSetValue===r)return;this.__lastSetValue=r;let i=r?this._expand(r):void 0;this.__cachedKeys={},this._amf=i,this._amfChanged(i)}_amfChanged(r){}_expand(r){return Pn.AmfModelExpander.expand(r)}_getAmfKey(r,i){if(!r)return"";let{amf:s}=this;if(!s&&!i)return r;Array.isArray(s)&&([s]=s),this.__cachedKeys||(this.__cachedKeys={});let a=i||s&&s["@context"];if(!a||!r)return r;let n=this.__cachedKeys;if(r in n)return n[r];r=String(r);let l=r.indexOf("#"),c=r.substring(0,l+1),p=Object.keys(a);for(let u=0,h=p.length;u<h;u++){let m=p[u];if(a[m]===r)return n[r]=m,m;if(l===-1&&r.indexOf(a[m])===0){let f=r.replace(a[m],`${m}:`);return n[r]=f,f}if(a[m]===c){let f=`${m}:${r.substring(l+1)}`;return n[r]=f,f}}return r}_ensureAmfModel(r){if(r&&(Array.isArray(r)&&([r]=r),this._hasType(r,d.aml.vocabularies.document.Document)))return r}_ensureArray(r){if(r)return r instanceof Array?r:[r]}_getValue(r,i,s){let a=this._getAmfKey(i,s);if(!a)return;let n=r&&r[a];if(!n)return n;if(Array.isArray(n)&&([n]=n),!n)return;let l=typeof n;return["string","number","boolean","undefined"].includes(l)?n:n["@value"]}_getValueArray(r,i,s){let a=this._getAmfKey(i,s);if(!a)return;let n=r&&this._ensureArray(r[a]);if(Array.isArray(n))return n.map(l=>l["@value"]||l)}[ue](r,i,s){let a=this._getAmfKey(i,s);if(!a)return;let n=r&&this._ensureArray(r[a]);if(Array.isArray(n))return n}_getLinkValue(r,i,s){let a=this._getAmfKey(i,s);if(!a)return;let n=r&&r[a];if(n&&(Array.isArray(n)&&([n]=n),!!n))return n["@id"]}_getLinkValues(r,i,s){let a=this._getAmfKey(i,s);if(!a)return;let n=r&&r[a];if(n)return Array.isArray(n)||(n=[n]),n.map(l=>l["@id"])}_hasType(r,i,s){let a=this._ensureArray(r&&r["@type"]);if(!a||!a.length)return!1;let n=this._getAmfKey(i,s);for(let l of a)if(l===n)return!0;return!1}_hasProperty(r,i,s){let a=this._getAmfKey(i,s);return!!(r&&a&&a in r)}_computePropertyArray(r,i,s){if(!r)return;let a=this._getAmfKey(i,s);if(!a)return;let n=this._ensureArray(r&&r[a]);if(!(!n||!Array.isArray(n)))return n}_computeApiVersion(r,i){let s=this._computeApi(r);if(s)return this._getValue(s,d.aml.vocabularies.core.version,i)}_computeEncodes(r,i){if(!r)return;Array.isArray(r)&&([r]=r);let s=this._getAmfKey(d.aml.vocabularies.document.encodes,i);if(!s)return;let a=r[s];if(a)return Array.isArray(a)?a[0]:a}_computeDeclares(r,i){if(!r||(Array.isArray(r)&&([r]=r),!r))return;let s=this._getAmfKey(d.aml.vocabularies.document.declares,i);if(!s)return;let a=this._ensureArray(r[s]);return Array.isArray(a)?a:void 0}_computeReferences(r,i){if(!r||(Array.isArray(r)&&([r]=r),!r))return;let s=this._getAmfKey(d.aml.vocabularies.document.references,i);if(!s)return;let a=this._ensureArray(r[s]);return a instanceof Array?a:void 0}_computeWebApi(r,i){let s=this._computeEncodes(r,i);if(s&&this._hasType(s,d.aml.vocabularies.apiContract.WebAPI,i))return s}_computeApi(r,i){let s=this._computeEncodes(r,i);if(s&&(this._isAPI(r,i)||this._isWebAPI(r,i)||this._isAsyncAPI(r,i)))return s}_isWebAPI(r,i){let s=this._computeEncodes(r,i);return s?this._hasType(s,d.aml.vocabularies.apiContract.WebAPI,i):!1}_isAsyncAPI(r,i){let s=this._computeEncodes(r,i);return s?this._hasType(s,d.aml.vocabularies.apiContract.AsyncAPI,i):!1}_isAPI(r,i){let s=this._computeEncodes(r,i);return s?this._hasType(s,d.aml.vocabularies.apiContract.API,i):!1}_isValidServerPartial(r,i){if(Array.isArray(r)&&([r]=r),!r)return!1;let s=d.aml.vocabularies.apiContract.Operation,a=d.aml.vocabularies.apiContract.EndPoint,n=[this._getAmfKey(s,i),this._getAmfKey(a,i)],l=r["@type"];for(let c of l)if(n.indexOf(c)!==-1)return!0;return!1}_getServers(r={},i){let{endpointId:s,methodId:a}=r,{amf:n}=this;if(!n)return;let l=this._computeApi(n,i);if(Array.isArray(l)&&([l]=l),!l)if(this._isValidServerPartial(n,i))l=n;else return;let c=this._getAmfKey(d.aml.vocabularies.apiContract.server,i),p=()=>this[ue](l,c,i),u=()=>{let m=this._computeEndpointModel(l,s,i),f=this[ue](m,c,i);return f||p()},h=()=>{let m=this._computeMethodModel(l,a,i),f=this[ue](m,c,i);return f||u()};return a?h():s?u():p()}_computeExpects(r,i){let s=d.aml.vocabularies.apiContract.Operation,a=d.aml.vocabularies.apiContract.expects;if(this._hasType(r,s,i)){let n=this._getAmfKey(a,i),l=this._ensureArray(r[n]);if(l)return Array.isArray(l)?l[0]:l}}_computeEndpoints(r,i){if(!r)return[];let s=d.aml.vocabularies.apiContract.endpoint,a=this._getAmfKey(s,i);return this._ensureArray(r[a])}_computeEndpointModel(r,i,s){if(this._hasType(r,d.aml.vocabularies.apiContract.EndPoint,s))return r;let a=this._computeEndpoints(r,s);if(a)return a.find(n=>n["@id"]===i)}_computeMethodModel(r,i,s){let a=this.__computeMethodsListForMethod(r,i,s);if(a)return a.find(n=>n["@id"]===i)}_computeMethodEndpoint(r,i,s){if(!r||!i)return;if(this._hasType(r,d.aml.vocabularies.apiContract.EndPoint,s))return r;let a=this._computeEndpoints(r,s);if(!a)return;let n=this._getAmfKey(d.aml.vocabularies.apiContract.supportedOperation,s);for(let l=0,c=a.length;l<c;l++){let p=a[l],u=p[n];if(u){Array.isArray(u)||(u=[u]);for(let h=0,m=u.length;h<m;h++)if(u[h]["@id"]===i)return p}}}__computeMethodsListForMethod(r,i,s){let a=this._computeMethodEndpoint(r,i,s);if(!a)return;let n=this._getAmfKey(d.aml.vocabularies.apiContract.supportedOperation,s);return this._ensureArray(a[n])}_computeType(r,i,s,a){if(!r&&!i||!s)return;let n=s.replace("amf://id",""),l=r&&r.find(c=>c["@id"]===s||c["@id"]===n);if(!l&&i&&i.length)for(let c=0,p=i.length;c<p&&!(this._hasType(i[c],d.aml.vocabularies.document.Module)&&(l=this._computeReferenceType(i[c],s,a),l));c++);return l}[Oi](r,i){let{amf:s}=this;if(!s||!r)return;Array.isArray(s)&&([s]=s);let a=this._computeDeclares(s,i),n=r.replace("amf://id","");if(Array.isArray(a)){let l=a.find(c=>c["@id"]===r||c["@id"]===n);if(l)return l}return this[jn](r)}[jn](r,i){let{amf:s}=this;if(Array.isArray(s)&&([s]=s),!s)return;let a=this._computeReferences(s,i);if(!Array.isArray(a)||!a.length)return;let n=r.replace("amf://id","");for(let l=0,c=a.length;l<c;l++){let p=a[l],u=this._computeDeclares(p,i);if(Array.isArray(u))for(let h=0,m=u.length;h<m;h++){let f=u[h];if(Array.isArray(f)&&([f]=f),f["@id"]===r||f["@id"]===n)return f}}}_computeReferenceType(r,i,s){let a=this._computeDeclares(r,s);if(!a||!i)return;let n=i.replace("amf://id",""),l=a.find(c=>(Array.isArray(c)&&([c]=c),c["@id"]===i||c["@id"]===n));return Array.isArray(l)&&([l]=l),this._resolve(l)}_computeDocument(r,i,s){if(!r||!i)return;let a=this._getAmfKey(d.aml.vocabularies.core.documentation,s),n=this._ensureArray(r[a]);return n&&n.find(l=>l["@id"]===i)}_resolve(r,i){let{amf:s}=this;if(typeof r!="object"||Array.isArray(r)||!s||r.__apicResolved)return r;let a=this._getAmfKey(d.aml.vocabularies.document.linkTarget,i),n=this._ensureArray(r[a]),l;if(n){let u=n[0]["@id"];if(u===r["@id"])return r.__apicResolved=!0,r;l=this._getLinkTarget(s,u,i)}else if(a=this._getAmfKey(d.aml.vocabularies.document.referenceId,i),n=this._ensureArray(r[a]),n){let u=n[0]["@id"];if(u===r["@id"])return r.__apicResolved=!0,r;l=this._getReferenceId(s,u,i)}if(!l)return this._resolveRecursive(r),r.__apicResolved=!0,r;let c={...l};delete c["@id"];let p=c["@type"];return p&&(r["@type"]?r["@type"]=r["@type"].concat(p):r["@type"]=p,delete c["@type"]),this._mergeShapes(r,c,i),r.__apicResolved=!0,this._resolveRecursive(r),r}_getLinkTarget(r,i,s){if(!r||!i)return;let a,n=this._computeDeclares(r,s);if(n&&(a=this._findById(n,i)),!a){let l=this._computeReferences(r,s);a=this._obtainShapeFromReferences(l,i,s)}if(a)return a=this._resolve(a),a}_obtainShapeFromReferences(r,i,s){if(!Array.isArray(r)||!r.length)return;let a;for(let n of r){let l=this._computeEncodes(n,s);if(l&&l["@id"]===i){a=l;break}if(!l&&(a=this._findById(this._computeDeclares(n,s),i),a))break}return a}_findById(r,i){if(!r)return;let s;for(let a of r)if(a&&a["@id"]===i){s=a;break}return s}_getReferenceId(r,i,s){if(!r||!i)return;let a=this._computeReferences(r,s);if(a)for(let n of a){let l=this._computeEncodes(n,s);if(l&&l["@id"]===i)return l}}_resolveRecursive(r,i){Object.keys(r).forEach(s=>{let a=r[s];if(Array.isArray(a))for(let n=0,l=a.length;n<l;n++)a[n]=this._resolve(a[n]);else typeof a=="object"&&(r[s]=this._resolve(a,i))})}_mergeShapes(r,i,s){let a={...r,...i};return[{key:this._getAmfKey(d.aml.vocabularies.docSourceMaps.sources,s),merger:this._mergeSourceMapsSources.bind(this)}].forEach(({key:l,merger:c})=>{this._hasProperty(a,l,s)&&(a[l]=c(r,i,s))}),Object.assign(r,a)}_mergeSourceMapsSources(r,i,s){let a=this._getAmfKey(d.aml.vocabularies.docSourceMaps.sources,s),n=r[a]||{};Array.isArray(n)&&(n=n[0]);let l=i[a]||{};return Array.isArray(l)&&(l=l[0]),[Object.assign(n,l)]}_expandKey(r,i){let{amf:s}=this;if(!r||typeof r!="string"||!s&&!i)return r;Array.isArray(s)&&([s]=s);let a=i||s&&s["@context"];if(!a)return r;let[n,l]=r.split(":");if(!n||!l)return r;let c=a[n];return c?`${c}${l}`:r}findSecurityScheme(r,i){let{amf:s}=this,a=this._computeDeclares(s,i),n;if(a&&(n=a.find(c=>c["@id"]===r)),n)return n=this._resolve(n),n;let l=this._computeReferences(s,i);if(Array.isArray(l)&&l.length){for(let c of l)if(this._hasType(c,d.aml.vocabularies.document.Module,i)&&(n=this[In](c,r,i),n))return n=this._resolve(n),n}}[In](r,i,s){let a=this._computeDeclares(r,s);if(!a)return;let n=a.find(l=>{let c=l;return Array.isArray(c)&&([c]=c),c["@id"]===i});return Array.isArray(n)&&([n]=n),this._resolve(n)}getByType(r,i,s){if(!r)return[];let a=[],n=this._computeDeclares(r),l=this._getAmfKey(i,s);n&&n.length&&n.forEach(p=>{this._hasType(p,l)&&a.push(p)});let c=this._computeReferences(r);if(Array.isArray(c)&&c.length){for(let p of c)if(this._hasType(p,d.aml.vocabularies.document.Module)){let u=this.getByType(p,i,s);u.length&&(a=a.concat(u))}}return a}}return e};var Zs=class extends Ys(Object){constructor(e){super(),e&&(this.amf=e)}readTypes(e,t){let r=e;return typeof r=="string"&&(r=[r]),Array.isArray(r)?r.map(i=>this._expandKey(i,t)):[]}apiSummary(e){let t=e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],t),customDomainProperties:this.customDomainProperties(e,t),sourceMaps:this.sourceMap(e),schemes:[],accepts:[],contentType:[],documentations:[],tags:[]},i=this._getValue(e,d.aml.vocabularies.core.name,t);i&&typeof i=="string"&&(r.name=i);let s=this._getValue(e,d.aml.vocabularies.core.description,t);s&&typeof s=="string"&&(r.description=s);let a=this._getValue(e,d.aml.vocabularies.core.version,t);a&&typeof a=="string"&&(r.version=a);let n=this._getValue(e,d.aml.vocabularies.core.termsOfService,t);n&&typeof n=="string"&&(r.termsOfService=n);let l=e[this._getAmfKey(d.aml.vocabularies.apiContract.accepts,t)];Array.isArray(l)&&l.length&&(r.accepts=this._getValueArray(e,d.aml.vocabularies.apiContract.accepts,t));let c=e[this._getAmfKey(d.aml.vocabularies.apiContract.contentType,t)];Array.isArray(c)&&c.length&&(r.contentType=this._getValueArray(e,d.aml.vocabularies.apiContract.contentType,t));let p=e[this._getAmfKey(d.aml.vocabularies.apiContract.scheme,t)];Array.isArray(p)&&p.length&&(r.schemes=this._getValueArray(e,d.aml.vocabularies.apiContract.scheme,t));let u=e[this._getAmfKey(d.aml.vocabularies.core.provider,t)];Array.isArray(u)&&([u]=u),u&&(r.provider=this.provider(u));let h=e[this._getAmfKey(d.aml.vocabularies.core.license,t)];Array.isArray(h)&&([h]=h),h&&(r.license=this.license(h));let m=e[this._getAmfKey(d.aml.vocabularies.apiContract.tag,t)];Array.isArray(m)&&m.length&&(r.tags=m.map(k=>this.tag(k)));let f=e[this._getAmfKey(d.aml.vocabularies.core.documentation,t)];return Array.isArray(f)&&f.length&&(r.documentations=f.map(k=>this.documentation(k))),r}api(e,t){let r=t||e["@context"],i=this.apiSummary(e);i.endPoints=[],i.servers=[],i.security=[];let s=e[this._getAmfKey(d.aml.vocabularies.apiContract.endpoint,r)];Array.isArray(s)&&s.length&&(i.endPoints=s.map(l=>this.endPoint(l,r)));let a=e[this._getAmfKey(d.aml.vocabularies.apiContract.server,r)];Array.isArray(a)&&a.length&&(i.servers=a.map(l=>this.server(l,r)));let n=e[this._getAmfKey(d.aml.vocabularies.security.security,r)];return Array.isArray(n)&&n.length&&(i.security=n.map(l=>this.securityRequirement(l,r))),i}webApi(e,t){return this.api(e,t)}asyncApi(e,t){return this.api(e,t)}provider(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getLinkValue(e,d.aml.vocabularies.core.url,r);a&&typeof a=="string"&&(i.url=a);let n=this._getValue(e,d.aml.vocabularies.core.email,r);return n&&typeof n=="string"&&(i.email=n),i}license(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getLinkValue(e,d.aml.vocabularies.core.url,r);return a&&typeof a=="string"&&(i.url=a),i}server(e,t){let r=t||e["@context"],i=this._getValue(e,d.aml.vocabularies.core.urlTemplate,r)||"",s={id:e["@id"],types:this.readTypes(e["@type"],r),url:i,variables:[],customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},a=this._getValue(e,d.aml.vocabularies.core.description,r);a&&typeof a=="string"&&(s.description=a);let n=e[this._getAmfKey(d.aml.vocabularies.apiContract.variable,r)];Array.isArray(n)&&n.length&&(s.variables=n.map(u=>this.parameter(u,r)));let l=this._getValue(e,d.aml.vocabularies.apiContract.protocol,r),c=this._getValue(e,d.aml.vocabularies.apiContract.protocolVersion,r);l&&(s.protocol=l),c&&(s.protocolVersion=c);let p=e[this._getAmfKey(d.aml.vocabularies.security.security,r)];return Array.isArray(p)&&p.length&&(s.security=p.map(u=>this.securityRequirement(u,r))),s}parameter(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),payloads:[],examples:[],customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.paramName,r);a&&typeof a=="string"&&(i.paramName=a);let n=this._getValue(e,d.aml.vocabularies.core.description,r);n&&typeof n=="string"&&(i.description=n);let l=this._getValue(e,d.aml.vocabularies.apiContract.required,r);typeof l=="boolean"&&(i.required=l);let c=this._getValue(e,d.aml.vocabularies.apiContract.allowEmptyValue,r);typeof c=="boolean"&&(i.allowEmptyValue=c);let p=this._getValue(e,d.aml.vocabularies.document.deprecated,r);typeof p=="boolean"&&(i.deprecated=p);let u=this._getValue(e,d.aml.vocabularies.apiContract.explode,r);typeof u=="boolean"&&(i.explode=u);let h=this._getValue(e,d.aml.vocabularies.apiContract.allowReserved,r);typeof h=="boolean"&&(i.allowReserved=h);let m=this._getValue(e,d.aml.vocabularies.apiContract.style,r);m&&typeof m=="string"&&(i.style=m);let f=this._getValue(e,d.aml.vocabularies.apiContract.binding,r);f&&typeof f=="string"&&(i.binding=f);let k=e[this._getAmfKey(d.aml.vocabularies.shapes.schema,r)];if(Array.isArray(k)&&k.length){let[_]=k;i.schema=this.unknownShape(_,{trackedId:e["@id"]},r)}let b=e[this._getAmfKey(d.aml.vocabularies.apiContract.payload,r)];Array.isArray(b)&&b.length&&(i.payloads=b.map(_=>this.payload(_,r)));let y=e[this._getAmfKey(d.aml.vocabularies.apiContract.examples,r)];return Array.isArray(y)&&y.length&&(i.examples=y.map(_=>this.example(_,r))),i}unknownShape(e,t,r){let i=r||e["@context"],s=this.readTypes(e["@type"],i);return s.includes(d.aml.vocabularies.shapes.ScalarShape)?this.scalarShape(e,t,i):s.includes(d.w3.shacl.NodeShape)?this.nodeShape(e,t,i):s.includes(d.aml.vocabularies.shapes.UnionShape)?this.unionShape(e,t,i):s.includes(d.aml.vocabularies.shapes.FileShape)?this.fileShape(e,t,i):s.includes(d.aml.vocabularies.shapes.SchemaShape)?this.schemaShape(e,t,i):s.includes(d.aml.vocabularies.shapes.TupleShape)?this.tupleShape(e,t,i):s.includes(d.aml.vocabularies.shapes.ArrayShape)||s.includes(d.aml.vocabularies.shapes.MatrixShape)?this.arrayShape(e,t,i):s.includes(d.aml.vocabularies.shapes.RecursiveShape)?this.recursiveShape(e,i):this.anyShape(e,t,i)}isLink(e,t){let r=t||e["@context"];return!!this._getLinkValue(e,d.aml.vocabularies.document.linkTarget,r)}getLinkTarget(e,t){let r=t||e["@context"],i=this._getLinkValue(e,d.aml.vocabularies.document.linkTarget,r);if(i)return this[Oi](i,r)}shape(e,t){let r=t||e["@context"];this._resolve(e);let i,s=e;if(this.isLink(s)){i=this._getValue(s,d.aml.vocabularies.document.linkLabel,r);let C=this._getLinkValue(s,d.aml.vocabularies.document.linkTarget,r),q=this[Oi](C,r);q&&(s=q)}let a={id:s["@id"],types:this.readTypes(e["@type"],r),values:[],inherits:[],or:[],and:[],xone:[],customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)};i&&(a.linkLabel=i);let n=this._getValue(s,d.w3.shacl.name,r);n&&typeof n=="string"&&(a.name=n);let l=this._getValue(s,d.aml.vocabularies.core.displayName,r);if(l&&typeof l=="string")a.displayName=l;else{let C=this._getValue(s,d.aml.vocabularies.core.name,r);C&&typeof C=="string"&&(a.displayName=C)}let c=this._getValue(s,d.aml.vocabularies.core.description,r);c&&typeof c=="string"&&(a.description=c);let p=this._getValue(s,d.w3.shacl.defaultValueStr,r);p&&typeof p=="string"&&(a.defaultValueStr=p);let u=this._getValue(s,d.aml.vocabularies.shapes.deprecated,r);typeof u=="boolean"&&(a.deprecated=u);let h=this._getValue(s,d.aml.vocabularies.shapes.readOnly,r);typeof h=="boolean"&&(a.readOnly=h);let m=this._getValue(s,d.aml.vocabularies.shapes.writeOnly,r);typeof m=="boolean"&&(a.writeOnly=m);let f=s[this._getAmfKey(d.w3.shacl.defaultValue,r)];Array.isArray(f)&&f.length&&(a.defaultValue=this.unknownDataNode(f[0],r));let k=this._getAmfKey(d.w3.shacl.or,r),b=s[k];Array.isArray(b)&&b.length&&(a.or=b.map(C=>this.unknownShape(C,void 0,r)));let y=this._getAmfKey(d.w3.shacl.and,r),_=s[y];Array.isArray(_)&&_.length&&(a.and=_.map(C=>this.unknownShape(C,void 0,r)));let x=this._getAmfKey(d.w3.shacl.xone,r),S=s[x];Array.isArray(S)&&S.length&&(a.xone=S.map(C=>this.unknownShape(C,void 0,r)));let N=s[this._getAmfKey(d.w3.shacl.in,r)];if(Array.isArray(N)&&N.length){let[C]=N,q=d.w3.rdfSchema.key,J=this._getAmfKey(q,r);Object.keys(C).forEach(ne=>{if(ne.startsWith(q)||ne.startsWith(J)){let Y=C[ne];Array.isArray(Y)&&([Y]=Y);let le=this.unknownDataNode(Y,r);le&&a.values.push(le)}})}let $=this._getAmfKey(d.w3.shacl.not,r),z=s[$];return z&&(Array.isArray(z)&&([z]=z),a.not=this.unknownShape(z,void 0,r)),a}anyShape(e,t={},r){let i=r||e["@context"],s=e,a=this.shape(s,i);if(this.isLink(s)){let p=this.getLinkTarget(s,i);p&&(s=p)}a.examples=[];let n=s[this._getAmfKey(d.aml.vocabularies.apiContract.examples,i)];if(Array.isArray(n)&&n.length)if(t.trackedId){let p=this.filterTrackedExamples(n,t.trackedId,i);a.examples=p.map(u=>this.example(u,i))}else{let p=this.filterNonTrackedExamples(n,i);a.examples=p.map(u=>this.example(u,i))}let l=s[this._getAmfKey(d.aml.vocabularies.core.documentation,i)];if(Array.isArray(l)&&l.length){let[p]=l;a.documentation=this.documentation(p,i)}let c=s[this._getAmfKey(d.aml.vocabularies.shapes.xmlSerialization,i)];return Array.isArray(c)&&c.length&&(a.xmlSerialization=this.xmlSerializer(c[0],i)),a}filterTrackedExamples(e,t,r){let{docSourceMaps:i}=d.aml.vocabularies,s=this._getAmfKey(i.sources,r),a=this._getAmfKey(i.trackedElement,r),n=t.indexOf("amf")===-1?`amf://id${t}`:t;return e.filter(l=>{let c=l;Array.isArray(c)&&([c]=c);let p=c[s];if(!p)return!0;Array.isArray(p)&&([p]=p);let u=p[a];if(!u)return!0;Array.isArray(u)&&([u]=u);let{value:h}=this.synthesizedField(u,r);if(!h)return!0;let m=h.split(",");return m.indexOf(n)!==-1||m.indexOf(t)!==-1})}filterNonTrackedExamples(e,t){let{docSourceMaps:r}=d.aml.vocabularies,i=this._getAmfKey(r.sources,t),s=this._getAmfKey(r.trackedElement,t);return e.filter(a=>{let n=a;Array.isArray(n)&&([n]=n);let l=n[i];if(!l)return!0;Array.isArray(l)&&([l]=l);let c=l[s];if(!c)return!0;Array.isArray(c)&&([c]=c);let{value:p}=this.synthesizedField(c,t);return!p})}scalarShape(e,t={},r){let i=r||e["@context"],s=e,a=this.anyShape(s,t,i);if(this.isLink(s)){let k=this.getLinkTarget(s,i);k&&(s=k)}let n=this._getValue(s,d.w3.shacl.pattern,i);n&&typeof n=="string"&&(a.pattern=n);let l=this._getLinkValue(s,d.w3.shacl.datatype,i);l&&typeof l=="string"&&(a.dataType=l);let c=this._getValue(s,d.aml.vocabularies.shapes.format,i);c&&typeof c=="string"&&(a.format=c);let p=this._getValue(s,d.aml.vocabularies.shapes.multipleOf,i);typeof p=="number"&&(a.multipleOf=p);let u=this._getValue(s,d.w3.shacl.minInclusive,i);typeof u=="number"&&(a.minimum=u,a.exclusiveMinimum=!1);let h=this._getValue(s,d.w3.shacl.maxInclusive,i);typeof h=="number"&&(a.maximum=h,a.exclusiveMaximum=!1);let m=this._getValue(s,d.w3.shacl.minLength,i);typeof m=="number"&&(a.minLength=m);let f=this._getValue(s,d.w3.shacl.maxLength,i);return typeof f=="number"&&(a.maxLength=f),a}nodeShape(e,t={},r){let i=r||e["@context"],s=e,a=this.anyShape(s,t,i);if(this.isLink(s)){let h=this.getLinkTarget(s,i);h&&(s=h)}let n=this._getValue(s,d.aml.vocabularies.shapes.discriminator,i);n&&typeof n=="string"&&(a.discriminator=n);let l=this._getValue(s,d.aml.vocabularies.shapes.discriminatorValue,i);l&&typeof l=="string"&&(a.discriminatorValue=l);let c=this._getValue(s,d.w3.shacl.closed,i);typeof c=="boolean"&&(a.closed=c),a.customShapeProperties=[],a.customShapePropertyDefinitions=[],a.dependencies=[];let p=s[this._getAmfKey(d.w3.shacl.property,i)];Array.isArray(p)&&p.length?a.properties=p.map(h=>this.propertyShape(h,i)):a.properties=[];let u=s[this._getAmfKey(d.w3.shacl.additionalPropertiesSchema,i)];if(Array.isArray(u)&&u.length===1){let[h]=u;a.additionalPropertiesSchema=this.unknownShape(h,void 0,i)}return a}propertyShape(e,t){let r=t||e["@context"],i=e,s=this.shape(i,r);if(this.isLink(i)){let p=this.getLinkTarget(i,r);p&&(i=p)}let a=this._getLinkValue(i,d.w3.shacl.path,r);a&&typeof a=="string"&&(s.path=a);let n=this._getValue(i,d.w3.shacl.minCount,r);typeof n=="number"&&(s.minCount=n);let l=this._getValue(i,d.w3.shacl.maxCount,r);typeof l=="number"&&(s.maxCount=l);let c=i[this._getAmfKey(d.aml.vocabularies.shapes.range,r)];if(Array.isArray(c)&&c.length){let[p]=c;s.range=this.unknownShape(p,void 0,r)}return s}unionShape(e,t={},r){let i=r||e["@context"],s=e[this._getAmfKey(d.aml.vocabularies.shapes.anyOf,i)],a=this.anyShape(e,t,i);if(Array.isArray(s)&&s.length){let n={...t,trackedId:void 0};a.anyOf=s.map(l=>this.unknownShape(l,n,i))}else a.anyOf=[];return a}fileShape(e,t={},r){let i=r||e["@context"],s=e,a=this.anyShape(s,t,i);if(this.isLink(s)){let k=this.getLinkTarget(s,i);k&&(s=k)}let n=this._getValue(s,d.w3.shacl.pattern,i);n&&typeof n=="string"&&(a.pattern=n);let l=this._getValueArray(s,d.aml.vocabularies.shapes.fileType,i);Array.isArray(l)&&l.length&&(a.fileTypes=l);let c=this._getValue(s,d.w3.shacl.minLength,i);typeof c=="number"&&(a.minLength=c);let p=this._getValue(s,d.w3.shacl.maxLength,i);typeof p=="number"&&(a.maxLength=p);let u=this._getValue(s,d.w3.shacl.minInclusive,i);typeof u=="number"&&(a.minimum=u,a.exclusiveMinimum=!1);let h=this._getValue(s,d.w3.shacl.maxInclusive,i);typeof h=="number"&&(a.maximum=h,a.exclusiveMaximum=!1);let m=this._getValue(s,d.aml.vocabularies.shapes.format,i);m&&typeof m=="string"&&(a.format=m);let f=this._getValue(s,d.aml.vocabularies.shapes.multipleOf,i);return typeof f=="number"&&(a.multipleOf=f),a}schemaShape(e,t={},r){let i=r||e["@context"],s=e,a=this.anyShape(s,t,i);if(this.isLink(s)){let c=this.getLinkTarget(s,i);c&&(s=c)}let n=this._getValue(s,d.aml.vocabularies.core.mediaType,i);n&&typeof n=="string"&&(a.mediaType=n);let l=this._getValue(s,d.aml.vocabularies.document.raw,i);return l&&typeof l=="string"&&(a.raw=l),a}recursiveShape(e,t){let r=t||e["@context"],i=e,s=this.shape(i,r);if(this.isLink(i)){let n=this.getLinkTarget(i,r);n&&(i=n)}let a=this._getLinkValue(i,d.aml.vocabularies.shapes.fixPoint,r);return a&&typeof a=="string"&&(s.fixPoint=a),s}dataArrangeShape(e,t={},r){let i=r||e["@context"];return this.anyShape(e,t,i)}arrayShape(e,t={},r){let i=r||e["@context"],s=e,a=this.dataArrangeShape(s,t,i);if(this.isLink(s)){let l=this.getLinkTarget(s,i);l&&(s=l)}let n=s[this._getAmfKey(d.aml.vocabularies.shapes.items,i)];if(Array.isArray(n)&&n.length){let[l]=n;a.items=this.unknownShape(l,void 0,i)}return a}tupleShape(e,t,r){let i=r||e["@context"],s=e,a=this.dataArrangeShape(s,t,i);if(this.isLink(s)){let c=this.getLinkTarget(s,i);c&&(s=c)}let n=s[this._getAmfKey(d.aml.vocabularies.shapes.items,i)],l=this._getAmfKey(d.w3.rdfSchema.key,i);return Array.isArray(n)&&n.length?(a.items=[],n.forEach(c=>{Array.isArray(c)&&([c]=c),Object.keys(c).filter(p=>p.startsWith(l)).forEach(p=>{let u=c[p];Array.isArray(u)&&([u]=u);let h=this.unknownShape(u,void 0,i);a.items.push(h)})})):a.items=[],a}documentation(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getLinkValue(e,d.aml.vocabularies.core.url,r);s&&typeof s=="string"&&(i.url=s);let a=this._getValue(e,d.aml.vocabularies.core.description,r);a&&typeof a=="string"&&(i.description=a);let n=this._getValue(e,d.aml.vocabularies.core.title,r);return n&&typeof n=="string"&&(i.title=n),i}example(e,t){let r=t||e["@context"];this._resolve(e);let i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),strict:!1},s=this._getValue(e,d.aml.vocabularies.document.strict,r);typeof s=="boolean"&&(i.strict=s);let a=this._getValue(e,d.aml.vocabularies.core.name,r);a&&typeof a=="string"&&(i.name=a);let n=this._getValue(e,d.aml.vocabularies.core.displayName,r);n&&typeof n=="string"&&(i.displayName=n);let l=this._getValue(e,d.aml.vocabularies.core.description,r);l&&typeof l=="string"&&(i.description=l);let c=this._getValue(e,d.aml.vocabularies.document.raw,r);c&&typeof c=="string"&&(i.value=c);let p=this._getValue(e,d.aml.vocabularies.document.location,r);p&&typeof p=="string"&&(i.location=p);let u=e[this._getAmfKey(d.aml.vocabularies.document.structuredValue,r)];if(Array.isArray(u)&&u.length){let[h]=u;i.structuredValue=this.unknownDataNode(h,r)}return i}xmlSerializer(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.shapes.xmlAttribute,r);typeof s=="boolean"&&(i.attribute=s);let a=this._getValue(e,d.aml.vocabularies.shapes.xmlWrapped,r);typeof a=="boolean"&&(i.wrapped=a);let n=this._getValue(e,d.aml.vocabularies.shapes.xmlName,r);n&&typeof n=="string"&&(i.name=n);let l=this._getValue(e,d.aml.vocabularies.shapes.xmlNamespace,r);l&&typeof l=="string"&&(i.namespace=l);let c=this._getValue(e,d.aml.vocabularies.shapes.xmlPrefix,r);return c&&typeof c=="string"&&(i.prefix=c),i}unknownDataNode(e,t){let r=this.readTypes(e["@type"],t);if(r.includes(d.aml.vocabularies.data.Scalar))return this.scalarNode(e,t);if(r.includes(d.aml.vocabularies.data.Object))return this.objectNode(e,t);if(r.includes(d.aml.vocabularies.data.Array))return this.arrayNode(e,t)}dataNode(e,t){let r={id:e["@id"],types:this.readTypes(e["@type"],t),customDomainProperties:this.customDomainProperties(e,t)},i=this._getValue(e,d.aml.vocabularies.core.name,t);return i&&typeof i=="string"&&(r.name=i),r}scalarNode(e,t){let r=t||e["@context"],i=this.dataNode(e,t),s=this._getValue(e,d.aml.vocabularies.data.value,r);s&&typeof s=="string"&&(i.value=s);let a=this._getLinkValue(e,d.w3.shacl.datatype,r);return a&&typeof a=="string"&&(i.dataType=a),i}objectNode(e,t){let r=t||e["@context"],i=this.dataNode(e,t);i.properties={};let s=d.aml.vocabularies.data.key,a=`${this._getAmfKey(s,r)}:`;return Object.keys(e).forEach(n=>{if(n.startsWith(s)||n.startsWith(a)){let l=e[n];Array.isArray(l)&&([l]=l);let c=n.replace(s,"").replace(a,""),p=this.unknownDataNode(l,t);p&&(i.properties[c]=p)}}),i}arrayNode(e,t){let r=t||e["@context"],i=this.dataNode(e,r);i.members=[];let s=this._computePropertyArray(e,d.w3.rdfSchema.member);return Array.isArray(s)&&s.length&&s.forEach(a=>{let n=this.unknownDataNode(a);n&&i.members.push(n)}),i}customDomainProperties(e,t){let r=[],i=t||e["@context"],s=this._getLinkValues(e,d.aml.vocabularies.document.customDomainProperties,i);return Array.isArray(s)&&s.length&&s.forEach(a=>{let n=`@base:${a}`,l=e[a]||e[n];if(!l)return;Array.isArray(l)&&([l]=l);let c=this.unknownDataNode(l,i),p=this._getValue(l,d.aml.vocabularies.core.extensionName,i);if(!p||!c)return;let u={id:a,name:p,extension:c};r.push(u)}),r}endPoint(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e),path:"",operations:[],parameters:[],payloads:[],servers:[],security:[],extends:[]},s=this._getValue(e,d.aml.vocabularies.apiContract.path,r);s&&typeof s=="string"&&(i.path=s);let a=this._getValue(e,d.aml.vocabularies.core.name,r);a&&typeof a=="string"&&(i.name=a);let n=this._getValue(e,d.aml.vocabularies.core.description,r);n&&typeof n=="string"&&(i.description=n);let l=this._getValue(e,d.aml.vocabularies.core.summary,r);l&&typeof l=="string"&&(i.summary=l);let c=this[ue](e,d.aml.vocabularies.apiContract.supportedOperation,r);Array.isArray(c)&&c.length&&(i.operations=c.map(k=>this.operation(k,r)));let p=this[ue](e,d.aml.vocabularies.apiContract.parameter,r);Array.isArray(p)&&p.length&&(i.parameters=p.map(k=>this.parameter(k,r)));let u=this[ue](e,d.aml.vocabularies.apiContract.payload,r);Array.isArray(u)&&u.length&&(i.payloads=u.map(k=>this.payload(k,r)));let h=this[ue](e,d.aml.vocabularies.apiContract.server,r);Array.isArray(h)&&h.length&&(i.servers=h.map(k=>this.server(k,r)));let m=this[ue](e,d.aml.vocabularies.security.security,r);Array.isArray(m)&&m.length&&(i.security=m.map(k=>this.securityRequirement(k,r)));let f=this[ue](e,d.aml.vocabularies.document.extends,r);return Array.isArray(f)&&f.length&&(i.extends=[],f.forEach(k=>{let b=k;Array.isArray(b)&&([b]=b),this._hasType(b,d.aml.vocabularies.apiContract.ParametrizedResourceType,r)?i.extends.push(this.parametrizedResourceType(b,r)):this._hasType(b,d.aml.vocabularies.apiContract.ParametrizedTrait,r)&&i.extends.push(this.parametrizedTrait(b,r))})),i}operation(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e),method:"",deprecated:!1,callbacks:[],responses:[],servers:[],security:[],accepts:[],schemes:[],contentType:[],tags:[],extends:[]},s=this._getValue(e,d.aml.vocabularies.apiContract.method,r);s&&typeof s=="string"&&(i.method=s);let a=this._getValue(e,d.aml.vocabularies.core.name,r);a&&typeof a=="string"&&(i.name=a);let n=this._getValue(e,d.aml.vocabularies.core.description,r);n&&typeof n=="string"&&(i.description=n);let l=this._getValue(e,d.aml.vocabularies.apiContract.guiSummary,r);l&&typeof l=="string"&&(i.summary=l);let c=this._getValue(e,d.aml.vocabularies.core.deprecated,r);typeof c=="boolean"&&(i.deprecated=c);let p=this._getValue(e,d.aml.vocabularies.apiContract.operationId,r);p&&typeof p=="string"&&(i.operationId=p);let u=this._getValueArray(e,d.aml.vocabularies.apiContract.accepts,r);Array.isArray(u)&&(i.accepts=u);let h=this._getValueArray(e,d.aml.vocabularies.apiContract.scheme,r);Array.isArray(h)&&(i.schemes=h);let m=this._getValueArray(e,d.aml.vocabularies.apiContract.contentType,r);Array.isArray(m)&&(i.contentType=m);let f=e[this._getAmfKey(d.aml.vocabularies.apiContract.expects,r)];f&&(Array.isArray(f)&&([f]=f),i.request=this.request(f,r));let k=e[this._getAmfKey(d.aml.vocabularies.core.documentation,r)];k&&(Array.isArray(k)&&([k]=k),i.documentation=this.documentation(k,r));let b=e[this._getAmfKey(d.aml.vocabularies.apiContract.returns,r)];Array.isArray(b)&&(i.responses=b.map($=>this.response($,r)));let y=e[this._getAmfKey(d.aml.vocabularies.apiContract.callback,r)];Array.isArray(y)&&(i.callbacks=y.map($=>this.callback($,r)));let _=e[this._getAmfKey(d.aml.vocabularies.apiContract.server,r)];Array.isArray(_)&&(i.servers=_.map($=>this.server($)));let x=e[this._getAmfKey(d.aml.vocabularies.security.security,r)];Array.isArray(x)&&(i.security=x.map($=>this.securityRequirement($,r)));let S=e[this._getAmfKey(d.aml.vocabularies.apiContract.tag,r)];Array.isArray(S)&&S.length&&(i.tags=S.map($=>this.tag($,r)));let N=e[this._getAmfKey(d.aml.vocabularies.document.extends,r)];return Array.isArray(N)&&N.length&&(i.extends=N.map($=>this.parametrizedTrait($,r))),i}tag(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e),name:""},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,r);a&&typeof a=="string"&&(i.description=a);let n=e[this._getAmfKey(d.aml.vocabularies.core.documentation,r)];return n&&(Array.isArray(n)&&([n]=n),i.documentation=this.documentation(n,r)),i}tagListItem(e,t){let r=t||e["@context"],i={id:e["@id"],name:""},s=this._getValue(e,d.aml.vocabularies.core.name,r);return s&&typeof s=="string"&&(i.name=s),i}callback(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.expression,r);a&&typeof a=="string"&&(i.expression=a);let n=e[this._getAmfKey(d.aml.vocabularies.apiContract.endpoint,r)];return n&&(Array.isArray(n)&&([n]=n),i.endpoint=this.endPoint(n,r)),i}request(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e),required:!1,headers:[],queryParameters:[],payloads:[],uriParameters:[],cookieParameters:[]},s=this._getValue(e,d.aml.vocabularies.core.description,r);s&&typeof s=="string"&&(i.description=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.required,r);a&&typeof a=="boolean"&&(i.required=a);let n=e[this._getAmfKey(d.aml.vocabularies.apiContract.queryString,r)];n&&(Array.isArray(n)&&([n]=n),i.queryString=this.unknownShape(n,void 0,r));let l=this[ue](e,d.aml.vocabularies.apiContract.header,r);Array.isArray(l)&&l.length&&(i.headers=l.map(m=>this.parameter(m,r)));let c=this[ue](e,d.aml.vocabularies.apiContract.parameter,r);Array.isArray(c)&&c.length&&(i.queryParameters=c.map(m=>this.parameter(m,r)));let p=this[ue](e,d.aml.vocabularies.apiContract.uriParameter,r);Array.isArray(p)&&p.length&&(i.uriParameters=p.map(m=>this.parameter(m,r)));let u=this[ue](e,d.aml.vocabularies.apiContract.cookieParameter,r);Array.isArray(u)&&u.length&&(i.cookieParameters=u.map(m=>this.parameter(m,r)));let h=this[ue](e,d.aml.vocabularies.apiContract.payload,r);return Array.isArray(h)&&h.length&&(i.payloads=h.map(m=>this.payload(m,r))),i}response(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),headers:[],payloads:[],examples:[],links:[]},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,r);a&&typeof a=="string"&&(i.description=a);let n=this._getValue(e,d.aml.vocabularies.apiContract.statusCode,r);n&&typeof n=="string"&&(i.statusCode=n);let l=this[ue](e,d.aml.vocabularies.apiContract.header,r);Array.isArray(l)&&l.length&&(i.headers=l.map(h=>this.parameter(h,r)));let c=this[ue](e,d.aml.vocabularies.apiContract.payload,r);Array.isArray(c)&&c.length&&(i.payloads=c.map(h=>this.payload(h,r)));let p=e[this._getAmfKey(d.aml.vocabularies.apiContract.examples,r)];Array.isArray(p)&&p.length&&(i.examples=p.map(h=>this.example(h,r)));let u=e[this._getAmfKey(d.aml.vocabularies.apiContract.link,r)];return Array.isArray(u)&&u.length&&(i.links=u.map(h=>this.templatedLink(h,r))),i}payload(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),examples:[]},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.core.mediaType,r);a&&typeof a=="string"&&(i.mediaType=a);let n=e[this._getAmfKey(d.aml.vocabularies.shapes.schema,r)];n&&(Array.isArray(n)&&([n]=n),i.schema=this.unknownShape(n,{trackedId:i.id},r));let l=e[this._getAmfKey(d.aml.vocabularies.apiContract.examples,r)];return Array.isArray(l)&&l.length&&(i.examples=l.map(c=>this.example(c,r))),i}templatedLink(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),mapping:[]},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,r);a&&typeof a=="string"&&(i.description=a);let n=this._getValue(e,d.aml.vocabularies.apiContract.operationId,r);n&&typeof n=="string"&&(i.operationId=n);let l=e[this._getAmfKey(d.aml.vocabularies.apiContract.server,r)];l&&(Array.isArray(l)&&([l]=l),i.server=this.server(l,r));let c=e[this._getAmfKey(d.aml.vocabularies.apiContract.mapping,r)];return c&&(c&&!Array.isArray(c)&&(c=[c]),c&&(i.mapping=c.map(p=>this.iriTemplateMapping(p,r)))),i}iriTemplateMapping(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.apiContract.templateVariable,r);s&&typeof s=="string"&&(i.templateVariable=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.linkExpression,r);return a&&typeof a=="string"&&(i.linkExpression=a),i}parametrizedSecurityScheme(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=e[this._getAmfKey(d.aml.vocabularies.security.scheme,r)];a&&(Array.isArray(a)&&([a]=a),i.scheme=this.securityScheme(a,r));let n=e[this._getAmfKey(d.aml.vocabularies.security.settings,r)];return n&&(Array.isArray(n)&&([n]=n),i.settings=this.securitySettings(n,r)),i}securitySchemeListItem(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),type:""},s=this._getValue(e,d.aml.vocabularies.security.type,r);s&&typeof s=="string"&&(i.type=s);let a=this._getValue(e,d.aml.vocabularies.core.name,r);a&&typeof a=="string"&&(i.name=a);let n=this._getValue(e,d.aml.vocabularies.core.displayName,r);return n&&typeof n=="string"&&(i.displayName=n),i}securityScheme(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),headers:[],queryParameters:[],responses:[]},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.core.displayName,r);a&&typeof a=="string"&&(i.displayName=a);let n=this._getValue(e,d.aml.vocabularies.core.description,r);n&&typeof n=="string"&&(i.description=n);let l=this._getValue(e,d.aml.vocabularies.security.type,r);l&&typeof l=="string"&&(i.type=l);let c=e[this._getAmfKey(d.aml.vocabularies.security.settings,r)];c&&(Array.isArray(c)&&([c]=c),i.settings=this.securitySettings(c,r));let p=e[this._getAmfKey(d.aml.vocabularies.apiContract.queryString,r)];p&&(Array.isArray(p)&&([p]=p),i.queryString=this.unknownShape(p,void 0,r));let u=this[ue](e,d.aml.vocabularies.apiContract.header,r);Array.isArray(u)&&u.length&&(i.headers=u.map(f=>this.parameter(f,r)));let h=this[ue](e,d.aml.vocabularies.apiContract.parameter,r);Array.isArray(h)&&h.length&&(i.queryParameters=h.map(f=>this.parameter(f,r)));let m=this[ue](e,d.aml.vocabularies.apiContract.response,r);return Array.isArray(m)&&m.length&&(i.responses=m.map(f=>this.response(f,r))),i}securityRequirement(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),schemes:[]},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=e[this._getAmfKey(d.aml.vocabularies.security.schemes,r)];return Array.isArray(a)&&a.length&&(i.schemes=a.map(n=>this.parametrizedSecurityScheme(n,r))),i}securitySettings(e,t){let r=t||e["@context"],i=this.readTypes(e["@type"],r);return i.includes(d.aml.vocabularies.security.OAuth1Settings)?this.oAuth1Settings(e,r):i.includes(d.aml.vocabularies.security.OAuth2Settings)?this.oAuth2Settings(e,r):i.includes(d.aml.vocabularies.security.ApiKeySettings)?this.apiKeySettings(e,r):i.includes(d.aml.vocabularies.security.HttpSettings)?this.httpSettings(e,r):i.includes(d.aml.vocabularies.security.OpenIdConnectSettings)?this.openIdConnectSettings(e,r):this.settings(e,r)}settings(e,t){let r=t||e["@context"];return{id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)}}oAuth1Settings(e,t){let r=t||e["@context"],i=this.settings(e,r),s=this._getValue(e,d.aml.vocabularies.security.authorizationUri,r);s&&typeof s=="string"&&(i.authorizationUri=s);let a=this._getValue(e,d.aml.vocabularies.security.requestTokenUri,r);a&&typeof a=="string"&&(i.requestTokenUri=a);let n=this._getValue(e,d.aml.vocabularies.security.tokenCredentialsUri,r);n&&typeof n=="string"&&(i.tokenCredentialsUri=n);let l=this._getValueArray(e,d.aml.vocabularies.security.signature,r);return Array.isArray(l)&&l.length?i.signatures=l:i.signatures=[],i}oAuth2Settings(e,t){let r=t||e["@context"],i=this.settings(e,r),s=this._getValueArray(e,d.aml.vocabularies.security.authorizationGrant,r);Array.isArray(s)&&s.length?i.authorizationGrants=s:i.authorizationGrants=[];let a=e[this._getAmfKey(d.aml.vocabularies.security.flows,r)];return Array.isArray(a)&&a.length?i.flows=a.map(n=>this.oAuth2Flow(n,r)):i.flows=[],i}oAuth2Flow(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),scopes:[],sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.security.authorizationUri,r);s&&typeof s=="string"&&(i.authorizationUri=s);let a=this._getValue(e,d.aml.vocabularies.security.accessTokenUri,r);a&&typeof a=="string"&&(i.accessTokenUri=a);let n=this._getValue(e,d.aml.vocabularies.security.flow,r);n&&typeof n=="string"&&(i.flow=n);let l=this._getValue(e,d.aml.vocabularies.security.refreshUri,r);l&&typeof l=="string"&&(i.refreshUri=l);let c=e[this._getAmfKey(d.aml.vocabularies.security.scope,r)];return Array.isArray(c)&&c.length&&(i.scopes=c.map(p=>this.scope(p,r))),i}scope(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,r);return a&&typeof a=="string"&&(i.description=a),i}apiKeySettings(e,t){let r=t||e["@context"],i=this.settings(e,r),s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=this._getValue(e,d.aml.vocabularies.security.in,r);return a&&typeof a=="string"&&(i.in=a),i}httpSettings(e,t){let r=t||e["@context"],i=this.settings(e,r),s=this._getValue(e,d.aml.vocabularies.security.scheme,r);s&&typeof s=="string"&&(i.scheme=s);let a=this._getValue(e,d.aml.vocabularies.security.bearerFormat,r);return a&&typeof a=="string"&&(i.bearerFormat=a),i}openIdConnectSettings(e,t){let r=t||e["@context"],i=this.settings(e,r),s=this._getValue(e,d.aml.vocabularies.security.openIdConnectUrl,r);return s&&typeof s=="string"&&(i.url=s),i}sourceMap(e,t){let r=t||e["@context"],i=e[this._getAmfKey(d.aml.vocabularies.docSourceMaps.sources,r)];if(!i)return;Array.isArray(i)&&([i]=i);let s={id:i["@id"],types:this.readTypes(i["@type"])},a=i[this._getAmfKey(d.aml.vocabularies.docSourceMaps.synthesizedField,r)];Array.isArray(a)&&a.length&&(s.synthesizedField=a.map(h=>this.synthesizedField(h,r)));let n=i[this._getAmfKey(d.aml.vocabularies.docSourceMaps.lexical,r)];Array.isArray(n)&&n.length&&(s.lexical=n.map(h=>this.synthesizedField(h,r)));let l=i[this._getAmfKey(d.aml.vocabularies.docSourceMaps.trackedElement,r)];Array.isArray(l)&&l.length&&(s.trackedElement=this.synthesizedField(l[0],r));let c=i[this._getAmfKey(d.aml.vocabularies.docSourceMaps.autoGeneratedName,r)];Array.isArray(c)&&c.length&&(s.autoGeneratedName=c.map(h=>this.synthesizedField(h,r)));let p=i[this._getAmfKey(d.aml.vocabularies.docSourceMaps.parsedJsonSchema,r)];Array.isArray(p)&&p.length&&(s.parsedJsonSchema=this.synthesizedField(p[0],r));let u=i[this._getAmfKey(d.aml.vocabularies.docSourceMaps.declaredElement,r)];return Array.isArray(u)&&u.length&&(s.declaredElement=this.synthesizedField(u[0],r)),s}synthesizedField(e,t){if(typeof e=="string")return{id:"synthesizedField/generated",value:e};let r={id:e["@id"],value:""},i=this._getValue(e,d.aml.vocabularies.docSourceMaps.element,t);typeof i=="string"&&(r.element=i);let s=this._getValue(e,d.aml.vocabularies.docSourceMaps.value,t);return typeof s=="string"&&(r.value=s),r}parametrizedDeclaration(e,t){let r=t||e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],r),variables:[],customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r)},s=this._getValue(e,d.aml.vocabularies.core.name,r);s&&typeof s=="string"&&(i.name=s);let a=e[this._getAmfKey(d.aml.vocabularies.document.variable,r)];Array.isArray(a)&&a.forEach(l=>{i.variables.push(this.variableValue(l,r))});let n=e[this._getAmfKey(d.aml.vocabularies.document.target,r)];if(Array.isArray(n)&&n.length){let[l]=n;i.target=this.abstractDeclaration(l,r)}return i}parametrizedTrait(e,t){let r=t||e["@context"];return this.parametrizedDeclaration(e,r)}parametrizedResourceType(e,t){let r=t||e["@context"];return this.parametrizedDeclaration(e,r)}variableValue(e,t){let r=t||e["@context"],i=this._getValue(e,d.aml.vocabularies.core.name,r),s={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),name:i},a=e[this._getAmfKey(d.aml.vocabularies.document.value,r)];if(Array.isArray(a)){let[n]=a;s.value=this.unknownDataNode(n,r)}return s}abstractDeclaration(e,t){let r=t||e["@context"],i=this._getValue(e,d.aml.vocabularies.core.name,r),s={id:e["@id"],types:this.readTypes(e["@type"],r),customDomainProperties:this.customDomainProperties(e,r),sourceMaps:this.sourceMap(e,r),name:i,variables:[]},a=this._getValueArray(e,d.aml.vocabularies.document.variable,r);Array.isArray(a)&&(s.variables=a);let n=this._getValue(e,d.aml.vocabularies.core.description,r);n&&typeof n=="string"&&(s.description=n);let l=e[this._getAmfKey(d.aml.vocabularies.document.dataNode,r)];if(Array.isArray(l)){let[c]=l;s.dataNode=this.unknownDataNode(c,r)}return s}endPointWithOperationsListItem(e,t){let r=this._getValue(e,d.aml.vocabularies.apiContract.path,t),i={id:e["@id"],path:r,operations:[]},s=this[ue](e,d.aml.vocabularies.apiContract.supportedOperation,t);Array.isArray(s)&&s.length&&(i.operations=s.map(n=>this.operationListItem(n,t)));let a=this._getValue(e,d.aml.vocabularies.core.name,t);return a&&typeof a=="string"&&(i.name=a),i}operationListItem(e,t){let r={id:e["@id"],method:""},i=this._getValue(e,d.aml.vocabularies.apiContract.method,t);i&&typeof i=="string"&&(r.method=i);let s=this._getValue(e,d.aml.vocabularies.core.name,t);return s&&typeof s=="string"&&(r.name=s),r}};var zt=class o{mime;opts;generator;constructor(e,t={}){this.mime=e,this.opts=Object.freeze({...t}),e.includes("json")?this.generator=new Pr(t):e.includes("xml")&&(this.generator=new Or(t))}static asExample(e,t,r){return new o(t,r).toExample(e)}static asSchema(e,t,r){return new o(t,r).toValue(e)}generate(e){let{generator:t}=this;if(t)return t.generate(e)}toValue(e){return this.generate(e)}toExample(e){let t=this.generate(e);if(t==null)return;let r={id:`${e.id}/generated`,strict:!0,types:[d.aml.vocabularies.apiContract.Example],mediaType:this.mime,renderValue:t,customDomainProperties:[]},i=e;if(Array.isArray(i.examples)&&i.examples.length){let[s]=i.examples;s.value&&(r.value=s.value)}return r}};var er=Object.freeze({processApiLink:"amfprocessapilink",processBuffer:"amfprocessbuffer",processApiFile:"amfprocessapifile",selectApiMainFile:"amfselectapimainfile"});var Lc=Object.freeze({processApiLink:async(o,e,t,r,i=globalThis)=>{let s=new CustomEvent(er.processApiLink,{bubbles:!0,composed:!0,cancelable:!0,detail:{url:o,mainFile:e,md5:t,packaging:r}});return i.dispatchEvent(s),s.detail.result},processBuffer:async(o,e,t=globalThis)=>{let r=new CustomEvent(er.processBuffer,{bubbles:!0,composed:!0,cancelable:!0,detail:{buffer:o,opts:e}});return t.dispatchEvent(r),r.detail.result},processApiFile:async(o,e=globalThis)=>{let t=new CustomEvent(er.processApiFile,{bubbles:!0,composed:!0,cancelable:!0,detail:{file:o}});return e.dispatchEvent(t),t.detail.result},selectApiMainFile:async(o,e=globalThis)=>{let t=new CustomEvent(er.selectApiMainFile,{bubbles:!0,composed:!0,cancelable:!0,detail:{candidates:o}});return e.dispatchEvent(t),t.detail.result}});var Qs=["string","number","boolean","date","datetime","time","binary","json"],Cr;(function(o){o.string="string",o.number="number",o.boolean="boolean",o.date="date",o.datetime="datetime",o.time="time",o.file="binary",o.json="json"})(Cr||(Cr={}));var On=["required","multiple","primary","index","unique","search","readOnly","writeOnly","deprecated"],Cn=["required","multiple"],Rn=["float","double","int32","int64"];function Ci(o,e){return o==="number"?e?.format==="int32"||e?.format==="int64"?d.w3.xmlSchema.integer:d.w3.xmlSchema.number:o==="boolean"?d.aml.vocabularies.shapes.boolean:o==="date"?d.w3.xmlSchema.date:o==="datetime"?d.w3.xmlSchema.dateTime:o==="time"?d.aml.vocabularies.shapes.dateTimeOnly:d.w3.xmlSchema.string}var Ut=Symbol("noValue"),Rr=class{increment=0;static noValue=Ut;generate(e,t){return t==="string"?this.generateString(e):t==="number"?this.generateNumber(e):t==="date"?this.generateDate(e):t==="time"?this.generateTime(e):t==="datetime"?this.generateDateTime(e):Ut}generateString(e){switch(e){case"random":return M(8);case"uuid-v4":return crypto.randomUUID();default:return Ut}}generateNumber(e){return e==="incremental"?`${this.increment++}`:Ut}generateDate(e){if(e==="now"){let t=new Date,r=t.getFullYear(),i=`${t.getMonth()+1}`.padStart(2,"0"),s=`${t.getDate()}`.padStart(2,"0");return`${r}-${i}-${s}`}return Ut}generateTime(e){if(e==="now"){let t=new Date,r=`${t.getHours()}`.padStart(2,"0"),i=`${t.getMinutes()}`.padStart(2,"0"),s=`${t.getSeconds()}`.padStart(2,"0");return`${r}:${i}:${s}`}return Ut}generateDateTime(e){if(e==="now"){let t=new Date,r=t.getFullYear(),i=`${t.getMonth()+1}`.padStart(2,"0"),s=`${t.getDate()}`.padStart(2,"0"),a=`${t.getHours()}`.padStart(2,"0"),n=`${t.getMinutes()}`.padStart(2,"0"),l=`${t.getSeconds()}`.padStart(2,"0");return`${r}-${i}-${s}T${a}:${n}:${l}`}return Ut}};var ea="anyOf",Mc="allOf",Fc="oneOf",Kc="not",ta="string",Tn="binary",Pt=class{#e;get valueGenerator(){return this.#e||(this.#e=new Rr),this.#e}entity(e,t=new Set){if(t.has(e.key))return this.createRecursiveShape(e);t.add(e.key);let r=Ee.nodeShape(e.key);r.id=e.key,this.updateBaseProperties(e,r),r.properties=[];for(let i of e.listProperties()){let s=i.readBinding("web");if(s&&s.hidden)continue;let a=this.property(i);r.properties.push(a)}for(let i of e.listAssociations()){let s=i.readBinding("web");if(s&&s.hidden)continue;let a=this.associationProperty(i,t);r.properties.push(a)}for(let i of e.listParents()){let s=this.entity(i,t);r.inherits.push(s)}return r}property(e){let{required:t,key:r}=e,i=Ee.propertyShape(r);return i.path=`${d.aml.vocabularies.data.key}${e.info.name}`,t&&(i.minCount=1),i.range=this.getRange(e),this.updateBaseProperties(e,i),i.range.name&&(i.name=i.range.name),i}associationProperty(e,t=new Set){let{required:r,key:i}=e,s=Ee.propertyShape(i);return s.path=`${d.aml.vocabularies.data.key}${e.info.name}`,r&&(s.minCount=1),s.range=this.associationShape(e,t),this.updateBaseProperties(e,s),s}associationShape(e,t=new Set){let r=e.schema;if(!r?.embedded)return this.createLinkedShape(e);let i=this.associationUnion(e,t);if(!i)return;if(Array.isArray(i))return this.createUnionShape(e,i);if((r&&r.unionType||ea)===Kc){let a=Ee.anyShape(e.key);return a.id=`not-shape-${e.key}`,a.not=i,a}return e.multiple?this.refactorShapeToArray(e.key,i):i}createLinkedShape(e){let t=Ee.scalarShape(e.key);return t.id=`link-${e.key}`,t.dataType=Ci(ta),t}createUnionShape(e,t){let r=Ee.unionShape(e.key);this.updateBaseProperties(e,r),r.anyOf=[];let i=e.schema&&e.schema.unionType||ea;return i===ea?r.anyOf=t:i===Mc?r.and=t:i===Fc?r.xone=t:r.not=t[0],e.multiple?this.refactorShapeToArray(e.key,r):r}associationUnion(e,t=new Set){let r=[];for(let i of e.listTargets())r.push(this.entity(i,t));if(r.length)return r.length>1?r:r[0]}getRange(e){let t=e.readBinding("web"),r;e.schema&&(r=e.schema);let{multiple:i,type:s}=e;return i?this.createArrayShape(e,r,t):s===Tn?this.createFileShape(e,t):this.createScalarShape(e,r,t)}setShapeSchema(e,t,r,i,s){if(r.defaultValue){let{type:a}=r.defaultValue,{value:n}=r.defaultValue;if(a==="function"){let l=this.valueGenerator.generate(n,e.type);if(l!==Rr.noValue){let c=Ye.scalar(l,a);t.defaultValue=c.toJSON()}}else{let l=Ye.scalar(n,i);t.defaultValue=l.toJSON()}}Array.isArray(r.enum)&&(t.values=r.enum.map(a=>Ye.scalar(a,i).toJSON())),Array.isArray(r.examples)&&(s?t.examples=this.createArrayExamples(r.examples,i):t.examples=this.createExamples(r.examples,i))}createArrayShape(e,t,r){let i=Ee.arrayShape(e.key),{type:s}=e;if(s===Tn?i.items=this.createFileShape(e,r):i.items=this.createScalarShape(e,void 0,r),t){let a=i.items.dataType;this.setShapeSchema(e,i,t,a,e.multiple)}return i}createScalarShape(e,t,r){let i=Ee.scalarShape(e.key);return this.updateBaseProperties(e,i),this.setScalarCommonProperties(i,e,r),i.dataType||(i.dataType=Ci(e.type,r)),t&&this.setShapeSchema(e,i,t,i.dataType,e.multiple),i}createExamples(e,t){let r=[];for(let i of e){let s={id:M(),customDomainProperties:[],strict:!0,types:[...Ar.IAmfExampleTypes],structuredValue:Ye.scalar(i,t).toJSON()};r.push(s)}return r}createArrayExamples(e,t){let r={id:M(),customDomainProperties:[],strict:!0,types:[...Ar.IAmfExampleTypes]},i=new Ye("array");for(let s of e){let a=Ye.scalar(s,t);i.addMember(a)}return r.structuredValue=i.toJSON(),[r]}createFileShape(e,t){let r=Ee.fileShape(e.key);return this.updateBaseProperties(e,r),t&&(Array.isArray(t.fileTypes)&&(r.fileTypes=t.fileTypes),this.setScalarCommonProperties(r,e,t)),r}setScalarCommonProperties(e,t,r){r?.name&&(e.name=r.name),r?.xml&&(e.xmlSerialization=r.xml);let{schema:i,type:s}=t;if(i&&(i.pattern&&(e.pattern=i.pattern),typeof i.multipleOf=="number"&&(e.multipleOf=i.multipleOf),typeof i.minimum=="number"&&(s===ta?e.minLength=i.minimum:e.minimum=i.minimum),typeof i.maximum=="number"&&(s===ta?e.maxLength=i.maximum:e.maximum=i.maximum),typeof i.exclusiveMinimum=="boolean"&&(e.exclusiveMinimum=i.exclusiveMinimum),typeof i.exclusiveMaximum=="boolean"&&(e.exclusiveMaximum=i.exclusiveMaximum)),r?.format)switch(r.format){case"double":e.format=d.w3.xmlSchema.double;break;case"float":e.format=d.w3.xmlSchema.float;break;case"int32":e.format=d.w3.xmlSchema.integer;break;case"int64":e.format=d.w3.xmlSchema.integer;break}typeof t.readOnly=="boolean"&&(e.readOnly=t.readOnly),typeof t.writeOnly=="boolean"&&(e.writeOnly=t.writeOnly);let a=i?.examples&&i.examples.length>0,n=i?.defaultValue?.value!==void 0;if(t.required&&!t.readOnly&&!a&&!n){let l="";t.type==="number"?l=0:t.type==="boolean"&&(l=!1);let c=("dataType"in e?e.dataType:void 0)||Ci(t.type,r);e.examples=this.createExamples([String(l)],c)}}updateBaseProperties(e,t){t.name=e.info.name,t.displayName=e.info.displayName,t.description=e.info.description,(e.kind===oe||e.kind===W)&&(t.deprecated=e.deprecated)}createRecursiveShape(e){return Ee.recursiveShape(e.key,e.key)}refactorShapeToArray(e,t){let r=Ee.arrayShape(e);return r.items=t,r}};var tr=class o extends Te{kind;info;required;multiple;primary;unique;index;search;readOnly;writeOnly;deprecated;tags=[];semantics=[];type="string";jsonSchema;jsonIndex;schema;bindings=[];static createSchema(e={}){let{key:t=M(),multiple:r,required:i,type:s=Cr.string,index:a,search:n,primary:l,unique:c,readOnly:p,writeOnly:u,tags:h,semantics:m,deprecated:f,schema:k,bindings:b,jsonSchema:y,jsonIndex:_}=e;if(typeof s=="string"&&!Qs.includes(s))throw new Error(`Invalid data property type ${s}`);let x=Q.fromJSON(e.info,{name:"new_property"}).toJSON(),S={kind:oe,key:t,info:x,type:s};return y&&(S.jsonSchema=structuredClone(y)),_&&(S.jsonIndex=structuredClone(_)),typeof r=="boolean"&&(S.multiple=r),typeof i=="boolean"&&(S.required=i),typeof a=="boolean"&&(S.index=a),typeof n=="boolean"&&(S.search=n),typeof l=="boolean"&&(S.primary=l),typeof c=="boolean"&&(S.unique=c),typeof p=="boolean"&&(S.readOnly=p),typeof u=="boolean"&&(S.writeOnly=u),typeof f=="boolean"&&(S.deprecated=f),Array.isArray(h)&&(S.tags=[...h]),Array.isArray(m)&&(S.semantics=[...m]),k&&(S.schema=structuredClone(k)),Array.isArray(b)?S.bindings=b.map(N=>structuredClone(N)):S.bindings=[],S}parent;constructor(e,t,r={}){let i=o.createSchema(r);super(e,i.key),this.parent=t,this.kind=oe,this.info=new Q(i.info),this.type=i.type,typeof i.multiple=="boolean"&&(this.multiple=i.multiple),typeof i.required=="boolean"&&(this.required=i.required),typeof i.index=="boolean"&&(this.index=i.index),typeof i.search=="boolean"&&(this.search=i.search),typeof i.deprecated=="boolean"&&(this.deprecated=i.deprecated),typeof i.primary=="boolean"&&(this.primary=i.primary),typeof i.unique=="boolean"&&(this.unique=i.unique),typeof i.readOnly=="boolean"&&(this.readOnly=i.readOnly),typeof i.writeOnly=="boolean"&&(this.writeOnly=i.writeOnly),Array.isArray(i.tags)?this.tags=[...i.tags]:this.tags=[],Array.isArray(i.semantics)?this.semantics=[...i.semantics]:this.semantics=[],i.schema&&(this.schema=structuredClone(i.schema)),i.jsonSchema&&(this.jsonSchema=structuredClone(i.jsonSchema)),i.jsonIndex&&(this.jsonIndex=structuredClone(i.jsonIndex)),Array.isArray(i.bindings)?this.bindings=i.bindings.map(s=>structuredClone(s)):this.bindings=[]}static validate(e,t={}){if(!e||typeof e!="object"&&e!==null)return!1;let r=e;return!(t.strict&&r.kind!==oe)}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON(),type:this.type||Cr.string};return typeof this.index=="boolean"&&(e.index=this.index),typeof this.search=="boolean"&&(e.search=this.search),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),typeof this.primary=="boolean"&&(e.primary=this.primary),typeof this.unique=="boolean"&&(e.unique=this.unique),typeof this.multiple=="boolean"&&(e.multiple=this.multiple),typeof this.required=="boolean"&&(e.required=this.required),typeof this.readOnly=="boolean"&&(e.readOnly=this.readOnly),typeof this.writeOnly=="boolean"&&(e.writeOnly=this.writeOnly),Array.isArray(this.tags)&&this.tags.length&&(e.tags=[...this.tags]),Array.isArray(this.semantics)&&this.semantics.length&&(e.semantics=this.semantics.map(t=>structuredClone(t))),this.schema&&(e.schema=structuredClone(this.schema)),this.jsonSchema&&(e.jsonSchema=structuredClone(this.jsonSchema)),this.jsonIndex&&(e.jsonIndex=structuredClone(this.jsonIndex)),Array.isArray(this.bindings)&&this.bindings.length&&(e.bindings=this.bindings.map(t=>structuredClone(t))),e}remove(){this.getParentInstance()?.removeProperty(this.key)}getParentInstance(){return this.root.graph.node(this.parent)}static isValidType(e){return typeof e!="string"?!1:Qs.includes(e)}static isValidAttribute(e){return typeof e!="string"?!1:On.includes(e)}static isValidFormat(e){return e===void 0?!0:typeof e!="string"?!1:!!Rn.includes(e)}ensureSchema(){return this.schema||(this.schema={}),this.schema}getWebBinding(){let e=this.bindings.find(t=>t.type==="web");return e||(e={type:"web",schema:{}},this.bindings.push(e)),e.schema}readWebBinding(){return this.bindings.find(t=>t.type==="web")?.schema}getExposedName(){let e=this.readWebBinding()?.name||this.info.name;if(!e)throw new g(`Property ${this.key} has no exposed name defined`,{code:"E_MISSING_EXPOSED_NAME",status:500});return e}readBinding(e){return this.bindings.find(r=>r.type===e)?.schema||void 0}toApiShape(){return new Pt().property(this)}toExample(e,t={}){let r=this.toApiShape();return r.range?new zt(e,{renderExamples:t.renderExamples??!0,renderMocked:t.renderMocked??!0,renderOptional:t.renderOptional??!0,selectedUnions:t.selectedUnions}).generate(r):void 0}addSemantic(e){this.root.ensureWritable();let t=ht[e.id];if(!pi(t))throw new Error(`Invalid semantic type: ${e.id}. Expected a property semantic.`);let r=this.semantics.findIndex(i=>i.id===e.id);r>=0?this.semantics[r]=e:this.semantics.push(e)}removeSemantic(e){this.root.ensureWritable();let t=this.semantics.findIndex(r=>r.id===e);t>=0&&this.semantics.splice(t,1)}hasSemantic(e){return this.semantics.some(t=>t.id===e)}getSemantic(e){return this.semantics.find(t=>t.id===e)}duplicate(){let e=this.getParentInstance();if(!e)throw new Error(`Cannot duplicate property ${this.key} as it has no parent entity.`);let t=e.fields.findIndex(c=>c.key===this.key);if(t===-1)throw new Error(`Cannot duplicate property ${this.key} as it does not exist on the parent entity fields list.`);let r=this.info.name||"field",i=e.generateUniqueName(r),s=this.toJSON();delete s.key,delete s.primary,s.info?s.info.name=i:s.info={name:i};let a=e.addProperty(s),n=e.fields.length-1,l=e.fields[n];return e.fields.splice(n,1),e.fields.splice(t+1,0,l),a}};var Tr=class extends g{static code="E_REMOVE_PROPERTY";static status=500;static message="Error removing a data property.";static help="Make sure the property exists and can be removed."};var rr=class o extends Te{kind;info;required;multiple;schema;bindings;parent;targets;semantics=[];onDelete;readOnly;static createSchema(e={}){let{key:t=M(),semantics:r=[]}=e,i=Q.fromJSON(e.info,{name:"new_association"}).toJSON(),s={kind:fe,key:t,info:i};return Array.isArray(r)&&(s.semantics=[...r]),e.onDelete&&(s.onDelete=e.onDelete),typeof e.readOnly=="boolean"&&(s.readOnly=e.readOnly),e.schema&&(s.schema=structuredClone(e.schema)),typeof e.multiple=="boolean"&&(s.multiple=e.multiple),typeof e.required=="boolean"&&(s.required=e.required),Array.isArray(e.bindings)&&(s.bindings=e.bindings.map(a=>structuredClone(a))),Array.isArray(e.targets)&&(s.targets=e.targets.map(a=>({...a}))),s}constructor(e,t,r){let i=o.createSchema(r);super(e,i.key),this.parent=t,this.kind=fe,this.info=new Q(i.info),i.schema&&(this.schema=structuredClone(i.schema)),typeof i.multiple=="boolean"&&(this.multiple=i.multiple),typeof i.required=="boolean"&&(this.required=i.required),Array.isArray(i.bindings)?this.bindings=i.bindings.map(s=>structuredClone(s)):this.bindings=[],Array.isArray(i.targets)?this.targets=i.targets.map(s=>({...s})):this.targets=[],Array.isArray(i.semantics)?this.semantics=i.semantics.map(s=>structuredClone(s)):this.semantics=[],i.onDelete&&(this.onDelete=i.onDelete),typeof i.readOnly=="boolean"&&(this.readOnly=i.readOnly)}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return this.schema&&(e.schema=structuredClone(this.schema)),typeof this.multiple=="boolean"&&(e.multiple=this.multiple),typeof this.required=="boolean"&&(e.required=this.required),Array.isArray(this.bindings)&&this.bindings.length&&(e.bindings=this.bindings.map(t=>structuredClone(t))),Array.isArray(this.targets)&&this.targets.length&&(e.targets=this.targets.map(t=>({...t}))),Array.isArray(this.semantics)&&this.semantics.length&&(e.semantics=this.semantics.map(t=>structuredClone(t))),this.onDelete&&(e.onDelete=this.onDelete),typeof this.readOnly=="boolean"&&this.readOnly&&(e.readOnly=this.readOnly),e}getParentInstance(){return this.root.graph.node(this.parent)}remove(){this.getParentInstance()?.removeAssociation(this.key)}ensureSchema(){return this.schema||(this.schema={}),this.schema}static isValidAttribute(e){return typeof e!="string"?!1:Cn.includes(e)}getWebBinding(){let e=this.bindings.find(t=>t.type==="web");return e||(e={type:"web",schema:{}},this.bindings.push(e)),e.schema}readWebBinding(){return this.bindings?.find(t=>t.type==="web")?.schema}getExposedName(){let e=this.readWebBinding()?.name||this.info.name;if(!e)throw new g(`Association ${this.key} has no exposed name defined`,{code:"E_MISSING_EXPOSED_NAME",status:500});return e}readBinding(e){return this.bindings.find(r=>r.type===e)?.schema||void 0}addTarget(e,t){this.root.ensureWritable();let r;if(typeof e=="string"?r=e:(r=e.key,e.domain.key!==this.root.key&&(t=e.domain.key)),this.targets.some(n=>n.key===r&&n.domain===t)){let n=`Target ${r} already exists.`;throw new Error(n)}if(t&&!this.root.dependencies.has(t))throw new Error(`Foreign namespace "${t}" does not exist.`);let i={key:r};t&&(i.domain=t),this.targets.push(i);let s=t?`${t}:${r}`:r,a={type:"association"};t&&(a.domain=t,a.foreign=!0),this.root.graph.setEdge(this.key,s,a)}removeTarget(e){this.root.ensureWritable();let t;typeof e=="string"?t=e:t=e.key;let r=this.targets.findIndex(i=>i.key===t);r>=0&&this.targets.splice(r,1),this.root.graph.removeEdge(this.key,t)}*listTargets(){for(let e of this.targets){let{key:t,domain:r}=e,i=r?`${r}:${t}`:t,s=this.root.graph.node(i);s&&(yield s)}}toApiShape(){return new Pt().associationProperty(this)}addSemantic(e){this.root.ensureWritable();let t=ht[e.id];if(!Ia(t))throw new Error(`Invalid semantic type: ${e.id}. Expected an association semantic.`);let r=this.semantics.findIndex(i=>i.id===e.id);r>=0?this.semantics[r]=e:this.semantics.push(e)}removeSemantic(e){this.root.ensureWritable();let t=this.semantics.findIndex(r=>r.id===e);t>=0&&this.semantics.splice(t,1)}hasSemantic(e){return this.semantics.some(t=>t.id===e)}getSemantic(e){return this.semantics.find(t=>t.id===e)}duplicate(){let e=this.getParentInstance();if(!e)throw new Error(`Cannot duplicate association ${this.key} as it has no parent entity.`);let t=e.fields.findIndex(c=>c.key===this.key);if(t===-1)throw new Error(`Cannot duplicate association ${this.key} as it does not exist on the parent entity fields list.`);let r=this.info.name||"field",i=e.generateUniqueName(r),s=this.toJSON();delete s.key,delete s.targets,s.info?s.info.name=i:s.info={name:i};let a=e.addAssociation(s);for(let c of this.targets)a.addTarget(c.key,c.domain);let n=e.fields.length-1,l=e.fields[n];return e.fields.splice(n,1),e.fields.splice(t+1,0,l),a}};var Vt=class extends Error{messages;status=422;code="E_VALIDATION_ERROR";constructor(e,t){let r=t?.message||"Validation failure";super(r,t),this.messages=e;let i=this.constructor;"captureStackTrace"in Error&&Error.captureStackTrace(this,i)}get[Symbol.toStringTag](){return this.constructor.name}toString(){return`${this.name} [${this.code}]: ${this.message}`}};function $e(o,e){if(!o.hasNode(e))return;let t=o.node(e);if(t){if(t.kind===fe){o.removeNode(e);return}for(let r of o.children(e))$e(o,r);for(let r of o.outEdges(e)){let i=o.edge(r);i&&(i.type==="association"||i.type==="property")&&$e(o,r.w)}o.removeNode(e)}}var Dn=o=>{let e=o.trim();return e=e.match(/[A-Z]{2,}(?=[ A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)?.map(t=>t.toLowerCase()).join("_")||"",e};import zn from"dompurify";var ra;function Jc(){return typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.node<"u"}if(Jc()){let{JSDOM:o}=await import("jsdom"),{window:e}=new o("<!DOCTYPE html>");ra=zn(e)}else ra=zn;var Un=ra;function qc(o){return Un.sanitize(o)}function Vn(o,e="untitled_column"){let t=qc(o);return t=Dn(t),t=t.replace(/[\s-]+/g,"_"),t=t.replace(/[^a-z0-9_]/g,""),t=t.replace(/^_+|_+$/g,""),t||e}function Ln(o,e,t="untitled_table"){let r=Vn(o,t);return`${Vn(e.slice(0,8))}_${r}`}var ir=class o extends Te{kind;#e;#t;#i;#r;info;tags;semantics=[];fields;deprecated;static createSchema(e={}){let{key:t=M(),tags:r,semantics:i,fields:s,deprecated:a}=e,n=Q.fromJSON(e.info,{name:"new_entity"}).toJSON(),l={kind:W,key:t,info:n};return Array.isArray(r)&&(l.tags=[...r]),Array.isArray(i)&&(l.semantics=[...i]),Array.isArray(s)&&(l.fields=[...s]),typeof a=="boolean"&&(l.deprecated=a),l}constructor(e,t){let r=o.createSchema(t);super(e,r.key),this.kind=W,this.info=new Q(r.info),Array.isArray(r.tags)?this.tags=[...r.tags]:this.tags=[],Array.isArray(r.semantics)?this.semantics=r.semantics.map(i=>structuredClone(i)):this.semantics=[],Array.isArray(r.fields)?this.fields=[...r.fields]:this.fields=[],typeof r.deprecated=="boolean"&&(this.deprecated=r.deprecated)}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),Array.isArray(this.semantics)&&this.semantics.length&&(e.semantics=this.semantics.map(t=>structuredClone(t))),Array.isArray(this.tags)&&this.tags.length&&(e.tags=[...this.tags]),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),e}getParentInstance(){let e=this.root.graph.parent(this.key);if(e)return this.root.graph.node(e)}getExposedName(){let e=this.info.name;if(!e)throw new g(`Entity ${this.key} has no exposed name defined`,{code:"E_MISSING_EXPOSED_NAME",status:500});return e}getDatabaseTableName(){return Ln(this.getExposedName(),this.namespace)}addProperty(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a property ${e.key}, but it already exists`);let t=new tr(this.root,this.key,e);return this.root.graph.setNode(t.key,t),this.root.graph.setEdge(this.key,t.key,{type:"property"}),this.fields.push({type:"property",key:t.key}),t}removeProperty(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Tr(`Trying to remove the ${e} property, but it doesn't exist`);if(this.root.graph.node(e).getParentInstance()!==this)throw new Tr(`Trying to remove the ${e} property, but it doesn't belong to this entity`);$e(this.root.graph,e),this.removeField(e)}get properties(){return this.listProperties()}*listProperties(){for(let{key:e,type:t}of this.fields){if(t!=="property")continue;let r=this.root.graph.node(e);!r||r.kind!==oe||(yield r)}}withInheritedProperties(){if(this.root.readOnly&&this.#e)return this.#e.values();let e=new Map,t=this.listAllParents("up");for(let r of t)for(let i of r.properties)i.info.name&&e.set(i.info.name,i);for(let r of this.properties)r.info.name&&e.set(r.info.name,r);return this.root.readOnly&&(this.#e=Array.from(e.values())),e.values()}hasProperties(){return this.fields.some(e=>e.type==="property")}get parents(){return this.listParents()}*listParents(){for(let e of this.root.graph.outEdges(this.key)){let t=this.root.graph.edge(e);if(!t||t.type!=="parent")continue;let r=this.root.graph.node(e.w);r&&(yield r)}}listAllParents(e="up"){if(this.root.readOnly&&this.#t?.[e])return this.#t[e];let t=new Set,r=[],i=[...this.listParents()],s=0;for(;s<i.length;){let a=i[s++];t.has(a.key)||(t.add(a.key),r.push(a),i.push(...a.listParents()))}return e==="down"&&r.reverse(),this.root.readOnly&&(this.#t||(this.#t={}),this.#t[e]=r),r}addParent(e,t){this.root.ensureWritable();let r=this.domain.buildReferenceKey(e,t);if(r===this.key){let s="Entity cannot be a parent of itself";throw new Vt([{field:"parents",message:s,rule:"circular"}],{message:s})}let{graph:i}=this.root;if(!i.hasNode(r)){let s=`Entity with key "${e}" not found`;throw t&&(s+=` in domain "${t}"`),new Vt([{field:"parents",message:s,rule:"required"}],{message:s})}if(this.hasCircularParent(r)){let s=`Circular inheritance detected. Cannot add ${e} as a parent`;throw new Vt([{field:"parents",message:s,rule:"circular"}],{message:s})}if(i.outEdges(this.key,r).next().value){let s=`Parent ${e} already exists`;throw new Vt([{field:"parents",message:s,rule:"unique"}],{message:s})}return t?i.setEdge(this.key,r,{type:"parent",domain:t,foreign:!0}):i.setEdge(this.key,r,{type:"parent"}),this}removeParent(e,t){this.root.ensureWritable();let{graph:r}=this.root,i=this.domain.buildReferenceKey(e,t);if(!r.hasEdge(this.key,i)){let a=`Trying to remove a parent ${e} from ${this.key}, but it doesn't exist`;throw t&&(a=`Trying to remove a foreign parent ${e} from domain "${t}" from ${this.key}, but it doesn't exist`),new Error(a)}let s=r.edge(this.key,i);if(!s||s.type!=="parent"){let a=`Edge between ${this.key} and ${e} exists but is not a parent relationship`;throw t&&(a=`Edge between ${this.key} and ${e} in domain "${t}" exists but is not a parent relationship`),new Error(a)}return r.removeEdge(this.key,i),this}hasParents(){for(let e of this.root.graph.outEdges(this.key))if(this.root.graph.edge(e)?.type==="parent")return!0;return!1}hasCircularParent(e){let{graph:t}=this.root;for(let i of t.outEdges(e,this.key))if(t.edge(i)?.type==="parent")return!0;let r=t.node(e);for(;r;){if(r.key===this.key)return!0;let i=[...r.listParents()];if(i.length===0)break;r=i[0]}return!1}breadcrumbs(){let e=[];e.push({key:this.key,name:this.info.getLabel("Unnamed entity"),kind:W});let t=this.getParentInstance();if(t){e.push({key:t.key,kind:t.kind,name:t.info.getLabel("Unnamed model")});let r=t.getParentInstance();for(;r&&r!==this.root;)e.push({key:r.key,kind:r.kind,name:r.info.getLabel("Unnamed namespace")}),r=r.getParentInstance()}return e.push({key:this.root.key,name:this.root.info.getLabel("Unnamed data domain"),kind:this.root.kind}),e.reverse()}addAssociation(e={}){this.root.ensureWritable();let{graph:t}=this.root,r={...e},i=r.targets;delete r.targets;let s=Array.isArray(i)&&i.length;if(s){for(let n of i)if(n.domain&&n.key){let l=`${n.domain}:${n.key}`;if(!t.hasNode(l))throw new Error(`Foreign entity ${l} not found`)}else if(n.key&&!t.hasNode(n.key))throw new Error(`Target entity ${n.key} not found`)}let a=new rr(this.root,this.key,r);if(t.setNode(a.key,a),t.setEdge(this.key,a.key,{type:"association"}),s)for(let n of i)a.addTarget(n.key,n.domain);return this.fields.push({type:"association",key:a.key}),a}removeAssociation(e){if(this.root.ensureWritable(),!this.root.graph.hasEdge(this.key,e))throw new Error(`Unable to find a connection between this entity and the ${e} association`);let t=this.root.graph.edge(this.key,e);if(!t||t.type!=="association")throw new Error(`Association ${e} does not exist`);$e(this.root.graph,e),this.removeField(e)}get associations(){return this.listAssociations()}*listAssociations(){for(let{key:e,type:t}of this.fields){if(t!=="association")continue;let r=this.root.graph.node(e);!r||r.kind!==fe||(yield r)}}hasAssociations(){return this.fields.some(e=>e.type==="association")}*listFields(){for(let{key:e}of this.fields){let t=this.root.graph.node(e);t&&(t.kind===fe||t.kind===oe)&&(yield t)}}hasFields(){return this.fields.length>0}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}toApiShape(){return new Pt().entity(this)}toExample(e,t={}){let r=this.toApiShape();return new zt(e,{renderExamples:t.renderExamples??!0,renderMocked:t.renderMocked??!0,renderOptional:t.renderOptional??!0,selectedUnions:t.selectedUnions}).generate(r)}isChildOf(e){if(this.key===e)return!1;let t=this.getParentInstance();return t?t.key===e?!0:t.isChildOf(e):!1}primaryKey(){for(let t of this.properties)if(t.primary)return t;let e;for(let t of this.listParents()){let r=t.primaryKey();r&&(e=r)}return e}addSemantic(e){this.root.ensureWritable();let t=ht[e.id];if(!ja(t))throw new Error(`Invalid semantic type: ${e.id}. Expected an entity semantic.`);let r=this.semantics.findIndex(i=>i.id===e.id);r>=0?this.semantics[r]=e:this.semantics.push(e)}removeSemantic(e){this.root.ensureWritable();let t=this.semantics.findIndex(r=>r.id===e);t>=0&&this.semantics.splice(t,1)}hasSemantic(e){return this.semantics.some(t=>t.id===e)}getSemantic(e){return this.semantics.find(t=>t.id===e)}withInheritedAssociations(){if(this.root.readOnly&&this.#i)return this.#i.values();let e=new Map,t=this.listAllParents("up");for(let r of t)for(let i of r.associations)i.info.name&&e.set(i.info.name,i);for(let r of this.associations)r.info.name&&e.set(r.info.name,r);return this.root.readOnly&&(this.#i=Array.from(e.values())),e.values()}listAllSemantics(){if(this.root.readOnly&&this.#r)return this.#r;let e=new Map,t=this.listAllParents("up");for(let i of t)for(let s of i.semantics)e.set(s.id,s);for(let i of this.semantics)e.set(i.id,i);let r=Array.from(e.values());return this.root.readOnly&&(this.#r=r),r}generateUniqueName(e){let t=new Set;for(let s of this.listFields())s.info.name&&t.add(s.info.name);let r=2,i=`${e}_copy`;for(;t.has(i);)i=`${e}_copy_${r}`,r++;return i}};var sr=class extends g{static code="E_REMOVE_ENTITY";static status=500;static message="Error removing a data entity.";static help="Make sure the entity exists and can be removed."};var je=class extends g{static code="E_ATTACH";static status=500;static message="Error attaching the object.";static help="Make sure you are attaching the right object."};var rt=class extends g{static code="E_DETACH";static status=500;static message="Error detaching the object.";static help="Make sure you are detaching the right object."};var Ot=class o extends Te{kind;info;fields;deprecated;static createSchema(e={}){let{key:t=M(),fields:r,deprecated:i}=e,s=Q.fromJSON(e.info,{name:"New model"}).toJSON(),a={kind:he,key:t,info:s};return Array.isArray(r)&&(a.fields=[...r]),typeof i=="boolean"&&(a.deprecated=i),a}constructor(e,t){let r=o.createSchema(t);super(e,r.key),this.kind=he,this.info=new Q(r.info),Array.isArray(r.fields)?this.fields=[...r.fields]:this.fields=[],typeof r.deprecated=="boolean"?this.deprecated=r.deprecated:this.deprecated=void 0}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),e}getParentInstance(){let e=this.root.graph.parent(this.key);return e?this.root.graph.node(e):this.root}addEntity(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Entity with key ${e?.key} already exists`);let t=new ir(this.root,e);return this.root.graph.setNode(t.key,t),this.root.graph.setParent(t.key,this.key),this.fields.push({key:t.key,type:"entity"}),t}removeEntity(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new sr(`Trying to remove the ${e} entity, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==W)throw new sr(`Trying to remove the ${e} entity, but it is not an entity`);if(t.getParentInstance()!==this)throw new sr(`Trying to remove the ${e} entity, but it is not a child of this model`);$e(this.root.graph,e),this.removeField(e)}attachEntity(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new je(`Trying to attach the ${e} entity, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==W)throw new je(`Trying to attach the ${e} entity, but it is not a entity`);if(t.domain.key!==this.root.key)throw new je(`Trying to attach the ${e} entity, but it is not in the same domain`);let r=t.getParentInstance();if(r===this)throw new je(`Trying to attach the ${e} entity, but it is already a child of this model`);if(r.detachEntity(e),this.fields.some(s=>s.key===e)||this.fields.push({type:"entity",key:e}),this.root.graph.setParent(e,this.key),this.root.graph.parent(e)!==this.key)throw new je(`Trying to attach the ${e} entity, but it is not a child of this model`);return this}detachEntity(e){this.root.ensureWritable();let t=this.fields.findIndex(i=>i.key===e);if(t===-1)throw new rt(`Trying to detach the ${e} entity, but it doesn't exist`);let r=this.root.graph.node(e);if(!r||r.kind!==W)throw new rt(`Trying to detach the ${e} entity, but it is not an entity`);if(r.getParentInstance()!==this)throw new rt(`Trying to detach the ${e} entity, but it is not a child of this model`);return this.fields.splice(t,1),this.root.graph.setParent(e),this}*listEntities(){for(let{key:e,type:t}of this.fields){if(t!=="entity")continue;let r=this.root.graph.node(e);!r||r.kind!==W||(yield r)}}hasEntities(){return this.fields.some(e=>e.type==="entity")}breadcrumbs(){let e=[];e.push({key:this.key,name:this.info.getLabel("Unnamed model"),kind:he});let t=this.getParentInstance();for(;t&&t!==this.root;)e.push({key:t.key,kind:t.kind,name:t.info.getLabel("Unnamed namespace")}),t=t.getParentInstance();return e.push({key:this.root.key,name:this.root.info.getLabel("Unnamed data domain"),kind:this.root.kind}),e.reverse()}hasFields(){return this.fields.length>0}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}isChildOf(e){if(this.key===e)return!1;let t=this.getParentInstance();return t?t.key===e?!0:t===this.root?!1:t.isChildOf(e):!1}};var Lt=class extends g{static code="E_REMOVE_NAMESPACE";static status=500;static message="Error removing a domain namespace.";static help="Make sure the namespace exists and can be removed."};var Dr=class extends g{static code="E_REMOVE_MODEL";static status=500;static message="Error removing a domain model.";static help="Make sure the model exists and can be removed."};var ar=class o extends Te{kind;info;fields;deprecated;static createSchema(e={}){let{key:t=M(),fields:r,deprecated:i}=e,s=Q.fromJSON(e.info,{name:"New namespace"}).toJSON(),a={kind:ge,key:t,info:s};return Array.isArray(r)&&(a.fields=[...r]),typeof i=="boolean"&&(a.deprecated=i),a}constructor(e,t){let r=o.createSchema(t);super(e,r.key),this.kind=ge,this.info=new Q(r.info),Array.isArray(r.fields)?this.fields=[...r.fields]:this.fields=[],typeof r.deprecated=="boolean"?this.deprecated=r.deprecated:this.deprecated=void 0}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),e}addNamespace(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a namespace to ${this.key}, but it already exists`);let t=new o(this.root,e);return this.root.graph.setNode(t.key,t),this.root.graph.setParent(t.key,this.key),this.fields.push({type:"namespace",key:t.key}),t}removeNamespace(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Lt(`Trying to remove the ${e} namespace, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==ge)throw new Lt(`Trying to remove the ${e} namespace, but it is not a namespace`);return $e(this.root.graph,e),this.removeField(e),this}attachNamespace(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Error(`Trying to attach the ${e} namespace, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==ge)throw new Error(`Trying to attach the ${e} namespace, but it is not a namespace`);if(t.domain.key!==this.root.key)throw new Error(`Trying to attach the ${e} namespace, but it is not in the same domain`);let r=t.getParentInstance();if(r===this)throw new je(`Trying to attach the ${e} entity, but it is already a child of this model`);return this.root!==r&&r.detachNamespace(e),this.fields.push({type:"namespace",key:e}),this.root.graph.setParent(e,this.key),this}detachNamespace(e){this.root.ensureWritable();let t=this.fields.findIndex(i=>i.key===e);if(t===-1)throw new Lt(`Trying to detach the ${e} namespace, but it doesn't exist`);let r=this.root.graph.node(e);if(!r||r.kind!==ge)throw new Lt(`Trying to detach the ${e} namespace, but it is not a namespace`);return this.fields.splice(t,1),this.root.graph.setParent(e),this}*listNamespaces(){for(let{key:e,type:t}of this.fields){if(t!=="namespace")continue;let r=this.root.graph.node(e);!r||r.kind!==ge||(yield r)}}hasNamespaces(){return this.fields.some(e=>e.type==="namespace")}addModel(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a model to ${this.key}, but it already exists`);let t=new Ot(this.root,e);return this.root.graph.setNode(t.key,t),this.root.graph.setParent(t.key,this.key),this.fields.push({type:"model",key:t.key}),t}removeModel(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Dr(`Trying to remove the ${e} model, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==he)throw new Dr(`Trying to remove the ${e} model, but it is not a model`);return $e(this.root.graph,e),this.removeField(e),this}attachModel(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new je(`Trying to attach the ${e} model, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==he)throw new je(`Trying to attach the ${e} model, but it is not a model`);if(t.domain.key!==this.root.key)throw new je(`Trying to attach the ${e} model, but it is not in the same domain`);let r=t.getParentInstance();if(r===this)throw new je(`Trying to attach the ${e} model, but it is already a child of this namespace`);return this.root!==r&&r.detachModel(e),this.fields.push({type:"model",key:e}),this.root.graph.setParent(e,this.key),this}detachModel(e){this.root.ensureWritable();let t=this.fields.findIndex(i=>i.key===e);if(t===-1)throw new rt(`Trying to detach the ${e} model, but it doesn't exist`);let r=this.root.graph.node(e);if(!r||r.kind!==he)throw new rt(`Trying to detach the ${e} model, but it is not a model`);if(r.getParentInstance()!==this)throw new rt(`Trying to detach the ${e} model, but it is not a child of this namespace`);return this.fields.splice(t,1),this.root.graph.setParent(e),this}*listModels(){for(let{key:e,type:t}of this.fields){if(t!=="model")continue;let r=this.root.graph.node(e);!r||r.kind!==he||(yield r)}}hasModels(){return this.fields.some(e=>e.type==="model")}getParentInstance(){let e;for(let t of this.root.graph.parents(this.key)){e=t;break}return e?this.root.graph.node(e):this.root}*listFields(){for(let{key:e}of this.fields){let t=this.root.graph.node(e);t&&(t.kind===ge||t.kind===he)&&(yield t)}}hasFields(){return this.fields.length>0}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}isChildOf(e){if(this.key===e)return!1;let t=this.getParentInstance();return t?t.key===e?!0:t===this.root?!1:t.isChildOf(e):!1}};function nr(o,e,t){return o+""+e+""+(t||"\0")}function ia(o,e,t){let r={v:o,w:e};return t&&(r.name=t),r}var Ri=class o{isDirectedValue;isMultigraphValue;isCompoundValue;graphLabelValue;nodesValue;#e;get parentValue(){if(!this.isCompoundValue)throw new Error("Cannot access parentValue in a non-compound graph");return this.#e||(this.#e=new Map),this.#e}#t;get childrenValue(){if(!this.isCompoundValue)throw new Error("Cannot access childrenValue in a non-compound graph");return this.#t||(this.#t=new Map),this.#t}inValue;predecessorsValue;outValue;successorsValue;edgeObjectsValue;edgeLabelsValue;nodeCountValue;edgeCountValue;constructor(e={}){this.isDirectedValue=typeof e.directed=="boolean"?e.directed:!0,this.isMultigraphValue=typeof e.multigraph=="boolean"?e.multigraph:!1,this.isCompoundValue=typeof e.compound=="boolean"?e.compound:!1,this.graphLabelValue=void 0,this.nodesValue=new Map,this.isCompoundValue&&this.childrenValue.set("\0",new Set),this.inValue=new Map,this.outValue=new Map,this.predecessorsValue=new Map,this.successorsValue=new Map,this.edgeObjectsValue=new Map,this.edgeLabelsValue=new Map,this.nodeCountValue=0,this.edgeCountValue=0,this.defaultNodeLabelFn=()=>{},this.defaultEdgeLabelFn=()=>{}}isDirected(){return this.isDirectedValue}isMultigraph(){return this.isMultigraphValue}isCompound(){return this.isCompoundValue}setGraph(e){return this.graphLabelValue=e,this}graph(){return this.graphLabelValue}defaultNodeLabelFn(e){}defaultEdgeLabelFn(e,t,r){}setDefaultNodeLabel(e){return typeof e=="function"?this.defaultNodeLabelFn=e:this.defaultNodeLabelFn=()=>e,this}nodeCount(){return this.nodeCountValue}nodes(){return this.nodesValue.keys()}*sources(){for(let e of this.nodes()){let t=this.inValue.get(e);(!t||t.size===0)&&(yield e)}}*sinks(){for(let e of this.nodes()){let t=this.outValue.get(e);(!t||t.size===0)&&(yield e)}}setNodes(e,t){if(typeof t>"u")for(let r of e)this.setNode(r);else for(let r of e)this.setNode(r,t);return this}setNode(e,t){return this.nodesValue.has(e)?(t&&this.nodesValue.set(e,t),this):(this.nodesValue.set(e,t||this.defaultNodeLabelFn(e)),this.isCompoundValue&&(this.parentValue.set(e,new Set(["\0"])),this.childrenValue.set(e,new Set),this.childrenValue.get("\0").add(e)),this.inValue.set(e,new Map),this.predecessorsValue.set(e,new Map),this.outValue.set(e,new Map),this.successorsValue.set(e,new Map),++this.nodeCountValue,this)}node(e){return this.nodesValue.get(e)}hasNode(e){return this.nodesValue.has(e)}removeNode(e){if(!this.hasNode(e))return this;if(this.nodesValue.delete(e),this.isCompoundValue){this.removeFromParentsChildList(e),this.parentValue.delete(e);for(let i of this.children(e))this.removeParent(i,e);this.childrenValue.delete(e)}let t=this.inValue.get(e);if(t){for(let i of t.keys()){let s=this.edgeObjectsValue.get(i);s&&this.removeEdge(s)}this.inValue.delete(e)}this.predecessorsValue.delete(e);let r=this.outValue.get(e);if(r){for(let i of r.keys()){let s=this.edgeObjectsValue.get(i);s&&this.removeEdge(s)}this.outValue.delete(e)}return this.successorsValue.delete(e),this.nodeCountValue-=1,this}setParent(e,t="\0"){if(!this.isCompoundValue)throw new Error("Cannot set parent in a non-compound graph");return t!=="\0"&&(this.checkParentCycle(e,t),this.nodesValue.has(t)||this.setNode(t)),this.nodesValue.has(e)||this.setNode(e),this.removeFromParentsChildList(e),this.parentValue.set(e,new Set),this.parentValue.get(e).add(t),this.childrenValue.has(t)||this.childrenValue.set(t,new Set),this.childrenValue.get(t).add(e),this}checkParentCycle(e,t){for(let r of this.parents(t)){if(r===e)throw new Error(`Setting ${t} as parent of ${e} would create a cycle`);this.checkParentCycle(e,r)}}addParent(e,t){if(!this.isCompoundValue)throw new Error("Cannot set parent in a non-compound graph");return this.checkParentCycle(e,t),this.nodesValue.has(t)||this.setNode(t),this.nodesValue.has(e)||this.setNode(e),this.parentValue.has(e)||this.parentValue.set(e,new Set),this.parentValue.get(e).add(t),this.childrenValue.has(t)||this.childrenValue.set(t,new Set),this.childrenValue.get(t).add(e),this}removeParent(e,t){if(!this.isCompoundValue)throw new Error("Cannot remove parent in a non-compound graph");return this.nodesValue.has(e)?(t?(this.childrenValue.get(t)?.delete(e),this.parentValue.get(e)?.delete(t)):(this.removeFromParentsChildList(e),this.parentValue.set(e,new Set),this.parentValue.get(e).add("\0"),this.childrenValue.get("\0").add(e)),this):this}removeFromParentsChildList(e){let t=this.parentValue.get(e);if(t)for(let r of t)this.childrenValue.get(r)?.delete(e)}*parents(e){if(this.isCompoundValue){let t=this.parentValue.get(e);if(t)for(let r of t)r!=="\0"&&(yield r)}}hasParents(e){for(let t of this.parents(e))return!0;return!1}hasParent(e,t){if(this.isCompoundValue){let r=this.parentValue.get(e);if(r)return r.has(t)}return!1}parent(e){for(let t of this.parents(e))return t}*children(e="\0"){if(this.isCompoundValue){let t=this.childrenValue.get(e);if(t)for(let r of t.keys())yield r}else if(e==="\0")for(let t of this.nodes())yield t}hasChildren(e="\0"){if(this.isCompoundValue){let t=this.childrenValue.get(e);if(!t)return!1;for(let r of t.keys())return!0;return!1}else if(e==="\0"){for(let t of this.nodes())return!0;return!1}return!1}*predecessors(e){let t=this.predecessorsValue.get(e);if(t)for(let r of t.keys())yield r}*successors(e){let t=this.successorsValue.get(e);if(t)for(let r of t.keys())yield r}*neighbors(e){if(!this.hasNode(e))return;let t=new Set;for(let r of this.predecessors(e))t.has(r)||(t.add(r),yield r);for(let r of this.successors(e))t.has(r)||(t.add(r),yield r)}isLeaf(e){if(this.isDirected()){for(let t of this.successors(e))return!1;return!0}for(let t of this.neighbors(e))return!1;return!0}filterNodes(e){let t=new o({directed:this.isDirectedValue,multigraph:this.isMultigraphValue,compound:this.isCompoundValue}),r=this.graph();t.setGraph(r);let i=new Set;if(this.nodesValue.forEach((s,a)=>{e(a)&&(t.setNode(a,s),i.add(a))}),this.edgeObjectsValue.forEach(s=>{i.has(s.v)&&i.has(s.w)&&t.setEdge(s,this.edge(s))}),this.isCompoundValue){let s=new Map;for(let a of t.nodes()){let n=[...this.parents(a)],l=[];for(;n.length>0;){let c=!1;for(let u of n)t.hasNode(u)&&(l.push(u),c=!0);if(c)break;let p=[];for(let u of n)for(let h of this.parents(u))p.push(h);n=p}l.length===0&&l.push("\0"),s.set(a,l)}for(let[a,n]of s){this.removeParent(a);for(let l of n)t.addParent(a,l)}}return t}setDefaultEdgeLabel(e){return typeof e=="function"?this.defaultEdgeLabelFn=e:this.defaultEdgeLabelFn=()=>e,this}edgeCount(){return this.edgeCountValue}edges(){return this.edgeObjectsValue.values()}setPath(e,t){if(!Array.isArray(e)||!e.length)return this;let r=arguments.length>1;return e.reduce((i,s)=>(r?this.setEdge(i,s,t):this.setEdge(i,s),s)),this}setEdge(e,t,r,i){if(typeof e=="object"&&e!==null&&"v"in e){let s=e;arguments.length>1?this._setEdge({loop:0},s,t):this._setEdge({loop:0},s)}else if(typeof t=="string"){let s=ia(e,t,i);arguments.length>2?this._setEdge({loop:0},s,r):this._setEdge({loop:0},s)}else throw new Error("Invalid arguments for setEdge");return this}_setEdge(e,t,r){let i=!1,s;arguments.length>2&&(s=r,i=!0);let a=nr(t.v,t.w,t.name);if(this.edgeLabelsValue.has(a)){if(i&&this.edgeLabelsValue.set(a,s),e.loop===0&&!this.isDirectedValue&&t.w!==t.v){let u=ia(t.w,t.v,t.name);i?this._setEdge({loop:1},u,r):this._setEdge({loop:1},u)}return}if(t.name&&!this.isMultigraphValue)throw new Error("Cannot set a named edge when isMultigraph = false");this.hasNode(t.v)||this.setNode(t.v),this.hasNode(t.w)||this.setNode(t.w);let l=i?s:this.defaultEdgeLabelFn(t.v,t.w,t.name);this.edgeLabelsValue.set(a,l),this.edgeObjectsValue.set(a,t);let c=this.predecessorsValue.get(t.w);if(c){let u=(c.get(t.v)||0)+1;c.set(t.v,u)}let p=this.successorsValue.get(t.v);if(p){let u=(p.get(t.w)||0)+1;p.set(t.w,u)}if(this.inValue.get(t.w).set(a,t),this.outValue.get(t.v).set(a,t),this.edgeCountValue++,e.loop===0&&!this.isDirectedValue&&t.w!==t.v){let u=ia(t.w,t.v,t.name);i?this._setEdge({loop:1},u,r):typeof l=="object"&&l!==null?this._setEdge({loop:1},u,l):this._setEdge({loop:1},u)}}edge(e,t,r){let i;return typeof e=="object"?i=nr(e.v,e.w,e.name):i=nr(e,t,r),this.edgeLabelsValue.get(i)}hasEdge(e,t,r){let i;return typeof e=="object"?i=nr(e.v,e.w,e.name):i=nr(e,t,r),this.edgeLabelsValue.has(i)}removeEdge(e,t,r){return typeof e=="object"?this._removeEdge({loop:0},e.v,e.w,e.name):this._removeEdge({loop:0},e,t,r),this}_removeEdge(e,t,r,i){let s=nr(t,r,i),a=this.edgeObjectsValue.get(s);if(a){this.edgeLabelsValue.delete(s),this.edgeObjectsValue.delete(s);let n=this.predecessorsValue.get(a.w);if(n){let c=(n.get(a.v)||0)-1;c<=0?n.delete(a.v):n.set(a.v,c)}let l=this.successorsValue.get(a.v);if(l){let c=(l.get(a.w)||0)-1;c<=0?l.delete(a.w):l.set(a.w,c)}this.inValue.get(a.w)?.delete(s),this.outValue.get(a.v)?.delete(s),this.edgeCountValue--}!this.isDirectedValue&&e.loop===0&&this._removeEdge({loop:1},r,t,i)}*inEdges(e,t){let r=this.inValue.get(e);if(r){let i=r.values();if(!t){for(let s of i)yield s;return}for(let s of i)s.v===t&&(yield s)}}*outEdges(e,t){let r=this.outValue.get(e);if(!r)return;let i=r.values();if(!t){for(let s of i)yield s;return}for(let s of i)s.w===t&&(yield s)}*nodeEdges(e,t){for(let r of this.inEdges(e,t))yield r;for(let r of this.outEdges(e,t))r.v!==r.w&&(yield r)}};function Bc(o,e){let t=[];for(let r of o.nodes()){let i=o.node(r);if(!i||i.domain.key!==e)continue;let s=[...o.parents(r)],a={v:r};a.value=i.toJSON(),s.length&&(a.parents=s),t.push(a)}return t}function Gc(o,e){let t=[];for(let r of o.edges()){let i=o.edge(r);if(!i)continue;let s=o.node(r.v),a=o.node(r.w);if(!s||!a||s.domain.key!==e||a.domain.key!==e&&i.type!=="association"&&i.type!=="parent")continue;let n={v:r.v,w:r.w};r.name&&(n.name=r.name),n.value=structuredClone(i),t.push(n)}return t}function Hc(o,e){let t=[],r=new Set;for(let i of o.nodes()){let s=o.node(i);s&&s.domain.key===e&&r.add(i)}for(let i of r){let s=o.node(i);if(s){if(s.kind===oe||s.kind===fe){let n=[...o.inEdges(i)].filter(l=>{let c=o.node(l.v);return c&&c.domain.key===e});if(n.length===0){let l=s.kind===oe?"Property":"Association";t.push(`${l} "${s.info.name}" (${i}) has no parent entity edge. This will cause deserialization to fail.`)}else if(n.length>1){let l=s.kind===oe?"Property":"Association",c=n.map(p=>p.v).join(", ");t.push(`${l} "${s.info.name}" (${i}) has multiple parent edges: ${c}. This may cause deserialization issues.`)}else{let l=n[0],c=o.node(l.v);if(!c||c.kind!==W){let p=s.kind===oe?"Property":"Association";t.push(`${p} "${s.info.name}" (${i}) has a parent that is not an entity. Parent: ${c?.kind||"unknown"} (${l.v})`)}}}if(s.kind===W&&([...o.parents(i)].some(l=>{let c=o.node(l);return c&&c.kind===he})||t.push(`Entity "${s.info.name}" (${i}) has no model parent. Entities must belong to a model.`)),s.kind===he){let a=[...o.parents(i)],n=a.some(l=>{let c=o.node(l);return c&&c.kind===ge});if(a.length>0&&!n){let l=a.map(c=>`${o.node(c)?.kind||"unknown"} (${c})`).join(", ");t.push(`Model "${s.info.name}" (${i}) has invalid parent types: ${l}. Models can only belong to namespaces or be at root level.`)}}}}for(let i of r){let s=o.node(i);if(s&&s.kind===fe){let a=s,l=[...o.outEdges(i)].filter(c=>{let p=o.edge(c);return p&&p.type==="association"});l.length;for(let c of l){let p=o.node(c.w);p?p.kind!==W&&t.push(`Association "${a.info.name}" (${i}) references non-entity target: ${p.kind} (${c.w})`):t.push(`Association "${a.info.name}" (${i}) references non-existent target: ${c.w}`)}}}if(t.length>0)throw new Error(`Graph consistency validation failed for domain "${e}":
|
|
52
|
-
`+t.map(
|
|
53
|
-
`))}function Fn(o,e){return Hc(o,e),{options:{directed:o.isDirected(),multigraph:o.isMultigraph(),compound:o.isCompound()},nodes:Bc(o,e),edges:Gc(o,e)}}function Kn(o,e){for(let t of o.nodes()){let r=o.node(t);r&&r.domain.key===e&&o.removeNode(t)}}function sa(o,e,t){let r=new Set,i=new Set;for(let a of e.nodes()){let n=e.node(a);if(!n)continue;let l=`${t}:${a}`;o.setNode(l,n),r.add(l)}for(let a of e.edges()){let n=e.edge(a);if(!n)continue;let l=`${t}:${a.v}`,c=`${t}:${a.w}`;o.setEdge(l,c,{foreign:!0,domain:t,...n}),i.add(`${l}|${c}`)}let s=new Set;for(let a of e.nodes()){let n=`${t}:${a}`;for(let l of e.parents(a)){let c=`${t}:${l}`,p=o.node(n),u=o.node(c);p.kind===W&&u.kind===W?s.has(n)?o.addParent(n,c):(s.add(n),o.setParent(n,c)):o.setParent(n,c)}}return{nodes:r,edges:i}}function Mn(o,e){for(let t of e)if(t.w===o)return t.v}function Wc(o,e,t,r,i){if(!e){let a={type:"malformed_entry",severity:"error",message:"Unable to restore data domain graph. Malformed node entry"};if(i.push(a),r==="strict")throw new Error(a.message);return}let s=e;if(!s.kind){let a={type:"malformed_entry",severity:"error",message:"Unable to restore data domain graph. Node entry missing kind property",affectedKey:s.key};if(i.push(a),r==="strict")throw new Error(a.message);return}try{if(s.kind===ge)return new ar(o,s);if(s.kind===he)return new Ot(o,s);if(s.kind===W)return new ir(o,s);if(s.kind===oe){let n=s,l=Mn(n.key,t);if(!l){let c={type:"missing_edge",severity:"error",message:`Property "${n.info?.name||n.key}" has no parent entity edge`,affectedKey:n.key,resolution:r==="lenient"?"Property will be skipped":void 0};if(i.push(c),r==="strict")throw new Error("Unable to restore data domain graph. Malformed node entry");return}return new tr(o,l,n)}if(s.kind===fe){let n=s,l=Mn(n.key,t);if(!l){let c={type:"missing_edge",severity:"error",message:`Association "${n.info?.name||n.key}" has no parent entity edge`,affectedKey:n.key,resolution:r==="lenient"?"Association will be skipped":void 0};if(i.push(c),r==="strict")throw new Error("Unable to restore data domain graph. Malformed node entry");return}return new rr(o,l,n)}let a={type:"unknown_kind",severity:"error",message:`Unknown node kind: ${s.kind}`,affectedKey:s.key};if(i.push(a),r==="strict")throw new Error(`Unable to restore data domain graph. Unknown node kind ${s.kind}`);return}catch(a){let n={type:"malformed_entry",severity:"error",message:`Failed to create node: ${a instanceof Error?a.message:String(a)}`,affectedKey:s.key};if(i.push(n),r==="strict")throw a;return}}function Jn(o,e={}){let{json:t,dependencies:r,mode:i="strict"}=e,s=new Ri({compound:!0,multigraph:!0,directed:!0}),a=[],n=new Set,l=new Set;if(r)for(let p of r)try{let u=sa(s,p.graph,p.key);u.edges.size&&(l=new Set([...l,...u.edges])),u.nodes.size&&(n=new Set([...n,...u.nodes])),o.dependencies.set(p.key,p)}catch(u){let h=`Failed to merge dependency "${p.key}": ${u instanceof Error?u.message:String(u)}`;if(i==="strict")throw new Error(h,{cause:u});let m={type:"missing_dependency",severity:"error",message:h,affectedKey:p.key,resolution:"Dependency will be skipped"};a.push(m)}if(!t)return{graph:s,issues:a,success:!0};if(Array.isArray(t.nodes)){let p=new Map;for(let u of t.nodes){let h=Wc(o,u.value,t.edges,i,a);h&&(s.setNode(u.v,h),u.parents&&p.set(u.v,u.parents))}for(let[u,h]of p){if(!s.hasNode(u)){let m={type:"missing_node",severity:"warning",message:`Cannot set parents for missing node: ${u}`,affectedKey:u,resolution:"Parent relationship will be skipped"};a.push(m);continue}for(let m of h){if(!s.hasNode(m)){let f={type:"missing_node",severity:"warning",message:`Parent node "${m}" not found for child "${u}"`,affectedKey:u,context:{parentKey:m},resolution:"Parent relationship will be skipped"};a.push(f);continue}try{s.setParent(u,m)}catch(f){let b={type:"invalid_parent",severity:"warning",message:`Failed to set parent "${m}" for child "${u}": ${f instanceof Error?f.message:String(f)}`,affectedKey:u,context:{parentKey:m},resolution:"Parent relationship will be skipped"};a.push(b)}}}}if(Array.isArray(t.edges))for(let p of t.edges){if(!p.value){let u="Edge entry missing value";if(i==="strict")throw new Error(u);let h={type:"malformed_entry",severity:"error",message:u,context:{edge:p}};a.push(h);continue}if(p.value.foreign&&!n.has(p.w)){let u={type:"missing_node",severity:"warning",message:`Missing foreign node: ${p.w}`,affectedKey:p.w,resolution:"Edge will be skipped"};a.push(u);continue}if(n.has(p.v)||n.has(p.w)){if(!s.hasNode(p.v)||!s.hasNode(p.w)){let u={type:"missing_node",severity:"warning",message:`Missing foreign node for edge: ${p.v} -> ${p.w}`,context:{sourceNode:p.v,targetNode:p.w},resolution:"Edge will be skipped"};a.push(u);continue}}else{if(!s.hasNode(p.v)){let u={type:"missing_node",severity:"warning",message:`Source node not found for edge: ${p.v}`,affectedKey:p.v,resolution:"Edge will be skipped"};a.push(u);continue}if(!s.hasNode(p.w)){let u={type:"missing_node",severity:"warning",message:`Target node not found for edge: ${p.w}`,affectedKey:p.w,resolution:"Edge will be skipped"};a.push(u);continue}}try{s.setEdge({v:p.v,w:p.w,name:p.name},p.value)}catch(u){let m={type:"malformed_entry",severity:"warning",message:`Failed to create edge ${p.v} -> ${p.w}: ${u instanceof Error?u.message:String(u)}`,context:{sourceNode:p.v,targetNode:p.w},resolution:"Edge will be skipped"};a.push(m)}}let c=a.some(p=>p.severity==="error");return{graph:s,issues:a,success:!c}}var or=class extends EventTarget{dependencies=new Map;dependencyList=[];constructor(e=[],t=[]){super(),this.dependencyList=[...e];for(let r of t)this.dependencies.set(r.key,r)}};var Be=class o extends or{kind;key;graph;info;lifecycle;previousVersion;#e=!0;#t=!1;readOnly;get domain(){return this}#i;get fields(){return this.#i}set fields(e){this.#i=e}issues=[];static createSchema(e={}){let{key:t=M(),fields:r,lifecycle:i="draft",previousVersion:s}=e,a=Q.fromJSON(e.info,{name:"Unnamed domain"}).toJSON(),n={kind:Re,key:t,info:a,lifecycle:i};return s&&(n.previousVersion=s),e.dependencyList&&(n.dependencyList=structuredClone(e.dependencyList)),e.graph&&(n.graph=e.graph),Array.isArray(r)&&(n.fields=[...r]),n}constructor(e,t=[],r){let i=o.createSchema(e),s=[];for(let l of t)if(l instanceof o)l.readOnly?s.push(l):(console.warn(`Domain ${l.key} is not read only, cloning it. This may have performance implications.`),s.push(l.clone({readOnly:!0})));else if(typeof l=="object"&&l.kind===Re&&l.key){let c=new o(l,void 0,{readOnly:!0});s.push(c)}else throw new Error(`Invalid foreign domain dependency: ${l}`);super(i.dependencyList,s),this.kind=i.kind,this.key=i.key,this.info=new Q(i.info),this.readOnly=r?.readOnly||!1,this.lifecycle=i.lifecycle||"draft",this.previousVersion=i.previousVersion;let a=r?.mode||"strict",n=Jn(this,{json:i.graph,dependencies:s,mode:a});this.graph=n.graph,n.issues.length>0&&a==="lenient"&&(this.issues=n.issues),Array.isArray(i.fields)?this.fields=[...i.fields]:this.fields=[],Array.isArray(i.dependencyList)?this.dependencyList=[...i.dependencyList]:this.dependencyList=[],this.#e=!1}clone(e){let t=this.toJSON(),r=Array.from(this.dependencies.values()).map(s=>s.clone()),i={readOnly:this.readOnly,...e};return new o(t,r,i)}toJSON(){let e={info:this.info.toJSON(),kind:this.kind,key:this.key,graph:Fn(this.graph,this.key),lifecycle:this.lifecycle};return this.previousVersion&&(e.previousVersion=this.previousVersion),this.dependencyList.length>0&&(e.dependencyList=structuredClone(this.dependencyList)),Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),e}notifyChange(){this.#t||this.#e||(this.#t=!0,queueMicrotask(()=>{this.#t=!1;let e=new Event("change");this.dispatchEvent(e)}))}changeLifecycle(e,t){if(e!==this.lifecycle){if(this.lifecycle==="published"){if(e!=="draft")throw new Error(`Cannot transition from published to ${e}`);if(!t)throw new Error("A new version must be specified when creating a draft from a published domain");if(t===this.info.version)throw new Error("The new version must be different from the current published version");this.previousVersion=this.info.version,this.info.version=t,this.lifecycle="draft",this.notifyChange();return}if(e==="draft"){if(this.lifecycle!=="committed")throw new Error(`Cannot transition from ${this.lifecycle} to draft`);this.lifecycle="draft",this.notifyChange();return}if(e==="committed"){if(this.lifecycle!=="draft")throw new Error(`Cannot transition from ${this.lifecycle} to committed`);this.lifecycle="committed",this.notifyChange();return}if(e==="published"){this.lifecycle="published",this.notifyChange();return}throw new Error(`Unknown lifecycle state: ${e}`)}}ensureWritable(){if(this.lifecycle!=="draft")throw new Error(`Cannot modify the data domain when it is in "${this.lifecycle}" lifecycle state`)}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}hasFields(){return this.fields.length>0}*listFields(){for(let{key:e}of this.fields){let t=this.graph.node(e);t&&(t.kind===ge||t.kind===he)&&(yield t)}}addNamespace(e,t){if(this.ensureWritable(),t){if(!this.graph.hasNode(t))throw new Error(`Parent namespace ${t} does not exist`);let i=this.graph.node(t);if(!i||i.kind!==ge)throw new Error(`Parent namespace ${t} is not a valid namespace`);if(i.domain.key!==this.key)throw new Error("Cannot add a namespace to a foreign domain");return i.addNamespace(e)}let r=new ar(this,e);return this.graph.setNode(r.key,r),this.fields.push({type:"namespace",key:r.key}),r}removeNamespace(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Namespace ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==ge)throw new Error(`Namespace ${e} not found`);if(t.domain.key!==this.key)throw new Error("Cannot remove a namespace from a foreign domain");let r=t.getParentInstance();return r===this?($e(this.graph,e),this.removeField(e)):r.removeNamespace(e),this}*listNamespaces(){for(let{key:e,type:t}of this.fields){if(t!=="namespace")continue;let r=this.graph.node(e);!r||r.kind!==ge||(yield r)}}*listForeignNamespaces(e){let t=this.dependencies.get(e);if(!t)throw new Error(`Foreign domain ${e} not found`);for(let r of t.listNamespaces()){let i=`${e}:${r.key}`;this.graph.node(i)&&(yield r)}}hasNamespaces(){return this.fields.some(e=>e.type==="namespace")}*listGraphNamespaces(e){for(let t of this.graph.children(e)){let r=this.graph.node(t);r.kind===ge&&r.domain.key===this.key&&(yield r)}}buildReferenceKey(e,t){if(t&&t!==this.key){if(typeof t!="string"||t.length===0)throw new Error(`Invalid namespace key. Expected a string, got ${typeof t}`);if(!this.dependencies.get(t))throw new Error(`Foreign domain ${t} not found`);return`${t}:${e}`}return e}findNamespace(e,t){let r=this.graph.node(this.buildReferenceKey(e,t));if(r&&r.kind===ge)return r}moveNamespace(e,t){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Namespace ${e} does not exist`);let r=this.findNamespace(e);if(!r)throw new Error(`Namespace ${e} not found in the graph`);if(t){let a=this.findNamespace(t);if(a&&a.domain.key!==this.key)throw new Error("Cannot move a namespace to a foreign domain");if(!a)throw new Error(`Parent namespace ${t} does not exist`)}if(e===t)throw new Error("Cannot move a namespace to itself");if(r.domain.key!==this.key)throw new Error("Cannot move a namespace from a foreign domain");let i;if(t){if(i=this.findNamespace(t),!i)throw new Error(`Parent namespace ${t} not found`);if(this.isChildOf(t,e))throw new Error("Cannot move a namespace to its own child")}let s=this.graph.parent(e);return s&&!t?this.graph.node(s).detachNamespace(e):s||this.removeField(e),t&&i?i.attachNamespace(e):this.fields.push({type:"namespace",key:e}),this}isChildOf(e,t){let r=this.graph.children(t);for(let i of r)if(i===e||this.isChildOf(e,i))return!0;return!1}addModel(e,t){if(this.ensureWritable(),t){if(!this.graph.hasNode(t))throw new Error(`Parent ${t} does not exist`);let i=this.findNamespace(t);if(!i)throw new Error(`Parent namespace ${t} is not a valid namespace`);if(i.domain.key!==this.key)throw new Error("Cannot add a model to a foreign domain");return i.addModel(e)}let r=new Ot(this,e);return this.graph.setNode(r.key,r),this.fields.push({type:"model",key:r.key}),r}removeModel(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Data model ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==he)throw new Error(`Data model ${e} not found`);if(t.domain.key!==this.key)throw new Error("Cannot remove a model from a foreign domain");let r=t.getParentInstance();return r===this?($e(this.graph,e),this.removeField(e)):r.removeModel(e),this}*listModels(e){let t=e?.domain,r=e?.includeForeign??!1,i=e?.foreignOnly??!1;if(t){let s=t===this.key?this:this.dependencies.get(t);if(!s)throw new Error(`Foreign domain ${t} not found`);for(let a of s.listModels()){let n=t===this.key?a.key:`${t}:${a.key}`,l=this.graph.node(n);l&&(yield l)}return}if(!i)for(let{key:s,type:a}of this.fields){if(a!=="model")continue;let n=this.graph.node(s);n&&n.kind===he&&(yield n)}if(r||i)for(let[s,a]of this.dependencies)for(let n of a.listModels()){let l=`${s}:${n.key}`,c=this.graph.node(l);c&&(yield c)}}*listForeignModels(e){yield*this.listModels({domain:e})}hasModels(){return this.fields.some(e=>e.type==="model")}*listGraphModels(e){for(let t of this.graph.children(e)){let r=this.graph.node(t);r.kind===he&&r.domain.key===this.key&&(yield r)}}findModel(e,t){let r=this.graph.node(this.buildReferenceKey(e,t));if(r&&r.kind===he)return r}moveModel(e,t){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Data model ${e} does not exist`);let r=this.findModel(e);if(!r)throw new Error(`Data model ${e} not found in the graph`);if(t){let s=this.findNamespace(t);if(s&&s.domain.key!==this.key)throw new Error("Cannot move a model to a foreign domain");if(!s)throw new Error(`Parent namespace ${t} does not exist`)}if(r.domain.key!==this.key)throw new Error("Cannot move a data model to a foreign domain");let i=this.graph.parent(e);if(i&&!t){let s=this.findNamespace(i);if(!s)throw new Error(`The parent namespace ${i} not found`);s.detachModel(e)}else i||this.removeField(e);return t?this.findNamespace(t).attachModel(e):this.fields.push({type:"model",key:e}),this}addEntity(e,t){if(this.ensureWritable(),!e)throw new Error("An entity expects a DomainModel parent");if(!this.graph.hasNode(e))throw new Error(`The parent ${e} does not exist`);let r=this.findModel(e);if(!r)throw new Error(`Parent model ${e} is not a valid model`);if(r.domain.key!==this.key)throw new Error("Cannot add an entity to a foreign domain");return r.addEntity(t)}removeEntity(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Entity ${e} does not exist`);let t=this.graph.parent(e);if(!t)throw new Error(`Parent model not found for entity ${e}`);let r=this.findModel(t);if(!r)throw new Error(`Parent model ${t} not found`);if(r.domain.key!==this.key)throw new Error("Cannot remove an entity from a foreign domain");return r.removeEntity(e),this}*listEntities(e){let t,r,i=!1,s=!1;if(typeof e=="string"?t=e:e&&typeof e=="object"&&(t=e.parent,r=e.domain,i=e.includeForeign??!1,s=e.foreignOnly??!1),r&&r!==this.key&&!this.dependencies.get(r))throw new Error(`Foreign domain ${r} not found`);let a=t?this.graph.children(t):this.graph.nodes();for(let n of a){let l=this.graph.node(n);if(l&&l.kind===W){let c=l.domain.key===this.key;if(r){l.domain.key===r&&(yield l);continue}s?c||(yield l):i?yield l:c&&(yield l)}}}*listForeignEntities(e){yield*this.listEntities({domain:e})}*listAllForeignEntities(){yield*this.listEntities({foreignOnly:!0})}findEntity(e,t){let r=this.graph.node(this.buildReferenceKey(e,t));if(r&&r.kind===W)return r}moveEntity(e,t,r){if(this.ensureWritable(),t===r)throw new Error("Cannot move an entity to the same model");if(!this.graph.hasNode(e))throw new Error(`Entity ${e} does not exist`);if(!this.graph.hasNode(t))throw new Error(`Source model ${t} does not exist`);if(!this.graph.hasNode(r))throw new Error(`Target model ${r} does not exist`);let i=this.findEntity(e),s=this.findModel(t),a=this.findModel(r);if(!i||!s||!a)throw new Error("Entity or models not found in the graph");if(i.domain.key!==this.key)throw new Error("Cannot move an entity from a foreign domain");if(a.domain.key!==this.key)throw new Error("Cannot move an entity to a foreign domain");a.attachEntity(e)}addAssociation(e,t){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Source entity ${e} not found`);let r=this.findEntity(e);if(!r)throw new Error(`Source entity ${e} not found`);if(r.domain.key!==this.key)throw new Error("Cannot add an association to a foreign domain");return r.addAssociation(t)}removeAssociation(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Association ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==fe)throw new Error(`Association ${e} not found`);let r=t.getParentInstance();if(!r)throw new Error(`Parent entity not found for association ${e}`);if(r.domain.key!==this.key)throw new Error("Cannot remove an association from a foreign domain");return r.removeAssociation(e),this}findAssociation(e,t){let r=this.graph.node(this.buildReferenceKey(e,t));if(r&&r.kind===fe)return r}getIncomingAssociations(e){let t=[];for(let r of this.graph.inEdges(e)){let i=this.graph.node(r.v);i&&i.kind===fe&&t.push(i)}return t}findAssociationBetween(e,t){let r=this.graph.node(e);if(!r||r.kind!==W)return;let i=r;for(let s of i.listAssociations())for(let a of s.targets)if(this.buildReferenceKey(a.key,a.domain)===t)return s}resolveOwnershipPath(e){let t=this.findEntity(e);if(!t)return null;if(t.hasSemantic(w.User))return[];for(let s of t.listAssociations())if(s.hasSemantic(w.ResourceOwnerIdentifier))return[s];let r=[{key:e,path:[]}],i=new Set([e]);for(;r.length>0;){let s=r.shift();if(!s)continue;let a=this.findEntity(s.key);if(!a)continue;let n=[...a.listAssociations()].filter(u=>u.hasSemantic(w.CreatedBy)||u.hasSemantic(w.UpdatedBy)||u.hasSemantic(w.DeletedBy)?!1:u.hasSemantic(w.RelationalResourceOwner)||u.hasSemantic(w.ResourceOwnerIdentifier)?!0:u.listTargets().some(h=>h.hasSemantic(w.User))),c=this.getIncomingAssociations(s.key).filter(u=>{if(u.hasSemantic(w.CreatedBy)||u.hasSemantic(w.UpdatedBy)||u.hasSemantic(w.DeletedBy))return!1;let h=u.getParentInstance();return h?h.hasSemantic(w.User)||u.schema?.embedded===!0:!1}),p=[...n,...c];for(let u of p){let h=u.getParentInstance();if(!h)continue;let m=[...u.listTargets()];if(m.length!==0)for(let f of m){let k=s.key===h.key?f.key:h.key;if(i.has(k))continue;let b=this.findEntity(k);if(!b)continue;let y=[...s.path,u];if(b.hasSemantic(w.User)||u.hasSemantic(w.ResourceOwnerIdentifier))return y;i.add(k),r.push({key:k,path:y})}}}return null}addProperty(e,t){if(this.ensureWritable(),!e)throw new Error("A property expects a DomainEntity parent");if(!this.graph.hasNode(e))throw new Error(`Parent entity ${e} does not exist`);let r=this.findEntity(e);if(!r)throw new Error(`Parent entity ${e} not found`);if(r.domain.key!==this.key)throw new Error("Cannot add a property to a foreign domain");return r.addProperty(t)}removeProperty(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Property ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==oe)throw new Error(`Property ${e} not found`);let r=t.getParentInstance();if(!r)throw new Error(`Parent entity not found for property ${e}`);if(r.domain.key!==this.key)throw new Error("Cannot remove a property from a foreign domain");return r.removeProperty(e),this}findProperty(e,t){let r=this.graph.node(this.buildReferenceKey(e,t));if(r&&r.kind===oe)return r}registerForeignDomain(e){this.ensureWritable();let{info:t,key:r}=e;if(!t.version)throw new Error(`Foreign domain ${r} does not have a version set`);if(this.dependencies.has(r))throw new Error(`Foreign domain with key ${r} already registered`);this.dependencies.set(r,e),this.dependencyList.push({key:r,version:t.version}),sa(this.graph,e.graph,e.key)}unregisterForeignDomain(e){this.ensureWritable();let t=this.dependencies.get(e);if(!t)throw new Error(`Foreign domain with key ${e} not found`);this.dependencies.delete(e),this.dependencyList=this.dependencyList.filter(r=>r.key!==e),Kn(this.graph,t.key)}removeDomainElement(e,t){switch(t){case ge:this.removeNamespace(e);break;case he:this.removeModel(e);break;case W:this.removeEntity(e);break;case oe:this.removeProperty(e);break;case fe:this.removeAssociation(e);break;default:throw new Error(`Unknown kind ${t} for the object ${e}`)}}search(e={}){let{query:t,nodeTypes:r,includeForeignDomains:i=!1,caseSensitive:s=!1}=e,a=[],n=!t&&(!r||r.length===0),l=h=>!r||r.length===0?!0:r.includes(h),c=h=>{if(!h||!t)return!t;if(t instanceof RegExp)return t.test(h);let m=s?h:h.toLowerCase(),f=s?t:t.toLowerCase();return m.includes(f)},p=h=>{if(!t)return[];let m=[],{info:f}=h;return c(f.name)&&m.push("name"),c(f.displayName)&&m.push("displayName"),c(f.description)&&m.push("description"),m},u=h=>h.includes(":");for(let h of this.graph.nodes()){let m=this.graph.node(h);if(!m||!m.info)continue;let f=u(h);if(f&&!i||!l(m.kind))continue;if(n){a.push({node:m,matchedFields:[],key:h,isForeign:f});continue}let k=p(m);(!t||k.length>0)&&a.push({node:m,matchedFields:k,key:h,isForeign:f})}return a}};var Ti=new Set(["IN","EXISTS","SELECT","FROM","WHERE","AND","OR","NOT","NULL","TRUE","FALSE","BETWEEN","LIKE","INTO","JOIN","INNER JOIN","LEFT JOIN","RIGHT JOIN","FULL JOIN","CROSS JOIN","UNION","INTERSECT","EXCEPT","ORDER BY","GROUP BY","HAVING","DISTINCT","LIMIT","OFFSET","INSERT","UPDATE","DELETE","CREATE","ALTER","DROP","TRUNCATE","RENAME","GRANT","REVOKE","COMMIT","ROLLBACK","SAVEPOINT","BEGIN","END","CASE","WHEN","THEN","ELSE","END CASE","EXCEPTION","RAISE","RETURN","FUNCTION","PROCEDURE"]);function Di(o){let e=[],t=o.info.getLabel(),r=o.getParentInstance(),i=o.kind===oe?"property":"association";if(!o.info.name){let a=`The "${t}" ${i} has no name.`,n=`The ${i} must have a name.`;return e.push({field:"name",rule:"required",message:a,help:n,severity:"error",key:o.key,kind:o.kind,parent:r.key}),e}let s=o.info.name;if(s.length<2){let a=`The "${t}" ${i} name is too short.`;e.push({field:"name",rule:"length",message:a,help:"The name must be at least 2 characters long.",severity:"error",key:o.key,kind:o.kind,parent:r.key})}if(s.length>59){let a=`The "${t}" ${i} name is too long.`;e.push({field:"name",rule:"length",message:a,help:"The name must be at most 59 characters long.",severity:"error",key:o.key,kind:o.kind,parent:r.key})}if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s)){let a=`The "${t}" ${i} name is invalid.`;e.push({field:"name",rule:"format",message:a,help:"The name must start with a letter (a-z) or underscore (_). Subsequent characters can be letters, digits (0-9), or underscores (_).",severity:"error",key:o.key,kind:o.kind,parent:r.key})}if(/^[A-Z]/.test(s)){let a=`The "${t}" ${i} name is not in snake case.`;e.push({field:"name",rule:"snake_case",message:a,help:"The name should be in snake case (lowercase letters and underscores).",severity:"info",key:o.key,kind:o.kind,parent:r.key})}if(Ti.has(s.toUpperCase())){let a=`The "${t}" ${i} name is a reserved keyword.`;e.push({field:"name",rule:"reserved",message:a,help:"The name should not be a reserved keyword.",severity:"error",key:o.key,kind:o.kind,parent:r.key})}return e}var zi=class{domain;constructor(e){this.domain=e}validate(e){let t=[],r;if(typeof e=="string"?r=this.domain.findAssociation(e):r=e,!r){let n=`The "${e}" association does not exist.`;return t.push({field:"*",rule:"exists",message:n,help:"The association must be defined in the domain.",key:e,kind:fe,severity:"error"}),t}let i=this.validateName(r);t.push(...i);let s=this.validateTargets(r);t.push(...s);let a=this.validateSemantics(r);return t.push(...a),t}validateName(e){return Di(e)}validateTargets(e){let t=[],r=e.info.getLabel(),i=e.getParentInstance();if(!e.targets.length){let s=`The "${r}" association has no target.`;return t.push({field:"targets",rule:"required",message:s,help:"An association must have at least one target.",severity:"error",key:e.key,kind:e.kind,parent:i.key}),t}for(let s of e.targets)if(!this.domain.findEntity(s.key,s.domain)){let n=`The "${r}" association has an invalid target "${s.key}".`;t.push({field:"targets",rule:"exists",message:n,help:"The target must be defined in the domain.",severity:"error",key:e.key,kind:e.kind,parent:i.key})}return t}validateSemantics(e){let t=[],r=e.info.getLabel(),i=e.getParentInstance();if(e.hasSemantic(w.RelationalResourceOwner))for(let s of e.targets){let a=this.domain.findEntity(s.key,s.domain);a&&this.domain.resolveOwnershipPath(a.key)===null&&t.push({field:"semantics",rule:"relational_owner_path_valid",message:`The target entity "${a.info.getLabel()}" of the relational resource owner association "${r}" does not have a valid ownership path to a User.`,help:"Ensure the target entity has a direct owner (Resource Owner Identifier) or transitively inherits ownership through another relational owner association.",severity:"error",key:e.key,kind:e.kind,parent:i.key})}return t}};var Ui=class{domain;constructor(e){this.domain=e}validate(e){let t=[],r;if(typeof e=="string"?r=this.domain.findEntity(e):r=e,!r){let c=`The "${e}" entity does not exist.`;return t.push({field:"*",rule:"exists",message:c,help:"The entity must be defined in the domain.",key:e,kind:W,severity:"error"}),t}let i=this.validatePrimaryKey(r);t.push(...i);let s=this.minimumRequiredProperties(r);t.push(...s);let a=this.validateName(r);t.push(...a);let n=this.uniqueName(r);t.push(...n);let l=this.validateUserSemantics(r);return t.push(...l),t}validatePrimaryKey(e){let t=[];if(!e.primaryKey()){let i=`The "${e.info.getLabel()}" entity has no identifier.`;t.push({field:"properties",rule:"primary_key",message:i,help:"An entity that can exists by itself must have identifier defined.",severity:"error",key:e.key,kind:e.kind})}return t}hasPropertiesInherited(e){if(e.hasProperties())return!0;for(let t of e.listParents())if(this.hasPropertiesInherited(t))return!0;return!1}hasAssociationsInherited(e){if(e.hasAssociations())return!0;for(let t of e.listParents())if(this.hasAssociationsInherited(t))return!0;return!1}minimumRequiredProperties(e){let t=[],r=this.hasPropertiesInherited(e),i=this.hasAssociationsInherited(e);if(!r&&!i){let s=`The "${e.info.getLabel()}" entity has no properties. It will be ignored.`;t.push({field:"properties",rule:"required",message:s,help:"Entities that have no properties are ignored in the data domain. No schema will be generated for it.",severity:"warning",key:e.key,kind:e.kind})}return t}validateName(e){let t=[],r=e.info.getLabel();if(!e.info.name){let s=`The "${r}" entity has no name.`;return t.push({field:"name",rule:"required",message:s,help:"An entity must have a name.",severity:"error",key:e.key,kind:e.kind}),t}let i=e.info.name;if(i.length<2){let s=`The "${r}" entity name is too short.`;t.push({field:"name",rule:"length",message:s,help:"The name must be at least 2 characters long.",severity:"error",key:e.key,kind:e.kind})}if(i.length>31){let s=`The "${r}" entity name is too long.`;t.push({field:"name",rule:"length",message:s,help:"The name must be at most 31 characters long.",severity:"error",key:e.key,kind:e.kind})}if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)){let s=`The "${r}" entity name is invalid.`;t.push({field:"name",rule:"format",message:s,help:"The name must start with a letter (a-z) or underscore (_). Subsequent characters can be letters, digits (0-9), or underscores (_).",severity:"error",key:e.key,kind:e.kind})}if(/^[A-Z]/.test(i)){let s=`The "${r}" entity name is not in snake case.`;t.push({field:"name",rule:"snake_case",message:s,help:"The name should be in snake case (lowercase letters and underscores).",severity:"info",key:e.key,kind:e.kind})}if(Ti.has(i.toUpperCase())){let s=`The "${r}" entity name is a reserved keyword.`;t.push({field:"name",rule:"reserved",message:s,help:"The name should not be a reserved keyword.",severity:"error",key:e.key,kind:e.kind})}return t}uniqueName(e){let t=[],r=e.info.name?.toLowerCase();if(!r)return t;for(let i of this.domain.listEntities())if(i.info.name?.toLowerCase()===r&&i.key!==e.key){let s=`The "${r}" entity name is already used in the data domain.`;t.push({field:"name",rule:"unique",message:s,help:"The name must be unique. This includes references to other data domains.",severity:"error",key:i.key,kind:i.kind})}for(let i of this.domain.listEntities({foreignOnly:!0}))if(i.info.name?.toLowerCase()===r&&i.key!==e.key){let s=`The "${r}" entity name is already used in the foreign data domain.`;t.push({field:"name",rule:"unique",message:s,help:"The name must be unique. This includes references to other data domains.",severity:"error",key:i.key,kind:i.kind,parent:i.domain.key})}return t}validateUserSemantics(e){let t=[],r=!1,i=!1;for(let s of e.withInheritedProperties())s.hasSemantic(w.Username)&&(r=!0),s.hasSemantic(w.Password)&&(i=!0);if((r||i)&&!e.hasSemantic(w.User)){let s=`The "${e.info.getLabel()}" entity has Username or Password properties but does not have the User taxonomy.`;t.push({field:"semantics",rule:"user_taxonomy_required",message:s,help:"Entities containing authentication credentials like usernames or passwords must be tagged with the User taxonomy.",severity:"error",key:e.key,kind:e.kind})}if(i&&!r){let s=`The "${e.info.getLabel()}" entity has Password credentials but lacks Username semantics.`;t.push({field:"semantics",rule:"username_required_for_password",message:s,help:"An entity with Password credentials must also define a Username property for authentication.",severity:"error",key:e.key,kind:e.kind})}return t}};function it(o,e){let t=o;for(let r of e){if(typeof t!="object"||t===null)return!1;if(t.properties&&typeof t.properties=="object"&&r in t.properties){t=t.properties[r];continue}return!(t.properties&&t.additionalProperties===!1||t.type&&t.type!=="object"&&t.type!=="any")}return!0}var Vi=class{domain;constructor(e){this.domain=e}validate(e){let t=[],r;if(typeof e=="string"?r=this.domain.findProperty(e):r=e,!r){let n=`The "${e}" property does not exist.`;return t.push({field:"*",rule:"exists",message:n,help:"The property must be defined in the domain.",key:e,kind:oe,severity:"error"}),t}let i=this.validateName(r);t.push(...i);let s=this.validatePrimaryKeyDefault(r);t.push(...s);let a=this.validateJsonIndex(r);return t.push(...a),t}validateName(e){return Di(e)}validatePrimaryKeyDefault(e){let t=[];if(e.primary){let r=e.schema?.defaultValue;if(r){if(r.type!=="function"||r.value!=="random"){let i=`The primary key property "${e.info.getLabel()}" has an invalid default value.`;t.push({field:"schema.defaultValue",rule:"primary_key_default",message:i,help:'Primary key properties can only have the "random" function as their default value.',severity:"error",key:e.key,kind:e.kind})}}else{let i=`The primary key property "${e.info.getLabel()}" has no default value.`;t.push({field:"schema.defaultValue",rule:"primary_key_no_default",message:i,help:'Without a default generator (e.g., the "random" function), the client application must generate and supply primary key values manually.',severity:"warning",key:e.key,kind:e.kind})}}return t}validateJsonIndex(e){let t=[],r=e.jsonIndex;if(!r)return t;if(e.type!=="json")return t.push({field:"jsonIndex",rule:"json_index_type_mismatch",message:`Property "${e.info.getLabel()}" has a JSON index config but its type is "${e.type}".`,help:'JSON index configuration can only be defined for properties of type "json".',severity:"error",key:e.key,kind:e.kind}),t;if(r.paths&&e.jsonSchema)for(let i of r.paths){if(!i.path){t.push({field:"jsonIndex.paths",rule:"json_index_path_empty",message:`Property "${e.info.getLabel()}" has an empty JSON path in its index config.`,help:"JSON path index configurations must specify a non-empty path.",severity:"error",key:e.key,kind:e.kind});continue}let s=i.path.split(".");it(e.jsonSchema,s)||t.push({field:"jsonIndex.paths",rule:"json_index_path_invalid",message:`JSON path "${i.path}" in index config for property "${e.info.getLabel()}" is not valid according to the property's JSON Schema.`,help:"All indexed JSON paths must exist in the property's JSON Schema definition.",severity:"error",key:e.key,kind:e.kind})}return t}};var Li=class{domain;constructor(e){this.domain=e}validate(){let e=[],t=this.validateUserEntity();e.push(...t);let r=this.validateTimestampSemantics();e.push(...r);let i=this.validateSoftDeleteSemantics();e.push(...i);let s=this.validatePropertySemanticsDataTypes();e.push(...s);let a=this.validateCurrencySemantics();e.push(...a);let n=this.validateGeospatialEndpoints();return e.push(...n),e}validateUserEntity(){let e=[],t=0;for(let r of this.domain.listEntities())if(r.hasSemantic(w.User)){t++;let i=!1,s=!1,a=!1;for(let n of r.withInheritedProperties())if(n.hasSemantic(w.Username)&&(i=!0),n.hasSemantic(w.Password)&&(s=!0),n.hasSemantic(w.UserRole)&&(a=!0),i&&s&&a)break;i||e.push({field:"semantics",rule:"has_username",message:"No username property on the User entity found.",help:'It is recommended to set the "username" property semantic for APIs supporting authentication.',severity:"warning",key:"user_semantic",kind:W}),s||e.push({field:"semantics",rule:"has_password",message:"No password property on the User entity found.",help:'It is recommended to set the "password" property semantic for APIs supporting authentication.',severity:"warning",key:"user_semantic",kind:W}),a||e.push({field:"semantics",rule:"has_user_role",message:"No role property on the User entity found.",help:'It is recommended to set the "User role" property semantic for APIs supporting authentication.',severity:"warning",key:"user_semantic",kind:W})}return t===0?e.push({field:"semantics",rule:"recommended",message:"No entity with User taxonomy found in the domain.",help:"It is recommended to have an entity with the User taxonomy for authentication purposes.",severity:"warning",key:"user_semantic",kind:W}):t>1&&e.push({field:"semantics",rule:"one_user",message:"There is more than one entity with User taxonomy in the domain.",help:"There can be only one user in the system. Remove the additional User taxonomies.",severity:"error",key:"user_semantic",kind:W}),e}validateTimestampSemantics(){let e=[];for(let t of this.domain.listEntities()){let r=!1,i=!1;for(let s of t.withInheritedProperties())s.hasSemantic(w.CreatedTimestamp)&&(r=!0),s.hasSemantic(w.UpdatedTimestamp)&&(i=!0);r||e.push({field:"semantics",rule:"recommended",message:`The "${t.info.getLabel()}" entity does not have a CreatedTimestamp taxonomy.`,help:"It is recommended to have a CreatedTimestamp property to track when the entity was created.",severity:"info",key:t.key,kind:t.kind}),i||e.push({field:"semantics",rule:"recommended",message:`The "${t.info.getLabel()}" entity does not have an UpdatedTimestamp taxonomy.`,help:"It is recommended to have an UpdatedTimestamp property to track when the entity was last modified.",severity:"info",key:t.key,kind:t.kind})}return e}validateSoftDeleteSemantics(){let e=[];for(let t of this.domain.listEntities()){let r=!1;for(let i of t.withInheritedProperties())if(i.hasSemantic(w.DeletedTimestamp)||i.hasSemantic(w.DeletedFlag)){r=!0;break}r||e.push({field:"semantics",rule:"recommended",message:`The "${t.info.getLabel()}" entity does not have soft delete taxonomy.`,help:"It is recommended to have either a DeletedTimestamp or DeletedFlag property for soft deletion.",severity:"info",key:t.key,kind:t.kind})}return e}validatePropertySemanticsDataTypes(){let e=[];for(let t of this.domain.listEntities())for(let r of t.withInheritedProperties())for(let i of r.semantics){let s=ht[i.id];pi(s)&&s.applicableDataTypes&&(s.applicableDataTypes.includes(r.type)||e.push({field:"semantics",rule:"type_mismatch",message:`The "${r.info.getLabel()}" property has the "${s.displayName}" semantic applied, but its type "${r.type}" is not compatible.`,help:`The "${s.displayName}" semantic can only be applied to properties of type(s): ${s.applicableDataTypes.join(", ")}.`,severity:"error",key:r.key,kind:r.kind,parent:t.key}))}return e}validateCurrencySemantics(){let e=[];for(let t of this.domain.listEntities())for(let r of t.withInheritedProperties()){let i=r.getSemantic(w.Currency);if(i){let s=i.config;r.type==="number"&&s?.allowedCurrencies&&s.allowedCurrencies.length>1&&e.push({field:"semantics",rule:"currency_number_multiple",message:`The "${r.info.getLabel()}" property has the Currency semantic and is a Number, but allows multiple currencies.`,help:"Number properties cannot accept currency codes. Please change the property type to String, or restrict allowedCurrencies to exactly one currency.",severity:"error",key:r.key,kind:r.kind,parent:t.key})}}return e}validateGeospatialEndpoints(){let e=[];for(let t of this.domain.listEntities()){let r=new Map;for(let i of t.withInheritedProperties()){let s=i.getSemantic(w.GeospatialCoordinates);if(s){let a=s.config??{},n=a.enableDistanceQueries!==!1,l=a.enableBoundingBoxQueries!==!1,c=a.enablePolygonQueries===!0,p=a.enableGeoClustering===!0;if(n||l||c||p){let u=(a.apiEndpointPrefix||"/nearby").trim().toLowerCase();r.has(u)||r.set(u,[]),r.get(u)?.push(i.info.getLabel())}}}for(let[i,s]of r.entries())s.length>1&&e.push({field:"semantics",rule:"geospatial_endpoint_collision",message:`The "${t.info.getLabel()}" entity has multiple geospatial properties (${s.join(", ")}) sharing the same API endpoint prefix "${i}".`,help:"Each geospatial property on the same entity must use a unique apiEndpointPrefix to avoid query endpoint collisions (e.g., /nearby, /nearby-office).",severity:"error",key:t.key,kind:t.kind})}return e}};var lr=class{domain;report=[];#e=0;#t=0;#i=0;#r=!1;get infoCount(){return this.#r||this.computeIssueCounters(),this.#e}get warningCount(){return this.#r||this.computeIssueCounters(),this.#t}get errorCount(){return this.#r||this.computeIssueCounters(),this.#i}constructor(e){this.domain=e}validate(){this.#r=!1,this.report=[];let e=new Ui(this.domain),t=new Vi(this.domain),r=new zi(this.domain),i=new Li(this.domain),s=!1;for(let n of this.domain.listEntities()){if(n.domain.key!==this.domain.key)continue;s=!0;let l=e.validate(n);this.report.push(...l);for(let c of n.properties){if(c.domain.key!==this.domain.key)continue;let p=t.validate(c);this.report.push(...p)}for(let c of n.associations){if(c.domain.key!==this.domain.key)continue;let p=r.validate(c);this.report.push(...p)}}if(!s)return this.report;let a=i.validate();return this.report.push(...a),this.report}computeIssueCounters(){this.#e=this.report.filter(e=>e.severity==="info").length,this.#t=this.report.filter(e=>e.severity==="warning").length,this.#i=this.report.filter(e=>e.severity==="error").length,this.#r=!0}};var aa=[],na=[],qn={},zr={},Ur={};function Bn(o){return typeof o=="string"?new RegExp("^"+o+"$","i"):o}function Mi(o,e){return o===e?e:o===o.toLowerCase()?e.toLowerCase():o===o.toUpperCase()?e.toUpperCase():o[0]===o[0].toUpperCase()?e.charAt(0).toUpperCase()+e.slice(1).toLowerCase():e.toLowerCase()}function Xc(o,e){return o.replace(/\$(\d{1,2})/g,function(t,r){return e[r]||""})}function Yc(o,e){return o.replace(e[0],function(t,r){let i=Xc(e[1],arguments);return Mi(t===""?o[r-1]:t,i)})}function Gn(o,e,t){if(!o.length||Object.hasOwn(qn,o))return e;let r=t.length;for(;r--;){let i=t[r];if(i[0].test(e))return Yc(e,i)}return e}function Hn(o,e,t){return function(r){let i=r.toLowerCase();return Object.prototype.hasOwnProperty.call(e,i)?Mi(r,i):Object.prototype.hasOwnProperty.call(o,i)?Mi(r,o[i]):Gn(i,r,t)}}function Wn(o,e,t){return function(r){let i=r.toLowerCase();return Object.prototype.hasOwnProperty.call(e,i)?!0:Object.prototype.hasOwnProperty.call(o,i)?!1:Gn(i,i,t)===i}}var we=function(o,e,t){let r=e===1?we.singular(o):we.plural(o);return(t?e+" ":"")+r};we.plural=Hn(Ur,zr,aa);we.isPlural=Wn(Ur,zr,aa);we.singular=Hn(zr,Ur,na);we.isSingular=Wn(zr,Ur,na);we.addPluralRule=function(o,e){aa.push([Bn(o),e])};we.addSingularRule=function(o,e){na.push([Bn(o),e])};we.addUncountableRule=function(o){if(typeof o=="string"){qn[o.toLowerCase()]=!0;return}we.addPluralRule(o,"$0"),we.addSingularRule(o,"$0")};we.addIrregularRule=function(o,e){e=e.toLowerCase(),o=o.toLowerCase(),Ur[o]=e,zr[e]=o};[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["my","our"],["its","their"],["his","their"],["her","their"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"],["canvas","canvases"]].forEach(function(o){we.addIrregularRule(o[0],o[1])});[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach(function(o){we.addPluralRule(o[0],o[1])});[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/(dg|ss|ois|lk|ok|wn|mb|th|ch|ec|oal|is|ck|ix|sser|ts|wb)ies$/i,"$1ie"],[/\b(l|(?:neck|cross|hog|aun)?t|coll|faer|food|gen|goon|group|hipp|junk|vegg|(?:pork)?p|charl|calor|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach(function(o){we.addSingularRule(o[0],o[1])});["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(we.addUncountableRule);var Fi=we;function Oe(o,e){let t=o.domain||e;return t?`${t}:${o.key}`:o.key}function cr(o){if(!o)throw new g("Cannot generate parameter name from an empty string.",{code:"E_INVALID_PARAM_NAME",help:"The entity name used for path parameter generation is empty."});let e=o.replace(/([a-z])([A-Z])/g,"$1 $2");e=e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2");let r=e.replace(/[^a-zA-Z0-9]/g," ").split(/\s+/).filter(Boolean);if(r.length===0)throw new g(`Cannot generate a valid parameter name from "${o}".`,{code:"E_INVALID_PARAM_NAME",help:"The entity name must contain alphanumeric characters to generate a path parameter."});let s=r.map((a,n)=>{let l=a.toLowerCase();return n===0?l:l.charAt(0).toUpperCase()+l.slice(1)}).join("");return/^[0-9]/.test(s)&&(s="_"+s),`${s}Id`}function Mt(o){let e=o.trim(),t=e.startsWith("/")?e:`/${e}`;return t==="/"?"/":t.replace(/\/+$/,"")}function oa(o,e){let t=o.endsWith("/")?o.slice(0,-1):o,r=e.startsWith("/")?e:`/${e}`;return`${t}${r}`}var Vr=class o{description;key;rate;interval;burst;constructor(e={}){this.description=e.description,this.key=o.isRateLimitRuleKey(e.key)?structuredClone(e.key):void 0,this.rate=typeof e.rate=="number"?e.rate:void 0,this.interval=o.isRateLimitRuleInterval(e.interval)?e.interval:void 0,this.burst=typeof e.burst=="number"?e.burst:void 0}toJSON(){let e={};return this.description&&(e.description=this.description),o.isRateLimitRuleKey(this.key)&&(e.key=structuredClone(this.key)),typeof this.rate=="number"&&(e.rate=this.rate),o.isRateLimitRuleInterval(this.interval)&&(e.interval=this.interval),typeof this.burst=="number"&&(e.burst=this.burst),e}static isRateLimitRuleInterval(e){return typeof e!="string"?!1:["second","minute","hour","day"].includes(e)}static isRateLimitRuleKey(e){if(typeof e!="object"||e===null)return!1;let t=e;return"type"in t&&(t.type==="ip"||t.type==="userId"||t.type==="role")}};var gt=class{rules;constructor(e={}){this.rules=e.rules?.map(t=>new Vr(t))||[]}toJSON(){return{rules:this.rules.map(e=>e.toJSON())}}};var T;(function(o){o.PRE_FETCH="pre-fetch",o.FETCH="fetch",o.POST_FETCH="post-fetch"})(T||(T={}));var ye=class{type;parent;inheritable=!0;mandatory;#e;get metadata(){if(!this.#e)throw new Error("Metadata not set for access rule "+this.type);return this.#e}constructor(e,t,r={}){this.parent=e,this.type=r.type??"",this.mandatory=r.mandatory??!1,this.#e={...t,...r.metadata}}toJSON(){let e={type:this.type};return this.mandatory&&(e.mandatory=!0),this.#e&&(e.metadata=this.#e),e}};var Ki=class extends ye{type;constructor(e,t={}){super(e,{list:T.PRE_FETCH,create:T.PRE_FETCH,search:T.PRE_FETCH,read:T.PRE_FETCH,update:T.PRE_FETCH,delete:T.PRE_FETCH},t),this.type="allowAuthenticated"}};var Ji=class extends ye{type;constructor(e,t={}){super(e,{list:T.PRE_FETCH,create:T.PRE_FETCH,search:T.PRE_FETCH,read:T.PRE_FETCH,update:T.PRE_FETCH,delete:T.PRE_FETCH},t),this.type="allowPublic"}};var qi=class extends ye{type;domains;constructor(e,t={}){super(e,{list:T.PRE_FETCH,create:T.PRE_FETCH,search:T.PRE_FETCH,read:T.PRE_FETCH,update:T.PRE_FETCH,delete:T.PRE_FETCH},t),this.type="matchEmailDomain",this.domains=t.domains?[...t.domains]:[]}toJSON(){return{...super.toJSON(),domains:structuredClone(this.domains)}}};var Bi=class extends ye{type;inheritable=!1;property;target;constructor(e,t={}){super(e,{list:T.FETCH,search:T.FETCH,create:T.POST_FETCH,read:T.POST_FETCH,update:T.POST_FETCH,delete:T.POST_FETCH},t),this.type="matchResourceOwner",this.property=t.property,this.target=t.target??"property"}toJSON(){let e={...super.toJSON(),target:this.target};return this.property&&(e.property=this.property),e}};var Gi=class extends ye{type;inheritable=!1;attribute;value;operator;constructor(e,t={}){super(e,{list:T.FETCH,search:T.FETCH,read:T.POST_FETCH,update:T.POST_FETCH,delete:T.POST_FETCH},t),this.type="matchResourceAttribute",this.attribute=t.attribute??"",this.value=t.value??"",this.operator=t.operator??"equal"}toJSON(){let e={...super.toJSON(),attribute:this.attribute,value:this.value};return this.operator&&(e.operator=this.operator),e}};var Hi=class extends ye{type;inheritable=!1;allowedStatuses;deniedStatuses;constructor(e,t={}){super(e,{list:T.FETCH,search:T.FETCH,read:T.POST_FETCH,update:T.POST_FETCH,delete:T.POST_FETCH},t),this.type="lifecycleStatus",this.allowedStatuses=t.allowedStatuses?[...t.allowedStatuses]:[],this.deniedStatuses=t.deniedStatuses?[...t.deniedStatuses]:[]}toJSON(){let e={...super.toJSON()};return this.allowedStatuses.length>0&&(e.allowedStatuses=structuredClone(this.allowedStatuses)),this.deniedStatuses.length>0&&(e.deniedStatuses=structuredClone(this.deniedStatuses)),e}};var Wi=class extends ye{type;property;value;constructor(e,t={}){super(e,{list:T.PRE_FETCH,create:T.PRE_FETCH,search:T.PRE_FETCH,read:T.PRE_FETCH,update:T.PRE_FETCH,delete:T.PRE_FETCH},t),this.type="matchUserProperty",this.property=t.property??"",this.value=t.value??""}toJSON(){return{...super.toJSON(),property:this.property,value:this.value}}};var Xi=class extends ye{type;role;constructor(e,t={}){super(e,{list:T.PRE_FETCH,create:T.PRE_FETCH,search:T.PRE_FETCH,read:T.PRE_FETCH,update:T.PRE_FETCH,delete:T.PRE_FETCH},t),this.type="matchUserRole",this.role=t.role?[...t.role]:[]}toJSON(){return{...super.toJSON(),role:structuredClone(this.role)}}};function dr(o,e){switch(e.type){case"allowAuthenticated":return new Ki(o,e);case"allowPublic":return new Ji(o,e);case"matchEmailDomain":return new qi(o,e);case"matchResourceOwner":return new Bi(o,e);case"matchResourceAttribute":return new Gi(o,e);case"lifecycleStatus":return new Hi(o,e);case"matchUserProperty":return new Wi(o,e);case"matchUserRole":return new Xi(o,e);default:throw new g("Unknown access rule kind",{code:"E_UNKNOWN_ACCESS_RULE_KIND",status:422})}}var _e=class{kind;accessRules;rateLimiting;projection;parent;constructor(e,t={}){this.parent=e,this.kind=t.kind||"",this.accessRules=t.accessRules?t.accessRules.map(r=>dr(this,r)):[],this.rateLimiting=t.rateLimiting?new gt(t.rateLimiting):void 0,t.projection&&(this.projection=structuredClone(t.projection))}toJSON(){let e={kind:this.kind};return this.accessRules.length&&(e.accessRules=this.accessRules.map(t=>t.toJSON())),this.rateLimiting&&(e.rateLimiting=this.rateLimiting.toJSON()),this.projection&&(e.projection=structuredClone(this.projection)),e}getAllRules(){return[...this.parent.getAllRules(),...this.accessRules]}getAllRateLimiters(){let e=this.parent.getAllRateLimiters();return this.rateLimiting&&e.push(this.rateLimiting),e}};var Lr=class extends _e{kind;constructor(e,t={}){super(e,t),this.kind="create"}toJSON(){return{...super.toJSON(),kind:"create"}}static isCreateAction(e){return e.kind==="create"}static isCreateActionSchema(e){return e.kind==="create"}};var Ft=class extends _e{kind;strategy;retentionPeriod;constructor(e,t={}){super(e,t),this.kind="delete",this.strategy=t.strategy||"soft",this.retentionPeriod=t.retentionPeriod??30}toJSON(){return{...super.toJSON(),kind:"delete",strategy:this.strategy,retentionPeriod:this.retentionPeriod}}static isDeleteAction(e){return e.kind==="delete"}static isDeleteActionSchema(e){return e.kind==="delete"}};var yt=class extends _e{kind;cacheTtl;constructor(e,t={}){super(e,t),this.kind="list",this.cacheTtl=t.cacheTtl}toJSON(){let e={...super.toJSON(),kind:"list"};return this.cacheTtl!==void 0&&(e.cacheTtl=this.cacheTtl),e}static isListAction(e){return e.kind==="list"}static isListActionSchema(e){return e.kind==="list"}};var Kt=class extends _e{kind;constructor(e,t={}){super(e,t),this.kind="read"}toJSON(){return{...super.toJSON(),kind:"read"}}static isReadAction(e){return e.kind==="read"}static isReadActionSchema(e){return e.kind==="read"}};var bt=class extends _e{kind;maxAstDepth;constructor(e,t={}){super(e,t),this.kind="search",this.maxAstDepth=t.maxAstDepth}toJSON(){let e={...super.toJSON(),kind:"search"};return this.maxAstDepth!==void 0&&(e.maxAstDepth=this.maxAstDepth),e}static isSearchActionSchema(e){return e.kind==="search"}static isSearchAction(e){return e.kind==="search"}};var Jt=class extends _e{kind;allowedMethods;constructor(e,t={}){super(e,t),this.kind="update",this.allowedMethods=t.allowedMethods?[...t.allowedMethods]:["PATCH"]}toJSON(){return{...super.toJSON(),kind:"update",allowedMethods:structuredClone(this.allowedMethods)}}static isUpdateAction(e){return e.kind==="update"}static isUpdateActionSchema(e){return e.kind==="update"}};function la(o,e){switch(e.kind){case"list":return new yt(o,e);case"read":return new Kt(o,e);case"create":return new Lr(o,e);case"update":return new Jt(o,e);case"delete":return new Ft(o,e);case"search":return new bt(o,e);default:throw new g("Unknown action kind",{code:"E_UNKNOWN_ACTION_KIND",status:422})}}function Xn(o,e){switch(e){case"list":return new yt(o);case"read":return new Kt(o);case"create":return new Lr(o);case"update":return new Jt(o);case"delete":return new Ft(o);case"search":return new bt(o);default:throw new g("Unknown action kind",{code:"E_UNKNOWN_ACTION_KIND",status:422})}}var qt=class o{kind;key;entity;hasCollection;collectionPath;resourcePath;isRoot;parent;exposeOptions;actions;accessRules;rateLimiting;paginationContract;truncated;api;static createSchema(e={}){let{key:t=M(),entity:r={key:""},collectionPath:i,resourcePath:s="/",hasCollection:a=!0,isRoot:n,parent:l,exposeOptions:c,actions:p=[],accessRules:u,rateLimiting:h,truncated:m,paginationContract:f}=e,k={kind:_t,key:t,entity:{...r},hasCollection:a,resourcePath:s,actions:p.map(b=>({...b}))};return i!==void 0&&(k.collectionPath=i),n!==void 0&&(k.isRoot=n),l!==void 0&&(k.parent={...l}),c!==void 0&&(k.exposeOptions={...c}),Array.isArray(u)&&(k.accessRules=u.map(b=>({...b}))),h!==void 0&&(k.rateLimiting={...h}),m!==void 0&&(k.truncated=m),f!==void 0&&(k.paginationContract=structuredClone(f)),k}constructor(e,t){this.api=e;let r=o.createSchema(t);this.kind=r.kind,this.key=r.key,this.entity=r.entity,this.hasCollection=r.hasCollection,this.collectionPath=r.collectionPath,this.resourcePath=r.resourcePath,this.isRoot=r.isRoot,this.parent=r.parent,this.exposeOptions=r.exposeOptions,this.actions=r.actions?r.actions.map(i=>la(this,i)):[],this.accessRules=r.accessRules?r.accessRules.map(i=>dr(this,i)):[],r.rateLimiting&&(this.rateLimiting=new gt(r.rateLimiting)),this.truncated=r.truncated,r.paginationContract&&(this.paginationContract=structuredClone(r.paginationContract))}toJSON(){let e={kind:this.kind,key:this.key,entity:{...this.entity},resourcePath:this.resourcePath,actions:this.actions.map(t=>t.toJSON()),hasCollection:this.hasCollection};return this.collectionPath!==void 0&&(e.collectionPath=this.collectionPath),this.isRoot!==void 0&&(e.isRoot=this.isRoot),this.parent!==void 0&&(e.parent={...this.parent}),this.exposeOptions!==void 0&&(e.exposeOptions={...this.exposeOptions}),Array.isArray(this.accessRules)&&this.accessRules.length>0&&(e.accessRules=this.accessRules.map(t=>t.toJSON())),this.rateLimiting!==void 0&&(e.rateLimiting=this.rateLimiting.toJSON()),this.truncated!==void 0&&(e.truncated=this.truncated),this.paginationContract&&(e.paginationContract=structuredClone(this.paginationContract)),e}setCollectionPath(e){if(!this.hasCollection)throw new g("Cannot set collection path on an exposure that does not have a collection",{code:"E_PATH_MISSING",help:"The exposed entity you are trying to set a collection path for does not have a collection."});let r=Mt(e).split("/").filter(Boolean);if(r.length!==1)throw new g(`Collection path must contain exactly one segment. Received: "${e}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set path must have a single path segment (e.g., `/products`)"});let i=`/${r[0]}`;if(this.isRoot&&this.api.findCollectionPathCollision(i,this.key))throw new g(`Collection path "${i}" is already in use by another root entity.`,{code:"E_PATH_INUSE",help:"The set path is already in use by another root entity."});let s="";if(this.resourcePath&&this.resourcePath!=="/"){let l=this.resourcePath.split("/").filter(Boolean)[1];l&&/^\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(l)&&(s=l)}if(!s){let n=this.api.domain?.findEntity(this.entity.key,this.entity.domain);if(!n||!n.info.name)throw new g("Cannot generate a semantic parameter name because the associated entity or its name is missing.",{code:"E_ENTITY_NOT_FOUND",help:"Ensure the exposed entity points to a valid domain entity with a defined name."});s=`{${cr(n.info.name)}}`}let a=`${i}/${s}`;this.#i(a),this.collectionPath=i,this.resourcePath=a}setResourcePath(e){let t=Mt(e),r=t.split("/").filter(Boolean);if(this.hasCollection){if(!this.collectionPath)throw new g("Cannot set resource path: missing collection path for this exposure",{code:"E_PATH_MISSING",help:"Set the collection path on the exposed entity first."});let i=this.collectionPath.split("/").filter(Boolean);if(i.length!==1)throw new g(`Invalid stored collection path "${this.collectionPath}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set collection path must have a single path segment (e.g., `/products`)"});if(r.length!==2)throw new g(`Resource path must be exactly two segments (collection + parameter). Received: "${t}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set resource path must have exactly two segments (collection + parameter)."});let[s,a]=r;if(s!==i[0])throw new g(`Resource path must start with the collection segment "${i[0]}". Received: "${s}"`,{code:"E_PATH_MISMATCH",help:"Set the resource path to the same value as the collection path + the parameter value."});if(!/^\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(a))throw new g(`The second segment must be a parameter in braces, e.g. {id}. Received: "${a}"`,{code:"E_PARAMETER_INVALID",help:"Use the braces to surround the parameter name, e.g., {productId}."});this.resourcePath!==t&&(this.#i(`/${s}/${a}`),this.resourcePath=`/${s}/${a}`);return}if(r.length!==1)throw new g(`Resource path must contain exactly one segment when no collection is present. Received: "${t}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set resource path must have exactly one segment."});if(this.isRoot&&this.api.findResourcePathCollision(t,this.key))throw new g(`Resource path "${t}" is already in use by another root entity.`,{code:"E_PATH_INUSE",help:"The set path is already in use by another root entity."});this.resourcePath!==t&&(this.#i(`/${r[0]}`),this.resourcePath=`/${r[0]}`)}#e(e){let r=[...e.join("/").matchAll(/\{([^}]+)\}/g)].map(s=>s[1]),i=new Set;for(let s of r){if(i.has(s))throw new g(`Duplicate path parameter "{${s}}" detected in branch hierarchy.`,{code:"E_PATH_PARAM_COLLISION",help:"Change the parameter name in either this resource or its ancestor to ensure unique parameter names."});i.add(s)}}#t(e,t){for(let r of this.api.exposes.values())if(r.parent?.key===e){let i=[...t,r.resourcePath];this.#e(i),this.#t(r.key,i)}}#i(e){let t=[e],r=this.parent?.key;for(;r;){let i=this.api.exposes.get(r);if(!i)break;t.unshift(i.resourcePath),r=i.parent?.key}this.#e(t),this.#t(this.key,t)}getAbsoluteResourcePath(){let e=Mt(this.resourcePath),t=this.parent?.key;for(;t;){let r=this.api.exposes.get(t);if(!r)break;let i=Mt(r.resourcePath);e=oa(i,e),t=r.parent?.key}return e}getAbsoluteCollectionPath(){if(!this.hasCollection||!this.collectionPath)return;let e=Mt(this.collectionPath),t=this.parent?.key;for(;t;){let r=this.api.exposes.get(t);if(!r)break;let i=Mt(r.resourcePath);e=oa(i,e),t=r.parent?.key}return e}getAllRules(){let e=[];this.api.accessRules.forEach(r=>{r.inheritable&&e.push(r)});let t=this;for(;t;)t.accessRules&&(t===this?e.push(...t.accessRules):e.push(...t.accessRules.filter(r=>r.inheritable))),t=t.parent?this.api.exposes.get(t.parent.key):void 0;return e}getAllRateLimiters(){let e=[];this.api.rateLimiting&&e.push(this.api.rateLimiting);let t=this;for(;t;)t.rateLimiting&&e.push(t.rateLimiting),t=t.parent?this.api.exposes.get(t.parent.key):void 0;return e}getAllRateLimiterRules(){let e=[];this.api.rateLimiting&&e.push(...this.api.rateLimiting.rules);let t=this;for(;t;)t.rateLimiting&&e.push(...t.rateLimiting.rules),t=t.parent?this.api.exposes.get(t.parent.key):void 0;return e}addAction(e){if(this.actions.some(r=>r.kind===e.kind))throw new g(`Action of kind "${e.kind}" already exists for this exposure`,{code:"E_ACTION_USED",help:"There's no need to add an API action again."});let t=la(this,e);return this.actions.push(t),t}addActionFromKind(e){if(this.actions.some(r=>r.kind===e))throw new g(`Action of kind "${e}" already exists for this exposure`,{code:"E_ACTION_USED",help:"There's no need to add an API action again."});let t=Xn(this,e);return this.actions.push(t),t}createPaginationContract(){let e=this.api.domain?.findEntity(this.entity.key,this.entity.domain);if(!e)throw new g(`Entity "${this.entity.key}" not found"`,{code:"E_ENTITY_NOT_FOUND",help:"The set entity does not exist."});this.paginationContract?(this.paginationContract.filterableFields=[],this.paginationContract.searchableFields=[],this.paginationContract.sortableFields=[]):this.paginationContract={filterableFields:[],searchableFields:[],sortableFields:[]};for(let t of e.properties)t.index&&(this.paginationContract.filterableFields.push(t.key),this.paginationContract.sortableFields.push(t.key)),t.search&&this.paginationContract.searchableFields.push(t.key)}};var Mr=(o={})=>{let e={...Yi,...o};return o.metadata&&(e.metadata={...o.metadata}),{id:w.Currency,config:e}},Yi={storageFormat:"decimal",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!1,validateCurrencyCode:!0},F_={USD_DECIMAL:Mr({storageFormat:"decimal",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!1}),USD_CENTS:Mr({storageFormat:"integer_cents",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!1}),MULTI_CURRENCY:Mr({storageFormat:"complex_object",allowedCurrencies:["USD","EUR","GBP","JPY","CAD"],decimalPlaces:2,allowNegative:!1}),WITH_NEGATIVES:Mr({storageFormat:"decimal",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!0}),HIGH_PRECISION:Mr({storageFormat:"decimal",defaultCurrency:"BTC",decimalPlaces:8,allowNegative:!1})};var Yn={requireVerification:!0,allowSubaddressing:!0,allowInternational:!0};var Zn={requireCountryCode:!0,format:"international",allowExtension:!1,requireVerification:!1,verificationMethod:"sms"};function Zc(o){let e=o.type,r=o.readWebBinding()?.format,i=o.multiple,s;if(e==="string"){let a=o.schema?.maximum;if(o.schema?.defaultValue?.type==="function"&&o.schema.defaultValue.value==="random"){let n=o.schema.defaultValue.config;if(n){let l=0,c=!1;n.isFixed?n.length&&(l=n.length,c=!0):a&&(l=a,c=!0),c&&(n.prefix&&(l+=n.prefix.length),n.suffix&&(l+=n.suffix.length),(!a||l>a)&&(a=l))}}s=a?`VARCHAR(${a})`:"TEXT"}else if(e==="number"){let a=o.schema?.defaultValue?.type==="function"&&o.schema.defaultValue.value==="incremental";r==="int32"?s="INTEGER":r==="int64"?s="BIGINT":r==="float"||r==="double"?s="DOUBLE PRECISION":a?s="BIGINT":s="NUMERIC"}else e==="boolean"?s="BOOLEAN":e==="date"?s="DATE":e==="datetime"?s="TIMESTAMPTZ":e==="time"?s="TIME":e==="binary"||e==="json"?s="JSONB":s="TEXT";return i?`${s}[]`:s}function Qn(o){let e=o.getExposedName();if(!e)throw new g("Property missing a name definition.",{code:"E_PROPERTY_NAME_MISSING",status:500});let t=null;if(o.schema?.defaultValue){let u=o.schema.defaultValue.type,h=String(o.schema.defaultValue.value);if(u==="function"){let m=o.type;if(m==="string"){if(h==="uuid-v4"&&o.primary)throw new g("Function 'uuid-v4' cannot be used as a default for a primary key string.",{code:"E_INVALID_DEFAULT_FUNCTION",status:400});if(h!=="random"&&h!=="uuid-v4")throw new g(`Function '${h}' is not supported for string properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}else if(m==="number"){if(h!=="incremental")throw new g(`Function '${h}' is not supported for number properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}else if(["date","time","datetime"].includes(m)){if(h!=="now")throw new g(`Function '${h}' is not supported for ${m} properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}else throw new g(`Functions are not supported as default values for ${m} properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}t={type:u,value:h}}let r=!!o.primary,i=!o.required&&!r,s=!!o.unique;!t&&o.hasSemantic(w.DeletedFlag)&&(t={type:"literal",value:"false"});let a=o.getSemantic(w.Currency);if(a){let u=a.config??{},h=u.storageFormat||Yi.storageFormat;if(h==="complex_object")return[{name:e,dataType:"JSONB",isNullable:i,isPrimary:r,isUnique:s,defaultRule:null}];if(h==="decimal"||h==="integer_cents"){let m=u.decimalPlaces??Yi.decimalPlaces,f=h==="decimal"?`NUMERIC(19, ${m})`:"BIGINT";return[{name:`${e}_amount`,dataType:f,isNullable:i,isPrimary:r,isUnique:s,defaultRule:t},{name:`${e}_currency`,dataType:"CHAR(3)",isNullable:i,isPrimary:!1,isUnique:!1,defaultRule:{type:"literal",value:u.defaultCurrency||"USD"}}]}}let n=[{name:e,dataType:Zc(o),isNullable:i,isPrimary:r,isUnique:s,defaultRule:t}],l=!1,c=o.getSemantic(w.Email);c&&(l=(c.config??Yn).requireVerification!==!1);let p=o.getSemantic(w.Phone);return p&&(l=(p.config??Zn).requireVerification===!0),l&&n.push({name:`_${e}_verified`,dataType:"BOOLEAN",isNullable:!1,isPrimary:!1,isUnique:!1,defaultRule:{type:"literal",value:"false"}},{name:`_${e}_token`,dataType:"VARCHAR(255)",isNullable:!0,isPrimary:!1,isUnique:!1,defaultRule:null},{name:`_${e}_expires_at`,dataType:"TIMESTAMPTZ",isNullable:!0,isPrimary:!1,isUnique:!1,defaultRule:null}),n}function Qc(o){let e=o.toUpperCase().split("(")[0];return e==="CHARACTER VARYING"&&(e="VARCHAR"),e==="CHARACTER"&&(e="CHAR"),e}function ed(o,e){let t=e.toUpperCase(),r=Qc(o.dataType),i=t.split("(")[0];if(r===i){if(r==="VARCHAR"){let a=o.dataType.match(/\((\d+)\)/),n=a?Number.parseInt(a[1],10):null,l=t.match(/\((\d+)\)/),c=l?Number.parseInt(l[1],10):null;return!!(!c||n&&c>=n)}return!0}return{INTEGER:["BIGINT","NUMERIC","VARCHAR","TEXT"],BIGINT:["NUMERIC","VARCHAR","TEXT"],DATE:["TIMESTAMPTZ"],BOOLEAN:["VARCHAR","TEXT"]}[r]?.includes(i)||!1}function td(o,e,t,r,i){if(!e.actions)return;let s=e.entity.key,a=t.get(s),n=r.findEntity(s);if(!a)return;let l=Array.from(a.withInheritedProperties()),c=new Set(l.map(h=>h.key)),p=Array.from(a.withInheritedAssociations()),u=new Set(p.map(h=>h.key));for(let h of e.actions)if(!(!h.projection||!Array.isArray(h.projection.fields)))for(let m of h.projection.fields)if(m.type==="association"){let f=m.key.split("."),k=f[0];if(u.has(k)){let b=p.find(y=>y.key===k);f.length>1&&(!b||b.schema?.embedded!==!0)&&i.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"association",fieldKey:m.key,reason:`Projected association '${m.key}' is invalid because association '${k}' is not embedded.`})}else{let b=!1,y=`Projected association '${m.key}' no longer exists on entity '${a.info.getLabel()}'.`;if(n){let _=Array.from(n.withInheritedAssociations()).find(x=>x.key===k);if(_){let x;try{x=_.getExposedName()}catch{}if(x){let S=p.find(N=>{try{return N.getExposedName()===x}catch{return!1}});S&&(f.length>1&&S.schema?.embedded!==!0?y=`Projected association '${m.key}' is invalid because remapped association '${S.key}' is not embedded.`:b=!0)}}}b||i.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"association",fieldKey:m.key,reason:y})}}else{let f=m.key.split("."),k=f[0];if(c.has(k)){let b=l.find(y=>y.key===k);f.length>1&&(!b||b.type!=="json"?i.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"property",fieldKey:m.key,reason:`Projected property '${m.key}' is invalid because root property '${k}' is not of type 'json'.`}):b.jsonSchema&&(it(b.jsonSchema,f.slice(1))||i.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"property",fieldKey:m.key,reason:`Projected property '${m.key}' is invalid according to the JSON Schema of '${k}'.`})))}else{let b=!1;if(n){let y=Array.from(n.withInheritedProperties()).find(_=>_.key===k);if(y){let _;try{_=y.getExposedName()}catch{}if(_){let x=l.find(S=>{try{return S.getExposedName()===_}catch{return!1}});x&&(f.length===1||x.type==="json")&&(b=!0,f.length>1&&x.jsonSchema&&(it(x.jsonSchema,f.slice(1))||(b=!1)))}}}b||i.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"property",fieldKey:m.key,reason:`Projected property '${m.key}' no longer exists on entity '${a.info.getLabel()}'.`})}}}function rd(o,e,t,r,i){if(!e.paginationContract)return;let s=e.paginationContract,a=e.entity.key,n=t.get(a);if(!n)return;let l=Array.from(n.withInheritedProperties()),c=new Set(l.map(h=>h.key)),p=r.findEntity(a),u=(h,m)=>{if(!(!h||!Array.isArray(h)))for(let f of h){let k=f.split("."),b=k[0];if(c.has(b)){let y=l.find(_=>_.key===b);k.length>1&&(!y||y.type!=="json"?i.paginationFieldsWithMismatches.push({exposureKey:o,fieldGroup:m,fieldKey:f,reason:`The ${m} field '${f}' is invalid because root property '${b}' is not of type 'json'.`}):y.jsonSchema&&(it(y.jsonSchema,k.slice(1))||i.paginationFieldsWithMismatches.push({exposureKey:o,fieldGroup:m,fieldKey:f,reason:`The ${m} field '${f}' is invalid according to the JSON Schema of '${b}'.`})))}else{let y=!1;if(p){let _=Array.from(p.withInheritedProperties()).find(x=>x.key===b);if(_){let x;try{x=_.getExposedName()}catch{}if(x){let S=l.find(N=>{try{return N.getExposedName()===x}catch{return!1}});S&&(k.length===1||S.type==="json")&&(y=!0,k.length>1&&S.jsonSchema&&(it(S.jsonSchema,k.slice(1))||(y=!1)))}}}y||i.paginationFieldsWithMismatches.push({exposureKey:o,fieldGroup:m,fieldKey:f,reason:`The ${m} field '${f}' no longer exists on entity '${n.info.getLabel()}'.`})}}};u(s.filterableFields,"filterable"),u(s.sortableFields,"sortable"),u(s.searchableFields,"searchable")}function eo(o,e){let t=o.domain,r={hasUpdate:!1,canProceed:!0,breakingChanges:[],exposedEntitiesToRemove:[],subEndpointsToRemove:[],userModelRemapping:[],sessionPropertiesToRemove:[],accessRulesWithMismatches:[],paginationFieldsWithMismatches:[],actionProjectionsWithMismatches:[]};if(!t)return r.hasUpdate=!0,r;if(t.key===e.key&&t.info.version===e.info.version)return r;r.hasUpdate=!0;let i=new Map;for(let b of t.listEntities())i.set(b.key,b);let s=new Map;for(let b of e.listEntities())s.set(b.key,b);let a=new Set;for(let[b,y]of o.exposes.entries()){let _=i.has(y.entity.key),x=s.get(y.entity.key);if(!x){let S=i.get(y.entity.key)?.info.getLabel()||y.entity.key;r.exposedEntitiesToRemove.push({key:b,entityKey:y.entity.key,name:y.entity.key,reason:`Entity ${S} no longer exists in the domain.`}),a.add(b);continue}if(_){let S=i.get(y.entity.key),N=new Map;for(let z of S.withInheritedProperties())try{let C=z.getExposedName();C&&N.set(C,z)}catch{}let $=new Map;for(let z of x.withInheritedProperties())try{let C=z.getExposedName();C&&$.set(C,z)}catch{}for(let[z,C]of N.entries()){let q=$.get(z);if(!q)continue;let J=Qn(C),ne=Qn(q);for(let Y of J){let le=ne.find(at=>at.name===Y.name);if(!le)continue;if(Y.isPrimary&&!le.isPrimary){r.canProceed=!1;let at=S.info.getLabel(),nt=`Cannot remove Primary Key constraint from column '${Y.name}' in entity '${at}'.`;r.breakingChanges.push({type:"primary_key_removed",entityKey:S.key,propertyKey:C.key,reason:nt})}if(!ed(Y,le.dataType)){r.canProceed=!1;let at=S.info.getLabel(),nt=`Cannot safely cast column '${Y.name}' in entity '${at}' from ${Y.dataType} to ${le.dataType}.`;r.breakingChanges.push({type:"type_change_unsafe",entityKey:S.key,propertyKey:C.key,reason:nt})}let Se=Y.isNullable&&!le.isNullable,rs=!!le.defaultRule;if(Se&&!rs){r.canProceed=!1;let at=S.info.getLabel(),nt=`Cannot make column '${Y.name}' in entity '${at}' required without providing a default value to backfill existing records.`;r.breakingChanges.push({type:"column_not_null_missing_default",entityKey:S.key,propertyKey:C.key,reason:nt})}}}}}let n=!0;for(;n;){n=!1;for(let[b,y]of o.exposes.entries())if(!a.has(b)&&y.parent){let _=o.exposes.get(y.parent.key),x=i.get(_.entity.key),S=x?.info.getLabel()||_.entity.key;if(a.has(y.parent.key)){r.subEndpointsToRemove.push({key:b,parentKey:y.parent.key,associationKey:y.parent.association.key,name:y.entity.key,reason:`Parent exposure for entity ${S} is scheduled for removal.`}),a.add(b),n=!0;continue}let N=s.get(_.entity.key);if(!N){r.subEndpointsToRemove.push({key:b,parentKey:y.parent.key,associationKey:y.parent.association.key,name:y.entity.key,reason:`Parent entity ${S} is scheduled for removal.`}),a.add(b),n=!0;continue}let $=Array.from(N.withInheritedAssociations()).find(J=>J.key===y.parent?.association.key),z=x?Array.from(x.withInheritedAssociations()).find(J=>J.key===y.parent?.association.key):void 0,C=$?.info.getLabel()||z?.info.getLabel()||y.parent?.association.key;if(!$){r.subEndpointsToRemove.push({key:b,parentKey:y.parent.key,associationKey:y.parent.association.key,name:y.entity.key,reason:`Parent association ${C} is missing in the new domain.`}),a.add(b),n=!0;continue}if(!$.targets.some(J=>J.key===y.entity.key&&(!J.domain||J.domain===e.key))){let ne=(i.get(y.entity.key)||s.get(y.entity.key))?.info.getLabel()||y.entity.key;r.subEndpointsToRemove.push({key:b,parentKey:y.parent.key,associationKey:y.parent.association.key,name:y.entity.key,reason:`Target entity ${ne} is no longer a valid target for the parent association ${C}.`}),a.add(b),n=!0;continue}}}let l,c;if(o.user&&(l=i.get(o.user.key),c=s.get(o.user.key),!c)){r.canProceed=!1;let y=`User entity '${l?.info.getLabel()||o.user.key}' no longer exists in the new domain version.`;r.breakingChanges.push({type:"user_entity_missing",entityKey:o.user.key,propertyKey:"",reason:y})}if(o.user&&c&&l){let b=Array.from(l.withInheritedProperties()),y=Array.from(c.withInheritedProperties());if(o.session?.properties)for(let _ of o.session.properties){let x=b.find($=>$.key===_.key);if(!x){r.sessionPropertiesToRemove.push(_.key);continue}let S;try{S=x.getExposedName()}catch{}if(!S){r.sessionPropertiesToRemove.push(_.key);continue}let N=y.find($=>{try{return $.getExposedName()===S}catch{return!1}});N?N.key!==x.key&&r.userModelRemapping.push({oldPropertyKey:x.key,newPropertyKey:N.key,exposedName:S,reason:`Property ${x.info.getLabel(x.key)} has been renamed to ${N.info.getLabel(N.key)}.`}):r.sessionPropertiesToRemove.push(_.key)}}let p;c&&(p=Array.from(c.withInheritedProperties()).find(b=>b.hasSemantic(w.UserRole)));let u=p?.schema?.enum,h=(b,y)=>{if(b.type==="matchUserRole"){let _=b;if(!p)r.accessRulesWithMismatches.push({ruleType:"matchUserRole",location:y,reason:"No role field configured on the new user model."});else if(u&&Array.isArray(u))for(let x of _.role)u.includes(x)||r.accessRulesWithMismatches.push({ruleType:"matchUserRole",location:y,reason:`Role '${x}' is no longer a valid role in the new user model.`})}},m=(b,y,_)=>{if(b.type==="matchResourceAttribute"){let x=b;if(!_)return;let S=s.get(_);if(!S)return;let N=Array.from(S.withInheritedProperties());if(!N.some(z=>z.key===x.attribute)){let z=i.get(_),C=x.attribute,q=!1;if(z){let J=Array.from(z.withInheritedProperties()).find(ne=>ne.key===x.attribute);if(J){C=J.info.getLabel(J.key);let ne;try{ne=J.getExposedName()}catch{}ne&&N.find(le=>{try{return le.getExposedName()===ne}catch{return!1}})&&(q=!0)}}if(!q){let J=S.info.getLabel();r.accessRulesWithMismatches.push({ruleType:"matchResourceAttribute",location:y,reason:`Property attribute '${C}' no longer exists on entity '${J}'.`})}}}},f=(b,y,_)=>{if(b.type==="matchResourceOwner"){let x=b;if(x.target==="user-entity"){o.user&&!c&&r.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:y,reason:"User entity is missing in the new domain."});return}if(!_)return;let S=s.get(_);if(!S)return;if(x.property){let N=Array.from(S.withInheritedProperties()),$=Array.from(S.withInheritedAssociations());if(!(N.some(C=>C.key===x.property)||$.some(C=>C.key===x.property))){let C=i.get(_),q=x.property,J=!1;if(C){let ne=Array.from(C.withInheritedProperties()),Y=Array.from(C.withInheritedAssociations()),le=ne.find(Se=>Se.key===x.property)||Y.find(Se=>Se.key===x.property);if(le){q=le.info.getLabel(le.key);let Se;try{Se=le.getExposedName()}catch{}if(Se){let rs=N.find(nt=>{try{return nt.getExposedName()===Se}catch{return!1}}),at=$.find(nt=>{try{return nt.getExposedName()===Se}catch{return!1}});(rs||at)&&(J=!0)}}}if(!J){let ne=S.info.getLabel();e.resolveOwnershipPath(_)!==null?r.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:y,reason:`Direct ownership property '${q}' no longer exists on entity '${ne}'. The resolved ownership path will be used instead.`}):r.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:y,reason:`Ownership property '${q}' no longer exists on entity '${ne}' and no transitively resolved ownership path is available.`})}}}else if(!(e.resolveOwnershipPath(_)!==null)){let $=S.info.getLabel();r.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:y,reason:`No ownership property specified and no transitively resolved ownership path exists for entity '${$}'.`})}}},k=(b,y)=>{if(b.type==="matchUserProperty"){let _=b;if(o.user&&!c){r.accessRulesWithMismatches.push({ruleType:"matchUserProperty",location:y,reason:"User entity is missing in the new domain."});return}c&&_.property&&(Array.from(c.withInheritedProperties()).some(N=>N.key===_.property)||r.userModelRemapping.some($=>$.oldPropertyKey===_.property)||r.accessRulesWithMismatches.push({ruleType:"matchUserProperty",location:y,reason:`User property '${_.property}' no longer exists on the User entity.`}))}};if(o.accessRules)for(let b of o.accessRules)h(b,{type:"api",key:o.key}),k(b,{type:"api",key:o.key});for(let[b,y]of o.exposes.entries())if(!a.has(b)){if(y.accessRules)for(let _ of y.accessRules)h(_,{type:"exposure",key:b}),m(_,{type:"exposure",key:b},y.entity.key),f(_,{type:"exposure",key:b},y.entity.key),k(_,{type:"exposure",key:b});if(y.actions){for(let _ of y.actions)if(_.accessRules)for(let x of _.accessRules)h(x,{type:"action",key:`${b}:${_.kind}`}),m(x,{type:"action",key:`${b}:${_.kind}`},y.entity.key),f(x,{type:"action",key:`${b}:${_.kind}`},y.entity.key),k(x,{type:"action",key:`${b}:${_.kind}`})}td(b,y,s,t,r),rd(b,y,s,t,r)}return r}function to(o,e,t){if(!t.canProceed)throw new g("Cannot apply domain update because it contains breaking changes. Details in the report.",{code:"E_CANNOT_PROCEED_WITH_UPGRADE",status:400});let r=o.domain;o.dependencies.clear(),o.dependencies.set(e.key,e),o.dependencyList=[{key:e.key,version:e.info.version}];let i=[...t.exposedEntitiesToRemove,...t.subEndpointsToRemove];for(let c of i)o.exposes.delete(c.key);if(o.user&&o.session){let c=new Set(t.sessionPropertiesToRemove),p=new Map;for(let u of t.userModelRemapping)p.set(u.oldPropertyKey,u.newPropertyKey);if(o.session.properties){let u=[];for(let h of o.session.properties){if(c.has(h.key))continue;let m=p.get(h.key);m?u.push({...h,key:m}):u.push(h)}o.session.properties=u}}let s=new Map;for(let c of e.listEntities())s.set(c.key,c);let a;if(o.user){let c=s.get(o.user.key);c&&(a=Array.from(c.withInheritedProperties()).find(p=>p.hasSemantic(w.UserRole)))}let n=a?.schema?.enum,l=(c,p)=>{let u=[];for(let h of c)if(h.type==="matchUserRole"){let m=h;if(!a)continue;if(n&&Array.isArray(n)){let f=m.role.filter(k=>n.includes(k));if(f.length===0)continue;m.role=f}u.push(h)}else if(h.type==="matchResourceAttribute"&&p){let m=h,f=s.get(p);if(!f)continue;let k=Array.from(f.withInheritedProperties());if(k.some(y=>y.key===m.attribute))u.push(h);else{let y,_=r?.findEntity(p);if(_){let S=Array.from(_.withInheritedProperties()).find(N=>N.key===m.attribute);if(S){let N;try{N=S.getExposedName()}catch{}N&&(y=k.find($=>{try{return $.getExposedName()===N}catch{return!1}}))}}if(y)m.attribute=y.key,u.push(h);else continue}}else if(h.type==="matchResourceOwner"&&p){let m=h;if(m.target==="user-entity")u.push(h);else if(m.property){let f=s.get(p);if(!f)continue;let k=Array.from(f.withInheritedProperties()),b=Array.from(f.withInheritedAssociations());if(k.some(_=>_.key===m.property)||b.some(_=>_.key===m.property))u.push(h);else{let _,x=r?.findEntity(p);if(x){let S=Array.from(x.withInheritedProperties()),N=Array.from(x.withInheritedAssociations()),$=S.find(z=>z.key===m.property)||N.find(z=>z.key===m.property);if($){let z;try{z=$.getExposedName()}catch{}if(z){let C=k.find(J=>{try{return J.getExposedName()===z}catch{return!1}}),q=b.find(J=>{try{return J.getExposedName()===z}catch{return!1}});C?_=C.key:q&&(_=q.key)}}}_?(m.property=_,u.push(h)):(m.property=void 0,u.push(h))}}else u.push(h)}else if(h.type==="matchUserProperty"){let m=h;if(o.user){let f=s.get(o.user.key);if(f&&m.property)if(Array.from(f.withInheritedProperties()).some(y=>y.key===m.property))u.push(h);else{let y=t.userModelRemapping.find(_=>_.oldPropertyKey===m.property);y?(m.property=y.newPropertyKey,u.push(h)):(m.property="",u.push(h))}else u.push(h)}else u.push(h)}else u.push(h);return u};o.accessRules&&(o.accessRules=l(o.accessRules));for(let c of o.exposes.values()){let p=c.entity.key,u=s.get(p),h=r?.findEntity(p),m=y=>y,f=y=>y,k=!1,b=!1;if(u){let y=Array.from(u.withInheritedProperties()),_=new Set(y.map(N=>N.key)),x=Array.from(u.withInheritedAssociations()),S=new Set(x.map(N=>N.key));m=N=>{let $=N.split("."),z=$[0],C=z,q=!1;if(_.has(z))q=!0;else if(h){let ne=Array.from(h.withInheritedProperties()).find(Y=>Y.key===z);if(ne){let Y;try{Y=ne.getExposedName()}catch{}if(Y){let le=y.find(Se=>{try{return Se.getExposedName()===Y}catch{return!1}});le&&(C=le.key,q=!0)}}}$[0]=C;let J=$.join(".");return q||(k=!0),J},f=N=>{let $=N.split("."),z=$[0],C=z,q=!1;if(S.has(z))q=!0;else if(h){let ne=Array.from(h.withInheritedAssociations()).find(Y=>Y.key===z);if(ne){let Y;try{Y=ne.getExposedName()}catch{}if(Y){let le=x.find(Se=>{try{return Se.getExposedName()===Y}catch{return!1}});le&&(C=le.key,q=!0)}}}$[0]=C;let J=$.join(".");return q||(b=!0),J}}if(c.accessRules&&(c.accessRules=l(c.accessRules,p)),c.actions)for(let y of c.actions)y.accessRules&&(y.accessRules=l(y.accessRules,p)),y.projection&&Array.isArray(y.projection.fields)&&(y.projection.fields=y.projection.fields.map(_=>{if(_.type==="association"){b=!1;let x=f(_.key),N=t.actionProjectionsWithMismatches.some($=>$.exposureKey===c.key&&$.actionKind===y.kind&&$.fieldType==="association"&&$.fieldKey===_.key)||b?!0:_.invalid;return{..._,key:x,invalid:N}}else{k=!1;let x=m(_.key),N=t.actionProjectionsWithMismatches.some($=>$.exposureKey===c.key&&$.actionKind===y.kind&&$.fieldType==="property"&&$.fieldKey===_.key)||k?!0:_.invalid;return{..._,key:x,invalid:N}}}));if(c.paginationContract&&u){let y=c.paginationContract;y.filterableFields&&(y.filterableFields=y.filterableFields.map(m)),y.sortableFields&&(y.sortableFields=y.sortableFields.map(m)),y.searchableFields&&(y.searchableFields=y.searchableFields.map(m))}}o.notifyChange()}var Zi=class o extends or{kind;key;info;user;authentication;authorization;session;exposes;accessRules;rateLimiting;termsOfService;contact;license;pagination;#e=!0;#t=!1;get domain(){if(this.dependencyList.length===0)return;let e=this.dependencyList[0];return this.dependencies.get(e.key)}static createSchema(e={}){let{key:t=M(),exposes:r=[],pagination:i}=e,s=Q.fromJSON(e.info,{name:"Unnamed API"}).toJSON(),a={kind:Ae,key:t,info:s,exposes:r,pagination:i?structuredClone(i):{kind:"cursor"}};return e.user&&(a.user=structuredClone(e.user)),e.dependencyList&&(a.dependencyList=structuredClone(e.dependencyList)),e.authentication&&(a.authentication=structuredClone(e.authentication)),e.authorization&&(a.authorization=structuredClone(e.authorization)),e.session&&(a.session=structuredClone(e.session)),Array.isArray(e.accessRules)&&(a.accessRules=structuredClone(e.accessRules)),e.rateLimiting&&(a.rateLimiting=structuredClone(e.rateLimiting)),e.termsOfService&&(a.termsOfService=e.termsOfService),e.contact&&(a.contact=structuredClone(e.contact)),e.license&&(a.license=structuredClone(e.license)),a}constructor(e,t){let r=o.createSchema(e),i=[];if(t instanceof Be)t.readOnly?i.push(t):(console.warn(`Domain ${t.key} is not read only, cloning it. This may have performance implications.`),i.push(t.clone({readOnly:!0})));else if(typeof t=="object"&&t.kind===Re)i.push(new Be(t,void 0,{readOnly:!0}));else if(t)throw new g("Invalid domain provided. Expected a DataDomain instance or schema.",{code:"E_DOMAIN_INVALID",help:"It looks like the provided data domain is not a valid instance or domain schema."});if(t){if(!t.info.version)throw new g(`Domain ${t.key} must have a version.`,{code:"E_DOMAIN_NO_VERSION",help:"Before attaching the data domain, give it a version name. Only versioned domains can be attached to an API model."});r.dependencyList=[{key:t.key,version:t.info.version}]}super(r.dependencyList,i),this.kind=r.kind,this.key=r.key,this.info=new Q(r.info),this.user=r.user,this.pagination=r.pagination?structuredClone(r.pagination):{kind:"cursor"},r.authentication&&(this.authentication=structuredClone(r.authentication)),r.authorization&&(this.authorization=structuredClone(r.authorization)),r.session&&(this.session=structuredClone(r.session)),Array.isArray(r.exposes)?this.exposes=new Map(r.exposes.map(s=>[s.key,new qt(this,s)])):this.exposes=new Map,Array.isArray(r.accessRules)?this.accessRules=r.accessRules.map(s=>dr(this,s)):this.accessRules=[],r.rateLimiting&&(this.rateLimiting=new gt(r.rateLimiting)),r.termsOfService&&(this.termsOfService=r.termsOfService),r.contact&&(this.contact=r.contact),r.license&&(this.license=r.license),this.#e=!1}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON(),exposes:Array.from(this.exposes.values()).map(t=>t.toJSON()),pagination:structuredClone(this.pagination)};return this.user&&(e.user={...this.user}),this.dependencyList.length>0&&(e.dependencyList=structuredClone(this.dependencyList)),this.authentication&&(e.authentication=structuredClone(this.authentication)),this.authorization&&(e.authorization=structuredClone(this.authorization)),this.session&&(e.session=structuredClone(this.session)),Array.isArray(this.accessRules)&&this.accessRules.length>0&&(e.accessRules=this.accessRules.map(t=>t.toJSON())),this.rateLimiting&&(e.rateLimiting=this.rateLimiting.toJSON()),this.termsOfService&&(e.termsOfService=this.termsOfService),this.contact&&(e.contact=structuredClone(this.contact)),this.license&&(e.license=structuredClone(this.license)),e}notifyChange(){this.#t||this.#e||(this.#t=!0,queueMicrotask(()=>{this.#t=!1;let e=new Event("change");this.dispatchEvent(e)}))}exposeEntity(e,t){let r=this.domain;if(!r)throw new g("No domain attached to API model",{code:"E_NO_DOMAIN",help:"Attach a data domain to the API model before exposing entities."});let i=Oe(e,this.domain?.key);if(t?.parentId){let u=this.exposes.get(t.parentId);if(!u)throw new g(`Parent exposure not found: ${t.parentId}`,{code:"E_PARENT_NOT_FOUND",help:"Make sure the parent exposure key you provided is correct."});let h;for(let J of this.exposes.values())if(J.parent?.key===u.key&&Oe(J.entity,this.domain?.key)===i){h=J;break}if(h)throw new g(`Entity ${e.key} is already exposed under the specified parent.`,{code:"E_ENTITY_ALREADY_EXPOSED",help:"Do not try to expose already exposed entity under the same parent."});let m;for(let J of this.exposes.values())if(Oe(J.entity,this.domain?.key)===i){m=J;break}if(m&&t?.promoteOnReuse)return this.promoteToRoot(m,r),m;let f=this.findAssociation(u.entity.key,u.entity.domain,e,r);if(!f)throw new g(`No association found from parent entity "${u.entity.key}" to target entity "${e.key}"`,{code:"E_ASSOCIATION_NOT_FOUND",help:"Ensure there is a defined association in the data domain connecting these entities."});let k=f.info.name||"",b=Fi(k.toLocaleLowerCase()),y=f.multiple!==!1,_=r.findEntity(e.key,e.domain);if(!_)throw new g(`Entity not found in domain: ${e.key}`,{code:"E_NO_ENTITY"});let x=cr(_.info.name||""),S=y?`/${b}`:void 0,N=y?`/${b}/{${x}}`:`/${b}`,z=(u.parent?.depth??0)+1,C={kind:_t,key:M(),entity:{...e},actions:[],isRoot:!1,collectionPath:S,resourcePath:"",hasCollection:y,parent:{key:u.key,association:{key:f.key,domain:u.entity.domain},depth:z}};t&&(C.exposeOptions={...t});let q=new qt(this,C);return q.setResourcePath(N),this.exposes.set(q.key,q),t?.followAssociations&&(t?.maxDepth===void 0||t.maxDepth>z)&&this.followEntityAssociations(C,t),this.notifyChange(),q}let s;for(let u of this.exposes.values())if(u.isRoot&&Oe(u.entity,this.domain?.key)===i){s=u;break}if(s)throw new g(`Entity ${e.key} is already exposed.`,{code:"E_ENTITY_ALREADY_EXPOSED",help:"Do not try to expose already exposed entity."});let a=r.findEntity(e.key,e.domain);if(!a)throw new g(`Entity not found in domain: ${e.key}`,{code:"E_NO_ENTITY",help:"Make sure the entity you are trying to expose exists in the data domain."});let{collectionPath:n,resourcePath:l}=this.generateUniqueRootPaths(a.info.name||""),c={kind:_t,key:M(),entity:{...e},actions:[],isRoot:!0,collectionPath:n,resourcePath:l,hasCollection:!0};t&&(c.exposeOptions={...t});let p=new qt(this,c);return this.exposes.set(p.key,p),t?.followAssociations&&(t?.maxDepth===void 0||t.maxDepth>0)&&this.followEntityAssociations(c,t),this.notifyChange(),p}promoteToRoot(e,t){if(e.isRoot)return;let r=t.findEntity(e.entity.key,e.entity.domain);if(r){let{collectionPath:i,resourcePath:s}=this.generateUniqueRootPaths(r.info.name||"");e.isRoot=!0,e.parent=void 0,e.hasCollection=!0,e.collectionPath=i,e.setResourcePath(s)}}generateUniqueRootPaths(e){let t=Fi(e.toLocaleLowerCase()),r=cr(e),i=`/${t}`,s=`/${t}/{${r}}`,a=1,n=i;for(;this.findCollectionPathCollision(i);)i=`${n}-${a}`,s=`${i}/{${r}}`,a++;return{collectionPath:i,resourcePath:s}}findAssociation(e,t,r,i){let s=i.findEntity(e,t);if(!s)throw new g(`Parent entity not found in domain: ${e}`,{code:"E_NO_ENTITY"});for(let a of s.listAssociations())for(let n of a.targets)if(n.key===r.key&&n.domain===r.domain)return a}followEntityAssociations(e,t){let r=this.domain;if(!r)throw new g("No domain attached to API model",{code:"E_NO_DOMAIN"});let i=t.maxDepth??6,s=Oe(e.entity,this.domain?.key);this.followAssociationsRecursive(e.entity,e.key,0,[s],t,i,r)}followAssociationsRecursive(e,t,r,i,s,a,n){let l=n.findEntity(e.key,e.domain);if(l)for(let c of l.listAssociations())for(let p of c.targets){let u=Oe(p,this.domain?.key),h=Oe(e,this.domain?.key);if(u===h||i.includes(u))continue;let m=Oe(p,this.domain?.key),f;for(let C of this.exposes.values())if(Oe(C.entity,this.domain?.key)===m){f=C;break}if(f){if(!f.isRoot&&s?.promoteOnReuse){let C=!1;if(f.parent){let q=this.exposes.get(f.parent.key);if(q){let J=Oe(q.entity,this.domain?.key);i.includes(J)&&(C=!0)}}C||this.promoteToRoot(f,n);continue}if(f.isRoot)continue}let k=n.findEntity(p.key,p.domain);if(!k)continue;let b=c.info.name||"",y=Fi(b.toLocaleLowerCase()),_=c.multiple!==!1,x=cr(k.info.name||""),S=_?`/${y}`:void 0,N=_?`/${y}/{${x}}`:`/${y}`,$={kind:_t,key:M(),entity:{...p},actions:[],isRoot:!1,collectionPath:S,resourcePath:"",hasCollection:_,parent:{key:t,association:{key:c.key,domain:e.domain},depth:r+1}},z=new qt(this,$);z.setResourcePath(N),this.exposes.set(z.key,z),r+1>=a?$.truncated=!0:this.followAssociationsRecursive(p,$.key,r+1,[...i,u],s,a,n)}}removeExposedEntity(e){if(!this.exposes.has(e))throw new g(`Exposed entity with key "${e}" not found.`,{code:"E_NO_EXPOSURE",help:"The exposed entity you are trying to remove does not exist."});this.removeWithChildren(e),this.notifyChange()}removeWithChildren(e){if(!this.exposes.has(e))return;this.exposes.delete(e);let t=r=>{for(let i of this.exposes.values())i.parent?.key===r&&(t(i.key),this.exposes.delete(i.key))};t(e)}cleanForDomainChange(){this.dependencies.clear(),this.dependencyList=[],this.exposes=new Map,this.user=void 0,this.session&&(this.session.properties=[]),this.notifyChange()}attachDataDomain(e){if(!e.info.version)throw new g("Cannot attach DataDomain without a version. Please set the version in the domain info.",{code:"E_DOMAIN_NO_VERSION",help:"Before attaching the data domain, give it a version name. Only versioned domains can be attached to an API model."});this.cleanForDomainChange(),this.dependencies.set(e.key,e),this.dependencyList=[{key:e.key,version:e.info.version}];for(let t of e.listEntities())if(t.hasSemantic(w.User)){this.user={key:t.key};break}this.notifyChange()}findExposedByEntity(e){let t=Oe(e,this.domain?.key);for(let r of this.exposes.values())if(Oe(r.entity,this.domain?.key)===t)return r}findResourcePathCollision(e,t){for(let r of this.exposes.values())if(!(t&&r.key===t)&&r.isRoot&&r.resourcePath===e)return r}findCollectionPathCollision(e,t){for(let r of this.exposes.values())if(!(t&&r.key===t)&&r.isRoot&&r.hasCollection&&r.collectionPath===e)return r}hasDomainUpdate(e){let t=this.domain;return t?t.key!==e.key||t.info.version!==e.info.version:!0}analyzeDomainUpdate(e){return eo(this,e)}applyDomainUpdate(e,t){to(this,e,t),this.notifyChange()}};function j(o,e){return`${o}_${e}`}function ro(o){let e=[],t={apiModelKey:o.key,kind:Ae,key:o.key};return o.kind!==Ae&&e.push({code:j("API","INVALID_KIND"),message:"The API model type is incorrect.",suggestion:'Set the model type to "ApiModel".',severity:"error",context:{...t,property:"kind"}}),(!o.key||typeof o.key!="string"||o.key.trim()==="")&&e.push({code:j("API","MISSING_KEY"),message:"The API model is missing a unique identifier.",suggestion:"Provide a valid name to use as a unique identifier.",severity:"error",context:{...t,property:"key"}}),(!o.info||!o.info.name||o.info.name.trim()==="")&&e.push({code:j("API","MISSING_NAME"),message:"The API model has no defined name.",suggestion:"Provide a descriptive name for your API.",severity:"error",context:{...t,property:"info.name"}}),(!o.info||!o.info.description||o.info.description.trim()==="")&&e.push({code:j("API","MISSING_DESCRIPTION"),message:"Adding a description helps others understand your API.",suggestion:"Add a description to clarify the purpose of this API.",severity:"warning",context:{...t,property:"info.description"}}),e}function io(o){let e=[],t={apiModelKey:o.key,kind:Ae,key:o.key},r=o.domain;return r?((!r.info||!r.info.version)&&e.push({code:j("API","MISSING_DOMAIN_VERSION"),message:"The selected Data Domain is missing a version number.",suggestion:"Specify a version for the attached Data Domain.",severity:"error",context:t}),e):(e.push({code:j("API","MISSING_DOMAIN"),message:"No Data Domain is attached to the API.",suggestion:"Select a Data Domain from the settings to power your API.",severity:"error",context:t}),e)}function so(o){let e=[],t={apiModelKey:o.key,kind:Ae,key:o.key},r=o.domain&&o.user?o.domain.findEntity(o.user.key,o.user.domain):void 0;if(!o.authentication)e.push({code:j("API","MISSING_AUTHENTICATION"),message:"The API is missing authentication settings.",suggestion:"Go to the security settings and configure how users authenticate.",severity:"error",context:{...t,property:"authentication"}});else if(o.authentication.strategy==="UsernamePassword"&&r){let i;for(let a of r.properties)if(a.hasSemantic(w.Password)){i=a;break}i||e.push({code:j("API","MISSING_PASSWORD_SEMANTIC"),message:"The selected user model requires a property with the Password data semantic for authentication.",suggestion:'Go to the Data Modeler and add the "Password" semantic to the password property.',severity:"error",context:{...t,property:"user"}});let s;for(let a of r.properties)if(a.hasSemantic(w.Username)){s=a;break}s||e.push({code:j("API","MISSING_USERNAME_SEMANTIC"),message:"Username & Password authentication requires a field with the Username data semantic.",suggestion:'Go to the Data Modeler and add the "Username" semantic to the property used for login.',severity:"error",context:{...t,property:"user"}})}if(!o.authorization)e.push({code:j("API","MISSING_AUTHORIZATION"),message:"The API is missing authorization settings.",suggestion:"Go to the security settings and configure how to handle user permissions.",severity:"error",context:{...t,property:"authorization"}});else if(o.authorization.strategy==="RBAC"&&r){let i;for(let s of r.properties)if(s.hasSemantic(w.UserRole)){i=s;break}i||e.push({code:j("API","MISSING_ROLE_SEMANTIC"),message:"Role-based access control requires a property with the User Role data semantic on the user model.",suggestion:'Go to the Data Modeler and add the "User Role" semantic to the property used for roles.',severity:"error",context:{...t,property:"user"}})}if(!o.session)e.push({code:j("API","MISSING_SESSION"),message:"The API is missing session configuration.",suggestion:"Configure how user sessions will be handled.",severity:"error",context:{...t,property:"session"}});else{if(o.session.secret||e.push({code:j("API","MISSING_SESSION_SECRET"),message:"A secure encryption key is required for sessions.",suggestion:"Provide a strong security key in the session settings.",severity:"error",context:{...t,property:"session.secret"}}),!o.session.properties||o.session.properties.length===0)e.push({code:j("API","MISSING_SESSION_PROPERTIES"),message:"The session token needs to include at least one piece of user information, like an ID.",suggestion:"Select fields that should be stored securely inside the session payload.",severity:"error",context:{...t,property:"session.properties"}});else if(o.authorization&&o.authorization.strategy==="RBAC"&&r){let a;for(let n of r.properties)if(n.hasSemantic(w.UserRole)){a=n;break}a&&!o.session.properties.find(n=>n.key===a?.key)&&e.push({code:j("API","MISSING_RBAC_SESSION_PROPERTY"),message:"The user role must be included in the session data for permissions to work.",suggestion:"Make sure your selected role property is checked in the session settings.",severity:"error",context:{...t,property:"session.properties"}})}let{cookie:i,jwt:s}=o.session;(!i||!i.enabled)&&(!s||!s.enabled)&&e.push({code:j("API","MISSING_SESSION_TRANSPORT"),message:"No delivery method for sessions (like cookies or tokens) is enabled.",suggestion:"Enable at least one session delivery mechanism in the security settings.",severity:"error",context:{...t,property:"session"}})}if(o.user?o.domain&&!o.domain.findEntity(o.user.key,o.user.domain)&&e.push({code:j("API","INVALID_USER_ENTITY"),message:"The selected user model no longer exists in your data domain.",suggestion:"Please navigate to security settings and select a valid user model.",severity:"error",context:{...t,property:"user"}}):e.push({code:j("API","MISSING_USER_ENTITY"),message:"You need to specify what kind of object represents your users.",suggestion:"Select a model from your domain that stores your user accounts.",severity:"error",context:{...t,property:"user"}}),o.accessRules&&o.accessRules.length>0)for(let i=0;i<o.accessRules.length;i++){let s=o.accessRules[i];s.inheritable||e.push({code:j("API","NON_INHERITABLE_RULE"),message:`The access rule of type "${s.type}" is not inheritable and cannot be applied at the API level.`,suggestion:"Remove this rule from the API settings or move it to a specific exposed entity / action.",severity:"error",context:{...t,property:`accessRules[${i}]`}})}return e}function ao(o){let e=[],t={apiModelKey:o.key,kind:Ae,key:o.key},r=/^https?:\/\//i,i=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return o.contact?(o.contact.email&&!i.test(o.contact.email)&&e.push({code:j("API","INVALID_CONTACT_EMAIL"),message:"The contact email address looks invalid.",suggestion:"Please double check the email address formatting.",severity:"error",context:{...t,property:"contact.email"}}),o.contact.url&&!r.test(o.contact.url)&&e.push({code:j("API","INVALID_CONTACT_URL"),message:"The contact link looks invalid.",suggestion:"Provide a working link, starting with http:// or https://.",severity:"error",context:{...t,property:"contact.url"}})):e.push({code:j("API","MISSING_CONTACT"),message:"A contact email or link is highly recommended for API consumers.",suggestion:"Add an email or help desk link in the metadata tab.",severity:"info",context:{...t,property:"contact"}}),o.license?o.license.url&&!r.test(o.license.url)&&e.push({code:j("API","INVALID_LICENSE_URL"),message:"The license link looks invalid.",suggestion:"Provide a working link, starting with http:// or https://.",severity:"error",context:{...t,property:"license.url"}}):e.push({code:j("API","MISSING_LICENSE"),message:"Adding a license to your API helps users understand its usage rights.",suggestion:"Add the name and a link to your API license terms.",severity:"info",context:{...t,property:"license"}}),o.termsOfService||e.push({code:j("API","MISSING_TOS"),message:"Terms of Service help legal compliance.",suggestion:"Add a link to the terms of your API service.",severity:"info",context:{...t,property:"termsOfService"}}),e}function no(o){let e=[],t={apiModelKey:o.key,kind:Ae,key:o.key},r=!1;for(let i of o.exposes.values())if(i.actions.some(s=>yt.isListAction(s)||bt.isSearchAction(s))){r=!0;break}return r&&(!o.pagination||!o.pagination.kind?e.push({code:j("API","MISSING_PAGINATION"),message:"The API must have a defined pagination strategy when it exposes List or Search actions.",suggestion:"Configure how results are loaded (e.g. by page or by a continuous cursor).",severity:"error",context:{...t,property:"pagination"}}):(o.pagination.defaultLimit===void 0&&e.push({code:j("API","MISSING_PAGINATION_DEFAULT_LIMIT"),message:"The API doesn't have a defined default page limit when it exposes List or Search actions.",suggestion:"Set a default page limit for the pagination otherwise the API will use its default limit.",severity:"info",context:{...t,property:"pagination.defaultLimit"}}),o.pagination.maxLimit===void 0&&e.push({code:j("API","MISSING_PAGINATION_MAX_LIMIT"),message:"The API doesn't have a defined page size max limit when it exposes List or Search actions.",suggestion:"Set a max page size limit for the pagination otherwise the API will use its default max limit.",severity:"info",context:{...t,property:"pagination.maxLimit"}}))),e}function id(o,e,t){let r=[],i={apiModelKey:t.key,kind:"Action",key:o.kind,parentExposedEntityKey:e.key};if(Ft.isDeleteAction(o)&&(o.strategy?o.strategy==="hard"&&r.push({code:j("ACTION","DELETE_HARD_WARNING"),message:"Permanent delete is active. There will be no way to restore deleted data.",suggestion:'Consider switching to "soft delete" if users might need to undo mistakes.',severity:"info",context:{...i,property:"strategy"}}):r.push({code:j("ACTION","DELETE_MISSING_STRATEGY"),message:"A Delete action must know if you want to completely erase the record, or just hide it.",suggestion:"Configure the deletion type (permanent or soft).",severity:"error",context:{...i,property:"strategy"}})),Jt.isUpdateAction(o)&&(!o.allowedMethods||o.allowedMethods.length===0)&&r.push({code:j("ACTION","UPDATE_MISSING_METHODS"),message:"An Update action must define how the data is sent (PUT replaces everything; PATCH applies partial changes).",suggestion:"Select at least one allowed HTTP method.",severity:"error",context:{...i,property:"allowedMethods"}}),o.getAllRateLimiters().some(n=>n.rules.length)||r.push({code:j("ACTION","MISSING_RATE_LIMITS"),message:"It is best practice to configure a rate limit so your API is not overwhelmed.",suggestion:"Set a reasonable maximum request speed for this operation.",severity:"warning",context:i}),o.accessRules)for(let n of o.accessRules)r.push(...lo(n,e,t));if(o.projection&&(yt.isListAction(o)||bt.isSearchAction(o)||Kt.isReadAction(o)||r.push({code:j("ACTION","INVALID_PROJECTION_SEVERITY"),message:`Projections are only supported for read actions (List, Search, Read). The action "${o.kind}" does not support projections.`,suggestion:"Remove projection configuration from this write action.",severity:"warning",context:{...i,property:"projection"}}),o.projection.type!=="include"&&o.projection.type!=="exclude"&&r.push({code:j("ACTION","INVALID_PROJECTION_TYPE"),message:'Projection type must be either "include" or "exclude".',suggestion:"Select a valid projection type.",severity:"error",context:{...i,property:"projection"}}),Array.isArray(o.projection.fields))){let l=e.entity?t.domain?.findEntity(e.entity.key,e.entity.domain):void 0;if(l){let c=Array.from(l.withInheritedProperties()),p=new Set(c.map(h=>h.key)),u=new Set(Array.from(l.withInheritedAssociations()).map(h=>h.key));o.projection.fields.forEach((h,m)=>{if(h.invalid===!0){r.push({code:j("ACTION","INVALID_PROJECTION_FIELD"),message:`The projected field "${h.key}" is marked as invalid. It was not found in the entity definition.`,suggestion:"Update or remove this field from the projection configuration.",severity:"error",context:{...i,property:`projection.fields[${m}]`}});return}if(h.type==="association"){let f=h.key.split("."),k=f[0];if(!u.has(k))r.push({code:j("ACTION","INVALID_PROJECTION_ASSOCIATION"),message:`The projected association "${h.key}" does not exist on this entity.`,suggestion:"Select a valid association or remove it.",severity:"error",context:{...i,property:`projection.fields[${m}]`}});else{let b=Array.from(l.withInheritedAssociations()).find(y=>y.key===k);f.length>1&&(!b||b.schema?.embedded!==!0)&&r.push({code:j("ACTION","INVALID_PROJECTION_ASSOCIATION_EMBEDDED"),message:`The projected association "${h.key}" is invalid because association "${k}" is not embedded.`,suggestion:"Ensure the association is marked as embedded to use dot-notation.",severity:"error",context:{...i,property:`projection.fields[${m}]`}})}}else{let f=h.key.split("."),k=f[0];if(!p.has(k))r.push({code:j("ACTION","INVALID_PROJECTION_PROPERTY"),message:`The projected property "${h.key}" does not exist on this entity.`,suggestion:"Select a valid property or remove it.",severity:"error",context:{...i,property:`projection.fields[${m}]`}});else{let b=c.find(y=>y.key===k);f.length>1&&(!b||b.type!=="json"?r.push({code:j("ACTION","INVALID_PROJECTION_JSON_ROOT"),message:`The projected property "${h.key}" is invalid because root property "${k}" is not of type "json".`,suggestion:'Make sure the root property is of type "json" to use dot-notation.',severity:"error",context:{...i,property:`projection.fields[${m}]`}}):b.jsonSchema&&(it(b.jsonSchema,f.slice(1))||r.push({code:j("ACTION","INVALID_PROJECTION_JSON_PATH"),message:`The projected property "${h.key}" is invalid according to the JSON Schema of "${k}".`,suggestion:"Configure a valid JSON Schema path or update the projection path.",severity:"error",context:{...i,property:`projection.fields[${m}]`}})))}}})}}return r}function oo(o,e){let t=[],r={apiModelKey:e.key,kind:_t,key:o.key},i=o.entity?e.domain?.findEntity(o.entity.key,o.entity.domain):void 0,s=i?.info.getLabel()||i?.key||"unknown";!o.entity||!o.entity.key?t.push({code:j("EXPOSURE","MISSING_ENTITY_REF"),message:"This exposed endpoint does not point to a specific data model.",suggestion:"Select which database entity this endpoint should serve.",severity:"error",context:{...r,property:"entity"}}):i||t.push({code:j("EXPOSURE","INVALID_ENTITY_REF"),message:"This endpoint points to a data model that no longer exists.",suggestion:"Select a new valid database model or delete this endpoint.",severity:"error",context:{...r,property:"entity"}});let a=i?.hasSemantic(w.User);if(o.isRoot&&i&&!a&&e.domain&&e.domain.resolveOwnershipPath(i.key)===null&&t.push({code:j("EXPOSURE","MISSING_OWNER_PATH"),message:`[${s}]: This root endpoint has no ownership path to the User entity. If you want this resource to be user-isolated, add the Relational Resource Owner semantic to the association that defines its owner.`,suggestion:"Ensure the resource has a direct (Resource Owner Identifier) or indirect (Relational Resource Owner) path to the User entity.",severity:"warning",context:r}),!o.isRoot&&e.domain)if(!o.parent)t.push({code:j("EXPOSURE","MISSING_PARENT_REF"),message:`[${s}]: A sub-endpoint (non-root exposure) must have a parent endpoint.`,suggestion:"Expose this entity under a parent entity or make it a root endpoint.",severity:"error",context:{...r,property:"parent"}});else{let l=e.exposes.get(o.parent.key);if(!l)t.push({code:j("EXPOSURE","INVALID_PARENT_EXPOSURE"),message:`[${s}]: The parent exposed entity "${o.parent.key}" does not exist.`,suggestion:"Ensure that the parent endpoint is exposed.",severity:"error",context:{...r,property:"parent.key"}});else{let c=e.domain.findEntity(l.entity.key,l.entity.domain),p=o.parent.association.key,u=e.domain.findAssociation(p,o.parent.association.domain);if(!u)t.push({code:j("EXPOSURE","MISSING_PARENT_ASSOCIATION"),message:`[${s}]: The parent association "${p}" does not exist in the data domain.`,suggestion:"Select a valid association in the data domain that connects the parent and child entities.",severity:"error",context:{...r,property:"parent.association"}});else{let h=c?.key,m=i?.key,f=u.getParentInstance()?.key===h,k=u.getParentInstance()?.key===m,b=u.targets.some(x=>x.key===h),y=u.targets.some(x=>x.key===m);f&&y||k&&b||t.push({code:j("EXPOSURE","INVALID_PARENT_ASSOCIATION"),message:`[${s}]: The parent association "${p}" does not connect the parent entity "${c?.info.name||h}" with the child entity "${i?.info.name||m}".`,suggestion:"Use an association that directly connects the parent and child data entities.",severity:"error",context:{...r,property:"parent.association"}})}}}if(o.hasCollection){if(!o.collectionPath)t.push({code:j("EXPOSURE","MISSING_COLLECTION_PATH"),message:`[${s}]: When an endpoint exposes a collection, it must define what its base URL path is.`,suggestion:'Add a path (e.g., "/items").',severity:"error",context:{...r,property:"collectionPath"}});else{let l=o.collectionPath.split("/").filter(Boolean);(l.length!==1||!o.collectionPath.startsWith("/"))&&t.push({code:j("EXPOSURE","INVALID_COLLECTION_PATH"),message:`[${s}]: The collection URL should start with "/" and have no extra slashes.`,suggestion:`Ensure the path looks like exactly "/${l[0]||"subresource"}".`,severity:"error",context:{...r,property:"collectionPath"}})}o.resourcePath?o.collectionPath&&(new RegExp(`^${o.collectionPath}/\\{[a-zA-Z0-9_]+\\}$`).test(o.resourcePath)||t.push({code:j("EXPOSURE","INVALID_RESOURCE_PATH_FORMAT"),message:`[${s}]: The single item route should match exactly your collection path plus one identifier variable.`,suggestion:`Make sure the item path is formatted exactly like "${o.collectionPath}/{id}".`,severity:"error",context:{...r,property:"resourcePath"}})):t.push({code:j("EXPOSURE","MISSING_RESOURCE_PATH"),message:`[${s}]: You need an identifier to locate single items.`,suggestion:'Specify the identification parameter format, like "{id}".',severity:"error",context:{...r,property:"resourcePath"}})}else o.resourcePath?(o.resourcePath.split("/").filter(Boolean).length!==1||!o.resourcePath.startsWith("/"))&&t.push({code:j("EXPOSURE","INVALID_RESOURCE_PATH_FORMAT"),message:`[${s}]: The URL route ${o.resourcePath} must only contain one exact part or level.`,suggestion:"Simplify the endpoint URL to a single segment.",severity:"error",context:{...r,property:"resourcePath"}}):t.push({code:j("EXPOSURE","MISSING_RESOURCE_PATH"),message:`[${s}]: Exposed entity representing a single item must declare their URL route.`,suggestion:'Set the URL path (such as "/profile").',severity:"error",context:{...r,property:"resourcePath"}});o.isRoot&&(o.collectionPath&&e.findCollectionPathCollision(o.collectionPath,o.key)&&t.push({code:j("EXPOSURE","ROOT_COLLECTION_COLLISION"),message:`[${s}]: The route "${o.collectionPath}" is already used by another view.`,suggestion:"Give this resource a different path to avoid conflicts.",severity:"error",context:{...r,property:"collectionPath"}}),o.resourcePath&&e.findResourcePathCollision(o.resourcePath,o.key)&&t.push({code:j("EXPOSURE","ROOT_RESOURCE_COLLISION"),message:`[${s}]: The route "${o.resourcePath}" is already used by another one.`,suggestion:"Give this single-item resource a different path to avoid conflicts.",severity:"error",context:{...r,property:"resourcePath"}}));let n=o.getAbsoluteResourcePath();if(n){let l=[...n.matchAll(/\{([^}]+)\}/g)].map(p=>p[1]);if(new Set(l).size!==l.length){let u=l.filter((h,m)=>l.indexOf(h)!==m)[0];t.push({code:j("EXPOSURE","DUPLICATE_PATH_PARAMETER"),message:`[${s}]: The path parameter "{${u}}" is duplicated in the resource path hierarchy.`,suggestion:"Change the parameter name in either this resource or its ancestor to ensure unique parameter names.",severity:"error",context:{...r,property:"resourcePath"}})}}if(!o.actions||o.actions.length===0)t.push({code:j("EXPOSURE","MISSING_ACTIONS"),message:`[${s}]: This exposed entity does not let users do anything.`,suggestion:"Enable at least one operation like Create, Read, or Update.",severity:"error",context:{...r,property:"actions"}});else{let l=!1,c=!1;for(let p of o.actions){t.push(...id(p,o,e)),bt.isSearchAction(p)&&(l=!0),yt.isListAction(p)&&(c=!0);let u=!1;p.accessRules&&p.accessRules.length>0&&(u=!0),!u&&o.accessRules&&o.accessRules.length>0&&(u=!0);let h=o.parent?.key;for(;h&&!u;){let m=e.exposes.get(h);if(m&&m.accessRules&&m.accessRules.some(f=>f.inheritable)){u=!0;break}h=m?.parent?.key}!u&&e.accessRules&&e.accessRules.some(m=>m.inheritable)&&(u=!0),u||t.push({code:j("ACTION","MISSING_ACCESS_RULES"),message:`[${s}]: The ${p.kind} action has no security rules attached, making it entirely inaccessible or open.`,suggestion:"Allow specific user roles to access this operation.",severity:"error",context:{...r,kind:"Action",key:p.kind,parentExposedEntityKey:o.key}})}if(c||l){let p=o.paginationContract;if(!p)t.push({code:j("EXPOSURE","MISSING_PAGINATION_CONTRACT"),message:`[${s}]: The List or Search action needs a pagination contract.`,suggestion:"Add a pagination contract to the exposed entity.",severity:"error",context:r});else{if(c&&((!p.filterableFields||p.filterableFields.length===0)&&t.push({code:j("EXPOSURE","LIST_MISSING_FILTERS"),message:`[${s}]: Listing all elements without filters could be overwhelming for large tables.`,suggestion:"Select a few important fields to allow filtering.",severity:"warning",context:r}),(!p.sortableFields||p.sortableFields.length===0)&&t.push({code:j("EXPOSURE","LIST_MISSING_SORTING"),message:`[${s}]: Listing all elements without sorting could be overwhelming for large tables.`,suggestion:"Select a few important fields to allow sorting.",severity:"warning",context:r})),l){let u=[];Array.isArray(p.searchableFields)&&u.push(...p.searchableFields),Array.isArray(p.filterableFields)&&u.push(...p.filterableFields),u.length||t.push({code:j("EXPOSURE","SEARCH_MISSING_FIELDS"),message:`[${s}]: Search action needs to know which text fields to look in.`,suggestion:"Select a few important fields to allow searching or full-text search.",severity:"warning",context:r})}if(i){let u=Array.from(i.withInheritedProperties()),h=new Set(u.map(f=>f.key)),m=(f,k,b,y)=>{if(f&&Array.isArray(f))for(let _ of f){let x=_.split("."),S=x[0];if(!h.has(S))t.push({code:j("EXPOSURE",b),message:`[${s}]: The ${y} field "${_}" does not exist on this entity.`,suggestion:`Select a valid property on the entity for ${y}.`,severity:"error",context:{...r,property:`paginationContract.${k}Fields`}});else{let N=u.find($=>$.key===S);x.length>1&&(!N||N.type!=="json"?t.push({code:j("EXPOSURE",b),message:`[${s}]: The ${y} field "${_}" is invalid because root property "${S}" is not of type "json".`,suggestion:'Make sure the root property is of type "json" to use dot-notation.',severity:"error",context:{...r,property:`paginationContract.${k}Fields`}}):N.jsonSchema&&(it(N.jsonSchema,x.slice(1))||t.push({code:j("EXPOSURE",b),message:`[${s}]: The ${y} field "${_}" is invalid according to the JSON Schema of "${S}".`,suggestion:"Configure a valid JSON Schema path or update the field path.",severity:"error",context:{...r,property:`paginationContract.${k}Fields`}})))}}};m(p.filterableFields,"filterable","INVALID_FILTER_FIELD","filterable"),m(p.sortableFields,"sortable","INVALID_SORT_FIELD","sortable"),m(p.searchableFields,"searchable","INVALID_SEARCH_FIELD","searchable")}}}}if(o.accessRules)for(let l of o.accessRules)t.push(...lo(l,o,e));return t}function lo(o,e,t){let r=[],i={apiModelKey:t.key,kind:"AccessRule",key:o.type,parentExposedEntityKey:e.key};if(o.type==="matchResourceOwner"){let s=o,a=t.domain;if(!a)return r;let n=e.entity.key,l=a.findEntity(n);if(!l)return r;if(s.target==="user-entity")l.hasSemantic(w.User)||r.push({code:j("RULE","INVALID_USER_ENTITY_TARGET"),message:`[${l.info.getLabel()}]: Target is set to "user-entity", but the entity itself does not represent the User.`,suggestion:'Change target to "property" or add User semantic to this entity.',severity:"error",context:i});else if(s.property){let c=Array.from(l.withInheritedProperties()),p=Array.from(l.withInheritedAssociations());c.some(h=>h.key===s.property)||p.some(h=>h.key===s.property)||r.push({code:j("RULE","INVALID_OWNERSHIP_PROPERTY"),message:`[${l.info.getLabel()}]: The ownership property or association "${s.property}" does not exist on this entity.`,suggestion:"Select a valid property/association, or clear the field to use transitively resolved ownership.",severity:"error",context:i})}else a.resolveOwnershipPath(n)===null&&r.push({code:j("RULE","MISSING_OWNERSHIP_PATH"),message:`[${l.info.getLabel()}]: The access rule is set to "Match resource owner", but no direct property or transitive ownership path to the User entity exists.`,suggestion:"Annotate a property/association with the ResourceOwnerIdentifier or RelationalResourceOwner semantic.",severity:"error",context:i})}else if(o.type==="matchResourceAttribute"){let s=o,a=t.domain;if(!a)return r;let n=e.entity.key,l=a.findEntity(n);if(!l)return r;s.attribute&&(Array.from(l.withInheritedProperties()).some(u=>u.key===s.attribute)||r.push({code:j("RULE","INVALID_RESOURCE_ATTRIBUTE"),message:`[${l.info.getLabel()}]: The resource attribute property "${s.attribute}" does not exist.`,suggestion:"Select a valid property on the entity.",severity:"error",context:i}))}else if(o.type==="matchUserProperty"){let s=o,a=t.domain;if(a){let n=Array.from(a.listEntities()).find(l=>l.hasSemantic(w.User));n?s.property?Array.from(n.withInheritedProperties()).some(p=>p.key===s.property)||r.push({code:j("RULE","INVALID_USER_PROPERTY"),message:`The user property "${s.property}" does not exist on the User entity "${n.info.getLabel()}".`,suggestion:"Select a valid property on the User entity.",severity:"error",context:i}):r.push({code:j("RULE","MISSING_USER_PROPERTY"),message:'The access rule is set to "Match user property", but no property is specified.',suggestion:"Specify a property on the User entity to match against.",severity:"error",context:i}):r.push({code:j("RULE","MISSING_USER_MODEL"),message:'The API specifies a "Match user property" rule, but no User entity is configured in the domain.',suggestion:"Annotate an entity in the domain with the User semantic.",severity:"error",context:i})}}return r}var Qi=class{model;report=[];#e=0;#t=0;#i=0;#r=!1;get infoCount(){return this.#r||this.computeIssueCounters(),this.#e}get warningCount(){return this.#r||this.computeIssueCounters(),this.#t}get errorCount(){return this.#r||this.computeIssueCounters(),this.#i}constructor(e){this.model=e}validate(){if(this.#r=!1,this.report=[],this.report.push(...ro(this.model)),this.report.push(...io(this.model)),this.report.push(...so(this.model)),this.report.push(...no(this.model)),this.report.push(...ao(this.model)),!this.model.exposes||this.model.exposes.size===0)this.report.push({code:"API_NO_EXPOSURES",message:"Your API currently has no exposed data for external clients to request.",suggestion:"Expose a data model so apps can communicate with it.",severity:"warning",context:{apiModelKey:this.model.key,kind:Ae,key:this.model.key,property:"exposes"}});else for(let e of this.model.exposes.values())this.report.push(...oo(e,this.model));return this.report}computeIssueCounters(){this.#e=this.report.filter(e=>e.severity==="info").length,this.#t=this.report.filter(e=>e.severity==="warning").length,this.#i=this.report.filter(e=>e.severity==="error").length,this.#r=!0}};function po(o){o.command("validate [file]").description("Validate a Data Domain or API Model schema").option("--stdin","Read schema content from STDIN").option("--org <oid>","Organization ID (remote validation)").option("--fid <fid>","File ID / schema ID (remote validation)").option("--domain <path>","Path to local Data Domain schema file (only for local API Model validation)").action(async(e,t)=>{let r=new B({format:O.resolved.format});v.debug("[validate] Starting validation process..."),await new ca(e,t,r).execute()})}var ca=class{constructor(e,t,r){this.file=e;this.options=t;this.formatter=r}file;options;formatter;async execute(){v.debug("[validate] Executing schema validation...");try{this.validateArguments();let e=await this.loadSchema();this.validateSchemaStructure(e);let t=e.kind,r=[];t===Re?r=await this.validateDataDomain(e):t===Ae?r=await this.validateApiModel(e):(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Unsupported schema kind "${t}". Supported kinds: "${Re}", "${Ae}".`}),process.exit(1)),this.reportResults(r,t)}catch(e){let t=ie(e);this.formatter.error(t),process.exit(1)}}get isRemoteValidationWithoutOrg(){return!!(this.options.fid&&!this.options.org&&!O.resolved.org)}get shouldReadFromStdin(){return!!(this.options.stdin||!this.file&&!process.stdin.isTTY)}validateArguments(){this.file&&this.options.stdin&&(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Cannot specify both [file] path and --stdin"}),process.exit(1)),this.options.org&&!this.options.fid&&(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID (--fid) is required when using remote validation (--org)."}),process.exit(1)),this.isRemoteValidationWithoutOrg&&(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required for remote validation. Use --org <oid> or configure a default org."}),process.exit(1))}async loadSchema(){return v.debug(`[validate] Loading schema (remote=${!!this.options.fid})...`),this.options.fid?this.loadRemoteSchema():this.loadLocalSchema()}async loadRemoteSchema(){let e=this.options.org||O.resolved.org;e||(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required for remote validation."}),process.exit(1)),v.debug(`[validate] Fetching remote schema file ID '${this.options.fid}' from organization '${e}'...`);let t=ee(),{media:r}=await t.files.readMedia(e,this.options.fid,{token:t.token});return v.debug("[validate] Remote schema loaded successfully."),r}async loadLocalSchema(){let e;if(this.shouldReadFromStdin)v.debug("[validate] Reading schema from STDIN..."),e=await this.readStdin();else if(this.file){let t=co.resolve(this.file);v.debug(`[validate] Reading local schema file from path: ${t}`),es.existsSync(t)||(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`File not found at path: ${t}`}),process.exit(1)),e=es.readFileSync(t,"utf8")}else this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"A file path, --stdin, or remote --org and --fid must be specified."}),process.exit(1);try{let t=JSON.parse(e);return v.debug("[validate] Local schema parsed successfully."),t}catch(t){let r=t instanceof Error?t.message:String(t);this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Failed to parse schema JSON: ${r}`}),process.exit(1)}}isValidSchemaStructure(e){return!!e&&typeof e=="object"&&!Array.isArray(e)&&"kind"in e}validateSchemaStructure(e){this.isValidSchemaStructure(e)||(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:'Invalid schema. The schema must be a JSON object containing a "kind" property.'}),process.exit(1))}async validateDataDomain(e){v.debug("[validate:domain] Validating schema as Data Domain...");let t=[];if(this.options.fid){let a=ee(),n=e.dependencyList||[];n.length>0&&(v.debug(`[validate:domain] Listing ${n.length} dependency data domains from catalog...`),t=(await a.dataCatalog.listDependencies(n,{token:a.token})).data||[])}let r=new Be(e,t,{readOnly:!0}),s=new lr(r).validate();return v.debug(`[validate:domain] Domain validation rules executed. Issues found: ${s.length}`),s}async validateApiModel(e){v.debug("[validate:api] Validating schema as API Model...");let t;if(this.options.fid){let a=ee(),n=e.dependencyList||[];if(n.length>0){v.debug(`[validate:api] Listing ${n.length} dependency data domains from catalog...`);let c=(await a.dataCatalog.listDependencies(n,{token:a.token})).data||[];c.length>0&&(t=new Be(c[0],c,{readOnly:!0}))}}else if(this.options.domain){let a=co.resolve(this.options.domain);v.debug(`[validate:api] Loading domain dependency from local path: ${a}`),es.existsSync(a)||(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Domain dependency file not found at path: ${a}`}),process.exit(1));let n;try{n=JSON.parse(es.readFileSync(a,"utf8"))}catch(l){let c=l instanceof Error?l.message:String(l);this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Failed to parse domain dependency JSON: ${c}`}),process.exit(1)}t=new Be(n,[],{readOnly:!0})}let r=new Zi(e,t),s=new Qi(r).validate();return v.debug(`[validate:api] API Model validation rules executed. Issues found: ${s.length}`),s}reportResults(e,t){v.debug(`[validate] Reporting results. Found ${e.length} validation issue(s).`);let r=e.some(i=>i.severity==="error");if(O.resolved.format==="json")console.log(JSON.stringify({isValid:!r,validationIssues:e},null,2));else if(e.length===0)this.formatter.success("Validation passed. No issues found!");else{let i=this.formatIssues(e,t);this.formatter.list(i,["severity","code","message","suggestion","context"],{headers:["SEVERITY","CODE","MESSAGE","SUGGESTION","CONTEXT"]});let s=e.filter(l=>l.severity==="error").length,a=e.filter(l=>l.severity==="warning").length,n=e.filter(l=>l.severity==="info").length;console.log(""),s>0?console.error(X.red(`\u2716 Validation failed: ${s} error(s), ${a} warning(s), ${n} info(s).`)):console.log(X.yellow(`\u26A0 Validation passed with warnings: ${a} warning(s), ${n} info(s).`))}r&&process.exit(1)}formatIssues(e,t){return e.map(r=>{let i=r.severity||"info",s=r.message||"",a,n,l;if(t===Re){let c=r;a=c.rule||"unknown",n=c.help||"",l=c.key?`${c.kind||"unknown"}: ${c.key}`:c.field||""}else{let c=r;a=c.code||"unknown",n=c.suggestion||"";let p=c.context||{};l=`${p.kind||"unknown"}: ${p.key||""}${p.property?"."+p.property:""}`}return{severity:i,code:a,message:s,suggestion:n,context:l}})}async readStdin(){return new Promise((e,t)=>{let r="";process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{r+=i}),process.stdin.on("end",()=>{e(r)}),process.stdin.on("error",i=>{t(i)})})}};function uo(o){o.command("runtime").description("Administrative operations for the API runtime").command("users").description("Administrative operations for users").command("update").description("Update properties of a user directly in the runtime database").requiredOption("--api <api>","API file ID or slug").requiredOption("--user-id <userId>","Primary key of the user record to update").requiredOption("--property <name=value...>","Properties to update in the format name=value (can specify multiple)").option("--org <oid>","Organization ID (defaults to configured org)").option("--env <environment>",'Target environment (e.g. "production", "staging")',"production").action(async r=>{let i=new B({format:O.resolved.format});v.debug("[runtime:update] Starting runtime user update process..."),await new da(r,i).execute()})}var da=class{constructor(e,t){this.options=e;this.formatter=t}options;formatter;async execute(){v.debug("[runtime:update] Executing runtime user update...");try{let e=ee();St(e,this.formatter);let t=this.options.org||O.resolved.org;v.debug(`[runtime:update] Using organization ID: ${t}`),t||(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is not specified.",detail:"Use --org <oid> or configure a default organization."}),process.exit(1)),v.debug("[runtime:update] Parsing properties...");let r=this.parseProperties(this.options.property),i={};for(let[a,n]of Object.entries(r)){let l=["token","password","secret","key"].some(c=>a.toLowerCase().includes(c));i[a]=l?"**********":n}v.debug(`[runtime:update] Parsed properties: ${JSON.stringify(i)}`),v.debug(`[runtime:update] Sending request to update runtime user ID '${this.options.userId}' in environment '${this.options.env}' for api '${this.options.api}'...`);let s=await e.deployments.apis.updateRuntimeUser(t,this.options.api,this.options.userId,r,this.options.env,{token:e.token});v.debug("[runtime:update] Runtime user updated successfully."),this.formatter.success(`User '${this.options.userId}' updated successfully!`,s)}catch(e){let t=ie(e);this.formatter.error(t),process.exit(1)}}parseProperties(e){let t={};for(let r of e){let i=r.split("=");if(i.length<2)throw new Error(`Invalid property format: '${r}'. Expected 'name=value'.`);let s=i[0].trim(),a=i.slice(1).join("=").trim();a==="true"?t[s]=!0:a==="false"?t[s]=!1:a==="null"?t[s]=null:/^\d+$/.test(a)?t[s]=parseInt(a,10):/^\d*\.\d+$/.test(a)?t[s]=parseFloat(a):t[s]=a}return t}};var st;(function(o){o.add="add",o.remove="remove",o.replace="replace",o.copy="copy",o.move="move",o.test="test"})(st||(st={}));function ts(o,e,t){let r=new te(e),i=Rt(o,r);if(!Xe(i,t))throw new ce([{path:r.raw,message:"Test operation failed. The values are not equal."}]);return{doc:o}}var cA=Object.freeze({add:We,copy:Yt,move:vr,remove:mt,replace:Xt,test:ts});function mo(o){return Array.isArray(o)?new Array(o.length).fill(0).map((e,t)=>`${t}`):Object.keys(o)}function Fr(o){switch(typeof o){case"object":return JSON.parse(JSON.stringify(o));case"undefined":return null;default:return o}}function sd(o,e,t={}){if(JSON.stringify(o)===JSON.stringify(e))return[];let r=[...o],i=[...e],s=[],a=0,n=0;for(;a<r.length||n<i.length;)if(a>=r.length){let l=t.fixedIndexes?n:-1;s.push({op:"add",index:l,value:i[n]}),n++}else if(n>=i.length)s.push({op:"remove",index:a}),a++;else if(Xe(r[a],i[n]))a++,n++;else{let l=-1,c=-1;for(let p=a;p<r.length;p++)if(Xe(r[p],i[n])){l=p;break}for(let p=n;p<i.length;p++)if(Xe(i[p],r[a])){c=p;break}if(l===-1&&c===-1)s.push({op:"replace",index:n,value:i[n]}),a++,n++;else if(l===-1)s.push({op:"add",index:n,value:i[n]}),n++;else if(c===-1)s.push({op:"remove",index:a}),a++;else{s.push({op:"move",index:n,from:l});let p=r[l];r.splice(l,1),r.splice(a,0,p),a++,n++}}return s.sort((l,c)=>l.op==="remove"&&c.op==="remove"?c.index-l.index:0)}function pa(o,e,t,r=[],i={}){if(o===e)return;if(o==null&&e!==null&&e!==void 0){t.push({op:"replace",path:"",value:e});return}if(e==null&&o!==null&&o!==void 0){t.push({op:"replace",path:"",value:null});return}typeof e.toJSON=="function"&&(e=e.toJSON());let s=At(o),a=At(e),n=hi(s),l=hi(a);if(n&&l){Xe(o,e)||t.push({op:"replace",path:de(r),value:e});return}if(a!==s){t.push({op:s===void 0?"add":"replace",path:de(r),value:e});return}if(s==="array"){let u=o,m=sd(u,e,i);for(let f of m){let k=f.index===-1?"-":f.index.toString(),b=[...r,k];f.op==="remove"?(i.invertible&&t.push({op:"test",path:de(b),value:Fr(u[f.index])}),t.push({op:f.op,path:de(b)})):f.op==="replace"&&typeof f.value=="object"&&f.value!==null?pa(u[f.index],f.value,t,b,i):f.op==="move"?t.push({op:"move",from:de([...r,f.from.toString()]),path:de(b)}):t.push({op:f.op,path:de(b),value:f.value})}return}let c=mo(e),p=mo(o);for(let u of c){let h=o[u],m=e[u];Object.prototype.hasOwnProperty.call(o,u)?typeof h=="object"&&h!=null&&typeof m=="object"&&m!==null&&Array.isArray(h)===Array.isArray(m)?pa(h,m,t,[...r,u],i):Xe(h,m)||(i.invertible&&t.push({op:"test",path:de([...r,u]),value:Fr(h)}),t.push({op:"replace",path:de([...r,u]),value:Fr(m)})):t.push({op:"add",path:de([...r,u]),value:Fr(m)})}for(let u of p)Object.prototype.hasOwnProperty.call(e,u)||(i.invertible&&t.push({op:"test",path:de([...r,u]),value:Fr(o[u])}),t.push({op:"remove",path:de([...r,u])}))}function Kr(o,e,t){let r=[];return pa(o,e,r,[],t),r}var pr=Object.create(null);pr.add=0;pr.remove=1;pr.replace=2;pr.move=3;pr.copy=4;pr.test=5;import{nanoid as ld}from"nanoid";function go(o){o.command("domain").description("Manage Data Domains").command("transition [state]").description("Transition the lifecycle state of a data domain (draft, committed, published)").option("--file <fid>","File ID of the data domain").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--ver <ver>","New version (required when transitioning from published to draft)").action(async(t,r)=>{let i=new B({format:O.resolved.format}),s=O.resolved,a=r.org||s.org;if(v.debug(`[domain:transition] Transitioning domain lifecycle. Options: file=${r.file}, org=${a}, ver=${r.ver}, state=${t}`),!a){i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1);return}let n=ee(),l=r.file;if(!l&&process.stdout.isTTY){v.debug("[domain:transition] File ID not provided; listing data domain files for selection...");try{let m=(await n.files.list(a,{filter:{field:"kind",operator:"eq",value:vt}},{token:n.token})).data||[];m.length>0&&(l=await ut("Select a data domain file:",m.map(f=>({name:`${f.info?.name||"Unnamed"} (${f.key})`,value:f.key}))))}catch(h){v.debug(`[domain:transition] Failed to list domain files for selection: ${h}`)}}if(!l){i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID is required.",detail:"Specify --file <fid>."}),process.exit(1);return}let c=t,p=["draft","committed","published"];if(!c&&process.stdout.isTTY&&(c=await ut("Select target lifecycle state:",[{name:"Draft (draft)",value:"draft"},{name:"Committed (committed)",value:"committed"},{name:"Published (published)",value:"published"}])),!c){i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Target lifecycle state is required.",detail:`Specify state as a positional argument (allowed: ${p.join(", ")}).`}),process.exit(1);return}if(!p.includes(c)){i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid lifecycle state '${c}'.`,detail:`Allowed states: ${p.join(", ")}`}),process.exit(1);return}let u;try{u=await n.files.read(a,l,{token:n.token})}catch(h){let m=ie(h);i.error(m),process.exit(1);return}if(u.kind!==vt){i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`File '${l}' is not a data domain.`,detail:`The file kind is '${u.kind}', but expected '${vt}'.`}),process.exit(1);return}try{v.debug(`[domain:transition] Fetching media for file ID '${l}'...`);let{media:h,meta:m}=await n.files.readMedia(a,l,{token:n.token}),f=h;if(f.kind!==Re){i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Invalid data domain schema format.",detail:`The media kind is '${f.kind}', but expected '${Re}'.`}),process.exit(1);return}let k=[];f.dependencyList&&f.dependencyList.length>0&&(v.debug(`[domain:transition] Fetching dependencies: ${JSON.stringify(f.dependencyList)}`),k=(await n.dataCatalog.listDependencies(f.dependencyList,{token:n.token})).data||[]);let b=new Be(f,k,{readOnly:!1}),y=r.ver;if(b.lifecycle==="published"&&c==="draft"&&!y){if(process.stdout.isTTY){let C=b.info.version;y=await Fe(`Enter new version (current published version is ${C}):`)}if(!y){i.error({code:"CLI_ERR_MISSING_REQUIRED",message:"A new version must be specified when creating a draft from a published domain.",detail:"Provide a version with --ver <ver>."}),process.exit(1);return}}v.debug(`[domain:transition] Changing lifecycle state from '${b.lifecycle}' to '${c}'...`),b.changeLifecycle(c,y),v.debug("[domain:transition] Validating data domain structure...");let x=new lr(b).validate();if(x&&x.length>0&&x.filter(q=>q.severity==="error").length>0){i.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Data domain validation failed.",detail:JSON.stringify(x,null,2)}),process.exit(1);return}let S=b.toJSON(),N=Kr(f,S);if(N.length===0){v.debug("[domain:transition] No changes in domain lifecycle detected."),i.success(`Data domain is already in '${c}' state.`);return}v.debug("[domain:transition] Sending patch request to target file media...");let $={id:ld(),timestamp:Date.now(),patch:N,version:m.version},z=await n.files.patchMedia(a,l,$,{token:n.token});v.debug(`[domain:transition] Patch applied successfully. New file version: ${z.newVersion}`),i.success(`Successfully transitioned data domain state to '${c}' (new file version: ${z.newVersion}).`,{fileId:l,state:c,version:b.info.version,fileVersion:z.newVersion})}catch(h){let m=ie(h);i.error(m),process.exit(1);return}})}parseInt(process.versions.node.split(".")[0],10)<22&&(console.error("Error: apinow requires Node.js 22 or higher."),process.exit(1));function yo(){let o=process.argv.indexOf("--format");if(o!==-1&&o+1<process.argv.length&&process.argv[o+1]==="json")return"json";try{return O.resolved.format||"text"}catch{return"text"}}process.on("uncaughtException",o=>{new B({format:yo()}).error({code:"CLI_ERR_UNKNOWN",message:o.message||"An unexpected error occurred.",detail:o.stack}),process.exit(1)});process.on("unhandledRejection",o=>{let e=new B({format:yo()}),t=o instanceof Error?o.message:String(o),r=o instanceof Error?o.stack:void 0;e.error({code:"CLI_ERR_UNKNOWN",message:`Unhandled promise rejection: ${t}`,detail:r}),process.exit(1)});cd({pkg:hr}).notify();O.load();var Le=new dd;Le.name("apinow").description("API NOW! Platform CLI Tool").version(hr.version,"--version").option("--format <format>","Output format: text, json","text").option("--api-url <url>","Override target API server base URL").option("--debug","Enable debug/verbose logging").option("-v, --verbose","Enable verbose logging");Le.hook("preAction",(o,e)=>{let t,r,i=e;for(;i;){let s=i.opts();s.apiUrl&&!t&&(t=s.apiUrl),s.format&&!r&&(r=s.format),(s.debug||s.verbose)&&ga("debug"),i=i.parent}O.saturate({apiUrl:t,format:r}),v.debug(`Executing command: ${e.name()} with args: ${JSON.stringify(e.args)}`)});ya(Le);Aa(Le);xa(Le);$a(Le);Ta(Le);po(Le);uo(Le);go(Le);function bo(o){let e=o.options||[];e.some(t=>t.long==="--api-url")||o.option("--api-url <url>","Override target API server base URL"),e.some(t=>t.long==="--format")||o.option("--format <format>","Output format: text, json"),e.some(t=>t.long==="--debug")||o.option("--debug","Enable debug/verbose logging"),e.some(t=>t.long==="--verbose")||(o.options.some(r=>r.short==="-v")?o.option("--verbose","Enable verbose logging"):o.option("-v, --verbose","Enable verbose logging"));for(let t of o.commands)bo(t)}for(let o of Le.commands)bo(o);await Le.parseAsync(process.argv);
|
|
49
|
+
`)}if(e.defaultValue)return this._unionDefaultValue(e,e.defaultValue);let n=this._readCurrentUnion(i);if(n)return this.processNode(n,{...t,forceName:e.name})}}_unionDefaultValue(e,t,i={}){let s=new xe().generate(t),n=nt(e),l=i.indent||0,c=new Array(l*2).fill(" ").join(""),p=[`${c}<${n}>`],u=new Array(l*2+2).fill(" ").join("");return p.push(`${u}${String(s).trim()}`),p.push(`${c}</${n}>`),p.join(`
|
|
50
|
+
`)}_fileShapeObject(){}_schemaShapeObject(){}_tupleShapeObject(){}_anyShapeObject(e){let{and:t=[],xone:i=[],or:r=[]}=e;if(t.length){let n=structuredClone(e);return n.and=[],n.properties=[],t.forEach(l=>{let{types:c}=l;if(c.includes(d.aml.vocabularies.shapes.ScalarShape)){let p=l;n.properties.push(p)}else if(c.includes(d.w3.shacl.NodeShape))l.properties.forEach(u=>n.properties.push(u));else if(c.includes(d.aml.vocabularies.shapes.ArrayShape)||c.includes(d.aml.vocabularies.shapes.MatrixShape)){let p=l;p.items&&n.properties.push(p.items)}}),this._nodeShapeObject(n)}if(i.length){let{selectedUnions:n=[]}=this.opts,l=i.find(c=>n.includes(c.id));return l||(l=i[0]),this.processNode(l)}if(r.length){let{selectedUnions:n=[]}=this.opts,l=r.find(c=>n.includes(c.id));return l||(l=r[0]),this.processNode(l)}let{examples:s=[]}=e,a=nt(e);if(this.opts.renderExamples&&s&&s.length){let n=s.find(p=>!!p.structuredValue),l=this._exampleToObject(n),c=[];if(typeof l<"u"){let p=" ";c.push(`<${a}>`),c.push(`${p}${l}`),c.push(`</${a}>`)}return c.join(`
|
|
51
|
+
`)}return this._scalarShapeObject(e)}};var zn=Oo(Rn(),1);var zr=Symbol("findAmfType"),Tn=Symbol("findReferenceObject"),fe=Symbol("getArrayItems"),Dn=Symbol("computeReferenceSecurity"),sa=o=>{class e extends o{_amf;__cachedKeys;__lastSetValue;get amf(){return this._amf}set amf(i){if(this._amf===i||this.__lastSetValue===i)return;this.__lastSetValue=i;let r=i?this._expand(i):void 0;this.__cachedKeys={},this._amf=r,this._amfChanged(r)}_amfChanged(i){}_expand(i){return zn.AmfModelExpander.expand(i)}_getAmfKey(i,r){if(!i)return"";let{amf:s}=this;if(!s&&!r)return i;Array.isArray(s)&&([s]=s),this.__cachedKeys||(this.__cachedKeys={});let a=r||s&&s["@context"];if(!a||!i)return i;let n=this.__cachedKeys;if(i in n)return n[i];i=String(i);let l=i.indexOf("#"),c=i.substring(0,l+1),p=Object.keys(a);for(let u=0,h=p.length;u<h;u++){let m=p[u];if(a[m]===i)return n[i]=m,m;if(l===-1&&i.indexOf(a[m])===0){let f=i.replace(a[m],`${m}:`);return n[i]=f,f}if(a[m]===c){let f=`${m}:${i.substring(l+1)}`;return n[i]=f,f}}return i}_ensureAmfModel(i){if(i&&(Array.isArray(i)&&([i]=i),this._hasType(i,d.aml.vocabularies.document.Document)))return i}_ensureArray(i){if(i)return i instanceof Array?i:[i]}_getValue(i,r,s){let a=this._getAmfKey(r,s);if(!a)return;let n=i&&i[a];if(!n)return n;if(Array.isArray(n)&&([n]=n),!n)return;let l=typeof n;return["string","number","boolean","undefined"].includes(l)?n:n["@value"]}_getValueArray(i,r,s){let a=this._getAmfKey(r,s);if(!a)return;let n=i&&this._ensureArray(i[a]);if(Array.isArray(n))return n.map(l=>l["@value"]||l)}[fe](i,r,s){let a=this._getAmfKey(r,s);if(!a)return;let n=i&&this._ensureArray(i[a]);if(Array.isArray(n))return n}_getLinkValue(i,r,s){let a=this._getAmfKey(r,s);if(!a)return;let n=i&&i[a];if(n&&(Array.isArray(n)&&([n]=n),!!n))return n["@id"]}_getLinkValues(i,r,s){let a=this._getAmfKey(r,s);if(!a)return;let n=i&&i[a];if(n)return Array.isArray(n)||(n=[n]),n.map(l=>l["@id"])}_hasType(i,r,s){let a=this._ensureArray(i&&i["@type"]);if(!a||!a.length)return!1;let n=this._getAmfKey(r,s);for(let l of a)if(l===n)return!0;return!1}_hasProperty(i,r,s){let a=this._getAmfKey(r,s);return!!(i&&a&&a in i)}_computePropertyArray(i,r,s){if(!i)return;let a=this._getAmfKey(r,s);if(!a)return;let n=this._ensureArray(i&&i[a]);if(!(!n||!Array.isArray(n)))return n}_computeApiVersion(i,r){let s=this._computeApi(i);if(s)return this._getValue(s,d.aml.vocabularies.core.version,r)}_computeEncodes(i,r){if(!i)return;Array.isArray(i)&&([i]=i);let s=this._getAmfKey(d.aml.vocabularies.document.encodes,r);if(!s)return;let a=i[s];if(a)return Array.isArray(a)?a[0]:a}_computeDeclares(i,r){if(!i||(Array.isArray(i)&&([i]=i),!i))return;let s=this._getAmfKey(d.aml.vocabularies.document.declares,r);if(!s)return;let a=this._ensureArray(i[s]);return Array.isArray(a)?a:void 0}_computeReferences(i,r){if(!i||(Array.isArray(i)&&([i]=i),!i))return;let s=this._getAmfKey(d.aml.vocabularies.document.references,r);if(!s)return;let a=this._ensureArray(i[s]);return a instanceof Array?a:void 0}_computeWebApi(i,r){let s=this._computeEncodes(i,r);if(s&&this._hasType(s,d.aml.vocabularies.apiContract.WebAPI,r))return s}_computeApi(i,r){let s=this._computeEncodes(i,r);if(s&&(this._isAPI(i,r)||this._isWebAPI(i,r)||this._isAsyncAPI(i,r)))return s}_isWebAPI(i,r){let s=this._computeEncodes(i,r);return s?this._hasType(s,d.aml.vocabularies.apiContract.WebAPI,r):!1}_isAsyncAPI(i,r){let s=this._computeEncodes(i,r);return s?this._hasType(s,d.aml.vocabularies.apiContract.AsyncAPI,r):!1}_isAPI(i,r){let s=this._computeEncodes(i,r);return s?this._hasType(s,d.aml.vocabularies.apiContract.API,r):!1}_isValidServerPartial(i,r){if(Array.isArray(i)&&([i]=i),!i)return!1;let s=d.aml.vocabularies.apiContract.Operation,a=d.aml.vocabularies.apiContract.EndPoint,n=[this._getAmfKey(s,r),this._getAmfKey(a,r)],l=i["@type"];for(let c of l)if(n.indexOf(c)!==-1)return!0;return!1}_getServers(i={},r){let{endpointId:s,methodId:a}=i,{amf:n}=this;if(!n)return;let l=this._computeApi(n,r);if(Array.isArray(l)&&([l]=l),!l)if(this._isValidServerPartial(n,r))l=n;else return;let c=this._getAmfKey(d.aml.vocabularies.apiContract.server,r),p=()=>this[fe](l,c,r),u=()=>{let m=this._computeEndpointModel(l,s,r),f=this[fe](m,c,r);return f||p()},h=()=>{let m=this._computeMethodModel(l,a,r),f=this[fe](m,c,r);return f||u()};return a?h():s?u():p()}_computeExpects(i,r){let s=d.aml.vocabularies.apiContract.Operation,a=d.aml.vocabularies.apiContract.expects;if(this._hasType(i,s,r)){let n=this._getAmfKey(a,r),l=this._ensureArray(i[n]);if(l)return Array.isArray(l)?l[0]:l}}_computeEndpoints(i,r){if(!i)return[];let s=d.aml.vocabularies.apiContract.endpoint,a=this._getAmfKey(s,r);return this._ensureArray(i[a])}_computeEndpointModel(i,r,s){if(this._hasType(i,d.aml.vocabularies.apiContract.EndPoint,s))return i;let a=this._computeEndpoints(i,s);if(a)return a.find(n=>n["@id"]===r)}_computeMethodModel(i,r,s){let a=this.__computeMethodsListForMethod(i,r,s);if(a)return a.find(n=>n["@id"]===r)}_computeMethodEndpoint(i,r,s){if(!i||!r)return;if(this._hasType(i,d.aml.vocabularies.apiContract.EndPoint,s))return i;let a=this._computeEndpoints(i,s);if(!a)return;let n=this._getAmfKey(d.aml.vocabularies.apiContract.supportedOperation,s);for(let l=0,c=a.length;l<c;l++){let p=a[l],u=p[n];if(u){Array.isArray(u)||(u=[u]);for(let h=0,m=u.length;h<m;h++)if(u[h]["@id"]===r)return p}}}__computeMethodsListForMethod(i,r,s){let a=this._computeMethodEndpoint(i,r,s);if(!a)return;let n=this._getAmfKey(d.aml.vocabularies.apiContract.supportedOperation,s);return this._ensureArray(a[n])}_computeType(i,r,s,a){if(!i&&!r||!s)return;let n=s.replace("amf://id",""),l=i&&i.find(c=>c["@id"]===s||c["@id"]===n);if(!l&&r&&r.length)for(let c=0,p=r.length;c<p&&!(this._hasType(r[c],d.aml.vocabularies.document.Module)&&(l=this._computeReferenceType(r[c],s,a),l));c++);return l}[zr](i,r){let{amf:s}=this;if(!s||!i)return;Array.isArray(s)&&([s]=s);let a=this._computeDeclares(s,r),n=i.replace("amf://id","");if(Array.isArray(a)){let l=a.find(c=>c["@id"]===i||c["@id"]===n);if(l)return l}return this[Tn](i)}[Tn](i,r){let{amf:s}=this;if(Array.isArray(s)&&([s]=s),!s)return;let a=this._computeReferences(s,r);if(!Array.isArray(a)||!a.length)return;let n=i.replace("amf://id","");for(let l=0,c=a.length;l<c;l++){let p=a[l],u=this._computeDeclares(p,r);if(Array.isArray(u))for(let h=0,m=u.length;h<m;h++){let f=u[h];if(Array.isArray(f)&&([f]=f),f["@id"]===i||f["@id"]===n)return f}}}_computeReferenceType(i,r,s){let a=this._computeDeclares(i,s);if(!a||!r)return;let n=r.replace("amf://id",""),l=a.find(c=>(Array.isArray(c)&&([c]=c),c["@id"]===r||c["@id"]===n));return Array.isArray(l)&&([l]=l),this._resolve(l)}_computeDocument(i,r,s){if(!i||!r)return;let a=this._getAmfKey(d.aml.vocabularies.core.documentation,s),n=this._ensureArray(i[a]);return n&&n.find(l=>l["@id"]===r)}_resolve(i,r){let{amf:s}=this;if(typeof i!="object"||Array.isArray(i)||!s||i.__apicResolved)return i;let a=this._getAmfKey(d.aml.vocabularies.document.linkTarget,r),n=this._ensureArray(i[a]),l;if(n){let u=n[0]["@id"];if(u===i["@id"])return i.__apicResolved=!0,i;l=this._getLinkTarget(s,u,r)}else if(a=this._getAmfKey(d.aml.vocabularies.document.referenceId,r),n=this._ensureArray(i[a]),n){let u=n[0]["@id"];if(u===i["@id"])return i.__apicResolved=!0,i;l=this._getReferenceId(s,u,r)}if(!l)return this._resolveRecursive(i),i.__apicResolved=!0,i;let c={...l};delete c["@id"];let p=c["@type"];return p&&(i["@type"]?i["@type"]=i["@type"].concat(p):i["@type"]=p,delete c["@type"]),this._mergeShapes(i,c,r),i.__apicResolved=!0,this._resolveRecursive(i),i}_getLinkTarget(i,r,s){if(!i||!r)return;let a,n=this._computeDeclares(i,s);if(n&&(a=this._findById(n,r)),!a){let l=this._computeReferences(i,s);a=this._obtainShapeFromReferences(l,r,s)}if(a)return a=this._resolve(a),a}_obtainShapeFromReferences(i,r,s){if(!Array.isArray(i)||!i.length)return;let a;for(let n of i){let l=this._computeEncodes(n,s);if(l&&l["@id"]===r){a=l;break}if(!l&&(a=this._findById(this._computeDeclares(n,s),r),a))break}return a}_findById(i,r){if(!i)return;let s;for(let a of i)if(a&&a["@id"]===r){s=a;break}return s}_getReferenceId(i,r,s){if(!i||!r)return;let a=this._computeReferences(i,s);if(a)for(let n of a){let l=this._computeEncodes(n,s);if(l&&l["@id"]===r)return l}}_resolveRecursive(i,r){Object.keys(i).forEach(s=>{let a=i[s];if(Array.isArray(a))for(let n=0,l=a.length;n<l;n++)a[n]=this._resolve(a[n]);else typeof a=="object"&&(i[s]=this._resolve(a,r))})}_mergeShapes(i,r,s){let a={...i,...r};return[{key:this._getAmfKey(d.aml.vocabularies.docSourceMaps.sources,s),merger:this._mergeSourceMapsSources.bind(this)}].forEach(({key:l,merger:c})=>{this._hasProperty(a,l,s)&&(a[l]=c(i,r,s))}),Object.assign(i,a)}_mergeSourceMapsSources(i,r,s){let a=this._getAmfKey(d.aml.vocabularies.docSourceMaps.sources,s),n=i[a]||{};Array.isArray(n)&&(n=n[0]);let l=r[a]||{};return Array.isArray(l)&&(l=l[0]),[Object.assign(n,l)]}_expandKey(i,r){let{amf:s}=this;if(!i||typeof i!="string"||!s&&!r)return i;Array.isArray(s)&&([s]=s);let a=r||s&&s["@context"];if(!a)return i;let[n,l]=i.split(":");if(!n||!l)return i;let c=a[n];return c?`${c}${l}`:i}findSecurityScheme(i,r){let{amf:s}=this,a=this._computeDeclares(s,r),n;if(a&&(n=a.find(c=>c["@id"]===i)),n)return n=this._resolve(n),n;let l=this._computeReferences(s,r);if(Array.isArray(l)&&l.length){for(let c of l)if(this._hasType(c,d.aml.vocabularies.document.Module,r)&&(n=this[Dn](c,i,r),n))return n=this._resolve(n),n}}[Dn](i,r,s){let a=this._computeDeclares(i,s);if(!a)return;let n=a.find(l=>{let c=l;return Array.isArray(c)&&([c]=c),c["@id"]===r});return Array.isArray(n)&&([n]=n),this._resolve(n)}getByType(i,r,s){if(!i)return[];let a=[],n=this._computeDeclares(i),l=this._getAmfKey(r,s);n&&n.length&&n.forEach(p=>{this._hasType(p,l)&&a.push(p)});let c=this._computeReferences(i);if(Array.isArray(c)&&c.length){for(let p of c)if(this._hasType(p,d.aml.vocabularies.document.Module)){let u=this.getByType(p,r,s);u.length&&(a=a.concat(u))}}return a}}return e};var aa=class extends sa(Object){constructor(e){super(),e&&(this.amf=e)}readTypes(e,t){let i=e;return typeof i=="string"&&(i=[i]),Array.isArray(i)?i.map(r=>this._expandKey(r,t)):[]}apiSummary(e){let t=e["@context"],i={id:e["@id"],types:this.readTypes(e["@type"],t),customDomainProperties:this.customDomainProperties(e,t),sourceMaps:this.sourceMap(e),schemes:[],accepts:[],contentType:[],documentations:[],tags:[]},r=this._getValue(e,d.aml.vocabularies.core.name,t);r&&typeof r=="string"&&(i.name=r);let s=this._getValue(e,d.aml.vocabularies.core.description,t);s&&typeof s=="string"&&(i.description=s);let a=this._getValue(e,d.aml.vocabularies.core.version,t);a&&typeof a=="string"&&(i.version=a);let n=this._getValue(e,d.aml.vocabularies.core.termsOfService,t);n&&typeof n=="string"&&(i.termsOfService=n);let l=e[this._getAmfKey(d.aml.vocabularies.apiContract.accepts,t)];Array.isArray(l)&&l.length&&(i.accepts=this._getValueArray(e,d.aml.vocabularies.apiContract.accepts,t));let c=e[this._getAmfKey(d.aml.vocabularies.apiContract.contentType,t)];Array.isArray(c)&&c.length&&(i.contentType=this._getValueArray(e,d.aml.vocabularies.apiContract.contentType,t));let p=e[this._getAmfKey(d.aml.vocabularies.apiContract.scheme,t)];Array.isArray(p)&&p.length&&(i.schemes=this._getValueArray(e,d.aml.vocabularies.apiContract.scheme,t));let u=e[this._getAmfKey(d.aml.vocabularies.core.provider,t)];Array.isArray(u)&&([u]=u),u&&(i.provider=this.provider(u));let h=e[this._getAmfKey(d.aml.vocabularies.core.license,t)];Array.isArray(h)&&([h]=h),h&&(i.license=this.license(h));let m=e[this._getAmfKey(d.aml.vocabularies.apiContract.tag,t)];Array.isArray(m)&&m.length&&(i.tags=m.map(b=>this.tag(b)));let f=e[this._getAmfKey(d.aml.vocabularies.core.documentation,t)];return Array.isArray(f)&&f.length&&(i.documentations=f.map(b=>this.documentation(b))),i}api(e,t){let i=t||e["@context"],r=this.apiSummary(e);r.endPoints=[],r.servers=[],r.security=[];let s=e[this._getAmfKey(d.aml.vocabularies.apiContract.endpoint,i)];Array.isArray(s)&&s.length&&(r.endPoints=s.map(l=>this.endPoint(l,i)));let a=e[this._getAmfKey(d.aml.vocabularies.apiContract.server,i)];Array.isArray(a)&&a.length&&(r.servers=a.map(l=>this.server(l,i)));let n=e[this._getAmfKey(d.aml.vocabularies.security.security,i)];return Array.isArray(n)&&n.length&&(r.security=n.map(l=>this.securityRequirement(l,i))),r}webApi(e,t){return this.api(e,t)}asyncApi(e,t){return this.api(e,t)}provider(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getLinkValue(e,d.aml.vocabularies.core.url,i);a&&typeof a=="string"&&(r.url=a);let n=this._getValue(e,d.aml.vocabularies.core.email,i);return n&&typeof n=="string"&&(r.email=n),r}license(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getLinkValue(e,d.aml.vocabularies.core.url,i);return a&&typeof a=="string"&&(r.url=a),r}server(e,t){let i=t||e["@context"],r=this._getValue(e,d.aml.vocabularies.core.urlTemplate,i)||"",s={id:e["@id"],types:this.readTypes(e["@type"],i),url:r,variables:[],customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},a=this._getValue(e,d.aml.vocabularies.core.description,i);a&&typeof a=="string"&&(s.description=a);let n=e[this._getAmfKey(d.aml.vocabularies.apiContract.variable,i)];Array.isArray(n)&&n.length&&(s.variables=n.map(u=>this.parameter(u,i)));let l=this._getValue(e,d.aml.vocabularies.apiContract.protocol,i),c=this._getValue(e,d.aml.vocabularies.apiContract.protocolVersion,i);l&&(s.protocol=l),c&&(s.protocolVersion=c);let p=e[this._getAmfKey(d.aml.vocabularies.security.security,i)];return Array.isArray(p)&&p.length&&(s.security=p.map(u=>this.securityRequirement(u,i))),s}parameter(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),payloads:[],examples:[],customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.paramName,i);a&&typeof a=="string"&&(r.paramName=a);let n=this._getValue(e,d.aml.vocabularies.core.description,i);n&&typeof n=="string"&&(r.description=n);let l=this._getValue(e,d.aml.vocabularies.apiContract.required,i);typeof l=="boolean"&&(r.required=l);let c=this._getValue(e,d.aml.vocabularies.apiContract.allowEmptyValue,i);typeof c=="boolean"&&(r.allowEmptyValue=c);let p=this._getValue(e,d.aml.vocabularies.document.deprecated,i);typeof p=="boolean"&&(r.deprecated=p);let u=this._getValue(e,d.aml.vocabularies.apiContract.explode,i);typeof u=="boolean"&&(r.explode=u);let h=this._getValue(e,d.aml.vocabularies.apiContract.allowReserved,i);typeof h=="boolean"&&(r.allowReserved=h);let m=this._getValue(e,d.aml.vocabularies.apiContract.style,i);m&&typeof m=="string"&&(r.style=m);let f=this._getValue(e,d.aml.vocabularies.apiContract.binding,i);f&&typeof f=="string"&&(r.binding=f);let b=e[this._getAmfKey(d.aml.vocabularies.shapes.schema,i)];if(Array.isArray(b)&&b.length){let[I]=b;r.schema=this.unknownShape(I,{trackedId:e["@id"]},i)}let k=e[this._getAmfKey(d.aml.vocabularies.apiContract.payload,i)];Array.isArray(k)&&k.length&&(r.payloads=k.map(I=>this.payload(I,i)));let S=e[this._getAmfKey(d.aml.vocabularies.apiContract.examples,i)];return Array.isArray(S)&&S.length&&(r.examples=S.map(I=>this.example(I,i))),r}unknownShape(e,t,i){let r=i||e["@context"],s=this.readTypes(e["@type"],r);return s.includes(d.aml.vocabularies.shapes.ScalarShape)?this.scalarShape(e,t,r):s.includes(d.w3.shacl.NodeShape)?this.nodeShape(e,t,r):s.includes(d.aml.vocabularies.shapes.UnionShape)?this.unionShape(e,t,r):s.includes(d.aml.vocabularies.shapes.FileShape)?this.fileShape(e,t,r):s.includes(d.aml.vocabularies.shapes.SchemaShape)?this.schemaShape(e,t,r):s.includes(d.aml.vocabularies.shapes.TupleShape)?this.tupleShape(e,t,r):s.includes(d.aml.vocabularies.shapes.ArrayShape)||s.includes(d.aml.vocabularies.shapes.MatrixShape)?this.arrayShape(e,t,r):s.includes(d.aml.vocabularies.shapes.RecursiveShape)?this.recursiveShape(e,r):this.anyShape(e,t,r)}isLink(e,t){let i=t||e["@context"];return!!this._getLinkValue(e,d.aml.vocabularies.document.linkTarget,i)}getLinkTarget(e,t){let i=t||e["@context"],r=this._getLinkValue(e,d.aml.vocabularies.document.linkTarget,i);if(r)return this[zr](r,i)}shape(e,t){let i=t||e["@context"];this._resolve(e);let r,s=e;if(this.isLink(s)){r=this._getValue(s,d.aml.vocabularies.document.linkLabel,i);let j=this._getLinkValue(s,d.aml.vocabularies.document.linkTarget,i),z=this[zr](j,i);z&&(s=z)}let a={id:s["@id"],types:this.readTypes(e["@type"],i),values:[],inherits:[],or:[],and:[],xone:[],customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)};r&&(a.linkLabel=r);let n=this._getValue(s,d.w3.shacl.name,i);n&&typeof n=="string"&&(a.name=n);let l=this._getValue(s,d.aml.vocabularies.core.displayName,i);if(l&&typeof l=="string")a.displayName=l;else{let j=this._getValue(s,d.aml.vocabularies.core.name,i);j&&typeof j=="string"&&(a.displayName=j)}let c=this._getValue(s,d.aml.vocabularies.core.description,i);c&&typeof c=="string"&&(a.description=c);let p=this._getValue(s,d.w3.shacl.defaultValueStr,i);p&&typeof p=="string"&&(a.defaultValueStr=p);let u=this._getValue(s,d.aml.vocabularies.shapes.deprecated,i);typeof u=="boolean"&&(a.deprecated=u);let h=this._getValue(s,d.aml.vocabularies.shapes.readOnly,i);typeof h=="boolean"&&(a.readOnly=h);let m=this._getValue(s,d.aml.vocabularies.shapes.writeOnly,i);typeof m=="boolean"&&(a.writeOnly=m);let f=s[this._getAmfKey(d.w3.shacl.defaultValue,i)];Array.isArray(f)&&f.length&&(a.defaultValue=this.unknownDataNode(f[0],i));let b=this._getAmfKey(d.w3.shacl.or,i),k=s[b];Array.isArray(k)&&k.length&&(a.or=k.map(j=>this.unknownShape(j,void 0,i)));let S=this._getAmfKey(d.w3.shacl.and,i),I=s[S];Array.isArray(I)&&I.length&&(a.and=I.map(j=>this.unknownShape(j,void 0,i)));let D=this._getAmfKey(d.w3.shacl.xone,i),w=s[D];Array.isArray(w)&&w.length&&(a.xone=w.map(j=>this.unknownShape(j,void 0,i)));let v=s[this._getAmfKey(d.w3.shacl.in,i)];if(Array.isArray(v)&&v.length){let[j]=v,z=d.w3.rdfSchema.key,J=this._getAmfKey(z,i);Object.keys(j).forEach(ee=>{if(ee.startsWith(z)||ee.startsWith(J)){let G=j[ee];Array.isArray(G)&&([G]=G);let ge=this.unknownDataNode(G,i);ge&&a.values.push(ge)}})}let E=this._getAmfKey(d.w3.shacl.not,i),R=s[E];return R&&(Array.isArray(R)&&([R]=R),a.not=this.unknownShape(R,void 0,i)),a}anyShape(e,t={},i){let r=i||e["@context"],s=e,a=this.shape(s,r);if(this.isLink(s)){let p=this.getLinkTarget(s,r);p&&(s=p)}a.examples=[];let n=s[this._getAmfKey(d.aml.vocabularies.apiContract.examples,r)];if(Array.isArray(n)&&n.length)if(t.trackedId){let p=this.filterTrackedExamples(n,t.trackedId,r);a.examples=p.map(u=>this.example(u,r))}else{let p=this.filterNonTrackedExamples(n,r);a.examples=p.map(u=>this.example(u,r))}let l=s[this._getAmfKey(d.aml.vocabularies.core.documentation,r)];if(Array.isArray(l)&&l.length){let[p]=l;a.documentation=this.documentation(p,r)}let c=s[this._getAmfKey(d.aml.vocabularies.shapes.xmlSerialization,r)];return Array.isArray(c)&&c.length&&(a.xmlSerialization=this.xmlSerializer(c[0],r)),a}filterTrackedExamples(e,t,i){let{docSourceMaps:r}=d.aml.vocabularies,s=this._getAmfKey(r.sources,i),a=this._getAmfKey(r.trackedElement,i),n=t.indexOf("amf")===-1?`amf://id${t}`:t;return e.filter(l=>{let c=l;Array.isArray(c)&&([c]=c);let p=c[s];if(!p)return!0;Array.isArray(p)&&([p]=p);let u=p[a];if(!u)return!0;Array.isArray(u)&&([u]=u);let{value:h}=this.synthesizedField(u,i);if(!h)return!0;let m=h.split(",");return m.indexOf(n)!==-1||m.indexOf(t)!==-1})}filterNonTrackedExamples(e,t){let{docSourceMaps:i}=d.aml.vocabularies,r=this._getAmfKey(i.sources,t),s=this._getAmfKey(i.trackedElement,t);return e.filter(a=>{let n=a;Array.isArray(n)&&([n]=n);let l=n[r];if(!l)return!0;Array.isArray(l)&&([l]=l);let c=l[s];if(!c)return!0;Array.isArray(c)&&([c]=c);let{value:p}=this.synthesizedField(c,t);return!p})}scalarShape(e,t={},i){let r=i||e["@context"],s=e,a=this.anyShape(s,t,r);if(this.isLink(s)){let b=this.getLinkTarget(s,r);b&&(s=b)}let n=this._getValue(s,d.w3.shacl.pattern,r);n&&typeof n=="string"&&(a.pattern=n);let l=this._getLinkValue(s,d.w3.shacl.datatype,r);l&&typeof l=="string"&&(a.dataType=l);let c=this._getValue(s,d.aml.vocabularies.shapes.format,r);c&&typeof c=="string"&&(a.format=c);let p=this._getValue(s,d.aml.vocabularies.shapes.multipleOf,r);typeof p=="number"&&(a.multipleOf=p);let u=this._getValue(s,d.w3.shacl.minInclusive,r);typeof u=="number"&&(a.minimum=u,a.exclusiveMinimum=!1);let h=this._getValue(s,d.w3.shacl.maxInclusive,r);typeof h=="number"&&(a.maximum=h,a.exclusiveMaximum=!1);let m=this._getValue(s,d.w3.shacl.minLength,r);typeof m=="number"&&(a.minLength=m);let f=this._getValue(s,d.w3.shacl.maxLength,r);return typeof f=="number"&&(a.maxLength=f),a}nodeShape(e,t={},i){let r=i||e["@context"],s=e,a=this.anyShape(s,t,r);if(this.isLink(s)){let h=this.getLinkTarget(s,r);h&&(s=h)}let n=this._getValue(s,d.aml.vocabularies.shapes.discriminator,r);n&&typeof n=="string"&&(a.discriminator=n);let l=this._getValue(s,d.aml.vocabularies.shapes.discriminatorValue,r);l&&typeof l=="string"&&(a.discriminatorValue=l);let c=this._getValue(s,d.w3.shacl.closed,r);typeof c=="boolean"&&(a.closed=c),a.customShapeProperties=[],a.customShapePropertyDefinitions=[],a.dependencies=[];let p=s[this._getAmfKey(d.w3.shacl.property,r)];Array.isArray(p)&&p.length?a.properties=p.map(h=>this.propertyShape(h,r)):a.properties=[];let u=s[this._getAmfKey(d.w3.shacl.additionalPropertiesSchema,r)];if(Array.isArray(u)&&u.length===1){let[h]=u;a.additionalPropertiesSchema=this.unknownShape(h,void 0,r)}return a}propertyShape(e,t){let i=t||e["@context"],r=e,s=this.shape(r,i);if(this.isLink(r)){let p=this.getLinkTarget(r,i);p&&(r=p)}let a=this._getLinkValue(r,d.w3.shacl.path,i);a&&typeof a=="string"&&(s.path=a);let n=this._getValue(r,d.w3.shacl.minCount,i);typeof n=="number"&&(s.minCount=n);let l=this._getValue(r,d.w3.shacl.maxCount,i);typeof l=="number"&&(s.maxCount=l);let c=r[this._getAmfKey(d.aml.vocabularies.shapes.range,i)];if(Array.isArray(c)&&c.length){let[p]=c;s.range=this.unknownShape(p,void 0,i)}return s}unionShape(e,t={},i){let r=i||e["@context"],s=e[this._getAmfKey(d.aml.vocabularies.shapes.anyOf,r)],a=this.anyShape(e,t,r);if(Array.isArray(s)&&s.length){let n={...t,trackedId:void 0};a.anyOf=s.map(l=>this.unknownShape(l,n,r))}else a.anyOf=[];return a}fileShape(e,t={},i){let r=i||e["@context"],s=e,a=this.anyShape(s,t,r);if(this.isLink(s)){let b=this.getLinkTarget(s,r);b&&(s=b)}let n=this._getValue(s,d.w3.shacl.pattern,r);n&&typeof n=="string"&&(a.pattern=n);let l=this._getValueArray(s,d.aml.vocabularies.shapes.fileType,r);Array.isArray(l)&&l.length&&(a.fileTypes=l);let c=this._getValue(s,d.w3.shacl.minLength,r);typeof c=="number"&&(a.minLength=c);let p=this._getValue(s,d.w3.shacl.maxLength,r);typeof p=="number"&&(a.maxLength=p);let u=this._getValue(s,d.w3.shacl.minInclusive,r);typeof u=="number"&&(a.minimum=u,a.exclusiveMinimum=!1);let h=this._getValue(s,d.w3.shacl.maxInclusive,r);typeof h=="number"&&(a.maximum=h,a.exclusiveMaximum=!1);let m=this._getValue(s,d.aml.vocabularies.shapes.format,r);m&&typeof m=="string"&&(a.format=m);let f=this._getValue(s,d.aml.vocabularies.shapes.multipleOf,r);return typeof f=="number"&&(a.multipleOf=f),a}schemaShape(e,t={},i){let r=i||e["@context"],s=e,a=this.anyShape(s,t,r);if(this.isLink(s)){let c=this.getLinkTarget(s,r);c&&(s=c)}let n=this._getValue(s,d.aml.vocabularies.core.mediaType,r);n&&typeof n=="string"&&(a.mediaType=n);let l=this._getValue(s,d.aml.vocabularies.document.raw,r);return l&&typeof l=="string"&&(a.raw=l),a}recursiveShape(e,t){let i=t||e["@context"],r=e,s=this.shape(r,i);if(this.isLink(r)){let n=this.getLinkTarget(r,i);n&&(r=n)}let a=this._getLinkValue(r,d.aml.vocabularies.shapes.fixPoint,i);return a&&typeof a=="string"&&(s.fixPoint=a),s}dataArrangeShape(e,t={},i){let r=i||e["@context"];return this.anyShape(e,t,r)}arrayShape(e,t={},i){let r=i||e["@context"],s=e,a=this.dataArrangeShape(s,t,r);if(this.isLink(s)){let l=this.getLinkTarget(s,r);l&&(s=l)}let n=s[this._getAmfKey(d.aml.vocabularies.shapes.items,r)];if(Array.isArray(n)&&n.length){let[l]=n;a.items=this.unknownShape(l,void 0,r)}return a}tupleShape(e,t,i){let r=i||e["@context"],s=e,a=this.dataArrangeShape(s,t,r);if(this.isLink(s)){let c=this.getLinkTarget(s,r);c&&(s=c)}let n=s[this._getAmfKey(d.aml.vocabularies.shapes.items,r)],l=this._getAmfKey(d.w3.rdfSchema.key,r);return Array.isArray(n)&&n.length?(a.items=[],n.forEach(c=>{Array.isArray(c)&&([c]=c),Object.keys(c).filter(p=>p.startsWith(l)).forEach(p=>{let u=c[p];Array.isArray(u)&&([u]=u);let h=this.unknownShape(u,void 0,r);a.items.push(h)})})):a.items=[],a}documentation(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getLinkValue(e,d.aml.vocabularies.core.url,i);s&&typeof s=="string"&&(r.url=s);let a=this._getValue(e,d.aml.vocabularies.core.description,i);a&&typeof a=="string"&&(r.description=a);let n=this._getValue(e,d.aml.vocabularies.core.title,i);return n&&typeof n=="string"&&(r.title=n),r}example(e,t){let i=t||e["@context"];this._resolve(e);let r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),strict:!1},s=this._getValue(e,d.aml.vocabularies.document.strict,i);typeof s=="boolean"&&(r.strict=s);let a=this._getValue(e,d.aml.vocabularies.core.name,i);a&&typeof a=="string"&&(r.name=a);let n=this._getValue(e,d.aml.vocabularies.core.displayName,i);n&&typeof n=="string"&&(r.displayName=n);let l=this._getValue(e,d.aml.vocabularies.core.description,i);l&&typeof l=="string"&&(r.description=l);let c=this._getValue(e,d.aml.vocabularies.document.raw,i);c&&typeof c=="string"&&(r.value=c);let p=this._getValue(e,d.aml.vocabularies.document.location,i);p&&typeof p=="string"&&(r.location=p);let u=e[this._getAmfKey(d.aml.vocabularies.document.structuredValue,i)];if(Array.isArray(u)&&u.length){let[h]=u;r.structuredValue=this.unknownDataNode(h,i)}return r}xmlSerializer(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.shapes.xmlAttribute,i);typeof s=="boolean"&&(r.attribute=s);let a=this._getValue(e,d.aml.vocabularies.shapes.xmlWrapped,i);typeof a=="boolean"&&(r.wrapped=a);let n=this._getValue(e,d.aml.vocabularies.shapes.xmlName,i);n&&typeof n=="string"&&(r.name=n);let l=this._getValue(e,d.aml.vocabularies.shapes.xmlNamespace,i);l&&typeof l=="string"&&(r.namespace=l);let c=this._getValue(e,d.aml.vocabularies.shapes.xmlPrefix,i);return c&&typeof c=="string"&&(r.prefix=c),r}unknownDataNode(e,t){let i=this.readTypes(e["@type"],t);if(i.includes(d.aml.vocabularies.data.Scalar))return this.scalarNode(e,t);if(i.includes(d.aml.vocabularies.data.Object))return this.objectNode(e,t);if(i.includes(d.aml.vocabularies.data.Array))return this.arrayNode(e,t)}dataNode(e,t){let i={id:e["@id"],types:this.readTypes(e["@type"],t),customDomainProperties:this.customDomainProperties(e,t)},r=this._getValue(e,d.aml.vocabularies.core.name,t);return r&&typeof r=="string"&&(i.name=r),i}scalarNode(e,t){let i=t||e["@context"],r=this.dataNode(e,t),s=this._getValue(e,d.aml.vocabularies.data.value,i);s&&typeof s=="string"&&(r.value=s);let a=this._getLinkValue(e,d.w3.shacl.datatype,i);return a&&typeof a=="string"&&(r.dataType=a),r}objectNode(e,t){let i=t||e["@context"],r=this.dataNode(e,t);r.properties={};let s=d.aml.vocabularies.data.key,a=`${this._getAmfKey(s,i)}:`;return Object.keys(e).forEach(n=>{if(n.startsWith(s)||n.startsWith(a)){let l=e[n];Array.isArray(l)&&([l]=l);let c=n.replace(s,"").replace(a,""),p=this.unknownDataNode(l,t);p&&(r.properties[c]=p)}}),r}arrayNode(e,t){let i=t||e["@context"],r=this.dataNode(e,i);r.members=[];let s=this._computePropertyArray(e,d.w3.rdfSchema.member);return Array.isArray(s)&&s.length&&s.forEach(a=>{let n=this.unknownDataNode(a);n&&r.members.push(n)}),r}customDomainProperties(e,t){let i=[],r=t||e["@context"],s=this._getLinkValues(e,d.aml.vocabularies.document.customDomainProperties,r);return Array.isArray(s)&&s.length&&s.forEach(a=>{let n=`@base:${a}`,l=e[a]||e[n];if(!l)return;Array.isArray(l)&&([l]=l);let c=this.unknownDataNode(l,r),p=this._getValue(l,d.aml.vocabularies.core.extensionName,r);if(!p||!c)return;let u={id:a,name:p,extension:c};i.push(u)}),i}endPoint(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e),path:"",operations:[],parameters:[],payloads:[],servers:[],security:[],extends:[]},s=this._getValue(e,d.aml.vocabularies.apiContract.path,i);s&&typeof s=="string"&&(r.path=s);let a=this._getValue(e,d.aml.vocabularies.core.name,i);a&&typeof a=="string"&&(r.name=a);let n=this._getValue(e,d.aml.vocabularies.core.description,i);n&&typeof n=="string"&&(r.description=n);let l=this._getValue(e,d.aml.vocabularies.core.summary,i);l&&typeof l=="string"&&(r.summary=l);let c=this[fe](e,d.aml.vocabularies.apiContract.supportedOperation,i);Array.isArray(c)&&c.length&&(r.operations=c.map(b=>this.operation(b,i)));let p=this[fe](e,d.aml.vocabularies.apiContract.parameter,i);Array.isArray(p)&&p.length&&(r.parameters=p.map(b=>this.parameter(b,i)));let u=this[fe](e,d.aml.vocabularies.apiContract.payload,i);Array.isArray(u)&&u.length&&(r.payloads=u.map(b=>this.payload(b,i)));let h=this[fe](e,d.aml.vocabularies.apiContract.server,i);Array.isArray(h)&&h.length&&(r.servers=h.map(b=>this.server(b,i)));let m=this[fe](e,d.aml.vocabularies.security.security,i);Array.isArray(m)&&m.length&&(r.security=m.map(b=>this.securityRequirement(b,i)));let f=this[fe](e,d.aml.vocabularies.document.extends,i);return Array.isArray(f)&&f.length&&(r.extends=[],f.forEach(b=>{let k=b;Array.isArray(k)&&([k]=k),this._hasType(k,d.aml.vocabularies.apiContract.ParametrizedResourceType,i)?r.extends.push(this.parametrizedResourceType(k,i)):this._hasType(k,d.aml.vocabularies.apiContract.ParametrizedTrait,i)&&r.extends.push(this.parametrizedTrait(k,i))})),r}operation(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e),method:"",deprecated:!1,callbacks:[],responses:[],servers:[],security:[],accepts:[],schemes:[],contentType:[],tags:[],extends:[]},s=this._getValue(e,d.aml.vocabularies.apiContract.method,i);s&&typeof s=="string"&&(r.method=s);let a=this._getValue(e,d.aml.vocabularies.core.name,i);a&&typeof a=="string"&&(r.name=a);let n=this._getValue(e,d.aml.vocabularies.core.description,i);n&&typeof n=="string"&&(r.description=n);let l=this._getValue(e,d.aml.vocabularies.apiContract.guiSummary,i);l&&typeof l=="string"&&(r.summary=l);let c=this._getValue(e,d.aml.vocabularies.core.deprecated,i);typeof c=="boolean"&&(r.deprecated=c);let p=this._getValue(e,d.aml.vocabularies.apiContract.operationId,i);p&&typeof p=="string"&&(r.operationId=p);let u=this._getValueArray(e,d.aml.vocabularies.apiContract.accepts,i);Array.isArray(u)&&(r.accepts=u);let h=this._getValueArray(e,d.aml.vocabularies.apiContract.scheme,i);Array.isArray(h)&&(r.schemes=h);let m=this._getValueArray(e,d.aml.vocabularies.apiContract.contentType,i);Array.isArray(m)&&(r.contentType=m);let f=e[this._getAmfKey(d.aml.vocabularies.apiContract.expects,i)];f&&(Array.isArray(f)&&([f]=f),r.request=this.request(f,i));let b=e[this._getAmfKey(d.aml.vocabularies.core.documentation,i)];b&&(Array.isArray(b)&&([b]=b),r.documentation=this.documentation(b,i));let k=e[this._getAmfKey(d.aml.vocabularies.apiContract.returns,i)];Array.isArray(k)&&(r.responses=k.map(E=>this.response(E,i)));let S=e[this._getAmfKey(d.aml.vocabularies.apiContract.callback,i)];Array.isArray(S)&&(r.callbacks=S.map(E=>this.callback(E,i)));let I=e[this._getAmfKey(d.aml.vocabularies.apiContract.server,i)];Array.isArray(I)&&(r.servers=I.map(E=>this.server(E)));let D=e[this._getAmfKey(d.aml.vocabularies.security.security,i)];Array.isArray(D)&&(r.security=D.map(E=>this.securityRequirement(E,i)));let w=e[this._getAmfKey(d.aml.vocabularies.apiContract.tag,i)];Array.isArray(w)&&w.length&&(r.tags=w.map(E=>this.tag(E,i)));let v=e[this._getAmfKey(d.aml.vocabularies.document.extends,i)];return Array.isArray(v)&&v.length&&(r.extends=v.map(E=>this.parametrizedTrait(E,i))),r}tag(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e),name:""},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,i);a&&typeof a=="string"&&(r.description=a);let n=e[this._getAmfKey(d.aml.vocabularies.core.documentation,i)];return n&&(Array.isArray(n)&&([n]=n),r.documentation=this.documentation(n,i)),r}tagListItem(e,t){let i=t||e["@context"],r={id:e["@id"],name:""},s=this._getValue(e,d.aml.vocabularies.core.name,i);return s&&typeof s=="string"&&(r.name=s),r}callback(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.expression,i);a&&typeof a=="string"&&(r.expression=a);let n=e[this._getAmfKey(d.aml.vocabularies.apiContract.endpoint,i)];return n&&(Array.isArray(n)&&([n]=n),r.endpoint=this.endPoint(n,i)),r}request(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e),required:!1,headers:[],queryParameters:[],payloads:[],uriParameters:[],cookieParameters:[]},s=this._getValue(e,d.aml.vocabularies.core.description,i);s&&typeof s=="string"&&(r.description=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.required,i);a&&typeof a=="boolean"&&(r.required=a);let n=e[this._getAmfKey(d.aml.vocabularies.apiContract.queryString,i)];n&&(Array.isArray(n)&&([n]=n),r.queryString=this.unknownShape(n,void 0,i));let l=this[fe](e,d.aml.vocabularies.apiContract.header,i);Array.isArray(l)&&l.length&&(r.headers=l.map(m=>this.parameter(m,i)));let c=this[fe](e,d.aml.vocabularies.apiContract.parameter,i);Array.isArray(c)&&c.length&&(r.queryParameters=c.map(m=>this.parameter(m,i)));let p=this[fe](e,d.aml.vocabularies.apiContract.uriParameter,i);Array.isArray(p)&&p.length&&(r.uriParameters=p.map(m=>this.parameter(m,i)));let u=this[fe](e,d.aml.vocabularies.apiContract.cookieParameter,i);Array.isArray(u)&&u.length&&(r.cookieParameters=u.map(m=>this.parameter(m,i)));let h=this[fe](e,d.aml.vocabularies.apiContract.payload,i);return Array.isArray(h)&&h.length&&(r.payloads=h.map(m=>this.payload(m,i))),r}response(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),headers:[],payloads:[],examples:[],links:[]},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,i);a&&typeof a=="string"&&(r.description=a);let n=this._getValue(e,d.aml.vocabularies.apiContract.statusCode,i);n&&typeof n=="string"&&(r.statusCode=n);let l=this[fe](e,d.aml.vocabularies.apiContract.header,i);Array.isArray(l)&&l.length&&(r.headers=l.map(h=>this.parameter(h,i)));let c=this[fe](e,d.aml.vocabularies.apiContract.payload,i);Array.isArray(c)&&c.length&&(r.payloads=c.map(h=>this.payload(h,i)));let p=e[this._getAmfKey(d.aml.vocabularies.apiContract.examples,i)];Array.isArray(p)&&p.length&&(r.examples=p.map(h=>this.example(h,i)));let u=e[this._getAmfKey(d.aml.vocabularies.apiContract.link,i)];return Array.isArray(u)&&u.length&&(r.links=u.map(h=>this.templatedLink(h,i))),r}payload(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),examples:[]},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.core.mediaType,i);a&&typeof a=="string"&&(r.mediaType=a);let n=e[this._getAmfKey(d.aml.vocabularies.shapes.schema,i)];n&&(Array.isArray(n)&&([n]=n),r.schema=this.unknownShape(n,{trackedId:r.id},i));let l=e[this._getAmfKey(d.aml.vocabularies.apiContract.examples,i)];return Array.isArray(l)&&l.length&&(r.examples=l.map(c=>this.example(c,i))),r}templatedLink(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),mapping:[]},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,i);a&&typeof a=="string"&&(r.description=a);let n=this._getValue(e,d.aml.vocabularies.apiContract.operationId,i);n&&typeof n=="string"&&(r.operationId=n);let l=e[this._getAmfKey(d.aml.vocabularies.apiContract.server,i)];l&&(Array.isArray(l)&&([l]=l),r.server=this.server(l,i));let c=e[this._getAmfKey(d.aml.vocabularies.apiContract.mapping,i)];return c&&(c&&!Array.isArray(c)&&(c=[c]),c&&(r.mapping=c.map(p=>this.iriTemplateMapping(p,i)))),r}iriTemplateMapping(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.apiContract.templateVariable,i);s&&typeof s=="string"&&(r.templateVariable=s);let a=this._getValue(e,d.aml.vocabularies.apiContract.linkExpression,i);return a&&typeof a=="string"&&(r.linkExpression=a),r}parametrizedSecurityScheme(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=e[this._getAmfKey(d.aml.vocabularies.security.scheme,i)];a&&(Array.isArray(a)&&([a]=a),r.scheme=this.securityScheme(a,i));let n=e[this._getAmfKey(d.aml.vocabularies.security.settings,i)];return n&&(Array.isArray(n)&&([n]=n),r.settings=this.securitySettings(n,i)),r}securitySchemeListItem(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),type:""},s=this._getValue(e,d.aml.vocabularies.security.type,i);s&&typeof s=="string"&&(r.type=s);let a=this._getValue(e,d.aml.vocabularies.core.name,i);a&&typeof a=="string"&&(r.name=a);let n=this._getValue(e,d.aml.vocabularies.core.displayName,i);return n&&typeof n=="string"&&(r.displayName=n),r}securityScheme(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),headers:[],queryParameters:[],responses:[]},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.core.displayName,i);a&&typeof a=="string"&&(r.displayName=a);let n=this._getValue(e,d.aml.vocabularies.core.description,i);n&&typeof n=="string"&&(r.description=n);let l=this._getValue(e,d.aml.vocabularies.security.type,i);l&&typeof l=="string"&&(r.type=l);let c=e[this._getAmfKey(d.aml.vocabularies.security.settings,i)];c&&(Array.isArray(c)&&([c]=c),r.settings=this.securitySettings(c,i));let p=e[this._getAmfKey(d.aml.vocabularies.apiContract.queryString,i)];p&&(Array.isArray(p)&&([p]=p),r.queryString=this.unknownShape(p,void 0,i));let u=this[fe](e,d.aml.vocabularies.apiContract.header,i);Array.isArray(u)&&u.length&&(r.headers=u.map(f=>this.parameter(f,i)));let h=this[fe](e,d.aml.vocabularies.apiContract.parameter,i);Array.isArray(h)&&h.length&&(r.queryParameters=h.map(f=>this.parameter(f,i)));let m=this[fe](e,d.aml.vocabularies.apiContract.response,i);return Array.isArray(m)&&m.length&&(r.responses=m.map(f=>this.response(f,i))),r}securityRequirement(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),schemes:[]},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=e[this._getAmfKey(d.aml.vocabularies.security.schemes,i)];return Array.isArray(a)&&a.length&&(r.schemes=a.map(n=>this.parametrizedSecurityScheme(n,i))),r}securitySettings(e,t){let i=t||e["@context"],r=this.readTypes(e["@type"],i);return r.includes(d.aml.vocabularies.security.OAuth1Settings)?this.oAuth1Settings(e,i):r.includes(d.aml.vocabularies.security.OAuth2Settings)?this.oAuth2Settings(e,i):r.includes(d.aml.vocabularies.security.ApiKeySettings)?this.apiKeySettings(e,i):r.includes(d.aml.vocabularies.security.HttpSettings)?this.httpSettings(e,i):r.includes(d.aml.vocabularies.security.OpenIdConnectSettings)?this.openIdConnectSettings(e,i):this.settings(e,i)}settings(e,t){let i=t||e["@context"];return{id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)}}oAuth1Settings(e,t){let i=t||e["@context"],r=this.settings(e,i),s=this._getValue(e,d.aml.vocabularies.security.authorizationUri,i);s&&typeof s=="string"&&(r.authorizationUri=s);let a=this._getValue(e,d.aml.vocabularies.security.requestTokenUri,i);a&&typeof a=="string"&&(r.requestTokenUri=a);let n=this._getValue(e,d.aml.vocabularies.security.tokenCredentialsUri,i);n&&typeof n=="string"&&(r.tokenCredentialsUri=n);let l=this._getValueArray(e,d.aml.vocabularies.security.signature,i);return Array.isArray(l)&&l.length?r.signatures=l:r.signatures=[],r}oAuth2Settings(e,t){let i=t||e["@context"],r=this.settings(e,i),s=this._getValueArray(e,d.aml.vocabularies.security.authorizationGrant,i);Array.isArray(s)&&s.length?r.authorizationGrants=s:r.authorizationGrants=[];let a=e[this._getAmfKey(d.aml.vocabularies.security.flows,i)];return Array.isArray(a)&&a.length?r.flows=a.map(n=>this.oAuth2Flow(n,i)):r.flows=[],r}oAuth2Flow(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),scopes:[],sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.security.authorizationUri,i);s&&typeof s=="string"&&(r.authorizationUri=s);let a=this._getValue(e,d.aml.vocabularies.security.accessTokenUri,i);a&&typeof a=="string"&&(r.accessTokenUri=a);let n=this._getValue(e,d.aml.vocabularies.security.flow,i);n&&typeof n=="string"&&(r.flow=n);let l=this._getValue(e,d.aml.vocabularies.security.refreshUri,i);l&&typeof l=="string"&&(r.refreshUri=l);let c=e[this._getAmfKey(d.aml.vocabularies.security.scope,i)];return Array.isArray(c)&&c.length&&(r.scopes=c.map(p=>this.scope(p,i))),r}scope(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.core.description,i);return a&&typeof a=="string"&&(r.description=a),r}apiKeySettings(e,t){let i=t||e["@context"],r=this.settings(e,i),s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=this._getValue(e,d.aml.vocabularies.security.in,i);return a&&typeof a=="string"&&(r.in=a),r}httpSettings(e,t){let i=t||e["@context"],r=this.settings(e,i),s=this._getValue(e,d.aml.vocabularies.security.scheme,i);s&&typeof s=="string"&&(r.scheme=s);let a=this._getValue(e,d.aml.vocabularies.security.bearerFormat,i);return a&&typeof a=="string"&&(r.bearerFormat=a),r}openIdConnectSettings(e,t){let i=t||e["@context"],r=this.settings(e,i),s=this._getValue(e,d.aml.vocabularies.security.openIdConnectUrl,i);return s&&typeof s=="string"&&(r.url=s),r}sourceMap(e,t){let i=t||e["@context"],r=e[this._getAmfKey(d.aml.vocabularies.docSourceMaps.sources,i)];if(!r)return;Array.isArray(r)&&([r]=r);let s={id:r["@id"],types:this.readTypes(r["@type"])},a=r[this._getAmfKey(d.aml.vocabularies.docSourceMaps.synthesizedField,i)];Array.isArray(a)&&a.length&&(s.synthesizedField=a.map(h=>this.synthesizedField(h,i)));let n=r[this._getAmfKey(d.aml.vocabularies.docSourceMaps.lexical,i)];Array.isArray(n)&&n.length&&(s.lexical=n.map(h=>this.synthesizedField(h,i)));let l=r[this._getAmfKey(d.aml.vocabularies.docSourceMaps.trackedElement,i)];Array.isArray(l)&&l.length&&(s.trackedElement=this.synthesizedField(l[0],i));let c=r[this._getAmfKey(d.aml.vocabularies.docSourceMaps.autoGeneratedName,i)];Array.isArray(c)&&c.length&&(s.autoGeneratedName=c.map(h=>this.synthesizedField(h,i)));let p=r[this._getAmfKey(d.aml.vocabularies.docSourceMaps.parsedJsonSchema,i)];Array.isArray(p)&&p.length&&(s.parsedJsonSchema=this.synthesizedField(p[0],i));let u=r[this._getAmfKey(d.aml.vocabularies.docSourceMaps.declaredElement,i)];return Array.isArray(u)&&u.length&&(s.declaredElement=this.synthesizedField(u[0],i)),s}synthesizedField(e,t){if(typeof e=="string")return{id:"synthesizedField/generated",value:e};let i={id:e["@id"],value:""},r=this._getValue(e,d.aml.vocabularies.docSourceMaps.element,t);typeof r=="string"&&(i.element=r);let s=this._getValue(e,d.aml.vocabularies.docSourceMaps.value,t);return typeof s=="string"&&(i.value=s),i}parametrizedDeclaration(e,t){let i=t||e["@context"],r={id:e["@id"],types:this.readTypes(e["@type"],i),variables:[],customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i)},s=this._getValue(e,d.aml.vocabularies.core.name,i);s&&typeof s=="string"&&(r.name=s);let a=e[this._getAmfKey(d.aml.vocabularies.document.variable,i)];Array.isArray(a)&&a.forEach(l=>{r.variables.push(this.variableValue(l,i))});let n=e[this._getAmfKey(d.aml.vocabularies.document.target,i)];if(Array.isArray(n)&&n.length){let[l]=n;r.target=this.abstractDeclaration(l,i)}return r}parametrizedTrait(e,t){let i=t||e["@context"];return this.parametrizedDeclaration(e,i)}parametrizedResourceType(e,t){let i=t||e["@context"];return this.parametrizedDeclaration(e,i)}variableValue(e,t){let i=t||e["@context"],r=this._getValue(e,d.aml.vocabularies.core.name,i),s={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),name:r},a=e[this._getAmfKey(d.aml.vocabularies.document.value,i)];if(Array.isArray(a)){let[n]=a;s.value=this.unknownDataNode(n,i)}return s}abstractDeclaration(e,t){let i=t||e["@context"],r=this._getValue(e,d.aml.vocabularies.core.name,i),s={id:e["@id"],types:this.readTypes(e["@type"],i),customDomainProperties:this.customDomainProperties(e,i),sourceMaps:this.sourceMap(e,i),name:r,variables:[]},a=this._getValueArray(e,d.aml.vocabularies.document.variable,i);Array.isArray(a)&&(s.variables=a);let n=this._getValue(e,d.aml.vocabularies.core.description,i);n&&typeof n=="string"&&(s.description=n);let l=e[this._getAmfKey(d.aml.vocabularies.document.dataNode,i)];if(Array.isArray(l)){let[c]=l;s.dataNode=this.unknownDataNode(c,i)}return s}endPointWithOperationsListItem(e,t){let i=this._getValue(e,d.aml.vocabularies.apiContract.path,t),r={id:e["@id"],path:i,operations:[]},s=this[fe](e,d.aml.vocabularies.apiContract.supportedOperation,t);Array.isArray(s)&&s.length&&(r.operations=s.map(n=>this.operationListItem(n,t)));let a=this._getValue(e,d.aml.vocabularies.core.name,t);return a&&typeof a=="string"&&(r.name=a),r}operationListItem(e,t){let i={id:e["@id"],method:""},r=this._getValue(e,d.aml.vocabularies.apiContract.method,t);r&&typeof r=="string"&&(i.method=r);let s=this._getValue(e,d.aml.vocabularies.core.name,t);return s&&typeof s=="string"&&(i.name=s),i}};var Jt=class o{mime;opts;generator;constructor(e,t={}){this.mime=e,this.opts=Object.freeze({...t}),e.includes("json")?this.generator=new Di(t):e.includes("xml")&&(this.generator=new zi(t))}static asExample(e,t,i){return new o(t,i).toExample(e)}static asSchema(e,t,i){return new o(t,i).toValue(e)}generate(e){let{generator:t}=this;if(t)return t.generate(e)}toValue(e){return this.generate(e)}toExample(e){let t=this.generate(e);if(t==null)return;let i={id:`${e.id}/generated`,strict:!0,types:[d.aml.vocabularies.apiContract.Example],mediaType:this.mime,renderValue:t,customDomainProperties:[]},r=e;if(Array.isArray(r.examples)&&r.examples.length){let[s]=r.examples;s.value&&(i.value=s.value)}return i}};var ni=Object.freeze({processApiLink:"amfprocessapilink",processBuffer:"amfprocessbuffer",processApiFile:"amfprocessapifile",selectApiMainFile:"amfselectapimainfile"});var Bc=Object.freeze({processApiLink:async(o,e,t,i,r=globalThis)=>{let s=new CustomEvent(ni.processApiLink,{bubbles:!0,composed:!0,cancelable:!0,detail:{url:o,mainFile:e,md5:t,packaging:i}});return r.dispatchEvent(s),s.detail.result},processBuffer:async(o,e,t=globalThis)=>{let i=new CustomEvent(ni.processBuffer,{bubbles:!0,composed:!0,cancelable:!0,detail:{buffer:o,opts:e}});return t.dispatchEvent(i),i.detail.result},processApiFile:async(o,e=globalThis)=>{let t=new CustomEvent(ni.processApiFile,{bubbles:!0,composed:!0,cancelable:!0,detail:{file:o}});return e.dispatchEvent(t),t.detail.result},selectApiMainFile:async(o,e=globalThis)=>{let t=new CustomEvent(ni.selectApiMainFile,{bubbles:!0,composed:!0,cancelable:!0,detail:{candidates:o}});return e.dispatchEvent(t),t.detail.result}});var na=["string","number","boolean","date","datetime","time","binary","json"],Ui;(function(o){o.string="string",o.number="number",o.boolean="boolean",o.date="date",o.datetime="datetime",o.time="time",o.file="binary",o.json="json"})(Ui||(Ui={}));var Un=["required","multiple","primary","index","unique","search","readOnly","writeOnly","deprecated"],Mn=["required","multiple"],Vn=["float","double","int32","int64"];function Ur(o,e){return o==="number"?e?.format==="int32"||e?.format==="int64"?d.w3.xmlSchema.integer:d.w3.xmlSchema.number:o==="boolean"?d.aml.vocabularies.shapes.boolean:o==="date"?d.w3.xmlSchema.date:o==="datetime"?d.w3.xmlSchema.dateTime:o==="time"?d.aml.vocabularies.shapes.dateTimeOnly:d.w3.xmlSchema.string}var qt=Symbol("noValue"),Mi=class{increment=0;static noValue=qt;generate(e,t){return t==="string"?this.generateString(e):t==="number"?this.generateNumber(e):t==="date"?this.generateDate(e):t==="time"?this.generateTime(e):t==="datetime"?this.generateDateTime(e):qt}generateString(e){switch(e){case"random":return q(8);case"uuid-v4":return crypto.randomUUID();default:return qt}}generateNumber(e){return e==="incremental"?`${this.increment++}`:qt}generateDate(e){if(e==="now"){let t=new Date,i=t.getFullYear(),r=`${t.getMonth()+1}`.padStart(2,"0"),s=`${t.getDate()}`.padStart(2,"0");return`${i}-${r}-${s}`}return qt}generateTime(e){if(e==="now"){let t=new Date,i=`${t.getHours()}`.padStart(2,"0"),r=`${t.getMinutes()}`.padStart(2,"0"),s=`${t.getSeconds()}`.padStart(2,"0");return`${i}:${r}:${s}`}return qt}generateDateTime(e){if(e==="now"){let t=new Date,i=t.getFullYear(),r=`${t.getMonth()+1}`.padStart(2,"0"),s=`${t.getDate()}`.padStart(2,"0"),a=`${t.getHours()}`.padStart(2,"0"),n=`${t.getMinutes()}`.padStart(2,"0"),l=`${t.getSeconds()}`.padStart(2,"0");return`${i}-${r}-${s}T${a}:${n}:${l}`}return qt}};var oa="anyOf",Gc="allOf",Hc="oneOf",Wc="not",la="string",Ln="binary",Tt=class{#e;get valueGenerator(){return this.#e||(this.#e=new Mi),this.#e}entity(e,t=new Set){if(t.has(e.key))return this.createRecursiveShape(e);t.add(e.key);let i=Ie.nodeShape(e.key);i.id=e.key,this.updateBaseProperties(e,i),i.properties=[];for(let r of e.listProperties()){let s=r.readBinding("web");if(s&&s.hidden)continue;let a=this.property(r);i.properties.push(a)}for(let r of e.listAssociations()){let s=r.readBinding("web");if(s&&s.hidden)continue;let a=this.associationProperty(r,t);i.properties.push(a)}for(let r of e.listParents()){let s=this.entity(r,t);i.inherits.push(s)}return i}property(e){let{required:t,key:i}=e,r=Ie.propertyShape(i);return r.path=`${d.aml.vocabularies.data.key}${e.info.name}`,t&&(r.minCount=1),r.range=this.getRange(e),this.updateBaseProperties(e,r),r.range.name&&(r.name=r.range.name),r}associationProperty(e,t=new Set){let{required:i,key:r}=e,s=Ie.propertyShape(r);return s.path=`${d.aml.vocabularies.data.key}${e.info.name}`,i&&(s.minCount=1),s.range=this.associationShape(e,t),this.updateBaseProperties(e,s),s}associationShape(e,t=new Set){let i=e.schema;if(!i?.embedded)return this.createLinkedShape(e);let r=this.associationUnion(e,t);if(!r)return;if(Array.isArray(r))return this.createUnionShape(e,r);if((i&&i.unionType||oa)===Wc){let a=Ie.anyShape(e.key);return a.id=`not-shape-${e.key}`,a.not=r,a}return e.multiple?this.refactorShapeToArray(e.key,r):r}createLinkedShape(e){let t=Ie.scalarShape(e.key);return t.id=`link-${e.key}`,t.dataType=Ur(la),t}createUnionShape(e,t){let i=Ie.unionShape(e.key);this.updateBaseProperties(e,i),i.anyOf=[];let r=e.schema&&e.schema.unionType||oa;return r===oa?i.anyOf=t:r===Gc?i.and=t:r===Hc?i.xone=t:i.not=t[0],e.multiple?this.refactorShapeToArray(e.key,i):i}associationUnion(e,t=new Set){let i=[];for(let r of e.listTargets())i.push(this.entity(r,t));if(i.length)return i.length>1?i:i[0]}getRange(e){let t=e.readBinding("web"),i;e.schema&&(i=e.schema);let{multiple:r,type:s}=e;return r?this.createArrayShape(e,i,t):s===Ln?this.createFileShape(e,t):this.createScalarShape(e,i,t)}setShapeSchema(e,t,i,r,s){if(i.defaultValue){let{type:a}=i.defaultValue,{value:n}=i.defaultValue;if(a==="function"){let l=this.valueGenerator.generate(n,e.type);if(l!==Mi.noValue){let c=it.scalar(l,a);t.defaultValue=c.toJSON()}}else{let l=it.scalar(n,r);t.defaultValue=l.toJSON()}}Array.isArray(i.enum)&&(t.values=i.enum.map(a=>it.scalar(a,r).toJSON())),Array.isArray(i.examples)&&(s?t.examples=this.createArrayExamples(i.examples,r):t.examples=this.createExamples(i.examples,r))}createArrayShape(e,t,i){let r=Ie.arrayShape(e.key),{type:s}=e;if(s===Ln?r.items=this.createFileShape(e,i):r.items=this.createScalarShape(e,void 0,i),t){let a=r.items.dataType;this.setShapeSchema(e,r,t,a,e.multiple)}return r}createScalarShape(e,t,i){let r=Ie.scalarShape(e.key);return this.updateBaseProperties(e,r),this.setScalarCommonProperties(r,e,i),r.dataType||(r.dataType=Ur(e.type,i)),t&&this.setShapeSchema(e,r,t,r.dataType,e.multiple),r}createExamples(e,t){let i=[];for(let r of e){let s={id:q(),customDomainProperties:[],strict:!0,types:[...ji.IAmfExampleTypes],structuredValue:it.scalar(r,t).toJSON()};i.push(s)}return i}createArrayExamples(e,t){let i={id:q(),customDomainProperties:[],strict:!0,types:[...ji.IAmfExampleTypes]},r=new it("array");for(let s of e){let a=it.scalar(s,t);r.addMember(a)}return i.structuredValue=r.toJSON(),[i]}createFileShape(e,t){let i=Ie.fileShape(e.key);return this.updateBaseProperties(e,i),t&&(Array.isArray(t.fileTypes)&&(i.fileTypes=t.fileTypes),this.setScalarCommonProperties(i,e,t)),i}setScalarCommonProperties(e,t,i){i?.name&&(e.name=i.name),i?.xml&&(e.xmlSerialization=i.xml);let{schema:r,type:s}=t;if(r&&(r.pattern&&(e.pattern=r.pattern),typeof r.multipleOf=="number"&&(e.multipleOf=r.multipleOf),typeof r.minimum=="number"&&(s===la?e.minLength=r.minimum:e.minimum=r.minimum),typeof r.maximum=="number"&&(s===la?e.maxLength=r.maximum:e.maximum=r.maximum),typeof r.exclusiveMinimum=="boolean"&&(e.exclusiveMinimum=r.exclusiveMinimum),typeof r.exclusiveMaximum=="boolean"&&(e.exclusiveMaximum=r.exclusiveMaximum)),i?.format)switch(i.format){case"double":e.format=d.w3.xmlSchema.double;break;case"float":e.format=d.w3.xmlSchema.float;break;case"int32":e.format=d.w3.xmlSchema.integer;break;case"int64":e.format=d.w3.xmlSchema.integer;break}typeof t.readOnly=="boolean"&&(e.readOnly=t.readOnly),typeof t.writeOnly=="boolean"&&(e.writeOnly=t.writeOnly);let a=r?.examples&&r.examples.length>0,n=r?.defaultValue?.value!==void 0;if(t.required&&!t.readOnly&&!a&&!n){let l="";t.type==="number"?l=0:t.type==="boolean"&&(l=!1);let c=("dataType"in e?e.dataType:void 0)||Ur(t.type,i);e.examples=this.createExamples([String(l)],c)}}updateBaseProperties(e,t){t.name=e.info.name,t.displayName=e.info.displayName,t.description=e.info.description,(e.kind===ne||e.kind===N)&&(t.deprecated=e.deprecated)}createRecursiveShape(e){return Ie.recursiveShape(e.key,e.key)}refactorShapeToArray(e,t){let i=Ie.arrayShape(e);return i.items=t,i}};var Dt=class o extends Me{kind;info;required;multiple;primary;unique;index;search;readOnly;writeOnly;deprecated;tags=[];semantics=[];type="string";jsonSchema;jsonIndex;schema;bindings=[];lineage;static createSchema(e={}){let{key:t=q(),multiple:i,required:r,type:s=Ui.string,index:a,search:n,primary:l,unique:c,readOnly:p,writeOnly:u,tags:h,semantics:m,deprecated:f,schema:b,bindings:k,jsonSchema:S,jsonIndex:I,lineage:D}=e;if(typeof s=="string"&&!na.includes(s))throw new Error(`Invalid data property type ${s}`);let w=ie.fromJSON(e.info,{name:"new_property"}).toJSON(),v={kind:ne,key:t,info:w,type:s};return S&&(v.jsonSchema=structuredClone(S)),I&&(v.jsonIndex=structuredClone(I)),typeof i=="boolean"&&(v.multiple=i),typeof r=="boolean"&&(v.required=r),typeof a=="boolean"&&(v.index=a),typeof n=="boolean"&&(v.search=n),typeof l=="boolean"&&(v.primary=l),typeof c=="boolean"&&(v.unique=c),typeof p=="boolean"&&(v.readOnly=p),typeof u=="boolean"&&(v.writeOnly=u),typeof f=="boolean"&&(v.deprecated=f),Array.isArray(h)&&(v.tags=[...h]),Array.isArray(m)&&(v.semantics=[...m]),b&&(v.schema=structuredClone(b)),Array.isArray(k)?v.bindings=k.map(E=>structuredClone(E)):v.bindings=[],D&&(v.lineage=structuredClone(D)),v}parent;constructor(e,t,i={}){let r=o.createSchema(i);super(e,r.key),this.parent=t,this.kind=ne,this.info=new ie(r.info),this.type=r.type,typeof r.multiple=="boolean"&&(this.multiple=r.multiple),typeof r.required=="boolean"&&(this.required=r.required),typeof r.index=="boolean"&&(this.index=r.index),typeof r.search=="boolean"&&(this.search=r.search),typeof r.deprecated=="boolean"&&(this.deprecated=r.deprecated),typeof r.primary=="boolean"&&(this.primary=r.primary),typeof r.unique=="boolean"&&(this.unique=r.unique),typeof r.readOnly=="boolean"&&(this.readOnly=r.readOnly),typeof r.writeOnly=="boolean"&&(this.writeOnly=r.writeOnly),Array.isArray(r.tags)?this.tags=[...r.tags]:this.tags=[],Array.isArray(r.semantics)?this.semantics=[...r.semantics]:this.semantics=[],r.schema&&(this.schema=structuredClone(r.schema)),r.jsonSchema&&(this.jsonSchema=structuredClone(r.jsonSchema)),r.jsonIndex&&(this.jsonIndex=structuredClone(r.jsonIndex)),Array.isArray(r.bindings)?this.bindings=r.bindings.map(s=>structuredClone(s)):this.bindings=[],r.lineage&&(this.lineage=structuredClone(r.lineage))}static validate(e,t={}){if(!e||typeof e!="object"&&e!==null)return!1;let i=e;return!(t.strict&&i.kind!==ne)}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON(),type:this.type||Ui.string};return typeof this.index=="boolean"&&(e.index=this.index),typeof this.search=="boolean"&&(e.search=this.search),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),typeof this.primary=="boolean"&&(e.primary=this.primary),typeof this.unique=="boolean"&&(e.unique=this.unique),typeof this.multiple=="boolean"&&(e.multiple=this.multiple),typeof this.required=="boolean"&&(e.required=this.required),typeof this.readOnly=="boolean"&&(e.readOnly=this.readOnly),typeof this.writeOnly=="boolean"&&(e.writeOnly=this.writeOnly),Array.isArray(this.tags)&&this.tags.length&&(e.tags=[...this.tags]),Array.isArray(this.semantics)&&this.semantics.length&&(e.semantics=this.semantics.map(t=>structuredClone(t))),this.schema&&(e.schema=structuredClone(this.schema)),this.jsonSchema&&(e.jsonSchema=structuredClone(this.jsonSchema)),this.jsonIndex&&(e.jsonIndex=structuredClone(this.jsonIndex)),Array.isArray(this.bindings)&&this.bindings.length&&(e.bindings=this.bindings.map(t=>structuredClone(t))),this.lineage&&(e.lineage=structuredClone(this.lineage)),e}remove(){this.getParentInstance()?.removeProperty(this.key)}getParentInstance(){return this.root.graph.node(this.parent)}static isValidType(e){return typeof e!="string"?!1:na.includes(e)}static isValidAttribute(e){return typeof e!="string"?!1:Un.includes(e)}static isValidFormat(e){return e===void 0?!0:typeof e!="string"?!1:!!Vn.includes(e)}ensureSchema(){return this.schema||(this.schema={}),this.schema}getWebBinding(){let e=this.bindings.find(t=>t.type==="web");return e||(e={type:"web",schema:{}},this.bindings.push(e)),e.schema}readWebBinding(){return this.bindings.find(t=>t.type==="web")?.schema}getExposedName(){let e=this.readWebBinding()?.name||this.info.name;if(!e)throw new g(`Property ${this.key} has no exposed name defined`,{code:"E_MISSING_EXPOSED_NAME",status:500});return e}readBinding(e){return this.bindings.find(i=>i.type===e)?.schema||void 0}toApiShape(){return new Tt().property(this)}toExample(e,t={}){let i=this.toApiShape();return i.range?new Jt(e,{renderExamples:t.renderExamples??!0,renderMocked:t.renderMocked??!0,renderOptional:t.renderOptional??!0,selectedUnions:t.selectedUnions}).generate(i):void 0}addSemantic(e){this.root.ensureWritable();let t=Be[e.id];if(!fr(t))throw new Error(`Invalid semantic type: ${e.id}. Expected a property semantic.`);let i=this.semantics.findIndex(r=>r.id===e.id);i>=0?this.semantics[i]=e:this.semantics.push(e)}removeSemantic(e){this.root.ensureWritable();let t=this.semantics.findIndex(i=>i.id===e);t>=0&&this.semantics.splice(t,1)}hasSemantic(e){return this.semantics.some(t=>t.id===e)}getSemantic(e){return this.semantics.find(t=>t.id===e)}duplicate(){let e=this.getParentInstance();if(!e)throw new Error(`Cannot duplicate property ${this.key} as it has no parent entity.`);let t=e.fields.findIndex(c=>c.key===this.key);if(t===-1)throw new Error(`Cannot duplicate property ${this.key} as it does not exist on the parent entity fields list.`);let i=this.info.name||"field",r=e.generateUniqueName(i),s=this.toJSON();delete s.key,delete s.primary,delete s.lineage,s.info?s.info.name=r:s.info={name:r};let a=e.addProperty(s),n=e.fields.length-1,l=e.fields[n];return e.fields.splice(n,1),e.fields.splice(t+1,0,l),a}setLineage(e,t){this.lineage={id:t,key:e.key,kind:e.kind},e.namespace!==this.root.key&&(this.lineage.domain=e.namespace)}};var zt=class extends g{static code="E_REMOVE_PROPERTY";static status=500;static message="Error removing a data property.";static help="Make sure the property exists and can be removed."};function Ee(o,e){if(!o.hasNode(e))return;let t=o.node(e);if(t){if(t.kind===ae){o.removeNode(e);return}for(let i of o.children(e))Ee(o,i);for(let i of o.outEdges(e)){let r=o.edge(i);r&&(r.type==="association"||r.type==="property")&&Ee(o,i.w)}o.removeNode(e)}}var oi=class o extends Me{kind;info;required;multiple;schema;bindings;parent;targets;semantics=[];onDelete;readOnly;fields;static createSchema(e={}){let{key:t=q(),semantics:i=[]}=e,r=ie.fromJSON(e.info,{name:"new_association"}).toJSON(),s={kind:ae,key:t,info:r};return Array.isArray(i)&&(s.semantics=[...i]),e.onDelete&&(s.onDelete=e.onDelete),typeof e.readOnly=="boolean"&&(s.readOnly=e.readOnly),e.schema&&(s.schema=structuredClone(e.schema)),typeof e.multiple=="boolean"&&(s.multiple=e.multiple),typeof e.required=="boolean"&&(s.required=e.required),Array.isArray(e.bindings)&&(s.bindings=e.bindings.map(a=>structuredClone(a))),Array.isArray(e.targets)&&(s.targets=e.targets.map(a=>({...a}))),Array.isArray(e.fields)&&(s.fields=[...e.fields]),s}constructor(e,t,i){let r=o.createSchema(i);super(e,r.key),this.parent=t,this.kind=ae,this.info=new ie(r.info),r.schema&&(this.schema=structuredClone(r.schema)),typeof r.multiple=="boolean"&&(this.multiple=r.multiple),typeof r.required=="boolean"&&(this.required=r.required),Array.isArray(r.bindings)?this.bindings=r.bindings.map(s=>structuredClone(s)):this.bindings=[],Array.isArray(r.targets)?this.targets=r.targets.map(s=>({...s})):this.targets=[],Array.isArray(r.semantics)?this.semantics=r.semantics.map(s=>structuredClone(s)):this.semantics=[],r.onDelete&&(this.onDelete=r.onDelete),Array.isArray(r.fields)?this.fields=[...r.fields]:this.fields=[],typeof r.readOnly=="boolean"&&(this.readOnly=r.readOnly)}addProperty(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a property ${e.key}, but it already exists`);let t=new Dt(this.root,this.key,e);return this.root.graph.setNode(t.key,t),this.root.graph.setEdge(this.key,t.key,{type:"property"}),this.fields.push({type:"property",key:t.key}),t}get properties(){return this.listProperties()}*listProperties(){for(let{key:e}of this.fields){let t=this.root.graph.node(e);!t||t.kind!==ne||(yield t)}}removeProperty(e){this.root.ensureWritable();let t=this.fields.findIndex(r=>r.key===e&&r.type==="property");if(!this.root.graph.hasNode(e))throw new zt(`Trying to remove the ${e} property, but it doesn't exist`);if(this.root.graph.node(e).getParentInstance()!==this)throw new zt(`Trying to remove the ${e} property, but it doesn't belong to this association`);Ee(this.root.graph,e),t!==-1&&this.fields.splice(t,1)}generateUniqueName(e){let t=new Set;for(let s of this.listProperties())s.info.name&&t.add(s.info.name);let i=2,r=`${e}_copy`;for(;t.has(r);)r=`${e}_copy_${i}`,i++;return r}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return this.schema&&(e.schema=structuredClone(this.schema)),typeof this.multiple=="boolean"&&(e.multiple=this.multiple),typeof this.required=="boolean"&&(e.required=this.required),Array.isArray(this.bindings)&&this.bindings.length&&(e.bindings=this.bindings.map(t=>structuredClone(t))),Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),Array.isArray(this.targets)&&this.targets.length&&(e.targets=this.targets.map(t=>({...t}))),Array.isArray(this.semantics)&&this.semantics.length&&(e.semantics=this.semantics.map(t=>structuredClone(t))),this.onDelete&&(e.onDelete=this.onDelete),typeof this.readOnly=="boolean"&&this.readOnly&&(e.readOnly=this.readOnly),e}getParentInstance(){return this.root.graph.node(this.parent)}remove(){this.getParentInstance()?.removeAssociation(this.key)}ensureSchema(){return this.schema||(this.schema={}),this.schema}static isValidAttribute(e){return typeof e!="string"?!1:Mn.includes(e)}getWebBinding(){let e=this.bindings.find(t=>t.type==="web");return e||(e={type:"web",schema:{}},this.bindings.push(e)),e.schema}readWebBinding(){return this.bindings?.find(t=>t.type==="web")?.schema}getExposedName(){let e=this.readWebBinding()?.name||this.info.name;if(!e)throw new g(`Association ${this.key} has no exposed name defined`,{code:"E_MISSING_EXPOSED_NAME",status:500});return e}readBinding(e){return this.bindings.find(i=>i.type===e)?.schema||void 0}addTarget(e,t){this.root.ensureWritable();let i;if(typeof e=="string"?i=e:(i=e.key,e.domain.key!==this.root.key&&(t=e.domain.key)),t&&t===this.root.key&&(t=void 0),this.targets.some(n=>n.key===i&&n.domain===t)){let n=`Target ${i} already exists.`;throw new Error(n)}if(t&&!this.root.dependencies.has(t))throw new Error(`Foreign namespace "${t}" does not exist.`);let r={key:i};t&&(r.domain=t),this.targets.push(r);let s=t?`${t}:${i}`:i,a={type:"association"};t&&(a.domain=t,a.foreign=!0),this.root.graph.setEdge(this.key,s,a)}removeTarget(e){this.root.ensureWritable();let t;typeof e=="string"?t=e:t=e.key;let i=this.targets.findIndex(r=>r.key===t);i>=0&&this.targets.splice(i,1),this.root.graph.removeEdge(this.key,t)}*listTargets(){for(let e of this.targets){let{key:t,domain:i}=e,r=i?`${i}:${t}`:t,s=this.root.graph.node(r);s&&(yield s)}}toApiShape(){return new Tt().associationProperty(this)}checkPreconditions(e){let t=Be[e];if(!(!t||!gr(t)||!t.preconditions||t.preconditions.length===0)){for(let i of t.preconditions)if(i.kind==="associationMultiple"){if(this.multiple!==i.multiple)throw new g(i.unmetMessage||`Semantic ${e} requires association multiple to be ${i.multiple}.`,{status:400})}else if(i.kind==="entityPairs"){let r=this.getParentInstance(),s=Array.from(this.listTargets());if(!r)throw new g(i.unmetMessage||`Parent entity is required to evaluate entity pairing preconditions for semantic ${e}.`,{status:400});if(!i.entityPairs.some(n=>(Array.isArray(n.parent)?n.parent.some(p=>r.hasSemantic(p)):r.hasSemantic(n.parent))?s.some(p=>Array.isArray(n.target)?n.target.some(u=>p.hasSemantic(u)):p.hasSemantic(n.target)):!1))throw new g(i.unmetMessage||`Association entity pairing precondition check failed for semantic ${e}.`,{status:400})}}}getReciprocalAssociations(e){let t=[],i=this.root,r=this.getParentInstance()?.key??"";for(let s of i.listEntities())for(let a of s.listAssociations())if(!(a.key===this.key&&s.key===r)){for(let n of a.semantics)if(n.link&&n.link.key===this.key&&(!e||n.id===e)){t.push(a);break}}return t}toggleOptionalSemanticProperty(e,t,i){this.root.ensureWritable();let r=Be[e];if(!r||!gr(r))throw new Error(`Invalid semantic type: ${e}. Expected an association semantic.`);if(this.getSemantic(e)?.link)throw new Error(`Cannot toggle edge properties on linked reciprocal semantic ${e}. Edge properties belong to the source of truth association.`);let a=r.properties?.find(c=>c.value.info?.name===t);if(!a)throw new Error(`Property "${t}" is not defined in semantic blueprint ${e}.`);let l=Array.from(this.listProperties()).find(c=>c.info.name===t||c.lineage?.id===e&&c.info.name===t);if(i){if(l)return l;let c={...a.value,lineage:{key:this.key,kind:ae,domain:this.root.key,id:e}};return this.addProperty(c)}else{l&&l.remove();return}}addSemantic(e){this.root.ensureWritable();let t=Be[e.id];if(!gr(t))throw new Error(`Invalid semantic type: ${e.id}. Expected an association semantic.`);this.checkPreconditions(e.id);let i=this.semantics.findIndex(r=>r.id===e.id);i>=0?this.semantics[i]=e:this.semantics.push(e),e.link||t.properties?.forEach(r=>{if(!r.meta.required)return;let s=r.value.info?.name;if(!Array.from(this.listProperties()).find(n=>n.info.name===s||n.lineage?.id===e.id&&n.info.name===s)){let n={...r.value,lineage:{key:this.key,kind:ae,domain:this.root.key,id:e.id}};this.addProperty(n)}})}removeSemantic(e){this.root.ensureWritable();let t=this.semantics.findIndex(s=>s.id===e);t>=0&&this.semantics.splice(t,1);let i=Array.from(this.listProperties()).filter(s=>s.lineage?.id===e);for(let s of i)s.remove();let r=this.getReciprocalAssociations(e);for(let s of r)s.removeSemantic(e),s.semantics.length===0&&s.remove()}hasSemantic(e){return this.semantics.some(t=>t.id===e)}getSemantic(e){return this.semantics.find(t=>t.id===e)}duplicate(){let e=this.getParentInstance();if(!e)throw new Error(`Cannot duplicate association ${this.key} as it has no parent entity.`);let t=e.fields.findIndex(c=>c.key===this.key);if(t===-1)throw new Error(`Cannot duplicate association ${this.key} as it does not exist on the parent entity fields list.`);let i=this.info.name||"field",r=e.generateUniqueName(i),s=this.toJSON();delete s.key,delete s.targets,delete s.fields,s.info?s.info.name=r:s.info={name:r};let a=e.addAssociation(s);for(let c of this.listProperties()){let p=c.toJSON();delete p.key,a.addProperty(p)}for(let c of this.targets)a.addTarget(c.key,c.domain);let n=e.fields.length-1,l=e.fields[n];return e.fields.splice(n,1),e.fields.splice(t+1,0,l),a}};var Bt=class extends Error{messages;status=422;code="E_VALIDATION_ERROR";constructor(e,t){let i=t?.message||"Validation failure";super(i,t),this.messages=e;let r=this.constructor;"captureStackTrace"in Error&&Error.captureStackTrace(this,r)}get[Symbol.toStringTag](){return this.constructor.name}toString(){return`${this.name} [${this.code}]: ${this.message}`}};var Kn=o=>{let e=o.trim();return e=e.match(/[A-Z]{2,}(?=[ A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)?.map(t=>t.toLowerCase()).join("_")||"",e};import Fn from"dompurify";var ca;function Xc(){return typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.node<"u"}if(Xc()){let{JSDOM:o}=await import("jsdom"),{window:e}=new o("<!DOCTYPE html>");ca=Fn(e)}else ca=Fn;var Jn=ca;function Yc(o){return Jn.sanitize(o)}function qn(o,e="untitled_column"){let t=Yc(o);return t=Kn(t),t=t.replace(/[\s-]+/g,"_"),t=t.replace(/[^a-z0-9_]/g,""),t=t.replace(/^_+|_+$/g,""),t||e}function Bn(o,e,t="untitled_table"){let i=qn(o,t);return`${qn(e.slice(0,8))}_${i}`}var li=class o extends Me{kind;#e;#t;#r;#i;info;tags;semantics=[];fields;deprecated;static createSchema(e={}){let{key:t=q(),tags:i,semantics:r,fields:s,deprecated:a}=e,n=ie.fromJSON(e.info,{name:"new_entity"}).toJSON(),l={kind:N,key:t,info:n};return Array.isArray(i)&&(l.tags=[...i]),Array.isArray(r)&&(l.semantics=[...r]),Array.isArray(s)&&(l.fields=[...s]),typeof a=="boolean"&&(l.deprecated=a),l}constructor(e,t){let i=o.createSchema(t);super(e,i.key),this.kind=N,this.info=new ie(i.info),Array.isArray(i.tags)?this.tags=[...i.tags]:this.tags=[],Array.isArray(i.semantics)?this.semantics=i.semantics.map(r=>structuredClone(r)):this.semantics=[],Array.isArray(i.fields)?this.fields=[...i.fields]:this.fields=[],typeof i.deprecated=="boolean"&&(this.deprecated=i.deprecated)}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),Array.isArray(this.semantics)&&this.semantics.length&&(e.semantics=this.semantics.map(t=>structuredClone(t))),Array.isArray(this.tags)&&this.tags.length&&(e.tags=[...this.tags]),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),e}getParentInstance(){let e=this.root.graph.parent(this.key);if(e)return this.root.graph.node(e)}getExposedName(){let e=this.info.name;if(!e)throw new g(`Entity ${this.key} has no exposed name defined`,{code:"E_MISSING_EXPOSED_NAME",status:500});return e}getDatabaseTableName(){return Bn(this.getExposedName(),this.namespace)}addProperty(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a property ${e.key}, but it already exists`);let t=new Dt(this.root,this.key,e);return this.root.graph.setNode(t.key,t),this.root.graph.setEdge(this.key,t.key,{type:"property"}),this.fields.push({type:"property",key:t.key}),t}removeProperty(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new zt(`Trying to remove the ${e} property, but it doesn't exist`);if(this.root.graph.node(e).getParentInstance()!==this)throw new zt(`Trying to remove the ${e} property, but it doesn't belong to this entity`);Ee(this.root.graph,e),this.removeField(e)}get properties(){return this.listProperties()}*listProperties(){for(let{key:e,type:t}of this.fields){if(t!=="property")continue;let i=this.root.graph.node(e);!i||i.kind!==ne||(yield i)}}withInheritedProperties(){if(this.root.readOnly&&this.#e)return this.#e.values();let e=new Map,t=this.listAllParents("up");for(let i of t)for(let r of i.properties)r.info.name&&e.set(r.info.name,r);for(let i of this.properties)i.info.name&&e.set(i.info.name,i);return this.root.readOnly&&(this.#e=Array.from(e.values())),e.values()}hasProperties(){return this.fields.some(e=>e.type==="property")}get parents(){return this.listParents()}*listParents(){for(let e of this.root.graph.outEdges(this.key)){let t=this.root.graph.edge(e);if(!t||t.type!=="parent")continue;let i=this.root.graph.node(e.w);i&&(yield i)}}listAllParents(e="up"){if(this.root.readOnly&&this.#t?.[e])return this.#t[e];let t=new Set,i=[],r=[...this.listParents()],s=0;for(;s<r.length;){let a=r[s++];t.has(a.key)||(t.add(a.key),i.push(a),r.push(...a.listParents()))}return e==="down"&&i.reverse(),this.root.readOnly&&(this.#t||(this.#t={}),this.#t[e]=i),i}addParent(e,t){this.root.ensureWritable();let i=this.domain.buildReferenceKey(e,t);if(i===this.key){let s="Entity cannot be a parent of itself";throw new Bt([{field:"parents",message:s,rule:"circular"}],{message:s})}let{graph:r}=this.root;if(!r.hasNode(i)){let s=`Entity with key "${e}" not found`;throw t&&(s+=` in domain "${t}"`),new Bt([{field:"parents",message:s,rule:"required"}],{message:s})}if(this.hasCircularParent(i)){let s=`Circular inheritance detected. Cannot add ${e} as a parent`;throw new Bt([{field:"parents",message:s,rule:"circular"}],{message:s})}if(r.outEdges(this.key,i).next().value){let s=`Parent ${e} already exists`;throw new Bt([{field:"parents",message:s,rule:"unique"}],{message:s})}return t?r.setEdge(this.key,i,{type:"parent",domain:t,foreign:!0}):r.setEdge(this.key,i,{type:"parent"}),this}removeParent(e,t){this.root.ensureWritable();let{graph:i}=this.root,r=this.domain.buildReferenceKey(e,t);if(!i.hasEdge(this.key,r)){let a=`Trying to remove a parent ${e} from ${this.key}, but it doesn't exist`;throw t&&(a=`Trying to remove a foreign parent ${e} from domain "${t}" from ${this.key}, but it doesn't exist`),new Error(a)}let s=i.edge(this.key,r);if(!s||s.type!=="parent"){let a=`Edge between ${this.key} and ${e} exists but is not a parent relationship`;throw t&&(a=`Edge between ${this.key} and ${e} in domain "${t}" exists but is not a parent relationship`),new Error(a)}return i.removeEdge(this.key,r),this}hasParents(){for(let e of this.root.graph.outEdges(this.key))if(this.root.graph.edge(e)?.type==="parent")return!0;return!1}hasCircularParent(e){let{graph:t}=this.root;for(let r of t.outEdges(e,this.key))if(t.edge(r)?.type==="parent")return!0;let i=t.node(e);for(;i;){if(i.key===this.key)return!0;let r=[...i.listParents()];if(r.length===0)break;i=r[0]}return!1}breadcrumbs(){let e=[];e.push({key:this.key,name:this.info.getLabel("Unnamed entity"),kind:N});let t=this.getParentInstance();if(t){e.push({key:t.key,kind:t.kind,name:t.info.getLabel("Unnamed model")});let i=t.getParentInstance();for(;i&&i!==this.root;)e.push({key:i.key,kind:i.kind,name:i.info.getLabel("Unnamed namespace")}),i=i.getParentInstance()}return e.push({key:this.root.key,name:this.root.info.getLabel("Unnamed data domain"),kind:this.root.kind}),e.reverse()}addAssociation(e={}){this.root.ensureWritable();let{graph:t}=this.root,i={...e},r=i.targets;delete i.targets;let s=Array.isArray(r)&&r.length;if(s)for(let n of r){if(!n.key)throw new Error("Missing key for target");if(n.domain&&n.domain!==this.root.key){let l=`${n.domain}:${n.key}`;if(!t.hasNode(l))throw new Error(`Foreign entity ${l} not found`)}else if(!t.hasNode(n.key))throw new Error(`Target entity ${n.key} not found`)}let a=new oi(this.root,this.key,i);if(t.setNode(a.key,a),t.setEdge(this.key,a.key,{type:"association"}),s)for(let n of r)a.addTarget(n.key,n.domain);return this.fields.push({type:"association",key:a.key}),a}removeAssociation(e){if(this.root.ensureWritable(),!this.root.graph.hasEdge(this.key,e))throw new Error(`Unable to find a connection between this entity and the ${e} association`);let t=this.root.graph.edge(this.key,e);if(!t||t.type!=="association")throw new Error(`Association ${e} does not exist`);let i=this.root.graph.node(e);if(i){let r=i.getReciprocalAssociations();for(let s of r)s.remove()}Ee(this.root.graph,e),this.removeField(e)}get associations(){return this.listAssociations()}*listAssociations(){for(let{key:e,type:t}of this.fields){if(t!=="association")continue;let i=this.root.graph.node(e);!i||i.kind!==ae||(yield i)}}hasAssociations(){return this.fields.some(e=>e.type==="association")}*listFields(){for(let{key:e}of this.fields){let t=this.root.graph.node(e);t&&(t.kind===ae||t.kind===ne)&&(yield t)}}hasFields(){return this.fields.length>0}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}toApiShape(){return new Tt().entity(this)}toExample(e,t={}){let i=this.toApiShape();return new Jt(e,{renderExamples:t.renderExamples??!0,renderMocked:t.renderMocked??!0,renderOptional:t.renderOptional??!0,selectedUnions:t.selectedUnions}).generate(i)}isChildOf(e){if(this.key===e)return!1;let t=this.getParentInstance();return t?t.key===e?!0:t.isChildOf(e):!1}primaryKey(){for(let t of this.properties)if(t.primary)return t;let e;for(let t of this.listParents()){let i=t.primaryKey();i&&(e=i)}return e}addSemantic(e){this.root.ensureWritable();let t=Be[e.id];if(!Da(t))throw new Error(`Invalid semantic type: ${e.id}. Expected an entity semantic.`);let i=this.semantics.findIndex(r=>r.id===e.id);i>=0?this.semantics[i]=e:this.semantics.push(e),t.properties?.forEach(r=>{r.meta.required&&this.addProperty(r.value)})}removeSemantic(e){this.root.ensureWritable();let t=this.semantics.findIndex(i=>i.id===e);t>=0&&this.semantics.splice(t,1)}hasSemantic(e){return this.semantics.some(t=>t.id===e)}getSemantic(e){return this.semantics.find(t=>t.id===e)}withInheritedAssociations(){if(this.root.readOnly&&this.#r)return this.#r.values();let e=new Map,t=this.listAllParents("up");for(let i of t)for(let r of i.associations)r.info.name&&e.set(r.info.name,r);for(let i of this.associations)i.info.name&&e.set(i.info.name,i);return this.root.readOnly&&(this.#r=Array.from(e.values())),e.values()}listAllSemantics(){if(this.root.readOnly&&this.#i)return this.#i;let e=new Map,t=this.listAllParents("up");for(let r of t)for(let s of r.semantics)e.set(s.id,s);for(let r of this.semantics)e.set(r.id,r);let i=Array.from(e.values());return this.root.readOnly&&(this.#i=i),i}generateUniqueName(e){let t=new Set;for(let s of this.listFields())s.info.name&&t.add(s.info.name);let i=2,r=`${e}_copy`;for(;t.has(r);)r=`${e}_copy_${i}`,i++;return r}};var ci=class extends g{static code="E_REMOVE_ENTITY";static status=500;static message="Error removing a data entity.";static help="Make sure the entity exists and can be removed."};var Oe=class extends g{static code="E_ATTACH";static status=500;static message="Error attaching the object.";static help="Make sure you are attaching the right object."};var ot=class extends g{static code="E_DETACH";static status=500;static message="Error detaching the object.";static help="Make sure you are detaching the right object."};var Ut=class o extends Me{kind;info;fields;deprecated;static createSchema(e={}){let{key:t=q(),fields:i,deprecated:r}=e,s=ie.fromJSON(e.info,{name:"New model"}).toJSON(),a={kind:ye,key:t,info:s};return Array.isArray(i)&&(a.fields=[...i]),typeof r=="boolean"&&(a.deprecated=r),a}constructor(e,t){let i=o.createSchema(t);super(e,i.key),this.kind=ye,this.info=new ie(i.info),Array.isArray(i.fields)?this.fields=[...i.fields]:this.fields=[],typeof i.deprecated=="boolean"?this.deprecated=i.deprecated:this.deprecated=void 0}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),e}getParentInstance(){let e=this.root.graph.parent(this.key);return e?this.root.graph.node(e):this.root}addEntity(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Entity with key ${e?.key} already exists`);let t=new li(this.root,e);return this.root.graph.setNode(t.key,t),this.root.graph.setParent(t.key,this.key),this.fields.push({key:t.key,type:"entity"}),t}removeEntity(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new ci(`Trying to remove the ${e} entity, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==N)throw new ci(`Trying to remove the ${e} entity, but it is not an entity`);if(t.getParentInstance()!==this)throw new ci(`Trying to remove the ${e} entity, but it is not a child of this model`);Ee(this.root.graph,e),this.removeField(e)}attachEntity(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Oe(`Trying to attach the ${e} entity, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==N)throw new Oe(`Trying to attach the ${e} entity, but it is not a entity`);if(t.domain.key!==this.root.key)throw new Oe(`Trying to attach the ${e} entity, but it is not in the same domain`);let i=t.getParentInstance();if(i===this)throw new Oe(`Trying to attach the ${e} entity, but it is already a child of this model`);if(i.detachEntity(e),this.fields.some(s=>s.key===e)||this.fields.push({type:"entity",key:e}),this.root.graph.setParent(e,this.key),this.root.graph.parent(e)!==this.key)throw new Oe(`Trying to attach the ${e} entity, but it is not a child of this model`);return this}detachEntity(e){this.root.ensureWritable();let t=this.fields.findIndex(r=>r.key===e);if(t===-1)throw new ot(`Trying to detach the ${e} entity, but it doesn't exist`);let i=this.root.graph.node(e);if(!i||i.kind!==N)throw new ot(`Trying to detach the ${e} entity, but it is not an entity`);if(i.getParentInstance()!==this)throw new ot(`Trying to detach the ${e} entity, but it is not a child of this model`);return this.fields.splice(t,1),this.root.graph.setParent(e),this}*listEntities(){for(let{key:e,type:t}of this.fields){if(t!=="entity")continue;let i=this.root.graph.node(e);!i||i.kind!==N||(yield i)}}hasEntities(){return this.fields.some(e=>e.type==="entity")}breadcrumbs(){let e=[];e.push({key:this.key,name:this.info.getLabel("Unnamed model"),kind:ye});let t=this.getParentInstance();for(;t&&t!==this.root;)e.push({key:t.key,kind:t.kind,name:t.info.getLabel("Unnamed namespace")}),t=t.getParentInstance();return e.push({key:this.root.key,name:this.root.info.getLabel("Unnamed data domain"),kind:this.root.kind}),e.reverse()}hasFields(){return this.fields.length>0}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}isChildOf(e){if(this.key===e)return!1;let t=this.getParentInstance();return t?t.key===e?!0:t===this.root?!1:t.isChildOf(e):!1}};var Gt=class extends g{static code="E_REMOVE_NAMESPACE";static status=500;static message="Error removing a domain namespace.";static help="Make sure the namespace exists and can be removed."};var Vi=class extends g{static code="E_REMOVE_MODEL";static status=500;static message="Error removing a domain model.";static help="Make sure the model exists and can be removed."};var di=class o extends Me{kind;info;fields;deprecated;static createSchema(e={}){let{key:t=q(),fields:i,deprecated:r}=e,s=ie.fromJSON(e.info,{name:"New namespace"}).toJSON(),a={kind:ke,key:t,info:s};return Array.isArray(i)&&(a.fields=[...i]),typeof r=="boolean"&&(a.deprecated=r),a}constructor(e,t){let i=o.createSchema(t);super(e,i.key),this.kind=ke,this.info=new ie(i.info),Array.isArray(i.fields)?this.fields=[...i.fields]:this.fields=[],typeof i.deprecated=="boolean"?this.deprecated=i.deprecated:this.deprecated=void 0}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON()};return Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),typeof this.deprecated=="boolean"&&(e.deprecated=this.deprecated),e}addNamespace(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a namespace to ${this.key}, but it already exists`);let t=new o(this.root,e);return this.root.graph.setNode(t.key,t),this.root.graph.setParent(t.key,this.key),this.fields.push({type:"namespace",key:t.key}),t}removeNamespace(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Gt(`Trying to remove the ${e} namespace, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==ke)throw new Gt(`Trying to remove the ${e} namespace, but it is not a namespace`);return Ee(this.root.graph,e),this.removeField(e),this}attachNamespace(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Error(`Trying to attach the ${e} namespace, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==ke)throw new Error(`Trying to attach the ${e} namespace, but it is not a namespace`);if(t.domain.key!==this.root.key)throw new Error(`Trying to attach the ${e} namespace, but it is not in the same domain`);let i=t.getParentInstance();if(i===this)throw new Oe(`Trying to attach the ${e} entity, but it is already a child of this model`);return this.root!==i&&i.detachNamespace(e),this.fields.push({type:"namespace",key:e}),this.root.graph.setParent(e,this.key),this}detachNamespace(e){this.root.ensureWritable();let t=this.fields.findIndex(r=>r.key===e);if(t===-1)throw new Gt(`Trying to detach the ${e} namespace, but it doesn't exist`);let i=this.root.graph.node(e);if(!i||i.kind!==ke)throw new Gt(`Trying to detach the ${e} namespace, but it is not a namespace`);return this.fields.splice(t,1),this.root.graph.setParent(e),this}*listNamespaces(){for(let{key:e,type:t}of this.fields){if(t!=="namespace")continue;let i=this.root.graph.node(e);!i||i.kind!==ke||(yield i)}}hasNamespaces(){return this.fields.some(e=>e.type==="namespace")}addModel(e){if(this.root.ensureWritable(),e&&e.key&&this.root.graph.hasNode(e.key))throw new Error(`Trying to add a model to ${this.key}, but it already exists`);let t=new Ut(this.root,e);return this.root.graph.setNode(t.key,t),this.root.graph.setParent(t.key,this.key),this.fields.push({type:"model",key:t.key}),t}removeModel(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Vi(`Trying to remove the ${e} model, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==ye)throw new Vi(`Trying to remove the ${e} model, but it is not a model`);return Ee(this.root.graph,e),this.removeField(e),this}attachModel(e){if(this.root.ensureWritable(),!this.root.graph.hasNode(e))throw new Oe(`Trying to attach the ${e} model, but it doesn't exist`);let t=this.root.graph.node(e);if(!t||t.kind!==ye)throw new Oe(`Trying to attach the ${e} model, but it is not a model`);if(t.domain.key!==this.root.key)throw new Oe(`Trying to attach the ${e} model, but it is not in the same domain`);let i=t.getParentInstance();if(i===this)throw new Oe(`Trying to attach the ${e} model, but it is already a child of this namespace`);return this.root!==i&&i.detachModel(e),this.fields.push({type:"model",key:e}),this.root.graph.setParent(e,this.key),this}detachModel(e){this.root.ensureWritable();let t=this.fields.findIndex(r=>r.key===e);if(t===-1)throw new ot(`Trying to detach the ${e} model, but it doesn't exist`);let i=this.root.graph.node(e);if(!i||i.kind!==ye)throw new ot(`Trying to detach the ${e} model, but it is not a model`);if(i.getParentInstance()!==this)throw new ot(`Trying to detach the ${e} model, but it is not a child of this namespace`);return this.fields.splice(t,1),this.root.graph.setParent(e),this}*listModels(){for(let{key:e,type:t}of this.fields){if(t!=="model")continue;let i=this.root.graph.node(e);!i||i.kind!==ye||(yield i)}}hasModels(){return this.fields.some(e=>e.type==="model")}getParentInstance(){let e;for(let t of this.root.graph.parents(this.key)){e=t;break}return e?this.root.graph.node(e):this.root}*listFields(){for(let{key:e}of this.fields){let t=this.root.graph.node(e);t&&(t.kind===ke||t.kind===ye)&&(yield t)}}hasFields(){return this.fields.length>0}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}isChildOf(e){if(this.key===e)return!1;let t=this.getParentInstance();return t?t.key===e?!0:t===this.root?!1:t.isChildOf(e):!1}};function pi(o,e,t){return o+""+e+""+(t||"\0")}function da(o,e,t){let i={v:o,w:e};return t&&(i.name=t),i}var Mr=class o{isDirectedValue;isMultigraphValue;isCompoundValue;graphLabelValue;nodesValue;#e;get parentValue(){if(!this.isCompoundValue)throw new Error("Cannot access parentValue in a non-compound graph");return this.#e||(this.#e=new Map),this.#e}#t;get childrenValue(){if(!this.isCompoundValue)throw new Error("Cannot access childrenValue in a non-compound graph");return this.#t||(this.#t=new Map),this.#t}inValue;predecessorsValue;outValue;successorsValue;edgeObjectsValue;edgeLabelsValue;nodeCountValue;edgeCountValue;constructor(e={}){this.isDirectedValue=typeof e.directed=="boolean"?e.directed:!0,this.isMultigraphValue=typeof e.multigraph=="boolean"?e.multigraph:!1,this.isCompoundValue=typeof e.compound=="boolean"?e.compound:!1,this.graphLabelValue=void 0,this.nodesValue=new Map,this.isCompoundValue&&this.childrenValue.set("\0",new Set),this.inValue=new Map,this.outValue=new Map,this.predecessorsValue=new Map,this.successorsValue=new Map,this.edgeObjectsValue=new Map,this.edgeLabelsValue=new Map,this.nodeCountValue=0,this.edgeCountValue=0,this.defaultNodeLabelFn=()=>{},this.defaultEdgeLabelFn=()=>{}}isDirected(){return this.isDirectedValue}isMultigraph(){return this.isMultigraphValue}isCompound(){return this.isCompoundValue}setGraph(e){return this.graphLabelValue=e,this}graph(){return this.graphLabelValue}defaultNodeLabelFn(e){}defaultEdgeLabelFn(e,t,i){}setDefaultNodeLabel(e){return typeof e=="function"?this.defaultNodeLabelFn=e:this.defaultNodeLabelFn=()=>e,this}nodeCount(){return this.nodeCountValue}nodes(){return this.nodesValue.keys()}*sources(){for(let e of this.nodes()){let t=this.inValue.get(e);(!t||t.size===0)&&(yield e)}}*sinks(){for(let e of this.nodes()){let t=this.outValue.get(e);(!t||t.size===0)&&(yield e)}}setNodes(e,t){if(typeof t>"u")for(let i of e)this.setNode(i);else for(let i of e)this.setNode(i,t);return this}setNode(e,t){return this.nodesValue.has(e)?(t&&this.nodesValue.set(e,t),this):(this.nodesValue.set(e,t||this.defaultNodeLabelFn(e)),this.isCompoundValue&&(this.parentValue.set(e,new Set(["\0"])),this.childrenValue.set(e,new Set),this.childrenValue.get("\0").add(e)),this.inValue.set(e,new Map),this.predecessorsValue.set(e,new Map),this.outValue.set(e,new Map),this.successorsValue.set(e,new Map),++this.nodeCountValue,this)}node(e){return this.nodesValue.get(e)}hasNode(e){return this.nodesValue.has(e)}removeNode(e){if(!this.hasNode(e))return this;if(this.nodesValue.delete(e),this.isCompoundValue){this.removeFromParentsChildList(e),this.parentValue.delete(e);for(let r of this.children(e))this.removeParent(r,e);this.childrenValue.delete(e)}let t=this.inValue.get(e);if(t){for(let r of t.keys()){let s=this.edgeObjectsValue.get(r);s&&this.removeEdge(s)}this.inValue.delete(e)}this.predecessorsValue.delete(e);let i=this.outValue.get(e);if(i){for(let r of i.keys()){let s=this.edgeObjectsValue.get(r);s&&this.removeEdge(s)}this.outValue.delete(e)}return this.successorsValue.delete(e),this.nodeCountValue-=1,this}setParent(e,t="\0"){if(!this.isCompoundValue)throw new Error("Cannot set parent in a non-compound graph");return t!=="\0"&&(this.checkParentCycle(e,t),this.nodesValue.has(t)||this.setNode(t)),this.nodesValue.has(e)||this.setNode(e),this.removeFromParentsChildList(e),this.parentValue.set(e,new Set),this.parentValue.get(e).add(t),this.childrenValue.has(t)||this.childrenValue.set(t,new Set),this.childrenValue.get(t).add(e),this}checkParentCycle(e,t){for(let i of this.parents(t)){if(i===e)throw new Error(`Setting ${t} as parent of ${e} would create a cycle`);this.checkParentCycle(e,i)}}addParent(e,t){if(!this.isCompoundValue)throw new Error("Cannot set parent in a non-compound graph");return this.checkParentCycle(e,t),this.nodesValue.has(t)||this.setNode(t),this.nodesValue.has(e)||this.setNode(e),this.parentValue.has(e)||this.parentValue.set(e,new Set),this.parentValue.get(e).add(t),this.childrenValue.has(t)||this.childrenValue.set(t,new Set),this.childrenValue.get(t).add(e),this}removeParent(e,t){if(!this.isCompoundValue)throw new Error("Cannot remove parent in a non-compound graph");return this.nodesValue.has(e)?(t?(this.childrenValue.get(t)?.delete(e),this.parentValue.get(e)?.delete(t)):(this.removeFromParentsChildList(e),this.parentValue.set(e,new Set),this.parentValue.get(e).add("\0"),this.childrenValue.get("\0").add(e)),this):this}removeFromParentsChildList(e){let t=this.parentValue.get(e);if(t)for(let i of t)this.childrenValue.get(i)?.delete(e)}*parents(e){if(this.isCompoundValue){let t=this.parentValue.get(e);if(t)for(let i of t)i!=="\0"&&(yield i)}}hasParents(e){for(let t of this.parents(e))return!0;return!1}hasParent(e,t){if(this.isCompoundValue){let i=this.parentValue.get(e);if(i)return i.has(t)}return!1}parent(e){for(let t of this.parents(e))return t}*children(e="\0"){if(this.isCompoundValue){let t=this.childrenValue.get(e);if(t)for(let i of t.keys())yield i}else if(e==="\0")for(let t of this.nodes())yield t}hasChildren(e="\0"){if(this.isCompoundValue){let t=this.childrenValue.get(e);if(!t)return!1;for(let i of t.keys())return!0;return!1}else if(e==="\0"){for(let t of this.nodes())return!0;return!1}return!1}*predecessors(e){let t=this.predecessorsValue.get(e);if(t)for(let i of t.keys())yield i}*successors(e){let t=this.successorsValue.get(e);if(t)for(let i of t.keys())yield i}*neighbors(e){if(!this.hasNode(e))return;let t=new Set;for(let i of this.predecessors(e))t.has(i)||(t.add(i),yield i);for(let i of this.successors(e))t.has(i)||(t.add(i),yield i)}isLeaf(e){if(this.isDirected()){for(let t of this.successors(e))return!1;return!0}for(let t of this.neighbors(e))return!1;return!0}filterNodes(e){let t=new o({directed:this.isDirectedValue,multigraph:this.isMultigraphValue,compound:this.isCompoundValue}),i=this.graph();t.setGraph(i);let r=new Set;if(this.nodesValue.forEach((s,a)=>{e(a)&&(t.setNode(a,s),r.add(a))}),this.edgeObjectsValue.forEach(s=>{r.has(s.v)&&r.has(s.w)&&t.setEdge(s,this.edge(s))}),this.isCompoundValue){let s=new Map;for(let a of t.nodes()){let n=[...this.parents(a)],l=[];for(;n.length>0;){let c=!1;for(let u of n)t.hasNode(u)&&(l.push(u),c=!0);if(c)break;let p=[];for(let u of n)for(let h of this.parents(u))p.push(h);n=p}l.length===0&&l.push("\0"),s.set(a,l)}for(let[a,n]of s){this.removeParent(a);for(let l of n)t.addParent(a,l)}}return t}setDefaultEdgeLabel(e){return typeof e=="function"?this.defaultEdgeLabelFn=e:this.defaultEdgeLabelFn=()=>e,this}edgeCount(){return this.edgeCountValue}edges(){return this.edgeObjectsValue.values()}setPath(e,t){if(!Array.isArray(e)||!e.length)return this;let i=arguments.length>1;return e.reduce((r,s)=>(i?this.setEdge(r,s,t):this.setEdge(r,s),s)),this}setEdge(e,t,i,r){if(typeof e=="object"&&e!==null&&"v"in e){let s=e;arguments.length>1?this._setEdge({loop:0},s,t):this._setEdge({loop:0},s)}else if(typeof t=="string"){let s=da(e,t,r);arguments.length>2?this._setEdge({loop:0},s,i):this._setEdge({loop:0},s)}else throw new Error("Invalid arguments for setEdge");return this}_setEdge(e,t,i){let r=!1,s;arguments.length>2&&(s=i,r=!0);let a=pi(t.v,t.w,t.name);if(this.edgeLabelsValue.has(a)){if(r&&this.edgeLabelsValue.set(a,s),e.loop===0&&!this.isDirectedValue&&t.w!==t.v){let u=da(t.w,t.v,t.name);r?this._setEdge({loop:1},u,i):this._setEdge({loop:1},u)}return}if(t.name&&!this.isMultigraphValue)throw new Error("Cannot set a named edge when isMultigraph = false");this.hasNode(t.v)||this.setNode(t.v),this.hasNode(t.w)||this.setNode(t.w);let l=r?s:this.defaultEdgeLabelFn(t.v,t.w,t.name);this.edgeLabelsValue.set(a,l),this.edgeObjectsValue.set(a,t);let c=this.predecessorsValue.get(t.w);if(c){let u=(c.get(t.v)||0)+1;c.set(t.v,u)}let p=this.successorsValue.get(t.v);if(p){let u=(p.get(t.w)||0)+1;p.set(t.w,u)}if(this.inValue.get(t.w).set(a,t),this.outValue.get(t.v).set(a,t),this.edgeCountValue++,e.loop===0&&!this.isDirectedValue&&t.w!==t.v){let u=da(t.w,t.v,t.name);r?this._setEdge({loop:1},u,i):typeof l=="object"&&l!==null?this._setEdge({loop:1},u,l):this._setEdge({loop:1},u)}}edge(e,t,i){let r;return typeof e=="object"?r=pi(e.v,e.w,e.name):r=pi(e,t,i),this.edgeLabelsValue.get(r)}hasEdge(e,t,i){let r;return typeof e=="object"?r=pi(e.v,e.w,e.name):r=pi(e,t,i),this.edgeLabelsValue.has(r)}removeEdge(e,t,i){return typeof e=="object"?this._removeEdge({loop:0},e.v,e.w,e.name):this._removeEdge({loop:0},e,t,i),this}_removeEdge(e,t,i,r){let s=pi(t,i,r),a=this.edgeObjectsValue.get(s);if(a){this.edgeLabelsValue.delete(s),this.edgeObjectsValue.delete(s);let n=this.predecessorsValue.get(a.w);if(n){let c=(n.get(a.v)||0)-1;c<=0?n.delete(a.v):n.set(a.v,c)}let l=this.successorsValue.get(a.v);if(l){let c=(l.get(a.w)||0)-1;c<=0?l.delete(a.w):l.set(a.w,c)}this.inValue.get(a.w)?.delete(s),this.outValue.get(a.v)?.delete(s),this.edgeCountValue--}!this.isDirectedValue&&e.loop===0&&this._removeEdge({loop:1},i,t,r)}*inEdges(e,t){let i=this.inValue.get(e);if(i){let r=i.values();if(!t){for(let s of r)yield s;return}for(let s of r)s.v===t&&(yield s)}}*outEdges(e,t){let i=this.outValue.get(e);if(!i)return;let r=i.values();if(!t){for(let s of r)yield s;return}for(let s of r)s.w===t&&(yield s)}*nodeEdges(e,t){for(let i of this.inEdges(e,t))yield i;for(let i of this.outEdges(e,t))i.v!==i.w&&(yield i)}};function Zc(o,e){let t=[];for(let i of o.nodes()){let r=o.node(i);if(!r||r.domain.key!==e)continue;let s=[...o.parents(i)],a={v:i};a.value=r.toJSON(),s.length&&(a.parents=s),t.push(a)}return t}function Qc(o,e){let t=[];for(let i of o.edges()){let r=o.edge(i);if(!r)continue;let s=o.node(i.v),a=o.node(i.w);if(!s||!a||s.domain.key!==e||a.domain.key!==e&&r.type!=="association"&&r.type!=="parent")continue;let n={v:i.v,w:i.w};i.name&&(n.name=i.name),n.value=structuredClone(r),t.push(n)}return t}function ed(o,e){let t=[],i=new Set;for(let r of o.nodes()){let s=o.node(r);s&&s.domain.key===e&&i.add(r)}for(let r of i){let s=o.node(r);if(s){if(s.kind===ne||s.kind===ae){let n=[...o.inEdges(r)].filter(l=>{let c=o.node(l.v);return c&&c.domain.key===e});if(n.length===0){let l=s.kind===ne?"Property":"Association";t.push(`${l} "${s.info.name}" (${r}) has no parent entity edge. This will cause deserialization to fail.`)}else if(n.length>1){let l=s.kind===ne?"Property":"Association",c=n.map(p=>p.v).join(", ");t.push(`${l} "${s.info.name}" (${r}) has multiple parent edges: ${c}. This may cause deserialization issues.`)}else{let l=n[0],c=o.node(l.v);if(!c||c.kind!==N&&c.kind!==ae){let p=s.kind===ne?"Property":"Association";t.push(`${p} "${s.info.name}" (${r}) has a parent that is not an entity or association. Parent: ${c?.kind||"unknown"} (${l.v})`)}}}if(s.kind===N&&([...o.parents(r)].some(l=>{let c=o.node(l);return c&&c.kind===ye})||t.push(`Entity "${s.info.name}" (${r}) has no model parent. Entities must belong to a model.`)),s.kind===ye){let a=[...o.parents(r)],n=a.some(l=>{let c=o.node(l);return c&&c.kind===ke});if(a.length>0&&!n){let l=a.map(c=>`${o.node(c)?.kind||"unknown"} (${c})`).join(", ");t.push(`Model "${s.info.name}" (${r}) has invalid parent types: ${l}. Models can only belong to namespaces or be at root level.`)}}}}for(let r of i){let s=o.node(r);if(s&&s.kind===ae){let a=s,l=[...o.outEdges(r)].filter(c=>{let p=o.edge(c);return p&&p.type==="association"});l.length;for(let c of l){let p=o.node(c.w);p?p.kind!==N&&t.push(`Association "${a.info.name}" (${r}) references non-entity target: ${p.kind} (${c.w})`):t.push(`Association "${a.info.name}" (${r}) references non-existent target: ${c.w}`)}}}if(t.length>0)throw new Error(`Graph consistency validation failed for domain "${e}":
|
|
52
|
+
`+t.map(r=>` - ${r}`).join(`
|
|
53
|
+
`))}function Hn(o,e){return ed(o,e),{options:{directed:o.isDirected(),multigraph:o.isMultigraph(),compound:o.isCompound()},nodes:Zc(o,e),edges:Qc(o,e)}}function Wn(o,e){for(let t of o.nodes()){let i=o.node(t);i&&i.domain.key===e&&o.removeNode(t)}}function pa(o,e,t){let i=new Set,r=new Set;for(let a of e.nodes()){let n=e.node(a);if(!n)continue;let l=`${t}:${a}`;o.setNode(l,n),i.add(l)}for(let a of e.edges()){let n=e.edge(a);if(!n)continue;let l=`${t}:${a.v}`,c=`${t}:${a.w}`;o.setEdge(l,c,{foreign:!0,domain:t,...n}),r.add(`${l}|${c}`)}let s=new Set;for(let a of e.nodes()){let n=`${t}:${a}`;for(let l of e.parents(a)){let c=`${t}:${l}`,p=o.node(n),u=o.node(c);p.kind===N&&u.kind===N?s.has(n)?o.addParent(n,c):(s.add(n),o.setParent(n,c)):o.setParent(n,c)}}return{nodes:i,edges:r}}function Gn(o,e){for(let t of e)if(t.w===o)return t.v}function td(o,e,t,i,r){if(!e){let a={type:"malformed_entry",severity:"error",message:"Unable to restore data domain graph. Malformed node entry"};if(r.push(a),i==="strict")throw new Error(a.message);return}let s=e;if(!s.kind){let a={type:"malformed_entry",severity:"error",message:"Unable to restore data domain graph. Node entry missing kind property",affectedKey:s.key};if(r.push(a),i==="strict")throw new Error(a.message);return}try{if(s.kind===ke)return new di(o,s);if(s.kind===ye)return new Ut(o,s);if(s.kind===N)return new li(o,s);if(s.kind===ne){let n=s,l=Gn(n.key,t);if(!l){let c={type:"missing_edge",severity:"error",message:`Property "${n.info?.name||n.key}" has no parent entity edge`,affectedKey:n.key,resolution:i==="lenient"?"Property will be skipped":void 0};if(r.push(c),i==="strict")throw new Error("Unable to restore data domain graph. Malformed node entry");return}return new Dt(o,l,n)}if(s.kind===ae){let n=s,l=Gn(n.key,t);if(!l){let c={type:"missing_edge",severity:"error",message:`Association "${n.info?.name||n.key}" has no parent entity edge`,affectedKey:n.key,resolution:i==="lenient"?"Association will be skipped":void 0};if(r.push(c),i==="strict")throw new Error("Unable to restore data domain graph. Malformed node entry");return}return new oi(o,l,n)}let a={type:"unknown_kind",severity:"error",message:`Unknown node kind: ${s.kind}`,affectedKey:s.key};if(r.push(a),i==="strict")throw new Error(`Unable to restore data domain graph. Unknown node kind ${s.kind}`);return}catch(a){let n={type:"malformed_entry",severity:"error",message:`Failed to create node: ${a instanceof Error?a.message:String(a)}`,affectedKey:s.key};if(r.push(n),i==="strict")throw a;return}}function Xn(o,e={}){let{json:t,dependencies:i,mode:r="strict"}=e,s=new Mr({compound:!0,multigraph:!0,directed:!0}),a=[],n=new Set,l=new Set;if(i)for(let p of i)try{let u=pa(s,p.graph,p.key);u.edges.size&&(l=new Set([...l,...u.edges])),u.nodes.size&&(n=new Set([...n,...u.nodes])),o.dependencies.set(p.key,p)}catch(u){let h=`Failed to merge dependency "${p.key}": ${u instanceof Error?u.message:String(u)}`;if(r==="strict")throw new Error(h,{cause:u});let m={type:"missing_dependency",severity:"error",message:h,affectedKey:p.key,resolution:"Dependency will be skipped"};a.push(m)}if(!t)return{graph:s,issues:a,success:!0};if(Array.isArray(t.nodes)){let p=new Map;for(let u of t.nodes){let h=td(o,u.value,t.edges,r,a);h&&(s.setNode(u.v,h),u.parents&&p.set(u.v,u.parents))}for(let[u,h]of p){if(!s.hasNode(u)){let m={type:"missing_node",severity:"warning",message:`Cannot set parents for missing node: ${u}`,affectedKey:u,resolution:"Parent relationship will be skipped"};a.push(m);continue}for(let m of h){if(!s.hasNode(m)){let f={type:"missing_node",severity:"warning",message:`Parent node "${m}" not found for child "${u}"`,affectedKey:u,context:{parentKey:m},resolution:"Parent relationship will be skipped"};a.push(f);continue}try{s.setParent(u,m)}catch(f){let k={type:"invalid_parent",severity:"warning",message:`Failed to set parent "${m}" for child "${u}": ${f instanceof Error?f.message:String(f)}`,affectedKey:u,context:{parentKey:m},resolution:"Parent relationship will be skipped"};a.push(k)}}}}if(Array.isArray(t.edges))for(let p of t.edges){if(!p.value){let u="Edge entry missing value";if(r==="strict")throw new Error(u);let h={type:"malformed_entry",severity:"error",message:u,context:{edge:p}};a.push(h);continue}if(p.value.foreign&&!n.has(p.w)){let u={type:"missing_node",severity:"warning",message:`Missing foreign node: ${p.w}`,affectedKey:p.w,resolution:"Edge will be skipped"};a.push(u);continue}if(n.has(p.v)||n.has(p.w)){if(!s.hasNode(p.v)||!s.hasNode(p.w)){let u={type:"missing_node",severity:"warning",message:`Missing foreign node for edge: ${p.v} -> ${p.w}`,context:{sourceNode:p.v,targetNode:p.w},resolution:"Edge will be skipped"};a.push(u);continue}}else{if(!s.hasNode(p.v)){let u={type:"missing_node",severity:"warning",message:`Source node not found for edge: ${p.v}`,affectedKey:p.v,resolution:"Edge will be skipped"};a.push(u);continue}if(!s.hasNode(p.w)){let u={type:"missing_node",severity:"warning",message:`Target node not found for edge: ${p.w}`,affectedKey:p.w,resolution:"Edge will be skipped"};a.push(u);continue}}try{s.setEdge({v:p.v,w:p.w,name:p.name},p.value)}catch(u){let m={type:"malformed_entry",severity:"warning",message:`Failed to create edge ${p.v} -> ${p.w}: ${u instanceof Error?u.message:String(u)}`,context:{sourceNode:p.v,targetNode:p.w},resolution:"Edge will be skipped"};a.push(m)}}for(let p of s.nodes()){let u=s.node(p);if(u){if(u.kind===ne){let h=u,m=h.parent?s.node(h.parent):void 0;m&&Array.isArray(m.fields)&&(m.fields.some(b=>b.key===h.key&&b.type==="property")||m.fields.push({type:"property",key:h.key}))}else if(u.kind===ae){let h=u,m=h.parent?s.node(h.parent):void 0;m&&Array.isArray(m.fields)&&(m.fields.some(b=>b.key===h.key&&b.type==="association")||m.fields.push({type:"association",key:h.key}))}}}let c=a.some(p=>p.severity==="error");return{graph:s,issues:a,success:!c}}var ui=class extends EventTarget{dependencies=new Map;dependencyList=[];constructor(e=[],t=[]){super(),this.dependencyList=[...e];for(let i of t)this.dependencies.set(i.key,i)}};var Xe=class o extends ui{kind;key;graph;info;lifecycle;previousVersion;#e=!0;#t=!1;readOnly;get domain(){return this}#r;get fields(){return this.#r}set fields(e){this.#r=e}issues=[];static createSchema(e={}){let{key:t=q(),fields:i,lifecycle:r="draft",previousVersion:s}=e,a=ie.fromJSON(e.info,{name:"Unnamed domain"}).toJSON(),n={kind:ze,key:t,info:a,lifecycle:r};return s&&(n.previousVersion=s),e.dependencyList&&(n.dependencyList=structuredClone(e.dependencyList)),e.graph&&(n.graph=e.graph),Array.isArray(i)&&(n.fields=[...i]),n}constructor(e,t=[],i){let r=o.createSchema(e),s=[];for(let l of t)if(l instanceof o)l.readOnly?s.push(l):(console.warn(`Domain ${l.key} is not read only, cloning it. This may have performance implications.`),s.push(l.clone({readOnly:!0})));else if(typeof l=="object"&&l.kind===ze&&l.key){let c=new o(l,void 0,{readOnly:!0});s.push(c)}else throw new Error(`Invalid foreign domain dependency: ${l}`);super(r.dependencyList,s),this.kind=r.kind,this.key=r.key,this.info=new ie(r.info),this.readOnly=i?.readOnly||!1,this.lifecycle=r.lifecycle||"draft",this.previousVersion=r.previousVersion;let a=i?.mode||"strict",n=Xn(this,{json:r.graph,dependencies:s,mode:a});this.graph=n.graph,n.issues.length>0&&a==="lenient"&&(this.issues=n.issues),Array.isArray(r.fields)?this.fields=[...r.fields]:this.fields=[],Array.isArray(r.dependencyList)?this.dependencyList=[...r.dependencyList]:this.dependencyList=[],this.#e=!1}clone(e){let t=this.toJSON(),i=Array.from(this.dependencies.values()).map(s=>s.clone()),r={readOnly:this.readOnly,...e};return new o(t,i,r)}toJSON(){let e={info:this.info.toJSON(),kind:this.kind,key:this.key,graph:Hn(this.graph,this.key),lifecycle:this.lifecycle};return this.previousVersion&&(e.previousVersion=this.previousVersion),this.dependencyList.length>0&&(e.dependencyList=structuredClone(this.dependencyList)),Array.isArray(this.fields)&&this.fields.length&&(e.fields=[...this.fields]),e}notifyChange(){this.#t||this.#e||(this.#t=!0,queueMicrotask(()=>{this.#t=!1;let e=new Event("change");this.dispatchEvent(e)}))}changeLifecycle(e,t){if(e!==this.lifecycle){if(this.lifecycle==="published"){if(e!=="draft")throw new Error(`Cannot transition from published to ${e}`);if(!t)throw new Error("A new version must be specified when creating a draft from a published domain");if(t===this.info.version)throw new Error("The new version must be different from the current published version");this.previousVersion=this.info.version,this.info.version=t,this.lifecycle="draft",this.notifyChange();return}if(e==="draft"){if(this.lifecycle!=="committed")throw new Error(`Cannot transition from ${this.lifecycle} to draft`);this.lifecycle="draft",this.notifyChange();return}if(e==="committed"){if(this.lifecycle!=="draft")throw new Error(`Cannot transition from ${this.lifecycle} to committed`);this.lifecycle="committed",this.notifyChange();return}if(e==="published"){this.lifecycle="published",this.notifyChange();return}throw new Error(`Unknown lifecycle state: ${e}`)}}ensureWritable(){if(this.lifecycle!=="draft")throw new Error(`Cannot modify the data domain when it is in "${this.lifecycle}" lifecycle state`)}removeField(e){this.fields=this.fields.filter(t=>t.key!==e)}hasFields(){return this.fields.length>0}*listFields(){for(let{key:e}of this.fields){let t=this.graph.node(e);t&&(t.kind===ke||t.kind===ye)&&(yield t)}}addNamespace(e,t){if(this.ensureWritable(),t){if(!this.graph.hasNode(t))throw new Error(`Parent namespace ${t} does not exist`);let r=this.graph.node(t);if(!r||r.kind!==ke)throw new Error(`Parent namespace ${t} is not a valid namespace`);if(r.domain.key!==this.key)throw new Error("Cannot add a namespace to a foreign domain");return r.addNamespace(e)}let i=new di(this,e);return this.graph.setNode(i.key,i),this.fields.push({type:"namespace",key:i.key}),i}removeNamespace(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Namespace ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==ke)throw new Error(`Namespace ${e} not found`);if(t.domain.key!==this.key)throw new Error("Cannot remove a namespace from a foreign domain");let i=t.getParentInstance();return i===this?(Ee(this.graph,e),this.removeField(e)):i.removeNamespace(e),this}*listNamespaces(){for(let{key:e,type:t}of this.fields){if(t!=="namespace")continue;let i=this.graph.node(e);!i||i.kind!==ke||(yield i)}}*listForeignNamespaces(e){let t=this.dependencies.get(e);if(!t)throw new Error(`Foreign domain ${e} not found`);for(let i of t.listNamespaces()){let r=`${e}:${i.key}`;this.graph.node(r)&&(yield i)}}hasNamespaces(){return this.fields.some(e=>e.type==="namespace")}*listGraphNamespaces(e){for(let t of this.graph.children(e)){let i=this.graph.node(t);i.kind===ke&&i.domain.key===this.key&&(yield i)}}buildReferenceKey(e,t){if(t&&t!==this.key){if(typeof t!="string"||t.length===0)throw new Error(`Invalid namespace key. Expected a string, got ${typeof t}`);if(!this.dependencies.get(t))throw new Error(`Foreign domain ${t} not found`);return`${t}:${e}`}return e}findNamespace(e,t){let i=this.graph.node(this.buildReferenceKey(e,t));if(i&&i.kind===ke)return i}moveNamespace(e,t){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Namespace ${e} does not exist`);let i=this.findNamespace(e);if(!i)throw new Error(`Namespace ${e} not found in the graph`);if(t){let a=this.findNamespace(t);if(a&&a.domain.key!==this.key)throw new Error("Cannot move a namespace to a foreign domain");if(!a)throw new Error(`Parent namespace ${t} does not exist`)}if(e===t)throw new Error("Cannot move a namespace to itself");if(i.domain.key!==this.key)throw new Error("Cannot move a namespace from a foreign domain");let r;if(t){if(r=this.findNamespace(t),!r)throw new Error(`Parent namespace ${t} not found`);if(this.isChildOf(t,e))throw new Error("Cannot move a namespace to its own child")}let s=this.graph.parent(e);return s&&!t?this.graph.node(s).detachNamespace(e):s||this.removeField(e),t&&r?r.attachNamespace(e):this.fields.push({type:"namespace",key:e}),this}isChildOf(e,t){let i=this.graph.children(t);for(let r of i)if(r===e||this.isChildOf(e,r))return!0;return!1}addModel(e,t){if(this.ensureWritable(),t){if(!this.graph.hasNode(t))throw new Error(`Parent ${t} does not exist`);let r=this.findNamespace(t);if(!r)throw new Error(`Parent namespace ${t} is not a valid namespace`);if(r.domain.key!==this.key)throw new Error("Cannot add a model to a foreign domain");return r.addModel(e)}let i=new Ut(this,e);return this.graph.setNode(i.key,i),this.fields.push({type:"model",key:i.key}),i}removeModel(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Data model ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==ye)throw new Error(`Data model ${e} not found`);if(t.domain.key!==this.key)throw new Error("Cannot remove a model from a foreign domain");let i=t.getParentInstance();return i===this?(Ee(this.graph,e),this.removeField(e)):i.removeModel(e),this}*listModels(e){let t=e?.domain,i=e?.includeForeign??!1,r=e?.foreignOnly??!1;if(t){let s=t===this.key?this:this.dependencies.get(t);if(!s)throw new Error(`Foreign domain ${t} not found`);for(let a of s.listModels()){let n=t===this.key?a.key:`${t}:${a.key}`,l=this.graph.node(n);l&&(yield l)}return}if(!r)for(let{key:s,type:a}of this.fields){if(a!=="model")continue;let n=this.graph.node(s);n&&n.kind===ye&&(yield n)}if(i||r)for(let[s,a]of this.dependencies)for(let n of a.listModels()){let l=`${s}:${n.key}`,c=this.graph.node(l);c&&(yield c)}}*listForeignModels(e){yield*this.listModels({domain:e})}hasModels(){return this.fields.some(e=>e.type==="model")}*listGraphModels(e){for(let t of this.graph.children(e)){let i=this.graph.node(t);i.kind===ye&&i.domain.key===this.key&&(yield i)}}findModel(e,t){let i=this.graph.node(this.buildReferenceKey(e,t));if(i&&i.kind===ye)return i}moveModel(e,t){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Data model ${e} does not exist`);let i=this.findModel(e);if(!i)throw new Error(`Data model ${e} not found in the graph`);if(t){let s=this.findNamespace(t);if(s&&s.domain.key!==this.key)throw new Error("Cannot move a model to a foreign domain");if(!s)throw new Error(`Parent namespace ${t} does not exist`)}if(i.domain.key!==this.key)throw new Error("Cannot move a data model to a foreign domain");let r=this.graph.parent(e);if(r&&!t){let s=this.findNamespace(r);if(!s)throw new Error(`The parent namespace ${r} not found`);s.detachModel(e)}else r||this.removeField(e);return t?this.findNamespace(t).attachModel(e):this.fields.push({type:"model",key:e}),this}addEntity(e,t){if(this.ensureWritable(),!e)throw new Error("An entity expects a DomainModel parent");if(!this.graph.hasNode(e))throw new Error(`The parent ${e} does not exist`);let i=this.findModel(e);if(!i)throw new Error(`Parent model ${e} is not a valid model`);if(i.domain.key!==this.key)throw new Error("Cannot add an entity to a foreign domain");return i.addEntity(t)}removeEntity(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Entity ${e} does not exist`);let t=this.graph.parent(e);if(!t)throw new Error(`Parent model not found for entity ${e}`);let i=this.findModel(t);if(!i)throw new Error(`Parent model ${t} not found`);if(i.domain.key!==this.key)throw new Error("Cannot remove an entity from a foreign domain");return i.removeEntity(e),this}*listEntities(e){let t,i,r=!1,s=!1;if(typeof e=="string"?t=e:e&&typeof e=="object"&&(t=e.parent,i=e.domain,r=e.includeForeign??!1,s=e.foreignOnly??!1),i&&i!==this.key&&!this.dependencies.get(i))throw new Error(`Foreign domain ${i} not found`);let a=t?this.graph.children(t):this.graph.nodes();for(let n of a){let l=this.graph.node(n);if(l&&l.kind===N){let c=l.domain.key===this.key;if(i){l.domain.key===i&&(yield l);continue}s?c||(yield l):r?yield l:c&&(yield l)}}}*listForeignEntities(e){yield*this.listEntities({domain:e})}*listAllForeignEntities(){yield*this.listEntities({foreignOnly:!0})}findEntity(e,t){let i=this.graph.node(this.buildReferenceKey(e,t));if(i&&i.kind===N)return i}moveEntity(e,t,i){if(this.ensureWritable(),t===i)throw new Error("Cannot move an entity to the same model");if(!this.graph.hasNode(e))throw new Error(`Entity ${e} does not exist`);if(!this.graph.hasNode(t))throw new Error(`Source model ${t} does not exist`);if(!this.graph.hasNode(i))throw new Error(`Target model ${i} does not exist`);let r=this.findEntity(e),s=this.findModel(t),a=this.findModel(i);if(!r||!s||!a)throw new Error("Entity or models not found in the graph");if(r.domain.key!==this.key)throw new Error("Cannot move an entity from a foreign domain");if(a.domain.key!==this.key)throw new Error("Cannot move an entity to a foreign domain");a.attachEntity(e)}addAssociation(e,t){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Source entity ${e} not found`);let i=this.findEntity(e);if(!i)throw new Error(`Source entity ${e} not found`);if(i.domain.key!==this.key)throw new Error("Cannot add an association to a foreign domain");return i.addAssociation(t)}removeAssociation(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Association ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==ae)throw new Error(`Association ${e} not found`);let i=t.getParentInstance();if(!i)throw new Error(`Parent entity not found for association ${e}`);if(i.domain.key!==this.key)throw new Error("Cannot remove an association from a foreign domain");return i.removeAssociation(e),this}findAssociation(e,t){let i=this.graph.node(this.buildReferenceKey(e,t));if(i&&i.kind===ae)return i}getIncomingAssociations(e){let t=[];for(let i of this.graph.inEdges(e)){let r=this.graph.node(i.v);r&&r.kind===ae&&t.push(r)}return t}findAssociationBetween(e,t){let i=this.graph.node(e);if(!i||i.kind!==N)return;let r=i;for(let s of r.listAssociations())for(let a of s.targets)if(this.buildReferenceKey(a.key,a.domain)===t)return s}resolveOwnershipPath(e){let t=this.findEntity(e);if(!t)return null;if(t.hasSemantic(y.User))return[];for(let s of t.listAssociations())if(s.hasSemantic(y.ResourceOwnerIdentifier))return[s];let i=[{key:e,path:[]}],r=new Set([e]);for(;i.length>0;){let s=i.shift();if(!s)continue;let a=this.findEntity(s.key);if(!a)continue;let n=[...a.listAssociations()].filter(u=>u.hasSemantic(y.CreatedBy)||u.hasSemantic(y.UpdatedBy)||u.hasSemantic(y.DeletedBy)?!1:u.hasSemantic(y.RelationalResourceOwner)||u.hasSemantic(y.ResourceOwnerIdentifier)?!0:u.listTargets().some(h=>h.hasSemantic(y.User))),c=this.getIncomingAssociations(s.key).filter(u=>{if(u.hasSemantic(y.CreatedBy)||u.hasSemantic(y.UpdatedBy)||u.hasSemantic(y.DeletedBy))return!1;let h=u.getParentInstance();return h?h.hasSemantic(y.User)||u.schema?.embedded===!0:!1}),p=[...n,...c];for(let u of p){let h=u.getParentInstance();if(!h)continue;let m=[...u.listTargets()];if(m.length!==0)for(let f of m){let b=s.key===h.key?f.key:h.key;if(r.has(b))continue;let k=this.findEntity(b);if(!k)continue;let S=[...s.path,u];if(k.hasSemantic(y.User)||u.hasSemantic(y.ResourceOwnerIdentifier))return S;r.add(b),i.push({key:b,path:S})}}}return null}addProperty(e,t){if(this.ensureWritable(),!e)throw new Error("A property expects a DomainEntity parent");if(!this.graph.hasNode(e))throw new Error(`Parent entity ${e} does not exist`);let i=this.findEntity(e);if(!i)throw new Error(`Parent entity ${e} not found`);if(i.domain.key!==this.key)throw new Error("Cannot add a property to a foreign domain");return i.addProperty(t)}removeProperty(e){if(this.ensureWritable(),!this.graph.hasNode(e))throw new Error(`Property ${e} does not exist`);let t=this.graph.node(e);if(!t||t.kind!==ne)throw new Error(`Property ${e} not found`);let i=t.getParentInstance();if(!i)throw new Error(`Parent entity not found for property ${e}`);if(i.domain.key!==this.key)throw new Error("Cannot remove a property from a foreign domain");return i.removeProperty(e),this}findProperty(e,t){let i=this.graph.node(this.buildReferenceKey(e,t));if(i&&i.kind===ne)return i}registerForeignDomain(e){this.ensureWritable();let{info:t,key:i}=e;if(!t.version)throw new Error(`Foreign domain ${i} does not have a version set`);if(this.dependencies.has(i))throw new Error(`Foreign domain with key ${i} already registered`);this.dependencies.set(i,e),this.dependencyList.push({key:i,version:t.version}),pa(this.graph,e.graph,e.key)}unregisterForeignDomain(e){this.ensureWritable();let t=this.dependencies.get(e);if(!t)throw new Error(`Foreign domain with key ${e} not found`);this.dependencies.delete(e),this.dependencyList=this.dependencyList.filter(i=>i.key!==e),Wn(this.graph,t.key)}removeDomainElement(e,t){switch(t){case ke:this.removeNamespace(e);break;case ye:this.removeModel(e);break;case N:this.removeEntity(e);break;case ne:this.removeProperty(e);break;case ae:this.removeAssociation(e);break;default:throw new Error(`Unknown kind ${t} for the object ${e}`)}}search(e={}){let{query:t,nodeTypes:i,includeForeignDomains:r=!1,caseSensitive:s=!1}=e,a=[],n=!t&&(!i||i.length===0),l=h=>!i||i.length===0?!0:i.includes(h),c=h=>{if(!h||!t)return!t;if(t instanceof RegExp)return t.test(h);let m=s?h:h.toLowerCase(),f=s?t:t.toLowerCase();return m.includes(f)},p=h=>{if(!t)return[];let m=[],{info:f}=h;return c(f.name)&&m.push("name"),c(f.displayName)&&m.push("displayName"),c(f.description)&&m.push("description"),m},u=h=>h.includes(":");for(let h of this.graph.nodes()){let m=this.graph.node(h);if(!m||!m.info)continue;let f=u(h);if(f&&!r||!l(m.kind))continue;if(n){a.push({node:m,matchedFields:[],key:h,isForeign:f});continue}let b=p(m);(!t||b.length>0)&&a.push({node:m,matchedFields:b,key:h,isForeign:f})}return a}};var Vr=new Set(["IN","EXISTS","SELECT","FROM","WHERE","AND","OR","NOT","NULL","TRUE","FALSE","BETWEEN","LIKE","INTO","JOIN","INNER JOIN","LEFT JOIN","RIGHT JOIN","FULL JOIN","CROSS JOIN","UNION","INTERSECT","EXCEPT","ORDER BY","GROUP BY","HAVING","DISTINCT","LIMIT","OFFSET","INSERT","UPDATE","DELETE","CREATE","ALTER","DROP","TRUNCATE","RENAME","GRANT","REVOKE","COMMIT","ROLLBACK","SAVEPOINT","BEGIN","END","CASE","WHEN","THEN","ELSE","END CASE","EXCEPTION","RAISE","RETURN","FUNCTION","PROCEDURE"]);function Lr(o){let e=[],t=o.info.getLabel(),i=o.getParentInstance();if(!i)return e;let r;if(i.kind===N)r=i.key;else{let n=i.getParentInstance();if(!n)return e;r=n.key}let s=o.kind===ne?"property":"association";if(!o.info.name){let n=`The "${t}" ${s} has no name.`,l=`The ${s} must have a name.`;return e.push({field:"name",rule:"required",message:n,help:l,severity:"error",key:o.key,kind:o.kind,parent:i.key,parentKind:i.kind,...r?{entityKey:r}:{}}),e}let a=o.info.name;if(a.length<2){let n=`The "${t}" ${s} name is too short.`;e.push({field:"name",rule:"length",message:n,help:"The name must be at least 2 characters long.",severity:"error",key:o.key,kind:o.kind,parent:i.key,parentKind:i.kind,...r?{entityKey:r}:{}})}if(a.length>59){let n=`The "${t}" ${s} name is too long.`;e.push({field:"name",rule:"length",message:n,help:"The name must be at most 59 characters long.",severity:"error",key:o.key,kind:o.kind,parent:i.key,parentKind:i.kind,...r?{entityKey:r}:{}})}if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)){let n=`The "${t}" ${s} name is invalid.`;e.push({field:"name",rule:"format",message:n,help:"The name must start with a letter (a-z) or underscore (_). Subsequent characters can be letters, digits (0-9), or underscores (_).",severity:"error",key:o.key,kind:o.kind,parent:i.key,parentKind:i.kind,...r?{entityKey:r}:{}})}if(/^[A-Z]/.test(a)){let n=`The "${t}" ${s} name is not in snake case.`;e.push({field:"name",rule:"snake_case",message:n,help:"The name should be in snake case (lowercase letters and underscores).",severity:"info",key:o.key,kind:o.kind,parent:i.key,parentKind:i.kind,...r?{entityKey:r}:{}})}if(Vr.has(a.toUpperCase())){let n=`The "${t}" ${s} name is a reserved keyword.`;e.push({field:"name",rule:"reserved",message:n,help:"The name should not be a reserved keyword.",severity:"error",key:o.key,kind:o.kind,parent:i.key,parentKind:i.kind,...r?{entityKey:r}:{}})}return e}var Kr=class{domain;constructor(e){this.domain=e}validate(e){let t=[],i;if(typeof e=="string"?i=this.domain.findAssociation(e):i=e,!i){let n=`The "${e}" association does not exist.`;return t.push({field:"*",rule:"exists",message:n,help:"The association must be defined in the domain.",key:e,kind:ae,severity:"error",parentKind:N}),t}let r=this.validateName(i);t.push(...r);let s=this.validateTargets(i);t.push(...s);let a=this.validateSemantics(i);return t.push(...a),t}validateName(e){return Lr(e)}validateTargets(e){let t=[],i=e.info.getLabel(),r=e.getParentInstance();if(!e.targets.length){let s=`The "${i}" association has no target.`;return t.push({field:"targets",rule:"required",message:s,help:"An association must have at least one target.",severity:"error",key:e.key,kind:e.kind,parent:r.key,parentKind:N}),t}for(let s of e.targets)if(!this.domain.findEntity(s.key,s.domain)){let n=`The "${i}" association has an invalid target "${s.key}".`;t.push({field:"targets",rule:"exists",message:n,help:"The target must be defined in the domain.",severity:"error",key:e.key,kind:e.kind,parent:r.key,parentKind:N})}return t}validateSemantics(e){let t=[],i=e.info.getLabel(),r=e.getParentInstance();if(e.hasSemantic(y.RelationalResourceOwner))for(let s of e.targets){let a=this.domain.findEntity(s.key,s.domain);a&&this.domain.resolveOwnershipPath(a.key)===null&&t.push({field:"semantics",rule:"relational_owner_path_valid",message:`The target entity "${a.info.getLabel()}" of the relational resource owner association "${i}" does not have a valid ownership path to a User.`,help:"Ensure the target entity has a direct owner (Resource Owner Identifier) or transitively inherits ownership through another relational owner association.",severity:"error",key:e.key,kind:e.kind,parent:r.key,parentKind:N})}return t}};var Fr=class{domain;constructor(e){this.domain=e}validate(e){let t=[],i;if(typeof e=="string"?i=this.domain.findEntity(e):i=e,!i){let c=`The "${e}" entity does not exist.`;return t.push({field:"*",rule:"exists",message:c,help:"The entity must be defined in the domain.",key:e,kind:N,severity:"error",parentKind:N}),t}let r=this.validatePrimaryKey(i);t.push(...r);let s=this.minimumRequiredProperties(i);t.push(...s);let a=this.validateName(i);t.push(...a);let n=this.uniqueName(i);t.push(...n);let l=this.validateUserSemantics(i);return t.push(...l),t}validatePrimaryKey(e){let t=[];if(!e.primaryKey()){let r=`The "${e.info.getLabel()}" entity has no identifier.`;t.push({field:"properties",rule:"primary_key",message:r,help:"An entity that can exists by itself must have identifier defined.",severity:"error",key:e.key,kind:e.kind,parentKind:N})}return t}hasPropertiesInherited(e){if(e.hasProperties())return!0;for(let t of e.listParents())if(this.hasPropertiesInherited(t))return!0;return!1}hasAssociationsInherited(e){if(e.hasAssociations())return!0;for(let t of e.listParents())if(this.hasAssociationsInherited(t))return!0;return!1}minimumRequiredProperties(e){let t=[],i=this.hasPropertiesInherited(e),r=this.hasAssociationsInherited(e);if(!i&&!r){let s=`The "${e.info.getLabel()}" entity has no properties. It will be ignored.`;t.push({field:"properties",rule:"required",message:s,help:"Entities that have no properties are ignored in the data domain. No schema will be generated for it.",severity:"warning",key:e.key,kind:e.kind,parentKind:N})}return t}validateName(e){let t=[],i=e.info.getLabel();if(!e.info.name){let s=`The "${i}" entity has no name.`;return t.push({field:"name",rule:"required",message:s,help:"An entity must have a name.",severity:"error",key:e.key,kind:e.kind,parentKind:N}),t}let r=e.info.name;if(r.length<2){let s=`The "${i}" entity name is too short.`;t.push({field:"name",rule:"length",message:s,help:"The name must be at least 2 characters long.",severity:"error",key:e.key,kind:e.kind,parentKind:N})}if(r.length>31){let s=`The "${i}" entity name is too long.`;t.push({field:"name",rule:"length",message:s,help:"The name must be at most 31 characters long.",severity:"error",key:e.key,kind:e.kind,parentKind:N})}if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)){let s=`The "${i}" entity name is invalid.`;t.push({field:"name",rule:"format",message:s,help:"The name must start with a letter (a-z) or underscore (_). Subsequent characters can be letters, digits (0-9), or underscores (_).",severity:"error",key:e.key,kind:e.kind,parentKind:N})}if(/^[A-Z]/.test(r)){let s=`The "${i}" entity name is not in snake case.`;t.push({field:"name",rule:"snake_case",message:s,help:"The name should be in snake case (lowercase letters and underscores).",severity:"info",key:e.key,kind:e.kind,parentKind:N})}if(Vr.has(r.toUpperCase())){let s=`The "${i}" entity name is a reserved keyword.`;t.push({field:"name",rule:"reserved",message:s,help:"The name should not be a reserved keyword.",severity:"error",key:e.key,kind:e.kind,parentKind:N})}return t}uniqueName(e){let t=[],i=e.info.name?.toLowerCase();if(!i)return t;for(let r of this.domain.listEntities())if(r.info.name?.toLowerCase()===i&&r.key!==e.key){let s=`The "${i}" entity name is already used in the data domain.`;t.push({field:"name",rule:"unique",message:s,help:"The name must be unique. This includes references to other data domains.",severity:"error",key:r.key,kind:r.kind,parentKind:N})}for(let r of this.domain.listEntities({foreignOnly:!0}))if(r.info.name?.toLowerCase()===i&&r.key!==e.key){let s=`The "${i}" entity name is already used in the foreign data domain.`;t.push({field:"name",rule:"unique",message:s,help:"The name must be unique. This includes references to other data domains.",severity:"error",key:r.key,kind:r.kind,parent:r.domain.key,parentKind:N})}return t}validateUserSemantics(e){let t=[],i=!1,r=!1;for(let s of e.withInheritedProperties())s.hasSemantic(y.Username)&&(i=!0),s.hasSemantic(y.Password)&&(r=!0);if((i||r)&&!e.hasSemantic(y.User)){let s=`The "${e.info.getLabel()}" entity has Username or Password properties but does not have the User taxonomy.`;t.push({field:"semantics",rule:"user_taxonomy_required",message:s,help:"Entities containing authentication credentials like usernames or passwords must be tagged with the User taxonomy.",severity:"error",key:e.key,kind:e.kind,parentKind:N})}if(r&&!i){let s=`The "${e.info.getLabel()}" entity has Password credentials but lacks Username semantics.`;t.push({field:"semantics",rule:"username_required_for_password",message:s,help:"An entity with Password credentials must also define a Username property for authentication.",severity:"error",key:e.key,kind:e.kind,parentKind:N})}return t}};function lt(o,e){let t=o;for(let i of e){if(typeof t!="object"||t===null)return!1;if(t.properties&&typeof t.properties=="object"&&i in t.properties){t=t.properties[i];continue}return!(t.properties&&t.additionalProperties===!1||t.type&&t.type!=="object"&&t.type!=="any")}return!0}var Jr=class{domain;constructor(e){this.domain=e}validate(e){let t=[],i;if(typeof e=="string"?i=this.domain.findProperty(e):i=e,!i){let n=`The "${e}" property does not exist.`;return t.push({field:"*",rule:"exists",message:n,help:"The property must be defined in the domain.",key:e,kind:ne,severity:"error",parentKind:N}),t}let r=this.validateName(i);t.push(...r);let s=this.validatePrimaryKeyDefault(i);t.push(...s);let a=this.validateJsonIndex(i);return t.push(...a),t}validateName(e){return Lr(e)}validatePrimaryKeyDefault(e){let t=[];if(e.primary){let i=e.getParentInstance();if(!i)return t;let r=e.schema?.defaultValue;if(r){if(r.type!=="function"||r.value!=="random"){let s=`The primary key property "${e.info.getLabel()}" has an invalid default value.`;t.push({field:"schema.defaultValue",rule:"primary_key_default",message:s,help:'Primary key properties can only have the "random" function as their default value.',severity:"error",key:e.key,kind:e.kind,parentKind:i.kind})}}else{let s=`The primary key property "${e.info.getLabel()}" has no default value.`;t.push({field:"schema.defaultValue",rule:"primary_key_no_default",message:s,help:'Without a default generator (e.g., the "random" function), the client application must generate and supply primary key values manually.',severity:"warning",key:e.key,kind:e.kind,parentKind:i.kind})}}return t}validateJsonIndex(e){let t=[],i=e.jsonIndex;if(!i)return t;let r=e.getParentInstance();if(!r)return t;if(e.type!=="json")return t.push({field:"jsonIndex",rule:"json_index_type_mismatch",message:`Property "${e.info.getLabel()}" has a JSON index config but its type is "${e.type}".`,help:'JSON index configuration can only be defined for properties of type "json".',severity:"error",key:e.key,kind:e.kind,parentKind:r.kind}),t;if(i.paths&&e.jsonSchema)for(let s of i.paths){if(!s.path){t.push({field:"jsonIndex.paths",rule:"json_index_path_empty",message:`Property "${e.info.getLabel()}" has an empty JSON path in its index config.`,help:"JSON path index configurations must specify a non-empty path.",severity:"error",key:e.key,kind:e.kind,parentKind:r.kind});continue}let a=s.path.split(".");lt(e.jsonSchema,a)||t.push({field:"jsonIndex.paths",rule:"json_index_path_invalid",message:`JSON path "${s.path}" in index config for property "${e.info.getLabel()}" is not valid according to the property's JSON Schema.`,help:"All indexed JSON paths must exist in the property's JSON Schema definition.",severity:"error",key:e.key,kind:e.kind,parentKind:r.kind})}return t}};var qr=class{domain;constructor(e){this.domain=e}validate(){let e=[],t=this.validateUserEntity();e.push(...t);let i=this.validateTimestampSemantics();e.push(...i);let r=this.validateSoftDeleteSemantics();e.push(...r);let s=this.validatePropertySemanticsDataTypes();e.push(...s);let a=this.validateCurrencySemantics();e.push(...a);let n=this.validateGeospatialEndpoints();e.push(...n);let l=this.validateOrganizationSemantics();e.push(...l);let c=this.validateProjectSemantics();e.push(...c);let p=this.validateAssociationSemanticsPreconditions();return e.push(...p),e}validateUserEntity(){let e=[],t=0;for(let i of this.domain.listEntities())if(i.hasSemantic(y.User)){t++;let r=!1,s=!1,a=!1;for(let n of i.withInheritedProperties())if(n.hasSemantic(y.Username)&&(r=!0),n.hasSemantic(y.Password)&&(s=!0),n.hasSemantic(y.UserRole)&&(a=!0),r&&s&&a)break;r||e.push({field:"semantics",rule:"has_username",message:"No username property on the User entity found.",help:'It is recommended to set the "username" property semantic for APIs supporting authentication.',severity:"warning",key:"user_semantic",kind:N,parentKind:N}),s||e.push({field:"semantics",rule:"has_password",message:"No password property on the User entity found.",help:'It is recommended to set the "password" property semantic for APIs supporting authentication.',severity:"warning",key:"user_semantic",kind:N,parentKind:N}),a||e.push({field:"semantics",rule:"has_user_role",message:"No role property on the User entity found.",help:'It is recommended to set the "User role" property semantic for APIs supporting authentication.',severity:"warning",key:"user_semantic",kind:N,parentKind:N})}return t===0?e.push({field:"semantics",rule:"recommended",message:"No entity with User taxonomy found in the domain.",help:"It is recommended to have an entity with the User taxonomy for authentication purposes.",severity:"warning",key:"user_semantic",kind:N,parentKind:N}):t>1&&e.push({field:"semantics",rule:"one_user",message:"There is more than one entity with User taxonomy in the domain.",help:"There can be only one user in the system. Remove the additional User taxonomies.",severity:"error",key:"user_semantic",kind:N,parentKind:N}),e}validateTimestampSemantics(){let e=[];for(let t of this.domain.listEntities()){let i=!1,r=!1;for(let s of t.withInheritedProperties())s.hasSemantic(y.CreatedTimestamp)&&(i=!0),s.hasSemantic(y.UpdatedTimestamp)&&(r=!0);i||e.push({field:"semantics",rule:"recommended",message:`The "${t.info.getLabel()}" entity does not have a CreatedTimestamp taxonomy.`,help:"It is recommended to have a CreatedTimestamp property to track when the entity was created.",severity:"info",key:t.key,kind:t.kind,parentKind:N}),r||e.push({field:"semantics",rule:"recommended",message:`The "${t.info.getLabel()}" entity does not have an UpdatedTimestamp taxonomy.`,help:"It is recommended to have an UpdatedTimestamp property to track when the entity was last modified.",severity:"info",key:t.key,kind:t.kind,parentKind:N})}return e}validateSoftDeleteSemantics(){let e=[];for(let t of this.domain.listEntities()){let i=!1;for(let r of t.withInheritedProperties())if(r.hasSemantic(y.DeletedTimestamp)||r.hasSemantic(y.DeletedFlag)){i=!0;break}i||e.push({field:"semantics",rule:"recommended",message:`The "${t.info.getLabel()}" entity does not have soft delete taxonomy.`,help:"It is recommended to have either a DeletedTimestamp or DeletedFlag property for soft deletion.",severity:"info",key:t.key,kind:t.kind,parentKind:N})}return e}validatePropertySemanticsDataTypes(){let e=[];for(let t of this.domain.listEntities())for(let i of t.withInheritedProperties())for(let r of i.semantics){let s=Be[r.id];fr(s)&&s.applicableDataTypes&&(s.applicableDataTypes.includes(i.type)||e.push({field:"semantics",rule:"type_mismatch",message:`The "${i.info.getLabel()}" property has the "${s.displayName}" semantic applied, but its type "${i.type}" is not compatible.`,help:`The "${s.displayName}" semantic can only be applied to properties of type(s): ${s.applicableDataTypes.join(", ")}.`,severity:"error",key:i.key,kind:i.kind,parent:t.key,parentKind:N}))}return e}validateCurrencySemantics(){let e=[];for(let t of this.domain.listEntities())for(let i of t.withInheritedProperties()){let r=i.getSemantic(y.Currency);if(r){let s=r.config;i.type==="number"&&s?.allowedCurrencies&&s.allowedCurrencies.length>1&&e.push({field:"semantics",rule:"currency_number_multiple",message:`The "${i.info.getLabel()}" property has the Currency semantic and is a Number, but allows multiple currencies.`,help:"Number properties cannot accept currency codes. Please change the property type to String, or restrict allowedCurrencies to exactly one currency.",severity:"error",key:i.key,kind:i.kind,parent:t.key,parentKind:N})}}return e}validateGeospatialEndpoints(){let e=[];for(let t of this.domain.listEntities()){let i=new Map;for(let r of t.withInheritedProperties()){let s=r.getSemantic(y.GeospatialCoordinates);if(s){let a=s.config??{},n=a.enableDistanceQueries!==!1,l=a.enableBoundingBoxQueries!==!1,c=a.enablePolygonQueries===!0,p=a.enableGeoClustering===!0;if(n||l||c||p){let u=(a.apiEndpointPrefix||"/nearby").trim().toLowerCase();i.has(u)||i.set(u,[]),i.get(u)?.push(r.info.getLabel())}}}for(let[r,s]of i.entries())s.length>1&&e.push({field:"semantics",rule:"geospatial_endpoint_collision",message:`The "${t.info.getLabel()}" entity has multiple geospatial properties (${s.join(", ")}) sharing the same API endpoint prefix "${r}".`,help:"Each geospatial property on the same entity must use a unique apiEndpointPrefix to avoid query endpoint collisions (e.g., /nearby, /nearby-office).",severity:"error",key:t.key,kind:t.kind,parentKind:N})}return e}validateOrganizationSemantics(){let e=[],t=Array.from(this.domain.listEntities()).filter(c=>c.hasSemantic(y.Organization));if(t.length===0)return e;t.length>1&&e.push({field:"semantics",rule:"single_organization_entity",message:"Multiple entities marked with the Organization semantic found.",help:"Only one entity can be designated as the Organization per data domain. Remove the Organization semantic from additional entities.",severity:"error",key:"organization_semantic",kind:N,parentKind:N});let i=t[0],r=Array.from(this.domain.listEntities()).find(c=>c.hasSemantic(y.User));if(!r)return e.push({field:"semantics",rule:"organization_requires_user",message:"An Organization entity is defined but no User entity exists.",help:"Multi-tenant organization structures require a User entity to establish memberships.",severity:"error",key:"organization_semantic",kind:N,parentKind:N}),e;let s=Array.from(i.withInheritedAssociations()).find(c=>c.hasSemantic(y.OrganizationMembers)),a=Array.from(r.withInheritedAssociations()).find(c=>c.hasSemantic(y.OrganizationMembers));!s&&!a&&e.push({field:"semantics",rule:"organization_members_assoc_missing",message:`Organization entity "${i.info.getLabel()}" is missing an association marked with Semantic#OrganizationMembers pointing to the User entity.`,help:"Please add an association from the Organization entity to the User entity (or vice versa) and apply the Semantic#OrganizationMembers tag.",severity:"error",key:"organization_semantic",kind:N,parentKind:N}),s&&(s.targets.length===1&&s.targets[0].key===r.key||e.push({field:"semantics",rule:"organization_members_target_mismatch",message:`The association "${s.info.getLabel()}" marked with Semantic#OrganizationMembers must have exactly one target pointing to the User entity.`,help:"Ensure the OrganizationMembers association has a single target pointing to the User entity.",severity:"error",key:s.key,kind:s.kind,parent:i.key,parentKind:N})),a&&(a.targets.length===1&&a.targets[0].key===i.key||e.push({field:"semantics",rule:"organization_members_user_target_mismatch",message:`The association "${a.info.getLabel()}" marked with Semantic#OrganizationMembers on User entity must target the Organization entity.`,help:"Change the target of the OrganizationMembers association on the User entity to point to Organization.",severity:"error",key:a.key,kind:a.kind,parent:r.key,parentKind:N}));let n=[s,a].filter(Boolean);n.length>0&&e.push(...this.validateBiDirectionalSemanticLinks(y.OrganizationMembers,"organization_members",n));let l=n.find(c=>!c.getSemantic(y.OrganizationMembers)?.link);if(l){let c=l.getParentInstance(),p=Array.from(l.listProperties()).filter(u=>u.hasSemantic(y.OrganizationRole)||u.hasSemantic(y.AssociationRole));if(p.length===0)e.push({field:"semantics",rule:"organization_role_missing",message:`Association "${l.info.getLabel()}" marked with Semantic#OrganizationMembers on entity "${c?.info.getLabel()}" is missing a property marked with Semantic#OrganizationRole.`,help:"Please add a string property to the OrganizationMembers association to track membership roles and mark it with Semantic#OrganizationRole.",severity:"error",key:l.key,kind:l.kind,parent:c?.key,parentKind:N});else if(p.length>1)e.push({field:"semantics",rule:"organization_role_multiple",message:`Association "${l.info.getLabel()}" marked with Semantic#OrganizationMembers on entity "${c?.info.getLabel()}" has multiple properties marked with Semantic#OrganizationRole. Exactly one role property is required.`,help:"Ensure only one property on the OrganizationMembers association has the Semantic#OrganizationRole tag.",severity:"error",key:l.key,kind:l.kind,parent:c?.key,parentKind:N});else{let u=p[0],h=u.schema?.enum;(!h||!Array.isArray(h)||h.length===0)&&e.push({field:"semantics",rule:"organization_role_enum_missing",message:`The organization role property "${u.info.getLabel()}" on association "${l.info.getLabel()}" should define an enum of allowed roles (e.g. ['owner', 'editor', 'viewer']).`,help:"Define an enum array inside the schema of the OrganizationRole property to set valid roles.",severity:"warning",key:u.key,kind:u.kind,parent:l.key,parentKind:ae})}}return e}validateProjectSemantics(){let e=[],t=Array.from(this.domain.listEntities()).filter(s=>s.hasSemantic(y.Project));if(t.length===0)return e;t.length>1&&e.push({field:"semantics",rule:"single_project_entity",message:"Multiple entities marked with the Project semantic found.",help:"Only one entity can be designated as the Project per data domain. Remove the Project semantic from additional entities.",severity:"error",key:"project_semantic",kind:N,parentKind:N});let i=Array.from(this.domain.listEntities()).find(s=>s.hasSemantic(y.User)),r=i?Array.from(i.withInheritedAssociations()).filter(s=>s.hasSemantic(y.ProjectMembers)):[];for(let s of r)s.targets.length===1&&t.some(n=>n.key===s.targets[0].key)||e.push({field:"semantics",rule:"project_members_user_target_mismatch",message:`The association "${s.info.getLabel()}" marked with Semantic#ProjectMembers on User entity must target the Project entity.`,help:"Change the target of the ProjectMembers association on User entity to point to Project.",severity:"error",key:s.key,kind:s.kind,parent:i?.key,parentKind:N});for(let s of t){let a=Array.from(s.withInheritedAssociations()).find(p=>p.hasSemantic(y.ProjectMembers)),n=r.find(p=>p.targets.some(u=>u.key===s.key));a&&(i&&a.targets.length===1&&a.targets[0].key===i?.key||e.push({field:"semantics",rule:"project_members_target_mismatch",message:`The association "${a.info.getLabel()}" marked with Semantic#ProjectMembers must have exactly one target pointing to the User entity.`,help:"Ensure the ProjectMembers association has a single target pointing to the User entity.",severity:"error",key:a.key,kind:a.kind,parent:s.key,parentKind:N}));let l=[a,n].filter(Boolean),c=l.find(p=>!p.getSemantic(y.ProjectMembers)?.link);if(c){let p=c.getParentInstance(),u=Array.from(c.listProperties()).filter(h=>h.hasSemantic(y.ProjectRole)||h.hasSemantic(y.AssociationRole));if(u.length===0)e.push({field:"semantics",rule:"project_role_missing",message:`Association "${c.info.getLabel()}" marked with Semantic#ProjectMembers on entity "${p?.info.getLabel()}" is missing a property marked with Semantic#ProjectRole.`,help:"Please add a string property to the ProjectMembers association to track membership roles and mark it with Semantic#ProjectRole.",severity:"error",key:c.key,kind:c.kind,parent:p?.key,parentKind:N});else if(u.length>1)e.push({field:"semantics",rule:"project_role_multiple",message:`Association "${c.info.getLabel()}" marked with Semantic#ProjectMembers on entity "${p?.info.getLabel()}" has multiple properties marked with Semantic#ProjectRole. Exactly one role property is required.`,help:"Ensure only one property on the ProjectMembers association has the Semantic#ProjectRole tag.",severity:"error",key:c.key,kind:c.kind,parent:p?.key,parentKind:N});else{let h=u[0],m=h.schema?.enum;(!m||!Array.isArray(m)||m.length===0)&&e.push({field:"semantics",rule:"project_role_enum_missing",message:`The project role property "${h.info.getLabel()}" on association "${c.info.getLabel()}" should define an enum of allowed roles (e.g. ['owner', 'editor', 'viewer']).`,help:"Define an enum array inside the schema of the project role property to set valid roles.",severity:"warning",key:h.key,kind:h.kind,parent:c.key,parentKind:ae})}}l.length>0&&e.push(...this.validateBiDirectionalSemanticLinks(y.ProjectMembers,"project_members",l))}return e}validateBiDirectionalSemanticLinks(e,t,i){let r=[],s=[],a=[];for(let n of i){let l=n.getSemantic(e);if(l)if(l.link){a.push(n),l.config&&Object.keys(l.config).length>0&&r.push({field:"semantics",rule:"semantic_link_config_forbidden",message:`The association "${n.info.getLabel()}" has a semantic link set for "${e}", but also defines "config". Configuration should only be set on the primary semantic.`,help:'Remove the "config" property from the linked semantic definition.',severity:"error",key:n.key,kind:n.kind,parent:n.getParentInstance()?.key,parentKind:N});let c=this.domain.findAssociation(l.link.key,l.link.domain);if(!c)r.push({field:"semantics",rule:"semantic_link_target_not_found",message:`The association "${n.info.getLabel()}" has a semantic link targeting "${l.link.key}", but no matching association exists in the domain.`,help:"Update the link target key to point to an existing association with the primary semantic.",severity:"error",key:n.key,kind:n.kind,parent:n.getParentInstance()?.key,parentKind:N});else{let p=c.getSemantic(e);p?p.link&&r.push({field:"semantics",rule:"semantic_link_target_is_link",message:`The association "${n.info.getLabel()}" links to "${c.info.getLabel()}", which is also a semantic link.`,help:"Point the link directly to the primary association with the source of truth configuration.",severity:"error",key:n.key,kind:n.kind,parent:n.getParentInstance()?.key,parentKind:N}):r.push({field:"semantics",rule:"semantic_link_target_invalid",message:`The association "${n.info.getLabel()}" links to "${c.info.getLabel()}", but the target association does not have the "${e}" semantic.`,help:`Ensure the target association has the "${e}" semantic applied.`,severity:"error",key:n.key,kind:n.kind,parent:n.getParentInstance()?.key,parentKind:N})}}else s.push(n)}if(i.length>1){if(s.length===0)r.push({field:"semantics",rule:"semantic_link_primary_missing",message:`All associations with the "${e}" semantic are defined as links, but no primary association exists.`,help:'Remove the "link" property from one association to designate it as the primary source of truth.',severity:"error",key:a[0].key,kind:a[0].kind,parent:a[0].getParentInstance()?.key,parentKind:N});else if(s.length>1)for(let n=1;n<s.length;n++){let l=s[n];r.push({field:"semantics",rule:`${t}_link_required`,message:`Multiple associations have the "${e}" semantic, but "${l.info.getLabel()}" is missing a "link" to the primary association.`,help:'Define a "link" property pointing to the primary association key, and remove its "config".',severity:"error",key:l.key,kind:l.kind,parent:l.getParentInstance()?.key,parentKind:N})}}return r}validateAssociationSemanticsPreconditions(){let e=[];for(let t of this.domain.listEntities())for(let i of t.listAssociations())for(let r of i.semantics)try{i.checkPreconditions(r.id)}catch(s){let a=s instanceof Error?s.message:String(s);e.push({field:"semantics",rule:"association_semantic_precondition_unmet",message:a,help:"Ensure the association meets all cardinality and entity pairing preconditions for this semantic.",severity:"error",key:i.key,kind:i.kind,parent:t.key,parentKind:N})}return e}};var hi=class{domain;report=[];#e=0;#t=0;#r=0;#i=!1;get infoCount(){return this.#i||this.computeIssueCounters(),this.#e}get warningCount(){return this.#i||this.computeIssueCounters(),this.#t}get errorCount(){return this.#i||this.computeIssueCounters(),this.#r}constructor(e){this.domain=e}validate(){this.#i=!1,this.report=[];let e=new Fr(this.domain),t=new Jr(this.domain),i=new Kr(this.domain),r=new qr(this.domain),s=!1;for(let n of this.domain.listEntities()){if(n.domain.key!==this.domain.key)continue;s=!0;let l=e.validate(n);this.report.push(...l);for(let c of n.properties){if(c.domain.key!==this.domain.key)continue;let p=t.validate(c);this.report.push(...p)}for(let c of n.associations){if(c.domain.key!==this.domain.key)continue;let p=i.validate(c);this.report.push(...p)}}if(!s)return this.report;let a=r.validate();return this.report.push(...a),this.report}computeIssueCounters(){this.#e=this.report.filter(e=>e.severity==="info").length,this.#t=this.report.filter(e=>e.severity==="warning").length,this.#r=this.report.filter(e=>e.severity==="error").length,this.#i=!0}};var ua=[],ha=[],Yn={},Li={},Ki={};function Zn(o){return typeof o=="string"?new RegExp("^"+o+"$","i"):o}function Br(o,e){return o===e?e:o===o.toLowerCase()?e.toLowerCase():o===o.toUpperCase()?e.toUpperCase():o[0]===o[0].toUpperCase()?e.charAt(0).toUpperCase()+e.slice(1).toLowerCase():e.toLowerCase()}function id(o,e){return o.replace(/\$(\d{1,2})/g,function(t,i){return e[i]||""})}function rd(o,e){return o.replace(e[0],function(t,i){let r=id(e[1],arguments);return Br(t===""?o[i-1]:t,r)})}function Qn(o,e,t){if(!o.length||Object.hasOwn(Yn,o))return e;let i=t.length;for(;i--;){let r=t[i];if(r[0].test(e))return rd(e,r)}return e}function eo(o,e,t){return function(i){let r=i.toLowerCase();return Object.prototype.hasOwnProperty.call(e,r)?Br(i,r):Object.prototype.hasOwnProperty.call(o,r)?Br(i,o[r]):Qn(r,i,t)}}function to(o,e,t){return function(i){let r=i.toLowerCase();return Object.prototype.hasOwnProperty.call(e,r)?!0:Object.prototype.hasOwnProperty.call(o,r)?!1:Qn(r,r,t)===r}}var Ae=function(o,e,t){let i=e===1?Ae.singular(o):Ae.plural(o);return(t?e+" ":"")+i};Ae.plural=eo(Ki,Li,ua);Ae.isPlural=to(Ki,Li,ua);Ae.singular=eo(Li,Ki,ha);Ae.isSingular=to(Li,Ki,ha);Ae.addPluralRule=function(o,e){ua.push([Zn(o),e])};Ae.addSingularRule=function(o,e){ha.push([Zn(o),e])};Ae.addUncountableRule=function(o){if(typeof o=="string"){Yn[o.toLowerCase()]=!0;return}Ae.addPluralRule(o,"$0"),Ae.addSingularRule(o,"$0")};Ae.addIrregularRule=function(o,e){e=e.toLowerCase(),o=o.toLowerCase(),Ki[o]=e,Li[e]=o};[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["my","our"],["its","their"],["his","their"],["her","their"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"],["canvas","canvases"]].forEach(function(o){Ae.addIrregularRule(o[0],o[1])});[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach(function(o){Ae.addPluralRule(o[0],o[1])});[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/(dg|ss|ois|lk|ok|wn|mb|th|ch|ec|oal|is|ck|ix|sser|ts|wb)ies$/i,"$1ie"],[/\b(l|(?:neck|cross|hog|aun)?t|coll|faer|food|gen|goon|group|hipp|junk|vegg|(?:pork)?p|charl|calor|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach(function(o){Ae.addSingularRule(o[0],o[1])});["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(Ae.addUncountableRule);var Gr=Ae;function Te(o,e){let t=o.domain||e;return t?`${t}:${o.key}`:o.key}function mi(o){if(!o)throw new g("Cannot generate parameter name from an empty string.",{code:"E_INVALID_PARAM_NAME",help:"The entity name used for path parameter generation is empty."});let e=o.replace(/([a-z])([A-Z])/g,"$1 $2");e=e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2");let i=e.replace(/[^a-zA-Z0-9]/g," ").split(/\s+/).filter(Boolean);if(i.length===0)throw new g(`Cannot generate a valid parameter name from "${o}".`,{code:"E_INVALID_PARAM_NAME",help:"The entity name must contain alphanumeric characters to generate a path parameter."});let s=i.map((a,n)=>{let l=a.toLowerCase();return n===0?l:l.charAt(0).toUpperCase()+l.slice(1)}).join("");return/^[0-9]/.test(s)&&(s="_"+s),`${s}Id`}function Mt(o){let e=o.trim(),t=e.startsWith("/")?e:`/${e}`;return t==="/"?"/":t.replace(/\/+$/,"")}function ma(o,e){let t=o.endsWith("/")?o.slice(0,-1):o,i=e.startsWith("/")?e:`/${e}`;return`${t}${i}`}var Fi=class o{description;key;rate;interval;burst;constructor(e={}){this.description=e.description,this.key=o.isRateLimitRuleKey(e.key)?structuredClone(e.key):void 0,this.rate=typeof e.rate=="number"?e.rate:void 0,this.interval=o.isRateLimitRuleInterval(e.interval)?e.interval:void 0,this.burst=typeof e.burst=="number"?e.burst:void 0}toJSON(){let e={};return this.description&&(e.description=this.description),o.isRateLimitRuleKey(this.key)&&(e.key=structuredClone(this.key)),typeof this.rate=="number"&&(e.rate=this.rate),o.isRateLimitRuleInterval(this.interval)&&(e.interval=this.interval),typeof this.burst=="number"&&(e.burst=this.burst),e}static isRateLimitRuleInterval(e){return typeof e!="string"?!1:["second","minute","hour","day"].includes(e)}static isRateLimitRuleKey(e){if(typeof e!="object"||e===null)return!1;let t=e;return"type"in t&&(t.type==="ip"||t.type==="userId"||t.type==="role")}};var wt=class{rules;constructor(e={}){this.rules=e.rules?.map(t=>new Fi(t))||[]}toJSON(){return{rules:this.rules.map(e=>e.toJSON())}}};var O;(function(o){o.PRE_FETCH="pre-fetch",o.FETCH="fetch",o.POST_FETCH="post-fetch"})(O||(O={}));var pe=class{type;parent;inheritable=!0;mandatory;#e;get metadata(){if(!this.#e)throw new Error("Metadata not set for access rule "+this.type);return this.#e}constructor(e,t,i={}){this.parent=e,this.type=i.type??"",this.mandatory=i.mandatory??!1,this.#e={...t,...i.metadata}}toJSON(){let e={type:this.type};return this.mandatory&&(e.mandatory=!0),this.#e&&(e.metadata=this.#e),e}};var Hr=class extends pe{type;constructor(e,t={}){super(e,{list:O.PRE_FETCH,create:O.PRE_FETCH,search:O.PRE_FETCH,read:O.PRE_FETCH,update:O.PRE_FETCH,delete:O.PRE_FETCH},t),this.type="allowAuthenticated"}};var Wr=class extends pe{type;constructor(e,t={}){super(e,{list:O.PRE_FETCH,create:O.PRE_FETCH,search:O.PRE_FETCH,read:O.PRE_FETCH,update:O.PRE_FETCH,delete:O.PRE_FETCH},t),this.type="allowPublic"}};var Xr=class extends pe{type;domains;constructor(e,t={}){super(e,{list:O.PRE_FETCH,create:O.PRE_FETCH,search:O.PRE_FETCH,read:O.PRE_FETCH,update:O.PRE_FETCH,delete:O.PRE_FETCH},t),this.type="matchEmailDomain",this.domains=t.domains?[...t.domains]:[]}toJSON(){return{...super.toJSON(),domains:structuredClone(this.domains)}}};var Yr=class extends pe{type;inheritable=!1;property;target;constructor(e,t={}){super(e,{list:O.FETCH,search:O.FETCH,create:O.POST_FETCH,read:O.POST_FETCH,update:O.POST_FETCH,delete:O.POST_FETCH},t),this.type="matchResourceOwner",this.property=t.property,this.target=t.target??"property"}toJSON(){let e={...super.toJSON(),target:this.target};return this.property&&(e.property=this.property),e}};var Zr=class extends pe{type;inheritable=!1;attribute;value;operator;constructor(e,t={}){super(e,{list:O.FETCH,search:O.FETCH,read:O.POST_FETCH,update:O.POST_FETCH,delete:O.POST_FETCH},t),this.type="matchResourceAttribute",this.attribute=t.attribute??"",this.value=t.value??"",this.operator=t.operator??"equal"}toJSON(){let e={...super.toJSON(),attribute:this.attribute,value:this.value};return this.operator&&(e.operator=this.operator),e}};var Qr=class extends pe{type;inheritable=!1;allowedStatuses;deniedStatuses;constructor(e,t={}){super(e,{list:O.FETCH,search:O.FETCH,read:O.POST_FETCH,update:O.POST_FETCH,delete:O.POST_FETCH},t),this.type="lifecycleStatus",this.allowedStatuses=t.allowedStatuses?[...t.allowedStatuses]:[],this.deniedStatuses=t.deniedStatuses?[...t.deniedStatuses]:[]}toJSON(){let e={...super.toJSON()};return this.allowedStatuses.length>0&&(e.allowedStatuses=structuredClone(this.allowedStatuses)),this.deniedStatuses.length>0&&(e.deniedStatuses=structuredClone(this.deniedStatuses)),e}};var es=class extends pe{type;property;value;constructor(e,t={}){super(e,{list:O.PRE_FETCH,create:O.PRE_FETCH,search:O.PRE_FETCH,read:O.PRE_FETCH,update:O.PRE_FETCH,delete:O.PRE_FETCH},t),this.type="matchUserProperty",this.property=t.property??"",this.value=t.value??""}toJSON(){return{...super.toJSON(),property:this.property,value:this.value}}};var ts=class extends pe{type;role;constructor(e,t={}){super(e,{list:O.PRE_FETCH,create:O.PRE_FETCH,search:O.PRE_FETCH,read:O.PRE_FETCH,update:O.PRE_FETCH,delete:O.PRE_FETCH},t),this.type="matchUserRole",this.role=t.role?[...t.role]:[]}toJSON(){return{...super.toJSON(),role:structuredClone(this.role)}}};var is=class extends pe{type;allowedOrgRoles;constructor(e,t={}){super(e,{list:O.FETCH,search:O.FETCH,create:O.PRE_FETCH,read:O.POST_FETCH,update:O.POST_FETCH,delete:O.POST_FETCH},t),this.type="matchOrganization",this.allowedOrgRoles=t.allowedOrgRoles?[...t.allowedOrgRoles]:[]}toJSON(){return{...super.toJSON(),allowedOrgRoles:[...this.allowedOrgRoles]}}};var rs=class extends pe{type;associationKey;allowedRoles;constructor(e,t={}){super(e,{list:O.FETCH,search:O.FETCH,create:O.PRE_FETCH,read:O.POST_FETCH,update:O.POST_FETCH,delete:O.POST_FETCH},t),this.type="matchAssociation",this.associationKey=t.associationKey,this.allowedRoles=t.allowedRoles?[...t.allowedRoles]:[]}toJSON(){let e=super.toJSON();return e.type="matchAssociation",this.associationKey&&(e.associationKey=this.associationKey),this.allowedRoles&&this.allowedRoles.length>0&&(e.allowedRoles=[...this.allowedRoles]),e}};function fi(o,e){switch(e.type){case"allowAuthenticated":return new Hr(o,e);case"allowPublic":return new Wr(o,e);case"matchEmailDomain":return new Xr(o,e);case"matchResourceOwner":return new Yr(o,e);case"matchResourceAttribute":return new Zr(o,e);case"lifecycleStatus":return new Qr(o,e);case"matchUserProperty":return new es(o,e);case"matchUserRole":return new ts(o,e);case"matchOrganization":return new is(o,e);case"matchAssociation":return new rs(o,e);default:throw new g("Unknown access rule kind",{code:"E_UNKNOWN_ACCESS_RULE_KIND",status:422})}}var Ne=class{kind;accessRules;rateLimiting;projection;parent;constructor(e,t={}){this.parent=e,this.kind=t.kind||"",this.accessRules=t.accessRules?t.accessRules.map(i=>fi(this,i)):[],this.rateLimiting=t.rateLimiting?new wt(t.rateLimiting):void 0,t.projection&&(this.projection=structuredClone(t.projection))}toJSON(){let e={kind:this.kind};return this.accessRules.length&&(e.accessRules=this.accessRules.map(t=>t.toJSON())),this.rateLimiting&&(e.rateLimiting=this.rateLimiting.toJSON()),this.projection&&(e.projection=structuredClone(this.projection)),e}getAllRules(){return[...this.parent.getAllRules(),...this.accessRules]}getAllRateLimiters(){let e=this.parent.getAllRateLimiters();return this.rateLimiting&&e.push(this.rateLimiting),e}};var Ji=class extends Ne{kind;constructor(e,t={}){super(e,t),this.kind="create"}toJSON(){return{...super.toJSON(),kind:"create"}}static isCreateAction(e){return e.kind==="create"}static isCreateActionSchema(e){return e.kind==="create"}};var Ht=class extends Ne{kind;strategy;retentionPeriod;constructor(e,t={}){super(e,t),this.kind="delete",this.strategy=t.strategy||"soft",this.retentionPeriod=t.retentionPeriod??30}toJSON(){return{...super.toJSON(),kind:"delete",strategy:this.strategy,retentionPeriod:this.retentionPeriod}}static isDeleteAction(e){return e.kind==="delete"}static isDeleteActionSchema(e){return e.kind==="delete"}};var vt=class extends Ne{kind;cacheTtl;constructor(e,t={}){super(e,t),this.kind="list",this.cacheTtl=t.cacheTtl}toJSON(){let e={...super.toJSON(),kind:"list"};return this.cacheTtl!==void 0&&(e.cacheTtl=this.cacheTtl),e}static isListAction(e){return e.kind==="list"}static isListActionSchema(e){return e.kind==="list"}};var Wt=class extends Ne{kind;constructor(e,t={}){super(e,t),this.kind="read"}toJSON(){return{...super.toJSON(),kind:"read"}}static isReadAction(e){return e.kind==="read"}static isReadActionSchema(e){return e.kind==="read"}};var _t=class extends Ne{kind;maxAstDepth;constructor(e,t={}){super(e,t),this.kind="search",this.maxAstDepth=t.maxAstDepth}toJSON(){let e={...super.toJSON(),kind:"search"};return this.maxAstDepth!==void 0&&(e.maxAstDepth=this.maxAstDepth),e}static isSearchActionSchema(e){return e.kind==="search"}static isSearchAction(e){return e.kind==="search"}};var Xt=class extends Ne{kind;allowedMethods;constructor(e,t={}){super(e,t),this.kind="update",this.allowedMethods=t.allowedMethods?[...t.allowedMethods]:["PATCH"]}toJSON(){return{...super.toJSON(),kind:"update",allowedMethods:structuredClone(this.allowedMethods)}}static isUpdateAction(e){return e.kind==="update"}static isUpdateActionSchema(e){return e.kind==="update"}};function fa(o,e){switch(e.kind){case"list":return new vt(o,e);case"read":return new Wt(o,e);case"create":return new Ji(o,e);case"update":return new Xt(o,e);case"delete":return new Ht(o,e);case"search":return new _t(o,e);default:throw new g("Unknown action kind",{code:"E_UNKNOWN_ACTION_KIND",status:422})}}function io(o,e){switch(e){case"list":return new vt(o);case"read":return new Wt(o);case"create":return new Ji(o);case"update":return new Xt(o);case"delete":return new Ht(o);case"search":return new _t(o);default:throw new g("Unknown action kind",{code:"E_UNKNOWN_ACTION_KIND",status:422})}}var Yt=class o{kind;key;entity;hasCollection;collectionPath;resourcePath;isRoot;parent;exposeOptions;actions;accessRules;rateLimiting;paginationContract;truncated;api;static createSchema(e={}){let{key:t=q(),entity:i={key:""},collectionPath:r,resourcePath:s="/",hasCollection:a=!0,isRoot:n,parent:l,exposeOptions:c,actions:p=[],accessRules:u,rateLimiting:h,truncated:m,paginationContract:f}=e,b={kind:xt,key:t,entity:{...i},hasCollection:a,resourcePath:s,actions:p.map(k=>({...k}))};return r!==void 0&&(b.collectionPath=r),n!==void 0&&(b.isRoot=n),l!==void 0&&(b.parent={...l}),c!==void 0&&(b.exposeOptions={...c}),Array.isArray(u)&&(b.accessRules=u.map(k=>({...k}))),h!==void 0&&(b.rateLimiting={...h}),m!==void 0&&(b.truncated=m),f!==void 0&&(b.paginationContract=structuredClone(f)),b}constructor(e,t){this.api=e;let i=o.createSchema(t);this.kind=i.kind,this.key=i.key,this.entity=i.entity,this.hasCollection=i.hasCollection,this.collectionPath=i.collectionPath,this.resourcePath=i.resourcePath,this.isRoot=i.isRoot,this.parent=i.parent,this.exposeOptions=i.exposeOptions,this.actions=i.actions?i.actions.map(r=>fa(this,r)):[],this.accessRules=i.accessRules?i.accessRules.map(r=>fi(this,r)):[],i.rateLimiting&&(this.rateLimiting=new wt(i.rateLimiting)),this.truncated=i.truncated,i.paginationContract&&(this.paginationContract=structuredClone(i.paginationContract))}toJSON(){let e={kind:this.kind,key:this.key,entity:{...this.entity},resourcePath:this.resourcePath,actions:this.actions.map(t=>t.toJSON()),hasCollection:this.hasCollection};return this.collectionPath!==void 0&&(e.collectionPath=this.collectionPath),this.isRoot!==void 0&&(e.isRoot=this.isRoot),this.parent!==void 0&&(e.parent={...this.parent}),this.exposeOptions!==void 0&&(e.exposeOptions={...this.exposeOptions}),Array.isArray(this.accessRules)&&this.accessRules.length>0&&(e.accessRules=this.accessRules.map(t=>t.toJSON())),this.rateLimiting!==void 0&&(e.rateLimiting=this.rateLimiting.toJSON()),this.truncated!==void 0&&(e.truncated=this.truncated),this.paginationContract&&(e.paginationContract=structuredClone(this.paginationContract)),e}setCollectionPath(e){if(!this.hasCollection)throw new g("Cannot set collection path on an exposure that does not have a collection",{code:"E_PATH_MISSING",help:"The exposed entity you are trying to set a collection path for does not have a collection."});let i=Mt(e).split("/").filter(Boolean);if(i.length!==1)throw new g(`Collection path must contain exactly one segment. Received: "${e}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set path must have a single path segment (e.g., `/products`)"});let r=`/${i[0]}`;if(this.isRoot&&this.api.findCollectionPathCollision(r,this.key))throw new g(`Collection path "${r}" is already in use by another root entity.`,{code:"E_PATH_INUSE",help:"The set path is already in use by another root entity."});let s="";if(this.resourcePath&&this.resourcePath!=="/"){let l=this.resourcePath.split("/").filter(Boolean)[1];l&&/^\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(l)&&(s=l)}if(!s){let n=this.api.domain?.findEntity(this.entity.key,this.entity.domain);if(!n||!n.info.name)throw new g("Cannot generate a semantic parameter name because the associated entity or its name is missing.",{code:"E_ENTITY_NOT_FOUND",help:"Ensure the exposed entity points to a valid domain entity with a defined name."});s=`{${mi(n.info.name)}}`}let a=`${r}/${s}`;this.#r(a),this.collectionPath=r,this.resourcePath=a}setResourcePath(e){let t=Mt(e),i=t.split("/").filter(Boolean);if(this.hasCollection){if(!this.collectionPath)throw new g("Cannot set resource path: missing collection path for this exposure",{code:"E_PATH_MISSING",help:"Set the collection path on the exposed entity first."});let r=this.collectionPath.split("/").filter(Boolean);if(r.length!==1)throw new g(`Invalid stored collection path "${this.collectionPath}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set collection path must have a single path segment (e.g., `/products`)"});if(i.length!==2)throw new g(`Resource path must be exactly two segments (collection + parameter). Received: "${t}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set resource path must have exactly two segments (collection + parameter)."});let[s,a]=i;if(s!==r[0])throw new g(`Resource path must start with the collection segment "${r[0]}". Received: "${s}"`,{code:"E_PATH_MISMATCH",help:"Set the resource path to the same value as the collection path + the parameter value."});if(!/^\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(a))throw new g(`The second segment must be a parameter in braces, e.g. {id}. Received: "${a}"`,{code:"E_PARAMETER_INVALID",help:"Use the braces to surround the parameter name, e.g., {productId}."});this.resourcePath!==t&&(this.#r(`/${s}/${a}`),this.resourcePath=`/${s}/${a}`);return}if(i.length!==1)throw new g(`Resource path must contain exactly one segment when no collection is present. Received: "${t}"`,{code:"E_PATH_SEGMENT_SIZE",help:"The set resource path must have exactly one segment."});if(this.isRoot&&this.api.findResourcePathCollision(t,this.key))throw new g(`Resource path "${t}" is already in use by another root entity.`,{code:"E_PATH_INUSE",help:"The set path is already in use by another root entity."});this.resourcePath!==t&&(this.#r(`/${i[0]}`),this.resourcePath=`/${i[0]}`)}#e(e){let i=[...e.join("/").matchAll(/\{([^}]+)\}/g)].map(s=>s[1]),r=new Set;for(let s of i){if(r.has(s))throw new g(`Duplicate path parameter "{${s}}" detected in branch hierarchy.`,{code:"E_PATH_PARAM_COLLISION",help:"Change the parameter name in either this resource or its ancestor to ensure unique parameter names."});r.add(s)}}#t(e,t){for(let i of this.api.exposes.values())if(i.parent?.key===e){let r=[...t,i.resourcePath];this.#e(r),this.#t(i.key,r)}}#r(e){let t=[e],i=this.parent?.key;for(;i;){let r=this.api.exposes.get(i);if(!r)break;t.unshift(r.resourcePath),i=r.parent?.key}this.#e(t),this.#t(this.key,t)}getAbsoluteResourcePath(){let e=Mt(this.resourcePath),t=this.parent?.key;for(;t;){let i=this.api.exposes.get(t);if(!i)break;let r=Mt(i.resourcePath);e=ma(r,e),t=i.parent?.key}return e}getAbsoluteCollectionPath(){if(!this.hasCollection||!this.collectionPath)return;let e=Mt(this.collectionPath),t=this.parent?.key;for(;t;){let i=this.api.exposes.get(t);if(!i)break;let r=Mt(i.resourcePath);e=ma(r,e),t=i.parent?.key}return e}getAllRules(){let e=[];this.api.accessRules.forEach(i=>{i.inheritable&&e.push(i)});let t=this;for(;t;)t.accessRules&&(t===this?e.push(...t.accessRules):e.push(...t.accessRules.filter(i=>i.inheritable))),t=t.parent?this.api.exposes.get(t.parent.key):void 0;return e}getAllRateLimiters(){let e=[];this.api.rateLimiting&&e.push(this.api.rateLimiting);let t=this;for(;t;)t.rateLimiting&&e.push(t.rateLimiting),t=t.parent?this.api.exposes.get(t.parent.key):void 0;return e}getAllRateLimiterRules(){let e=[];this.api.rateLimiting&&e.push(...this.api.rateLimiting.rules);let t=this;for(;t;)t.rateLimiting&&e.push(...t.rateLimiting.rules),t=t.parent?this.api.exposes.get(t.parent.key):void 0;return e}addAction(e){if(this.actions.some(i=>i.kind===e.kind))throw new g(`Action of kind "${e.kind}" already exists for this exposure`,{code:"E_ACTION_USED",help:"There's no need to add an API action again."});let t=fa(this,e);return this.actions.push(t),t}addActionFromKind(e){if(this.actions.some(i=>i.kind===e))throw new g(`Action of kind "${e}" already exists for this exposure`,{code:"E_ACTION_USED",help:"There's no need to add an API action again."});let t=io(this,e);return this.actions.push(t),t}createPaginationContract(){let e=this.api.domain?.findEntity(this.entity.key,this.entity.domain);if(!e)throw new g(`Entity "${this.entity.key}" not found"`,{code:"E_ENTITY_NOT_FOUND",help:"The set entity does not exist."});this.paginationContract?(this.paginationContract.filterableFields=[],this.paginationContract.searchableFields=[],this.paginationContract.sortableFields=[]):this.paginationContract={filterableFields:[],searchableFields:[],sortableFields:[]};for(let t of e.properties)t.index&&(this.paginationContract.filterableFields.push(t.key),this.paginationContract.sortableFields.push(t.key)),t.search&&this.paginationContract.searchableFields.push(t.key)}getSubResources(e=!1){let t=[],i=r=>{for(let s of this.api.exposes.values())s.parent?.key===r&&(t.push(s),e&&i(s.key))};return i(this.key),t}findSubResource(e,t=!1){let i=this.getSubResources(t),r=Mt(e);return i.find(s=>{if(s.key===e||s.entity.key===e)return!0;let a=this.api.domain?.findEntity(s.entity.key,s.entity.domain);if(a&&a.info.name===e)return!0;if(s.hasCollection&&s.collectionPath){if(s.collectionPath===e||s.collectionPath===r)return!0;let l=s.getAbsoluteCollectionPath();if(l&&(l===e||l===r))return!0}if(s.resourcePath===e||s.resourcePath===r)return!0;let n=s.getAbsoluteResourcePath();return!!(n&&(n===e||n===r))})}};var qi=(o={})=>{let e={...ss,...o};return o.metadata&&(e.metadata={...o.metadata}),{id:y.Currency,config:e}},ss={storageFormat:"decimal",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!1,validateCurrencyCode:!0},rS={USD_DECIMAL:qi({storageFormat:"decimal",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!1}),USD_CENTS:qi({storageFormat:"integer_cents",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!1}),MULTI_CURRENCY:qi({storageFormat:"complex_object",allowedCurrencies:["USD","EUR","GBP","JPY","CAD"],decimalPlaces:2,allowNegative:!1}),WITH_NEGATIVES:qi({storageFormat:"decimal",defaultCurrency:"USD",decimalPlaces:2,allowNegative:!0}),HIGH_PRECISION:qi({storageFormat:"decimal",defaultCurrency:"BTC",decimalPlaces:8,allowNegative:!1})};var ro={requireVerification:!0,allowSubaddressing:!0,allowInternational:!0};var so={requireCountryCode:!0,format:"international",allowExtension:!1,requireVerification:!1,verificationMethod:"sms"};function sd(o){let e=o.type,i=o.readWebBinding()?.format,r=o.multiple,s;if(e==="string"){let a=o.schema?.maximum;if(o.schema?.defaultValue?.type==="function"&&o.schema.defaultValue.value==="random"){let n=o.schema.defaultValue.config;if(n){let l=0,c=!1;n.isFixed?n.length&&(l=n.length,c=!0):a&&(l=a,c=!0),c&&(n.prefix&&(l+=n.prefix.length),n.suffix&&(l+=n.suffix.length),(!a||l>a)&&(a=l))}}s=a?`VARCHAR(${a})`:"TEXT"}else if(e==="number"){let a=o.schema?.defaultValue?.type==="function"&&o.schema.defaultValue.value==="incremental";i==="int32"?s="INTEGER":i==="int64"?s="BIGINT":i==="float"||i==="double"?s="DOUBLE PRECISION":a?s="BIGINT":s="NUMERIC"}else e==="boolean"?s="BOOLEAN":e==="date"?s="DATE":e==="datetime"?s="TIMESTAMPTZ":e==="time"?s="TIME":e==="binary"||e==="json"?s="JSONB":s="TEXT";return r?`${s}[]`:s}function ao(o){let e=o.getExposedName();if(!e)throw new g("Property missing a name definition.",{code:"E_PROPERTY_NAME_MISSING",status:500});let t=null;if(o.schema?.defaultValue){let u=o.schema.defaultValue.type,h=String(o.schema.defaultValue.value);if(u==="function"){let m=o.type;if(m==="string"){if(h==="uuid-v4"&&o.primary)throw new g("Function 'uuid-v4' cannot be used as a default for a primary key string.",{code:"E_INVALID_DEFAULT_FUNCTION",status:400});if(h!=="random"&&h!=="uuid-v4")throw new g(`Function '${h}' is not supported for string properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}else if(m==="number"){if(h!=="incremental")throw new g(`Function '${h}' is not supported for number properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}else if(["date","time","datetime"].includes(m)){if(h!=="now")throw new g(`Function '${h}' is not supported for ${m} properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}else throw new g(`Functions are not supported as default values for ${m} properties.`,{code:"E_INVALID_DEFAULT_FUNCTION",status:400})}t={type:u,value:h}}let i=!!o.primary,r=!o.required&&!i,s=!!o.unique;!t&&o.hasSemantic(y.DeletedFlag)&&(t={type:"literal",value:"false"});let a=o.getSemantic(y.Currency);if(a){let u=a.config??{},h=u.storageFormat||ss.storageFormat;if(h==="complex_object")return[{name:e,dataType:"JSONB",isNullable:r,isPrimary:i,isUnique:s,defaultRule:null}];if(h==="decimal"||h==="integer_cents"){let m=u.decimalPlaces??ss.decimalPlaces,f=h==="decimal"?`NUMERIC(19, ${m})`:"BIGINT";return[{name:`${e}_amount`,dataType:f,isNullable:r,isPrimary:i,isUnique:s,defaultRule:t},{name:`${e}_currency`,dataType:"CHAR(3)",isNullable:r,isPrimary:!1,isUnique:!1,defaultRule:{type:"literal",value:u.defaultCurrency||"USD"}}]}}let n=[{name:e,dataType:sd(o),isNullable:r,isPrimary:i,isUnique:s,defaultRule:t}],l=!1,c=o.getSemantic(y.Email);c&&(l=(c.config??ro).requireVerification!==!1);let p=o.getSemantic(y.Phone);return p&&(l=(p.config??so).requireVerification===!0),l&&n.push({name:`_${e}_verified`,dataType:"BOOLEAN",isNullable:!1,isPrimary:!1,isUnique:!1,defaultRule:{type:"literal",value:"false"}},{name:`_${e}_token`,dataType:"VARCHAR(255)",isNullable:!0,isPrimary:!1,isUnique:!1,defaultRule:null},{name:`_${e}_expires_at`,dataType:"TIMESTAMPTZ",isNullable:!0,isPrimary:!1,isUnique:!1,defaultRule:null}),n}function ad(o){let e=o.toUpperCase().split("(")[0];return e==="CHARACTER VARYING"&&(e="VARCHAR"),e==="CHARACTER"&&(e="CHAR"),e}function nd(o,e){let t=e.toUpperCase(),i=ad(o.dataType),r=t.split("(")[0];if(i===r){if(i==="VARCHAR"){let a=o.dataType.match(/\((\d+)\)/),n=a?Number.parseInt(a[1],10):null,l=t.match(/\((\d+)\)/),c=l?Number.parseInt(l[1],10):null;return!!(!c||n&&c>=n)}return!0}return{INTEGER:["BIGINT","NUMERIC","VARCHAR","TEXT"],BIGINT:["NUMERIC","VARCHAR","TEXT"],DATE:["TIMESTAMPTZ"],BOOLEAN:["VARCHAR","TEXT"]}[i]?.includes(r)||!1}function od(o,e,t,i,r){if(!e.actions)return;let s=e.entity.key,a=t.get(s),n=i.findEntity(s);if(!a)return;let l=Array.from(a.withInheritedProperties()),c=new Set(l.map(h=>h.key)),p=Array.from(a.withInheritedAssociations()),u=new Set(p.map(h=>h.key));for(let h of e.actions)if(!(!h.projection||!Array.isArray(h.projection.fields)))for(let m of h.projection.fields)if(m.type==="association"){let f=m.key.split("."),b=f[0];if(u.has(b)){let k=p.find(S=>S.key===b);f.length>1&&(!k||k.schema?.embedded!==!0)&&r.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"association",fieldKey:m.key,reason:`Projected association '${m.key}' is invalid because association '${b}' is not embedded.`})}else{let k=!1,S=`Projected association '${m.key}' no longer exists on entity '${a.info.getLabel()}'.`;if(n){let I=Array.from(n.withInheritedAssociations()).find(D=>D.key===b);if(I){let D;try{D=I.getExposedName()}catch{}if(D){let w=p.find(v=>{try{return v.getExposedName()===D}catch{return!1}});w&&(f.length>1&&w.schema?.embedded!==!0?S=`Projected association '${m.key}' is invalid because remapped association '${w.key}' is not embedded.`:k=!0)}}}k||r.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"association",fieldKey:m.key,reason:S})}}else{let f=m.key.split("."),b=f[0];if(c.has(b)){let k=l.find(S=>S.key===b);f.length>1&&(!k||k.type!=="json"?r.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"property",fieldKey:m.key,reason:`Projected property '${m.key}' is invalid because root property '${b}' is not of type 'json'.`}):k.jsonSchema&&(lt(k.jsonSchema,f.slice(1))||r.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"property",fieldKey:m.key,reason:`Projected property '${m.key}' is invalid according to the JSON Schema of '${b}'.`})))}else{let k=!1;if(n){let S=Array.from(n.withInheritedProperties()).find(I=>I.key===b);if(S){let I;try{I=S.getExposedName()}catch{}if(I){let D=l.find(w=>{try{return w.getExposedName()===I}catch{return!1}});D&&(f.length===1||D.type==="json")&&(k=!0,f.length>1&&D.jsonSchema&&(lt(D.jsonSchema,f.slice(1))||(k=!1)))}}}k||r.actionProjectionsWithMismatches.push({exposureKey:o,actionKind:h.kind,fieldType:"property",fieldKey:m.key,reason:`Projected property '${m.key}' no longer exists on entity '${a.info.getLabel()}'.`})}}}function ld(o,e,t,i,r){if(!e.paginationContract)return;let s=e.paginationContract,a=e.entity.key,n=t.get(a);if(!n)return;let l=Array.from(n.withInheritedProperties()),c=new Set(l.map(h=>h.key)),p=i.findEntity(a),u=(h,m)=>{if(!(!h||!Array.isArray(h)))for(let f of h){let b=f.split("."),k=b[0];if(c.has(k)){let S=l.find(I=>I.key===k);b.length>1&&(!S||S.type!=="json"?r.paginationFieldsWithMismatches.push({exposureKey:o,fieldGroup:m,fieldKey:f,reason:`The ${m} field '${f}' is invalid because root property '${k}' is not of type 'json'.`}):S.jsonSchema&&(lt(S.jsonSchema,b.slice(1))||r.paginationFieldsWithMismatches.push({exposureKey:o,fieldGroup:m,fieldKey:f,reason:`The ${m} field '${f}' is invalid according to the JSON Schema of '${k}'.`})))}else{let S=!1;if(p){let I=Array.from(p.withInheritedProperties()).find(D=>D.key===k);if(I){let D;try{D=I.getExposedName()}catch{}if(D){let w=l.find(v=>{try{return v.getExposedName()===D}catch{return!1}});w&&(b.length===1||w.type==="json")&&(S=!0,b.length>1&&w.jsonSchema&&(lt(w.jsonSchema,b.slice(1))||(S=!1)))}}}S||r.paginationFieldsWithMismatches.push({exposureKey:o,fieldGroup:m,fieldKey:f,reason:`The ${m} field '${f}' no longer exists on entity '${n.info.getLabel()}'.`})}}};u(s.filterableFields,"filterable"),u(s.sortableFields,"sortable"),u(s.searchableFields,"searchable")}function no(o,e){let t=o.domain,i={hasUpdate:!1,canProceed:!0,breakingChanges:[],exposedEntitiesToRemove:[],subEndpointsToRemove:[],userModelRemapping:[],sessionPropertiesToRemove:[],accessRulesWithMismatches:[],paginationFieldsWithMismatches:[],actionProjectionsWithMismatches:[]};if(!t)return i.hasUpdate=!0,i;if(t.key===e.key&&t.info.version===e.info.version)return i;i.hasUpdate=!0;let r=new Map;for(let w of t.listEntities())r.set(w.key,w);let s=new Map;for(let w of e.listEntities())s.set(w.key,w);let a=new Set;for(let[w,v]of o.exposes.entries()){let E=r.has(v.entity.key),R=s.get(v.entity.key);if(!R){let j=r.get(v.entity.key)?.info.getLabel()||v.entity.key;i.exposedEntitiesToRemove.push({key:w,entityKey:v.entity.key,name:v.entity.key,reason:`Entity ${j} no longer exists in the domain.`}),a.add(w);continue}if(E){let j=r.get(v.entity.key),z=new Map;for(let ee of j.withInheritedProperties())try{let G=ee.getExposedName();G&&z.set(G,ee)}catch{}let J=new Map;for(let ee of R.withInheritedProperties())try{let G=ee.getExposedName();G&&J.set(G,ee)}catch{}for(let[ee,G]of z.entries()){let ge=J.get(ee);if(!ge)continue;let le=ao(G),ce=ao(ge);for(let we of le){let Se=ce.find(dt=>dt.name===we.name);if(!Se)continue;if(we.isPrimary&&!Se.isPrimary){i.canProceed=!1;let dt=j.info.getLabel(),pt=`Cannot remove Primary Key constraint from column '${we.name}' in entity '${dt}'.`;i.breakingChanges.push({type:"primary_key_removed",entityKey:j.key,propertyKey:G.key,reason:pt})}if(!nd(we,Se.dataType)){i.canProceed=!1;let dt=j.info.getLabel(),pt=`Cannot safely cast column '${we.name}' in entity '${dt}' from ${we.dataType} to ${Se.dataType}.`;i.breakingChanges.push({type:"type_change_unsafe",entityKey:j.key,propertyKey:G.key,reason:pt})}let Ye=we.isNullable&&!Se.isNullable,cs=!!Se.defaultRule;if(Ye&&!cs){i.canProceed=!1;let dt=j.info.getLabel(),pt=`Cannot make column '${we.name}' in entity '${dt}' required without providing a default value to backfill existing records.`;i.breakingChanges.push({type:"column_not_null_missing_default",entityKey:j.key,propertyKey:G.key,reason:pt})}}}}}let n=!0;for(;n;){n=!1;for(let[w,v]of o.exposes.entries())if(!a.has(w)&&v.parent){let E=o.exposes.get(v.parent.key),R=r.get(E.entity.key),j=R?.info.getLabel()||E.entity.key;if(a.has(v.parent.key)){i.subEndpointsToRemove.push({key:w,parentKey:v.parent.key,associationKey:v.parent.association.key,name:v.entity.key,reason:`Parent exposure for entity ${j} is scheduled for removal.`}),a.add(w),n=!0;continue}let z=s.get(E.entity.key);if(!z){i.subEndpointsToRemove.push({key:w,parentKey:v.parent.key,associationKey:v.parent.association.key,name:v.entity.key,reason:`Parent entity ${j} is scheduled for removal.`}),a.add(w),n=!0;continue}let J=Array.from(z.withInheritedAssociations()).find(le=>le.key===v.parent?.association.key),ee=R?Array.from(R.withInheritedAssociations()).find(le=>le.key===v.parent?.association.key):void 0,G=J?.info.getLabel()||ee?.info.getLabel()||v.parent?.association.key;if(!J){i.subEndpointsToRemove.push({key:w,parentKey:v.parent.key,associationKey:v.parent.association.key,name:v.entity.key,reason:`Parent association ${G} is missing in the new domain.`}),a.add(w),n=!0;continue}if(!J.targets.some(le=>le.key===v.entity.key&&(!le.domain||le.domain===e.key))){let ce=(r.get(v.entity.key)||s.get(v.entity.key))?.info.getLabel()||v.entity.key;i.subEndpointsToRemove.push({key:w,parentKey:v.parent.key,associationKey:v.parent.association.key,name:v.entity.key,reason:`Target entity ${ce} is no longer a valid target for the parent association ${G}.`}),a.add(w),n=!0;continue}}}let l,c;if(o.user&&(l=r.get(o.user.key),c=s.get(o.user.key),!c)){i.canProceed=!1;let v=`User entity '${l?.info.getLabel()||o.user.key}' no longer exists in the new domain version.`;i.breakingChanges.push({type:"user_entity_missing",entityKey:o.user.key,propertyKey:"",reason:v})}if(o.user&&c&&l){let w=Array.from(l.withInheritedProperties()),v=Array.from(c.withInheritedProperties());if(o.session?.properties)for(let E of o.session.properties){let R=w.find(J=>J.key===E.key);if(!R){i.sessionPropertiesToRemove.push(E.key);continue}let j;try{j=R.getExposedName()}catch{}if(!j){i.sessionPropertiesToRemove.push(E.key);continue}let z=v.find(J=>{try{return J.getExposedName()===j}catch{return!1}});z?z.key!==R.key&&i.userModelRemapping.push({oldPropertyKey:R.key,newPropertyKey:z.key,exposedName:j,reason:`Property ${R.info.getLabel(R.key)} has been renamed to ${z.info.getLabel(z.key)}.`}):i.sessionPropertiesToRemove.push(E.key)}}let p,u;c&&(p=Array.from(c.withInheritedProperties()).find(v=>v.hasSemantic(y.UserRole)));let h=Array.from(s.values()).find(w=>w.hasSemantic(y.Organization));h&&(u=Array.from(h.withInheritedProperties()).find(w=>w.hasSemantic(y.OrganizationRole)));let m=p?.schema?.enum,f=u?.schema?.enum,b=(w,v)=>{if(w.type==="matchOrganization"){let E=w;if(!u)i.accessRulesWithMismatches.push({ruleType:"matchOrganization",location:v,reason:"No organization role property configured on the new user model."});else if(f&&Array.isArray(f)&&E.allowedOrgRoles)for(let R of E.allowedOrgRoles)f.includes(R)||i.accessRulesWithMismatches.push({ruleType:"matchOrganization",location:v,reason:`Organization role '${R}' is no longer a valid role in the new user model.`})}},k=(w,v)=>{if(w.type==="matchUserRole"){let E=w;if(!p)i.accessRulesWithMismatches.push({ruleType:"matchUserRole",location:v,reason:"No role field configured on the new user model."});else if(m&&Array.isArray(m))for(let R of E.role)m.includes(R)||i.accessRulesWithMismatches.push({ruleType:"matchUserRole",location:v,reason:`Role '${R}' is no longer a valid role in the new user model.`})}},S=(w,v,E)=>{if(w.type==="matchResourceAttribute"){let R=w;if(!E)return;let j=s.get(E);if(!j)return;let z=Array.from(j.withInheritedProperties());if(!z.some(ee=>ee.key===R.attribute)){let ee=r.get(E),G=R.attribute,ge=!1;if(ee){let le=Array.from(ee.withInheritedProperties()).find(ce=>ce.key===R.attribute);if(le){G=le.info.getLabel(le.key);let ce;try{ce=le.getExposedName()}catch{}ce&&z.find(Se=>{try{return Se.getExposedName()===ce}catch{return!1}})&&(ge=!0)}}if(!ge){let le=j.info.getLabel();i.accessRulesWithMismatches.push({ruleType:"matchResourceAttribute",location:v,reason:`Property attribute '${G}' no longer exists on entity '${le}'.`})}}}},I=(w,v,E)=>{if(w.type==="matchResourceOwner"){let R=w;if(R.target==="user-entity"){o.user&&!c&&i.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:v,reason:"User entity is missing in the new domain."});return}if(!E)return;let j=s.get(E);if(!j)return;if(R.property){let z=Array.from(j.withInheritedProperties()),J=Array.from(j.withInheritedAssociations());if(!(z.some(G=>G.key===R.property)||J.some(G=>G.key===R.property))){let G=r.get(E),ge=R.property,le=!1;if(G){let ce=Array.from(G.withInheritedProperties()),we=Array.from(G.withInheritedAssociations()),Se=ce.find(Ye=>Ye.key===R.property)||we.find(Ye=>Ye.key===R.property);if(Se){ge=Se.info.getLabel(Se.key);let Ye;try{Ye=Se.getExposedName()}catch{}if(Ye){let cs=z.find(pt=>{try{return pt.getExposedName()===Ye}catch{return!1}}),dt=J.find(pt=>{try{return pt.getExposedName()===Ye}catch{return!1}});(cs||dt)&&(le=!0)}}}if(!le){let ce=j.info.getLabel();e.resolveOwnershipPath(E)!==null?i.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:v,reason:`Direct ownership property '${ge}' no longer exists on entity '${ce}'. The resolved ownership path will be used instead.`}):i.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:v,reason:`Ownership property '${ge}' no longer exists on entity '${ce}' and no transitively resolved ownership path is available.`})}}}else if(!(e.resolveOwnershipPath(E)!==null)){let J=j.info.getLabel();i.accessRulesWithMismatches.push({ruleType:"matchResourceOwner",location:v,reason:`No ownership property specified and no transitively resolved ownership path exists for entity '${J}'.`})}}},D=(w,v)=>{if(w.type==="matchUserProperty"){let E=w;if(o.user&&!c){i.accessRulesWithMismatches.push({ruleType:"matchUserProperty",location:v,reason:"User entity is missing in the new domain."});return}c&&E.property&&(Array.from(c.withInheritedProperties()).some(z=>z.key===E.property)||i.userModelRemapping.some(J=>J.oldPropertyKey===E.property)||i.accessRulesWithMismatches.push({ruleType:"matchUserProperty",location:v,reason:`User property '${E.property}' no longer exists on the User entity.`}))}};if(o.accessRules)for(let w of o.accessRules)k(w,{type:"api",key:o.key}),b(w,{type:"api",key:o.key}),D(w,{type:"api",key:o.key});for(let[w,v]of o.exposes.entries())if(!a.has(w)){if(v.accessRules)for(let E of v.accessRules)k(E,{type:"exposure",key:w}),b(E,{type:"exposure",key:w}),S(E,{type:"exposure",key:w},v.entity.key),I(E,{type:"exposure",key:w},v.entity.key),D(E,{type:"exposure",key:w});if(v.actions){for(let E of v.actions)if(E.accessRules)for(let R of E.accessRules)k(R,{type:"action",key:`${w}:${E.kind}`}),b(R,{type:"action",key:`${w}:${E.kind}`}),S(R,{type:"action",key:`${w}:${E.kind}`},v.entity.key),I(R,{type:"action",key:`${w}:${E.kind}`},v.entity.key),D(R,{type:"action",key:`${w}:${E.kind}`})}od(w,v,s,t,i),ld(w,v,s,t,i)}return i}function oo(o,e,t){if(!t.canProceed)throw new g("Cannot apply domain update because it contains breaking changes. Details in the report.",{code:"E_CANNOT_PROCEED_WITH_UPGRADE",status:400});let i=o.domain;o.dependencies.clear(),o.dependencies.set(e.key,e),o.dependencyList=[{key:e.key,version:e.info.version}];let r=[...t.exposedEntitiesToRemove,...t.subEndpointsToRemove];for(let h of r)o.exposes.delete(h.key);if(o.user&&o.session){let h=new Set(t.sessionPropertiesToRemove),m=new Map;for(let f of t.userModelRemapping)m.set(f.oldPropertyKey,f.newPropertyKey);if(o.session.properties){let f=[];for(let b of o.session.properties){if(h.has(b.key))continue;let k=m.get(b.key);k?f.push({...b,key:k}):f.push(b)}o.session.properties=f}}let s=new Map;for(let h of e.listEntities())s.set(h.key,h);let a,n;if(o.user){let h=s.get(o.user.key);h&&(a=Array.from(h.withInheritedProperties()).find(f=>f.hasSemantic(y.UserRole)))}let l=Array.from(s.values()).find(h=>h.hasSemantic(y.Organization));l&&(n=Array.from(l.withInheritedProperties()).find(h=>h.hasSemantic(y.OrganizationRole)));let c=a?.schema?.enum,p=n?.schema?.enum,u=(h,m)=>{let f=[];for(let b of h)if(b.type==="matchUserRole"){let k=b;if(!a)continue;if(c&&Array.isArray(c)){let S=k.role.filter(I=>c.includes(I));if(S.length===0)continue;k.role=S}f.push(b)}else if(b.type==="matchOrganization"){let k=b;if(!n)continue;if(p&&Array.isArray(p)&&k.allowedOrgRoles){let S=k.allowedOrgRoles.filter(I=>p.includes(I));if(S.length===0)continue;k.allowedOrgRoles=S}f.push(b)}else if(b.type==="matchResourceAttribute"&&m){let k=b,S=s.get(m);if(!S)continue;let I=Array.from(S.withInheritedProperties());if(I.some(w=>w.key===k.attribute))f.push(b);else{let w,v=i?.findEntity(m);if(v){let R=Array.from(v.withInheritedProperties()).find(j=>j.key===k.attribute);if(R){let j;try{j=R.getExposedName()}catch{}j&&(w=I.find(z=>{try{return z.getExposedName()===j}catch{return!1}}))}}if(w)k.attribute=w.key,f.push(b);else continue}}else if(b.type==="matchResourceOwner"&&m){let k=b;if(k.target==="user-entity")f.push(b);else if(k.property){let S=s.get(m);if(!S)continue;let I=Array.from(S.withInheritedProperties()),D=Array.from(S.withInheritedAssociations());if(I.some(v=>v.key===k.property)||D.some(v=>v.key===k.property))f.push(b);else{let v,E=i?.findEntity(m);if(E){let R=Array.from(E.withInheritedProperties()),j=Array.from(E.withInheritedAssociations()),z=R.find(J=>J.key===k.property)||j.find(J=>J.key===k.property);if(z){let J;try{J=z.getExposedName()}catch{}if(J){let ee=I.find(ge=>{try{return ge.getExposedName()===J}catch{return!1}}),G=D.find(ge=>{try{return ge.getExposedName()===J}catch{return!1}});ee?v=ee.key:G&&(v=G.key)}}}v?(k.property=v,f.push(b)):(k.property=void 0,f.push(b))}}else f.push(b)}else if(b.type==="matchUserProperty"){let k=b;if(o.user){let S=s.get(o.user.key);if(S&&k.property)if(Array.from(S.withInheritedProperties()).some(w=>w.key===k.property))f.push(b);else{let w=t.userModelRemapping.find(v=>v.oldPropertyKey===k.property);w?(k.property=w.newPropertyKey,f.push(b)):(k.property="",f.push(b))}else f.push(b)}else f.push(b)}else f.push(b);return f};o.accessRules&&(o.accessRules=u(o.accessRules));for(let h of o.exposes.values()){let m=h.entity.key,f=s.get(m),b=i?.findEntity(m),k=w=>w,S=w=>w,I=!1,D=!1;if(f){let w=Array.from(f.withInheritedProperties()),v=new Set(w.map(j=>j.key)),E=Array.from(f.withInheritedAssociations()),R=new Set(E.map(j=>j.key));k=j=>{let z=j.split("."),J=z[0],ee=J,G=!1;if(v.has(J))G=!0;else if(b){let le=Array.from(b.withInheritedProperties()).find(ce=>ce.key===J);if(le){let ce;try{ce=le.getExposedName()}catch{}if(ce){let we=w.find(Se=>{try{return Se.getExposedName()===ce}catch{return!1}});we&&(ee=we.key,G=!0)}}}z[0]=ee;let ge=z.join(".");return G||(I=!0),ge},S=j=>{let z=j.split("."),J=z[0],ee=J,G=!1;if(R.has(J))G=!0;else if(b){let le=Array.from(b.withInheritedAssociations()).find(ce=>ce.key===J);if(le){let ce;try{ce=le.getExposedName()}catch{}if(ce){let we=E.find(Se=>{try{return Se.getExposedName()===ce}catch{return!1}});we&&(ee=we.key,G=!0)}}}z[0]=ee;let ge=z.join(".");return G||(D=!0),ge}}if(h.accessRules&&(h.accessRules=u(h.accessRules,m)),h.actions)for(let w of h.actions)w.accessRules&&(w.accessRules=u(w.accessRules,m)),w.projection&&Array.isArray(w.projection.fields)&&(w.projection.fields=w.projection.fields.map(v=>{if(v.type==="association"){D=!1;let E=S(v.key),j=t.actionProjectionsWithMismatches.some(z=>z.exposureKey===h.key&&z.actionKind===w.kind&&z.fieldType==="association"&&z.fieldKey===v.key)||D?!0:v.invalid;return{...v,key:E,invalid:j}}else{I=!1;let E=k(v.key),j=t.actionProjectionsWithMismatches.some(z=>z.exposureKey===h.key&&z.actionKind===w.kind&&z.fieldType==="property"&&z.fieldKey===v.key)||I?!0:v.invalid;return{...v,key:E,invalid:j}}}));if(h.paginationContract&&f){let w=h.paginationContract;w.filterableFields&&(w.filterableFields=w.filterableFields.map(k)),w.sortableFields&&(w.sortableFields=w.sortableFields.map(k)),w.searchableFields&&(w.searchableFields=w.searchableFields.map(k))}}o.notifyChange()}var as=class o extends ui{kind;key;info;user;authentication;authorization;session;exposes;accessRules;rateLimiting;termsOfService;contact;license;pagination;#e=!0;#t=!1;get domain(){if(this.dependencyList.length===0)return;let e=this.dependencyList[0];return this.dependencies.get(e.key)}static createSchema(e={}){let{key:t=q(),exposes:i=[],pagination:r}=e,s=ie.fromJSON(e.info,{name:"Unnamed API"}).toJSON(),a={kind:$e,key:t,info:s,exposes:i,pagination:r?structuredClone(r):{kind:"cursor"}};return e.user&&(a.user=structuredClone(e.user)),e.dependencyList&&(a.dependencyList=structuredClone(e.dependencyList)),e.authentication&&(a.authentication=structuredClone(e.authentication)),e.authorization&&(a.authorization=structuredClone(e.authorization)),e.session&&(a.session=structuredClone(e.session)),Array.isArray(e.accessRules)&&(a.accessRules=structuredClone(e.accessRules)),e.rateLimiting&&(a.rateLimiting=structuredClone(e.rateLimiting)),e.termsOfService&&(a.termsOfService=e.termsOfService),e.contact&&(a.contact=structuredClone(e.contact)),e.license&&(a.license=structuredClone(e.license)),a}constructor(e,t){let i=o.createSchema(e),r=[];if(t instanceof Xe)t.readOnly?r.push(t):(console.warn(`Domain ${t.key} is not read only, cloning it. This may have performance implications.`),r.push(t.clone({readOnly:!0})));else if(typeof t=="object"&&t.kind===ze)r.push(new Xe(t,void 0,{readOnly:!0}));else if(t)throw new g("Invalid domain provided. Expected a DataDomain instance or schema.",{code:"E_DOMAIN_INVALID",help:"It looks like the provided data domain is not a valid instance or domain schema."});if(t){if(!t.info.version)throw new g(`Domain ${t.key} must have a version.`,{code:"E_DOMAIN_NO_VERSION",help:"Before attaching the data domain, give it a version name. Only versioned domains can be attached to an API model."});i.dependencyList=[{key:t.key,version:t.info.version}]}super(i.dependencyList,r),this.kind=i.kind,this.key=i.key,this.info=new ie(i.info),this.user=i.user,this.pagination=i.pagination?structuredClone(i.pagination):{kind:"cursor"},i.authentication&&(this.authentication=structuredClone(i.authentication)),i.authorization&&(this.authorization=structuredClone(i.authorization)),i.session&&(this.session=structuredClone(i.session)),Array.isArray(i.exposes)?this.exposes=new Map(i.exposes.map(s=>[s.key,new Yt(this,s)])):this.exposes=new Map,Array.isArray(i.accessRules)?this.accessRules=i.accessRules.map(s=>fi(this,s)):this.accessRules=[],i.rateLimiting&&(this.rateLimiting=new wt(i.rateLimiting)),i.termsOfService&&(this.termsOfService=i.termsOfService),i.contact&&(this.contact=i.contact),i.license&&(this.license=i.license),this.#e=!1}toJSON(){let e={kind:this.kind,key:this.key,info:this.info.toJSON(),exposes:Array.from(this.exposes.values()).map(t=>t.toJSON()),pagination:structuredClone(this.pagination)};return this.user&&(e.user={...this.user}),this.dependencyList.length>0&&(e.dependencyList=structuredClone(this.dependencyList)),this.authentication&&(e.authentication=structuredClone(this.authentication)),this.authorization&&(e.authorization=structuredClone(this.authorization)),this.session&&(e.session=structuredClone(this.session)),Array.isArray(this.accessRules)&&this.accessRules.length>0&&(e.accessRules=this.accessRules.map(t=>t.toJSON())),this.rateLimiting&&(e.rateLimiting=this.rateLimiting.toJSON()),this.termsOfService&&(e.termsOfService=this.termsOfService),this.contact&&(e.contact=structuredClone(this.contact)),this.license&&(e.license=structuredClone(this.license)),e}notifyChange(){this.#t||this.#e||(this.#t=!0,queueMicrotask(()=>{this.#t=!1;let e=new Event("change");this.dispatchEvent(e)}))}exposeEntity(e,t){let i=this.domain;if(!i)throw new g("No domain attached to API model",{code:"E_NO_DOMAIN",help:"Attach a data domain to the API model before exposing entities."});let r=Te(e,this.domain?.key);if(t?.parentId){let u=this.exposes.get(t.parentId);if(!u)throw new g(`Parent exposure not found: ${t.parentId}`,{code:"E_PARENT_NOT_FOUND",help:"Make sure the parent exposure key you provided is correct."});let h;for(let J of this.exposes.values())if(J.parent?.key===u.key&&Te(J.entity,this.domain?.key)===r){h=J;break}if(h)throw new g(`Entity ${e.key} is already exposed under the specified parent.`,{code:"E_ENTITY_ALREADY_EXPOSED",help:"Do not try to expose already exposed entity under the same parent."});let m;for(let J of this.exposes.values())if(Te(J.entity,this.domain?.key)===r){m=J;break}if(m&&t?.promoteOnReuse)return this.promoteToRoot(m,i),m;let f=this.findAssociation(u.entity.key,u.entity.domain,e,i);if(!f)throw new g(`No association found from parent entity "${u.entity.key}" to target entity "${e.key}"`,{code:"E_ASSOCIATION_NOT_FOUND",help:"Ensure there is a defined association in the data domain connecting these entities."});let b=f.info.name||"",k=Gr(b.toLocaleLowerCase()),S=f.multiple!==!1,I=i.findEntity(e.key,e.domain);if(!I)throw new g(`Entity not found in domain: ${e.key}`,{code:"E_NO_ENTITY"});let D=mi(I.info.name||""),w=S?`/${k}`:void 0,v=S?`/${k}/{${D}}`:`/${k}`,R=(u.parent?.depth??0)+1,j={kind:xt,key:q(),entity:{...e},actions:[],isRoot:!1,collectionPath:w,resourcePath:"",hasCollection:S,parent:{key:u.key,association:{key:f.key,domain:u.entity.domain},depth:R}};t&&(j.exposeOptions={...t});let z=new Yt(this,j);return z.setResourcePath(v),this.exposes.set(z.key,z),t?.followAssociations&&(t?.maxDepth===void 0||t.maxDepth>R)&&this.followEntityAssociations(j,t),this.notifyChange(),z}let s;for(let u of this.exposes.values())if(u.isRoot&&Te(u.entity,this.domain?.key)===r){s=u;break}if(s)throw new g(`Entity ${e.key} is already exposed.`,{code:"E_ENTITY_ALREADY_EXPOSED",help:"Do not try to expose already exposed entity."});let a=i.findEntity(e.key,e.domain);if(!a)throw new g(`Entity not found in domain: ${e.key}`,{code:"E_NO_ENTITY",help:"Make sure the entity you are trying to expose exists in the data domain."});let{collectionPath:n,resourcePath:l}=this.generateUniqueRootPaths(a.info.name||""),c={kind:xt,key:q(),entity:{...e},actions:[],isRoot:!0,collectionPath:n,resourcePath:l,hasCollection:!0};t&&(c.exposeOptions={...t});let p=new Yt(this,c);return this.exposes.set(p.key,p),t?.followAssociations&&(t?.maxDepth===void 0||t.maxDepth>0)&&this.followEntityAssociations(c,t),this.notifyChange(),p}promoteToRoot(e,t){if(e.isRoot)return;let i=t.findEntity(e.entity.key,e.entity.domain);if(i){let{collectionPath:r,resourcePath:s}=this.generateUniqueRootPaths(i.info.name||"");e.isRoot=!0,e.parent=void 0,e.hasCollection=!0,e.collectionPath=r,e.setResourcePath(s)}}generateUniqueRootPaths(e){let t=Gr(e.toLocaleLowerCase()),i=mi(e),r=`/${t}`,s=`/${t}/{${i}}`,a=1,n=r;for(;this.findCollectionPathCollision(r);)r=`${n}-${a}`,s=`${r}/{${i}}`,a++;return{collectionPath:r,resourcePath:s}}findAssociation(e,t,i,r){let s=r.findEntity(e,t);if(!s)throw new g(`Parent entity not found in domain: ${e}`,{code:"E_NO_ENTITY"});for(let a of s.listAssociations())for(let n of a.targets)if(n.key===i.key&&n.domain===i.domain)return a}followEntityAssociations(e,t){let i=this.domain;if(!i)throw new g("No domain attached to API model",{code:"E_NO_DOMAIN"});let r=t.maxDepth??6,s=Te(e.entity,this.domain?.key);this.followAssociationsRecursive(e.entity,e.key,0,[s],t,r,i)}followAssociationsRecursive(e,t,i,r,s,a,n){let l=n.findEntity(e.key,e.domain);if(l)for(let c of l.listAssociations())for(let p of c.targets){let u=Te(p,this.domain?.key),h=Te(e,this.domain?.key);if(u===h||r.includes(u))continue;let m=Te(p,this.domain?.key),f;for(let j of this.exposes.values())if(Te(j.entity,this.domain?.key)===m){f=j;break}if(f){if(!f.isRoot&&s?.promoteOnReuse){let j=!1;if(f.parent){let z=this.exposes.get(f.parent.key);if(z){let J=Te(z.entity,this.domain?.key);r.includes(J)&&(j=!0)}}j||this.promoteToRoot(f,n);continue}if(f.isRoot)continue}let b=n.findEntity(p.key,p.domain);if(!b)continue;let k=c.info.name||"",S=Gr(k.toLocaleLowerCase()),I=c.multiple!==!1,D=mi(b.info.name||""),w=I?`/${S}`:void 0,v=I?`/${S}/{${D}}`:`/${S}`,E={kind:xt,key:q(),entity:{...p},actions:[],isRoot:!1,collectionPath:w,resourcePath:"",hasCollection:I,parent:{key:t,association:{key:c.key,domain:e.domain},depth:i+1}},R=new Yt(this,E);R.setResourcePath(v),this.exposes.set(R.key,R),i+1>=a?E.truncated=!0:this.followAssociationsRecursive(p,E.key,i+1,[...r,u],s,a,n)}}removeExposedEntity(e){if(!this.exposes.has(e))throw new g(`Exposed entity with key "${e}" not found.`,{code:"E_NO_EXPOSURE",help:"The exposed entity you are trying to remove does not exist."});this.removeWithChildren(e),this.notifyChange()}removeWithChildren(e){if(!this.exposes.has(e))return;this.exposes.delete(e);let t=i=>{for(let r of this.exposes.values())r.parent?.key===i&&(t(r.key),this.exposes.delete(r.key))};t(e)}cleanForDomainChange(){this.dependencies.clear(),this.dependencyList=[],this.exposes=new Map,this.user=void 0,this.session&&(this.session.properties=[]),this.notifyChange()}attachDataDomain(e){if(!e.info.version)throw new g("Cannot attach DataDomain without a version. Please set the version in the domain info.",{code:"E_DOMAIN_NO_VERSION",help:"Before attaching the data domain, give it a version name. Only versioned domains can be attached to an API model."});this.cleanForDomainChange(),this.dependencies.set(e.key,e),this.dependencyList=[{key:e.key,version:e.info.version}];for(let t of e.listEntities())if(t.hasSemantic(y.User)){this.user={key:t.key};break}this.notifyChange()}findExposedByEntity(e){let t=Te(e,this.domain?.key);for(let i of this.exposes.values())if(Te(i.entity,this.domain?.key)===t)return i}findResourcePathCollision(e,t){for(let i of this.exposes.values())if(!(t&&i.key===t)&&i.isRoot&&i.resourcePath===e)return i}findCollectionPathCollision(e,t){for(let i of this.exposes.values())if(!(t&&i.key===t)&&i.isRoot&&i.hasCollection&&i.collectionPath===e)return i}hasDomainUpdate(e){let t=this.domain;return t?t.key!==e.key||t.info.version!==e.info.version:!0}analyzeDomainUpdate(e){return no(this,e)}applyDomainUpdate(e,t){oo(this,e,t),this.notifyChange()}};function $(o,e){return`${o}_${e}`}function lo(o){let e=[],t={apiModelKey:o.key,kind:$e,key:o.key};return o.kind!==$e&&e.push({code:$("API","INVALID_KIND"),message:"The API model type is incorrect.",suggestion:'Set the model type to "ApiModel".',severity:"error",context:{...t,property:"kind"}}),(!o.key||typeof o.key!="string"||o.key.trim()==="")&&e.push({code:$("API","MISSING_KEY"),message:"The API model is missing a unique identifier.",suggestion:"Provide a valid name to use as a unique identifier.",severity:"error",context:{...t,property:"key"}}),(!o.info||!o.info.name||o.info.name.trim()==="")&&e.push({code:$("API","MISSING_NAME"),message:"The API model has no defined name.",suggestion:"Provide a descriptive name for your API.",severity:"error",context:{...t,property:"info.name"}}),(!o.info||!o.info.description||o.info.description.trim()==="")&&e.push({code:$("API","MISSING_DESCRIPTION"),message:"Adding a description helps others understand your API.",suggestion:"Add a description to clarify the purpose of this API.",severity:"warning",context:{...t,property:"info.description"}}),e}function co(o){let e=[],t={apiModelKey:o.key,kind:$e,key:o.key},i=o.domain;return i?((!i.info||!i.info.version)&&e.push({code:$("API","MISSING_DOMAIN_VERSION"),message:"The selected Data Domain is missing a version number.",suggestion:"Specify a version for the attached Data Domain.",severity:"error",context:t}),e):(e.push({code:$("API","MISSING_DOMAIN"),message:"No Data Domain is attached to the API.",suggestion:"Select a Data Domain from the settings to power your API.",severity:"error",context:t}),e)}function po(o){let e=[],t={apiModelKey:o.key,kind:$e,key:o.key},i=o.domain&&o.user?o.domain.findEntity(o.user.key,o.user.domain):void 0;if(!o.authentication)e.push({code:$("API","MISSING_AUTHENTICATION"),message:"The API is missing authentication settings.",suggestion:"Go to the security settings and configure how users authenticate.",severity:"error",context:{...t,property:"authentication"}});else if(o.authentication.strategy==="UsernamePassword"&&i){let r;for(let a of i.properties)if(a.hasSemantic(y.Password)){r=a;break}r||e.push({code:$("API","MISSING_PASSWORD_SEMANTIC"),message:"The selected user model requires a property with the Password data semantic for authentication.",suggestion:'Go to the Data Modeler and add the "Password" semantic to the password property.',severity:"error",context:{...t,property:"user"}});let s;for(let a of i.properties)if(a.hasSemantic(y.Username)){s=a;break}s||e.push({code:$("API","MISSING_USERNAME_SEMANTIC"),message:"Username & Password authentication requires a field with the Username data semantic.",suggestion:'Go to the Data Modeler and add the "Username" semantic to the property used for login.',severity:"error",context:{...t,property:"user"}})}if(!o.authorization)e.push({code:$("API","MISSING_AUTHORIZATION"),message:"The API is missing authorization settings.",suggestion:"Go to the security settings and configure how to handle user permissions.",severity:"error",context:{...t,property:"authorization"}});else if(o.authorization.strategy==="RBAC"&&i){let r;for(let s of i.properties)if(s.hasSemantic(y.UserRole)){r=s;break}r||e.push({code:$("API","MISSING_ROLE_SEMANTIC"),message:"Role-based access control requires a property with the User Role data semantic on the user model.",suggestion:'Go to the Data Modeler and add the "User Role" semantic to the property used for roles.',severity:"error",context:{...t,property:"user"}})}if(!o.session)e.push({code:$("API","MISSING_SESSION"),message:"The API is missing session configuration.",suggestion:"Configure how user sessions will be handled.",severity:"error",context:{...t,property:"session"}});else{if(o.session.secret||e.push({code:$("API","MISSING_SESSION_SECRET"),message:"A secure encryption key is required for sessions.",suggestion:"Provide a strong security key in the session settings.",severity:"error",context:{...t,property:"session.secret"}}),!o.session.properties||o.session.properties.length===0)e.push({code:$("API","MISSING_SESSION_PROPERTIES"),message:"The session token needs to include at least one piece of user information, like an ID.",suggestion:"Select fields that should be stored securely inside the session payload.",severity:"error",context:{...t,property:"session.properties"}});else if(o.authorization&&o.authorization.strategy==="RBAC"&&i){let a;for(let n of i.properties)if(n.hasSemantic(y.UserRole)){a=n;break}a&&!o.session.properties.find(n=>n.key===a?.key)&&e.push({code:$("API","MISSING_RBAC_SESSION_PROPERTY"),message:"The user role must be included in the session data for permissions to work.",suggestion:"Make sure your selected role property is checked in the session settings.",severity:"error",context:{...t,property:"session.properties"}})}let{cookie:r,jwt:s}=o.session;(!r||!r.enabled)&&(!s||!s.enabled)&&e.push({code:$("API","MISSING_SESSION_TRANSPORT"),message:"No delivery method for sessions (like cookies or tokens) is enabled.",suggestion:"Enable at least one session delivery mechanism in the security settings.",severity:"error",context:{...t,property:"session"}})}if(o.user?o.domain&&!o.domain.findEntity(o.user.key,o.user.domain)&&e.push({code:$("API","INVALID_USER_ENTITY"),message:"The selected user model no longer exists in your data domain.",suggestion:"Please navigate to security settings and select a valid user model.",severity:"error",context:{...t,property:"user"}}):e.push({code:$("API","MISSING_USER_ENTITY"),message:"You need to specify what kind of object represents your users.",suggestion:"Select a model from your domain that stores your user accounts.",severity:"error",context:{...t,property:"user"}}),o.accessRules&&o.accessRules.length>0)for(let r=0;r<o.accessRules.length;r++){let s=o.accessRules[r];s.inheritable||e.push({code:$("API","NON_INHERITABLE_RULE"),message:`The access rule of type "${s.type}" is not inheritable and cannot be applied at the API level.`,suggestion:"Remove this rule from the API settings or move it to a specific exposed entity / action.",severity:"error",context:{...t,property:`accessRules[${r}]`}})}return e}function uo(o){let e=[],t={apiModelKey:o.key,kind:$e,key:o.key},i=/^https?:\/\//i,r=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return o.contact?(o.contact.email&&!r.test(o.contact.email)&&e.push({code:$("API","INVALID_CONTACT_EMAIL"),message:"The contact email address looks invalid.",suggestion:"Please double check the email address formatting.",severity:"error",context:{...t,property:"contact.email"}}),o.contact.url&&!i.test(o.contact.url)&&e.push({code:$("API","INVALID_CONTACT_URL"),message:"The contact link looks invalid.",suggestion:"Provide a working link, starting with http:// or https://.",severity:"error",context:{...t,property:"contact.url"}})):e.push({code:$("API","MISSING_CONTACT"),message:"A contact email or link is highly recommended for API consumers.",suggestion:"Add an email or help desk link in the metadata tab.",severity:"info",context:{...t,property:"contact"}}),o.license?o.license.url&&!i.test(o.license.url)&&e.push({code:$("API","INVALID_LICENSE_URL"),message:"The license link looks invalid.",suggestion:"Provide a working link, starting with http:// or https://.",severity:"error",context:{...t,property:"license.url"}}):e.push({code:$("API","MISSING_LICENSE"),message:"Adding a license to your API helps users understand its usage rights.",suggestion:"Add the name and a link to your API license terms.",severity:"info",context:{...t,property:"license"}}),o.termsOfService||e.push({code:$("API","MISSING_TOS"),message:"Terms of Service help legal compliance.",suggestion:"Add a link to the terms of your API service.",severity:"info",context:{...t,property:"termsOfService"}}),e}function ho(o){let e=[],t={apiModelKey:o.key,kind:$e,key:o.key},i=!1;for(let r of o.exposes.values())if(r.actions.some(s=>vt.isListAction(s)||_t.isSearchAction(s))){i=!0;break}return i&&(!o.pagination||!o.pagination.kind?e.push({code:$("API","MISSING_PAGINATION"),message:"The API must have a defined pagination strategy when it exposes List or Search actions.",suggestion:"Configure how results are loaded (e.g. by page or by a continuous cursor).",severity:"error",context:{...t,property:"pagination"}}):(o.pagination.defaultLimit===void 0&&e.push({code:$("API","MISSING_PAGINATION_DEFAULT_LIMIT"),message:"The API doesn't have a defined default page limit when it exposes List or Search actions.",suggestion:"Set a default page limit for the pagination otherwise the API will use its default limit.",severity:"info",context:{...t,property:"pagination.defaultLimit"}}),o.pagination.maxLimit===void 0&&e.push({code:$("API","MISSING_PAGINATION_MAX_LIMIT"),message:"The API doesn't have a defined page size max limit when it exposes List or Search actions.",suggestion:"Set a max page size limit for the pagination otherwise the API will use its default max limit.",severity:"info",context:{...t,property:"pagination.maxLimit"}}))),e}function cd(o,e,t){let i=[],r={apiModelKey:t.key,kind:"Action",key:o.kind,parentExposedEntityKey:e.key};if(Ht.isDeleteAction(o)&&(o.strategy?o.strategy==="hard"&&i.push({code:$("ACTION","DELETE_HARD_WARNING"),message:"Permanent delete is active. There will be no way to restore deleted data.",suggestion:'Consider switching to "soft delete" if users might need to undo mistakes.',severity:"info",context:{...r,property:"strategy"}}):i.push({code:$("ACTION","DELETE_MISSING_STRATEGY"),message:"A Delete action must know if you want to completely erase the record, or just hide it.",suggestion:"Configure the deletion type (permanent or soft).",severity:"error",context:{...r,property:"strategy"}})),Xt.isUpdateAction(o)&&(!o.allowedMethods||o.allowedMethods.length===0)&&i.push({code:$("ACTION","UPDATE_MISSING_METHODS"),message:"An Update action must define how the data is sent (PUT replaces everything; PATCH applies partial changes).",suggestion:"Select at least one allowed HTTP method.",severity:"error",context:{...r,property:"allowedMethods"}}),o.getAllRateLimiters().some(n=>n.rules.length)||i.push({code:$("ACTION","MISSING_RATE_LIMITS"),message:"It is best practice to configure a rate limit so your API is not overwhelmed.",suggestion:"Set a reasonable maximum request speed for this operation.",severity:"warning",context:r}),o.accessRules)for(let n of o.accessRules)i.push(...fo(n,e,t));if(o.projection&&(vt.isListAction(o)||_t.isSearchAction(o)||Wt.isReadAction(o)||i.push({code:$("ACTION","INVALID_PROJECTION_SEVERITY"),message:`Projections are only supported for read actions (List, Search, Read). The action "${o.kind}" does not support projections.`,suggestion:"Remove projection configuration from this write action.",severity:"warning",context:{...r,property:"projection"}}),o.projection.type!=="include"&&o.projection.type!=="exclude"&&i.push({code:$("ACTION","INVALID_PROJECTION_TYPE"),message:'Projection type must be either "include" or "exclude".',suggestion:"Select a valid projection type.",severity:"error",context:{...r,property:"projection"}}),Array.isArray(o.projection.fields))){let l=e.entity?t.domain?.findEntity(e.entity.key,e.entity.domain):void 0;if(l){let c=Array.from(l.withInheritedProperties()),p=new Set(c.map(h=>h.key)),u=new Set(Array.from(l.withInheritedAssociations()).map(h=>h.key));o.projection.fields.forEach((h,m)=>{if(h.invalid===!0){i.push({code:$("ACTION","INVALID_PROJECTION_FIELD"),message:`The projected field "${h.key}" is marked as invalid. It was not found in the entity definition.`,suggestion:"Update or remove this field from the projection configuration.",severity:"error",context:{...r,property:`projection.fields[${m}]`}});return}if(h.type==="association"){let f=h.key.split("."),b=f[0];if(!u.has(b))i.push({code:$("ACTION","INVALID_PROJECTION_ASSOCIATION"),message:`The projected association "${h.key}" does not exist on this entity.`,suggestion:"Select a valid association or remove it.",severity:"error",context:{...r,property:`projection.fields[${m}]`}});else{let k=Array.from(l.withInheritedAssociations()).find(S=>S.key===b);f.length>1&&(!k||k.schema?.embedded!==!0)&&i.push({code:$("ACTION","INVALID_PROJECTION_ASSOCIATION_EMBEDDED"),message:`The projected association "${h.key}" is invalid because association "${b}" is not embedded.`,suggestion:"Ensure the association is marked as embedded to use dot-notation.",severity:"error",context:{...r,property:`projection.fields[${m}]`}})}}else{let f=h.key.split("."),b=f[0];if(!p.has(b))i.push({code:$("ACTION","INVALID_PROJECTION_PROPERTY"),message:`The projected property "${h.key}" does not exist on this entity.`,suggestion:"Select a valid property or remove it.",severity:"error",context:{...r,property:`projection.fields[${m}]`}});else{let k=c.find(S=>S.key===b);f.length>1&&(!k||k.type!=="json"?i.push({code:$("ACTION","INVALID_PROJECTION_JSON_ROOT"),message:`The projected property "${h.key}" is invalid because root property "${b}" is not of type "json".`,suggestion:'Make sure the root property is of type "json" to use dot-notation.',severity:"error",context:{...r,property:`projection.fields[${m}]`}}):k.jsonSchema&&(lt(k.jsonSchema,f.slice(1))||i.push({code:$("ACTION","INVALID_PROJECTION_JSON_PATH"),message:`The projected property "${h.key}" is invalid according to the JSON Schema of "${b}".`,suggestion:"Configure a valid JSON Schema path or update the projection path.",severity:"error",context:{...r,property:`projection.fields[${m}]`}})))}}})}}return i}function mo(o,e){let t=[],i={apiModelKey:e.key,kind:xt,key:o.key},r=o.entity?e.domain?.findEntity(o.entity.key,o.entity.domain):void 0,s=r?.info.getLabel()||r?.key||"unknown";!o.entity||!o.entity.key?t.push({code:$("EXPOSURE","MISSING_ENTITY_REF"),message:"This exposed endpoint does not point to a specific data model.",suggestion:"Select which database entity this endpoint should serve.",severity:"error",context:{...i,property:"entity"}}):r||t.push({code:$("EXPOSURE","INVALID_ENTITY_REF"),message:"This endpoint points to a data model that no longer exists.",suggestion:"Select a new valid database model or delete this endpoint.",severity:"error",context:{...i,property:"entity"}});let a=r?.hasSemantic(y.User);if(o.isRoot&&r&&!a&&e.domain&&e.domain.resolveOwnershipPath(r.key)===null&&t.push({code:$("EXPOSURE","MISSING_OWNER_PATH"),message:`[${s}]: This root endpoint has no ownership path to the User entity. If you want this resource to be user-isolated, add the Relational Resource Owner semantic to the association that defines its owner.`,suggestion:"Ensure the resource has a direct (Resource Owner Identifier) or indirect (Relational Resource Owner) path to the User entity.",severity:"warning",context:i}),!o.isRoot&&e.domain)if(!o.parent)t.push({code:$("EXPOSURE","MISSING_PARENT_REF"),message:`[${s}]: A sub-endpoint (non-root exposure) must have a parent endpoint.`,suggestion:"Expose this entity under a parent entity or make it a root endpoint.",severity:"error",context:{...i,property:"parent"}});else{let l=e.exposes.get(o.parent.key);if(!l)t.push({code:$("EXPOSURE","INVALID_PARENT_EXPOSURE"),message:`[${s}]: The parent exposed entity "${o.parent.key}" does not exist.`,suggestion:"Ensure that the parent endpoint is exposed.",severity:"error",context:{...i,property:"parent.key"}});else{let c=e.domain.findEntity(l.entity.key,l.entity.domain),p=o.parent.association.key,u=e.domain.findAssociation(p,o.parent.association.domain);if(!u)t.push({code:$("EXPOSURE","MISSING_PARENT_ASSOCIATION"),message:`[${s}]: The parent association "${p}" does not exist in the data domain.`,suggestion:"Select a valid association in the data domain that connects the parent and child entities.",severity:"error",context:{...i,property:"parent.association"}});else{let h=c?.key,m=r?.key,f=u.getParentInstance()?.key===h,b=u.getParentInstance()?.key===m,k=u.targets.some(D=>D.key===h),S=u.targets.some(D=>D.key===m);f&&S||b&&k||t.push({code:$("EXPOSURE","INVALID_PARENT_ASSOCIATION"),message:`[${s}]: The parent association "${p}" does not connect the parent entity "${c?.info.name||h}" with the child entity "${r?.info.name||m}".`,suggestion:"Use an association that directly connects the parent and child data entities.",severity:"error",context:{...i,property:"parent.association"}})}}}if(o.hasCollection){if(!o.collectionPath)t.push({code:$("EXPOSURE","MISSING_COLLECTION_PATH"),message:`[${s}]: When an endpoint exposes a collection, it must define what its base URL path is.`,suggestion:'Add a path (e.g., "/items").',severity:"error",context:{...i,property:"collectionPath"}});else{let l=o.collectionPath.split("/").filter(Boolean);(l.length!==1||!o.collectionPath.startsWith("/"))&&t.push({code:$("EXPOSURE","INVALID_COLLECTION_PATH"),message:`[${s}]: The collection URL should start with "/" and have no extra slashes.`,suggestion:`Ensure the path looks like exactly "/${l[0]||"subresource"}".`,severity:"error",context:{...i,property:"collectionPath"}})}o.resourcePath?o.collectionPath&&(new RegExp(`^${o.collectionPath}/\\{[a-zA-Z0-9_]+\\}$`).test(o.resourcePath)||t.push({code:$("EXPOSURE","INVALID_RESOURCE_PATH_FORMAT"),message:`[${s}]: The single item route should match exactly your collection path plus one identifier variable.`,suggestion:`Make sure the item path is formatted exactly like "${o.collectionPath}/{id}".`,severity:"error",context:{...i,property:"resourcePath"}})):t.push({code:$("EXPOSURE","MISSING_RESOURCE_PATH"),message:`[${s}]: You need an identifier to locate single items.`,suggestion:'Specify the identification parameter format, like "{id}".',severity:"error",context:{...i,property:"resourcePath"}})}else o.resourcePath?(o.resourcePath.split("/").filter(Boolean).length!==1||!o.resourcePath.startsWith("/"))&&t.push({code:$("EXPOSURE","INVALID_RESOURCE_PATH_FORMAT"),message:`[${s}]: The URL route ${o.resourcePath} must only contain one exact part or level.`,suggestion:"Simplify the endpoint URL to a single segment.",severity:"error",context:{...i,property:"resourcePath"}}):t.push({code:$("EXPOSURE","MISSING_RESOURCE_PATH"),message:`[${s}]: Exposed entity representing a single item must declare their URL route.`,suggestion:'Set the URL path (such as "/profile").',severity:"error",context:{...i,property:"resourcePath"}});o.isRoot&&(o.collectionPath&&e.findCollectionPathCollision(o.collectionPath,o.key)&&t.push({code:$("EXPOSURE","ROOT_COLLECTION_COLLISION"),message:`[${s}]: The route "${o.collectionPath}" is already used by another view.`,suggestion:"Give this resource a different path to avoid conflicts.",severity:"error",context:{...i,property:"collectionPath"}}),o.resourcePath&&e.findResourcePathCollision(o.resourcePath,o.key)&&t.push({code:$("EXPOSURE","ROOT_RESOURCE_COLLISION"),message:`[${s}]: The route "${o.resourcePath}" is already used by another one.`,suggestion:"Give this single-item resource a different path to avoid conflicts.",severity:"error",context:{...i,property:"resourcePath"}}));let n=o.getAbsoluteResourcePath();if(n){let l=[...n.matchAll(/\{([^}]+)\}/g)].map(p=>p[1]);if(new Set(l).size!==l.length){let u=l.filter((h,m)=>l.indexOf(h)!==m)[0];t.push({code:$("EXPOSURE","DUPLICATE_PATH_PARAMETER"),message:`[${s}]: The path parameter "{${u}}" is duplicated in the resource path hierarchy.`,suggestion:"Change the parameter name in either this resource or its ancestor to ensure unique parameter names.",severity:"error",context:{...i,property:"resourcePath"}})}}if(!o.actions||o.actions.length===0)t.push({code:$("EXPOSURE","MISSING_ACTIONS"),message:`[${s}]: This exposed entity does not let users do anything.`,suggestion:"Enable at least one operation like Create, Read, or Update.",severity:"error",context:{...i,property:"actions"}});else{let l=!1,c=!1;for(let p of o.actions){t.push(...cd(p,o,e)),_t.isSearchAction(p)&&(l=!0),vt.isListAction(p)&&(c=!0);let u=!1;p.accessRules&&p.accessRules.length>0&&(u=!0),!u&&o.accessRules&&o.accessRules.length>0&&(u=!0);let h=o.parent?.key;for(;h&&!u;){let m=e.exposes.get(h);if(m&&m.accessRules&&m.accessRules.some(f=>f.inheritable)){u=!0;break}h=m?.parent?.key}!u&&e.accessRules&&e.accessRules.some(m=>m.inheritable)&&(u=!0),u||t.push({code:$("ACTION","MISSING_ACCESS_RULES"),message:`[${s}]: The ${p.kind} action has no security rules attached, making it entirely inaccessible or open.`,suggestion:"Allow specific user roles to access this operation.",severity:"error",context:{...i,kind:"Action",key:p.kind,parentExposedEntityKey:o.key}})}if(c||l){let p=o.paginationContract;if(!p)t.push({code:$("EXPOSURE","MISSING_PAGINATION_CONTRACT"),message:`[${s}]: The List or Search action needs a pagination contract.`,suggestion:"Add a pagination contract to the exposed entity.",severity:"error",context:i});else{if(c&&((!p.filterableFields||p.filterableFields.length===0)&&t.push({code:$("EXPOSURE","LIST_MISSING_FILTERS"),message:`[${s}]: Listing all elements without filters could be overwhelming for large tables.`,suggestion:"Select a few important fields to allow filtering.",severity:"warning",context:i}),(!p.sortableFields||p.sortableFields.length===0)&&t.push({code:$("EXPOSURE","LIST_MISSING_SORTING"),message:`[${s}]: Listing all elements without sorting could be overwhelming for large tables.`,suggestion:"Select a few important fields to allow sorting.",severity:"warning",context:i})),l){let u=[];Array.isArray(p.searchableFields)&&u.push(...p.searchableFields),Array.isArray(p.filterableFields)&&u.push(...p.filterableFields),u.length||t.push({code:$("EXPOSURE","SEARCH_MISSING_FIELDS"),message:`[${s}]: Search action needs to know which text fields to look in.`,suggestion:"Select a few important fields to allow searching or full-text search.",severity:"warning",context:i})}if(r){let u=Array.from(r.withInheritedProperties()),h=new Set(u.map(f=>f.key)),m=(f,b,k,S)=>{if(f&&Array.isArray(f))for(let I of f){let D=I.split("."),w=D[0];if(!h.has(w))t.push({code:$("EXPOSURE",k),message:`[${s}]: The ${S} field "${I}" does not exist on this entity.`,suggestion:`Select a valid property on the entity for ${S}.`,severity:"error",context:{...i,property:`paginationContract.${b}Fields`}});else{let v=u.find(E=>E.key===w);D.length>1&&(!v||v.type!=="json"?t.push({code:$("EXPOSURE",k),message:`[${s}]: The ${S} field "${I}" is invalid because root property "${w}" is not of type "json".`,suggestion:'Make sure the root property is of type "json" to use dot-notation.',severity:"error",context:{...i,property:`paginationContract.${b}Fields`}}):v.jsonSchema&&(lt(v.jsonSchema,D.slice(1))||t.push({code:$("EXPOSURE",k),message:`[${s}]: The ${S} field "${I}" is invalid according to the JSON Schema of "${w}".`,suggestion:"Configure a valid JSON Schema path or update the field path.",severity:"error",context:{...i,property:`paginationContract.${b}Fields`}})))}}};m(p.filterableFields,"filterable","INVALID_FILTER_FIELD","filterable"),m(p.sortableFields,"sortable","INVALID_SORT_FIELD","sortable"),m(p.searchableFields,"searchable","INVALID_SEARCH_FIELD","searchable")}}}}if(o.accessRules)for(let l of o.accessRules)t.push(...fo(l,o,e));return t}function fo(o,e,t){let i=[],r={apiModelKey:t.key,kind:"AccessRule",key:o.type,parentExposedEntityKey:e.key};if(o.type==="matchResourceOwner"){let s=o,a=t.domain;if(!a)return i;let n=e.entity.key,l=a.findEntity(n);if(!l)return i;if(s.target==="user-entity")l.hasSemantic(y.User)||i.push({code:$("RULE","INVALID_USER_ENTITY_TARGET"),message:`[${l.info.getLabel()}]: Target is set to "user-entity", but the entity itself does not represent the User.`,suggestion:'Change target to "property" or add User semantic to this entity.',severity:"error",context:r});else if(s.property){let c=Array.from(l.withInheritedProperties()),p=Array.from(l.withInheritedAssociations());c.some(h=>h.key===s.property)||p.some(h=>h.key===s.property)||i.push({code:$("RULE","INVALID_OWNERSHIP_PROPERTY"),message:`[${l.info.getLabel()}]: The ownership property or association "${s.property}" does not exist on this entity.`,suggestion:"Select a valid property/association, or clear the field to use transitively resolved ownership.",severity:"error",context:r})}else a.resolveOwnershipPath(n)===null&&i.push({code:$("RULE","MISSING_OWNERSHIP_PATH"),message:`[${l.info.getLabel()}]: The access rule is set to "Match resource owner", but no direct property or transitive ownership path to the User entity exists.`,suggestion:"Annotate a property/association with the ResourceOwnerIdentifier or RelationalResourceOwner semantic.",severity:"error",context:r})}else if(o.type==="matchResourceAttribute"){let s=o,a=t.domain;if(!a)return i;let n=e.entity.key,l=a.findEntity(n);if(!l)return i;s.attribute&&(Array.from(l.withInheritedProperties()).some(u=>u.key===s.attribute)||i.push({code:$("RULE","INVALID_RESOURCE_ATTRIBUTE"),message:`[${l.info.getLabel()}]: The resource attribute property "${s.attribute}" does not exist.`,suggestion:"Select a valid property on the entity.",severity:"error",context:r}))}else if(o.type==="matchUserProperty"){let s=o,a=t.domain;if(a){let n=Array.from(a.listEntities()).find(l=>l.hasSemantic(y.User));n?s.property?Array.from(n.withInheritedProperties()).some(p=>p.key===s.property)||i.push({code:$("RULE","INVALID_USER_PROPERTY"),message:`The user property "${s.property}" does not exist on the User entity "${n.info.getLabel()}".`,suggestion:"Select a valid property on the User entity.",severity:"error",context:r}):i.push({code:$("RULE","MISSING_USER_PROPERTY"),message:'The access rule is set to "Match user property", but no property is specified.',suggestion:"Specify a property on the User entity to match against.",severity:"error",context:r}):i.push({code:$("RULE","MISSING_USER_MODEL"),message:'The API specifies a "Match user property" rule, but no User entity is configured in the domain.',suggestion:"Annotate an entity in the domain with the User semantic.",severity:"error",context:r})}}else if(o.type==="matchOrganization"){let s=o,a=t.domain;if(a){let n=Array.from(a.listEntities()).find(c=>c.hasSemantic(y.User)),l=Array.from(a.listEntities()).find(c=>c.hasSemantic(y.Organization));if(n||i.push({code:$("RULE","MISSING_USER_MODEL"),message:'The API specifies a "Match organization access" rule, but no User entity is configured in the domain.',suggestion:"Annotate an entity in the domain with the User semantic.",severity:"error",context:r}),l||i.push({code:$("RULE","MISSING_ORGANIZATION_MODEL"),message:'The API specifies a "Match organization access" rule, but no Organization entity is configured.',suggestion:"Annotate an entity in the domain with the Organization semantic.",severity:"error",context:r}),l){let c=e.entity.key,p=a.findEntity(c);if(p){let u=p.key===l.key,h=p.hasSemantic(y.User)&&Array.from(l.withInheritedAssociations()).some(m=>m.hasSemantic(y.OrganizationMembers)&&m.targets.some(f=>f.key===p.key))||Array.from(l.withInheritedAssociations()).some(m=>m.hasSemantic(y.OrganizationResource)&&m.targets.some(f=>f.key===p.key))||Array.from(p.withInheritedAssociations()).some(m=>m.targets.some(f=>f.key===l.key));!u&&!h&&i.push({code:$("RULE","ORGANIZATION_NOT_LINKED"),message:`[${p.info.getLabel()}]: The access rule is set to "Match organization access", but the resource is not linked to the Organization entity.`,suggestion:"Establish an association between the Organization entity and this resource entity.",severity:"error",context:r})}if(l&&s.allowedOrgRoles&&s.allowedOrgRoles.length>0){let u=Array.from(l.withInheritedProperties()).find(h=>h.hasSemantic(y.OrganizationRole));if(u){let h=u.schema?.enum;if(h&&Array.isArray(h))for(let m of s.allowedOrgRoles)h.includes(m)||i.push({code:$("RULE","INVALID_ORGANIZATION_ROLE"),message:`Organization role "${m}" is not defined in the Organization role enum list.`,suggestion:`Select a valid role from: [${h.join(", ")}].`,severity:"warning",context:r})}}}}}else if(o.type==="matchAssociation"){let s=o,a=t.domain;a&&(Array.from(a.listEntities()).find(l=>l.hasSemantic(y.User))||i.push({code:$("RULE","MISSING_USER_MODEL"),message:'The API specifies a "Match association access" rule, but no User entity is configured in the domain.',suggestion:"Annotate an entity in the domain with the User semantic.",severity:"error",context:r}),s.associationKey||i.push({code:$("RULE","MISSING_ASSOCIATION_KEY"),message:'The access rule is set to "Match association access", but no association key is specified.',suggestion:"Specify the target association key in the rule configuration.",severity:"error",context:r}))}return i}var ns=class{model;report=[];#e=0;#t=0;#r=0;#i=!1;get infoCount(){return this.#i||this.computeIssueCounters(),this.#e}get warningCount(){return this.#i||this.computeIssueCounters(),this.#t}get errorCount(){return this.#i||this.computeIssueCounters(),this.#r}constructor(e){this.model=e}validate(){if(this.#i=!1,this.report=[],this.report.push(...lo(this.model)),this.report.push(...co(this.model)),this.report.push(...po(this.model)),this.report.push(...ho(this.model)),this.report.push(...uo(this.model)),!this.model.exposes||this.model.exposes.size===0)this.report.push({code:"API_NO_EXPOSURES",message:"Your API currently has no exposed data for external clients to request.",suggestion:"Expose a data model so apps can communicate with it.",severity:"warning",context:{apiModelKey:this.model.key,kind:$e,key:this.model.key,property:"exposes"}});else for(let e of this.model.exposes.values())this.report.push(...mo(e,this.model));return this.report}computeIssueCounters(){this.#e=this.report.filter(e=>e.severity==="info").length,this.#t=this.report.filter(e=>e.severity==="warning").length,this.#r=this.report.filter(e=>e.severity==="error").length,this.#i=!0}};function yo(o){o.command("validate [file]").description("Validate a Data Domain or API Model schema").option("--stdin","Read schema content from STDIN").option("--org <oid>","Organization ID (remote validation)").option("--fid <fid>","File ID / schema ID (remote validation)").option("--domain <path>","Path to local Data Domain schema file (only for local API Model validation)").action(async(e,t)=>{let i=new H({format:P.resolved.format});_.debug("[validate] Starting validation process..."),await new ga(e,t,i).execute()})}var ga=class{constructor(e,t,i){this.file=e;this.options=t;this.formatter=i}file;options;formatter;async execute(){_.debug("[validate] Executing schema validation...");try{this.validateArguments();let e=await this.loadSchema();this.validateSchemaStructure(e);let t=e.kind,i=[];t===ze?i=await this.validateDataDomain(e):t===$e?i=await this.validateApiModel(e):(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Unsupported schema kind "${t}". Supported kinds: "${ze}", "${$e}".`}),process.exit(1)),this.reportResults(i,t)}catch(e){let t=Z(e);this.formatter.error(t),process.exit(1)}}get isRemoteValidationWithoutOrg(){return!!(this.options.fid&&!this.options.org&&!P.resolved.org)}get shouldReadFromStdin(){return!!(this.options.stdin||!this.file&&!process.stdin.isTTY)}validateArguments(){this.file&&this.options.stdin&&(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Cannot specify both [file] path and --stdin"}),process.exit(1)),this.options.org&&!this.options.fid&&(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID (--fid) is required when using remote validation (--org)."}),process.exit(1)),this.isRemoteValidationWithoutOrg&&(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required for remote validation. Use --org <oid> or configure a default org."}),process.exit(1))}async loadSchema(){return _.debug(`[validate] Loading schema (remote=${!!this.options.fid})...`),this.options.fid?this.loadRemoteSchema():this.loadLocalSchema()}async loadRemoteSchema(){let e=this.options.org||P.resolved.org;e||(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required for remote validation."}),process.exit(1)),_.debug(`[validate] Fetching remote schema file ID '${this.options.fid}' from organization '${e}'...`);let t=X(),{media:i}=await t.files.readMedia(e,this.options.fid,{token:t.token});return _.debug("[validate] Remote schema loaded successfully."),i}async loadLocalSchema(){let e;if(this.shouldReadFromStdin)_.debug("[validate] Reading schema from STDIN..."),e=await this.readStdin();else if(this.file){let t=go.resolve(this.file);_.debug(`[validate] Reading local schema file from path: ${t}`),os.existsSync(t)||(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`File not found at path: ${t}`}),process.exit(1)),e=os.readFileSync(t,"utf8")}else this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"A file path, --stdin, or remote --org and --fid must be specified."}),process.exit(1);try{let t=JSON.parse(e);return _.debug("[validate] Local schema parsed successfully."),t}catch(t){let i=t instanceof Error?t.message:String(t);this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Failed to parse schema JSON: ${i}`}),process.exit(1)}}isValidSchemaStructure(e){return!!e&&typeof e=="object"&&!Array.isArray(e)&&"kind"in e}validateSchemaStructure(e){this.isValidSchemaStructure(e)||(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:'Invalid schema. The schema must be a JSON object containing a "kind" property.'}),process.exit(1))}async validateDataDomain(e){_.debug("[validate:domain] Validating schema as Data Domain...");let t=[];if(this.options.fid){let a=X(),n=e.dependencyList||[];n.length>0&&(_.debug(`[validate:domain] Listing ${n.length} dependency data domains from catalog...`),t=(await a.dataCatalog.listDependencies(n,{token:a.token})).data||[])}let i=new Xe(e,t,{readOnly:!0}),s=new hi(i).validate();return _.debug(`[validate:domain] Domain validation rules executed. Issues found: ${s.length}`),s}async validateApiModel(e){_.debug("[validate:api] Validating schema as API Model...");let t;if(this.options.fid){let a=X(),n=e.dependencyList||[];if(n.length>0){_.debug(`[validate:api] Listing ${n.length} dependency data domains from catalog...`);let c=(await a.dataCatalog.listDependencies(n,{token:a.token})).data||[];c.length>0&&(t=new Xe(c[0],c,{readOnly:!0}))}}else if(this.options.domain){let a=go.resolve(this.options.domain);_.debug(`[validate:api] Loading domain dependency from local path: ${a}`),os.existsSync(a)||(this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Domain dependency file not found at path: ${a}`}),process.exit(1));let n;try{n=JSON.parse(os.readFileSync(a,"utf8"))}catch(l){let c=l instanceof Error?l.message:String(l);this.formatter.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Failed to parse domain dependency JSON: ${c}`}),process.exit(1)}t=new Xe(n,[],{readOnly:!0})}let i=new as(e,t),s=new ns(i).validate();return _.debug(`[validate:api] API Model validation rules executed. Issues found: ${s.length}`),s}reportResults(e,t){_.debug(`[validate] Reporting results. Found ${e.length} validation issue(s).`);let i=e.some(r=>r.severity==="error");if(P.resolved.format==="json")console.log(JSON.stringify({isValid:!i,validationIssues:e},null,2));else if(e.length===0)this.formatter.success("Validation passed. No issues found!");else{let r=this.formatIssues(e,t);this.formatter.list(r,["severity","code","message","suggestion","context"],{headers:["SEVERITY","CODE","MESSAGE","SUGGESTION","CONTEXT"]});let s=e.filter(l=>l.severity==="error").length,a=e.filter(l=>l.severity==="warning").length,n=e.filter(l=>l.severity==="info").length;console.log(""),s>0?console.error(Q.red(`\u2716 Validation failed: ${s} error(s), ${a} warning(s), ${n} info(s).`)):console.log(Q.yellow(`\u26A0 Validation passed with warnings: ${a} warning(s), ${n} info(s).`))}i&&process.exit(1)}formatIssues(e,t){return e.map(i=>{let r=i.severity||"info",s=i.message||"",a,n,l;if(t===ze){let c=i;a=c.rule||"unknown",n=c.help||"",l=c.key?`${c.kind||"unknown"}: ${c.key}`:c.field||""}else{let c=i;a=c.code||"unknown",n=c.suggestion||"";let p=c.context||{};l=`${p.kind||"unknown"}: ${p.key||""}${p.property?"."+p.property:""}`}return{severity:r,code:a,message:s,suggestion:n,context:l}})}async readStdin(){return new Promise((e,t)=>{let i="";process.stdin.setEncoding("utf8"),process.stdin.on("data",r=>{i+=r}),process.stdin.on("end",()=>{e(i)}),process.stdin.on("error",r=>{t(r)})})}};function bo(o){o.command("runtime").description("Administrative operations for the API runtime").command("users").description("Administrative operations for users").command("update").description("Update properties of a user directly in the runtime database").requiredOption("--api <api>","API file ID or slug").requiredOption("--user-id <userId>","Primary key of the user record to update").requiredOption("--property <name=value...>","Properties to update in the format name=value (can specify multiple)").option("--org <oid>","Organization ID (defaults to configured org)").option("--env <environment>",'Target environment (e.g. "production", "staging")',"production").action(async i=>{let r=new H({format:P.resolved.format});_.debug("[runtime:update] Starting runtime user update process..."),await new ya(i,r).execute()})}var ya=class{constructor(e,t){this.options=e;this.formatter=t}options;formatter;async execute(){_.debug("[runtime:update] Executing runtime user update...");try{let e=X();Nt(e,this.formatter);let t=this.options.org||P.resolved.org;_.debug(`[runtime:update] Using organization ID: ${t}`),t||(this.formatter.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is not specified.",detail:"Use --org <oid> or configure a default organization."}),process.exit(1)),_.debug("[runtime:update] Parsing properties...");let i=this.parseProperties(this.options.property),r={};for(let[a,n]of Object.entries(i)){let l=["token","password","secret","key"].some(c=>a.toLowerCase().includes(c));r[a]=l?"**********":n}_.debug(`[runtime:update] Parsed properties: ${JSON.stringify(r)}`),_.debug(`[runtime:update] Sending request to update runtime user ID '${this.options.userId}' in environment '${this.options.env}' for api '${this.options.api}'...`);let s=await e.deployments.apis.updateRuntimeUser(t,this.options.api,this.options.userId,i,this.options.env,{token:e.token});_.debug("[runtime:update] Runtime user updated successfully."),this.formatter.success(`User '${this.options.userId}' updated successfully!`,s)}catch(e){let t=Z(e);this.formatter.error(t),process.exit(1)}}parseProperties(e){let t={};for(let i of e){let r=i.split("=");if(r.length<2)throw new Error(`Invalid property format: '${i}'. Expected 'name=value'.`);let s=r[0].trim(),a=r.slice(1).join("=").trim();a==="true"?t[s]=!0:a==="false"?t[s]=!1:a==="null"?t[s]=null:/^\d+$/.test(a)?t[s]=parseInt(a,10):/^\d*\.\d+$/.test(a)?t[s]=parseFloat(a):t[s]=a}return t}};var ct;(function(o){o.add="add",o.remove="remove",o.replace="replace",o.copy="copy",o.move="move",o.test="test"})(ct||(ct={}));function ls(o,e,t){let i=new re(e),r=Lt(o,i);if(!tt(r,t))throw new ue([{path:i.raw,message:"Test operation failed. The values are not equal."}]);return{doc:o}}var AA=Object.freeze({add:et,copy:ri,move:xi,remove:bt,replace:ii,test:ls});function wo(o){return Array.isArray(o)?new Array(o.length).fill(0).map((e,t)=>`${t}`):Object.keys(o)}function Bi(o){switch(typeof o){case"object":return JSON.parse(JSON.stringify(o));case"undefined":return null;default:return o}}function dd(o,e,t={}){if(JSON.stringify(o)===JSON.stringify(e))return[];let i=[...o],r=[...e],s=[],a=0,n=0;for(;a<i.length||n<r.length;)if(a>=i.length){let l=t.fixedIndexes?n:-1;s.push({op:"add",index:l,value:r[n]}),n++}else if(n>=r.length)s.push({op:"remove",index:a}),a++;else if(tt(i[a],r[n]))a++,n++;else{let l=-1,c=-1;for(let p=a;p<i.length;p++)if(tt(i[p],r[n])){l=p;break}for(let p=n;p<r.length;p++)if(tt(r[p],i[a])){c=p;break}if(l===-1&&c===-1)s.push({op:"replace",index:n,value:r[n]}),a++,n++;else if(l===-1)s.push({op:"add",index:n,value:r[n]}),n++;else if(c===-1)s.push({op:"remove",index:a}),a++;else{s.push({op:"move",index:n,from:l});let p=i[l];i.splice(l,1),i.splice(a,0,p),a++,n++}}return s.sort((l,c)=>l.op==="remove"&&c.op==="remove"?c.index-l.index:0)}function ba(o,e,t,i=[],r={}){if(o===e)return;if(o==null&&e!==null&&e!==void 0){t.push({op:"replace",path:"",value:e});return}if(e==null&&o!==null&&o!==void 0){t.push({op:"replace",path:"",value:null});return}typeof e.toJSON=="function"&&(e=e.toJSON());let s=$t(o),a=$t(e),n=br(s),l=br(a);if(n&&l){tt(o,e)||t.push({op:"replace",path:he(i),value:e});return}if(a!==s){t.push({op:s===void 0?"add":"replace",path:he(i),value:e});return}if(s==="array"){let u=o,m=dd(u,e,r);for(let f of m){let b=f.index===-1?"-":f.index.toString(),k=[...i,b];f.op==="remove"?(r.invertible&&t.push({op:"test",path:he(k),value:Bi(u[f.index])}),t.push({op:f.op,path:he(k)})):f.op==="replace"&&typeof f.value=="object"&&f.value!==null?ba(u[f.index],f.value,t,k,r):f.op==="move"?t.push({op:"move",from:he([...i,f.from.toString()]),path:he(k)}):t.push({op:f.op,path:he(k),value:f.value})}return}let c=wo(e),p=wo(o);for(let u of c){let h=o[u],m=e[u];Object.prototype.hasOwnProperty.call(o,u)?typeof h=="object"&&h!=null&&typeof m=="object"&&m!==null&&Array.isArray(h)===Array.isArray(m)?ba(h,m,t,[...i,u],r):tt(h,m)||(r.invertible&&t.push({op:"test",path:he([...i,u]),value:Bi(h)}),t.push({op:"replace",path:he([...i,u]),value:Bi(m)})):t.push({op:"add",path:he([...i,u]),value:Bi(m)})}for(let u of p)Object.prototype.hasOwnProperty.call(e,u)||(r.invertible&&t.push({op:"test",path:he([...i,u]),value:Bi(o[u])}),t.push({op:"remove",path:he([...i,u])}))}function Gi(o,e,t){let i=[];return ba(o,e,i,[],t),i}var gi=Object.create(null);gi.add=0;gi.remove=1;gi.replace=2;gi.move=3;gi.copy=4;gi.test=5;import{nanoid as md}from"nanoid";function _o(o){o.command("domain").description("Manage Data Domains").command("transition [state]").description("Transition the lifecycle state of a data domain (draft, committed, published)").option("--file <fid>","File ID of the data domain").option("--org <oid>","Organization ID (optional, defaults to configured default org)").option("--ver <ver>","New version (required when transitioning from published to draft)").action(async(t,i)=>{let r=new H({format:P.resolved.format}),s=P.resolved,a=i.org||s.org;if(_.debug(`[domain:transition] Transitioning domain lifecycle. Options: file=${i.file}, org=${a}, ver=${i.ver}, state=${t}`),!a){r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Organization ID is required.",detail:"Pass --org <oid> or set a default organization using `apinow orgs set-default <oid>`."}),process.exit(1);return}let n=X(),l=i.file;if(!l&&process.stdout.isTTY){_.debug("[domain:transition] File ID not provided; listing data domain files for selection...");try{let m=(await n.files.list(a,{filter:{field:"kind",operator:"eq",value:Et}},{token:n.token})).data||[];m.length>0&&(l=await yt("Select a data domain file:",m.map(f=>({name:`${f.info?.name||"Unnamed"} (${f.key})`,value:f.key}))))}catch(h){_.debug(`[domain:transition] Failed to list domain files for selection: ${h}`)}}if(!l){r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"File ID is required.",detail:"Specify --file <fid>."}),process.exit(1);return}let c=t,p=["draft","committed","published"];if(!c&&process.stdout.isTTY&&(c=await yt("Select target lifecycle state:",[{name:"Draft (draft)",value:"draft"},{name:"Committed (committed)",value:"committed"},{name:"Published (published)",value:"published"}])),!c){r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"Target lifecycle state is required.",detail:`Specify state as a positional argument (allowed: ${p.join(", ")}).`}),process.exit(1);return}if(!p.includes(c)){r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`Invalid lifecycle state '${c}'.`,detail:`Allowed states: ${p.join(", ")}`}),process.exit(1);return}let u;try{u=await n.files.read(a,l,{token:n.token})}catch(h){let m=Z(h);r.error(m),process.exit(1);return}if(u.kind!==Et){r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:`File '${l}' is not a data domain.`,detail:`The file kind is '${u.kind}', but expected '${Et}'.`}),process.exit(1);return}try{_.debug(`[domain:transition] Fetching media for file ID '${l}'...`);let{media:h,meta:m}=await n.files.readMedia(a,l,{token:n.token}),f=h;if(f.kind!==ze){r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Invalid data domain schema format.",detail:`The media kind is '${f.kind}', but expected '${ze}'.`}),process.exit(1);return}let b=[];f.dependencyList&&f.dependencyList.length>0&&(_.debug(`[domain:transition] Fetching dependencies: ${JSON.stringify(f.dependencyList)}`),b=(await n.dataCatalog.listDependencies(f.dependencyList,{token:n.token})).data||[]);let k=new Xe(f,b,{readOnly:!1}),S=i.ver;if(k.lifecycle==="published"&&c==="draft"&&!S){if(process.stdout.isTTY){let j=k.info.version;S=await Ue(`Enter new version (current published version is ${j}):`)}if(!S){r.error({code:"CLI_ERR_MISSING_REQUIRED",message:"A new version must be specified when creating a draft from a published domain.",detail:"Provide a version with --ver <ver>."}),process.exit(1);return}}_.debug(`[domain:transition] Changing lifecycle state from '${k.lifecycle}' to '${c}'...`),k.changeLifecycle(c,S),_.debug("[domain:transition] Validating data domain structure...");let D=new hi(k).validate();if(D&&D.length>0&&D.filter(z=>z.severity==="error").length>0){r.error({code:"CLI_ERR_INVALID_ARGUMENT",message:"Data domain validation failed.",detail:JSON.stringify(D,null,2)}),process.exit(1);return}let w=k.toJSON(),v=Gi(f,w);if(v.length===0){_.debug("[domain:transition] No changes in domain lifecycle detected."),r.success(`Data domain is already in '${c}' state.`);return}_.debug("[domain:transition] Sending patch request to target file media...");let E={id:md(),timestamp:Date.now(),patch:v,version:m.version},R=await n.files.patchMedia(a,l,E,{token:n.token});_.debug(`[domain:transition] Patch applied successfully. New file version: ${R.newVersion}`),r.success(`Successfully transitioned data domain state to '${c}' (new file version: ${R.newVersion}).`,{fileId:l,state:c,version:k.info.version,fileVersion:R.newVersion})}catch(h){let m=Z(h);r.error(m),process.exit(1);return}})}parseInt(process.versions.node.split(".")[0],10)<22&&(console.error("Error: apinow requires Node.js 22 or higher."),process.exit(1));function So(){let o=process.argv.indexOf("--format");if(o!==-1&&o+1<process.argv.length&&process.argv[o+1]==="json")return"json";try{return P.resolved.format||"text"}catch{return"text"}}process.on("uncaughtException",o=>{new H({format:So()}).error({code:"CLI_ERR_UNKNOWN",message:o.message||"An unexpected error occurred.",detail:o.stack}),process.exit(1)});process.on("unhandledRejection",o=>{let e=new H({format:So()}),t=o instanceof Error?o.message:String(o),i=o instanceof Error?o.stack:void 0;e.error({code:"CLI_ERR_UNKNOWN",message:`Unhandled promise rejection: ${t}`,detail:i}),process.exit(1)});fd({pkg:bi}).notify();P.load();var Je=new gd;Je.name("apinow").description("API NOW! Platform CLI Tool").version(bi.version,"--version").option("--format <format>","Output format: text, json","text").option("--api-url <url>","Override target API server base URL").option("--debug","Enable debug/verbose logging").option("-v, --verbose","Enable verbose logging");Je.hook("preAction",(o,e)=>{let t,i,r=e;for(;r;){let s=r.opts();s.apiUrl&&!t&&(t=s.apiUrl),s.format&&!i&&(i=s.format),(s.debug||s.verbose)&&Sa("debug"),r=r.parent}P.saturate({apiUrl:t,format:i}),_.debug(`Executing command: ${e.name()} with args: ${JSON.stringify(e.args)}`)});Aa(Je);Pa(Je);Oa(Je);Ta(Je);La(Je);yo(Je);bo(Je);_o(Je);function Ao(o){let e=o.options||[];e.some(t=>t.long==="--api-url")||o.option("--api-url <url>","Override target API server base URL"),e.some(t=>t.long==="--format")||o.option("--format <format>","Output format: text, json"),e.some(t=>t.long==="--debug")||o.option("--debug","Enable debug/verbose logging"),e.some(t=>t.long==="--verbose")||(o.options.some(i=>i.short==="-v")?o.option("--verbose","Enable verbose logging"):o.option("-v, --verbose","Enable verbose logging"));for(let t of o.commands)Ao(t)}for(let o of Je.commands)Ao(o);await Je.parseAsync(process.argv);
|
|
54
54
|
/*! Bundled license information:
|
|
55
55
|
|
|
56
56
|
@pawel-up/data-mock/build/src/lib/MersenneTwister.js:
|