zenko 0.3.0-beta.2 → 0.3.0-beta.4

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/cli.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./treaty-generator-Byq49esG.cjs`);let l=require(`fs`);l=s(l);let u=require(`path`);u=s(u);let d=require(`url`);function f(e){return e.positional[0]===`treaty`?{...e,command:`treaty`,positional:e.positional.slice(1)}:{...e,command:`generate`}}async function p(){let e=f(m(process.argv.slice(2)));if(e.showHelp){h(),process.exit(0);return}try{if(e.command===`treaty`){if(e.configPath){console.error(`❌ Error: zenko treaty does not support --config`),process.exit(1);return}if(e.positional.length!==2){h(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){h(),process.exit(1);return}await g({inputFile:t,outputFile:n});return}if(!e.configPath&&e.positional.length===0){h(),process.exit(1);return}if(e.configPath)await v(e);else{if(e.positional.length!==2){h(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){h(),process.exit(1);return}await C({inputFile:t,outputFile:n,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(e){console.error(`❌ Error:`,e),process.exit(1)}}function m(e){let t={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`){t.showHelp=!0;continue}if(r===`--strict-dates`){t.strictDates=!0;continue}if(r===`--strict-numeric`){t.strictNumeric=!0;continue}if(r===`--config`||r===`-c`){let r=e[n+1];if(!r)throw Error(`--config flag requires a file path`);t.configPath=r,n+=1;continue}t.positional.push(r)}return t}function h(){console.log(`Usage:`),console.log(` zenko <input-file> <output-file> [options]`),console.log(` zenko treaty <generated-ts-file> <output-file>`),console.log(` zenko --config <config-file> [options]`),console.log(``),console.log(`Options:`),console.log(` -h, --help Show this help message`),console.log(` --strict-dates Use ISO datetime parsing (can be set per config entry)`),console.log(` --strict-numeric Preserve numeric min/max bounds (can be set per config entry)`),console.log(` -c, --config Path to config file (JSON, YAML, or JS module)`),console.log(``),console.log(`Config file format:`),console.log(` {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, dateTimeOffset?, types? }] }`)}async function g(e){let t=u.resolve(e.inputFile),n=u.resolve(e.outputFile),r=await c.t({inputFile:t,importPath:_(u.dirname(n),t)});l.mkdirSync(u.dirname(n),{recursive:!0}),l.writeFileSync(n,r,{encoding:`utf8`}),console.log(`✅ Generated treaty client in ${n}`)}function _(e,t){let n=u.relative(e,t).replace(/\\/g,`/`);return n.startsWith(`.`)||(n=`./${n}`),n.replace(/\.tsx?$/,``)}async function v(e){let t=e.configPath,n=u.resolve(t),r=await y(n);b(r);let i=u.dirname(n),a=r.types;for(let t of r.schemas){let n=x(t.input,i),r=x(t.output,i),o=S(a,t.types);await C({inputFile:n,outputFile:r,strictDates:t.strictDates??e.strictDates,strictNumeric:t.strictNumeric??e.strictNumeric,dateTimeOffset:t.dateTimeOffset,typesConfig:o,operationIds:t.operationIds,openEnums:t.openEnums}),t.treatyOutput&&await g({inputFile:r,outputFile:x(t.treatyOutput,i)})}}async function y(e){let t=u.extname(e).toLowerCase();if(t===`.json`){let t=l.readFileSync(e,`utf8`);return JSON.parse(t)}if(t===`.yaml`||t===`.yml`){let t=l.readFileSync(e,`utf8`);return Bun.YAML.parse(t)}let n=await import((0,d.pathToFileURL)(e).href);return n.default??n.config??n}function b(e){if(!e||typeof e!=`object`)throw Error(`Config file must export an object`);if(!Array.isArray(e.schemas))throw Error(`Config file must contain a 'schemas' array`);for(let t of e.schemas){if(!t||typeof t!=`object`)throw Error(`Each schema entry must be an object`);if(typeof t.input!=`string`||typeof t.output!=`string`)throw Error(`Each schema entry requires 'input' and 'output' paths`)}}function x(e,t){return u.isAbsolute(e)?e:u.join(t,e)}function S(e,t){if(!(!e&&!t))return{...e,...t}}async function C(e){let{inputFile:t,outputFile:n,strictDates:r,strictNumeric:i,dateTimeOffset:a,typesConfig:o,operationIds:s,openEnums:d}=e,f=u.resolve(t),p=u.resolve(n),m=w(f),h=c.i(m,{strictDates:r,strictNumeric:i,dateTimeOffset:a,types:o,operationIds:s,openEnums:d});if(l.mkdirSync(u.dirname(p),{recursive:!0}),l.writeFileSync(p,h.output),console.log(`✅ Generated TypeScript types in ${p}`),console.log(`📄 Processed ${Object.keys(m.paths||{}).length} paths`),m.webhooks&&console.log(`🪝 Processed ${Object.keys(m.webhooks).length} webhooks`),h.helperFile){let e=u.isAbsolute(h.helperFile.path)?h.helperFile.path:u.resolve(u.dirname(p),h.helperFile.path),t=u.resolve(p);if(t===u.resolve(e)){console.warn(`⚠️ Skipping helper file generation: would overwrite main output at ${t}`);return}l.mkdirSync(u.dirname(e),{recursive:!0}),l.writeFileSync(e,h.helperFile.content,{encoding:`utf8`}),console.log(`📦 Generated helper types in ${e}`)}}function w(e){if(!l.existsSync(e))throw Error(`Input file not found: ${e}`);let t=l.readFileSync(e,`utf8`);return e.endsWith(`.yaml`)||e.endsWith(`.yml`)?Bun.YAML.parse(t):JSON.parse(t)}p().catch(e=>{console.error(`❌ Error:`,e),process.exit(1)}),exports.t=s;
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./treaty-generator-B-b5pZGF.cjs`);let l=require(`fs`);l=s(l);let u=require(`path`);u=s(u);let d=require(`url`);function f(e){return e.positional[0]===`treaty`?{...e,command:`treaty`,positional:e.positional.slice(1)}:{...e,command:`generate`}}async function p(){let e=f(m(process.argv.slice(2)));if(e.showHelp){h(),process.exit(0);return}try{if(e.command===`treaty`){if(e.configPath){console.error(`❌ Error: zenko treaty does not support --config`),process.exit(1);return}if(e.positional.length!==2){h(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){h(),process.exit(1);return}await g({inputFile:t,outputFile:n});return}if(!e.configPath&&e.positional.length===0){h(),process.exit(1);return}if(e.configPath)await v(e);else{if(e.positional.length!==2){h(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){h(),process.exit(1);return}await C({inputFile:t,outputFile:n,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(e){console.error(`❌ Error:`,e),process.exit(1)}}function m(e){let t={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`){t.showHelp=!0;continue}if(r===`--strict-dates`){t.strictDates=!0;continue}if(r===`--strict-numeric`){t.strictNumeric=!0;continue}if(r===`--config`||r===`-c`){let r=e[n+1];if(!r)throw Error(`--config flag requires a file path`);t.configPath=r,n+=1;continue}t.positional.push(r)}return t}function h(){console.log(`Usage:`),console.log(` zenko <input-file> <output-file> [options]`),console.log(` zenko treaty <generated-ts-file> <output-file>`),console.log(` zenko --config <config-file> [options]`),console.log(``),console.log(`Options:`),console.log(` -h, --help Show this help message`),console.log(` --strict-dates Use ISO datetime parsing (can be set per config entry)`),console.log(` --strict-numeric Preserve numeric min/max bounds (can be set per config entry)`),console.log(` -c, --config Path to config file (JSON, YAML, or JS module)`),console.log(``),console.log(`Config file format:`),console.log(` {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, dateTimeOffset?, types? }] }`)}async function g(e){let t=u.resolve(e.inputFile),n=u.resolve(e.outputFile),r=await c.t({inputFile:t,importPath:_(u.dirname(n),t)});l.mkdirSync(u.dirname(n),{recursive:!0}),l.writeFileSync(n,r,{encoding:`utf8`}),console.log(`✅ Generated treaty client in ${n}`)}function _(e,t){let n=u.relative(e,t).replace(/\\/g,`/`);return n.startsWith(`.`)||(n=`./${n}`),n.replace(/\.tsx?$/,``)}async function v(e){let t=e.configPath,n=u.resolve(t),r=await y(n);b(r);let i=u.dirname(n),a=r.types;for(let t of r.schemas){let n=x(t.input,i),r=x(t.output,i),o=S(a,t.types);await C({inputFile:n,outputFile:r,strictDates:t.strictDates??e.strictDates,strictNumeric:t.strictNumeric??e.strictNumeric,dateTimeOffset:t.dateTimeOffset,typesConfig:o,operationIds:t.operationIds,openEnums:t.openEnums}),t.treatyOutput&&await g({inputFile:r,outputFile:x(t.treatyOutput,i)})}}async function y(e){let t=u.extname(e).toLowerCase();if(t===`.json`){let t=l.readFileSync(e,`utf8`);return JSON.parse(t)}if(t===`.yaml`||t===`.yml`){let t=l.readFileSync(e,`utf8`);return Bun.YAML.parse(t)}let n=await import((0,d.pathToFileURL)(e).href);return n.default??n.config??n}function b(e){if(!e||typeof e!=`object`)throw Error(`Config file must export an object`);if(!Array.isArray(e.schemas))throw Error(`Config file must contain a 'schemas' array`);for(let t of e.schemas){if(!t||typeof t!=`object`)throw Error(`Each schema entry must be an object`);if(typeof t.input!=`string`||typeof t.output!=`string`)throw Error(`Each schema entry requires 'input' and 'output' paths`)}}function x(e,t){return u.isAbsolute(e)?e:u.join(t,e)}function S(e,t){if(!(!e&&!t))return{...e,...t}}async function C(e){let{inputFile:t,outputFile:n,strictDates:r,strictNumeric:i,dateTimeOffset:a,typesConfig:o,operationIds:s,openEnums:d}=e,f=u.resolve(t),p=u.resolve(n),m=w(f),h=c.i(m,{strictDates:r,strictNumeric:i,dateTimeOffset:a,types:o,operationIds:s,openEnums:d});if(l.mkdirSync(u.dirname(p),{recursive:!0}),l.writeFileSync(p,h.output),console.log(`✅ Generated TypeScript types in ${p}`),console.log(`📄 Processed ${Object.keys(m.paths||{}).length} paths`),m.webhooks&&console.log(`🪝 Processed ${Object.keys(m.webhooks).length} webhooks`),h.helperFile){let e=u.isAbsolute(h.helperFile.path)?h.helperFile.path:u.resolve(u.dirname(p),h.helperFile.path),t=u.resolve(p);if(t===u.resolve(e)){console.warn(`⚠️ Skipping helper file generation: would overwrite main output at ${t}`);return}l.mkdirSync(u.dirname(e),{recursive:!0}),l.writeFileSync(e,h.helperFile.content,{encoding:`utf8`}),console.log(`📦 Generated helper types in ${e}`)}}function w(e){if(!l.existsSync(e))throw Error(`Input file not found: ${e}`);let t=l.readFileSync(e,`utf8`);return e.endsWith(`.yaml`)||e.endsWith(`.yml`)?Bun.YAML.parse(t):JSON.parse(t)}p().catch(e=>{console.error(`❌ Error:`,e),process.exit(1)}),exports.t=s;
3
3
  //# sourceMappingURL=cli.cjs.map
package/dist/cli.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{i as e,t}from"./treaty-generator-B2DqCcuW.mjs";import*as n from"fs";import*as r from"path";import{pathToFileURL as i}from"url";function a(e){return e.positional[0]===`treaty`?{...e,command:`treaty`,positional:e.positional.slice(1)}:{...e,command:`generate`}}async function o(){let e=a(s(process.argv.slice(2)));if(e.showHelp){c(),process.exit(0);return}try{if(e.command===`treaty`){if(e.configPath){console.error(`❌ Error: zenko treaty does not support --config`),process.exit(1);return}if(e.positional.length!==2){c(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){c(),process.exit(1);return}await l({inputFile:t,outputFile:n});return}if(!e.configPath&&e.positional.length===0){c(),process.exit(1);return}if(e.configPath)await d(e);else{if(e.positional.length!==2){c(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){c(),process.exit(1);return}await g({inputFile:t,outputFile:n,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(e){console.error(`❌ Error:`,e),process.exit(1)}}function s(e){let t={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`){t.showHelp=!0;continue}if(r===`--strict-dates`){t.strictDates=!0;continue}if(r===`--strict-numeric`){t.strictNumeric=!0;continue}if(r===`--config`||r===`-c`){let r=e[n+1];if(!r)throw Error(`--config flag requires a file path`);t.configPath=r,n+=1;continue}t.positional.push(r)}return t}function c(){console.log(`Usage:`),console.log(` zenko <input-file> <output-file> [options]`),console.log(` zenko treaty <generated-ts-file> <output-file>`),console.log(` zenko --config <config-file> [options]`),console.log(``),console.log(`Options:`),console.log(` -h, --help Show this help message`),console.log(` --strict-dates Use ISO datetime parsing (can be set per config entry)`),console.log(` --strict-numeric Preserve numeric min/max bounds (can be set per config entry)`),console.log(` -c, --config Path to config file (JSON, YAML, or JS module)`),console.log(``),console.log(`Config file format:`),console.log(` {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, dateTimeOffset?, types? }] }`)}async function l(e){let i=r.resolve(e.inputFile),a=r.resolve(e.outputFile),o=await t({inputFile:i,importPath:u(r.dirname(a),i)});n.mkdirSync(r.dirname(a),{recursive:!0}),n.writeFileSync(a,o,{encoding:`utf8`}),console.log(`✅ Generated treaty client in ${a}`)}function u(e,t){let n=r.relative(e,t).replace(/\\/g,`/`);return n.startsWith(`.`)||(n=`./${n}`),n.replace(/\.tsx?$/,``)}async function d(e){let t=e.configPath,n=r.resolve(t),i=await f(n);p(i);let a=r.dirname(n),o=i.types;for(let t of i.schemas){let n=m(t.input,a),r=m(t.output,a),i=h(o,t.types);await g({inputFile:n,outputFile:r,strictDates:t.strictDates??e.strictDates,strictNumeric:t.strictNumeric??e.strictNumeric,dateTimeOffset:t.dateTimeOffset,typesConfig:i,operationIds:t.operationIds,openEnums:t.openEnums}),t.treatyOutput&&await l({inputFile:r,outputFile:m(t.treatyOutput,a)})}}async function f(e){let t=r.extname(e).toLowerCase();if(t===`.json`){let t=n.readFileSync(e,`utf8`);return JSON.parse(t)}if(t===`.yaml`||t===`.yml`){let t=n.readFileSync(e,`utf8`);return Bun.YAML.parse(t)}let a=await import(i(e).href);return a.default??a.config??a}function p(e){if(!e||typeof e!=`object`)throw Error(`Config file must export an object`);if(!Array.isArray(e.schemas))throw Error(`Config file must contain a 'schemas' array`);for(let t of e.schemas){if(!t||typeof t!=`object`)throw Error(`Each schema entry must be an object`);if(typeof t.input!=`string`||typeof t.output!=`string`)throw Error(`Each schema entry requires 'input' and 'output' paths`)}}function m(e,t){return r.isAbsolute(e)?e:r.join(t,e)}function h(e,t){if(!(!e&&!t))return{...e,...t}}async function g(t){let{inputFile:i,outputFile:a,strictDates:o,strictNumeric:s,dateTimeOffset:c,typesConfig:l,operationIds:u,openEnums:d}=t,f=r.resolve(i),p=r.resolve(a),m=_(f),h=e(m,{strictDates:o,strictNumeric:s,dateTimeOffset:c,types:l,operationIds:u,openEnums:d});if(n.mkdirSync(r.dirname(p),{recursive:!0}),n.writeFileSync(p,h.output),console.log(`✅ Generated TypeScript types in ${p}`),console.log(`📄 Processed ${Object.keys(m.paths||{}).length} paths`),m.webhooks&&console.log(`🪝 Processed ${Object.keys(m.webhooks).length} webhooks`),h.helperFile){let e=r.isAbsolute(h.helperFile.path)?h.helperFile.path:r.resolve(r.dirname(p),h.helperFile.path),t=r.resolve(p);if(t===r.resolve(e)){console.warn(`⚠️ Skipping helper file generation: would overwrite main output at ${t}`);return}n.mkdirSync(r.dirname(e),{recursive:!0}),n.writeFileSync(e,h.helperFile.content,{encoding:`utf8`}),console.log(`📦 Generated helper types in ${e}`)}}function _(e){if(!n.existsSync(e))throw Error(`Input file not found: ${e}`);let t=n.readFileSync(e,`utf8`);return e.endsWith(`.yaml`)||e.endsWith(`.yml`)?Bun.YAML.parse(t):JSON.parse(t)}o().catch(e=>{console.error(`❌ Error:`,e),process.exit(1)});export{};
2
+ import{i as e,t}from"./treaty-generator-DBdrObxz.mjs";import*as n from"fs";import*as r from"path";import{pathToFileURL as i}from"url";function a(e){return e.positional[0]===`treaty`?{...e,command:`treaty`,positional:e.positional.slice(1)}:{...e,command:`generate`}}async function o(){let e=a(s(process.argv.slice(2)));if(e.showHelp){c(),process.exit(0);return}try{if(e.command===`treaty`){if(e.configPath){console.error(`❌ Error: zenko treaty does not support --config`),process.exit(1);return}if(e.positional.length!==2){c(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){c(),process.exit(1);return}await l({inputFile:t,outputFile:n});return}if(!e.configPath&&e.positional.length===0){c(),process.exit(1);return}if(e.configPath)await d(e);else{if(e.positional.length!==2){c(),process.exit(1);return}let[t,n]=e.positional;if(!t||!n){c(),process.exit(1);return}await g({inputFile:t,outputFile:n,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(e){console.error(`❌ Error:`,e),process.exit(1)}}function s(e){let t={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`){t.showHelp=!0;continue}if(r===`--strict-dates`){t.strictDates=!0;continue}if(r===`--strict-numeric`){t.strictNumeric=!0;continue}if(r===`--config`||r===`-c`){let r=e[n+1];if(!r)throw Error(`--config flag requires a file path`);t.configPath=r,n+=1;continue}t.positional.push(r)}return t}function c(){console.log(`Usage:`),console.log(` zenko <input-file> <output-file> [options]`),console.log(` zenko treaty <generated-ts-file> <output-file>`),console.log(` zenko --config <config-file> [options]`),console.log(``),console.log(`Options:`),console.log(` -h, --help Show this help message`),console.log(` --strict-dates Use ISO datetime parsing (can be set per config entry)`),console.log(` --strict-numeric Preserve numeric min/max bounds (can be set per config entry)`),console.log(` -c, --config Path to config file (JSON, YAML, or JS module)`),console.log(``),console.log(`Config file format:`),console.log(` {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, dateTimeOffset?, types? }] }`)}async function l(e){let i=r.resolve(e.inputFile),a=r.resolve(e.outputFile),o=await t({inputFile:i,importPath:u(r.dirname(a),i)});n.mkdirSync(r.dirname(a),{recursive:!0}),n.writeFileSync(a,o,{encoding:`utf8`}),console.log(`✅ Generated treaty client in ${a}`)}function u(e,t){let n=r.relative(e,t).replace(/\\/g,`/`);return n.startsWith(`.`)||(n=`./${n}`),n.replace(/\.tsx?$/,``)}async function d(e){let t=e.configPath,n=r.resolve(t),i=await f(n);p(i);let a=r.dirname(n),o=i.types;for(let t of i.schemas){let n=m(t.input,a),r=m(t.output,a),i=h(o,t.types);await g({inputFile:n,outputFile:r,strictDates:t.strictDates??e.strictDates,strictNumeric:t.strictNumeric??e.strictNumeric,dateTimeOffset:t.dateTimeOffset,typesConfig:i,operationIds:t.operationIds,openEnums:t.openEnums}),t.treatyOutput&&await l({inputFile:r,outputFile:m(t.treatyOutput,a)})}}async function f(e){let t=r.extname(e).toLowerCase();if(t===`.json`){let t=n.readFileSync(e,`utf8`);return JSON.parse(t)}if(t===`.yaml`||t===`.yml`){let t=n.readFileSync(e,`utf8`);return Bun.YAML.parse(t)}let a=await import(i(e).href);return a.default??a.config??a}function p(e){if(!e||typeof e!=`object`)throw Error(`Config file must export an object`);if(!Array.isArray(e.schemas))throw Error(`Config file must contain a 'schemas' array`);for(let t of e.schemas){if(!t||typeof t!=`object`)throw Error(`Each schema entry must be an object`);if(typeof t.input!=`string`||typeof t.output!=`string`)throw Error(`Each schema entry requires 'input' and 'output' paths`)}}function m(e,t){return r.isAbsolute(e)?e:r.join(t,e)}function h(e,t){if(!(!e&&!t))return{...e,...t}}async function g(t){let{inputFile:i,outputFile:a,strictDates:o,strictNumeric:s,dateTimeOffset:c,typesConfig:l,operationIds:u,openEnums:d}=t,f=r.resolve(i),p=r.resolve(a),m=_(f),h=e(m,{strictDates:o,strictNumeric:s,dateTimeOffset:c,types:l,operationIds:u,openEnums:d});if(n.mkdirSync(r.dirname(p),{recursive:!0}),n.writeFileSync(p,h.output),console.log(`✅ Generated TypeScript types in ${p}`),console.log(`📄 Processed ${Object.keys(m.paths||{}).length} paths`),m.webhooks&&console.log(`🪝 Processed ${Object.keys(m.webhooks).length} webhooks`),h.helperFile){let e=r.isAbsolute(h.helperFile.path)?h.helperFile.path:r.resolve(r.dirname(p),h.helperFile.path),t=r.resolve(p);if(t===r.resolve(e)){console.warn(`⚠️ Skipping helper file generation: would overwrite main output at ${t}`);return}n.mkdirSync(r.dirname(e),{recursive:!0}),n.writeFileSync(e,h.helperFile.content,{encoding:`utf8`}),console.log(`📦 Generated helper types in ${e}`)}}function _(e){if(!n.existsSync(e))throw Error(`Input file not found: ${e}`);let t=n.readFileSync(e,`utf8`);return e.endsWith(`.yaml`)||e.endsWith(`.yml`)?Bun.YAML.parse(t):JSON.parse(t)}o().catch(e=>{console.error(`❌ Error:`,e),process.exit(1)});export{};
3
3
  //# sourceMappingURL=cli.mjs.map
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./treaty-generator-Byq49esG.cjs`),t=require(`./treaty.cjs`);exports.createTreatyClient=t.createTreatyClient,exports.generate=e.r,exports.generateTreatyModule=e.t,exports.generateTreatyModuleFromMetadata=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./treaty-generator-B-b5pZGF.cjs`),t=require(`./treaty-DBeNmEsN.cjs`);exports.createTreatyClient=t.t,exports.generate=e.r,exports.generateTreatyModule=e.t,exports.generateTreatyModuleFromMetadata=e.n,exports.orThrow=t.n,exports.unwrap=t.r;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as PathFn, i as OperationErrors, n as HeaderFn, r as OperationDefinition, s as SecurityRequirement } from "./types-BM-Q_QIk.cjs";
2
- import { a as RouteNode, i as TreatyRoutesConstraint, n as LeafCall, r as TreatyClient, s as TreatyResult, t as createTreatyClient } from "./treaty-NM6Hf8S8.cjs";
2
+ import { _ as TreatyUnexpectedSubtype, a as TreatyClient, c as TreatyRequest, d as TreatyRoutesConstraint, f as RouteNode, g as TreatyUnexpectedError, i as LeafCall, l as TreatyResultFor, m as TreatyResult, n as createTreatyClient, o as TreatyOperationMeta, p as TreatyErrorResult, r as orThrow, s as TreatyOperationsClient, u as TreatyRouteTreeClient, v as unwrap } from "./treaty-DNkKJzoB.cjs";
3
3
 
4
4
  //#region src/zenko.d.ts
5
5
  type OpenAPISpec = {
@@ -48,6 +48,9 @@ declare function generate(spec: OpenAPISpec, options?: GenerateOptions): string;
48
48
  type OperationMeta = {
49
49
  method: string;
50
50
  path: string;
51
+ successResponses?: Record<string, string>;
52
+ errorResponses?: Record<string, string>;
53
+ errorStatusKeys?: Record<string, string>;
51
54
  };
52
55
  //#endregion
53
56
  //#region src/treaty-generator.d.ts
@@ -59,5 +62,5 @@ declare function generateTreatyModule(options: {
59
62
  importPath: string;
60
63
  }): Promise<string>;
61
64
  //#endregion
62
- export { type GenerateOptions, type HeaderFn, type LeafCall, type OpenAPISpec, type OperationDefinition, type OperationErrors, type PathFn, type RouteNode, type SecurityRequirement, type TreatyClient, type TreatyResult, type TreatyRoutesConstraint, type TypesConfig, createTreatyClient, generate, generateTreatyModule, generateTreatyModuleFromMetadata };
65
+ export { type GenerateOptions, type HeaderFn, type LeafCall, type OpenAPISpec, type OperationDefinition, type OperationErrors, type PathFn, type RouteNode, type SecurityRequirement, type TreatyClient, type TreatyErrorResult, type TreatyOperationMeta, type TreatyOperationsClient, type TreatyRequest, type TreatyResult, type TreatyResultFor, type TreatyRouteTreeClient, type TreatyRoutesConstraint, type TreatyUnexpectedError, type TreatyUnexpectedSubtype, type TypesConfig, createTreatyClient, generate, generateTreatyModule, generateTreatyModuleFromMetadata, orThrow, unwrap };
63
66
  //# sourceMappingURL=index.d.cts.map
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as PathFn, i as OperationErrors, n as HeaderFn, r as OperationDefinition, s as SecurityRequirement } from "./types-ByqlZjPK.mjs";
2
- import { a as RouteNode, i as TreatyRoutesConstraint, n as LeafCall, r as TreatyClient, s as TreatyResult, t as createTreatyClient } from "./treaty-DM77ZhDU.mjs";
1
+ import { a as PathFn, i as OperationErrors, n as HeaderFn, r as OperationDefinition, s as SecurityRequirement } from "./types-BG1-wlSN.mjs";
2
+ import { _ as TreatyUnexpectedSubtype, a as TreatyClient, c as TreatyRequest, d as TreatyRoutesConstraint, f as RouteNode, g as TreatyUnexpectedError, i as LeafCall, l as TreatyResultFor, m as TreatyResult, n as createTreatyClient, o as TreatyOperationMeta, p as TreatyErrorResult, r as orThrow, s as TreatyOperationsClient, u as TreatyRouteTreeClient, v as unwrap } from "./treaty-s9YlO7y_.mjs";
3
3
 
4
4
  //#region src/zenko.d.ts
5
5
  type OpenAPISpec = {
@@ -48,6 +48,9 @@ declare function generate(spec: OpenAPISpec, options?: GenerateOptions): string;
48
48
  type OperationMeta = {
49
49
  method: string;
50
50
  path: string;
51
+ successResponses?: Record<string, string>;
52
+ errorResponses?: Record<string, string>;
53
+ errorStatusKeys?: Record<string, string>;
51
54
  };
52
55
  //#endregion
53
56
  //#region src/treaty-generator.d.ts
@@ -59,5 +62,5 @@ declare function generateTreatyModule(options: {
59
62
  importPath: string;
60
63
  }): Promise<string>;
61
64
  //#endregion
62
- export { type GenerateOptions, type HeaderFn, type LeafCall, type OpenAPISpec, type OperationDefinition, type OperationErrors, type PathFn, type RouteNode, type SecurityRequirement, type TreatyClient, type TreatyResult, type TreatyRoutesConstraint, type TypesConfig, createTreatyClient, generate, generateTreatyModule, generateTreatyModuleFromMetadata };
65
+ export { type GenerateOptions, type HeaderFn, type LeafCall, type OpenAPISpec, type OperationDefinition, type OperationErrors, type PathFn, type RouteNode, type SecurityRequirement, type TreatyClient, type TreatyErrorResult, type TreatyOperationMeta, type TreatyOperationsClient, type TreatyRequest, type TreatyResult, type TreatyResultFor, type TreatyRouteTreeClient, type TreatyRoutesConstraint, type TreatyUnexpectedError, type TreatyUnexpectedSubtype, type TypesConfig, createTreatyClient, generate, generateTreatyModule, generateTreatyModuleFromMetadata, orThrow, unwrap };
63
66
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{n as e,r as t,t as n}from"./treaty-generator-B2DqCcuW.mjs";import{createTreatyClient as r}from"./treaty.mjs";export{r as createTreatyClient,t as generate,n as generateTreatyModule,e as generateTreatyModuleFromMetadata};
1
+ import{n as e,r as t,t as n}from"./treaty-generator-DBdrObxz.mjs";import{n as r,r as i,t as a}from"./treaty-BsF5H62s.mjs";export{a as createTreatyClient,t as generate,n as generateTreatyModule,e as generateTreatyModuleFromMetadata,r as orThrow,i as unwrap};
@@ -0,0 +1,2 @@
1
+ function e(e){if(e==null)return`unknown`;if(e instanceof Error)return`${e.name}: ${e.message}`;switch(typeof e){case`string`:return e;case`number`:case`boolean`:return String(e);case`bigint`:return`${e}n`;case`symbol`:return e.toString();case`function`:return`[function ${e.name||`anonymous`}]`;case`object`:try{return JSON.stringify(e)}catch{return`[object]`}default:return`unknown`}}function t(t){if(t.kind===`success`)return t.data;throw t.kind===`error`?Error(`Treaty unwrap failed: kind=error; status=${t.status}; specStatus=${String(t.specStatus)}; error=${e(t.error)}`):t.subtype===`transport`?Error(`Treaty unwrap failed: kind=unexpectedError; subtype=transport; error=${e(t.error)}`):t.subtype===`parse`?Error(`Treaty unwrap failed: kind=unexpectedError; subtype=parse; status=${t.status}; error=${e(t.error)}`):Error(`Treaty unwrap failed: kind=unexpectedError; subtype=other; error=${e(t.error)}`)}const n=t,r=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function i(e,t){return`${e.replace(/\/$/,``)}${t.startsWith(`/`)?t:`/${t}`}`}function a(e){return e instanceof Date?e.toISOString():typeof e==`object`&&e?JSON.stringify(e):typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):``}function o(e){let t=[];for(let[n,r]of Object.entries(e)){if(r==null)continue;let e=a(r);t.push(`${encodeURIComponent(n)}=${encodeURIComponent(e)}`)}return t.length?`?${t.join(`&`)}`:``}async function s(e){try{return await e.clone().text()}catch{return``}}function c(e){let t=e?.params??{},n=e?.query??{};return{...t,...n}}function l(e,t){let n=e.errorStatusKeys;if(!n)return;let r=String(t);if(n[r])return n[r];if(n.default!==void 0)return n.default}function u(e,t){let n=e.errorResponses;return n?String(t)in n?t:`default`in n?`default`:`unlisted`:`unlisted`}async function d(e){let{baseUrl:t,op:n,meta:a,req:o,fetchImpl:l}=e,u=a.method.toLowerCase();if(!r.has(u))return{kind:`unexpectedError`,subtype:`other`,error:Error(`Unsupported method ${u}`)};let d=u.toUpperCase(),m=u===`get`||u===`head`,h;try{h=(typeof n.path==`function`?n.path:()=>String(n.path))(c(o))}catch(e){return{kind:`unexpectedError`,subtype:`other`,error:e}}let g=i(t,h),_={...o?.headers&&typeof o.headers==`object`?o.headers:{}},v;if(!m&&o?.body!==void 0){let e=o.body;typeof FormData<`u`&&e instanceof FormData?v=e:typeof Blob<`u`&&e instanceof Blob?(v=e,e.type&&(_[`content-type`]=e.type)):(_[`content-type`]=_[`content-type`]??`application/json`,v=typeof e==`string`||e instanceof ArrayBuffer?e:JSON.stringify(e))}let{init:y}=o??{},b={...y},x;try{x=await l(g,{...b,method:d,headers:Object.keys(_).length>0?new Headers(_):void 0,body:m?void 0:v})}catch(e){return{kind:`unexpectedError`,subtype:`transport`,error:e instanceof Error?e:Error(String(e))}}let S=x.status,C=await s(x);return x.ok?f(n,x,S,C):p(n,a,x,S,C)}function f(e,t,n,r){let i=e.response;if(!i)return{kind:`success`,status:n,data:void 0,response:t,headers:t.headers};let a=t.headers.get(`content-type`)??``,o;if(a.includes(`application/json`))try{o=r===``?null:JSON.parse(r)}catch(e){return{kind:`unexpectedError`,subtype:`parse`,status:n,error:e instanceof Error?e:Error(String(e)),rawBody:r,response:t,headers:t.headers}}else o=r===``?null:r;let s=i.safeParse(o);return s.success?{kind:`success`,status:n,data:s.data,response:t,headers:t.headers}:{kind:`unexpectedError`,subtype:`parse`,status:n,error:s.error,rawBody:r,response:t,headers:t.headers}}function p(e,t,n,r,i){let a=u(t,r),o=l(t,r),s=o&&e.errors&&e.errors[o]?e.errors[o]:void 0,c=n.headers.get(`content-type`)??``,d;if(c.includes(`application/json`))try{d=i===``?null:JSON.parse(i)}catch(e){return{kind:`unexpectedError`,subtype:`parse`,status:r,error:e instanceof Error?e:Error(String(e)),rawBody:i,response:n,headers:n.headers}}else d=i===``?null:i;if(s){let e=s.safeParse(d);return e.success?{kind:`error`,specStatus:a,status:r,error:e.data,response:n,headers:n.headers}:{kind:`unexpectedError`,subtype:`parse`,status:r,error:e.error,rawBody:i,response:n,headers:n.headers}}return{kind:`error`,specStatus:a,status:r,error:d,response:n,headers:n.headers}}function m(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.method==`string`&&(typeof t.path==`function`||typeof t.path==`string`)}function h(e,t){return typeof e==`string`?e:e.length===0?e():e(t)}function g(e){let{baseUrl:t,node:n,params:i,fetchImpl:a}=e;return new Proxy(()=>{},{get(e,o){if(typeof o==`symbol`||o===`then`)return;let s=n[o];if(s!==void 0)return m(s)?r.has(o)?_({baseUrl:t,leaf:s,params:i,fetchImpl:a}):void 0:g({baseUrl:t,node:s,params:i,fetchImpl:a})},apply(e,r,o){let s=o[0];if(!s||typeof s!=`object`)throw TypeError(`Expected a path parameter object`);let c=n,l=Object.keys(c).find(e=>e.startsWith(`:`));if(!l)throw TypeError(`No dynamic path segment here`);let u=c[l];if(u===void 0)throw TypeError(`Missing route segment ${l}`);let d={...i,...s};if(m(u))throw TypeError(`Unexpected leaf under dynamic segment`);return g({baseUrl:t,node:u,params:d,fetchImpl:a})}})}function _(e){let{baseUrl:t,leaf:n,params:r,fetchImpl:a}=e,c=n.method.toLowerCase(),l=c.toUpperCase(),u=c===`get`||c===`head`;return async(e,c)=>{let d;try{d=h(n.path,r)}catch(e){return{kind:`unexpectedError`,subtype:`other`,error:e}}let f=i(t,d),p=u?e?.query:c?.query;p&&typeof p==`object`&&(f+=o(p));let m={...u?e?.headers:c?.headers},g;!u&&e!==void 0&&(typeof FormData<`u`&&e instanceof FormData?(g=e,delete m[`content-type`]):typeof Blob<`u`&&e instanceof Blob?(g=e,e.type&&(m[`content-type`]=e.type)):(m[`content-type`]=m[`content-type`]??`application/json`,g=typeof e==`string`||e instanceof ArrayBuffer?e:JSON.stringify(e)));let{method:_,body:v,...y}=c??{},b;try{b=await a(f,{...y,method:l,headers:Object.keys(m).length>0?new Headers(m):void 0,body:u?void 0:g})}catch(e){return{kind:`unexpectedError`,subtype:`transport`,error:e instanceof Error?e:Error(String(e))}}let x=await s(b),S=b.headers.get(`content-type`)??``,C;if(S.includes(`application/json`))try{C=x===``?null:JSON.parse(x)}catch(e){let t=e instanceof Error?e:Error(String(e));return{kind:`unexpectedError`,subtype:`parse`,status:b.status,error:t,rawBody:x,response:b,headers:b.headers}}else C=x===``?null:x;return b.ok?{kind:`success`,status:b.status,data:C,response:b,headers:b.headers}:{kind:`error`,specStatus:`unlisted`,status:b.status,error:C,response:b,headers:b.headers}}}function v(e){let t=e.fetch??globalThis.fetch;return g({baseUrl:e.baseUrl,node:e.routes,params:{},fetchImpl:t})}function y(e){return`operations`in e?b(e):v(e)}function b(e){let t=e.options?.fetch??globalThis.fetch,n={};for(let r of Object.keys(e.operations)){let i=e.operations[r],a=e.operationMetadata[r];if(!a)throw Error(`Missing operationMetadata for "${r}"`);n[r]=n=>d({baseUrl:e.baseUrl,op:i,meta:a,req:n,fetchImpl:t})}return n}export{n,t as r,y as t};
2
+ //# sourceMappingURL=treaty-BsF5H62s.mjs.map
@@ -0,0 +1,2 @@
1
+ function e(e){if(e==null)return`unknown`;if(e instanceof Error)return`${e.name}: ${e.message}`;switch(typeof e){case`string`:return e;case`number`:case`boolean`:return String(e);case`bigint`:return`${e}n`;case`symbol`:return e.toString();case`function`:return`[function ${e.name||`anonymous`}]`;case`object`:try{return JSON.stringify(e)}catch{return`[object]`}default:return`unknown`}}function t(t){if(t.kind===`success`)return t.data;throw t.kind===`error`?Error(`Treaty unwrap failed: kind=error; status=${t.status}; specStatus=${String(t.specStatus)}; error=${e(t.error)}`):t.subtype===`transport`?Error(`Treaty unwrap failed: kind=unexpectedError; subtype=transport; error=${e(t.error)}`):t.subtype===`parse`?Error(`Treaty unwrap failed: kind=unexpectedError; subtype=parse; status=${t.status}; error=${e(t.error)}`):Error(`Treaty unwrap failed: kind=unexpectedError; subtype=other; error=${e(t.error)}`)}const n=t,r=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function i(e,t){return`${e.replace(/\/$/,``)}${t.startsWith(`/`)?t:`/${t}`}`}function a(e){return e instanceof Date?e.toISOString():typeof e==`object`&&e?JSON.stringify(e):typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):``}function o(e){let t=[];for(let[n,r]of Object.entries(e)){if(r==null)continue;let e=a(r);t.push(`${encodeURIComponent(n)}=${encodeURIComponent(e)}`)}return t.length?`?${t.join(`&`)}`:``}async function s(e){try{return await e.clone().text()}catch{return``}}function c(e){let t=e?.params??{},n=e?.query??{};return{...t,...n}}function l(e,t){let n=e.errorStatusKeys;if(!n)return;let r=String(t);if(n[r])return n[r];if(n.default!==void 0)return n.default}function u(e,t){let n=e.errorResponses;return n?String(t)in n?t:`default`in n?`default`:`unlisted`:`unlisted`}async function d(e){let{baseUrl:t,op:n,meta:a,req:o,fetchImpl:l}=e,u=a.method.toLowerCase();if(!r.has(u))return{kind:`unexpectedError`,subtype:`other`,error:Error(`Unsupported method ${u}`)};let d=u.toUpperCase(),m=u===`get`||u===`head`,h;try{h=(typeof n.path==`function`?n.path:()=>String(n.path))(c(o))}catch(e){return{kind:`unexpectedError`,subtype:`other`,error:e}}let g=i(t,h),_={...o?.headers&&typeof o.headers==`object`?o.headers:{}},v;if(!m&&o?.body!==void 0){let e=o.body;typeof FormData<`u`&&e instanceof FormData?v=e:typeof Blob<`u`&&e instanceof Blob?(v=e,e.type&&(_[`content-type`]=e.type)):(_[`content-type`]=_[`content-type`]??`application/json`,v=typeof e==`string`||e instanceof ArrayBuffer?e:JSON.stringify(e))}let{init:y}=o??{},b={...y},x;try{x=await l(g,{...b,method:d,headers:Object.keys(_).length>0?new Headers(_):void 0,body:m?void 0:v})}catch(e){return{kind:`unexpectedError`,subtype:`transport`,error:e instanceof Error?e:Error(String(e))}}let S=x.status,C=await s(x);return x.ok?f(n,x,S,C):p(n,a,x,S,C)}function f(e,t,n,r){let i=e.response;if(!i)return{kind:`success`,status:n,data:void 0,response:t,headers:t.headers};let a=t.headers.get(`content-type`)??``,o;if(a.includes(`application/json`))try{o=r===``?null:JSON.parse(r)}catch(e){return{kind:`unexpectedError`,subtype:`parse`,status:n,error:e instanceof Error?e:Error(String(e)),rawBody:r,response:t,headers:t.headers}}else o=r===``?null:r;let s=i.safeParse(o);return s.success?{kind:`success`,status:n,data:s.data,response:t,headers:t.headers}:{kind:`unexpectedError`,subtype:`parse`,status:n,error:s.error,rawBody:r,response:t,headers:t.headers}}function p(e,t,n,r,i){let a=u(t,r),o=l(t,r),s=o&&e.errors&&e.errors[o]?e.errors[o]:void 0,c=n.headers.get(`content-type`)??``,d;if(c.includes(`application/json`))try{d=i===``?null:JSON.parse(i)}catch(e){return{kind:`unexpectedError`,subtype:`parse`,status:r,error:e instanceof Error?e:Error(String(e)),rawBody:i,response:n,headers:n.headers}}else d=i===``?null:i;if(s){let e=s.safeParse(d);return e.success?{kind:`error`,specStatus:a,status:r,error:e.data,response:n,headers:n.headers}:{kind:`unexpectedError`,subtype:`parse`,status:r,error:e.error,rawBody:i,response:n,headers:n.headers}}return{kind:`error`,specStatus:a,status:r,error:d,response:n,headers:n.headers}}function m(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.method==`string`&&(typeof t.path==`function`||typeof t.path==`string`)}function h(e,t){return typeof e==`string`?e:e.length===0?e():e(t)}function g(e){let{baseUrl:t,node:n,params:i,fetchImpl:a}=e;return new Proxy(()=>{},{get(e,o){if(typeof o==`symbol`||o===`then`)return;let s=n[o];if(s!==void 0)return m(s)?r.has(o)?_({baseUrl:t,leaf:s,params:i,fetchImpl:a}):void 0:g({baseUrl:t,node:s,params:i,fetchImpl:a})},apply(e,r,o){let s=o[0];if(!s||typeof s!=`object`)throw TypeError(`Expected a path parameter object`);let c=n,l=Object.keys(c).find(e=>e.startsWith(`:`));if(!l)throw TypeError(`No dynamic path segment here`);let u=c[l];if(u===void 0)throw TypeError(`Missing route segment ${l}`);let d={...i,...s};if(m(u))throw TypeError(`Unexpected leaf under dynamic segment`);return g({baseUrl:t,node:u,params:d,fetchImpl:a})}})}function _(e){let{baseUrl:t,leaf:n,params:r,fetchImpl:a}=e,c=n.method.toLowerCase(),l=c.toUpperCase(),u=c===`get`||c===`head`;return async(e,c)=>{let d;try{d=h(n.path,r)}catch(e){return{kind:`unexpectedError`,subtype:`other`,error:e}}let f=i(t,d),p=u?e?.query:c?.query;p&&typeof p==`object`&&(f+=o(p));let m={...u?e?.headers:c?.headers},g;!u&&e!==void 0&&(typeof FormData<`u`&&e instanceof FormData?(g=e,delete m[`content-type`]):typeof Blob<`u`&&e instanceof Blob?(g=e,e.type&&(m[`content-type`]=e.type)):(m[`content-type`]=m[`content-type`]??`application/json`,g=typeof e==`string`||e instanceof ArrayBuffer?e:JSON.stringify(e)));let{method:_,body:v,...y}=c??{},b;try{b=await a(f,{...y,method:l,headers:Object.keys(m).length>0?new Headers(m):void 0,body:u?void 0:g})}catch(e){return{kind:`unexpectedError`,subtype:`transport`,error:e instanceof Error?e:Error(String(e))}}let x=await s(b),S=b.headers.get(`content-type`)??``,C;if(S.includes(`application/json`))try{C=x===``?null:JSON.parse(x)}catch(e){let t=e instanceof Error?e:Error(String(e));return{kind:`unexpectedError`,subtype:`parse`,status:b.status,error:t,rawBody:x,response:b,headers:b.headers}}else C=x===``?null:x;return b.ok?{kind:`success`,status:b.status,data:C,response:b,headers:b.headers}:{kind:`error`,specStatus:`unlisted`,status:b.status,error:C,response:b,headers:b.headers}}}function v(e){let t=e.fetch??globalThis.fetch;return g({baseUrl:e.baseUrl,node:e.routes,params:{},fetchImpl:t})}function y(e){return`operations`in e?b(e):v(e)}function b(e){let t=e.options?.fetch??globalThis.fetch,n={};for(let r of Object.keys(e.operations)){let i=e.operations[r],a=e.operationMetadata[r];if(!a)throw Error(`Missing operationMetadata for "${r}"`);n[r]=n=>d({baseUrl:e.baseUrl,op:i,meta:a,req:n,fetchImpl:t})}return n}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return y}});
2
+ //# sourceMappingURL=treaty-DBeNmEsN.cjs.map
@@ -0,0 +1,159 @@
1
+ import { i as OperationErrors, o as RequestMethod, r as OperationDefinition, s as SecurityRequirement, t as AnyHeaderFn } from "./types-BM-Q_QIk.cjs";
2
+ import { z } from "zod";
3
+
4
+ //#region src/treaty-types.d.ts
5
+ /** Nested route tree: segments, `:param` keys, and HTTP method leaves (see route proxy in treaty runtime). */
6
+ type RouteNode = Record<string, unknown>;
7
+ type TreatySuccess<TStatus extends number, TData> = {
8
+ kind: "success";
9
+ status: TStatus;
10
+ data: TData;
11
+ response: Response;
12
+ headers: Headers;
13
+ };
14
+ /** Non-OK HTTP response (OpenAPI-mapped or raw error body). */
15
+ type TreatyErrorResult<TSpecStatus extends string | number, TError> = {
16
+ kind: "error";
17
+ specStatus: TSpecStatus;
18
+ status: number;
19
+ error: TError;
20
+ response: Response;
21
+ headers: Headers;
22
+ };
23
+ type TreatyUnexpectedSubtype = "transport" | "parse" | "other";
24
+ /** Network failure, body validation/decoding failure, or other unexpected outcomes. */
25
+ type TreatyUnexpectedError = {
26
+ kind: "unexpectedError";
27
+ subtype: "transport";
28
+ error: Error;
29
+ } | {
30
+ kind: "unexpectedError";
31
+ subtype: "parse";
32
+ status: number; /** JSON `SyntaxError`, `ZodError`, or other failure while decoding the body. */
33
+ error: Error;
34
+ rawBody: string;
35
+ response: Response;
36
+ headers: Headers;
37
+ } | {
38
+ kind: "unexpectedError";
39
+ subtype: "other";
40
+ error: unknown;
41
+ };
42
+ /** Discriminated union returned by treaty clients (`kind` narrows outcomes). */
43
+ type TreatyResult<TData = unknown> = TreatySuccess<number, TData> | TreatyErrorResult<string | number, unknown> | TreatyUnexpectedError;
44
+ declare function unwrap<T>(result: TreatyResult<T>): T;
45
+ //#endregion
46
+ //#region src/treaty-infer.d.ts
47
+ type AnyOperationDefinition = OperationDefinition<RequestMethod, (...args: any[]) => string, unknown, unknown, AnyHeaderFn | undefined, OperationErrors | undefined, readonly SecurityRequirement[] | undefined>;
48
+ /**
49
+ * Single argument per call. `params` / `query` are partials of the generated
50
+ * `paths.*` input object (path + query fields); they are merged when building the URL.
51
+ */
52
+ type TreatyRequest<TPathArg = Record<string, unknown>, TBody = unknown> = {
53
+ params?: Partial<TPathArg>;
54
+ query?: Partial<TPathArg>; /** JSON-serializable body, or raw `FormData` / `Blob` for multipart uploads. */
55
+ body?: TBody | FormData | Blob;
56
+ headers?: Record<string, string>;
57
+ init?: Omit<RequestInit, "method" | "body" | "headers">;
58
+ };
59
+ type InferZod<Schema> = Schema extends z.ZodType ? z.output<Schema> : unknown;
60
+ type InferZodInput<Schema> = Schema extends z.ZodType ? z.input<Schema> : unknown;
61
+ type SuccessData<Op extends AnyOperationDefinition> = NonNullable<Op["response"]> extends z.ZodType ? InferZod<NonNullable<Op["response"]>> : unknown;
62
+ type ErrorsRecord<Op extends AnyOperationDefinition> = Op["errors"] extends Record<string, z.ZodType> ? Op["errors"] : Record<string, never>;
63
+ /** Per-operation entry in generated `operationMetadata`. */
64
+ type TreatyOperationMeta = {
65
+ method: string;
66
+ path: string;
67
+ successResponses?: Record<string, string>;
68
+ errorResponses?: Record<string, string>;
69
+ errorStatusKeys?: Record<string, string>;
70
+ };
71
+ type ValueUnion<T> = T[keyof T];
72
+ /** OpenAPI response key → `specStatus` field (numeric status, `"default"`, or `"unlisted"`). */
73
+ type ResponseKeyToSpec<K extends PropertyKey> = K extends "default" ? "default" : K extends number ? K : K extends `${infer N extends number}` ? N : never;
74
+ type SuccessBranches<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta> = Meta extends {
75
+ successResponses: infer M;
76
+ } ? M extends Record<string, string> ? ValueUnion<{ [K in keyof M]: K extends string | number ? ResponseKeyToSpec<K> extends infer S ? [S] extends [never] ? never : S extends number ? TreatySuccess<S, SuccessData<Op>> : never : never : never }> : TreatySuccess<number, SuccessData<Op>> : TreatySuccess<number, SuccessData<Op>>;
77
+ type HttpBranches<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta> = Meta extends {
78
+ errorResponses: infer ER;
79
+ } ? ER extends Record<string, string> ? Meta extends {
80
+ errorStatusKeys: infer KS;
81
+ } ? KS extends Record<string, string> ? ValueUnion<{ [C in keyof ER]: C extends string | number ? ResponseKeyToSpec<C> extends infer Spec ? Spec extends string | number ? C extends keyof KS ? KS[C] extends keyof ErrorsRecord<Op> ? TreatyErrorResult<Spec, InferZod<ErrorsRecord<Op>[KS[C]]>> : TreatyErrorResult<Spec, unknown> : TreatyErrorResult<Spec, unknown> : never : never : never }> : ValueUnion<{ [C in keyof ER]: C extends string | number ? ResponseKeyToSpec<C> extends infer Spec ? Spec extends string | number ? TreatyErrorResult<Spec, unknown> : never : never : never }> : ValueUnion<{ [C in keyof ER]: C extends string | number ? ResponseKeyToSpec<C> extends infer Spec ? Spec extends string | number ? TreatyErrorResult<Spec, unknown> : never : never : never }> : never : never;
82
+ type TreatyResultFor<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta = TreatyOperationMeta> = SuccessBranches<Op, Meta> | HttpBranches<Op, Meta> | {
83
+ kind: "error";
84
+ specStatus: "unlisted";
85
+ status: number;
86
+ error: unknown;
87
+ response: Response;
88
+ headers: Headers;
89
+ } | {
90
+ kind: "unexpectedError";
91
+ subtype: "transport";
92
+ error: Error;
93
+ } | {
94
+ kind: "unexpectedError";
95
+ subtype: "parse";
96
+ status: number;
97
+ error: Error;
98
+ rawBody: string;
99
+ response: Response;
100
+ headers: Headers;
101
+ } | {
102
+ kind: "unexpectedError";
103
+ subtype: "other";
104
+ error: unknown;
105
+ };
106
+ type PathArg<Op extends AnyOperationDefinition> = Parameters<Op["path"]> extends [] ? Record<string, never> : Parameters<Op["path"]> extends [infer P] ? P extends Record<string, unknown> ? P : Record<string, unknown> : Record<string, unknown>;
107
+ type OperationCall<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta> = Op["method"] extends "get" | "head" ? (req?: TreatyRequest<PathArg<Op>>) => Promise<TreatyResultFor<Op, Meta>> : NonNullable<Op["request"]> extends z.ZodType ? (req: TreatyRequest<PathArg<Op>, InferZodInput<NonNullable<Op["request"]>>>) => Promise<TreatyResultFor<Op, Meta>> : (req?: TreatyRequest<PathArg<Op>, unknown>) => Promise<TreatyResultFor<Op, Meta>>;
108
+ type TreatyOperationsClient<T extends Record<string, AnyOperationDefinition>, TMeta extends Record<keyof T & string, TreatyOperationMeta>> = { [K in keyof T]: OperationCall<T[K], K extends keyof TMeta ? TMeta[K] : TreatyOperationMeta> };
109
+ type TreatyMethodOptions = RequestInit & {
110
+ query?: Record<string, unknown>;
111
+ headers?: Record<string, string>;
112
+ };
113
+ /**
114
+ * Structural check: `Op["method"] extends "get" | "head"` is wrong when `method` is
115
+ * typed as `RequestMethod` (union) — it would match the GET branch incorrectly.
116
+ */
117
+ type LeafCall<Op extends AnyOperationDefinition> = Op extends {
118
+ method: "get" | "head";
119
+ } ? (opts?: {
120
+ query?: Record<string, unknown>;
121
+ headers?: Record<string, string>;
122
+ }) => Promise<TreatyResult<SuccessData<Op>>> : Op extends {
123
+ request: infer Req;
124
+ } ? Req extends z.ZodType ? (body: InferZodInput<Req>, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>>;
125
+ type LeafMethods<R> = { [K in keyof R as K extends symbol ? never : R[K] extends AnyOperationDefinition ? K : never]: R[K] extends AnyOperationDefinition ? LeafCall<R[K]> : never };
126
+ type DynamicParamKey<R> = Extract<keyof R, `:${string}`>;
127
+ type ParamRecord<K extends `:${string}`> = K extends `:${infer Name}` ? { [P in Name]: string | number } : never;
128
+ type DynamicBranch<R> = [DynamicParamKey<R>] extends [never] ? unknown : DynamicParamKey<R> extends infer K extends `:${string}` ? K extends keyof R ? (params: ParamRecord<K>) => TreatyRouteTreeClient<R[K]> : never : unknown;
129
+ type StaticSegmentChildren<R> = { [K in keyof R as K extends symbol ? never : K extends `:${string}` ? never : R[K] extends AnyOperationDefinition ? never : R[K] extends Record<string, unknown> ? K : never]: R[K] extends Record<string, unknown> ? TreatyRouteTreeClient<R[K]> : never };
130
+ /**
131
+ * Inferred client for a nested `treatyRoutes` object (secondary / `$routes` API).
132
+ */
133
+ type TreatyRouteTreeClient<R> = LeafMethods<R> & StaticSegmentChildren<R> & DynamicBranch<R>;
134
+ /**
135
+ * @deprecated Route-tree shape; prefer {@link TreatyOperationsClient}.
136
+ */
137
+ type TreatyClient<R> = TreatyRouteTreeClient<R>;
138
+ type TreatyRoutesConstraint = Record<string, unknown>;
139
+ //#endregion
140
+ //#region src/treaty.d.ts
141
+ declare const orThrow: typeof unwrap;
142
+ type AnyOp = AnyOperationDefinition;
143
+ type TreatyClientOptions = {
144
+ fetch?: typeof fetch;
145
+ };
146
+ declare function createTreatyClient<const T extends Record<string, AnyOp>, const TMeta extends Record<keyof T & string, TreatyOperationMeta>>(config: {
147
+ baseUrl: string;
148
+ operations: T;
149
+ operationMetadata: TMeta;
150
+ options?: TreatyClientOptions;
151
+ }): TreatyOperationsClient<T, TMeta>;
152
+ declare function createTreatyClient<const R extends TreatyRoutesConstraint>(config: {
153
+ baseUrl: string;
154
+ routes: R;
155
+ fetch?: typeof fetch;
156
+ }): TreatyRouteTreeClient<R>;
157
+ //#endregion
158
+ export { TreatyUnexpectedSubtype as _, TreatyClient as a, TreatyRequest as c, TreatyRoutesConstraint as d, RouteNode as f, TreatyUnexpectedError as g, TreatySuccess as h, LeafCall as i, TreatyResultFor as l, TreatyResult as m, createTreatyClient as n, TreatyOperationMeta as o, TreatyErrorResult as p, orThrow as r, TreatyOperationsClient as s, TreatyClientOptions as t, TreatyRouteTreeClient as u, unwrap as v };
159
+ //# sourceMappingURL=treaty-DNkKJzoB.d.cts.map
@@ -0,0 +1,9 @@
1
+ require(`./cli.cjs`);let e=require(`node:url`);function t(e){let t=new Set,r=new Set,i=[],a=o=>{if(t.has(o)||r.has(o))return;r.add(o);let s=e[o],c=n(s);for(let t of c)e[t]&&a(t);r.delete(o),t.add(o),i.push(o)};for(let t of Object.keys(e))a(t);return i}function n(e){let t=[],n=e=>{if(!(typeof e!=`object`||!e)){if(e.$ref&&typeof e.$ref==`string`){let n=r(e.$ref);t.push(n);return}if(Array.isArray(e))e.forEach(n);else{if(e.mapping&&typeof e.mapping==`object`)for(let n of Object.values(e.mapping))typeof n==`string`&&t.push(r(n));Object.values(e).forEach(n)}}};return n(e),[...new Set(t)]}function r(e){return(e.split(`/`).pop()||`Unknown`).replace(/\.(yml|yaml)$/i,``)}function i(e){if(!e)return!1;let t=e.at(0);return t===void 0||!/[a-zA-Z_$]/.test(t)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(`abstract.arguments.await.boolean.break.byte.case.catch.char.class.const.continue.debugger.default.delete.do.double.else.enum.eval.export.extends.false.final.finally.float.for.function.goto.if.implements.import.in.instanceof.int.interface.let.long.native.new.null.package.private.protected.public.return.short.static.super.switch.synchronized.this.throw.throws.transient.true.try.typeof.var.void.volatile.while.with.yield.async`.split(`.`)).has(e)}function a(e){return i(e)?e:`"${e}"`}function o(e){return e.replace(/-([a-zA-Z])/g,(e,t)=>t.toUpperCase()).replace(/-+$/,``)}function s(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e){let t={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(t.usesOperationDefinition=!0);for(let n of e)n.errors&&u(n.errors)&&(t.usesOperationErrors=!0);return e.length>0&&!t.usesOperationErrors&&e.some(e=>!e.errors||!u(e.errors))&&(t.usesOperationErrors=!0),t}function l(e,t,n){let r=[];if(e.usesHeaderFn&&r.push(`HeaderFn`),e.usesOperationDefinition&&r.push(`OperationDefinition`),e.usesOperationErrors&&r.push(`OperationErrors`),r.length===0)return``;let i=t===`package`?`"zenko"`:`"${n}"`;return`import type { ${r.join(`, `)} } from ${i};`}function u(e){return!!(e&&Object.keys(e).length>0)}const d={"application/json":`unknown`,"text/csv":`string`,"text/plain":`string`,"application/octet-stream":`unknown`,"application/pdf":`unknown`};function f(e){let t=Object.keys(e);if(t.includes(`application/json`))return`application/json`;for(let e of t)if(e in d)return e;return t[0]||``}function p(e){let t=e.toLowerCase().split(`;`)[0]?.trim();return t?!!(t.startsWith(`text/`)||t===`application/xml`||t.startsWith(`application/`)&&t.endsWith(`+xml`)):!1}function m(e,t){if(!t||!p(e)||t.$ref)return t;let n=t.nullable===!0?{nullable:!0}:{};return t.enum?{type:`string`,enum:t.enum,...n}:{type:`string`,...n}}function h(e,t){if(e){if(e.$ref){let n=r(e.$ref),i=t.components?.parameters?.[n];if(!i)return;let{$ref:a,...o}=e;return{...i,...o}}return e}}function g(e){let t=new Map;for(let[,n]of Object.entries(e.paths||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}for(let[,n]of Object.entries(e.webhooks||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}return t}function _(e,t){let i=new Set,a=new Map,o=e=>{if(!e)return[];if(a.has(e))return a.get(e)??[];let t=n(e);return a.set(e,t),t},s=g(t);for(let n of e){let e=s.get(n.operationId);if(!e)continue;let a=e.requestBody?.content?.[`application/json`]?.schema;if(a?.$ref){let e=r(a.$ref);i.add(e)}else if(a){let e=o(a);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}let c=e.responses||{};for(let[,e]of Object.entries(c)){let n=e?.content;if(!n)continue;let a=f(n),s=n[a]?.schema,c=m(a,s);if(c?.$ref){let e=r(c.$ref);i.add(e)}else if(c){let e=o(c);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}}for(let e of n.queryParams){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}for(let e of n.requestHeaders||[]){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}let l=e.parameters||[];for(let e of l){let n=h(e,t);if(n?.schema?.$ref){let e=r(n.schema.$ref);i.add(e)}if(n?.schema?.items?.$ref){let e=r(n.schema.items.$ref);i.add(e)}}}let c=new Set,l=Array.from(i);for(;l.length>0;){let e=l.pop();if(c.has(e))continue;c.add(e);let n=t.components?.schemas?.[e];if(!n)continue;let r=o(n);for(let e of r)t.components?.schemas?.[e]&&!c.has(e)&&(i.add(e),l.push(e))}return i}function v(e,t){return t===!0?!0:Array.isArray(t)?t.includes(e):!1}function y(e,t){switch(t){case`optional`:return`${e}.optional()`;case`nullable`:return`${e}.nullable()`;case`nullish`:return`${e}.nullish()`}}function b(e,t,n,r,i,a){if(n.has(e))return``;if(n.add(e),t.enum){let n=t.enum.map(e=>`"${e}"`).join(`, `);if(v(e,r.openEnums)){let t=r.openEnumPrefix;return`const ${e}Known = [${n}] as const;\nexport const ${e} = z.enum(${e}Known).or(\n z.string().transform((v): \`${t}\${string}\` => \`${t}\${v}\`)\n);`}return`export const ${e} = z.enum([${n}]);`}if(t.allOf&&Array.isArray(t.allOf)){let n=T(t),o=D(n,a),s=n.map(t=>j(t,r,i,a,e,void 0,o));if(s.length===0)return`export const ${e} = z.object({});`;if(s.length===1)return`export const ${e} = ${s[0]};`;let c=n.every(e=>k(e,a))?`merge`:`and`;return`export const ${e} = ${s[0]}${s.slice(1).map(e=>`.${c}(${e})`).join(``)};`}if(t.type===`object`||t.properties)return`export const ${e} = ${M(t,r,i,a,e)};`;if(t.type===`array`){let n=t.items??{type:`unknown`},o=j(n,r,i,a,e),s=r.strictNumeric||t.minItems!==void 0||t.maxItems!==void 0||t.uniqueItems===!0;return`export const ${e} = ${P(t,`z.array(${o})`,n,s)};`}return`export const ${e} = ${j(t,r,i,a,e,e)};`}function x(e,t,n,r,i){let a=e.map(e=>j(e,t,n,r,i));return a.length===0?`z.unknown()`:a.length===1?a[0]??`z.unknown()`:`z.union([${a.join(`, `)}])`}function S(e){return e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}function C(e,t){if(!e?.$ref)return e;let n=r(e.$ref);return t?.[n]??e}function w(e){return[`$ref`,`type`,`properties`,`required`,`additionalProperties`,`items`,`enum`,`const`,`oneOf`,`anyOf`,`not`].some(t=>e?.[t]!==void 0)}function T(e){let t=Array.isArray(e.allOf)?[...e.allOf]:[],n={...e};return delete n.allOf,w(n)&&t.push(n),t}function E(e,t,n=new Set){let r=C(e,t);if(!r||typeof r!=`object`||n.has(r))return[];n.add(r);let i=new Set(Array.isArray(r.required)?r.required:[]);if(Array.isArray(r.allOf))for(let e of T(r))for(let r of E(e,t,n))i.add(r);return[...i]}function D(e,t){let n=new Set;for(let r of e)for(let e of E(r,t))n.add(e);return n}function O(e,t,n,i,a=new Set){if(!e||a.has(e))return!1;if(a.add(e),e.$ref){let o=r(e.$ref);if((i?.get(o)||o)===t)return!0;let s=n?.[o];if(s)return O(s,t,n,i,a)}return Array.isArray(e.allOf)?e.allOf.some(e=>O(e,t,n,i,a)):Array.isArray(e.oneOf)?e.oneOf.some(e=>O(e,t,n,i,a)):Array.isArray(e.anyOf)?e.anyOf.some(e=>O(e,t,n,i,a)):e.not?O(e.not,t,n,i,a):e.items?O(e.items,t,n,i,a):e.properties?Object.values(e.properties).some(e=>O(e,t,n,i,a)):e.additionalProperties&&typeof e.additionalProperties==`object`?O(e.additionalProperties,t,n,i,a):!1}function k(e,t){let n=C(e,t);return n?n.allOf&&Array.isArray(n.allOf)?T(n).every(e=>k(e,t)):n.type===`object`||n.properties!==void 0||n.additionalProperties!==void 0:!1}function ee(e){let t=new Map;if(!e?.mapping)return t;for(let[n,i]of Object.entries(e.mapping)){if(typeof i!=`string`)continue;let e=r(i),a=t.get(e);if(a){a.values.includes(n)||a.values.push(n);continue}t.set(e,{ref:i,values:[n]})}return t}function A(e,t,n,i=new Set){if(!e||typeof e!=`object`||i.has(e))return[];if(i.add(e),e.$ref&&typeof e.$ref==`string`){let a=r(e.$ref),o=n?.[a];return o?A(o,t,n,i):[]}let a=[],o=e.properties?.[t];if(o){let e=o.const;e!==void 0&&S(e)?a.push(e):Array.isArray(o.enum)&&o.enum?.length===1&&S(o.enum?.[0])&&a.push(o.enum?.[0])}if(Array.isArray(e.allOf))for(let r of e.allOf)a.push(...A(r,t,n,i));return Array.from(new Set(a))}function te(e,t,n){return{allOf:[e,{type:`object`,properties:{[t]:{const:n}},required:[t]}]}}function ne(e,t,n,i){let a=new Set;for(let t of e)t?.$ref&&a.add(r(t.$ref));let o=[],s=!1;for(let a of e){let e=[];if(a?.$ref){let o=r(a.$ref),s=n.get(o);s?.values.length&&e.push(...s.values),e.push(...A(a,t,i))}else e.push(...A(a,t,i));let c=Array.from(new Set(e));if(c.length===0){s=!0,o.push(a);continue}for(let e of c)o.push(te(a,t,e))}for(let[e,r]of n.entries()){if(a.has(e))continue;let n={$ref:r.ref};for(let e of r.values)o.push(te(n,t,e))}return{schemas:o,hasUnmapped:s}}function re(e,t,n,r,i,a,o){let{schemas:s,hasUnmapped:c}=ne(e,t,o??new Map,i),l=s.map(e=>j(e,n,r,i,a));return l.length===0?`z.unknown()`:l.length===1?l[0]??`z.unknown()`:c?`z.union([${l.join(`, `)}])`:`z.discriminatedUnion(${JSON.stringify(t)}, [${l.join(`, `)}])`}function j(e,t,n,i,a,o,s){if(e.$ref){let t=r(e.$ref),o=n?.get(t)||t;return a&&(o===a||O(i?.[t],a,i,n))?`z.lazy((): z.ZodType => ${o})`:o}if(e.const!==void 0&&S(e.const))return`z.literal(${JSON.stringify(e.const)})`;if(e.enum)return e.enum.length===1?`z.literal(${JSON.stringify(e.enum[0])})`:`z.enum([${e.enum.map(e=>`"${e}"`).join(`, `)}])`;if(e.not){let r=e.not,o={...e};delete o.not;let s=w(o)?j(o,t,n,i,a):`z.any()`;return r?.type===`string`&&r.maxLength===0?`${s}.refine((value) => typeof value !== "string" || value.length > 0, { message: "Value must not be empty" })`:`${s}.refine((value) => !${j(r,t,n,i,a)}.safeParse(value).success, { message: "Value must not match schema" })`}if(e.allOf&&Array.isArray(e.allOf)){let r=T(e),s=D(r,i),c=r.map(e=>j(e,t,n,i,a,o,s));if(c.length===0)return`z.object({})`;if(c.length===1)return c[0]??`z.object({})`;let l=r.every(e=>k(e,i))?`merge`:`and`;return`${c[0]}${c.slice(1).map(e=>`.${l}(${e})`).join(``)}`}if(e.oneOf&&Array.isArray(e.oneOf)){if(e.discriminator?.propertyName){let r=ee(e.discriminator);return re(e.oneOf,e.discriminator.propertyName,t,n,i,a,r)}return x(e.oneOf,t,n,i,a)}if(e.anyOf&&Array.isArray(e.anyOf))return x(e.anyOf,t,n,i,a);if(e.type===`object`||e.properties||e.allOf)return M(e,t,n,i,a,s);if(Array.isArray(e.type))return e.type.length===0?`z.unknown()`:e.type.length===1?j({...e,type:e.type[0]},t,n,i,a,o,s):`z.union([${e.type.map(r=>j({...e,type:r},t,n,i,a,o,s)).join(`, `)}])`;switch(e.type){case`string`:return ae(e,t,o);case`boolean`:return`z.boolean()`;case`array`:{let r=e.items??{type:`unknown`},o=j(r,t,n,i,a),s=t.strictNumeric||e.minItems!==void 0||e.maxItems!==void 0||e.uniqueItems===!0;return P(e,`z.array(${o})`,r,s)}case`null`:return`z.null()`;case`number`:return N(e,t);case`integer`:return se(e,t);default:return`z.unknown()`}}function ie(e,t){if(!e||!t)return new Set;let n=new Set;for(let i of Object.values(e)){if(!i||typeof i!=`object`)continue;let e=i.discriminator?.propertyName;if(!e||!Array.isArray(i.oneOf))continue;let a=i.oneOf.some(e=>e?.$ref&&r(e.$ref)===t),o=Object.values(i.discriminator?.mapping??{}).some(e=>typeof e==`string`&&r(e)===t);(a||o)&&n.add(e)}return n}function M(e,t,n,r,i,o){let s=[],c=ie(r,i),l=new Set([...e.required??[],...o?[...o]:[]]);for(let[o,u]of Object.entries(e.properties||{})){let e=l.has(o)||c.has(o),d=j(u,t,n,r,i),f=y(d,t.optionalType),p=t.optionalType===`nullable`?f:oe(f,u),m=e?d:p;s.push(` ${a(o)}: ${m},`)}let u=s.length===0?`z.object({})`:`z.object({\n${s.join(`
2
+ `)}\n})`;return e.additionalProperties===void 0?u:e.additionalProperties===!1?`${u}.strict()`:e.additionalProperties===!0?`${u}.passthrough()`:`${u}.catchall(${j(e.additionalProperties,t,n,r,i)})`}function ae(e,t,n){if(e.format===`binary`)return`(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))`;if(t.strictDates)switch(e.format){case`date-time`:return t.dateTimeOffset===!0||Array.isArray(t.dateTimeOffset)&&n!==void 0&&t.dateTimeOffset.includes(n)?`z.string().datetime({ offset: true })`:`z.string().datetime()`;case`date`:return`z.string().date()`;case`time`:return`z.string().time()`;case`duration`:return`z.string().duration()`}let r=`z.string()`;switch(t.strictNumeric&&(typeof e.minLength==`number`&&(r+=`.min(${e.minLength})`),typeof e.maxLength==`number`&&(r+=`.max(${e.maxLength})`),e.pattern&&(r+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case`uuid`:return`${r}.uuid()`;case`email`:return`${r}.email()`;case`uri`:case`url`:return`${r}.url()`;case`ipv4`:return`${r}.ip({ version: "v4" })`;case`ipv6`:return`${r}.ip({ version: "v6" })`;default:return r}}function oe(e,t){return!t||t.default===void 0||t.default===null&&!(e.includes(`.nullable()`)||e.includes(`.nullish()`)||t.type===`null`||Array.isArray(t.type)&&t.type.includes(`null`))?e:`${e}.default(${JSON.stringify(t.default)})`}function N(e,t){let n=`z.number()`;return t.strictNumeric&&(n=le(e,n),typeof e.multipleOf==`number`&&e.multipleOf!==0&&(n+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),n}function se(e,t){let n=N(e,t);return n+=`.int()`,n}function P(e,t,n,r){return r?(typeof e.minItems==`number`&&(t+=`.min(${e.minItems})`),typeof e.maxItems==`number`&&(t+=`.max(${e.maxItems})`),e.uniqueItems&&ce(n)&&(t+=`.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })`),t):t}function ce(e){return e?.$ref?!1:new Set([`string`,`number`,`integer`,`boolean`]).has(e?.type)}function le(e,t){return typeof e.minimum==`number`?e.exclusiveMinimum===!0?t+=`.gt(${e.minimum})`:t+=`.min(${e.minimum})`:typeof e.exclusiveMinimum==`number`&&(t+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum==`number`?e.exclusiveMaximum===!0?t+=`.lt(${e.maximum})`:t+=`.max(${e.maximum})`:typeof e.exclusiveMaximum==`number`&&(t+=`.lt(${e.exclusiveMaximum})`),t}const ue={400:`badRequest`,401:`unauthorized`,402:`paymentRequired`,403:`forbidden`,404:`notFound`,405:`methodNotAllowed`,406:`notAcceptable`,407:`proxyAuthenticationRequired`,408:`requestTimeout`,409:`conflict`,410:`gone`,411:`lengthRequired`,412:`preconditionFailed`,413:`payloadTooLarge`,414:`uriTooLong`,415:`unsupportedMediaType`,416:`rangeNotSatisfiable`,417:`expectationFailed`,418:`imATeapot`,421:`misdirectedRequest`,422:`unprocessableEntity`,423:`locked`,424:`failedDependency`,425:`tooEarly`,426:`upgradeRequired`,428:`preconditionRequired`,429:`tooManyRequests`,431:`requestHeaderFieldsTooLarge`,451:`unavailableForLegalReasons`,500:`internalServerError`,501:`notImplemented`,502:`badGateway`,503:`serviceUnavailable`,504:`gatewayTimeout`,505:`httpVersionNotSupported`,506:`variantAlsoNegotiates`,507:`insufficientStorage`,508:`loopDetected`,510:`notExtended`,511:`networkAuthenticationRequired`};function F(e){if(e===`default`)return`defaultError`;let t=e.trim(),n=ue[t];if(n)return n;if(/^\d{3}$/.test(t))return`status${t}`;let r=t.toLowerCase().replace(/[^a-z0-9]+/g,` `).trim();if(!r)return`unknownError`;let[i,...a]=r.split(/\s+/),o=i+a.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``);return o?/^[a-zA-Z_$]/.test(o)?o:`status${o.charAt(0).toUpperCase()}${o.slice(1)}`:`unknownError`}function I(e){if(e===`default`)return!0;let t=Number(e);return Number.isInteger(t)?t>=400:!1}function de(e,t){let n=[];if(e.paths)for(let[r,i]of Object.entries(e.paths))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!G(s)||!o.operationId)continue;let c=R(r),l=z(o,t),{successResponse:u,errors:d,successResponses:f,errorResponses:p,errorStatusKeys:m}=B(o,o.operationId,t),h=L(i,o,e),g=H(h),_=U(h),v=W(o,e);n.push({operationId:o.operationId,path:r,method:s,pathParams:c,queryParams:_,requestType:l,responseType:u,successResponses:f,errorResponses:p,errorStatusKeys:m,requestHeaders:g,errors:d,security:v})}if(e.webhooks)for(let[r,i]of Object.entries(e.webhooks))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!G(s)||!o.operationId)continue;let c=r,l=R(c),u=z(o,t),{successResponse:d,errors:f,successResponses:p,errorResponses:m,errorStatusKeys:h}=B(o,o.operationId,t),g=L(i,o,e),_=H(g),v=U(g),y=W(o,e);n.push({operationId:o.operationId,path:c,method:s,pathParams:l,queryParams:v,requestType:u,responseType:d,successResponses:p,errorResponses:m,errorStatusKeys:h,requestHeaders:_,errors:f,security:y})}return n}function L(e,t,n){let r=new Map,i=e=>{if(Array.isArray(e))for(let t of e){let e=h(t,n);if(!e)continue;let i=`${e.in}:${e.name}`;r.set(i,e)}};return i(e.parameters),i(t.parameters),Array.from(r.values())}function R(e){let t=[],n=e.match(/{([^}]+)}/g);if(n)for(let e of n){let n=e.slice(1,-1);t.push({name:n,type:`string`})}return t}function z(e,t){let n=fe(e);if(n){if(n.$ref){let e=r(n.$ref);return t?.get(e)||e}return`${s(o(e.operationId))}Request`}}function fe(e){let t=e?.requestBody?.content;if(!(!t||Object.keys(t).length===0))for(let e of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=t[e]?.schema;if(n)return n}}function B(e,t,n){let r=e.responses??{},i=new Map,a=[];for(let[e,t]of Object.entries(r)){let n=t?.content;if(!n||Object.keys(n).length===0){e===`204`||/^3\d\d$/.test(e)?i.set(e,`undefined`):I(e)&&a.push({code:e,schema:`undefined`});continue}let r=f(n),o=n[r]?.schema,s=m(r,o);if(!s){let t=ve(r,e);t&&(I(e)?a.push({code:e,schema:t}):/^2\d\d$/.test(e)&&i.set(e,t));continue}if(I(e)){a.push({code:e,schema:s});continue}/^2\d\d$/.test(e)&&i.set(e,s)}return{successResponse:ge(i,t,n),errors:_e(a,t,n),successResponses:me(i,t,n),errorResponses:he(a,t,n),errorStatusKeys:pe(a)}}function pe(e){if(e.length===0)return;let t={};for(let{code:n}of e)t[n]=F(n);return t}function me(e,t,n){if(e.size===0)return;let r={};for(let[i,a]of e)typeof a==`string`?r[i]=a:r[i]=V(a,`${s(o(t))}Status${i}`,n);return r}function he(e,t,n){if(e.length===0)return;let r={};for(let{code:i,schema:a}of e){let e=F(i);r[i]=V(a,`${s(o(t))}${s(e)}`,n)}return r}function ge(e,t,n){if(e.size===0)return;for(let r of[`200`,`201`,`204`]){let i=e.get(r);if(i)return typeof i==`string`?i:V(i,`${s(o(t))}Response`,n)}let[,r]=e.entries().next().value??[];if(r)return typeof r==`string`?r:V(r,`${s(o(t))}Response`,n)}function _e(e=[],t,n){if(!e.length)return;let r={};for(let{code:i,schema:a}of e){let e=F(i);r[e]=V(a,`${s(o(t))}${s(e)}`,n)}return r}function V(e,t,n){if(typeof e==`string`)return e;if(e.$ref){let t=r(e.$ref);return n?.get(t)||t}if(e.type===`array`&&e.items?.$ref){let t=r(e.items.$ref);return`z.array(${n?.get(t)||t})`}return e.allOf&&Array.isArray(e.allOf),t}function H(e){let t=[];for(let n of e??[])n.in===`header`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function U(e){let t=[];for(let n of e??[])n.in===`query`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function W(e,t){let n=e.security;if(Array.isArray(n))return n.length===0?[]:n;if(Array.isArray(t.security)&&t.security.length>0)return t.security}function G(e){switch(e){case`get`:case`put`:case`post`:case`delete`:case`options`:case`head`:case`patch`:case`trace`:return!0;default:return!1}}function ve(e,t){return t===`204`||/^3\d\d$/.test(t)?`undefined`:e in d?d[e]:`unknown`}function ye(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.requestBody;if(i&&i.content){let e=i.content,r=be(e);if(!r)continue;let a=`${s(o(t.operationId))}Request`;(!r.$ref||r.allOf||r.oneOf||r.anyOf)&&n.set(a,r)}}return n}function be(e){for(let t of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=e[t]?.schema;if(n)return n}}function xe(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.responses||{};for(let[e,r]of Object.entries(i))if(/^2\d\d$/.test(e)&&r.content){let e=r.content,i=f(e),a=e[i]?.schema,c=m(i,a);if(!c)continue;let l=`${s(o(t.operationId))}Response`;(!c.$ref||c.allOf||c.oneOf||c.anyOf)&&n.set(l,c)}}return n}function Se(e,t,n,r,i){let a=ye(t,n);if(a.size>0){e.push(`// Generated Request Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function Ce(e,t,n,r,i){let a=xe(t,n);if(a.size>0){e.push(`// Generated Response Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function we(){let e=[];return e.push(`// Generated helper types for Zenko`),e.push(`// This file provides type definitions for operation objects and path functions`),e.push(``),e.push(`export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string`),e.push(``),e.push(`export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"`),e.push(``),e.push(`export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult`),e.push(``),e.push(`export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)`),e.push(``),e.push(`export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(``),e.push(`export type SecurityRequirement = Readonly<Record<string, readonly string[]>>`),e.push(``),e.push(`export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``),e.join(`
3
+ `)}function Te(e){return e===void 0?{open:!1,prefix:`Unknown:`}:typeof e==`boolean`||Array.isArray(e)?{open:e,prefix:`Unknown:`}:{open:e.open??!1,prefix:e.unknownPrefix??`Unknown:`}}function K(e,n={}){let r=[],s=new Set,{strictDates:c=!1,strictNumeric:l=!1,dateTimeOffset:u=!0,operationIds:d,openEnums:f=!1}=n,p=Oe({...n.types,operationTypeSuffix:n.types?.operationTypeSuffix??`Operation`}),m=Te(f),h={strictDates:c,strictNumeric:l,dateTimeOffset:u,optionalType:p.optionalType,openEnums:m.open,openEnumPrefix:m.prefix};r.push(`import { z } from "zod";`);let g=new Map;if(e.components?.schemas)for(let t of Object.keys(e.components.schemas))g.set(t,o(t));let v=de(e,g);if(d&&d.length>0){let e=new Set(d);v=v.filter(t=>e.has(t.operationId))}if(ke(r,p,v),r.push(``),e.components?.schemas){r.push(`// Generated Zod Schemas`),r.push(``);let n=d&&d.length>0?new Set(_(v,e)):new Set(Object.keys(e.components.schemas)),i=t(e.components.schemas).filter(e=>n.has(e));for(let t of i){let n=e.components.schemas[t],i=g.get(t);r.push(b(i,n,s,h,g,e.components.schemas)),r.push(``),r.push(`export type ${i} = z.infer<typeof ${i}>;`),r.push(``)}}r.push(`// Path Functions`),r.push(`export const paths = {`);for(let e of v){let t=e.pathParams.map(e=>e.name).length>0,n=e.queryParams.length>0,s=o(e.operationId);if(!t&&!n){r.push(` ${a(s)}: () => "${e.path}",`);continue}let c=e=>{if(i(e))return e;let t=o(e);return i(t)||(t=`_${t}`),t},l=[],u=[];for(let t of e.pathParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}: string`);for(let t of e.queryParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}${t.required?``:`?`}: ${Ie(t)}`);let d=!t&&n&&e.queryParams.every(e=>!e.required),f=`${l.length?`{ ${l.join(`, `)} }`:`{}`}: { ${u.join(`, `)} }${d?` = {}`:``}`,p=e.path.replace(/{([^}]+)}/g,(e,t)=>`\${${c(t)}}`);if(!n){r.push(` ${a(s)}: (${f}) => \`${p}\`,`);continue}r.push(` ${a(s)}: (${f}) => {`),r.push(` const params = new URLSearchParams()`);for(let t of e.queryParams){let e=i(t.name)?t.name:c(o(t.name)),n=t.schema??{};if(n?.type===`array`){let i=Re(n.items??{},`value`);t.required?(r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`)):(r.push(` if (${e} !== undefined) {`),r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`),r.push(` }`));continue}let a=Re(n,e);t.required?r.push(` params.set("${t.name}", ${a})`):(r.push(` if (${e} !== undefined) {`),r.push(` params.set("${t.name}", ${a})`),r.push(` }`))}r.push(` const _searchParams = params.toString()`),r.push(` return \`${p}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),r.push(` },`)}r.push(`} as const;`),r.push(``),r.push(`// Header Schemas`),r.push(`export const headerSchemas = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: z.object({}),`);continue}let n=e.requestHeaders.map(e=>{let t=Fe(e),n=e.required?t:y(t,h.optionalType);return` ${a(e.name)}: ${n},`}).join(`
4
+ `);r.push(` ${a(t)}: z.object({`),r.push(n),r.push(` }),`)}r.push(`} as const;`),r.push(``),r.push(`// Header Functions`),r.push(`export const headers = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: () => ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse({}),`);continue}r.push(` ${a(t)}: (params: z.input<${i(t)?`typeof headerSchemas.${t}`:`(typeof headerSchemas)[${a(t)}]`}>) => {`),r.push(` return ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse(params)`),r.push(` },`)}if(r.push(`} as const;`),r.push(``),e.components?.securitySchemes&&Object.keys(e.components.securitySchemes).length>0){r.push(`// Security Schemes`),r.push(`export const securitySchemes = {`);for(let[t,n]of Object.entries(e.components.securitySchemes)){let e=n;r.push(` ${a(t)}: {`),r.push(` type: ${JSON.stringify(e.type)},`),e.type===`http`?(r.push(` scheme: ${JSON.stringify(String(e.scheme).toLowerCase())},`),e.bearerFormat&&r.push(` bearerFormat: ${JSON.stringify(e.bearerFormat)},`)):e.type===`apiKey`?(r.push(` name: ${JSON.stringify(e.name)},`),r.push(` in: ${JSON.stringify(e.in)},`)):e.type===`oauth2`?r.push(` flows: ${JSON.stringify(e.flows)},`):e.type===`openIdConnect`&&r.push(` openIdConnectUrl: ${JSON.stringify(e.openIdConnectUrl)},`),r.push(` },`)}r.push(`} as const;`),r.push(``)}Se(r,v,e,g,h),Ce(r,v,e,g,h),Ae(r,v,p),r.push(`// Operation Objects`);for(let e of v){let t=o(e.operationId),n=p.emit?`: ${Y(t,p.operationTypeSuffix)}`:``;if(r.push(`export const ${t}${n} = {`),r.push(` method: "${e.method}",`),r.push(` path: paths.${t},`),q(r,`request`,e.requestType),q(r,`response`,e.responseType),e.requestHeaders&&e.requestHeaders.length>0&&r.push(` headers: headers.${t},`),e.security!==void 0)if(e.security.length===0)r.push(` security: [],`);else{let t=e.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${JSON.stringify(t)}`).join(`, `)} }`);r.push(` security: [${t.join(`, `)}],`)}e.errors&&J(e.errors)&&De(r,`errors`,e.errors),r.push(`} as const;`),r.push(``)}je(r,v);let x={output:r.join(`
5
+ `)};return p.emit&&p.helpers===`file`&&p.helpersOutput&&(x.helperFile={path:p.helpersOutput,content:we()}),x}function Ee(e,t={}){return K(e,t).output}function q(e,t,n){n&&e.push(` ${t}: ${n},`)}function De(e,t,n){if(!(!n||Object.keys(n).length===0)){e.push(` ${t}: {`);for(let[t,r]of Object.entries(n))e.push(` ${a(t)}: ${r},`);e.push(` },`)}}function J(e){return!!(e&&Object.keys(e).length>0)}function Oe(e){let t=e?.operationTypeSuffix??`Operation`;if(t!==``&&!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(t))throw Error(`Invalid operationTypeSuffix "${t}": must be a valid TypeScript identifier suffix (letters, digits, underscores, or $). Use "" for no suffix.`);return{emit:e?.emit??!0,helpers:e?.helpers??`package`,helpersOutput:e?.helpersOutput??`./zenko-types`,treeShake:e?.treeShake??!0,optionalType:e?.optionalType??`optional`,operationTypeSuffix:t}}function Y(e,t){return`${s(e)}${t}`}function ke(e,t,n){if(t.emit)switch(t.helpers){case`package`:if(t.treeShake){let t=l(c(n),`package`);t&&e.push(t)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";`);return;case`file`:if(t.treeShake){let r=l(c(n),`file`,t.helpersOutput);r&&e.push(r)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${t.helpersOutput}";`);return;case`inline`:e.push(`type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;`),e.push(`type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";`),e.push(`type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;`),e.push(`type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);`),e.push(`type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(`type SecurityRequirement = Readonly<Record<string, readonly string[]>>;`),e.push(`type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``)}}function Ae(e,t,n){if(n.emit){e.push(`// Operation Types`);for(let r of t){let t=o(r.operationId),s=Y(t,n.operationTypeSuffix),c=r.requestHeaders?.length?i(t)?`typeof headers.${t}`:`(typeof headers)[${a(t)}]`:`undefined`,l=Q(r.requestType),u=Q(r.responseType),d=Me(r.errors),f=r.security===void 0?`undefined`:r.security.length===0?`readonly []`:`readonly [${r.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`readonly ${a(e)}: readonly ${JSON.stringify(t)}`).join(`; `)} }`).join(`, `)}]`;e.push(`export type ${s} = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${i(t)?`typeof paths.${t}`:`(typeof paths)[${a(t)}]`},`),e.push(` ${l},`),e.push(` ${u},`),e.push(` ${c},`),e.push(` ${d},`),e.push(` ${f}`),e.push(`>;`),e.push(``)}}}function je(e,t){e.push(`// Operation Metadata`),e.push(`export const operationMetadata = {`);for(let n of t){let t=o(n.operationId);e.push(` ${a(t)}: {`),e.push(` method: ${JSON.stringify(n.method)},`),e.push(` path: ${JSON.stringify(n.path)},`),n.successResponses&&Object.keys(n.successResponses).length>0&&e.push(` successResponses: ${JSON.stringify(n.successResponses)},`),n.errorResponses&&Object.keys(n.errorResponses).length>0&&e.push(` errorResponses: ${JSON.stringify(n.errorResponses)},`),n.errorStatusKeys&&Object.keys(n.errorStatusKeys).length>0&&e.push(` errorStatusKeys: ${JSON.stringify(n.errorStatusKeys)},`),e.push(` },`)}e.push(`} as const;`),e.push(``)}function Me(e){return!e||!J(e)?`OperationErrors`:`OperationErrors<${Ne(e)}>`}function Ne(e){return!e||Object.keys(e).length===0?`unknown`:`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${Pe(t)}`).join(`; `)} }`}const X=new Set([`any`,`unknown`,`never`,`void`,`null`,`undefined`,`string`,`number`,`boolean`,`bigint`,`symbol`]),Z=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Q(e){if(!e)return`undefined`;let t=e.trim();if(t===`undefined`)return`undefined`;if(X.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${Q(n[1])}>`:Z.test(t)?`typeof ${t}`:t}function Pe(e){if(!e)return`unknown`;let t=e.trim();if(X.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${Pe(n[1])}>`:Z.test(t)?`typeof ${t}`:t}function Fe(e){let t=e.schema??{};switch(t.type){case`integer`:case`number`:return`z.coerce.number()`;case`boolean`:return`z.coerce.boolean()`;case`array`:{let e=t.items??{type:`string`};return`z.array(${e.type===`integer`||e.type===`number`?`z.coerce.number()`:e.type===`boolean`?`z.coerce.boolean()`:`z.string()`})`}default:return`z.string()`}}function Ie(e){return Le(e.schema)}function Le(e){if(!e)return`string`;if(e.type===`array`)return`Array<${Le(e.items)}>`;switch(e.type){case`integer`:case`number`:return`number`;case`boolean`:return`boolean`;default:return`string`}}function Re(e,t){if(!e)return`String(${t})`;switch(e.type){case`integer`:case`number`:return`String(${t})`;case`boolean`:return`${t} ? "true" : "false"`;default:return`String(${t})`}}const ze=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function Be(e){return e.split(`/`).filter(Boolean).map(e=>e.startsWith(`{`)&&e.endsWith(`}`)?`:${e.slice(1,-1)}`:e)}function Ve(e){let t={};for(let[n,r]of Object.entries(e)){let e=Be(r.path),i=r.method.toLowerCase();if(!ze.has(i))return{ok:!1,error:Error(`Unsupported method ${r.method} for ${n}`)};let a=He(t,e,i,n);if(!a.ok)return a}return{ok:!0,value:t}}function He(e,t,n,r){if(t.length===0){let t=e,i=t!==void 0&&typeof t==`object`&&t&&!Array.isArray(t)?{...t}:{};if(i[n]!==void 0){let e=`Duplicate ${n} on root for ${r} vs `,t=JSON.stringify(i[n]);return{ok:!1,error:Error(e+t)}}i[n]=r;for(let t of Object.keys(e))delete e[t];return Object.assign(e,i),{ok:!0,value:void 0}}let i=e;for(let e=0;e<t.length;e+=1){let a=t[e];if(e===t.length-1){let e=i[a],t=e!==void 0&&typeof e==`object`&&e&&!Array.isArray(e)?{...e}:{};if(t[n]!==void 0){let e=`Duplicate ${n} on ${a} for ${r} vs `,i=JSON.stringify(t[n]);return{ok:!1,error:Error(e+i)}}t[n]=r,i[a]=t}else{let e=i[a];if(e!==void 0&&typeof e!=`object`&&e!==null&&!Array.isArray(e))return{ok:!1,error:Error(`TreatyRouteTree conflict at segment ${JSON.stringify(a)}: cannot add nested path for ${n} (${r}); existing value is not an object: ${JSON.stringify(e)}`)};(e===void 0||typeof e!=`object`||!e||Array.isArray(e))&&(i[a]={}),i=i[a]}}return{ok:!0,value:void 0}}function Ue(e){return We(e,1)}function We(e,t){let n=` `.repeat(t),r=[];for(let[i,o]of Object.entries(e)){let e=a(i);typeof o==`string`?r.push(`${n}${e}: ${o},`):o&&typeof o==`object`&&!Array.isArray(o)&&(r.push(`${n}${e}: {`),r.push(We(o,t+1)),r.push(`${n}},`))}return r.join(`
6
+ `)}function $(e,t){let n=Ve(e);if(!n.ok)throw n.error;let r=Object.keys(e).sort(),i=Ue(n.value),a=JSON.stringify(e);return[`import {`,` createTreatyClient,`,` type TreatyOperationsClient,`,` type TreatyOperationMeta,`,` type TreatyRouteTreeClient,`,`} from "zenko/treaty";`,`import { ${r.join(`, `)} } from ${JSON.stringify(t.importPath)};`,``,`export const operations = {`,r.map(e=>` ${e},`).join(`
7
+ `),`} as const;`,``,`export const operationMetadata = ${a} as const satisfies Record<keyof typeof operations, TreatyOperationMeta>;`,``,`export const treatyRoutes = {`,i,`};`,``,`export function createClient(`,` baseUrl: string,`,` init?: { fetch?: typeof fetch }`,`): TreatyOperationsClient<typeof operations, typeof operationMetadata> & {`,` /**`,` * Nested path aliases for Eden-style chaining. Lighter runtime than`," * `operations` (no operationMetadata-aware Zod / specStatus handling).",` */`,` $routes: TreatyRouteTreeClient<typeof treatyRoutes>;`,`} {`,` const client = createTreatyClient({`,` baseUrl,`,` operations,`,` operationMetadata,`,` options: { fetch: init?.fetch },`,` })`,` const routes = createTreatyClient({`,` baseUrl,`,` routes: treatyRoutes,`,` fetch: init?.fetch,`,` })`,` return Object.assign(client, { $routes: routes })`,`}`,``].join(`
8
+ `)}async function Ge(t){let n=await import((0,e.pathToFileURL)(t.inputFile).href);if(!n.operationMetadata)throw Error(`Missing operationMetadata export in ${t.inputFile} — regenerate with the latest Zenko`);let r=n.operationMetadata;return $(r,{importPath:t.importPath})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Ge}});
9
+ //# sourceMappingURL=treaty-generator-B-b5pZGF.cjs.map
@@ -0,0 +1,9 @@
1
+ import{pathToFileURL as e}from"node:url";function t(e){let t=new Set,r=new Set,i=[],a=o=>{if(t.has(o)||r.has(o))return;r.add(o);let s=e[o],c=n(s);for(let t of c)e[t]&&a(t);r.delete(o),t.add(o),i.push(o)};for(let t of Object.keys(e))a(t);return i}function n(e){let t=[],n=e=>{if(!(typeof e!=`object`||!e)){if(e.$ref&&typeof e.$ref==`string`){let n=r(e.$ref);t.push(n);return}if(Array.isArray(e))e.forEach(n);else{if(e.mapping&&typeof e.mapping==`object`)for(let n of Object.values(e.mapping))typeof n==`string`&&t.push(r(n));Object.values(e).forEach(n)}}};return n(e),[...new Set(t)]}function r(e){return(e.split(`/`).pop()||`Unknown`).replace(/\.(yml|yaml)$/i,``)}function i(e){if(!e)return!1;let t=e.at(0);return t===void 0||!/[a-zA-Z_$]/.test(t)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(`abstract.arguments.await.boolean.break.byte.case.catch.char.class.const.continue.debugger.default.delete.do.double.else.enum.eval.export.extends.false.final.finally.float.for.function.goto.if.implements.import.in.instanceof.int.interface.let.long.native.new.null.package.private.protected.public.return.short.static.super.switch.synchronized.this.throw.throws.transient.true.try.typeof.var.void.volatile.while.with.yield.async`.split(`.`)).has(e)}function a(e){return i(e)?e:`"${e}"`}function o(e){return e.replace(/-([a-zA-Z])/g,(e,t)=>t.toUpperCase()).replace(/-+$/,``)}function s(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e){let t={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(t.usesOperationDefinition=!0);for(let n of e)n.errors&&u(n.errors)&&(t.usesOperationErrors=!0);return e.length>0&&!t.usesOperationErrors&&e.some(e=>!e.errors||!u(e.errors))&&(t.usesOperationErrors=!0),t}function l(e,t,n){let r=[];if(e.usesHeaderFn&&r.push(`HeaderFn`),e.usesOperationDefinition&&r.push(`OperationDefinition`),e.usesOperationErrors&&r.push(`OperationErrors`),r.length===0)return``;let i=t===`package`?`"zenko"`:`"${n}"`;return`import type { ${r.join(`, `)} } from ${i};`}function u(e){return!!(e&&Object.keys(e).length>0)}const d={"application/json":`unknown`,"text/csv":`string`,"text/plain":`string`,"application/octet-stream":`unknown`,"application/pdf":`unknown`};function f(e){let t=Object.keys(e);if(t.includes(`application/json`))return`application/json`;for(let e of t)if(e in d)return e;return t[0]||``}function p(e){let t=e.toLowerCase().split(`;`)[0]?.trim();return t?!!(t.startsWith(`text/`)||t===`application/xml`||t.startsWith(`application/`)&&t.endsWith(`+xml`)):!1}function m(e,t){if(!t||!p(e)||t.$ref)return t;let n=t.nullable===!0?{nullable:!0}:{};return t.enum?{type:`string`,enum:t.enum,...n}:{type:`string`,...n}}function h(e,t){if(e){if(e.$ref){let n=r(e.$ref),i=t.components?.parameters?.[n];if(!i)return;let{$ref:a,...o}=e;return{...i,...o}}return e}}function g(e){let t=new Map;for(let[,n]of Object.entries(e.paths||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}for(let[,n]of Object.entries(e.webhooks||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}return t}function _(e,t){let i=new Set,a=new Map,o=e=>{if(!e)return[];if(a.has(e))return a.get(e)??[];let t=n(e);return a.set(e,t),t},s=g(t);for(let n of e){let e=s.get(n.operationId);if(!e)continue;let a=e.requestBody?.content?.[`application/json`]?.schema;if(a?.$ref){let e=r(a.$ref);i.add(e)}else if(a){let e=o(a);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}let c=e.responses||{};for(let[,e]of Object.entries(c)){let n=e?.content;if(!n)continue;let a=f(n),s=n[a]?.schema,c=m(a,s);if(c?.$ref){let e=r(c.$ref);i.add(e)}else if(c){let e=o(c);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}}for(let e of n.queryParams){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}for(let e of n.requestHeaders||[]){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}let l=e.parameters||[];for(let e of l){let n=h(e,t);if(n?.schema?.$ref){let e=r(n.schema.$ref);i.add(e)}if(n?.schema?.items?.$ref){let e=r(n.schema.items.$ref);i.add(e)}}}let c=new Set,l=Array.from(i);for(;l.length>0;){let e=l.pop();if(c.has(e))continue;c.add(e);let n=t.components?.schemas?.[e];if(!n)continue;let r=o(n);for(let e of r)t.components?.schemas?.[e]&&!c.has(e)&&(i.add(e),l.push(e))}return i}function v(e,t){return t===!0?!0:Array.isArray(t)?t.includes(e):!1}function y(e,t){switch(t){case`optional`:return`${e}.optional()`;case`nullable`:return`${e}.nullable()`;case`nullish`:return`${e}.nullish()`}}function b(e,t,n,r,i,a){if(n.has(e))return``;if(n.add(e),t.enum){let n=t.enum.map(e=>`"${e}"`).join(`, `);if(v(e,r.openEnums)){let t=r.openEnumPrefix;return`const ${e}Known = [${n}] as const;\nexport const ${e} = z.enum(${e}Known).or(\n z.string().transform((v): \`${t}\${string}\` => \`${t}\${v}\`)\n);`}return`export const ${e} = z.enum([${n}]);`}if(t.allOf&&Array.isArray(t.allOf)){let n=T(t),o=D(n,a),s=n.map(t=>j(t,r,i,a,e,void 0,o));if(s.length===0)return`export const ${e} = z.object({});`;if(s.length===1)return`export const ${e} = ${s[0]};`;let c=n.every(e=>k(e,a))?`merge`:`and`;return`export const ${e} = ${s[0]}${s.slice(1).map(e=>`.${c}(${e})`).join(``)};`}if(t.type===`object`||t.properties)return`export const ${e} = ${M(t,r,i,a,e)};`;if(t.type===`array`){let n=t.items??{type:`unknown`},o=j(n,r,i,a,e),s=r.strictNumeric||t.minItems!==void 0||t.maxItems!==void 0||t.uniqueItems===!0;return`export const ${e} = ${P(t,`z.array(${o})`,n,s)};`}return`export const ${e} = ${j(t,r,i,a,e,e)};`}function x(e,t,n,r,i){let a=e.map(e=>j(e,t,n,r,i));return a.length===0?`z.unknown()`:a.length===1?a[0]??`z.unknown()`:`z.union([${a.join(`, `)}])`}function S(e){return e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}function C(e,t){if(!e?.$ref)return e;let n=r(e.$ref);return t?.[n]??e}function w(e){return[`$ref`,`type`,`properties`,`required`,`additionalProperties`,`items`,`enum`,`const`,`oneOf`,`anyOf`,`not`].some(t=>e?.[t]!==void 0)}function T(e){let t=Array.isArray(e.allOf)?[...e.allOf]:[],n={...e};return delete n.allOf,w(n)&&t.push(n),t}function E(e,t,n=new Set){let r=C(e,t);if(!r||typeof r!=`object`||n.has(r))return[];n.add(r);let i=new Set(Array.isArray(r.required)?r.required:[]);if(Array.isArray(r.allOf))for(let e of T(r))for(let r of E(e,t,n))i.add(r);return[...i]}function D(e,t){let n=new Set;for(let r of e)for(let e of E(r,t))n.add(e);return n}function O(e,t,n,i,a=new Set){if(!e||a.has(e))return!1;if(a.add(e),e.$ref){let o=r(e.$ref);if((i?.get(o)||o)===t)return!0;let s=n?.[o];if(s)return O(s,t,n,i,a)}return Array.isArray(e.allOf)?e.allOf.some(e=>O(e,t,n,i,a)):Array.isArray(e.oneOf)?e.oneOf.some(e=>O(e,t,n,i,a)):Array.isArray(e.anyOf)?e.anyOf.some(e=>O(e,t,n,i,a)):e.not?O(e.not,t,n,i,a):e.items?O(e.items,t,n,i,a):e.properties?Object.values(e.properties).some(e=>O(e,t,n,i,a)):e.additionalProperties&&typeof e.additionalProperties==`object`?O(e.additionalProperties,t,n,i,a):!1}function k(e,t){let n=C(e,t);return n?n.allOf&&Array.isArray(n.allOf)?T(n).every(e=>k(e,t)):n.type===`object`||n.properties!==void 0||n.additionalProperties!==void 0:!1}function ee(e){let t=new Map;if(!e?.mapping)return t;for(let[n,i]of Object.entries(e.mapping)){if(typeof i!=`string`)continue;let e=r(i),a=t.get(e);if(a){a.values.includes(n)||a.values.push(n);continue}t.set(e,{ref:i,values:[n]})}return t}function A(e,t,n,i=new Set){if(!e||typeof e!=`object`||i.has(e))return[];if(i.add(e),e.$ref&&typeof e.$ref==`string`){let a=r(e.$ref),o=n?.[a];return o?A(o,t,n,i):[]}let a=[],o=e.properties?.[t];if(o){let e=o.const;e!==void 0&&S(e)?a.push(e):Array.isArray(o.enum)&&o.enum?.length===1&&S(o.enum?.[0])&&a.push(o.enum?.[0])}if(Array.isArray(e.allOf))for(let r of e.allOf)a.push(...A(r,t,n,i));return Array.from(new Set(a))}function te(e,t,n){return{allOf:[e,{type:`object`,properties:{[t]:{const:n}},required:[t]}]}}function ne(e,t,n,i){let a=new Set;for(let t of e)t?.$ref&&a.add(r(t.$ref));let o=[],s=!1;for(let a of e){let e=[];if(a?.$ref){let o=r(a.$ref),s=n.get(o);s?.values.length&&e.push(...s.values),e.push(...A(a,t,i))}else e.push(...A(a,t,i));let c=Array.from(new Set(e));if(c.length===0){s=!0,o.push(a);continue}for(let e of c)o.push(te(a,t,e))}for(let[e,r]of n.entries()){if(a.has(e))continue;let n={$ref:r.ref};for(let e of r.values)o.push(te(n,t,e))}return{schemas:o,hasUnmapped:s}}function re(e,t,n,r,i,a,o){let{schemas:s,hasUnmapped:c}=ne(e,t,o??new Map,i),l=s.map(e=>j(e,n,r,i,a));return l.length===0?`z.unknown()`:l.length===1?l[0]??`z.unknown()`:c?`z.union([${l.join(`, `)}])`:`z.discriminatedUnion(${JSON.stringify(t)}, [${l.join(`, `)}])`}function j(e,t,n,i,a,o,s){if(e.$ref){let t=r(e.$ref),o=n?.get(t)||t;return a&&(o===a||O(i?.[t],a,i,n))?`z.lazy((): z.ZodType => ${o})`:o}if(e.const!==void 0&&S(e.const))return`z.literal(${JSON.stringify(e.const)})`;if(e.enum)return e.enum.length===1?`z.literal(${JSON.stringify(e.enum[0])})`:`z.enum([${e.enum.map(e=>`"${e}"`).join(`, `)}])`;if(e.not){let r=e.not,o={...e};delete o.not;let s=w(o)?j(o,t,n,i,a):`z.any()`;return r?.type===`string`&&r.maxLength===0?`${s}.refine((value) => typeof value !== "string" || value.length > 0, { message: "Value must not be empty" })`:`${s}.refine((value) => !${j(r,t,n,i,a)}.safeParse(value).success, { message: "Value must not match schema" })`}if(e.allOf&&Array.isArray(e.allOf)){let r=T(e),s=D(r,i),c=r.map(e=>j(e,t,n,i,a,o,s));if(c.length===0)return`z.object({})`;if(c.length===1)return c[0]??`z.object({})`;let l=r.every(e=>k(e,i))?`merge`:`and`;return`${c[0]}${c.slice(1).map(e=>`.${l}(${e})`).join(``)}`}if(e.oneOf&&Array.isArray(e.oneOf)){if(e.discriminator?.propertyName){let r=ee(e.discriminator);return re(e.oneOf,e.discriminator.propertyName,t,n,i,a,r)}return x(e.oneOf,t,n,i,a)}if(e.anyOf&&Array.isArray(e.anyOf))return x(e.anyOf,t,n,i,a);if(e.type===`object`||e.properties||e.allOf)return M(e,t,n,i,a,s);if(Array.isArray(e.type))return e.type.length===0?`z.unknown()`:e.type.length===1?j({...e,type:e.type[0]},t,n,i,a,o,s):`z.union([${e.type.map(r=>j({...e,type:r},t,n,i,a,o,s)).join(`, `)}])`;switch(e.type){case`string`:return ae(e,t,o);case`boolean`:return`z.boolean()`;case`array`:{let r=e.items??{type:`unknown`},o=j(r,t,n,i,a),s=t.strictNumeric||e.minItems!==void 0||e.maxItems!==void 0||e.uniqueItems===!0;return P(e,`z.array(${o})`,r,s)}case`null`:return`z.null()`;case`number`:return N(e,t);case`integer`:return se(e,t);default:return`z.unknown()`}}function ie(e,t){if(!e||!t)return new Set;let n=new Set;for(let i of Object.values(e)){if(!i||typeof i!=`object`)continue;let e=i.discriminator?.propertyName;if(!e||!Array.isArray(i.oneOf))continue;let a=i.oneOf.some(e=>e?.$ref&&r(e.$ref)===t),o=Object.values(i.discriminator?.mapping??{}).some(e=>typeof e==`string`&&r(e)===t);(a||o)&&n.add(e)}return n}function M(e,t,n,r,i,o){let s=[],c=ie(r,i),l=new Set([...e.required??[],...o?[...o]:[]]);for(let[o,u]of Object.entries(e.properties||{})){let e=l.has(o)||c.has(o),d=j(u,t,n,r,i),f=y(d,t.optionalType),p=t.optionalType===`nullable`?f:oe(f,u),m=e?d:p;s.push(` ${a(o)}: ${m},`)}let u=s.length===0?`z.object({})`:`z.object({\n${s.join(`
2
+ `)}\n})`;return e.additionalProperties===void 0?u:e.additionalProperties===!1?`${u}.strict()`:e.additionalProperties===!0?`${u}.passthrough()`:`${u}.catchall(${j(e.additionalProperties,t,n,r,i)})`}function ae(e,t,n){if(e.format===`binary`)return`(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))`;if(t.strictDates)switch(e.format){case`date-time`:return t.dateTimeOffset===!0||Array.isArray(t.dateTimeOffset)&&n!==void 0&&t.dateTimeOffset.includes(n)?`z.string().datetime({ offset: true })`:`z.string().datetime()`;case`date`:return`z.string().date()`;case`time`:return`z.string().time()`;case`duration`:return`z.string().duration()`}let r=`z.string()`;switch(t.strictNumeric&&(typeof e.minLength==`number`&&(r+=`.min(${e.minLength})`),typeof e.maxLength==`number`&&(r+=`.max(${e.maxLength})`),e.pattern&&(r+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case`uuid`:return`${r}.uuid()`;case`email`:return`${r}.email()`;case`uri`:case`url`:return`${r}.url()`;case`ipv4`:return`${r}.ip({ version: "v4" })`;case`ipv6`:return`${r}.ip({ version: "v6" })`;default:return r}}function oe(e,t){return!t||t.default===void 0||t.default===null&&!(e.includes(`.nullable()`)||e.includes(`.nullish()`)||t.type===`null`||Array.isArray(t.type)&&t.type.includes(`null`))?e:`${e}.default(${JSON.stringify(t.default)})`}function N(e,t){let n=`z.number()`;return t.strictNumeric&&(n=le(e,n),typeof e.multipleOf==`number`&&e.multipleOf!==0&&(n+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),n}function se(e,t){let n=N(e,t);return n+=`.int()`,n}function P(e,t,n,r){return r?(typeof e.minItems==`number`&&(t+=`.min(${e.minItems})`),typeof e.maxItems==`number`&&(t+=`.max(${e.maxItems})`),e.uniqueItems&&ce(n)&&(t+=`.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })`),t):t}function ce(e){return e?.$ref?!1:new Set([`string`,`number`,`integer`,`boolean`]).has(e?.type)}function le(e,t){return typeof e.minimum==`number`?e.exclusiveMinimum===!0?t+=`.gt(${e.minimum})`:t+=`.min(${e.minimum})`:typeof e.exclusiveMinimum==`number`&&(t+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum==`number`?e.exclusiveMaximum===!0?t+=`.lt(${e.maximum})`:t+=`.max(${e.maximum})`:typeof e.exclusiveMaximum==`number`&&(t+=`.lt(${e.exclusiveMaximum})`),t}const ue={400:`badRequest`,401:`unauthorized`,402:`paymentRequired`,403:`forbidden`,404:`notFound`,405:`methodNotAllowed`,406:`notAcceptable`,407:`proxyAuthenticationRequired`,408:`requestTimeout`,409:`conflict`,410:`gone`,411:`lengthRequired`,412:`preconditionFailed`,413:`payloadTooLarge`,414:`uriTooLong`,415:`unsupportedMediaType`,416:`rangeNotSatisfiable`,417:`expectationFailed`,418:`imATeapot`,421:`misdirectedRequest`,422:`unprocessableEntity`,423:`locked`,424:`failedDependency`,425:`tooEarly`,426:`upgradeRequired`,428:`preconditionRequired`,429:`tooManyRequests`,431:`requestHeaderFieldsTooLarge`,451:`unavailableForLegalReasons`,500:`internalServerError`,501:`notImplemented`,502:`badGateway`,503:`serviceUnavailable`,504:`gatewayTimeout`,505:`httpVersionNotSupported`,506:`variantAlsoNegotiates`,507:`insufficientStorage`,508:`loopDetected`,510:`notExtended`,511:`networkAuthenticationRequired`};function F(e){if(e===`default`)return`defaultError`;let t=e.trim(),n=ue[t];if(n)return n;if(/^\d{3}$/.test(t))return`status${t}`;let r=t.toLowerCase().replace(/[^a-z0-9]+/g,` `).trim();if(!r)return`unknownError`;let[i,...a]=r.split(/\s+/),o=i+a.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``);return o?/^[a-zA-Z_$]/.test(o)?o:`status${o.charAt(0).toUpperCase()}${o.slice(1)}`:`unknownError`}function I(e){if(e===`default`)return!0;let t=Number(e);return Number.isInteger(t)?t>=400:!1}function de(e,t){let n=[];if(e.paths)for(let[r,i]of Object.entries(e.paths))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!G(s)||!o.operationId)continue;let c=R(r),l=z(o,t),{successResponse:u,errors:d,successResponses:f,errorResponses:p,errorStatusKeys:m}=B(o,o.operationId,t),h=L(i,o,e),g=H(h),_=U(h),v=W(o,e);n.push({operationId:o.operationId,path:r,method:s,pathParams:c,queryParams:_,requestType:l,responseType:u,successResponses:f,errorResponses:p,errorStatusKeys:m,requestHeaders:g,errors:d,security:v})}if(e.webhooks)for(let[r,i]of Object.entries(e.webhooks))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!G(s)||!o.operationId)continue;let c=r,l=R(c),u=z(o,t),{successResponse:d,errors:f,successResponses:p,errorResponses:m,errorStatusKeys:h}=B(o,o.operationId,t),g=L(i,o,e),_=H(g),v=U(g),y=W(o,e);n.push({operationId:o.operationId,path:c,method:s,pathParams:l,queryParams:v,requestType:u,responseType:d,successResponses:p,errorResponses:m,errorStatusKeys:h,requestHeaders:_,errors:f,security:y})}return n}function L(e,t,n){let r=new Map,i=e=>{if(Array.isArray(e))for(let t of e){let e=h(t,n);if(!e)continue;let i=`${e.in}:${e.name}`;r.set(i,e)}};return i(e.parameters),i(t.parameters),Array.from(r.values())}function R(e){let t=[],n=e.match(/{([^}]+)}/g);if(n)for(let e of n){let n=e.slice(1,-1);t.push({name:n,type:`string`})}return t}function z(e,t){let n=fe(e);if(n){if(n.$ref){let e=r(n.$ref);return t?.get(e)||e}return`${s(o(e.operationId))}Request`}}function fe(e){let t=e?.requestBody?.content;if(!(!t||Object.keys(t).length===0))for(let e of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=t[e]?.schema;if(n)return n}}function B(e,t,n){let r=e.responses??{},i=new Map,a=[];for(let[e,t]of Object.entries(r)){let n=t?.content;if(!n||Object.keys(n).length===0){e===`204`||/^3\d\d$/.test(e)?i.set(e,`undefined`):I(e)&&a.push({code:e,schema:`undefined`});continue}let r=f(n),o=n[r]?.schema,s=m(r,o);if(!s){let t=ve(r,e);t&&(I(e)?a.push({code:e,schema:t}):/^2\d\d$/.test(e)&&i.set(e,t));continue}if(I(e)){a.push({code:e,schema:s});continue}/^2\d\d$/.test(e)&&i.set(e,s)}return{successResponse:ge(i,t,n),errors:_e(a,t,n),successResponses:me(i,t,n),errorResponses:he(a,t,n),errorStatusKeys:pe(a)}}function pe(e){if(e.length===0)return;let t={};for(let{code:n}of e)t[n]=F(n);return t}function me(e,t,n){if(e.size===0)return;let r={};for(let[i,a]of e)typeof a==`string`?r[i]=a:r[i]=V(a,`${s(o(t))}Status${i}`,n);return r}function he(e,t,n){if(e.length===0)return;let r={};for(let{code:i,schema:a}of e){let e=F(i);r[i]=V(a,`${s(o(t))}${s(e)}`,n)}return r}function ge(e,t,n){if(e.size===0)return;for(let r of[`200`,`201`,`204`]){let i=e.get(r);if(i)return typeof i==`string`?i:V(i,`${s(o(t))}Response`,n)}let[,r]=e.entries().next().value??[];if(r)return typeof r==`string`?r:V(r,`${s(o(t))}Response`,n)}function _e(e=[],t,n){if(!e.length)return;let r={};for(let{code:i,schema:a}of e){let e=F(i);r[e]=V(a,`${s(o(t))}${s(e)}`,n)}return r}function V(e,t,n){if(typeof e==`string`)return e;if(e.$ref){let t=r(e.$ref);return n?.get(t)||t}if(e.type===`array`&&e.items?.$ref){let t=r(e.items.$ref);return`z.array(${n?.get(t)||t})`}return e.allOf&&Array.isArray(e.allOf),t}function H(e){let t=[];for(let n of e??[])n.in===`header`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function U(e){let t=[];for(let n of e??[])n.in===`query`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function W(e,t){let n=e.security;if(Array.isArray(n))return n.length===0?[]:n;if(Array.isArray(t.security)&&t.security.length>0)return t.security}function G(e){switch(e){case`get`:case`put`:case`post`:case`delete`:case`options`:case`head`:case`patch`:case`trace`:return!0;default:return!1}}function ve(e,t){return t===`204`||/^3\d\d$/.test(t)?`undefined`:e in d?d[e]:`unknown`}function ye(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.requestBody;if(i&&i.content){let e=i.content,r=be(e);if(!r)continue;let a=`${s(o(t.operationId))}Request`;(!r.$ref||r.allOf||r.oneOf||r.anyOf)&&n.set(a,r)}}return n}function be(e){for(let t of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=e[t]?.schema;if(n)return n}}function xe(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.responses||{};for(let[e,r]of Object.entries(i))if(/^2\d\d$/.test(e)&&r.content){let e=r.content,i=f(e),a=e[i]?.schema,c=m(i,a);if(!c)continue;let l=`${s(o(t.operationId))}Response`;(!c.$ref||c.allOf||c.oneOf||c.anyOf)&&n.set(l,c)}}return n}function Se(e,t,n,r,i){let a=ye(t,n);if(a.size>0){e.push(`// Generated Request Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function Ce(e,t,n,r,i){let a=xe(t,n);if(a.size>0){e.push(`// Generated Response Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function we(){let e=[];return e.push(`// Generated helper types for Zenko`),e.push(`// This file provides type definitions for operation objects and path functions`),e.push(``),e.push(`export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string`),e.push(``),e.push(`export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"`),e.push(``),e.push(`export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult`),e.push(``),e.push(`export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)`),e.push(``),e.push(`export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(``),e.push(`export type SecurityRequirement = Readonly<Record<string, readonly string[]>>`),e.push(``),e.push(`export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``),e.join(`
3
+ `)}function Te(e){return e===void 0?{open:!1,prefix:`Unknown:`}:typeof e==`boolean`||Array.isArray(e)?{open:e,prefix:`Unknown:`}:{open:e.open??!1,prefix:e.unknownPrefix??`Unknown:`}}function K(e,n={}){let r=[],s=new Set,{strictDates:c=!1,strictNumeric:l=!1,dateTimeOffset:u=!0,operationIds:d,openEnums:f=!1}=n,p=Oe({...n.types,operationTypeSuffix:n.types?.operationTypeSuffix??`Operation`}),m=Te(f),h={strictDates:c,strictNumeric:l,dateTimeOffset:u,optionalType:p.optionalType,openEnums:m.open,openEnumPrefix:m.prefix};r.push(`import { z } from "zod";`);let g=new Map;if(e.components?.schemas)for(let t of Object.keys(e.components.schemas))g.set(t,o(t));let v=de(e,g);if(d&&d.length>0){let e=new Set(d);v=v.filter(t=>e.has(t.operationId))}if(ke(r,p,v),r.push(``),e.components?.schemas){r.push(`// Generated Zod Schemas`),r.push(``);let n=d&&d.length>0?new Set(_(v,e)):new Set(Object.keys(e.components.schemas)),i=t(e.components.schemas).filter(e=>n.has(e));for(let t of i){let n=e.components.schemas[t],i=g.get(t);r.push(b(i,n,s,h,g,e.components.schemas)),r.push(``),r.push(`export type ${i} = z.infer<typeof ${i}>;`),r.push(``)}}r.push(`// Path Functions`),r.push(`export const paths = {`);for(let e of v){let t=e.pathParams.map(e=>e.name).length>0,n=e.queryParams.length>0,s=o(e.operationId);if(!t&&!n){r.push(` ${a(s)}: () => "${e.path}",`);continue}let c=e=>{if(i(e))return e;let t=o(e);return i(t)||(t=`_${t}`),t},l=[],u=[];for(let t of e.pathParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}: string`);for(let t of e.queryParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}${t.required?``:`?`}: ${Ie(t)}`);let d=!t&&n&&e.queryParams.every(e=>!e.required),f=`${l.length?`{ ${l.join(`, `)} }`:`{}`}: { ${u.join(`, `)} }${d?` = {}`:``}`,p=e.path.replace(/{([^}]+)}/g,(e,t)=>`\${${c(t)}}`);if(!n){r.push(` ${a(s)}: (${f}) => \`${p}\`,`);continue}r.push(` ${a(s)}: (${f}) => {`),r.push(` const params = new URLSearchParams()`);for(let t of e.queryParams){let e=i(t.name)?t.name:c(o(t.name)),n=t.schema??{};if(n?.type===`array`){let i=Re(n.items??{},`value`);t.required?(r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`)):(r.push(` if (${e} !== undefined) {`),r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`),r.push(` }`));continue}let a=Re(n,e);t.required?r.push(` params.set("${t.name}", ${a})`):(r.push(` if (${e} !== undefined) {`),r.push(` params.set("${t.name}", ${a})`),r.push(` }`))}r.push(` const _searchParams = params.toString()`),r.push(` return \`${p}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),r.push(` },`)}r.push(`} as const;`),r.push(``),r.push(`// Header Schemas`),r.push(`export const headerSchemas = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: z.object({}),`);continue}let n=e.requestHeaders.map(e=>{let t=Fe(e),n=e.required?t:y(t,h.optionalType);return` ${a(e.name)}: ${n},`}).join(`
4
+ `);r.push(` ${a(t)}: z.object({`),r.push(n),r.push(` }),`)}r.push(`} as const;`),r.push(``),r.push(`// Header Functions`),r.push(`export const headers = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: () => ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse({}),`);continue}r.push(` ${a(t)}: (params: z.input<${i(t)?`typeof headerSchemas.${t}`:`(typeof headerSchemas)[${a(t)}]`}>) => {`),r.push(` return ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse(params)`),r.push(` },`)}if(r.push(`} as const;`),r.push(``),e.components?.securitySchemes&&Object.keys(e.components.securitySchemes).length>0){r.push(`// Security Schemes`),r.push(`export const securitySchemes = {`);for(let[t,n]of Object.entries(e.components.securitySchemes)){let e=n;r.push(` ${a(t)}: {`),r.push(` type: ${JSON.stringify(e.type)},`),e.type===`http`?(r.push(` scheme: ${JSON.stringify(String(e.scheme).toLowerCase())},`),e.bearerFormat&&r.push(` bearerFormat: ${JSON.stringify(e.bearerFormat)},`)):e.type===`apiKey`?(r.push(` name: ${JSON.stringify(e.name)},`),r.push(` in: ${JSON.stringify(e.in)},`)):e.type===`oauth2`?r.push(` flows: ${JSON.stringify(e.flows)},`):e.type===`openIdConnect`&&r.push(` openIdConnectUrl: ${JSON.stringify(e.openIdConnectUrl)},`),r.push(` },`)}r.push(`} as const;`),r.push(``)}Se(r,v,e,g,h),Ce(r,v,e,g,h),Ae(r,v,p),r.push(`// Operation Objects`);for(let e of v){let t=o(e.operationId),n=p.emit?`: ${Y(t,p.operationTypeSuffix)}`:``;if(r.push(`export const ${t}${n} = {`),r.push(` method: "${e.method}",`),r.push(` path: paths.${t},`),q(r,`request`,e.requestType),q(r,`response`,e.responseType),e.requestHeaders&&e.requestHeaders.length>0&&r.push(` headers: headers.${t},`),e.security!==void 0)if(e.security.length===0)r.push(` security: [],`);else{let t=e.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${JSON.stringify(t)}`).join(`, `)} }`);r.push(` security: [${t.join(`, `)}],`)}e.errors&&J(e.errors)&&De(r,`errors`,e.errors),r.push(`} as const;`),r.push(``)}je(r,v);let x={output:r.join(`
5
+ `)};return p.emit&&p.helpers===`file`&&p.helpersOutput&&(x.helperFile={path:p.helpersOutput,content:we()}),x}function Ee(e,t={}){return K(e,t).output}function q(e,t,n){n&&e.push(` ${t}: ${n},`)}function De(e,t,n){if(!(!n||Object.keys(n).length===0)){e.push(` ${t}: {`);for(let[t,r]of Object.entries(n))e.push(` ${a(t)}: ${r},`);e.push(` },`)}}function J(e){return!!(e&&Object.keys(e).length>0)}function Oe(e){let t=e?.operationTypeSuffix??`Operation`;if(t!==``&&!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(t))throw Error(`Invalid operationTypeSuffix "${t}": must be a valid TypeScript identifier suffix (letters, digits, underscores, or $). Use "" for no suffix.`);return{emit:e?.emit??!0,helpers:e?.helpers??`package`,helpersOutput:e?.helpersOutput??`./zenko-types`,treeShake:e?.treeShake??!0,optionalType:e?.optionalType??`optional`,operationTypeSuffix:t}}function Y(e,t){return`${s(e)}${t}`}function ke(e,t,n){if(t.emit)switch(t.helpers){case`package`:if(t.treeShake){let t=l(c(n),`package`);t&&e.push(t)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";`);return;case`file`:if(t.treeShake){let r=l(c(n),`file`,t.helpersOutput);r&&e.push(r)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${t.helpersOutput}";`);return;case`inline`:e.push(`type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;`),e.push(`type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";`),e.push(`type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;`),e.push(`type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);`),e.push(`type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(`type SecurityRequirement = Readonly<Record<string, readonly string[]>>;`),e.push(`type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``)}}function Ae(e,t,n){if(n.emit){e.push(`// Operation Types`);for(let r of t){let t=o(r.operationId),s=Y(t,n.operationTypeSuffix),c=r.requestHeaders?.length?i(t)?`typeof headers.${t}`:`(typeof headers)[${a(t)}]`:`undefined`,l=Q(r.requestType),u=Q(r.responseType),d=Me(r.errors),f=r.security===void 0?`undefined`:r.security.length===0?`readonly []`:`readonly [${r.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`readonly ${a(e)}: readonly ${JSON.stringify(t)}`).join(`; `)} }`).join(`, `)}]`;e.push(`export type ${s} = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${i(t)?`typeof paths.${t}`:`(typeof paths)[${a(t)}]`},`),e.push(` ${l},`),e.push(` ${u},`),e.push(` ${c},`),e.push(` ${d},`),e.push(` ${f}`),e.push(`>;`),e.push(``)}}}function je(e,t){e.push(`// Operation Metadata`),e.push(`export const operationMetadata = {`);for(let n of t){let t=o(n.operationId);e.push(` ${a(t)}: {`),e.push(` method: ${JSON.stringify(n.method)},`),e.push(` path: ${JSON.stringify(n.path)},`),n.successResponses&&Object.keys(n.successResponses).length>0&&e.push(` successResponses: ${JSON.stringify(n.successResponses)},`),n.errorResponses&&Object.keys(n.errorResponses).length>0&&e.push(` errorResponses: ${JSON.stringify(n.errorResponses)},`),n.errorStatusKeys&&Object.keys(n.errorStatusKeys).length>0&&e.push(` errorStatusKeys: ${JSON.stringify(n.errorStatusKeys)},`),e.push(` },`)}e.push(`} as const;`),e.push(``)}function Me(e){return!e||!J(e)?`OperationErrors`:`OperationErrors<${Ne(e)}>`}function Ne(e){return!e||Object.keys(e).length===0?`unknown`:`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${Pe(t)}`).join(`; `)} }`}const X=new Set([`any`,`unknown`,`never`,`void`,`null`,`undefined`,`string`,`number`,`boolean`,`bigint`,`symbol`]),Z=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Q(e){if(!e)return`undefined`;let t=e.trim();if(t===`undefined`)return`undefined`;if(X.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${Q(n[1])}>`:Z.test(t)?`typeof ${t}`:t}function Pe(e){if(!e)return`unknown`;let t=e.trim();if(X.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${Pe(n[1])}>`:Z.test(t)?`typeof ${t}`:t}function Fe(e){let t=e.schema??{};switch(t.type){case`integer`:case`number`:return`z.coerce.number()`;case`boolean`:return`z.coerce.boolean()`;case`array`:{let e=t.items??{type:`string`};return`z.array(${e.type===`integer`||e.type===`number`?`z.coerce.number()`:e.type===`boolean`?`z.coerce.boolean()`:`z.string()`})`}default:return`z.string()`}}function Ie(e){return Le(e.schema)}function Le(e){if(!e)return`string`;if(e.type===`array`)return`Array<${Le(e.items)}>`;switch(e.type){case`integer`:case`number`:return`number`;case`boolean`:return`boolean`;default:return`string`}}function Re(e,t){if(!e)return`String(${t})`;switch(e.type){case`integer`:case`number`:return`String(${t})`;case`boolean`:return`${t} ? "true" : "false"`;default:return`String(${t})`}}const ze=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function Be(e){return e.split(`/`).filter(Boolean).map(e=>e.startsWith(`{`)&&e.endsWith(`}`)?`:${e.slice(1,-1)}`:e)}function Ve(e){let t={};for(let[n,r]of Object.entries(e)){let e=Be(r.path),i=r.method.toLowerCase();if(!ze.has(i))return{ok:!1,error:Error(`Unsupported method ${r.method} for ${n}`)};let a=He(t,e,i,n);if(!a.ok)return a}return{ok:!0,value:t}}function He(e,t,n,r){if(t.length===0){let t=e,i=t!==void 0&&typeof t==`object`&&t&&!Array.isArray(t)?{...t}:{};if(i[n]!==void 0){let e=`Duplicate ${n} on root for ${r} vs `,t=JSON.stringify(i[n]);return{ok:!1,error:Error(e+t)}}i[n]=r;for(let t of Object.keys(e))delete e[t];return Object.assign(e,i),{ok:!0,value:void 0}}let i=e;for(let e=0;e<t.length;e+=1){let a=t[e];if(e===t.length-1){let e=i[a],t=e!==void 0&&typeof e==`object`&&e&&!Array.isArray(e)?{...e}:{};if(t[n]!==void 0){let e=`Duplicate ${n} on ${a} for ${r} vs `,i=JSON.stringify(t[n]);return{ok:!1,error:Error(e+i)}}t[n]=r,i[a]=t}else{let e=i[a];if(e!==void 0&&typeof e!=`object`&&e!==null&&!Array.isArray(e))return{ok:!1,error:Error(`TreatyRouteTree conflict at segment ${JSON.stringify(a)}: cannot add nested path for ${n} (${r}); existing value is not an object: ${JSON.stringify(e)}`)};(e===void 0||typeof e!=`object`||!e||Array.isArray(e))&&(i[a]={}),i=i[a]}}return{ok:!0,value:void 0}}function Ue(e){return We(e,1)}function We(e,t){let n=` `.repeat(t),r=[];for(let[i,o]of Object.entries(e)){let e=a(i);typeof o==`string`?r.push(`${n}${e}: ${o},`):o&&typeof o==`object`&&!Array.isArray(o)&&(r.push(`${n}${e}: {`),r.push(We(o,t+1)),r.push(`${n}},`))}return r.join(`
6
+ `)}function $(e,t){let n=Ve(e);if(!n.ok)throw n.error;let r=Object.keys(e).sort(),i=Ue(n.value),a=JSON.stringify(e);return[`import {`,` createTreatyClient,`,` type TreatyOperationsClient,`,` type TreatyOperationMeta,`,` type TreatyRouteTreeClient,`,`} from "zenko/treaty";`,`import { ${r.join(`, `)} } from ${JSON.stringify(t.importPath)};`,``,`export const operations = {`,r.map(e=>` ${e},`).join(`
7
+ `),`} as const;`,``,`export const operationMetadata = ${a} as const satisfies Record<keyof typeof operations, TreatyOperationMeta>;`,``,`export const treatyRoutes = {`,i,`};`,``,`export function createClient(`,` baseUrl: string,`,` init?: { fetch?: typeof fetch }`,`): TreatyOperationsClient<typeof operations, typeof operationMetadata> & {`,` /**`,` * Nested path aliases for Eden-style chaining. Lighter runtime than`," * `operations` (no operationMetadata-aware Zod / specStatus handling).",` */`,` $routes: TreatyRouteTreeClient<typeof treatyRoutes>;`,`} {`,` const client = createTreatyClient({`,` baseUrl,`,` operations,`,` operationMetadata,`,` options: { fetch: init?.fetch },`,` })`,` const routes = createTreatyClient({`,` baseUrl,`,` routes: treatyRoutes,`,` fetch: init?.fetch,`,` })`,` return Object.assign(client, { $routes: routes })`,`}`,``].join(`
8
+ `)}async function Ge(t){let n=await import(e(t.inputFile).href);if(!n.operationMetadata)throw Error(`Missing operationMetadata export in ${t.inputFile} — regenerate with the latest Zenko`);let r=n.operationMetadata;return $(r,{importPath:t.importPath})}export{K as i,$ as n,Ee as r,Ge as t};
9
+ //# sourceMappingURL=treaty-generator-DBdrObxz.mjs.map
@@ -0,0 +1,159 @@
1
+ import { i as OperationErrors, o as RequestMethod, r as OperationDefinition, s as SecurityRequirement, t as AnyHeaderFn } from "./types-BG1-wlSN.mjs";
2
+ import { z } from "zod";
3
+
4
+ //#region src/treaty-types.d.ts
5
+ /** Nested route tree: segments, `:param` keys, and HTTP method leaves (see route proxy in treaty runtime). */
6
+ type RouteNode = Record<string, unknown>;
7
+ type TreatySuccess<TStatus extends number, TData> = {
8
+ kind: "success";
9
+ status: TStatus;
10
+ data: TData;
11
+ response: Response;
12
+ headers: Headers;
13
+ };
14
+ /** Non-OK HTTP response (OpenAPI-mapped or raw error body). */
15
+ type TreatyErrorResult<TSpecStatus extends string | number, TError> = {
16
+ kind: "error";
17
+ specStatus: TSpecStatus;
18
+ status: number;
19
+ error: TError;
20
+ response: Response;
21
+ headers: Headers;
22
+ };
23
+ type TreatyUnexpectedSubtype = "transport" | "parse" | "other";
24
+ /** Network failure, body validation/decoding failure, or other unexpected outcomes. */
25
+ type TreatyUnexpectedError = {
26
+ kind: "unexpectedError";
27
+ subtype: "transport";
28
+ error: Error;
29
+ } | {
30
+ kind: "unexpectedError";
31
+ subtype: "parse";
32
+ status: number; /** JSON `SyntaxError`, `ZodError`, or other failure while decoding the body. */
33
+ error: Error;
34
+ rawBody: string;
35
+ response: Response;
36
+ headers: Headers;
37
+ } | {
38
+ kind: "unexpectedError";
39
+ subtype: "other";
40
+ error: unknown;
41
+ };
42
+ /** Discriminated union returned by treaty clients (`kind` narrows outcomes). */
43
+ type TreatyResult<TData = unknown> = TreatySuccess<number, TData> | TreatyErrorResult<string | number, unknown> | TreatyUnexpectedError;
44
+ declare function unwrap<T>(result: TreatyResult<T>): T;
45
+ //#endregion
46
+ //#region src/treaty-infer.d.ts
47
+ type AnyOperationDefinition = OperationDefinition<RequestMethod, (...args: any[]) => string, unknown, unknown, AnyHeaderFn | undefined, OperationErrors | undefined, readonly SecurityRequirement[] | undefined>;
48
+ /**
49
+ * Single argument per call. `params` / `query` are partials of the generated
50
+ * `paths.*` input object (path + query fields); they are merged when building the URL.
51
+ */
52
+ type TreatyRequest<TPathArg = Record<string, unknown>, TBody = unknown> = {
53
+ params?: Partial<TPathArg>;
54
+ query?: Partial<TPathArg>; /** JSON-serializable body, or raw `FormData` / `Blob` for multipart uploads. */
55
+ body?: TBody | FormData | Blob;
56
+ headers?: Record<string, string>;
57
+ init?: Omit<RequestInit, "method" | "body" | "headers">;
58
+ };
59
+ type InferZod<Schema> = Schema extends z.ZodType ? z.output<Schema> : unknown;
60
+ type InferZodInput<Schema> = Schema extends z.ZodType ? z.input<Schema> : unknown;
61
+ type SuccessData<Op extends AnyOperationDefinition> = NonNullable<Op["response"]> extends z.ZodType ? InferZod<NonNullable<Op["response"]>> : unknown;
62
+ type ErrorsRecord<Op extends AnyOperationDefinition> = Op["errors"] extends Record<string, z.ZodType> ? Op["errors"] : Record<string, never>;
63
+ /** Per-operation entry in generated `operationMetadata`. */
64
+ type TreatyOperationMeta = {
65
+ method: string;
66
+ path: string;
67
+ successResponses?: Record<string, string>;
68
+ errorResponses?: Record<string, string>;
69
+ errorStatusKeys?: Record<string, string>;
70
+ };
71
+ type ValueUnion<T> = T[keyof T];
72
+ /** OpenAPI response key → `specStatus` field (numeric status, `"default"`, or `"unlisted"`). */
73
+ type ResponseKeyToSpec<K extends PropertyKey> = K extends "default" ? "default" : K extends number ? K : K extends `${infer N extends number}` ? N : never;
74
+ type SuccessBranches<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta> = Meta extends {
75
+ successResponses: infer M;
76
+ } ? M extends Record<string, string> ? ValueUnion<{ [K in keyof M]: K extends string | number ? ResponseKeyToSpec<K> extends infer S ? [S] extends [never] ? never : S extends number ? TreatySuccess<S, SuccessData<Op>> : never : never : never }> : TreatySuccess<number, SuccessData<Op>> : TreatySuccess<number, SuccessData<Op>>;
77
+ type HttpBranches<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta> = Meta extends {
78
+ errorResponses: infer ER;
79
+ } ? ER extends Record<string, string> ? Meta extends {
80
+ errorStatusKeys: infer KS;
81
+ } ? KS extends Record<string, string> ? ValueUnion<{ [C in keyof ER]: C extends string | number ? ResponseKeyToSpec<C> extends infer Spec ? Spec extends string | number ? C extends keyof KS ? KS[C] extends keyof ErrorsRecord<Op> ? TreatyErrorResult<Spec, InferZod<ErrorsRecord<Op>[KS[C]]>> : TreatyErrorResult<Spec, unknown> : TreatyErrorResult<Spec, unknown> : never : never : never }> : ValueUnion<{ [C in keyof ER]: C extends string | number ? ResponseKeyToSpec<C> extends infer Spec ? Spec extends string | number ? TreatyErrorResult<Spec, unknown> : never : never : never }> : ValueUnion<{ [C in keyof ER]: C extends string | number ? ResponseKeyToSpec<C> extends infer Spec ? Spec extends string | number ? TreatyErrorResult<Spec, unknown> : never : never : never }> : never : never;
82
+ type TreatyResultFor<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta = TreatyOperationMeta> = SuccessBranches<Op, Meta> | HttpBranches<Op, Meta> | {
83
+ kind: "error";
84
+ specStatus: "unlisted";
85
+ status: number;
86
+ error: unknown;
87
+ response: Response;
88
+ headers: Headers;
89
+ } | {
90
+ kind: "unexpectedError";
91
+ subtype: "transport";
92
+ error: Error;
93
+ } | {
94
+ kind: "unexpectedError";
95
+ subtype: "parse";
96
+ status: number;
97
+ error: Error;
98
+ rawBody: string;
99
+ response: Response;
100
+ headers: Headers;
101
+ } | {
102
+ kind: "unexpectedError";
103
+ subtype: "other";
104
+ error: unknown;
105
+ };
106
+ type PathArg<Op extends AnyOperationDefinition> = Parameters<Op["path"]> extends [] ? Record<string, never> : Parameters<Op["path"]> extends [infer P] ? P extends Record<string, unknown> ? P : Record<string, unknown> : Record<string, unknown>;
107
+ type OperationCall<Op extends AnyOperationDefinition, Meta extends TreatyOperationMeta> = Op["method"] extends "get" | "head" ? (req?: TreatyRequest<PathArg<Op>>) => Promise<TreatyResultFor<Op, Meta>> : NonNullable<Op["request"]> extends z.ZodType ? (req: TreatyRequest<PathArg<Op>, InferZodInput<NonNullable<Op["request"]>>>) => Promise<TreatyResultFor<Op, Meta>> : (req?: TreatyRequest<PathArg<Op>, unknown>) => Promise<TreatyResultFor<Op, Meta>>;
108
+ type TreatyOperationsClient<T extends Record<string, AnyOperationDefinition>, TMeta extends Record<keyof T & string, TreatyOperationMeta>> = { [K in keyof T]: OperationCall<T[K], K extends keyof TMeta ? TMeta[K] : TreatyOperationMeta> };
109
+ type TreatyMethodOptions = RequestInit & {
110
+ query?: Record<string, unknown>;
111
+ headers?: Record<string, string>;
112
+ };
113
+ /**
114
+ * Structural check: `Op["method"] extends "get" | "head"` is wrong when `method` is
115
+ * typed as `RequestMethod` (union) — it would match the GET branch incorrectly.
116
+ */
117
+ type LeafCall<Op extends AnyOperationDefinition> = Op extends {
118
+ method: "get" | "head";
119
+ } ? (opts?: {
120
+ query?: Record<string, unknown>;
121
+ headers?: Record<string, string>;
122
+ }) => Promise<TreatyResult<SuccessData<Op>>> : Op extends {
123
+ request: infer Req;
124
+ } ? Req extends z.ZodType ? (body: InferZodInput<Req>, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>>;
125
+ type LeafMethods<R> = { [K in keyof R as K extends symbol ? never : R[K] extends AnyOperationDefinition ? K : never]: R[K] extends AnyOperationDefinition ? LeafCall<R[K]> : never };
126
+ type DynamicParamKey<R> = Extract<keyof R, `:${string}`>;
127
+ type ParamRecord<K extends `:${string}`> = K extends `:${infer Name}` ? { [P in Name]: string | number } : never;
128
+ type DynamicBranch<R> = [DynamicParamKey<R>] extends [never] ? unknown : DynamicParamKey<R> extends infer K extends `:${string}` ? K extends keyof R ? (params: ParamRecord<K>) => TreatyRouteTreeClient<R[K]> : never : unknown;
129
+ type StaticSegmentChildren<R> = { [K in keyof R as K extends symbol ? never : K extends `:${string}` ? never : R[K] extends AnyOperationDefinition ? never : R[K] extends Record<string, unknown> ? K : never]: R[K] extends Record<string, unknown> ? TreatyRouteTreeClient<R[K]> : never };
130
+ /**
131
+ * Inferred client for a nested `treatyRoutes` object (secondary / `$routes` API).
132
+ */
133
+ type TreatyRouteTreeClient<R> = LeafMethods<R> & StaticSegmentChildren<R> & DynamicBranch<R>;
134
+ /**
135
+ * @deprecated Route-tree shape; prefer {@link TreatyOperationsClient}.
136
+ */
137
+ type TreatyClient<R> = TreatyRouteTreeClient<R>;
138
+ type TreatyRoutesConstraint = Record<string, unknown>;
139
+ //#endregion
140
+ //#region src/treaty.d.ts
141
+ declare const orThrow: typeof unwrap;
142
+ type AnyOp = AnyOperationDefinition;
143
+ type TreatyClientOptions = {
144
+ fetch?: typeof fetch;
145
+ };
146
+ declare function createTreatyClient<const T extends Record<string, AnyOp>, const TMeta extends Record<keyof T & string, TreatyOperationMeta>>(config: {
147
+ baseUrl: string;
148
+ operations: T;
149
+ operationMetadata: TMeta;
150
+ options?: TreatyClientOptions;
151
+ }): TreatyOperationsClient<T, TMeta>;
152
+ declare function createTreatyClient<const R extends TreatyRoutesConstraint>(config: {
153
+ baseUrl: string;
154
+ routes: R;
155
+ fetch?: typeof fetch;
156
+ }): TreatyRouteTreeClient<R>;
157
+ //#endregion
158
+ export { TreatyUnexpectedSubtype as _, TreatyClient as a, TreatyRequest as c, TreatyRoutesConstraint as d, RouteNode as f, TreatyUnexpectedError as g, TreatySuccess as h, LeafCall as i, TreatyResultFor as l, TreatyResult as m, createTreatyClient as n, TreatyOperationMeta as o, TreatyErrorResult as p, orThrow as r, TreatyOperationsClient as s, TreatyClientOptions as t, TreatyRouteTreeClient as u, unwrap as v };
159
+ //# sourceMappingURL=treaty-s9YlO7y_.d.mts.map
package/dist/treaty.cjs CHANGED
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function t(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.method==`string`&&(typeof t.path==`function`||typeof t.path==`string`)}function n(e,t){return`${e.replace(/\/$/,``)}${t.startsWith(`/`)?t:`/${t}`}`}function r(e,t){return typeof e==`string`?e:e.length===0?e():e(t)}function i(e){return e instanceof Date?e.toISOString():typeof e==`object`&&e?JSON.stringify(e):typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):``}function a(e){let t=[];for(let[n,r]of Object.entries(e)){if(r==null)continue;let e=i(r);t.push(`${encodeURIComponent(n)}=${encodeURIComponent(e)}`)}return t.length?`?${t.join(`&`)}`:``}async function o(e){if((e.headers.get(`content-type`)??``).includes(`application/json`))try{return await e.json()}catch{return null}let t=await e.text();return t===``?null:t}function s(n){let{baseUrl:r,node:i,params:a,fetchImpl:o}=n;return new Proxy(()=>{},{get(n,l){if(typeof l==`symbol`||l===`then`)return;let u=i[l];if(u!==void 0)return t(u)?e.has(l)?c({baseUrl:r,leaf:u,params:a,fetchImpl:o}):void 0:s({baseUrl:r,node:u,params:a,fetchImpl:o})},apply(e,n,c){let l=c[0];if(!l||typeof l!=`object`)throw TypeError(`Expected a path parameter object`);let u=i,d=Object.keys(u).find(e=>e.startsWith(`:`));if(!d)throw TypeError(`No dynamic path segment here`);let f=u[d];if(f===void 0)throw TypeError(`Missing route segment ${d}`);let p={...a,...l};if(t(f))throw TypeError(`Unexpected leaf under dynamic segment`);return s({baseUrl:r,node:f,params:p,fetchImpl:o})}})}function c(e){let{baseUrl:t,leaf:i,params:s,fetchImpl:c}=e,l=i.method.toLowerCase(),u=l.toUpperCase(),d=l===`get`||l===`head`;return async(e,l)=>{let f=n(t,r(i.path,s)),p=d?e?.query:l?.query;p&&typeof p==`object`&&(f+=a(p));let m={...d?e?.headers:l?.headers},h;!d&&e!==void 0&&(typeof FormData<`u`&&e instanceof FormData?(h=e,delete m[`content-type`]):typeof Blob<`u`&&e instanceof Blob?(h=e,e.type&&(m[`content-type`]=e.type)):(m[`content-type`]=m[`content-type`]??`application/json`,h=typeof e==`string`||e instanceof ArrayBuffer?e:JSON.stringify(e)));let{method:g,body:_,...v}=l??{},y=await c(f,{...v,method:u,headers:Object.keys(m).length>0?new Headers(m):void 0,body:d?void 0:h}),b=await o(y);return y.ok?{data:b,error:null,response:y,status:y.status,headers:y.headers}:{data:null,error:{status:y.status,body:b},response:y,status:y.status,headers:y.headers}}}function l(e){let t=e.fetch??globalThis.fetch;return s({baseUrl:e.baseUrl,node:e.routes,params:{},fetchImpl:t})}exports.createTreatyClient=l;
2
- //# sourceMappingURL=treaty.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./treaty-DBeNmEsN.cjs`);exports.createTreatyClient=e.t,exports.orThrow=e.n,exports.unwrap=e.r;
package/dist/treaty.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as RouteNode, c as TreatySuccess, i as TreatyRoutesConstraint, n as LeafCall, o as TreatyFailure, r as TreatyClient, s as TreatyResult, t as createTreatyClient } from "./treaty-NM6Hf8S8.cjs";
2
- export { LeafCall, RouteNode, TreatyClient, TreatyFailure, TreatyResult, TreatyRoutesConstraint, TreatySuccess, createTreatyClient };
1
+ import { _ as TreatyUnexpectedSubtype, a as TreatyClient, c as TreatyRequest, d as TreatyRoutesConstraint, f as RouteNode, g as TreatyUnexpectedError, h as TreatySuccess, i as LeafCall, l as TreatyResultFor, m as TreatyResult, n as createTreatyClient, o as TreatyOperationMeta, p as TreatyErrorResult, r as orThrow, s as TreatyOperationsClient, t as TreatyClientOptions, u as TreatyRouteTreeClient, v as unwrap } from "./treaty-DNkKJzoB.cjs";
2
+ export { LeafCall, RouteNode, TreatyClient, TreatyClientOptions, TreatyErrorResult, TreatyOperationMeta, TreatyOperationsClient, TreatyRequest, TreatyResult, TreatyResultFor, TreatyRouteTreeClient, TreatyRoutesConstraint, TreatySuccess, TreatyUnexpectedError, TreatyUnexpectedSubtype, createTreatyClient, orThrow, unwrap };
package/dist/treaty.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as RouteNode, c as TreatySuccess, i as TreatyRoutesConstraint, n as LeafCall, o as TreatyFailure, r as TreatyClient, s as TreatyResult, t as createTreatyClient } from "./treaty-DM77ZhDU.mjs";
2
- export { LeafCall, RouteNode, TreatyClient, TreatyFailure, TreatyResult, TreatyRoutesConstraint, TreatySuccess, createTreatyClient };
1
+ import { _ as TreatyUnexpectedSubtype, a as TreatyClient, c as TreatyRequest, d as TreatyRoutesConstraint, f as RouteNode, g as TreatyUnexpectedError, h as TreatySuccess, i as LeafCall, l as TreatyResultFor, m as TreatyResult, n as createTreatyClient, o as TreatyOperationMeta, p as TreatyErrorResult, r as orThrow, s as TreatyOperationsClient, t as TreatyClientOptions, u as TreatyRouteTreeClient, v as unwrap } from "./treaty-s9YlO7y_.mjs";
2
+ export { LeafCall, RouteNode, TreatyClient, TreatyClientOptions, TreatyErrorResult, TreatyOperationMeta, TreatyOperationsClient, TreatyRequest, TreatyResult, TreatyResultFor, TreatyRouteTreeClient, TreatyRoutesConstraint, TreatySuccess, TreatyUnexpectedError, TreatyUnexpectedSubtype, createTreatyClient, orThrow, unwrap };
package/dist/treaty.mjs CHANGED
@@ -1,2 +1 @@
1
- const e=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function t(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.method==`string`&&(typeof t.path==`function`||typeof t.path==`string`)}function n(e,t){return`${e.replace(/\/$/,``)}${t.startsWith(`/`)?t:`/${t}`}`}function r(e,t){return typeof e==`string`?e:e.length===0?e():e(t)}function i(e){return e instanceof Date?e.toISOString():typeof e==`object`&&e?JSON.stringify(e):typeof e==`string`||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):``}function a(e){let t=[];for(let[n,r]of Object.entries(e)){if(r==null)continue;let e=i(r);t.push(`${encodeURIComponent(n)}=${encodeURIComponent(e)}`)}return t.length?`?${t.join(`&`)}`:``}async function o(e){if((e.headers.get(`content-type`)??``).includes(`application/json`))try{return await e.json()}catch{return null}let t=await e.text();return t===``?null:t}function s(n){let{baseUrl:r,node:i,params:a,fetchImpl:o}=n;return new Proxy(()=>{},{get(n,l){if(typeof l==`symbol`||l===`then`)return;let u=i[l];if(u!==void 0)return t(u)?e.has(l)?c({baseUrl:r,leaf:u,params:a,fetchImpl:o}):void 0:s({baseUrl:r,node:u,params:a,fetchImpl:o})},apply(e,n,c){let l=c[0];if(!l||typeof l!=`object`)throw TypeError(`Expected a path parameter object`);let u=i,d=Object.keys(u).find(e=>e.startsWith(`:`));if(!d)throw TypeError(`No dynamic path segment here`);let f=u[d];if(f===void 0)throw TypeError(`Missing route segment ${d}`);let p={...a,...l};if(t(f))throw TypeError(`Unexpected leaf under dynamic segment`);return s({baseUrl:r,node:f,params:p,fetchImpl:o})}})}function c(e){let{baseUrl:t,leaf:i,params:s,fetchImpl:c}=e,l=i.method.toLowerCase(),u=l.toUpperCase(),d=l===`get`||l===`head`;return async(e,l)=>{let f=n(t,r(i.path,s)),p=d?e?.query:l?.query;p&&typeof p==`object`&&(f+=a(p));let m={...d?e?.headers:l?.headers},h;!d&&e!==void 0&&(typeof FormData<`u`&&e instanceof FormData?(h=e,delete m[`content-type`]):typeof Blob<`u`&&e instanceof Blob?(h=e,e.type&&(m[`content-type`]=e.type)):(m[`content-type`]=m[`content-type`]??`application/json`,h=typeof e==`string`||e instanceof ArrayBuffer?e:JSON.stringify(e)));let{method:g,body:_,...v}=l??{},y=await c(f,{...v,method:u,headers:Object.keys(m).length>0?new Headers(m):void 0,body:d?void 0:h}),b=await o(y);return y.ok?{data:b,error:null,response:y,status:y.status,headers:y.headers}:{data:null,error:{status:y.status,body:b},response:y,status:y.status,headers:y.headers}}}function l(e){let t=e.fetch??globalThis.fetch;return s({baseUrl:e.baseUrl,node:e.routes,params:{},fetchImpl:t})}export{l as createTreatyClient};
2
- //# sourceMappingURL=treaty.mjs.map
1
+ import{n as e,r as t,t as n}from"./treaty-BsF5H62s.mjs";export{n as createTreatyClient,e as orThrow,t as unwrap};
@@ -16,4 +16,4 @@ type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args:
16
16
  };
17
17
  //#endregion
18
18
  export { PathFn as a, OperationErrors as i, HeaderFn as n, RequestMethod as o, OperationDefinition as r, SecurityRequirement as s, AnyHeaderFn as t };
19
- //# sourceMappingURL=types-ByqlZjPK.d.mts.map
19
+ //# sourceMappingURL=types-BG1-wlSN.d.mts.map
package/dist/types.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as PathFn, i as OperationErrors, n as HeaderFn, o as RequestMethod, r as OperationDefinition, s as SecurityRequirement, t as AnyHeaderFn } from "./types-ByqlZjPK.mjs";
1
+ import { a as PathFn, i as OperationErrors, n as HeaderFn, o as RequestMethod, r as OperationDefinition, s as SecurityRequirement, t as AnyHeaderFn } from "./types-BG1-wlSN.mjs";
2
2
  export { AnyHeaderFn, HeaderFn, OperationDefinition, OperationErrors, PathFn, RequestMethod, SecurityRequirement };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenko",
3
- "version": "0.3.0-beta.2",
3
+ "version": "0.3.0-beta.4",
4
4
  "description": "Generate TypeScript types and path functions from OpenAPI specs",
5
5
  "keywords": [
6
6
  "api",
@@ -1,68 +0,0 @@
1
- import { i as OperationErrors, o as RequestMethod, r as OperationDefinition, s as SecurityRequirement, t as AnyHeaderFn } from "./types-ByqlZjPK.mjs";
2
- import { z } from "zod";
3
-
4
- //#region src/treaty-types.d.ts
5
- /** Nested route tree: segments, `:param` keys, and HTTP method leaves (see `isLeaf` in treaty runtime). */
6
- type RouteNode = Record<string, unknown>;
7
- type TreatySuccess<T> = {
8
- data: T;
9
- error: null;
10
- response: Response;
11
- status: number;
12
- headers: Headers;
13
- };
14
- type TreatyFailure = {
15
- data: null;
16
- error: {
17
- status: number;
18
- body: unknown;
19
- };
20
- response: Response;
21
- status: number;
22
- headers: Headers;
23
- };
24
- type TreatyResult<T> = TreatySuccess<T> | TreatyFailure;
25
- //#endregion
26
- //#region src/treaty-infer.d.ts
27
- type AnyOperationDefinition = OperationDefinition<RequestMethod, (...args: any[]) => string, unknown, unknown, AnyHeaderFn | undefined, OperationErrors | undefined, readonly SecurityRequirement[] | undefined>;
28
- type TreatyMethodOptions = RequestInit & {
29
- query?: Record<string, unknown>;
30
- headers?: Record<string, string>;
31
- };
32
- type InferZodOutput<Schema> = Schema extends z.ZodType ? z.infer<Schema> : unknown;
33
- type InferZodInput<Schema> = Schema extends z.ZodType ? z.input<Schema> : unknown;
34
- type SuccessData<Op extends AnyOperationDefinition> = NonNullable<Op["response"]> extends z.ZodType ? InferZodOutput<NonNullable<Op["response"]>> : unknown;
35
- /**
36
- * Structural check: `Op["method"] extends "get" | "head"` is wrong when `method` is
37
- * typed as `RequestMethod` (union) — it would match the GET branch incorrectly.
38
- */
39
- type LeafCall<Op extends AnyOperationDefinition> = Op extends {
40
- method: "get" | "head";
41
- } ? (opts?: {
42
- query?: Record<string, unknown>;
43
- headers?: Record<string, string>;
44
- }) => Promise<TreatyResult<SuccessData<Op>>> : Op extends {
45
- request: infer Req;
46
- } ? Req extends z.ZodType ? (body: InferZodInput<Req>, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>>;
47
- type LeafMethods<R> = { [K in keyof R as K extends symbol ? never : R[K] extends AnyOperationDefinition ? K : never]: R[K] extends AnyOperationDefinition ? LeafCall<R[K]> : never };
48
- type DynamicParamKey<R> = Extract<keyof R, `:${string}`>;
49
- type ParamRecord<K extends `:${string}`> = K extends `:${infer Name}` ? { [P in Name]: string | number } : never;
50
- type DynamicBranch<R> = [DynamicParamKey<R>] extends [never] ? unknown : DynamicParamKey<R> extends infer K extends `:${string}` ? K extends keyof R ? (params: ParamRecord<K>) => TreatyClient<R[K]> : never : unknown;
51
- type StaticSegmentChildren<R> = { [K in keyof R as K extends symbol ? never : K extends `:${string}` ? never : R[K] extends AnyOperationDefinition ? never : R[K] extends Record<string, unknown> ? K : never]: R[K] extends Record<string, unknown> ? TreatyClient<R[K]> : never };
52
- /**
53
- * Inferred Eden-style client for a nested `treatyRoutes` object whose leaves are
54
- * {@link OperationDefinition} values (Zod-typed `request` / `response`).
55
- */
56
- type TreatyClient<R> = LeafMethods<R> & StaticSegmentChildren<R> & DynamicBranch<R>;
57
- /** Permissive input constraint for `createTreatyClient` — inference comes from `routes`. */
58
- type TreatyRoutesConstraint = Record<string, unknown>;
59
- //#endregion
60
- //#region src/treaty.d.ts
61
- declare function createTreatyClient<const R extends TreatyRoutesConstraint>(config: {
62
- baseUrl: string;
63
- routes: R;
64
- fetch?: typeof fetch;
65
- }): TreatyClient<R>;
66
- //#endregion
67
- export { RouteNode as a, TreatySuccess as c, TreatyRoutesConstraint as i, LeafCall as n, TreatyFailure as o, TreatyClient as r, TreatyResult as s, createTreatyClient as t };
68
- //# sourceMappingURL=treaty-DM77ZhDU.d.mts.map
@@ -1,68 +0,0 @@
1
- import { i as OperationErrors, o as RequestMethod, r as OperationDefinition, s as SecurityRequirement, t as AnyHeaderFn } from "./types-BM-Q_QIk.cjs";
2
- import { z } from "zod";
3
-
4
- //#region src/treaty-types.d.ts
5
- /** Nested route tree: segments, `:param` keys, and HTTP method leaves (see `isLeaf` in treaty runtime). */
6
- type RouteNode = Record<string, unknown>;
7
- type TreatySuccess<T> = {
8
- data: T;
9
- error: null;
10
- response: Response;
11
- status: number;
12
- headers: Headers;
13
- };
14
- type TreatyFailure = {
15
- data: null;
16
- error: {
17
- status: number;
18
- body: unknown;
19
- };
20
- response: Response;
21
- status: number;
22
- headers: Headers;
23
- };
24
- type TreatyResult<T> = TreatySuccess<T> | TreatyFailure;
25
- //#endregion
26
- //#region src/treaty-infer.d.ts
27
- type AnyOperationDefinition = OperationDefinition<RequestMethod, (...args: any[]) => string, unknown, unknown, AnyHeaderFn | undefined, OperationErrors | undefined, readonly SecurityRequirement[] | undefined>;
28
- type TreatyMethodOptions = RequestInit & {
29
- query?: Record<string, unknown>;
30
- headers?: Record<string, string>;
31
- };
32
- type InferZodOutput<Schema> = Schema extends z.ZodType ? z.infer<Schema> : unknown;
33
- type InferZodInput<Schema> = Schema extends z.ZodType ? z.input<Schema> : unknown;
34
- type SuccessData<Op extends AnyOperationDefinition> = NonNullable<Op["response"]> extends z.ZodType ? InferZodOutput<NonNullable<Op["response"]>> : unknown;
35
- /**
36
- * Structural check: `Op["method"] extends "get" | "head"` is wrong when `method` is
37
- * typed as `RequestMethod` (union) — it would match the GET branch incorrectly.
38
- */
39
- type LeafCall<Op extends AnyOperationDefinition> = Op extends {
40
- method: "get" | "head";
41
- } ? (opts?: {
42
- query?: Record<string, unknown>;
43
- headers?: Record<string, string>;
44
- }) => Promise<TreatyResult<SuccessData<Op>>> : Op extends {
45
- request: infer Req;
46
- } ? Req extends z.ZodType ? (body: InferZodInput<Req>, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>> : (body?: unknown, init?: TreatyMethodOptions) => Promise<TreatyResult<SuccessData<Op>>>;
47
- type LeafMethods<R> = { [K in keyof R as K extends symbol ? never : R[K] extends AnyOperationDefinition ? K : never]: R[K] extends AnyOperationDefinition ? LeafCall<R[K]> : never };
48
- type DynamicParamKey<R> = Extract<keyof R, `:${string}`>;
49
- type ParamRecord<K extends `:${string}`> = K extends `:${infer Name}` ? { [P in Name]: string | number } : never;
50
- type DynamicBranch<R> = [DynamicParamKey<R>] extends [never] ? unknown : DynamicParamKey<R> extends infer K extends `:${string}` ? K extends keyof R ? (params: ParamRecord<K>) => TreatyClient<R[K]> : never : unknown;
51
- type StaticSegmentChildren<R> = { [K in keyof R as K extends symbol ? never : K extends `:${string}` ? never : R[K] extends AnyOperationDefinition ? never : R[K] extends Record<string, unknown> ? K : never]: R[K] extends Record<string, unknown> ? TreatyClient<R[K]> : never };
52
- /**
53
- * Inferred Eden-style client for a nested `treatyRoutes` object whose leaves are
54
- * {@link OperationDefinition} values (Zod-typed `request` / `response`).
55
- */
56
- type TreatyClient<R> = LeafMethods<R> & StaticSegmentChildren<R> & DynamicBranch<R>;
57
- /** Permissive input constraint for `createTreatyClient` — inference comes from `routes`. */
58
- type TreatyRoutesConstraint = Record<string, unknown>;
59
- //#endregion
60
- //#region src/treaty.d.ts
61
- declare function createTreatyClient<const R extends TreatyRoutesConstraint>(config: {
62
- baseUrl: string;
63
- routes: R;
64
- fetch?: typeof fetch;
65
- }): TreatyClient<R>;
66
- //#endregion
67
- export { RouteNode as a, TreatySuccess as c, TreatyRoutesConstraint as i, LeafCall as n, TreatyFailure as o, TreatyClient as r, TreatyResult as s, createTreatyClient as t };
68
- //# sourceMappingURL=treaty-NM6Hf8S8.d.cts.map
@@ -1,8 +0,0 @@
1
- import{pathToFileURL as e}from"node:url";function t(e){let t=new Set,r=new Set,i=[],a=o=>{if(t.has(o)||r.has(o))return;r.add(o);let s=e[o],c=n(s);for(let t of c)e[t]&&a(t);r.delete(o),t.add(o),i.push(o)};for(let t of Object.keys(e))a(t);return i}function n(e){let t=[],n=e=>{if(!(typeof e!=`object`||!e)){if(e.$ref&&typeof e.$ref==`string`){let n=r(e.$ref);t.push(n);return}if(Array.isArray(e))e.forEach(n);else{if(e.mapping&&typeof e.mapping==`object`)for(let n of Object.values(e.mapping))typeof n==`string`&&t.push(r(n));Object.values(e).forEach(n)}}};return n(e),[...new Set(t)]}function r(e){return(e.split(`/`).pop()||`Unknown`).replace(/\.(yml|yaml)$/i,``)}function i(e){if(!e)return!1;let t=e.at(0);return t===void 0||!/[a-zA-Z_$]/.test(t)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(`abstract.arguments.await.boolean.break.byte.case.catch.char.class.const.continue.debugger.default.delete.do.double.else.enum.eval.export.extends.false.final.finally.float.for.function.goto.if.implements.import.in.instanceof.int.interface.let.long.native.new.null.package.private.protected.public.return.short.static.super.switch.synchronized.this.throw.throws.transient.true.try.typeof.var.void.volatile.while.with.yield.async`.split(`.`)).has(e)}function a(e){return i(e)?e:`"${e}"`}function o(e){return e.replace(/-([a-zA-Z])/g,(e,t)=>t.toUpperCase()).replace(/-+$/,``)}function s(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e){let t={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(t.usesOperationDefinition=!0);for(let n of e)n.errors&&u(n.errors)&&(t.usesOperationErrors=!0);return e.length>0&&!t.usesOperationErrors&&e.some(e=>!e.errors||!u(e.errors))&&(t.usesOperationErrors=!0),t}function l(e,t,n){let r=[];if(e.usesHeaderFn&&r.push(`HeaderFn`),e.usesOperationDefinition&&r.push(`OperationDefinition`),e.usesOperationErrors&&r.push(`OperationErrors`),r.length===0)return``;let i=t===`package`?`"zenko"`:`"${n}"`;return`import type { ${r.join(`, `)} } from ${i};`}function u(e){return!!(e&&Object.keys(e).length>0)}const d={"application/json":`unknown`,"text/csv":`string`,"text/plain":`string`,"application/octet-stream":`unknown`,"application/pdf":`unknown`};function f(e){let t=Object.keys(e);if(t.includes(`application/json`))return`application/json`;for(let e of t)if(e in d)return e;return t[0]||``}function p(e){let t=e.toLowerCase().split(`;`)[0]?.trim();return t?!!(t.startsWith(`text/`)||t===`application/xml`||t.startsWith(`application/`)&&t.endsWith(`+xml`)):!1}function m(e,t){if(!t||!p(e)||t.$ref)return t;let n=t.nullable===!0?{nullable:!0}:{};return t.enum?{type:`string`,enum:t.enum,...n}:{type:`string`,...n}}function h(e,t){if(e){if(e.$ref){let n=r(e.$ref),i=t.components?.parameters?.[n];if(!i)return;let{$ref:a,...o}=e;return{...i,...o}}return e}}function g(e){let t=new Map;for(let[,n]of Object.entries(e.paths||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}for(let[,n]of Object.entries(e.webhooks||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}return t}function _(e,t){let i=new Set,a=new Map,o=e=>{if(!e)return[];if(a.has(e))return a.get(e)??[];let t=n(e);return a.set(e,t),t},s=g(t);for(let n of e){let e=s.get(n.operationId);if(!e)continue;let a=e.requestBody?.content?.[`application/json`]?.schema;if(a?.$ref){let e=r(a.$ref);i.add(e)}else if(a){let e=o(a);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}let c=e.responses||{};for(let[,e]of Object.entries(c)){let n=e?.content;if(!n)continue;let a=f(n),s=n[a]?.schema,c=m(a,s);if(c?.$ref){let e=r(c.$ref);i.add(e)}else if(c){let e=o(c);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}}for(let e of n.queryParams){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}for(let e of n.requestHeaders||[]){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}let l=e.parameters||[];for(let e of l){let n=h(e,t);if(n?.schema?.$ref){let e=r(n.schema.$ref);i.add(e)}if(n?.schema?.items?.$ref){let e=r(n.schema.items.$ref);i.add(e)}}}let c=new Set,l=Array.from(i);for(;l.length>0;){let e=l.pop();if(c.has(e))continue;c.add(e);let n=t.components?.schemas?.[e];if(!n)continue;let r=o(n);for(let e of r)t.components?.schemas?.[e]&&!c.has(e)&&(i.add(e),l.push(e))}return i}function v(e,t){return t===!0?!0:Array.isArray(t)?t.includes(e):!1}function y(e,t){switch(t){case`optional`:return`${e}.optional()`;case`nullable`:return`${e}.nullable()`;case`nullish`:return`${e}.nullish()`}}function b(e,t,n,r,i,a){if(n.has(e))return``;if(n.add(e),t.enum){let n=t.enum.map(e=>`"${e}"`).join(`, `);if(v(e,r.openEnums)){let t=r.openEnumPrefix;return`const ${e}Known = [${n}] as const;\nexport const ${e} = z.enum(${e}Known).or(\n z.string().transform((v): \`${t}\${string}\` => \`${t}\${v}\`)\n);`}return`export const ${e} = z.enum([${n}]);`}if(t.allOf&&Array.isArray(t.allOf)){let n=w(t),o=n.map(t=>k(t,r,i,a,e));if(o.length===0)return`export const ${e} = z.object({});`;if(o.length===1)return`export const ${e} = ${o[0]};`;let s=n.every(e=>E(e,a))?`merge`:`and`;return`export const ${e} = ${o[0]}${o.slice(1).map(e=>`.${s}(${e})`).join(``)};`}if(t.type===`object`||t.properties)return`export const ${e} = ${ae(t,r,i,a,e)};`;if(t.type===`array`){let n=t.items??{type:`unknown`},o=k(n,r,i,a,e),s=r.strictNumeric||t.minItems!==void 0||t.maxItems!==void 0||t.uniqueItems===!0;return`export const ${e} = ${j(t,`z.array(${o})`,n,s)};`}return`export const ${e} = ${k(t,r,i,a,e,e)};`}function x(e,t,n,r,i){let a=e.map(e=>k(e,t,n,r,i));return a.length===0?`z.unknown()`:a.length===1?a[0]??`z.unknown()`:`z.union([${a.join(`, `)}])`}function S(e){return e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}function ee(e,t){if(!e?.$ref)return e;let n=r(e.$ref);return t?.[n]??e}function C(e){return[`$ref`,`type`,`properties`,`required`,`additionalProperties`,`items`,`enum`,`const`,`oneOf`,`anyOf`,`not`].some(t=>e?.[t]!==void 0)}function w(e){let t=Array.isArray(e.allOf)?[...e.allOf]:[],n={...e};return delete n.allOf,C(n)&&t.push(n),t}function T(e,t,n,i,a=new Set){if(!e||a.has(e))return!1;if(a.add(e),e.$ref){let o=r(e.$ref);if((i?.get(o)||o)===t)return!0;let s=n?.[o];if(s)return T(s,t,n,i,a)}return Array.isArray(e.allOf)?e.allOf.some(e=>T(e,t,n,i,a)):Array.isArray(e.oneOf)?e.oneOf.some(e=>T(e,t,n,i,a)):Array.isArray(e.anyOf)?e.anyOf.some(e=>T(e,t,n,i,a)):e.not?T(e.not,t,n,i,a):e.items?T(e.items,t,n,i,a):e.properties?Object.values(e.properties).some(e=>T(e,t,n,i,a)):e.additionalProperties&&typeof e.additionalProperties==`object`?T(e.additionalProperties,t,n,i,a):!1}function E(e,t){let n=ee(e,t);return n?n.allOf&&Array.isArray(n.allOf)?w(n).every(e=>E(e,t)):n.type===`object`||n.properties!==void 0||n.additionalProperties!==void 0:!1}function te(e){let t=new Map;if(!e?.mapping)return t;for(let[n,i]of Object.entries(e.mapping)){if(typeof i!=`string`)continue;let e=r(i),a=t.get(e);if(a){a.values.includes(n)||a.values.push(n);continue}t.set(e,{ref:i,values:[n]})}return t}function D(e,t,n,i=new Set){if(!e||typeof e!=`object`||i.has(e))return[];if(i.add(e),e.$ref&&typeof e.$ref==`string`){let a=r(e.$ref),o=n?.[a];return o?D(o,t,n,i):[]}let a=[],o=e.properties?.[t];if(o){let e=o.const;e!==void 0&&S(e)?a.push(e):Array.isArray(o.enum)&&o.enum?.length===1&&S(o.enum?.[0])&&a.push(o.enum?.[0])}if(Array.isArray(e.allOf))for(let r of e.allOf)a.push(...D(r,t,n,i));return Array.from(new Set(a))}function O(e,t,n){return{allOf:[e,{type:`object`,properties:{[t]:{const:n}},required:[t]}]}}function ne(e,t,n,i){let a=new Set;for(let t of e)t?.$ref&&a.add(r(t.$ref));let o=[],s=!1;for(let a of e){let e=[];if(a?.$ref){let o=r(a.$ref),s=n.get(o);s?.values.length&&e.push(...s.values),e.push(...D(a,t,i))}else e.push(...D(a,t,i));let c=Array.from(new Set(e));if(c.length===0){s=!0,o.push(a);continue}for(let e of c)o.push(O(a,t,e))}for(let[e,r]of n.entries()){if(a.has(e))continue;let n={$ref:r.ref};for(let e of r.values)o.push(O(n,t,e))}return{schemas:o,hasUnmapped:s}}function re(e,t,n,r,i,a,o){let{schemas:s,hasUnmapped:c}=ne(e,t,o??new Map,i),l=s.map(e=>k(e,n,r,i,a));return l.length===0?`z.unknown()`:l.length===1?l[0]??`z.unknown()`:c?`z.union([${l.join(`, `)}])`:`z.discriminatedUnion(${JSON.stringify(t)}, [${l.join(`, `)}])`}function k(e,t,n,i,a,o){if(e.$ref){let t=r(e.$ref),o=n?.get(t)||t;return a&&(o===a||T(i?.[t],a,i,n))?`z.lazy((): z.ZodType => ${o})`:o}if(e.const!==void 0&&S(e.const))return`z.literal(${JSON.stringify(e.const)})`;if(e.enum)return e.enum.length===1?`z.literal(${JSON.stringify(e.enum[0])})`:`z.enum([${e.enum.map(e=>`"${e}"`).join(`, `)}])`;if(e.not){let r=e.not,o={...e};delete o.not;let s=C(o)?k(o,t,n,i,a):`z.any()`;return r?.type===`string`&&r.maxLength===0?`${s}.refine((value) => typeof value !== "string" || value.length > 0, { message: "Value must not be empty" })`:`${s}.refine((value) => !${k(r,t,n,i,a)}.safeParse(value).success, { message: "Value must not match schema" })`}if(e.allOf&&Array.isArray(e.allOf)){let r=w(e),o=r.map(e=>k(e,t,n,i,a));if(o.length===0)return`z.object({})`;if(o.length===1)return o[0]??`z.object({})`;let s=r.every(e=>E(e,i))?`merge`:`and`;return`${o[0]}${o.slice(1).map(e=>`.${s}(${e})`).join(``)}`}if(e.oneOf&&Array.isArray(e.oneOf)){if(e.discriminator?.propertyName){let r=te(e.discriminator);return re(e.oneOf,e.discriminator.propertyName,t,n,i,a,r)}return x(e.oneOf,t,n,i,a)}if(e.anyOf&&Array.isArray(e.anyOf))return x(e.anyOf,t,n,i,a);if(e.type===`object`||e.properties||e.allOf)return ae(e,t,n,i,a);switch(e.type){case`string`:return oe(e,t,o);case`boolean`:return`z.boolean()`;case`array`:{let r=e.items??{type:`unknown`},o=k(r,t,n,i,a),s=t.strictNumeric||e.minItems!==void 0||e.maxItems!==void 0||e.uniqueItems===!0;return j(e,`z.array(${o})`,r,s)}case`null`:return`z.null()`;case`number`:return A(e,t);case`integer`:return ce(e,t);default:return`z.unknown()`}}function ie(e,t){if(!e||!t)return new Set;let n=new Set;for(let i of Object.values(e)){if(!i||typeof i!=`object`)continue;let e=i.discriminator?.propertyName;if(!e||!Array.isArray(i.oneOf))continue;let a=i.oneOf.some(e=>e?.$ref&&r(e.$ref)===t),o=Object.values(i.discriminator?.mapping??{}).some(e=>typeof e==`string`&&r(e)===t);(a||o)&&n.add(e)}return n}function ae(e,t,n,r,i){let o=[],s=ie(r,i),c=new Set(e.required??[]);for(let[l,u]of Object.entries(e.properties||{})){let e=c.has(l)||s.has(l),d=k(u,t,n,r,i),f=y(d,t.optionalType),p=t.optionalType===`nullable`?f:se(f,u),m=e?d:p;o.push(` ${a(l)}: ${m},`)}let l=o.length===0?`z.object({})`:`z.object({\n${o.join(`
2
- `)}\n})`;return e.additionalProperties===void 0?l:e.additionalProperties===!1?`${l}.strict()`:e.additionalProperties===!0?`${l}.passthrough()`:`${l}.catchall(${k(e.additionalProperties,t,n,r,i)})`}function oe(e,t,n){if(e.format===`binary`)return`(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))`;if(t.strictDates)switch(e.format){case`date-time`:return t.dateTimeOffset===!0||Array.isArray(t.dateTimeOffset)&&n!==void 0&&t.dateTimeOffset.includes(n)?`z.string().datetime({ offset: true })`:`z.string().datetime()`;case`date`:return`z.string().date()`;case`time`:return`z.string().time()`;case`duration`:return`z.string().duration()`}let r=`z.string()`;switch(t.strictNumeric&&(typeof e.minLength==`number`&&(r+=`.min(${e.minLength})`),typeof e.maxLength==`number`&&(r+=`.max(${e.maxLength})`),e.pattern&&(r+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case`uuid`:return`${r}.uuid()`;case`email`:return`${r}.email()`;case`uri`:case`url`:return`${r}.url()`;case`ipv4`:return`${r}.ip({ version: "v4" })`;case`ipv6`:return`${r}.ip({ version: "v6" })`;default:return r}}function se(e,t){return!t||t.default===void 0||t.default===null&&!(e.includes(`.nullable()`)||e.includes(`.nullish()`)||t.type===`null`||Array.isArray(t.type)&&t.type.includes(`null`))?e:`${e}.default(${JSON.stringify(t.default)})`}function A(e,t){let n=`z.number()`;return t.strictNumeric&&(n=ue(e,n),typeof e.multipleOf==`number`&&e.multipleOf!==0&&(n+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),n}function ce(e,t){let n=A(e,t);return n+=`.int()`,n}function j(e,t,n,r){return r?(typeof e.minItems==`number`&&(t+=`.min(${e.minItems})`),typeof e.maxItems==`number`&&(t+=`.max(${e.maxItems})`),e.uniqueItems&&le(n)&&(t+=`.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })`),t):t}function le(e){return e?.$ref?!1:new Set([`string`,`number`,`integer`,`boolean`]).has(e?.type)}function ue(e,t){return typeof e.minimum==`number`?e.exclusiveMinimum===!0?t+=`.gt(${e.minimum})`:t+=`.min(${e.minimum})`:typeof e.exclusiveMinimum==`number`&&(t+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum==`number`?e.exclusiveMaximum===!0?t+=`.lt(${e.maximum})`:t+=`.max(${e.maximum})`:typeof e.exclusiveMaximum==`number`&&(t+=`.lt(${e.exclusiveMaximum})`),t}const de={400:`badRequest`,401:`unauthorized`,402:`paymentRequired`,403:`forbidden`,404:`notFound`,405:`methodNotAllowed`,406:`notAcceptable`,407:`proxyAuthenticationRequired`,408:`requestTimeout`,409:`conflict`,410:`gone`,411:`lengthRequired`,412:`preconditionFailed`,413:`payloadTooLarge`,414:`uriTooLong`,415:`unsupportedMediaType`,416:`rangeNotSatisfiable`,417:`expectationFailed`,418:`imATeapot`,421:`misdirectedRequest`,422:`unprocessableEntity`,423:`locked`,424:`failedDependency`,425:`tooEarly`,426:`upgradeRequired`,428:`preconditionRequired`,429:`tooManyRequests`,431:`requestHeaderFieldsTooLarge`,451:`unavailableForLegalReasons`,500:`internalServerError`,501:`notImplemented`,502:`badGateway`,503:`serviceUnavailable`,504:`gatewayTimeout`,505:`httpVersionNotSupported`,506:`variantAlsoNegotiates`,507:`insufficientStorage`,508:`loopDetected`,510:`notExtended`,511:`networkAuthenticationRequired`};function M(e){if(e===`default`)return`defaultError`;let t=e.trim(),n=de[t];if(n)return n;if(/^\d{3}$/.test(t))return`status${t}`;let r=t.toLowerCase().replace(/[^a-z0-9]+/g,` `).trim();if(!r)return`unknownError`;let[i,...a]=r.split(/\s+/),o=i+a.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``);return o?/^[a-zA-Z_$]/.test(o)?o:`status${o.charAt(0).toUpperCase()}${o.slice(1)}`:`unknownError`}function N(e){if(e===`default`)return!0;let t=Number(e);return Number.isInteger(t)?t>=400:!1}function fe(e,t){let n=[];if(e.paths)for(let[r,i]of Object.entries(e.paths))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!H(s)||!o.operationId)continue;let c=F(r),l=I(o,t),{successResponse:u,errors:d,successResponses:f,errorResponses:p}=L(o,o.operationId,t),m=P(i,o,e),h=z(m),g=B(m),_=V(o,e);n.push({operationId:o.operationId,path:r,method:s,pathParams:c,queryParams:g,requestType:l,responseType:u,successResponses:f,errorResponses:p,requestHeaders:h,errors:d,security:_})}if(e.webhooks)for(let[r,i]of Object.entries(e.webhooks))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!H(s)||!o.operationId)continue;let c=r,l=F(c),u=I(o,t),{successResponse:d,errors:f,successResponses:p,errorResponses:m}=L(o,o.operationId,t),h=P(i,o,e),g=z(h),_=B(h),v=V(o,e);n.push({operationId:o.operationId,path:c,method:s,pathParams:l,queryParams:_,requestType:u,responseType:d,successResponses:p,errorResponses:m,requestHeaders:g,errors:f,security:v})}return n}function P(e,t,n){let r=new Map,i=e=>{if(Array.isArray(e))for(let t of e){let e=h(t,n);if(!e)continue;let i=`${e.in}:${e.name}`;r.set(i,e)}};return i(e.parameters),i(t.parameters),Array.from(r.values())}function F(e){let t=[],n=e.match(/{([^}]+)}/g);if(n)for(let e of n){let n=e.slice(1,-1);t.push({name:n,type:`string`})}return t}function I(e,t){let n=pe(e);if(n){if(n.$ref){let e=r(n.$ref);return t?.get(e)||e}return`${s(o(e.operationId))}Request`}}function pe(e){let t=e?.requestBody?.content;if(!(!t||Object.keys(t).length===0))for(let e of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=t[e]?.schema;if(n)return n}}function L(e,t,n){let r=e.responses??{},i=new Map,a=[];for(let[e,t]of Object.entries(r)){let n=t?.content;if(!n||Object.keys(n).length===0){e===`204`||/^3\d\d$/.test(e)?i.set(e,`undefined`):N(e)&&a.push({code:e,schema:`undefined`});continue}let r=f(n),o=n[r]?.schema,s=m(r,o);if(!s){let t=ve(r,e);t&&(N(e)?a.push({code:e,schema:t}):/^2\d\d$/.test(e)&&i.set(e,t));continue}if(N(e)){a.push({code:e,schema:s});continue}/^2\d\d$/.test(e)&&i.set(e,s)}return{successResponse:ge(i,t,n),errors:_e(a,t,n),successResponses:me(i,t,n),errorResponses:he(a,t,n)}}function me(e,t,n){if(e.size===0)return;let r={};for(let[i,a]of e)typeof a==`string`?r[i]=a:r[i]=R(a,`${s(o(t))}Status${i}`,n);return r}function he(e,t,n){if(e.length===0)return;let r={};for(let{code:i,schema:a}of e){let e=M(i);r[i]=R(a,`${s(o(t))}${s(e)}`,n)}return r}function ge(e,t,n){if(e.size===0)return;for(let r of[`200`,`201`,`204`]){let i=e.get(r);if(i)return typeof i==`string`?i:R(i,`${s(o(t))}Response`,n)}let[,r]=e.entries().next().value??[];if(r)return typeof r==`string`?r:R(r,`${s(o(t))}Response`,n)}function _e(e=[],t,n){if(!e.length)return;let r={};for(let{code:i,schema:a}of e){let e=M(i);r[e]=R(a,`${s(o(t))}${s(e)}`,n)}return r}function R(e,t,n){if(typeof e==`string`)return e;if(e.$ref){let t=r(e.$ref);return n?.get(t)||t}if(e.type===`array`&&e.items?.$ref){let t=r(e.items.$ref);return`z.array(${n?.get(t)||t})`}return e.allOf&&Array.isArray(e.allOf),t}function z(e){let t=[];for(let n of e??[])n.in===`header`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function B(e){let t=[];for(let n of e??[])n.in===`query`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function V(e,t){let n=e.security;if(Array.isArray(n))return n.length===0?[]:n;if(Array.isArray(t.security)&&t.security.length>0)return t.security}function H(e){switch(e){case`get`:case`put`:case`post`:case`delete`:case`options`:case`head`:case`patch`:case`trace`:return!0;default:return!1}}function ve(e,t){return t===`204`||/^3\d\d$/.test(t)?`undefined`:e in d?d[e]:`unknown`}function ye(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.requestBody;if(i&&i.content){let e=i.content,r=be(e);if(!r)continue;let a=`${s(o(t.operationId))}Request`;(!r.$ref||r.allOf||r.oneOf||r.anyOf)&&n.set(a,r)}}return n}function be(e){for(let t of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=e[t]?.schema;if(n)return n}}function xe(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.responses||{};for(let[e,r]of Object.entries(i))if(/^2\d\d$/.test(e)&&r.content){let e=r.content,i=f(e),a=e[i]?.schema,c=m(i,a);if(!c)continue;let l=`${s(o(t.operationId))}Response`;(!c.$ref||c.allOf||c.oneOf||c.anyOf)&&n.set(l,c)}}return n}function Se(e,t,n,r,i){let a=ye(t,n);if(a.size>0){e.push(`// Generated Request Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function Ce(e,t,n,r,i){let a=xe(t,n);if(a.size>0){e.push(`// Generated Response Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function we(){let e=[];return e.push(`// Generated helper types for Zenko`),e.push(`// This file provides type definitions for operation objects and path functions`),e.push(``),e.push(`export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string`),e.push(``),e.push(`export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"`),e.push(``),e.push(`export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult`),e.push(``),e.push(`export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)`),e.push(``),e.push(`export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(``),e.push(`export type SecurityRequirement = Readonly<Record<string, readonly string[]>>`),e.push(``),e.push(`export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``),e.join(`
3
- `)}function Te(e){return e===void 0?{open:!1,prefix:`Unknown:`}:typeof e==`boolean`||Array.isArray(e)?{open:e,prefix:`Unknown:`}:{open:e.open??!1,prefix:e.unknownPrefix??`Unknown:`}}function U(e,n={}){let r=[],s=new Set,{strictDates:c=!1,strictNumeric:l=!1,dateTimeOffset:u=!0,operationIds:d,openEnums:f=!1}=n,p=Oe({...n.types,operationTypeSuffix:n.types?.operationTypeSuffix??`Operation`}),m=Te(f),h={strictDates:c,strictNumeric:l,dateTimeOffset:u,optionalType:p.optionalType,openEnums:m.open,openEnumPrefix:m.prefix};r.push(`import { z } from "zod";`);let g=new Map;if(e.components?.schemas)for(let t of Object.keys(e.components.schemas))g.set(t,o(t));let v=fe(e,g);if(d&&d.length>0){let e=new Set(d);v=v.filter(t=>e.has(t.operationId))}if(ke(r,p,v),r.push(``),e.components?.schemas){r.push(`// Generated Zod Schemas`),r.push(``);let n=d&&d.length>0?new Set(_(v,e)):new Set(Object.keys(e.components.schemas)),i=t(e.components.schemas).filter(e=>n.has(e));for(let t of i){let n=e.components.schemas[t],i=g.get(t);r.push(b(i,n,s,h,g,e.components.schemas)),r.push(``),r.push(`export type ${i} = z.infer<typeof ${i}>;`),r.push(``)}}r.push(`// Path Functions`),r.push(`export const paths = {`);for(let e of v){let t=e.pathParams.map(e=>e.name).length>0,n=e.queryParams.length>0,s=o(e.operationId);if(!t&&!n){r.push(` ${a(s)}: () => "${e.path}",`);continue}let c=e=>{if(i(e))return e;let t=o(e);return i(t)||(t=`_${t}`),t},l=[],u=[];for(let t of e.pathParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}: string`);for(let t of e.queryParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}${t.required?``:`?`}: ${Fe(t)}`);let d=!t&&n&&e.queryParams.every(e=>!e.required),f=`${l.length?`{ ${l.join(`, `)} }`:`{}`}: { ${u.join(`, `)} }${d?` = {}`:``}`,p=e.path.replace(/{([^}]+)}/g,(e,t)=>`\${${c(t)}}`);if(!n){r.push(` ${a(s)}: (${f}) => \`${p}\`,`);continue}r.push(` ${a(s)}: (${f}) => {`),r.push(` const params = new URLSearchParams()`);for(let t of e.queryParams){let e=i(t.name)?t.name:c(o(t.name)),n=t.schema??{};if(n?.type===`array`){let i=Q(n.items??{},`value`);t.required?(r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`)):(r.push(` if (${e} !== undefined) {`),r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`),r.push(` }`));continue}let a=Q(n,e);t.required?r.push(` params.set("${t.name}", ${a})`):(r.push(` if (${e} !== undefined) {`),r.push(` params.set("${t.name}", ${a})`),r.push(` }`))}r.push(` const _searchParams = params.toString()`),r.push(` return \`${p}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),r.push(` },`)}r.push(`} as const;`),r.push(``),r.push(`// Header Schemas`),r.push(`export const headerSchemas = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: z.object({}),`);continue}let n=e.requestHeaders.map(e=>{let t=Pe(e),n=e.required?t:y(t,h.optionalType);return` ${a(e.name)}: ${n},`}).join(`
4
- `);r.push(` ${a(t)}: z.object({`),r.push(n),r.push(` }),`)}r.push(`} as const;`),r.push(``),r.push(`// Header Functions`),r.push(`export const headers = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: () => ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse({}),`);continue}r.push(` ${a(t)}: (params: z.input<${i(t)?`typeof headerSchemas.${t}`:`(typeof headerSchemas)[${a(t)}]`}>) => {`),r.push(` return ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse(params)`),r.push(` },`)}if(r.push(`} as const;`),r.push(``),e.components?.securitySchemes&&Object.keys(e.components.securitySchemes).length>0){r.push(`// Security Schemes`),r.push(`export const securitySchemes = {`);for(let[t,n]of Object.entries(e.components.securitySchemes)){let e=n;r.push(` ${a(t)}: {`),r.push(` type: ${JSON.stringify(e.type)},`),e.type===`http`?(r.push(` scheme: ${JSON.stringify(String(e.scheme).toLowerCase())},`),e.bearerFormat&&r.push(` bearerFormat: ${JSON.stringify(e.bearerFormat)},`)):e.type===`apiKey`?(r.push(` name: ${JSON.stringify(e.name)},`),r.push(` in: ${JSON.stringify(e.in)},`)):e.type===`oauth2`?r.push(` flows: ${JSON.stringify(e.flows)},`):e.type===`openIdConnect`&&r.push(` openIdConnectUrl: ${JSON.stringify(e.openIdConnectUrl)},`),r.push(` },`)}r.push(`} as const;`),r.push(``)}Se(r,v,e,g,h),Ce(r,v,e,g,h),Ae(r,v,p),r.push(`// Operation Objects`);for(let e of v){let t=o(e.operationId),n=p.emit?`: ${K(t,p.operationTypeSuffix)}`:``;if(r.push(`export const ${t}${n} = {`),r.push(` method: "${e.method}",`),r.push(` path: paths.${t},`),W(r,`request`,e.requestType),W(r,`response`,e.responseType),e.requestHeaders&&e.requestHeaders.length>0&&r.push(` headers: headers.${t},`),e.security!==void 0)if(e.security.length===0)r.push(` security: [],`);else{let t=e.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${JSON.stringify(t)}`).join(`, `)} }`);r.push(` security: [${t.join(`, `)}],`)}e.errors&&G(e.errors)&&De(r,`errors`,e.errors),r.push(`} as const;`),r.push(``)}je(r,v);let x={output:r.join(`
5
- `)};return p.emit&&p.helpers===`file`&&p.helpersOutput&&(x.helperFile={path:p.helpersOutput,content:we()}),x}function Ee(e,t={}){return U(e,t).output}function W(e,t,n){n&&e.push(` ${t}: ${n},`)}function De(e,t,n){if(!(!n||Object.keys(n).length===0)){e.push(` ${t}: {`);for(let[t,r]of Object.entries(n))e.push(` ${a(t)}: ${r},`);e.push(` },`)}}function G(e){return!!(e&&Object.keys(e).length>0)}function Oe(e){let t=e?.operationTypeSuffix??`Operation`;if(t!==``&&!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(t))throw Error(`Invalid operationTypeSuffix "${t}": must be a valid TypeScript identifier suffix (letters, digits, underscores, or $). Use "" for no suffix.`);return{emit:e?.emit??!0,helpers:e?.helpers??`package`,helpersOutput:e?.helpersOutput??`./zenko-types`,treeShake:e?.treeShake??!0,optionalType:e?.optionalType??`optional`,operationTypeSuffix:t}}function K(e,t){return`${s(e)}${t}`}function ke(e,t,n){if(t.emit)switch(t.helpers){case`package`:if(t.treeShake){let t=l(c(n),`package`);t&&e.push(t)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";`);return;case`file`:if(t.treeShake){let r=l(c(n),`file`,t.helpersOutput);r&&e.push(r)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${t.helpersOutput}";`);return;case`inline`:e.push(`type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;`),e.push(`type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";`),e.push(`type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;`),e.push(`type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);`),e.push(`type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(`type SecurityRequirement = Readonly<Record<string, readonly string[]>>;`),e.push(`type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``)}}function Ae(e,t,n){if(n.emit){e.push(`// Operation Types`);for(let r of t){let t=o(r.operationId),s=K(t,n.operationTypeSuffix),c=r.requestHeaders?.length?i(t)?`typeof headers.${t}`:`(typeof headers)[${a(t)}]`:`undefined`,l=Y(r.requestType),u=Y(r.responseType),d=Me(r.errors),f=r.security===void 0?`undefined`:r.security.length===0?`readonly []`:`readonly [${r.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`readonly ${a(e)}: readonly ${JSON.stringify(t)}`).join(`; `)} }`).join(`, `)}]`;e.push(`export type ${s} = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${i(t)?`typeof paths.${t}`:`(typeof paths)[${a(t)}]`},`),e.push(` ${l},`),e.push(` ${u},`),e.push(` ${c},`),e.push(` ${d},`),e.push(` ${f}`),e.push(`>;`),e.push(``)}}}function je(e,t){e.push(`// Operation Metadata`),e.push(`export const operationMetadata = {`);for(let n of t){let t=o(n.operationId);e.push(` ${a(t)}: {`),e.push(` method: ${JSON.stringify(n.method)},`),e.push(` path: ${JSON.stringify(n.path)},`),n.successResponses&&Object.keys(n.successResponses).length>0&&e.push(` successResponses: ${JSON.stringify(n.successResponses)},`),n.errorResponses&&Object.keys(n.errorResponses).length>0&&e.push(` errorResponses: ${JSON.stringify(n.errorResponses)},`),e.push(` },`)}e.push(`} as const;`),e.push(``)}function Me(e){return!e||!G(e)?`OperationErrors`:`OperationErrors<${Ne(e)}>`}function Ne(e){return!e||Object.keys(e).length===0?`unknown`:`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${X(t)}`).join(`; `)} }`}const q=new Set([`any`,`unknown`,`never`,`void`,`null`,`undefined`,`string`,`number`,`boolean`,`bigint`,`symbol`]),J=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Y(e){if(!e)return`undefined`;let t=e.trim();if(t===`undefined`)return`undefined`;if(q.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${Y(n[1])}>`:J.test(t)?`typeof ${t}`:t}function X(e){if(!e)return`unknown`;let t=e.trim();if(q.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${X(n[1])}>`:J.test(t)?`typeof ${t}`:t}function Pe(e){let t=e.schema??{};switch(t.type){case`integer`:case`number`:return`z.coerce.number()`;case`boolean`:return`z.coerce.boolean()`;case`array`:{let e=t.items??{type:`string`};return`z.array(${e.type===`integer`||e.type===`number`?`z.coerce.number()`:e.type===`boolean`?`z.coerce.boolean()`:`z.string()`})`}default:return`z.string()`}}function Fe(e){return Z(e.schema)}function Z(e){if(!e)return`string`;if(e.type===`array`)return`Array<${Z(e.items)}>`;switch(e.type){case`integer`:case`number`:return`number`;case`boolean`:return`boolean`;default:return`string`}}function Q(e,t){if(!e)return`String(${t})`;switch(e.type){case`integer`:case`number`:return`String(${t})`;case`boolean`:return`${t} ? "true" : "false"`;default:return`String(${t})`}}const Ie=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function Le(e){return e.split(`/`).filter(Boolean).map(e=>e.startsWith(`{`)&&e.endsWith(`}`)?`:${e.slice(1,-1)}`:e)}function Re(e){let t={};for(let[n,r]of Object.entries(e)){let e=Le(r.path),i=r.method.toLowerCase();if(!Ie.has(i))return{ok:!1,error:Error(`Unsupported method ${r.method} for ${n}`)};let a=ze(t,e,i,n);if(!a.ok)return a}return{ok:!0,value:t}}function ze(e,t,n,r){if(t.length===0){let t=e,i=t!==void 0&&typeof t==`object`&&t&&!Array.isArray(t)?{...t}:{};if(i[n]!==void 0){let e=`Duplicate ${n} on root for ${r} vs `,t=JSON.stringify(i[n]);return{ok:!1,error:Error(e+t)}}i[n]=r;for(let t of Object.keys(e))delete e[t];return Object.assign(e,i),{ok:!0,value:void 0}}let i=e;for(let e=0;e<t.length;e+=1){let a=t[e];if(e===t.length-1){let e=i[a],t=e!==void 0&&typeof e==`object`&&e&&!Array.isArray(e)?{...e}:{};if(t[n]!==void 0){let e=`Duplicate ${n} on ${a} for ${r} vs `,i=JSON.stringify(t[n]);return{ok:!1,error:Error(e+i)}}t[n]=r,i[a]=t}else{let e=i[a];if(e!==void 0&&typeof e!=`object`&&e!==null&&!Array.isArray(e))return{ok:!1,error:Error(`TreatyRouteTree conflict at segment ${JSON.stringify(a)}: cannot add nested path for ${n} (${r}); existing value is not an object: ${JSON.stringify(e)}`)};(e===void 0||typeof e!=`object`||!e||Array.isArray(e))&&(i[a]={}),i=i[a]}}return{ok:!0,value:void 0}}function Be(e){return Ve(e,1)}function Ve(e,t){let n=` `.repeat(t),r=[];for(let[i,o]of Object.entries(e)){let e=a(i);typeof o==`string`?r.push(`${n}${e}: ${o},`):o&&typeof o==`object`&&!Array.isArray(o)&&(r.push(`${n}${e}: {`),r.push(Ve(o,t+1)),r.push(`${n}},`))}return r.join(`
6
- `)}function $(e,t){let n=Re(e);if(!n.ok)throw n.error;let r=Object.keys(e).sort(),i=Be(n.value);return[`import { createTreatyClient, type TreatyClient } from "zenko/treaty";`,`import { ${r.join(`, `)} } from ${JSON.stringify(t.importPath)};`,``,`export const treatyRoutes = {`,i,`};`,``,`export function createClient(`,` baseUrl: string,`,` init?: { fetch?: typeof fetch }`,`): TreatyClient<typeof treatyRoutes> {`,` return createTreatyClient({`,` baseUrl,`,` routes: treatyRoutes,`,` fetch: init?.fetch,`,` })`,`}`,``].join(`
7
- `)}async function He(t){let n=await import(e(t.inputFile).href);if(!n.operationMetadata)throw Error(`Missing operationMetadata export in ${t.inputFile} — regenerate with the latest Zenko`);let r=n.operationMetadata;return $(r,{importPath:t.importPath})}export{U as i,$ as n,Ee as r,He as t};
8
- //# sourceMappingURL=treaty-generator-B2DqCcuW.mjs.map
@@ -1,8 +0,0 @@
1
- require(`./cli.cjs`);let e=require(`node:url`);function t(e){let t=new Set,r=new Set,i=[],a=o=>{if(t.has(o)||r.has(o))return;r.add(o);let s=e[o],c=n(s);for(let t of c)e[t]&&a(t);r.delete(o),t.add(o),i.push(o)};for(let t of Object.keys(e))a(t);return i}function n(e){let t=[],n=e=>{if(!(typeof e!=`object`||!e)){if(e.$ref&&typeof e.$ref==`string`){let n=r(e.$ref);t.push(n);return}if(Array.isArray(e))e.forEach(n);else{if(e.mapping&&typeof e.mapping==`object`)for(let n of Object.values(e.mapping))typeof n==`string`&&t.push(r(n));Object.values(e).forEach(n)}}};return n(e),[...new Set(t)]}function r(e){return(e.split(`/`).pop()||`Unknown`).replace(/\.(yml|yaml)$/i,``)}function i(e){if(!e)return!1;let t=e.at(0);return t===void 0||!/[a-zA-Z_$]/.test(t)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(`abstract.arguments.await.boolean.break.byte.case.catch.char.class.const.continue.debugger.default.delete.do.double.else.enum.eval.export.extends.false.final.finally.float.for.function.goto.if.implements.import.in.instanceof.int.interface.let.long.native.new.null.package.private.protected.public.return.short.static.super.switch.synchronized.this.throw.throws.transient.true.try.typeof.var.void.volatile.while.with.yield.async`.split(`.`)).has(e)}function a(e){return i(e)?e:`"${e}"`}function o(e){return e.replace(/-([a-zA-Z])/g,(e,t)=>t.toUpperCase()).replace(/-+$/,``)}function s(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e){let t={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(t.usesOperationDefinition=!0);for(let n of e)n.errors&&u(n.errors)&&(t.usesOperationErrors=!0);return e.length>0&&!t.usesOperationErrors&&e.some(e=>!e.errors||!u(e.errors))&&(t.usesOperationErrors=!0),t}function l(e,t,n){let r=[];if(e.usesHeaderFn&&r.push(`HeaderFn`),e.usesOperationDefinition&&r.push(`OperationDefinition`),e.usesOperationErrors&&r.push(`OperationErrors`),r.length===0)return``;let i=t===`package`?`"zenko"`:`"${n}"`;return`import type { ${r.join(`, `)} } from ${i};`}function u(e){return!!(e&&Object.keys(e).length>0)}const d={"application/json":`unknown`,"text/csv":`string`,"text/plain":`string`,"application/octet-stream":`unknown`,"application/pdf":`unknown`};function f(e){let t=Object.keys(e);if(t.includes(`application/json`))return`application/json`;for(let e of t)if(e in d)return e;return t[0]||``}function p(e){let t=e.toLowerCase().split(`;`)[0]?.trim();return t?!!(t.startsWith(`text/`)||t===`application/xml`||t.startsWith(`application/`)&&t.endsWith(`+xml`)):!1}function m(e,t){if(!t||!p(e)||t.$ref)return t;let n=t.nullable===!0?{nullable:!0}:{};return t.enum?{type:`string`,enum:t.enum,...n}:{type:`string`,...n}}function h(e,t){if(e){if(e.$ref){let n=r(e.$ref),i=t.components?.parameters?.[n];if(!i)return;let{$ref:a,...o}=e;return{...i,...o}}return e}}function g(e){let t=new Map;for(let[,n]of Object.entries(e.paths||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}for(let[,n]of Object.entries(e.webhooks||{}))for(let[,e]of Object.entries(n)){let n=e;n.operationId&&t.set(n.operationId,n)}return t}function _(e,t){let i=new Set,a=new Map,o=e=>{if(!e)return[];if(a.has(e))return a.get(e)??[];let t=n(e);return a.set(e,t),t},s=g(t);for(let n of e){let e=s.get(n.operationId);if(!e)continue;let a=e.requestBody?.content?.[`application/json`]?.schema;if(a?.$ref){let e=r(a.$ref);i.add(e)}else if(a){let e=o(a);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}let c=e.responses||{};for(let[,e]of Object.entries(c)){let n=e?.content;if(!n)continue;let a=f(n),s=n[a]?.schema,c=m(a,s);if(c?.$ref){let e=r(c.$ref);i.add(e)}else if(c){let e=o(c);for(let n of e)t.components?.schemas?.[n]&&i.add(n)}}for(let e of n.queryParams){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}for(let e of n.requestHeaders||[]){if(e.schema?.$ref){let t=r(e.schema.$ref);i.add(t)}if(e.schema?.items?.$ref){let t=r(e.schema.items.$ref);i.add(t)}}let l=e.parameters||[];for(let e of l){let n=h(e,t);if(n?.schema?.$ref){let e=r(n.schema.$ref);i.add(e)}if(n?.schema?.items?.$ref){let e=r(n.schema.items.$ref);i.add(e)}}}let c=new Set,l=Array.from(i);for(;l.length>0;){let e=l.pop();if(c.has(e))continue;c.add(e);let n=t.components?.schemas?.[e];if(!n)continue;let r=o(n);for(let e of r)t.components?.schemas?.[e]&&!c.has(e)&&(i.add(e),l.push(e))}return i}function v(e,t){return t===!0?!0:Array.isArray(t)?t.includes(e):!1}function y(e,t){switch(t){case`optional`:return`${e}.optional()`;case`nullable`:return`${e}.nullable()`;case`nullish`:return`${e}.nullish()`}}function b(e,t,n,r,i,a){if(n.has(e))return``;if(n.add(e),t.enum){let n=t.enum.map(e=>`"${e}"`).join(`, `);if(v(e,r.openEnums)){let t=r.openEnumPrefix;return`const ${e}Known = [${n}] as const;\nexport const ${e} = z.enum(${e}Known).or(\n z.string().transform((v): \`${t}\${string}\` => \`${t}\${v}\`)\n);`}return`export const ${e} = z.enum([${n}]);`}if(t.allOf&&Array.isArray(t.allOf)){let n=w(t),o=n.map(t=>k(t,r,i,a,e));if(o.length===0)return`export const ${e} = z.object({});`;if(o.length===1)return`export const ${e} = ${o[0]};`;let s=n.every(e=>E(e,a))?`merge`:`and`;return`export const ${e} = ${o[0]}${o.slice(1).map(e=>`.${s}(${e})`).join(``)};`}if(t.type===`object`||t.properties)return`export const ${e} = ${ae(t,r,i,a,e)};`;if(t.type===`array`){let n=t.items??{type:`unknown`},o=k(n,r,i,a,e),s=r.strictNumeric||t.minItems!==void 0||t.maxItems!==void 0||t.uniqueItems===!0;return`export const ${e} = ${j(t,`z.array(${o})`,n,s)};`}return`export const ${e} = ${k(t,r,i,a,e,e)};`}function x(e,t,n,r,i){let a=e.map(e=>k(e,t,n,r,i));return a.length===0?`z.unknown()`:a.length===1?a[0]??`z.unknown()`:`z.union([${a.join(`, `)}])`}function S(e){return e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}function ee(e,t){if(!e?.$ref)return e;let n=r(e.$ref);return t?.[n]??e}function C(e){return[`$ref`,`type`,`properties`,`required`,`additionalProperties`,`items`,`enum`,`const`,`oneOf`,`anyOf`,`not`].some(t=>e?.[t]!==void 0)}function w(e){let t=Array.isArray(e.allOf)?[...e.allOf]:[],n={...e};return delete n.allOf,C(n)&&t.push(n),t}function T(e,t,n,i,a=new Set){if(!e||a.has(e))return!1;if(a.add(e),e.$ref){let o=r(e.$ref);if((i?.get(o)||o)===t)return!0;let s=n?.[o];if(s)return T(s,t,n,i,a)}return Array.isArray(e.allOf)?e.allOf.some(e=>T(e,t,n,i,a)):Array.isArray(e.oneOf)?e.oneOf.some(e=>T(e,t,n,i,a)):Array.isArray(e.anyOf)?e.anyOf.some(e=>T(e,t,n,i,a)):e.not?T(e.not,t,n,i,a):e.items?T(e.items,t,n,i,a):e.properties?Object.values(e.properties).some(e=>T(e,t,n,i,a)):e.additionalProperties&&typeof e.additionalProperties==`object`?T(e.additionalProperties,t,n,i,a):!1}function E(e,t){let n=ee(e,t);return n?n.allOf&&Array.isArray(n.allOf)?w(n).every(e=>E(e,t)):n.type===`object`||n.properties!==void 0||n.additionalProperties!==void 0:!1}function te(e){let t=new Map;if(!e?.mapping)return t;for(let[n,i]of Object.entries(e.mapping)){if(typeof i!=`string`)continue;let e=r(i),a=t.get(e);if(a){a.values.includes(n)||a.values.push(n);continue}t.set(e,{ref:i,values:[n]})}return t}function D(e,t,n,i=new Set){if(!e||typeof e!=`object`||i.has(e))return[];if(i.add(e),e.$ref&&typeof e.$ref==`string`){let a=r(e.$ref),o=n?.[a];return o?D(o,t,n,i):[]}let a=[],o=e.properties?.[t];if(o){let e=o.const;e!==void 0&&S(e)?a.push(e):Array.isArray(o.enum)&&o.enum?.length===1&&S(o.enum?.[0])&&a.push(o.enum?.[0])}if(Array.isArray(e.allOf))for(let r of e.allOf)a.push(...D(r,t,n,i));return Array.from(new Set(a))}function O(e,t,n){return{allOf:[e,{type:`object`,properties:{[t]:{const:n}},required:[t]}]}}function ne(e,t,n,i){let a=new Set;for(let t of e)t?.$ref&&a.add(r(t.$ref));let o=[],s=!1;for(let a of e){let e=[];if(a?.$ref){let o=r(a.$ref),s=n.get(o);s?.values.length&&e.push(...s.values),e.push(...D(a,t,i))}else e.push(...D(a,t,i));let c=Array.from(new Set(e));if(c.length===0){s=!0,o.push(a);continue}for(let e of c)o.push(O(a,t,e))}for(let[e,r]of n.entries()){if(a.has(e))continue;let n={$ref:r.ref};for(let e of r.values)o.push(O(n,t,e))}return{schemas:o,hasUnmapped:s}}function re(e,t,n,r,i,a,o){let{schemas:s,hasUnmapped:c}=ne(e,t,o??new Map,i),l=s.map(e=>k(e,n,r,i,a));return l.length===0?`z.unknown()`:l.length===1?l[0]??`z.unknown()`:c?`z.union([${l.join(`, `)}])`:`z.discriminatedUnion(${JSON.stringify(t)}, [${l.join(`, `)}])`}function k(e,t,n,i,a,o){if(e.$ref){let t=r(e.$ref),o=n?.get(t)||t;return a&&(o===a||T(i?.[t],a,i,n))?`z.lazy((): z.ZodType => ${o})`:o}if(e.const!==void 0&&S(e.const))return`z.literal(${JSON.stringify(e.const)})`;if(e.enum)return e.enum.length===1?`z.literal(${JSON.stringify(e.enum[0])})`:`z.enum([${e.enum.map(e=>`"${e}"`).join(`, `)}])`;if(e.not){let r=e.not,o={...e};delete o.not;let s=C(o)?k(o,t,n,i,a):`z.any()`;return r?.type===`string`&&r.maxLength===0?`${s}.refine((value) => typeof value !== "string" || value.length > 0, { message: "Value must not be empty" })`:`${s}.refine((value) => !${k(r,t,n,i,a)}.safeParse(value).success, { message: "Value must not match schema" })`}if(e.allOf&&Array.isArray(e.allOf)){let r=w(e),o=r.map(e=>k(e,t,n,i,a));if(o.length===0)return`z.object({})`;if(o.length===1)return o[0]??`z.object({})`;let s=r.every(e=>E(e,i))?`merge`:`and`;return`${o[0]}${o.slice(1).map(e=>`.${s}(${e})`).join(``)}`}if(e.oneOf&&Array.isArray(e.oneOf)){if(e.discriminator?.propertyName){let r=te(e.discriminator);return re(e.oneOf,e.discriminator.propertyName,t,n,i,a,r)}return x(e.oneOf,t,n,i,a)}if(e.anyOf&&Array.isArray(e.anyOf))return x(e.anyOf,t,n,i,a);if(e.type===`object`||e.properties||e.allOf)return ae(e,t,n,i,a);switch(e.type){case`string`:return oe(e,t,o);case`boolean`:return`z.boolean()`;case`array`:{let r=e.items??{type:`unknown`},o=k(r,t,n,i,a),s=t.strictNumeric||e.minItems!==void 0||e.maxItems!==void 0||e.uniqueItems===!0;return j(e,`z.array(${o})`,r,s)}case`null`:return`z.null()`;case`number`:return A(e,t);case`integer`:return ce(e,t);default:return`z.unknown()`}}function ie(e,t){if(!e||!t)return new Set;let n=new Set;for(let i of Object.values(e)){if(!i||typeof i!=`object`)continue;let e=i.discriminator?.propertyName;if(!e||!Array.isArray(i.oneOf))continue;let a=i.oneOf.some(e=>e?.$ref&&r(e.$ref)===t),o=Object.values(i.discriminator?.mapping??{}).some(e=>typeof e==`string`&&r(e)===t);(a||o)&&n.add(e)}return n}function ae(e,t,n,r,i){let o=[],s=ie(r,i),c=new Set(e.required??[]);for(let[l,u]of Object.entries(e.properties||{})){let e=c.has(l)||s.has(l),d=k(u,t,n,r,i),f=y(d,t.optionalType),p=t.optionalType===`nullable`?f:se(f,u),m=e?d:p;o.push(` ${a(l)}: ${m},`)}let l=o.length===0?`z.object({})`:`z.object({\n${o.join(`
2
- `)}\n})`;return e.additionalProperties===void 0?l:e.additionalProperties===!1?`${l}.strict()`:e.additionalProperties===!0?`${l}.passthrough()`:`${l}.catchall(${k(e.additionalProperties,t,n,r,i)})`}function oe(e,t,n){if(e.format===`binary`)return`(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))`;if(t.strictDates)switch(e.format){case`date-time`:return t.dateTimeOffset===!0||Array.isArray(t.dateTimeOffset)&&n!==void 0&&t.dateTimeOffset.includes(n)?`z.string().datetime({ offset: true })`:`z.string().datetime()`;case`date`:return`z.string().date()`;case`time`:return`z.string().time()`;case`duration`:return`z.string().duration()`}let r=`z.string()`;switch(t.strictNumeric&&(typeof e.minLength==`number`&&(r+=`.min(${e.minLength})`),typeof e.maxLength==`number`&&(r+=`.max(${e.maxLength})`),e.pattern&&(r+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case`uuid`:return`${r}.uuid()`;case`email`:return`${r}.email()`;case`uri`:case`url`:return`${r}.url()`;case`ipv4`:return`${r}.ip({ version: "v4" })`;case`ipv6`:return`${r}.ip({ version: "v6" })`;default:return r}}function se(e,t){return!t||t.default===void 0||t.default===null&&!(e.includes(`.nullable()`)||e.includes(`.nullish()`)||t.type===`null`||Array.isArray(t.type)&&t.type.includes(`null`))?e:`${e}.default(${JSON.stringify(t.default)})`}function A(e,t){let n=`z.number()`;return t.strictNumeric&&(n=ue(e,n),typeof e.multipleOf==`number`&&e.multipleOf!==0&&(n+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),n}function ce(e,t){let n=A(e,t);return n+=`.int()`,n}function j(e,t,n,r){return r?(typeof e.minItems==`number`&&(t+=`.min(${e.minItems})`),typeof e.maxItems==`number`&&(t+=`.max(${e.maxItems})`),e.uniqueItems&&le(n)&&(t+=`.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })`),t):t}function le(e){return e?.$ref?!1:new Set([`string`,`number`,`integer`,`boolean`]).has(e?.type)}function ue(e,t){return typeof e.minimum==`number`?e.exclusiveMinimum===!0?t+=`.gt(${e.minimum})`:t+=`.min(${e.minimum})`:typeof e.exclusiveMinimum==`number`&&(t+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum==`number`?e.exclusiveMaximum===!0?t+=`.lt(${e.maximum})`:t+=`.max(${e.maximum})`:typeof e.exclusiveMaximum==`number`&&(t+=`.lt(${e.exclusiveMaximum})`),t}const de={400:`badRequest`,401:`unauthorized`,402:`paymentRequired`,403:`forbidden`,404:`notFound`,405:`methodNotAllowed`,406:`notAcceptable`,407:`proxyAuthenticationRequired`,408:`requestTimeout`,409:`conflict`,410:`gone`,411:`lengthRequired`,412:`preconditionFailed`,413:`payloadTooLarge`,414:`uriTooLong`,415:`unsupportedMediaType`,416:`rangeNotSatisfiable`,417:`expectationFailed`,418:`imATeapot`,421:`misdirectedRequest`,422:`unprocessableEntity`,423:`locked`,424:`failedDependency`,425:`tooEarly`,426:`upgradeRequired`,428:`preconditionRequired`,429:`tooManyRequests`,431:`requestHeaderFieldsTooLarge`,451:`unavailableForLegalReasons`,500:`internalServerError`,501:`notImplemented`,502:`badGateway`,503:`serviceUnavailable`,504:`gatewayTimeout`,505:`httpVersionNotSupported`,506:`variantAlsoNegotiates`,507:`insufficientStorage`,508:`loopDetected`,510:`notExtended`,511:`networkAuthenticationRequired`};function M(e){if(e===`default`)return`defaultError`;let t=e.trim(),n=de[t];if(n)return n;if(/^\d{3}$/.test(t))return`status${t}`;let r=t.toLowerCase().replace(/[^a-z0-9]+/g,` `).trim();if(!r)return`unknownError`;let[i,...a]=r.split(/\s+/),o=i+a.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``);return o?/^[a-zA-Z_$]/.test(o)?o:`status${o.charAt(0).toUpperCase()}${o.slice(1)}`:`unknownError`}function N(e){if(e===`default`)return!0;let t=Number(e);return Number.isInteger(t)?t>=400:!1}function fe(e,t){let n=[];if(e.paths)for(let[r,i]of Object.entries(e.paths))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!H(s)||!o.operationId)continue;let c=F(r),l=I(o,t),{successResponse:u,errors:d,successResponses:f,errorResponses:p}=L(o,o.operationId,t),m=P(i,o,e),h=z(m),g=B(m),_=V(o,e);n.push({operationId:o.operationId,path:r,method:s,pathParams:c,queryParams:g,requestType:l,responseType:u,successResponses:f,errorResponses:p,requestHeaders:h,errors:d,security:_})}if(e.webhooks)for(let[r,i]of Object.entries(e.webhooks))for(let[a,o]of Object.entries(i)){let s=a.toLowerCase();if(!H(s)||!o.operationId)continue;let c=r,l=F(c),u=I(o,t),{successResponse:d,errors:f,successResponses:p,errorResponses:m}=L(o,o.operationId,t),h=P(i,o,e),g=z(h),_=B(h),v=V(o,e);n.push({operationId:o.operationId,path:c,method:s,pathParams:l,queryParams:_,requestType:u,responseType:d,successResponses:p,errorResponses:m,requestHeaders:g,errors:f,security:v})}return n}function P(e,t,n){let r=new Map,i=e=>{if(Array.isArray(e))for(let t of e){let e=h(t,n);if(!e)continue;let i=`${e.in}:${e.name}`;r.set(i,e)}};return i(e.parameters),i(t.parameters),Array.from(r.values())}function F(e){let t=[],n=e.match(/{([^}]+)}/g);if(n)for(let e of n){let n=e.slice(1,-1);t.push({name:n,type:`string`})}return t}function I(e,t){let n=pe(e);if(n){if(n.$ref){let e=r(n.$ref);return t?.get(e)||e}return`${s(o(e.operationId))}Request`}}function pe(e){let t=e?.requestBody?.content;if(!(!t||Object.keys(t).length===0))for(let e of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=t[e]?.schema;if(n)return n}}function L(e,t,n){let r=e.responses??{},i=new Map,a=[];for(let[e,t]of Object.entries(r)){let n=t?.content;if(!n||Object.keys(n).length===0){e===`204`||/^3\d\d$/.test(e)?i.set(e,`undefined`):N(e)&&a.push({code:e,schema:`undefined`});continue}let r=f(n),o=n[r]?.schema,s=m(r,o);if(!s){let t=ve(r,e);t&&(N(e)?a.push({code:e,schema:t}):/^2\d\d$/.test(e)&&i.set(e,t));continue}if(N(e)){a.push({code:e,schema:s});continue}/^2\d\d$/.test(e)&&i.set(e,s)}return{successResponse:ge(i,t,n),errors:_e(a,t,n),successResponses:me(i,t,n),errorResponses:he(a,t,n)}}function me(e,t,n){if(e.size===0)return;let r={};for(let[i,a]of e)typeof a==`string`?r[i]=a:r[i]=R(a,`${s(o(t))}Status${i}`,n);return r}function he(e,t,n){if(e.length===0)return;let r={};for(let{code:i,schema:a}of e){let e=M(i);r[i]=R(a,`${s(o(t))}${s(e)}`,n)}return r}function ge(e,t,n){if(e.size===0)return;for(let r of[`200`,`201`,`204`]){let i=e.get(r);if(i)return typeof i==`string`?i:R(i,`${s(o(t))}Response`,n)}let[,r]=e.entries().next().value??[];if(r)return typeof r==`string`?r:R(r,`${s(o(t))}Response`,n)}function _e(e=[],t,n){if(!e.length)return;let r={};for(let{code:i,schema:a}of e){let e=M(i);r[e]=R(a,`${s(o(t))}${s(e)}`,n)}return r}function R(e,t,n){if(typeof e==`string`)return e;if(e.$ref){let t=r(e.$ref);return n?.get(t)||t}if(e.type===`array`&&e.items?.$ref){let t=r(e.items.$ref);return`z.array(${n?.get(t)||t})`}return e.allOf&&Array.isArray(e.allOf),t}function z(e){let t=[];for(let n of e??[])n.in===`header`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function B(e){let t=[];for(let n of e??[])n.in===`query`&&t.push({name:n.name,description:n.description,schema:n.schema,required:n.required});return t}function V(e,t){let n=e.security;if(Array.isArray(n))return n.length===0?[]:n;if(Array.isArray(t.security)&&t.security.length>0)return t.security}function H(e){switch(e){case`get`:case`put`:case`post`:case`delete`:case`options`:case`head`:case`patch`:case`trace`:return!0;default:return!1}}function ve(e,t){return t===`204`||/^3\d\d$/.test(t)?`undefined`:e in d?d[e]:`unknown`}function ye(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.requestBody;if(i&&i.content){let e=i.content,r=be(e);if(!r)continue;let a=`${s(o(t.operationId))}Request`;(!r.$ref||r.allOf||r.oneOf||r.anyOf)&&n.set(a,r)}}return n}function be(e){for(let t of[`application/json`,`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=e[t]?.schema;if(n)return n}}function xe(e,t){let n=new Map,r=g(t);for(let t of e){let e=r.get(t.operationId);if(!e)continue;let i=e.responses||{};for(let[e,r]of Object.entries(i))if(/^2\d\d$/.test(e)&&r.content){let e=r.content,i=f(e),a=e[i]?.schema,c=m(i,a);if(!c)continue;let l=`${s(o(t.operationId))}Response`;(!c.$ref||c.allOf||c.oneOf||c.anyOf)&&n.set(l,c)}}return n}function Se(e,t,n,r,i){let a=ye(t,n);if(a.size>0){e.push(`// Generated Request Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function Ce(e,t,n,r,i){let a=xe(t,n);if(a.size>0){e.push(`// Generated Response Types`),e.push(``);for(let[t,n]of a){let a=b(t,n,new Set,i,r);e.push(a),e.push(``),e.push(`export type ${t} = z.infer<typeof ${t}>;`),e.push(``)}}}function we(){let e=[];return e.push(`// Generated helper types for Zenko`),e.push(`// This file provides type definitions for operation objects and path functions`),e.push(``),e.push(`export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string`),e.push(``),e.push(`export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"`),e.push(``),e.push(`export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult`),e.push(``),e.push(`export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)`),e.push(``),e.push(`export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(``),e.push(`export type SecurityRequirement = Readonly<Record<string, readonly string[]>>`),e.push(``),e.push(`export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``),e.join(`
3
- `)}function Te(e){return e===void 0?{open:!1,prefix:`Unknown:`}:typeof e==`boolean`||Array.isArray(e)?{open:e,prefix:`Unknown:`}:{open:e.open??!1,prefix:e.unknownPrefix??`Unknown:`}}function U(e,n={}){let r=[],s=new Set,{strictDates:c=!1,strictNumeric:l=!1,dateTimeOffset:u=!0,operationIds:d,openEnums:f=!1}=n,p=Oe({...n.types,operationTypeSuffix:n.types?.operationTypeSuffix??`Operation`}),m=Te(f),h={strictDates:c,strictNumeric:l,dateTimeOffset:u,optionalType:p.optionalType,openEnums:m.open,openEnumPrefix:m.prefix};r.push(`import { z } from "zod";`);let g=new Map;if(e.components?.schemas)for(let t of Object.keys(e.components.schemas))g.set(t,o(t));let v=fe(e,g);if(d&&d.length>0){let e=new Set(d);v=v.filter(t=>e.has(t.operationId))}if(ke(r,p,v),r.push(``),e.components?.schemas){r.push(`// Generated Zod Schemas`),r.push(``);let n=d&&d.length>0?new Set(_(v,e)):new Set(Object.keys(e.components.schemas)),i=t(e.components.schemas).filter(e=>n.has(e));for(let t of i){let n=e.components.schemas[t],i=g.get(t);r.push(b(i,n,s,h,g,e.components.schemas)),r.push(``),r.push(`export type ${i} = z.infer<typeof ${i}>;`),r.push(``)}}r.push(`// Path Functions`),r.push(`export const paths = {`);for(let e of v){let t=e.pathParams.map(e=>e.name).length>0,n=e.queryParams.length>0,s=o(e.operationId);if(!t&&!n){r.push(` ${a(s)}: () => "${e.path}",`);continue}let c=e=>{if(i(e))return e;let t=o(e);return i(t)||(t=`_${t}`),t},l=[],u=[];for(let t of e.pathParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}: string`);for(let t of e.queryParams)l.push(i(t.name)?t.name:`${a(t.name)}: ${c(t.name)}`),u.push(`${a(t.name)}${t.required?``:`?`}: ${Fe(t)}`);let d=!t&&n&&e.queryParams.every(e=>!e.required),f=`${l.length?`{ ${l.join(`, `)} }`:`{}`}: { ${u.join(`, `)} }${d?` = {}`:``}`,p=e.path.replace(/{([^}]+)}/g,(e,t)=>`\${${c(t)}}`);if(!n){r.push(` ${a(s)}: (${f}) => \`${p}\`,`);continue}r.push(` ${a(s)}: (${f}) => {`),r.push(` const params = new URLSearchParams()`);for(let t of e.queryParams){let e=i(t.name)?t.name:c(o(t.name)),n=t.schema??{};if(n?.type===`array`){let i=Q(n.items??{},`value`);t.required?(r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`)):(r.push(` if (${e} !== undefined) {`),r.push(` for (const value of ${e}) {`),r.push(` params.append("${t.name}", ${i})`),r.push(` }`),r.push(` }`));continue}let a=Q(n,e);t.required?r.push(` params.set("${t.name}", ${a})`):(r.push(` if (${e} !== undefined) {`),r.push(` params.set("${t.name}", ${a})`),r.push(` }`))}r.push(` const _searchParams = params.toString()`),r.push(` return \`${p}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),r.push(` },`)}r.push(`} as const;`),r.push(``),r.push(`// Header Schemas`),r.push(`export const headerSchemas = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: z.object({}),`);continue}let n=e.requestHeaders.map(e=>{let t=Pe(e),n=e.required?t:y(t,h.optionalType);return` ${a(e.name)}: ${n},`}).join(`
4
- `);r.push(` ${a(t)}: z.object({`),r.push(n),r.push(` }),`)}r.push(`} as const;`),r.push(``),r.push(`// Header Functions`),r.push(`export const headers = {`);for(let e of v){let t=o(e.operationId);if(!e.requestHeaders||e.requestHeaders.length===0){r.push(` ${a(t)}: () => ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse({}),`);continue}r.push(` ${a(t)}: (params: z.input<${i(t)?`typeof headerSchemas.${t}`:`(typeof headerSchemas)[${a(t)}]`}>) => {`),r.push(` return ${i(t)?`headerSchemas.${t}`:`headerSchemas[${a(t)}]`}.parse(params)`),r.push(` },`)}if(r.push(`} as const;`),r.push(``),e.components?.securitySchemes&&Object.keys(e.components.securitySchemes).length>0){r.push(`// Security Schemes`),r.push(`export const securitySchemes = {`);for(let[t,n]of Object.entries(e.components.securitySchemes)){let e=n;r.push(` ${a(t)}: {`),r.push(` type: ${JSON.stringify(e.type)},`),e.type===`http`?(r.push(` scheme: ${JSON.stringify(String(e.scheme).toLowerCase())},`),e.bearerFormat&&r.push(` bearerFormat: ${JSON.stringify(e.bearerFormat)},`)):e.type===`apiKey`?(r.push(` name: ${JSON.stringify(e.name)},`),r.push(` in: ${JSON.stringify(e.in)},`)):e.type===`oauth2`?r.push(` flows: ${JSON.stringify(e.flows)},`):e.type===`openIdConnect`&&r.push(` openIdConnectUrl: ${JSON.stringify(e.openIdConnectUrl)},`),r.push(` },`)}r.push(`} as const;`),r.push(``)}Se(r,v,e,g,h),Ce(r,v,e,g,h),Ae(r,v,p),r.push(`// Operation Objects`);for(let e of v){let t=o(e.operationId),n=p.emit?`: ${K(t,p.operationTypeSuffix)}`:``;if(r.push(`export const ${t}${n} = {`),r.push(` method: "${e.method}",`),r.push(` path: paths.${t},`),W(r,`request`,e.requestType),W(r,`response`,e.responseType),e.requestHeaders&&e.requestHeaders.length>0&&r.push(` headers: headers.${t},`),e.security!==void 0)if(e.security.length===0)r.push(` security: [],`);else{let t=e.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${JSON.stringify(t)}`).join(`, `)} }`);r.push(` security: [${t.join(`, `)}],`)}e.errors&&G(e.errors)&&De(r,`errors`,e.errors),r.push(`} as const;`),r.push(``)}je(r,v);let x={output:r.join(`
5
- `)};return p.emit&&p.helpers===`file`&&p.helpersOutput&&(x.helperFile={path:p.helpersOutput,content:we()}),x}function Ee(e,t={}){return U(e,t).output}function W(e,t,n){n&&e.push(` ${t}: ${n},`)}function De(e,t,n){if(!(!n||Object.keys(n).length===0)){e.push(` ${t}: {`);for(let[t,r]of Object.entries(n))e.push(` ${a(t)}: ${r},`);e.push(` },`)}}function G(e){return!!(e&&Object.keys(e).length>0)}function Oe(e){let t=e?.operationTypeSuffix??`Operation`;if(t!==``&&!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(t))throw Error(`Invalid operationTypeSuffix "${t}": must be a valid TypeScript identifier suffix (letters, digits, underscores, or $). Use "" for no suffix.`);return{emit:e?.emit??!0,helpers:e?.helpers??`package`,helpersOutput:e?.helpersOutput??`./zenko-types`,treeShake:e?.treeShake??!0,optionalType:e?.optionalType??`optional`,operationTypeSuffix:t}}function K(e,t){return`${s(e)}${t}`}function ke(e,t,n){if(t.emit)switch(t.helpers){case`package`:if(t.treeShake){let t=l(c(n),`package`);t&&e.push(t)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";`);return;case`file`:if(t.treeShake){let r=l(c(n),`file`,t.helpersOutput);r&&e.push(r)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${t.helpersOutput}";`);return;case`inline`:e.push(`type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;`),e.push(`type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";`),e.push(`type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;`),e.push(`type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);`),e.push(`type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;`),e.push(`type SecurityRequirement = Readonly<Record<string, readonly string[]>>;`),e.push(`type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined, TSecurity extends readonly SecurityRequirement[] | undefined = undefined> = {`),e.push(` method: TMethod`),e.push(` path: TPath`),e.push(` request?: TRequest`),e.push(` response?: TResponse`),e.push(` headers?: THeaders`),e.push(` errors?: TErrors`),e.push(` security?: TSecurity`),e.push(`}`),e.push(``)}}function Ae(e,t,n){if(n.emit){e.push(`// Operation Types`);for(let r of t){let t=o(r.operationId),s=K(t,n.operationTypeSuffix),c=r.requestHeaders?.length?i(t)?`typeof headers.${t}`:`(typeof headers)[${a(t)}]`:`undefined`,l=Y(r.requestType),u=Y(r.responseType),d=Me(r.errors),f=r.security===void 0?`undefined`:r.security.length===0?`readonly []`:`readonly [${r.security.map(e=>`{ ${Object.entries(e).map(([e,t])=>`readonly ${a(e)}: readonly ${JSON.stringify(t)}`).join(`; `)} }`).join(`, `)}]`;e.push(`export type ${s} = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${i(t)?`typeof paths.${t}`:`(typeof paths)[${a(t)}]`},`),e.push(` ${l},`),e.push(` ${u},`),e.push(` ${c},`),e.push(` ${d},`),e.push(` ${f}`),e.push(`>;`),e.push(``)}}}function je(e,t){e.push(`// Operation Metadata`),e.push(`export const operationMetadata = {`);for(let n of t){let t=o(n.operationId);e.push(` ${a(t)}: {`),e.push(` method: ${JSON.stringify(n.method)},`),e.push(` path: ${JSON.stringify(n.path)},`),n.successResponses&&Object.keys(n.successResponses).length>0&&e.push(` successResponses: ${JSON.stringify(n.successResponses)},`),n.errorResponses&&Object.keys(n.errorResponses).length>0&&e.push(` errorResponses: ${JSON.stringify(n.errorResponses)},`),e.push(` },`)}e.push(`} as const;`),e.push(``)}function Me(e){return!e||!G(e)?`OperationErrors`:`OperationErrors<${Ne(e)}>`}function Ne(e){return!e||Object.keys(e).length===0?`unknown`:`{ ${Object.entries(e).map(([e,t])=>`${a(e)}: ${X(t)}`).join(`; `)} }`}const q=new Set([`any`,`unknown`,`never`,`void`,`null`,`undefined`,`string`,`number`,`boolean`,`bigint`,`symbol`]),J=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Y(e){if(!e)return`undefined`;let t=e.trim();if(t===`undefined`)return`undefined`;if(q.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${Y(n[1])}>`:J.test(t)?`typeof ${t}`:t}function X(e){if(!e)return`unknown`;let t=e.trim();if(q.has(t)||t.startsWith(`typeof `))return t;let n=t.match(/^z\.array\((.+)\)$/);return n?`z.ZodArray<${X(n[1])}>`:J.test(t)?`typeof ${t}`:t}function Pe(e){let t=e.schema??{};switch(t.type){case`integer`:case`number`:return`z.coerce.number()`;case`boolean`:return`z.coerce.boolean()`;case`array`:{let e=t.items??{type:`string`};return`z.array(${e.type===`integer`||e.type===`number`?`z.coerce.number()`:e.type===`boolean`?`z.coerce.boolean()`:`z.string()`})`}default:return`z.string()`}}function Fe(e){return Z(e.schema)}function Z(e){if(!e)return`string`;if(e.type===`array`)return`Array<${Z(e.items)}>`;switch(e.type){case`integer`:case`number`:return`number`;case`boolean`:return`boolean`;default:return`string`}}function Q(e,t){if(!e)return`String(${t})`;switch(e.type){case`integer`:case`number`:return`String(${t})`;case`boolean`:return`${t} ? "true" : "false"`;default:return`String(${t})`}}const Ie=new Set([`get`,`post`,`put`,`patch`,`delete`,`options`,`head`,`connect`,`trace`]);function Le(e){return e.split(`/`).filter(Boolean).map(e=>e.startsWith(`{`)&&e.endsWith(`}`)?`:${e.slice(1,-1)}`:e)}function Re(e){let t={};for(let[n,r]of Object.entries(e)){let e=Le(r.path),i=r.method.toLowerCase();if(!Ie.has(i))return{ok:!1,error:Error(`Unsupported method ${r.method} for ${n}`)};let a=ze(t,e,i,n);if(!a.ok)return a}return{ok:!0,value:t}}function ze(e,t,n,r){if(t.length===0){let t=e,i=t!==void 0&&typeof t==`object`&&t&&!Array.isArray(t)?{...t}:{};if(i[n]!==void 0){let e=`Duplicate ${n} on root for ${r} vs `,t=JSON.stringify(i[n]);return{ok:!1,error:Error(e+t)}}i[n]=r;for(let t of Object.keys(e))delete e[t];return Object.assign(e,i),{ok:!0,value:void 0}}let i=e;for(let e=0;e<t.length;e+=1){let a=t[e];if(e===t.length-1){let e=i[a],t=e!==void 0&&typeof e==`object`&&e&&!Array.isArray(e)?{...e}:{};if(t[n]!==void 0){let e=`Duplicate ${n} on ${a} for ${r} vs `,i=JSON.stringify(t[n]);return{ok:!1,error:Error(e+i)}}t[n]=r,i[a]=t}else{let e=i[a];if(e!==void 0&&typeof e!=`object`&&e!==null&&!Array.isArray(e))return{ok:!1,error:Error(`TreatyRouteTree conflict at segment ${JSON.stringify(a)}: cannot add nested path for ${n} (${r}); existing value is not an object: ${JSON.stringify(e)}`)};(e===void 0||typeof e!=`object`||!e||Array.isArray(e))&&(i[a]={}),i=i[a]}}return{ok:!0,value:void 0}}function Be(e){return Ve(e,1)}function Ve(e,t){let n=` `.repeat(t),r=[];for(let[i,o]of Object.entries(e)){let e=a(i);typeof o==`string`?r.push(`${n}${e}: ${o},`):o&&typeof o==`object`&&!Array.isArray(o)&&(r.push(`${n}${e}: {`),r.push(Ve(o,t+1)),r.push(`${n}},`))}return r.join(`
6
- `)}function $(e,t){let n=Re(e);if(!n.ok)throw n.error;let r=Object.keys(e).sort(),i=Be(n.value);return[`import { createTreatyClient, type TreatyClient } from "zenko/treaty";`,`import { ${r.join(`, `)} } from ${JSON.stringify(t.importPath)};`,``,`export const treatyRoutes = {`,i,`};`,``,`export function createClient(`,` baseUrl: string,`,` init?: { fetch?: typeof fetch }`,`): TreatyClient<typeof treatyRoutes> {`,` return createTreatyClient({`,` baseUrl,`,` routes: treatyRoutes,`,` fetch: init?.fetch,`,` })`,`}`,``].join(`
7
- `)}async function He(t){let n=await import((0,e.pathToFileURL)(t.inputFile).href);if(!n.operationMetadata)throw Error(`Missing operationMetadata export in ${t.inputFile} — regenerate with the latest Zenko`);let r=n.operationMetadata;return $(r,{importPath:t.importPath})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return He}});
8
- //# sourceMappingURL=treaty-generator-Byq49esG.cjs.map