@lpdjs/firestore-repo-service 2.2.7 → 2.2.8

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.
Files changed (33) hide show
  1. package/dist/{create-servers-B3Ls46bx.d.cts → create-servers-BGtAS0oG.d.cts} +3 -3
  2. package/dist/{create-servers-CvVZnihM.d.ts → create-servers-DMszgNtg.d.ts} +3 -3
  3. package/dist/history/index.cjs +1 -1
  4. package/dist/history/index.cjs.map +1 -1
  5. package/dist/history/index.d.cts +3 -4
  6. package/dist/history/index.d.ts +3 -4
  7. package/dist/history/index.js +1 -1
  8. package/dist/history/index.js.map +1 -1
  9. package/dist/{index-Cw9b1crP.d.cts → index-BSZP0Gz9.d.ts} +3 -3
  10. package/dist/{index-DGB3Oemk.d.ts → index-D7oj3Pft.d.cts} +3 -3
  11. package/dist/index.cjs +1 -1
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +8 -8
  14. package/dist/index.d.ts +8 -8
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/{openapi-BEf4OuG9.d.ts → openapi-BdqIkSjO.d.ts} +1 -1
  18. package/dist/{openapi-D8UTm0lu.d.cts → openapi-lY43PZXy.d.cts} +1 -1
  19. package/dist/{read-DMvxeFCg.d.cts → read-DfXXxhO4.d.cts} +2 -4
  20. package/dist/{read-DMvxeFCg.d.ts → read-DfXXxhO4.d.ts} +2 -4
  21. package/dist/servers/admin/index.cjs.map +1 -1
  22. package/dist/servers/admin/index.d.cts +3 -3
  23. package/dist/servers/admin/index.d.ts +3 -3
  24. package/dist/servers/admin/index.js.map +1 -1
  25. package/dist/servers/crud/index.d.cts +5 -5
  26. package/dist/servers/crud/index.d.ts +5 -5
  27. package/dist/servers/index.cjs.map +1 -1
  28. package/dist/servers/index.d.cts +6 -6
  29. package/dist/servers/index.d.ts +6 -6
  30. package/dist/servers/index.js.map +1 -1
  31. package/dist/{types-CjexXskS.d.ts → types-BESS89Fu.d.cts} +19 -18
  32. package/dist/{types-CE1dws32.d.cts → types-BVUFVcpl.d.ts} +19 -18
  33. package/package.json +4 -1
package/dist/index.d.cts CHANGED
@@ -1,16 +1,16 @@
1
- import { H as HistoryConfigForModel } from './read-DMvxeFCg.cjs';
1
+ import { H as HistoryConfigForModel } from './read-DfXXxhO4.cjs';
2
2
  import { Query, QuerySnapshot, Firestore } from 'firebase-admin/firestore';
3
3
  import { z } from 'zod';
4
- import { Q as QueryOptions, P as PaginationOptions, R as RepositoryConfig, a as RelationConfig, C as ConfiguredRepository } from './types-CE1dws32.cjs';
5
- export { A as ApiResponse, l as CrudRepoConfig, m as CrudServerOptions, E as ExtractDocumentRefSignature, b as ExtractUpdateSignature, F as FieldPath, n as FieldRole, h as GenerateGetMethods, i as GenerateQueryMethods, G as GetOptions, c as GetResult, I as IncludeConfigTyped, L as ListResponseData, g as PaginationResult, j as PaginationWithIncludeOptionsTyped, k as PopulateOptionsTyped, o as QueryRequestBody, d as RelationalKeys, p as RepoFieldPath, q as RepoRelationKeys, U as UserFieldPath, W as WhereClause, e as createPaginationIterator, f as executePaginatedQuery } from './types-CE1dws32.cjs';
6
- export { B as BoundAdminRepoConfig, a as BoundAdminServerOptions, b as BoundCrudRepoConfig, d as BoundCrudServerOptions, e as BoundFirestoreSyncConfig, C as CreateServersDeps, c as createServers } from './create-servers-B3Ls46bx.cjs';
7
- export { A as AdminRepoConfig, a as AdminRepoEntry, b as AdminServerOptions, B as BasicAuthConfig, M as MiniRouter } from './index-Cw9b1crP.cjs';
4
+ import { Q as QueryOptions, P as PaginationOptions, R as RepositoryConfig, a as RelationConfig, C as ConfiguredRepository } from './types-BESS89Fu.cjs';
5
+ export { A as ApiResponse, l as CrudRepoConfig, m as CrudServerOptions, E as ExtractDocumentRefSignature, b as ExtractUpdateSignature, F as FieldPath, n as FieldRole, h as GenerateGetMethods, i as GenerateQueryMethods, G as GetOptions, c as GetResult, I as IncludeConfigTyped, L as ListResponseData, g as PaginationResult, j as PaginationWithIncludeOptionsTyped, k as PopulateOptionsTyped, o as QueryRequestBody, d as RelationalKeys, p as RepoFieldPath, q as RepoRelationKeys, U as UserFieldPath, W as WhereClause, e as createPaginationIterator, f as executePaginatedQuery } from './types-BESS89Fu.cjs';
6
+ export { B as BoundAdminRepoConfig, a as BoundAdminServerOptions, b as BoundCrudRepoConfig, d as BoundCrudServerOptions, e as BoundFirestoreSyncConfig, C as CreateServersDeps, c as createServers } from './create-servers-BGtAS0oG.cjs';
7
+ export { A as AdminRepoConfig, a as AdminRepoEntry, b as AdminServerOptions, B as BasicAuthConfig, M as MiniRouter } from './index-D7oj3Pft.cjs';
8
8
  import 'firebase-functions/v2/firestore';
9
9
  import 'firebase-functions/v2/https';
10
10
  import './queue-Dk1Ezhkf.cjs';
11
11
  import './types-CX5AbZWV.cjs';
12
12
  import 'firebase-functions/v2/pubsub';
13
- import './openapi-D8UTm0lu.cjs';
13
+ import './openapi-lY43PZXy.cjs';
14
14
 
15
15
  /**
16
16
  * Apply QueryOptions to a Firestore query.
@@ -169,9 +169,9 @@ type ResolveRelation<TMapping, TRelationConfig> = TRelationConfig extends {
169
169
  * ```
170
170
  */
171
171
  declare function buildRepositoryRelations<TMapping extends Record<string, any>, const TRelations extends {
172
- [K in keyof TMapping]?: TMapping[K] extends RepositoryConfig<infer T, any, any, any, any, any, any, any, any, any> ? {
172
+ [K in keyof TMapping]?: TMapping[K] extends RepositoryConfig<infer T, any, any, any, any, any, any, any, any, any, any> ? {
173
173
  [RK in keyof T]?: {
174
- [R in keyof TMapping]: TMapping[R] extends RepositoryConfig<infer TTargetModel, infer TForeignKeys, any, any, any, any, any, any, any, any> ? {
174
+ [R in keyof TMapping]: TMapping[R] extends RepositoryConfig<infer TTargetModel, infer TForeignKeys, any, any, any, any, any, any, any, any, any> ? {
175
175
  repo: R;
176
176
  key: TForeignKeys[number];
177
177
  type: "one" | "many";
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
- import { H as HistoryConfigForModel } from './read-DMvxeFCg.js';
1
+ import { H as HistoryConfigForModel } from './read-DfXXxhO4.js';
2
2
  import { Query, QuerySnapshot, Firestore } from 'firebase-admin/firestore';
3
3
  import { z } from 'zod';
4
- import { Q as QueryOptions, P as PaginationOptions, R as RepositoryConfig, a as RelationConfig, C as ConfiguredRepository } from './types-CjexXskS.js';
5
- export { A as ApiResponse, l as CrudRepoConfig, m as CrudServerOptions, E as ExtractDocumentRefSignature, b as ExtractUpdateSignature, F as FieldPath, n as FieldRole, h as GenerateGetMethods, i as GenerateQueryMethods, G as GetOptions, c as GetResult, I as IncludeConfigTyped, L as ListResponseData, g as PaginationResult, j as PaginationWithIncludeOptionsTyped, k as PopulateOptionsTyped, o as QueryRequestBody, d as RelationalKeys, p as RepoFieldPath, q as RepoRelationKeys, U as UserFieldPath, W as WhereClause, e as createPaginationIterator, f as executePaginatedQuery } from './types-CjexXskS.js';
6
- export { B as BoundAdminRepoConfig, a as BoundAdminServerOptions, b as BoundCrudRepoConfig, d as BoundCrudServerOptions, e as BoundFirestoreSyncConfig, C as CreateServersDeps, c as createServers } from './create-servers-CvVZnihM.js';
7
- export { A as AdminRepoConfig, a as AdminRepoEntry, b as AdminServerOptions, B as BasicAuthConfig, M as MiniRouter } from './index-DGB3Oemk.js';
4
+ import { Q as QueryOptions, P as PaginationOptions, R as RepositoryConfig, a as RelationConfig, C as ConfiguredRepository } from './types-BVUFVcpl.js';
5
+ export { A as ApiResponse, l as CrudRepoConfig, m as CrudServerOptions, E as ExtractDocumentRefSignature, b as ExtractUpdateSignature, F as FieldPath, n as FieldRole, h as GenerateGetMethods, i as GenerateQueryMethods, G as GetOptions, c as GetResult, I as IncludeConfigTyped, L as ListResponseData, g as PaginationResult, j as PaginationWithIncludeOptionsTyped, k as PopulateOptionsTyped, o as QueryRequestBody, d as RelationalKeys, p as RepoFieldPath, q as RepoRelationKeys, U as UserFieldPath, W as WhereClause, e as createPaginationIterator, f as executePaginatedQuery } from './types-BVUFVcpl.js';
6
+ export { B as BoundAdminRepoConfig, a as BoundAdminServerOptions, b as BoundCrudRepoConfig, d as BoundCrudServerOptions, e as BoundFirestoreSyncConfig, C as CreateServersDeps, c as createServers } from './create-servers-DMszgNtg.js';
7
+ export { A as AdminRepoConfig, a as AdminRepoEntry, b as AdminServerOptions, B as BasicAuthConfig, M as MiniRouter } from './index-BSZP0Gz9.js';
8
8
  import 'firebase-functions/v2/firestore';
9
9
  import 'firebase-functions/v2/https';
10
10
  import './queue-D_-aMf4H.js';
11
11
  import './types-CX5AbZWV.js';
12
12
  import 'firebase-functions/v2/pubsub';
13
- import './openapi-BEf4OuG9.js';
13
+ import './openapi-BdqIkSjO.js';
14
14
 
15
15
  /**
16
16
  * Apply QueryOptions to a Firestore query.
@@ -169,9 +169,9 @@ type ResolveRelation<TMapping, TRelationConfig> = TRelationConfig extends {
169
169
  * ```
170
170
  */
171
171
  declare function buildRepositoryRelations<TMapping extends Record<string, any>, const TRelations extends {
172
- [K in keyof TMapping]?: TMapping[K] extends RepositoryConfig<infer T, any, any, any, any, any, any, any, any, any> ? {
172
+ [K in keyof TMapping]?: TMapping[K] extends RepositoryConfig<infer T, any, any, any, any, any, any, any, any, any, any> ? {
173
173
  [RK in keyof T]?: {
174
- [R in keyof TMapping]: TMapping[R] extends RepositoryConfig<infer TTargetModel, infer TForeignKeys, any, any, any, any, any, any, any, any> ? {
174
+ [R in keyof TMapping]: TMapping[R] extends RepositoryConfig<infer TTargetModel, infer TForeignKeys, any, any, any, any, any, any, any, any, any> ? {
175
175
  repo: R;
176
176
  key: TForeignKeys[number];
177
177
  type: "one" | "many";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import {jsx,jsxs,Fragment}from'hono/jsx/jsx-runtime';import {Timestamp}from'firebase-admin/firestore';import {randomUUID}from'crypto';import {z}from'zod';import {renderToString}from'hono/jsx/dom/server';var pr=Object.defineProperty;var Qe=(e,t)=>()=>(e&&(t=e(e=0)),t);var fr=(e,t)=>{for(var n in t)pr(e,n,{get:t[n],enumerable:true});};function B(e){let t=e,n=t._zod?.def?.type;if(n)return Nr[n]??`Zod${n.charAt(0).toUpperCase()}${n.slice(1)}`;let r=t._def?.typeName;return r||""}function K(e){let t=e;if(t._zod?.def?.innerType)return t._zod.def.innerType;if(t._def?.innerType)return t._def.innerType}function mn(e){let t=e;if(t._zod?.def?.element)return t._zod.def.element;if(t._def?.type)return t._def.type}function gn(e){let t=e;if(t._zod?.def?.defaultValue!==void 0)return t._zod.def.defaultValue;let n=t._def?.defaultValue;return typeof n=="function"?n():n}function J(e){let t=e;return t.shape&&typeof t.shape=="object"?t.shape:t._zod?.def?.shape&&typeof t._zod.def.shape=="object"?t._zod.def.shape:t._def?.shape?typeof t._def.shape=="function"?t._def.shape():t._def.shape:{}}function _e(e){let t=e;return Array.isArray(t.options)?t.options:t._zod?.def?.entries?Object.values(t._zod.def.entries):Array.isArray(t._def?.values)?t._def.values:[]}function je(e){let t=e;return t._zod?.def?.entries?t._zod.def.entries:t.enum&&typeof t.enum=="object"?t.enum:t._def?.values&&typeof t._def.values=="object"?t._def.values:{}}function Ye(e){let t=e;return Array.isArray(t._zod?.def?.values)?t._zod.def.values[0]:t._def?.value}function hn(e){let t=e,n=[],r=t._zod?.def?.checks;if(Array.isArray(r)){for(let s of r)s.format&&n.push(s.format);if(n.length>0)return n}let o=t._def?.checks;if(Array.isArray(o))for(let s of o)s.kind&&n.push(s.kind);return n}var Nr,Fe=Qe(()=>{Nr={string:"ZodString",number:"ZodNumber",bigint:"ZodBigInt",boolean:"ZodBoolean",date:"ZodDate",enum:"ZodEnum",nativeEnum:"ZodNativeEnum",literal:"ZodLiteral",object:"ZodObject",array:"ZodArray",optional:"ZodOptional",nullable:"ZodNullable",default:"ZodDefault",coerce:"ZodCoerce",union:"ZodUnion",undefined:"ZodUndefined",unknown:"ZodUnknown",any:"ZodAny",record:"ZodRecord"};});function En({val:e}){return jsx("span",{class:"text-sm text-base-content/80 font-mono tabular-nums whitespace-nowrap",children:e.toLocaleString()})}function Kr({message:e}){return jsx("span",{class:"tooltip tooltip-warning tooltip-right inline-flex align-middle ml-1 text-warning","data-tip":e,role:"img","aria-label":e,children:jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",class:"size-3.5",children:jsx("path",{d:"M12 2 1 22h22L12 2zm0 6 7.5 13h-15L12 8zm-1 4v4h2v-4h-2zm0 5v2h2v-2h-2z"})})})}function Oe({val:e,mismatch:t}){let n=Ur(e);return t?jsxs("span",{class:"inline-flex items-start gap-0.5",children:[n,jsx(Kr,{message:t})]}):n}function Ur(e){if(e==null)return jsx("span",{class:"opacity-30 italic text-xs",children:"\u2014"});if(typeof e=="boolean")return e?jsx("span",{class:"badge badge-success badge-sm",children:"true"}):jsx("span",{class:"badge badge-error badge-sm",children:"false"});if(e instanceof Date)return jsx(En,{val:e});if(typeof e=="object"&&e!==null&&typeof e.toDate=="function")return jsx(En,{val:e.toDate()});if(typeof e=="number")return jsx("span",{class:"text-sm font-mono tabular-nums",children:String(e)});if(Array.isArray(e))return e.length===0?jsx("span",{class:"text-xs text-base-content/30",children:"[]"}):jsxs("ul",{class:"list-none p-0 m-0 space-y-0.5 text-xs",children:[e.slice(0,8).map((n,r)=>jsx("li",{class:"break-all",children:typeof n=="object"?JSON.stringify(n):String(n)},r)),e.length>8&&jsxs("li",{class:"text-base-content/40 italic",children:["+",e.length-8," more\u2026"]})]});if(typeof e=="object"&&e!==null){let n=Object.entries(e);return n.length===0?jsx("span",{class:"text-xs text-base-content/30",children:"{}"}):jsxs("dl",{class:"grid grid-cols-[auto_1fr] gap-x-2 gap-y-0.5 text-xs m-0",children:[n.slice(0,8).map(([r,o])=>jsxs(Fragment,{children:[jsx("dt",{class:"text-base-content/50 font-semibold whitespace-nowrap",children:r}),jsx("dd",{class:"break-all",children:String(o??"")})]})),n.length>8&&jsxs("dt",{class:"col-span-2 text-base-content/40 italic",children:["+",n.length-8," more\u2026"]})]})}let t=String(e);return jsx("span",{class:"text-sm break-all",children:t})}var nt=Qe(()=>{});function Ae(e){if(!e)return "unknown";let t=ht(e);switch(B(t)){case "ZodString":return "string";case "ZodNumber":return "number";case "ZodBigInt":return "bigint";case "ZodBoolean":return "boolean";case "ZodDate":return "date";case "ZodArray":return "array";case "ZodObject":case "ZodRecord":return "object";case "ZodEnum":case "ZodNativeEnum":return "enum";case "ZodLiteral":return "literal";default:return "unknown"}}function ht(e){let t=B(e);if(t==="ZodOptional"||t==="ZodNullable"||t==="ZodDefault"){let n=K(e);return n?ht(n):e}return e}function $e(e,t){if(!e)return;let n=t.split("."),r=e;for(let o of n){if(!r)return;let s=ht(r);if(B(s)!=="ZodObject")return;r=J(s)[o];}return r}function Gr(e){return e==null?"null":e instanceof Date?"date":Array.isArray(e)?"array":typeof e=="string"?"string":typeof e=="boolean"?"boolean":typeof e=="bigint"?"bigint":typeof e=="number"?"number":typeof e=="object"?typeof e.toDate=="function"?"date":"object":"unknown"}function Ze(e,t){if(e==="unknown")return null;let n=Gr(t);return n==="null"?null:e==="enum"||e==="literal"?n==="string"||n==="number"?null:`Expected ${e} (string/number), got ${n}`:e===n||e==="number"&&n==="bigint"||e==="bigint"&&n==="number"?null:`Expected ${e}, got ${n}`}var bt=Qe(()=>{Fe();});var Nn={};fr(Nn,{PanelMany:()=>Jr,PanelOne:()=>Wr,RightPanel:()=>vt});function Wr({doc:e,repoName:t,basePath:n,schema:r,columns:o}){if(!e)return jsx("div",{class:"text-center py-12 text-base-content/50",children:"Document not found."});let s=String(e.docId??e.id??""),a=`${n}/${t}/${encodeURIComponent(s)}/edit`,c=In(r,o);return jsxs("div",{class:"space-y-4",children:[jsxs("div",{class:"flex items-center justify-between gap-2",children:[jsxs("div",{class:"text-xs text-base-content/60",children:[jsx("span",{class:"font-mono",children:t}),jsx("span",{class:"opacity-50",children:" \xB7 "}),jsx("span",{class:"font-mono break-all",children:s})]}),jsx("a",{href:a,class:"btn btn-sm btn-primary",children:"Edit \u2192"})]}),jsx("dl",{class:"grid grid-cols-[max-content_1fr] gap-x-4 gap-y-2 border border-base-300 rounded-box p-4 bg-base-100",children:o.map(i=>{let f=e[i],u=c[i],g=u?Ze(u,f):null;return jsxs(Fragment,{children:[jsx("dt",{class:"text-xs font-semibold text-base-content/60 uppercase tracking-wide pt-0.5",children:i}),jsx("dd",{class:"min-w-0",children:jsx(Oe,{val:f,mismatch:g})})]})})})]})}function Jr({docs:e,repoName:t,basePath:n,fk:r,fv:o,columns:s,schema:a,pagination:c}){let i=`${n}/${t}?fv_${r}=${encodeURIComponent(o)}`,f=In(a,s);return jsxs("div",{class:"space-y-4",children:[jsxs("div",{class:"flex items-center justify-between gap-2",children:[jsxs("div",{class:"text-xs text-base-content/60",children:[jsx("span",{class:"font-mono",children:t}),jsx("span",{class:"opacity-50",children:" where "}),jsx("span",{class:"font-mono",children:r}),jsx("span",{class:"opacity-50",children:" = "}),jsx("span",{class:"font-mono break-all",children:o}),jsx("span",{class:"opacity-50",children:" \xB7 "}),jsxs("span",{children:[e.length," doc",e.length!==1?"s":""]})]}),jsx("a",{href:i,class:"btn btn-sm btn-outline",children:"Full view \u2192"})]}),jsx("div",{class:"overflow-x-auto rounded-box border border-base-300 bg-base-100",children:jsxs("table",{class:"table table-xs w-full",children:[jsx("thead",{children:jsxs("tr",{class:"bg-base-200/50",children:[s.map((u,g)=>jsx("th",{class:"text-xs font-semibold text-base-content/60 uppercase tracking-wide",children:u},g)),jsx("th",{})]})}),jsx("tbody",{children:e.length===0?jsx("tr",{children:jsx("td",{colspan:s.length+1,class:"text-center py-10 text-base-content/40",children:"No related documents"})}):e.map((u,g)=>{let b=String(u.docId??u.id??""),h=`${n}/${t}/${encodeURIComponent(b)}/edit`;return jsxs("tr",{class:"hover",children:[s.map((m,v)=>{let d=u[m],y=f[m],p=y?Ze(y,d):null;return jsx("td",{class:"align-top py-1.5",children:jsx(Oe,{val:d,mismatch:p})},v)}),jsx("td",{class:"text-right py-1.5",children:jsx("a",{href:h,class:"btn btn-xs btn-ghost",children:"Edit"})})]},g)})})]})}),(c.hasPrev||c.hasNext)&&jsxs("div",{class:"flex justify-center items-center gap-2",children:[c.hasPrev?jsx("button",{type:"button",class:"btn btn-xs btn-outline","data-frs-panel-page":"prev","data-cursor":c.prevCursor,children:"\u2190 Previous"}):jsx("button",{class:"btn btn-xs btn-outline",disabled:true,children:"\u2190 Previous"}),c.hasNext?jsx("button",{type:"button",class:"btn btn-xs btn-outline","data-frs-panel-page":"next","data-cursor":c.nextCursor,children:"Next \u2192"}):jsx("button",{class:"btn btn-xs btn-outline",disabled:true,children:"Next \u2192"})]})]})}function In(e,t){if(!e)return {};let n={};for(let r of t)n[r]=Ae($e(e,r));return n}var vt,xt=Qe(()=>{nt();bt();vt=({basePath:e=""})=>jsxs("div",{class:"fixed inset-0 z-[100] hidden pointer-events-none","data-frs-panel-root":true,"data-frs-base-path":e,"aria-hidden":"true",children:[jsx("div",{class:"absolute inset-0 bg-black/30 opacity-0 transition-opacity duration-200 pointer-events-auto","data-frs-panel-backdrop":true}),jsxs("aside",{class:"absolute top-0 right-0 h-full w-full md:w-1/2 bg-base-100 shadow-2xl border-l border-base-300 translate-x-full transition-transform duration-200 pointer-events-auto flex flex-col","data-frs-panel":true,role:"dialog","aria-label":"Relation preview",children:[jsxs("header",{class:"flex items-center justify-between px-5 py-3 border-b border-base-300 bg-base-200/40 shrink-0",children:[jsx("h2",{class:"font-semibold text-base truncate","data-frs-panel-title":true,children:"Relation"}),jsx("button",{type:"button",class:"btn btn-sm btn-ghost btn-circle","data-frs-panel-close":true,"aria-label":"Close panel",children:"\u2715"})]}),jsx("div",{class:"flex-1 overflow-auto p-5 text-sm","data-frs-panel-body":true,children:jsx("div",{class:"flex items-center justify-center py-12 text-base-content/40",children:jsx("span",{class:"loading loading-spinner loading-md"})})})]})]});});function yr(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Ie(e,t){return t.orderBy&&t.orderBy.forEach(n=>{e=e.orderBy(String(n.field),n.direction??"asc");}),t.limit&&(e=e.limit(t.limit)),t.offset&&(e=e.offset(t.offset)),t.select&&t.select.length>0&&(e=e.select(...t.select.map(n=>String(n)))),t.startAt&&(e=Array.isArray(t.startAt)?e.startAt(...t.startAt):e.startAt(t.startAt)),t.startAfter&&(e=Array.isArray(t.startAfter)?e.startAfter(...t.startAfter):e.startAfter(t.startAfter)),t.endAt&&(e=Array.isArray(t.endAt)?e.endAt(...t.endAt):e.endAt(t.endAt)),t.endBefore&&(e=Array.isArray(t.endBefore)?e.endBefore(...t.endBefore):e.endBefore(t.endBefore)),e}function it(e){let[,t,n]=e;return (t==="in"||t==="array-contains-any")&&Array.isArray(n)&&n.length>30}function Lt(e){let[t,n,r]=e;return it(e)?yr(r,30).map(s=>[t,n,s]):[e]}function Ge(e,t){let n=e;for(let[r,o,s]of t)n=n.where(String(r),o,s);return n}async function Vt(e){let t=await Promise.all(e.map(o=>o.get())),n=new Map;t.forEach(o=>{o.docs.forEach(s=>{n.has(s.id)||n.set(s.id,s);});});let r=t[0];if(!r)throw new Error("No snapshots returned");return {...r,docs:Array.from(n.values()),size:n.size,empty:n.size===0}}async function be(e,t){let n=t.orWhere&&t.orWhere.length>0,r=t.orWhereGroups&&t.orWhereGroups.length>0;if(!n&&!r){if(!t.where||t.where.length===0)return Ie(e,t).get();if(!t.where.some(it)){let g=Ge(e,t.where);return g=Ie(g,t),g.get()}let i=t.where.map(Lt),u=lt(i).map(g=>{let b=Ge(e,g);return b=Ie(b,t),b});return Vt(u)}let o=t.where??[],s=[...t.orWhere?.map(c=>[c])??[],...t.orWhereGroups??[]],a=[];for(let c of s){let i=[...o,...c];if(i.some(it)){let u=i.map(Lt),b=lt(u).map(h=>{let m=Ge(e,h);return m=Ie(m,t),m});a.push(...b);}else {let u=Ge(e,i);u=Ie(u,t),a.push(u);}}return Vt(a)}function lt(e){if(e.length===0)return [[]];let t=e[0];if(e.length===1&&t)return t.map(s=>[s]);if(!t)return [[]];let n=e.slice(1),r=lt(n),o=[];for(let s of t)for(let a of r)o.push([s,...a]);return o}var ct="preserve";function mr(e){ct=e;}function dt(){return ct}function gr(e){return typeof e=="object"&&e!==null&&typeof e._seconds=="number"&&typeof e._nanoseconds=="number"}function ut(e){if(e==null)return null;if(e instanceof Date)return Number.isNaN(e.getTime())?null:e;if(e instanceof Timestamp)return e.toDate();if(gr(e))return new Date(e._seconds*1e3+Math.floor(e._nanoseconds/1e6));if(typeof e=="string"){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}if(typeof e=="number"){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}return null}function hr(e){if(typeof e!="object"||e===null)return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function We(e){if(e instanceof Timestamp)return e.toDate();if(Array.isArray(e))return e.map(t=>We(t));if(hr(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=We(r);return t}return e}function H(e){return ct==="normalize"?We(e):e}function Gt(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function ie(e){return e.charAt(0).toUpperCase()+e.slice(1)}function le(e,t){return t.where&&t.where.forEach(([n,r,o])=>{e=e.where(String(n),r,o);}),t.orderBy&&t.orderBy.forEach(n=>{e=e.orderBy(String(n.field),n.direction??"asc");}),t.limit&&(e=e.limit(t.limit)),t.offset&&(e=e.offset(t.offset)),t.select&&t.select.length>0&&(e=e.select(...t.select.map(n=>String(n)))),t.startAt&&(e=Array.isArray(t.startAt)?e.startAt(...t.startAt):e.startAt(t.startAt)),t.startAfter&&(e=Array.isArray(t.startAfter)?e.startAfter(...t.startAfter):e.startAfter(t.startAfter)),t.endAt&&(e=Array.isArray(t.endAt)?e.endAt(...t.endAt):e.endAt(t.endAt)),t.endBefore&&(e=Array.isArray(t.endBefore)?e.endBefore(...t.endBefore):e.endBefore(t.endBefore)),e}async function Je(e,t){let n={...t,limit:t.pageSize+1};t.cursor&&(t.direction==="prev"?n.endBefore=t.cursor:n.startAfter=t.cursor);let o=(await be(e,n)).docs,s=o.length>t.pageSize,a=s?o.slice(0,t.pageSize):o,c=a.map(f=>H({...f.data(),docId:f.id})),i=t.direction==="prev";return {data:c,nextCursor:i?a.length>0?a[a.length-1]:void 0:s?a[a.length-1]:void 0,prevCursor:i?s?a[0]:void 0:a[0],hasNextPage:i?!!t.cursor:s,hasPrevPage:i?s:!!t.cursor,pageSize:c.length}}async function*pt(e,t){let n,r=true;for(;r;){let o=await Je(e,{...t,cursor:n,direction:"next"});yield o,r=o.hasNextPage,n=o.nextCursor;}}function Ne(e){if(e===null)return "null";if(e===void 0)return "undefined";if(e instanceof Timestamp)return "timestamp";if(e instanceof Date)return "date";if(Array.isArray(e))return "array";let t=typeof e;return t==="string"||t==="number"||t==="boolean"?t:"object"}function Wt(e,t){if(e===t)return true;if(e===null||t===null||e===void 0||t===void 0)return e===t;if(e instanceof Timestamp&&t instanceof Timestamp)return e.isEqual(t);if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return false;for(let n=0;n<e.length;n++)if(!Wt(e[n],t[n]))return false;return true}if(typeof e=="object"&&typeof t=="object")try{return JSON.stringify(e)===JSON.stringify(t)}catch{return false}return false}function Jt(e,t,n={}){let r=new Set([...n.exclude??[],...n.metaFields??[],...n.systemKeys??[]]),o=n.include?new Set(n.include):null,s=e??{},a=t??{},c=new Set([...Object.keys(s),...Object.keys(a)]),i={};for(let f of c){if(r.has(f)||o&&!o.has(f))continue;let u=s[f],g=a[f];Wt(u,g)||(i[f]={oldValue:u===void 0?null:u,newValue:g===void 0?null:g,type:{old:Ne(u),new:Ne(g)}});}return i}var br=5;function vr(e){return e.schemaVersion===2}function Xt(e){if(typeof e!="string")return "object";switch(e){case "string":case "number":case "boolean":case "object":case "array":case "timestamp":case "date":case "null":case "undefined":return e;default:return "object"}}function xr(e){return {historyDocId:e.historyDocId,historyToObjectId:e.historyToObjectId,historySetAt:e.historySetAt,schemaVersion:2,operation:e.operation,meta:e.meta??{},changes:e.changes??{}}}function wr(e){let t={};e.historyUserId!==void 0&&(t.userId=e.historyUserId??null),e.historyUserEmail!==void 0&&(t.userEmail=e.historyUserEmail??null);let n=e.extraHistoryDetails??null;n&&(n.reason!==void 0&&(t.reason=n.reason??null),n.comment!==void 0&&(t.comment=n.comment??null));let r={},o=false;if(e.historyDetails&&typeof e.historyDetails=="object")for(let[s,a]of Object.entries(e.historyDetails))r[s]=a,o=true;if(e.extraContentKeys&&typeof e.extraContentKeys=="object")for(let[s,a]of Object.entries(e.extraContentKeys))r[`content.${s}`]=a,o=true;return o&&(t.extras=r),t}function Rr(e){let t=e.changes?.oldValue??null,n=e.changes?.newValue??null,r=e.types?.oldValue,o=e.types?.newValue;return {oldValue:t,newValue:n,type:{old:r?Xt(r):Ne(t),new:o?Xt(o):Ne(n)}}}function Sr(e){let t=Rr(e),n=wr(e);return {historyDocId:e.historyDocId,historyToObjectId:e.historyToObjectId,historySetAt:e.historySetAt,schemaVersion:1,operation:"update",meta:n,changes:{[e.field]:t}}}function Tr(e,t,n){return Math.abs(e.toMillis()-t.toMillis())<=n}function kr(e,t){return (e.userId??null)===(t.userId??null)}function Yt(e,t={}){let n=t.groupToleranceMs??br,r=[];for(let o of e){if(vr(o)){r.push(xr(o));continue}let a=Sr(o),c=r[r.length-1];c&&c.schemaVersion===1&&Tr(c.historySetAt,a.historySetAt,n)&&kr(c.meta,a.meta)?Object.assign(c.changes,a.changes):r.push(a);}return r}var Or=7e5;function en(e){let t=e.ttlOverride??e.config.ttl,r={schemaVersion:2,historyDocId:randomUUID(),historyToObjectId:e.entityId,historySetAt:Timestamp.now(),operation:e.operation,meta:e.meta,changes:e.changes};if(t){let s=t.field??"expiresAt",a=Timestamp.fromMillis(Date.now()+t.days*24*60*60*1e3);r[s]=a,s==="expiresAt"&&(r.expiresAt=a);}let o=s=>{try{return Buffer.byteLength(JSON.stringify(s,(a,c)=>c instanceof Timestamp?c.toMillis():c),"utf8")}catch{return 0}};if(o(r.changes)>Or){let s={};for(let[a,c]of Object.entries(r.changes)){let i=o(c.oldValue),f=o(c.newValue);s[a]={oldValue:i>5e4?"[truncated]":c.oldValue,newValue:f>5e4?"[truncated]":c.newValue,type:c.type};}r.changes=s,r._truncated=true;}return r}async function tn(e,t,n,r){let o=t;return n.onBeforeWrite&&(o=await n.onBeforeWrite(t,r)),o?(await e.doc(o.historyDocId).set(o),{written:true,entry:o}):{written:false,reason:"dropped-by-onBeforeWrite"}}function nn(e,t){let n=e??{},r={},o=t.meta;if(!o)return r;let s=u=>{if(!u)return;let g=n[u];return g===void 0||g===null?null:String(g)},a=s(o.userId);a!==void 0&&(r.userId=a);let c=s(o.userEmail);c!==void 0&&(r.userEmail=c);let i=s(o.reason);i!==void 0&&(r.reason=i);let f=s(o.comment);if(f!==void 0&&(r.comment=f),o.extras&&o.extras.length>0){let u={},g=false;for(let b of o.extras)b in n&&(u[b]=n[b],g=true);g&&(r.extras=u);}return r}function rn(e){let t=e.meta;if(!t)return [];let n=[];return t.userId&&n.push(t.userId),t.userEmail&&n.push(t.userEmail),t.reason&&n.push(t.reason),t.comment&&n.push(t.comment),t.extras&&n.push(...t.extras),n}var Ar="history",$r=50;function on(e,t,n){return e(...n).collection(t)}function Pr(e){return String(e[e.length-1]??"")}function sn(e,t,n,r){if(!r?.enabled)return null;let o=r.subcollection??Ar;async function s(...u){let g={},b=u,h=u[u.length-1];h!==null&&typeof h=="object"&&!(h instanceof Timestamp)&&("limit"in h||"cursor"in h||"direction"in h)&&(g=h,b=u.slice(0,-1));let m=on(e,o,b),v=g.direction??"desc",d=m.orderBy("historySetAt",v);return g.cursor&&(d=d.startAfter(g.cursor)),g.limit&&g.limit>0&&(d=d.limit(g.limit)),(await d.get()).docs.map(p=>({id:p.id,data:p.data()}))}async function a(...u){let g={},b=u,h=u[u.length-1];h!==null&&typeof h=="object"&&!(h instanceof Timestamp)&&("limit"in h||"cursor"in h||"direction"in h||"fields"in h||"operations"in h)&&(g=h,b=u.slice(0,-1));let m=g.limit??$r,v=Math.max(m,Math.min(m*8,500)),d=await s(...b,{limit:v,cursor:g.cursor,direction:g.direction??"desc"}),y=Yt(d.map(p=>p.data));if(g.fields&&g.fields.length>0){let p=new Set(g.fields);y=y.filter(l=>Object.keys(l.changes).some(x=>p.has(x)));}if(g.operations&&g.operations.length>0){let p=new Set(g.operations);y=y.filter(l=>p.has(l.operation));}return y.slice(0,m)}async function c(...u){let g=u[u.length-1],b={},h,m;return g!==null&&typeof g=="object"&&!(g instanceof Timestamp)?(b=g,h=u[u.length-2],m=u.slice(0,-2)):(h=g,m=u.slice(0,-1)),a(...m,{...b,fields:[h]})}async function i(...u){let g=u[u.length-1],b={},h,m;return g!==null&&typeof g=="object"&&!(g instanceof Timestamp)?(b=g,h=u[u.length-2],m=u.slice(0,-2)):(h=g,m=u.slice(0,-1)),a(...m,{...b,operations:[h]})}async function f(...u){let g=u[u.length-1],b=u.slice(0,-1),h=Pr(b),m=Jt(g.before??{},g.after??{},{include:r.include,exclude:r.exclude,metaFields:rn(r),systemKeys:t});if(g.operation==="update"&&Object.keys(m).length===0)return null;let d={...nn(g.after??g.before??null,r),...g.meta??{}},y=en({entityId:h,operation:g.operation,changes:m,meta:d,config:r}),p=on(e,o,b),l=await tn(p,y,r,{repoName:n,docId:h,before:g.before??null,after:g.after??null});return !l.written||!l.entry?null:{historyDocId:l.entry.historyDocId,historyToObjectId:l.entry.historyToObjectId,historySetAt:l.entry.historySetAt,schemaVersion:2,operation:l.entry.operation,meta:l.entry.meta,changes:l.entry.changes}}return {list:a,raw:s,byField:c,byOperation:i,recordManual:f}}function an(e){return {count:async(t={})=>{let n=e;return n=le(n,t),(await n.count().get()).data().count},sum:async(t,n={})=>{let r=e;r=le(r,n);let o=await r.get(),s=0;return o.forEach(a=>{let c=a.data()[t];typeof c=="number"&&(s+=c);}),s},average:async(t,n={})=>{let r=e;r=le(r,n);let o=await r.get();if(o.empty)return null;let s=0,a=0;return o.forEach(c=>{let i=c.data()[t];typeof i=="number"&&(s+=i,a++);}),a>0?s/a:null}}}function ln(e,t,n,r,o,s){let a=()=>new Date;return {create:()=>{let c=e.batch();return {batch:c,set:(...i)=>{let f=i[i.length-1],u=typeof f=="object"&&f!==null&&"merge"in f,g=u?i[i.length-2]:i[i.length-1],b=u?i.slice(0,-2):i.slice(0,-1),h=u?f:{merge:true},m=t(...b),v={...g},d=b[b.length-1];n&&d&&(v[n]=d),r&&(v[r]=m.path),o&&(v[o]=a()),s&&(v[s]=a()),c.set(m,v,h);},update:(...i)=>{let f=i.pop(),g=t(...i),b={...f};s&&(b[s]=a()),c.update(g,b);},delete:(...i)=>{let f=t(...i);c.delete(f);},commit:async()=>{await c.commit();}}}}}function cn(e,t,n){let r=()=>new Date;return {set:async o=>{let s=e.bulkWriter(),a=0;for(let c of o){if(!c)continue;let{docRef:i,data:f,merge:u=true}=c,g={...f};t&&(g[t]=r()),n&&(g[n]=r()),s.set(i,g,{merge:u}),a++,a>=500&&(await s.flush(),a=0);}await s.close();},update:async o=>{let s=e.bulkWriter(),a=0;for(let c of o){if(!c)continue;let{docRef:i,data:f}=c,u={...f};n&&(u[n]=r()),s.update(i,u),a++,a>=500&&(await s.flush(),a=0);}await s.close();},delete:async o=>{let s=e.bulkWriter(),a=0;for(let c of o)c&&(s.delete(c),a++,a>=500&&(await s.flush(),a=0));await s.close();}}}function dn(e,t,n,r,o,s){let a=()=>new Date;return {create:async g=>{if(!e)throw new Error("Cannot use create() on collection groups. Use set() with a specific document ID instead.");let b,h,m={...g};if(o&&(m[o]=a()),s&&(m[s]=a()),g[n]){h=g[n],b=e.doc(h);let d=r?{...m,[r]:b.path}:m;await b.set(d);}else {b=await e.add(m),h=b.id;let d={[n]:h};r&&(d[r]=b.path),await b.update(d);}let v=await b.get();return H(v.data())},set:async(...g)=>{let b=g[g.length-1],h=typeof b=="object"&&b!==null&&"merge"in b,m=h?g[g.length-2]:g[g.length-1],v=h?g.slice(0,-2):g.slice(0,-1),d=h?b:{merge:true},y={...m};s&&(y[s]=a());let p=t(...v),l=v[v.length-1];n&&l!=null&&(y[n]=l),r&&(y[r]=p.path),await p.set(y,d);let x=await p.get();return H(x.data())},update:async(...g)=>{let b=g.pop(),h=g,m={...b};s&&(m[s]=a());let v=t(...h);await v.update(m);let d=await v.get();return H(d.data())},delete:async(...g)=>{await t(...g).delete();}}}function un(e,t,n,r,o){let s={};return s.byList=async(a,c,i="in",f={})=>{if(c.length===0)return [];let u=[],g=Gt(c,30);for(let b of g){let h=e;h=h.where(a,i,b),f.select&&f.select.length>0&&(h=h.select(...f.select.map(v=>String(v)))),(await h.get()).forEach(v=>{let d=H(v.data());u.push(f.returnDoc?{data:d,doc:v}:d);});}return u},t.forEach(a=>{let c=`by${ie(String(a))}`;s[c]=async(i,f={})=>{let u=typeof f=="boolean"?{returnDoc:f}:f;if(String(a)===o){let d=await r(i).get();if(!d.exists)return null;let y=H(d.data());return u.returnDoc?{data:y,doc:d}:y}let g=e;g=g.where(String(a),"==",i).limit(1),u.select&&u.select.length>0&&(g=g.select(...u.select.map(v=>String(v))));let b=await g.get();if(b.empty)return null;let h=b.docs[0];if(!h)return null;let m=H(h.data());return u.returnDoc?{data:m,doc:h}:m};}),s}function pn(e,t,n,r){let o={},s=async(a,c)=>{if(!n||!r||c.length===0)return a;let i=c.map(f=>typeof f=="string"?{key:f}:{key:f.relation,select:f.select});return Promise.all(a.map(async f=>{let u=await Promise.all(i.map(async({key:b,select:h})=>{let m=n[b];if(!m)return [b,void 0];let v=r[m.repo];if(!v)return [b,void 0];let d=f[b];if(d==null)return [b,m.type==="one"?null:[]];let y=h?{select:h}:void 0;try{if(m.type==="one"){let p=`by${ie(m.key)}`,l=typeof v.get?.[p]=="function"?await v.get[p](d,y):null;return [b,l]}else {let p=`by${ie(m.key)}`,l=typeof v.query?.[p]=="function"?await v.query[p](d,y):[];return [b,l]}}catch(p){return console.error(`[include] Error populating "${b}":`,p),[b,m.type==="one"?null:[]]}})),g={};for(let[b,h]of u)b!==void 0&&(g[b]=h);return {...f,populated:g}}))};return t.forEach(a=>{let c=`by${ie(a)}`;o[c]=async(i,f={})=>{let u={...f,where:[[a,"==",i],...f.where??[]]};return (await be(e,u)).docs.map(b=>H(b.data()))};}),o.by=async a=>(await be(e,a)).docs.map(i=>H(i.data())),o.getAll=async(a={})=>(await be(e,a)).docs.map(i=>H(i.data())),o.onSnapshot=(a,c,i)=>le(e,a).onSnapshot(u=>{c(u.docs.map(g=>H(g.data())));},i),o.paginate=async a=>{let{include:c,...i}=a,f=await Je(e,i);if(c&&c.length>0){let u=await s(f.data,c);return {...f,data:u}}return f},o.paginateAll=async function*(a){let{include:c,...i}=a;for await(let f of pt(e,i))if(c&&c.length>0){let u=await s(f.data,c);yield {...f,data:u};}else yield f;},o}function fn(e,t){return {populate:async(n,r)=>{if(!e.relationalKeys)return {...n,populated:{}};let o,s={};if(typeof r=="object"&&!Array.isArray(r))if("relation"in r){let i=r;o=[i.relation],i.select&&(s[i.relation]=i.select);}else if("relations"in r){let i=r;o=Array.isArray(i.relations)?i.relations:[i.relations],s=i.select??{};}else o=[];else o=Array.isArray(r)?r:[r];let a=await Promise.all(o.map(async i=>{let f=e.relationalKeys?.[i];if(!f)return console.warn(`[populate] Relation "${i}" not found in config`),[i,void 0];let u=t[f.repo];if(!u)return console.warn(`[populate] Repository "${f.repo}" not found in mapping`),[i,void 0];let g=n[i];if(g==null)return [i,f.type==="one"?null:[]];let b=s[i],h=b?{select:b}:void 0;try{if(f.type==="one"){let m=`by${ie(f.key)}`,v=typeof u.get?.[m]=="function"?await u.get[m](g,h):null;return [i,v]}else {let m=`by${ie(f.key)}`,v=typeof u.query?.[m]=="function"?await u.query[m](g,h):[];return [i,v]}}catch(m){return console.error(`[populate] Error populating "${i}":`,m),[i,f.type==="one"?null:[]]}})),c={};for(let[i,f]of a)f!==void 0&&(c[i]=f);return {...n,populated:c}}}}function yn(e,t){return {run:async n=>e.runTransaction(async r=>n({get:async(...s)=>{let a=t(...s),c=await r.get(a);return c.exists?H({...c.data(),docId:c.id}):null},set:(...s)=>{let a=s[s.length-1],c=typeof a=="object"&&a!==null&&"merge"in a,i=c?s[s.length-2]:s[s.length-1],f=c?s.slice(0,-2):s.slice(0,-1),u=c?a:{merge:true},g=t(...f);r.set(g,i,u);},update:(...s)=>{let a=s[s.length-1],c=s.slice(0,-1),i=t(...c);r.update(i,a);},delete:(...s)=>{let a=t(...s);r.delete(a);},raw:r}))}}function Er(e){if(typeof e!="function")return [];let n=e.toString().match(/^\s*(?:function\s*\w*\s*)?\(([^)]*)\)/);if(!n?.[1])return [];let r=n[1].split(",").map(o=>o.trim().replace(/\s*[:=].*$/,"").trim()).filter(Boolean);return r.length<=2?[]:r.slice(1,-1)}function mt(e,t,n={}){let r=t.isGroup?e.collectionGroup(t.path):e.collection(t.path),o=t.isGroup?null:e.collection(t.path),s=(...d)=>t.refCb(e,...d),a=un(r,t.foreignKeys,o,s,t.documentKey),c=pn(r,t.queryKeys,t.relationalKeys,n),i=an(r),f=dn(o,s,t.documentKey,t.pathKey,t.createdKey,t.updatedKey),u=ln(e,s,t.documentKey,t.pathKey,t.createdKey,t.updatedKey),g=yn(e,s),b=cn(e,t.createdKey,t.updatedKey),h=fn(t,n),m=t.history,v=m?.enabled?sn(s,[t.documentKey,t.pathKey,t.createdKey,t.updatedKey].filter(d=>typeof d=="string"),t.path??"(unknown)",m):null;return {ref:r,documentRef:s,get:a,query:c,aggregate:i,...f,batch:u,transaction:g,bulk:b,...h,...v?{history:v}:{},schema:t.schema,relationalKeys:t.relationalKeys,_systemKeys:[t.documentKey,t.pathKey,t.createdKey,t.updatedKey].filter(d=>typeof d=="string"),_pathKey:t.pathKey??null,_isGroup:!!t.isGroup,_parentKeys:t.isGroup?Er(t.refCb):[],_createdKey:t.createdKey??null}}function Dr(e){let t=[],n=e.replace(/[.*+?^${}()|[\]\\]/g,r=>r===":"?r:`\\${r}`).replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,(r,o)=>(t.push(o),"([^/]+)"));return {pattern:new RegExp(`^${n}$`),paramNames:t}}function Ir(e){let t=e.path??e.url??"/",n=t.indexOf("?");return n===-1?t:t.slice(0,n)}var X=class{constructor(){this.routes=[];this.middlewares=[];this.notFoundHandler=(t,n)=>{n.status(404).send("Not Found");};this.errorHandler=(t,n,r)=>{console.error("[MiniRouter]",t),r.status(500).send("Internal Server Error");};}use(t){return this.middlewares.push(t),this}get(t,n){return this.addRoute("GET",t,n)}post(t,n){return this.addRoute("POST",t,n)}put(t,n){return this.addRoute("PUT",t,n)}patch(t,n){return this.addRoute("PATCH",t,n)}delete(t,n){return this.addRoute("DELETE",t,n)}onNotFound(t){return this.notFoundHandler=t,this}onError(t){return this.errorHandler=t,this}addRoute(t,n,r){let{pattern:o,paramNames:s}=Dr(n);return this.routes.push({method:t.toUpperCase(),pattern:o,paramNames:s,handler:r}),this}async handle(t,n){let r=(t.method??"GET").toUpperCase(),o=Ir(t),s=null,a={};for(let f of this.routes){if(f.method!==r)continue;let u=o.match(f.pattern);if(u){s=f,a={},f.paramNames.forEach((g,b)=>{a[g]=decodeURIComponent(u[b+1]??"");});break}}let c=Object.assign(t,{params:a}),i=s?s.handler:this.notFoundHandler;try{await this.runMiddlewareChain(c,n,i);}catch(f){this.errorHandler(f,t,n);}}async runMiddlewareChain(t,n,r){let o=0,s=async()=>{if(o<this.middlewares.length){let a=this.middlewares[o++];await a(t,n,s);}else await r(t,n);};await s();}};Fe();var ce="__sync_version";var _r=new Set(["ZodOptional","ZodNullable","ZodDefault"]);function jr(e){let t=e,n=false;for(;;){let r=B(t);if(!_r.has(r))break;(r==="ZodOptional"||r==="ZodNullable")&&(n=true);let o=K(t);if(!o)break;t=o;}return {inner:t,nullable:n}}var Fr={ZodString:"string",ZodNumber:"number",ZodBigInt:"bigint",ZodBoolean:"boolean",ZodDate:"timestamp",ZodEnum:"string",ZodNativeEnum:"string",ZodLiteral:"string"};function bn(e,t,n,r,o,s,a,c){for(let[i,f]of Object.entries(e)){let u=n?`${n}__${i}`:i;if(o.has(i)||o.has(u))continue;let{inner:g,nullable:b}=jr(f),h=B(g),m=r||b;if(h==="ZodObject"){let p=J(g);bn(p,t,u,m,o,s,a,c);continue}let v=Fr[h]??"json",d=u===a||i===a,y=s[u]??s[i]??u;c.push({name:y,sqlType:t.mapType(v),nullable:d?false:m,isPrimaryKey:d});}}function et(e,t,n={}){let{primaryKey:r,exclude:o=[],columnMap:s={}}=n,a=new Set(o),c=J(e),i=[];return bn(c,t,"",false,a,s,r,i),i.some(f=>f.name===ce)||i.push({name:ce,sqlType:t.mapType("bigint"),nullable:true,isPrimaryKey:false,description:"Monotonic publish version (Date.now() ms). Internal."}),i}function vn(e){if(e==null)return null;if(typeof e=="object"&&typeof e.toDate=="function")return e.toDate().toISOString();if(e instanceof Date)return e.toISOString();if(Buffer.isBuffer(e))return e.toString("base64");if(e instanceof Uint8Array)return Buffer.from(e).toString("base64");if(typeof e=="object"&&"latitude"in e&&"longitude"in e){let t=e;return JSON.stringify({lat:t.latitude,lng:t.longitude})}return Array.isArray(e)?JSON.stringify(e.map(vn)):e}function xn(e,t,n){for(let[r,o]of Object.entries(e)){let s=t?`${t}__${r}`:r;o!=null&&typeof o=="object"&&!Array.isArray(o)&&!(o instanceof Date)&&!Buffer.isBuffer(o)&&!(o instanceof Uint8Array)&&typeof o.toDate!="function"&&!("latitude"in o&&"longitude"in o)?xn(o,s,n):n[s]=vn(o);}}function Me(e,t){let n=new Set(t?.exclude),r=t?.columnMap??{},o={};xn(e,"",o);let s={};for(let[a,c]of Object.entries(o)){if(n.has(a))continue;let i=a.split("__")[0];if(i!==a&&n.has(i))continue;let f=r[a]??(a.includes("__")?r[a.split("__").pop()]:void 0)??a;s[f]=c;}return s}function ve(e,t){if(process.env.FUNCTIONS_EMULATOR==="true"){let o=process.env.GCLOUD_PROJECT??process.env.GOOGLE_CLOUD_PROJECT??"demo-project",s=process.env.FUNCTION_REGION??"us-central1",a=(process.env.FUNCTION_TARGET??"").replace(/\./g,"-");return `/${o}/${s}/${a}${t}`}let n=process.env.K_SERVICE,r=e.hostname??e.headers?.host??"";return n&&r.includes("cloudfunctions.net")?`/${n.toLowerCase()}${t}`:t}function te(e,t,n){return `<!DOCTYPE html>
1
+ import {jsx,jsxs,Fragment}from'hono/jsx/jsx-runtime';import {Timestamp}from'firebase-admin/firestore';import {randomUUID}from'crypto';import {z}from'zod';import {renderToString}from'hono/jsx/dom/server';var pr=Object.defineProperty;var Qe=(e,t)=>()=>(e&&(t=e(e=0)),t);var fr=(e,t)=>{for(var n in t)pr(e,n,{get:t[n],enumerable:true});};function B(e){let t=e,n=t._zod?.def?.type;if(n)return Nr[n]??`Zod${n.charAt(0).toUpperCase()}${n.slice(1)}`;let r=t._def?.typeName;return r||""}function K(e){let t=e;if(t._zod?.def?.innerType)return t._zod.def.innerType;if(t._def?.innerType)return t._def.innerType}function mn(e){let t=e;if(t._zod?.def?.element)return t._zod.def.element;if(t._def?.type)return t._def.type}function gn(e){let t=e;if(t._zod?.def?.defaultValue!==void 0)return t._zod.def.defaultValue;let n=t._def?.defaultValue;return typeof n=="function"?n():n}function J(e){let t=e;return t.shape&&typeof t.shape=="object"?t.shape:t._zod?.def?.shape&&typeof t._zod.def.shape=="object"?t._zod.def.shape:t._def?.shape?typeof t._def.shape=="function"?t._def.shape():t._def.shape:{}}function _e(e){let t=e;return Array.isArray(t.options)?t.options:t._zod?.def?.entries?Object.values(t._zod.def.entries):Array.isArray(t._def?.values)?t._def.values:[]}function je(e){let t=e;return t._zod?.def?.entries?t._zod.def.entries:t.enum&&typeof t.enum=="object"?t.enum:t._def?.values&&typeof t._def.values=="object"?t._def.values:{}}function Ye(e){let t=e;return Array.isArray(t._zod?.def?.values)?t._zod.def.values[0]:t._def?.value}function hn(e){let t=e,n=[],r=t._zod?.def?.checks;if(Array.isArray(r)){for(let s of r)s.format&&n.push(s.format);if(n.length>0)return n}let o=t._def?.checks;if(Array.isArray(o))for(let s of o)s.kind&&n.push(s.kind);return n}var Nr,Fe=Qe(()=>{Nr={string:"ZodString",number:"ZodNumber",bigint:"ZodBigInt",boolean:"ZodBoolean",date:"ZodDate",enum:"ZodEnum",nativeEnum:"ZodNativeEnum",literal:"ZodLiteral",object:"ZodObject",array:"ZodArray",optional:"ZodOptional",nullable:"ZodNullable",default:"ZodDefault",coerce:"ZodCoerce",union:"ZodUnion",undefined:"ZodUndefined",unknown:"ZodUnknown",any:"ZodAny",record:"ZodRecord"};});function En({val:e}){return jsx("span",{class:"text-sm text-base-content/80 font-mono tabular-nums whitespace-nowrap",children:e.toLocaleString()})}function Kr({message:e}){return jsx("span",{class:"tooltip tooltip-warning tooltip-right inline-flex align-middle ml-1 text-warning","data-tip":e,role:"img","aria-label":e,children:jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",class:"size-3.5",children:jsx("path",{d:"M12 2 1 22h22L12 2zm0 6 7.5 13h-15L12 8zm-1 4v4h2v-4h-2zm0 5v2h2v-2h-2z"})})})}function Oe({val:e,mismatch:t}){let n=Ur(e);return t?jsxs("span",{class:"inline-flex items-start gap-0.5",children:[n,jsx(Kr,{message:t})]}):n}function Ur(e){if(e==null)return jsx("span",{class:"opacity-30 italic text-xs",children:"\u2014"});if(typeof e=="boolean")return e?jsx("span",{class:"badge badge-success badge-sm",children:"true"}):jsx("span",{class:"badge badge-error badge-sm",children:"false"});if(e instanceof Date)return jsx(En,{val:e});if(typeof e=="object"&&e!==null&&typeof e.toDate=="function")return jsx(En,{val:e.toDate()});if(typeof e=="number")return jsx("span",{class:"text-sm font-mono tabular-nums",children:String(e)});if(Array.isArray(e))return e.length===0?jsx("span",{class:"text-xs text-base-content/30",children:"[]"}):jsxs("ul",{class:"list-none p-0 m-0 space-y-0.5 text-xs",children:[e.slice(0,8).map((n,r)=>jsx("li",{class:"break-all",children:typeof n=="object"?JSON.stringify(n):String(n)},r)),e.length>8&&jsxs("li",{class:"text-base-content/40 italic",children:["+",e.length-8," more\u2026"]})]});if(typeof e=="object"&&e!==null){let n=Object.entries(e);return n.length===0?jsx("span",{class:"text-xs text-base-content/30",children:"{}"}):jsxs("dl",{class:"grid grid-cols-[auto_1fr] gap-x-2 gap-y-0.5 text-xs m-0",children:[n.slice(0,8).map(([r,o])=>jsxs(Fragment,{children:[jsx("dt",{class:"text-base-content/50 font-semibold whitespace-nowrap",children:r}),jsx("dd",{class:"break-all",children:String(o??"")})]})),n.length>8&&jsxs("dt",{class:"col-span-2 text-base-content/40 italic",children:["+",n.length-8," more\u2026"]})]})}let t=String(e);return jsx("span",{class:"text-sm break-all",children:t})}var nt=Qe(()=>{});function Ae(e){if(!e)return "unknown";let t=ht(e);switch(B(t)){case "ZodString":return "string";case "ZodNumber":return "number";case "ZodBigInt":return "bigint";case "ZodBoolean":return "boolean";case "ZodDate":return "date";case "ZodArray":return "array";case "ZodObject":case "ZodRecord":return "object";case "ZodEnum":case "ZodNativeEnum":return "enum";case "ZodLiteral":return "literal";default:return "unknown"}}function ht(e){let t=B(e);if(t==="ZodOptional"||t==="ZodNullable"||t==="ZodDefault"){let n=K(e);return n?ht(n):e}return e}function $e(e,t){if(!e)return;let n=t.split("."),r=e;for(let o of n){if(!r)return;let s=ht(r);if(B(s)!=="ZodObject")return;r=J(s)[o];}return r}function Gr(e){return e==null?"null":e instanceof Date?"date":Array.isArray(e)?"array":typeof e=="string"?"string":typeof e=="boolean"?"boolean":typeof e=="bigint"?"bigint":typeof e=="number"?"number":typeof e=="object"?typeof e.toDate=="function"?"date":"object":"unknown"}function Ze(e,t){if(e==="unknown")return null;let n=Gr(t);return n==="null"?null:e==="enum"||e==="literal"?n==="string"||n==="number"?null:`Expected ${e} (string/number), got ${n}`:e===n||e==="number"&&n==="bigint"||e==="bigint"&&n==="number"?null:`Expected ${e}, got ${n}`}var bt=Qe(()=>{Fe();});var Nn={};fr(Nn,{PanelMany:()=>Jr,PanelOne:()=>Wr,RightPanel:()=>vt});function Wr({doc:e,repoName:t,basePath:n,schema:r,columns:o}){if(!e)return jsx("div",{class:"text-center py-12 text-base-content/50",children:"Document not found."});let s=String(e.docId??e.id??""),a=`${n}/${t}/${encodeURIComponent(s)}/edit`,c=In(r,o);return jsxs("div",{class:"space-y-4",children:[jsxs("div",{class:"flex items-center justify-between gap-2",children:[jsxs("div",{class:"text-xs text-base-content/60",children:[jsx("span",{class:"font-mono",children:t}),jsx("span",{class:"opacity-50",children:" \xB7 "}),jsx("span",{class:"font-mono break-all",children:s})]}),jsx("a",{href:a,class:"btn btn-sm btn-primary",children:"Edit \u2192"})]}),jsx("dl",{class:"grid grid-cols-[max-content_1fr] gap-x-4 gap-y-2 border border-base-300 rounded-box p-4 bg-base-100",children:o.map(i=>{let f=e[i],u=c[i],g=u?Ze(u,f):null;return jsxs(Fragment,{children:[jsx("dt",{class:"text-xs font-semibold text-base-content/60 uppercase tracking-wide pt-0.5",children:i}),jsx("dd",{class:"min-w-0",children:jsx(Oe,{val:f,mismatch:g})})]})})})]})}function Jr({docs:e,repoName:t,basePath:n,fk:r,fv:o,columns:s,schema:a,pagination:c}){let i=`${n}/${t}?fv_${r}=${encodeURIComponent(o)}`,f=In(a,s);return jsxs("div",{class:"space-y-4",children:[jsxs("div",{class:"flex items-center justify-between gap-2",children:[jsxs("div",{class:"text-xs text-base-content/60",children:[jsx("span",{class:"font-mono",children:t}),jsx("span",{class:"opacity-50",children:" where "}),jsx("span",{class:"font-mono",children:r}),jsx("span",{class:"opacity-50",children:" = "}),jsx("span",{class:"font-mono break-all",children:o}),jsx("span",{class:"opacity-50",children:" \xB7 "}),jsxs("span",{children:[e.length," doc",e.length!==1?"s":""]})]}),jsx("a",{href:i,class:"btn btn-sm btn-outline",children:"Full view \u2192"})]}),jsx("div",{class:"overflow-x-auto rounded-box border border-base-300 bg-base-100",children:jsxs("table",{class:"table table-xs w-full",children:[jsx("thead",{children:jsxs("tr",{class:"bg-base-200/50",children:[s.map((u,g)=>jsx("th",{class:"text-xs font-semibold text-base-content/60 uppercase tracking-wide",children:u},g)),jsx("th",{})]})}),jsx("tbody",{children:e.length===0?jsx("tr",{children:jsx("td",{colspan:s.length+1,class:"text-center py-10 text-base-content/40",children:"No related documents"})}):e.map((u,g)=>{let b=String(u.docId??u.id??""),h=`${n}/${t}/${encodeURIComponent(b)}/edit`;return jsxs("tr",{class:"hover",children:[s.map((m,v)=>{let d=u[m],y=f[m],p=y?Ze(y,d):null;return jsx("td",{class:"align-top py-1.5",children:jsx(Oe,{val:d,mismatch:p})},v)}),jsx("td",{class:"text-right py-1.5",children:jsx("a",{href:h,class:"btn btn-xs btn-ghost",children:"Edit"})})]},g)})})]})}),(c.hasPrev||c.hasNext)&&jsxs("div",{class:"flex justify-center items-center gap-2",children:[c.hasPrev?jsx("button",{type:"button",class:"btn btn-xs btn-outline","data-frs-panel-page":"prev","data-cursor":c.prevCursor,children:"\u2190 Previous"}):jsx("button",{class:"btn btn-xs btn-outline",disabled:true,children:"\u2190 Previous"}),c.hasNext?jsx("button",{type:"button",class:"btn btn-xs btn-outline","data-frs-panel-page":"next","data-cursor":c.nextCursor,children:"Next \u2192"}):jsx("button",{class:"btn btn-xs btn-outline",disabled:true,children:"Next \u2192"})]})]})}function In(e,t){if(!e)return {};let n={};for(let r of t)n[r]=Ae($e(e,r));return n}var vt,xt=Qe(()=>{nt();bt();vt=({basePath:e=""})=>jsxs("div",{class:"fixed inset-0 z-[100] hidden pointer-events-none","data-frs-panel-root":true,"data-frs-base-path":e,"aria-hidden":"true",children:[jsx("div",{class:"absolute inset-0 bg-black/30 opacity-0 transition-opacity duration-200 pointer-events-auto","data-frs-panel-backdrop":true}),jsxs("aside",{class:"absolute top-0 right-0 h-full w-full md:w-1/2 bg-base-100 shadow-2xl border-l border-base-300 translate-x-full transition-transform duration-200 pointer-events-auto flex flex-col","data-frs-panel":true,role:"dialog","aria-label":"Relation preview",children:[jsxs("header",{class:"flex items-center justify-between px-5 py-3 border-b border-base-300 bg-base-200/40 shrink-0",children:[jsx("h2",{class:"font-semibold text-base truncate","data-frs-panel-title":true,children:"Relation"}),jsx("button",{type:"button",class:"btn btn-sm btn-ghost btn-circle","data-frs-panel-close":true,"aria-label":"Close panel",children:"\u2715"})]}),jsx("div",{class:"flex-1 overflow-auto p-5 text-sm","data-frs-panel-body":true,children:jsx("div",{class:"flex items-center justify-center py-12 text-base-content/40",children:jsx("span",{class:"loading loading-spinner loading-md"})})})]})]});});function yr(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Ie(e,t){return t.orderBy&&t.orderBy.forEach(n=>{e=e.orderBy(String(n.field),n.direction??"asc");}),t.limit&&(e=e.limit(t.limit)),t.offset&&(e=e.offset(t.offset)),t.select&&t.select.length>0&&(e=e.select(...t.select.map(n=>String(n)))),t.startAt&&(e=Array.isArray(t.startAt)?e.startAt(...t.startAt):e.startAt(t.startAt)),t.startAfter&&(e=Array.isArray(t.startAfter)?e.startAfter(...t.startAfter):e.startAfter(t.startAfter)),t.endAt&&(e=Array.isArray(t.endAt)?e.endAt(...t.endAt):e.endAt(t.endAt)),t.endBefore&&(e=Array.isArray(t.endBefore)?e.endBefore(...t.endBefore):e.endBefore(t.endBefore)),e}function it(e){let[,t,n]=e;return (t==="in"||t==="array-contains-any")&&Array.isArray(n)&&n.length>30}function Lt(e){let[t,n,r]=e;return it(e)?yr(r,30).map(s=>[t,n,s]):[e]}function Ge(e,t){let n=e;for(let[r,o,s]of t)n=n.where(String(r),o,s);return n}async function Vt(e){let t=await Promise.all(e.map(o=>o.get())),n=new Map;t.forEach(o=>{o.docs.forEach(s=>{n.has(s.id)||n.set(s.id,s);});});let r=t[0];if(!r)throw new Error("No snapshots returned");return {...r,docs:Array.from(n.values()),size:n.size,empty:n.size===0}}async function be(e,t){let n=t.orWhere&&t.orWhere.length>0,r=t.orWhereGroups&&t.orWhereGroups.length>0;if(!n&&!r){if(!t.where||t.where.length===0)return Ie(e,t).get();if(!t.where.some(it)){let g=Ge(e,t.where);return g=Ie(g,t),g.get()}let i=t.where.map(Lt),u=lt(i).map(g=>{let b=Ge(e,g);return b=Ie(b,t),b});return Vt(u)}let o=t.where??[],s=[...t.orWhere?.map(c=>[c])??[],...t.orWhereGroups??[]],a=[];for(let c of s){let i=[...o,...c];if(i.some(it)){let u=i.map(Lt),b=lt(u).map(h=>{let m=Ge(e,h);return m=Ie(m,t),m});a.push(...b);}else {let u=Ge(e,i);u=Ie(u,t),a.push(u);}}return Vt(a)}function lt(e){if(e.length===0)return [[]];let t=e[0];if(e.length===1&&t)return t.map(s=>[s]);if(!t)return [[]];let n=e.slice(1),r=lt(n),o=[];for(let s of t)for(let a of r)o.push([s,...a]);return o}var ct="preserve";function mr(e){ct=e;}function dt(){return ct}function gr(e){return typeof e=="object"&&e!==null&&typeof e._seconds=="number"&&typeof e._nanoseconds=="number"}function ut(e){if(e==null)return null;if(e instanceof Date)return Number.isNaN(e.getTime())?null:e;if(e instanceof Timestamp)return e.toDate();if(gr(e))return new Date(e._seconds*1e3+Math.floor(e._nanoseconds/1e6));if(typeof e=="string"){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}if(typeof e=="number"){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}return null}function hr(e){if(typeof e!="object"||e===null)return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function We(e){if(e instanceof Timestamp)return e.toDate();if(Array.isArray(e))return e.map(t=>We(t));if(hr(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=We(r);return t}return e}function H(e){return ct==="normalize"?We(e):e}function Gt(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function ie(e){return e.charAt(0).toUpperCase()+e.slice(1)}function le(e,t){return t.where&&t.where.forEach(([n,r,o])=>{e=e.where(String(n),r,o);}),t.orderBy&&t.orderBy.forEach(n=>{e=e.orderBy(String(n.field),n.direction??"asc");}),t.limit&&(e=e.limit(t.limit)),t.offset&&(e=e.offset(t.offset)),t.select&&t.select.length>0&&(e=e.select(...t.select.map(n=>String(n)))),t.startAt&&(e=Array.isArray(t.startAt)?e.startAt(...t.startAt):e.startAt(t.startAt)),t.startAfter&&(e=Array.isArray(t.startAfter)?e.startAfter(...t.startAfter):e.startAfter(t.startAfter)),t.endAt&&(e=Array.isArray(t.endAt)?e.endAt(...t.endAt):e.endAt(t.endAt)),t.endBefore&&(e=Array.isArray(t.endBefore)?e.endBefore(...t.endBefore):e.endBefore(t.endBefore)),e}async function Je(e,t){let n={...t,limit:t.pageSize+1};t.cursor&&(t.direction==="prev"?n.endBefore=t.cursor:n.startAfter=t.cursor);let o=(await be(e,n)).docs,s=o.length>t.pageSize,a=s?o.slice(0,t.pageSize):o,c=a.map(f=>H({...f.data(),docId:f.id})),i=t.direction==="prev";return {data:c,nextCursor:i?a.length>0?a[a.length-1]:void 0:s?a[a.length-1]:void 0,prevCursor:i?s?a[0]:void 0:a[0],hasNextPage:i?!!t.cursor:s,hasPrevPage:i?s:!!t.cursor,pageSize:c.length}}async function*pt(e,t){let n,r=true;for(;r;){let o=await Je(e,{...t,cursor:n,direction:"next"});yield o,r=o.hasNextPage,n=o.nextCursor;}}function Ne(e){if(e===null)return "null";if(e===void 0)return "undefined";if(e instanceof Timestamp)return "timestamp";if(e instanceof Date)return "date";if(Array.isArray(e))return "array";let t=typeof e;return t==="string"||t==="number"||t==="boolean"?t:"object"}function Wt(e,t){if(e===t)return true;if(e===null||t===null||e===void 0||t===void 0)return e===t;if(e instanceof Timestamp&&t instanceof Timestamp)return e.isEqual(t);if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return false;for(let n=0;n<e.length;n++)if(!Wt(e[n],t[n]))return false;return true}if(typeof e=="object"&&typeof t=="object")try{return JSON.stringify(e)===JSON.stringify(t)}catch{return false}return false}function Jt(e,t,n={}){let r=new Set([...n.exclude??[],...n.metaFields??[],...n.systemKeys??[]]),o=n.include?new Set(n.include):null,s=e??{},a=t??{},c=new Set([...Object.keys(s),...Object.keys(a)]),i={};for(let f of c){if(r.has(f)||o&&!o.has(f))continue;let u=s[f],g=a[f];Wt(u,g)||(i[f]={oldValue:u===void 0?null:u,newValue:g===void 0?null:g,type:{old:Ne(u),new:Ne(g)}});}return i}var br=5;function vr(e){return e.schemaVersion===2}function Xt(e){if(typeof e!="string")return "object";switch(e){case "string":case "number":case "boolean":case "object":case "array":case "timestamp":case "date":case "null":case "undefined":return e;default:return "object"}}function xr(e){return {historyDocId:e.historyDocId,historyToObjectId:e.historyToObjectId,historySetAt:e.historySetAt,schemaVersion:2,operation:e.operation,meta:e.meta??{},changes:e.changes??{}}}function wr(e){let t={};e.historyUserId!==void 0&&(t.userId=e.historyUserId??null),e.historyUserEmail!==void 0&&(t.userEmail=e.historyUserEmail??null);let n=e.extraHistoryDetails??null;n&&(n.reason!==void 0&&(t.reason=n.reason??null),n.comment!==void 0&&(t.comment=n.comment??null));let r={},o=false;if(e.historyDetails&&typeof e.historyDetails=="object")for(let[s,a]of Object.entries(e.historyDetails))r[s]=a,o=true;if(e.extraContentKeys&&typeof e.extraContentKeys=="object")for(let[s,a]of Object.entries(e.extraContentKeys))r[`content.${s}`]=a,o=true;return o&&(t.extras=r),t}function Rr(e){let t=e.changes?.oldValue??null,n=e.changes?.newValue??null,r=e.types?.oldValue,o=e.types?.newValue;return {oldValue:t,newValue:n,type:{old:r?Xt(r):Ne(t),new:o?Xt(o):Ne(n)}}}function Sr(e){let t=Rr(e),n=wr(e);return {historyDocId:e.historyDocId,historyToObjectId:e.historyToObjectId,historySetAt:e.historySetAt,schemaVersion:1,operation:"update",meta:n,changes:{[e.field]:t}}}function Tr(e,t,n){return Math.abs(e.toMillis()-t.toMillis())<=n}function kr(e,t){return (e.userId??null)===(t.userId??null)}function Yt(e,t={}){let n=t.groupToleranceMs??br,r=[];for(let o of e){if(vr(o)){r.push(xr(o));continue}let a=Sr(o),c=r[r.length-1];c&&c.schemaVersion===1&&Tr(c.historySetAt,a.historySetAt,n)&&kr(c.meta,a.meta)?Object.assign(c.changes,a.changes):r.push(a);}return r}var Or=7e5;function en(e){let t=e.ttlOverride??e.config.ttl,r={schemaVersion:2,historyDocId:randomUUID(),historyToObjectId:e.entityId,historySetAt:Timestamp.now(),operation:e.operation,meta:e.meta,changes:e.changes};t&&(r.expiresAt=Timestamp.fromMillis(Date.now()+t.days*24*60*60*1e3));let o=s=>{try{return Buffer.byteLength(JSON.stringify(s,(a,c)=>c instanceof Timestamp?c.toMillis():c),"utf8")}catch{return 0}};if(o(r.changes)>Or){let s={};for(let[a,c]of Object.entries(r.changes)){let i=o(c.oldValue),f=o(c.newValue);s[a]={oldValue:i>5e4?"[truncated]":c.oldValue,newValue:f>5e4?"[truncated]":c.newValue,type:c.type};}r.changes=s,r._truncated=true;}return r}async function tn(e,t,n,r){let o=t;return n.onBeforeWrite&&(o=await n.onBeforeWrite(t,r)),o?(await e.doc(o.historyDocId).set(o),{written:true,entry:o}):{written:false,reason:"dropped-by-onBeforeWrite"}}function nn(e,t){let n=e??{},r={},o=t.meta;if(!o)return r;let s=u=>{if(!u)return;let g=n[u];return g===void 0||g===null?null:String(g)},a=s(o.userId);a!==void 0&&(r.userId=a);let c=s(o.userEmail);c!==void 0&&(r.userEmail=c);let i=s(o.reason);i!==void 0&&(r.reason=i);let f=s(o.comment);if(f!==void 0&&(r.comment=f),o.extras&&o.extras.length>0){let u={},g=false;for(let b of o.extras)b in n&&(u[b]=n[b],g=true);g&&(r.extras=u);}return r}function rn(e){let t=e.meta;if(!t)return [];let n=[];return t.userId&&n.push(t.userId),t.userEmail&&n.push(t.userEmail),t.reason&&n.push(t.reason),t.comment&&n.push(t.comment),t.extras&&n.push(...t.extras),n}var Ar="history",$r=50;function on(e,t,n){return e(...n).collection(t)}function Pr(e){return String(e[e.length-1]??"")}function sn(e,t,n,r){if(!r?.enabled)return null;let o=r.subcollection??Ar;async function s(...u){let g={},b=u,h=u[u.length-1];h!==null&&typeof h=="object"&&!(h instanceof Timestamp)&&("limit"in h||"cursor"in h||"direction"in h)&&(g=h,b=u.slice(0,-1));let m=on(e,o,b),v=g.direction??"desc",d=m.orderBy("historySetAt",v);return g.cursor&&(d=d.startAfter(g.cursor)),g.limit&&g.limit>0&&(d=d.limit(g.limit)),(await d.get()).docs.map(p=>({id:p.id,data:p.data()}))}async function a(...u){let g={},b=u,h=u[u.length-1];h!==null&&typeof h=="object"&&!(h instanceof Timestamp)&&("limit"in h||"cursor"in h||"direction"in h||"fields"in h||"operations"in h)&&(g=h,b=u.slice(0,-1));let m=g.limit??$r,v=Math.max(m,Math.min(m*8,500)),d=await s(...b,{limit:v,cursor:g.cursor,direction:g.direction??"desc"}),y=Yt(d.map(p=>p.data));if(g.fields&&g.fields.length>0){let p=new Set(g.fields);y=y.filter(l=>Object.keys(l.changes).some(x=>p.has(x)));}if(g.operations&&g.operations.length>0){let p=new Set(g.operations);y=y.filter(l=>p.has(l.operation));}return y.slice(0,m)}async function c(...u){let g=u[u.length-1],b={},h,m;return g!==null&&typeof g=="object"&&!(g instanceof Timestamp)?(b=g,h=u[u.length-2],m=u.slice(0,-2)):(h=g,m=u.slice(0,-1)),a(...m,{...b,fields:[h]})}async function i(...u){let g=u[u.length-1],b={},h,m;return g!==null&&typeof g=="object"&&!(g instanceof Timestamp)?(b=g,h=u[u.length-2],m=u.slice(0,-2)):(h=g,m=u.slice(0,-1)),a(...m,{...b,operations:[h]})}async function f(...u){let g=u[u.length-1],b=u.slice(0,-1),h=Pr(b),m=Jt(g.before??{},g.after??{},{include:r.include,exclude:r.exclude,metaFields:rn(r),systemKeys:t});if(g.operation==="update"&&Object.keys(m).length===0)return null;let d={...nn(g.after??g.before??null,r),...g.meta??{}},y=en({entityId:h,operation:g.operation,changes:m,meta:d,config:r}),p=on(e,o,b),l=await tn(p,y,r,{repoName:n,docId:h,before:g.before??null,after:g.after??null});return !l.written||!l.entry?null:{historyDocId:l.entry.historyDocId,historyToObjectId:l.entry.historyToObjectId,historySetAt:l.entry.historySetAt,schemaVersion:2,operation:l.entry.operation,meta:l.entry.meta,changes:l.entry.changes}}return {list:a,raw:s,byField:c,byOperation:i,recordManual:f}}function an(e){return {count:async(t={})=>{let n=e;return n=le(n,t),(await n.count().get()).data().count},sum:async(t,n={})=>{let r=e;r=le(r,n);let o=await r.get(),s=0;return o.forEach(a=>{let c=a.data()[t];typeof c=="number"&&(s+=c);}),s},average:async(t,n={})=>{let r=e;r=le(r,n);let o=await r.get();if(o.empty)return null;let s=0,a=0;return o.forEach(c=>{let i=c.data()[t];typeof i=="number"&&(s+=i,a++);}),a>0?s/a:null}}}function ln(e,t,n,r,o,s){let a=()=>new Date;return {create:()=>{let c=e.batch();return {batch:c,set:(...i)=>{let f=i[i.length-1],u=typeof f=="object"&&f!==null&&"merge"in f,g=u?i[i.length-2]:i[i.length-1],b=u?i.slice(0,-2):i.slice(0,-1),h=u?f:{merge:true},m=t(...b),v={...g},d=b[b.length-1];n&&d&&(v[n]=d),r&&(v[r]=m.path),o&&(v[o]=a()),s&&(v[s]=a()),c.set(m,v,h);},update:(...i)=>{let f=i.pop(),g=t(...i),b={...f};s&&(b[s]=a()),c.update(g,b);},delete:(...i)=>{let f=t(...i);c.delete(f);},commit:async()=>{await c.commit();}}}}}function cn(e,t,n){let r=()=>new Date;return {set:async o=>{let s=e.bulkWriter(),a=0;for(let c of o){if(!c)continue;let{docRef:i,data:f,merge:u=true}=c,g={...f};t&&(g[t]=r()),n&&(g[n]=r()),s.set(i,g,{merge:u}),a++,a>=500&&(await s.flush(),a=0);}await s.close();},update:async o=>{let s=e.bulkWriter(),a=0;for(let c of o){if(!c)continue;let{docRef:i,data:f}=c,u={...f};n&&(u[n]=r()),s.update(i,u),a++,a>=500&&(await s.flush(),a=0);}await s.close();},delete:async o=>{let s=e.bulkWriter(),a=0;for(let c of o)c&&(s.delete(c),a++,a>=500&&(await s.flush(),a=0));await s.close();}}}function dn(e,t,n,r,o,s){let a=()=>new Date;return {create:async g=>{if(!e)throw new Error("Cannot use create() on collection groups. Use set() with a specific document ID instead.");let b,h,m={...g};if(o&&(m[o]=a()),s&&(m[s]=a()),g[n]){h=g[n],b=e.doc(h);let d=r?{...m,[r]:b.path}:m;await b.set(d);}else {b=await e.add(m),h=b.id;let d={[n]:h};r&&(d[r]=b.path),await b.update(d);}let v=await b.get();return H(v.data())},set:async(...g)=>{let b=g[g.length-1],h=typeof b=="object"&&b!==null&&"merge"in b,m=h?g[g.length-2]:g[g.length-1],v=h?g.slice(0,-2):g.slice(0,-1),d=h?b:{merge:true},y={...m};s&&(y[s]=a());let p=t(...v),l=v[v.length-1];n&&l!=null&&(y[n]=l),r&&(y[r]=p.path),await p.set(y,d);let x=await p.get();return H(x.data())},update:async(...g)=>{let b=g.pop(),h=g,m={...b};s&&(m[s]=a());let v=t(...h);await v.update(m);let d=await v.get();return H(d.data())},delete:async(...g)=>{await t(...g).delete();}}}function un(e,t,n,r,o){let s={};return s.byList=async(a,c,i="in",f={})=>{if(c.length===0)return [];let u=[],g=Gt(c,30);for(let b of g){let h=e;h=h.where(a,i,b),f.select&&f.select.length>0&&(h=h.select(...f.select.map(v=>String(v)))),(await h.get()).forEach(v=>{let d=H(v.data());u.push(f.returnDoc?{data:d,doc:v}:d);});}return u},t.forEach(a=>{let c=`by${ie(String(a))}`;s[c]=async(i,f={})=>{let u=typeof f=="boolean"?{returnDoc:f}:f;if(String(a)===o){let d=await r(i).get();if(!d.exists)return null;let y=H(d.data());return u.returnDoc?{data:y,doc:d}:y}let g=e;g=g.where(String(a),"==",i).limit(1),u.select&&u.select.length>0&&(g=g.select(...u.select.map(v=>String(v))));let b=await g.get();if(b.empty)return null;let h=b.docs[0];if(!h)return null;let m=H(h.data());return u.returnDoc?{data:m,doc:h}:m};}),s}function pn(e,t,n,r){let o={},s=async(a,c)=>{if(!n||!r||c.length===0)return a;let i=c.map(f=>typeof f=="string"?{key:f}:{key:f.relation,select:f.select});return Promise.all(a.map(async f=>{let u=await Promise.all(i.map(async({key:b,select:h})=>{let m=n[b];if(!m)return [b,void 0];let v=r[m.repo];if(!v)return [b,void 0];let d=f[b];if(d==null)return [b,m.type==="one"?null:[]];let y=h?{select:h}:void 0;try{if(m.type==="one"){let p=`by${ie(m.key)}`,l=typeof v.get?.[p]=="function"?await v.get[p](d,y):null;return [b,l]}else {let p=`by${ie(m.key)}`,l=typeof v.query?.[p]=="function"?await v.query[p](d,y):[];return [b,l]}}catch(p){return console.error(`[include] Error populating "${b}":`,p),[b,m.type==="one"?null:[]]}})),g={};for(let[b,h]of u)b!==void 0&&(g[b]=h);return {...f,populated:g}}))};return t.forEach(a=>{let c=`by${ie(a)}`;o[c]=async(i,f={})=>{let u={...f,where:[[a,"==",i],...f.where??[]]};return (await be(e,u)).docs.map(b=>H(b.data()))};}),o.by=async a=>(await be(e,a)).docs.map(i=>H(i.data())),o.getAll=async(a={})=>(await be(e,a)).docs.map(i=>H(i.data())),o.onSnapshot=(a,c,i)=>le(e,a).onSnapshot(u=>{c(u.docs.map(g=>H(g.data())));},i),o.paginate=async a=>{let{include:c,...i}=a,f=await Je(e,i);if(c&&c.length>0){let u=await s(f.data,c);return {...f,data:u}}return f},o.paginateAll=async function*(a){let{include:c,...i}=a;for await(let f of pt(e,i))if(c&&c.length>0){let u=await s(f.data,c);yield {...f,data:u};}else yield f;},o}function fn(e,t){return {populate:async(n,r)=>{if(!e.relationalKeys)return {...n,populated:{}};let o,s={};if(typeof r=="object"&&!Array.isArray(r))if("relation"in r){let i=r;o=[i.relation],i.select&&(s[i.relation]=i.select);}else if("relations"in r){let i=r;o=Array.isArray(i.relations)?i.relations:[i.relations],s=i.select??{};}else o=[];else o=Array.isArray(r)?r:[r];let a=await Promise.all(o.map(async i=>{let f=e.relationalKeys?.[i];if(!f)return console.warn(`[populate] Relation "${i}" not found in config`),[i,void 0];let u=t[f.repo];if(!u)return console.warn(`[populate] Repository "${f.repo}" not found in mapping`),[i,void 0];let g=n[i];if(g==null)return [i,f.type==="one"?null:[]];let b=s[i],h=b?{select:b}:void 0;try{if(f.type==="one"){let m=`by${ie(f.key)}`,v=typeof u.get?.[m]=="function"?await u.get[m](g,h):null;return [i,v]}else {let m=`by${ie(f.key)}`,v=typeof u.query?.[m]=="function"?await u.query[m](g,h):[];return [i,v]}}catch(m){return console.error(`[populate] Error populating "${i}":`,m),[i,f.type==="one"?null:[]]}})),c={};for(let[i,f]of a)f!==void 0&&(c[i]=f);return {...n,populated:c}}}}function yn(e,t){return {run:async n=>e.runTransaction(async r=>n({get:async(...s)=>{let a=t(...s),c=await r.get(a);return c.exists?H({...c.data(),docId:c.id}):null},set:(...s)=>{let a=s[s.length-1],c=typeof a=="object"&&a!==null&&"merge"in a,i=c?s[s.length-2]:s[s.length-1],f=c?s.slice(0,-2):s.slice(0,-1),u=c?a:{merge:true},g=t(...f);r.set(g,i,u);},update:(...s)=>{let a=s[s.length-1],c=s.slice(0,-1),i=t(...c);r.update(i,a);},delete:(...s)=>{let a=t(...s);r.delete(a);},raw:r}))}}function Er(e){if(typeof e!="function")return [];let n=e.toString().match(/^\s*(?:function\s*\w*\s*)?\(([^)]*)\)/);if(!n?.[1])return [];let r=n[1].split(",").map(o=>o.trim().replace(/\s*[:=].*$/,"").trim()).filter(Boolean);return r.length<=2?[]:r.slice(1,-1)}function mt(e,t,n={}){let r=t.isGroup?e.collectionGroup(t.path):e.collection(t.path),o=t.isGroup?null:e.collection(t.path),s=(...d)=>t.refCb(e,...d),a=un(r,t.foreignKeys,o,s,t.documentKey),c=pn(r,t.queryKeys,t.relationalKeys,n),i=an(r),f=dn(o,s,t.documentKey,t.pathKey,t.createdKey,t.updatedKey),u=ln(e,s,t.documentKey,t.pathKey,t.createdKey,t.updatedKey),g=yn(e,s),b=cn(e,t.createdKey,t.updatedKey),h=fn(t,n),m=t.history,v=m?.enabled?sn(s,[t.documentKey,t.pathKey,t.createdKey,t.updatedKey].filter(d=>typeof d=="string"),t.path??"(unknown)",m):null;return {ref:r,documentRef:s,get:a,query:c,aggregate:i,...f,batch:u,transaction:g,bulk:b,...h,...v?{history:v}:{},schema:t.schema,relationalKeys:t.relationalKeys,_systemKeys:[t.documentKey,t.pathKey,t.createdKey,t.updatedKey].filter(d=>typeof d=="string"),_pathKey:t.pathKey??null,_isGroup:!!t.isGroup,_parentKeys:t.isGroup?Er(t.refCb):[],_createdKey:t.createdKey??null}}function Dr(e){let t=[],n=e.replace(/[.*+?^${}()|[\]\\]/g,r=>r===":"?r:`\\${r}`).replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,(r,o)=>(t.push(o),"([^/]+)"));return {pattern:new RegExp(`^${n}$`),paramNames:t}}function Ir(e){let t=e.path??e.url??"/",n=t.indexOf("?");return n===-1?t:t.slice(0,n)}var X=class{constructor(){this.routes=[];this.middlewares=[];this.notFoundHandler=(t,n)=>{n.status(404).send("Not Found");};this.errorHandler=(t,n,r)=>{console.error("[MiniRouter]",t),r.status(500).send("Internal Server Error");};}use(t){return this.middlewares.push(t),this}get(t,n){return this.addRoute("GET",t,n)}post(t,n){return this.addRoute("POST",t,n)}put(t,n){return this.addRoute("PUT",t,n)}patch(t,n){return this.addRoute("PATCH",t,n)}delete(t,n){return this.addRoute("DELETE",t,n)}onNotFound(t){return this.notFoundHandler=t,this}onError(t){return this.errorHandler=t,this}addRoute(t,n,r){let{pattern:o,paramNames:s}=Dr(n);return this.routes.push({method:t.toUpperCase(),pattern:o,paramNames:s,handler:r}),this}async handle(t,n){let r=(t.method??"GET").toUpperCase(),o=Ir(t),s=null,a={};for(let f of this.routes){if(f.method!==r)continue;let u=o.match(f.pattern);if(u){s=f,a={},f.paramNames.forEach((g,b)=>{a[g]=decodeURIComponent(u[b+1]??"");});break}}let c=Object.assign(t,{params:a}),i=s?s.handler:this.notFoundHandler;try{await this.runMiddlewareChain(c,n,i);}catch(f){this.errorHandler(f,t,n);}}async runMiddlewareChain(t,n,r){let o=0,s=async()=>{if(o<this.middlewares.length){let a=this.middlewares[o++];await a(t,n,s);}else await r(t,n);};await s();}};Fe();var ce="__sync_version";var _r=new Set(["ZodOptional","ZodNullable","ZodDefault"]);function jr(e){let t=e,n=false;for(;;){let r=B(t);if(!_r.has(r))break;(r==="ZodOptional"||r==="ZodNullable")&&(n=true);let o=K(t);if(!o)break;t=o;}return {inner:t,nullable:n}}var Fr={ZodString:"string",ZodNumber:"number",ZodBigInt:"bigint",ZodBoolean:"boolean",ZodDate:"timestamp",ZodEnum:"string",ZodNativeEnum:"string",ZodLiteral:"string"};function bn(e,t,n,r,o,s,a,c){for(let[i,f]of Object.entries(e)){let u=n?`${n}__${i}`:i;if(o.has(i)||o.has(u))continue;let{inner:g,nullable:b}=jr(f),h=B(g),m=r||b;if(h==="ZodObject"){let p=J(g);bn(p,t,u,m,o,s,a,c);continue}let v=Fr[h]??"json",d=u===a||i===a,y=s[u]??s[i]??u;c.push({name:y,sqlType:t.mapType(v),nullable:d?false:m,isPrimaryKey:d});}}function et(e,t,n={}){let{primaryKey:r,exclude:o=[],columnMap:s={}}=n,a=new Set(o),c=J(e),i=[];return bn(c,t,"",false,a,s,r,i),i.some(f=>f.name===ce)||i.push({name:ce,sqlType:t.mapType("bigint"),nullable:true,isPrimaryKey:false,description:"Monotonic publish version (Date.now() ms). Internal."}),i}function vn(e){if(e==null)return null;if(typeof e=="object"&&typeof e.toDate=="function")return e.toDate().toISOString();if(e instanceof Date)return e.toISOString();if(Buffer.isBuffer(e))return e.toString("base64");if(e instanceof Uint8Array)return Buffer.from(e).toString("base64");if(typeof e=="object"&&"latitude"in e&&"longitude"in e){let t=e;return JSON.stringify({lat:t.latitude,lng:t.longitude})}return Array.isArray(e)?JSON.stringify(e.map(vn)):e}function xn(e,t,n){for(let[r,o]of Object.entries(e)){let s=t?`${t}__${r}`:r;o!=null&&typeof o=="object"&&!Array.isArray(o)&&!(o instanceof Date)&&!Buffer.isBuffer(o)&&!(o instanceof Uint8Array)&&typeof o.toDate!="function"&&!("latitude"in o&&"longitude"in o)?xn(o,s,n):n[s]=vn(o);}}function Me(e,t){let n=new Set(t?.exclude),r=t?.columnMap??{},o={};xn(e,"",o);let s={};for(let[a,c]of Object.entries(o)){if(n.has(a))continue;let i=a.split("__")[0];if(i!==a&&n.has(i))continue;let f=r[a]??(a.includes("__")?r[a.split("__").pop()]:void 0)??a;s[f]=c;}return s}function ve(e,t){if(process.env.FUNCTIONS_EMULATOR==="true"){let o=process.env.GCLOUD_PROJECT??process.env.GOOGLE_CLOUD_PROJECT??"demo-project",s=process.env.FUNCTION_REGION??"us-central1",a=(process.env.FUNCTION_TARGET??"").replace(/\./g,"-");return `/${o}/${s}/${a}${t}`}let n=process.env.K_SERVICE,r=e.hostname??e.headers?.host??"";return n&&r.includes("cloudfunctions.net")?`/${n.toLowerCase()}${t}`:t}function te(e,t,n){return `<!DOCTYPE html>
2
2
  <html lang="en"><head>
3
3
  <meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
4
4
  <title>${e} \u2014 Sync Admin</title>