gemi 0.61.0 → 0.62.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.
Files changed (31) hide show
  1. package/dist/{chunk-91cj3nxk.js → chunk-5fj71djg.js} +2 -2
  2. package/dist/{chunk-91cj3nxk.js.map → chunk-5fj71djg.js.map} +1 -1
  3. package/dist/{chunk-hyxmmj9b.js → chunk-9penj44g.js} +1 -1
  4. package/dist/{chunk-vqcswg7h.js → chunk-hk06nhxh.js} +4 -4
  5. package/dist/{chunk-vqcswg7h.js.map → chunk-hk06nhxh.js.map} +5 -5
  6. package/dist/{chunk-3aemqfdr.js → chunk-k4a2gzyc.js} +1 -1
  7. package/dist/{chunk-s41ees18.js → chunk-kac5vmvn.js} +1 -1
  8. package/dist/facades/Storage.d.ts +6 -2
  9. package/dist/facades/Storage.d.ts.map +1 -1
  10. package/dist/facades/index.js +1 -1
  11. package/dist/i18n/index.js +1 -1
  12. package/dist/kernel/index.js +1 -1
  13. package/dist/server/index.js +1 -1
  14. package/dist/services/file-storage/drivers/AzureBlobDriver.d.ts +3 -2
  15. package/dist/services/file-storage/drivers/AzureBlobDriver.d.ts.map +1 -1
  16. package/dist/services/file-storage/drivers/FileStorageDriver.d.ts +2 -2
  17. package/dist/services/file-storage/drivers/FileStorageDriver.d.ts.map +1 -1
  18. package/dist/services/file-storage/drivers/FileSystemDriver.d.ts +2 -2
  19. package/dist/services/file-storage/drivers/FileSystemDriver.d.ts.map +1 -1
  20. package/dist/services/file-storage/drivers/S3Driver.d.ts +2 -2
  21. package/dist/services/file-storage/drivers/S3Driver.d.ts.map +1 -1
  22. package/dist/services/file-storage/drivers/types.d.ts +9 -1
  23. package/dist/services/file-storage/drivers/types.d.ts.map +1 -1
  24. package/dist/services/index.d.ts +1 -1
  25. package/dist/services/index.d.ts.map +1 -1
  26. package/dist/services/index.js +6 -6
  27. package/dist/services/index.js.map +4 -4
  28. package/package.json +1 -1
  29. /package/dist/{chunk-hyxmmj9b.js.map → chunk-9penj44g.js.map} +0 -0
  30. /package/dist/{chunk-3aemqfdr.js.map → chunk-k4a2gzyc.js.map} +0 -0
  31. /package/dist/{chunk-s41ees18.js.map → chunk-kac5vmvn.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Ab as a,Bb as K,Jb as M,Lb as Q,Nb as l,Ob as t,Pb as w,Rb as o}from"./chunk-b0t4zp6b.js";import{Ub as Y}from"./chunk-ys904esh.js";import{Bc as q,Cc as L,Hc as g,Wb as f,cc as S,ic as D,jc as J,kc as k,pc as I,qc as j,zc as E}from"./chunk-vqcswg7h.js";import{Sc as i}from"./chunk-djp2xeqe.js";import{je as r,oe as T,se as v}from"./chunk-ds44bqr9.js";import{Ae as c,Be as h}from"./chunk-1aqzcgfr.js";import{nf as $}from"./chunk-3296fwss.js";import{sf as N}from"./chunk-5gdv4n4a.js";import{uf as b,xf as W}from"./chunk-tds3xq6b.js";async function Xx(x){try{if(!await x.shouldRun.call(x))return}catch(B){console.error(`Error evaluating shouldRun for cron job ${x.name}:`,B);return}try{await x.onTick.call(x)}catch(B){console.error(`Error executing cron job ${x.name}:`,B)}try{await x.callback.call(x)}catch(B){console.error(`Error in cron job ${x.name}:`,B)}try{await x.onComplete.call(x)}catch(B){console.error(`Error completing cron job ${x.name}:`,B)}}class U{static token="scheduler";handles=[];resolved;constructor(x){this.resolved=x.jobs}get jobs(){return[...this.resolved]}useJobs(x){this.resolved=x}start(x=(B)=>B()){if(this.resolved.length===0)return;let B=globalThis.__gemiCronJobs??=new Map,G=new Map;for(let H of this.resolved){let X=new H;if(!X.name){console.error(`Cron job must have a name \u2014 ${H.name||"an anonymous class"} has none, so it is not scheduled. If this is a base class that other jobs extend, move it out of the discovered directory: \`abstract\` does not survive to runtime, so a class under app/cron is indistinguishable from a job.`);continue}if(!X.cron){console.error(`Cron job must have an expression. Job: ${X.name}`);continue}let Z=G.get(X.name);if(Z!==void 0){console.error(`Two cron jobs claim the name "${X.name}" \u2014 ${Z} is scheduled and ${H.name||"an anonymous class"} is not. A name is the scheduler's key, so only one job can hold it. Rename one.`);continue}G.set(X.name,H.name||"an anonymous class"),B.get(X.name)?.stop();let C=Bun.cron(X.cron,()=>x(()=>Xx(X)));B.set(X.name,C),this.handles.push(C)}}stop(){for(let x of this.handles)x.stop();this.handles=[]}}class Yx extends Y{register(){this.app.singleton(T,()=>new T(this.app.config.get("auth",{})))}}class Zx extends Y{register(){this.app.singleton(U,()=>new U($(M(),this.app.config.get("schedule",{}))))}async boot(){let x=this.app.make(U),B=this.app.config.get("schedule",{});if(B.jobs===void 0){let{jobsDir:H}=$(M(),B);x.useJobs(await w(H))}if(process.env.GEMI_NO_SCHEDULE==="1")return;let G=this.app;x.start((H)=>b.run(G,H))}}class R{}class F extends Error{modelName;kind="FeatureModelMissing";constructor(x){super(`No "${x}" model is registered, so every feature stays off. Add the model to prisma/schema.prisma and export it from app/models \u2014 see docs/feature-flags.md.`);this.modelName=x}}class O extends R{modelName;constructor(x="FeatureFlag"){super();this.modelName=x}get available(){return c(this.modelName)}async load(){if(!this.available)throw new F(this.modelName);let x=h(this.modelName);return await x.asSystem(()=>x.findMany())}}function cx(x){return x}function u(){return{features:void 0,enabled:!0,source:new O,model:"FeatureFlag",ttl:30,context:void 0,onEvaluate:void 0,maxClientFlags:200}}class $x extends Y{register(){this.app.singleton(E,()=>{let x=this.app.config.get("features",{}),B=$(u(),x);if(x?.model!==void 0&&x?.source===void 0)B.source=new O(x.model);else if(x?.model!==void 0&&x.source instanceof O&&x.source.modelName!==x.model)I.warning(`app/config/features.ts sets \`model: "${x.model}"\` and a source reading "${x.source.modelName}". The source wins; drop \`model\` to silence this.`);return new E(B,(G)=>I.warning(G))})}async boot(){let x=this.app.make(E);if(!x.config.enabled)return;try{await x.refresh()}catch(B){I.error(`Could not warm the feature flag cache at boot. ${B instanceof Error?B.message:String(B)}`)}}}class Cx extends Y{register(){this.app.singleton(N,()=>new N(this.app.config.get("mail",{})))}}function Px(x){return`listener:${x}`}function d(x,B){_x(x);let{maxAttempts:G,worker:H}=B,X=x.event.name,Z=class extends l{maxAttempts=G;worker=H;async run(...C){let[P,_]=Kx(C),V=W(A).rehydrate(P,_);await new x().handle(V)}onFail(C){console.error(`The listener ${x.name} threw while handling ${X} off the queue. The queue will retry it up to ${G} times in total; nothing the dispatcher did is waiting on it.`,C)}onDeadletter(C){console.error(`The listener ${x.name} failed every one of its ${G} attempts at ${X} and has been dead-lettered, so this side effect did not happen and will not be retried.`,C)}};return Object.defineProperty(Z,"name",{value:Px(x.name),writable:!0}),Z}function _x(x){if(Object.getOwnPropertyDescriptor(x,"name")?.writable)return;throw Error(`The listener ${x.name} sets \`queued = true\` but does not declare \`static name\`, so it would be registered with the queue `+"under its class name \u2014 which a production build renames while the "+`payload that names it does not. Add: static name = "${x.name}";`)}function Kx(x){return typeof x[0]==="string"?x:x[0]}class A{static token="events";listeners={};events={};warnedFor=new Set;warnedAboutWaiting=new Set;config;constructor(x={}){this.config=$(Q(),x),this.useListeners(this.config.listeners)}useListeners(x){this.config.listeners=x,this.listeners={},this.events={};let B=new Set;for(let G of x){if(!G.event){console.error(`Listener ${G.name} does not declare \`static event\`, so there is no event name to register it under and its handle will never run. Add: static event = SomeEvent;`);continue}if(B.has(G.name)){console.error(`Two event listeners are named "${G.name}" \u2014 the first is `+"registered and this one is not. A listener's name identifies it across the framework, so only one class can hold it. Rename one.");continue}B.add(G.name);let H=G.event.name,X=new G;this.events[H]??=G.event,(this.listeners[H]??=[]).push({listener:G,job:X.queued?d(G,X):null})}}get queuedListenerJobs(){return Object.values(this.listeners).flat().flatMap(({job:x})=>x?[x]:[])}get registeredListeners(){return[...this.config.listeners]}dispatch(x,B){if(this.deferToCommit(x,B,!1))return;this.runListeners(x,B)}async dispatchAndWait(x,B){if(this.deferToCommit(x,B,!0))return;return this.runListeners(x,B)}deferToCommit(x,B,G){let{name:H,afterCommit:X}=x.constructor;if(!X)return!1;let Z=i(()=>this.runListeners(x,B));if(Z&&G)this.warnNothingIsWaitedFor(H);return Z}async runListeners(x,B){let G=x.constructor.name,H=this.listeners[G];if(!H?.length){this.warnNothingIsListening(G);return}for(let{listener:X,job:Z}of H){if(Z){this.enqueue(Z,X,G,B);continue}try{await new X().handle(x)}catch(C){console.error(`The listener ${X.name} threw while handling ${G}. The `+"listeners after it still ran \u2014 a listener's failure is its own.",C)}}}rehydrate(x,B=[]){let G=this.events[x];if(!G)throw Error(`Cannot rebuild the event "${x}" that came off the queue: no registered listener binds to an event of that name, so there is no class to construct. A queued listener runs in an application that `+"discovered its own listeners \u2014 check that this process sees the "+`same app/listeners as the one that dispatched, and that the event declares \`static name = "${x}"\`.`);return new G(...B)}enqueue(x,B,G,H){if(H===void 0){console.error(`The listener ${B.name} is queued, but ${G} reached the dispatcher without its constructor arguments, so there is nothing for the queue to rebuild it from and the listener was skipped. Dispatch through ${G}.dispatch(...) or ${G}.dispatchAndWait(...), which carry them.`);return}try{W(K).push(x,JSON.stringify([G,H]))}catch(X){console.error(`The listener ${B.name} could not be queued for ${G}, so it did not run and will not be retried. The listeners after it still ran.`,X)}}warnNothingIsWaitedFor(x){if(Bun.env.NODE_ENV==="production")return;if(this.warnedAboutWaiting.has(x))return;this.warnedAboutWaiting.add(x),console.warn(`[gemi] ${x}.dispatchAndWait() was called inside a transaction and ${x} declares \`static afterCommit = true\`, so it resolved `+"immediately with no listener having run \u2014 they run when the "+"transaction commits. Await the transaction instead, or drop afterCommit if the caller needs the side effects first. Development only.")}warnNothingIsListening(x){if(Bun.env.NODE_ENV==="production")return;if(this.warnedFor.has(x))return;this.warnedFor.add(x),console.warn(`[gemi] ${x} was dispatched and nothing is listening for it. A listener registers under the name its event declares, so check that app/listeners holds a Listener with \`static event = ${x}\` and that ${x} declares \`static name = "${x}"\`. Development only.`)}}class Vx extends Y{register(){this.app.singleton(A,()=>new A(this.app.config.get("events",{})))}async boot(){let x=this.app.make(A),B=this.app.config.get("events",{});if(B.listeners===void 0){let{listenersDir:X}=$(Q(),B);x.useListeners(await o(X))}let G=x.queuedListenerJobs;if(G.length===0)return;let H=this.app.make(K);for(let X of G)H.registerJob(X)}}class zx extends Y{register(){this.app.singleton(S,()=>new S(this.app.config.get("filesystem",{})))}}class Ax extends Y{register(){this.app.singleton(D,()=>new D(this.app.config.get("image",{})))}}class Ox extends Y{register(){this.app.instance(j,new j)}}function FB(x){return x}function s(){return{maxFileSize:10485760,onLogFileClosed:()=>{},onLogCreated:()=>{}}}class Ux extends Y{register(){this.app.singleton(J,()=>new J($(s(),this.app.config.get("log",{}))))}async boot(){if(!process.env.ROOT_DIR)return;await this.app.make(J).boot()}}class Ix extends Y{register(){this.app.singleton(k,()=>new k($(r(),this.app.config.get("middleware",{}))))}}function bB(x){return x}function n(){return{channels:{}}}class Ex extends Y{register(){this.app.singleton(f,()=>new f($(n(),this.app.config.get("broadcast",{}))))}}class Wx extends Y{register(){this.app.singleton(K,()=>new K(this.app.config.get("queue",{})))}async boot(){let x=this.app.config.get("queue",{});if(x.jobs!==void 0)return;let{jobsDir:B}=$(a(),x);this.app.make(K).useJobs(await t(B))}}class y{}function e(x,B){return Math.floor(x/B)*B}function Qx(x,B){if(B<=0)return 0;return Math.min(1,Math.max(0,(B-x)/B))}function p(x,B,G,H){return B*Qx(G,H)+x}function Jx(x){let{current:B,previous:G,elapsed:H,window:X,limit:Z,cost:C}=x,P=Z-C;if(P<0)return X;let _=Math.max(0,X-H);if(G>0){let z=X*(1-(P-B)/G);if(z<=X)return Math.max(0,Math.ceil(z-H))}if(B<=P)return _;if(B<=0)return _;let V=X*(1-P/B);return _+Math.max(0,Math.ceil(V))}function xx(x){let{allowed:B,current:G,previous:H,now:X,elapsed:Z,window:C,limit:P,cost:_}=x;if(B){let z=p(G,H,Z,C);return{allowed:!0,limit:P,remaining:Math.max(0,Math.floor(P-z)),resetAt:X-Z+C,retryAfter:0}}let V=Jx({current:G,previous:H,elapsed:Z,window:C,limit:P,cost:_});return{allowed:!1,limit:P,remaining:0,resetAt:X+V,retryAfter:V}}class m extends y{buckets=new Map;maxKeys;constructor(x={}){super();this.maxKeys=Math.max(1,x.maxKeys??1e5)}consume(x){let{key:B,limit:G,window:H}=x,X=x.cost??1,Z=Date.now(),C=e(Z,H),P=Z-C,_=this.roll(B,H,C),z=p(_.current,_.previous,P,H)+X<=G;if(z)_.current+=X;if(this.buckets.delete(B),this.buckets.set(B,_),this.buckets.size>this.maxKeys)this.evict(Z);return xx({allowed:z,current:_.current,previous:_.previous,now:Z,elapsed:P,window:H,limit:G,cost:X})}clear(){this.buckets.clear()}get size(){return this.buckets.size}roll(x,B,G){let H=this.buckets.get(x);if(!H||H.window!==B)return{window:B,windowStart:G,current:0,previous:0};if(H.windowStart===G)return H;if(H.windowStart+B===G)return H.previous=H.current,H.current=0,H.windowStart=G,H;return H.previous=0,H.current=0,H.windowStart=G,H}evict(x){for(let[B,G]of this.buckets)if(x-G.windowStart>=G.window*2)this.buckets.delete(B);for(let B of this.buckets.keys()){if(this.buckets.size<=this.maxKeys)break;this.buckets.delete(B)}}}function XG(x){return x}function Bx(){return{driver:new m,limit:1000,window:60}}class qx extends Y{register(){this.app.singleton(v,()=>new v($(Bx(),this.app.config.get("ratelimiter",{}))))}}function KG(x){return x}function Gx(){return{url:process.env.REDIS_URL,options:void 0}}class Lx extends Y{register(){this.app.singleton(g,()=>new g($(Gx(),this.app.config.get("redis",{}))))}}function Hx(x,B){let G=x.get(B);if(!G)throw Error(`Missing "${B}" configuration. Route dispatching needs a root router \u2014 declare it in "app/config/route.ts".`);return G}class Tx extends Y{register(){this.app.singleton(L,()=>new L(Hx(this.app.config,"route.api"))),this.app.singleton(q,()=>new q(Hx(this.app.config,"route.view")))}boot(){this.app.make(L),this.app.make(q)}}
2
+ import{Ab as a,Bb as K,Jb as M,Lb as Q,Nb as l,Ob as t,Pb as w,Rb as o}from"./chunk-b0t4zp6b.js";import{Ub as Y}from"./chunk-ys904esh.js";import{Bc as q,Cc as L,Hc as g,Wb as f,cc as S,ic as D,jc as J,kc as k,pc as I,qc as j,zc as E}from"./chunk-hk06nhxh.js";import{Sc as i}from"./chunk-djp2xeqe.js";import{je as r,oe as T,se as v}from"./chunk-ds44bqr9.js";import{Ae as c,Be as h}from"./chunk-1aqzcgfr.js";import{nf as $}from"./chunk-3296fwss.js";import{sf as N}from"./chunk-5gdv4n4a.js";import{uf as b,xf as W}from"./chunk-tds3xq6b.js";async function Xx(x){try{if(!await x.shouldRun.call(x))return}catch(B){console.error(`Error evaluating shouldRun for cron job ${x.name}:`,B);return}try{await x.onTick.call(x)}catch(B){console.error(`Error executing cron job ${x.name}:`,B)}try{await x.callback.call(x)}catch(B){console.error(`Error in cron job ${x.name}:`,B)}try{await x.onComplete.call(x)}catch(B){console.error(`Error completing cron job ${x.name}:`,B)}}class U{static token="scheduler";handles=[];resolved;constructor(x){this.resolved=x.jobs}get jobs(){return[...this.resolved]}useJobs(x){this.resolved=x}start(x=(B)=>B()){if(this.resolved.length===0)return;let B=globalThis.__gemiCronJobs??=new Map,G=new Map;for(let H of this.resolved){let X=new H;if(!X.name){console.error(`Cron job must have a name \u2014 ${H.name||"an anonymous class"} has none, so it is not scheduled. If this is a base class that other jobs extend, move it out of the discovered directory: \`abstract\` does not survive to runtime, so a class under app/cron is indistinguishable from a job.`);continue}if(!X.cron){console.error(`Cron job must have an expression. Job: ${X.name}`);continue}let Z=G.get(X.name);if(Z!==void 0){console.error(`Two cron jobs claim the name "${X.name}" \u2014 ${Z} is scheduled and ${H.name||"an anonymous class"} is not. A name is the scheduler's key, so only one job can hold it. Rename one.`);continue}G.set(X.name,H.name||"an anonymous class"),B.get(X.name)?.stop();let C=Bun.cron(X.cron,()=>x(()=>Xx(X)));B.set(X.name,C),this.handles.push(C)}}stop(){for(let x of this.handles)x.stop();this.handles=[]}}class Yx extends Y{register(){this.app.singleton(T,()=>new T(this.app.config.get("auth",{})))}}class Zx extends Y{register(){this.app.singleton(U,()=>new U($(M(),this.app.config.get("schedule",{}))))}async boot(){let x=this.app.make(U),B=this.app.config.get("schedule",{});if(B.jobs===void 0){let{jobsDir:H}=$(M(),B);x.useJobs(await w(H))}if(process.env.GEMI_NO_SCHEDULE==="1")return;let G=this.app;x.start((H)=>b.run(G,H))}}class R{}class F extends Error{modelName;kind="FeatureModelMissing";constructor(x){super(`No "${x}" model is registered, so every feature stays off. Add the model to prisma/schema.prisma and export it from app/models \u2014 see docs/feature-flags.md.`);this.modelName=x}}class O extends R{modelName;constructor(x="FeatureFlag"){super();this.modelName=x}get available(){return c(this.modelName)}async load(){if(!this.available)throw new F(this.modelName);let x=h(this.modelName);return await x.asSystem(()=>x.findMany())}}function cx(x){return x}function u(){return{features:void 0,enabled:!0,source:new O,model:"FeatureFlag",ttl:30,context:void 0,onEvaluate:void 0,maxClientFlags:200}}class $x extends Y{register(){this.app.singleton(E,()=>{let x=this.app.config.get("features",{}),B=$(u(),x);if(x?.model!==void 0&&x?.source===void 0)B.source=new O(x.model);else if(x?.model!==void 0&&x.source instanceof O&&x.source.modelName!==x.model)I.warning(`app/config/features.ts sets \`model: "${x.model}"\` and a source reading "${x.source.modelName}". The source wins; drop \`model\` to silence this.`);return new E(B,(G)=>I.warning(G))})}async boot(){let x=this.app.make(E);if(!x.config.enabled)return;try{await x.refresh()}catch(B){I.error(`Could not warm the feature flag cache at boot. ${B instanceof Error?B.message:String(B)}`)}}}class Cx extends Y{register(){this.app.singleton(N,()=>new N(this.app.config.get("mail",{})))}}function Px(x){return`listener:${x}`}function d(x,B){_x(x);let{maxAttempts:G,worker:H}=B,X=x.event.name,Z=class extends l{maxAttempts=G;worker=H;async run(...C){let[P,_]=Kx(C),V=W(A).rehydrate(P,_);await new x().handle(V)}onFail(C){console.error(`The listener ${x.name} threw while handling ${X} off the queue. The queue will retry it up to ${G} times in total; nothing the dispatcher did is waiting on it.`,C)}onDeadletter(C){console.error(`The listener ${x.name} failed every one of its ${G} attempts at ${X} and has been dead-lettered, so this side effect did not happen and will not be retried.`,C)}};return Object.defineProperty(Z,"name",{value:Px(x.name),writable:!0}),Z}function _x(x){if(Object.getOwnPropertyDescriptor(x,"name")?.writable)return;throw Error(`The listener ${x.name} sets \`queued = true\` but does not declare \`static name\`, so it would be registered with the queue `+"under its class name \u2014 which a production build renames while the "+`payload that names it does not. Add: static name = "${x.name}";`)}function Kx(x){return typeof x[0]==="string"?x:x[0]}class A{static token="events";listeners={};events={};warnedFor=new Set;warnedAboutWaiting=new Set;config;constructor(x={}){this.config=$(Q(),x),this.useListeners(this.config.listeners)}useListeners(x){this.config.listeners=x,this.listeners={},this.events={};let B=new Set;for(let G of x){if(!G.event){console.error(`Listener ${G.name} does not declare \`static event\`, so there is no event name to register it under and its handle will never run. Add: static event = SomeEvent;`);continue}if(B.has(G.name)){console.error(`Two event listeners are named "${G.name}" \u2014 the first is `+"registered and this one is not. A listener's name identifies it across the framework, so only one class can hold it. Rename one.");continue}B.add(G.name);let H=G.event.name,X=new G;this.events[H]??=G.event,(this.listeners[H]??=[]).push({listener:G,job:X.queued?d(G,X):null})}}get queuedListenerJobs(){return Object.values(this.listeners).flat().flatMap(({job:x})=>x?[x]:[])}get registeredListeners(){return[...this.config.listeners]}dispatch(x,B){if(this.deferToCommit(x,B,!1))return;this.runListeners(x,B)}async dispatchAndWait(x,B){if(this.deferToCommit(x,B,!0))return;return this.runListeners(x,B)}deferToCommit(x,B,G){let{name:H,afterCommit:X}=x.constructor;if(!X)return!1;let Z=i(()=>this.runListeners(x,B));if(Z&&G)this.warnNothingIsWaitedFor(H);return Z}async runListeners(x,B){let G=x.constructor.name,H=this.listeners[G];if(!H?.length){this.warnNothingIsListening(G);return}for(let{listener:X,job:Z}of H){if(Z){this.enqueue(Z,X,G,B);continue}try{await new X().handle(x)}catch(C){console.error(`The listener ${X.name} threw while handling ${G}. The `+"listeners after it still ran \u2014 a listener's failure is its own.",C)}}}rehydrate(x,B=[]){let G=this.events[x];if(!G)throw Error(`Cannot rebuild the event "${x}" that came off the queue: no registered listener binds to an event of that name, so there is no class to construct. A queued listener runs in an application that `+"discovered its own listeners \u2014 check that this process sees the "+`same app/listeners as the one that dispatched, and that the event declares \`static name = "${x}"\`.`);return new G(...B)}enqueue(x,B,G,H){if(H===void 0){console.error(`The listener ${B.name} is queued, but ${G} reached the dispatcher without its constructor arguments, so there is nothing for the queue to rebuild it from and the listener was skipped. Dispatch through ${G}.dispatch(...) or ${G}.dispatchAndWait(...), which carry them.`);return}try{W(K).push(x,JSON.stringify([G,H]))}catch(X){console.error(`The listener ${B.name} could not be queued for ${G}, so it did not run and will not be retried. The listeners after it still ran.`,X)}}warnNothingIsWaitedFor(x){if(Bun.env.NODE_ENV==="production")return;if(this.warnedAboutWaiting.has(x))return;this.warnedAboutWaiting.add(x),console.warn(`[gemi] ${x}.dispatchAndWait() was called inside a transaction and ${x} declares \`static afterCommit = true\`, so it resolved `+"immediately with no listener having run \u2014 they run when the "+"transaction commits. Await the transaction instead, or drop afterCommit if the caller needs the side effects first. Development only.")}warnNothingIsListening(x){if(Bun.env.NODE_ENV==="production")return;if(this.warnedFor.has(x))return;this.warnedFor.add(x),console.warn(`[gemi] ${x} was dispatched and nothing is listening for it. A listener registers under the name its event declares, so check that app/listeners holds a Listener with \`static event = ${x}\` and that ${x} declares \`static name = "${x}"\`. Development only.`)}}class Vx extends Y{register(){this.app.singleton(A,()=>new A(this.app.config.get("events",{})))}async boot(){let x=this.app.make(A),B=this.app.config.get("events",{});if(B.listeners===void 0){let{listenersDir:X}=$(Q(),B);x.useListeners(await o(X))}let G=x.queuedListenerJobs;if(G.length===0)return;let H=this.app.make(K);for(let X of G)H.registerJob(X)}}class zx extends Y{register(){this.app.singleton(S,()=>new S(this.app.config.get("filesystem",{})))}}class Ax extends Y{register(){this.app.singleton(D,()=>new D(this.app.config.get("image",{})))}}class Ox extends Y{register(){this.app.instance(j,new j)}}function FB(x){return x}function s(){return{maxFileSize:10485760,onLogFileClosed:()=>{},onLogCreated:()=>{}}}class Ux extends Y{register(){this.app.singleton(J,()=>new J($(s(),this.app.config.get("log",{}))))}async boot(){if(!process.env.ROOT_DIR)return;await this.app.make(J).boot()}}class Ix extends Y{register(){this.app.singleton(k,()=>new k($(r(),this.app.config.get("middleware",{}))))}}function bB(x){return x}function n(){return{channels:{}}}class Ex extends Y{register(){this.app.singleton(f,()=>new f($(n(),this.app.config.get("broadcast",{}))))}}class Wx extends Y{register(){this.app.singleton(K,()=>new K(this.app.config.get("queue",{})))}async boot(){let x=this.app.config.get("queue",{});if(x.jobs!==void 0)return;let{jobsDir:B}=$(a(),x);this.app.make(K).useJobs(await t(B))}}class y{}function e(x,B){return Math.floor(x/B)*B}function Qx(x,B){if(B<=0)return 0;return Math.min(1,Math.max(0,(B-x)/B))}function p(x,B,G,H){return B*Qx(G,H)+x}function Jx(x){let{current:B,previous:G,elapsed:H,window:X,limit:Z,cost:C}=x,P=Z-C;if(P<0)return X;let _=Math.max(0,X-H);if(G>0){let z=X*(1-(P-B)/G);if(z<=X)return Math.max(0,Math.ceil(z-H))}if(B<=P)return _;if(B<=0)return _;let V=X*(1-P/B);return _+Math.max(0,Math.ceil(V))}function xx(x){let{allowed:B,current:G,previous:H,now:X,elapsed:Z,window:C,limit:P,cost:_}=x;if(B){let z=p(G,H,Z,C);return{allowed:!0,limit:P,remaining:Math.max(0,Math.floor(P-z)),resetAt:X-Z+C,retryAfter:0}}let V=Jx({current:G,previous:H,elapsed:Z,window:C,limit:P,cost:_});return{allowed:!1,limit:P,remaining:0,resetAt:X+V,retryAfter:V}}class m extends y{buckets=new Map;maxKeys;constructor(x={}){super();this.maxKeys=Math.max(1,x.maxKeys??1e5)}consume(x){let{key:B,limit:G,window:H}=x,X=x.cost??1,Z=Date.now(),C=e(Z,H),P=Z-C,_=this.roll(B,H,C),z=p(_.current,_.previous,P,H)+X<=G;if(z)_.current+=X;if(this.buckets.delete(B),this.buckets.set(B,_),this.buckets.size>this.maxKeys)this.evict(Z);return xx({allowed:z,current:_.current,previous:_.previous,now:Z,elapsed:P,window:H,limit:G,cost:X})}clear(){this.buckets.clear()}get size(){return this.buckets.size}roll(x,B,G){let H=this.buckets.get(x);if(!H||H.window!==B)return{window:B,windowStart:G,current:0,previous:0};if(H.windowStart===G)return H;if(H.windowStart+B===G)return H.previous=H.current,H.current=0,H.windowStart=G,H;return H.previous=0,H.current=0,H.windowStart=G,H}evict(x){for(let[B,G]of this.buckets)if(x-G.windowStart>=G.window*2)this.buckets.delete(B);for(let B of this.buckets.keys()){if(this.buckets.size<=this.maxKeys)break;this.buckets.delete(B)}}}function XG(x){return x}function Bx(){return{driver:new m,limit:1000,window:60}}class qx extends Y{register(){this.app.singleton(v,()=>new v($(Bx(),this.app.config.get("ratelimiter",{}))))}}function KG(x){return x}function Gx(){return{url:process.env.REDIS_URL,options:void 0}}class Lx extends Y{register(){this.app.singleton(g,()=>new g($(Gx(),this.app.config.get("redis",{}))))}}function Hx(x,B){let G=x.get(B);if(!G)throw Error(`Missing "${B}" configuration. Route dispatching needs a root router \u2014 declare it in "app/config/route.ts".`);return G}class Tx extends Y{register(){this.app.singleton(L,()=>new L(Hx(this.app.config,"route.api"))),this.app.singleton(q,()=>new q(Hx(this.app.config,"route.view")))}boot(){this.app.make(L),this.app.make(q)}}
3
3
  export{U as Ta,Yx as Ua,Zx as Va,R as Wa,F as Xa,O as Ya,cx as Za,u as _a,$x as $a,Cx as ab,A as bb,Vx as cb,zx as db,Ax as eb,Ox as fb,FB as gb,s as hb,Ux as ib,Ix as jb,bB as kb,n as lb,Ex as mb,Wx as nb,e as ob,xx as pb,y as qb,m as rb,XG as sb,Bx as tb,qx as ub,KG as vb,Gx as wb,Lx as xb,Tx as yb};
4
4
 
5
5
  //# debugId=130F6246FAD06C9B64756E2164756E21
@@ -1,13 +1,17 @@
1
1
  import type sharp from "sharp";
2
2
  import type { Prettify } from "../utils/type";
3
3
  import type { ByteRange } from "../http/range";
4
- import type { PutFileParams, ReadFileParams, ReadResult } from "../services/file-storage/drivers/types";
4
+ import type { PutFileOptions, PutFileParams, ReadFileParams, ReadResult } from "../services/file-storage/drivers/types";
5
5
  import { FilesystemManager } from "../services/file-storage/FilesystemManager";
6
6
  import { Facade } from "./Facade";
7
7
  type Metadata = Prettify<sharp.Metadata>;
8
8
  export declare class Storage extends Facade {
9
9
  static getFacadeAccessor(): typeof FilesystemManager;
10
- static put(params: PutFileParams | Blob): Promise<string>;
10
+ /**
11
+ * Stores a file and returns its object name. Pass `{ signal }` to cancel the
12
+ * upload, e.g. with the incoming request's signal or `AbortSignal.timeout()`.
13
+ */
14
+ static put(params: PutFileParams | Blob, options?: PutFileOptions): Promise<string>;
11
15
  static metadata(obj: Blob | File): Promise<Partial<Metadata>>;
12
16
  static fetch(params: ReadFileParams | string): Promise<Response>;
13
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../facades/Storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEzC,qBAAa,OAAQ,SAAQ,MAAM;IACjC,MAAM,CAAC,iBAAiB;WAIX,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;WAIhC,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;WAatD,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAIlD;;;;;;;;OAQG;WACU,IAAI,CACf,MAAM,EAAE,cAAc,GAAG,MAAM,EAC/B,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;KAAO,GACzC,OAAO,CAAC,UAAU,CAAC;IAgBtB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAG1B,MAAM,CAAC,MAAM;CACd"}
1
+ {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../facades/Storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEzC,qBAAa,OAAQ,SAAQ,MAAM;IACjC,MAAM,CAAC,iBAAiB;IAIxB;;;OAGG;WACU,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,GAAE,cAAmB;WAI9D,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;WAatD,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAIlD;;;;;;;;OAQG;WACU,IAAI,CACf,MAAM,EAAE,cAAc,GAAG,MAAM,EAC/B,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;KAAO,GACzC,OAAO,CAAC,UAAU,CAAC;IAgBtB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAG1B,MAAM,CAAC,MAAM;CACd"}
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Dc as h,Ec as i,Fc as j,Gc as k,Ic as l,Jc as m,Kc as n,Lc as o,Mc as p,Vb as b,Xb as c,Yb as d,Zb as e,dc as f,pc as g}from"../chunk-vqcswg7h.js";import"../chunk-djp2xeqe.js";import"../chunk-ybqss0jy.js";import"../chunk-8r8epsef.js";import{de as a}from"../chunk-ds44bqr9.js";import"../chunk-1aqzcgfr.js";import"../chunk-f233yzxf.js";import"../chunk-sz051605.js";import"../chunk-mca9wsvs.js";import"../chunk-3296fwss.js";import"../chunk-x6y1z4cq.js";import"../chunk-tds3xq6b.js";import"../chunk-j23cengk.js";import"../chunk-hxb1eg2z.js";import"../chunk-4dan69s4.js";export{i as Url,f as Storage,l as Redis,a as Redirect,m as RateLimiter,h as Query,j as Meta,g as Log,e as Lang,n as Features,b as Facade,p as DB,k as Cookie,o as ConnectionQueries,c as Broadcast,d as Auth};
2
+ import{Dc as h,Ec as i,Fc as j,Gc as k,Ic as l,Jc as m,Kc as n,Lc as o,Mc as p,Vb as b,Xb as c,Yb as d,Zb as e,dc as f,pc as g}from"../chunk-hk06nhxh.js";import"../chunk-djp2xeqe.js";import"../chunk-ybqss0jy.js";import"../chunk-8r8epsef.js";import{de as a}from"../chunk-ds44bqr9.js";import"../chunk-1aqzcgfr.js";import"../chunk-f233yzxf.js";import"../chunk-sz051605.js";import"../chunk-mca9wsvs.js";import"../chunk-3296fwss.js";import"../chunk-x6y1z4cq.js";import"../chunk-tds3xq6b.js";import"../chunk-j23cengk.js";import"../chunk-hxb1eg2z.js";import"../chunk-4dan69s4.js";export{i as Url,f as Storage,l as Redis,a as Redirect,m as RateLimiter,h as Query,j as Meta,g as Log,e as Lang,n as Features,b as Facade,p as DB,k as Cookie,o as ConnectionQueries,c as Broadcast,d as Auth};
3
3
 
4
4
  //# debugId=053983E795F13BD264756E2164756E21
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{aa as R}from"../chunk-57a0nqfj.js";import"../chunk-5ad8era8.js";import{Qa as L}from"../chunk-q6qghsy7.js";import{Sb as E,Tb as V}from"../chunk-p3qd0gqa.js";import"../chunk-ys904esh.js";import{Zb as j}from"../chunk-vqcswg7h.js";import"../chunk-djp2xeqe.js";import"../chunk-ybqss0jy.js";import"../chunk-8r8epsef.js";import"../chunk-ds44bqr9.js";import"../chunk-1aqzcgfr.js";import"../chunk-f233yzxf.js";import"../chunk-sz051605.js";import"../chunk-mca9wsvs.js";import"../chunk-3296fwss.js";import{tf as X}from"../chunk-x6y1z4cq.js";import"../chunk-tds3xq6b.js";import"../chunk-j23cengk.js";import"../chunk-hxb1eg2z.js";import"../chunk-4dan69s4.js";import{createElement as J,Fragment as M,isValidElement as U}from"react";function $(q,B){let G=Object.values(B).some((z)=>typeof z==="function"&&U(z(""))),Q=/{{([^{}]+?)(?::([^{}\[\]]+?))?(?:\[(.*?)\])?}}/g;if(!G)return q.replace(Q,(W,O,_,Z)=>{let C=O.includes(":")?O.split(":")[0]:O,H=B[C];if(H===void 0)return W;if(typeof H==="function"){let K=H(Z!==void 0?Z:"");if(U(K))throw Error("JSX returned in string context");return String(K)}if(_)switch(_.toLowerCase()){case"number":return Number(H).toString();case"string":return String(H);case"boolean":return Boolean(H).toString();default:return String(H)}return String(H)});else{let z=[],W=0,O=null;while((O=Q.exec(q))!==null){let[_,Z,C,H]=O,F=O.index,K=Z.includes(":")?Z.split(":")[0]:Z;if(F>W)z.push(q.substring(W,F));let Y=B[K];if(Y===void 0)z.push(_);else if(typeof Y==="function"){let A=Y(H!==void 0?H:"");z.push(A)}else if(C)switch(C.toLowerCase()){case"number":z.push(Number(Y).toString());break;case"string":z.push(String(Y));break;case"boolean":z.push(Boolean(Y).toString());break;default:z.push(String(Y))}else z.push(String(Y));W=F+_.length}if(W<q.length)z.push(q.substring(W));return J(M,{},...z)}}class P{name;dictionary;constructor(q,B){this.name=q;this.dictionary=B}reference(q){if(typeof window<"u")throw Error("Cannot use reference in the browser");if(!this.dictionary?.[q])throw Error(`Translation not found for ${String(q)}`);return this.dictionary[q]}render(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B[0]};if(typeof window<"u")throw Error("Cannot use render in the browser");if(!this.dictionary?.[q]?.[G])throw Error(`Translation not found for ${String(q)} in ${String(G)}`);return $(this.dictionary[q][G],Q??{})}static create(q,B){return new P(q,B)}static text(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B?.[0]};if(!q?.[G])throw Error(`Translation not found for ${String(G)}`);return $(q[G],Q??{})}}async function N(q,B,...G){let{locale:Q=j.locale(),params:z}={params:{},...G[0]},O=(await q.load(String(Q)))[B];if(typeof O!=="string")throw Error(`Translation not found for "${B}" in "${String(Q)}" (dictionary ${q.id})`);return $(O,z??{})}export{V as translationConfigDefaults,N as translate,E as defineTranslationConfig,R as defineDictionary,X as Translator,L as TranslationServiceProvider,P as Dictionary};
2
+ import{aa as R}from"../chunk-57a0nqfj.js";import"../chunk-5ad8era8.js";import{Qa as L}from"../chunk-q6qghsy7.js";import{Sb as E,Tb as V}from"../chunk-p3qd0gqa.js";import"../chunk-ys904esh.js";import{Zb as j}from"../chunk-hk06nhxh.js";import"../chunk-djp2xeqe.js";import"../chunk-ybqss0jy.js";import"../chunk-8r8epsef.js";import"../chunk-ds44bqr9.js";import"../chunk-1aqzcgfr.js";import"../chunk-f233yzxf.js";import"../chunk-sz051605.js";import"../chunk-mca9wsvs.js";import"../chunk-3296fwss.js";import{tf as X}from"../chunk-x6y1z4cq.js";import"../chunk-tds3xq6b.js";import"../chunk-j23cengk.js";import"../chunk-hxb1eg2z.js";import"../chunk-4dan69s4.js";import{createElement as J,Fragment as M,isValidElement as U}from"react";function $(q,B){let G=Object.values(B).some((z)=>typeof z==="function"&&U(z(""))),Q=/{{([^{}]+?)(?::([^{}\[\]]+?))?(?:\[(.*?)\])?}}/g;if(!G)return q.replace(Q,(W,O,_,Z)=>{let C=O.includes(":")?O.split(":")[0]:O,H=B[C];if(H===void 0)return W;if(typeof H==="function"){let K=H(Z!==void 0?Z:"");if(U(K))throw Error("JSX returned in string context");return String(K)}if(_)switch(_.toLowerCase()){case"number":return Number(H).toString();case"string":return String(H);case"boolean":return Boolean(H).toString();default:return String(H)}return String(H)});else{let z=[],W=0,O=null;while((O=Q.exec(q))!==null){let[_,Z,C,H]=O,F=O.index,K=Z.includes(":")?Z.split(":")[0]:Z;if(F>W)z.push(q.substring(W,F));let Y=B[K];if(Y===void 0)z.push(_);else if(typeof Y==="function"){let A=Y(H!==void 0?H:"");z.push(A)}else if(C)switch(C.toLowerCase()){case"number":z.push(Number(Y).toString());break;case"string":z.push(String(Y));break;case"boolean":z.push(Boolean(Y).toString());break;default:z.push(String(Y))}else z.push(String(Y));W=F+_.length}if(W<q.length)z.push(q.substring(W));return J(M,{},...z)}}class P{name;dictionary;constructor(q,B){this.name=q;this.dictionary=B}reference(q){if(typeof window<"u")throw Error("Cannot use reference in the browser");if(!this.dictionary?.[q])throw Error(`Translation not found for ${String(q)}`);return this.dictionary[q]}render(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B[0]};if(typeof window<"u")throw Error("Cannot use render in the browser");if(!this.dictionary?.[q]?.[G])throw Error(`Translation not found for ${String(q)} in ${String(G)}`);return $(this.dictionary[q][G],Q??{})}static create(q,B){return new P(q,B)}static text(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B?.[0]};if(!q?.[G])throw Error(`Translation not found for ${String(G)}`);return $(q[G],Q??{})}}async function N(q,B,...G){let{locale:Q=j.locale(),params:z}={params:{},...G[0]},O=(await q.load(String(Q)))[B];if(typeof O!=="string")throw Error(`Translation not found for "${B}" in "${String(Q)}" (dictionary ${q.id})`);return $(O,z??{})}export{V as translationConfigDefaults,N as translate,E as defineTranslationConfig,R as defineDictionary,X as Translator,L as TranslationServiceProvider,P as Dictionary};
3
3
 
4
4
  //# debugId=250C5056AA44F55964756E2164756E21
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{sa as Y}from"../chunk-cf7bvd12.js";import{Pa as M}from"../chunk-tr3cbx8k.js";import{Qa as Z}from"../chunk-q6qghsy7.js";import{$a as $,Ta as J,Ua as X,Va as _,ab as E,cb as T,db as V,eb as y,fb as F,ib as K,jb as L,mb as Q,nb as U,ub as B,xb as D,yb as I}from"../chunk-s41ees18.js";import{Bb as R}from"../chunk-b0t4zp6b.js";import"../chunk-p3qd0gqa.js";import"../chunk-ys904esh.js";import{Bc as m,Cc as k,Wb as f}from"../chunk-vqcswg7h.js";import"../chunk-djp2xeqe.js";import"../chunk-ybqss0jy.js";import"../chunk-8r8epsef.js";import{ne as h}from"../chunk-ds44bqr9.js";import{Ce as b}from"../chunk-1aqzcgfr.js";import"../chunk-f233yzxf.js";import"../chunk-sz051605.js";import"../chunk-mca9wsvs.js";import"../chunk-3296fwss.js";import"../chunk-5gdv4n4a.js";import"../chunk-x6y1z4cq.js";import{uf as H,wf as x}from"../chunk-tds3xq6b.js";import"../chunk-j23cengk.js";import"../chunk-hxb1eg2z.js";import"../chunk-4dan69s4.js";var G=[F,L,Y,$,I,X,E,K,V,U,T,D,Q,y,Z,B,_];class w{config={};providers=[];services=[];serviceInstances=[];serviceTokens=new Set;servicesBooted=!1;models=[];app=new x;boot(){if(this.models.length>0)M(...this.models);else A();this.app.config.merge(this.config),x.setInstance(this.app),this.app.registerMany([...G,...this.providers]),this.registerServices()}registerServices(){let q=this.serviceTokens;this.serviceInstances=[],this.serviceTokens=new Set,this.servicesBooted=!1;let N=new Map;for(let z of this.services){let C=typeof z==="function"?new z:z,j=C.constructor;if(!j.token)throw Error(`Service [${j.name}] is listed in \`services\` but does not declare a \`static token\`.`);let O=N.get(j.token);if(O)throw Error(`Services [${O}] and [${j.name}] both declare the token "${j.token}". Tokens are the container's keys, so they must be unique.`);N.set(j.token,j.name);let W=j;if(!q.has(j.token)&&this.app.bound(W))throw Error(`Service [${j.name}] declares the token "${j.token}", which is already bound in the container by the framework or a provider. Binding it would replace that service everywhere, so pick a token nothing else owns.`);this.app.instance(W,C),this.serviceInstances.push(C),this.serviceTokens.add(j.token)}}async waitForBoot(){await this.app.boot(),await this.bootServices()}async bootServices(){if(this.servicesBooted)return;for(let q of this.serviceInstances)await q.boot();this.servicesBooted=!0}run(q){return H.run(this.app,q)}resolve(q){return this.app.make(q)}apiRoutes(){return this.app.make(k)}viewRoutes(){return this.app.make(m)}broadcast(){return this.app.make(f)}queue(){return this.app.make(R)}destroy(){if(this.app.resolved(J))this.app.make(J).stop();if(this.app.flush(),x.getInstance()===this.app)x.setInstance(void 0);H.disable()}}function A(){if(Bun.env.NODE_ENV==="production")return;let q=b();if(q.length===0)return;console.warn(`[gemi] ${q.length} model${q.length===1?" is":"s are"} registered, but Kernel.models is empty.
2
+ import{sa as Y}from"../chunk-cf7bvd12.js";import{Pa as M}from"../chunk-tr3cbx8k.js";import{Qa as Z}from"../chunk-q6qghsy7.js";import{$a as $,Ta as J,Ua as X,Va as _,ab as E,cb as T,db as V,eb as y,fb as F,ib as K,jb as L,mb as Q,nb as U,ub as B,xb as D,yb as I}from"../chunk-kac5vmvn.js";import{Bb as R}from"../chunk-b0t4zp6b.js";import"../chunk-p3qd0gqa.js";import"../chunk-ys904esh.js";import{Bc as m,Cc as k,Wb as f}from"../chunk-hk06nhxh.js";import"../chunk-djp2xeqe.js";import"../chunk-ybqss0jy.js";import"../chunk-8r8epsef.js";import{ne as h}from"../chunk-ds44bqr9.js";import{Ce as b}from"../chunk-1aqzcgfr.js";import"../chunk-f233yzxf.js";import"../chunk-sz051605.js";import"../chunk-mca9wsvs.js";import"../chunk-3296fwss.js";import"../chunk-5gdv4n4a.js";import"../chunk-x6y1z4cq.js";import{uf as H,wf as x}from"../chunk-tds3xq6b.js";import"../chunk-j23cengk.js";import"../chunk-hxb1eg2z.js";import"../chunk-4dan69s4.js";var G=[F,L,Y,$,I,X,E,K,V,U,T,D,Q,y,Z,B,_];class w{config={};providers=[];services=[];serviceInstances=[];serviceTokens=new Set;servicesBooted=!1;models=[];app=new x;boot(){if(this.models.length>0)M(...this.models);else A();this.app.config.merge(this.config),x.setInstance(this.app),this.app.registerMany([...G,...this.providers]),this.registerServices()}registerServices(){let q=this.serviceTokens;this.serviceInstances=[],this.serviceTokens=new Set,this.servicesBooted=!1;let N=new Map;for(let z of this.services){let C=typeof z==="function"?new z:z,j=C.constructor;if(!j.token)throw Error(`Service [${j.name}] is listed in \`services\` but does not declare a \`static token\`.`);let O=N.get(j.token);if(O)throw Error(`Services [${O}] and [${j.name}] both declare the token "${j.token}". Tokens are the container's keys, so they must be unique.`);N.set(j.token,j.name);let W=j;if(!q.has(j.token)&&this.app.bound(W))throw Error(`Service [${j.name}] declares the token "${j.token}", which is already bound in the container by the framework or a provider. Binding it would replace that service everywhere, so pick a token nothing else owns.`);this.app.instance(W,C),this.serviceInstances.push(C),this.serviceTokens.add(j.token)}}async waitForBoot(){await this.app.boot(),await this.bootServices()}async bootServices(){if(this.servicesBooted)return;for(let q of this.serviceInstances)await q.boot();this.servicesBooted=!0}run(q){return H.run(this.app,q)}resolve(q){return this.app.make(q)}apiRoutes(){return this.app.make(k)}viewRoutes(){return this.app.make(m)}broadcast(){return this.app.make(f)}queue(){return this.app.make(R)}destroy(){if(this.app.resolved(J))this.app.make(J).stop();if(this.app.flush(),x.getInstance()===this.app)x.setInstance(void 0);H.disable()}}function A(){if(Bun.env.NODE_ENV==="production")return;let q=b();if(q.length===0)return;console.warn(`[gemi] ${q.length} model${q.length===1?" is":"s are"} registered, but Kernel.models is empty.
3
3
  Nested relation reads resolve a model by name, so a policy on a subclass that does not own its
4
4
  `+" name is skipped inside every include \u2014 scoped at the root, "+`unscoped in an include, with nothing
5
5
  to notice it. Declaring the modules registers each class under its own name and audits the set:
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{qa as z}from"../chunk-tkdxv6cq.js";import{ra as b}from"../chunk-xnytbrda.js";import{Df as g}from"../chunk-hxb1eg2z.js";import{If as S}from"../chunk-4dan69s4.js";class B{app;instrumentation;constructor(f){this.app=new b({kernel:f.kernel}),this.instrumentation=f.instrumentation??((C,F)=>F(C))}async start(){if(process.env.ROOT_DIR=g(),await this.app.waitForBoot(),Bun.env.NODE_ENV==="production"){let{httpProd:f}=await import("../chunk-hyxmmj9b.js");await f(this.app,this.instrumentation.bind(this))}else{z();let{httpDev:f}=await import("../chunk-3aemqfdr.js");await f(this.app,this.instrumentation.bind(this))}}}export{B as Server};
2
+ import{qa as z}from"../chunk-tkdxv6cq.js";import{ra as b}from"../chunk-xnytbrda.js";import{Df as g}from"../chunk-hxb1eg2z.js";import{If as S}from"../chunk-4dan69s4.js";class B{app;instrumentation;constructor(f){this.app=new b({kernel:f.kernel}),this.instrumentation=f.instrumentation??((C,F)=>F(C))}async start(){if(process.env.ROOT_DIR=g(),await this.app.waitForBoot(),Bun.env.NODE_ENV==="production"){let{httpProd:f}=await import("../chunk-9penj44g.js");await f(this.app,this.instrumentation.bind(this))}else{z();let{httpDev:f}=await import("../chunk-k4a2gzyc.js");await f(this.app,this.instrumentation.bind(this))}}}export{B as Server};
3
3
 
4
4
  //# debugId=D570F7183E61436864756E2164756E21
@@ -1,6 +1,6 @@
1
1
  import { Buffer } from "node:buffer";
2
2
  import { FileStorageDriver } from "./FileStorageDriver";
3
- import type { PutFileParams, ReadFileParams, ReadResult } from "./types";
3
+ import type { PutFileOptions, PutFileParams, ReadFileParams, ReadResult } from "./types";
4
4
  /**
5
5
  * The slice of `@azure/storage-blob` this driver uses. Declared structurally so
6
6
  * the package stays an optional peer dependency: nothing here imports its types.
@@ -25,6 +25,7 @@ interface BlobClientLike {
25
25
  blobHTTPHeaders?: {
26
26
  blobContentType?: string;
27
27
  };
28
+ abortSignal?: AbortSignal;
28
29
  }): Promise<unknown>;
29
30
  delete(): Promise<unknown>;
30
31
  }
@@ -67,7 +68,7 @@ export declare class AzureBlobDriver extends FileStorageDriver {
67
68
  constructor(config?: AzureBlobDriverConfig);
68
69
  private serviceClient;
69
70
  private blob;
70
- put(params: PutFileParams | Blob): Promise<string>;
71
+ put(params: PutFileParams | Blob, { signal }?: PutFileOptions): Promise<string>;
71
72
  list(folder: string): Promise<string[]>;
72
73
  fetch(params: ReadFileParams | string): Promise<Response>;
73
74
  read(input: ReadFileParams | string): Promise<ReadResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"AzureBlobDriver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/AzureBlobDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEzE;;;GAGG;AACH,UAAU,cAAc;IACtB,QAAQ,CACN,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QACT,kBAAkB,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;QAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,IAAI,CAAC;KACrB,CAAC,CAAC;IACH,aAAa,IAAI,OAAO,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,IAAI,CAAC;KACrB,CAAC,CAAC;IACH,UAAU,CACR,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAC3D,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IACjD,aAAa,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/E;AAED,UAAU,qBAAqB;IAC7B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACvD;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAkBD;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;IAGxC,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,oBAAoB,CAA+C;gBAEvD,MAAM,GAAE,qBAA0B;YAIxC,aAAa;YAmCb,IAAI;IAeZ,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAiChC,IAAI,CAAC,MAAM,EAAE,MAAM;IAYnB,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAkBrC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsEzD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAgBpC,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAc7C"}
1
+ {"version":3,"file":"AzureBlobDriver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/AzureBlobDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,UAAU,cAAc;IACtB,QAAQ,CACN,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QACT,kBAAkB,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;QAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,IAAI,CAAC;KACrB,CAAC,CAAC;IACH,aAAa,IAAI,OAAO,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,IAAI,CAAC;KACrB,CAAC,CAAC;IACH,UAAU,CACR,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,GACA,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IACjD,aAAa,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/E;AAED,UAAU,qBAAqB;IAC7B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACvD;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAkBD;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;IAGxC,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,oBAAoB,CAA+C;gBAEvD,MAAM,GAAE,qBAA0B;YAIxC,aAAa;YAmCb,IAAI;IAeZ,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,GAAE,cAAmB;IAsCjE,IAAI,CAAC,MAAM,EAAE,MAAM;IAYnB,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAkBrC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsEzD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAgBpC,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAc7C"}
@@ -1,7 +1,7 @@
1
- import type { IFileStorageDriver, PutFileParams, ReadFileParams, ReadResult } from "./types";
1
+ import type { IFileStorageDriver, PutFileOptions, PutFileParams, ReadFileParams, ReadResult } from "./types";
2
2
  export declare abstract class FileStorageDriver implements IFileStorageDriver {
3
3
  abstract fetch(params: ReadFileParams | string): Promise<Response>;
4
- abstract put(params: PutFileParams | Blob): Promise<string>;
4
+ abstract put(params: PutFileParams | Blob, options?: PutFileOptions): Promise<string>;
5
5
  abstract list(folder: string): Promise<any>;
6
6
  /**
7
7
  * Default `read()` for drivers that only implement `fetch()`.
@@ -1 +1 @@
1
- {"version":3,"file":"FileStorageDriver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/FileStorageDriver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB,8BAAsB,iBAAkB,YAAW,kBAAkB;IACnE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3D,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAE3C;;;;;;;;OAQG;IACG,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoD/D;;;;OAIG;IACG,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAc7D"}
1
+ {"version":3,"file":"FileStorageDriver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/FileStorageDriver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB,8BAAsB,iBAAkB,YAAW,kBAAkB;IACnE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClE,QAAQ,CAAC,GAAG,CACV,MAAM,EAAE,aAAa,GAAG,IAAI,EAC5B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAE3C;;;;;;;;OAQG;IACG,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoD/D;;;;OAIG;IACG,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAc7D"}
@@ -1,9 +1,9 @@
1
- import type { PutFileParams, ReadFileParams, ReadResult } from "./types";
1
+ import type { PutFileOptions, PutFileParams, ReadFileParams, ReadResult } from "./types";
2
2
  import { FileStorageDriver } from "./FileStorageDriver";
3
3
  export declare class FileSystemDriver extends FileStorageDriver {
4
4
  private folderPath;
5
5
  constructor(folderPath?: string);
6
- put(params: PutFileParams | Blob): Promise<string>;
6
+ put(params: PutFileParams | Blob, { signal }?: PutFileOptions): Promise<string>;
7
7
  fetch(params: ReadFileParams | string): Promise<Response>;
8
8
  read(input: ReadFileParams | string): Promise<ReadResult>;
9
9
  size(params: ReadFileParams | string): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystemDriver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/FileSystemDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQxD,qBAAa,gBAAiB,SAAQ,iBAAiB;IACzC,OAAO,CAAC,UAAU;gBAAV,UAAU,GAAE,MAA0C;IAIpE,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IA0BhC,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IA+BrC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyCzD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IASpC,IAAI;CAKX"}
1
+ {"version":3,"file":"FileSystemDriver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/FileSystemDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQxD,qBAAa,gBAAiB,SAAQ,iBAAiB;IACzC,OAAO,CAAC,UAAU;gBAAV,UAAU,GAAE,MAA0C;IAIpE,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,GAAE,cAAmB;IA+BjE,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IA+BrC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyCzD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IASpC,IAAI;CAKX"}
@@ -1,4 +1,4 @@
1
- import type { PutFileParams, ReadFileParams, ReadResult } from "./types";
1
+ import type { PutFileOptions, PutFileParams, ReadFileParams, ReadResult } from "./types";
2
2
  import type { S3Client } from "@aws-sdk/client-s3";
3
3
  import { FileStorageDriver } from "./FileStorageDriver";
4
4
  export declare class S3Driver extends FileStorageDriver {
@@ -27,7 +27,7 @@ export declare class S3Driver extends FileStorageDriver {
27
27
  * eagerly would mean importing the SDK eagerly, which is the whole point.
28
28
  */
29
29
  private connect;
30
- put(params: PutFileParams | Blob): Promise<string>;
30
+ put(params: PutFileParams | Blob, { signal }?: PutFileOptions): Promise<string>;
31
31
  list(folder: string): Promise<import("@aws-sdk/client-s3").ListObjectsV2CommandOutput>;
32
32
  fetch(params: ReadFileParams | string): Promise<Response>;
33
33
  read(input: ReadFileParams | string): Promise<ReadResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"S3Driver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/S3Driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AASxD,qBAAa,QAAS,SAAQ,iBAAiB;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAyC;gBAE3C,GAAG,MAAM,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC;IAK7D;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,OAAO;IAMf,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IA8ChC,IAAI,CAAC,MAAM,EAAE,MAAM;IAYnB,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAkCrC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmDzD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAoB3C"}
1
+ {"version":3,"file":"S3Driver.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/S3Driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAIjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AASxD,qBAAa,QAAS,SAAQ,iBAAiB;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAyC;gBAE3C,GAAG,MAAM,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC;IAK7D;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,OAAO;IAMf,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,GAAE,cAAmB;IAoDjE,IAAI,CAAC,MAAM,EAAE,MAAM;IAYnB,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAkCrC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmDzD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAoB3C"}
@@ -6,6 +6,14 @@ export interface PutFileParams {
6
6
  body: Blob | File | Buffer;
7
7
  contentType?: string;
8
8
  }
9
+ export interface PutFileOptions {
10
+ /**
11
+ * Cancels the upload. An abort rejects `put()` with the signal's reason (or
12
+ * the backend SDK's own abort error) and the object should be treated as not
13
+ * written.
14
+ */
15
+ signal?: AbortSignal;
16
+ }
9
17
  export interface ReadFileParams {
10
18
  name: string;
11
19
  bucket?: string;
@@ -54,7 +62,7 @@ export interface FileMetadata {
54
62
  }
55
63
  export interface IFileStorageDriver {
56
64
  fetch(input: ReadFileParams | string): Promise<Response>;
57
- put(params: PutFileParams | Blob): Promise<string>;
65
+ put(params: PutFileParams | Blob, options?: PutFileOptions): Promise<string>;
58
66
  /**
59
67
  * Optional: `FileStorageDriver` supplies a `fetch()`-backed default, so
60
68
  * drivers written before this existed keep working.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,IAAI,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../services/file-storage/drivers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E;;;OAGG;IACH,IAAI,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D"}
@@ -3,7 +3,7 @@ export { FilesystemManager } from "./file-storage/FilesystemManager";
3
3
  export { FileSystemDriver } from "./file-storage/drivers/FileSystemDriver";
4
4
  export { S3Driver } from "./file-storage/drivers/S3Driver";
5
5
  export { AzureBlobDriver, type AzureBlobDriverConfig, } from "./file-storage/drivers/AzureBlobDriver";
6
- export type { ByteRange, FileMetadata, PutFileParams, ReadFileParams, ReadResult, } from "./file-storage/drivers/types";
6
+ export type { ByteRange, FileMetadata, PutFileOptions, PutFileParams, ReadFileParams, ReadResult, } from "./file-storage/drivers/types";
7
7
  export { FileStorageDriver } from "./file-storage/drivers/FileStorageDriver";
8
8
  export { resolveRange, toRangeHeaderValue, parseContentRange, } from "../http/range";
9
9
  export { FileNotFoundError, RangeNotSatisfiableError } from "../http/errors";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"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"}