@ez4/aws-function 0.18.0 → 0.20.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.
@@ -4,8 +4,10 @@ import type { CreateRequest, ImportOrCreateResponse } from './client.js';
4
4
  export declare const FunctionServiceName = "AWS:Lambda/Function";
5
5
  export declare const FunctionServiceType = "aws:lambda.function";
6
6
  export type GetFunctionBundle = (context: StepContext) => Promise<string> | string;
7
+ export type GetFunctionFiles = () => [string, string[]];
7
8
  export type FunctionParameters = Omit<CreateRequest, 'roleArn' | 'publish'> & {
8
9
  getFunctionBundle: GetFunctionBundle;
10
+ getFunctionFiles: GetFunctionFiles;
9
11
  };
10
12
  export type FunctionResult = ImportOrCreateResponse & {
11
13
  logGroup?: string;
package/dist/main.cjs CHANGED
@@ -1,129 +1,132 @@
1
- "use strict";var Ze=Object.create;var A=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var Ke=Object.getPrototypeOf,Qe=Object.prototype.hasOwnProperty;var _e=(e,t)=>{for(var r in t)A(e,r,{get:t[r],enumerable:!0})},q=(e,t,r,n)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let o of Je(t))!Qe.call(e,o)&&o!==r&&
3
- A(e,o,{get:()=>t[o],enumerable:!(n=ke(t,o))||n.enumerable});return e};var Xe=(e,t,r)=>(r=e!=null?Ze(Ke(e)):{},q(t||!e||!e.__esModule?A(r,"default",{value:e,
4
- enumerable:!0}):r,e)),Ye=e=>q(A({},"__esModule",{value:!0}),e);var Nt={};_e(Nt,{FunctionServiceName:()=>a,FunctionServiceType:()=>u,MappingServiceName:()=>l,
5
- MappingServiceType:()=>S,PermissionServiceName:()=>P,PermissionServiceType:()=>f,
6
- createFunction:()=>bt,createMapping:()=>Mt,createPermission:()=>Et,getFunctionArn:()=>lt,
7
- getFunctionName:()=>C,getFunctionState:()=>ut,getPermission:()=>ht,isFunctionState:()=>B,
8
- isMappingState:()=>It,registerTriggers:()=>At,tryGetFunctionArn:()=>pe,tryGetFunctionState:()=>mt});
9
- module.exports=Ye(Nt);var Le=require("@ez4/aws-common"),De=require("@ez4/aws-identity"),ze=require("@ez4/aws-logs"),
10
- Ge=require("@ez4/project/library");var se=require("@ez4/aws-common");var d=require("@ez4/aws-common"),h=require("@ez4/utils"),H=require("@ez4/aws-logs"),
11
- j=require("@ez4/aws-identity");var i=require("@aws-sdk/client-lambda"),p=require("@ez4/aws-common");var Z=require("@ez4/aws-common"),k=require("@ez4/utils");var a="AWS:Lambda/Function",u="aws:lambda.function";var et=/[a-z][\w]+/i,tt=e=>et.test(e),L=e=>{for(let t in e)if(!tt(t))throw new Z.InvalidParameterError(
12
- a,`${t} is an invalid variable name .`)},b=e=>{let t={};for(let r in e)t[r]=(0,k.hashData)(
13
- e[r]);return t};var J=Xe(require("adm-zip"),1),K=require("node:fs/promises"),Q=async(e,t)=>{let r=new J.default,
14
- n=await(0,K.readFile)(e);return r.addFile(t,n),r.toBufferPromise()};var g=new i.LambdaClient({}),E={minDelay:15,maxWaitTime:1800,maxDelay:60,client:g},
15
- _=async(e,t)=>{p.Logger.logImport(a,e);try{let r=await g.send(new i.GetFunctionCommand(
1
+ "use strict";var ke=Object.create;var A=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var Ke=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Xe=(e,t)=>{for(var r in t)A(e,r,{get:t[r],enumerable:!0})},Z=(e,t,r,n)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let o of Je(t))!_e.call(e,o)&&o!==r&&
3
+ A(e,o,{get:()=>t[o],enumerable:!(n=Qe(t,o))||n.enumerable});return e};var Ye=(e,t,r)=>(r=e!=null?ke(Ke(e)):{},Z(t||!e||!e.__esModule?A(r,"default",{value:e,
4
+ enumerable:!0}):r,e)),et=e=>Z(A({},"__esModule",{value:!0}),e);var Tt={};Xe(Tt,{FunctionServiceName:()=>a,FunctionServiceType:()=>l,MappingService:()=>q,
5
+ MappingServiceName:()=>g,MappingServiceType:()=>w,PermissionServiceName:()=>x,PermissionServiceType:()=>d,
6
+ createFunction:()=>Et,createMapping:()=>Mt,createPermission:()=>ht,getFunctionArn:()=>gt,
7
+ getFunctionName:()=>R,getFunctionState:()=>lt,getPermission:()=>It,isFunctionState:()=>B,
8
+ isMappingState:()=>Nt,registerTriggers:()=>bt,tryGetFunctionArn:()=>ce,tryGetFunctionState:()=>ut});
9
+ module.exports=et(Tt);var Le=require("@ez4/aws-common"),ze=require("@ez4/aws-identity"),Ge=require("@ez4/aws-logs"),
10
+ Ve=require("@ez4/project/library");var ae=require("@ez4/aws-common");var S=require("@ez4/aws-common"),h=require("@ez4/utils"),H=require("@ez4/aws-logs"),
11
+ j=require("@ez4/aws-identity");var i=require("@aws-sdk/client-lambda"),p=require("@ez4/aws-common");var k=require("@ez4/aws-common"),Q=require("@ez4/utils");var a="AWS:Lambda/Function",l="aws:lambda.function";var tt=/[a-z][\w]+/i,rt=e=>tt.test(e),D=e=>{for(let t in e)if(!rt(t))throw new k.InvalidParameterError(
12
+ a,`${t} is an invalid variable name .`)},b=e=>{let t={};for(let r in e)t[r]=(0,Q.hashData)(
13
+ e[r]);return t};var J=Ye(require("adm-zip"),1),K=require("node:fs/promises"),_=async(e,t)=>{let r=new J.default,
14
+ n=await(0,K.readFile)(e);return r.addFile(t,n),r.toBufferPromise()};var y=new i.LambdaClient({}),E={minDelay:15,maxWaitTime:1800,maxDelay:60,client:y},
15
+ X=async(e,t)=>{p.Logger.logImport(a,e);try{let r=await y.send(new i.GetFunctionCommand(
16
16
  {FunctionName:e,Qualifier:t})),n=r.Configuration.Version,o=r.Configuration.FunctionArn;
17
17
  return{functionVersion:n,functionArn:o}}catch(r){if(!(r instanceof i.ResourceNotFoundException))
18
- throw r;return}},X=async e=>{let{functionName:t,variables:r}=e;p.Logger.logCreate(
19
- a,t),r&&L(r);let n=ne(e.handlerName),o=await re(e.sourceFile),s=await(0,p.waitCreation)(
20
- ()=>g.send(new i.CreateFunctionCommand({FunctionName:e.functionName,Description:e.
18
+ throw r;return}},Y=async e=>{let{functionName:t,variables:r}=e;p.Logger.logCreate(
19
+ a,t),r&&D(r);let n=oe(e.handlerName),o=await ne(e.sourceFile),s=await(0,p.waitCreation)(
20
+ ()=>y.send(new i.CreateFunctionCommand({FunctionName:e.functionName,Description:e.
21
21
  description,MemorySize:e.memory,Timeout:e.timeout,Role:e.roleArn,Handler:n,Runtime:"\
22
22
  nodejs22.x",PackageType:"Zip",LoggingConfig:{LogGroup:e.logGroup,ApplicationLogLevel:e.
23
23
  debug?i.ApplicationLogLevel.Debug:i.ApplicationLogLevel.Warn,SystemLogLevel:i.SystemLogLevel.
24
24
  Warn,LogFormat:i.LogFormat.Json},Code:{ZipFile:o},Environment:{Variables:r},Tags:{
25
25
  ...e.tags,ManagedBy:"EZ4"}})));p.Logger.logWait(a,t),await(0,i.waitUntilFunctionActive)(
26
- E,{FunctionName:t});let m=s.FunctionArn;return e.publish?{functionVersion:await ee(
27
- t),functionArn:m}:{functionArn:m}},D=async(e,t)=>{p.Logger.logUpdate(a,`${e} sou\
28
- rce code`);let r=await re(t.sourceFile),n=await g.send(new i.UpdateFunctionCodeCommand(
26
+ E,{FunctionName:t});let m=s.FunctionArn;return e.publish?{functionVersion:await te(
27
+ t),functionArn:m}:{functionArn:m}},L=async(e,t)=>{p.Logger.logUpdate(a,`${e} sou\
28
+ rce code`);let r=await ne(t.sourceFile),n=await y.send(new i.UpdateFunctionCodeCommand(
29
29
  {FunctionName:e,Publish:t.publish,ZipFile:r}));p.Logger.logWait(a,e),await(0,i.waitUntilFunctionUpdated)(
30
- E,{FunctionName:e});let o=n.FunctionArn;return t.publish?{functionVersion:await ee(
30
+ E,{FunctionName:e});let o=n.FunctionArn;return t.publish?{functionVersion:await te(
31
31
  e),functionArn:o}:{functionArn:o}},z=async(e,t)=>{let{handlerName:r,variables:n}=t;
32
- p.Logger.logUpdate(a,`${e} configuration`),n&&L(n),await g.send(new i.UpdateFunctionConfigurationCommand(
32
+ p.Logger.logUpdate(a,`${e} configuration`),n&&D(n),await y.send(new i.UpdateFunctionConfigurationCommand(
33
33
  {FunctionName:e,Description:t.description,MemorySize:t.memory,Timeout:t.timeout,
34
- Role:t.roleArn,...r&&{Handler:ne(r)},LoggingConfig:{LogGroup:t.logGroup,ApplicationLogLevel:t.
35
- debug?i.ApplicationLogLevel.Debug:i.ApplicationLogLevel.Warn,SystemLogLevel:i.SystemLogLevel.
36
- Warn,LogFormat:i.LogFormat.Json},Environment:{Variables:n}})),p.Logger.logWait(a,
37
- e),await(0,i.waitUntilFunctionUpdated)(E,{FunctionName:e})},Y=async e=>{p.Logger.
38
- logDelete(a,e),await(0,p.waitDeletion)(async()=>{try{return await g.send(new i.DeleteFunctionCommand(
39
- {FunctionName:e})),!0}catch(t){if(!(t instanceof i.ResourceNotFoundException))throw t;
40
- return!1}})},ee=async e=>{p.Logger.logPublish(a,e);let t=await g.send(new i.PublishVersionCommand(
41
- {FunctionName:e}));p.Logger.logWait(a,e);let r=t.Version;return await(0,i.waitUntilPublishedVersionActive)(
42
- E,{FunctionName:e,Qualifier:r}),r},G=async(e,t)=>{let r=(0,p.tryParseArn)(e)?.resourceName??
43
- e;p.Logger.logTag(a,r),await g.send(new i.TagResourceCommand({Resource:e,Tags:{...t,
44
- ManagedBy:"EZ4"}}))},te=async(e,t)=>{let r=(0,p.tryParseArn)(e)?.resourceName??e;
45
- p.Logger.logUntag(a,r),await g.send(new i.UntagResourceCommand({Resource:e,TagKeys:t}))},
46
- re=e=>Q(e,"main.mjs"),ne=e=>`main.${e}`;var oe=()=>({equals:rt,create:ie,replace:ot,preview:nt,update:it,delete:st}),rt=(e,t)=>!!e.
47
- result&&e.result.functionArn===t.result?.functionArn,nt=async(e,t)=>{let r=e.parameters,
48
- n=t.parameters,o=(0,h.deepCompare)({...r,dependencies:e.dependencies,sourceHash:await(0,d.bundleHash)(
49
- r.sourceFile),...r.variables&&{variables:b(r.variables)}},{...n,dependencies:t.dependencies,
50
- sourceHash:t.result?.sourceHash});if(o.counts)return{...o,name:r.functionName}},
51
- ot=async(e,t,r)=>{if(t.result)throw new d.ReplaceResourceError(a,e.entryId,t.entryId);
52
- return ie(e,r)},ie=async(e,t)=>{let r=e.parameters,n=r.functionName,o=(0,j.getRoleArn)(
53
- a,n,t),s=(0,H.getLogGroupName)(a,n,t),[m,w]=await Promise.all([r.getFunctionBundle(
54
- t),(0,d.bundleHash)(r.sourceFile)]),F=await _(n);if(F)return await z(n,{...r,logGroup:s,
55
- roleArn:o}),await D(n,{publish:!1,sourceFile:m}),await G(F.functionArn,{...r.tags}),
56
- V(e),{functionArn:F.functionArn,sourceHash:w,logGroup:s,roleArn:o};let U=await X(
57
- {...r,publish:!0,sourceFile:m,logGroup:s,roleArn:o});return V(e),{functionArn:U.
58
- functionArn,sourceHash:w,logGroup:s,roleArn:o}},it=async(e,t,r)=>{let{parameters:n,
59
- result:o}=e;if(!o)return;let s=n.functionName,m=(0,j.getRoleArn)(a,s,r),w=t.result?.
60
- roleArn??m,F=(0,H.getLogGroupName)(a,s,r),U=t.result?.logGroup??F,We={...n,roleArn:m,
61
- logGroup:F},$e={...t.parameters,roleArn:w,logGroup:U};await at(s,We,$e),await pt(
62
- o.functionArn,n,t.parameters);let qe=await ct(s,n,t.result,r);return V(e),{...o,
63
- ...qe,logGroup:F,roleArn:m}},st=async e=>{let{result:t,parameters:r}=e;t&&await Y(
64
- r.functionName)},V=e=>{let{parameters:t}=e;return t.variables&&(t.variables=b(t.
65
- variables)),e},at=async(e,t,r)=>{let n={...t,...t.variables&&{variables:b(t.variables)}};
66
- !(0,h.deepEqual)(n,r,{exclude:{sourceFile:!0,functionName:!0,tags:!0}})&&await z(
67
- e,t)},pt=async(e,t,r)=>{await(0,d.applyTagUpdates)(t.tags,r.tags,n=>G(e,n),n=>te(
68
- e,n))},ct=async(e,t,r,n)=>{let o=await(0,d.bundleHash)(t.sourceFile),s=r?.sourceHash;
69
- if(o===s)return r;let m=await t.getFunctionBundle(n),{functionVersion:w}=await D(
70
- e,{publish:!r?.functionVersion,sourceFile:m});return{sourceHash:o,functionVersion:w}};var ae=()=>{(0,se.registerProvider)(u,oe())};var de=require("@ez4/aws-common");var le=require("@ez4/aws-common");var O=require("@ez4/aws-common");var M=class extends Error{constructor(t){super(`Function ${t} wasn't found.`)}};var B=e=>e.type===u,mt=(e,t,r)=>{try{let n=e.getServiceState(t,r);if(B(n))return n}catch{}},
71
- ut=(e,t,r)=>{let n=e.getServiceState(t,r);if(!B(n))throw new M(t);return n},C=(e,t,r)=>{
72
- let n=r.getDependencies(u).at(0)?.parameters;if(!n?.functionName)throw new O.IncompleteResourceError(
73
- e,t,"functionName");return n.functionName},pe=e=>e.getDependencies(u)[0]?.result?.
74
- functionArn,lt=(e,t,r)=>{let n=pe(r);if(!n)throw new O.IncompleteResourceError(e,
75
- t,"functionArn");return n};var y=require("@aws-sdk/client-lambda"),W=require("@ez4/aws-common");var P="AWS:Lambda/Permission",f="aws:lambda.permission";var ce=new y.LambdaClient({}),me=async e=>{W.Logger.logCreate(P,e.functionName);
76
- let t=e.statementId??`SID${Date.now()}`;return await ce.send(new y.AddPermissionCommand(
34
+ Role:t.roleArn,Runtime:"nodejs22.x",...r&&{Handler:oe(r)},LoggingConfig:{LogGroup:t.
35
+ logGroup,ApplicationLogLevel:t.debug?i.ApplicationLogLevel.Debug:i.ApplicationLogLevel.
36
+ Warn,SystemLogLevel:i.SystemLogLevel.Warn,LogFormat:i.LogFormat.Json},Environment:{
37
+ Variables:n}})),p.Logger.logWait(a,e),await(0,i.waitUntilFunctionUpdated)(E,{FunctionName:e})},
38
+ ee=async e=>{p.Logger.logDelete(a,e),await(0,p.waitDeletion)(async()=>{try{return await y.
39
+ send(new i.DeleteFunctionCommand({FunctionName:e})),!0}catch(t){if(!(t instanceof
40
+ i.ResourceNotFoundException))throw t;return!1}})},te=async e=>{p.Logger.logPublish(
41
+ a,e);let t=await y.send(new i.PublishVersionCommand({FunctionName:e}));p.Logger.
42
+ logWait(a,e);let r=t.Version;return await(0,i.waitUntilPublishedVersionActive)(E,
43
+ {FunctionName:e,Qualifier:r}),r},G=async(e,t)=>{let r=(0,p.tryParseArn)(e)?.resourceName??
44
+ e;p.Logger.logTag(a,r),await y.send(new i.TagResourceCommand({Resource:e,Tags:{...t,
45
+ ManagedBy:"EZ4"}}))},re=async(e,t)=>{let r=(0,p.tryParseArn)(e)?.resourceName??e;
46
+ p.Logger.logUntag(a,r),await y.send(new i.UntagResourceCommand({Resource:e,TagKeys:t}))},
47
+ ne=e=>_(e,"main.mjs"),oe=e=>`main.${e}`;var ie=()=>({equals:nt,create:se,replace:it,preview:ot,update:st,delete:at}),nt=(e,t)=>!!e.
48
+ result&&e.result.functionArn===t.result?.functionArn,ot=async(e,t)=>{let r=e.parameters,
49
+ n=t.parameters,o=(0,h.deepCompare)({...r,dependencies:e.dependencies,sourceHash:await(0,S.getBundleHash)(
50
+ ...r.getFunctionFiles()),...r.variables&&{variables:b(r.variables)}},{...n,dependencies:t.
51
+ dependencies,sourceHash:t.result?.sourceHash});if(o.counts)return{...o,name:r.functionName}},
52
+ it=async(e,t,r)=>{if(t.result)throw new S.ReplaceResourceError(a,e.entryId,t.entryId);
53
+ return se(e,r)},se=async(e,t)=>{let r=e.parameters,n=r.functionName,o=(0,j.getRoleArn)(
54
+ a,n,t),s=(0,H.getLogGroupName)(a,n,t),[m,u]=await Promise.all([(0,S.getBundleHash)(
55
+ ...r.getFunctionFiles()),r.getFunctionBundle(t)]),f=await X(n);if(f)return await z(
56
+ n,{...r,logGroup:s,roleArn:o}),await L(n,{publish:!1,sourceFile:u}),await G(f.functionArn,
57
+ {...r.tags}),V(e),{functionArn:f.functionArn,sourceHash:m,logGroup:s,roleArn:o};
58
+ let U=await Y({...r,publish:!0,sourceFile:u,logGroup:s,roleArn:o});return V(e),{
59
+ functionArn:U.functionArn,sourceHash:m,logGroup:s,roleArn:o}},st=async(e,t,r)=>{
60
+ let{parameters:n,result:o}=e;if(!o)return;let s=n.functionName,m=(0,j.getRoleArn)(
61
+ a,s,r),u=t.result?.roleArn??m,f=(0,H.getLogGroupName)(a,s,r),U=t.result?.logGroup??
62
+ f,qe={...n,roleArn:m,logGroup:f},$e={...t.parameters,roleArn:u,logGroup:U};await pt(
63
+ s,qe,$e),await ct(o.functionArn,n,t.parameters);let Ze=await mt(s,n,t.result,r);
64
+ return V(e),{...o,...Ze,logGroup:f,roleArn:m}},at=async e=>{let{result:t,parameters:r}=e;
65
+ t&&await ee(r.functionName)},V=e=>{let{parameters:t}=e;return t.variables&&(t.variables=
66
+ b(t.variables)),e},pt=async(e,t,r)=>{let n={...t,...t.variables&&{variables:b(t.
67
+ variables)}};!(0,h.deepEqual)(n,r,{exclude:{sourceFile:!0,functionName:!0,tags:!0}})&&
68
+ await z(e,t)},ct=async(e,t,r)=>{await(0,S.applyTagUpdates)(t.tags,r.tags,n=>G(e,
69
+ n),n=>re(e,n))},mt=async(e,t,r,n)=>{let o=await(0,S.getBundleHash)(...t.getFunctionFiles()),
70
+ s=r?.sourceHash;if(o===s&&!n.force)return r;let m=await t.getFunctionBundle(n),{
71
+ functionVersion:u}=await L(e,{publish:!r?.functionVersion,sourceFile:m});return{
72
+ sourceHash:o,...u&&{functionVersion:u}}};var pe=()=>{(0,ae.registerProvider)(l,ie())};var de=require("@ez4/aws-common");var ge=require("@ez4/aws-common");var O=require("@ez4/aws-common");var I=class extends Error{constructor(t){super(`Function ${t} wasn't found.`)}};var B=e=>e.type===l,ut=(e,t,r)=>{try{let n=e.getServiceState(t,r);if(B(n))return n}catch{}},
73
+ lt=(e,t,r)=>{let n=e.getServiceState(t,r);if(!B(n))throw new I(t);return n},R=(e,t,r)=>{
74
+ let n=r.getDependencies(l).at(0)?.parameters;if(!n?.functionName)throw new O.IncompleteResourceError(
75
+ e,t,"functionName");return n.functionName},ce=e=>e.getDependencies(l)[0]?.result?.
76
+ functionArn,gt=(e,t,r)=>{let n=ce(r);if(!n)throw new O.IncompleteResourceError(e,
77
+ t,"functionArn");return n};var F=require("@aws-sdk/client-lambda"),W=require("@ez4/aws-common");var x="AWS:Lambda/Permission",d="aws:lambda.permission";var me=new F.LambdaClient({}),ue=async e=>{W.Logger.logCreate(x,e.functionName);
78
+ let t=e.statementId??`SID${Date.now()}`;return await me.send(new F.AddPermissionCommand(
77
79
  {StatementId:t,FunctionName:e.functionName,SourceArn:e.sourceArn,Principal:e.principal,
78
- Action:e.action})),{statementId:t}},ue=async(e,t)=>{W.Logger.logDelete(P,e);try{
79
- return await ce.send(new y.RemovePermissionCommand({FunctionName:e,StatementId:t})),
80
- !0}catch(r){if(!(r instanceof y.ResourceNotFoundException))throw r;return!1}};var ge=()=>({equals:gt,create:fe,replace:dt,preview:ft,update:yt,delete:St}),gt=(e,t)=>!!e.
81
- result&&e.result.functionName===t.result?.functionName,ft=async(e,t)=>{},dt=async(e,t,r)=>{
82
- if(t.result)throw new le.ReplaceResourceError(P,e.entryId,t.entryId);return fe(e,
83
- r)},fe=async(e,t)=>{let r=e.parameters,n=C(P,"permission",t),o=await r.getPermission(
84
- t);return{statementId:(await me({functionName:n,principal:o.principal,sourceArn:o.
85
- sourceArn,action:"lambda:InvokeFunction"})).statementId,functionName:n}},yt=async()=>{},
86
- St=async e=>{let t=e.result;t&&await ue(t.functionName,t.statementId)};var ye=()=>{(0,de.registerProvider)(f,ge())};var Ee=require("@ez4/aws-common");var ve=require("@ez4/aws-common"),I=require("@ez4/utils");var c=require("@aws-sdk/client-lambda"),x=require("@ez4/aws-common"),Se=require("@ez4/utils");var l="AWS:Lambda/Mapping",S="aws:lambda.mapping";var v=new c.LambdaClient({}),we=async(e,t)=>{x.Logger.logImport(l,e);let r=await v.
80
+ Action:e.action})),{statementId:t}},le=async(e,t)=>{W.Logger.logDelete(x,e);try{
81
+ return await me.send(new F.RemovePermissionCommand({FunctionName:e,StatementId:t})),
82
+ !0}catch(r){if(!(r instanceof F.ResourceNotFoundException))throw r;return!1}};var fe=()=>({equals:ft,create:ye,replace:dt,preview:yt,update:St,delete:Ft}),ft=(e,t)=>!!e.
83
+ result&&e.result.functionName===t.result?.functionName,yt=async(e,t)=>{},dt=async(e,t,r)=>{
84
+ if(t.result)throw new ge.ReplaceResourceError(x,e.entryId,t.entryId);return ye(e,
85
+ r)},ye=async(e,t)=>{let r=e.parameters,n=R(x,"permission",t),o=await r.getPermission(
86
+ t);return{statementId:(await ue({functionName:n,principal:o.principal,sourceArn:o.
87
+ sourceArn,action:"lambda:InvokeFunction"})).statementId,functionName:n}},St=async()=>{},
88
+ Ft=async e=>{let t=e.result;t&&await le(t.functionName,t.statementId)};var Se=()=>{(0,de.registerProvider)(d,fe())};var he=require("@ez4/aws-common");var Ae=require("@ez4/aws-common"),M=require("@ez4/utils");var c=require("@aws-sdk/client-lambda"),P=require("@ez4/aws-common"),Fe=require("@ez4/utils");var g="AWS:Lambda/Mapping",w="aws:lambda.mapping",q=(r=>(r.DynamoDB="dynamodb",r.
89
+ Queue="sqs",r))(q||{});var v=new c.LambdaClient({}),we=async(e,t)=>{P.Logger.logImport(g,e);let r=await v.
87
90
  send(new c.ListEventSourceMappingsCommand({FunctionName:e,EventSourceArn:t})),[n]=r.
88
- EventSourceMappings;return n?{eventId:n.UUID}:void 0},Fe=async e=>{let{sourceArn:t,
89
- functionName:r}=e;x.Logger.logCreate(l,r);let o=(await v.send(new c.CreateEventSourceMappingCommand(
90
- {FunctionName:r,EventSourceArn:t,...Re(e)}))).UUID;return await Ce(o),{eventId:o}},
91
- Pe=async(e,t)=>{let{functionName:r}=t;x.Logger.logUpdate(l,`${r} (${e})`),await v.
92
- send(new c.UpdateEventSourceMappingCommand({UUID:e,FunctionName:r,...Re(t)})),await Ce(
93
- e)},xe=async e=>{x.Logger.logDelete(l,e);try{return await v.send(new c.DeleteEventSourceMappingCommand(
91
+ EventSourceMappings;return n?{eventId:n.UUID}:void 0},xe=async e=>{let{sourceArn:t,
92
+ functionName:r}=e;P.Logger.logCreate(g,r);let o=(await v.send(new c.CreateEventSourceMappingCommand(
93
+ {FunctionName:r,EventSourceArn:t,...ve(e)}))).UUID;return await Ce(o),{eventId:o}},
94
+ Pe=async(e,t)=>{let{functionName:r}=t;P.Logger.logUpdate(g,`${r} (${e})`),await v.
95
+ send(new c.UpdateEventSourceMappingCommand({UUID:e,FunctionName:r,...ve(t)})),await Ce(
96
+ e)},Re=async e=>{P.Logger.logDelete(g,e);try{return await v.send(new c.DeleteEventSourceMappingCommand(
94
97
  {UUID:e})),!0}catch(t){if(!(t instanceof c.ResourceNotFoundException))throw t;return!1}},
95
98
  wt=async e=>(await v.send(new c.GetEventSourceMappingCommand({UUID:e}))).State,Ce=async e=>{
96
- let t=new Set(["Enabled","Disabled"]);await(0,Se.waitFor)(async()=>{let r=await wt(
97
- e);return t.has(r)})},Re=e=>{let{sourceArn:t,enabled:r,concurrency:n,batch:o}=e,
98
- {service:s}=(0,x.parseArn)(t);return{Enabled:r,FunctionResponseTypes:[c.FunctionResponseType.
99
- ReportBatchItemFailures],MaximumBatchingWindowInSeconds:o?.maxWindow,BatchSize:o?.
100
- batchSize,...s==="dynamodb"&&{StartingPosition:c.EventSourcePosition.LATEST},...s===
101
- "sqs"&&n&&{ScalingConfig:{MaximumConcurrency:n}}}};var Ae=()=>({equals:Ft,create:be,replace:xt,preview:Pt,update:Ct,delete:Rt}),Ft=(e,t)=>!!e.
99
+ let t=new Set(["Enabled","Disabled"]);await(0,Fe.waitFor)(async()=>{let r=await wt(
100
+ e);return t.has(r)})},ve=e=>{let{sourceArn:t,enabled:r,concurrency:n,batch:o}=e,
101
+ {service:s}=(0,P.parseArn)(t);return{Enabled:r,FunctionResponseTypes:[c.FunctionResponseType.
102
+ ReportBatchItemFailures],MaximumBatchingWindowInSeconds:o?.maxWait,BatchSize:o?.
103
+ size,...s==="dynamodb"&&{StartingPosition:c.EventSourcePosition.LATEST},...s==="\
104
+ sqs"&&{ScalingConfig:{MaximumConcurrency:n}}}};var be=()=>({equals:xt,create:Ee,replace:Rt,preview:Pt,update:Ct,delete:vt}),xt=(e,t)=>!!e.
102
105
  result&&e.result.eventId===t.result?.eventId,Pt=async(e,t)=>{let r={...e.parameters,
103
- dependencies:e.dependencies},n={...t.parameters,dependencies:t.dependencies},o=(0,I.deepCompare)(
104
- r,n,{exclude:{getSourceArn:!0}});if(o.counts)return{...o,name:r.fromService}},xt=async(e,t,r)=>{
105
- if(t.result)throw new ve.ReplaceResourceError(l,e.entryId,t.entryId);return be(e,
106
- r)},be=async(e,t)=>{let r=e.parameters,n=C(l,"mapping",t),o=await r.getSourceArn(
107
- t);return{eventId:(await we(n,o)??await Fe({...e.parameters,functionName:n,sourceArn:o})).
106
+ dependencies:e.dependencies},n={...t.parameters,dependencies:t.dependencies},o=(0,M.deepCompare)(
107
+ r,n,{exclude:{getSourceArn:!0}});if(o.counts)return{...o,name:r.fromService}},Rt=async(e,t,r)=>{
108
+ if(t.result)throw new Ae.ReplaceResourceError(g,e.entryId,t.entryId);return Ee(e,
109
+ r)},Ee=async(e,t)=>{let r=e.parameters,n=R(g,"mapping",t),o=await r.getSourceArn(
110
+ t);return{eventId:(await we(n,o)??await xe({...e.parameters,functionName:n,sourceArn:o})).
108
111
  eventId,functionName:n,sourceArn:o}},Ct=async(e,t,r)=>{let n=e.result;if(!n)return;
109
- let o=n.sourceArn,s=C(l,"mapping",r),m=t.result?.functionName??n.functionName;return await vt(
110
- n.eventId,{...e.parameters,functionName:s,sourceArn:o},{...t.parameters,functionName:m,
111
- sourceArn:o}),{...n,functionName:s}},Rt=async e=>{let t=e.result;t&&await xe(t.eventId)},
112
- vt=async(e,t,r)=>{!(0,I.deepEqual)(t,r,{exclude:{getSourceArn:!0,fromService:!0}})&&
113
- await Pe(e,t)};var he=()=>{(0,Ee.registerProvider)(S,Ae())};var Me=()=>[{account:"lambda.amazonaws.com"}];var N=require("@ez4/aws-identity"),Ne=require("@ez4/project/library");var R=require("@ez4/aws-identity"),Ie=async e=>{let[t,r]=await Promise.all([(0,R.getRegion)(),
114
- (0,R.getAccountId)()]);return(0,R.createPolicyDocument)([{permissions:["logs:Cre\
112
+ let o=n.sourceArn,s=R(g,"mapping",r),m=t.result?.functionName??n.functionName,u={
113
+ ...e.parameters,functionName:s,sourceArn:o},f={...t.parameters,functionName:m,sourceArn:o};
114
+ return await At(n.eventId,u,f),{...n,functionName:s}},vt=async e=>{let t=e.result;
115
+ t&&await Re(t.eventId)},At=async(e,t,r)=>{!(0,M.deepEqual)(t,r,{exclude:{getSourceArn:!0,
116
+ fromService:!0}})&&await Pe(e,t)};var Ie=()=>{(0,he.registerProvider)(w,be())};var Me=()=>[{account:"lambda.amazonaws.com"}];var N=require("@ez4/aws-identity"),Te=require("@ez4/project/library");var C=require("@ez4/aws-identity"),Ne=async e=>{let[t,r]=await Promise.all([(0,C.getRegion)(),
117
+ (0,C.getAccountId)()]);return(0,C.createPolicyDocument)([{permissions:["logs:Cre\
115
118
  ateLogStream","logs:PutLogEvents"],resourceIds:[`arn:aws:logs:${t}:${r}:log-grou\
116
- p:${e}-*:*`]}])};var Te=async e=>{let{state:t,options:r}=e,n=(0,Ne.getServiceName)("",r),o=`${n}-\
117
- lambda-policy`;return(0,N.tryGetPolicy)(t,o)??(0,N.createPolicy)(t,{policyDocument:await Ie(
118
- n),policyName:o})};var Ue=!1,At=()=>{Ue||((0,Le.registerTriggers)(),(0,De.registerTriggers)(),(0,ze.registerTriggers)(),
119
- (0,Ge.createTrigger)("@ez4/aws-function",{"deploy:prepareIdentityAccount":Me,"de\
120
- ploy:prepareExecutionPolicy":Te}),ae(),ye(),he(),Ue=!0)};var T=require("@ez4/utils"),Ve=require("@ez4/stateful");var bt=(e,t,r,n)=>{let o=(0,T.toKebabCase)(n.functionName),s=(0,T.hashData)(u,t.
121
- entryId,o),m=[t.entryId];return r&&m.push(r.entryId),(0,Ve.attachEntry)(e,{type:u,
122
- entryId:s,dependencies:m,parameters:{...n,functionName:o}})};var je=require("@ez4/stateful"),$=require("@ez4/utils");var He=e=>e.type===f;var Et=(e,t,r,n)=>{let o=(0,$.hashData)(f,t.entryId,r.entryId);return(0,je.attachEntry)(
123
- e,{type:f,entryId:o,dependencies:[t.entryId,r.entryId],parameters:n})},ht=(e,t,r)=>{
124
- let n=(0,$.hashData)(f,t.entryId,r.entryId),o=e[n];return o&&He(o)?o:null};var Oe=require("@ez4/utils"),Be=require("@ez4/stateful");var Mt=(e,t,r,n)=>{let o=(0,Oe.hashData)(S,t.entryId,r.entryId);return(0,Be.attachEntry)(
125
- e,{type:S,entryId:o,dependencies:[t.entryId,r.entryId],parameters:n})};var It=e=>e.type===S;0&&(module.exports={FunctionServiceName,FunctionServiceType,MappingServiceName,MappingServiceType,
126
- PermissionServiceName,PermissionServiceType,createFunction,createMapping,createPermission,
127
- getFunctionArn,getFunctionName,getFunctionState,getPermission,isFunctionState,isMappingState,
128
- registerTriggers,tryGetFunctionArn,tryGetFunctionState});
119
+ p:${e}-*:*`]}])};var Ue=async e=>{let{state:t,options:r}=e,n=(0,Te.getServiceName)("",r),o=`${n}-\
120
+ lambda-policy`;return(0,N.tryGetPolicy)(t,o)??(0,N.createPolicy)(t,{tags:r.tags,
121
+ policyDocument:await Ne(n),policyName:o})};var De=!1,bt=()=>{De||((0,Le.registerTriggers)(),(0,ze.registerTriggers)(),(0,Ge.registerTriggers)(),
122
+ (0,Ve.createTrigger)("@ez4/aws-function",{"deploy:prepareIdentityAccount":Me,"de\
123
+ ploy:prepareExecutionPolicy":Ue}),pe(),Se(),Ie(),De=!0)};var T=require("@ez4/utils"),He=require("@ez4/stateful");var Et=(e,t,r,n)=>{let o=(0,T.toKebabCase)(n.functionName),s=(0,T.hashData)(l,t.
124
+ entryId,o),m=[t.entryId];return r&&m.push(r.entryId),(0,He.attachEntry)(e,{type:l,
125
+ entryId:s,dependencies:m,parameters:{...n,functionName:o}})};var Oe=require("@ez4/stateful"),$=require("@ez4/utils");var je=e=>e.type===d;var ht=(e,t,r,n)=>{let o=(0,$.hashData)(d,t.entryId,r.entryId);return(0,Oe.attachEntry)(
126
+ e,{type:d,entryId:o,dependencies:[t.entryId,r.entryId],parameters:n})},It=(e,t,r)=>{
127
+ let n=(0,$.hashData)(d,t.entryId,r.entryId),o=e[n];return o&&je(o)?o:null};var Be=require("@ez4/utils"),We=require("@ez4/stateful");var Mt=(e,t,r,n)=>{let o=(0,Be.hashData)(w,t.entryId,r.entryId);return(0,We.attachEntry)(
128
+ e,{type:w,entryId:o,dependencies:[t.entryId,r.entryId],parameters:n})};var Nt=e=>e.type===w;0&&(module.exports={FunctionServiceName,FunctionServiceType,MappingService,MappingServiceName,
129
+ MappingServiceType,PermissionServiceName,PermissionServiceType,createFunction,createMapping,
130
+ createPermission,getFunctionArn,getFunctionName,getFunctionState,getPermission,isFunctionState,
131
+ isMappingState,registerTriggers,tryGetFunctionArn,tryGetFunctionState});
129
132
  //# sourceMappingURL=main.cjs.map
package/dist/main.mjs CHANGED
@@ -1,116 +1,119 @@
1
- import{registerTriggers as jt}from"@ez4/aws-common";import{registerTriggers as Ot}from"@ez4/aws-identity";
2
- import{registerTriggers as Bt}from"@ez4/aws-logs";import{createTrigger as Wt}from"@ez4/project/library";import{registerProvider as Ye}from"@ez4/aws-common";import{applyTagUpdates as Oe,bundleHash as I,ReplaceResourceError as Be}from"@ez4/aws-common";
3
- import{deepCompare as We,deepEqual as $e}from"@ez4/utils";import{getLogGroupName as $}from"@ez4/aws-logs";
4
- import{getRoleArn as q}from"@ez4/aws-identity";import{LambdaClient as he,GetFunctionCommand as Me,CreateFunctionCommand as Ie,DeleteFunctionCommand as Ne,
5
- UpdateFunctionCodeCommand as Te,UpdateFunctionConfigurationCommand as Ue,PublishVersionCommand as Le,
6
- TagResourceCommand as De,UntagResourceCommand as ze,waitUntilFunctionActive as Ge,
7
- waitUntilFunctionUpdated as T,waitUntilPublishedVersionActive as Ve,ResourceNotFoundException as U,
8
- ApplicationLogLevel as P,SystemLogLevel as L,LogFormat as D}from"@aws-sdk/client-lambda";
9
- import{Logger as p,tryParseArn as z,waitCreation as He,waitDeletion as je}from"@ez4/aws-common";import{InvalidParameterError as Ce}from"@ez4/aws-common";import{hashData as Re}from"@ez4/utils";var s="AWS:Lambda/Function",c="aws:lambda.function";var ve=/[a-z][\w]+/i,Ae=e=>ve.test(e),A=e=>{for(let t in e)if(!Ae(t))throw new Ce(
10
- s,`${t} is an invalid variable name .`)},F=e=>{let t={};for(let r in e)t[r]=Re(e[r]);
11
- return t};import be from"adm-zip";import{readFile as Ee}from"node:fs/promises";var N=async(e,t)=>{
12
- let r=new be,n=await Ee(e);return r.addFile(t,n),r.toBufferPromise()};var m=new he({}),x={minDelay:15,maxWaitTime:1800,maxDelay:60,client:m},G=async(e,t)=>{
13
- p.logImport(s,e);try{let r=await m.send(new Me({FunctionName:e,Qualifier:t})),n=r.
1
+ import{registerTriggers as Ot}from"@ez4/aws-common";import{registerTriggers as Bt}from"@ez4/aws-identity";
2
+ import{registerTriggers as Wt}from"@ez4/aws-logs";import{createTrigger as qt}from"@ez4/project/library";import{registerProvider as et}from"@ez4/aws-common";import{applyTagUpdates as Be,getBundleHash as M,ReplaceResourceError as We}from"@ez4/aws-common";
3
+ import{deepCompare as qe,deepEqual as $e}from"@ez4/utils";import{getLogGroupName as q}from"@ez4/aws-logs";
4
+ import{getRoleArn as $}from"@ez4/aws-identity";import{LambdaClient as Ie,GetFunctionCommand as Me,CreateFunctionCommand as Ne,DeleteFunctionCommand as Te,
5
+ UpdateFunctionCodeCommand as Ue,UpdateFunctionConfigurationCommand as De,PublishVersionCommand as Le,
6
+ TagResourceCommand as ze,UntagResourceCommand as Ge,waitUntilFunctionActive as Ve,
7
+ waitUntilFunctionUpdated as T,waitUntilPublishedVersionActive as He,ResourceNotFoundException as U,
8
+ ApplicationLogLevel as x,SystemLogLevel as D,LogFormat as L}from"@aws-sdk/client-lambda";
9
+ import{Logger as p,tryParseArn as z,waitCreation as je,waitDeletion as Oe}from"@ez4/aws-common";import{InvalidParameterError as Ce}from"@ez4/aws-common";import{hashData as ve}from"@ez4/utils";var s="AWS:Lambda/Function",u="aws:lambda.function";var Ae=/[a-z][\w]+/i,be=e=>Ae.test(e),A=e=>{for(let t in e)if(!be(t))throw new Ce(
10
+ s,`${t} is an invalid variable name .`)},w=e=>{let t={};for(let r in e)t[r]=ve(e[r]);
11
+ return t};import Ee from"adm-zip";import{readFile as he}from"node:fs/promises";var N=async(e,t)=>{
12
+ let r=new Ee,n=await he(e);return r.addFile(t,n),r.toBufferPromise()};var l=new Ie({}),P={minDelay:15,maxWaitTime:1800,maxDelay:60,client:l},G=async(e,t)=>{
13
+ p.logImport(s,e);try{let r=await l.send(new Me({FunctionName:e,Qualifier:t})),n=r.
14
14
  Configuration.Version,o=r.Configuration.FunctionArn;return{functionVersion:n,functionArn:o}}catch(r){
15
15
  if(!(r instanceof U))throw r;return}},V=async e=>{let{functionName:t,variables:r}=e;
16
- p.logCreate(s,t),r&&A(r);let n=W(e.handlerName),o=await B(e.sourceFile),i=await He(
17
- ()=>m.send(new Ie({FunctionName:e.functionName,Description:e.description,MemorySize:e.
16
+ p.logCreate(s,t),r&&A(r);let n=W(e.handlerName),o=await B(e.sourceFile),i=await je(
17
+ ()=>l.send(new Ne({FunctionName:e.functionName,Description:e.description,MemorySize:e.
18
18
  memory,Timeout:e.timeout,Role:e.roleArn,Handler:n,Runtime:"nodejs22.x",PackageType:"\
19
- Zip",LoggingConfig:{LogGroup:e.logGroup,ApplicationLogLevel:e.debug?P.Debug:P.Warn,
20
- SystemLogLevel:L.Warn,LogFormat:D.Json},Code:{ZipFile:o},Environment:{Variables:r},
21
- Tags:{...e.tags,ManagedBy:"EZ4"}})));p.logWait(s,t),await Ge(x,{FunctionName:t});
19
+ Zip",LoggingConfig:{LogGroup:e.logGroup,ApplicationLogLevel:e.debug?x.Debug:x.Warn,
20
+ SystemLogLevel:D.Warn,LogFormat:L.Json},Code:{ZipFile:o},Environment:{Variables:r},
21
+ Tags:{...e.tags,ManagedBy:"EZ4"}})));p.logWait(s,t),await Ve(P,{FunctionName:t});
22
22
  let a=i.FunctionArn;return e.publish?{functionVersion:await j(t),functionArn:a}:
23
23
  {functionArn:a}},b=async(e,t)=>{p.logUpdate(s,`${e} source code`);let r=await B(
24
- t.sourceFile),n=await m.send(new Te({FunctionName:e,Publish:t.publish,ZipFile:r}));
25
- p.logWait(s,e),await T(x,{FunctionName:e});let o=n.FunctionArn;return t.publish?
24
+ t.sourceFile),n=await l.send(new Ue({FunctionName:e,Publish:t.publish,ZipFile:r}));
25
+ p.logWait(s,e),await T(P,{FunctionName:e});let o=n.FunctionArn;return t.publish?
26
26
  {functionVersion:await j(e),functionArn:o}:{functionArn:o}},E=async(e,t)=>{let{handlerName:r,
27
- variables:n}=t;p.logUpdate(s,`${e} configuration`),n&&A(n),await m.send(new Ue({
27
+ variables:n}=t;p.logUpdate(s,`${e} configuration`),n&&A(n),await l.send(new De({
28
28
  FunctionName:e,Description:t.description,MemorySize:t.memory,Timeout:t.timeout,Role:t.
29
- roleArn,...r&&{Handler:W(r)},LoggingConfig:{LogGroup:t.logGroup,ApplicationLogLevel:t.
30
- debug?P.Debug:P.Warn,SystemLogLevel:L.Warn,LogFormat:D.Json},Environment:{Variables:n}})),
31
- p.logWait(s,e),await T(x,{FunctionName:e})},H=async e=>{p.logDelete(s,e),await je(
32
- async()=>{try{return await m.send(new Ne({FunctionName:e})),!0}catch(t){if(!(t instanceof
33
- U))throw t;return!1}})},j=async e=>{p.logPublish(s,e);let t=await m.send(new Le(
34
- {FunctionName:e}));p.logWait(s,e);let r=t.Version;return await Ve(x,{FunctionName:e,
35
- Qualifier:r}),r},h=async(e,t)=>{let r=z(e)?.resourceName??e;p.logTag(s,r),await m.
36
- send(new De({Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},O=async(e,t)=>{let r=z(e)?.
37
- resourceName??e;p.logUntag(s,r),await m.send(new ze({Resource:e,TagKeys:t}))},B=e=>N(
38
- e,"main.mjs"),W=e=>`main.${e}`;var Z=()=>({equals:qe,create:k,replace:ke,preview:Ze,update:Je,delete:Ke}),qe=(e,t)=>!!e.
39
- result&&e.result.functionArn===t.result?.functionArn,Ze=async(e,t)=>{let r=e.parameters,
40
- n=t.parameters,o=We({...r,dependencies:e.dependencies,sourceHash:await I(r.sourceFile),
41
- ...r.variables&&{variables:F(r.variables)}},{...n,dependencies:t.dependencies,sourceHash:t.
42
- result?.sourceHash});if(o.counts)return{...o,name:r.functionName}},ke=async(e,t,r)=>{
43
- if(t.result)throw new Be(s,e.entryId,t.entryId);return k(e,r)},k=async(e,t)=>{let r=e.
44
- parameters,n=r.functionName,o=q(s,n,t),i=$(s,n,t),[a,g]=await Promise.all([r.getFunctionBundle(
45
- t),I(r.sourceFile)]),f=await G(n);if(f)return await E(n,{...r,logGroup:i,roleArn:o}),
46
- await b(n,{publish:!1,sourceFile:a}),await h(f.functionArn,{...r.tags}),M(e),{functionArn:f.
47
- functionArn,sourceHash:g,logGroup:i,roleArn:o};let v=await V({...r,publish:!0,sourceFile:a,
48
- logGroup:i,roleArn:o});return M(e),{functionArn:v.functionArn,sourceHash:g,logGroup:i,
49
- roleArn:o}},Je=async(e,t,r)=>{let{parameters:n,result:o}=e;if(!o)return;let i=n.
50
- functionName,a=q(s,i,r),g=t.result?.roleArn??a,f=$(s,i,r),v=t.result?.logGroup??
51
- f,Fe={...n,roleArn:a,logGroup:f},Pe={...t.parameters,roleArn:g,logGroup:v};await Qe(
52
- i,Fe,Pe),await _e(o.functionArn,n,t.parameters);let xe=await Xe(i,n,t.result,r);
53
- return M(e),{...o,...xe,logGroup:f,roleArn:a}},Ke=async e=>{let{result:t,parameters:r}=e;
54
- t&&await H(r.functionName)},M=e=>{let{parameters:t}=e;return t.variables&&(t.variables=
55
- F(t.variables)),e},Qe=async(e,t,r)=>{let n={...t,...t.variables&&{variables:F(t.
56
- variables)}};!$e(n,r,{exclude:{sourceFile:!0,functionName:!0,tags:!0}})&&await E(
57
- e,t)},_e=async(e,t,r)=>{await Oe(t.tags,r.tags,n=>h(e,n),n=>O(e,n))},Xe=async(e,t,r,n)=>{
58
- let o=await I(t.sourceFile),i=r?.sourceHash;if(o===i)return r;let a=await t.getFunctionBundle(
59
- n),{functionVersion:g}=await b(e,{publish:!r?.functionVersion,sourceFile:a});return{
60
- sourceHash:o,functionVersion:g}};var J=()=>{Ye(c,Z())};import{registerProvider as ut}from"@ez4/aws-common";import{ReplaceResourceError as it}from"@ez4/aws-common";import{IncompleteResourceError as K}from"@ez4/aws-common";var C=class extends Error{constructor(t){super(`Function ${t} wasn't found.`)}};var Q=e=>e.type===c,br=(e,t,r)=>{try{let n=e.getServiceState(t,r);if(Q(n))return n}catch{}},
61
- Er=(e,t,r)=>{let n=e.getServiceState(t,r);if(!Q(n))throw new C(t);return n},S=(e,t,r)=>{
62
- let n=r.getDependencies(c).at(0)?.parameters;if(!n?.functionName)throw new K(e,t,
63
- "functionName");return n.functionName},et=e=>e.getDependencies(c)[0]?.result?.functionArn,
64
- hr=(e,t,r)=>{let n=et(r);if(!n)throw new K(e,t,"functionArn");return n};import{LambdaClient as tt,AddPermissionCommand as rt,RemovePermissionCommand as nt,
65
- ResourceNotFoundException as ot}from"@aws-sdk/client-lambda";import{Logger as _}from"@ez4/aws-common";var y="AWS:Lambda/Permission",l="aws:lambda.permission";var X=new tt({}),Y=async e=>{_.logCreate(y,e.functionName);let t=e.statementId??
66
- `SID${Date.now()}`;return await X.send(new rt({StatementId:t,FunctionName:e.functionName,
29
+ roleArn,Runtime:"nodejs22.x",...r&&{Handler:W(r)},LoggingConfig:{LogGroup:t.logGroup,
30
+ ApplicationLogLevel:t.debug?x.Debug:x.Warn,SystemLogLevel:D.Warn,LogFormat:L.Json},
31
+ Environment:{Variables:n}})),p.logWait(s,e),await T(P,{FunctionName:e})},H=async e=>{
32
+ p.logDelete(s,e),await Oe(async()=>{try{return await l.send(new Te({FunctionName:e})),
33
+ !0}catch(t){if(!(t instanceof U))throw t;return!1}})},j=async e=>{p.logPublish(s,
34
+ e);let t=await l.send(new Le({FunctionName:e}));p.logWait(s,e);let r=t.Version;return await He(
35
+ P,{FunctionName:e,Qualifier:r}),r},h=async(e,t)=>{let r=z(e)?.resourceName??e;p.
36
+ logTag(s,r),await l.send(new ze({Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},O=async(e,t)=>{
37
+ let r=z(e)?.resourceName??e;p.logUntag(s,r),await l.send(new Ge({Resource:e,TagKeys:t}))},
38
+ B=e=>N(e,"main.mjs"),W=e=>`main.${e}`;var Z=()=>({equals:Ze,create:k,replace:Qe,preview:ke,update:Je,delete:Ke}),Ze=(e,t)=>!!e.
39
+ result&&e.result.functionArn===t.result?.functionArn,ke=async(e,t)=>{let r=e.parameters,
40
+ n=t.parameters,o=qe({...r,dependencies:e.dependencies,sourceHash:await M(...r.getFunctionFiles()),
41
+ ...r.variables&&{variables:w(r.variables)}},{...n,dependencies:t.dependencies,sourceHash:t.
42
+ result?.sourceHash});if(o.counts)return{...o,name:r.functionName}},Qe=async(e,t,r)=>{
43
+ if(t.result)throw new We(s,e.entryId,t.entryId);return k(e,r)},k=async(e,t)=>{let r=e.
44
+ parameters,n=r.functionName,o=$(s,n,t),i=q(s,n,t),[a,c]=await Promise.all([M(...r.
45
+ getFunctionFiles()),r.getFunctionBundle(t)]),m=await G(n);if(m)return await E(n,
46
+ {...r,logGroup:i,roleArn:o}),await b(n,{publish:!1,sourceFile:c}),await h(m.functionArn,
47
+ {...r.tags}),I(e),{functionArn:m.functionArn,sourceHash:a,logGroup:i,roleArn:o};
48
+ let v=await V({...r,publish:!0,sourceFile:c,logGroup:i,roleArn:o});return I(e),{
49
+ functionArn:v.functionArn,sourceHash:a,logGroup:i,roleArn:o}},Je=async(e,t,r)=>{
50
+ let{parameters:n,result:o}=e;if(!o)return;let i=n.functionName,a=$(s,i,r),c=t.result?.
51
+ roleArn??a,m=q(s,i,r),v=t.result?.logGroup??m,xe={...n,roleArn:a,logGroup:m},Pe={
52
+ ...t.parameters,roleArn:c,logGroup:v};await _e(i,xe,Pe),await Xe(o.functionArn,n,
53
+ t.parameters);let Re=await Ye(i,n,t.result,r);return I(e),{...o,...Re,logGroup:m,
54
+ roleArn:a}},Ke=async e=>{let{result:t,parameters:r}=e;t&&await H(r.functionName)},
55
+ I=e=>{let{parameters:t}=e;return t.variables&&(t.variables=w(t.variables)),e},_e=async(e,t,r)=>{
56
+ let n={...t,...t.variables&&{variables:w(t.variables)}};!$e(n,r,{exclude:{sourceFile:!0,
57
+ functionName:!0,tags:!0}})&&await E(e,t)},Xe=async(e,t,r)=>{await Be(t.tags,r.tags,
58
+ n=>h(e,n),n=>O(e,n))},Ye=async(e,t,r,n)=>{let o=await M(...t.getFunctionFiles()),
59
+ i=r?.sourceHash;if(o===i&&!n.force)return r;let a=await t.getFunctionBundle(n),{
60
+ functionVersion:c}=await b(e,{publish:!r?.functionVersion,sourceFile:a});return{
61
+ sourceHash:o,...c&&{functionVersion:c}}};var Q=()=>{et(u,Z())};import{registerProvider as lt}from"@ez4/aws-common";import{ReplaceResourceError as st}from"@ez4/aws-common";import{IncompleteResourceError as J}from"@ez4/aws-common";var R=class extends Error{constructor(t){super(`Function ${t} wasn't found.`)}};var K=e=>e.type===u,Er=(e,t,r)=>{try{let n=e.getServiceState(t,r);if(K(n))return n}catch{}},
62
+ hr=(e,t,r)=>{let n=e.getServiceState(t,r);if(!K(n))throw new R(t);return n},S=(e,t,r)=>{
63
+ let n=r.getDependencies(u).at(0)?.parameters;if(!n?.functionName)throw new J(e,t,
64
+ "functionName");return n.functionName},tt=e=>e.getDependencies(u)[0]?.result?.functionArn,
65
+ Ir=(e,t,r)=>{let n=tt(r);if(!n)throw new J(e,t,"functionArn");return n};import{LambdaClient as rt,AddPermissionCommand as nt,RemovePermissionCommand as ot,
66
+ ResourceNotFoundException as it}from"@aws-sdk/client-lambda";import{Logger as _}from"@ez4/aws-common";var d="AWS:Lambda/Permission",f="aws:lambda.permission";var X=new rt({}),Y=async e=>{_.logCreate(d,e.functionName);let t=e.statementId??
67
+ `SID${Date.now()}`;return await X.send(new nt({StatementId:t,FunctionName:e.functionName,
67
68
  SourceArn:e.sourceArn,Principal:e.principal,Action:e.action})),{statementId:t}},
68
- ee=async(e,t)=>{_.logDelete(y,e);try{return await X.send(new nt({FunctionName:e,
69
- StatementId:t})),!0}catch(r){if(!(r instanceof ot))throw r;return!1}};var te=()=>({equals:st,create:re,replace:pt,preview:at,update:ct,delete:mt}),st=(e,t)=>!!e.
70
- result&&e.result.functionName===t.result?.functionName,at=async(e,t)=>{},pt=async(e,t,r)=>{
71
- if(t.result)throw new it(y,e.entryId,t.entryId);return re(e,r)},re=async(e,t)=>{
72
- let r=e.parameters,n=S(y,"permission",t),o=await r.getPermission(t);return{statementId:(await Y(
69
+ ee=async(e,t)=>{_.logDelete(d,e);try{return await X.send(new ot({FunctionName:e,
70
+ StatementId:t})),!0}catch(r){if(!(r instanceof it))throw r;return!1}};var te=()=>({equals:at,create:re,replace:ct,preview:pt,update:mt,delete:ut}),at=(e,t)=>!!e.
71
+ result&&e.result.functionName===t.result?.functionName,pt=async(e,t)=>{},ct=async(e,t,r)=>{
72
+ if(t.result)throw new st(d,e.entryId,t.entryId);return re(e,r)},re=async(e,t)=>{
73
+ let r=e.parameters,n=S(d,"permission",t),o=await r.getPermission(t);return{statementId:(await Y(
73
74
  {functionName:n,principal:o.principal,sourceArn:o.sourceArn,action:"lambda:Invok\
74
- eFunction"})).statementId,functionName:n}},ct=async()=>{},mt=async e=>{let t=e.result;
75
- t&&await ee(t.functionName,t.statementId)};var ne=()=>{ut(l,te())};import{registerProvider as Ut}from"@ez4/aws-common";import{ReplaceResourceError as vt}from"@ez4/aws-common";import{deepCompare as At,
76
- deepEqual as bt}from"@ez4/utils";import{LambdaClient as lt,GetEventSourceMappingCommand as gt,CreateEventSourceMappingCommand as ft,
77
- UpdateEventSourceMappingCommand as dt,DeleteEventSourceMappingCommand as yt,ListEventSourceMappingsCommand as St,
78
- FunctionResponseType as wt,EventSourcePosition as Ft,ResourceNotFoundException as Pt}from"@aws-sdk/client-lambda";
79
- import{Logger as R,parseArn as xt}from"@ez4/aws-common";import{waitFor as Ct}from"@ez4/utils";var u="AWS:Lambda/Mapping",d="aws:lambda.mapping";var w=new lt({}),oe=async(e,t)=>{R.logImport(u,e);let r=await w.send(new St({FunctionName:e,
75
+ eFunction"})).statementId,functionName:n}},mt=async()=>{},ut=async e=>{let t=e.result;
76
+ t&&await ee(t.functionName,t.statementId)};var ne=()=>{lt(f,te())};import{registerProvider as Dt}from"@ez4/aws-common";import{ReplaceResourceError as At}from"@ez4/aws-common";import{deepCompare as bt,
77
+ deepEqual as Et}from"@ez4/utils";import{LambdaClient as gt,GetEventSourceMappingCommand as ft,CreateEventSourceMappingCommand as yt,
78
+ UpdateEventSourceMappingCommand as dt,DeleteEventSourceMappingCommand as St,ListEventSourceMappingsCommand as Ft,
79
+ FunctionResponseType as wt,EventSourcePosition as xt,ResourceNotFoundException as Pt}from"@aws-sdk/client-lambda";
80
+ import{Logger as C,parseArn as Rt}from"@ez4/aws-common";import{waitFor as Ct}from"@ez4/utils";var g="AWS:Lambda/Mapping",y="aws:lambda.mapping",oe=(r=>(r.DynamoDB="dynamodb",
81
+ r.Queue="sqs",r))(oe||{});var F=new gt({}),ie=async(e,t)=>{C.logImport(g,e);let r=await F.send(new Ft({FunctionName:e,
80
82
  EventSourceArn:t})),[n]=r.EventSourceMappings;return n?{eventId:n.UUID}:void 0},
81
- ie=async e=>{let{sourceArn:t,functionName:r}=e;R.logCreate(u,r);let o=(await w.send(
82
- new ft({FunctionName:r,EventSourceArn:t,...ce(e)}))).UUID;return await pe(o),{eventId:o}},
83
- se=async(e,t)=>{let{functionName:r}=t;R.logUpdate(u,`${r} (${e})`),await w.send(
84
- new dt({UUID:e,FunctionName:r,...ce(t)})),await pe(e)},ae=async e=>{R.logDelete(
85
- u,e);try{return await w.send(new yt({UUID:e})),!0}catch(t){if(!(t instanceof Pt))
86
- throw t;return!1}},Rt=async e=>(await w.send(new gt({UUID:e}))).State,pe=async e=>{
87
- let t=new Set(["Enabled","Disabled"]);await Ct(async()=>{let r=await Rt(e);return t.
88
- has(r)})},ce=e=>{let{sourceArn:t,enabled:r,concurrency:n,batch:o}=e,{service:i}=xt(
83
+ se=async e=>{let{sourceArn:t,functionName:r}=e;C.logCreate(g,r);let o=(await F.send(
84
+ new yt({FunctionName:r,EventSourceArn:t,...me(e)}))).UUID;return await ce(o),{eventId:o}},
85
+ ae=async(e,t)=>{let{functionName:r}=t;C.logUpdate(g,`${r} (${e})`),await F.send(
86
+ new dt({UUID:e,FunctionName:r,...me(t)})),await ce(e)},pe=async e=>{C.logDelete(
87
+ g,e);try{return await F.send(new St({UUID:e})),!0}catch(t){if(!(t instanceof Pt))
88
+ throw t;return!1}},vt=async e=>(await F.send(new ft({UUID:e}))).State,ce=async e=>{
89
+ let t=new Set(["Enabled","Disabled"]);await Ct(async()=>{let r=await vt(e);return t.
90
+ has(r)})},me=e=>{let{sourceArn:t,enabled:r,concurrency:n,batch:o}=e,{service:i}=Rt(
89
91
  t);return{Enabled:r,FunctionResponseTypes:[wt.ReportBatchItemFailures],MaximumBatchingWindowInSeconds:o?.
90
- maxWindow,BatchSize:o?.batchSize,...i==="dynamodb"&&{StartingPosition:Ft.LATEST},
91
- ...i==="sqs"&&n&&{ScalingConfig:{MaximumConcurrency:n}}}};var me=()=>({equals:Et,create:ue,replace:Mt,preview:ht,update:It,delete:Nt}),Et=(e,t)=>!!e.
92
- result&&e.result.eventId===t.result?.eventId,ht=async(e,t)=>{let r={...e.parameters,
93
- dependencies:e.dependencies},n={...t.parameters,dependencies:t.dependencies},o=At(
92
+ maxWait,BatchSize:o?.size,...i==="dynamodb"&&{StartingPosition:xt.LATEST},...i===
93
+ "sqs"&&{ScalingConfig:{MaximumConcurrency:n}}}};var ue=()=>({equals:ht,create:le,replace:Mt,preview:It,update:Nt,delete:Tt}),ht=(e,t)=>!!e.
94
+ result&&e.result.eventId===t.result?.eventId,It=async(e,t)=>{let r={...e.parameters,
95
+ dependencies:e.dependencies},n={...t.parameters,dependencies:t.dependencies},o=bt(
94
96
  r,n,{exclude:{getSourceArn:!0}});if(o.counts)return{...o,name:r.fromService}},Mt=async(e,t,r)=>{
95
- if(t.result)throw new vt(u,e.entryId,t.entryId);return ue(e,r)},ue=async(e,t)=>{
96
- let r=e.parameters,n=S(u,"mapping",t),o=await r.getSourceArn(t);return{eventId:(await oe(
97
- n,o)??await ie({...e.parameters,functionName:n,sourceArn:o})).eventId,functionName:n,
98
- sourceArn:o}},It=async(e,t,r)=>{let n=e.result;if(!n)return;let o=n.sourceArn,i=S(
99
- u,"mapping",r),a=t.result?.functionName??n.functionName;return await Tt(n.eventId,
100
- {...e.parameters,functionName:i,sourceArn:o},{...t.parameters,functionName:a,sourceArn:o}),
101
- {...n,functionName:i}},Nt=async e=>{let t=e.result;t&&await ae(t.eventId)},Tt=async(e,t,r)=>{
102
- !bt(t,r,{exclude:{getSourceArn:!0,fromService:!0}})&&await se(e,t)};var le=()=>{Ut(d,me())};var ge=()=>[{account:"lambda.amazonaws.com"}];import{createPolicy as Gt,tryGetPolicy as Vt}from"@ez4/aws-identity";import{getServiceName as Ht}from"@ez4/project/library";import{getAccountId as Lt,getRegion as Dt,createPolicyDocument as zt}from"@ez4/aws-identity";
103
- var fe=async e=>{let[t,r]=await Promise.all([Dt(),Lt()]);return zt([{permissions:[
97
+ if(t.result)throw new At(g,e.entryId,t.entryId);return le(e,r)},le=async(e,t)=>{
98
+ let r=e.parameters,n=S(g,"mapping",t),o=await r.getSourceArn(t);return{eventId:(await ie(
99
+ n,o)??await se({...e.parameters,functionName:n,sourceArn:o})).eventId,functionName:n,
100
+ sourceArn:o}},Nt=async(e,t,r)=>{let n=e.result;if(!n)return;let o=n.sourceArn,i=S(
101
+ g,"mapping",r),a=t.result?.functionName??n.functionName,c={...e.parameters,functionName:i,
102
+ sourceArn:o},m={...t.parameters,functionName:a,sourceArn:o};return await Ut(n.eventId,
103
+ c,m),{...n,functionName:i}},Tt=async e=>{let t=e.result;t&&await pe(t.eventId)},
104
+ Ut=async(e,t,r)=>{!Et(t,r,{exclude:{getSourceArn:!0,fromService:!0}})&&await ae(
105
+ e,t)};var ge=()=>{Dt(y,ue())};var fe=()=>[{account:"lambda.amazonaws.com"}];import{createPolicy as Vt,tryGetPolicy as Ht}from"@ez4/aws-identity";import{getServiceName as jt}from"@ez4/project/library";import{getAccountId as Lt,getRegion as zt,createPolicyDocument as Gt}from"@ez4/aws-identity";
106
+ var ye=async e=>{let[t,r]=await Promise.all([zt(),Lt()]);return Gt([{permissions:[
104
107
  "logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`arn:aws:logs:${t}:${r}\
105
- :log-group:${e}-*:*`]}])};var de=async e=>{let{state:t,options:r}=e,n=Ht("",r),o=`${n}-lambda-policy`;return Vt(
106
- t,o)??Gt(t,{policyDocument:await fe(n),policyName:o})};var ye=!1,Rn=()=>{ye||(jt(),Ot(),Bt(),Wt("@ez4/aws-function",{"deploy:prepareIde\
107
- ntityAccount":ge,"deploy:prepareExecutionPolicy":de}),J(),ne(),le(),ye=!0)};import{toKebabCase as $t,hashData as qt}from"@ez4/utils";import{attachEntry as Zt}from"@ez4/stateful";var hn=(e,t,r,n)=>{let o=$t(n.functionName),i=qt(c,t.entryId,o),a=[t.entryId];return r&&
108
- a.push(r.entryId),Zt(e,{type:c,entryId:i,dependencies:a,parameters:{...n,functionName:o}})};import{attachEntry as kt}from"@ez4/stateful";import{hashData as we}from"@ez4/utils";var Se=e=>e.type===l;var zn=(e,t,r,n)=>{let o=we(l,t.entryId,r.entryId);return kt(e,{type:l,entryId:o,
109
- dependencies:[t.entryId,r.entryId],parameters:n})},Gn=(e,t,r)=>{let n=we(l,t.entryId,
110
- r.entryId),o=e[n];return o&&Se(o)?o:null};import{hashData as Jt}from"@ez4/utils";import{attachEntry as Kt}from"@ez4/stateful";var Bn=(e,t,r,n)=>{let o=Jt(d,t.entryId,r.entryId);return Kt(e,{type:d,entryId:o,
111
- dependencies:[t.entryId,r.entryId],parameters:n})};var qn=e=>e.type===d;export{s as FunctionServiceName,c as FunctionServiceType,u as MappingServiceName,
112
- d as MappingServiceType,y as PermissionServiceName,l as PermissionServiceType,hn as createFunction,
113
- Bn as createMapping,zn as createPermission,hr as getFunctionArn,S as getFunctionName,
114
- Er as getFunctionState,Gn as getPermission,Q as isFunctionState,qn as isMappingState,
115
- Rn as registerTriggers,et as tryGetFunctionArn,br as tryGetFunctionState};
108
+ :log-group:${e}-*:*`]}])};var de=async e=>{let{state:t,options:r}=e,n=jt("",r),o=`${n}-lambda-policy`;return Ht(
109
+ t,o)??Vt(t,{tags:r.tags,policyDocument:await ye(n),policyName:o})};var Se=!1,vn=()=>{Se||(Ot(),Bt(),Wt(),qt("@ez4/aws-function",{"deploy:prepareIde\
110
+ ntityAccount":fe,"deploy:prepareExecutionPolicy":de}),Q(),ne(),ge(),Se=!0)};import{toKebabCase as $t,hashData as Zt}from"@ez4/utils";import{attachEntry as kt}from"@ez4/stateful";var In=(e,t,r,n)=>{let o=$t(n.functionName),i=Zt(u,t.entryId,o),a=[t.entryId];return r&&
111
+ a.push(r.entryId),kt(e,{type:u,entryId:i,dependencies:a,parameters:{...n,functionName:o}})};import{attachEntry as Qt}from"@ez4/stateful";import{hashData as we}from"@ez4/utils";var Fe=e=>e.type===f;var Gn=(e,t,r,n)=>{let o=we(f,t.entryId,r.entryId);return Qt(e,{type:f,entryId:o,
112
+ dependencies:[t.entryId,r.entryId],parameters:n})},Vn=(e,t,r)=>{let n=we(f,t.entryId,
113
+ r.entryId),o=e[n];return o&&Fe(o)?o:null};import{hashData as Jt}from"@ez4/utils";import{attachEntry as Kt}from"@ez4/stateful";var Wn=(e,t,r,n)=>{let o=Jt(y,t.entryId,r.entryId);return Kt(e,{type:y,entryId:o,
114
+ dependencies:[t.entryId,r.entryId],parameters:n})};var Zn=e=>e.type===y;export{s as FunctionServiceName,u as FunctionServiceType,oe as MappingService,g as MappingServiceName,
115
+ y as MappingServiceType,d as PermissionServiceName,f as PermissionServiceType,In as createFunction,
116
+ Wn as createMapping,Gn as createPermission,Ir as getFunctionArn,S as getFunctionName,
117
+ hr as getFunctionState,Vn as getPermission,K as isFunctionState,Zn as isMappingState,
118
+ vn as registerTriggers,tt as tryGetFunctionArn,Er as tryGetFunctionState};
116
119
  //# sourceMappingURL=main.mjs.map
@@ -1,7 +1,7 @@
1
1
  import type { Arn } from '@ez4/aws-common';
2
2
  export type BatchOptions = {
3
- batchSize: number;
4
- maxWindow: number;
3
+ maxWait?: number;
4
+ size: number;
5
5
  };
6
6
  export type CreateRequest = {
7
7
  functionName: string;
@@ -17,3 +17,7 @@ export type MappingState = EntryState & {
17
17
  parameters: MappingParameters;
18
18
  result?: MappingResult;
19
19
  };
20
+ export declare const enum MappingService {
21
+ DynamoDB = "dynamodb",
22
+ Queue = "sqs"
23
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/aws-function",
3
3
  "description": "EZ4: Self-managed AWS lambda function provider",
4
- "version": "0.18.0",
4
+ "version": "0.20.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -38,12 +38,12 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@aws-sdk/client-lambda": "^3.758.0",
41
- "@ez4/aws-common": "^0.18.0",
42
- "@ez4/aws-identity": "^0.18.0",
43
- "@ez4/aws-logs": "^0.18.0",
44
- "@ez4/project": "^0.18.0",
45
- "@ez4/stateful": "^0.18.0",
46
- "@ez4/utils": "^0.18.0",
41
+ "@ez4/aws-common": "^0.20.0",
42
+ "@ez4/aws-identity": "^0.20.0",
43
+ "@ez4/aws-logs": "^0.20.0",
44
+ "@ez4/project": "^0.20.0",
45
+ "@ez4/stateful": "^0.20.0",
46
+ "@ez4/utils": "^0.20.0",
47
47
  "@types/adm-zip": "^0.5.5",
48
48
  "adm-zip": "^0.5.14"
49
49
  }