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