@specbook/ui 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Host-DsO9W5X8.js","./panel-nV09I7Wr.js","./panel-l1xvY4kI.css","./mount-CLHBtIzR.js","./registry-b_jzfqy0.js"])))=>i.map(i=>d[i]);
2
- import{a as e,c as t,d as n,h as r,l as i,m as a,n as o,o as s,p as c,r as l,s as u,u as d,v as f,y as p}from"./panel-nV09I7Wr.js";import{a as m,n as h}from"./mount-CLHBtIzR.js";import{a as g,c as _,d as v,environmentStore as y,f as b,h as x,i as S,l as C,loadManifests as w,m as T,mode as E,n as ee,o as D,p as te,r as O,s as k,t as ne,u as re}from"./registry-b_jzfqy0.js";var ie=Object.prototype.hasOwnProperty;function ae(e,t,n){for(n of e.keys())if(A(n,t))return n}function A(e,t){var n,r,i;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((r=e.length)===t.length)for(;r--&&A(e[r],t[r]););return r===-1}if(n===Set){if(e.size!==t.size)return!1;for(r of e)if(i=r,i&&typeof i==`object`&&(i=ae(t,i),!i)||!t.has(i))return!1;return!0}if(n===Map){if(e.size!==t.size)return!1;for(r of e)if(i=r[0],i&&typeof i==`object`&&(i=ae(t,i),!i)||!A(r[1],t.get(i)))return!1;return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((r=e.byteLength)===t.byteLength)for(;r--&&e.getInt8(r)===t.getInt8(r););return r===-1}if(ArrayBuffer.isView(e)){if((r=e.byteLength)===t.byteLength)for(;r--&&e[r]===t[r];);return r===-1}if(!n||typeof e==`object`){for(n in r=0,e)if(ie.call(e,n)&&++r&&!ie.call(t,n)||!(n in t)||!A(e[n],t[n]))return!1;return Object.keys(t).length===r}}return e!==e&&t!==t}var oe,se,ce,le,ue=!0;typeof process<`u`&&({FORCE_COLOR:oe,NODE_DISABLE_COLORS:se,NO_COLOR:ce,TERM:le}={},ue=process.stdout&&process.stdout.isTTY);var j={enabled:!se&&ce==null&&le!==`dumb`&&(oe!=null&&oe!==`0`||ue),reset:M(0,0),bold:M(1,22),dim:M(2,22),italic:M(3,23),underline:M(4,24),inverse:M(7,27),hidden:M(8,28),strikethrough:M(9,29),black:M(30,39),red:M(31,39),green:M(32,39),yellow:M(33,39),blue:M(34,39),magenta:M(35,39),cyan:M(36,39),white:M(37,39),gray:M(90,39),grey:M(90,39),bgBlack:M(40,49),bgRed:M(41,49),bgGreen:M(42,49),bgYellow:M(43,49),bgBlue:M(44,49),bgMagenta:M(45,49),bgCyan:M(46,49),bgWhite:M(47,49)};function de(e,t){let n=0,r,i=``,a=``;for(;n<e.length;n++)r=e[n],i+=r.open,a+=r.close,~t.indexOf(r.close)&&(t=t.replace(r.rgx,r.close+r.open));return i+t+a}function fe(e,t){let n={has:e,keys:t};return n.reset=j.reset.bind(n),n.bold=j.bold.bind(n),n.dim=j.dim.bind(n),n.italic=j.italic.bind(n),n.underline=j.underline.bind(n),n.inverse=j.inverse.bind(n),n.hidden=j.hidden.bind(n),n.strikethrough=j.strikethrough.bind(n),n.black=j.black.bind(n),n.red=j.red.bind(n),n.green=j.green.bind(n),n.yellow=j.yellow.bind(n),n.blue=j.blue.bind(n),n.magenta=j.magenta.bind(n),n.cyan=j.cyan.bind(n),n.white=j.white.bind(n),n.gray=j.gray.bind(n),n.grey=j.grey.bind(n),n.bgBlack=j.bgBlack.bind(n),n.bgRed=j.bgRed.bind(n),n.bgGreen=j.bgGreen.bind(n),n.bgYellow=j.bgYellow.bind(n),n.bgBlue=j.bgBlue.bind(n),n.bgMagenta=j.bgMagenta.bind(n),n.bgCyan=j.bgCyan.bind(n),n.bgWhite=j.bgWhite.bind(n),n}function M(e,t){let n={open:`\x1b[${e}m`,close:`\x1b[${t}m`,rgx:RegExp(`\\x1b\\[${t}m`,`g`)};return function(t){return this!==void 0&&this.has!==void 0?(~this.has.indexOf(e)||(this.has.push(e),this.keys.push(n)),t===void 0?this:j.enabled?de(this.keys,t+``):t+``):t===void 0?fe([e],[n]):j.enabled?de([n],t+``):t+``}}function N(){}N.prototype={diff:function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.callback;typeof n==`function`&&(r=n,n={}),this.options=n;var i=this;function a(e){return r?(setTimeout(function(){r(void 0,e)},0),!0):e}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var o=t.length,s=e.length,c=1,l=o+s;n.maxEditLength&&(l=Math.min(l,n.maxEditLength));var u=n.timeout??1/0,d=Date.now()+u,f=[{oldPos:-1,lastComponent:void 0}],p=this.extractCommon(f[0],t,e,0);if(f[0].oldPos+1>=s&&p+1>=o)return a([{value:this.join(t),count:t.length}]);var m=-1/0,h=1/0;function g(){for(var n=Math.max(m,-c);n<=Math.min(h,c);n+=2){var r=void 0,l=f[n-1],u=f[n+1];l&&(f[n-1]=void 0);var d=!1;if(u){var g=u.oldPos-n;d=u&&0<=g&&g<o}var _=l&&l.oldPos+1<s;if(!d&&!_)f[n]=void 0;else{if(r=!_||d&&l.oldPos+1<u.oldPos?i.addToPath(u,!0,void 0,0):i.addToPath(l,void 0,!0,1),p=i.extractCommon(r,t,e,n),r.oldPos+1>=s&&p+1>=o)return a(pe(i,r.lastComponent,t,e,i.useLongestToken));f[n]=r,r.oldPos+1>=s&&(h=Math.min(h,n-1)),p+1>=o&&(m=Math.max(m,n+1))}}c++}if(r)(function e(){setTimeout(function(){if(c>l||Date.now()>d)return r();g()||e()},0)})();else for(;c<=l&&Date.now()<=d;){var _=g();if(_)return _}},addToPath:function(e,t,n,r){var i=e.lastComponent;return i&&i.added===t&&i.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:i.count+1,added:t,removed:n,previousComponent:i.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:i}}},extractCommon:function(e,t,n,r){for(var i=t.length,a=n.length,o=e.oldPos,s=o-r,c=0;s+1<i&&o+1<a&&this.equals(t[s+1],n[o+1]);)s++,o++,c++;return c&&(e.lastComponent={count:c,previousComponent:e.lastComponent}),e.oldPos=o,s},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(``)},join:function(e){return e.join(``)}};function pe(e,t,n,r,i){for(var a=[],o;t;)a.push(t),o=t.previousComponent,delete t.previousComponent,t=o;a.reverse();for(var s=0,c=a.length,l=0,u=0;s<c;s++){var d=a[s];if(!d.removed){if(!d.added&&i){var f=n.slice(l,l+d.count);f=f.map(function(e,t){var n=r[u+t];return n.length>e.length?n:e}),d.value=e.join(f)}else d.value=e.join(n.slice(l,l+d.count));l+=d.count,d.added||(u+=d.count)}else if(d.value=e.join(r.slice(u,u+d.count)),u+=d.count,s&&a[s-1].added){var p=a[s-1];a[s-1]=a[s],a[s]=p}}var m=a[c-1];return c>1&&typeof m.value==`string`&&(m.added||m.removed)&&e.equals(``,m.value)&&(a[c-2].value+=m.value,a.pop()),a}var me=new N;function he(e,t,n){return me.diff(e,t,n)}var ge=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,_e=/\S/,ve=new N;ve.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!_e.test(e)&&!_e.test(t)},ve.tokenize=function(e){for(var t=e.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/),n=0;n<t.length-1;n++)!t[n+1]&&t[n+2]&&ge.test(t[n])&&ge.test(t[n+2])&&(t[n]+=t[n+2],t.splice(n+1,2),n--);return t};var ye=new N;ye.tokenize=function(e){this.options.stripTrailingCr&&(e=e.replace(/\r\n/g,`
3
- `));var t=[],n=e.split(/(\n|\r\n)/);n[n.length-1]||n.pop();for(var r=0;r<n.length;r++){var i=n[r];r%2&&!this.options.newlineIsToken?t[t.length-1]+=i:(this.options.ignoreWhitespace&&(i=i.trim()),t.push(i))}return t};function be(e,t,n){return ye.diff(e,t,n)}var xe=new N;xe.tokenize=function(e){return e.split(/(\S.+?[.!?])(?=\s+|$)/)};var Se=new N;Se.tokenize=function(e){return e.split(/([{}:;,]|\s+)/)};function Ce(e){"@babel/helpers - typeof";return Ce=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Ce(e)}var we=Object.prototype.toString,Te=new N;Te.useLongestToken=!0,Te.tokenize=ye.tokenize,Te.castInput=function(e){var t=this.options,n=t.undefinedReplacement,r=t.stringifyReplacer,i=r===void 0?function(e,t){return t===void 0?n:t}:r;return typeof e==`string`?e:JSON.stringify(Ee(e,null,null,i),i,` `)},Te.equals=function(e,t){return N.prototype.equals.call(Te,e.replace(/,([\r\n])/g,`$1`),t.replace(/,([\r\n])/g,`$1`))};function Ee(e,t,n,r,i){t||=[],n||=[],r&&(e=r(i,e));for(var a=0;a<t.length;a+=1)if(t[a]===e)return n[a];var o;if(we.call(e)===`[object Array]`){for(t.push(e),o=Array(e.length),n.push(o),a=0;a<e.length;a+=1)o[a]=Ee(e[a],t,n,r,i);return t.pop(),n.pop(),o}if(e&&e.toJSON&&(e=e.toJSON()),Ce(e)===`object`&&e!==null){t.push(e),o={},n.push(o);var s=[],c;for(c in e)e.hasOwnProperty(c)&&s.push(c);for(s.sort(),a=0;a<s.length;a+=1)c=s[a],o[c]=Ee(e[c],t,n,r,c);t.pop(),n.pop()}else o=e;return o}var De=new N;De.tokenize=function(e){return e.slice()},De.join=De.removeEmpty=function(e){return e};function Oe(e,t,n){return De.diff(e,t,n)}var P={"--":j.red,"··":j.grey,"++":j.green},ke=j.dim().italic,Ae=j.dim(`→`),je=j.dim(`·`),Me=j.dim(`↵`),Ne=(e,t)=>P[e](e+Fe(t))+`
4
- `,Pe=(e,t)=>j.dim(`L`+String(e).padStart(t,`0`)+` `),Fe=e=>e.replace(/[ ]/g,je).replace(/\t/g,Ae).replace(/(\r?\n)/g,Me);function Ie(e,t,n){let r=e.removed?`--`:e.added?`++`:`··`,i=e.value.replace(/\r?\n$/,``).split(`
5
- `),a=0,o,s=``;for(e.added?s+=P[r]().underline(ke(`Expected:`))+`
6
- `:e.removed&&(s+=P[r]().underline(ke(`Actual:`))+`
7
- `);a<i.length;a++)o=i[a],o!=null&&(t&&(s+=Pe(t+a,n)),s+=Ne(r,o||`
8
- `));return s}function Le(e,t){let n=Oe(e,t),r=0,i=0,a=0,o,s,c,l,u,d=Ne(`··`,`[`);for(;r<n.length;r++)for(c=(o=n[r]).removed?`--`:o.added?`++`:`··`,o.added?d+=P[c]().underline(ke(`Expected:`))+`
9
- `:o.removed&&(d+=P[c]().underline(ke(`Actual:`))+`
10
- `),i=0;i<o.value.length;i++)for(l=o.value[i]&&typeof o.value[i]==`object`,s=Ue(o.value[i]).split(/\r?\n/g),a=0;a<s.length;)u=` `+s[a++]+(l?``:`,`),l&&a===s.length&&i+1<o.value.length&&(u+=`,`),d+=Ne(c,u);return d+Ne(`··`,`]`)}function Re(e,t,n=0){let r=0,i,a=``,o=be(e,t),s=String(t.split(/\r?\n/g).length-n).length;for(;r<o.length;r++)a+=Ie(i=o[r],n,s),n&&!i.removed&&(n+=i.count);return a}function ze(e,t){let n=he(e,t),r=0,i=``,a,o=e.length,s=t.length,c=Fe(e),l=Fe(t);if(a=n[r],o!==s&&a.removed&&n[r+1]){let i=a.count-n[r+1].count;i==0||(i>0?(t=` `.repeat(i)+t,l=` `.repeat(i)+l,s+=i):i<0&&(e=` `.repeat(-i)+e,c=` `.repeat(-i)+c,o+=-i))}if(i+=Be(c,l,o,s),o===s)for(a=` `;r<o;r++)a+=e[r]===t[r]?` `:`^`;else for(a=` `;r<n.length;r++)a+=(n[r].added||n[r].removed?`^`:` `).repeat(Math.max(n[r].count,0)),r+1<n.length&&(n[r].added&&n[r+1].removed||n[r].removed&&n[r+1].added)&&(n[r+1].count-=n[r].count);return i+j.red(a)}function Be(e,t,n=String(e).length,r=String(t).length){let i=4,a=Math.max(n,r),o=typeof e,s=typeof t;if(o!==s){i=2;let c=i+a-n,l=i+a-r;e+=` `.repeat(c)+j.dim(`[${o}]`),t+=` `.repeat(l)+j.dim(`[${s}]`),n+=c+o.length+2,r+=l+s.length+2,a=Math.max(n,r)}return P[`++`](`++`+t+` `.repeat(i+a-r)+ke(`(Expected)`))+`
11
- `+P[`--`](`--`+e+` `.repeat(i+a-n)+ke(`(Actual)`))+`
12
- `}function Ve(e,t){var n,r=0,i,a=Array.isArray(e),o=[],s=a?Array(e.length):{};if(a)for(r=0;r<s.length;r++)i=e[r],!i||typeof i!=`object`?s[r]=i:s[r]=Ve(i,t[r]);else{for(n in t)o.push(n);for(;r<o.length;r++)Object.prototype.hasOwnProperty.call(e,n=o[r])&&(!(i=e[n])||typeof i!=`object`?s[n]=i:s[n]=Ve(i,t[n]));for(n in e)s.hasOwnProperty(n)||(s[n]=e[n])}return s}function He(){var e=new Set;return function(t,n){return n===void 0?`[__VOID__]`:typeof n==`number`&&n!==n?`[__NAN__]`:typeof n==`bigint`?n.toString():!n||typeof n!=`object`?n:e.has(n)?`[Circular]`:(e.add(n),n)}}function Ue(e){return JSON.stringify(e,He(),2).replace(/"\[__NAN__\]"/g,`NaN`).replace(/"\[__VOID__\]"/g,`undefined`)}function We(e,t){if(Array.isArray(t)&&Array.isArray(e))return Le(e,t);if(t instanceof RegExp)return ze(``+e,``+t);let n=e&&typeof e==`object`,r=t&&typeof t==`object`;return n&&r&&(e=Ve(e,t)),r&&(t=Ue(t)),n&&(e=Ue(e)),t&&typeof t==`object`&&(e=Ue(Ve(e,t)),t=Ue(t)),n=typeof e==`string`,r=typeof t==`string`,n&&/\r?\n/.test(e)?Re(e,``+t):r&&/\r?\n/.test(t)?Re(``+e,t):n&&r?ze(e,t):Be(e,t)}var Ge=x({Assertion:()=>Ke,equal:()=>Ye,fixture:()=>nt,instance:()=>Qe,is:()=>Je,match:()=>$e,not:()=>L,ok:()=>qe,snapshot:()=>et,throws:()=>rt,type:()=>Ze,unreachable:()=>Xe});function F(e){e=e.replace(/\r?\n/g,`
13
- `);let t=e.match(/^[ \t]*(?=\S)/gm),n=0,r=1/0,i=(t||[]).length;for(;n<i;n++)r=Math.min(r,t[n].length);return i&&r?e.replace(RegExp(`^[ \\t]{${r}}`,`gm`),``):e}var Ke=class extends Error{constructor(e={}){super(e.message),this.name=`Assertion`,this.code=`ERR_ASSERTION`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.details=e.details||!1,this.generated=!!e.generated,this.operator=e.operator,this.expects=e.expects,this.actual=e.actual}};function I(e,t,n,r,i,a,o){if(e)return;let s=o||a;throw o instanceof Error?o:new Ke({actual:t,expects:n,operator:r,message:s,details:i&&i(t,n),generated:!o})}function qe(e,t){I(!!e,!1,!0,`ok`,!1,`Expected value to be truthy`,t)}function Je(e,t,n){I(e===t,e,t,`is`,We,`Expected values to be strictly equal:`,n)}function Ye(e,t,n){I(A(e,t),e,t,`equal`,We,`Expected values to be deeply equal:`,n)}function Xe(e){I(!1,!0,!1,`unreachable`,!1,`Expected not to be reached!`,e)}function Ze(e,t,n){let r=typeof e;I(r===t,r,t,`type`,!1,`Expected "${r}" to be "${t}"`,n)}function Qe(e,t,n){let r="`"+(t.name||t.constructor.name)+"`";I(e instanceof t,e,t,`instance`,!1,`Expected value to be an instance of ${r}`,n)}function $e(e,t,n){typeof t==`string`?I(e.includes(t),e,t,`match`,!1,`Expected value to include "${t}" substring`,n):I(t.test(e),e,t,`match`,!1,`Expected value to match \`${String(t)}\` pattern`,n)}function et(e,t,n){e=F(e),t=F(t),I(e===t,e,t,`snapshot`,Re,`Expected value to match snapshot:`,n)}var tt=(e,t)=>Re(e,t,1);function nt(e,t,n){e=F(e),t=F(t),I(e===t,e,t,`fixture`,tt,`Expected value to match fixture:`,n)}function rt(e,t,n){!n&&typeof t==`string`&&(n=t,t=null);try{e(),I(!1,!1,!0,`throws`,!1,`Expected function to throw`,n)}catch(e){if(e instanceof Ke)throw e;typeof t==`function`?I(t(e),!1,!0,`throws`,!1,`Expected function to throw matching exception`,n):t instanceof RegExp&&I(t.test(e.message),!1,!0,`throws`,!1,`Expected function to throw exception matching \`${String(t)}\` pattern`,n)}}function L(e,t){I(!e,!0,!1,`not`,!1,`Expected value to be falsey`,t)}L.ok=L,Je.not=function(e,t,n){I(e!==t,e,t,`is.not`,!1,`Expected values not to be strictly equal`,n)},L.equal=function(e,t,n){I(!A(e,t),e,t,`not.equal`,!1,`Expected values not to be deeply equal`,n)},L.type=function(e,t,n){let r=typeof e;I(r!==t,r,t,`not.type`,!1,`Expected "${r}" not to be "${t}"`,n)},L.instance=function(e,t,n){let r="`"+(t.name||t.constructor.name)+"`";I(!(e instanceof t),e,t,`not.instance`,!1,`Expected value not to be an instance of ${r}`,n)},L.snapshot=function(e,t,n){e=F(e),t=F(t),I(e!==t,e,t,`not.snapshot`,!1,`Expected value not to match snapshot`,n)},L.fixture=function(e,t,n){e=F(e),t=F(t),I(e!==t,e,t,`not.fixture`,!1,`Expected value not to match fixture`,n)},L.match=function(e,t,n){typeof t==`string`?I(!e.includes(t),e,t,`not.match`,!1,`Expected value not to include "${t}" substring`,n):I(!t.test(e),e,t,`not.match`,!1,`Expected value not to match \`${String(t)}\` pattern`,n)},L.throws=function(e,t,n){!n&&typeof t==`string`&&(n=t,t=null);try{e()}catch(e){typeof t==`function`?I(!t(e),!0,!1,`not.throws`,!1,`Expected function not to throw matching exception`,n):t instanceof RegExp?I(!t.test(e.message),!0,!1,`not.throws`,!1,`Expected function not to throw exception matching \`${String(t)}\` pattern`,n):t||I(!1,!0,!1,`not.throws`,!1,`Expected function not to throw`,n)}};var it=/\u001b\[[0-9;]*m/g,at=e=>e.replace(it,``),ot=/(?:\(|at )?([^\s()]+):(\d+):(\d+)\)?\s*$/;function st(e){if(!e)return;let t=e.split(`
14
- `).slice(1).map(e=>({line:e,m:ot.exec(e)})),n=t[0]?.m?.[1];for(let{line:e,m:r}of t)if(!(!r||e.includes(`/core/src/assert`)||e.includes(`node_modules`))&&r[1]!==n)return{file:r[1],line:Number(r[2]),column:Number(r[3])}}function ct(e=`soft`){let t=[],n=(n,r)=>{let i=r.length-1;return(...a)=>{let o=typeof a[i]==`string`?a[i]:void 0;try{r(...a),t.push({label:o??n,operator:n,pass:!0,location:st(Error().stack)})}catch(r){if(r?.name!==`Assertion`||(t.push({label:at(String(r.message??o??n)),operator:n,pass:!1,actual:r.actual,expected:r.expects,diff:r.details?at(String(r.details)):void 0,location:st(Error().stack)}),e===`hard`))throw r}}},r=Ge,i={};for(let e of[`ok`,`is`,`equal`,`type`,`instance`,`match`,`throws`,`unreachable`,`snapshot`,`fixture`])typeof r[e]==`function`&&(i[e]=n(e,r[e]));let a=n(`not`,r.not);for(let e of Object.keys(r.not??{}))typeof r.not[e]==`function`&&(a[e]=n(`not.${e}`,r.not[e]));return i.not=a,{assert:i,results:t}}var lt=e=>typeof e.opts.default==`function`;function ut(e){return typeof e==`function`?e():e}var dt=class extends Error{};function ft(e,t){let n=e.opts.value;return n?n(t):t}function pt(e,t){return e===t||JSON.stringify(e)===JSON.stringify(t)}function mt(e,t,n){switch(t.kind){case`select`:{let r=t.opts.options;if(r.length===0)throw new dt(`No options available for "${e}"`);let i=r.map(e=>ft(t,e));if(n!==void 0){if(!i.some(e=>pt(e,n)))throw new dt(`Value for "${e}" is not one of the available options`);return n}let a=t.opts.default;return typeof a==`number`&&Number.isInteger(a)&&a>=0&&a<i.length&&typeof i[0]!=`number`?i[a]:typeof a==`function`?a(r):a!==void 0&&i.some(e=>pt(e,a))?a:i[0]}case`multiselect`:{let e=t.opts.options;if(n!==void 0)return n;let r=t.opts.default;return typeof r==`function`?r(e):r??[]}case`object`:{let e=t.opts.shape,r=n??{};return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,mt(e,t,r[e])]))}case`array`:{let r=n??t.opts.default??[],{min:i,max:a}=t.opts;if(i!==void 0&&r.length<i)throw new dt(`"${e}" needs at least ${i} items`);if(a!==void 0&&r.length>a)throw new dt(`"${e}" allows at most ${a} items`);return r.map(n=>mt(e,t.opts.item,n))}case`boolean`:return n??ut(t.opts.default)??!1;case`number`:return n??ut(t.opts.default)??0;default:return n??ut(t.opts.default)??``}}function ht(e,t={}){return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,mt(e,n,t[e])]))}function gt(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>{if(t.kind===`select`||t.kind===`multiselect`){let n=t.opts.label,r=t.opts.options.map(e=>({label:n?n(e):String(ft(t,e)),value:ft(t,e)}));return[e,{kind:t.kind,options:r}]}return[e,{kind:t.kind,default:ut(t.opts.default),generated:lt(t)}]}))}var R=class extends Error{variable;constructor(e,t){super(e),this.variable=t,this.name=`AddressError`}},_t=[`authorizationUrl`,`tokenUrl`,`openIdConnectUrl`,`clientId`];function vt(e,t,n={},r={}){return{...e.vars,...e.environments?.[t]?.vars,...n,...r}}function yt(e,t,n){for(let t of S(e))if(D(t)||k(t))throw new R(`${n} cannot use {{${t}}}: only environment variables are available`);let r;try{r=re(e,t)}catch(e){throw e instanceof O?new R(`${n}: set ${e.variable}`,e.variable):e}if(typeof r==`object`&&r)throw new R(`${n} is not a text value`);let i=r==null?``:String(r).trim();if(/\{\{/.test(i))throw new R(`${n} still contains a placeholder: ${i}`);return i}function bt(e,t,n,r){let i=e.services[t]?.baseUrl,a=typeof i==`string`?i:i?.[n];if(!a)return;let o=`No base URL for ${t} in ${n}`,s=/\{\{/.test(a)?yt(a,r,o):a.trim();return s?s.replace(/\/+$/,``):void 0}function xt(e,t,n=`sign-in`){let r={...e};for(let e of _t){let i=r[e];if(typeof i!=`string`||!/\{\{/.test(i))continue;let a=yt(i,t,`${n} ${e}`);a?r[e]=a:delete r[e]}return r}function St(e,t=[],n=[]){let r=new Set([`mock`]),i=Object.values(e.services??{});i.some(e=>typeof e.baseUrl==`string`)&&r.add(`live`);for(let e of i)if(e.baseUrl&&typeof e.baseUrl==`object`)for(let t of Object.keys(e.baseUrl))r.add(t);for(let t of Object.keys(e.environments??{}))r.add(t);for(let e of t)r.add(e);for(let e of n)r.add(e);return[...r]}function Ct(e){let t={},n=e=>{if(!(D(e)||k(e)))return t[e]??={services:[],profiles:[]},t[e]};for(let[t,r]of Object.entries(e.services??{})){let e=typeof r.baseUrl==`string`?[r.baseUrl]:Object.values(r.baseUrl??{});for(let r of e)for(let e of S(r)){let r=n(e);r&&!r.services.includes(t)&&r.services.push(t)}}for(let[t,r]of Object.entries(e.auth??{}))for(let e of _t){let i=r.oauth?.[e];if(typeof i==`string`)for(let r of S(i))n(r)?.profiles.push({profile:t,field:e})}return t}var wt={comma:`,`,space:` `,pipe:`|`},Tt=e=>typeof Blob<`u`&&e instanceof Blob;function Et(e,t=`indices`,n=``,r=[]){if(typeof t==`string`||n||typeof e!=`object`||!e)Dt(n,e,r,typeof t==`string`?t:`indices`);else for(let[n,i]of Object.entries(e))Dt(n,i,r,t[n]??`indices`);return r}function Dt(e,t,n,r){if(t!=null){if(Array.isArray(t)&&r in wt&&t.every(e=>typeof e!=`object`||!e))n.push([e,t.map(String).join(wt[r])]);else if(Array.isArray(t))t.forEach((t,i)=>{Dt(r===`indices`||r in wt?`${e}[${i}]`:r===`brackets`?`${e}[]`:e,t,n,r)});else if(typeof t==`object`)for(let[i,a]of Object.entries(t))Dt(e?`${e}[${i}]`:i,a,n,r);else n.push([e,String(t)])}}function Ot(e,t=`indices`){return Et(e,t).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join(`&`)}function kt(e){let t=new FormData,n=(e,n)=>{n!=null&&(Tt(n)?t.append(e,n,n.name??`file`):typeof n==`object`?t.append(e,new Blob([JSON.stringify(n)],{type:`application/json`})):t.append(e,String(n)))};for(let[t,r]of Object.entries(e??{}))if(Array.isArray(r))for(let e of r)n(t,e);else n(t,r);return t}function At(e){return JSON.stringify(typeof e==`string`?{query:e}:e)}function jt(e,t,n,r){switch(e){case`json`:return{body:JSON.stringify(t),contentType:`application/json`};case`graphql`:return{body:At(t),contentType:`application/json`};case`form`:return{body:Ot(t,n),contentType:`application/x-www-form-urlencoded`};case`text`:return{body:String(t),contentType:`text/plain`};case`multipart`:return{body:kt(t)};case`binary`:return{body:t,contentType:r||(Tt(t)&&t.type?t.type:`application/octet-stream`)};default:return{body:t}}}function Mt(e){if(Tt(e)){let t=e;return{file:t.name??`file`,type:t.type,size:t.size}}return Array.isArray(e)?e.map(Mt):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Mt(t)])):e}var z=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Nt=e=>[`string`,`number`,`boolean`].includes(typeof e);function Pt(e,t){return typeof t==`number`&&typeof e==`string`&&e.trim()!==``&&!Number.isNaN(Number(e))?Number(e):typeof t==`string`&&typeof e==`number`?String(e):e}function Ft(e,t){if(z(e)&&z(t)){let n={...e};for(let[e,r]of Object.entries(t))e in n&&(n[e]=Ft(n[e],r));return n}if(Array.isArray(e)&&Array.isArray(t)){if(t.length===0)return e;if(t.every(Nt)&&e.every(Nt))return t;let n=e[0];return z(n)&&t.every(z)?t.map(e=>Ft(n,e)):e}return Nt(t)&&Nt(e)&&typeof t==typeof e?t:typeof e==`number`&&typeof t==`string`&&t.trim()!==``&&!Number.isNaN(Number(t))?Number(t):e}function It(e,t){let n={...e},r=Object.entries(t).filter(([,e])=>e!==void 0&&e!==``);for(let[e,t]of r)e in n&&!z(n[e])&&!Array.isArray(n[e])?n[e]=Pt(t,n[e]):r.length===1&&`id`in n&&/^(id|.*[a-z]Id|.*_id)$/.test(e)&&!z(n.id)&&!Array.isArray(n.id)&&(n.id=Pt(t,n.id));return n}var Lt=e=>Nt(e),Rt=new Set([`id`,`object`,`type`,`kind`,`created`,`updated`,`url`,`livemode`,`metadata`,`status`]);function zt(e,t=[],n=[],r=0){if(r>6)return n;if(z(e))for(let[i,a]of Object.entries(e))zt(a,[...t,i],n,r+1);else Array.isArray(e)?e.length&&zt(e[0],[...t,0],n,r+1):Lt(e)&&n.push({path:t,value:e});return n}var Bt=(e,t)=>{let n=e;for(let e of t){if(typeof n!=`object`||!n)return;n=n[e]}return n};function Vt(e,t,n=[],r=[],i=0){if(i>5)return r;if(z(e))for(let[a,o]of Object.entries(e))a===t&&Lt(o)?r.push([...n,a]):Vt(o,t,[...n,a],r,i+1);else Array.isArray(e)&&e.length&&Vt(e[0],t,[...n,0],r,i+1);return r}var Ht=(e,t)=>typeof e==typeof t||typeof t==`number`&&typeof e==`string`&&e.trim()!==``&&!Number.isNaN(Number(e));function Ut(e,t,n){let r=Bt(e,t.slice(0,-1));typeof r==`object`&&r&&(r[t[t.length-1]]=n)}function Wt(e,t,n){let r=structuredClone(e),i=new Set(zt(n).map(e=>e.path.join(`\0`)));for(let e of zt(t)){if(Bt(r,e.path)!==void 0)continue;let t=String(e.path[e.path.length-1]);if(Rt.has(t)||typeof e.path[e.path.length-1]==`number`)continue;let n=Vt(r,t).filter(e=>!i.has(e.join(`\0`)));if(n.length!==1)continue;let a=n[0],o=Bt(r,a);Ht(e.value,o)&&(Ut(r,a,Pt(e.value,o)),i.add(a.join(`\0`)))}return r}var Gt=/^(limit|per_?page|page_?size|size|count|max|max_?results|take)$/i;function Kt(e){return Array.isArray(e)?e[0]:typeof e==`string`&&e.includes(`,`)?e.split(`,`)[0]?.trim():e}function qt(e,t){let n=Object.entries(t).map(([e,t])=>[e,Kt(t)]).filter(([,e])=>Lt(e)&&e!==``);if(n.length===0)return e;let r=e=>{let t={...e};for(let[e,r]of n)e in t&&Lt(t[e])&&Ht(r,t[e])&&(t[e]=Pt(r,t[e]));return t},i=n.find(([e])=>Gt.test(e))?.[1],a=i!==void 0&&Number.isFinite(Number(i))?Math.min(Math.max(Math.trunc(Number(i)),1),10):void 0,o=e=>{if(!e.every(z))return e;let t=e.map(e=>r(e));if(a===void 0||t.length===0||t.length>=a)return t.slice(0,a??t.length);let n=t[0];return Array.from({length:a},(e,r)=>r<t.length?t[r]:{...n,...typeof n.id==`number`?{id:n.id+r}:{}})};if(Array.isArray(e))return o(e);if(z(e)){let t={...e},n=Object.entries(t).filter(([,e])=>Array.isArray(e)&&e.length>0&&e.every(z));if(n.length===1)t[n[0]?.[0]]=o(n[0]?.[1]);else return r(t);return t}return e}function Jt(e,t){let n=e;if(t.body!==void 0){let e=z(n)&&Array.isArray(t.body)&&t.body.length>0&&t.body.every(z)?t.body[0]:t.body;(z(n)&&z(e)||Array.isArray(n)&&Array.isArray(e))&&(n=Ft(n,e),z(n)&&z(e)&&(n=Wt(n,e,e)))}return z(n)&&t.path&&(n=It(n,t.path)),t.query&&(n=qt(n,t.query)),n}var Yt=e=>e>=200&&e<300,Xt=e=>e===void 0?e:JSON.parse(JSON.stringify(e));function Zt(e){let t=e.sleep??((e,t)=>new Promise((n,r)=>{if(t?.aborted)return r(Error(`Stopped before the API answered.`));let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Stopped before the API answered.`))},{once:!0})}));return async(n,r)=>{let i=n.mock,a=await e.loader.statuses(n.service,n.opId),o=n.mockStatus??a.find(Yt)??a[0]??200;if(i?.secured&&!n.headers.authorization&&!Object.keys(n.headers).some(e=>/api[-_]?key|token/i.test(e))&&n.mockStatus===void 0&&a.includes(401))return Qt(401,await e.loader.example(n.service,n.opId,401));let s={...i?.vars??{},...i?.pathParams??{},...i?.rawQuery??{}},c=async t=>{let r=Xt(await e.loader.example(n.service,n.opId,t));return Yt(t)&&(r=Jt(r,{body:n.body,path:i?.pathParams,query:i?.rawQuery})),r===void 0?void 0:C(r,s)},l={status:o,data:await c(o),headers:{},delayMs:0,respond:(e,t)=>{u={status:e,data:t}}},u;if(i?.hook&&await i.hook({vars:i.vars??{},body:n.body,query:i.rawQuery,path:i.pathParams,headers:n.headers},l),u){let e=await c(u.status);l.status=u.status,l.data=u.data===void 0?e:g(e,u.data)}return l.delayMs&&await t(l.delayMs,r),{...Qt(l.status,l.data),headers:{"content-type":`application/json`,...l.headers}}}}function Qt(e,t){return{status:e,headers:{"content-type":`application/json`},text:t===void 0?``:JSON.stringify(t),body:t}}var B=class extends Error{constructor(e){super(e),this.name=`OAuthError`}},$t=e=>`openIdConnectUrl`in e;function en(e){let t=e&&typeof e==`object`?e:{},n=e=>typeof e==`string`&&/^https?:\/\//i.test(e)?e:void 0,r=n(t.authorization_endpoint),i=n(t.token_endpoint);if(!r||!i)throw new B(`The provider’s discovery document has no authorization or token endpoint`);let a=[`openid`,...(Array.isArray(t.scopes_supported)?t.scopes_supported.filter(e=>typeof e==`string`):[]).filter(e=>e!==`openid`)];return{authorizationUrl:r,tokenUrl:i,scopes:Object.fromEntries(a.map(e=>[e,``]))}}var tn=e=>{let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)},nn=e=>tn(crypto.getRandomValues(new Uint8Array(e)));async function rn(e){if(!globalThis.crypto?.subtle)throw new B(`Sign-in needs a secure page (https, or localhost). Open the viewer over https, or paste an access token.`);let t=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(e));return tn(new Uint8Array(t))}async function an(){let e=nn(48);return{verifier:e,challenge:await rn(e)}}var on=()=>nn(24);function sn(e){let t=new URL(e.authorizationUrl);return t.searchParams.set(`response_type`,`code`),t.searchParams.set(`client_id`,e.clientId),t.searchParams.set(`redirect_uri`,e.redirectUri),e.scopes?.length&&t.searchParams.set(`scope`,e.scopes.join(` `)),t.searchParams.set(`state`,e.state),t.searchParams.set(`code_challenge`,e.challenge),t.searchParams.set(`code_challenge_method`,`S256`),t.toString()}function cn(e,t){let n=t=>(e instanceof URLSearchParams?e.get(t):e[t])??void 0,r=n(`error`);if(r){let e=n(`error_description`);throw new B(`Sign-in was refused: ${e?`${r} (${e})`:r}`)}if(n(`state`)!==t)throw new B(`Sign-in was rejected: the response did not match this request (state)`);let i=n(`code`);if(!i)throw new B(`Sign-in returned no authorization code`);return{code:i}}function ln(e){return{grant_type:`authorization_code`,code:e.code,redirect_uri:e.redirectUri,client_id:e.clientId,code_verifier:e.verifier}}function un(e){let t=e&&typeof e==`object`?e:{};if(typeof t.error==`string`){let e=typeof t.error_description==`string`?` (${t.error_description})`:``;throw new B(`The token endpoint refused the code: ${t.error}${e}`)}if(typeof t.access_token!=`string`||t.access_token===``)throw new B(`The token endpoint returned no access token`);return{accessToken:t.access_token,...typeof t.expires_in==`number`?{expiresIn:t.expires_in}:{},...typeof t.scope==`string`?{scope:t.scope}:{}}}var dn=123,fn=125,pn=e=>e===32||e===9||e===10||e===13,mn=e=>e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===95||e===36||e===45,hn=[115,101,99,114,101,116,115,46];function gn(e,t){let n=t+2;for(;n<e.length&&pn(e[n]);)n++;for(let t of hn)if(e[n++]!==t)return;let r=n;for(;n<e.length&&mn(e[n]);)n++;if(n===r)return;let i=String.fromCharCode(...e.subarray(r,n));for(;n<e.length&&pn(e[n]);)n++;if(e[n]===fn&&e[n+1]===fn)return{start:t,end:n+2,name:i}}function _n(e){let t=[];for(let n=0;n<e.length-1;n++)if(e[n]===dn&&e[n+1]===dn){let r=gn(e,n);r&&(t.push(r),n=r.end-1)}return t}var vn=new TextEncoder;function yn(e){return[...new Set(_n(e).map(e=>e.name))]}function bn(e,t){let n=_n(e).filter(e=>t.has(e.name));if(n.length===0)return e;let r=[],i=0;for(let a of n)r.push(e.subarray(i,a.start),vn.encode(t.get(a.name))),i=a.end;r.push(e.subarray(i));let a=new Uint8Array(r.reduce((e,t)=>e+t.length,0)),o=0;for(let e of r)a.set(e,o),o+=e.length;return a}var xn=new TextDecoder;function Sn(e,t){return e.includes(`{{`)?xn.decode(bn(vn.encode(e),t)):e}var Cn=new TextDecoder(`utf-8`,{fatal:!0}),wn=new TextEncoder;function Tn(e){let t=``;for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return btoa(t)}function En(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Dn(e){try{return{kind:`text`,text:Cn.decode(e)}}catch{return{kind:`b64`,b64:Tn(e)}}}function On(e){return e.kind===`text`?wn.encode(e.text):En(e.b64)}async function kn(e){let t={};e.headers.forEach((e,n)=>{t[n]=e});let n=e.method!==`GET`&&e.method!==`HEAD`&&e.body!==null;return{method:e.method,url:e.url,headers:t,...n?{body:Dn(new Uint8Array(await e.arrayBuffer()))}:{}}}function An(e){let t=e.status===204||e.status===205||e.status===304;return new Response(e.body&&!t?On(e.body):null,{status:e.status,headers:e.headers})}var jn=class extends Error{names;constructor(e){super(`Missing secrets: ${e.join(`, `)}`),this.names=e,this.name=`MissingSecretsError`}},Mn=3;function Nn(e){let t=new Set([e]),n=e=>{try{t.add(e())}catch{}};return n(()=>encodeURIComponent(e)),n(()=>encodeURI(e)),n(()=>JSON.stringify(e).slice(1,-1)),n(()=>btoa(String.fromCharCode(...new TextEncoder().encode(e)))),[...t]}function Pn(e,t){let n=[...new Set([...t].filter(e=>e.length>=Mn).flatMap(Nn))].sort((e,t)=>t.length-e.length);if(n.length===0)return e;let r=e=>n.reduce((e,t)=>e.split(t).join(`***`),e),i=e=>typeof e==`string`?r(e):Array.isArray(e)?e.map(i):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[r(e),i(t)])):e;return i(e)}function Fn(e,t){let n=new URLSearchParams;for(let[e,r]of Object.entries(t.query))for(let t of Array.isArray(r)?r:[r])n.append(e,t);let r=n.toString();return`${e.replace(/\/+$/,``)}${t.url}${r?`?${r}`:``}`}function In(e,t){try{return new URL(e,t).toString()}catch{return e}}var Ln={ECONNREFUSED:`connection refused`,ENOTFOUND:`host not found`,EAI_AGAIN:`host not found`,ECONNRESET:`connection reset`,ETIMEDOUT:`connection timed out`,UND_ERR_CONNECT_TIMEOUT:`connection timed out`,EHOSTUNREACH:`host unreachable`,ENETUNREACH:`network unreachable`};function Rn(e,t){let n=e?.cause;if(!(e instanceof TypeError)||!n)return e;let r=n.code??n.errors?.find(e=>e.code)?.code,i=r&&/^CERT_|^ERR_TLS|SELF_SIGNED|UNABLE_TO_VERIFY/.test(r)?`certificate problem`:``,a=typeof n.message==`string`&&n.message.length<=120?n.message:``,o=r&&Ln[r]||i||a;if(!o)return e;let s=t;try{s=new URL(t).host}catch{}return Error(`Could not reach ${s}: ${o}.`,{cause:e})}function zn(e){return async(t,n)=>{if(n?.aborted)throw Error(`Stopped before the API answered.`);let r=e.fetch??fetch,i={...t.headers},a;if(t.body!==void 0&&t.method!==`GET`&&t.method!==`HEAD`){let e=jt(t.encoding,t.body,t.formArrays,t.mediaType);a=e.body,e.contentType&&(i[`content-type`]??=e.contentType)}let o=new AbortController,s=!1,c=t.timeoutMs?setTimeout(()=>{s=!0,o.abort()},t.timeoutMs):void 0;n?.addEventListener(`abort`,()=>o.abort());let l=Fn(e.baseUrl(t.service),t);try{let e=await r(l,{method:t.method,headers:i,body:a,signal:o.signal}),n=await e.text(),s={};e.headers.forEach((e,t)=>{s[t.toLowerCase()]=e});let c=n;if(n.length===0)c=void 0;else try{c=JSON.parse(n)}catch{c=n}return{status:e.status,headers:s,text:n,body:c}}catch(e){throw s?Error(`Timed out after ${t.timeoutMs}ms: no answer from the API.`):n?.aborted?Error(`Stopped before the API answered.`):Rn(e,l)}finally{c&&clearTimeout(c)}}}var V=()=>Date.now(),Bn=class extends Error{};function Vn(){return`run_${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}var Hn=(e={})=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t]));function Un(e){let t={};for(let[n,r]of Object.entries(e??{}))t[n]=typeof r==`function`?r():r;return t}async function Wn(e){return typeof e==`function`?(await e()).default:e}async function Gn(e,t,n){if(t.length===0)return Array.isArray(e)?Promise.all(e.map(e=>typeof e==`string`?n(e):e)):typeof e==`string`?n(e):e;if(Array.isArray(e))return Promise.all(e.map(e=>Gn(e,t,n)));let[r,...i]=t;return _(e)&&r in e?{...e,[r]:await Gn(e[r],i,n)}:e}async function Kn(e,t,n,r,i){let a=e=>r(e,i);if(n===`binary`)return typeof e==`string`?a(e):e;let o=e;for(let e of t)o=await Gn(o,e.split(`.`),a);return o}function qn(e,t,n){let r=new Set,i=[];for(let a of e){if(D(a)||k(a))continue;let e=v(a);if(!r.has(e)){r.add(e);for(let r=t.length-1;r>=0;r--){let[a,o]=t[r];if(e in o){let s=a===`capture`?{key:e,source:a,step:n[e]}:{key:e,source:a};if(a===`capture`){let n=t.slice(0,r).reverse().find(([,t])=>e in t),[i,a]=[typeof n?.[1][e],typeof o[e]];n&&i!==a&&(s.shadows={source:n[0],type:i,replacedBy:a})}i.push(s);break}}}}return i}function Jn(e,t,n){let r=e=>e.replace(/\{\{\s*((?:secrets|session)\.[\w$-]+)\s*\}\}/g,(e,r)=>{let[i,a]=r.split(`.`);if(i===`secrets`){let n=t.o.secrets?.[a];if(n===void 0&&(t.o.env===`mock`||t.o.deferSecrets))return e;if(n===void 0)throw new jn([a]);return t.mask.add(n),n}let o=(n?t.sessions.get(`${t.o.env}:${n}`)?.session:void 0)?.[a];if(o===void 0)throw new Bn(`No session value "${a}" for profile "${n}"`);return t.mask.add(String(o)),String(o)}),i=e=>Tt(e)?e:typeof e==`string`?r(e):Array.isArray(e)?e.map(i):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,i(t)])):e;return i(e)}function H(e,t){e.o.onEvent?.(e.mask.size?Pn(t,e.mask):t)}var Yn=new Set([`GET`,`HEAD`,`OPTIONS`]);function Xn(e,t){if(e.input.safe||Yn.has(t.method))return!0;if(t.encoding===`graphql`){let e=t.body;return typeof e?.query==`string`&&!/(^|[\s}])mutation\b/.test(e.query)}return!1}function Zn(e,t){if(t.op.security===!1)return;let n=t.input.auth===void 0?e.seqAuth:t.input.auth;if(n===!1)return;let r=n??e.o.serviceAuth?.[t.op.service];return r&&e.o.auth?.[r]?r:void 0}function Qn(e,t){return{status:e.status,ok:e.status>=200&&e.status<300,headers:Hn(e.headers),data:e.body,text:e.text,durationMs:t}}async function $n(e,t,n,r=!1){let i=e.o.auth?.[t];if(!i.login||!i.token)return;let a=`${e.o.env}:${t}`,o=e.sessions.get(a);if(o&&(o.expiresAt===void 0||o.expiresAt>(e.o.now?.()??V()))&&!r)return;let s=e.inflight.get(a);if(s)return s;let c=(async()=>{let r=i;H(e,{type:`auth:login`,profile:t});let{result:o,response:s}=await tr(e,await r.login(),`Login (${t})`,er,`auth`,!0);if(n.push(o),!s?.ok)throw new Bn(`Login for profile "${t}" failed (${s?.status})`);let c=r.token(s),l=typeof c.expiresIn==`number`?(e.o.now?.()??V())+c.expiresIn*1e3:void 0;e.sessions.set(a,{session:c,expiresAt:l});for(let t of Object.values(c))typeof t==`string`&&e.mask.add(t)})().finally(()=>e.inflight.delete(a));return e.inflight.set(a,c),c}var er={inputs:{},captured:{},from:{}};async function tr(e,t,n,r,i=`request`,a=!1){let o=e.o.now?.()??V(),s=[],c={name:n,kind:i,status:`pass`,assertions:[],captured:{},durationMs:0},l=t.input.assertMode??e.seqAssertMode??e.o.assertMode??`soft`;H(e,{type:`step:start`,name:n});let u;try{let o=[[`config`,e.o.vars??{}],[`init`,Un(t.input.init)],[`input`,r.inputs],[`capture`,r.captured],[`override`,Un(t.varOverrides)],[`override`,e.o.overrides??{}]],d=Object.assign({},...o.map(e=>e[1])),f;if(t.input.example&&(f=await e.o.example?.(t.op,t.input.example),!f))throw new Bn(`Example "${t.input.example}" not found for ${t.op.id}`);let p=g(f?.body,await Wn(t.input.data));for(let e of t.dataPatches)p=g(p,e);let m=g(f?.path??{},t.input.path??{}),h=g(f?.query??{},t.input.query??{}),_={...f?.headers??{},...t.input.headers??{}};c.uses=qn(S([p,m,h,_]),o,r.from);let v=p===void 0?void 0:C(p,d),y=C(m,d)??{},b=C(h,d)??{},x=Hn(C(_,d)),w=t.input.encoding??t.op.encoding??(v===void 0?`none`:`json`);v!==void 0&&e.o.readFile&&(t.op.files?.length||w===`binary`)&&(v=await Kn(v,t.op.files??[],w,e.o.readFile,f?.dir));let T=a?void 0:Zn(e,t),E=T?e.o.auth?.[T]:void 0,ee={};E&&T&&(x={...Hn(C(E.apply.headers??{},d)),...x},Object.assign(ee,C(E.apply.query??{},d)));let D=t.op.path.replace(/\{([^}]+)\}/g,(e,t)=>{let n=y[t];if(n==null)throw new Bn(`Missing path parameter "${t}"`);return encodeURIComponent(String(n))}),te={};for(let[e,t]of Object.entries({...b,...ee}))t!=null&&(te[e]=Array.isArray(t)?t.map(String):String(t));let O={service:t.op.service,opId:t.op.id,method:t.op.method,url:D,query:te,headers:x,body:v,encoding:w,mediaType:w===`binary`?t.op.mediaType:void 0,formArrays:t.op.formArrays,timeoutMs:t.input.timeoutMs??e.o.timeoutMs??3e4,mockStatus:e.o.env===`mock`?e.o.mockStatus:void 0,mock:e.o.env===`mock`?{hook:t.mockHook,vars:d,pathParams:y,rawQuery:b,secured:t.op.security}:void 0};if(c.request={opId:t.op.id,method:O.method,service:O.service,url:O.url,query:O.query,headers:O.headers,body:Mt(O.body),profile:T},H(e,{type:`request`,name:n,request:c.request}),e.o.readOnly&&i!==`auth`&&!Xn(t,O))throw new Bn(`Refusing ${O.method} ${t.op.path} in "${e.o.env}": this is a --safe run, which only reads.`);let k=async()=>{T&&await $n(e,T,s);let{mock:t,...n}=O,r={...Jn(n,e,T),mock:t},i=e.o.now?.()??V();return Qn(await e.o.transport(r,e.o.signal),(e.o.now?.()??V())-i)};u=await k(),u.status===401&&T&&E?.retryOn401!==!1&&E?.login&&(await $n(e,T,s,!0),u=await k()),c.response={status:u.status,headers:u.headers,body:u.data,durationMs:u.durationMs},H(e,{type:`response`,name:n,status:u.status,durationMs:u.durationMs});for(let[e,n]of Object.entries(t.input.capture??{}))c.captured[e]=n(u,d);if(H(e,{type:`capture`,name:n,captured:c.captured}),t.input.assert){let r=ct(l);try{await t.input.assert(u,{assert:r.assert,vars:{...d,...c.captured},req:c.request})}catch(e){e?.name!==`Assertion`&&(c.status=`error`,c.error=`assert threw: ${e?.message??e}`)}c.assertions=r.results;for(let t of r.results)H(e,{type:t.pass?`assert:pass`:`assert:fail`,name:n,assertion:t})}else if(e.o.implicitStatusCheck&&i===`request`){let t=u.status>=200&&u.status<300,r={label:`status is 2xx`,operator:`status`,pass:t,actual:u.status,expected:`2xx`};c.assertions=[r],H(e,{type:t?`assert:pass`:`assert:fail`,name:n,assertion:r})}c.status===`pass`&&c.assertions.some(e=>!e.pass)&&(c.status=`fail`)}catch(e){c.status=`error`,c.error=e instanceof Error?e.message:String(e)}return c.durationMs=(e.o.now?.()??V())-o,H(e,{type:`step:end`,name:n,status:c.status}),{result:c,response:u,authResults:s}}function nr(e){let t={steps:0,passed:0,failed:0,skipped:0,assertions:{passed:0,failed:0}},n=e=>{if(e.children?.length)e.children.forEach(n);else{t.steps++,e.status===`pass`?t.passed++:e.status===`skipped`?t.skipped++:t.failed++;for(let n of e.assertions)n.pass?t.assertions.passed++:t.assertions.failed++}};return e.forEach(n),t}function rr(e){let t=[],n=e=>{t.push(e),e.children?.forEach(n)};return e.forEach(n),t.some(e=>e.status===`error`)?`error`:t.some(e=>e.status===`fail`)?`fail`:`pass`}function ir(e,t,n,r,i){let a=Pn({schemaVersion:1,runId:Vn(),kind:t,id:n.id,title:n.title,env:e.o.env,locale:e.o.locale,seed:e.o.seed,usedDrafts:e.o.usedDrafts??!1,tags:n.tags??[],status:rr(r),startedAt:new Date(i).toISOString(),durationMs:(e.o.now?.()??V())-i,totals:nr(r),steps:r},e.mask);return H(e,{type:`done`,result:a}),a}function ar(e){return{o:e,sessions:new Map,inflight:new Map,mask:new Set(Object.values(e.secrets??{}))}}async function or(e,t){let n=ar(t),r=t.now?.()??V();H(n,{type:`run:start`,id:e.op.id,title:e.input.name??e.op.id,kind:`request`,tags:e.input.tags});let i=e.input.name??e.op.id,{result:a,authResults:o}=await tr(n,e,i,er);return ir(n,`request`,{id:e.op.id,title:i,tags:e.input.tags},[...o,a],r)}async function sr(e,t){let n=ar(t);n.seqAuth=e.meta.auth,n.seqAssertMode=e.meta.assertMode;let r=t.now?.()??V();H(n,{type:`run:start`,id:e.meta.id,title:e.meta.title,kind:`sequence`,tags:e.meta.tags});let i=[],a={},o={},s=(e,t)=>{Object.assign(a,e);for(let n of Object.keys(e))o[n]=t},c;try{c=ht(e.meta.inputs??{},t.inputs)}catch(t){return i.push({name:`inputs`,kind:`input`,status:`error`,assertions:[],captured:{},error:t.message,durationMs:0}),ir(n,`sequence`,e.meta,i,r)}let l=t.vars??{},u=()=>({inputs:c,captured:a,vars:{...l,...t.overrides??{}},env:t.env}),d=!1,f=(e,t)=>i.push({name:e,kind:t,status:`skipped`,assertions:[],captured:{},durationMs:0});for(let r of e.nodes)if(d&&!e.meta.continueOnFailure)f(r.name,r.kind===`step`?`request`:r.kind);else if(t.signal?.aborted)f(r.name,r.kind===`step`?`request`:r.kind),d=!0;else try{if(r.kind===`step`){let{result:e,authResults:t}=await tr(n,typeof r.def==`function`?r.def(u()):r.def,r.name,{inputs:c,captured:a,from:o});i.push(...t,e),s(e.captured,r.name),e.status!==`pass`&&(d=!0)}else if(r.kind===`each`){let l=r.items(u()),f={name:r.name,kind:`each`,status:`pass`,assertions:[],captured:{},durationMs:0,children:[]},p=t.now?.()??V(),m={};for(let t=0;t<l.length;t++){let{result:i,authResults:s}=await tr(n,r.def(l[t],u(),t),`${r.name} #${t+1}`,{inputs:c,captured:a,from:o});f.children?.push(...s,i);for(let[e,t]of Object.entries(i.captured))m[e]??=[],m[e]?.push(t);if(i.status!==`pass`&&(f.status=i.status,!e.meta.continueOnFailure))break}f.captured=m,f.durationMs=(t.now?.()??V())-p,s(m,r.name),i.push(f),f.status!==`pass`&&(d=!0)}else if(r.kind===`input`){let e=r.controls(u()),a=gt(e);H(n,{type:`input:required`,name:r.name,controls:a});let o=ht(e,t.onInput?await t.onInput({name:r.name,controls:a}):t.inputs??{});c={...c,...o},i.push({name:r.name,kind:`input`,status:`pass`,assertions:[],captured:o,durationMs:0})}else if(r.kind===`check`){let a=ct(e.meta.assertMode??t.assertMode??`soft`),o={name:r.name,kind:`check`,status:`pass`,assertions:[],captured:{},durationMs:0};H(n,{type:`step:start`,name:r.name});try{await r.fn(u(),{assert:a.assert})}catch(e){e?.name!==`Assertion`&&(o.status=`error`,o.error=e?.message??String(e))}o.assertions=a.results,o.status===`pass`&&a.results.some(e=>!e.pass)&&(o.status=`fail`),H(n,{type:`step:end`,name:r.name,status:o.status}),i.push(o),o.status!==`pass`&&(d=!0)}}catch(e){let t=e instanceof dt;i.push({name:r.name,kind:r.kind===`step`?`request`:r.kind,status:`error`,assertions:[],captured:{},error:t?e.message:e?.message??String(e),durationMs:0}),d=!0}return ir(n,`sequence`,e.meta,i,r)}var U=d({links:[],ready:!1});function cr(e){let t=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e.trim());if(!t)return;let n=t[1].length===3?[...t[1]].map(e=>e+e).join(``):t[1];return[0,2,4].map(e=>Number.parseInt(n.slice(e,e+2),16))}function lr(e){let t=cr(e);if(!t)return;let n=t.map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}),r=.2126*n[0]+.7152*n[1]+.0722*n[2],i=1.05/(r+.05);return(r+.05)/.056>i?`#0b1020`:`#ffffff`}var ur=e=>`--sb-accent:${e};--sb-accent-hover:color-mix(in srgb,${e} 82%,black);--sb-focus-ring:color-mix(in srgb,${e} 45%,white);`+(lr(e)?`--sb-text-on-accent:${lr(e)};`:``);function dr(e,t=`root`){if(!e.accent&&!e.accentDark)return``;let n=t===`host`?`:host`:`:root`,r=t===`host`?`:host(:not([data-theme="light"]))`:`:root:not([data-theme="light"])`,i=t===`host`?`:host([data-theme="dark"])`:`:root[data-theme="dark"]`,a=e.accent?`${n}{${ur(e.accent)}}`:``;return e.accentDark?`${a}@media (prefers-color-scheme: dark){${r}{${ur(e.accentDark)}}}${i}{${ur(e.accentDark)}}`:a}function fr(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(`specbook-brand`);r||(r=document.createElement(`style`),r.id=`specbook-brand`,document.head.append(r)),r.textContent=e?dr(e):``;let i=t.name??n;if(document.title=t.title?`${i} · ${t.title}`:i,t.favicon||t.logo){let e=document.querySelector(`link[rel="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.append(e)),e.href=t.favicon??t.logo}}var pr;function mr(e){pr=e,typeof location<`u`&&(W.value=vr(location.hash))}var hr=e=>pr&&e.startsWith(`${pr}/`)?e.slice(pr.length+1):e,gr=e=>pr&&!e.includes(`/`)?`${pr}/${e}`:e,_r=e=>encodeURIComponent(e).replace(/%2F/gi,`/`);function vr(e){let[t=``,n=``]=e.split(`?`),r=new URLSearchParams(n),i=r.get(`play`)??void 0,a=r.get(`tab`),o=a===`docs`||a===`try`?a:void 0,s=/^#\/op\/(.+)$/.exec(t);if(s)return{kind:`op`,key:gr(decodeURIComponent(s[1])),play:i,tab:o};let c=/^#\/seq\/(.+)$/.exec(t);return c?{kind:`seq`,id:decodeURIComponent(c[1]),play:i,tab:o}:t===`#/browse`?{kind:`browse`}:{kind:`home`}}function yr(e){if(e.kind===`home`)return`#/`;if(e.kind===`browse`)return`#/browse`;let t=e.kind===`op`?`#/op/${_r(hr(e.key))}`:`#/seq/${encodeURIComponent(e.id)}`,n=new URLSearchParams;e.play!==void 0&&n.set(`play`,e.play),e.tab&&n.set(`tab`,e.tab);let r=n.toString();return r?`${t}?${r}`:t}var br=()=>typeof matchMedia==`function`&&matchMedia(`(max-width: 820px)`).matches,xr=e=>br()?{kind:`browse`}:{kind:`home`},W=d(vr(typeof location>`u`?``:location.hash)),G=d(!1),Sr=d(``),Cr=d(``);function K(e){location.hash=yr(e),W.value=e}function wr(e,t,n=40){let r=t.trim().toLowerCase().split(/\s+/).filter(Boolean);if(r.length===0)return e.slice(0,n);let i=[];for(let t of e){let e=t.title.toLowerCase(),n=`${e} ${t.group.toLowerCase()} ${t.hay.toLowerCase()}`;if(!r.every(e=>n.includes(e)))continue;let a=0;for(let t of r)a+=e.startsWith(t)?3:e.includes(t)?2:1;t.kind===`seq`&&(a+=.5),t.kind===`req`&&(a+=.4),i.push([a,t])}return i.sort((e,t)=>t[0]-e[0]).slice(0,n).map(([,e])=>e)}function Tr({size:t=16}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[e(`path`,{d:`M3 3l19 9-19 9 3.5-9z`}),e(`path`,{d:`M6.5 12H14`})]})}function Er({size:t=12}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[e(`rect`,{x:`4`,y:`11`,width:`16`,height:`10`,rx:`2`}),e(`path`,{d:`M8 11V7a4 4 0 0 1 8 0v4`})]})}function Dr({size:t=16}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[e(`path`,{d:`M12 15V3`}),e(`path`,{d:`M7.5 7.5 12 3l4.5 4.5`}),e(`path`,{d:`M5 11H4.5A1.5 1.5 0 0 0 3 12.5v7A1.5 1.5 0 0 0 4.5 21h15a1.5 1.5 0 0 0 1.5-1.5v-7a1.5 1.5 0 0 0-1.5-1.5H19`})]})}function Or({size:t=16}){return e(`svg`,{viewBox:`0 0 16 16`,width:t,height:t,fill:`currentColor`,"aria-hidden":`true`,children:e(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.6 7.6 0 0 1 4 0c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z`})})}function kr({size:t=16}){return e(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`currentColor`,"aria-hidden":`true`,children:e(`rect`,{x:`6`,y:`6`,width:`12`,height:`12`,rx:`2`})})}function Ar(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>void e.set(t,String(n)),removeItem:t=>void e.delete(t)}}function jr(e){try{let t=globalThis[e];if(t)return t}catch{}return Ar()}var Mr={get local(){return jr(`localStorage`)},get session(){return jr(`sessionStorage`)}},Nr=`specbook.environments.v1`,Pr={local:{},session:{}},Fr=e=>e===`local`?Mr.local:Mr.session;function Ir(e){try{let t=Fr(e).getItem(Nr);return t?JSON.parse(t):Pr[e]}catch{return Pr[e]}}function Lr(e,t){Pr[e]=t;try{Fr(e).setItem(Nr,JSON.stringify(t))}catch{}}function Rr(e,t=`local`){return{all:()=>Ir(t)[e]??{},save(n,r){let i=Ir(t);Lr(t,{...i,[e]:{...i[e],[n]:r}})},remove(n){let r=Ir(t),{[n]:i,...a}=r[e]??{};Lr(t,{...r,[e]:a})}}}var zr=`specbook`;function Br(e){return{version:e,send(e,t){return new Promise((n,r)=>{let i=e.id,a=e=>{let t=e.data;if(e.source!==window||t?.channel!==`${zr}:reply`||!t.reply)return;let r=t.reply;(i===void 0||r.id===i)&&(s(),n(t.reply))},o=()=>{s(),window.postMessage({channel:`${zr}:call`,call:{v:1,type:`abort`,id:i}},`*`),r(new DOMException(`aborted`,`AbortError`))},s=()=>{window.removeEventListener(`message`,a),t?.removeEventListener(`abort`,o)};window.addEventListener(`message`,a),t?.addEventListener(`abort`,o),window.postMessage({channel:`${zr}:call`,call:e},`*`)})}}}async function Vr(e=250){let t=globalThis.__SPECBOOK_EXTENSION__;if(t)return t;if(typeof window>`u`)return;let n=Br(1),r=new Promise(t=>setTimeout(()=>t(void 0),e)),i=await Promise.race([n.send({v:1,type:`ping`}).catch(()=>void 0),r]);return i?.type===`pong`?{...n,version:i.version}:void 0}var Hr=0;function Ur(e,t){return zn({baseUrl:t,fetch:async(t,n)=>{let r=new Request(t,n),i=`c${Date.now().toString(36)}${Hr++}`,a=await e.send({v:1,type:`fetch`,id:i,req:await kn(r)},n?.signal??void 0);if(a.type===`error`)throw Error(a.message);if(a.type!==`response`)throw Error(`unexpected reply from the extension`);return An(a.res)}})}var Wr=`specbook.secrets.v1`,Gr={},Kr=()=>{try{let e=Mr.session.getItem(Wr);return e?JSON.parse(e):Gr}catch{return Gr}},qr=e=>{Gr=e;try{Mr.session.setItem(Wr,JSON.stringify(e))}catch{}},Jr={get:(e,t)=>Kr()[e]?.[t],set(e,t,n){let r=Kr();qr({...r,[e]:{...r[e],[t]:n}})},remove(e,t){let n=Kr(),{[t]:r,...i}=n[e]??{};qr({...n,[e]:i})}},Yr=e=>{try{return e?new URL(e).origin:void 0}catch{return}},Xr=/\{\{\s*secrets\.([\w$-]+)\s*\}\}/g;function Zr(e){return e.proxy?`proxy`:e.pageOrigin&&Yr(e.baseUrl)===e.pageOrigin?`direct`:e.extension?`extension`:`direct`}var Qr=e=>{let t=new Set,n=e=>{if(typeof e==`string`)for(let n of yn(new TextEncoder().encode(e)))t.add(n);else Array.isArray(e)?e.forEach(n):e&&typeof e==`object`&&Object.getPrototypeOf(e)===Object.prototype&&Object.values(e).forEach(n)};return n(e.headers),n(e.query),n(e.body),[...t]};function $r(e,t){return(n,r)=>{let i=Qr(n);if(i.length===0)return e(n,r);let a=t.originFor(n.service),o=new Map,s=[];for(let e of i){let n=a?t.store.get(a,e):void 0;n===void 0?s.push(e):o.set(e,n)}if(s.length&&t.unresolved===`fail`)throw new jn(s);let c=e=>typeof e==`string`?Sn(e,o):Array.isArray(e)?e.map(c):e&&typeof e==`object`&&Object.getPrototypeOf(e)===Object.prototype?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,c(t)])):e;return e({...n,headers:c(n.headers),query:c(n.query),body:c(n.body)},r)}}function ei(e){return(t,n)=>{let r=Zr({proxy:!!e.proxy,extension:!!e.extension,baseUrl:e.baseOf(t.service),pageOrigin:e.pageOrigin});return((r===`proxy`?e.proxy:r===`extension`?e.extension:e.direct)??e.direct)(t,n)}}var ti=`auth:`,ni=e=>`${ti}${encodeURIComponent(e)}`,ri=`discovery:`,ii=e=>`${ri}${encodeURIComponent(e)}`,ai=/^[A-Za-z0-9_-]+$/,oi=/^[A-Za-z_][\w.-]*$/,si=e=>typeof e==`string`?/\{\{/.test(e):typeof e==`object`&&!!e&&Object.values(e).some(si),ci=e=>typeof e==`object`&&e?JSON.stringify(e):String(e??``);function li(e,t={}){let n={statuses:(t,n)=>e.manifests[t]?.operations.find(e=>e.id===n)?.statuses??[],async example(t,n,r){let i=async r=>(await e.examples[`${t}/${n}.${r}`]?.(0))?.default;return await i(r)??await i(`default`)}};async function r(t){return(await e.loadConfig(t)).default}let i=()=>e.mode!==`dev`,a=()=>i()?t.environmentStore?.all()??{}:{},o=new Set;async function s(e){let t=await r(e),n={};for(let[e,r]of Object.entries(t.environments??{})){let t=r?.risk;(t===`production`||t===`sandbox`)&&(n[e]=t)}for(let[e,t]of Object.entries(a()))t.from&&n[t.from]&&!n[e]&&(n[e]=n[t.from]);return n}async function c(e){let t=await r(e),n={};for(let[e,r]of Object.entries(t.environments??{})){let t=r?.description;t&&(n[e]=t)}for(let[e,t]of Object.entries(a()))t.from&&(n[e]=`copy of ${t.from}, kept in this browser`);return n}async function l(t){let n=await r(t);return St({services:n.services??{},environments:n.environments},[...Object.keys(e.environmentVars??{}),...o],Object.keys(a()))}async function u(t){if(e.mode===`dev`)try{let e=await fetch(`/__specbook/environment?env=${encodeURIComponent(t)}`);if(e.ok)return(await e.json()).vars}catch{}return{...e.environmentVars?.[t],...a()[t]?.vars}}async function d(e,t){return vt(await r(t),e,await u(e))}async function f(e,t,n){return bt(await r(n),e,t,await d(t,n))}async function p(e,t,n){let i=(await r(n)).auth?.[e]?.oauth;return!i||!si(i)?i:xt(i,await d(t,n),e)}async function m(e,t){let n=vt(e,t,Object.values(e.services??{}).some(e=>si(e.baseUrl))||Object.values(e.auth??{}).some(e=>si(e.oauth))?await u(t):{});return{baseUrl(r){try{return bt(e,r,t,n)}catch{return}},oauth(t){let r=e.auth?.[t]?.oauth;try{return r?xt(r,n,t):void 0}catch{return}}}}async function h(n,o){let s=await r(o),c=s.vars??{},l=s.environments?.[n]?.vars??{},d=a()[n],f=i()?e.environmentVars?.[n]??{}:await u(n),p=d?.vars??{},m=[...new Set([...Object.keys(c),...Object.keys(l),...Object.keys(f),...Object.keys(p)])],h=e.mode===`dev`||!!t.environmentStore,g=m.map(e=>{let t=e in l?l[e]:c[e],n=e in p?`browser`:e in f?`file`:void 0,r=e in p?p[e]:e in f?f[e]:t,i=e in p&&e in f?f[e]:t;return{name:e,value:ci(r),source:n??(e in l?`config`:`default`),fallback:n&&i!==void 0?ci(i):void 0,editable:h}}),_=vt(s,n,{...f,...p}),v=[];if(n!==`mock`)for(let e of Object.keys(s.services??{}))try{let t=bt(s,e,n,_);v.push({service:e,...t?{url:t}:{}})}catch(t){if(!(t instanceof R))throw t;v.push({service:e,error:t.message})}return{rows:g,addresses:v,uses:Ct(s),removable:!!d?.from}}let _=()=>e.mode===`dev`||!!t.environmentStore;async function v(n,i,a){if(!ai.test(n))throw Error(`Use letters, digits, "-" and "_" in an environment name`);if(n===`mock`||(await l(a)).includes(n))throw Error(`"${n}" already exists`);if(e.mode===`dev`){let e=await fetch(`/__specbook/environment`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:n,from:i})});if(!e.ok)throw Error((await e.json()).error??`could not create`);o.add(n);return}if(!t.environmentStore)throw Error(`This page has nowhere to keep a new environment`);let s={...(await r(a)).environments?.[i]?.vars??{},...await u(i)};t.environmentStore.save(n,{from:i,vars:Object.fromEntries(Object.entries(s).filter(([,e])=>e!==null&&typeof e!=`object`).map(([e,t])=>[e,String(t)]))})}async function y(n,r,i){if(!oi.test(r))throw Error(`"${r}" is not a variable name`);if(e.mode===`dev`){let e=await fetch(`/__specbook/var`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({env:n,name:r,value:i})});if(!e.ok)throw Error((await e.json()).error??`save failed`);return}let a=t.environmentStore;if(!a)throw Error(`This page has nowhere to keep a variable`);let o=a.all()[n]??{vars:{}},s={...o.vars};i===null?delete s[r]:s[r]=i,!o.from&&Object.keys(s).length===0?a.remove(n):a.save(n,{...o,vars:s})}function x(e){t.environmentStore?.remove(e)}async function S(e,t){let n=await r(t);return[...new Set([...Object.keys(n.vars??{}),...Object.keys(n.environments?.[e]?.vars??{}),...Object.keys(await u(e))])]}async function C(i,a,o,s={}){if(i===`mock`)return Zt({loader:n});let c=await r(o),l=Object.values(c.services??{}).some(e=>si(e.baseUrl))?await d(i,o):{},u=globalThis.location?.href,f=globalThis.location?.origin,p=e=>{if(s[e])return s[e];let t;try{t=bt(c,e,i,l)}catch(e){throw e instanceof R?Error(e.message):e}if(!t)throw Error(`No base URL for ${e} in ${i}`);return In(t,u)},m=e.mode!==`static`,h=await t.extension?.(),g=h?Ur(h,x):void 0,_=t.secrets??Jr,v=zn({baseUrl:p}),y=m?zn({baseUrl:e=>`${a}/${i}/${e}`}):void 0;return ei({direct:S($r(v,{store:_,originFor:b,unresolved:`fail`})),proxy:y?$r(y,{store:_,originFor:b,unresolved:`keep`}):void 0,extension:g?$r(g,{store:_,originFor:b,unresolved:`keep`}):void 0,baseOf:x,pageOrigin:f});function b(e){return Yr(x(e))}function x(e){try{return p(e)}catch{return``}}function S(e){return async(t,n)=>{try{return await e(t,n)}catch(e){throw e instanceof TypeError&&(t.service.startsWith(ti)||t.service.startsWith(ri))?Error(`The browser could not reach the sign-in provider (${s[t.service]??`unknown`}). It probably does not allow calls from this page (CORS). Embedding the viewer on the API's origin does not help when the sign-in server is on another host; the browser extension can make the call. You can still paste an access token.`):e instanceof TypeError?Error(`The browser could not reach ${t.service} in "${i}". The API probably does not allow calls from this page (CORS). It works when the viewer runs on the API's own origin: embed it in the API's docs route ("Embed the viewer" in the README). Mock data keeps working.`):e}}}}async function w(t){if(e.mode!==`dev`||t===`mock`)return{};try{let e=await fetch(`/__specbook/environment?env=${encodeURIComponent(t)}`);if(!e.ok)return{};let n=await e.json();return Object.fromEntries((n.secrets??[]).filter(e=>e.source).map(e=>[e.name,e.source]))}catch{return{}}}let E=new Map;async function D(e){if(e.env===`mock`)throw Error(`Sign in needs a live environment, not mock`);let t;try{t=await p(e.profile,e.env,e.version)}catch(e){throw e instanceof R?Error(e.message):e}if(!t)throw Error(`"${e.profile}" has no sign-in configured`);if(!$t(t))return{authorizationUrl:t.authorizationUrl,tokenUrl:t.tokenUrl,scopes:t.scopes??{}};let n=new URL(t.openIdConnectUrl),r=E.get(n.href);r||(r=(async()=>{let t=ii(e.profile),r=await(await C(e.env,e.proxyBase??`/__specbook/proxy`,e.version,{[t]:n.origin}))({service:t,opId:`oidc-discovery`,method:`GET`,url:n.pathname,query:Object.fromEntries(n.searchParams),headers:{accept:`application/json`},encoding:`none`},e.signal);if(r.status>=400)throw Error(`The provider's discovery document answered ${r.status}`);return en(r.body)})(),E.set(n.href,r),r.catch(()=>E.delete(n.href)));let i=await r;return{...i,scopes:t.scopes&&Object.keys(t.scopes).length?t.scopes:i.scopes}}async function O(e){let{tokenUrl:t}=await D(e),n=new URL(t),r=ni(e.profile),i=await(await C(e.env,e.proxyBase??`/__specbook/proxy`,e.version,{[r]:n.origin}))({service:r,opId:`oauth-token`,method:`POST`,url:n.pathname,query:Object.fromEntries(n.searchParams),headers:{accept:`application/json`},body:e.fields,encoding:`form`},e.signal),a=i.body;if(i.status>=400&&typeof a?.error!=`string`)throw Error(`The token endpoint answered ${i.status}`);return i.body}let k=e=>e.replace(/^\.\//,``),ne=t=>e.requestExamples[t]??[];async function re(e,t,n){let r=ne(e).find(e=>e.name===t);if(r)return{...(await r.load(n)).default,source:r.source,dir:r.dir}}async function ie(t,n){let r=await e.assets[`${n}/${k(t)}`]?.();if(!r)throw Error(`File "${t}" not found next to the example`);let i=await fetch(r);if(!i.ok)throw Error(`Could not read "${t}" (${i.status})`);return new File([await i.blob()],k(t).split(`/`).pop(),{type:i.headers.get(`content-type`)??void 0})}async function ae(e){let t=await r(e.version),n=t.auth??{},i=Object.fromEntries(Object.entries(t.services??{}).filter(([,e])=>e.auth).map(([e,t])=>[e,t.auth]));return{env:e.env,vars:await d(e.env,e.version),overrides:e.vars,inputs:e.inputs,transport:await C(e.env,e.proxyBase??`/__specbook/proxy`,e.version),deferSecrets:!0,auth:n,serviceAuth:i,onEvent:e.onEvent,onInput:e.onInput,signal:e.signal,timeoutMs:t.timeoutMs,example:(t,n)=>re(`${t.service}/${t.id}`,n,e.version),readFile:(t,n)=>ie(t,n??e.fileDir)}}async function A(e,t){if(e.kind===`sequence`)return!0;let{init:n,data:r,example:i,path:a,query:o,headers:s}=e.input;if(Object.values(n??{}).some(e=>typeof e==`function`)||typeof r==`function`)return!0;let c=i?await re(`${e.op.service}/${e.op.id}`,i,t.version):void 0;return b([c,r,e.dataPatches,a,o,s,t.vars])}async function oe(t,n,i){if(!e.loadFaker)return!1;let[a,o]=await Promise.all([e.loadFaker(t),r(t)]),s=await T(a,o.faker,n);return te(s,o.faker,{locale:n,seed:i}),!0}async function se(t,n){e.loadFaker&&await A(t,n)&&await oe(n.version,n.locale,n.seed);let r=await ae(n);return t.kind===`sequence`?sr(t,r):or(t,n.env===`mock`?{...r,mockStatus:n.mockStatus}:r)}async function ce(t,n,r,i){let a=e.operations[t];if(!a)throw Error(`Unknown operation ${t}`);let o=(await a(n))[t.split(`/`)[1]];if(!o)throw Error(`Operation module for ${t} has no export`);let s=Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0)),c=o.request({...i?.input??{},...s});return i?.mockHook?ee(c,i.mockHook):c}async function le(t,n){return(await e.operations[t]?.(n))?.[t.split(`/`)[1]]?.meta}async function ue(e,t){let n=`${e.op.service}/${e.op.id}`,r=e.input.example?await re(n,e.input.example,t):void 0,i=e.input.data;typeof i==`function`&&(i=(await i()).default);let a=g(r?.body,i);for(let t of e.dataPatches)a=g(a,t);return{name:e.input.name??e.op.id,source:`project`,dir:r?.dir,path:g(r?.path??{},e.input.path??{}),query:g(r?.query??{},e.input.query??{}),headers:{...r?.headers??{},...e.input.headers??{}},body:a}}async function j(e,t){let n={};await Promise.all(e.map(async e=>{try{let r=ui(await e.load(t));if(r?.kind!==`request`)return;let i=`${r.op.service}/${r.op.id}`,a=r.input.name??e.file.replace(/^.*\//,``).replace(/\.req\.ts$/,``);n[i]??=[],n[i]?.push({file:e.file,name:a,def:r})}catch{}}));for(let e of Object.values(n))e.sort((e,t)=>e.name.localeCompare(t.name));return n}async function de(e,t){let n=[];return await Promise.all(e.map(async e=>{try{let r=ui(await e.load(t));r?.kind===`sequence`&&n.push({file:e.file,seq:r})}catch{}})),n.sort((e,t)=>e.seq.meta.title.localeCompare(t.seq.meta.title))}return{config:r,environments:l,environmentRisks:s,environmentNotes:c,environmentVars:u,environmentView:h,canCreateEnvironment:_,createEnvironment:v,deleteEnvironment:x,setVariable:y,baseUrlOf:f,oauthOf:p,addressesIn:m,managedSecrets:w,oauthEndpoints:D,oauthExchange:O,run:se,fakerReady:oe,operationRequest:ce,operationMeta:le,examplesOf:ne,knownVars:S,loadExample:re,savedExample:ue,loadVariants:j,loadSequences:de}}function ui(e){let t=e=>e&&(e.kind===`request`||e.kind===`sequence`);return t(e.default)?e.default:Object.values(e).find(t)}var q=d(Date.now()),J=d(`mock`),Y=d([`mock`]),di=d({}),fi=d({}),pi=d(void 0),X=d(void 0),mi=d(0),hi=d(!1),gi=d(!1),_i=d({createEnvironment:!0,environmentSettings:!0}),Z=ne,vi,yi=async()=>{if(vi&&Date.now()-vi.at<3e4)return vi.bridge;let e=await Vr();return vi={at:Date.now(),bridge:e},e},bi=y,xi=bi===null?void 0:Rr(bi?.scope??`${globalThis.location?.origin}${globalThis.location?.pathname}`,bi?.session?`session`:`local`),Q=li(ne,{extension:yi,environmentStore:xi}),Si=E===`static`;async function Ci(e,t){let n=await fetch(`/__specbook/save`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:e,content:t})});if(!n.ok)throw Error((await n.json()).error??`save failed`);q.value=Date.now()}function wi(){if(!globalThis.__SPECBOOK_VIEWER__)return null;let t=Y.value.some(e=>e!==`mock`);return e(`p`,{class:`muted overview-mode`,children:t?`Requests start on mock data. Switch Environment to live to call the real API.`:`Requests run on generated mock data: this document does not say where the API lives.`})}var Ti=/(^|\.)specbook\.dev$/i;function Ei(e){return e.published&&e.badge!==!1&&!Ti.test(e.host)}var Di=e=>`https://ui.specbook.dev/?ref=${encodeURIComponent(e)}`;function Oi(){let t=globalThis.location?.hostname??``;return Ei({host:t,published:Si,badge:U.value.badge})?e(`p`,{class:`powered-by`,children:e(`a`,{href:Di(t),target:`_blank`,rel:`noopener`,children:`Powered by Specbook`})}):null}var ki=60,Ai=`Default`;function ji(e){let t=W.value;if(e.route.kind===`op`&&t.kind===`op`&&e.route.key===t.key){let n=(t.play??``).startsWith(`saved:`);return e.kind===`req`?t.play===e.route.play:!n}return e.route.kind===`seq`&&t.kind===`seq`&&e.route.id===t.id}function Mi({e:t}){return e(`button`,{type:`button`,class:`op-row ${ji(t)?`active`:``}`,onClick:()=>K(t.route),title:t.path?`${t.title}\n${t.path}`:t.title,children:[e(`span`,{class:`method ${t.method}`,children:t.method}),e(`span`,{class:`op-title`,children:[t.title,t.secured&&e(`span`,{class:`op-lock`,title:`Needs credentials`,children:e(Er,{})})]}),e(`span`,{class:`op-path`,children:t.path})]})}function Ni(e,t){let n=Cr.value.trim(),r=t.length<=1,i=r?t[0]?.id??``:Sr.value,o=a(()=>e.filter(e=>e.kind===`op`),[e]),s=a(()=>e.filter(e=>e.kind===`seq`),[e]),c=a(()=>e.filter(e=>e.kind===`req`),[e]),l=a(()=>{let e=i?c.filter(e=>e.service===i):c;return n?wr(e,n,200):e},[c,i,n]);return{q:n,single:r,svc:i,shownOps:a(()=>{let e=i?o.filter(e=>e.service===i):o;return n?wr(e,n,500):e},[o,i,n]),shownFlows:a(()=>{let e=i&&!r?s.filter(e=>e.tags?.includes(i)):s;return n?wr(e,n,100):e},[s,i,n,r]),shownReqs:l}}function Pi({entries:t,services:i}){let o=c(null),s=c(null),[l,u]=r(new Map),{q:d,single:f,svc:p,shownOps:m,shownFlows:h,shownReqs:g}=Ni(t,i),_=e=>l.get(`section:${e}`)??!0,v=e=>{let t=new Map(l);t.set(`section:${e}`,!_(e)),u(t)};n(()=>{let e=e=>{let t=e.target;e.key===`/`&&!/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)&&(e.preventDefault(),o.current?.focus())};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]),n(()=>{let e=s.current;if(!e)return;let t=t=>{if(t.key!==`ArrowDown`&&t.key!==`ArrowUp`)return;let n=[...e.querySelectorAll(`.op-row, .flow-row`)],r=n.indexOf(document.activeElement);if(r<0)return;let i=t.key===`ArrowDown`?r+1:r-1;t.preventDefault(),i>=0&&i<n.length?n[i]?.focus():i<0&&o.current?.focus()};return e.addEventListener(`keydown`,t),()=>e.removeEventListener(`keydown`,t)},[]);let y=a(()=>{let e=new Map;for(let t of m){let n=t.tag??`default`,r=p||f?n:`${t.service} · ${n}`;e.set(r,[...e.get(r)??[],t])}return[...e.entries()].sort(([e],[t])=>e.localeCompare(t))},[m,p,f]),b=a(()=>{let e=new Map;for(let t of h){let n=t.flowGroup?.trim()||Ai;e.set(n,[...e.get(n)??[],t])}let t=e=>e===Ai?0:1;return[...e.entries()].sort(([e],[n])=>t(e)-t(n)||e.localeCompare(n))},[h]),x=m.length>ki&&!d,S=(e,t)=>l.get(e)??(!x||t.some(ji)),C=(e,t)=>{let n=new Map(l);n.set(e,!S(e,t)),u(n)};return e(`div`,{class:`catalog`,ref:s,children:[e(`div`,{class:`cat-top`,children:[!f&&e(`div`,{class:`pills`,role:`tablist`,"aria-label":`APIs`,children:[e(`button`,{type:`button`,role:`tab`,"aria-selected":p===``,class:`pill ${p===``?`on`:``}`,onClick:()=>Sr.value=``,children:`All`}),i.map(t=>e(`button`,{type:`button`,role:`tab`,"aria-selected":p===t.id,class:`pill ${p===t.id?`on`:``}`,onClick:()=>Sr.value=t.id,children:[t.id,` `,e(`span`,{class:`count`,children:t.ops})]}))]}),e(`div`,{class:`cat-filter-wrap`,children:[e(`input`,{ref:o,type:`text`,class:`cat-filter`,placeholder:p?`Filter ${p}`:`Filter operations and flows`,"aria-label":`Filter`,value:Cr.value,onInput:e=>Cr.value=e.target.value,onKeyDown:e=>{e.key===`ArrowDown`&&(e.preventDefault(),s.current?.querySelector(`.op-row, .flow-row`)?.focus()),e.key===`Escape`&&(Cr.value=``)}}),e(`kbd`,{class:`cat-hint`,title:`Focus the filter`,children:`/`})]})]}),b.length>0&&e(`section`,{class:`flows`,"aria-label":`Flows`,children:[e(`button`,{type:`button`,class:`flows-title`,"aria-expanded":_(`flows`),onClick:()=>v(`flows`),children:[e(`span`,{class:`caret`,children:_(`flows`)?`▾`:`▸`}),e(`span`,{class:`method flow`,children:`FLOW`}),e(`span`,{class:`muted small`,children:`Multi-step flows you can run end to end`}),e(`span`,{class:`count`,children:h.length})]}),_(`flows`)&&b.map(([t,n])=>{let r=`flows:${t}`,i=b.length===1,a=i||(l.get(r)??!0);return e(`div`,{class:`flow-group`,children:[!i&&e(`button`,{type:`button`,class:`group-head flow-head`,"aria-expanded":a,onClick:()=>{let e=new Map(l);e.set(r,!a),u(e)},children:[e(`span`,{class:`caret`,children:a?`▾`:`▸`}),` `,t,` `,e(`span`,{class:`count`,children:n.length})]}),a&&n.map(t=>e(`button`,{type:`button`,class:`op-row flow-row ${ji(t)?`active`:``}`,onClick:()=>K(t.route),children:[e(`span`,{class:`flow-play`,"aria-hidden":`true`,children:`▶`}),e(`span`,{class:`op-title`,children:t.title})]}))]},r)})]}),g.length>0&&e(`section`,{class:`flows requests`,"aria-label":`Requests`,children:[e(`button`,{type:`button`,class:`flows-title`,"aria-expanded":_(`requests`),onClick:()=>v(`requests`),children:[e(`span`,{class:`caret`,children:_(`requests`)?`▾`:`▸`}),e(`span`,{class:`method req`,children:`REQ`}),e(`span`,{class:`muted small`,children:`Requests you can run and check`}),e(`span`,{class:`count`,children:g.length})]}),_(`requests`)&&g.map(t=>e(`button`,{type:`button`,class:`op-row req-row ${ji(t)?`active`:``}`,onClick:()=>K(t.route),title:`${t.method} ${t.path}`,children:[e(`span`,{class:`method ${t.method}`,children:t.method}),e(`span`,{class:`op-title`,children:[t.title,(t.tags??[]).map(t=>e(`span`,{class:`chip req-tag`,children:t}))]}),e(`span`,{class:`op-path`,children:t.path})]}))]}),y.map(([t,n])=>{let r=S(t,n);return e(`div`,{class:`op-group`,children:[e(`button`,{type:`button`,class:`group-head`,"aria-expanded":r,onClick:()=>C(t,n),children:[e(`span`,{class:`caret`,children:r?`▾`:`▸`}),` `,t,` `,e(`span`,{class:`count`,children:n.length})]}),r&&n.map(t=>e(Mi,{e:t}))]},t)}),y.length===0&&b.length===0&&g.length===0&&e(`p`,{class:`muted cat-empty`,children:[d?`Nothing matches “${d}”.`:`No operations.`,` `,d&&e(`button`,{type:`button`,class:`link`,onClick:()=>Cr.value=``,children:`Clear the filter`})]})]})}function Fi({services:t,counts:n}){let r=U.value;if(!r.ready)return e(`div`,{class:`overview`,"aria-busy":`true`});let i=t.reduce((e,t)=>e+t.ops,0),a=t.length===1?t[0]:void 0,o=r.title??r.name??(a?a.title??a.id:`${t.length} APIs · ${i.toLocaleString()} operations`),s=a?`${a.ops} ${a.ops===1?`operation`:`operations`}${a.version?` · v${a.version}`:``}`:r.name||r.title?`${t.length} APIs · ${i.toLocaleString()} operations`:void 0;return e(`div`,{class:`overview`,children:[r.logo&&e(`img`,{class:`overview-logo`,src:r.logo,alt:``,style:r.logoBackground?{background:r.logoBackground,padding:`10px 16px`,borderRadius:`10px`}:void 0}),r.title&&r.name&&e(`p`,{class:`overview-name`,children:r.name}),e(`h1`,{children:o}),r.tagline&&e(`p`,{class:`tagline`,children:r.tagline}),s&&e(`p`,{class:`muted`,children:s}),e(`p`,{class:`overview-hint`,children:`Choose an operation or flow on the left to read it and try it.`}),e(wi,{}),e(`button`,{type:`button`,class:`btn primary overview-browse`,onClick:()=>K({kind:`browse`}),children:`Browse operations and flows`}),r.links.length>0&&e(`p`,{class:`overview-links`,children:r.links.map(t=>e(`a`,{href:t.href,target:`_blank`,rel:`noreferrer`,children:t.label}))}),e(`p`,{class:`muted overview-keys`,children:[e(`kbd`,{children:`⌘`}),` `,e(`kbd`,{children:`K`}),` jumps anywhere · `,e(`kbd`,{children:`/`}),` filters the list`]}),e(Oi,{})]})}var Ii=`\0new-environment`;function Li(){let t=J.value,n=Y.value.includes(t)?Y.value:[t,...Y.value],r=di.value[t],i=t===`mock`?`mock`:r===`production`||r!==`sandbox`&&/prod/i.test(t)?`prod`:`live`,a=_i.value.createEnvironment&&Q.canCreateEnvironment(),o=n.length>1||a;return e(`span`,{class:`env-badge ${i} ${o?`switch`:``}`,title:t===`mock`?`Environment: mock (no network)`:`Environment: ${t}. Requests go to the real API.`,children:[e(`span`,{class:`env-name`,children:t}),o&&e(`select`,{"aria-label":`Environment`,value:t,onChange:e=>{let t=e.target.value;t===Ii?(e.target.value=J.value,gi.value=!0):J.value=t},children:[n.map(t=>e(`option`,{value:t,title:fi.value[t],children:t})),a&&e(`option`,{value:Ii,children:`New environment…`})]})]})}async function Ri(){let e=q.value,[t,n,r]=await Promise.all([Q.environments(e),Q.environmentRisks(e),Q.environmentNotes(e)]);Y.value=t,di.value=n,fi.value=r,mi.value+=1}var zi={session:`this session`,process:`environment variable`,environment:`environment file`,shared:`shared file`},Bi={default:`default`,config:`config`,file:`file`,browser:`this browser`};async function Vi(e,t){let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error((await n.json()).error??`save failed`)}function Hi(e,t){let n=t.uses[e.name];if(!n)return[];let r=[];for(let e of n.services){let n=t.addresses.find(t=>t.service===e);r.push(n?.url?`${e} calls go to ${n.url}`:`${e} calls use this address`)}for(let e of n.profiles)r.push(`${e.profile} sign-in reads this (${e.field})`);return r}function Ui(){let[t,i]=r(),[o,s]=r(),[c,l]=r({}),u=hi.value,d=e=>hi.value=e,[f,m]=r(`environment`),[h,g]=r({}),[_,v]=r({name:``,value:``}),[y,b]=r(),x=J.value,S=()=>Si?Promise.resolve():fetch(`/__specbook/environment?env=${encodeURIComponent(x)}`).then(e=>e.json()).then(i,()=>i(void 0));n(()=>{S(),m(x===`mock`?`session`:`environment`),g({})},[x]),n(()=>{let e=!0;return Q.environmentView(x,q.value).then(t=>e&&s(t)),()=>{e=!1}},[x,q.value,mi.value]),n(()=>{Q.config(q.value).then(e=>{let t={};for(let[n,r]of Object.entries(e.auth??{}))for(let e of JSON.stringify(r.apply).matchAll(/secrets\.([\w$-]+)/g))t[e[1]]=r.title??n;l(t)})},[]);let C=a(()=>x===`mock`?0:t?.secrets.filter(e=>!e.source).length??0,[t,x]);if(!o||!Si&&!t)return null;let w=t?.secrets??[];if(!(w.length>0||o.rows.length>0||x!==`mock`))return null;let T=async e=>{b(void 0);try{await e(),await S()}catch(e){b(e instanceof Error?e.message:String(e))}},E=(e,t)=>T(async()=>{await Vi(`/__specbook/secret`,{name:e,value:t,scope:f,env:f===`shared`?void 0:x}),g(t=>({...t,[e]:``}))}),ee=(e,t)=>T(async()=>{await Q.setVariable(x,e,t===``?null:t),mi.value+=1}),D=()=>T(async()=>{Q.deleteEnvironment(x),J.value=`mock`,await Ri()}),te=[...t?.warnings??[],...x===`mock`?[]:o.addresses.filter(e=>e.error).map(e=>e.error)],O=[...o.rows].sort((e,t)=>Number(!!o.uses[t.name])-Number(!!o.uses[e.name])||e.name.localeCompare(t.name));return e(`div`,{class:`envmenu`,children:[e(`button`,{type:`button`,class:`btn envmenu-btn`,"aria-expanded":u,title:`Variables and credentials for ${x}`,"aria-label":C>0?`Environment settings, ${C} missing`:`Environment settings`,onClick:()=>d(!u),children:[e(`span`,{"aria-hidden":`true`,children:`⚙︎`}),` `,e(`span`,{class:`envmenu-label`,children:`Environment settings`}),C>0&&e(`span`,{class:`badge-missing`,children:C})]}),u&&e(`div`,{class:`envmenu-pop`,role:`dialog`,"aria-label":`Settings for ${x}`,children:[e(`header`,{class:`envmenu-head`,children:[e(`strong`,{children:x}),e(`span`,{class:`muted small`,children:x===`mock`?`mocks need no credentials`:`values apply to this environment`}),e(`span`,{class:`spacer`}),e(`button`,{type:`button`,class:`icon`,"aria-label":`Close`,onClick:()=>d(!1),children:`×`})]}),te.map(t=>e(`p`,{class:`envmenu-warn`,children:t})),y&&e(`p`,{class:`envmenu-warn`,children:y}),e(`section`,{children:[e(`h3`,{children:`Variables`}),e(`p`,{class:`muted small`,children:Si?`Kept in this browser; the defaults come from the spec or site.`:e(p,{children:[`Shared with the team in `,e(`code`,{children:[`.specbook/environments/`,x,`.env`]}),`. Defaults come from specbook.config.ts.`]})}),O.map(t=>{let n=t.source===`file`||t.source===`browser`,r=`var:${t.name}`;return e(`div`,{children:[e(`div`,{class:`envrow`,children:[e(`code`,{children:t.name}),e(`input`,{"aria-label":`Value of ${t.name}`,value:h[r]??t.value,disabled:!t.editable,onInput:e=>g({...h,[r]:e.target.value}),onBlur:()=>{let e=h[r];e!==void 0&&e!==t.value&&ee(t.name,e)},onKeyDown:e=>e.key===`Enter`&&e.target.blur()}),e(`span`,{class:`src ${n?`set`:`inherited`}`,children:Bi[t.source]}),n&&t.editable&&e(`button`,{type:`button`,class:`icon`,"aria-label":t.fallback===void 0?`Remove ${t.name}`:`Reset ${t.name}`,title:t.fallback===void 0?`Remove this variable`:`Back to ${t.fallback}`,onClick:()=>ee(t.name,null),children:`×`})]}),Hi(t,o).map(t=>e(`p`,{class:`muted small envuse`,children:t}))]},t.name)}),x!==`mock`&&o.addresses.filter(e=>e.url&&!Object.values(o.uses).some(t=>t.services.includes(e.service))).map(t=>e(`p`,{class:`muted small envuse`,children:[t.service,` calls go to `,t.url]})),x!==`mock`&&e(`form`,{class:`envrow`,onSubmit:e=>{e.preventDefault(),_.name&&ee(_.name,_.value).then(()=>v({name:``,value:``}))},children:[e(`input`,{placeholder:`name`,"aria-label":`New variable name`,value:_.name,onInput:e=>v({..._,name:e.target.value})}),e(`input`,{placeholder:`value`,"aria-label":`New variable value`,value:_.value,onInput:e=>v({..._,value:e.target.value})}),e(`button`,{type:`submit`,class:`btn`,disabled:!_.name,children:`Add`})]}),o.removable&&e(`p`,{children:e(`button`,{type:`button`,class:`link`,onClick:D,children:`Delete environment`})})]}),!Si&&e(`section`,{children:[e(`h3`,{children:`Secrets`}),w.length===0?e(`p`,{class:`muted small`,children:[`None declared. Add `,e(`code`,{children:[`secrets: `,`{ NAME: {} }`]}),` to the config.`]}):e(p,{children:[e(`label`,{class:`envrow scope`,children:[e(`span`,{class:`muted small`,children:`Save to`}),e(`select`,{"aria-label":`Where to save secrets`,value:f,onChange:e=>m(e.target.value),children:[e(`option`,{value:`environment`,children:[x,`.secrets.env (remembered here)`]}),e(`option`,{value:`session`,children:`this session only`}),e(`option`,{value:`shared`,children:`all environments (secrets.local.env)`})]})]}),w.map(t=>e(`form`,{class:`secretrow`,onSubmit:e=>{e.preventDefault(),E(t.name,h[t.name]??``)},children:[e(`div`,{class:`secretrow-head`,children:[e(`span`,{children:c[t.name]??t.name}),e(`code`,{class:`muted small`,children:t.key}),e(`span`,{class:`src ${t.source?`set`:`missing`}`,children:t.source?zi[t.source]:`missing`})]}),e(`div`,{class:`envrow`,children:[e(`input`,{type:`password`,autocomplete:`off`,"aria-label":`Value of ${t.name}`,placeholder:t.source?`•••••• (type to replace)`:`paste a value`,value:h[t.name]??``,onInput:e=>g({...h,[t.name]:e.target.value})}),e(`button`,{type:`submit`,class:`btn`,disabled:!h[t.name],children:`Save`}),t.source&&t.source!==`process`&&e(`button`,{type:`button`,class:`link`,onClick:()=>E(t.name,``),title:`Remove the value from the selected place`,children:`Clear`})]})]}))]})]})]})]})}var Wi=`https://github.com/specbook-dev/specbook`;function Gi(){return globalThis.__SPECBOOK_VIEWER__?.source?e(`a`,{class:`btn gh-star`,href:Wi,target:`_blank`,rel:`noopener`,title:`Specbook's source is on GitHub`,children:[e(Or,{}),e(`span`,{class:`gh-label`,children:`GitHub`})]}):null}var Ki=`specbook:list-width`,qi=()=>Math.round(innerWidth*.55);function Ji(){try{let e=Number(localStorage.getItem(Ki));return e>=280?e:void 0}catch{return}}var $=d(Ji());function Yi(e){$.value=e===void 0?void 0:Math.round(Math.max(280,Math.min(qi(),e)));try{$.value===void 0?localStorage.removeItem(Ki):localStorage.setItem(Ki,String($.value))}catch{}}function Xi(){let t=e=>{e.preventDefault(),document.body.classList.add(`resizing`);let t=e=>Yi(e.clientX),n=()=>{document.body.classList.remove(`resizing`),removeEventListener(`pointermove`,t),removeEventListener(`pointerup`,n)};addEventListener(`pointermove`,t),addEventListener(`pointerup`,n)},n=()=>$.value??document.querySelector(`.list-col`)?.offsetWidth??360;return e(`div`,{class:`list-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the list`,"aria-valuenow":$.value,"aria-valuemin":280,tabIndex:0,title:`Drag to resize · double-click to reset`,onPointerDown:t,onDblClick:()=>Yi(void 0),onKeyDown:e=>{e.key===`ArrowLeft`?(e.preventDefault(),Yi(n()-24)):e.key===`ArrowRight`&&(e.preventDefault(),Yi(n()+24))}})}var Zi=/^[A-Za-z0-9_-]+$/;function Qi(){return gi.value?e($i,{}):null}function $i(){let[t,i]=r(``),[a,o]=r(()=>J.value===`mock`?Y.value.find(e=>e!==`mock`)??`mock`:J.value),[s,l]=r(),[u,d]=r(!1),f=c(null);n(()=>{f.current?.focus();let e=e=>{e.key===`Escape`&&(gi.value=!1)};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]);let p=()=>gi.value=!1,m=Y.value.includes(t),h=t===``?void 0:Zi.test(t)?t===`mock`||m?`"${t}" already exists`:void 0:`Use letters, digits, "-" and "_"`,g=async()=>{d(!0),l(void 0);try{await Q.createEnvironment(t,a,q.value),await Ri(),J.value=t,gi.value=!1,hi.value=!0}catch(e){l(e instanceof Error?e.message:String(e))}finally{d(!1)}};return e(`div`,{class:`palette-backdrop newenv-backdrop`,children:[e(`button`,{type:`button`,class:`palette-dismiss`,"aria-label":`Close`,onClick:p}),e(`div`,{class:`palette newenv`,role:`dialog`,"aria-label":`New environment`,children:e(`form`,{onSubmit:e=>{e.preventDefault(),t&&!h&&!u&&g()},children:[e(`h2`,{children:`New environment`}),e(`label`,{children:[e(`span`,{class:`muted small`,children:`Name`}),e(`input`,{ref:f,type:`text`,"aria-label":`Environment name`,placeholder:`staging`,value:t,onInput:e=>i(e.target.value.trim())})]}),e(`label`,{children:[e(`span`,{class:`muted small`,children:`Duplicate of`}),e(`select`,{"aria-label":`Duplicate of`,value:a,onChange:e=>o(e.target.value),children:Y.value.filter(e=>e!==`mock`).map(t=>e(`option`,{value:t,children:t}))})]}),e(`p`,{class:`muted small`,children:[`It starts with `,a,`'s variables. Change its address in Variables; secrets are asked for again.`]}),(h||s)&&e(`p`,{class:`envmenu-warn`,children:h??s}),e(`div`,{class:`envrow`,children:[e(`span`,{class:`spacer`}),e(`button`,{type:`button`,class:`btn`,onClick:p,children:`Cancel`}),e(`button`,{type:`submit`,class:`btn primary`,disabled:!t||!!h||u,children:`Create`})]})]})})]})}function ea({entries:t}){let[i,o]=r(``),[s,l]=r(0),u=c(null),d=G.value;n(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`?(e.preventDefault(),G.value=!G.value):e.key===`Escape`&&(G.value=!1)};return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[]),n(()=>{d&&(o(``),l(0),setTimeout(()=>u.current?.focus(),0))},[d]);let f=a(()=>wr(t,i,30),[t,i]);if(!d)return null;let p=e=>{e&&(G.value=!1,K(e.route))};return e(`div`,{class:`palette-backdrop`,children:[e(`button`,{type:`button`,class:`palette-dismiss`,"aria-label":`Close`,onClick:()=>G.value=!1}),e(`div`,{class:`palette`,role:`dialog`,"aria-label":`Jump to`,children:[e(`input`,{ref:u,type:`text`,placeholder:`Jump to a sequence, request or operation…`,value:i,onInput:e=>{o(e.target.value),l(0)},onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),l(Math.min(f.length-1,s+1))):e.key===`ArrowUp`?(e.preventDefault(),l(Math.max(0,s-1))):e.key===`Enter`&&p(f[s])}}),e(`ul`,{children:[f.map((t,n)=>e(`li`,{children:e(`button`,{type:`button`,class:n===s?`sel`:``,onMouseEnter:()=>l(n),onClick:()=>p(t),children:[e(`span`,{class:`p-title`,children:t.title}),e(`span`,{class:`muted`,children:t.kind===`seq`?`Sequence`:t.kind===`req`?`Request`:t.group})]})})),f.length===0&&e(`li`,{class:`muted pad`,children:[`Nothing matches “`,i,`”`]})]})]})]})}function ta(){let t=globalThis.__SPECBOOK_VIEWER__,[n,i]=r(!1),[a,s]=r(!1);if(!t?.source)return null;W.value;let c=l(t.source),u=c.ok?o({origin:location.origin,pathname:location.pathname,hash:location.hash},c.spec,t.open.title):void 0;return e(`div`,{class:`share`,children:[e(`button`,{type:`button`,class:`btn`,"aria-expanded":n,"aria-haspopup":`true`,"aria-label":`Share`,onClick:()=>i(!n),children:[e(Dr,{}),e(`span`,{class:`share-label`,children:`Share`})]}),n&&e(`div`,{class:`share-pop`,role:`menu`,children:u?e(p,{children:[e(`input`,{class:`share-link`,readOnly:!0,value:u.link,"aria-label":`Link to this view`,onFocus:e=>e.target.select()}),e(`div`,{class:`share-actions`,children:[e(`button`,{type:`button`,class:`btn primary`,onClick:async()=>{if(u)try{await navigator.clipboard.writeText(u.link),s(!0),setTimeout(()=>s(!1),1500)}catch{}},children:a?`Copied`:`Copy link`}),typeof navigator.share==`function`&&e(`button`,{type:`button`,class:`btn`,onClick:()=>void navigator.share({title:u.title,url:u.link}).catch(()=>{}),children:`Share…`})]}),e(`ul`,{class:`share-targets`,children:u.targets.map(t=>e(`li`,{children:e(`a`,{href:t.href,target:`_blank`,rel:`noopener noreferrer`,children:t.label})}))})]}):e(`p`,{class:`muted`,children:c.ok?``:c.reason})})]})}var na={auto:`Theme: follows your system. Click for light.`,light:`Theme: light. Click for dark.`,dark:`Theme: dark. Click to follow your system.`},ra=({mode:t})=>e(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`,children:[t===`light`&&e(p,{children:[e(`circle`,{cx:`12`,cy:`12`,r:`4`}),e(`path`,{d:`M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4`})]}),t===`dark`&&e(`path`,{d:`M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5z`}),t===`auto`&&e(p,{children:[e(`circle`,{cx:`12`,cy:`12`,r:`8.5`}),e(`path`,{d:`M12 3.5v17a8.5 8.5 0 0 0 0-17z`,fill:`currentColor`,stroke:`none`})]})]});function ia(){let n=i.value;return e(`button`,{type:`button`,class:`icon theme-toggle`,title:na[n],"aria-label":na[n],"data-theme-mode":n,onClick:t,children:e(ra,{mode:n})})}var aa=`\0new-environment`,oa=globalThis.__SPECBOOK_VIEWER__?.source?s:void 0;function sa(){r(()=>{let e=Object.keys(Z.manifests);mr(e.length===1?e[0]:void 0)})}var ca=d([]);function la(){let[e,t]=r(),i=W.value.kind===`op`||W.value.kind===`seq`;return n(()=>{i&&!e&&h(()=>import(`./Host-DsO9W5X8.js`).then(t),__vite__mapDeps([0,1,2,3,4]),import.meta.url)},[i,e]),i?e:void 0}function ua(){sa();let[t,i]=r({}),[o,s]=r(void 0),[l,u]=r(!1);n(()=>{let e=()=>{W.value=vr(location.hash)};return addEventListener(`hashchange`,e),Q.config(q.value).then(async e=>{ca.value=Object.keys(e.faker?.locales??{}),e.faker?.default&&(pi.value=e.faker.default);let t=e.branding,n=Z.brandingAssets,r=Object.values(Z.manifests),i=r.length===1?r[0]?.logo:void 0,a=t?.logo??await n.logo?.().catch(()=>void 0),o={ready:!0,name:t?.name,title:t?.title,tagline:t?.tagline,links:t?.links??[],badge:t?.badge,logo:a??i?.url,logoBackground:a?void 0:i?.backgroundColor,favicon:t?.favicon??await n.favicon?.().catch(()=>void 0)};U.value=o,fr(t,o,r.length===1?r[0]?.title??`Specbook`:`Specbook`)}).catch(()=>{U.value={...U.value,ready:!0}}).finally(()=>{Q.loadVariants(Z.requests,q.value).then(i);let e=Z.sequences.filter(e=>Z.unresolvedSequences.includes(e.file));e.length&&Q.loadSequences(e,q.value).then(s)}),Q.environments(q.value).then(e=>{Y.value=e;let t=globalThis.__SPECBOOK_VIEWER__?.defaultEnv;t&&e.includes(t)&&(J.value=t)}),Q.environmentRisks(q.value).then(e=>{di.value=e}),Q.environmentNotes(q.value).then(e=>{fi.value=e}),()=>removeEventListener(`hashchange`,e)},[]);let d=c(W.value);n(()=>{d.current!==W.value&&(d.current=W.value,u(!1))},[W.value]),n(()=>{if(!l)return;let e=e=>e.key===`Escape`&&u(!1);return addEventListener(`keydown`,e),()=>removeEventListener(`keydown`,e)},[l]);let f=Object.keys(Z.manifests).length>1,p=a(()=>{let e=[],n=[...Object.values(Z.sequenceMeta),...(o??[]).map(e=>({...e.seq.meta}))];for(let t of n)e.push({kind:`seq`,route:{kind:`seq`,id:t.id},title:t.title,group:t.tags?.[0]??`sequence`,tags:t.tags,flowGroup:t.group,description:t.description,hay:`${t.description??``} ${(t.tags??[]).join(` `)}`});for(let n of Object.values(Z.manifests))for(let r of n.operations){let i=`${n.service}/${r.id}`;for(let a of t[i]??[])e.push({kind:`req`,route:{kind:`op`,key:i,play:`saved:${a.file}`},title:a.name,group:`request`,service:n.service,tag:r.tags[0]??`default`,method:r.method,path:r.path,tags:a.def.input.tags,hay:`${r.id} ${r.method} ${r.path} ${(a.def.input.tags??[]).join(` `)} ${a.file}`});let a=(t[i]??[]).map(e=>e.name).join(` `);e.push({kind:`op`,route:{kind:`op`,key:i},title:r.summary?.replace(/\.$/,``)||r.path,group:`${f?`${n.service} · `:``}${r.tags[0]??`default`}`,service:n.service,tag:r.tags[0]??`default`,method:r.method,path:r.path,secured:r.secured,hay:`${r.id} ${r.method} ${r.path} ${r.tags.join(` `)} ${a}`})}return e},[o,t,f]),m=W.value,h=m.kind===`op`?da(m.key):void 0,g=m.kind===`seq`?m.id:void 0,[_,v]=r();n(()=>{if(!g)return;let e=Z.sequenceMeta[g]?.file;if(e){let t=Z.sequences.filter(t=>t.file===e);Q.loadSequences(t,q.value).then(e=>v(e[0]))}else v(o?.find(e=>e.seq.meta.id===g))},[g,o,q.value]);let y=_?.seq.meta.id===g?_:void 0,b=la(),x=()=>K(xr(W.value)),S=a(()=>Object.values(Z.manifests).map(e=>({id:e.service,title:e.title,version:e.version,ops:e.operations.length})).sort((e,t)=>e.id.localeCompare(t.id)),[]),C=a(()=>{if(m.kind!==`op`&&m.kind!==`seq`)return{};let e=p.find(e=>e.kind===`op`&&m.kind===`op`&&e.route.kind===`op`&&e.route.key===m.key||e.kind===`seq`&&m.kind===`seq`&&e.route.kind===`seq`&&e.route.id===m.id);if(!e)return{};let t=p.filter(t=>e.kind===`seq`?t.kind===`seq`:t.kind===`op`&&t.service===e.service&&t.tag===e.tag),n=t.indexOf(e),r=e=>e?()=>K({...e.route,play:``}):void 0;return{prev:r(t[n-1]),next:r(t[n+1])}},[p,m.kind===`op`?m.key:m.kind===`seq`?m.id:``]),w=e=>K(m.kind===`op`?{kind:`op`,key:m.key,play:e.example??m.play??``,tab:e.tab}:m.kind===`seq`?{kind:`seq`,id:m.id,play:``,tab:e.tab}:m);return e(`div`,{class:`app`,style:$.value?{"--sb-list-w":`${$.value}px`}:void 0,children:[e(`header`,{class:`header`,children:[e(`button`,{type:`button`,class:`brand`,onClick:()=>K({kind:`home`}),children:[(U.value.logo??oa)&&e(`img`,{class:`brand-logo`,src:U.value.logo??oa,alt:``,style:U.value.logoBackground?{background:U.value.logoBackground,padding:`3px 6px`,borderRadius:`4px`}:void 0}),e(`span`,{class:`brand-name`,children:U.value.name??`Specbook`})]}),e(`button`,{type:`button`,class:`palette-btn`,onClick:()=>G.value=!0,children:[e(`span`,{children:`Jump to an operation or flow…`}),e(`kbd`,{children:`⌘K`})]}),e(`span`,{class:`spacer`}),e(`span`,{class:`header-env`,children:e(Li,{})}),e(`button`,{type:`button`,class:`menu-btn icon`,"aria-label":`Settings`,"aria-expanded":l,onClick:()=>u(!l),children:`⋯`}),e(`div`,{class:`header-controls ${l?`open`:``}`,children:[Z.loadFaker&&e(`span`,{class:`row muted`,title:`Generated values such as {{faker.person.fullName}}: new on every run, or fixed so the same number always gives the same data`,children:[e(`label`,{class:`row`,children:[`Synthetic data`,e(`select`,{"aria-label":`Synthetic data`,value:X.value===void 0?`random`:`fixed`,onChange:e=>{X.value=e.target.value===`fixed`?X.value??42:void 0},children:[e(`option`,{value:`random`,children:`New each run`}),e(`option`,{value:`fixed`,children:`Fixed`})]})]}),X.value!==void 0&&e(`input`,{type:`number`,class:`seed-input`,"aria-label":`Seed number`,title:`The same number gives the same data every run`,value:X.value,onInput:e=>{let t=e.target.valueAsNumber;X.value=Number.isFinite(t)?t:void 0}})]}),ca.value.length>1&&e(`label`,{class:`row muted`,children:[`locale`,e(`select`,{value:pi.value??``,onChange:e=>pi.value=e.target.value||void 0,children:ca.value.map(t=>e(`option`,{value:t,children:t}))})]}),e(Ui,{}),e(`label`,{class:`row`,children:[`Environment`,e(`select`,{value:J.value,onChange:e=>{let t=e.target.value;t===aa?(e.target.value=J.value,gi.value=!0):J.value=t},children:[Y.value.map(t=>e(`option`,{value:t,title:fi.value[t],children:t})),Q.canCreateEnvironment()&&e(`option`,{value:aa,children:`New environment…`})]})]}),e(Gi,{}),e(ta,{}),e(ia,{})]})]}),e(`div`,{class:`layout`,"data-view":m.kind===`home`?`splash`:`list`,children:[e(`nav`,{class:`list-col`,"aria-label":`Operations and flows`,children:e(Pi,{entries:p,services:S})}),e(Xi,{}),e(`main`,{class:`stage`,children:(m.kind===`home`||m.kind===`browse`)&&e(Fi,{services:S,counts:{flows:p.filter(e=>e.kind===`seq`).length,requests:p.filter(e=>e.kind===`req`).length}})})]}),e(ea,{entries:p}),e(Qi,{}),b&&m.kind===`op`&&h&&e(b.Host,{kind:`op`,modal:!1,service:h.service,op:h.op,variants:t[m.key]??[],example:m.play??``,tab:m.tab,onNavigate:w,onPrev:C.prev,onNext:C.next,onClose:x}),b&&m.kind===`seq`&&y&&e(b.Host,{kind:`seq`,modal:!1,info:y,tab:m.tab,onNavigate:w,onPrev:C.prev,onNext:C.next,onClose:x})]})}function da(e){let[t,n]=e.split(`/`),r=Z.manifests[t]?.operations.find(e=>e.id===n);return r?{service:t,op:r}:void 0}var fa=x({});u(),(globalThis.__SPECBOOK_VIEWER__===void 0?m():Promise.resolve(!1)).then(async t=>{t||(await w(),f(e(ua,{}),document.getElementById(`app`)))});export{un as A,In as C,$t as D,an as E,Et as M,Tt as N,on as O,K as S,sn as T,Yr as _,Z as a,Tr as b,hi as c,Y as d,_i as f,Xr as g,q as h,Si as i,ln as j,cn as k,mi as l,X as m,Li as n,Ci as o,pi as p,Q as r,J as s,fa as t,fi as u,Jr as v,B as w,kr as x,Mr as y};
@@ -1,2 +0,0 @@
1
- import{n as e}from"./mount-CLHBtIzR.js";var t=Object.defineProperty,n=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},r=`__specbookFaker`,i=globalThis,a=new Proxy({},{get(e,t){let n=i[r];if(!n)throw Error(`faker is not initialised. Install "@faker-js/faker" in your project; specbook sets it up before each run.`);return n[t]}});function o(e){i[r]=e}function s(e={},t){let n=t??e.default??`en`;return[...new Set([...e.locales?.[n]??[n,`en`],`base`])]}async function c(e,t={},n){let r=e.locales;if(!r)return e;let i={Faker:e.Faker};return await Promise.all(s(t,n).map(async e=>{let t=r[e];t&&(i[e]=await t())})),i}function l(e,t={},n={}){let r=n.locale??t.default??`en`,i=s(t,r).map(t=>{let n=e[t];if(!n)throw Error(`Unknown faker locale "${t}" (from "${r}")`);return n}),a=new e.Faker({locale:i});return n.seed!==void 0&&a.seed(n.seed),o(a),a}var u=String.raw`[\w.$\[\]-]+`,d=new RegExp(String.raw`^\s*\{\{\s*(${u})\s*\}\}\s*$`),f=new RegExp(String.raw`\{\{\s*(${u})\s*\}\}`,`g`),p=e=>e.split(/[.[]/,1)[0],ee=[`secrets`,`session`],m=class extends Error{variable;constructor(e){super(`Missing variable "{{${e}}}"`),this.variable=e,this.name=`TemplateError`}};function h(e){let t=e.split(`.`)[0];return ee.includes(t)&&e.includes(`.`)}var g=e=>e.startsWith(`faker.`);function te(e){let t=a,n=a;for(let r of e.split(`.`).slice(1))if(t=n,n=n?.[r],n===void 0)return{found:!1};return{found:!0,value:typeof n==`function`?n.call(t):n}}function ne(e){return[...b(e)].some(g)}var re=e=>e.replace(/\[(\d+)\]/g,`.$1`).split(`.`);function _(e,t){if(g(t))return te(t);let n=e;for(let e of re(t))if(typeof n==`object`&&n&&Object.hasOwn(n,e))n=n[e];else return{found:!1};return{found:!0,value:n}}function v(e,t){let n=d.exec(e);if(n){let r=n[1];if(h(r))return e;let i=_(t,r);if(!i.found)throw new m(r);return i.value}return e.replace(f,(e,n)=>{if(h(n))return e;let r=_(t,n);if(!r.found)throw new m(n);let i=r.value;return typeof i==`object`&&i?JSON.stringify(i):String(i)})}function y(e,t){if(typeof e==`string`)return v(e,t);if(x(e))return e;if(Array.isArray(e))return e.map(e=>y(e,t));if(typeof e==`object`&&e){let n={};for(let[r,i]of Object.entries(e))n[r]=y(i,t);return n}return e}function b(e,t=new Set){if(typeof e==`string`)for(let n of e.matchAll(f))t.add(n[1]);else if(Array.isArray(e))for(let n of e)b(n,t);else if(typeof e==`object`&&e)for(let n of Object.values(e))b(n,t);return t}var x=e=>typeof Blob<`u`&&e instanceof Blob;function S(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!x(e)}function C(e,t){if(!S(e)||!S(t))return t===void 0?e:t;let n={...e};for(let[e,r]of Object.entries(t))n[e]=C(n[e],r);return n}function w(e,t,n,r={},i){return{kind:`request`,op:e,input:t,dataPatches:n,varOverrides:r,mockHook:i,with(a){let o={...t};return a.path&&(o.path=C(t.path,a.path)),a.query&&(o.query=C(t.query,a.query)),a.headers&&(o.headers={...t.headers??{},...a.headers}),a.capture&&(o.capture={...t.capture??{},...a.capture}),a.assert&&(o.assert=a.assert),a.auth!==void 0&&(o.auth=a.auth),a.assertMode&&(o.assertMode=a.assertMode),a.tags&&(o.tags=[...new Set([...t.tags??[],...a.tags])]),w(e,o,a.data===void 0?n:[...n,a.data],a.vars?{...r,...a.vars}:r,i)}}}function ie(e,t){return w(e.op,e.input,e.dataPatches,e.varOverrides,t)}function ae(e){return{meta:e,request(t={}){return w(e,t,[])}}}function T(e,t){let n={},r={};for(let i of e){let e=i.description?{description:i.description}:{};i.name===`live`?(n[t]=i.url,i.description&&(r.live=e)):r[i.name]={...e,vars:{[t]:i.url}}}return{vars:n,environments:r,baseUrl:`{{${t}}}`}}var E=n({assets:()=>me,brandingAssets:()=>B,definitions:()=>de,docs:()=>H,environmentStore:()=>$,environmentVars:()=>V,examples:()=>fe,loadConfig:()=>ve,loadFaker:()=>J,loadManifests:()=>N,manifests:()=>se,mode:()=>M,operationDocs:()=>ue,operations:()=>he,project:()=>oe,requestExamples:()=>pe,requestMeta:()=>F,requests:()=>P,responseSchemas:()=>le,schemas:()=>ce,sequenceMeta:()=>R,sequences:()=>L,unresolvedRequests:()=>I,unresolvedSequences:()=>z}),D=globalThis.__SPECBOOK_VIEWER__;if(!D)throw Error(`The viewer registry was imported before a spec was opened`);var{open:O}=D,k=O.service,A=e=>`${k}/${e}`,j=Object.keys(O.metas),M=`static`,oe={root:``,outDir:``,requestsDir:`requests`},se={[k]:O.manifest},N=async e=>{},P=[],F={},I=[],L=[],R={},z=[],B={},V={},H=[],U=new Map,W=e=>{let t=e.slice(k.length+1),n=U.get(e);if(n)return n;let r=D.bundle(t).catch(()=>({}));return U.set(e,r),r},G=e=>new Proxy({},{get:(t,n)=>typeof n==`string`&&n.startsWith(`${k}/`)&&j.includes(n.slice(k.length+1))?e(n):void 0,has:(e,t)=>typeof t==`string`&&t.startsWith(`${k}/`)&&j.includes(t.slice(k.length+1)),ownKeys:()=>j.map(A),getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})}),K=e=>G(t=>()=>W(t).then(t=>({default:e(t)}))),ce=K(e=>e.schema),le=K(e=>e.responses),ue=K(e=>e.docs),de={[k]:()=>D.definitions().then(e=>({default:e}))},fe=new Proxy({},{get:(e,t)=>{if(typeof t!=`string`||!t.includes(`.`))return;let n=t.lastIndexOf(`.`),r=t.slice(0,n);if(j.includes(r.slice(k.length+1)))return()=>W(r).then(e=>({default:e.mock?.[t.slice(n+1)]}))}}),pe=G(e=>(O.exampleNames[e.slice(k.length+1)]??[]).map(t=>({name:t,source:`generated`,dir:`${e}@generated`,load:()=>W(e).then(e=>({default:e.examples?.[t]}))}))),q,me=new Proxy({},{get:(e,t)=>typeof t==`string`&&t.endsWith(`/sample.txt`)?()=>(q??=URL.createObjectURL(new Blob([`specbook sample file
2
- `],{type:`text/plain`})),Promise.resolve(q)):void 0}),he=Object.fromEntries(j.map(e=>[A(e),async()=>({[e]:ae(O.metas[e])})])),J=()=>e(()=>import(`./faker-B3c03STC.js`).then(e=>({Faker:e.Faker,locales:{en:()=>Promise.resolve(e.en),base:()=>Promise.resolve(e.base)}})),[],import.meta.url),Y=D.baseUrl??O.baseUrl,ge=O.servers.find(e=>e.name===`live`),X=T([...Y?[{name:`live`,url:Y,description:ge?.description}]:[],...O.servers.filter(e=>e.name!==`live`)],`baseUrl`),_e=e=>{if(/^https?:\/\//i.test(e)||!D.baseUrl)return e;try{return new URL(e,`${D.baseUrl.replace(/\/+$/,``)}/`).toString()}catch{return e}},Z={...X.vars,...Object.fromEntries(Object.entries(O.authVars).map(([e,t])=>[e,_e(t)]))},Q={...X.environments};for(let[e,t]of Object.entries(O.authEnvironmentVars))Q[e]={...Q[e],vars:{...Q[e]?.vars,...t}};var $=D.source?{scope:D.source.kind===`url`?D.source.url:`upload:${k}`,session:D.source.kind!==`url`}:null,ve=()=>Promise.resolve({default:{project:k,secrets:O.secrets,auth:O.auth,...Object.keys(Z).length?{vars:Z}:{},...Object.keys(Q).length?{environments:Q}:{},faker:{default:`en`,locales:{en:[`en`,`base`]}},services:{[k]:{spec:``,baseUrl:Y||O.servers.length?X.baseUrl:{},...O.defaultProfile?{auth:O.defaultProfile}:{}}}}});export{C as a,S as c,p as d,$ as environmentStore,ne as f,n as h,b as i,y as l,J as loadFaker,N as loadManifests,c as m,M as mode,ie as n,h as o,l as p,m as r,g as s,E as t,v as u};
@@ -1,3 +0,0 @@
1
- // English only: the other locales are not named here, so the bundler leaves them out. (The size is the
2
- // English data itself, which is most of faker; the locale list in the header is hidden for one locale.)
3
- export { base, en, Faker } from '@faker-js/faker'