@gjermundgaraba/clankerauth-dev 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ import{C as e,N as t,S as n,_ as r,b as i,l as a,u as o,v as s,w as c}from"./schemas-CYxWglEB.mjs";import{_ as l,c as u,h as d,i as f,m as p,n as m,p as h,r as g,s as _,t as v}from"./random-D6srtOfs.mjs";const y=e=>v(`a-z`,`A-Z`,`0-9`)(e||32),b=({usePlural:e,schema:n})=>r=>{let i=e=>n[e]?e:Object.entries(n).find(([t,n])=>n.modelName===e)?.[0];if(e&&r.charAt(r.length-1)===`s`){let e=i(r.slice(0,-1));if(e)return e}let a=i(r);if(!a)throw new t(`Model "${r}" not found in schema`);return a},x=({schema:e,usePlural:n})=>{let r=b({schema:e,usePlural:n});return({field:n,model:i})=>{if(n===`id`||n===`_id`)return`id`;let a=r(i),o=e[a]?.fields[n];if(!o){let t=Object.entries(e[a].fields).find(([e,t])=>t.fieldName===n);t&&(o=t[1],n=t[0])}if(!o)throw new t(`Field ${n} not found in model ${a}`);return n}},S=({usePlural:e,schema:t,disableIdGeneration:n,options:r,customIdGenerator:i,supportsUUIDs:a})=>{let o=b({usePlural:e,schema:t});return({customModelName:e,forceAllowId:t})=>{let s=r.advanced?.database?.generateId===`serial`,c=r.advanced?.database?.generateId===`uuid`,l=n||s&&!t?!1:!c||!a,u=o(e??`id`);return{type:s?`number`:`string`,required:!!l,...l?{defaultValue(){if(n)return;let e=r.advanced?.database?.generateId;if(e!==!1&&e!==`serial`)return typeof e==`function`?e({model:u}):e===`uuid`?crypto.randomUUID():i?i({model:u}):y()}}:{},transform:{input:e=>{if(e){if(s){let t=Number(e);return isNaN(t)?void 0:t}if(c){if(l&&!t)return e;if(n)return;if(t&&typeof e==`string`){if(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e))return e;{let e=(/* @__PURE__ */ Error()).stack?.split(`
2
+ `).filter((e,t)=>t!==1).join(`
3
+ `).replace(`Error:`,``);d.warn("[Adapter Factory] - Invalid UUID value for field `id` provided when `forceAllowId` is true. Generating a new UUID.",e)}}return a?void 0:typeof e!=`string`&&!a?crypto.randomUUID():void 0}return e}},output:e=>{if(e)return String(e)}}}}},C=({usePlural:e,schema:n,options:r,customIdGenerator:i,disableIdGeneration:a})=>{let o=b({usePlural:e,schema:n}),s=x({usePlural:e,schema:n}),c=S({usePlural:e,schema:n,options:r,customIdGenerator:i,disableIdGeneration:a});return({model:e,field:r})=>{let i=o(e),a=s({field:r,model:i}),l=n[i].fields;l.id=c({customModelName:i});let u=l[a];if(!u)throw new t(`Field ${r} not found in model ${e}`);return u}},w=({schema:e,usePlural:t})=>{let n=b({schema:e,usePlural:t}),r=x({schema:e,usePlural:t});function i({model:t,field:i}){let a=n(t),o=r({model:a,field:i});return e[a]?.fields[o]?.fieldName||o}return i},T=({usePlural:e,schema:t})=>{let n=b({schema:t,usePlural:e});return r=>{let i=n(r);return t&&t[i]&&t[i].modelName!==r?e?`${t[i].modelName}s`:t[i].modelName:e?`${r}s`:r}};function E(e,t,n){return n===`update`?e===void 0&&t.onUpdate!==void 0?typeof t.onUpdate==`function`?t.onUpdate():t.onUpdate:e:n===`create`&&(e===void 0||t.required===!0&&e===null)&&t.defaultValue!==void 0?typeof t.defaultValue==`function`?t.defaultValue():t.defaultValue:e}const D=e([n(),r(),a(),o()]).nullable(),O=i(n(),c()).nullish(),k=i(n(),c()).transform(e=>{let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}),A=s({increment:i(n(),r()),set:k.optional()}),j=r().nullish();function M(e){let{adapter:n,adapterId:r}=e,i=Object.entries(e.mapKeysTransformOutput??{}).find(([,e])=>e===`id`)?.[0]??`id`;async function a(n,r,a){let o=e.mapKeysTransformInput?.id||e.getFieldName({model:r,field:`id`});if(n[o]===void 0||n[o]===null)throw new t(`Adapter "${e.adapterId}" must return the row id for atomic fallbacks.`);let s=(await e.transformOutput(n,r,[i],void 0))?.id;if(typeof s!=`string`&&typeof s!=`number`)throw new t(`Adapter "${e.adapterId}" must expose a logical string or number id through its output transform.`);let[c]=e.transformWhereClause({model:r,where:[{field:`id`,value:s}],action:a});if(!c)throw new t(`The atomic fallback id condition was transformed away.`);return c}async function o({model:e,where:i}){let a=O.safeParse(await n.findOne({model:e,where:i}));if(!a.success)throw new t(`Adapter "${r}" must return a row snapshot or null.`);return a.data??null}async function s(e,n,i,o){let s=await a(e,i.logicalModel,o),c=i.where.some(e=>e.connector===`OR`),l=c?[s]:[...i.where,s],u=new Set(n);for(let n of u){if(n===s.field)continue;let a=D.safeParse(e[n]??null);if(!a.success){if(c&&i.where.some(e=>e.field===n))throw new t(`Adapter "${r}" must implement native atomic methods for OR predicates on structured values.`);continue}l.push({field:n,value:a.data,operator:`eq`,connector:`AND`,mode:`sensitive`})}return l}function c(e){if(e!==0&&e!==1)throw new t(`Adapter "${r}" must return an affected row count of 0 or 1 from an atomic fallback.`);return e===1}async function l(e){let{model:t,where:r}=e,i=await o(e);if(i===null)return null;let a=await s(i,[...Object.keys(i),...r.map(({field:e})=>e)],e,`consumeOne`);return c(await n.deleteMany({model:t,where:a}))?i:null}async function u(e){let{model:i,where:a}=e,l=A.safeParse(e);if(!l.success)throw new t(`incrementOne requires finite increments and a set object for the atomic fallback.`);let{increment:u,set:d}=l.data,f=Object.entries(u),p=[...a.map(({field:e})=>e),...Object.keys(u),...Object.keys(d??{})];for(let a=0;a<5;a++){let a=await o(e);if(a===null)return null;let l={...d};for(let[e,n]of f){let i=j.safeParse(a[e]);if(!i.success)throw new t(`Adapter "${r}" must return finite numeric counter values or null for atomic increments.`);let o=i.data??0,s=o+n;if(!Number.isFinite(s)||n!==0&&s===o)throw new t(`Adapter "${r}" cannot represent the requested counter increment safely.`);l[e]=s}let u=await s(a,p,e,`incrementOne`);if(Object.entries(l).every(([e,t])=>{let n=a[e];return n instanceof Date&&t instanceof Date?n.getTime()===t.getTime():Object.is(n,t)}))return a;if(c(await n.updateMany({model:i,where:u,update:l})))return{...a,...l}}throw new t(`Adapter "${r}" could not complete an atomic increment due to contention. Retry the operation or implement incrementOne natively.`)}return{consumeOne:l,incrementOne:u}}let N=[],P=-1;const F=e=>t=>t(e),I=({adapter:e,config:n})=>r=>{let i=m(r),a=Math.random().toString(36).substring(2,15),o={...n,supportsBooleans:n.supportsBooleans??!0,supportsDates:n.supportsDates??!0,supportsJSON:n.supportsJSON??!1,adapterName:n.adapterName??n.adapterId,supportsNumericIds:n.supportsNumericIds??!0,supportsUUIDs:n.supportsUUIDs??!1,supportsArrays:n.supportsArrays??!1,transaction:n.transaction??!1,disableTransformInput:n.disableTransformInput??!1,disableTransformOutput:n.disableTransformOutput??!1,disableTransformJoin:n.disableTransformJoin??!1};if(r.advanced?.database?.generateId===`serial`&&o.supportsNumericIds===!1)throw new t(`[${o.adapterName}] Your database or database adapter does not support numeric ids. Please disable "useNumberId" in your config.`);let s=u(r),c=(...e)=>{if(o.debugLogs===!0||typeof o.debugLogs==`object`){let t=p({level:`info`});if(typeof o.debugLogs==`object`&&`isRunningAdapterTests`in o.debugLogs){o.debugLogs.isRunningAdapterTests&&(e.shift(),N.push({instance:a,args:e}));return}if(typeof o.debugLogs==`object`&&o.debugLogs.logCondition&&!o.debugLogs.logCondition?.())return;if(typeof e[0]==`object`&&`method`in e[0]){let n=e.shift().method;if(typeof o.debugLogs==`object`&&(n===`create`&&!o.debugLogs.create||n===`update`&&!o.debugLogs.update||n===`updateMany`&&!o.debugLogs.updateMany||n===`findOne`&&!o.debugLogs.findOne||n===`findMany`&&!o.debugLogs.findMany||n===`delete`&&!o.debugLogs.delete||n===`deleteMany`&&!o.debugLogs.deleteMany||n===`consumeOne`&&!o.debugLogs.consumeOne||n===`incrementOne`&&!o.debugLogs.incrementOne||n===`count`&&!o.debugLogs.count))return;t.info(`[${o.adapterName}]`,...e)}else t.info(`[${o.adapterName}]`,...e)}},l=p(r.logger),d=b({usePlural:o.usePlural,schema:s}),h=x({usePlural:o.usePlural,schema:s}),v=T({usePlural:o.usePlural,schema:s}),y=w({schema:s,usePlural:o.usePlural}),D=S({schema:s,options:r,usePlural:o.usePlural,disableIdGeneration:o.disableIdGeneration,customIdGenerator:o.customIdGenerator,supportsUUIDs:o.supportsUUIDs}),O=C({schema:s,options:r,usePlural:o.usePlural,disableIdGeneration:o.disableIdGeneration,customIdGenerator:o.customIdGenerator}),k=async(e,t,n,i)=>{let a={},c=s[t].fields,u=o.mapKeysTransformInput??{},d=r.advanced?.database?.generateId===`serial`;c.id=D({customModelName:t,forceAllowId:i&&`id`in e});for(let i in c){let f=e[i],p=c[i],m=u[i]||c[i].fieldName||i;if(f===void 0&&(p.defaultValue===void 0&&!p.transform?.input&&!(n===`update`&&p.onUpdate)||n===`update`&&!p.onUpdate))continue;if(p&&p.type===`date`&&!(f instanceof Date)&&typeof f==`string`)try{f=new Date(f)}catch{l.error(`[Adapter Factory] Failed to convert string to date`,{value:f,field:i})}let h=E(f,p,n);p.transform?.input&&(h=await p.transform.input(h)),p.references?.field===`id`&&d?h=Array.isArray(h)?h.map(e=>e===null?null:Number(e)):h===null?null:Number(h):o.supportsJSON===!1&&typeof h==`object`&&p.type===`json`||o.supportsArrays===!1&&Array.isArray(h)&&(p.type===`string[]`||p.type===`number[]`)?h=JSON.stringify(h):o.supportsDates===!1&&h instanceof Date&&p.type===`date`?h=h.toISOString():o.supportsBooleans===!1&&typeof h==`boolean`&&(h=+!!h),o.customTransformInput&&(h=o.customTransformInput({data:h,action:n,field:m,fieldAttributes:p,model:v(t),schema:s,options:r})),h!==void 0&&(a[m]=h)}return a},A=async(e,t,n=[],i)=>{let a=async(e,t,n=[])=>{if(!e)return null;let i=o.mapKeysTransformOutput??{},a={},c=s[d(t)].fields,l=Object.entries(i).find(([e,t])=>t===`id`)?.[0];c[l??`id`]={type:r.advanced?.database?.generateId===`serial`?`number`:`string`};for(let l in c){if(n.length&&!n.includes(l))continue;let u=c[l];if(u){let c=u.fieldName||l,d=e[Object.entries(i).find(([e,t])=>t===c)?.[0]||c];u.transform?.output&&(d=await u.transform.output(d));let f=i[l]||l;c===`id`||u.references?.field===`id`?d!=null&&(d=String(d)):o.supportsJSON===!1&&typeof d==`string`&&u.type===`json`||o.supportsArrays===!1&&typeof d==`string`&&(u.type===`string[]`||u.type===`number[]`)?d=_(d):o.supportsDates===!1&&typeof d==`string`&&u.type===`date`?d=new Date(d):o.supportsBooleans===!1&&typeof d==`number`&&u.type===`boolean`&&(d=d===1),o.customTransformOutput&&(d=o.customTransformOutput({data:d,field:f,fieldAttributes:u,select:n,model:v(t),schema:s,options:r})),a[f]=d}}return a};if(!i||Object.keys(i).length===0)return await a(e,t,n);t=d(t);let c=await a(e,t,n),l=Object.entries(i).map(([e,t])=>({modelName:v(e),defaultModelName:d(e),joinConfig:t}));if(!e)return null;for(let{modelName:n,defaultModelName:i,joinConfig:o}of l){let s=await(async()=>r.advanced?.database?.joins&&n in e?e[n]:await V({baseModel:t,baseData:c,joinModel:n,specificJoinConfig:o}))();s??=o.relation===`one-to-one`?null:[],o.relation===`one-to-many`&&!Array.isArray(s)&&(s=[s]);let l=[];if(Array.isArray(s))for(let e of s){let t=await a(e,n,[]);l.push(t)}else{let e=await a(s,n,[]);l.push(e)}c[i]=(o.relation===`one-to-one`?l[0]:l)??null}return c},j=({model:e,where:n,action:i})=>{if(!n)return;let a=o.mapKeysTransformInput??{};return n.map(n=>{let{field:c,value:l,operator:u=`eq`,connector:f=`AND`,mode:p=`sensitive`}=n;if(u===`in`&&!Array.isArray(l))throw new t(`Value must be an array`);let m=l,g=d(e),_=h({field:c,model:e}),b=a[_]||y({field:_,model:g}),x=O({field:_,model:g}),S=r.advanced?.database?.generateId===`serial`;if((_===`id`||x.references?.field===`id`)&&S&&(m=Array.isArray(l)?l.map(Number):Number(l)),x.type===`date`&&l instanceof Date&&!o.supportsDates&&(m=l.toISOString()),x.type===`boolean`&&typeof m==`string`&&(m=m===`true`),x.type===`number`){if(typeof m==`string`&&m.trim()!==``){let e=Number(m);Number.isNaN(e)||(m=e)}else if(Array.isArray(m)){let e=m.map(e=>typeof e==`string`&&e.trim()!==``?Number(e):NaN);e.every(e=>!Number.isNaN(e))&&(m=e)}}if(x.type===`boolean`&&typeof m==`boolean`&&!o.supportsBooleans&&(m=+!!m),x.type===`json`&&typeof l==`object`&&!o.supportsJSON)try{m=JSON.stringify(l)}catch(e){throw Error(`Failed to stringify JSON value for field ${b}`,{cause:e})}return o.customTransformInput&&(m=o.customTransformInput({data:m,fieldAttributes:x,field:b,model:v(e),schema:s,options:r,action:i})),{operator:u,connector:f,field:b,value:m,mode:p}})},I=(e,n,i)=>{if(!n||Object.keys(n).length===0)return;let a={};for(let[o,c]of Object.entries(n)){if(!c)continue;let n=d(o),l=d(e),u=Object.entries(s[n].fields).filter(([e,t])=>t.references&&d(t.references.model)===l),f=!0;if(u.length||(u=Object.entries(s[l].fields).filter(([e,t])=>t.references&&d(t.references.model)===n),f=!1),!u.length)throw new t(`No foreign key found for model ${o} and base model ${e} while performing join operation.`);if(u.length>1)throw new t(`Multiple foreign keys found for model ${o} and base model ${e} while performing join operation. Only one foreign key is supported.`);let[p,m]=u[0];if(!m.references)throw new t(`No references found for foreign key ${p} on model ${o} while performing join operation.`);let h,g,_;f?(_=m.references.field,h=y({model:e,field:_}),g=y({model:o,field:p})):(_=p,h=y({model:e,field:_}),g=y({model:o,field:m.references.field})),i&&!i.includes(_)&&i.push(_);let b=g===`id`?!0:m.unique??!1,x=r.advanced?.database?.defaultFindManyLimit??100;b?x=1:typeof c==`object`&&typeof c.limit==`number`&&(x=c.limit),a[v(o)]={on:{from:h,to:g},limit:x,relation:b?`one-to-one`:`one-to-many`}}return{join:a,select:i}},V=async({baseModel:e,baseData:t,joinModel:n,specificJoinConfig:a})=>{if(!t)return t;let o=v(n),s=a.on.to,c=t[h({field:a.on.from,model:e})];if(c==null)return a.relation===`one-to-one`?null:[];let u,d=j({model:o,where:[{field:s,value:c,operator:`eq`,connector:`AND`}],action:`findOne`});try{if(a.relation===`one-to-one`)u=await i(`db findOne ${o}`,{[f]:`findOne`,[g]:o},()=>H.findOne({model:o,where:d}));else{let e=a.limit??r.advanced?.database?.defaultFindManyLimit??100;u=await i(`db findMany ${o}`,{[f]:`findMany`,[g]:o},()=>H.findMany({model:o,where:d,limit:e}))}}catch(e){throw l.error(`Failed to query fallback join for model ${o}:`,{where:d,limit:a.limit}),console.error(e),e}return u},H=e({options:r,schema:s,debugLog:c,getFieldName:y,getModelName:v,getDefaultModelName:d,getDefaultFieldName:h,getFieldAttributes:O,transformInput:k,transformOutput:A,transformWhereClause:j}),U=null,W=M({adapter:H,adapterId:o.adapterId,mapKeysTransformInput:o.mapKeysTransformInput,mapKeysTransformOutput:o.mapKeysTransformOutput,getFieldName:y,transformOutput:A,transformWhereClause:j}),G={transaction:async e=>(U||(o.transaction?(l.debug(`[${o.adapterName}] - Using provided transaction implementation.`),U=o.transaction):U=F(G)),U(e)),create:async({data:e,model:t,select:n,forceAllowId:r=!1})=>{P++;let a=P,s=v(t);if(t=d(t),`id`in e&&e.id!==void 0&&!r){l.warn(`[${o.adapterName}] - You are trying to create a record with an id. This is not allowed as we handle id generation for you, unless you pass in the \`forceAllowId\` parameter. The id will be ignored.`);let t=(/* @__PURE__ */ Error()).stack?.split(`
4
+ `).filter((e,t)=>t!==1).join(`
5
+ `).replace(`Error:`,"Create method with `id` being called at:");console.log(t),e.id=void 0}c({method:`create`},`${L(a)} ${R(1,4)}`,`${z(`create`)} ${B(`Unsafe Input`)}:`,{model:s,data:e});let u=e;o.disableTransformInput||(u=await k(e,t,`create`,r)),c({method:`create`},`${L(a)} ${R(2,4)}`,`${z(`create`)} ${B(`Parsed Input`)}:`,{model:s,data:u});let p=await i(`db create ${s}`,{[f]:`create`,[g]:s},()=>H.create({data:u,model:s}));c({method:`create`},`${L(a)} ${R(3,4)}`,`${z(`create`)} ${B(`DB Result`)}:`,{model:s,res:p});let m=p;return o.disableTransformOutput||(m=await A(p,t,n,void 0)),c({method:`create`},`${L(a)} ${R(4,4)}`,`${z(`create`)} ${B(`Parsed Result`)}:`,{model:s,data:m}),m},update:async({model:e,where:t,update:n})=>{P++;let r=P;e=d(e);let a=v(e),s=j({model:e,where:t,action:`update`});if(s.length===0)return null;c({method:`update`},`${L(r)} ${R(1,4)}`,`${z(`update`)} ${B(`Unsafe Input`)}:`,{model:a,data:n});let l=n;o.disableTransformInput||(l=await k(n,e,`update`)),c({method:`update`},`${L(r)} ${R(2,4)}`,`${z(`update`)} ${B(`Parsed Input`)}:`,{model:a,data:l});let u=await i(`db update ${a}`,{[f]:`update`,[g]:a},()=>H.update({model:a,where:s,update:l}));c({method:`update`},`${L(r)} ${R(3,4)}`,`${z(`update`)} ${B(`DB Result`)}:`,{model:a,data:u});let p=u;return o.disableTransformOutput||(p=await A(u,e,void 0,void 0)),c({method:`update`},`${L(r)} ${R(4,4)}`,`${z(`update`)} ${B(`Parsed Result`)}:`,{model:a,data:p}),p},updateMany:async({model:e,where:n,update:r})=>{P++;let a=P,s=v(e),l=j({model:e,where:n,action:`updateMany`});e=d(e),c({method:`updateMany`},`${L(a)} ${R(1,4)}`,`${z(`updateMany`)} ${B(`Unsafe Input`)}:`,{model:s,data:r});let u=r;o.disableTransformInput||(u=await k(r,e,`update`)),c({method:`updateMany`},`${L(a)} ${R(2,4)}`,`${z(`updateMany`)} ${B(`Parsed Input`)}:`,{model:s,data:u});let p=await i(`db updateMany ${s}`,{[f]:`updateMany`,[g]:s},()=>H.updateMany({model:s,where:l,update:u}));if(typeof p!=`number`||!Number.isFinite(p))throw new t(`Adapter "${o.adapterId}" updateMany must return a finite number affected row count.`);return c({method:`updateMany`},`${L(a)} ${R(3,4)}`,`${z(`updateMany`)} ${B(`DB Result`)}:`,{model:s,data:p}),c({method:`updateMany`},`${L(a)} ${R(4,4)}`,`${z(`updateMany`)} ${B(`Parsed Result`)}:`,{model:s,data:p}),p},findOne:async({model:e,where:t,select:n,join:a})=>{P++;let s=P,l=v(e),u=j({model:e,where:t,action:`findOne`});e=d(e);let p,m=!0;if(o.disableTransformJoin)p=a;else{let t=I(e,a,n);t&&(p=t.join,n=t.select),!r.advanced?.database?.joins&&p&&Object.keys(p).length>0&&(m=!1)}c({method:`findOne`},`${L(s)} ${R(1,3)}`,`${z(`findOne`)}:`,{model:l,where:u,select:n,join:p});let h=await i(`db findOne ${l}`,{[f]:`findOne`,[g]:l},()=>H.findOne({model:l,where:u,select:n,join:m?p:void 0}));c({method:`findOne`},`${L(s)} ${R(2,3)}`,`${z(`findOne`)} ${B(`DB Result`)}:`,{model:l,data:h});let _=h;return o.disableTransformOutput||(_=await A(h,e,n,p)),c({method:`findOne`},`${L(s)} ${R(3,3)}`,`${z(`findOne`)} ${B(`Parsed Result`)}:`,{model:l,data:_}),_},findMany:async({model:e,where:t,limit:n,select:a,sortBy:s,offset:l,join:u})=>{P++;let p=P,m=n??r.advanced?.database?.defaultFindManyLimit??100,h=v(e),_=j({model:e,where:t,action:`findMany`});e=d(e);let y,b=!0;if(o.disableTransformJoin)y=u;else{let t=I(e,u,a);t&&(y=t.join,a=t.select),!r.advanced?.database?.joins&&y&&Object.keys(y).length>0&&(b=!1)}c({method:`findMany`},`${L(p)} ${R(1,3)}`,`${z(`findMany`)}:`,{model:h,where:_,limit:m,sortBy:s,offset:l,join:y});let x=await i(`db findMany ${h}`,{[f]:`findMany`,[g]:h},()=>H.findMany({model:h,where:_,limit:m,select:a,sortBy:s,offset:l,join:b?y:void 0}));c({method:`findMany`},`${L(p)} ${R(2,3)}`,`${z(`findMany`)} ${B(`DB Result`)}:`,{model:h,data:x});let S=x;return o.disableTransformOutput||(S=await Promise.all(x.map(async t=>await A(t,e,void 0,y)))),c({method:`findMany`},`${L(p)} ${R(3,3)}`,`${z(`findMany`)} ${B(`Parsed Result`)}:`,{model:h,data:S}),S},delete:async({model:e,where:t})=>{P++;let n=P,r=v(e),a=j({model:e,where:t,action:`delete`});e=d(e),c({method:`delete`},`${L(n)} ${R(1,2)}`,`${z(`delete`)}:`,{model:r,where:a}),await i(`db delete ${r}`,{[f]:`delete`,[g]:r},()=>H.delete({model:r,where:a})),c({method:`delete`},`${L(n)} ${R(2,2)}`,`${z(`delete`)} ${B(`DB Result`)}:`,{model:r})},deleteMany:async({model:e,where:t})=>{P++;let n=P,r=v(e),a=j({model:e,where:t,action:`deleteMany`});e=d(e),c({method:`deleteMany`},`${L(n)} ${R(1,2)}`,`${z(`deleteMany`)} ${B(`DeleteMany`)}:`,{model:r,where:a});let o=await i(`db deleteMany ${r}`,{[f]:`deleteMany`,[g]:r},()=>H.deleteMany({model:r,where:a}));return c({method:`deleteMany`},`${L(n)} ${R(2,2)}`,`${z(`deleteMany`)} ${B(`DB Result`)}:`,{model:r,data:o}),o},consumeOne:async({model:e,where:t})=>{P++;let n=P,r=v(e),a=j({model:e,where:t,action:`consumeOne`});e=d(e),c({method:`consumeOne`},`${L(n)} ${R(1,3)}`,`${z(`consumeOne`)} ${B(`ConsumeOne`)}:`,{model:r,where:a});let s=await i(`db consumeOne ${r}`,{[f]:`consumeOne`,[g]:r},()=>H.consumeOne?H.consumeOne({model:r,where:a}):W.consumeOne({model:r,logicalModel:e,where:a}));c({method:`consumeOne`},`${L(n)} ${R(2,3)}`,`${z(`consumeOne`)} ${B(`DB Result`)}:`,{model:r,data:s});let l=s;return!o.disableTransformOutput&&s&&(l=await A(s,e,void 0,void 0)),c({method:`consumeOne`},`${L(n)} ${R(3,3)}`,`${z(`consumeOne`)} ${B(`Parsed Result`)}:`,{model:r,data:l}),l},incrementOne:async({model:e,where:n,increment:r,set:a})=>{let s=Object.keys(r).length>0,l=!!a&&Object.keys(a).length>0;if(!s&&!l)throw new t("incrementOne requires a non-empty `increment` or `set`; both were empty.");P++;let u=P,p=v(e),m=j({model:e,where:n,action:`incrementOne`});e=d(e),c({method:`incrementOne`},`${L(u)} ${R(1,3)}`,`${z(`incrementOne`)} ${B(`IncrementOne`)}:`,{model:p,where:m,increment:r,set:a});let h=o.mapKeysTransformInput??{},_={};for(let[t,n]of Object.entries(r))_[h[t]||y({model:e,field:t})]=n;let b;if(b=a&&!o.disableTransformInput?await k(a,e,`update`):a,Object.keys(_).length===0&&(!b||Object.keys(b).length===0))throw new t(`incrementOne resolved to an empty update: every increment/set field was unknown to the schema or transformed away.`);let x=await i(`db incrementOne ${p}`,{[f]:`incrementOne`,[g]:p},()=>H.incrementOne?H.incrementOne({model:p,where:m,increment:_,set:b}):W.incrementOne({model:p,logicalModel:e,where:m,increment:_,set:b}));c({method:`incrementOne`},`${L(u)} ${R(2,3)}`,`${z(`incrementOne`)} ${B(`DB Result`)}:`,{model:p,data:x});let S=x;return!o.disableTransformOutput&&x&&(S=await A(x,e,void 0,void 0)),c({method:`incrementOne`},`${L(u)} ${R(3,3)}`,`${z(`incrementOne`)} ${B(`Parsed Result`)}:`,{model:p,data:S}),S},count:async({model:e,where:t})=>{P++;let n=P,r=v(e),a=j({model:e,where:t,action:`count`});e=d(e),c({method:`count`},`${L(n)} ${R(1,2)}`,`${z(`count`)}:`,{model:r,where:a});let o=await i(`db count ${r}`,{[f]:`count`,[g]:r},()=>H.count({model:r,where:a}));return c({method:`count`},`${L(n)} ${R(2,2)}`,`${z(`count`)}:`,{model:r,data:o}),o},createSchema:H.createSchema?async(e,t)=>{let n=u(r);return r.secondaryStorage&&!r.session?.storeSessionInDatabase&&delete n.session,H.createSchema({file:t,tables:n})}:void 0,options:{adapterConfig:o,...H.options??{}},id:o.adapterId,...o.debugLogs?.isRunningAdapterTests?{adapterTestDebugLogs:{resetDebugLogs(){N=N.filter(e=>e.instance!==a)},printDebugLogs(){let e=`─`.repeat(80),t=N.filter(e=>e.instance===a);if(t.length===0)return;let n=t.reverse().map(e=>(e.args[0]=`\n${e.args[0]}`,[...e.args,`
6
+ `])).reduce((e,t)=>[...t,...e],[`\n${e}`]);console.log(...n)}}}:{}};return G};function L(e){return l()<8?`#${e}`:`${h.fg.magenta}#${e}${h.reset}`}function R(e,t){return`${h.bg.black}${h.fg.yellow}[${e}/${t}]${h.reset}`}function z(e){return`${h.bright}${e}${h.reset}`}function B(e){return`${h.dim}(${e})${h.reset}`}export{y as i,T as n,w as r,I as t};
@@ -0,0 +1,22 @@
1
+ export interface DisposableIssuerOptions {
2
+ resources: Array<{ identifier: string; name: string; scopes: string[] }>;
3
+ client: { name: string; redirect: string; resources: string[] };
4
+ /** Test hook replacing outbound CIMD metadata retrieval. Defaults to the secure transport. */
5
+ cimdTransport?: (input: RequestInfo | URL, init?: RequestInit) => Response | Promise<Response>;
6
+ /** Test hook observing incoming HTTP requests, including provisioning. No headers or bodies. */
7
+ onRequest?: (request: { method: string; url: URL }) => void;
8
+ }
9
+
10
+ export interface DisposableIssuer {
11
+ issuer: string;
12
+ clientId: string;
13
+ clientSecret: string;
14
+ owner: { email: string; password: string };
15
+ url: string;
16
+ directory: string;
17
+ /** Drain requests, close SQLite, and remove all temporary identity state. Idempotent. */
18
+ close(): Promise<void>;
19
+ }
20
+
21
+ /** Start a fresh issuer on a random loopback port. The caller owns signals and must await close(). */
22
+ export function startDisposableIssuer(options: DisposableIssuerOptions): Promise<DisposableIssuer>;