@ez4/aws-function 0.1.0 → 0.3.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.
package/README.md CHANGED
@@ -1 +1,15 @@
1
1
  # EZ4: AWS Function
2
+
3
+ It provides all the components to manage lambda functions on AWS.
4
+
5
+ ## Getting started
6
+
7
+ #### Install
8
+
9
+ ```sh
10
+ npm install @ez4/aws-function -D
11
+ ```
12
+
13
+ ## License
14
+
15
+ MIT License
@@ -1,3 +1,3 @@
1
1
  import type { Variables } from '../../types/variables.js';
2
- export declare const isValidVariableName: (name: string) => boolean;
3
2
  export declare const assertVariables: (variables: Variables) => void;
3
+ export declare const protectVariables: (variables: Variables) => Variables;
package/dist/main.cjs CHANGED
@@ -1,96 +1,103 @@
1
- "use strict";var Ce=Object.create;var v=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var be=(e,t)=>{for(var n in t)v(e,n,{get:t[n],enumerable:!0})},L=(e,t,n,r)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let o of Ee(t))!ve.call(e,o)&&o!==n&&
3
- v(e,o,{get:()=>t[o],enumerable:!(r=Ae(t,o))||r.enumerable});return e};var Me=(e,t,n)=>(n=e!=null?Ce(Ne(e)):{},L(t||!e||!e.__esModule?v(n,"default",{value:e,
4
- enumerable:!0}):n,e)),he=e=>L(v({},"__esModule",{value:!0}),e);var ct={};be(ct,{FunctionServiceName:()=>i,FunctionServiceType:()=>c,MappingServiceName:()=>u,
5
- MappingServiceType:()=>d,PermissionServiceName:()=>g,PermissionServiceType:()=>f,
6
- createFunction:()=>et,createMapping:()=>at,createPermission:()=>rt,getFunction:()=>tt,
7
- getFunctionArn:()=>$e,getFunctionName:()=>F,isFunction:()=>fe,isMapping:()=>ot,isPermission:()=>nt,
8
- registerTriggers:()=>it});module.exports=he(ct);var I=require("@ez4/aws-common");var X=require("@aws-sdk/client-lambda"),w=require("@ez4/aws-common"),m=require("@ez4/utils"),
9
- U=require("@ez4/aws-identity");var a=require("@aws-sdk/client-lambda"),l=require("@ez4/aws-common");var V=require("@ez4/aws-common");var i="AWS:Lambda/Function",c="aws:lambda.function";var Ie=/[a-z][\w]+/i,Te=e=>Ie.test(e),T=e=>{for(let t in e)if(!Te(t))throw new V.InvalidParameterError(
10
- i,`name ${t} for variable unsupported.`)};var B=Me(require("adm-zip"),1),$=require("node:fs/promises"),W=async(e,t)=>{let n=new B.default,
11
- r=await(0,$.readFile)(e);return n.addFile(t,r),n.toBufferPromise()};var y=new a.LambdaClient({}),z={maxWaitTime:90,client:y},Z=async e=>{l.Logger.logCreate(
12
- i,e.functionName),e.variables&&T(e.variables);let t=await y.send(new a.CreateFunctionCommand(
1
+ "use strict";var be=Object.create;var b=Object.defineProperty;var Ne=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var he=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Te=(e,t)=>{for(var n in t)b(e,n,{get:t[n],enumerable:!0})},B=(e,t,n,r)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let o of Ie(t))!Me.call(e,o)&&o!==n&&
3
+ b(e,o,{get:()=>t[o],enumerable:!(r=Ne(t,o))||r.enumerable});return e};var ze=(e,t,n)=>(n=e!=null?be(he(e)):{},B(t||!e||!e.__esModule?b(n,"default",{value:e,
4
+ enumerable:!0}):n,e)),Ue=e=>B(b({},"__esModule",{value:!0}),e);var yt={};Te(yt,{FunctionServiceName:()=>i,FunctionServiceType:()=>p,MappingServiceName:()=>u,
5
+ MappingServiceType:()=>S,PermissionServiceName:()=>f,PermissionServiceType:()=>l,
6
+ createFunction:()=>ot,createMapping:()=>pt,createPermission:()=>st,getFunction:()=>at,
7
+ getFunctionArn:()=>Ge,getFunctionName:()=>P,getPermission:()=>it,isFunction:()=>Fe,
8
+ isMapping:()=>ct,isPermission:()=>xe,registerTriggers:()=>mt});module.exports=Ue(
9
+ yt);var T=require("@ez4/aws-common");var ee=require("@aws-sdk/client-lambda"),F=require("@ez4/aws-common"),m=require("@ez4/utils"),
10
+ D=require("@ez4/aws-identity");var a=require("@aws-sdk/client-lambda"),g=require("@ez4/aws-common");var $=require("@ez4/aws-common"),W=require("@ez4/utils");var i="AWS:Lambda/Function",p="aws:lambda.function";var De=/[a-z][\w]+/i,He=e=>De.test(e),z=e=>{for(let t in e)if(!He(t))throw new $.InvalidParameterError(
11
+ i,`${t} is an invalid variable name .`)},N=e=>{let t={};for(let n in e)t[n]=(0,W.hashData)(
12
+ e[n]);return t};var Z=ze(require("adm-zip"),1),k=require("node:fs/promises"),G=async(e,t)=>{let n=new Z.default,
13
+ r=await(0,k.readFile)(e);return n.addFile(t,r),n.toBufferPromise()};var d=new a.LambdaClient({}),U={maxWaitTime:90,client:d},O=async e=>{g.Logger.logCreate(
14
+ i,e.functionName),e.variables&&z(e.variables);let t=await d.send(new a.CreateFunctionCommand(
13
15
  {Publish:!0,FunctionName:e.functionName,Description:e.description,MemorySize:e.memory,
14
- Timeout:e.timeout,Role:e.roleArn,PackageType:"Zip",Handler:Q(e.handlerName),Runtime:"\
15
- nodejs20.x",Code:{ZipFile:await J(e.sourceFile)},Environment:{Variables:e.variables},
16
+ Timeout:e.timeout,Role:e.roleArn,PackageType:"Zip",Handler:q(e.handlerName),Runtime:"\
17
+ nodejs20.x",Code:{ZipFile:await Y(e.sourceFile)},Environment:{Variables:e.variables},
16
18
  Tags:{...e.tags,ManagedBy:"EZ4"}})),n=t.FunctionName,r=t.FunctionArn;return await(0,a.waitUntilFunctionActive)(
17
- z,{FunctionName:n}),{functionName:n,functionArn:r}},G=async(e,t)=>{l.Logger.logTag(
18
- i,e),await y.send(new a.TagResourceCommand({Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},
19
- k=async(e,t)=>{l.Logger.logUntag(i,e),await y.send(new a.UntagResourceCommand({Resource:e,
20
- TagKeys:t}))},O=async(e,t)=>{l.Logger.logUpdate(i,`${e} source code`);let{sourceFile:n}=t;
21
- await y.send(new a.UpdateFunctionCodeCommand({FunctionName:e,ZipFile:await J(n),
22
- Publish:!0})),await(0,a.waitUntilFunctionUpdated)(z,{FunctionName:e})},K=async(e,t)=>{
23
- l.Logger.logUpdate(i,`${e} configuration`),t.variables&&T(t.variables);let{handlerName:n}=t;
24
- await y.send(new a.UpdateFunctionConfigurationCommand({FunctionName:e,Description:t.
25
- description,MemorySize:t.memory,Timeout:t.timeout,Role:t.roleArn,...n&&{Handler:Q(
26
- n)},Environment:{Variables:t.variables}})),await(0,a.waitUntilFunctionUpdated)(z,
27
- {FunctionName:e})},_=async e=>{l.Logger.logDelete(i,e),await y.send(new a.DeleteFunctionCommand(
28
- {FunctionName:e}))},J=e=>W(e,"main.mjs"),Q=e=>`main.${e}`;var Y=()=>({equals:ze,create:q,replace:De,preview:Ue,update:He,delete:je}),ze=(e,t)=>!!e.
29
- result&&e.result.functionArn===t.result?.functionArn,Ue=async(e,t)=>{let n=e.parameters,
30
- r=(0,m.deepCompare)({...e.parameters,sourceHash:await(0,m.hashFile)(n.sourceFile)},
31
- {...t.parameters,sourceHash:t.result?.sourceHash});if(r.counts)return{...r,name:n.
32
- functionName}},De=async(e,t,n)=>{if(t.result)throw new w.ReplaceResourceError(i,
33
- e.entryId,t.entryId);return q(e,n)},q=async(e,t)=>{let n=e.parameters,r=n.functionName,
34
- o=(0,U.getRoleArn)(i,r,t),p=n.sourceFile,A=await(0,m.hashFile)(p),S,E=await(0,m.waitFor)(
35
- async()=>{try{return await Z({...n,sourceFile:p,roleArn:o})}catch(N){if(!(N instanceof
36
- X.InvalidParameterValueException))throw N;return S=N,null}});if(!E)throw S;return{
37
- functionName:E.functionName,functionArn:E.functionArn,sourceHash:A,roleArn:o}},He=async(e,t,n)=>{
38
- let r=e.result;if(!r)return;let o=e.parameters.functionName,p=(0,U.getRoleArn)(i,
39
- o,n),A=t.result?.roleArn??p,S={...e.parameters,roleArn:p},E={...t.parameters,roleArn:A};
40
- await Promise.all([Le(o,S,E),Ve(r.functionArn,e.parameters,t.parameters)]);let N=await Be(
41
- o,e.parameters,t.result);return{...r,sourceHash:N,roleArn:p}},je=async e=>{let t=e.
42
- result;t&&await(0,w.waitDeletion)(()=>_(t.functionName))},Le=async(e,t,n)=>{!(0,m.deepEqual)(
43
- t,n,{sourceFile:!0,functionName:!0,tags:!0})&&await K(e,t)},Ve=async(e,t,n)=>{await(0,w.applyTagUpdates)(
44
- t.tags,n.tags,r=>G(e,r),r=>k(e,r))},Be=async(e,t,n)=>{let r=t.sourceFile,o=await(0,m.hashFile)(
45
- r);return o!==n?.sourceHash&&await O(e,t),o};var re=require("@ez4/aws-common");var D=require("@ez4/aws-common");var F=(e,t,n)=>{let r=n.getDependencies(c).at(0)?.result;if(!r?.functionName)throw new D.IncompleteResourceError(
46
- e,t,"functionName");return r.functionName},$e=(e,t,n)=>{let r=n.getDependencies(
47
- c).at(0)?.result;if(!r?.functionArn)throw new D.IncompleteResourceError(e,t,"fun\
48
- ctionArn");return r.functionArn};var P=require("@aws-sdk/client-lambda"),H=require("@ez4/aws-common");var g="AWS:Lambda/Permission",f="aws:lambda.permission";var ee=new P.LambdaClient({}),te=async e=>{H.Logger.logCreate(g,e.functionName);
49
- let t=e.statementId??`SID${Date.now()}`;return await ee.send(new P.AddPermissionCommand(
19
+ U,{FunctionName:n}),{functionName:n,functionArn:r}},K=async(e,t)=>{g.Logger.logTag(
20
+ i,e),await d.send(new a.TagResourceCommand({Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},
21
+ _=async(e,t)=>{g.Logger.logUntag(i,e),await d.send(new a.UntagResourceCommand({Resource:e,
22
+ TagKeys:t}))},J=async(e,t)=>{g.Logger.logUpdate(i,`${e} source code`);let{sourceFile:n}=t;
23
+ await d.send(new a.UpdateFunctionCodeCommand({FunctionName:e,ZipFile:await Y(n),
24
+ Publish:!0})),await(0,a.waitUntilFunctionUpdated)(U,{FunctionName:e})},Q=async(e,t)=>{
25
+ g.Logger.logUpdate(i,`${e} configuration`),t.variables&&z(t.variables);let{handlerName:n}=t;
26
+ await d.send(new a.UpdateFunctionConfigurationCommand({FunctionName:e,Description:t.
27
+ description,MemorySize:t.memory,Timeout:t.timeout,Role:t.roleArn,...n&&{Handler:q(
28
+ n)},Environment:{Variables:t.variables}})),await(0,a.waitUntilFunctionUpdated)(U,
29
+ {FunctionName:e})},X=async e=>{g.Logger.logDelete(i,e),await d.send(new a.DeleteFunctionCommand(
30
+ {FunctionName:e}))},Y=e=>G(e,"main.mjs"),q=e=>`main.${e}`;var te=()=>({equals:je,create:re,replace:Le,preview:Ve,update:Be,delete:$e}),ne=e=>{
31
+ let{parameters:t}=e;return t.variables&&(t.variables=N(t.variables)),e},je=(e,t)=>!!e.
32
+ result&&e.result.functionArn===t.result?.functionArn,Ve=async(e,t)=>{let n=e.parameters,
33
+ r=t.parameters,o=(0,m.deepCompare)({...n,dependencies:e.dependencies,sourceHash:await(0,m.hashFile)(
34
+ n.sourceFile),...n.variables&&{variables:N(n.variables)}},{...r,dependencies:t.dependencies,
35
+ sourceHash:t.result?.sourceHash});if(o.counts)return{...o,name:n.functionName}},
36
+ Le=async(e,t,n)=>{if(t.result)throw new F.ReplaceResourceError(i,e.entryId,t.entryId);
37
+ return re(e,n)},re=async(e,t)=>{let n=e.parameters,r=n.functionName,o=(0,D.getRoleArn)(
38
+ i,r,t),s=n.sourceFile,y=await(0,m.hashFile)(s),w,A=await(0,m.waitFor)(async()=>{
39
+ try{return await O({...n,sourceFile:s,roleArn:o})}catch(v){if(!(v instanceof ee.InvalidParameterValueException))
40
+ throw v;return w=v,null}});if(!A)throw w;return ne(e),{functionArn:A.functionArn,
41
+ functionName:A.functionName,sourceHash:y,roleArn:o}},Be=async(e,t,n)=>{let{parameters:r,
42
+ result:o}=e;if(!o)return;let s=r.functionName,y=(0,D.getRoleArn)(i,s,n),w={...r,
43
+ roleArn:y},A={...t.parameters,roleArn:t.result?.roleArn??y};await Promise.all([We(
44
+ s,w,A),Ze(o.functionArn,r,t.parameters)]);let v=await ke(s,r,t.result);return ne(
45
+ e),{...o,sourceHash:v,roleArn:y}},$e=async e=>{let t=e.result;t&&await(0,F.waitDeletion)(
46
+ ()=>X(t.functionName))},We=async(e,t,n)=>{let r={...t,...t.variables&&{variables:N(
47
+ t.variables)}};!(0,m.deepEqual)(r,n,{sourceFile:!0,functionName:!0,tags:!0})&&await Q(
48
+ e,t)},Ze=async(e,t,n)=>{await(0,F.applyTagUpdates)(t.tags,n.tags,r=>K(e,r),r=>_(
49
+ e,r))},ke=async(e,t,n)=>{let r=t.sourceFile,o=await(0,m.hashFile)(r),s=n?.sourceHash;
50
+ return o!==s?(await J(e,t),o):s};var ie=require("@ez4/aws-common");var H=require("@ez4/aws-common");var P=(e,t,n)=>{let r=n.getDependencies(p).at(0)?.result;if(!r?.functionName)throw new H.IncompleteResourceError(
51
+ e,t,"functionName");return r.functionName},Ge=(e,t,n)=>{let r=n.getDependencies(
52
+ p).at(0)?.result;if(!r?.functionArn)throw new H.IncompleteResourceError(e,t,"fun\
53
+ ctionArn");return r.functionArn};var x=require("@aws-sdk/client-lambda"),j=require("@ez4/aws-common");var f="AWS:Lambda/Permission",l="aws:lambda.permission";var oe=new x.LambdaClient({}),ae=async e=>{j.Logger.logCreate(f,e.functionName);
54
+ let t=e.statementId??`SID${Date.now()}`;return await oe.send(new x.AddPermissionCommand(
50
55
  {StatementId:t,FunctionName:e.functionName,SourceArn:e.sourceArn,Principal:e.principal,
51
- Action:e.action})),{statementId:t}},ne=async(e,t)=>{H.Logger.logDelete(g,e),await ee.
52
- send(new P.RemovePermissionCommand({FunctionName:e,StatementId:t}))};var oe=()=>({equals:We,create:ae,replace:Ge,preview:Ze,update:ke,delete:Oe}),We=(e,t)=>!!e.
53
- result&&e.result.functionName===t.result?.functionName,Ze=async(e,t)=>{},Ge=async(e,t,n)=>{
54
- if(t.result)throw new re.ReplaceResourceError(g,e.entryId,t.entryId);return ae(e,
55
- n)},ae=async(e,t)=>{let n=e.parameters,r=F(g,"permission",t),o=await n.getPermission(
56
- t);return{statementId:(await te({functionName:r,principal:o.principal,sourceArn:o.
57
- sourceArn,action:"lambda:InvokeFunction"})).statementId,functionName:r}},ke=async()=>{},
58
- Oe=async e=>{let t=e.result;t&&await ne(t.functionName,t.statementId)};var ue=require("@ez4/aws-common"),M=require("@ez4/utils");var s=require("@aws-sdk/client-lambda"),x=require("@ez4/aws-common"),ie=require("@ez4/utils");var u="AWS:Lambda/Mapping",d="aws:lambda.mapping";var b=new s.LambdaClient({}),se=async e=>{x.Logger.logCreate(u,e.functionName);let{
59
- service:t}=(0,x.parseArn)(e.sourceArn),{batch:n}=e,o=(await b.send(new s.CreateEventSourceMappingCommand(
56
+ Action:e.action})),{statementId:t}},se=async(e,t)=>{j.Logger.logDelete(f,e),await oe.
57
+ send(new x.RemovePermissionCommand({FunctionName:e,StatementId:t}))};var ce=()=>({equals:Oe,create:pe,replace:_e,preview:Ke,update:Je,delete:Qe}),Oe=(e,t)=>!!e.
58
+ result&&e.result.functionName===t.result?.functionName,Ke=async(e,t)=>{},_e=async(e,t,n)=>{
59
+ if(t.result)throw new ie.ReplaceResourceError(f,e.entryId,t.entryId);return pe(e,
60
+ n)},pe=async(e,t)=>{let n=e.parameters,r=P(f,"permission",t),o=await n.getPermission(
61
+ t);return{statementId:(await ae({functionName:r,principal:o.principal,sourceArn:o.
62
+ sourceArn,action:"lambda:InvokeFunction"})).statementId,functionName:r}},Je=async()=>{},
63
+ Qe=async e=>{let t=e.result;t&&await se(t.functionName,t.statementId)};var de=require("@ez4/aws-common"),h=require("@ez4/utils");var c=require("@aws-sdk/client-lambda"),R=require("@ez4/aws-common"),me=require("@ez4/utils");var u="AWS:Lambda/Mapping",S="aws:lambda.mapping";var I=new c.LambdaClient({}),ue=async e=>{R.Logger.logCreate(u,e.functionName);let{
64
+ service:t}=(0,R.parseArn)(e.sourceArn),{batch:n}=e,o=(await I.send(new c.CreateEventSourceMappingCommand(
60
65
  {FunctionName:e.functionName,EventSourceArn:e.sourceArn,Enabled:e.enabled,...t===
61
- "dynamodb"&&{StartingPosition:s.EventSourcePosition.LATEST},...n&&{BatchSize:n.batchSize,
62
- MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await me(o),{eventId:o}},
63
- pe=async(e,t)=>{x.Logger.logUpdate(u,e);let{batch:n}=t;await b.send(new s.UpdateEventSourceMappingCommand(
66
+ "dynamodb"&&{StartingPosition:c.EventSourcePosition.LATEST},...n&&{BatchSize:n.batchSize,
67
+ MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await ge(o),{eventId:o}},
68
+ le=async(e,t)=>{R.Logger.logUpdate(u,e);let{batch:n}=t;await I.send(new c.UpdateEventSourceMappingCommand(
64
69
  {UUID:e,FunctionName:t.functionName,Enabled:t.enabled,...n&&{BatchSize:n.batchSize,
65
- MaximumBatchingWindowInSeconds:n.maxWindow}})),await me(e)},ce=async e=>{x.Logger.
66
- logDelete(u,e),await b.send(new s.DeleteEventSourceMappingCommand({UUID:e}))},Ke=async e=>(await b.
67
- send(new s.GetEventSourceMappingCommand({UUID:e}))).State,me=async e=>{let t=new Set(
68
- ["Enabled","Disabled"]);await(0,ie.waitFor)(async()=>{let n=await Ke(e);return t.
69
- has(n)})};var le=()=>({equals:_e,create:ye,replace:Qe,preview:Je,update:Xe,delete:Ye}),_e=(e,t)=>!!e.
70
- result&&e.result.eventId===t.result?.eventId,Je=async(e,t)=>{let n=(0,M.deepCompare)(
71
- e.parameters,t.parameters,{getSourceArn:!0});return n.counts?n:void 0},Qe=async(e,t,n)=>{
72
- if(t.result)throw new ue.ReplaceResourceError(u,e.entryId,t.entryId);return ye(e,
73
- n)},ye=async(e,t)=>{let n=e.parameters,r=F(u,"mapping",t),o=await n.getSourceArn(
74
- t);return{eventId:(await se({...e.parameters,functionName:r,sourceArn:o})).eventId,
75
- functionName:r,sourceArn:o}},Xe=async(e,t,n)=>{let r=e.result;if(!r)return;let o=F(
76
- u,"mapping",n),p=t.result?.functionName??r.functionName,A={...e.parameters,functionName:o},
77
- S={...t.parameters,functionName:p};return await qe(r.eventId,A,S),{...r,functionName:o}},
78
- Ye=async e=>{let t=e.result;t&&await ce(t.eventId)},qe=async(e,t,n)=>{(0,M.deepEqual)(
79
- t,n,{getSourceArn:!0})||await pe(e,t)};var R=require("@ez4/utils"),ge=require("@ez4/stateful");var fe=e=>e.type===c,et=(e,t,n)=>{let r=(0,R.toKebabCase)(n.functionName),o=(0,R.hashData)(
80
- c,t.entryId,r);return(0,ge.attachEntry)(e,{type:c,entryId:o,dependencies:[t.entryId],
81
- parameters:{...n,functionName:r}})},tt=(e,t,n)=>{let r=(0,R.hashData)((0,R.toKebabCase)(
82
- n)),o=e[t.entryId,r];return o&&fe(o)?o:null};var de=require("@ez4/utils"),Se=require("@ez4/stateful");var nt=e=>e.type===f,rt=(e,t,n,r)=>{let o=(0,de.hashData)(f,t.entryId,n.entryId);
83
- return(0,Se.attachEntry)(e,{type:f,entryId:o,dependencies:[t.entryId,n.entryId],
84
- parameters:r})};var we=require("@ez4/utils"),Fe=require("@ez4/stateful");var ot=e=>e.type===d,at=(e,t,n,r)=>{let o=(0,we.hashData)(d,t.entryId,n.entryId);
85
- return(0,Fe.attachEntry)(e,{type:d,entryId:o,dependencies:[t.entryId,n.entryId],
86
- parameters:r})};var xe=require("@ez4/aws-common"),h=require("@ez4/aws-identity"),Re=require("@ez4/project");var C=require("@ez4/aws-identity"),Pe=async e=>{let[t,n]=await Promise.all([(0,C.getRegion)(),
87
- (0,C.getAccountId)()]);return(0,C.createPolicyDocument)([{permissions:["logs:Cre\
70
+ MaximumBatchingWindowInSeconds:n.maxWindow}})),await ge(e)},ye=async e=>{R.Logger.
71
+ logDelete(u,e),await I.send(new c.DeleteEventSourceMappingCommand({UUID:e}))},Xe=async e=>(await I.
72
+ send(new c.GetEventSourceMappingCommand({UUID:e}))).State,ge=async e=>{let t=new Set(
73
+ ["Enabled","Disabled"]);await(0,me.waitFor)(async()=>{let n=await Xe(e);return t.
74
+ has(n)})};var fe=()=>({equals:Ye,create:Se,replace:et,preview:qe,update:tt,delete:nt}),Ye=(e,t)=>!!e.
75
+ result&&e.result.eventId===t.result?.eventId,qe=async(e,t)=>{let n={...e.parameters,
76
+ dependencies:e.dependencies},r={...t.parameters,dependencies:t.dependencies},o=(0,h.deepCompare)(
77
+ n,r,{getSourceArn:!0});return o.counts?o:void 0},et=async(e,t,n)=>{if(t.result)throw new de.ReplaceResourceError(
78
+ u,e.entryId,t.entryId);return Se(e,n)},Se=async(e,t)=>{let n=e.parameters,r=P(u,
79
+ "mapping",t),o=await n.getSourceArn(t);return{eventId:(await ue({...e.parameters,
80
+ functionName:r,sourceArn:o})).eventId,functionName:r,sourceArn:o}},tt=async(e,t,n)=>{
81
+ let r=e.result;if(!r)return;let o=P(u,"mapping",n),s=t.result?.functionName??r.functionName,
82
+ y={...e.parameters,functionName:o},w={...t.parameters,functionName:s};return await rt(
83
+ r.eventId,y,w),{...r,functionName:o}},nt=async e=>{let t=e.result;t&&await ye(t.
84
+ eventId)},rt=async(e,t,n)=>{(0,h.deepEqual)(t,n,{getSourceArn:!0})||await le(e,t)};var C=require("@ez4/utils"),we=require("@ez4/stateful");var Fe=e=>e.type===p,ot=(e,t,n)=>{let r=(0,C.toKebabCase)(n.functionName),o=(0,C.hashData)(
85
+ p,t.entryId,r);return(0,we.attachEntry)(e,{type:p,entryId:o,dependencies:[t.entryId],
86
+ parameters:{...n,functionName:r}})},at=(e,t,n)=>{let r=(0,C.toKebabCase)(n),o=(0,C.hashData)(
87
+ p,t.entryId,r),s=e[o];return s&&Fe(s)?s:null};var V=require("@ez4/utils"),Pe=require("@ez4/stateful");var xe=e=>e.type===l,st=(e,t,n,r)=>{let o=(0,V.hashData)(l,t.entryId,n.entryId);
88
+ return(0,Pe.attachEntry)(e,{type:l,entryId:o,dependencies:[t.entryId,n.entryId],
89
+ parameters:r})},it=(e,t,n)=>{let r=(0,V.hashData)(l,t.entryId,n.entryId),o=e[r];
90
+ return o&&xe(o)?o:null};var Re=require("@ez4/utils"),Ce=require("@ez4/stateful");var ct=e=>e.type===S,pt=(e,t,n,r)=>{let o=(0,Re.hashData)(S,t.entryId,n.entryId);
91
+ return(0,Ce.attachEntry)(e,{type:S,entryId:o,dependencies:[t.entryId,n.entryId],
92
+ parameters:r})};var Ae=require("@ez4/aws-common"),M=require("@ez4/aws-identity"),ve=require("@ez4/project/library");var E=require("@ez4/aws-identity"),Ee=async e=>{let[t,n]=await Promise.all([(0,E.getRegion)(),
93
+ (0,E.getAccountId)()]);return(0,E.createPolicyDocument)([{permissions:["logs:Cre\
88
94
  ateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`arn:aws:l\
89
- ogs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var j=!1,it=()=>(j||((0,xe.registerTriggers)(),(0,h.registerTriggers)(),(0,Re.createTrigger)(
90
- "@ez4/aws-function",{"deploy:prepareIdentityAccount":st,"deploy:prepareExecution\
91
- Policy":pt}),j=!0),j),st=()=>[{account:"lambda.amazonaws.com"}],pt=async e=>{let{
92
- state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n;return(0,h.createPolicy)(
93
- t,{policyName:`${r}-${o}-lambda-policy`,policyDocument:await Pe(r)})};(0,I.registerProvider)(c,Y());(0,I.registerProvider)(f,oe());(0,I.registerProvider)(
94
- d,le());0&&(module.exports={FunctionServiceName,FunctionServiceType,MappingServiceName,MappingServiceType,
95
+ ogs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var L=!1,mt=()=>(L||((0,Ae.registerTriggers)(),(0,M.registerTriggers)(),(0,ve.createTrigger)(
96
+ "@ez4/aws-function",{"deploy:prepareIdentityAccount":ut,"deploy:prepareExecution\
97
+ Policy":lt}),L=!0),L),ut=()=>[{account:"lambda.amazonaws.com"}],lt=async e=>{let{
98
+ state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n;return(0,M.createPolicy)(
99
+ t,{policyName:`${r}-${o}-lambda-policy`,policyDocument:await Ee(r)})};(0,T.registerProvider)(p,te());(0,T.registerProvider)(l,ce());(0,T.registerProvider)(
100
+ S,fe());0&&(module.exports={FunctionServiceName,FunctionServiceType,MappingServiceName,MappingServiceType,
95
101
  PermissionServiceName,PermissionServiceType,createFunction,createMapping,createPermission,
96
- getFunction,getFunctionArn,getFunctionName,isFunction,isMapping,isPermission,registerTriggers});
102
+ getFunction,getFunctionArn,getFunctionName,getPermission,isFunction,isMapping,isPermission,
103
+ registerTriggers});
package/dist/main.mjs CHANGED
@@ -1,89 +1,94 @@
1
- import{registerProvider as E}from"@ez4/aws-common";import{InvalidParameterValueException as ge}from"@aws-sdk/client-lambda";import{
2
- applyTagUpdates as fe,ReplaceResourceError as de,waitDeletion as Se}from"@ez4/aws-common";
3
- import{deepCompare as we,deepEqual as Fe,hashFile as R,waitFor as Pe}from"@ez4/utils";
4
- import{getRoleArn as H}from"@ez4/aws-identity";import{CreateFunctionCommand as ie,DeleteFunctionCommand as se,LambdaClient as pe,
5
- TagResourceCommand as ce,UntagResourceCommand as me,UpdateFunctionCodeCommand as ue,
6
- UpdateFunctionConfigurationCommand as le,waitUntilFunctionActive as ye,waitUntilFunctionUpdated as v}from"@aws-sdk/client-lambda";
7
- import{Logger as u}from"@ez4/aws-common";import{InvalidParameterError as te}from"@ez4/aws-common";var a="AWS:Lambda/Function",s="aws:lambda.function";var ne=/[a-z][\w]+/i,re=e=>ne.test(e),P=e=>{for(let t in e)if(!re(t))throw new te(
8
- a,`name ${t} for variable unsupported.`)};import oe from"adm-zip";import{readFile as ae}from"node:fs/promises";var N=async(e,t)=>{
9
- let n=new oe,r=await ae(e);return n.addFile(t,r),n.toBufferPromise()};var c=new pe({}),x={maxWaitTime:90,client:c},b=async e=>{u.logCreate(a,e.functionName),
10
- e.variables&&P(e.variables);let t=await c.send(new ie({Publish:!0,FunctionName:e.
1
+ import{registerProvider as v}from"@ez4/aws-common";import{InvalidParameterValueException as we}from"@aws-sdk/client-lambda";import{
2
+ applyTagUpdates as Fe,ReplaceResourceError as Pe,waitDeletion as xe}from"@ez4/aws-common";
3
+ import{deepCompare as Re,deepEqual as Ce,hashFile as C,waitFor as Ee}from"@ez4/utils";
4
+ import{getRoleArn as j}from"@ez4/aws-identity";import{CreateFunctionCommand as me,DeleteFunctionCommand as ue,LambdaClient as le,
5
+ TagResourceCommand as ye,UntagResourceCommand as ge,UpdateFunctionCodeCommand as de,
6
+ UpdateFunctionConfigurationCommand as fe,waitUntilFunctionActive as Se,waitUntilFunctionUpdated as N}from"@aws-sdk/client-lambda";
7
+ import{Logger as y}from"@ez4/aws-common";import{InvalidParameterError as oe}from"@ez4/aws-common";import{hashData as ae}from"@ez4/utils";var s="AWS:Lambda/Function",i="aws:lambda.function";var se=/[a-z][\w]+/i,ie=e=>se.test(e),x=e=>{for(let t in e)if(!ie(t))throw new oe(
8
+ s,`${t} is an invalid variable name .`)},F=e=>{let t={};for(let n in e)t[n]=ae(e[n]);
9
+ return t};import ce from"adm-zip";import{readFile as pe}from"node:fs/promises";var b=async(e,t)=>{
10
+ let n=new ce,r=await pe(e);return n.addFile(t,r),n.toBufferPromise()};var m=new le({}),R={maxWaitTime:90,client:m},I=async e=>{y.logCreate(s,e.functionName),
11
+ e.variables&&x(e.variables);let t=await m.send(new me({Publish:!0,FunctionName:e.
11
12
  functionName,Description:e.description,MemorySize:e.memory,Timeout:e.timeout,Role:e.
12
- roleArn,PackageType:"Zip",Handler:D(e.handlerName),Runtime:"nodejs20.x",Code:{ZipFile:await U(
13
+ roleArn,PackageType:"Zip",Handler:H(e.handlerName),Runtime:"nodejs20.x",Code:{ZipFile:await D(
13
14
  e.sourceFile)},Environment:{Variables:e.variables},Tags:{...e.tags,ManagedBy:"EZ\
14
- 4"}})),n=t.FunctionName,r=t.FunctionArn;return await ye(x,{FunctionName:n}),{functionName:n,
15
- functionArn:r}},M=async(e,t)=>{u.logTag(a,e),await c.send(new ce({Resource:e,Tags:{
16
- ...t,ManagedBy:"EZ4"}}))},h=async(e,t)=>{u.logUntag(a,e),await c.send(new me({Resource:e,
17
- TagKeys:t}))},I=async(e,t)=>{u.logUpdate(a,`${e} source code`);let{sourceFile:n}=t;
18
- await c.send(new ue({FunctionName:e,ZipFile:await U(n),Publish:!0})),await v(x,{
19
- FunctionName:e})},T=async(e,t)=>{u.logUpdate(a,`${e} configuration`),t.variables&&
20
- P(t.variables);let{handlerName:n}=t;await c.send(new le({FunctionName:e,Description:t.
21
- description,MemorySize:t.memory,Timeout:t.timeout,Role:t.roleArn,...n&&{Handler:D(
22
- n)},Environment:{Variables:t.variables}})),await v(x,{FunctionName:e})},z=async e=>{
23
- u.logDelete(a,e),await c.send(new se({FunctionName:e}))},U=e=>N(e,"main.mjs"),D=e=>`\
24
- main.${e}`;var j=()=>({equals:xe,create:L,replace:Ce,preview:Re,update:Ae,delete:Ee}),xe=(e,t)=>!!e.
25
- result&&e.result.functionArn===t.result?.functionArn,Re=async(e,t)=>{let n=e.parameters,
26
- r=we({...e.parameters,sourceHash:await R(n.sourceFile)},{...t.parameters,sourceHash:t.
27
- result?.sourceHash});if(r.counts)return{...r,name:n.functionName}},Ce=async(e,t,n)=>{
28
- if(t.result)throw new de(a,e.entryId,t.entryId);return L(e,n)},L=async(e,t)=>{let n=e.
29
- parameters,r=n.functionName,o=H(a,r,t),i=n.sourceFile,f=await R(i),m,d=await Pe(
30
- async()=>{try{return await b({...n,sourceFile:i,roleArn:o})}catch(S){if(!(S instanceof
31
- ge))throw S;return m=S,null}});if(!d)throw m;return{functionName:d.functionName,
32
- functionArn:d.functionArn,sourceHash:f,roleArn:o}},Ae=async(e,t,n)=>{let r=e.result;
33
- if(!r)return;let o=e.parameters.functionName,i=H(a,o,n),f=t.result?.roleArn??i,m={
34
- ...e.parameters,roleArn:i},d={...t.parameters,roleArn:f};await Promise.all([Ne(o,
35
- m,d),ve(r.functionArn,e.parameters,t.parameters)]);let S=await be(o,e.parameters,
36
- t.result);return{...r,sourceHash:S,roleArn:i}},Ee=async e=>{let t=e.result;t&&await Se(
37
- ()=>z(t.functionName))},Ne=async(e,t,n)=>{!Fe(t,n,{sourceFile:!0,functionName:!0,
38
- tags:!0})&&await T(e,t)},ve=async(e,t,n)=>{await fe(t.tags,n.tags,r=>M(e,r),r=>h(
39
- e,r))},be=async(e,t,n)=>{let r=t.sourceFile,o=await R(r);return o!==n?.sourceHash&&
40
- await I(e,t),o};import{ReplaceResourceError as Te}from"@ez4/aws-common";import{IncompleteResourceError as V}from"@ez4/aws-common";var w=(e,t,n)=>{let r=n.getDependencies(s).at(0)?.result;if(!r?.functionName)throw new V(
41
- e,t,"functionName");return r.functionName},Vt=(e,t,n)=>{let r=n.getDependencies(
42
- s).at(0)?.result;if(!r?.functionArn)throw new V(e,t,"functionArn");return r.functionArn};import{AddPermissionCommand as Me,LambdaClient as he,RemovePermissionCommand as Ie}from"@aws-sdk/client-lambda";
43
- import{Logger as B}from"@ez4/aws-common";var l="AWS:Lambda/Permission",y="aws:lambda.permission";var $=new he({}),W=async e=>{B.logCreate(l,e.functionName);let t=e.statementId??
44
- `SID${Date.now()}`;return await $.send(new Me({StatementId:t,FunctionName:e.functionName,
15
+ 4"}})),n=t.FunctionName,r=t.FunctionArn;return await Se(R,{FunctionName:n}),{functionName:n,
16
+ functionArn:r}},h=async(e,t)=>{y.logTag(s,e),await m.send(new ye({Resource:e,Tags:{
17
+ ...t,ManagedBy:"EZ4"}}))},M=async(e,t)=>{y.logUntag(s,e),await m.send(new ge({Resource:e,
18
+ TagKeys:t}))},T=async(e,t)=>{y.logUpdate(s,`${e} source code`);let{sourceFile:n}=t;
19
+ await m.send(new de({FunctionName:e,ZipFile:await D(n),Publish:!0})),await N(R,{
20
+ FunctionName:e})},z=async(e,t)=>{y.logUpdate(s,`${e} configuration`),t.variables&&
21
+ x(t.variables);let{handlerName:n}=t;await m.send(new fe({FunctionName:e,Description:t.
22
+ description,MemorySize:t.memory,Timeout:t.timeout,Role:t.roleArn,...n&&{Handler:H(
23
+ n)},Environment:{Variables:t.variables}})),await N(R,{FunctionName:e})},U=async e=>{
24
+ y.logDelete(s,e),await m.send(new ue({FunctionName:e}))},D=e=>b(e,"main.mjs"),H=e=>`\
25
+ main.${e}`;var V=()=>({equals:Ae,create:B,replace:be,preview:ve,update:Ne,delete:Ie}),L=e=>{
26
+ let{parameters:t}=e;return t.variables&&(t.variables=F(t.variables)),e},Ae=(e,t)=>!!e.
27
+ result&&e.result.functionArn===t.result?.functionArn,ve=async(e,t)=>{let n=e.parameters,
28
+ r=t.parameters,o=Re({...n,dependencies:e.dependencies,sourceHash:await C(n.sourceFile),
29
+ ...n.variables&&{variables:F(n.variables)}},{...r,dependencies:t.dependencies,sourceHash:t.
30
+ result?.sourceHash});if(o.counts)return{...o,name:n.functionName}},be=async(e,t,n)=>{
31
+ if(t.result)throw new Pe(s,e.entryId,t.entryId);return B(e,n)},B=async(e,t)=>{let n=e.
32
+ parameters,r=n.functionName,o=j(s,r,t),a=n.sourceFile,p=await C(a),l,f=await Ee(
33
+ async()=>{try{return await I({...n,sourceFile:a,roleArn:o})}catch(S){if(!(S instanceof
34
+ we))throw S;return l=S,null}});if(!f)throw l;return L(e),{functionArn:f.functionArn,
35
+ functionName:f.functionName,sourceHash:p,roleArn:o}},Ne=async(e,t,n)=>{let{parameters:r,
36
+ result:o}=e;if(!o)return;let a=r.functionName,p=j(s,a,n),l={...r,roleArn:p},f={...t.
37
+ parameters,roleArn:t.result?.roleArn??p};await Promise.all([he(a,l,f),Me(o.functionArn,
38
+ r,t.parameters)]);let S=await Te(a,r,t.result);return L(e),{...o,sourceHash:S,roleArn:p}},
39
+ Ie=async e=>{let t=e.result;t&&await xe(()=>U(t.functionName))},he=async(e,t,n)=>{
40
+ let r={...t,...t.variables&&{variables:F(t.variables)}};!Ce(r,n,{sourceFile:!0,functionName:!0,
41
+ tags:!0})&&await z(e,t)},Me=async(e,t,n)=>{await Fe(t.tags,n.tags,r=>h(e,r),r=>M(
42
+ e,r))},Te=async(e,t,n)=>{let r=t.sourceFile,o=await C(r),a=n?.sourceHash;return o!==
43
+ a?(await T(e,t),o):a};import{ReplaceResourceError as He}from"@ez4/aws-common";import{IncompleteResourceError as $}from"@ez4/aws-common";var w=(e,t,n)=>{let r=n.getDependencies(i).at(0)?.result;if(!r?.functionName)throw new $(
44
+ e,t,"functionName");return r.functionName},Gt=(e,t,n)=>{let r=n.getDependencies(
45
+ i).at(0)?.result;if(!r?.functionArn)throw new $(e,t,"functionArn");return r.functionArn};import{AddPermissionCommand as ze,LambdaClient as Ue,RemovePermissionCommand as De}from"@aws-sdk/client-lambda";
46
+ import{Logger as W}from"@ez4/aws-common";var g="AWS:Lambda/Permission",u="aws:lambda.permission";var Z=new Ue({}),k=async e=>{W.logCreate(g,e.functionName);let t=e.statementId??
47
+ `SID${Date.now()}`;return await Z.send(new ze({StatementId:t,FunctionName:e.functionName,
45
48
  SourceArn:e.sourceArn,Principal:e.principal,Action:e.action})),{statementId:t}},
46
- Z=async(e,t)=>{B.logDelete(l,e),await $.send(new Ie({FunctionName:e,StatementId:t}))};var G=()=>({equals:ze,create:k,replace:De,preview:Ue,update:He,delete:je}),ze=(e,t)=>!!e.
47
- result&&e.result.functionName===t.result?.functionName,Ue=async(e,t)=>{},De=async(e,t,n)=>{
48
- if(t.result)throw new Te(l,e.entryId,t.entryId);return k(e,n)},k=async(e,t)=>{let n=e.
49
- parameters,r=w(l,"permission",t),o=await n.getPermission(t);return{statementId:(await W(
49
+ G=async(e,t)=>{W.logDelete(g,e),await Z.send(new De({FunctionName:e,StatementId:t}))};var O=()=>({equals:je,create:K,replace:Le,preview:Ve,update:Be,delete:$e}),je=(e,t)=>!!e.
50
+ result&&e.result.functionName===t.result?.functionName,Ve=async(e,t)=>{},Le=async(e,t,n)=>{
51
+ if(t.result)throw new He(g,e.entryId,t.entryId);return K(e,n)},K=async(e,t)=>{let n=e.
52
+ parameters,r=w(g,"permission",t),o=await n.getPermission(t);return{statementId:(await k(
50
53
  {functionName:r,principal:o.principal,sourceArn:o.sourceArn,action:"lambda:Invok\
51
- eFunction"})).statementId,functionName:r}},He=async()=>{},je=async e=>{let t=e.result;
52
- t&&await Z(t.functionName,t.statementId)};import{ReplaceResourceError as Ke}from"@ez4/aws-common";import{deepCompare as _e,
53
- deepEqual as Je}from"@ez4/utils";import{CreateEventSourceMappingCommand as Le,UpdateEventSourceMappingCommand as Ve,
54
- DeleteEventSourceMappingCommand as Be,GetEventSourceMappingCommand as $e,EventSourcePosition as We,
55
- LambdaClient as Ze}from"@aws-sdk/client-lambda";import{Logger as C,parseArn as Ge}from"@ez4/aws-common";
56
- import{waitFor as ke}from"@ez4/utils";var p="AWS:Lambda/Mapping",g="aws:lambda.mapping";var F=new Ze({}),O=async e=>{C.logCreate(p,e.functionName);let{service:t}=Ge(e.sourceArn),
57
- {batch:n}=e,o=(await F.send(new Le({FunctionName:e.functionName,EventSourceArn:e.
58
- sourceArn,Enabled:e.enabled,...t==="dynamodb"&&{StartingPosition:We.LATEST},...n&&
59
- {BatchSize:n.batchSize,MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await J(
60
- o),{eventId:o}},K=async(e,t)=>{C.logUpdate(p,e);let{batch:n}=t;await F.send(new Ve(
54
+ eFunction"})).statementId,functionName:r}},Be=async()=>{},$e=async e=>{let t=e.result;
55
+ t&&await G(t.functionName,t.statementId)};import{ReplaceResourceError as Xe}from"@ez4/aws-common";import{deepCompare as Ye,
56
+ deepEqual as qe}from"@ez4/utils";import{CreateEventSourceMappingCommand as We,UpdateEventSourceMappingCommand as Ze,
57
+ DeleteEventSourceMappingCommand as ke,GetEventSourceMappingCommand as Ge,EventSourcePosition as Oe,
58
+ LambdaClient as Ke}from"@aws-sdk/client-lambda";import{Logger as E,parseArn as _e}from"@ez4/aws-common";
59
+ import{waitFor as Je}from"@ez4/utils";var c="AWS:Lambda/Mapping",d="aws:lambda.mapping";var P=new Ke({}),_=async e=>{E.logCreate(c,e.functionName);let{service:t}=_e(e.sourceArn),
60
+ {batch:n}=e,o=(await P.send(new We({FunctionName:e.functionName,EventSourceArn:e.
61
+ sourceArn,Enabled:e.enabled,...t==="dynamodb"&&{StartingPosition:Oe.LATEST},...n&&
62
+ {BatchSize:n.batchSize,MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await X(
63
+ o),{eventId:o}},J=async(e,t)=>{E.logUpdate(c,e);let{batch:n}=t;await P.send(new Ze(
61
64
  {UUID:e,FunctionName:t.functionName,Enabled:t.enabled,...n&&{BatchSize:n.batchSize,
62
- MaximumBatchingWindowInSeconds:n.maxWindow}})),await J(e)},_=async e=>{C.logDelete(
63
- p,e),await F.send(new Be({UUID:e}))},Oe=async e=>(await F.send(new $e({UUID:e}))).
64
- State,J=async e=>{let t=new Set(["Enabled","Disabled"]);await ke(async()=>{let n=await Oe(
65
- e);return t.has(n)})};var Q=()=>({equals:Qe,create:X,replace:Ye,preview:Xe,update:qe,delete:et}),Qe=(e,t)=>!!e.
66
- result&&e.result.eventId===t.result?.eventId,Xe=async(e,t)=>{let n=_e(e.parameters,
67
- t.parameters,{getSourceArn:!0});return n.counts?n:void 0},Ye=async(e,t,n)=>{if(t.
68
- result)throw new Ke(p,e.entryId,t.entryId);return X(e,n)},X=async(e,t)=>{let n=e.
69
- parameters,r=w(p,"mapping",t),o=await n.getSourceArn(t);return{eventId:(await O(
70
- {...e.parameters,functionName:r,sourceArn:o})).eventId,functionName:r,sourceArn:o}},
71
- qe=async(e,t,n)=>{let r=e.result;if(!r)return;let o=w(p,"mapping",n),i=t.result?.
72
- functionName??r.functionName,f={...e.parameters,functionName:o},m={...t.parameters,
73
- functionName:i};return await tt(r.eventId,f,m),{...r,functionName:o}},et=async e=>{
74
- let t=e.result;t&&await _(t.eventId)},tt=async(e,t,n)=>{Je(t,n,{getSourceArn:!0})||
75
- await K(e,t)};import{toKebabCase as Y,hashData as q}from"@ez4/utils";import{attachEntry as nt}from"@ez4/stateful";var rt=e=>e.type===s,yn=(e,t,n)=>{let r=Y(n.functionName),o=q(s,t.entryId,r);return nt(
76
- e,{type:s,entryId:o,dependencies:[t.entryId],parameters:{...n,functionName:r}})},
77
- gn=(e,t,n)=>{let r=q(Y(n)),o=e[t.entryId,r];return o&&rt(o)?o:null};import{hashData as ot}from"@ez4/utils";import{attachEntry as at}from"@ez4/stateful";var Fn=e=>e.type===y,Pn=(e,t,n,r)=>{let o=ot(y,t.entryId,n.entryId);return at(e,
78
- {type:y,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})};import{hashData as it}from"@ez4/utils";import{attachEntry as st}from"@ez4/stateful";var En=e=>e.type===g,Nn=(e,t,n,r)=>{let o=it(g,t.entryId,n.entryId);return st(e,
79
- {type:g,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})};import{registerTriggers as ut}from"@ez4/aws-common";import{createPolicy as lt,registerTriggers as yt}from"@ez4/aws-identity";
80
- import{createTrigger as gt}from"@ez4/project";import{getAccountId as pt,getRegion as ct,createPolicyDocument as mt}from"@ez4/aws-identity";
81
- var ee=async e=>{let[t,n]=await Promise.all([ct(),pt()]);return mt([{permissions:[
65
+ MaximumBatchingWindowInSeconds:n.maxWindow}})),await X(e)},Q=async e=>{E.logDelete(
66
+ c,e),await P.send(new ke({UUID:e}))},Qe=async e=>(await P.send(new Ge({UUID:e}))).
67
+ State,X=async e=>{let t=new Set(["Enabled","Disabled"]);await Je(async()=>{let n=await Qe(
68
+ e);return t.has(n)})};var Y=()=>({equals:et,create:q,replace:nt,preview:tt,update:rt,delete:ot}),et=(e,t)=>!!e.
69
+ result&&e.result.eventId===t.result?.eventId,tt=async(e,t)=>{let n={...e.parameters,
70
+ dependencies:e.dependencies},r={...t.parameters,dependencies:t.dependencies},o=Ye(
71
+ n,r,{getSourceArn:!0});return o.counts?o:void 0},nt=async(e,t,n)=>{if(t.result)throw new Xe(
72
+ c,e.entryId,t.entryId);return q(e,n)},q=async(e,t)=>{let n=e.parameters,r=w(c,"m\
73
+ apping",t),o=await n.getSourceArn(t);return{eventId:(await _({...e.parameters,functionName:r,
74
+ sourceArn:o})).eventId,functionName:r,sourceArn:o}},rt=async(e,t,n)=>{let r=e.result;
75
+ if(!r)return;let o=w(c,"mapping",n),a=t.result?.functionName??r.functionName,p={
76
+ ...e.parameters,functionName:o},l={...t.parameters,functionName:a};return await at(
77
+ r.eventId,p,l),{...r,functionName:o}},ot=async e=>{let t=e.result;t&&await Q(t.eventId)},
78
+ at=async(e,t,n)=>{qe(t,n,{getSourceArn:!0})||await J(e,t)};import{toKebabCase as ee,hashData as te}from"@ez4/utils";import{attachEntry as st}from"@ez4/stateful";var it=e=>e.type===i,Fn=(e,t,n)=>{let r=ee(n.functionName),o=te(i,t.entryId,r);return st(
79
+ e,{type:i,entryId:o,dependencies:[t.entryId],parameters:{...n,functionName:r}})},
80
+ Pn=(e,t,n)=>{let r=ee(n),o=te(i,t.entryId,r),a=e[o];return a&&it(a)?a:null};import{hashData as ne}from"@ez4/utils";import{attachEntry as ct}from"@ez4/stateful";var pt=e=>e.type===u,An=(e,t,n,r)=>{let o=ne(u,t.entryId,n.entryId);return ct(e,
81
+ {type:u,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})},vn=(e,t,n)=>{
82
+ let r=ne(u,t.entryId,n.entryId),o=e[r];return o&&pt(o)?o:null};import{hashData as mt}from"@ez4/utils";import{attachEntry as ut}from"@ez4/stateful";var Mn=e=>e.type===d,Tn=(e,t,n,r)=>{let o=mt(d,t.entryId,n.entryId);return ut(e,
83
+ {type:d,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})};import{registerTriggers as dt}from"@ez4/aws-common";import{createPolicy as ft,registerTriggers as St}from"@ez4/aws-identity";
84
+ import{createTrigger as wt}from"@ez4/project/library";import{getAccountId as lt,getRegion as yt,createPolicyDocument as gt}from"@ez4/aws-identity";
85
+ var re=async e=>{let[t,n]=await Promise.all([yt(),lt()]);return gt([{permissions:[
82
86
  "logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`\
83
- arn:aws:logs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var A=!1,Un=()=>(A||(ut(),yt(),gt("@ez4/aws-function",{"deploy:prepareIdentityAc\
84
- count":ft,"deploy:prepareExecutionPolicy":dt}),A=!0),A),ft=()=>[{account:"lambda\
85
- .amazonaws.com"}],dt=async e=>{let{state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n;
86
- return lt(t,{policyName:`${r}-${o}-lambda-policy`,policyDocument:await ee(r)})};E(s,j());E(y,G());E(g,Q());export{a as FunctionServiceName,s as FunctionServiceType,p as MappingServiceName,
87
- g as MappingServiceType,l as PermissionServiceName,y as PermissionServiceType,yn as createFunction,
88
- Nn as createMapping,Pn as createPermission,gn as getFunction,Vt as getFunctionArn,
89
- w as getFunctionName,rt as isFunction,En as isMapping,Fn as isPermission,Un as registerTriggers};
87
+ arn:aws:logs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var A=!1,Bn=()=>(A||(dt(),St(),wt("@ez4/aws-function",{"deploy:prepareIdentityAc\
88
+ count":Ft,"deploy:prepareExecutionPolicy":Pt}),A=!0),A),Ft=()=>[{account:"lambda\
89
+ .amazonaws.com"}],Pt=async e=>{let{state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n;
90
+ return ft(t,{policyName:`${r}-${o}-lambda-policy`,policyDocument:await re(r)})};v(i,V());v(u,O());v(d,Y());export{s as FunctionServiceName,i as FunctionServiceType,c as MappingServiceName,
91
+ d as MappingServiceType,g as PermissionServiceName,u as PermissionServiceType,Fn as createFunction,
92
+ Tn as createMapping,An as createPermission,Pn as getFunction,Gt as getFunctionArn,
93
+ w as getFunctionName,vn as getPermission,it as isFunction,Mn as isMapping,pt as isPermission,
94
+ Bn as registerTriggers};
@@ -1,5 +1,11 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
2
  import type { FunctionState } from '../function/types.js';
3
3
  import type { PermissionParameters, PermissionState } from './types.js';
4
+ import { PermissionServiceType } from './types.js';
4
5
  export declare const isPermission: (resource: EntryState) => resource is PermissionState;
5
6
  export declare const createPermission: <E extends EntryState>(state: EntryStates<E>, sourceState: EntryState, functionState: FunctionState, parameters: PermissionParameters) => PermissionState;
7
+ export declare const getPermission: <E extends EntryState>(state: EntryStates<E>, sourceState: EntryState, functionState: FunctionState) => (E & EntryState & {
8
+ type: typeof PermissionServiceType;
9
+ parameters: PermissionParameters;
10
+ result?: import("./types.js").PermissionResult;
11
+ }) | null;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/aws-function",
3
3
  "description": "EZ4: Self-managed AWS lambda functions",
4
- "version": "0.1.0",
4
+ "version": "0.3.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -27,11 +27,11 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@aws-sdk/client-lambda": "^3.614.0",
30
- "@ez4/aws-common": "^0.1.0",
31
- "@ez4/aws-identity": "^0.1.0",
32
- "@ez4/project": "^0.1.0",
33
- "@ez4/stateful": "^0.1.0",
34
- "@ez4/utils": "^0.1.0",
30
+ "@ez4/aws-common": "^0.3.0",
31
+ "@ez4/aws-identity": "^0.3.0",
32
+ "@ez4/project": "^0.3.0",
33
+ "@ez4/stateful": "^0.3.0",
34
+ "@ez4/utils": "^0.3.0",
35
35
  "@types/adm-zip": "^0.5.5",
36
36
  "adm-zip": "^0.5.14"
37
37
  }