@querykitjs/prisma-pg 2.0.0 → 2.0.1

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.cts CHANGED
@@ -126,7 +126,7 @@ type AggregateRow = Record<string, unknown>;
126
126
  interface OffsetParams<TDelegate = AnyDelegate> extends QueryParams<TDelegate> {
127
127
  page?: number;
128
128
  perPage?: number;
129
- /** `false` — no count query: `perPage + 1` rows are read, `total_items` / `total_pages` are `null` (task 013). Default `true`. */
129
+ /** `false` — no count query: `perPage + 1` rows are read, `total_items` / `total_pages` are `null`. Default `true`. */
130
130
  withTotal?: boolean;
131
131
  }
132
132
  type OffsetMeta = _querykitjs_core.OffsetMeta;
@@ -239,7 +239,7 @@ interface Repository<TDelegate = AnyDelegate> {
239
239
  /** Update one row by id; returns the updated row (or `undefined`). */
240
240
  updateById(id: Id, patch: Partial<Insert<TDelegate>>, idKey?: FieldKey<TDelegate>): Promise<Row<TDelegate> | undefined>;
241
241
  /**
242
- * Update every row matching the filter in one atomic `updateMany` → `{ count }` (task 013).
242
+ * Update every row matching the filter in one atomic `updateMany` → `{ count }`.
243
243
  * No filter only with `{ all: true }` (the scope still applies); an empty or fully skipped
244
244
  * filter is `QueryKitError` `empty-filter`. The filter passes the request policy like a read.
245
245
  */
@@ -305,11 +305,11 @@ interface FieldMeta {
305
305
  isList: boolean;
306
306
  /** The `@map`ped database column, when it differs from the field name. */
307
307
  dbName?: string;
308
- /** `false` for an optional (nullable) field — Prisma accepts `nulls` in `orderBy` only there (task 021 B11). */
308
+ /** `false` for an optional (nullable) field — Prisma accepts `nulls` in `orderBy` only there. */
309
309
  isRequired?: boolean;
310
- /** The database type (`"Uuid"` for `@db.Uuid`) — from the runtime model when it has one, or the `fields` override (task 021 B8). */
310
+ /** The database type (`"Uuid"` for `@db.Uuid`) — from the runtime model when it has one, or the `fields` override. */
311
311
  nativeType?: string;
312
- /** An enum field's values (from the runtime data model), for the task 021 B8 cast. */
312
+ /** An enum field's values (from the runtime data model), for the cast. */
313
313
  enumValues?: readonly string[];
314
314
  }
315
315
  /** Everything the repository needs to know about one model. */
@@ -377,13 +377,13 @@ interface RegistryOptions {
377
377
  */
378
378
  limits?: Partial<_querykitjs_core.QueryLimits>;
379
379
  /**
380
- * Signs cursor tokens (HMAC-SHA256, task 012). With it a token that was not
380
+ * Signs cursor tokens (HMAC-SHA256). With it a token that was not
381
381
  * issued by this server — or was changed — is `invalid-value`. Without it tokens
382
382
  * are unsigned but still checked (scalar values, v2 shape).
383
383
  */
384
384
  cursorSecret?: string;
385
385
  /**
386
- * The createdAt / deletedAt field names (task 014; default `createdAt`, `deletedAt`): the default
386
+ * The createdAt / deletedAt field names (default `createdAt`, `deletedAt`): the default
387
387
  * sort and the default `sortable` use `createdAt`, soft delete uses `deletedAt`.
388
388
  */
389
389
  timestamps?: {
@@ -406,7 +406,7 @@ interface RegistryOptions {
406
406
  */
407
407
  interface RepositoryOptions<TDelegate = AnyDelegate> {
408
408
  /**
409
- * Relations a client may open with `with` (task 014, R21): relation → `{ columns, filterable?, nested? }`.
409
+ * Relations a client may open with `with` (R21): relation → `{ columns, filterable?, nested? }`.
410
410
  * `columns` is required (a list or `"*"`); an unlisted relation, column, `where` field or nested
411
411
  * `include` is `QueryKitError` `forbidden-key`, `site: "with"`. Without it `with` opens nothing.
412
412
  */
@@ -541,9 +541,9 @@ interface RepoRuntime {
541
541
  onSkippedCondition?: (info: SkippedCondition) => void;
542
542
  /** Registry-level request limits; a repository's own `limits` win. */
543
543
  limits?: Partial<QueryLimits>;
544
- /** Signs cursor tokens (task 012). */
544
+ /** Signs cursor tokens. */
545
545
  cursorSecret?: string;
546
- /** createdAt / deletedAt field names (task 014); default `createdAt`, `deletedAt`. */
546
+ /** createdAt / deletedAt field names; default `createdAt`, `deletedAt`. */
547
547
  timestamps?: {
548
548
  createdAt?: string;
549
549
  deletedAt?: string;
package/dist/index.d.ts CHANGED
@@ -126,7 +126,7 @@ type AggregateRow = Record<string, unknown>;
126
126
  interface OffsetParams<TDelegate = AnyDelegate> extends QueryParams<TDelegate> {
127
127
  page?: number;
128
128
  perPage?: number;
129
- /** `false` — no count query: `perPage + 1` rows are read, `total_items` / `total_pages` are `null` (task 013). Default `true`. */
129
+ /** `false` — no count query: `perPage + 1` rows are read, `total_items` / `total_pages` are `null`. Default `true`. */
130
130
  withTotal?: boolean;
131
131
  }
132
132
  type OffsetMeta = _querykitjs_core.OffsetMeta;
@@ -239,7 +239,7 @@ interface Repository<TDelegate = AnyDelegate> {
239
239
  /** Update one row by id; returns the updated row (or `undefined`). */
240
240
  updateById(id: Id, patch: Partial<Insert<TDelegate>>, idKey?: FieldKey<TDelegate>): Promise<Row<TDelegate> | undefined>;
241
241
  /**
242
- * Update every row matching the filter in one atomic `updateMany` → `{ count }` (task 013).
242
+ * Update every row matching the filter in one atomic `updateMany` → `{ count }`.
243
243
  * No filter only with `{ all: true }` (the scope still applies); an empty or fully skipped
244
244
  * filter is `QueryKitError` `empty-filter`. The filter passes the request policy like a read.
245
245
  */
@@ -305,11 +305,11 @@ interface FieldMeta {
305
305
  isList: boolean;
306
306
  /** The `@map`ped database column, when it differs from the field name. */
307
307
  dbName?: string;
308
- /** `false` for an optional (nullable) field — Prisma accepts `nulls` in `orderBy` only there (task 021 B11). */
308
+ /** `false` for an optional (nullable) field — Prisma accepts `nulls` in `orderBy` only there. */
309
309
  isRequired?: boolean;
310
- /** The database type (`"Uuid"` for `@db.Uuid`) — from the runtime model when it has one, or the `fields` override (task 021 B8). */
310
+ /** The database type (`"Uuid"` for `@db.Uuid`) — from the runtime model when it has one, or the `fields` override. */
311
311
  nativeType?: string;
312
- /** An enum field's values (from the runtime data model), for the task 021 B8 cast. */
312
+ /** An enum field's values (from the runtime data model), for the cast. */
313
313
  enumValues?: readonly string[];
314
314
  }
315
315
  /** Everything the repository needs to know about one model. */
@@ -377,13 +377,13 @@ interface RegistryOptions {
377
377
  */
378
378
  limits?: Partial<_querykitjs_core.QueryLimits>;
379
379
  /**
380
- * Signs cursor tokens (HMAC-SHA256, task 012). With it a token that was not
380
+ * Signs cursor tokens (HMAC-SHA256). With it a token that was not
381
381
  * issued by this server — or was changed — is `invalid-value`. Without it tokens
382
382
  * are unsigned but still checked (scalar values, v2 shape).
383
383
  */
384
384
  cursorSecret?: string;
385
385
  /**
386
- * The createdAt / deletedAt field names (task 014; default `createdAt`, `deletedAt`): the default
386
+ * The createdAt / deletedAt field names (default `createdAt`, `deletedAt`): the default
387
387
  * sort and the default `sortable` use `createdAt`, soft delete uses `deletedAt`.
388
388
  */
389
389
  timestamps?: {
@@ -406,7 +406,7 @@ interface RegistryOptions {
406
406
  */
407
407
  interface RepositoryOptions<TDelegate = AnyDelegate> {
408
408
  /**
409
- * Relations a client may open with `with` (task 014, R21): relation → `{ columns, filterable?, nested? }`.
409
+ * Relations a client may open with `with` (R21): relation → `{ columns, filterable?, nested? }`.
410
410
  * `columns` is required (a list or `"*"`); an unlisted relation, column, `where` field or nested
411
411
  * `include` is `QueryKitError` `forbidden-key`, `site: "with"`. Without it `with` opens nothing.
412
412
  */
@@ -541,9 +541,9 @@ interface RepoRuntime {
541
541
  onSkippedCondition?: (info: SkippedCondition) => void;
542
542
  /** Registry-level request limits; a repository's own `limits` win. */
543
543
  limits?: Partial<QueryLimits>;
544
- /** Signs cursor tokens (task 012). */
544
+ /** Signs cursor tokens. */
545
545
  cursorSecret?: string;
546
- /** createdAt / deletedAt field names (task 014); default `createdAt`, `deletedAt`. */
546
+ /** createdAt / deletedAt field names; default `createdAt`, `deletedAt`. */
547
547
  timestamps?: {
548
548
  createdAt?: string;
549
549
  deletedAt?: string;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {TEXT_FILTER_OPERATORS,DEFAULT_MAX_LIMIT,DEFAULT_MAX_PER_PAGE,DEFAULT_LIMIT,DEFAULT_PER_PAGE,createFilters,QueryKitError}from'@querykitjs/core';export{f}from'@querykitjs/core';import {createContextStore,clampPageSize,decodeCursorToken,cursorPage,clampOffset,infinitePage,clampPage,offsetPageWithoutTotal,offsetMeta,scopeConditions,resolvePolicy,isAllRows,isEmptyFilter,refuseEmptyFilter,checkWith,reportSkip,scopeDefaults,normalizeSort,isRaw}from'@querykitjs/core/internal';function H(e){if(typeof e!="object"||e===null)return false;let t=e;return typeof t.findMany=="function"&&typeof t.findFirst=="function"&&typeof t.count=="function"}function U(e){return Object.keys(e).filter(t=>!t.startsWith("$")&&!t.startsWith("_")&&t!=="constructor"&&H(e[t]))}var Me=e=>e&&e[0].toLowerCase()+e.slice(1),Pe=new Set(["scalar","enum","object","unsupported"]),Oe=e=>typeof e=="string"&&Pe.has(e)?e:"scalar";function We(e,t){let n=e._runtimeDataModel,r=n?.models;if(!r||typeof r!="object")return;let i=Object.keys(r).find(a=>Me(a)===t);if(!i)return;let o=r[i]?.fields;if(!Array.isArray(o))return;let s=[];for(let a of o)typeof a?.name=="string"&&s.push({name:a.name,type:typeof a.type=="string"?a.type:"",kind:Oe(a.kind),isId:a.isId===true,isUpdatedAt:a.isUpdatedAt===true,isList:a.isList===true,...typeof a.dbName=="string"&&a.dbName?{dbName:a.dbName}:{},...Ne(n?.enums,a),...typeof a.isRequired=="boolean"?{isRequired:a.isRequired}:{},...Se(a.nativeType)});return s.length?{name:i,fields:s,primaryKey:r[i]?.primaryKey??null}:void 0}function Ce(e,t){let n=e?.fields;if(!n||typeof n!="object")return;let r=[],i;for(let o of Object.values(n)){let s=o;typeof s.name=="string"&&(typeof s.modelName=="string"&&(i??=s.modelName),r.push({name:s.name,type:typeof s.typeName=="string"?s.typeName:"",kind:s.isEnum===true?"enum":"scalar",isId:s.name==="id",isUpdatedAt:false,isList:s.isList===true}));}return r.length?{name:i??t,fields:r}:void 0}function Z(e,t,n){let r=e[t];if(!H(r)){let g=U(e);throw new Error(`createRegistry: "${t}" is not a model delegate on this Prisma client. Available models: ${g.join(", ")||"(none)"}. Note the key is camelCase \u2014 model "LegalEntity" is "legalEntity".`)}let i=We(e,t)??Ce(r,t),o=n?.length?{name:i?.name??t,fields:Ie(i?.fields??[],n)}:i;if(!o)throw new Error(`createRegistry: could not read field metadata for model "${t}". This adapter reads it from the Prisma client at runtime (\`_runtimeDataModel\`, then \`delegate.fields\`); both were unavailable, which usually means an unsupported @prisma/client version (^6.19 or ^7.10 expected). Pass \`fields\` in the repository options to supply it explicitly.`);let s=new Map,a=new Map;for(let g of o.fields)s.set(g.name,g),g.dbName&&g.dbName!==g.name&&a.set(g.dbName,g.name);for(let g of s.keys())a.delete(g);let p=s.get("id")?.name??[...s.values()].find(g=>g.isId)?.name,f=s.get("updatedAt"),h=o.primaryKey,d=Array.isArray(h?.fields)?h.fields.filter(g=>typeof g=="string"):[],c=p?[p]:d.filter(g=>s.has(g)),R=p?void 0:(typeof h?.name=="string"&&h.name?h.name:c.join("_"))||void 0;return {name:o.name,fields:s,byDbName:a,primaryKey:c,primaryKeyName:R,idField:p,hasDeletedAt:s.has("deletedAt"),stampUpdatedAt:f&&!f.isUpdatedAt?f.name:void 0,hasCreatedAt:s.has("createdAt")}}function x(e,t){return t==="id"?e.fields.has("id")?"id":e.idField:e.fields.has(t)?t:e.byDbName.get(t)}function J(e,t){return e.fields.get(t)}function Ee(e,t){return e.fields.get(t)?.type==="DateTime"}function Y(e,t){return e.fields.get(t)?.type==="String"}function ee(e,t,n){if(!Ee(e,t)||n==null||n instanceof Date||typeof n!="string"&&typeof n!="number")return n;let r=new Date(n);return Number.isNaN(r.getTime())?n:r}function Ne(e,t){if(t.kind!=="enum"||typeof t.type!="string")return {};let n=e?.[t.type]?.values?.map(r=>r.name).filter(r=>typeof r=="string");return n&&n.length>0?{enumValues:n}:{}}function Ie(e,t){let n=new Map(t.map(o=>[o.name,o])),r=e.map(o=>({...o,...n.get(o.name)})),i=new Set(e.map(o=>o.name));for(let o of t)i.has(o.name)||r.push({type:"",kind:"scalar",isId:false,isUpdatedAt:false,isList:false,...o});return r}function Se(e){let t=Array.isArray(e)?e[0]:e;return typeof t=="string"&&t?{nativeType:t}:{}}function te(e,t,n,r=e.hasCreatedAt?"createdAt":void 0){let i=[];for(let{key:o,direction:s}of normalizeSort(t,n)){let a=x(e,o);a?i.push({[a]:e.fields.get(a)?.isRequired===false?{sort:s,nulls:s==="asc"?"first":"last"}:s}):reportSkip(n,{site:"sort",key:o,reason:"unknown-key"});}return i.length>0?i:r?[{[r]:"desc"}]:e.idField?[{[e.idField]:"desc"}]:[]}function V(e){return Object.entries(e).filter(([,t])=>t).map(([t])=>t)}function q(e,t){if(e.forcedKeys)return e.forcedKeys;let n=t?V(t):[];if(!e.allowed)return n.length>0?n:void 0;let r=n.filter(i=>e.allowed.has(i));return r.length>0?r:[...e.allowed]}function ne(e,t,n,r,i=[]){let o={};if(r)for(let[h,d]of Object.entries(r))d&&(o[h]=d);let s=Object.keys(o).length>0,a=q(t,n),p={};if(a)for(let h of [...a,...i]){let d=x(e,h);d&&(p[d]=true);}return Object.keys(p).length>0?s?{select:{...p,...o}}:{select:p}:s?{include:o}:{}}var re=new Set(TEXT_FILTER_OPERATORS),T=Symbol("querykit.invalid-value"),oe=e=>re.has(e),_e=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function E(e,t,n){if(n==null)return n;let r=J(e,t)?.type;if(r==="DateTime"){if(n instanceof Date)return Number.isNaN(n.getTime())?T:n;let o=ee(e,t,n);return o instanceof Date?Number.isNaN(o.getTime())?T:o:T}if(r==="Int"||r==="BigInt"){if(typeof n=="number")return Number.isInteger(n)?n:T;if(typeof n=="bigint")return n;if(typeof n=="string"&&n.trim()!==""){let o=Number(n);return Number.isInteger(o)?o:T}return T}if(r==="Float"||r==="Decimal"){if(typeof n=="number")return Number.isFinite(n)?n:T;if(typeof n=="string"&&n.trim()!==""){let o=Number(n);return Number.isFinite(o)?o:T}return T}if(r==="Boolean")return typeof n=="boolean"?n:n==="true"||n==="1"||n===1?true:n==="false"||n==="0"||n===0?false:T;if(e.fields.get(t)?.nativeType==="Uuid")return typeof n=="string"&&_e.test(n)?n:T;let i=e.fields.get(t)?.enumValues;return i?typeof n=="string"&&i.includes(n)?n:T:n}function ie(e,t,n,r){if(r===void 0||re.has(n))return r;if(Array.isArray(r)){let o=[];for(let s of r){let a=E(e,t,s);if(a===T)return T;o.push(a);}return o}let i=E(e,t,r);return i===T?T:i}var Q=e=>typeof e?.buildFor=="function",W=e=>String(e??""),se=e=>Array.isArray(e)&&e.length===2?[e[0],e[1]]:void 0,P=(e,t)=>t.isString?{...e,mode:"insensitive"}:e;function v(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r==="\\"){let i=e[n+1];if(i===void 0)return;t.push({kind:"lit",char:i}),n++;continue}r==="%"?t.push({kind:"any",char:"%"}):r==="_"?t.push({kind:"one",char:"_"}):t.push({kind:"lit",char:r});}return t}var ae=e=>e.map(t=>t.kind==="lit"&&(t.char==="%"||t.char==="_"||t.char==="\\")?`\\${t.char}`:t.char).join("");function Be(e){let t=v(e);if(!t)return;let n=0,r=t.length,i=false,o=false;for(;n<r&&t[n].kind==="any";)i=true,n++;for(;r>n&&t[r-1].kind==="any";)o=true,r--;let s=t.slice(n,r);if(s.some(f=>f.kind!=="lit"))return;let a=s.map(f=>f.char).join(""),p=i&&o?"contains":i?"endsWith":o?"startsWith":"equals";if(!(p!=="equals"&&/[%_]/.test(a)))return {op:p,value:a}}function Ue(e,t,n){let r=v(e);if(!r)return;let i=s=>n?P(s,t):s,o=ae(r);return {buildFor(s){if(r[r.length-1]?.kind==="any")return {[s]:i({startsWith:o.replace(/%$/,"")})};let a=r.map(p=>p.kind).lastIndexOf("any");if(a>=0){let p=ae(r.slice(a+1));return {AND:[{[s]:i({startsWith:o})},{[s]:i({endsWith:p})}]}}return {AND:[{[s]:i({startsWith:o})},{NOT:{[s]:i({startsWith:`${o}_`})}}]}}}}var $=(e,t,n)=>{let r=W(e);if(v(r)?.some(o=>o.kind==="one"))return;let i=Be(r);if(i){let o={[i.op]:i.value};return n?P(o,t):o}return Ue(r,t,n)},de={"=":e=>({equals:e}),eq:e=>({equals:e}),"!=":e=>({not:e}),ne:e=>({not:e}),">":e=>({gt:e}),gt:e=>({gt:e}),">=":e=>({gte:e}),gte:e=>({gte:e}),"<":e=>({lt:e}),lt:e=>({lt:e}),"<=":e=>({lte:e}),lte:e=>({lte:e}),contains:(e,t)=>P({contains:W(e)},t),"%_%":(e,t)=>P({contains:W(e)},t),startsWith:(e,t)=>P({startsWith:W(e)},t),"%_":(e,t)=>P({startsWith:W(e)},t),endsWith:(e,t)=>P({endsWith:W(e)},t),"_%":(e,t)=>P({endsWith:W(e)},t),like:(e,t)=>$(e,t,false),ilike:(e,t)=>$(e,t,true),notLike:(e,t)=>{let n=$(e,t,false);if(n)return Q(n)?{buildFor:r=>({NOT:n.buildFor(r)})}:{not:n}},in:e=>Array.isArray(e)?{in:e}:void 0,notIn:e=>Array.isArray(e)?{notIn:e}:void 0,between:e=>{let t=se(e);return t?{gte:t[0],lte:t[1]}:void 0},notBetween:e=>{let t=se(e);if(t)return {buildFor:n=>({NOT:{[n]:{gte:t[0],lte:t[1]}}})}},isNull:()=>({equals:null}),isNotNull:()=>({not:null})};var ue=e=>typeof e=="object"&&e!==null,$e=e=>ue(e)&&"key"in e&&!("and"in e)&&!("or"in e)&&!("not"in e);function S(e,t){let n=t.filter(r=>r!==void 0);if(n.length!==0)return n.length===1?n[0]:{[e]:n}}function Qe(e,t,n){let r=t.operation??"=",i=de[r];if(!i)throw new Error(`Unsupported filter operator: "${r}"`);let o=x(e,t.key);if(!o){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"unknown-key"});return}let s=Y(e,o);if(oe(r)&&!s){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"invalid-value"});return}let a=ie(e,o,r,t.value);if(a===T){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"invalid-value"});return}let p=i(a,{isString:s});if(p===void 0){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"invalid-value"});return}return Q(p)?p.buildFor(o):{[o]:p}}function N(e,t,n){if($e(t))return Qe(e,t,n);if(ue(t)){if("and"in t)return S("AND",t.and.map(r=>N(e,r,n)));if("or"in t)return S("OR",t.or.map(r=>N(e,r,n)));if("not"in t){let r=N(e,t.not,n);return r?{NOT:r}:void 0}if(isRaw(t))return t;throw new QueryKitError({source:e.name,site:"filter",key:Object.keys(t)[0]??"",reason:"forbidden-key"})}}function j(e,t,n){if(t!==void 0)return Array.isArray(t)?S("AND",t.map(r=>N(e,r,n))):N(e,t,n)}function K(e){return S("AND",e)}function fe(e,t,n){let r=Z(e.baseClient,t,n.fields),i=()=>e.getExecutor()[t],o={source:r.name,strict:e.strict,onSkipped:e.onSkippedCondition},s=x(r,e.timestamps?.deletedAt??"deletedAt"),a=x(r,e.timestamps?.createdAt??"createdAt"),p=w=>te(r,w,o,a),f=w=>checkWith(w,n.relations,Ye,o.source),h=Ze(r,n),d=et(r,n,e.limits,a),c=(w,b)=>K([w,h,s&&!b?{[s]:null}:void 0]),R=(w,b)=>c(j(r,w,o),b),g=(w,b)=>{if(isAllRows(w))return c(void 0);isEmptyFilter(w)&&refuseEmptyFilter(o.source,b),d.checkFilter(w);let A=j(r,w,o);return A===void 0?refuseEmptyFilter(o.source,b):c(A)},D=(w,b,A)=>{if(!x(r,b))throw new QueryKitError({source:r.name,site:"filter",key:b,reason:"unknown-key"});let C={key:b,operation:"=",value:A};return w?Array.isArray(w)?[...w,C]:{and:[w,C]}:[C]},F=Je(n),{forcedKeys:u,allowed:l}=F;return {runtime:e,meta:r,diag:o,delegate:i,guard:F,policy:d,guarded:!!(u??l),permits:w=>u?u.includes(w):l?l.has(w):true,projection:(w,b,A)=>ne(r,F,w,b,A),deletedAtField:s,createdAtField:a,sortBy:p,withOf:f,composeWhere:R,mutationWhere:g,withId:D,countWhere:w=>i().count({where:w})}}var M=e=>e===void 0?[]:Array.isArray(e)?e:[e];function Ze(e,t){let n=scopeConditions(t.scope);for(let r of n)if(!x(e,r.key))throw new QueryKitError({source:e.name,site:"filter",key:r.key,reason:"unknown-key"});return n.length?j(e,n):void 0}function Je(e){let t=e.forcedColumns?V(e.forcedColumns):void 0;if(e.forcedColumns&&t.length===0)throw new Error("buildRepository: forcedColumns must select at least one field (an empty selection would return the full row).");let n=e.allowedColumns?new Set(e.allowedColumns):void 0;if(e.allowedColumns&&n.size===0)throw new Error("buildRepository: allowedColumns must list at least one field (an empty allowlist would return the full row).");return {forcedKeys:t,allowed:n}}var Ye={columns:"select",nested:"include",filters:["where"],logical:["AND","OR","NOT"],paging:["take","skip"],orderBy:"orderBy"};function et(e,t,n,r){let i=o=>{let s=o.indexOf(".");return s<0?x(e,o):e.fields.get(o.slice(0,s))?.kind==="object"?o:void 0};return resolvePolicy({source:e.name,fieldOf:i,primaryKey:e.idField??"id",createdAt:r,filterable:t.filterable,sortable:t.sortable,allowedColumns:t.allowedColumns,forcedColumns:t.forcedColumns,limits:{...n,...t.limits}})}function ge(e){let t={};for(let[n,r]of Object.entries(e)){if(!n.startsWith("_")){t[n]=r;continue}if(n==="_count"){typeof r=="number"&&(t.count=r);continue}let i=n.slice(1);for(let[o,s]of Object.entries(r??{}))s!==void 0&&(t[`${i}_${o}`]=s);}return t}function pe(e){let{meta:t,diag:n,delegate:r,permits:i,policy:o,composeWhere:s}=e,a=f=>{let h=i(f)?x(t,f):void 0;return h||reportSkip(n,{site:"aggregate",key:f,reason:"unknown-key"}),h},p=f=>{let h={};for(let d of f){let c=a(d);c&&(h[c]=true);}return Object.keys(h).length?h:void 0};return {async aggregate(f){o.checkFilter(f.filter);for(let F of [f.groupBy,f.sum,f.avg,f.min,f.max].flatMap(u=>M(u)))o.checkAggregateKey(F);let h=M(f.groupBy).map(a).filter(F=>!!F),d=p(M(f.sum)),c=p(M(f.avg)),R=p(M(f.min)),g=p(M(f.max)),D={where:s(f.filter,f.withDeleted)};return f.count&&(D._count=true),d&&(D._sum=d),c&&(D._avg=c),R&&(D._min=R),g&&(D._max=g),h.length>0?(await r().groupBy({...D,by:h})).map(ge):[ge(await r().aggregate(D))]}}}function me(e){let{runtime:t,meta:n,diag:r,delegate:i,guard:o,guarded:s,permits:a,projection:p,policy:f,withOf:h,composeWhere:d}=e;return {async findCursor(c={}){let R=clampPageSize(c.limit,t.defaultLimit,t.maxLimit),g=c.cursorKey??"id";f.checkFilter(c.filter),c.cursorKey!==void 0&&f.checkCursorKey(g);let D=c.order??"asc",F=c.direction??"forward",u=x(n,g);if(!u)throw new QueryKitError({source:r.source,site:"cursorKey",key:g,reason:"unknown-key"});let l=n.idField??"id",y=await decodeCursorToken(c.cursor,{source:r.source,secret:t.cursorSecret,key:g}),m=y===void 0?void 0:E(n,u,y.k),k=y===void 0?void 0:E(n,l,y.id);if(m===T||k===T)throw new QueryKitError({source:r.source,site:"cursorKey",key:g,reason:"invalid-value"});let w=d(c.filter,c.withDeleted),b=F==="forward"?D==="asc":D==="desc",A=b?"gt":"lt",C=u!==l,xe=y===void 0?void 0:C?{OR:[{[u]:{[A]:m}},{AND:[{[u]:{equals:m}},{[l]:{[A]:k}}]}]}:{[u]:{[A]:m}},Fe=K([w,xe]),_=q(o,c.columns),X=_===void 0?[]:[u,l].filter(O=>s&&(!a(O)||!_.includes(O))||O===l&&O!==u&&!_.includes(O)),be=await i().findMany({where:Fe,orderBy:C?[{[u]:b?"asc":"desc"},{[l]:b?"asc":"desc"}]:[{[u]:b?"asc":"desc"}],take:R+1,...p(c.columns,h(c.with),[u,l])}),B=await cursorPage(be,{limit:R,direction:F,hasCursor:y!==void 0,cursorField:u,idField:l,secret:t.cursorSecret});return X.length>0&&(B.data=B.data.map(O=>Object.fromEntries(Object.entries(O).filter(([Ae])=>!X.includes(Ae))))),B}}}function G(e,t){if(e.primaryKey.length===0)throw new Error(`${t}: model "${e.name}" has no primary key, so a row cannot be addressed individually. Use updateWhere/deleteWhere with an explicit filter instead.`);return e.primaryKey}var we=e=>Object.fromEntries(e.map(t=>[t,true]));function z(e,t,n){return t.length===1?{[t[0]]:n[t[0]]}:{[e.primaryKeyName??t.join("_")]:Object.fromEntries(t.map(r=>[r,n[r]]))}}var ke=1e3;function Re(e,t){let{runtime:n,meta:r,delegate:i,deletedAtField:o,createdAtField:s,composeWhere:a,mutationWhere:p,withId:f}=e,h=u=>clampPageSize(u.limit,n.defaultLimit,n.maxLimit),d=u=>({...scopeDefaults(t.scope),...u,...scopeDefaults(t.scope)}),c=u=>{let l={...u};return r.stampUpdatedAt&&(l[r.stampUpdatedAt]=new Date),l},R=(u,l)=>{let y=u.map(m=>{let k=x(r,m);if(!k)throw new Error(`upsert: unknown target field "${m}".`);return k});return y.length===1?{[y[0]]:l[y[0]]}:{[y.join("_")]:Object.fromEntries(y.map(m=>[m,l[m]]))}},g=(u,l)=>{let y=new Set([...l,s??"createdAt"]),m={};for(let[k,w]of Object.entries(u))y.has(k)||(m[k]=w);return c(m)},D=async(u,l,y)=>{let m=d(u),k=l.set?c(l.set):g(m,y);return await i().upsert({where:R(y,m),create:m,update:k})},F=async(u,l,y)=>{let m=G(r,y),k=i(),w=await k.findFirst({where:u,select:we(m)});if(w)return await k.update({where:z(r,m,w),data:l})};return {async create(u){return await i().create({data:d(u)})},async createMany(u){if(u.length===0)return [];let l=u.map(k=>d(k)),y=i();if(typeof y.createManyAndReturn=="function")return await y.createManyAndReturn({data:l});let m=[];for(let k of l)m.push(await y.create({data:k}));return m},upsert(u,l){return D(u,l,M(l.target))},async upsertMany(u,l){if(u.length===0)return [];let y=M(l.target),m=[];for(let k=0;k<u.length;k+=ke)for(let w of u.slice(k,k+ke))m.push(await D(w,l,y));return m},async updateById(u,l,y="id"){return F(a(f(void 0,y,u)),c(l),"updateById")},async updateWhere(u,l,y={}){let m=p(u,"updateWhere"),k=c(l);if(!y.returning)return {count:(await i().updateMany({where:m,data:k})).count};let w=await i().updateManyAndReturn({where:m,data:k});return {count:w.length,rows:w.slice(0,h(y.returning))}},async deleteById(u,l="id"){let y=G(r,"deleteById"),m=i(),k=await m.findFirst({where:a(f(void 0,l,u))});if(k)return await m.delete({where:z(r,y,k)})},async deleteWhere(u,l={}){let y=p(u,"deleteWhere"),m=l.returning?await i().findMany({where:y,take:h(l.returning)}):void 0,{count:k}=await i().deleteMany({where:y});return m?{count:k,rows:m}:{count:k}},async softDelete(u,l="id"){if(!o)throw new Error("softDelete: model has no deletedAt field.");return F(a(f(void 0,l,u),false),c({[o]:new Date}),"softDelete")},async restore(u,l="id"){if(!o)throw new Error("restore: model has no deletedAt field.");return F(a(f(void 0,l,u),true),c({[o]:null}),"restore")}}}function De(e){let{runtime:t,delegate:n,projection:r,policy:i,sortBy:o,withOf:s,composeWhere:a,withId:p,countWhere:f}=e,h=d=>{i.checkFilter(d.filter),i.checkSort(d.sort);};return {async findAll(d={}){return h(d),await n().findMany({where:a(d.filter,d.withDeleted),orderBy:o(d.sort),...r(d.columns,s(d.with))})},async findOne(d={}){return h(d),await n().findFirst({where:a(d.filter,d.withDeleted),orderBy:o(d.sort),...r(d.columns,s(d.with))})??void 0},async findById(d,c={}){let{idKey:R="id",filter:g}=c;return i.checkFilter(g),await n().findFirst({where:a(p(g,R,d),c.withDeleted),...r(c.columns,s(c.with))})??void 0},async findList(d={}){h(d);let c=clampPage(d.page),R=clampPageSize(d.perPage,t.defaultPerPage,t.maxPerPage);i.checkPage({page:c,perPage:R});let g=a(d.filter,d.withDeleted),D=l=>n().findMany({where:g,orderBy:o(d.sort),take:l,skip:(c-1)*R,...r(d.columns,s(d.with))});if(d.withTotal===false)return offsetPageWithoutTotal(await D(R+1),c,R);let[F,u]=await Promise.all([D(R),f(g)]);return {data:F,meta:offsetMeta(c,R,u)}},async findInfinite(d={}){let c=clampPageSize(d.limit,t.defaultLimit,t.maxLimit),R=clampOffset(d.offset);h(d),i.checkPage({offset:R});let g=await n().findMany({where:a(d.filter,d.withDeleted),orderBy:o(d.sort),take:c+1,skip:R,...r(d.columns,s(d.with))});return infinitePage(g,c,R)},async count(d){return i.checkFilter(d),f(a(d))},async exists(d){return i.checkFilter(d),await f(a(d))>0}}}function L(e,t,n={}){let r=fe(e,t,n);return {get delegate(){return r.delegate()},...De(r),...me(r),...Re(r,n),...pe(r),scoped(o){return L(e,t,{...n,scope:{...n.scope,...o}})}}}function mt(e,t){if(typeof t=="string")return t;let n=U(e),r=n.find(i=>e[i]===t);if(!r)throw new Error(`createRegistry: the given delegate does not belong to this Prisma client. Pass a model from the same client you passed to createRegistry (available: ${n.join(", ")||"(none)"}), or use its name, e.g. repository("user").`);return r}function wt(e,t={}){let n=createContextStore(),r={baseClient:e,getExecutor:()=>n.get()?.executor??e,defaultPerPage:t.defaultPerPage??DEFAULT_PER_PAGE,defaultLimit:t.defaultLimit??DEFAULT_LIMIT,maxPerPage:t.maxPerPage??DEFAULT_MAX_PER_PAGE,maxLimit:t.maxLimit??DEFAULT_MAX_LIMIT,strict:t.strict??false,onSkippedCondition:t.onSkippedCondition,limits:t.limits,cursorSecret:t.cursorSecret,timestamps:t.timestamps};function i(s,a,p){let f=typeof a=="function"?void 0:a,h=typeof a=="function"?a:p,d=L(r,mt(e,s),f);return h?{...d,...h(d)}:d}return {client:e,repository:i,transaction:s=>n.get()?.executor?s():e.$transaction(a=>n.run({executor:a},s))}}function Rt(){return createFilters()}export{L as buildRepository,Rt as createFilters,wt as createRegistry};//# sourceMappingURL=index.js.map
1
+ import {TEXT_FILTER_OPERATORS,DEFAULT_MAX_LIMIT,DEFAULT_MAX_PER_PAGE,DEFAULT_LIMIT,DEFAULT_PER_PAGE,createFilters,QueryKitError}from'@querykitjs/core';export{f}from'@querykitjs/core';import {createContextStore,clampPageSize,decodeCursorToken,cursorPage,clampOffset,infinitePage,clampPage,offsetPageWithoutTotal,offsetMeta,scopeConditions,resolvePolicy,isAllRows,isEmptyFilter,refuseEmptyFilter,checkWith,reportSkip,scopeDefaults,normalizeSort,isRaw}from'@querykitjs/core/internal';function J(e){if(typeof e!="object"||e===null)return false;let t=e;return typeof t.findMany=="function"&&typeof t.findFirst=="function"&&typeof t.count=="function"}function V(e){return Object.keys(e).filter(t=>!t.startsWith("$")&&!t.startsWith("_")&&t!=="constructor"&&J(e[t]))}var Oe=e=>e&&e[0].toLowerCase()+e.slice(1),Pe=new Set(["scalar","enum","object","unsupported"]),We=e=>typeof e=="string"&&Pe.has(e)?e:"scalar";function Ce(e,t){let n=e._runtimeDataModel,r=n?.models;if(!r||typeof r!="object")return;let i=Object.keys(r).find(d=>Oe(d)===t);if(!i)return;let o=r[i]?.fields;if(!Array.isArray(o))return;let a=[];for(let d of o)typeof d?.name=="string"&&a.push({name:d.name,type:typeof d.type=="string"?d.type:"",kind:We(d.kind),isId:d.isId===true,isUpdatedAt:d.isUpdatedAt===true,isList:d.isList===true,...typeof d.dbName=="string"&&d.dbName?{dbName:d.dbName}:{},...Se(n?.enums,d),...typeof d.isRequired=="boolean"?{isRequired:d.isRequired}:{},...je(d.nativeType)});return a.length?{name:i,fields:a,primaryKey:r[i]?.primaryKey??null}:void 0}function Ee(e,t){let n=e?.fields;if(!n||typeof n!="object")return;let r=[],i;for(let o of Object.values(n)){let a=o;typeof a.name=="string"&&(typeof a.modelName=="string"&&(i??=a.modelName),r.push({name:a.name,type:typeof a.typeName=="string"?a.typeName:"",kind:a.isEnum===true?"enum":"scalar",isId:a.name==="id",isUpdatedAt:false,isList:a.isList===true}));}return r.length?{name:i??t,fields:r}:void 0}function Y(e,t,n){let r=e[t];if(!J(r)){let g=V(e);throw new Error(`createRegistry: "${t}" is not a model delegate on this Prisma client. Available models: ${g.join(", ")||"(none)"}. Note the key is camelCase \u2014 model "LegalEntity" is "legalEntity".`)}let i=Ce(e,t)??Ee(r,t),o=n?.length?{name:i?.name??t,fields:Ie(i?.fields??[],n)}:i;if(!o)throw new Error(`createRegistry: could not read field metadata for model "${t}". This adapter reads it from the Prisma client at runtime (\`_runtimeDataModel\`, then \`delegate.fields\`); both were unavailable, which usually means an unsupported @prisma/client version (^6.19 or ^7.10 expected). Pass \`fields\` in the repository options to supply it explicitly.`);let a=new Map,d=new Map;for(let g of o.fields)a.set(g.name,g),g.dbName&&g.dbName!==g.name&&d.set(g.dbName,g.name);for(let g of a.keys())d.delete(g);let c=a.get("id")?.name??[...a.values()].find(g=>g.isId)?.name,f=a.get("updatedAt"),m=o.primaryKey,k=Array.isArray(m?.fields)?m.fields.filter(g=>typeof g=="string"):[],s=c?[c]:k.filter(g=>a.has(g)),R=c?void 0:(typeof m?.name=="string"&&m.name?m.name:s.join("_"))||void 0;return {name:o.name,fields:a,byDbName:d,primaryKey:s,primaryKeyName:R,idField:c,hasDeletedAt:a.has("deletedAt"),stampUpdatedAt:f&&!f.isUpdatedAt?f.name:void 0,hasCreatedAt:a.has("createdAt")}}function x(e,t){return t==="id"?e.fields.has("id")?"id":e.idField:e.fields.has(t)?t:e.byDbName.get(t)}function ee(e,t){return e.fields.get(t)}function Ne(e,t){return e.fields.get(t)?.type==="DateTime"}function te(e,t){return e.fields.get(t)?.type==="String"}function ne(e,t,n){if(!Ne(e,t)||n==null||n instanceof Date||typeof n!="string"&&typeof n!="number")return n;let r=new Date(n);return Number.isNaN(r.getTime())?n:r}function Se(e,t){if(t.kind!=="enum"||typeof t.type!="string")return {};let n=e?.[t.type]?.values?.map(r=>r.name).filter(r=>typeof r=="string");return n&&n.length>0?{enumValues:n}:{}}function Ie(e,t){let n=new Map(t.map(o=>[o.name,o])),r=e.map(o=>({...o,...n.get(o.name)})),i=new Set(e.map(o=>o.name));for(let o of t)i.has(o.name)||r.push({type:"",kind:"scalar",isId:false,isUpdatedAt:false,isList:false,...o});return r}function je(e){let t=Array.isArray(e)?e[0]:e;return typeof t=="string"&&t?{nativeType:t}:{}}function q(e,t,n,r=e.hasCreatedAt?"createdAt":void 0){let i=[];for(let{key:o,direction:a}of normalizeSort(t,n)){let d=x(e,o);d?i.push({[d]:e.fields.get(d)?.isRequired===false?{sort:a,nulls:a==="asc"?"first":"last"}:a}):reportSkip(n,{site:"sort",key:o,reason:"unknown-key"});}return i.length>0?i:r?[{[r]:"desc"}]:e.idField?[{[e.idField]:"desc"}]:[]}function re(e,t,n,r){let i=q(e,t,n,r),o=i[0]&&Object.values(i[0])[0],a=(typeof o=="object"?o.sort:o)==="asc"?"asc":"desc",d=new Set(i.flatMap(c=>Object.keys(c)));return [...i,...e.primaryKey.filter(c=>!d.has(c)).map(c=>({[c]:a}))]}function $(e){return Object.entries(e).filter(([,t])=>t).map(([t])=>t)}function Q(e,t){if(e.forcedKeys)return e.forcedKeys;let n=t?$(t):[];if(!e.allowed)return n.length>0?n:void 0;let r=n.filter(i=>e.allowed.has(i));return r.length>0?r:[...e.allowed]}function oe(e,t,n,r,i=[]){let o={};if(r)for(let[m,k]of Object.entries(r))k&&(o[m]=k);let a=Object.keys(o).length>0,d=Q(t,n),c={};if(d)for(let m of [...d,...i]){let k=x(e,m);k&&(c[k]=true);}return Object.keys(c).length>0?a?{select:{...c,...o}}:{select:c}:a?{include:o}:{}}var ie=new Set(TEXT_FILTER_OPERATORS),D=Symbol("querykit.invalid-value"),se=e=>ie.has(e),_e=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function N(e,t,n){if(n==null)return n;let r=ee(e,t)?.type;if(r==="DateTime"){if(n instanceof Date)return Number.isNaN(n.getTime())?D:n;let o=ne(e,t,n);return o instanceof Date?Number.isNaN(o.getTime())?D:o:D}if(r==="Int"||r==="BigInt"){if(typeof n=="number")return Number.isInteger(n)?n:D;if(typeof n=="bigint")return n;if(typeof n=="string"&&n.trim()!==""){let o=Number(n);return Number.isInteger(o)?o:D}return D}if(r==="Float"||r==="Decimal"){if(typeof n=="number")return Number.isFinite(n)?n:D;if(typeof n=="string"&&n.trim()!==""){let o=Number(n);return Number.isFinite(o)?o:D}return D}if(r==="Boolean")return typeof n=="boolean"?n:n==="true"||n==="1"||n===1?true:n==="false"||n==="0"||n===0?false:D;if(e.fields.get(t)?.nativeType==="Uuid")return typeof n=="string"&&_e.test(n)?n:D;let i=e.fields.get(t)?.enumValues;return i?typeof n=="string"&&i.includes(n)?n:D:n}function ae(e,t,n,r){if(r===void 0||ie.has(n))return r;if(Array.isArray(r)){let o=[];for(let a of r){let d=N(e,t,a);if(d===D)return D;o.push(d);}return o}let i=N(e,t,r);return i===D?D:i}var G=e=>typeof e?.buildFor=="function",C=e=>String(e??""),de=e=>Array.isArray(e)&&e.length===2?[e[0],e[1]]:void 0,P=(e,t)=>t.isString?{...e,mode:"insensitive"}:e;function z(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r==="\\"){let i=e[n+1];if(i===void 0)return;t.push({kind:"lit",char:i}),n++;continue}r==="%"?t.push({kind:"any",char:"%"}):r==="_"?t.push({kind:"one",char:"_"}):t.push({kind:"lit",char:r});}return t}var ue=e=>e.map(t=>t.kind==="lit"&&(t.char==="%"||t.char==="_"||t.char==="\\")?`\\${t.char}`:t.char).join("");function Ue(e){let t=z(e);if(!t)return;let n=0,r=t.length,i=false,o=false;for(;n<r&&t[n].kind==="any";)i=true,n++;for(;r>n&&t[r-1].kind==="any";)o=true,r--;let a=t.slice(n,r);if(a.some(f=>f.kind!=="lit"))return;let d=a.map(f=>f.char).join(""),c=i&&o?"contains":i?"endsWith":o?"startsWith":"equals";if(!(c!=="equals"&&/[%_]/.test(d)))return {op:c,value:d}}function Ve(e,t,n){let r=z(e);if(!r)return;let i=a=>n?P(a,t):a,o=ue(r);return {buildFor(a){if(r[r.length-1]?.kind==="any")return {[a]:i({startsWith:o.replace(/%$/,"")})};let d=r.map(c=>c.kind).lastIndexOf("any");if(d>=0){let c=ue(r.slice(d+1));return {AND:[{[a]:i({startsWith:o})},{[a]:i({endsWith:c})}]}}return {AND:[{[a]:i({startsWith:o})},{NOT:{[a]:i({startsWith:`${o}_`})}}]}}}}var v=(e,t,n)=>{let r=C(e);if(z(r)?.some(o=>o.kind==="one"))return;let i=Ue(r);if(i){let o={[i.op]:i.value};return n?P(o,t):o}return Ve(r,t,n)},le={"=":e=>({equals:e}),eq:e=>({equals:e}),"!=":e=>({not:e}),ne:e=>({not:e}),">":e=>({gt:e}),gt:e=>({gt:e}),">=":e=>({gte:e}),gte:e=>({gte:e}),"<":e=>({lt:e}),lt:e=>({lt:e}),"<=":e=>({lte:e}),lte:e=>({lte:e}),contains:(e,t)=>P({contains:C(e)},t),"%_%":(e,t)=>P({contains:C(e)},t),startsWith:(e,t)=>P({startsWith:C(e)},t),"%_":(e,t)=>P({startsWith:C(e)},t),endsWith:(e,t)=>P({endsWith:C(e)},t),"_%":(e,t)=>P({endsWith:C(e)},t),like:(e,t)=>v(e,t,false),ilike:(e,t)=>v(e,t,true),notLike:(e,t)=>{let n=v(e,t,false);if(n)return G(n)?{buildFor:r=>({NOT:n.buildFor(r)})}:{not:n}},in:e=>Array.isArray(e)?{in:e}:void 0,notIn:e=>Array.isArray(e)?{notIn:e}:void 0,between:e=>{let t=de(e);return t?{gte:t[0],lte:t[1]}:void 0},notBetween:e=>{let t=de(e);if(t)return {buildFor:n=>({NOT:{[n]:{gte:t[0],lte:t[1]}}})}},isNull:()=>({equals:null}),isNotNull:()=>({not:null})};var ce=e=>typeof e=="object"&&e!==null,Qe=e=>ce(e)&&"key"in e&&!("and"in e)&&!("or"in e)&&!("not"in e);function j(e,t){let n=t.filter(r=>r!==void 0);if(n.length!==0)return n.length===1?n[0]:{[e]:n}}function ve(e,t,n){let r=t.operation??"=",i=le[r];if(!i)throw new Error(`Unsupported filter operator: "${r}"`);let o=x(e,t.key);if(!o){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"unknown-key"});return}let a=te(e,o);if(se(r)&&!a){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"invalid-value"});return}let d=ae(e,o,r,t.value);if(d===D){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"invalid-value"});return}let c=i(d,{isString:a});if(c===void 0){reportSkip(n,{site:"filter",key:t.key,operation:r,reason:"invalid-value"});return}return G(c)?c.buildFor(o):{[o]:c}}function S(e,t,n){if(Qe(t))return ve(e,t,n);if(ce(t)){if("and"in t)return j("AND",t.and.map(r=>S(e,r,n)));if("or"in t)return j("OR",t.or.map(r=>S(e,r,n)));if("not"in t){let r=S(e,t.not,n);return r?{NOT:r}:void 0}if(isRaw(t))return t;throw new QueryKitError({source:e.name,site:"filter",key:Object.keys(t)[0]??"",reason:"forbidden-key"})}}function K(e,t,n){if(t!==void 0)return Array.isArray(t)?j("AND",t.map(r=>S(e,r,n))):S(e,t,n)}function L(e){return j("AND",e)}function pe(e,t,n){let r=Y(e.baseClient,t,n.fields),i=()=>e.getExecutor()[t],o={source:r.name,strict:e.strict,onSkipped:e.onSkippedCondition},a=x(r,e.timestamps?.deletedAt??"deletedAt"),d=x(r,e.timestamps?.createdAt??"createdAt"),c=h=>q(r,h,o,d),f=h=>re(r,h,o,d),m=h=>checkWith(h,n.relations,et,o.source),k=Je(r,n),s=tt(r,n,e.limits,d),R=(h,F)=>L([h,k,a&&!F?{[a]:null}:void 0]),g=(h,F)=>R(K(r,h,o),F),T=(h,F)=>{if(isAllRows(h))return R(void 0);isEmptyFilter(h)&&refuseEmptyFilter(o.source,F),s.checkFilter(h);let O=K(r,h,o);return O===void 0?refuseEmptyFilter(o.source,F):R(O)},b=(h,F,O)=>{if(!x(r,F))throw new QueryKitError({source:r.name,site:"filter",key:F,reason:"unknown-key"});let E={key:F,operation:"=",value:O};return h?Array.isArray(h)?[...h,E]:{and:[h,E]}:[E]},u=Ye(n),{forcedKeys:l,allowed:p}=u;return {runtime:e,meta:r,diag:o,delegate:i,guard:u,policy:s,guarded:!!(l??p),permits:h=>l?l.includes(h):p?p.has(h):true,projection:(h,F,O)=>oe(r,u,h,F,O),deletedAtField:a,createdAtField:d,sortBy:c,listSortBy:f,withOf:m,composeWhere:g,mutationWhere:T,withId:b,countWhere:h=>i().count({where:h})}}var M=e=>e===void 0?[]:Array.isArray(e)?e:[e];function Je(e,t){let n=scopeConditions(t.scope);for(let r of n)if(!x(e,r.key))throw new QueryKitError({source:e.name,site:"filter",key:r.key,reason:"unknown-key"});return n.length?K(e,n):void 0}function Ye(e){let t=e.forcedColumns?$(e.forcedColumns):void 0;if(e.forcedColumns&&t.length===0)throw new Error("buildRepository: forcedColumns must select at least one field (an empty selection would return the full row).");let n=e.allowedColumns?new Set(e.allowedColumns):void 0;if(e.allowedColumns&&n.size===0)throw new Error("buildRepository: allowedColumns must list at least one field (an empty allowlist would return the full row).");return {forcedKeys:t,allowed:n}}var et={columns:"select",nested:"include",filters:["where"],logical:["AND","OR","NOT"],paging:["take","skip"],orderBy:"orderBy"};function tt(e,t,n,r){let i=o=>{let a=o.indexOf(".");return a<0?x(e,o):e.fields.get(o.slice(0,a))?.kind==="object"?o:void 0};return resolvePolicy({source:e.name,fieldOf:i,primaryKey:e.idField??"id",createdAt:r,filterable:t.filterable,sortable:t.sortable,allowedColumns:t.allowedColumns,forcedColumns:t.forcedColumns,limits:{...n,...t.limits}})}function ye(e){let t={};for(let[n,r]of Object.entries(e)){if(!n.startsWith("_")){t[n]=r;continue}if(n==="_count"){typeof r=="number"&&(t.count=r);continue}let i=n.slice(1);for(let[o,a]of Object.entries(r??{}))a!==void 0&&(t[`${i}_${o}`]=a);}return t}function me(e){let{meta:t,diag:n,delegate:r,permits:i,policy:o,composeWhere:a}=e,d=f=>{let m=i(f)?x(t,f):void 0;return m||reportSkip(n,{site:"aggregate",key:f,reason:"unknown-key"}),m},c=f=>{let m={};for(let k of f){let s=d(k);s&&(m[s]=true);}return Object.keys(m).length?m:void 0};return {async aggregate(f){o.checkFilter(f.filter);for(let b of [f.groupBy,f.sum,f.avg,f.min,f.max].flatMap(u=>M(u)))o.checkAggregateKey(b);let m=M(f.groupBy).map(d).filter(b=>!!b),k=c(M(f.sum)),s=c(M(f.avg)),R=c(M(f.min)),g=c(M(f.max)),T={where:a(f.filter,f.withDeleted)};return f.count&&(T._count=true),k&&(T._sum=k),s&&(T._avg=s),R&&(T._min=R),g&&(T._max=g),m.length>0?(await r().groupBy({...T,by:m})).map(ye):[ye(await r().aggregate(T))]}}}function he(e){let{runtime:t,meta:n,diag:r,delegate:i,guard:o,guarded:a,permits:d,projection:c,policy:f,withOf:m,composeWhere:k}=e;return {async findCursor(s={}){let R=clampPageSize(s.limit,t.defaultLimit,t.maxLimit),g=s.cursorKey??"id";f.checkFilter(s.filter),s.cursorKey!==void 0&&f.checkCursorKey(g);let T=s.order??"asc",b=s.direction??"forward",u=x(n,g);if(!u)throw new QueryKitError({source:r.source,site:"cursorKey",key:g,reason:"unknown-key"});let l=n.idField??"id",p=await decodeCursorToken(s.cursor,{source:r.source,secret:t.cursorSecret,key:g}),y=p===void 0?void 0:N(n,u,p.k),w=p===void 0?void 0:N(n,l,p.id);if(y===D||w===D)throw new QueryKitError({source:r.source,site:"cursorKey",key:g,reason:"invalid-value"});let A=k(s.filter,s.withDeleted),h=b==="forward"?T==="asc":T==="desc",F=h?"gt":"lt",O=u!==l,E=p===void 0?void 0:O?{OR:[{[u]:{[F]:y}},{AND:[{[u]:{equals:y}},{[l]:{[F]:w}}]}]}:{[u]:{[F]:y}},Fe=L([A,E]),_=Q(o,s.columns),Z=_===void 0?[]:[u,l].filter(W=>a&&(!d(W)||!_.includes(W))||W===l&&W!==u&&!_.includes(W)),Ae=await i().findMany({where:Fe,orderBy:O?[{[u]:h?"asc":"desc"},{[l]:h?"asc":"desc"}]:[{[u]:h?"asc":"desc"}],take:R+1,...c(s.columns,m(s.with),[u,l])}),U=await cursorPage(Ae,{limit:R,direction:b,hasCursor:p!==void 0,cursorField:u,idField:l,secret:t.cursorSecret});return Z.length>0&&(U.data=U.data.map(W=>Object.fromEntries(Object.entries(W).filter(([Me])=>!Z.includes(Me))))),U}}}function X(e,t){if(e.primaryKey.length===0)throw new Error(`${t}: model "${e.name}" has no primary key, so a row cannot be addressed individually. Use updateWhere/deleteWhere with an explicit filter instead.`);return e.primaryKey}var ke=e=>Object.fromEntries(e.map(t=>[t,true]));function H(e,t,n){return t.length===1?{[t[0]]:n[t[0]]}:{[e.primaryKeyName??t.join("_")]:Object.fromEntries(t.map(r=>[r,n[r]]))}}var Te=1e3;function De(e,t){let{runtime:n,meta:r,delegate:i,deletedAtField:o,createdAtField:a,composeWhere:d,mutationWhere:c,withId:f}=e,m=u=>clampPageSize(u.limit,n.defaultLimit,n.maxLimit),k=u=>({...scopeDefaults(t.scope),...u,...scopeDefaults(t.scope)}),s=u=>{let l={...u};return r.stampUpdatedAt&&(l[r.stampUpdatedAt]=new Date),l},R=(u,l)=>{let p=u.map(y=>{let w=x(r,y);if(!w)throw new Error(`upsert: unknown target field "${y}".`);return w});return p.length===1?{[p[0]]:l[p[0]]}:{[p.join("_")]:Object.fromEntries(p.map(y=>[y,l[y]]))}},g=(u,l)=>{let p=new Set([...l,a??"createdAt"]),y={};for(let[w,A]of Object.entries(u))p.has(w)||(y[w]=A);return s(y)},T=async(u,l,p)=>{let y=k(u),w=l.set?s(l.set):g(y,p);return await i().upsert({where:R(p,y),create:y,update:w})},b=async(u,l,p)=>{let y=X(r,p),w=i(),A=await w.findFirst({where:u,select:ke(y)});if(A)return await w.update({where:H(r,y,A),data:l})};return {async create(u){return await i().create({data:k(u)})},async createMany(u){if(u.length===0)return [];let l=u.map(w=>k(w)),p=i();if(typeof p.createManyAndReturn=="function")return await p.createManyAndReturn({data:l});let y=[];for(let w of l)y.push(await p.create({data:w}));return y},upsert(u,l){return T(u,l,M(l.target))},async upsertMany(u,l){if(u.length===0)return [];let p=M(l.target),y=[];for(let w=0;w<u.length;w+=Te)for(let A of u.slice(w,w+Te))y.push(await T(A,l,p));return y},async updateById(u,l,p="id"){return b(d(f(void 0,p,u)),s(l),"updateById")},async updateWhere(u,l,p={}){let y=c(u,"updateWhere"),w=s(l);if(!p.returning)return {count:(await i().updateMany({where:y,data:w})).count};let A=await i().updateManyAndReturn({where:y,data:w});return {count:A.length,rows:A.slice(0,m(p.returning))}},async deleteById(u,l="id"){let p=X(r,"deleteById"),y=i(),w=await y.findFirst({where:d(f(void 0,l,u))});if(w)return await y.delete({where:H(r,p,w)})},async deleteWhere(u,l={}){let p=c(u,"deleteWhere"),y=l.returning?await i().findMany({where:p,take:m(l.returning)}):void 0,{count:w}=await i().deleteMany({where:p});return y?{count:w,rows:y}:{count:w}},async softDelete(u,l="id"){if(!o)throw new Error("softDelete: model has no deletedAt field.");return b(d(f(void 0,l,u),false),s({[o]:new Date}),"softDelete")},async restore(u,l="id"){if(!o)throw new Error("restore: model has no deletedAt field.");return b(d(f(void 0,l,u),true),s({[o]:null}),"restore")}}}function be(e){let{runtime:t,delegate:n,projection:r,policy:i,sortBy:o,listSortBy:a,withOf:d,composeWhere:c,withId:f,countWhere:m}=e,k=s=>{i.checkFilter(s.filter),i.checkSort(s.sort);};return {async findAll(s={}){return k(s),await n().findMany({where:c(s.filter,s.withDeleted),orderBy:o(s.sort),...r(s.columns,d(s.with))})},async findOne(s={}){return k(s),await n().findFirst({where:c(s.filter,s.withDeleted),orderBy:o(s.sort),...r(s.columns,d(s.with))})??void 0},async findById(s,R={}){let{idKey:g="id",filter:T}=R;return i.checkFilter(T),await n().findFirst({where:c(f(T,g,s),R.withDeleted),...r(R.columns,d(R.with))})??void 0},async findList(s={}){k(s);let R=clampPage(s.page),g=clampPageSize(s.perPage,t.defaultPerPage,t.maxPerPage);i.checkPage({page:R,perPage:g});let T=c(s.filter,s.withDeleted),b=p=>n().findMany({where:T,orderBy:a(s.sort),take:p,skip:(R-1)*g,...r(s.columns,d(s.with))});if(s.withTotal===false)return offsetPageWithoutTotal(await b(g+1),R,g);let[u,l]=await Promise.all([b(g),m(T)]);return {data:u,meta:offsetMeta(R,g,l)}},async findInfinite(s={}){let R=clampPageSize(s.limit,t.defaultLimit,t.maxLimit),g=clampOffset(s.offset);k(s),i.checkPage({offset:g});let T=await n().findMany({where:c(s.filter,s.withDeleted),orderBy:a(s.sort),take:R+1,skip:g,...r(s.columns,d(s.with))});return infinitePage(T,R,g)},async count(s){return i.checkFilter(s),m(c(s))},async exists(s){return i.checkFilter(s),await m(c(s))>0}}}function B(e,t,n={}){let r=pe(e,t,n);return {get delegate(){return r.delegate()},...be(r),...he(r),...De(r,n),...me(r),scoped(o){return B(e,t,{...n,scope:{...n.scope,...o}})}}}function wt(e,t){if(typeof t=="string")return t;let n=V(e),r=n.find(i=>e[i]===t);if(!r)throw new Error(`createRegistry: the given delegate does not belong to this Prisma client. Pass a model from the same client you passed to createRegistry (available: ${n.join(", ")||"(none)"}), or use its name, e.g. repository("user").`);return r}function ht(e,t={}){let n=createContextStore(),r={baseClient:e,getExecutor:()=>n.get()?.executor??e,defaultPerPage:t.defaultPerPage??DEFAULT_PER_PAGE,defaultLimit:t.defaultLimit??DEFAULT_LIMIT,maxPerPage:t.maxPerPage??DEFAULT_MAX_PER_PAGE,maxLimit:t.maxLimit??DEFAULT_MAX_LIMIT,strict:t.strict??false,onSkippedCondition:t.onSkippedCondition,limits:t.limits,cursorSecret:t.cursorSecret,timestamps:t.timestamps};function i(a,d,c){let f=typeof d=="function"?void 0:d,m=typeof d=="function"?d:c,k=B(r,wt(e,a),f);return m?{...k,...m(k)}:k}return {client:e,repository:i,transaction:a=>n.get()?.executor?a():e.$transaction(d=>n.run({executor:d},a))}}function Tt(){return createFilters()}export{B as buildRepository,Tt as createFilters,ht as createRegistry};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map