@ez4/local-storage 0.46.0 → 0.47.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.
@@ -2,8 +2,9 @@ import type { ServeOptions } from '@ez4/project/library';
2
2
  import type { Bucket, Client } from '@ez4/storage';
3
3
  export type LocalClientOptions = ServeOptions & {
4
4
  events?: {
5
- handler: (event: Bucket.Event) => Promise<void>;
6
- path?: string;
7
- };
5
+ handler: (event: Bucket.ObjectEvent) => Promise<void>;
6
+ prefix: string;
7
+ suffix: string;
8
+ }[];
8
9
  };
9
10
  export declare const createLocalClient: (resourceName: string, options: LocalClientOptions) => Client;
@@ -1,4 +1,4 @@
1
1
  import type { BucketEvent, BucketService } from '@ez4/storage/library';
2
2
  import type { EmulateServiceContext, ServeOptions } from '@ez4/project/library';
3
3
  import type { Bucket } from '@ez4/storage';
4
- export declare const processLambdaEvent: (service: BucketService, options: ServeOptions, context: EmulateServiceContext, events: BucketEvent, event: Bucket.Event) => Promise<void>;
4
+ export declare const processLambdaEvent: (service: BucketService, options: ServeOptions, context: EmulateServiceContext, event: BucketEvent, input: Bucket.ObjectEvent) => Promise<void>;
package/dist/main.cjs CHANGED
@@ -1,48 +1,49 @@
1
- "use strict";var y=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var c=(t,e)=>y(t,"name",{value:e,configurable:!0});var q=(t,e)=>{for(var i in e)y(t,i,{get:e[i],enumerable:!0})},L=(t,e,i,o)=>{if(e&&
2
- typeof e=="object"||typeof e=="function")for(let a of j(e))!T.call(t,a)&&a!==i&&
3
- y(t,a,{get:()=>e[a],enumerable:!(o=R(e,a))||o.enumerable});return t};var H=t=>L(y({},"__esModule",{value:!0}),t);var _={};q(_,{registerTriggers:()=>W});module.exports=H(_);var S=require("@ez4/storage/library"),x=require("@ez4/project/library");var h=require("@ez4/project/library"),F=require("@ez4/logger");var p=require("@ez4/local-common"),w=require("@ez4/utils"),b=require("@ez4/common");var B=c(async(t,e,i,o,a)=>{let{services:r}=t,n=await i.makeClients(r),s=(0,w.getRandomUUID)(),
4
- m=await(0,p.createModule)({listener:o.listener,handler:o.handler,version:e.version,
5
- variables:{...e.variables,...t.variables,...o.variables}}),g,f={requestId:(0,w.getRandomUUID)()};
6
- try{await(0,p.onBegin)(m,n,f),g={...f,...a,traceId:s},b.Runtime.setScope({traceId:s}),
7
- await(0,p.onReady)(m,n,g),await m.handler(g,n),await(0,p.onDone)(m,n,g)}catch(C){
8
- throw await(0,p.onError)(m,n,g??f,C),C}finally{await(0,p.onEnd)(m,n,f)}},"proces\
9
- sLambdaEvent");var l=require("node:fs/promises"),u=require("node:path"),O=require("node:fs"),z=require("file-type"),
10
- v=require("@ez4/utils"),P=require("@ez4/project/library"),E=require("@ez4/storage"),
11
- d=require("@ez4/logger");var k=c((t,e)=>{let i=(0,P.getServiceName)(t,e),o=(0,u.join)(".ez4",(0,v.toKebabCase)(
12
- t)),a=e.events;return new class{async stat(r){let n=(0,u.join)(o,r);try{let s=await(0,z.fileTypeFromFile)(
13
- n),m=await(0,l.stat)(n);return{type:s?.mime??"application/octet-stream",size:m.size}}catch(s){
14
- if(!(0,v.isAnyObject)(s)||s.code!=="ENOENT")throw s;return}}async exists(r){let n=(0,u.join)(
15
- o,r);return Promise.resolve((0,O.existsSync)(n))}async write(r,n){let s=(0,u.join)(
16
- o,r);if(await(0,l.mkdir)((0,u.dirname)(s),{recursive:!0}),await(0,l.writeFile)(s,
17
- n),d.Logger.log(`\u2B06\uFE0F File ${r} uploaded.`),a&&(!a.path||r.startsWith(a.
18
- path))){let m=await(0,l.stat)(s);await a.handler({eventType:E.BucketEventType.Create,
19
- bucketName:i,objectSize:m.size,objectKey:r})}}async read(r){let n=(0,u.join)(o,r),
20
- s=await(0,l.readFile)(n);return d.Logger.log(`\u2B07\uFE0F File ${r} downloaded\
21
- .`),s}async delete(r){let n=(0,u.join)(o,r);await(0,l.unlink)(n),d.Logger.log(`\u2139\
22
- \uFE0F File ${r} deleted.`),a&&(!a.path||r.startsWith(a.path))&&await a.handler(
23
- {eventType:E.BucketEventType.Delete,bucketName:i,objectKey:r})}async copy(r,n){let s=(0,u.join)(
24
- o,r),m=(0,u.join)(o,n);await(0,l.copyFile)(s,m),d.Logger.log(`\u2139\uFE0F File ${r}\
25
- copied.`)}async*scan(){let r=await(0,l.readdir)(o,{recursive:!0});for(let n of r){
26
- let{size:s,mtime:m}=await(0,l.stat)((0,u.join)(o,n));yield{key:n,modifiedAt:m,size:s}}}async getStatUrl(r,n){
27
- return Promise.resolve(`http://${e.serviceHost}/${i}/${r}`)}async getWriteUrl(r,n){
28
- return Promise.resolve(`http://${e.serviceHost}/${i}/${r}`)}async getReadUrl(r,n){
29
- return Promise.resolve(`http://${e.serviceHost}/${i}/${r}`)}}},"createLocalClien\
30
- t");var $=c(async(t,e,i)=>{let o=await U(t,e,i),{name:a}=t;return{type:"Storage",name:a,
31
- identifier:(0,h.getServiceName)(a,e),bootstrapHandler:c(()=>{F.Logger.log(`\u{1F4C2} ${e.
32
- local?"Local":"Remote"} storage [${a}] in use.`)},"bootstrapHandler"),requestHandler:c(
33
- r=>A(o,r),"requestHandler"),exportHandler:c(()=>o,"exportHandler")}},"registerBu\
34
- cketEmulator"),U=c(async(t,e,i)=>{let o=await(0,h.triggerAllAsync)("emulator:get\
35
- Client",a=>a({service:t,options:e}));if(!o){let{events:a}=t;return k(t.name,{...e,
36
- events:a&&{path:a.path,handler:c(r=>B(t,e,i,a,r),"handler")}})}return o},"getSto\
37
- rageClient"),A=c(async(t,e)=>{let{method:i,path:o,body:a}=e;if(!o||o==="/")throw new Error(
38
- "File path wasn't given.");switch(i){case"HEAD":return I(t,o);case"GET":return N(
39
- t,o);case"PUT":{if(!a)throw new Error("File content wasn't given.");return D(t,o,
40
- a)}default:throw new Error("Unsupported storage request.")}},"handleRequest"),N=c(
41
- async(t,e)=>{let[i,o]=await Promise.all([t.read(e),t.stat(e)]);return{status:200,
42
- body:i,headers:{"content-type":o?.type??"application/octet-stream"}}},"loadFile"),
43
- D=c(async(t,e,i)=>(await t.write(e,i),{status:204}),"storeFile"),I=c(async(t,e)=>{
44
- let i=await t.stat(e);return i?{status:200,headers:{"content-length":i.size.toString(),
45
- "content-type":i.type}}:{status:404}},"headFile");var W=c(()=>{(0,S.registerTriggers)(),(0,x.tryCreateTrigger)("@ez4/local-storage",
46
- {"emulator:getServices":c(({service:t,options:e,context:i})=>(0,S.isBucketService)(
47
- t)?$(t,e,i):null,"emulator:getServices")})},"registerTriggers");0&&(module.exports={registerTriggers});
1
+ "use strict";var v=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var l=(e,t)=>v(e,"name",{value:t,configurable:!0});var q=(e,t)=>{for(var i in t)v(e,i,{get:t[i],enumerable:!0})},L=(e,t,i,o)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let s of k(t))!T.call(e,s)&&s!==i&&
3
+ v(e,s,{get:()=>t[s],enumerable:!(o=R(t,s))||o.enumerable});return e};var H=e=>L(v({},"__esModule",{value:!0}),e);var _={};q(_,{registerTriggers:()=>I});module.exports=H(_);var h=require("@ez4/storage/library"),j=require("@ez4/project/library");var w=require("@ez4/project/library"),F=require("@ez4/logger");var u=require("@ez4/local-common"),E=require("@ez4/utils"),C=require("@ez4/common");var O=l(async(e,t,i,o,s)=>{let{services:r}=e,n=await i.makeClients(r),a=(0,E.getRandomUUID)(),
4
+ c=await(0,u.createModule)({listener:o.listener,handler:o.handler,version:t.version,
5
+ variables:{...t.variables,...e.variables,...o.variables}}),g,f={requestId:(0,E.getRandomUUID)()};
6
+ try{await(0,u.onBegin)(c,n,f),g={...f,...s,traceId:a},C.Runtime.setScope({traceId:a}),
7
+ await(0,u.onReady)(c,n,g),await c.handler(g,n),await(0,u.onDone)(c,n,g)}catch(y){
8
+ throw await(0,u.onError)(c,n,g??f,y),y}finally{await(0,u.onEnd)(c,n,f)}},"proces\
9
+ sLambdaEvent");var m=require("node:fs/promises"),p=require("node:path"),B=require("node:fs"),x=require("file-type"),
10
+ S=require("@ez4/utils"),z=require("@ez4/project/library"),b=require("@ez4/storage"),
11
+ d=require("@ez4/logger");var P=l((e,t)=>{let i=(0,z.getServiceName)(e,t),o=(0,p.join)(".ez4",(0,S.toKebabCase)(
12
+ e)),s=t.events;return new class{async stat(r){let n=(0,p.join)(o,r);try{let a=await(0,x.fileTypeFromFile)(
13
+ n),c=await(0,m.stat)(n);return{type:a?.mime??"application/octet-stream",size:c.size}}catch(a){
14
+ if(!(0,S.isAnyObject)(a)||a.code!=="ENOENT")throw a;return}}async exists(r){let n=(0,p.join)(
15
+ o,r);return Promise.resolve((0,B.existsSync)(n))}async write(r,n){let a=(0,p.join)(
16
+ o,r);await(0,m.mkdir)((0,p.dirname)(a),{recursive:!0}),await(0,m.writeFile)(a,n),
17
+ d.Logger.log(`\u2B06\uFE0F File ${r} uploaded.`),s?.forEach(async({prefix:c,suffix:g,
18
+ handler:f})=>{if(r.startsWith(c)&&r.endsWith(g)){let y=await(0,m.stat)(a);await f(
19
+ {eventType:b.BucketEventType.Create,bucketName:i,objectSize:y.size,objectKey:r})}})}async read(r){
20
+ let n=(0,p.join)(o,r),a=await(0,m.readFile)(n);return d.Logger.log(`\u2B07\uFE0F File ${r}\
21
+ downloaded.`),a}async delete(r){let n=(0,p.join)(o,r);await(0,m.unlink)(n),d.Logger.
22
+ log(`\u2139\uFE0F File ${r} deleted.`),s?.forEach(async({prefix:a,suffix:c,handler:g})=>{
23
+ r.startsWith(a)&&r.endsWith(c)&&await g({eventType:b.BucketEventType.Delete,bucketName:i,
24
+ objectKey:r})})}async copy(r,n){let a=(0,p.join)(o,r),c=(0,p.join)(o,n);await(0,m.copyFile)(
25
+ a,c),d.Logger.log(`\u2139\uFE0F File ${r} copied.`)}async*scan(r){let n=r?(0,p.join)(
26
+ o,r):o,a=await(0,m.readdir)(n,{recursive:!0});for(let c of a){let{size:g,mtime:f}=await(0,m.stat)(
27
+ (0,p.join)(n,c));yield{key:c,modifiedAt:f,size:g}}}async getStatUrl(r,n){return Promise.
28
+ resolve(`http://${t.serviceHost}/${i}/${r}`)}async getWriteUrl(r,n){return Promise.
29
+ resolve(`http://${t.serviceHost}/${i}/${r}`)}async getReadUrl(r,n){return Promise.
30
+ resolve(`http://${t.serviceHost}/${i}/${r}`)}}},"createLocalClient");var $=l(async(e,t,i)=>{let o=await U(e,t,i),{name:s}=e;return{type:"Storage",name:s,
31
+ identifier:(0,w.getServiceName)(s,t),bootstrapHandler:l(()=>{F.Logger.log(`\u{1F4C2} ${t.
32
+ local?"Local":"Remote"} storage [${s}] in use.`)},"bootstrapHandler"),requestHandler:l(
33
+ r=>W(o,r),"requestHandler"),exportHandler:l(()=>o,"exportHandler")}},"registerBu\
34
+ cketEmulator"),U=l(async(e,t,i)=>{let o=await(0,w.triggerAllAsync)("emulator:get\
35
+ Client",s=>s({service:e,options:t}));if(!o){let{events:s}=e;return P(e.name,{...t,
36
+ events:s?.map(r=>{let[n,a]=r.path.split("*",2);return{prefix:n,suffix:a,handler:l(
37
+ c=>O(e,t,i,r,c),"handler")}})})}return o},"getStorageClient"),W=l(async(e,t)=>{let{
38
+ method:i,path:o,body:s}=t;if(!o||o==="/")throw new Error("File path wasn't given\
39
+ .");switch(i){case"HEAD":return D(e,o);case"GET":return A(e,o);case"PUT":{if(!s)
40
+ throw new Error("File content wasn't given.");return N(e,o,s)}default:throw new Error(
41
+ "Unsupported storage request.")}},"handleRequest"),A=l(async(e,t)=>{let[i,o]=await Promise.
42
+ all([e.read(t),e.stat(t)]);return{status:200,body:i,headers:{"content-type":o?.type??
43
+ "application/octet-stream"}}},"loadFile"),N=l(async(e,t,i)=>(await e.write(t,i),
44
+ {status:204}),"storeFile"),D=l(async(e,t)=>{let i=await e.stat(t);return i?{status:200,
45
+ headers:{"content-length":i.size.toString(),"content-type":i.type}}:{status:404}},
46
+ "headFile");var I=l(()=>{(0,h.registerTriggers)(),(0,j.tryCreateTrigger)("@ez4/local-storage",
47
+ {"emulator:getServices":l(({service:e,options:t,context:i})=>(0,h.isBucketService)(
48
+ e)?$(e,t,i):null,"emulator:getServices")})},"registerTriggers");0&&(module.exports={registerTriggers});
48
49
  //# sourceMappingURL=main.cjs.map
package/dist/main.mjs CHANGED
@@ -1,45 +1,46 @@
1
- var E=Object.defineProperty;var c=(t,r)=>E(t,"name",{value:r,configurable:!0});import{isBucketService as Q,registerTriggers as V}from"@ez4/storage/library";import{
2
- tryCreateTrigger as X}from"@ez4/project/library";import{getServiceName as D,triggerAllAsync as I}from"@ez4/project/library";import{
3
- Logger as W}from"@ez4/logger";import{createModule as C,onBegin as b,onReady as B,onDone as O,onError as z,onEnd as P}from"@ez4/local-common";
4
- import{getRandomUUID as y}from"@ez4/utils";import{Runtime as k}from"@ez4/common";var v=c(async(t,r,i,o,n)=>{let{services:e}=t,a=await i.makeClients(e),s=y(),l=await C(
1
+ var E=Object.defineProperty;var c=(e,r)=>E(e,"name",{value:r,configurable:!0});import{isBucketService as Q,registerTriggers as V}from"@ez4/storage/library";import{
2
+ tryCreateTrigger as X}from"@ez4/project/library";import{getServiceName as N,triggerAllAsync as D}from"@ez4/project/library";import{
3
+ Logger as I}from"@ez4/logger";import{createModule as b,onBegin as C,onReady as O,onDone as B,onError as x,onEnd as z}from"@ez4/local-common";
4
+ import{getRandomUUID as y}from"@ez4/utils";import{Runtime as P}from"@ez4/common";var v=c(async(e,r,n,o,l)=>{let{services:t}=e,i=await n.makeClients(t),a=y(),s=await b(
5
5
  {listener:o.listener,handler:o.handler,version:r.version,variables:{...r.variables,
6
- ...t.variables,...o.variables}}),p,u={requestId:y()};try{await b(l,a,u),p={...u,
7
- ...n,traceId:s},k.setScope({traceId:s}),await B(l,a,p),await l.handler(p,a),await O(
8
- l,a,p)}catch(f){throw await z(l,a,p??u,f),f}finally{await P(l,a,u)}},"processLam\
9
- bdaEvent");import{copyFile as F,mkdir as $,readdir as x,readFile as R,stat as d,unlink as j,
10
- writeFile as T}from"node:fs/promises";import{dirname as q,join as m}from"node:path";
6
+ ...e.variables,...o.variables}}),m,u={requestId:y()};try{await C(s,i,u),m={...u,
7
+ ...l,traceId:a},P.setScope({traceId:a}),await O(s,i,m),await s.handler(m,i),await B(
8
+ s,i,m)}catch(g){throw await x(s,i,m??u,g),g}finally{await z(s,i,u)}},"processLam\
9
+ bdaEvent");import{copyFile as F,mkdir as $,readdir as j,readFile as R,stat as d,unlink as k,
10
+ writeFile as T}from"node:fs/promises";import{dirname as q,join as p}from"node:path";
11
11
  import{existsSync as L}from"node:fs";import{fileTypeFromFile as H}from"file-type";
12
- import{isAnyObject as U,toKebabCase as A}from"@ez4/utils";import{getServiceName as N}from"@ez4/project/library";
13
- import{BucketEventType as h}from"@ez4/storage";import{Logger as g}from"@ez4/logger";var S=c((t,r)=>{let i=N(t,r),o=m(".ez4",A(t)),n=r.events;return new class{async stat(e){
14
- let a=m(o,e);try{let s=await H(a),l=await d(a);return{type:s?.mime??"application\
15
- /octet-stream",size:l.size}}catch(s){if(!U(s)||s.code!=="ENOENT")throw s;return}}async exists(e){
16
- let a=m(o,e);return Promise.resolve(L(a))}async write(e,a){let s=m(o,e);if(await $(
17
- q(s),{recursive:!0}),await T(s,a),g.log(`\u2B06\uFE0F File ${e} uploaded.`),n&&
18
- (!n.path||e.startsWith(n.path))){let l=await d(s);await n.handler({eventType:h.Create,
19
- bucketName:i,objectSize:l.size,objectKey:e})}}async read(e){let a=m(o,e),s=await R(
20
- a);return g.log(`\u2B07\uFE0F File ${e} downloaded.`),s}async delete(e){let a=m(
21
- o,e);await j(a),g.log(`\u2139\uFE0F File ${e} deleted.`),n&&(!n.path||e.startsWith(
22
- n.path))&&await n.handler({eventType:h.Delete,bucketName:i,objectKey:e})}async copy(e,a){
23
- let s=m(o,e),l=m(o,a);await F(s,l),g.log(`\u2139\uFE0F File ${e} copied.`)}async*scan(){
24
- let e=await x(o,{recursive:!0});for(let a of e){let{size:s,mtime:l}=await d(m(o,
25
- a));yield{key:a,modifiedAt:l,size:s}}}async getStatUrl(e,a){return Promise.resolve(
26
- `http://${r.serviceHost}/${i}/${e}`)}async getWriteUrl(e,a){return Promise.resolve(
27
- `http://${r.serviceHost}/${i}/${e}`)}async getReadUrl(e,a){return Promise.resolve(
28
- `http://${r.serviceHost}/${i}/${e}`)}}},"createLocalClient");var w=c(async(t,r,i)=>{let o=await _(t,r,i),{name:n}=t;return{type:"Storage",name:n,
29
- identifier:D(n,r),bootstrapHandler:c(()=>{W.log(`\u{1F4C2} ${r.local?"Local":"Re\
30
- mote"} storage [${n}] in use.`)},"bootstrapHandler"),requestHandler:c(e=>G(o,e),
12
+ import{isAnyObject as U,toKebabCase as W}from"@ez4/utils";import{getServiceName as A}from"@ez4/project/library";
13
+ import{BucketEventType as S}from"@ez4/storage";import{Logger as f}from"@ez4/logger";var w=c((e,r)=>{let n=A(e,r),o=p(".ez4",W(e)),l=r.events;return new class{async stat(t){
14
+ let i=p(o,t);try{let a=await H(i),s=await d(i);return{type:a?.mime??"application\
15
+ /octet-stream",size:s.size}}catch(a){if(!U(a)||a.code!=="ENOENT")throw a;return}}async exists(t){
16
+ let i=p(o,t);return Promise.resolve(L(i))}async write(t,i){let a=p(o,t);await $(
17
+ q(a),{recursive:!0}),await T(a,i),f.log(`\u2B06\uFE0F File ${t} uploaded.`),l?.
18
+ forEach(async({prefix:s,suffix:m,handler:u})=>{if(t.startsWith(s)&&t.endsWith(m)){
19
+ let g=await d(a);await u({eventType:S.Create,bucketName:n,objectSize:g.size,objectKey:t})}})}async read(t){
20
+ let i=p(o,t),a=await R(i);return f.log(`\u2B07\uFE0F File ${t} downloaded.`),a}async delete(t){
21
+ let i=p(o,t);await k(i),f.log(`\u2139\uFE0F File ${t} deleted.`),l?.forEach(async({
22
+ prefix:a,suffix:s,handler:m})=>{t.startsWith(a)&&t.endsWith(s)&&await m({eventType:S.
23
+ Delete,bucketName:n,objectKey:t})})}async copy(t,i){let a=p(o,t),s=p(o,i);await F(
24
+ a,s),f.log(`\u2139\uFE0F File ${t} copied.`)}async*scan(t){let i=t?p(o,t):o,a=await j(
25
+ i,{recursive:!0});for(let s of a){let{size:m,mtime:u}=await d(p(i,s));yield{key:s,
26
+ modifiedAt:u,size:m}}}async getStatUrl(t,i){return Promise.resolve(`http://${r.serviceHost}\
27
+ /${n}/${t}`)}async getWriteUrl(t,i){return Promise.resolve(`http://${r.serviceHost}\
28
+ /${n}/${t}`)}async getReadUrl(t,i){return Promise.resolve(`http://${r.serviceHost}\
29
+ /${n}/${t}`)}}},"createLocalClient");var h=c(async(e,r,n)=>{let o=await _(e,r,n),{name:l}=e;return{type:"Storage",name:l,
30
+ identifier:N(l,r),bootstrapHandler:c(()=>{I.log(`\u{1F4C2} ${r.local?"Local":"Re\
31
+ mote"} storage [${l}] in use.`)},"bootstrapHandler"),requestHandler:c(t=>G(o,t),
31
32
  "requestHandler"),exportHandler:c(()=>o,"exportHandler")}},"registerBucketEmulat\
32
- or"),_=c(async(t,r,i)=>{let o=await I("emulator:getClient",n=>n({service:t,options:r}));
33
- if(!o){let{events:n}=t;return S(t.name,{...r,events:n&&{path:n.path,handler:c(e=>v(
34
- t,r,i,n,e),"handler")}})}return o},"getStorageClient"),G=c(async(t,r)=>{let{method:i,
35
- path:o,body:n}=r;if(!o||o==="/")throw new Error("File path wasn't given.");switch(i){case"\
36
- HEAD":return J(t,o);case"GET":return K(t,o);case"PUT":{if(!n)throw new Error("Fi\
37
- le content wasn't given.");return M(t,o,n)}default:throw new Error("Unsupported \
38
- storage request.")}},"handleRequest"),K=c(async(t,r)=>{let[i,o]=await Promise.all(
39
- [t.read(r),t.stat(r)]);return{status:200,body:i,headers:{"content-type":o?.type??
40
- "application/octet-stream"}}},"loadFile"),M=c(async(t,r,i)=>(await t.write(r,i),
41
- {status:204}),"storeFile"),J=c(async(t,r)=>{let i=await t.stat(r);return i?{status:200,
42
- headers:{"content-length":i.size.toString(),"content-type":i.type}}:{status:404}},
43
- "headFile");var Be=c(()=>{V(),X("@ez4/local-storage",{"emulator:getServices":c(({service:t,options:r,
44
- context:i})=>Q(t)?w(t,r,i):null,"emulator:getServices")})},"registerTriggers");export{Be as registerTriggers};
33
+ or"),_=c(async(e,r,n)=>{let o=await D("emulator:getClient",l=>l({service:e,options:r}));
34
+ if(!o){let{events:l}=e;return w(e.name,{...r,events:l?.map(t=>{let[i,a]=t.path.split(
35
+ "*",2);return{prefix:i,suffix:a,handler:c(s=>v(e,r,n,t,s),"handler")}})})}return o},
36
+ "getStorageClient"),G=c(async(e,r)=>{let{method:n,path:o,body:l}=r;if(!o||o==="/")
37
+ throw new Error("File path wasn't given.");switch(n){case"HEAD":return J(e,o);case"\
38
+ GET":return K(e,o);case"PUT":{if(!l)throw new Error("File content wasn't given.");
39
+ return M(e,o,l)}default:throw new Error("Unsupported storage request.")}},"handl\
40
+ eRequest"),K=c(async(e,r)=>{let[n,o]=await Promise.all([e.read(r),e.stat(r)]);return{
41
+ status:200,body:n,headers:{"content-type":o?.type??"application/octet-stream"}}},
42
+ "loadFile"),M=c(async(e,r,n)=>(await e.write(r,n),{status:204}),"storeFile"),J=c(
43
+ async(e,r)=>{let n=await e.stat(r);return n?{status:200,headers:{"content-length":n.
44
+ size.toString(),"content-type":n.type}}:{status:404}},"headFile");var Ot=c(()=>{V(),X("@ez4/local-storage",{"emulator:getServices":c(({service:e,options:r,
45
+ context:n})=>Q(e)?h(e,r,n):null,"emulator:getServices")})},"registerTriggers");export{Ot as registerTriggers};
45
46
  //# sourceMappingURL=main.mjs.map
package/dist/test.cjs CHANGED
@@ -1,25 +1,25 @@
1
1
  "use strict";var d=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var a=(n,o)=>d(n,"name",{value:o,configurable:!0});var v=(n,o)=>{for(var l in o)d(n,l,{get:o[l],enumerable:!0})},w=(n,o,l,r)=>{if(o&&
2
- typeof o=="object"||typeof o=="function")for(let e of h(o))!k.call(n,e)&&e!==l&&
3
- d(n,e,{get:()=>o[e],enumerable:!(r=u(o,e))||r.enumerable});return n};var x=n=>w(d({},"__esModule",{value:!0}),n);var O={};v(O,{BucketTester:()=>M});module.exports=x(O);var p=require("@ez4/project/library"),s=require("node:test");var g=require("node:stream"),f=require("file-type"),C=require("@ez4/utils"),m=require("@ez4/logger");var y=a((n,o)=>{let l=(0,C.toKebabCase)(n),r=o?.keys??{};return new class{async stat(e){
4
- let t=r[e]??o?.default;return t?{type:(await(0,f.fileTypeFromBuffer)(t))?.mime??
5
- "application/octet-stream",size:t.byteLength}:void 0}async exists(e){let t=r[e]??
6
- o?.default;return Promise.resolve(!!t)}async write(e,t){return m.Logger.log(`\u2B06\uFE0F \
7
- File ${e} uploaded.`),t instanceof g.Readable?r[e]=t.read():r[e]=Buffer.from(t),
8
- Promise.resolve()}async read(e){let t=r[e]??o?.default;if(!t)throw new Error(`Ke\
9
- y ${e} not found.`);return m.Logger.log(`\u2B07\uFE0F File ${e} downloaded.`),Promise.
10
- resolve(Buffer.from(t))}async delete(e){if(!r[e]){if(!o?.default)throw new Error(
11
- `Key ${e} not found.`);return Promise.resolve()}return m.Logger.log(`\u2139\uFE0F File ${e}\
12
- deleted.`),delete r[e],Promise.resolve()}async copy(e,t){let c=r[e]??o?.default;
13
- if(!c)throw new Error(`Key ${e} not found.`);return m.Logger.log(`\u2139\uFE0F File ${e}\
14
- copied.`),r[t]=c,Promise.resolve()}async*scan(){for(let e in r){let t=r[e];yield Promise.
15
- resolve({modifiedAt:new Date,size:t.length,key:e})}}async getStatUrl(e,t){return Promise.
16
- resolve(`http://${l}/${e}`)}async getWriteUrl(e,t){return Promise.resolve(`http:\
17
- //${l}/${e}`)}async getReadUrl(e,t){return Promise.resolve(`http://${l}/${e}`)}}},
18
- "createClientMock");var M;(e=>(e.getClient=a(t=>p.Tester.getServiceClient(t),"getClient"),e.getClientMock=
19
- a((t,c)=>{let i=y(t,c);return s.mock.method(i,"stat"),s.mock.method(i,"exists"),
2
+ typeof o=="object"||typeof o=="function")for(let t of h(o))!k.call(n,t)&&t!==l&&
3
+ d(n,t,{get:()=>o[t],enumerable:!(r=u(o,t))||r.enumerable});return n};var O=n=>w(d({},"__esModule",{value:!0}),n);var x={};v(x,{BucketTester:()=>M});module.exports=O(x);var p=require("@ez4/project/library"),s=require("node:test");var g=require("node:stream"),f=require("file-type"),C=require("@ez4/utils"),m=require("@ez4/logger");var y=a((n,o)=>{let l=(0,C.toKebabCase)(n),r=o?.keys??{};return new class{async stat(t){
4
+ let e=r[t]??o?.default;return e?{type:(await(0,f.fileTypeFromBuffer)(e))?.mime??
5
+ "application/octet-stream",size:e.byteLength}:void 0}async exists(t){let e=r[t]??
6
+ o?.default;return Promise.resolve(!!e)}async write(t,e){return m.Logger.log(`\u2B06\uFE0F \
7
+ File ${t} uploaded.`),e instanceof g.Readable?r[t]=e.read():r[t]=Buffer.from(e),
8
+ Promise.resolve()}async read(t){let e=r[t]??o?.default;if(!e)throw new Error(`Ke\
9
+ y ${t} not found.`);return m.Logger.log(`\u2B07\uFE0F File ${t} downloaded.`),Promise.
10
+ resolve(Buffer.from(e))}async delete(t){if(!r[t]){if(!o?.default)throw new Error(
11
+ `Key ${t} not found.`);return Promise.resolve()}return m.Logger.log(`\u2139\uFE0F File ${t}\
12
+ deleted.`),delete r[t],Promise.resolve()}async copy(t,e){let c=r[t]??o?.default;
13
+ if(!c)throw new Error(`Key ${t} not found.`);return m.Logger.log(`\u2139\uFE0F File ${t}\
14
+ copied.`),r[e]=c,Promise.resolve()}async*scan(t){for(let e in r){if(t&&!e.startsWith(
15
+ t))continue;let c=r[e];yield Promise.resolve({modifiedAt:new Date,size:c.length,
16
+ key:e})}}async getStatUrl(t,e){return Promise.resolve(`http://${l}/${t}`)}async getWriteUrl(t,e){
17
+ return Promise.resolve(`http://${l}/${t}`)}async getReadUrl(t,e){return Promise.
18
+ resolve(`http://${l}/${t}`)}}},"createClientMock");var M;(t=>(t.getClient=a(e=>p.Tester.getServiceClient(e),"getClient"),t.getClientMock=
19
+ a((e,c)=>{let i=y(e,c);return s.mock.method(i,"stat"),s.mock.method(i,"exists"),
20
20
  s.mock.method(i,"write"),s.mock.method(i,"read"),s.mock.method(i,"delete"),s.mock.
21
21
  method(i,"copy"),s.mock.method(i,"scan"),s.mock.method(i,"getStatUrl"),s.mock.method(
22
- i,"getWriteUrl"),s.mock.method(i,"getReadUrl"),i},"getClientMock"),e.setClientMock=
23
- a((t,c)=>{p.Tester.mockServiceClient(t,(0,e.getClientMock)(t,c))},"setClientMock"),
24
- e.restoreClient=a(t=>{p.Tester.restoreServiceClient(t)},"restoreClient")))(M||={});0&&(module.exports={BucketTester});
22
+ i,"getWriteUrl"),s.mock.method(i,"getReadUrl"),i},"getClientMock"),t.setClientMock=
23
+ a((e,c)=>{p.Tester.mockServiceClient(e,(0,t.getClientMock)(e,c))},"setClientMock"),
24
+ t.restoreClient=a(e=>{p.Tester.restoreServiceClient(e)},"restoreClient")))(M||={});0&&(module.exports={BucketTester});
25
25
  //# sourceMappingURL=test.cjs.map
package/dist/test.mjs CHANGED
@@ -1,23 +1,23 @@
1
1
  var g=Object.defineProperty;var l=(c,n)=>g(c,"name",{value:n,configurable:!0});import{Tester as d}from"@ez4/project/library";import{mock as i}from"node:test";import{Readable as f}from"node:stream";import{fileTypeFromBuffer as C}from"file-type";
2
- import{toKebabCase as y}from"@ez4/utils";import{Logger as m}from"@ez4/logger";var p=l((c,n)=>{let a=y(c),o=n?.keys??{};return new class{async stat(e){let t=o[e]??
3
- n?.default;return t?{type:(await C(t))?.mime??"application/octet-stream",size:t.
4
- byteLength}:void 0}async exists(e){let t=o[e]??n?.default;return Promise.resolve(
5
- !!t)}async write(e,t){return m.log(`\u2B06\uFE0F File ${e} uploaded.`),t instanceof
6
- f?o[e]=t.read():o[e]=Buffer.from(t),Promise.resolve()}async read(e){let t=o[e]??
7
- n?.default;if(!t)throw new Error(`Key ${e} not found.`);return m.log(`\u2B07\uFE0F File ${e}\
8
- downloaded.`),Promise.resolve(Buffer.from(t))}async delete(e){if(!o[e]){if(!n?.
9
- default)throw new Error(`Key ${e} not found.`);return Promise.resolve()}return m.
10
- log(`\u2139\uFE0F File ${e} deleted.`),delete o[e],Promise.resolve()}async copy(e,t){
11
- let s=o[e]??n?.default;if(!s)throw new Error(`Key ${e} not found.`);return m.log(
12
- `\u2139\uFE0F File ${e} copied.`),o[t]=s,Promise.resolve()}async*scan(){for(let e in o){
13
- let t=o[e];yield Promise.resolve({modifiedAt:new Date,size:t.length,key:e})}}async getStatUrl(e,t){
14
- return Promise.resolve(`http://${a}/${e}`)}async getWriteUrl(e,t){return Promise.
15
- resolve(`http://${a}/${e}`)}async getReadUrl(e,t){return Promise.resolve(`http:/\
16
- /${a}/${e}`)}}},"createClientMock");var M;(e=>(e.getClient=l(t=>d.getServiceClient(t),"getClient"),e.getClientMock=l(
17
- (t,s)=>{let r=p(t,s);return i.method(r,"stat"),i.method(r,"exists"),i.method(r,"\
2
+ import{toKebabCase as y}from"@ez4/utils";import{Logger as m}from"@ez4/logger";var p=l((c,n)=>{let a=y(c),o=n?.keys??{};return new class{async stat(t){let e=o[t]??
3
+ n?.default;return e?{type:(await C(e))?.mime??"application/octet-stream",size:e.
4
+ byteLength}:void 0}async exists(t){let e=o[t]??n?.default;return Promise.resolve(
5
+ !!e)}async write(t,e){return m.log(`\u2B06\uFE0F File ${t} uploaded.`),e instanceof
6
+ f?o[t]=e.read():o[t]=Buffer.from(e),Promise.resolve()}async read(t){let e=o[t]??
7
+ n?.default;if(!e)throw new Error(`Key ${t} not found.`);return m.log(`\u2B07\uFE0F File ${t}\
8
+ downloaded.`),Promise.resolve(Buffer.from(e))}async delete(t){if(!o[t]){if(!n?.
9
+ default)throw new Error(`Key ${t} not found.`);return Promise.resolve()}return m.
10
+ log(`\u2139\uFE0F File ${t} deleted.`),delete o[t],Promise.resolve()}async copy(t,e){
11
+ let s=o[t]??n?.default;if(!s)throw new Error(`Key ${t} not found.`);return m.log(
12
+ `\u2139\uFE0F File ${t} copied.`),o[e]=s,Promise.resolve()}async*scan(t){for(let e in o){
13
+ if(t&&!e.startsWith(t))continue;let s=o[e];yield Promise.resolve({modifiedAt:new Date,
14
+ size:s.length,key:e})}}async getStatUrl(t,e){return Promise.resolve(`http://${a}\
15
+ /${t}`)}async getWriteUrl(t,e){return Promise.resolve(`http://${a}/${t}`)}async getReadUrl(t,e){
16
+ return Promise.resolve(`http://${a}/${t}`)}}},"createClientMock");var M;(t=>(t.getClient=l(e=>d.getServiceClient(e),"getClient"),t.getClientMock=l(
17
+ (e,s)=>{let r=p(e,s);return i.method(r,"stat"),i.method(r,"exists"),i.method(r,"\
18
18
  write"),i.method(r,"read"),i.method(r,"delete"),i.method(r,"copy"),i.method(r,"s\
19
19
  can"),i.method(r,"getStatUrl"),i.method(r,"getWriteUrl"),i.method(r,"getReadUrl"),
20
- r},"getClientMock"),e.setClientMock=l((t,s)=>{d.mockServiceClient(t,(0,e.getClientMock)(
21
- t,s))},"setClientMock"),e.restoreClient=l(t=>{d.restoreServiceClient(t)},"restor\
20
+ r},"getClientMock"),t.setClientMock=l((e,s)=>{d.mockServiceClient(e,(0,t.getClientMock)(
21
+ e,s))},"setClientMock"),t.restoreClient=l(e=>{d.restoreServiceClient(e)},"restor\
22
22
  eClient")))(M||={});export{M as BucketTester};
23
23
  //# sourceMappingURL=test.mjs.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/local-storage",
3
3
  "description": "EZ4: Local storage emulator",
4
- "version": "0.46.0",
4
+ "version": "0.47.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -50,12 +50,12 @@
50
50
  "live:publish": "npm run build && npm publish --access public"
51
51
  },
52
52
  "dependencies": {
53
- "@ez4/common": "^0.46.0",
54
- "@ez4/local-common": "^0.46.0",
55
- "@ez4/logger": "^0.46.0",
56
- "@ez4/project": "^0.46.0",
57
- "@ez4/storage": "^0.46.0",
58
- "@ez4/utils": "^0.46.0",
53
+ "@ez4/common": "^0.47.0",
54
+ "@ez4/local-common": "^0.47.0",
55
+ "@ez4/logger": "^0.47.0",
56
+ "@ez4/project": "^0.47.0",
57
+ "@ez4/storage": "^0.47.0",
58
+ "@ez4/utils": "^0.47.0",
59
59
  "file-type": "^21.3.0"
60
60
  }
61
61
  }