nuxt-files-sdk 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/dist/config.d.ts +15 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/devtools/client/app.js +6 -0
- package/dist/devtools/client/index.html +389 -72
- package/dist/devtools/devframe.js +60 -7
- package/dist/devtools/devframe.js.map +1 -1
- package/dist/devtools/diagnostics.d.ts +37 -0
- package/dist/devtools/diagnostics.js +39 -0
- package/dist/devtools/diagnostics.js.map +1 -0
- package/dist/devtools/enabled.d.ts +9 -0
- package/dist/devtools/enabled.js +3 -2
- package/dist/devtools/enabled.js.map +1 -1
- package/dist/devtools/files-read.d.ts +5 -0
- package/dist/devtools/files-read.js +7 -0
- package/dist/devtools/files-read.js.map +1 -0
- package/dist/devtools/files-write.d.ts +5 -0
- package/dist/devtools/files-write.js +7 -0
- package/dist/devtools/files-write.js.map +1 -0
- package/dist/devtools/files.js +48 -0
- package/dist/devtools/files.js.map +1 -0
- package/dist/devtools/index.js +10 -3
- package/dist/devtools/index.js.map +1 -1
- package/dist/devtools/nuxt-v3-handler.js +16 -4
- package/dist/devtools/nuxt-v3-handler.js.map +1 -1
- package/dist/devtools/nuxt-v4.js +37 -6
- package/dist/devtools/nuxt-v4.js.map +1 -1
- package/dist/devtools/snapshot.d.ts +4 -5
- package/dist/devtools/snapshot.js +3 -1
- package/dist/devtools/snapshot.js.map +1 -1
- package/dist/integration/nitro.d.ts +6 -1
- package/dist/integration/nitro.js +37 -13
- package/dist/integration/nitro.js.map +1 -1
- package/dist/module.d.ts +4 -3
- package/dist/module.js +15 -3
- package/dist/module.js.map +1 -1
- package/dist/package.js +1 -1
- package/dist/runtime/registry.d.ts +4 -4
- package/dist/runtime/registry.js +46 -15
- package/dist/runtime/registry.js.map +1 -1
- package/dist/runtime.js +13 -8
- package/dist/runtime.js.map +1 -1
- package/package.json +6 -11
- package/dist/plugins/versioning.d.ts +0 -3
- package/dist/plugins/versioning.js +0 -2
- package/dist/plugins.d.ts +0 -31
- package/dist/plugins.js +0 -16
package/README.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# nuxt-files-sdk
|
|
2
2
|
|
|
3
|
-
Native-first
|
|
3
|
+
Native-first [Files SDK](https://files-sdk.dev/docs) integration for Nuxt and Nitro.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- [Documentation source](./docs/content/index.md)
|
|
6
|
+
- [Installation](./docs/content/1.getting-started/2.installation.md)
|
|
7
|
+
- [Canonical compiled examples](./test/fixtures/nuxt4)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bun add nuxt-files-sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
// nuxt.config.ts
|
|
15
|
+
export default defineNuxtConfig({ modules: ['nuxt-files-sdk'] })
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Run `bun run dev` to build the package once, then start the documentation site with both Nuxt DevTools integrations. Restart it after package source changes. Production serves the Markdown directly from GitHub through the Cloudflare Worker, so content-only updates do not require a new app deployment.
|
|
19
|
+
|
|
20
|
+
Cloudflare deployment settings are documented in [`docs/README.md`](./docs/README.md).
|
package/dist/config.d.ts
CHANGED
|
@@ -91,11 +91,25 @@ export interface NamedFilesConfig<Storages extends Record<string, StorageConfig>
|
|
|
91
91
|
/** Development-only provider settings keyed by storage name. */
|
|
92
92
|
devStorage?: Partial<{ [Name in keyof Storages]: DevStorageConfig; }>;
|
|
93
93
|
}
|
|
94
|
+
/** One unnamed storage that exists only while the development server is running. */
|
|
95
|
+
export interface DevelopmentOnlySingleFilesConfig<Storage extends StorageConfig = StorageConfig> {
|
|
96
|
+
storage?: never;
|
|
97
|
+
devStorage: Storage;
|
|
98
|
+
}
|
|
99
|
+
/** Named storages that exist only while the development server is running. */
|
|
100
|
+
export interface DevelopmentOnlyNamedFilesConfig<Storages extends Record<string, StorageConfig> = Record<string, StorageConfig>> {
|
|
101
|
+
storage?: never;
|
|
102
|
+
devStorage: Storages;
|
|
103
|
+
}
|
|
94
104
|
/** Files SDK configuration used by the Nuxt/Nitro integration. */
|
|
95
|
-
export type FilesConfig = SingleFilesConfig | NamedFilesConfig;
|
|
105
|
+
export type FilesConfig = SingleFilesConfig | NamedFilesConfig | DevelopmentOnlySingleFilesConfig | DevelopmentOnlyNamedFilesConfig;
|
|
96
106
|
/** Define one unnamed Files SDK storage while preserving its provider and plugin types. */
|
|
97
107
|
export declare function defineFilesConfig<const Storage extends StorageConfig>(config: SingleFilesConfig<Storage>): SingleFilesConfig<Storage>;
|
|
98
108
|
/** Define named Files SDK storages while preserving their names, providers, and plugin types. */
|
|
99
109
|
export declare function defineFilesConfig<const Storages extends Record<string, StorageConfig>>(config: NamedFilesConfig<Storages>): NamedFilesConfig<Storages>;
|
|
110
|
+
/** Define one unnamed development-only storage. */
|
|
111
|
+
export declare function defineFilesConfig<const Storage extends StorageConfig>(config: DevelopmentOnlySingleFilesConfig<Storage>): DevelopmentOnlySingleFilesConfig<Storage>;
|
|
112
|
+
/** Define named development-only storages. */
|
|
113
|
+
export declare function defineFilesConfig<const Storages extends Record<string, StorageConfig>>(config: DevelopmentOnlyNamedFilesConfig<Storages>): DevelopmentOnlyNamedFilesConfig<Storages>;
|
|
100
114
|
//#endregion
|
|
101
115
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["import type { FilesHooks, FilesPlugin, ProviderSlug } from 'files-sdk'\n\ninterface ProviderFactories {\n akamai: typeof import('files-sdk/akamai').akamai\n alibaba: typeof import('files-sdk/alibaba').alibaba\n appwrite: typeof import('files-sdk/appwrite').appwrite\n archil: typeof import('files-sdk/archil').archil\n azure: typeof import('files-sdk/azure').azure\n 'backblaze-b2': typeof import('files-sdk/backblaze-b2').backblazeB2\n box: typeof import('files-sdk/box').box\n 'bun-s3': typeof import('files-sdk/bun-s3').bunS3\n 'bunny-storage': typeof import('files-sdk/bunny-storage').bunnyStorage\n cloudinary: typeof import('files-sdk/cloudinary').cloudinaryAdapter\n convex: typeof import('files-sdk/convex').convex\n 'digitalocean-spaces': typeof import('files-sdk/digitalocean-spaces').digitaloceanSpaces\n dropbox: typeof import('files-sdk/dropbox').dropbox\n exoscale: typeof import('files-sdk/exoscale').exoscale\n filebase: typeof import('files-sdk/filebase').filebase\n 'firebase-storage': typeof import('files-sdk/firebase-storage').firebaseStorage\n fs: typeof import('files-sdk/fs').fs\n ftp: typeof import('files-sdk/ftp').ftp\n gcs: typeof import('files-sdk/gcs').gcs\n 'google-drive': typeof import('files-sdk/google-drive').googleDrive\n hetzner: typeof import('files-sdk/hetzner').hetzner\n 'ibm-cos': typeof import('files-sdk/ibm-cos').ibmCos\n 'idrive-e2': typeof import('files-sdk/idrive-e2').idriveE2\n memory: typeof import('files-sdk/memory').memory\n minio: typeof import('files-sdk/minio').minio\n neon: typeof import('files-sdk/neon').neon\n 'netlify-blobs': typeof import('files-sdk/netlify-blobs').netlifyBlobs\n onedrive: typeof import('files-sdk/onedrive').onedrive\n 'oracle-cloud': typeof import('files-sdk/oracle-cloud').oracleCloud\n ovhcloud: typeof import('files-sdk/ovhcloud').ovhcloud\n pocketbase: typeof import('files-sdk/pocketbase').pocketbase\n r2: typeof import('files-sdk/r2').r2\n s3: typeof import('files-sdk/s3').s3\n 's3-fetch': typeof import('files-sdk/s3-fetch').s3Fetch\n scaleway: typeof import('files-sdk/scaleway').scaleway\n sftp: typeof import('files-sdk/sftp').sftp\n sharepoint: typeof import('files-sdk/sharepoint').sharepoint\n storj: typeof import('files-sdk/storj').storj\n supabase: typeof import('files-sdk/supabase').supabase\n tencent: typeof import('files-sdk/tencent').tencent\n tigris: typeof import('files-sdk/tigris').tigris\n uploadthing: typeof import('files-sdk/uploadthing').uploadthing\n 'vercel-blob': typeof import('files-sdk/vercel-blob').vercelBlob\n vultr: typeof import('files-sdk/vultr').vultr\n wasabi: typeof import('files-sdk/wasabi').wasabi\n webdav: typeof import('files-sdk/webdav').webdav\n yandex: typeof import('files-sdk/yandex').yandex\n}\n\ntype ProviderOptions<Provider extends ProviderSlug> = Parameters<ProviderFactories[Provider]>[0]\ntype ConfigValue<Provider extends ProviderSlug> = Exclude<ProviderOptions<Provider>, undefined>\ntype ConfigInput<Provider extends ProviderSlug> = ConfigValue<Provider> | (() => ConfigValue<Provider>)\ntype ProviderConfig<Provider extends ProviderSlug> = {\n /** Native provider factory options, or a synchronous runtime resolver for them. */\n config?: ConfigInput<Provider>\n} & (undefined extends ProviderOptions<Provider> ? unknown : { config: ConfigInput<Provider> })\n\n/** Configuration for one Files SDK storage. */\nexport type StorageConfig<\n Provider extends ProviderSlug = ProviderSlug,\n Plugins extends readonly FilesPlugin[] = readonly FilesPlugin[],\n> = Provider extends ProviderSlug\n ? {\n /** Files SDK provider slug, for example `r2`, `s3`, or `fs`. */\n adapter: Provider\n /** Native Files SDK plugins applied in array order. */\n plugins?: Plugins\n /** Native Files SDK lifecycle hooks. */\n hooks?: FilesHooks\n /** Scope every operation under this key prefix. */\n prefix?: string\n /** Retry provider failures up to this many times. */\n retries?: number\n /** Per-attempt timeout in milliseconds. */\n timeout?: number\n } & ProviderConfig<Provider>\n : never\n\n/** Development-only provider settings for a storage. */\nexport type DevStorageConfig<Provider extends ProviderSlug = ProviderSlug> = Provider extends ProviderSlug\n ? { adapter: Provider } & ProviderConfig<Provider>\n : never\n\n/** One unnamed storage, available through `useServerFiles()`. */\nexport interface SingleFilesConfig<Storage extends StorageConfig = StorageConfig> {\n /** Files SDK storage configuration. */\n storage: Storage\n /** Development-only provider settings. */\n devStorage?: DevStorageConfig\n}\n\n/** Named storages, each requiring its name when accessed. */\nexport interface NamedFilesConfig<Storages extends Record<string, StorageConfig> = Record<string, StorageConfig>> {\n /** Files SDK storage configuration. */\n storage: Storages\n /** Development-only provider settings keyed by storage name. */\n devStorage?: Partial<{ [Name in keyof Storages]: DevStorageConfig }>\n}\n\n/** Files SDK configuration used by the Nuxt/Nitro integration. */\nexport type FilesConfig
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["import type { FilesHooks, FilesPlugin, ProviderSlug } from 'files-sdk'\n\ninterface ProviderFactories {\n akamai: typeof import('files-sdk/akamai').akamai\n alibaba: typeof import('files-sdk/alibaba').alibaba\n appwrite: typeof import('files-sdk/appwrite').appwrite\n archil: typeof import('files-sdk/archil').archil\n azure: typeof import('files-sdk/azure').azure\n 'backblaze-b2': typeof import('files-sdk/backblaze-b2').backblazeB2\n box: typeof import('files-sdk/box').box\n 'bun-s3': typeof import('files-sdk/bun-s3').bunS3\n 'bunny-storage': typeof import('files-sdk/bunny-storage').bunnyStorage\n cloudinary: typeof import('files-sdk/cloudinary').cloudinaryAdapter\n convex: typeof import('files-sdk/convex').convex\n 'digitalocean-spaces': typeof import('files-sdk/digitalocean-spaces').digitaloceanSpaces\n dropbox: typeof import('files-sdk/dropbox').dropbox\n exoscale: typeof import('files-sdk/exoscale').exoscale\n filebase: typeof import('files-sdk/filebase').filebase\n 'firebase-storage': typeof import('files-sdk/firebase-storage').firebaseStorage\n fs: typeof import('files-sdk/fs').fs\n ftp: typeof import('files-sdk/ftp').ftp\n gcs: typeof import('files-sdk/gcs').gcs\n 'google-drive': typeof import('files-sdk/google-drive').googleDrive\n hetzner: typeof import('files-sdk/hetzner').hetzner\n 'ibm-cos': typeof import('files-sdk/ibm-cos').ibmCos\n 'idrive-e2': typeof import('files-sdk/idrive-e2').idriveE2\n memory: typeof import('files-sdk/memory').memory\n minio: typeof import('files-sdk/minio').minio\n neon: typeof import('files-sdk/neon').neon\n 'netlify-blobs': typeof import('files-sdk/netlify-blobs').netlifyBlobs\n onedrive: typeof import('files-sdk/onedrive').onedrive\n 'oracle-cloud': typeof import('files-sdk/oracle-cloud').oracleCloud\n ovhcloud: typeof import('files-sdk/ovhcloud').ovhcloud\n pocketbase: typeof import('files-sdk/pocketbase').pocketbase\n r2: typeof import('files-sdk/r2').r2\n s3: typeof import('files-sdk/s3').s3\n 's3-fetch': typeof import('files-sdk/s3-fetch').s3Fetch\n scaleway: typeof import('files-sdk/scaleway').scaleway\n sftp: typeof import('files-sdk/sftp').sftp\n sharepoint: typeof import('files-sdk/sharepoint').sharepoint\n storj: typeof import('files-sdk/storj').storj\n supabase: typeof import('files-sdk/supabase').supabase\n tencent: typeof import('files-sdk/tencent').tencent\n tigris: typeof import('files-sdk/tigris').tigris\n uploadthing: typeof import('files-sdk/uploadthing').uploadthing\n 'vercel-blob': typeof import('files-sdk/vercel-blob').vercelBlob\n vultr: typeof import('files-sdk/vultr').vultr\n wasabi: typeof import('files-sdk/wasabi').wasabi\n webdav: typeof import('files-sdk/webdav').webdav\n yandex: typeof import('files-sdk/yandex').yandex\n}\n\ntype ProviderOptions<Provider extends ProviderSlug> = Parameters<ProviderFactories[Provider]>[0]\ntype ConfigValue<Provider extends ProviderSlug> = Exclude<ProviderOptions<Provider>, undefined>\ntype ConfigInput<Provider extends ProviderSlug> = ConfigValue<Provider> | (() => ConfigValue<Provider>)\ntype ProviderConfig<Provider extends ProviderSlug> = {\n /** Native provider factory options, or a synchronous runtime resolver for them. */\n config?: ConfigInput<Provider>\n} & (undefined extends ProviderOptions<Provider> ? unknown : { config: ConfigInput<Provider> })\n\n/** Configuration for one Files SDK storage. */\nexport type StorageConfig<\n Provider extends ProviderSlug = ProviderSlug,\n Plugins extends readonly FilesPlugin[] = readonly FilesPlugin[],\n> = Provider extends ProviderSlug\n ? {\n /** Files SDK provider slug, for example `r2`, `s3`, or `fs`. */\n adapter: Provider\n /** Native Files SDK plugins applied in array order. */\n plugins?: Plugins\n /** Native Files SDK lifecycle hooks. */\n hooks?: FilesHooks\n /** Scope every operation under this key prefix. */\n prefix?: string\n /** Retry provider failures up to this many times. */\n retries?: number\n /** Per-attempt timeout in milliseconds. */\n timeout?: number\n } & ProviderConfig<Provider>\n : never\n\n/** Development-only provider settings for a storage. */\nexport type DevStorageConfig<Provider extends ProviderSlug = ProviderSlug> = Provider extends ProviderSlug\n ? { adapter: Provider } & ProviderConfig<Provider>\n : never\n\n/** One unnamed storage, available through `useServerFiles()`. */\nexport interface SingleFilesConfig<Storage extends StorageConfig = StorageConfig> {\n /** Files SDK storage configuration. */\n storage: Storage\n /** Development-only provider settings. */\n devStorage?: DevStorageConfig\n}\n\n/** Named storages, each requiring its name when accessed. */\nexport interface NamedFilesConfig<Storages extends Record<string, StorageConfig> = Record<string, StorageConfig>> {\n /** Files SDK storage configuration. */\n storage: Storages\n /** Development-only provider settings keyed by storage name. */\n devStorage?: Partial<{ [Name in keyof Storages]: DevStorageConfig }>\n}\n\n/** One unnamed storage that exists only while the development server is running. */\nexport interface DevelopmentOnlySingleFilesConfig<Storage extends StorageConfig = StorageConfig> {\n storage?: never\n devStorage: Storage\n}\n\n/** Named storages that exist only while the development server is running. */\nexport interface DevelopmentOnlyNamedFilesConfig<\n Storages extends Record<string, StorageConfig> = Record<string, StorageConfig>,\n> {\n storage?: never\n devStorage: Storages\n}\n\n/** Files SDK configuration used by the Nuxt/Nitro integration. */\nexport type FilesConfig =\n | SingleFilesConfig\n | NamedFilesConfig\n | DevelopmentOnlySingleFilesConfig\n | DevelopmentOnlyNamedFilesConfig\n\n/** Define one unnamed Files SDK storage while preserving its provider and plugin types. */\nexport function defineFilesConfig<const Storage extends StorageConfig>(\n config: SingleFilesConfig<Storage>,\n): SingleFilesConfig<Storage>\n/** Define named Files SDK storages while preserving their names, providers, and plugin types. */\nexport function defineFilesConfig<const Storages extends Record<string, StorageConfig>>(\n config: NamedFilesConfig<Storages>,\n): NamedFilesConfig<Storages>\n/** Define one unnamed development-only storage. */\nexport function defineFilesConfig<const Storage extends StorageConfig>(\n config: DevelopmentOnlySingleFilesConfig<Storage>,\n): DevelopmentOnlySingleFilesConfig<Storage>\n/** Define named development-only storages. */\nexport function defineFilesConfig<const Storages extends Record<string, StorageConfig>>(\n config: DevelopmentOnlyNamedFilesConfig<Storages>,\n): DevelopmentOnlyNamedFilesConfig<Storages>\nexport function defineFilesConfig(config: FilesConfig): FilesConfig | { storage: FilesConfig['storage'] } {\n if (process.env.NODE_ENV !== 'production') return config\n return { storage: config.storage }\n}\n"],"mappings":";AA2IA,SAAgB,kBAAkB,QAAwE;CACtG,IAAI,QAAQ,IAAI,aAAa,cAAc,OAAO;CAClD,OAAO,EAAE,SAAS,OAAO,QAAQ;AACrC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
function e(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e<i.length;e++)a+=i[e],e<t.length&&(a+=String(t[e]));return`${n}${a}${r}`}return`${n}${String(e)}${r}`})}const t={blue:e(34,39),cyan:e(36,39),gray:e(90,39),green:e(32,39),red:e(31,39),yellow:e(33,39),bold:e(1,22),dim:e(2,22),reset:e(0,0),underline:e(4,24)};function n(e,...t){return typeof e==`function`?e(...t):e}const r=Error.captureStackTrace;var i=class e extends Error{name;code;docs;fix;sources;get why(){return this.message}constructor(t,n=e){super(t.why,{cause:t.cause}),this.code=this.name=t.code,this.fix=t.fix,this.docs=t.docs,this.sources=t.sources,r?.(this,n)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,stack:this.stack}}};function a(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function o(e){let t=e.reporters??[],r={},{docsBase:o}=e;for(let s of Object.keys(e.codes)){let c=e.codes[s],l=c.docs===!1?void 0:c.docs||a(o,s),u=(e={},r={})=>{let a=new i({code:s,why:n(c.why,e),fix:n(c.fix,e),docs:l,cause:e.cause,sources:e.sources},u);for(let e of t)e(a,r);return a};r[s]=u}return r}function s(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n<r.length-1?`├▶`:`╰▶`)} ${t}`)].join(`
|
|
2
|
+
`)}}const c={bus:{agentManifestChanged:`agent:manifest:changed`,agentToolRegistered:`agent:tool:registered`,agentToolUnregistered:`agent:tool:unregistered`,agentResourceRegistered:`agent:resource:registered`,agentResourceUnregistered:`agent:resource:unregistered`},client:{isTrustedUpdated:`rpc:is-trusted:updated`,error:`rpc:error`,connectionStatus:`connection:status`,connectionError:`connection:error`},broadcast:{authRevoked:`devframe:auth:revoked`,clientStateUpdated:`devframe:rpc:client-state:updated`,clientStatePatch:`devframe:rpc:client-state:patch`,streamingChunk:`devframe:streaming:chunk`,streamingEnd:`devframe:streaming:end`,streamingUploadCancel:`devframe:streaming:upload-cancel`},inPageChannel:{panelStateUpdated:`devframe:in-page:panel-state:updated`,panelStatePatch:`devframe:in-page:panel-state:patch`},postMessage:{remoteAssetsError:`devframe:remote-assets-error`,inPageChannel:`devframe:in-page-channel`}},l=s(t);function u(e,{method:t=`warn`}={}){console[t](l(e))}function d(e){return o({...e,reporters:[u,...e.reporters??[]]})}function f(e){return typeof e==`string`?`'${e}'`:new h().serialize(e)}const p=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function m(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;i<n;i++){let n=e.charCodeAt(i),a=t.charCodeAt(i);if(n===a)continue;let o=n<128&&p[n]?p[n]:n+128,s=a<128&&p[a]?p[a]:a+128;if(o!==s)return o<s?-1:1;r===0&&(r=n>a?-1:1)}return e.length===t.length?r:e.length<t.length?-1:1}const h=(function(){class e{#e=new Map;compare(e,t){let n=typeof e,r=typeof t;return n===`string`&&r===`string`?m(e,t):n===`number`&&r===`number`?e-t:m(this.serialize(e,!0),this.serialize(t,!0))}serialize(e,t){if(e===null)return`null`;switch(typeof e){case`string`:return t?e:`'${e}'`;case`bigint`:return`${e}n`;case`object`:return this.$object(e);case`function`:return this.$function(e)}return String(e)}serializeObject(e){let t=Object.prototype.toString.call(e);if(t!==`[object Object]`)return this.serializeBuiltInType(t.length<10?`unknown:${t}`:t.slice(8,-1),e);let n=e.constructor,r=n===Object||n===void 0?``:n.name;if(r!==``&&globalThis[r]===n)return this.serializeBuiltInType(r,e);if(`toJSON`in e&&typeof e.toJSON==`function`){let t=e.toJSON();return r+(typeof t==`object`&&t?this.$object(t):`(${this.serialize(t)})`)}let i=Object.keys(e).sort(m),a=`${r}{`;for(let t=0;t<i.length;t++){let n=i[t];a+=`${n}:${this.serialize(e[n])}`,t<i.length-1&&(a+=`,`)}return a+`}`}serializeBuiltInType(e,t){let n=this[`$`+e];if(n)return n.call(this,t);if(typeof t.entries==`function`)return this.serializeObjectEntries(e,t.entries());throw Error(`Cannot serialize ${e}`)}serializeObjectEntries(e,t){let n=Array.from(t).sort((e,t)=>this.compare(e[0],t[0])),r=`${e}{`;for(let e=0;e<n.length;e++){let[t,i]=n[e];r+=`${this.serialize(t,!0)}:${this.serialize(i)}`,e<n.length-1&&(r+=`,`)}return r+`}`}$object(e){let t=this.#e.get(e);return t===void 0&&(this.#e.set(e,`#${this.#e.size}`),t=this.serializeObject(e),this.#e.set(e,t)),t}$function(e){let t=Function.prototype.toString.call(e);return t.slice(-15)===`[native code] }`?`${e.name||``}()[native]`:`${e.name}(${e.length})${t.replace(/\s*\n\s*/g,``)}`}$Array(e){let t=`[`;for(let n=0;n<e.length;n++)t+=this.serialize(e[n]),n<e.length-1&&(t+=`,`);return t+`]`}$Date(e){try{return`Date(${e.toISOString()})`}catch{return`Date(null)`}}$ArrayBuffer(e){return`ArrayBuffer[${new Uint8Array(e).join(`,`)}]`}$Set(e){return`Set${this.$Array(Array.from(e).sort((e,t)=>this.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),g=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],_=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],v=[];var y=class{_data=new b;_hash=new b([...g]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)v[n]=e[t+n]|0;else{let e=v[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=v[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;v[n]=t+v[n-7]+i+v[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),h=u+m+d+_[n]+v[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=b.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e<r;e+=16)this._doProcessBlock(this._data.words,e);t=this._data.words.splice(0,r),this._data.sigBytes-=i}return new b(t,i)}},b=class e{words;sigBytes;constructor(e,t){e=this.words=e||[],this.sigBytes=t===void 0?e.length*4:t}static fromUtf8(t){let n=unescape(encodeURIComponent(t)),r=n.length,i=[];for(let e=0;e<r;e++)i[e>>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t<this.sigBytes;t+=3){let n=this.words[t>>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6<this.sigBytes*8;n++)e.push(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`.charAt(a>>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t<e.sigBytes;t++){let n=e.words[t>>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t<e.sigBytes;t+=4)this.words[this.sigBytes+t>>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function x(e){return new y().finalize(e).toBase64()}function S(e){return x(f(e))}function ee(e){return S(e)}function te(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e<t;e++){let t=r[e];t&&t(...n)}}function n(n,...r){t(n,...r),delete e[n]}function r(t,n){return(e[t]||=[]).push(n),()=>{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}function C(e=21){let t=``,n=e;for(;n--;)t+=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`[Math.random()*64|0];return t}var w=Symbol.for(`immer-nothing`),T=Symbol.for(`immer-draftable`),E=Symbol.for(`immer-state`),ne=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function D(e,...t){{let n=ne[e],r=I(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var O=Object,k=O.getPrototypeOf,re=`constructor`,ie=`prototype`,ae=`configurable`,oe=`enumerable`,se=`writable`,ce=`value`,A=e=>!!e&&!!e[E];function j(e){return e?de(e)||he(e)||!!e[T]||!!e[re]?.[T]||ge(e)||_e(e):!1}var le=O[ie][re].toString(),ue=new WeakMap;function de(e){if(!e||!F(e))return!1;let t=k(e);if(t===null||t===O[ie])return!0;let n=O.hasOwnProperty.call(t,re)&&t[re];if(n===Object)return!0;if(!I(n))return!1;let r=ue.get(n);return r===void 0&&(r=Function.toString.call(n),ue.set(n,r)),r===le}function fe(e,t,n=!0){M(e)===0?(n?Reflect.ownKeys(e):O.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function M(e){let t=e[E];return t?t.type_:he(e)?1:ge(e)?2:_e(e)?3:0}var N=(e,t,n=M(e))=>n===2?e.has(t):O[ie].hasOwnProperty.call(e,t),P=(e,t,n=M(e))=>n===2?e.get(t):e[t],pe=(e,t,n,r=M(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function me(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var he=Array.isArray,ge=e=>e instanceof Map,_e=e=>e instanceof Set,F=e=>typeof e==`object`,I=e=>typeof e==`function`,ve=e=>typeof e==`boolean`;function ye(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var be=e=>F(e)?e?.[E]:null,L=e=>e.copy_||e.base_,xe=e=>e.modified_?e.copy_:e.base_;function Se(e,t){if(ge(e))return new Map(e);if(_e(e))return new Set(e);if(he(e))return Array[ie].slice.call(e);let n=de(e);if(t===!0||t===`class_only`&&!n){let t=O.getOwnPropertyDescriptors(e);delete t[E];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a[se]===!1&&(a[se]=!0,a[ae]=!0),(a.get||a.set)&&(t[i]={[ae]:!0,[se]:!0,[oe]:a[oe],[ce]:e[i]})}return O.create(k(e),t)}{let t=k(e);if(t!==null&&n)return{...e};let r=O.create(t);return O.assign(r,e)}}function Ce(e,t=!1){return Ee(e)||A(e)||!j(e)?e:(M(e)>1&&O.defineProperties(e,{set:Te,add:Te,clear:Te,delete:Te}),O.freeze(e),t&&fe(e,(e,t)=>{Ce(t,!0)},!1),e)}function we(){D(2)}var Te={[ce]:we};function Ee(e){return e===null||!F(e)||O.isFrozen(e)}var De=`MapSet`,Oe=`Patches`,ke=`ArrayMethods`,Ae={};function R(e){let t=Ae[e];return t||D(0,e),t}var je=e=>!!Ae[e];function Me(e,t){Ae[e]||(Ae[e]=t)}var Ne,Pe=()=>Ne,Fe=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:je(De)?R(De):void 0,arrayMethodsPlugin_:je(ke)?R(ke):void 0});function Ie(e,t){t&&(e.patchPlugin_=R(Oe),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Le(e){Re(e),e.drafts_.forEach(Be),e.drafts_=null}function Re(e){e===Ne&&(Ne=e.parent_)}var ze=e=>Ne=Fe(Ne,e);function Be(e){let t=e[E];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Ve(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[E].modified_&&(Le(t),D(4)),j(e)&&(e=He(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[E].base_,e,t)}else e=He(t,n);return Ue(t,e,!0),Le(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===w?void 0:e}function He(e,t){if(Ee(t))return t;let n=t[E];if(!n)return Ze(t,e.handledSet_,e);if(!Ge(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);Ye(n,e)}return n.copy_}function Ue(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ce(t,n)}function We(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Ge=(e,t)=>e.scope_===t,Ke=[];function qe(e,t,n,r){let i=L(e),a=e.type_;if(r!==void 0&&P(i,r,a)===t){pe(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;fe(i,(e,n)=>{if(A(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??Ke;for(let e of o)pe(i,e,n,a)}function Je(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!Ge(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=xe(i);qe(e,i.draft_??i,a,n),Ye(i,r)})}function Ye(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}We(e)}}function Xe(e,t,n){let{scope_:r}=e;if(A(n)){let i=n[E];Ge(i,r)&&i.callbacks_.push(function(){at(e),qe(e,n,xe(i),t)})}else j(n)&&e.callbacks_.push(function(){let i=L(e);e.type_===3?i.has(n)&&Ze(n,r.handledSet_,r):P(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Ze(P(e.copy_,t,e.type_),r.handledSet_,r)})}function Ze(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||A(e)||t.has(e)||!j(e)||Ee(e)?e:(t.add(e),fe(e,(r,i)=>{if(A(i)){let t=i[E];Ge(t,n)&&(pe(e,r,xe(t),e.type_),We(t))}else j(i)&&Ze(i,t,n)}),e)}function Qe(e,t){let n=he(e),r={type_:+!!n,scope_:t?t.scope_:Pe(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=$e;n&&(i=[r],a=z);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var $e={get(e,t){if(t===E)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=L(e);if(!N(i,t,e.type_))return nt(e,i,t);let a=i[t];if(e.finalized_||!j(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&ye(t))return a;if(a===et(e.base_,t)||tt(e,t,a)){at(e);let n=e.type_===1?+t:t,r=st(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in L(e)},ownKeys(e){return Reflect.ownKeys(L(e))},set(e,t,n){let r=rt(L(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=et(L(e),t),i=r?.[E];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(me(n,r)&&(n!==void 0||N(e.base_,t,e.type_)))return!0;at(e),it(e)}return e.copy_[t]===n&&(n!==void 0||N(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),Xe(e,t,n),!0)},deleteProperty(e,t){return at(e),et(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),it(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=L(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[se]:!0,[ae]:e.type_!==1||t!==`length`,[oe]:r[oe],[ce]:n[t]}},defineProperty(){D(11)},getPrototypeOf(e){return k(e.base_)},setPrototypeOf(){D(12)}},z={};for(let e in $e){let t=$e[e];z[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}z.deleteProperty=function(e,t){return isNaN(parseInt(t))&&D(13),z.set.call(this,e,t,void 0)},z.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&D(14),$e.set.call(this,e[0],t,n,e[0])};function et(e,t){let n=e[E];return(n?L(n):e)[t]}function tt(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!j(n)||n[E]?!1:e.baseRefs_.has(n)}function nt(e,t,n){let r=rt(t,n);return r?ce in r?r[ce]:r.get?.call(e.draft_):void 0}function rt(e,t){if(!(t in e))return;let n=k(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=k(n)}}function it(e){e.modified_||(e.modified_=!0,e.parent_&&it(e.parent_))}function at(e){e.copy_||=(e.assigned_=new Map,Se(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var ot=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(I(e)&&!I(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}I(t)||D(6),n!==void 0&&!I(n)&&D(7);let r;if(j(e)){let i=ze(this),a=st(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Le(i):Re(i)}return Ie(i,n),Ve(r,i)}if(!e||!F(e)){if(r=t(e),r===void 0&&(r=e),r===w&&(r=void 0),this.autoFreeze_&&Ce(r,!0),n){let t=[],i=[];R(Oe).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}D(1,e)},this.produceWithPatches=(e,t)=>{if(I(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},ve(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),ve(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),ve(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){j(e)||D(8),A(e)&&(e=ct(e));let t=ze(this),n=st(t,e,void 0);return n[E].isManual_=!0,Re(t),n}finishDraft(e,t){let n=e&&e[E];(!n||!n.isManual_)&&D(9);let{scope_:r}=n;return Ie(r,t),Ve(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=R(Oe).applyPatches_;return A(e)?r(e,t):this.produce(e,e=>r(e,t))}};function st(e,t,n,r){let[i,a]=ge(t)?R(De).proxyMap_(t,n):_e(t)?R(De).proxySet_(t,n):Qe(t,n);return(n?.scope_??Pe()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?Je(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function ct(e){return A(e)||D(10,e),lt(e)}function lt(e){if(!j(e)||Ee(e))return e;let t=e[E],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Se(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Se(e,!0);return fe(n,(e,t)=>{pe(n,e,lt(t))},r),t&&(t.finalized_=!1),n}function ut(){ne.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=be(P(e,n.key_)),i=P(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||N(e,o)))return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e<t.length-1;e++){let r=t[e];if(n=P(n,r),!F(n)||n===null)throw Error(`Cannot resolve path at '${t.join(`/`)}'`)}return n}let n=`replace`,r=`remove`;function i(e,t,n){if(e.scope_.processedForPatches_.has(e))return;e.scope_.processedForPatches_.add(e);let{patches_:r,inversePatches_:i}=n;switch(e.type_){case 0:case 2:return o(e,t,r,i);case 1:return a(e,t,r,i);case 3:return s(e,t,r,i)}}function a(e,t,i,a){let{base_:o,assigned_:s}=e,c=e.copy_;c.length<o.length&&([o,c]=[c,o],[i,a]=[a,i]);let l=e.allIndicesReassigned_===!0;for(let e=0;e<o.length;e++){let r=c[e],u=o[e];if((l||s?.get(e.toString()))&&r!==u){let o=r?.[E];if(o&&o.modified_)continue;let s=t.concat([e]);i.push({op:n,path:s,value:d(r)}),a.push({op:n,path:s,value:d(u)})}}for(let e=o.length;e<c.length;e++){let n=t.concat([e]);i.push({op:`add`,path:n,value:d(c[e])})}for(let e=c.length-1;o.length<=e;--e){let n=t.concat([e]);a.push({op:r,path:n})}}function o(e,t,i,a){let{base_:o,copy_:s,type_:c}=e;fe(e.assigned_,(e,l)=>{let u=P(o,e,c),f=P(s,e,c),p=l?N(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===w?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e<i.length-1;e++){let t=M(o),n=i[e];typeof n!=`string`&&typeof n!=`number`&&(n=``+n),(t===0||t===1)&&(n===`__proto__`||n===re)&&D(19),I(o)&&n===ie&&D(19),o=P(o,n),(o===null||!F(o))&&D(18,i.join(`/`))}let s=M(o),c=u(t.value),l=i[i.length-1];switch(a){case n:switch(s){case 2:return o.set(l,c);case 3:D(16);default:return o[l]=c}case`add`:switch(s){case 1:return l===`-`?o.push(c):o.splice(l,0,c);case 2:return o.set(l,c);case 3:return o.add(c);default:return o[l]=c}case r:switch(s){case 1:return o.splice(l,1);case 2:return o.delete(l);case 3:return o.delete(t.value);default:return delete o[l]}default:D(17,a)}}),e}function u(e){if(!j(e))return e;if(he(e))return e.map(u);if(ge(e))return new Map(Array.from(e.entries()).map(([e,t])=>[e,u(t)]));if(_e(e))return new Set(Array.from(e).map(u));let t=Object.create(k(e));for(let n in e)t[n]=u(e[n]);return N(e,T)&&(t[T]=e[T]),t}function d(e){return A(e)?u(e):e}Me(Oe,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var dt=new ot,ft=dt.produce,pt=dt.produceWithPatches.bind(dt),mt=dt.applyPatches.bind(dt);function ht(e,t){if(e.add(t),e.size>1e3){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function gt(e){let{enablePatches:t=!1}=e;t&&ut();let n=te(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=C())=>{i.has(t)||(ut(),r=mt(r,e),ht(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=C())=>{if(!i.has(a)){if(ht(i,a),t){let[t,i]=pt(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=ft(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}const _t=typeof self==`object`?self:globalThis,vt=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),yt=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function bt(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=vt.has(e)?_t[e]:void 0;return n(new(r??_t.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&yt.has(a))return n(new _t[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function xt(e){return bt(new Map,e)(0)}const{toString:St}={},{keys:Ct}=Object;function wt(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=St.call(e).slice(8,-1);switch(n){case`Array`:return[1,``];case`Object`:return[2,``];case`Date`:return[3,``];case`RegExp`:return[4,``];case`Map`:return[5,``];case`Set`:return[6,``];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Tt([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Et(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=wt(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of Ct(r))(e||!Tt(wt(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Tt(wt(n))||Tt(wt(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Tt(wt(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Dt(e,t={}){let n=[];return Et(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}const{parse:Ot,stringify:kt}=JSON,At={json:!0,lossy:!0};function jt(e){return xt(Ot(e))}function Mt(e){return kt(Dt(e,At))}function Nt(e){return xt(e)}function Pt(e){return Mt(e)}function Ft(e){return jt(e)}var It=class extends Error{name=`StreamClosedError`};function Lt(e={}){let t=e.id??C(),n=Math.max(0,e.replayWindow??0),r=te(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new It(`Cannot write to a closed stream "${t}"`);s+=1,n>0&&(a.push({seq:s,chunk:e}),a.length>n&&(a.length-n===1?a.shift():a.splice(0,a.length-n))),r.emit(`chunk`,s,e)}function l(e){if(o)return;o=!0;let t=zt(e);i.abort(e),r.emit(`end`,t)}function u(){o||(o=!0,i.signal.aborted||i.abort(`stream closed`),r.emit(`end`,void 0))}function d(e){o||i.signal.aborted||i.abort(e??`aborted`)}let f=new WritableStream({write(e){c(e)},close(){u()},abort(e){l(e)}});return{id:t,signal:i.signal,get closed(){return o},get lastSeq(){return s},write:c,error:l,close:u,abort:d,writable:f,events:r,buffer:a}}function Rt(e={}){let t=e.id??C(),n=Math.max(1,e.highWaterMark??256),r=[],i=0,a=!1,o=!1,s,c,l,u;function d(){if(c){if(r.length>0){let e=r.shift(),t=c;c=void 0,t.resolve({value:e,done:!1});return}if(a){let e=c;if(c=void 0,s){let t=Error(s.message);t.name=s.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function f(){if(l){for(;r.length>0;){let e=r.shift();try{l.enqueue(e)}catch{break}}if(a&&l){try{if(s){let e=Error(s.message);e.name=s.name,l.error(e)}else l.close()}catch{}l=void 0}}}function p(t,s){if(!(a||o)&&!(t<=i)){if(i=t,r.push(s),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}d(),u&&f()}}function m(e){a||(a=!0,s=e,d(),u&&f())}function h(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function g(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){h()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return g()},cancel:h,_push:p,_end:m,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(a){if(s){let e=Error(s.message);return e.name=s.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{c={resolve:e,reject:t}})},return(){return h(),Promise.resolve({value:void 0,done:!0})}}}}}function zt(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}function Bt(e){return e.replace(/[^\w-]+/g,`_`).slice(0,128)}String.fromCharCode;const Vt=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,Ht=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,Ut=/^([/\\]\s*){2,}[^/\\]/,Wt=/\/$|\/\?|\/#/,Gt=/^\.?\//;function Kt(e,t={}){return typeof t==`boolean`&&(t={acceptRelative:t}),t.strict?Vt.test(e):Ht.test(e)||(t.acceptRelative?Ut.test(e):!1)}function qt(e=``,t){return t?Wt.test(e):e.endsWith(`/`)}function Jt(e=``,t){if(!t)return(qt(e)?e.slice(0,-1):e)||`/`;if(!qt(e,!0))return e||`/`;let n=e,r=``,i=e.indexOf(`#`);i!==-1&&(n=e.slice(0,i),r=e.slice(i));let[a,...o]=n.split(`?`);return((a.endsWith(`/`)?a.slice(0,-1):a)||`/`)+(o.length>0?`?${o.join(`?`)}`:``)+r}function Yt(e=``,t){if(!t)return e.endsWith(`/`)?e:e+`/`;if(qt(e,!0))return e||`/`;let n=e,r=``,i=e.indexOf(`#`);if(i!==-1&&(n=e.slice(0,i),r=e.slice(i),!n))return r;let[a,...o]=n.split(`?`);return a+`/`+(o.length>0?`?${o.join(`?`)}`:``)+r}function Xt(e,t){if(Zt(t)||Kt(e))return e;let n=Jt(t);if(e.startsWith(n)){let t=e[n.length];if(!t||t===`/`||t===`?`)return e}return $t(n,e)}function Zt(e){return!e||e===`/`}function Qt(e){return e&&e!==`/`}function $t(e,...t){let n=e||``;for(let e of t.filter(e=>Qt(e)))if(n){let t=e.replace(Gt,``);n=Yt(n)+t}else n=e;return n}function en(e,t){let n=e.match(Ht);return n||=e.match(/^\/{2,}/),n?t+e.slice(n[0].length):t+e}function tn(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}const nn=Math.random.bind(Math);function rn(e=21){let t=``,n=e;for(;n--;)t+=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`[nn()*64|0];return t}const an=e=>e,on=an,{clearTimeout:sn,setTimeout:cn}=globalThis;function ln(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=an,deserialize:s=on,resolver:c,bind:l=`rpc`,timeout:u=6e4,proxify:d=!0}=t,f=!1,p=new Map,m,h;async function g(e,r,i,a){if(f)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(m)try{await m}finally{m=void 0}let{promise:l,resolve:d,reject:g}=tn(),_=rn();s.i=_;let v;async function y(n=s){return u>=0&&(v=cn(()=>{try{if(t.onTimeoutError?.call(h,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){g(e)}p.delete(_)},u),typeof v==`object`&&(v=v.unref?.())),p.set(_,{resolve:d,reject:g,timeoutId:v,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(h,s,y,d):await y()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{sn(v),p.delete(_)}return l}let _={$call:(e,...t)=>g(e,t,!1),$callOptional:(e,...t)=>g(e,t,!1,!0),$callEvent:(e,...t)=>g(e,t,!0),$callRaw:e=>g(e.method,e.args,e.event,e.optional),$rejectPendingCalls:y,get $closed(){return f},get $meta(){return t.meta},$close:v,$functions:e};h=d?new Proxy({},{get(t,n){if(Object.hasOwn(_,n))return _[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>g(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>g(n,e,!1);return i.asEvent=r,i}}):_;function v(e){f=!0,p.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),p.clear(),i(b)}function y(e){let t=Array.from(p.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return p.clear(),t}async function b(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(h,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?h:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(h,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(h,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(h,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(sn(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(b),h}const un=`__connection.json`,dn=`__DEVFRAME_CONNECTION__`,fn=`devframe_otp`,pn=`devframe_auth_token`;c.postMessage.remoteAssetsError;var mn=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>ee(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}};const B=d({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function hn(e){if(e.agent&&e.jsonSerializable===!1)throw B.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function gn(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function _n(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function vn(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r<t.length;r++){let i=t[r];if(!i)continue;let a=await gn(i,n[r]);if(a.issues)throw B.DF0043({name:e,index:r,issues:_n(a.issues)})}return r}async function yn(e,t,n){if(!t)return n;let r=await gn(t,n);if(r.issues)throw B.DF0044({name:e,issues:_n(r.issues)});return n}async function bn(e,t){if(!e.setup)return{};if(typeof t==`object`&&t){e.__cache??=new WeakMap;let n=e.__cache,r=n.get(t);return r||(r=Promise.resolve(e.setup(t)),r.catch(()=>{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function xn(e,t){let n=e.handler;if(!n){let r=await bn(e,t);if(!r.handler)throw B.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await vn(e.name,r,t),o=await a(...n);return await yn(e.name,i,o)}}var Sn=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return xn(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw B.DF0021({name:e.name});hn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw B.DF0022({name:e.name});hn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await xn(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw B.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function Cn(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw V(t,`undefined`,r,e);return n}return i!==null&&wn(i,r,e,t),n})}function wn(e,t,n,r){if(typeof e==`bigint`)throw V(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw V(r,`Map`,t,n);if(e instanceof Set)throw V(r,`Set`,t,n);if(e instanceof Date)throw V(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw V(r,e.constructor?.name??`class instance`,t,n)}function V(e,t,n,r){let i=Tn(n,r);return B.DF0020({name:e||`<anonymous>`,type:t,path:i})}function Tn(e,t){return Array.isArray(e)?`[${t}]`:t===``?`<root>`:t}const En=`__DEVFRAME_CONNECTION_META__`,Dn=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function On(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function kn(){return On(dn)}function An(){return On(En)}function H(e){if(e)return e;try{let e=localStorage.getItem(Dn);if(e)return e}catch{}return On(Dn)}function jn(e){globalThis[dn]=e,globalThis[En]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&Mn(e.authToken)}function Mn(e){try{localStorage.setItem(Dn,e)}catch{}globalThis[Dn]=e;let t=kn();t&&(globalThis[dn]={...t,authToken:e})}function Nn(e){let t=Xt(un,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Pn(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Fn(){let e=kn();if(e)return Pn(e,H()??e.authToken??e.connectionMeta.authToken);let t=An();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??Nn(`./`),authToken:H(t.authToken)}}async function In(e={}){if(e.connection){let t=Pn(e.connection,H(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return jn(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:Nn(t[0]??`./`),authToken:H(e.authToken??e.connectionMeta.authToken)};return jn(n),n}let n=Fn();if(n){let t=Pn(n,H(e.authToken??n.authToken??n.connectionMeta.authToken));return jn(t),t}let r=[];for(let n of t){let t=Xt(un,n),i=Nn(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:H(e.authToken??r.authToken)};return jn(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var U=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Ln(e=fn){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Rn(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function zn(e=fn){let t=Ln(e);return t&&Rn(e),t}async function Bn(e,t={}){let n=zn(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Vn(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(`devframe:services`,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function Hn(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:c.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:c.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function s(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(l,u)=>{if(u?.initialValue!==void 0&&r.set(l,u.initialValue),t.has(l))return t.get(l);let d=gt({initialValue:u?.initialValue,enablePatches:!1});async function f(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,l),u?.initialValue!==void 0){t.set(l,d);for(let e of i)e(l);return e.call(`devframe:rpc:server-state:get`,l).then(e=>{e!==void 0&&d.mutate(()=>o(l,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(l,s(l,d)),d}{let r=await e.call(`devframe:rpc:server-state:get`,l);d.mutate(()=>o(l,r)),t.set(l,d);for(let e of i)e(l);return n.set(l,s(l,d)),d}}return new Promise(t=>{if(e.isTrusted)f().then(t);else{t(d);let n=!1;e.events.on(c.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,f())})}})}}}const Un=new Map;function Wn(e=Un){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?Cn(n,r??``):`s:${Pt(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Ft(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Gn(){}function Kn(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function qn(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function Jn(e){let{onConnected:t=Gn,onError:n=Gn,onDisconnected:r=Gn,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${pn}=${encodeURIComponent(e.authToken)}`);let s=Wn(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){if(e===`session`){f(n),t();return}u?.(n)}async function v(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=Kn(r);if(!e)break;r=e.rest;let{event:t,data:n}=qn(e.frame);n.length>0&&_(t,n.join(`
|
|
3
|
+
`))}}g()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await v(e.body)}catch(e){if(c.signal.aborted){g();return}h(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l){n(Error(`Devframe SSE channel is closed; message dropped`));return}try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,"x-birpc-session":t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function Yn(e,t){let{channel:n,rpcOptions:r={}}=t;return ln(e,{...n,timeout:-1,...r,proxify:!1})}function Xn(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:s=0}=e,l=!1,u=`connecting`,d=null,f=Promise.withResolvers();function p(e,t=null){if(t?d=t:e===`connected`&&(d=null),e===u)return;let n=u;u=e,i.emit(c.client.connectionStatus,e,n)}let m=new Set;function h(e){for(let t of[...m])t.reject(e)}function g(){return u===`disconnected`||u===`error`?new U(`connection`,`[devframe] Not connected to the devframe server`,{cause:d??void 0}):u===`unauthorized`?new U(`auth`,`[devframe] Not authorized by the devframe server`,{cause:d??void 0}):null}function _(e,t){return new Promise((n,r)=>{let a=!1,o,l={reject(e){a||(u(),i.emit(c.client.error,e,t),r(e))}};function u(){a=!0,m.delete(l),o&&clearTimeout(o)}m.add(l),s>0&&(o=setTimeout(()=>{l.reject(new U(`timeout`,`[devframe] RPC call "${t}" timed out after ${s}ms`))},s)),e.then(e=>{a||(u(),n(e))},e=>{if(a)return;u();let n=e instanceof Error?e:Error(String(e));i.emit(c.client.error,n,t),r(n)})})}let v=new Map;for(let e of r.jsonSerializableMethods??[])v.set(e,{jsonSerializable:!0});let y=e.createChannel({definitions:v,onError(e){p(`error`,e),i.emit(c.client.connectionError,e),h(new U(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){u!==`error`&&p(`disconnected`),h(new U(`connection`,`[devframe] Disconnected from the devframe server`,{cause:d??void 0}))}}),b=Yn(a.functions,{channel:y,rpcOptions:o});a.register({name:c.broadcast.authRevoked,type:`event`,handler:()=>{l=!1;let e=new U(`auth`,`[devframe] The devframe server revoked this client's trust`);p(`unauthorized`,e),i.emit(c.client.connectionError,e),h(e),i.emit(c.client.isTrustedUpdated,!1)}});let x=n;async function S(e){x=e;let t=await b.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(l=t.isTrusted,l)f.resolve(!0),p(`connected`);else{let e=new U(`auth`,`[devframe] The devframe server refused this client's credentials`);p(`unauthorized`,e),i.emit(c.client.connectionError,e)}return i.emit(c.client.isTrustedUpdated,l),t.isTrusted}async function ee(e){let t=(await b.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(x=t,l=!0,f.resolve(!0),p(`connected`),i.emit(c.client.isTrustedUpdated,!0)),t}async function te(e={}){await b.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function C(){return l?!0:S(x??``)}async function w(e=6e4){if(l&&f.resolve(!0),e<=0)return f.promise;let t;try{return await Promise.race([f.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),l}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return l},get status(){return u},get connectionError(){return d},requestTrust:C,requestTrustWithToken:S,requestTrustWithCode:ee,requestAuthCode:te,ensureTrusted:w,call:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(c.client.error,n,t),Promise.reject(n)):_(b.$call(...e),t)},callEvent:(...e)=>{let t=g();if(t){i.emit(c.client.error,t,String(e[0]));return}return b.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(c.client.error,n,t),Promise.reject(n)):_(b.$callOptional(...e),t)},close:()=>{y.close()}}}function Zn(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function Qn(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Zn(n.sse,r??`./`,location);return Xn({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>Jn({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function $n(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:er(r)?$n(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function er(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function tr(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function nr(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function rr(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function ir(e){if(e.error)throw $n(e.error);return e.output}function ar(e){return e.some(e=>e!=null)}function or(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function sr(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Nt(e):e}function a(e,t){return i(or(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return rr(r)?ir(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if(tr(r)){if(ar(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(nr(r)){let e=ee(n),i=r.records[e];if(i)return ir(await s(i,r.serialization));if(r.fallback)return ir(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!ar(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function cr(e){let t=sr(await e.fetchJsonFromBases(`__rpc-dump/index.json`),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}function lr(e,t){return`${e}${t}`}function ur(e){let t=new Map,n=new Map;e.client.register({name:c.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(lr(e,n))?._push(r,i)}}),e.client.register({name:c.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=lr(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:c.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=lr(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(c.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(``);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=lr(n,r),o=t.get(a);if(o)return o;let s=Rt({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,s),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(c.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!s.cancelled&&!s.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:s.lastSeenSeq}))})}return s}function i(t,r){let i=lr(t,r),a=n.get(i);if(a)return a;let o=Lt({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function dr(){}const fr=new Map;function pr(e){let t=e.url;e.authToken&&(t=`${t}?${pn}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=dr,onError:i=dr,onDisconnected:a=dr,definitions:o=fr}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=Wn(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN){n.send(e);return}if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r);return}i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function mr(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return en(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function hr(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=mr(n.websocket,r??`./`,location);return Xn({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>pr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function gr(e){return e.includes(`:`)}function W(e,t){return gr(t)?t:`${e}:${t}`}function _r(e){return{async get(t){return(await e()).value()[t]},async set(t,n){(await e()).mutate(e=>{e[t]=n})},async delete(t){(await e()).mutate(e=>{delete e[t]})},async all(){return(await e()).value()},async onChange(t){return(await e()).on(`updated`,e=>t(e))}}}function vr(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=e.sharedState.get(r,{initialValue:{}}),i}return _r(a)}function yr(e,t){return{global:vr(e,t,`global`),project:vr(e,t,`project`)}}function br(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(gr(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call(W(t,n),...r)),callEvent:((n,...r)=>e.callEvent(W(t,n),...r)),callOptional:((n,...r)=>e.callOptional(W(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(W(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(W(t,n),r,i),upload:(n,r)=>e.streaming.upload(W(t,n),r)}},settings:yr(e,t),scope:e.scope}}const xr=Object.freeze({type:`object`,additionalProperties:!0});function Sr(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return xr}return xr}function Cr(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;r<e.length;r++){let i=`arg${r}`;t[i]=Sr(e[r]),n.push(i)}return{type:`object`,properties:t,required:n,additionalProperties:!1}}function wr(e,t){if(Array.isArray(e))return e;if(e==null)return[];if(typeof e!=`object`)return;let n=e;if(t!=null)return Array.from({length:t},(e,t)=>n[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function Tr(e,t){return wr(e,t)??[e]}function Er(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function Dr(e,t={}){let n=t.modelContext??Er();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=Bt(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=r.registerTool({name:o,description:n.description,inputSchema:Cr(t.args),annotations:{title:n.title??t.name,readOnlyHint:Or(t,n)===`read`,destructiveHint:Or(t,n)===`destructive`},execute:n=>kr(t,e.context,n)},{signal:c.signal});l&&`then`in l&&l.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),l&&`unregister`in l&&typeof l.unregister==`function`&&l.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}function Or(e,t){if(t.safety)return t.safety;let n=e.type??`query`;return n===`static`||n===`query`?`read`:`action`}async function kr(e,t,n){try{let r=Tr(n,e.args?.length);return{content:[{type:`text`,text:Ar(await(await xn(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:jr(e)}]}}}function Ar(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function jr(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function Mr(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function Nr(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=te(),a=Array.isArray(t)?t:[t],o=await In(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new mn({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new Sn(f),m=e.webmcp===!1?void 0:Dr(p);async function h(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(Xt(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let g={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){if(await n.onRequest?.call(this,e,t,i),r&&d?.validate(e.m)){if(d.has(e.m,e.a))return i(d.cached(e.m,e.a));let n=await t(e);d.apply(e,n)}else await t(e)}}},_=Mr(e.transport??`auto`,s),v=_===`static`?await cr({fetchJsonFromBases:h}):_===`sse`?Qn({...g,sseOptions:e.sseOptions}):hr({...g,wsOptions:e.wsOptions}),y;try{y=new BroadcastChannel(`devframe-auth`)}catch{}let b,x=!1;function S(e){return((...t)=>x||!b?e(...t):b.then(()=>e(...t)))}function ee(){try{m?.()}finally{try{y?.close()}finally{v.close?.()}}}let C={events:i,get isTrusted(){return v.isTrusted},get status(){return v.status},get connectionError(){return v.connectionError},get transport(){return v.transport??_},get connection(){return o},connectionMeta:s,ensureTrusted:v.ensureTrusted,requestTrust:v.requestTrust,requestTrustWithToken:async e=>(Mn(e),o={...o,authToken:e},v.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await v.requestTrustWithCode(e);if(!t)return!1;Mn(t),o={...o,authToken:t};try{y?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>v.requestAuthCode(e),call:S(v.call),callEvent:S(v.callEvent),callOptional:S(v.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:ee};C.sharedState=Hn(C),C.streaming=ur(C),C.services=Vn(C);let w=new Map;C.scope=(e=>{if(!e)return C;let t=w.get(e);return t||(t=br(C,e),w.set(e,t)),t}),f.rpc=C;function T(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function E(){if(e.simpleAuth!==!1&&T()&&typeof globalThis.prompt==`function`)for(await C.requestAuthCode().catch(()=>{});!C.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await C.requestTrustWithCode(t))return}}async function ne(){let t=await v.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await Bn(C,{param:n}):!1;t||r||C.isTrusted||await E()}return b=ne().then(()=>{x=!0},()=>{x=!0}),y&&(y.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&C.requestTrustWithToken(e.data.authToken)}),C}const Pr=Nr;var Fr=e=>typeof e==`string`,Ir=e=>typeof e==`function`,Lr=e=>typeof e==`object`&&!!e,G=class e extends Error{code;aborted;timedOut;permanent;applied;appliedEtag;cause;constructor(e,t,n,r){super(t),this.name=`FilesError`,this.code=e,this.aborted=r?.aborted===!0,this.timedOut=r?.timedOut===!0,this.permanent=r?.permanent===!0,this.applied=r?.applied===!0,r?.appliedEtag!==void 0&&(this.appliedEtag=r.appliedEtag),this.cause=n}static applied(t,n){let r=e.wrap(t);return new e(r.code,r.message,t,{aborted:r.aborted,applied:!0,...n!==void 0&&{appliedEtag:n},permanent:r.permanent,timedOut:r.timedOut})}static wrap(t,n=`Provider`){if(t instanceof e)return t;let r=t instanceof Error?t.message:String(t);return new e(n,r,t)}};async function Rr(e,t,{concurrency:n=1/0,stopOnError:r=!0,signal:i}={}){return new Promise((a,o)=>{if(e[Symbol.iterator]===void 0&&e[Symbol.asyncIterator]===void 0)throw TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof e})`);if(typeof t!=`function`)throw TypeError(`Mapper function is required`);if(!(Number.isSafeInteger(n)&&n>=1||n===1/0))throw TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${n}\` (${typeof n})`);let s=[],c=[],l=new Map,u=!1,d=!1,f=!1,p=0,m=0,h=e[Symbol.asyncIterator]===void 0?e[Symbol.iterator]():e[Symbol.asyncIterator](),g=()=>{y(i.reason)},_=()=>{i?.removeEventListener(`abort`,g)},v=e=>{a(e),_()},y=e=>{d||(u=!0,d=!0,o(e),_(),f||Br(h))};if(i){if(i.aborted){y(i.reason);return}i.addEventListener(`abort`,g,{once:!0})}let b=async()=>{if(d)return;let e=f?{done:!0}:await h.next(),n=m;if(m++,e.done){if(f=!0,p===0&&!d){if(!r&&c.length>0){y(AggregateError(c));return}if(d=!0,l.size===0){v(s);return}let e=[];for(let[t,n]of s.entries())l.get(t)!==zr&&e.push(n);v(e)}return}p++,(async()=>{try{let r=await e.value;if(d)return;let i=await t(r,n);i===zr&&l.set(n,i),s[n]=i}catch(e){if(r){y(e);return}c.push(e)}p--;try{await b()}catch(e){y(e)}})()};(async()=>{for(let e=0;e<n;e++){try{await b()}catch(e){y(e);break}if(f||u)break}})()})}const zr=Symbol(`skip`);async function Br(e){try{await e.return?.()}catch{}}var Vr=async e=>{let t=e.getReader(),n=[],r=0;for(;;){let{done:e,value:i}=await t.read();if(e)break;i&&(n.push(i),r+=i.byteLength)}let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.byteLength;return i},Hr=e=>new ReadableStream({start(t){t.enqueue(e),t.close()}}),Ur=e=>new ReadableStream({async start(t){let n=await e;t.enqueue(n),t.close()}}),Wr=()=>new G(`Provider`,`StoredFile body was already consumed via stream(). For multi-format access, call text()/arrayBuffer()/blob() before stream() — those drain into a cache.`),Gr=()=>{try{return new Blob([new Uint8Array]).size===0}catch{return!1}},Kr=async e=>Ir(e.arrayBuffer)?new Uint8Array(await e.arrayBuffer()):await new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(new Uint8Array(r.result)),r.onerror=()=>n(r.error??Error(`FileReader failed`)),r.readAsArrayBuffer(e)}),qr=(e,t,n)=>{let r,i,a=!1,o,s=async e=>{let t=await e();return r=t,t},c=()=>{if(r)return Promise.resolve(r);if(i)return i;if(o){let e=o;return i=s(async()=>Kr(await e)),i}if(t.kind===`buffer`)return r=t.data,Promise.resolve(r);if(t.kind===`lazy`)return i=s(t.factory),i;if(a)return Promise.reject(Wr());let e=t.factory();return i=s(()=>Vr(e)),i};return{async arrayBuffer(){let e=await c();return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)},async blob(){if(o)return await o;if(n&&r===void 0&&i===void 0&&!Gr())return o=n(),await o;let t=await c();try{return new Blob([t],{type:e.type})}catch(e){throw new G(`Provider`,`this runtime's Blob cannot wrap bytes (React Native). Call blob() before text()/arrayBuffer(), or read the download with arrayBuffer() instead.`,e)}},etag:e.etag,key:e.key,lastModified:e.lastModified,metadata:e.metadata,name:e.key,size:e.size,stream(){if(r)return Hr(r);if(i)return Ur(i);if(t.kind===`stream`){if(a)throw Wr();return a=!0,t.factory()}return Ur(c())},async text(){let e=await c();return new TextDecoder().decode(e)},type:e.type}},Jr=e=>{if(!e)return{};try{let t=Uint8Array.from(atob(e),e=>e.codePointAt(0)??0);return JSON.parse(new TextDecoder().decode(t))}catch{return{}}},Yr=(e,t)=>{let n=Jr(e.headers.get(`x-files-meta`)),r=e.headers.get(`content-length`),i=r===null?0:Number(r),{body:a}=e;return qr({etag:e.headers.get(`etag`)??n.etag,key:n.key??t,lastModified:n.lastModified,metadata:n.metadata,size:i,type:e.headers.get(`content-type`)??`application/octet-stream`},a?{factory:()=>a,kind:`stream`}:{factory:async()=>new Uint8Array(await e.arrayBuffer()),kind:`lazy`},a?void 0:()=>e.blob())},K=e=>Lr(e)&&!(e instanceof Blob)&&`uri`in e&&Fr(e.uri),Xr=e=>{let t=0,n=0;for(let r of e)t+=r.loaded,n+=r.total;return{fraction:n===0?0:t/n,loaded:t,total:n}},Zr=e=>e.name?e.name:e.uri.split(`?`)[0]?.split(`/`).pop()||`blob`,Qr=e=>e instanceof File?e.name:K(e)?Zr(e):`blob`,$r=e=>e instanceof Blob?{size:e.size,type:e.type}:K(e)?{size:e.size??0,type:e.type??``}:{size:e.byteLength,type:``},ei=e=>{let{size:t,type:n}=$r(e);return{file:e,loaded:0,name:Qr(e),progress:0,size:t,status:`pending`,total:t,type:n||`application/octet-stream`}};AbortSignal.any;var ti=e=>e instanceof G?e:e instanceof Error?new G(`Provider`,`Operation aborted: ${e.message}`,e,{aborted:!0}):new G(`Provider`,e===void 0?`Operation aborted`:`Operation aborted: ${String(e)}`,e,{aborted:!0}),ni=e=>e instanceof Blob?e.size:K(e)?e.size??0:e.byteLength,ri=e=>e instanceof Blob||K(e)?e:new Blob([e]),ii=e=>{if(K(e))throw new G(`Provider`,`a NativeFileRef body requires a presigned-POST target; resolve it to a Blob first`);return e},ai=e=>{if(e.method===`POST`&&e.fields){let t=new FormData;for(let[n,r]of Object.entries(e.fields))t.append(n,r);return e.body&&t.append(`file`,ri(e.body)),t}return ii(e.body)},oi=e=>new Promise((t,n)=>{if(e.signal?.aborted){n(ti(e.signal.reason));return}let r=new XMLHttpRequest;if(r.open(e.method,e.url,!0),e.headers&&!(e.method===`POST`&&e.fields))for(let[t,n]of Object.entries(e.headers))r.setRequestHeader(t,n);e.onProgress&&r.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(t.loaded,t.total)}),r.addEventListener(`load`,()=>t({status:r.status,text:r.responseText})),r.addEventListener(`error`,()=>n(new G(`Provider`,`network error during upload`))),r.addEventListener(`abort`,()=>n(ti(e.signal?.reason))),e.signal?.addEventListener(`abort`,()=>r.abort(),{once:!0}),r.send(ai(e))}),si=e=>async t=>{let n=t.body?ni(t.body):0;t.onProgress?.(0,n);let r;if(t.method===`POST`&&t.fields){let e=new FormData;for(let[n,r]of Object.entries(t.fields))e.append(n,r);t.body&&e.append(`file`,ri(t.body)),r=e}else r=ii(t.body);let i=await e(t.url,{body:r,headers:t.method===`POST`&&t.fields?void 0:t.headers,method:t.method,signal:t.signal});return t.onProgress?.(n,n),{status:i.status,text:await i.text()}},ci=e=>typeof XMLHttpRequest>`u`?si(e):oi,li=`/api/files`,ui=4,di=e=>{switch(e){case`NotFound`:return`NotFound`;case`Unauthorized`:case`Forbidden`:return`Unauthorized`;case`Conflict`:return`Conflict`;case`ReadOnly`:return`ReadOnly`;default:return`Provider`}},fi=e=>new G(di(e.code),e.message,void 0,{aborted:e.aborted,permanent:e.code===`Validation`,timedOut:e.timedOut}),pi=e=>e?.length?e.map(e=>({error:fi(e.error),key:e.key})):void 0,mi=(e,t)=>{let n=pi(t);return n?{...e,errors:n}:e},hi=e=>({body:e,size:e.size,type:e.type}),gi=e=>e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength),_i=(e,t)=>{if(e instanceof Blob)return hi(t&&e.type!==t?new Blob([e],{type:t}):e);if(Fr(e))return hi(new Blob([e],t?{type:t}:void 0));let n=gi(e);try{return hi(new Blob([n],t?{type:t}:void 0))}catch{return{body:n,size:n.byteLength,type:t??``}}},vi=(e={})=>{let t=e.endpoint??li,n=e.fetchImpl??fetch,r=e.transport??ci(n),i=e.concurrency??ui,a=t.includes(`?`)?`&`:`?`,o=async e=>{let t=await n(e.uri);if(!t.ok)throw new G(`Provider`,`could not read upload source ${e.uri} (${t.status})`);return t.blob()},s=async()=>{let t=Ir(e.headers)?await e.headers():e.headers;return t?Object.fromEntries(new Headers(t).entries()):{}},c=async e=>{try{let t=await e.json();if(t.error?.code)return fi(t.error)}catch{}return new G(`Provider`,`gateway responded ${e.status}`)},l=async(e,r)=>{let i=await n(t,{body:JSON.stringify(e),headers:{"content-type":`application/json`,...await s()},method:`POST`,signal:r});if(!i.ok)throw await c(i);return await i.json()},u=async(e,r)=>{let i=await s();r?.range&&(i.range=`bytes=${r.range.start}-${r.range.end??``}`);let o=await n(`${t}${a}op=download&key=${encodeURIComponent(e)}`,{headers:i,method:`GET`,signal:r?.signal});if(!o.ok)throw await c(o);return Yr(o,e)},d=e=>qr({etag:e.etag,key:e.key,lastModified:e.lastModified,metadata:e.metadata,size:e.size,type:e.type},{factory:async()=>{let t=await u(e.key);return new Uint8Array(await t.arrayBuffer())},kind:`lazy`}),f=(e,t)=>{let n;try{n=JSON.parse(t)}catch{n=void 0}if(e<200||e>=300){let t=n?.error;throw t?fi(t):new G(`Provider`,`upload failed (${e})`)}return n},p=async(e,t,n,i)=>{let a=await r({body:t,method:e.method,onProgress:i,signal:n,url:e.url,...e.method===`PUT`?{headers:e.headers}:{fields:e.fields}});if(a.status<200||a.status>=300)throw new G(`Provider`,`upload failed (${a.status})`)},m=async(e,t)=>{let n={name:Qr(e),size:e.size??0,type:e.type||`application/octet-stream`},[r]=(await l({files:[n],op:`presign`,...t?.expiresIn&&{expiresIn:t.expiresIn}},t?.signal)).uploads;if(!r)throw new G(`Provider`,`presign returned no upload target`);let{id:i,key:a,target:s}=r,c=K(e)&&s.method===`PUT`?await o(e):e,u=ei(e);u.status=`uploading`,u.key=a;let d=[u];await p(s,c,t?.signal,(e,n)=>{u.loaded=e,u.total=n||u.size,u.progress=u.total?e/u.total:0,t?.onProgress?.(Xr(d),d)});let f=await l({completions:[{id:i,key:a}],op:`complete`},t?.signal),[m]=f.files;if(!m){let e=f.errors?.[0];throw e?fi(e.error):new G(`Provider`,`upload did not complete`)}return u.status=`success`,u.progress=1,{etag:m.etag,key:m.key,lastModified:m.lastModified,size:m.size,type:m.type}},h=async(e,n,i)=>{let c=K(n)?_i(await o(n),i?.contentType??n.type):_i(n,i?.contentType),l=await r({body:c.body,headers:{"content-type":c.type||`application/octet-stream`,...await s()},method:`PUT`,onProgress:i?.onProgress?(t,n)=>{let r=ei(c.body);r.key=e,r.status=`uploading`,r.loaded=t,r.total=n||c.size,r.progress=r.total?t/r.total:0,i.onProgress?.(Xr([r]),[r])}:void 0,signal:i?.signal,url:`${t}${a}op=upload&key=${encodeURIComponent(e)}`});return f(l.status,l.text).file},g=async(e,t)=>{let n=await Rr(e,async e=>{try{return{ok:!0,out:await h(e.key,e.body,{contentType:e.contentType,signal:t?.signal})}}catch(n){if(t?.stopOnError)throw n;return{error:G.wrap(n),key:e.key,ok:!1}}},{concurrency:t?.concurrency??i}),r=[],a=[];for(let e of n)e.ok?r.push({contentType:e.out.type,etag:e.out.etag,key:e.out.key,lastModified:e.out.lastModified,size:e.out.size}):a.push({error:e.error,key:e.key});return a.length?{errors:a,uploaded:r}:{uploaded:r}},_=async(e,t)=>{let n=await Rr(e,async e=>{try{return{file:await u(e,{as:t?.as,signal:t?.signal}),ok:!0}}catch(n){if(t?.stopOnError)throw n;return{error:G.wrap(n),key:e,ok:!1}}},{concurrency:t?.concurrency??i}),r=[],a=[];for(let e of n)e.ok?r.push(e.file):a.push({error:e.error,key:e.key});return a.length?{downloaded:r,errors:a}:{downloaded:r}},v={capabilities:async e=>(await l({op:`capabilities`},e?.signal)).capabilities,copy:async(e,t,n)=>{await l({from:e,op:`copy`,to:t},n?.signal)},delete:async(e,t)=>{if(Array.isArray(e)){let n=await l({concurrency:t?.concurrency,keys:e,op:`delete-many`,stopOnError:t?.stopOnError},t?.signal);return mi({deleted:n.deleted},n.errors)}await l({key:e,op:`delete`},t?.signal)},download:(e,t)=>Array.isArray(e)?_(e,t):u(e,t),exists:async(e,t)=>{if(Array.isArray(e)){let n=await l({concurrency:t?.concurrency,keys:e,op:`exists-many`,stopOnError:t?.stopOnError},t?.signal);return mi({existing:n.existing,missing:n.missing},n.errors)}return(await l({key:e,op:`exists`},t?.signal)).exists},head:async(e,t)=>{if(Array.isArray(e)){let n=await l({concurrency:t?.concurrency,keys:e,op:`head-many`,stopOnError:t?.stopOnError},t?.signal);return mi({files:n.files.map(d)},n.errors)}let n=await l({key:e,op:`head`},t?.signal);return d(n.file)},list:async e=>{let t=await l({op:`list`,...e?.prefix!==void 0&&{prefix:e.prefix},...e?.cursor!==void 0&&{cursor:e.cursor},...e?.limit!==void 0&&{limit:e.limit},...e?.delimiter!==void 0&&{delimiter:e.delimiter}},e?.signal);return{items:t.items.map(d),...t.prefixes&&{prefixes:t.prefixes},...t.cursor&&{cursor:t.cursor}}},async*listAll(e){let t=e?.cursor;do{let n=await v.list({...e,cursor:t});for(let e of n.items)yield e;({cursor:t}=n)}while(t)},move:async(e,t,n)=>{await l({from:e,op:`move`,to:t},n?.signal)},purge:async(e,t)=>{await l({op:`purge`,...e!==void 0&&{key:e}},t?.signal)},restoreTrashed:async(e,t)=>{let n=await l({key:e,op:`restore-trashed`},t?.signal);return d(n.file)},restoreVersion:async(e,t,n)=>{let r=await l({key:e,op:`restore-version`,...t!==void 0&&{versionId:t}},n?.signal);return d(r.file)},async*search(e,t){let n=e instanceof RegExp?{flags:e.flags,isRegex:!0,pattern:e.source}:{pattern:e},r=await l({op:`search`,...n,...t?.match&&{match:t.match},...t?.prefix!==void 0&&{prefix:t.prefix},...t?.limit!==void 0&&{limit:t.limit},...t?.maxResults!==void 0&&{maxResults:t.maxResults},...t?.caseInsensitive!==void 0&&{caseInsensitive:t.caseInsensitive}},t?.signal);for(let e of r.matches)yield d(e)},signedUploadUrl:async(e,t)=>(await l({expiresIn:t.expiresIn,key:e,op:`signed-upload-url`,...t.contentType&&{contentType:t.contentType},...t.maxSize!==void 0&&{maxSize:t.maxSize},...t.minSize!==void 0&&{minSize:t.minSize}},t.signal)).signed,trashed:async e=>(await l({op:`trashed`},e?.signal)).trashed,upload:(e,t,n)=>Array.isArray(e)?g(e,t):Fr(e)?h(e,t,n):m(e,t),url:async(e,t)=>(await l({key:e,op:`url`,...t?.expiresIn!==void 0&&{expiresIn:t.expiresIn},...t?.responseContentDisposition!==void 0&&{responseContentDisposition:t.responseContentDisposition}},t?.signal)).url,versions:async(e,t)=>(await l({key:e,op:`versions`},t?.signal)).versions};return v};const yi=`https://github.com/liria24/nuxt-files-sdk/blob/main/docs/content/4.reference/4.troubleshooting.md`,bi={NUXT_FILES_NOT_CONFIGURED:{level:`warning`,message:`The Files registry has not been configured.`,hint:`Check that files.config.ts is loaded by the Nuxt or Nitro integration.`,docs:yi},NUXT_FILES_INVALID_CONFIG:{level:`error`,message:`The Files registry rejected the storage configuration.`,hint:`Check the storage and devStorage shapes in files.config.ts.`,docs:yi},NUXT_FILES_ADAPTER_INIT_FAILED:{level:`error`,message:`A configured storage adapter could not be initialized.`,hint:`Check the provider package, runtime support, and required configuration.`,docs:yi},NUXT_FILES_GATEWAY_FAILED:{level:`error`,message:`The Files DevTools gateway could not complete a request.`,hint:`Check the Nitro development server and the Files registry diagnostics.`,docs:yi}},xi=e=>!!(e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&Object.hasOwn(bi,e.code)&&`level`in e&&(e.level===`info`||e.level===`warning`||e.level===`error`)&&`message`in e&&typeof e.message==`string`),q=(e,t)=>{let n=document.querySelector(e);if(!(n instanceof t))throw Error(`Missing DevTools element: ${e}`);return n},Si=q(`#summary`,HTMLElement),Ci=q(`#storage-select`,HTMLSelectElement),wi=q(`#breadcrumbs`,HTMLElement),Ti=q(`#files`,HTMLTableSectionElement),Ei=q(`#browser-status`,HTMLElement),Di=q(`#access-badge`,HTMLElement),Oi=q(`#refresh`,HTMLButtonElement),ki=q(`#upload`,HTMLInputElement),Ai=q(`.upload-button`,HTMLElement);let J,Y,X,Z=``,ji=0,Mi,Ni;const Pi=new Map,Fi=e=>typeof e==`object`&&!!e,Ii=e=>Fi(e)&&Array.isArray(e.storages)&&e.storages.every(e=>Fi(e)&&(e.name===void 0||typeof e.name==`string`)&&typeof e.adapter==`string`&&Array.isArray(e.plugins)&&e.plugins.every(e=>typeof e==`string`)&&(e.source===`storage`||e.source===`devStorage`)&&typeof e.initialized==`boolean`)&&Array.isArray(e.diagnostics)&&e.diagnostics.every(xi),Li=e=>Fi(e)&&typeof e.write==`boolean`&&typeof e.maxUploadSize==`number`,Ri=async e=>{let t=await fetch(e);if(!t.ok)throw Error(`DevTools request failed (${t.status}).`);return t.json()},zi=()=>X===void 0?`./files`:`./files?storage=${encodeURIComponent(X)}`,Bi=()=>vi({endpoint:zi()}),Vi=()=>X??``,Q=(e,t=!1)=>{Ei.textContent=e,Ei.classList.toggle(`error-text`,t)},Hi=async e=>{await Ni,Mi?.scope(`nuxt-files-sdk`).rpc.callEvent(`report-failure`,e)},Ui=async()=>{await Ni,Mi?.scope(`nuxt-files-sdk`).rpc.callEvent(`report-diagnostics`,J.diagnostics)},Wi=e=>{if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e,r=-1;do n/=1024,r++;while(n>=1024&&r<t.length-1);return`${n.toFixed(n>=10?0:1)} ${t[r]}`},Gi=e=>e.slice(Z.length).replace(/\/$/u,``)||e,Ki=(e,t)=>{let n=document.createElement(`button`);return n.type=`button`,n.className=`row-action`,n.textContent=e,n.addEventListener(`click`,t),n},qi=()=>{let e=Z.split(`/`).filter(Boolean),t=[],n=Ki(`Root`,()=>{Z=``,$()});n.className=`breadcrumb`,t.push(n);let r=``;for(let n of e){t.push(document.createTextNode(`/`)),r+=`${n}/`;let e=r,i=Ki(n,()=>{Z=e,$()});i.className=`breadcrumb`,t.push(i)}wi.replaceChildren(...t)},Ji=e=>{let t=document.createElement(`tr`),n=document.createElement(`td`);n.className=`file-name`,n.textContent=Gi(e.key);let r=document.createElement(`td`);r.textContent=Wi(e.size);let i=document.createElement(`td`);i.textContent=e.type||`application/octet-stream`;let a=document.createElement(`td`);a.textContent=e.lastModified?new Date(e.lastModified).toLocaleString():`—`;let o=document.createElement(`td`);return o.className=`actions`,o.append(Ki(`Download`,()=>void Xi(e.key)),...Y.write?[Ki(`Delete`,()=>void Zi(e.key))]:[]),t.append(n,r,i,a,o),t},Yi=e=>{let t=document.createElement(`tr`),n=document.createElement(`td`);n.className=`file-name`;let r=Ki(`📁 ${Gi(e)}`,()=>{Z=e,$()});r.className=`folder`,n.append(r);let i=document.createElement(`td`);return i.colSpan=4,i.className=`folder-detail`,i.textContent=`Folder`,t.append(n,i),t},$=async()=>{let e=++ji,t=!Pi.has(Vi());qi(),Ti.innerHTML=`<tr><td colspan="5" class="empty-state">Loading files…</td></tr>`,Q(`Loading…`);try{let t=Bi(),n=Pi.get(Vi());n||(n=await t.capabilities(),Pi.set(Vi(),n));let r=await t.list({prefix:Z,limit:1e3,...n.delimiter?{delimiter:`/`}:{}});if(e!==ji)return;let i=[...(r.prefixes??[]).toSorted().map(Yi),...r.items.toSorted((e,t)=>e.key.localeCompare(t.key)).map(Ji)];i.length?Ti.replaceChildren(...i):Ti.innerHTML=`<tr><td colspan="5" class="empty-state">No files in this location.</td></tr>`,Q(`${i.length} item${i.length===1?``:`s`}${r.cursor?` · first page`:``}`)}catch(n){if(e!==ji)return;Ti.innerHTML=`<tr><td colspan="5" class="empty-state">Unable to load files.</td></tr>`;let r=n instanceof Error?n.message:String(n);Q(r,!0),Hi({kind:t?`initialization`:`gateway`,message:r,...X===void 0?{}:{target:X}});try{let e=await Ri(`./snapshot`);Ii(e)&&(J=e,$i(),Ui())}catch{}}},Xi=async e=>{Q(`Downloading ${e}…`);try{let t=await Bi().download(e,{as:`blob`}),n=URL.createObjectURL(await t.blob()),r=document.createElement(`a`);r.href=n,r.download=e.split(`/`).at(-1)||e,r.click(),setTimeout(()=>URL.revokeObjectURL(n)),Q(`Downloaded ${e}`)}catch(e){Q(e instanceof Error?e.message:String(e),!0)}},Zi=async e=>{if(window.confirm(`Delete ${e}? This cannot be undone.`)){Q(`Deleting ${e}…`);try{await Bi().delete(e),await $()}catch(t){let n=t instanceof Error?t.message:String(t);Q(n,!0),Hi({kind:`delete`,message:n,target:e})}}},Qi=async e=>{let t=`${Z}${e.name}`;if(e.size>Y.maxUploadSize){let n=`${e.name} exceeds the ${Wi(Y.maxUploadSize)} development upload limit.`;Q(n,!0),Hi({kind:`upload`,message:n,target:t});return}let n=Bi();try{if(await n.exists(t)&&!window.confirm(`Replace the existing file ${t}?`))return;Q(`Uploading ${t}…`),await n.upload(t,e,{contentType:e.type||`application/octet-stream`}),await $()}catch(e){let n=e instanceof Error?e.message:String(e);Q(n,!0),Hi({kind:`upload`,message:n,target:t})}},$i=()=>{Si.textContent=`${J.storages.length} configured storage${J.storages.length===1?``:`s`}`,q(`#storages`,HTMLTableSectionElement).replaceChildren(...J.storages.map(e=>{let t=document.createElement(`tr`);for(let n of[e.name??`Single storage`,e.adapter,e.plugins.join(`, `)||`—`,e.source]){let e=document.createElement(`td`);e.textContent=n,t.append(e)}let n=document.createElement(`td`),r=document.createElement(`span`);return r.className=`status ${e.initialized?`success`:`idle`}`,r.textContent=e.initialized?`Initialized`:`Not initialized`,n.append(r),t.append(n),t}));let e=q(`#diagnostics`,HTMLElement);J.diagnostics.length?e.replaceChildren(...J.diagnostics.map(e=>{let t=document.createElement(`p`);t.className=e.level;let n=document.createElement(`strong`);if(n.textContent=`${e.code}: ${e.message}`,t.append(n),e.hint&&t.append(document.createElement(`br`),e.hint),e.docs){let n=document.createElement(`a`);n.href=e.docs,n.target=`_blank`,n.rel=`noreferrer`,n.textContent=`Troubleshooting`,t.append(document.createElement(`br`),n)}return t})):e.textContent=`No integration diagnostics.`},ea=async()=>{try{let[e,t]=await Promise.all([Ri(`./snapshot`),Ri(`./files?op=devtools`)]);if(!Ii(e)||!Li(t))throw Error(`Files development tools returned an invalid response.`);J=e,Y=t,$i(),Ui();let n=X;Ci.replaceChildren(...J.storages.map(e=>{let t=document.createElement(`option`);return t.value=e.name??``,t.textContent=e.name??`Single storage`,t})),Ci.hidden=J.storages.length<2,X=J.storages.some(({name:e})=>e===n)?n:J.storages[0]?.name,Ci.value=X??``,Di.textContent=Y.write?`Read & write`:`Read only`,Di.className=`access-badge ${Y.write?`write`:``}`,Di.hidden=!1,ki.disabled=!Y.write,Ai.hidden=!Y.write,J.storages.length?await $():Q(`No configured storage.`,!0)}catch(e){Si.textContent=`Unable to load Files development tools`;let t=e instanceof Error?e.message:String(e);Q(t,!0),Hi({kind:`gateway`,message:t})}},ta=async()=>{try{let e=J.diagnostics.length?J.diagnostics.map(e=>[`${e.code} [${e.level}]: ${e.message}`,e.hint?`Hint: ${e.hint}`:``,e.docs?`Docs: ${e.docs}`:``].filter(Boolean).join(`
|
|
4
|
+
`)).join(`
|
|
5
|
+
|
|
6
|
+
`):`No integration diagnostics.`;await navigator.clipboard.writeText(e),Q(`Copied diagnostics.`)}catch(e){Q(e instanceof Error?e.message:String(e),!0)}};Ci.addEventListener(`change`,()=>{X=Ci.value||void 0,Z=``,$()}),Oi.addEventListener(`click`,()=>void ea()),ki.addEventListener(`change`,()=>{let e=ki.files?.[0];ki.value=``,e&&Qi(e)}),Ni=(async()=>{try{Mi=await Pr({simpleAuth:!1});let e=Mi.scope(`nuxt-files-sdk`).rpc;e.register({name:`refresh`,type:`event`,handler:()=>void ea()}),e.register({name:`copy-diagnostics`,type:`event`,handler:()=>void ta()})}catch{}})(),ea();
|