aws-lambda-devkit 0.1.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.
Files changed (183) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/LICENSE +21 -0
  3. package/README.md +214 -0
  4. package/dist/aws/batch-response.d.ts +8 -0
  5. package/dist/aws/batch-response.d.ts.map +1 -0
  6. package/dist/aws/batch-response.js +12 -0
  7. package/dist/aws/batch-response.js.map +1 -0
  8. package/dist/aws/clients.d.ts +6 -0
  9. package/dist/aws/clients.d.ts.map +1 -0
  10. package/dist/aws/clients.js +30 -0
  11. package/dist/aws/clients.js.map +1 -0
  12. package/dist/aws/sns-publish.d.ts +10 -0
  13. package/dist/aws/sns-publish.d.ts.map +1 -0
  14. package/dist/aws/sns-publish.js +17 -0
  15. package/dist/aws/sns-publish.js.map +1 -0
  16. package/dist/aws/sqs-listen.d.ts +17 -0
  17. package/dist/aws/sqs-listen.d.ts.map +1 -0
  18. package/dist/aws/sqs-listen.js +113 -0
  19. package/dist/aws/sqs-listen.js.map +1 -0
  20. package/dist/aws/sqs-process.d.ts +39 -0
  21. package/dist/aws/sqs-process.d.ts.map +1 -0
  22. package/dist/aws/sqs-process.js +95 -0
  23. package/dist/aws/sqs-process.js.map +1 -0
  24. package/dist/aws/sqs-send.d.ts +15 -0
  25. package/dist/aws/sqs-send.d.ts.map +1 -0
  26. package/dist/aws/sqs-send.js +27 -0
  27. package/dist/aws/sqs-send.js.map +1 -0
  28. package/dist/aws/sqs-visibility.d.ts +10 -0
  29. package/dist/aws/sqs-visibility.d.ts.map +1 -0
  30. package/dist/aws/sqs-visibility.js +29 -0
  31. package/dist/aws/sqs-visibility.js.map +1 -0
  32. package/dist/cli.d.ts +3 -0
  33. package/dist/cli.d.ts.map +1 -0
  34. package/dist/cli.js +187 -0
  35. package/dist/cli.js.map +1 -0
  36. package/dist/commands/config-cmd.d.ts +5 -0
  37. package/dist/commands/config-cmd.d.ts.map +1 -0
  38. package/dist/commands/config-cmd.js +8 -0
  39. package/dist/commands/config-cmd.js.map +1 -0
  40. package/dist/commands/config.d.ts +2 -0
  41. package/dist/commands/config.d.ts.map +1 -0
  42. package/dist/commands/config.js +24 -0
  43. package/dist/commands/config.js.map +1 -0
  44. package/dist/commands/init.d.ts +7 -0
  45. package/dist/commands/init.d.ts.map +1 -0
  46. package/dist/commands/init.js +59 -0
  47. package/dist/commands/init.js.map +1 -0
  48. package/dist/commands/list.d.ts +4 -0
  49. package/dist/commands/list.d.ts.map +1 -0
  50. package/dist/commands/list.js +23 -0
  51. package/dist/commands/list.js.map +1 -0
  52. package/dist/commands/listen.d.ts +20 -0
  53. package/dist/commands/listen.d.ts.map +1 -0
  54. package/dist/commands/listen.js +36 -0
  55. package/dist/commands/listen.js.map +1 -0
  56. package/dist/commands/send.d.ts +17 -0
  57. package/dist/commands/send.d.ts.map +1 -0
  58. package/dist/commands/send.js +51 -0
  59. package/dist/commands/send.js.map +1 -0
  60. package/dist/commands/test.d.ts +23 -0
  61. package/dist/commands/test.d.ts.map +1 -0
  62. package/dist/commands/test.js +123 -0
  63. package/dist/commands/test.js.map +1 -0
  64. package/dist/config/env.d.ts +8 -0
  65. package/dist/config/env.d.ts.map +1 -0
  66. package/dist/config/env.js +16 -0
  67. package/dist/config/env.js.map +1 -0
  68. package/dist/config/load.d.ts +9 -0
  69. package/dist/config/load.d.ts.map +1 -0
  70. package/dist/config/load.js +72 -0
  71. package/dist/config/load.js.map +1 -0
  72. package/dist/config/merge.d.ts +36 -0
  73. package/dist/config/merge.d.ts.map +1 -0
  74. package/dist/config/merge.js +89 -0
  75. package/dist/config/merge.js.map +1 -0
  76. package/dist/config/project-env.d.ts +34 -0
  77. package/dist/config/project-env.d.ts.map +1 -0
  78. package/dist/config/project-env.js +90 -0
  79. package/dist/config/project-env.js.map +1 -0
  80. package/dist/config/schema.d.ts +27 -0
  81. package/dist/config/schema.d.ts.map +1 -0
  82. package/dist/config/schema.js +123 -0
  83. package/dist/config/schema.js.map +1 -0
  84. package/dist/config/types.d.ts +167 -0
  85. package/dist/config/types.d.ts.map +1 -0
  86. package/dist/config/types.js +2 -0
  87. package/dist/config/types.js.map +1 -0
  88. package/dist/events/apigw.d.ts +41 -0
  89. package/dist/events/apigw.d.ts.map +1 -0
  90. package/dist/events/apigw.js +43 -0
  91. package/dist/events/apigw.js.map +1 -0
  92. package/dist/events/eventbridge.d.ts +16 -0
  93. package/dist/events/eventbridge.d.ts.map +1 -0
  94. package/dist/events/eventbridge.js +19 -0
  95. package/dist/events/eventbridge.js.map +1 -0
  96. package/dist/events/index.d.ts +17 -0
  97. package/dist/events/index.d.ts.map +1 -0
  98. package/dist/events/index.js +50 -0
  99. package/dist/events/index.js.map +1 -0
  100. package/dist/events/s3.d.ts +45 -0
  101. package/dist/events/s3.d.ts.map +1 -0
  102. package/dist/events/s3.js +44 -0
  103. package/dist/events/s3.js.map +1 -0
  104. package/dist/events/schedule.d.ts +12 -0
  105. package/dist/events/schedule.d.ts.map +1 -0
  106. package/dist/events/schedule.js +15 -0
  107. package/dist/events/schedule.js.map +1 -0
  108. package/dist/events/sns.d.ts +24 -0
  109. package/dist/events/sns.d.ts.map +1 -0
  110. package/dist/events/sns.js +31 -0
  111. package/dist/events/sns.js.map +1 -0
  112. package/dist/events/sqs-record.d.ts +44 -0
  113. package/dist/events/sqs-record.d.ts.map +1 -0
  114. package/dist/events/sqs-record.js +75 -0
  115. package/dist/events/sqs-record.js.map +1 -0
  116. package/dist/events/sqs.d.ts +21 -0
  117. package/dist/events/sqs.d.ts.map +1 -0
  118. package/dist/events/sqs.js +28 -0
  119. package/dist/events/sqs.js.map +1 -0
  120. package/dist/events/util.d.ts +2 -0
  121. package/dist/events/util.d.ts.map +1 -0
  122. package/dist/events/util.js +7 -0
  123. package/dist/events/util.js.map +1 -0
  124. package/dist/index.d.ts +15 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +14 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/peer-resolve.d.ts +5 -0
  129. package/dist/peer-resolve.d.ts.map +1 -0
  130. package/dist/peer-resolve.js +44 -0
  131. package/dist/peer-resolve.js.map +1 -0
  132. package/dist/runtime/asset-links.d.ts +15 -0
  133. package/dist/runtime/asset-links.d.ts.map +1 -0
  134. package/dist/runtime/asset-links.js +42 -0
  135. package/dist/runtime/asset-links.js.map +1 -0
  136. package/dist/runtime/clear-caches.d.ts +5 -0
  137. package/dist/runtime/clear-caches.d.ts.map +1 -0
  138. package/dist/runtime/clear-caches.js +8 -0
  139. package/dist/runtime/clear-caches.js.map +1 -0
  140. package/dist/runtime/context.d.ts +10 -0
  141. package/dist/runtime/context.d.ts.map +1 -0
  142. package/dist/runtime/context.js +42 -0
  143. package/dist/runtime/context.js.map +1 -0
  144. package/dist/runtime/handler-cache.d.ts +6 -0
  145. package/dist/runtime/handler-cache.d.ts.map +1 -0
  146. package/dist/runtime/handler-cache.js +14 -0
  147. package/dist/runtime/handler-cache.js.map +1 -0
  148. package/dist/runtime/invoke.d.ts +32 -0
  149. package/dist/runtime/invoke.d.ts.map +1 -0
  150. package/dist/runtime/invoke.js +111 -0
  151. package/dist/runtime/invoke.js.map +1 -0
  152. package/dist/runtime/loader.d.ts +17 -0
  153. package/dist/runtime/loader.d.ts.map +1 -0
  154. package/dist/runtime/loader.js +76 -0
  155. package/dist/runtime/loader.js.map +1 -0
  156. package/dist/runtime/logs.d.ts +19 -0
  157. package/dist/runtime/logs.d.ts.map +1 -0
  158. package/dist/runtime/logs.js +125 -0
  159. package/dist/runtime/logs.js.map +1 -0
  160. package/dist/util/payload.d.ts +13 -0
  161. package/dist/util/payload.d.ts.map +1 -0
  162. package/dist/util/payload.js +40 -0
  163. package/dist/util/payload.js.map +1 -0
  164. package/dist/util/tsx-register.d.ts +4 -0
  165. package/dist/util/tsx-register.d.ts.map +1 -0
  166. package/dist/util/tsx-register.js +27 -0
  167. package/dist/util/tsx-register.js.map +1 -0
  168. package/dist/version.d.ts +2 -0
  169. package/dist/version.d.ts.map +1 -0
  170. package/dist/version.js +2 -0
  171. package/dist/version.js.map +1 -0
  172. package/docs/README.md +23 -0
  173. package/docs/commands.md +294 -0
  174. package/docs/configuration.md +652 -0
  175. package/docs/getting-started.md +400 -0
  176. package/docs/recipes.md +743 -0
  177. package/docs/troubleshooting.md +393 -0
  178. package/package.json +76 -0
  179. package/templates/.env.example +5 -0
  180. package/templates/.vscode/launch.json +14 -0
  181. package/templates/events/sample.json +4 -0
  182. package/templates/lamkit.config.js +38 -0
  183. package/templates/lamkit.config.ts +27 -0
package/docs/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # Lambda DevKit documentation
2
+
3
+ Guides for **[Lambda DevKit](https://www.npmjs.com/package/aws-lambda-devkit)** — npm package **`aws-lambda-devkit`**, CLI **`lamkit`**.
4
+
5
+ Complete walkthroughs for integrating the toolkit into your Node.js Lambda project. All examples use generic names (`worker`, `WORKER_QUEUE_URL`, etc.) — copy them and replace with your own paths and env vars.
6
+
7
+ | Guide | Time | What you will learn |
8
+ |-------|------|---------------------|
9
+ | [Getting started](getting-started.md) | ~15 min | Install, project layout, first `lamkit test`, what the output means |
10
+ | [Commands reference](commands.md) | Reference | Every CLI command and flag with copy-paste examples |
11
+ | [Configuration reference](configuration.md) | Reference | Every `lamkit.config.*` field, env loading, asset links |
12
+ | [Recipes](recipes.md) | Copy-paste | 22 end-to-end setups (SQS, HTTP, monorepo, real AWS, CI, …) |
13
+ | [Troubleshooting](troubleshooting.md) | When stuck | Errors, causes, and step-by-step fixes |
14
+
15
+ **Package name:** `aws-lambda-devkit`
16
+ **CLI command:** `lamkit`
17
+ **Config file:** `lamkit.config.js` (also `.mjs`, `.cjs`, or `.ts`)
18
+
19
+ After `npm install -D aws-lambda-devkit`, open guides from:
20
+
21
+ ```
22
+ node_modules/aws-lambda-devkit/docs/getting-started.md
23
+ ```
@@ -0,0 +1,294 @@
1
+ # Commands reference
2
+
3
+ Every **`lamkit`** command with examples. Installed via npm package **`aws-lambda-devkit`**.
4
+
5
+ Run from the directory that contains `lamkit.config.*`, or pass `--cwd`.
6
+
7
+ Install the CLI:
8
+
9
+ ```bash
10
+ npm install -D aws-lambda-devkit
11
+ npx lamkit --help
12
+ ```
13
+
14
+ ---
15
+
16
+ ## `lamkit init`
17
+
18
+ Creates starter files in the current directory.
19
+
20
+ ```bash
21
+ npx lamkit init
22
+ npx lamkit init --force # overwrite existing template files
23
+ npx lamkit init --yes # also add "test:lambda": "lamkit test" to package.json
24
+ npx lamkit init --cwd ./packages/worker
25
+ ```
26
+
27
+ **Creates:**
28
+
29
+ | File | Purpose |
30
+ |------|---------|
31
+ | `lamkit.config.js` | Function definitions |
32
+ | `.env.example` | Env var template |
33
+ | `.vscode/launch.json` | VS Code debugger config |
34
+ | `events/sample.json` | Example JSON payload |
35
+
36
+ ---
37
+
38
+ ## `lamkit list`
39
+
40
+ Prints all configured functions.
41
+
42
+ ```bash
43
+ npx lamkit list
44
+ ```
45
+
46
+ **Example output:**
47
+
48
+ ```
49
+ NAME ENTRY TRIGGER
50
+ -----------------------------------------
51
+ worker ./dist/handler.js sqs
52
+ api ./dist/http.js http
53
+ ```
54
+
55
+ ---
56
+
57
+ ## `lamkit config`
58
+
59
+ Shows the **merged** config for one function (defaults + overrides). Useful to verify env vars resolved correctly.
60
+
61
+ ```bash
62
+ npx lamkit config
63
+ npx lamkit config worker
64
+ ```
65
+
66
+ Queue URLs and secrets may be truncated or redacted in output.
67
+
68
+ ---
69
+
70
+ ## `lamkit test`
71
+
72
+ Simulates an AWS event and invokes your handler locally. **No AWS credentials required** unless your handler calls AWS.
73
+
74
+ ### Basic usage
75
+
76
+ ```bash
77
+ # Single function in config — name is optional
78
+ npx lamkit test --data '{"orderId":"ord_123"}'
79
+
80
+ # Named function
81
+ npx lamkit test worker --data '{"orderId":"ord_123"}'
82
+
83
+ # All functions in config
84
+ npx lamkit test --all
85
+ ```
86
+
87
+ ### Payload sources (priority order)
88
+
89
+ When you run `lamkit test`, lamkit picks the event payload like this:
90
+
91
+ 1. `--event path/to/file.json` — full raw event (highest priority)
92
+ 2. `--data` or `--data-file` — passed to the event builder
93
+ 3. `functions[].test.data` in config
94
+ 4. Empty / default sample for the trigger
95
+
96
+ **Examples:**
97
+
98
+ ```bash
99
+ # Inline JSON
100
+ npx lamkit test --data '{"type":"ORDER_CREATED","id":"1"}'
101
+
102
+ # JSON file
103
+ npx lamkit test --data-file events/order-created.json
104
+
105
+ # @file shorthand
106
+ npx lamkit test --data @events/order-created.json
107
+
108
+ # Raw captured SQSEvent (from CloudWatch or AWS samples)
109
+ npx lamkit test --event events/captured-sqs.json
110
+ ```
111
+
112
+ ### SQS-specific flags
113
+
114
+ ```bash
115
+ # Five records in one SQSEvent
116
+ npx lamkit test --data '{"id":"1"}' --batch-size 5
117
+
118
+ # Array payload → one record per element
119
+ npx lamkit test --data '[{"id":"1"},{"id":"2"}]'
120
+ ```
121
+
122
+ ### Environment overrides
123
+
124
+ ```bash
125
+ npx lamkit test --env LOG_LEVEL=debug --env FEATURE_X=true --data '{"id":"1"}'
126
+ ```
127
+
128
+ Only affects that single invoke; does not change `.env`.
129
+
130
+ ### Debugging and inspection
131
+
132
+ ```bash
133
+ # Print the built event without calling the handler
134
+ npx lamkit test --dry-run --data '{"id":"1"}'
135
+
136
+ # Node inspector (attach debugger)
137
+ npx lamkit test --inspect
138
+ npx lamkit test --inspect-brk
139
+
140
+ # Reload handler module (bypass cache after code change)
141
+ npx lamkit test --reload --data '{"id":"1"}'
142
+
143
+ # Simulate cold start (Init Duration in REPORT)
144
+ npx lamkit test --cold --data '{"id":"1"}'
145
+ ```
146
+
147
+ ### Exit codes
148
+
149
+ ```bash
150
+ # Exit 1 if handler returns SQS batchItemFailures
151
+ npx lamkit test worker --strict-batch --data '[{"id":"1"}]'
152
+ ```
153
+
154
+ | Exit code | Meaning |
155
+ |-----------|---------|
156
+ | `0` | Handler completed without throw (and strict-batch passed) |
157
+ | `1` | Handler threw, timeout, or strict-batch failure |
158
+
159
+ ### Example successful output
160
+
161
+ ```
162
+ ✓ worker (sqs) — 42ms
163
+
164
+ Logs:
165
+ START RequestId: a1b2c3d4-... Version: $LATEST
166
+ Received event: {"Records":[...]}
167
+ END RequestId: a1b2c3d4-...
168
+ REPORT RequestId: a1b2c3d4-... Duration: 42.00 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 89 MB
169
+ ```
170
+
171
+ ---
172
+
173
+ ## `lamkit send sqs`
174
+
175
+ Sends one message to a **real** SQS queue. Requires `@aws-sdk/client-sqs` peer and AWS credentials.
176
+
177
+ ```bash
178
+ npm install -D @aws-sdk/client-sqs
179
+
180
+ npx lamkit send sqs worker --data '{"id":"1"}'
181
+ npx lamkit send sqs worker --data-file events/payload.json
182
+ npx lamkit send sqs worker --message 'plain text body'
183
+ npx lamkit send sqs worker --data '{"id":"1"}' --queue-url 'https://sqs...'
184
+ ```
185
+
186
+ FIFO queues (URL ends with `.fifo`): lamkit sets `MessageGroupId` and `MessageDeduplicationId` automatically.
187
+
188
+ **Example output:**
189
+
190
+ ```
191
+ Sent to https://sqs.us-east-1.amazonaws.com/123456789012/dev-worker
192
+ MessageId: abc-123-def
193
+ Run: lamkit listen worker
194
+ ```
195
+
196
+ ---
197
+
198
+ ## `lamkit send sns`
199
+
200
+ Publishes to a **real** SNS topic. Requires `@aws-sdk/client-sns` peer.
201
+
202
+ ```bash
203
+ npm install -D @aws-sdk/client-sns
204
+
205
+ npx lamkit send sns notifier --data '{"event":"USER_SIGNUP"}'
206
+ npx lamkit send sns notifier --topic-arn 'arn:aws:sns:us-east-1:123456789012:events'
207
+ ```
208
+
209
+ This publishes only — it does not invoke your handler. To test the handler offline, use `lamkit test` with `trigger: 'sns'`.
210
+
211
+ ---
212
+
213
+ ## `lamkit listen`
214
+
215
+ Long-polls a **real** SQS queue and invokes your **local** handler for each message.
216
+
217
+ ```bash
218
+ npm install -D @aws-sdk/client-sqs
219
+
220
+ # Poll until Ctrl+C
221
+ npx lamkit listen worker
222
+
223
+ # One poll batch, then exit
224
+ npx lamkit listen worker --once
225
+
226
+ # Fail if poll returns zero messages (useful in scripts)
227
+ npx lamkit listen worker --once --expect-messages
228
+ ```
229
+
230
+ ### Common flags
231
+
232
+ ```bash
233
+ npx lamkit listen worker --batch-size 5
234
+ npx lamkit listen worker --no-batch-invoke # one invoke per message
235
+ npx lamkit listen worker --no-delete # keep messages on queue (debug only)
236
+ npx lamkit listen worker --reload # reload handler each batch
237
+ npx lamkit listen worker --queue-url 'https://sqs...'
238
+ npx lamkit listen worker --no-extend-visibility
239
+ ```
240
+
241
+ ### Typical dev loop (two terminals)
242
+
243
+ **Terminal 1:**
244
+
245
+ ```bash
246
+ npx lamkit listen worker
247
+ ```
248
+
249
+ **Terminal 2:**
250
+
251
+ ```bash
252
+ npx lamkit send sqs worker --data '{"id":"1"}'
253
+ ```
254
+
255
+ Use a **dev-only queue**. Pause the deployed Lambda event source mapping while listening, or both consumers will compete for messages.
256
+
257
+ ### Message lifecycle (AWS-aligned)
258
+
259
+ | Handler result | Queue behavior |
260
+ |----------------|----------------|
261
+ | Success | Message deleted |
262
+ | Throw or `batchItemFailures` | Message **not** deleted; becomes visible again after timeout |
263
+ | `--no-delete` | Never delete (debug escape hatch) |
264
+
265
+ ---
266
+
267
+ ## Global options
268
+
269
+ Most commands accept:
270
+
271
+ ```bash
272
+ npx lamkit test worker --cwd /path/to/lambda-package --data '{"id":"1"}'
273
+ ```
274
+
275
+ ---
276
+
277
+ ## npm scripts (recommended)
278
+
279
+ ```json
280
+ {
281
+ "scripts": {
282
+ "test:lambda": "lamkit test",
283
+ "test:lambda:all": "lamkit test --all",
284
+ "listen:worker": "lamkit listen worker",
285
+ "send:worker": "lamkit send sqs worker --data '{\"id\":\"1\"}'"
286
+ }
287
+ }
288
+ ```
289
+
290
+ ```bash
291
+ npm run test:lambda -- --data '{"id":"1"}'
292
+ ```
293
+
294
+ Arguments after `--` are passed to `lamkit`.