@lunora/server 1.0.0-alpha.64 → 1.0.0-alpha.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1929,6 +1929,8 @@ interface QueryArgs {
1929
1929
  cursor?: null | string;
1930
1930
  limit?: number;
1931
1931
  orderBy?: ReadonlyArray<Record<string, unknown>>;
1932
+ /** Per-target-table mask applied to `with`-hydrated children — mirrors `@lunora/shard-engine`'s `RelationMask`. */
1933
+ relationMask?: (table: string, rows: Record<string, unknown>[]) => Record<string, unknown>[];
1932
1934
  where?: unknown;
1933
1935
  with?: Record<string, unknown>;
1934
1936
  }
package/dist/index.d.ts CHANGED
@@ -1929,6 +1929,8 @@ interface QueryArgs {
1929
1929
  cursor?: null | string;
1930
1930
  limit?: number;
1931
1931
  orderBy?: ReadonlyArray<Record<string, unknown>>;
1932
+ /** Per-target-table mask applied to `with`-hydrated children — mirrors `@lunora/shard-engine`'s `RelationMask`. */
1933
+ relationMask?: (table: string, rows: Record<string, unknown>[]) => Record<string, unknown>[];
1932
1934
  where?: unknown;
1933
1935
  with?: Record<string, unknown>;
1934
1936
  }
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{initLunora as t}from"./packem_shared/initLunora-BadfSfpJ.mjs";import{createSecrets as i}from"./packem_shared/createSecrets-CgVPiW2C.mjs";import{LunoraEnvError as f,defineEnv as s,redactSecrets as m}from"./packem_shared/LunoraEnvError-CgpI2Mm_.mjs";import{LunoraError as p}from"./packem_shared/LunoraError-LVhdU0Lo.mjs";import{bindOrm as c,bindTableFacade as l}from"./packem_shared/bindOrm-Bp9hsM2q.mjs";import{httpAction as u,httpRoute as S,httpRouter as g,isSafeHeaderValue as R,serveStorageObject as L}from"./packem_shared/httpAction-BpEJYwzV.mjs";import{defineIdentity as P}from"./packem_shared/defineIdentity-B7gfAgxx.mjs";import{onConnect as A,onDisconnect as I}from"./packem_shared/onConnect-CEtRmUpJ.mjs";import{DEFAULT_LIMIT as y,DEFAULT_MAX_LIMIT as M,clampLimit as _,defineListArgs as D}from"./packem_shared/DEFAULT_LIMIT-yHJ5O96W.mjs";import{defineMigration as k}from"./packem_shared/defineMigration-Bfpwxv2f.mjs";import{defineMutator as C}from"./packem_shared/defineMutator-BgpQ-xUo.mjs";import{c as N,H as O,d as U,a as W,X as w,Z as B,b as H,q as X,K as j,W as q,i as J,m as K}from"./packem_shared/plugin-184MITA3.mjs";import{PRESENCE_DEFAULT_TTL_MS as z,PRESENCE_TABLE as G,definePresence as Q,presenceExtension as Y}from"./packem_shared/PRESENCE_DEFAULT_TTL_MS-Dyb1szd2.mjs";import{protectPublic as ee}from"./packem_shared/protectPublic-BhKewPqm.mjs";import{defineShape as oe}from"./packem_shared/defineShape-Ds8uNqzX.mjs";import{anyApi as ne}from"./types.mjs";import{cronJobs as ae}from"@lunora/scheduler";import{ValidationError as se,v as me}from"@lunora/values";import{allowAll as pe,deny as xe,isDeny as ce,toWhereInput as le}from"./packem_shared/allowAll-BnyNbJZT.mjs";import{asBucketStorage as ue}from"./packem_shared/asBucketStorage-BthCnWop.mjs";import{buildMaskRegistry as ge}from"./packem_shared/buildMaskRegistry-BCIzKxdK.mjs";import{buildRlsReadRegistry as Le,composeShapeReadWhere as he}from"./packem_shared/buildRlsReadRegistry-CE5k6akj.mjs";import{createPolicyDsl as be,definePermission as Ae,definePolicies as Ie,definePolicy as Te,defineRole as ye}from"./packem_shared/createPolicyDsl-sV1swpkD.mjs";import{defineStorageRule as _e,defineStorageRules as De}from"./packem_shared/defineStorageRule-BDu01PUn.mjs";import{mask as ke}from"./packem_shared/mask-Chnz8Z0H.mjs";import{c as Ce}from"./packem_shared/middleware-D9_39C5C.mjs";import{storageRules as Ne}from"./packem_shared/storageRules-6_G8JpCv.mjs";const e="0.0.0";export{y as DEFAULT_LIMIT,M as DEFAULT_MAX_LIMIT,f as LunoraEnvError,p as LunoraError,z as PRESENCE_DEFAULT_TTL_MS,G as PRESENCE_TABLE,e as VERSION,se as ValidationError,pe as allowAll,ne as anyApi,ue as asBucketStorage,c as bindOrm,l as bindTableFacade,ge as buildMaskRegistry,Le as buildRlsReadRegistry,_ as clampLimit,N as composePluginMiddleware,he as composeShapeReadWhere,be as createPolicyDsl,i as createSecrets,ae as cronJobs,O as defineAggregateIndex,U as defineComponent,s as defineEnv,P as defineIdentity,D as defineListArgs,k as defineMigration,C as defineMutator,Ae as definePermission,W as definePlugin,Ie as definePolicies,Te as definePolicy,Q as definePresence,w as defineRankIndex,ye as defineRole,B as defineSchema,H as defineSchemaExtension,oe as defineShape,_e as defineStorageRule,De as defineStorageRules,X as defineTable,j as defineVectorIndex,xe as deny,u as httpAction,S as httpRoute,g as httpRouter,q as indexFieldsFromSchema,t as initLunora,J as installPlugins,ce as isDeny,R as isSafeHeaderValue,ke as mask,K as mergeSchemaExtension,A as onConnect,I as onDisconnect,Y as presenceExtension,ee as protectPublic,m as redactSecrets,Ce as rls,L as serveStorageObject,Ne as storageRules,le as toWhereInput,me as v};
1
+ import{initLunora as t}from"./packem_shared/initLunora-BadfSfpJ.mjs";import{createSecrets as i}from"./packem_shared/createSecrets-CgVPiW2C.mjs";import{LunoraEnvError as f,defineEnv as s,redactSecrets as m}from"./packem_shared/LunoraEnvError-CgpI2Mm_.mjs";import{LunoraError as p}from"./packem_shared/LunoraError-LVhdU0Lo.mjs";import{bindOrm as c,bindTableFacade as l}from"./packem_shared/bindOrm-Bp9hsM2q.mjs";import{httpAction as u,httpRoute as S,httpRouter as g,isSafeHeaderValue as R,serveStorageObject as L}from"./packem_shared/httpAction-BpEJYwzV.mjs";import{defineIdentity as P}from"./packem_shared/defineIdentity-B7gfAgxx.mjs";import{onConnect as A,onDisconnect as I}from"./packem_shared/onConnect-CEtRmUpJ.mjs";import{DEFAULT_LIMIT as y,DEFAULT_MAX_LIMIT as M,clampLimit as _,defineListArgs as D}from"./packem_shared/DEFAULT_LIMIT-yHJ5O96W.mjs";import{defineMigration as k}from"./packem_shared/defineMigration-Bfpwxv2f.mjs";import{defineMutator as C}from"./packem_shared/defineMutator-BgpQ-xUo.mjs";import{c as N,H as O,d as U,a as W,X as w,Z as B,b as H,q as X,K as j,W as q,i as J,m as K}from"./packem_shared/plugin-184MITA3.mjs";import{PRESENCE_DEFAULT_TTL_MS as z,PRESENCE_TABLE as G,definePresence as Q,presenceExtension as Y}from"./packem_shared/PRESENCE_DEFAULT_TTL_MS-Dyb1szd2.mjs";import{protectPublic as ee}from"./packem_shared/protectPublic-BhKewPqm.mjs";import{defineShape as oe}from"./packem_shared/defineShape-Ds8uNqzX.mjs";import{anyApi as ne}from"./types.mjs";import{cronJobs as ae}from"@lunora/scheduler";import{ValidationError as se,v as me}from"@lunora/values";import{allowAll as pe,deny as xe,isDeny as ce,toWhereInput as le}from"./packem_shared/allowAll-BnyNbJZT.mjs";import{asBucketStorage as ue}from"./packem_shared/asBucketStorage-BthCnWop.mjs";import{buildMaskRegistry as ge}from"./packem_shared/buildMaskRegistry-BCIzKxdK.mjs";import{buildRlsReadRegistry as Le,composeShapeReadWhere as he}from"./packem_shared/buildRlsReadRegistry-CE5k6akj.mjs";import{createPolicyDsl as be,definePermission as Ae,definePolicies as Ie,definePolicy as Te,defineRole as ye}from"./packem_shared/createPolicyDsl-sV1swpkD.mjs";import{defineStorageRule as _e,defineStorageRules as De}from"./packem_shared/defineStorageRule-BDu01PUn.mjs";import{mask as ke}from"./packem_shared/mask-CD7SWEvR.mjs";import{c as Ce}from"./packem_shared/middleware-D9_39C5C.mjs";import{storageRules as Ne}from"./packem_shared/storageRules-6_G8JpCv.mjs";const e="0.0.0";export{y as DEFAULT_LIMIT,M as DEFAULT_MAX_LIMIT,f as LunoraEnvError,p as LunoraError,z as PRESENCE_DEFAULT_TTL_MS,G as PRESENCE_TABLE,e as VERSION,se as ValidationError,pe as allowAll,ne as anyApi,ue as asBucketStorage,c as bindOrm,l as bindTableFacade,ge as buildMaskRegistry,Le as buildRlsReadRegistry,_ as clampLimit,N as composePluginMiddleware,he as composeShapeReadWhere,be as createPolicyDsl,i as createSecrets,ae as cronJobs,O as defineAggregateIndex,U as defineComponent,s as defineEnv,P as defineIdentity,D as defineListArgs,k as defineMigration,C as defineMutator,Ae as definePermission,W as definePlugin,Ie as definePolicies,Te as definePolicy,Q as definePresence,w as defineRankIndex,ye as defineRole,B as defineSchema,H as defineSchemaExtension,oe as defineShape,_e as defineStorageRule,De as defineStorageRules,X as defineTable,j as defineVectorIndex,xe as deny,u as httpAction,S as httpRoute,g as httpRouter,q as indexFieldsFromSchema,t as initLunora,J as installPlugins,ce as isDeny,R as isSafeHeaderValue,ke as mask,K as mergeSchemaExtension,A as onConnect,I as onDisconnect,Y as presenceExtension,ee as protectPublic,m as redactSecrets,Ce as rls,L as serveStorageObject,Ne as storageRules,le as toWhereInput,me as v};
@@ -0,0 +1 @@
1
+ import{LunoraError as b}from"./LunoraError-LVhdU0Lo.mjs";import{bindOrm as B,bindTableFacade as W}from"./bindOrm-Bp9hsM2q.mjs";import{T as F,U as R,o as O,L as U}from"./middleware-D9_39C5C.mjs";import{tagMaskMiddleware as j}from"./buildMaskRegistry-BCIzKxdK.mjs";const E=n=>{let i=2166136261;for(let s=0;s<n.length;s+=1)i^=n.codePointAt(s)??0,i=Math.imul(i,16777619);return(i>>>0).toString(16).padStart(8,"0")},_=(n,i,s)=>{try{return n==="redact"?null:n==="hash"?i==null?i:E(typeof i=="string"?i:JSON.stringify(i)):n(i,s)}catch{return null}},f=(n,i,s)=>{const u={...n};for(const[y,h]of Object.entries(i))y in u&&(u[y]=_(h,n[y],{...s,column:y,row:n}));return u},v=(n,i,s)=>({...n,page:n.page.map(u=>f(u,i,s))}),I=(n,i,s,u)=>{if(typeof n!="function")return;const y=new Set,h=()=>new Proxy({},{get:()=>d=>(typeof d=="string"&&y.add(d),h())});n(h());for(const d of y)if(d in i)throw new b("MASK_UNSUPPORTED",`${u}() filtering "${s}" by masked column "${d}" is not supported`)},D=(n,i,s,u)=>{const y=n.rankBefore,h=n.rankPageRows,d=(t,r)=>{const e=i.get(t);return e?r.map(o=>f(o,e,s)):r},p=t=>{const r=t?.relationMask;return{...t,relationMask:r===void 0?d:(e,o)=>r(e,d(e,o))}},g=(t,r,e,o)=>{const a=i.get(t);if(!a)return;const c=u?.[t]?.[o]?.[r];if(!c)return;const l=c.find(T=>T in a);if(l!==void 0)throw new b("MASK_UNSUPPORTED",`${e}() reading "${t}" via index "${r}" would order rows by masked column "${l}" — use an index whose declared fields are all unmasked, or unmask the column`)},m=(t,r,e)=>({async*[Symbol.asyncIterator](){for await(const o of{[Symbol.asyncIterator]:()=>t[Symbol.asyncIterator]()})yield f(o,r,s)},collect:async()=>(await t.collect()).map(o=>f(o,r,s)),collectWithScores:async()=>(await t.collectWithScores()).map(o=>{const a=f(o.document,r,s);return"distanceMeters"in o?{distanceMeters:null,document:a}:{document:a,score:o.score}}),filter:o=>m(t.filter(a=>o(f(a,r,s))),r,e),first:async()=>{const o=await t.first();return o?f(o,r,s):null},order:o=>m(t.order(o),r,e),paginate:async o=>v(await t.paginate(o),r,s),take:async o=>(await t.take(o)).map(a=>f(a,r,s)),unique:async()=>{const o=await t.unique();return o?f(o,r,s):null},withIndex:(o,a)=>(g(e,o,"withIndex","index"),I(a,r,e,"withIndex"),m(t.withIndex(o,a),r,e)),withSearchIndex:(o,a)=>(I(a,r,e,"withSearchIndex"),m(t.withSearchIndex(o,a),r,e)),withGeoIndex:(o,a)=>(g(e,o,"withGeoIndex","geo"),m(t.withGeoIndex(o,a),r,e))}),S=async(t,r)=>{if(n.lookupById){const l=await n.lookupById(t,r);return l?{row:l.row,tableName:i.has(l.tableName)?l.tableName:void 0}:{row:null,tableName:void 0}}const e=await n.get(t,r);if(!e)return{row:null,tableName:void 0};const o=r!==void 0&&i.has(r)?[r]:[],a=r===void 0?[...i.keys()]:o,c=await Promise.all(a.map(async l=>(await n.findFirst(l,{limit:1,where:{_id:t}}))?._id===t?l:void 0));return{row:e,tableName:c.find(l=>l!==void 0)}},k=(t,r,e)=>{const o=i.get(t);if(!o)return;const a=r.find(c=>typeof c=="string"&&c in o);if(a!==void 0)throw new b("MASK_UNSUPPORTED",`${e}() over masked column "${a}" on "${t}" is not supported`)},x=(t,r)=>{if(!(!t||typeof t!="object"||Array.isArray(t)))for(const[e,o]of Object.entries(t))if(e==="AND"||e==="OR"){if(Array.isArray(o))for(const a of o)x(a,r)}else e==="NOT"?x(o,r):e.startsWith("__")||r.add(e)},w=(t,r,e)=>{const o=i.get(t);if(!o||r===void 0)return;const a=new Set;x(r,a);for(const c of a)if(c in o)throw new b("MASK_UNSUPPORTED",`${e}() filtering "${t}" by masked column "${c}" is not supported`)},P=(t,r,e)=>{const o=i.get(t);if(!(!o||!Array.isArray(r))){for(const a of r)if(a&&typeof a=="object"&&!Array.isArray(a)){for(const c of Object.keys(a))if(c in o)throw new b("MASK_UNSUPPORTED",`${e}() ordering "${t}" by masked column "${c}" is not supported`)}}},A=t=>t&&typeof t=="object"&&!Array.isArray(t)?t:void 0,M=(t,r,e)=>{const o=A(r);w(t,o?.where,e),w(t,o?.baseWhere,e)},N={...n,async deleteWhere(t,r,e){if(w(t,r,"deleteMany({ where })"),n.deleteWhere===void 0)throw new b("INTERNAL",`ctx.db.${t}.deleteMany({ where }) is unavailable: this writer has no where-based delete`);return n.deleteWhere(t,r,e)},async patchWhere(t,r,e){if(w(t,r.where,"patchMany({ where })"),n.patchWhere===void 0)throw new b("INTERNAL",`ctx.db.${t}.patchMany({ where }) is unavailable: this writer has no where-based patch`);return n.patchWhere(t,r,e)},aggregate(t,r){return k(t,[r.field],"aggregate"),w(t,r.where,"aggregate"),n.aggregate(t,r)},count(t,r){const e=A(r),o=e&&("where"in e||"baseWhere"in e||"restrictsCounts"in e)?e.where:r;return w(t,o,"count"),e&&w(t,e.baseWhere,"count"),n.count(t,r)},async findFirst(t,r){w(t,r?.where,"findFirst"),w(t,r?.baseWhere,"findFirst"),P(t,r?.orderBy,"findFirst");const e=await n.findFirst(t,p(r)),o=i.get(t);return e&&o?f(e,o,s):e},async findFirstOrThrow(t,r){w(t,r?.where,"findFirstOrThrow"),w(t,r?.baseWhere,"findFirstOrThrow"),P(t,r?.orderBy,"findFirstOrThrow");const e=await n.findFirstOrThrow(t,p(r)),o=i.get(t);return o?f(e,o,s):e},async findMany(t,r){w(t,r?.where,"findMany"),w(t,r?.baseWhere,"findMany"),P(t,r?.orderBy,"findMany");const e=await n.findMany(t,p(r)),o=i.get(t);return o?v(e,o,s):e},async get(t,r){const{row:e,tableName:o}=await S(t,r),a=o===void 0?void 0:i.get(o);return!e||!a?e:f(e,a,s)},async lookupById(t,r){const e=await n.lookupById?.(t,r);if(!e)return null;const o=i.get(e.tableName);return{row:o?f(e.row,o,s):e.row,tableName:e.tableName}},groupBy(t,r){return k(t,[...r.by,r.agg?.field],"groupBy"),w(t,r.where,"groupBy"),n.groupBy(t,r)},query(t){const r=n.query(t),e=i.get(t);return e?m(r,e,t):r},async rank(t,r,e){return M(t,e,"rank"),g(t,r,"rank","rank"),n.rank(t,r,e)},async rankPage(t,r,e){M(t,e,"rankPage"),g(t,r,"rankPage","rank");const o=await n.rankPage(t,r,e),a=i.get(t);return a?v(o,a,s):o},...O("rankBefore",y,t=>(r,e,o)=>(M(r,o,"rankBefore"),g(r,e,"rankBefore","rank"),t(r,e,o))),...O("rankPageRows",h,t=>async(r,e,o)=>{M(r,o,"rankPageRows"),g(r,e,"rankPageRows","rank");const a=await t(r,e,o),c=i.get(r);return c?{...a,rows:a.rows.map(l=>({...l,doc:f(l.doc,c,s)}))}:a})},$=N;for(const t of i.keys())U(n[t])&&($[t]=W(N,t));return N},C=(n,i={})=>{const s=new Map(Object.entries(n)),u=F(i.roles),y=async({ctx:d,next:p})=>{const g={auth:await R(d.auth??{},u),ctx:d};if(i.bypass?.(g))return p();const m=D(d.db,s,g,i.indexFields),S={db:m},{orm:k}=d;return k!==null&&typeof k=="object"&&(S.orm=B(m)),p({ctx:S})},h=new Map;for(const[d,p]of s)h.set(d,new Set(Object.keys(p)));return j(y,{columns:h})};export{C as mask};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/server",
3
- "version": "1.0.0-alpha.64",
3
+ "version": "1.0.0-alpha.65",
4
4
  "description": "Server primitives for Lunora: defineSchema, defineTable, query, mutation, and action",
5
5
  "keywords": [
6
6
  "backend",
@@ -1 +0,0 @@
1
- import{LunoraError as m}from"./LunoraError-LVhdU0Lo.mjs";import{bindOrm as $,bindTableFacade as T}from"./bindOrm-Bp9hsM2q.mjs";import{T as B,U as W,o as v,L as R}from"./middleware-D9_39C5C.mjs";import{tagMaskMiddleware as F}from"./buildMaskRegistry-BCIzKxdK.mjs";const U=n=>{let i=2166136261;for(let s=0;s<n.length;s+=1)i^=n.codePointAt(s)??0,i=Math.imul(i,16777619);return(i>>>0).toString(16).padStart(8,"0")},_=(n,i,s)=>{try{return n==="redact"?null:n==="hash"?i==null?i:U(typeof i=="string"?i:JSON.stringify(i)):n(i,s)}catch{return null}},f=(n,i,s)=>{const u={...n};for(const[y,g]of Object.entries(i))y in u&&(u[y]=_(g,n[y],{...s,column:y,row:n}));return u},N=(n,i,s)=>({...n,page:n.page.map(u=>f(u,i,s))}),A=(n,i,s,u)=>{if(typeof n!="function")return;const y=new Set,g=()=>new Proxy({},{get:()=>c=>(typeof c=="string"&&y.add(c),g())});n(g());for(const c of y)if(c in i)throw new m("MASK_UNSUPPORTED",`${u}() filtering "${s}" by masked column "${c}" is not supported`)},j=(n,i,s,u)=>{const y=n.rankBefore,g=n.rankPageRows,c=(t,r,e,o)=>{const a=i.get(t);if(!a)return;const w=u?.[t]?.[o]?.[r];if(!w)return;const l=w.find(O=>O in a);if(l!==void 0)throw new m("MASK_UNSUPPORTED",`${e}() reading "${t}" via index "${r}" would order rows by masked column "${l}" — use an index whose declared fields are all unmasked, or unmask the column`)},h=(t,r,e)=>({async*[Symbol.asyncIterator](){for await(const o of{[Symbol.asyncIterator]:()=>t[Symbol.asyncIterator]()})yield f(o,r,s)},collect:async()=>(await t.collect()).map(o=>f(o,r,s)),collectWithScores:async()=>(await t.collectWithScores()).map(o=>{const a=f(o.document,r,s);return"distanceMeters"in o?{distanceMeters:null,document:a}:{document:a,score:o.score}}),filter:o=>h(t.filter(a=>o(f(a,r,s))),r,e),first:async()=>{const o=await t.first();return o?f(o,r,s):null},order:o=>h(t.order(o),r,e),paginate:async o=>N(await t.paginate(o),r,s),take:async o=>(await t.take(o)).map(a=>f(a,r,s)),unique:async()=>{const o=await t.unique();return o?f(o,r,s):null},withIndex:(o,a)=>(c(e,o,"withIndex","index"),A(a,r,e,"withIndex"),h(t.withIndex(o,a),r,e)),withSearchIndex:(o,a)=>(A(a,r,e,"withSearchIndex"),h(t.withSearchIndex(o,a),r,e)),withGeoIndex:(o,a)=>(c(e,o,"withGeoIndex","geo"),h(t.withGeoIndex(o,a),r,e))}),k=async(t,r)=>{if(n.lookupById){const l=await n.lookupById(t,r);return l?{row:l.row,tableName:i.has(l.tableName)?l.tableName:void 0}:{row:null,tableName:void 0}}const e=await n.get(t,r);if(!e)return{row:null,tableName:void 0};const o=r!==void 0&&i.has(r)?[r]:[],a=r===void 0?[...i.keys()]:o,w=await Promise.all(a.map(async l=>(await n.findFirst(l,{limit:1,where:{_id:t}}))?._id===t?l:void 0));return{row:e,tableName:w.find(l=>l!==void 0)}},b=(t,r,e)=>{const o=i.get(t);if(!o)return;const a=r.find(w=>typeof w=="string"&&w in o);if(a!==void 0)throw new m("MASK_UNSUPPORTED",`${e}() over masked column "${a}" on "${t}" is not supported`)},p=(t,r)=>{if(!(!t||typeof t!="object"||Array.isArray(t)))for(const[e,o]of Object.entries(t))if(e==="AND"||e==="OR"){if(Array.isArray(o))for(const a of o)p(a,r)}else e==="NOT"?p(o,r):e.startsWith("__")||r.add(e)},d=(t,r,e)=>{const o=i.get(t);if(!o||r===void 0)return;const a=new Set;p(r,a);for(const w of a)if(w in o)throw new m("MASK_UNSUPPORTED",`${e}() filtering "${t}" by masked column "${w}" is not supported`)},x=(t,r,e)=>{const o=i.get(t);if(!(!o||!Array.isArray(r))){for(const a of r)if(a&&typeof a=="object"&&!Array.isArray(a)){for(const w of Object.keys(a))if(w in o)throw new m("MASK_UNSUPPORTED",`${e}() ordering "${t}" by masked column "${w}" is not supported`)}}},P=t=>t&&typeof t=="object"&&!Array.isArray(t)?t:void 0,S=(t,r,e)=>{const o=P(r);d(t,o?.where,e),d(t,o?.baseWhere,e)},M={...n,async deleteWhere(t,r,e){if(d(t,r,"deleteMany({ where })"),n.deleteWhere===void 0)throw new m("INTERNAL",`ctx.db.${t}.deleteMany({ where }) is unavailable: this writer has no where-based delete`);return n.deleteWhere(t,r,e)},async patchWhere(t,r,e){if(d(t,r.where,"patchMany({ where })"),n.patchWhere===void 0)throw new m("INTERNAL",`ctx.db.${t}.patchMany({ where }) is unavailable: this writer has no where-based patch`);return n.patchWhere(t,r,e)},aggregate(t,r){return b(t,[r.field],"aggregate"),d(t,r.where,"aggregate"),n.aggregate(t,r)},count(t,r){const e=P(r),o=e&&("where"in e||"baseWhere"in e||"restrictsCounts"in e)?e.where:r;return d(t,o,"count"),e&&d(t,e.baseWhere,"count"),n.count(t,r)},async findFirst(t,r){d(t,r?.where,"findFirst"),d(t,r?.baseWhere,"findFirst"),x(t,r?.orderBy,"findFirst");const e=await n.findFirst(t,r),o=i.get(t);return e&&o?f(e,o,s):e},async findFirstOrThrow(t,r){d(t,r?.where,"findFirstOrThrow"),d(t,r?.baseWhere,"findFirstOrThrow"),x(t,r?.orderBy,"findFirstOrThrow");const e=await n.findFirstOrThrow(t,r),o=i.get(t);return o?f(e,o,s):e},async findMany(t,r){d(t,r?.where,"findMany"),d(t,r?.baseWhere,"findMany"),x(t,r?.orderBy,"findMany");const e=await n.findMany(t,r),o=i.get(t);return o?N(e,o,s):e},async get(t,r){const{row:e,tableName:o}=await k(t,r),a=o===void 0?void 0:i.get(o);return!e||!a?e:f(e,a,s)},async lookupById(t,r){const e=await n.lookupById?.(t,r);if(!e)return null;const o=i.get(e.tableName);return{row:o?f(e.row,o,s):e.row,tableName:e.tableName}},groupBy(t,r){return b(t,[...r.by,r.agg?.field],"groupBy"),d(t,r.where,"groupBy"),n.groupBy(t,r)},query(t){const r=n.query(t),e=i.get(t);return e?h(r,e,t):r},async rank(t,r,e){return S(t,e,"rank"),c(t,r,"rank","rank"),n.rank(t,r,e)},async rankPage(t,r,e){S(t,e,"rankPage"),c(t,r,"rankPage","rank");const o=await n.rankPage(t,r,e),a=i.get(t);return a?N(o,a,s):o},...v("rankBefore",y,t=>(r,e,o)=>(S(r,o,"rankBefore"),c(r,e,"rankBefore","rank"),t(r,e,o))),...v("rankPageRows",g,t=>async(r,e,o)=>{S(r,o,"rankPageRows"),c(r,e,"rankPageRows","rank");const a=await t(r,e,o),w=i.get(r);return w?{...a,rows:a.rows.map(l=>({...l,doc:f(l.doc,w,s)}))}:a})},I=M;for(const t of i.keys())R(n[t])&&(I[t]=T(M,t));return M},L=(n,i={})=>{const s=new Map(Object.entries(n)),u=B(i.roles),y=async({ctx:c,next:h})=>{const k={auth:await W(c.auth??{},u),ctx:c};if(i.bypass?.(k))return h();const b=j(c.db,s,k,i.indexFields),p={db:b},{orm:d}=c;return d!==null&&typeof d=="object"&&(p.orm=$(b)),h({ctx:p})},g=new Map;for(const[c,h]of s)g.set(c,new Set(Object.keys(h)));return F(y,{columns:g})};export{L as mask};