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