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
@@ -0,0 +1,36 @@
1
+ import { loadConfig } from '../config/load.js';
2
+ import { resolveFunction } from '../config/merge.js';
3
+ import { listenSqsQueue } from '../aws/sqs-listen.js';
4
+ export function resolveListenExitCode(result, options) {
5
+ if (result.failures > 0) {
6
+ return 1;
7
+ }
8
+ if (options.expectMessages && result.messagesReceived === 0) {
9
+ return 1;
10
+ }
11
+ return 0;
12
+ }
13
+ export async function runListenCommand(functionName, options = {}) {
14
+ const cwd = options.cwd ?? process.cwd();
15
+ const config = await loadConfig(cwd);
16
+ const fn = resolveFunction(config, functionName);
17
+ const mergedFn = { ...fn };
18
+ if (options.queueUrl) {
19
+ mergedFn.aws = { ...mergedFn.aws, queueUrl: options.queueUrl };
20
+ }
21
+ const result = await listenSqsQueue({
22
+ fn: mergedFn,
23
+ cwd,
24
+ batchSize: options.batchSize,
25
+ batchInvoke: options.noBatchInvoke ? false : (options.batchInvoke ?? true),
26
+ deleteOnSuccess: !options.noDelete,
27
+ once: options.once,
28
+ reload: options.reload,
29
+ extendVisibility: !options.noExtendVisibility,
30
+ onMessage: (messageId, status) => {
31
+ console.log(`message ${messageId}: ${status}`);
32
+ },
33
+ });
34
+ return resolveListenExitCode(result, options);
35
+ }
36
+ //# sourceMappingURL=listen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/commands/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAetD,MAAM,UAAU,qBAAqB,CACnC,MAAsD,EACtD,OAAqC;IAErC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAAgC,EAChC,UAAgC,EAAE;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,EAAE,EAAE,QAAQ;QACZ,GAAG;QACH,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QAC1E,eAAe,EAAE,CAAC,OAAO,CAAC,QAAQ;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,gBAAgB,EAAE,CAAC,OAAO,CAAC,kBAAkB;QAC7C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,KAAK,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type SendSqsCommandOptions = {
2
+ cwd?: string;
3
+ data?: string;
4
+ dataFile?: string;
5
+ message?: string;
6
+ queueUrl?: string;
7
+ };
8
+ export type SendSnsCommandOptions = {
9
+ cwd?: string;
10
+ data?: string;
11
+ dataFile?: string;
12
+ message?: string;
13
+ topicArn?: string;
14
+ };
15
+ export declare function runSendSqsCommand(functionName: string, options?: SendSqsCommandOptions): Promise<number>;
16
+ export declare function runSendSnsCommand(functionName: string, options?: SendSnsCommandOptions): Promise<number>;
17
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
@@ -0,0 +1,51 @@
1
+ import { resolveConfigFunction } from './config-cmd.js';
2
+ import { publishSnsMessage } from '../aws/sns-publish.js';
3
+ import { sendSqsMessage } from '../aws/sqs-send.js';
4
+ import { resolvePayload } from '../util/payload.js';
5
+ export async function runSendSqsCommand(functionName, options = {}) {
6
+ const cwd = options.cwd ?? process.cwd();
7
+ const { fn } = await resolveConfigFunction(functionName, cwd);
8
+ const queueUrl = options.queueUrl ?? fn.aws.queueUrl;
9
+ if (!queueUrl) {
10
+ throw new Error('queueUrl is required. Set functions[].aws.queueUrl in lamkit.config.js or pass --queue-url');
11
+ }
12
+ const payload = resolvePayload({
13
+ data: options.data,
14
+ dataFile: options.dataFile,
15
+ cwd,
16
+ });
17
+ const messageId = await sendSqsMessage({
18
+ queueUrl,
19
+ region: fn.region,
20
+ cwd,
21
+ endpoint: fn.aws.endpoint,
22
+ ...(options.message !== undefined ? { message: options.message } : { data: payload }),
23
+ });
24
+ console.log(`MessageId: ${messageId}`);
25
+ console.log(`Next: lamkit listen ${fn.name}`);
26
+ return 0;
27
+ }
28
+ export async function runSendSnsCommand(functionName, options = {}) {
29
+ const cwd = options.cwd ?? process.cwd();
30
+ const { fn } = await resolveConfigFunction(functionName, cwd);
31
+ const topicArn = options.topicArn ?? fn.aws.topicArn;
32
+ if (!topicArn) {
33
+ throw new Error('topicArn is required. Set functions[].aws.topicArn in lamkit.config.js or pass --topic-arn');
34
+ }
35
+ const payload = resolvePayload({
36
+ data: options.data,
37
+ dataFile: options.dataFile,
38
+ cwd,
39
+ });
40
+ const messageId = await publishSnsMessage({
41
+ topicArn,
42
+ region: fn.region,
43
+ cwd,
44
+ endpoint: fn.aws.endpoint,
45
+ ...(options.message !== undefined ? { message: options.message } : { data: payload }),
46
+ });
47
+ console.log(`MessageId: ${messageId}`);
48
+ console.log(`To test a handler: subscribe SQS to this topic, then run lamkit listen <function> on that queue`);
49
+ return 0;
50
+ }
51
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAkBpD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAAoB,EACpB,UAAiC,EAAE;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC;QAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC;QACrC,QAAQ;QACR,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,GAAG;QACH,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ;QACzB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACtF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAAoB,EACpB,UAAiC,EAAE;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC;QAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC;QACxC,QAAQ;QACR,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,GAAG;QACH,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ;QACzB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACtF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,iGAAiG,CAClG,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type InvokeResult } from '../runtime/invoke.js';
2
+ export type TestCommandOptions = {
3
+ cwd?: string;
4
+ data?: string;
5
+ dataFile?: string;
6
+ eventPath?: string;
7
+ env?: string[];
8
+ all?: boolean;
9
+ dryRun?: boolean;
10
+ cold?: boolean;
11
+ reload?: boolean;
12
+ batchSize?: number;
13
+ verbose?: boolean;
14
+ pretty?: boolean;
15
+ inspect?: boolean;
16
+ inspectBrk?: boolean;
17
+ strictBatch?: boolean;
18
+ };
19
+ export declare function resolveTestExitCode(result: InvokeResult, options?: {
20
+ strictBatch?: boolean;
21
+ }): number;
22
+ export declare function runTestCommand(functionName: string | undefined, options?: TestCommandOptions): Promise<number>;
23
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AASA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIxE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AA2DF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,MAAM,CAUR;AA4DD,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -0,0 +1,123 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import pc from 'picocolors';
3
+ import { loadConfig } from '../config/load.js';
4
+ import { resolveFunction } from '../config/merge.js';
5
+ import { buildEventForTrigger } from '../events/index.js';
6
+ import { queueArnFromUrl } from '../events/sqs-record.js';
7
+ import { resetColdStart, setInitDurationMs } from '../runtime/context.js';
8
+ import { clearAllHandlerCaches } from '../runtime/clear-caches.js';
9
+ import { countBatchItemFailures } from '../aws/batch-response.js';
10
+ import { invokeHandler } from '../runtime/invoke.js';
11
+ import { loadHandler } from '../runtime/loader.js';
12
+ import { readPayloadFile, resolvePayload } from '../util/payload.js';
13
+ function applyEnvOverrides(envVars) {
14
+ for (const entry of envVars ?? []) {
15
+ const eqIndex = entry.indexOf('=');
16
+ if (eqIndex <= 0) {
17
+ throw new Error(`Invalid --env value "${entry}". Expected KEY=value`);
18
+ }
19
+ process.env[entry.slice(0, eqIndex)] = entry.slice(eqIndex + 1);
20
+ }
21
+ }
22
+ function resolveEvent(fn, options) {
23
+ if (options.eventPath) {
24
+ return readPayloadFile(options.eventPath, options.cwd ?? process.cwd());
25
+ }
26
+ const payload = resolvePayload({
27
+ data: options.data,
28
+ dataFile: options.dataFile,
29
+ cwd: options.cwd,
30
+ }) ?? fn.test?.data;
31
+ const queueArn = fn.aws.queueUrl
32
+ ? queueArnFromUrl(fn.aws.queueUrl, fn.region)
33
+ : undefined;
34
+ return buildEventForTrigger(fn.trigger, payload, {
35
+ region: fn.region,
36
+ batchSize: options.batchSize,
37
+ queueArn,
38
+ });
39
+ }
40
+ function maybeReexecForInspect(options) {
41
+ if (!options.inspect && !options.inspectBrk) {
42
+ return;
43
+ }
44
+ if (process.env.LAMKIT_REEXEC === '1') {
45
+ return;
46
+ }
47
+ const inspectFlag = options.inspectBrk ? '--inspect-brk' : '--inspect';
48
+ const result = spawnSync(process.execPath, [inspectFlag, process.argv[1], ...process.argv.slice(2)], {
49
+ stdio: 'inherit',
50
+ env: { ...process.env, LAMKIT_REEXEC: '1' },
51
+ });
52
+ process.exit(result.status ?? 1);
53
+ }
54
+ export function resolveTestExitCode(result, options = {}) {
55
+ if (!result.success) {
56
+ return 1;
57
+ }
58
+ if (options.strictBatch && countBatchItemFailures(result.result) > 0) {
59
+ return 1;
60
+ }
61
+ return 0;
62
+ }
63
+ async function runSingleFunctionTest(fn, options) {
64
+ const cwd = options.cwd ?? process.cwd();
65
+ if (options.cold) {
66
+ resetColdStart();
67
+ }
68
+ if (options.reload) {
69
+ clearAllHandlerCaches();
70
+ }
71
+ applyEnvOverrides(options.env);
72
+ const event = resolveEvent(fn, options);
73
+ if (options.verbose) {
74
+ console.error(pc.dim(`Function: ${fn.name} (${fn.trigger})`));
75
+ console.error(pc.dim(`Entry: ${fn.entry}`));
76
+ }
77
+ if (options.dryRun) {
78
+ console.log(JSON.stringify(event, null, 2));
79
+ return 0;
80
+ }
81
+ const loadStarted = Date.now();
82
+ const handler = await loadHandler(fn, cwd, { reload: options.reload });
83
+ if (options.cold) {
84
+ setInitDurationMs(Date.now() - loadStarted);
85
+ }
86
+ const result = await invokeHandler(handler, event, fn);
87
+ const pretty = options.pretty ?? true;
88
+ if (pretty) {
89
+ const status = result.success ? pc.green('✓') : pc.red('✗');
90
+ console.log(`${status} ${fn.name} (${fn.trigger}) — ${Math.round(result.durationMs)}ms`);
91
+ if (!result.success && result.error) {
92
+ console.error(pc.red(result.error.message));
93
+ }
94
+ console.log('\nLogs:');
95
+ for (const logLine of result.logs) {
96
+ console.log(logLine);
97
+ }
98
+ }
99
+ else {
100
+ for (const logLine of result.logs) {
101
+ console.log(logLine);
102
+ }
103
+ }
104
+ return resolveTestExitCode(result, { strictBatch: options.strictBatch });
105
+ }
106
+ export async function runTestCommand(functionName, options = {}) {
107
+ maybeReexecForInspect(options);
108
+ const cwd = options.cwd ?? process.cwd();
109
+ const config = await loadConfig(cwd);
110
+ if (options.all) {
111
+ let exitCode = 0;
112
+ for (const fn of config.functions) {
113
+ const code = await runSingleFunctionTest(fn, options);
114
+ if (code !== 0) {
115
+ exitCode = code;
116
+ }
117
+ }
118
+ return exitCode;
119
+ }
120
+ const fn = resolveFunction(config, functionName);
121
+ return runSingleFunctionTest(fn, options);
122
+ }
123
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Minimal KEY=value parser (no dotenv dependency).
3
+ * Supports optional single/double quotes and # comments.
4
+ */
5
+ export declare function loadEnvFile(cwd?: string): void;
6
+ export { loadEnvFileAt, loadProjectEnv, applyEnvAliases, applyEnvRules } from './project-env.js';
7
+ export type { LoadProjectEnvOptions, ProjectEnvRule } from './project-env.js';
8
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,IAAI,CAO7D;AAED,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjG,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { join } from 'node:path';
2
+ import { loadEnvFileAt } from './project-env.js';
3
+ const ENV_FILE = '.env';
4
+ /**
5
+ * Minimal KEY=value parser (no dotenv dependency).
6
+ * Supports optional single/double quotes and # comments.
7
+ */
8
+ export function loadEnvFile(cwd = process.cwd()) {
9
+ if (process.env.LAMKIT_SKIP_DOTENV === '1') {
10
+ return;
11
+ }
12
+ const envPath = join(cwd, ENV_FILE);
13
+ loadEnvFileAt(envPath, { override: false });
14
+ }
15
+ export { loadEnvFileAt, loadProjectEnv, applyEnvAliases, applyEnvRules } from './project-env.js';
16
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,aAAa,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type MergedConfig } from './merge.js';
2
+ import { type LamkitConfig } from './schema.js';
3
+ export declare class ConfigError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ export declare function findConfigPath(cwd?: string): string | null;
7
+ export declare function loadRawConfig(cwd?: string): Promise<LamkitConfig>;
8
+ export declare function loadConfig(cwd?: string): Promise<MergedConfig>;
9
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAW7E,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAQzE;AAmBD,wBAAsB,aAAa,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsBtF;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAInF"}
@@ -0,0 +1,72 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { extname, join } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { MissingPeerError } from '../peer-resolve.js';
5
+ import { ensureTsxRegistered } from '../util/tsx-register.js';
6
+ import { loadEnvFile } from './env.js';
7
+ import { mergeConfig } from './merge.js';
8
+ import { formatZodError, parseConfig } from './schema.js';
9
+ import { ensureAssetLinks } from '../runtime/asset-links.js';
10
+ import { ZodError } from 'zod';
11
+ const CONFIG_CANDIDATES = [
12
+ 'lamkit.config.ts',
13
+ 'lamkit.config.js',
14
+ 'lamkit.config.mjs',
15
+ 'lamkit.config.cjs',
16
+ ];
17
+ export class ConfigError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = 'ConfigError';
21
+ }
22
+ }
23
+ export function findConfigPath(cwd = process.cwd()) {
24
+ for (const filename of CONFIG_CANDIDATES) {
25
+ const fullPath = join(cwd, filename);
26
+ if (existsSync(fullPath)) {
27
+ return fullPath;
28
+ }
29
+ }
30
+ return null;
31
+ }
32
+ async function importConfigModule(configPath, cwd) {
33
+ if (extname(configPath) === '.ts') {
34
+ try {
35
+ await ensureTsxRegistered(cwd, 'lamkit.config.ts');
36
+ }
37
+ catch (error) {
38
+ if (error instanceof MissingPeerError) {
39
+ throw new ConfigError(error.message);
40
+ }
41
+ throw error;
42
+ }
43
+ }
44
+ const moduleUrl = `${pathToFileURL(configPath).href}?t=${Date.now()}`;
45
+ const imported = await import(moduleUrl);
46
+ return imported.default ?? imported;
47
+ }
48
+ export async function loadRawConfig(cwd = process.cwd()) {
49
+ const configPath = findConfigPath(cwd);
50
+ if (!configPath) {
51
+ throw new ConfigError(`No config file found in ${cwd}. Expected one of: ${CONFIG_CANDIDATES.join(', ')}`);
52
+ }
53
+ try {
54
+ const raw = await importConfigModule(configPath, cwd);
55
+ if (process.env.LAMKIT_ENV_LOADED !== '1') {
56
+ loadEnvFile(cwd);
57
+ }
58
+ return parseConfig(raw);
59
+ }
60
+ catch (error) {
61
+ if (error instanceof ZodError) {
62
+ throw new ConfigError(`Invalid lamkit config:\n${formatZodError(error)}`);
63
+ }
64
+ throw error;
65
+ }
66
+ }
67
+ export async function loadConfig(cwd = process.cwd()) {
68
+ const raw = await loadRawConfig(cwd);
69
+ ensureAssetLinks(cwd, raw.assetLinks);
70
+ return mergeConfig(raw);
71
+ }
72
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { AssetLink, DefaultsConfig, FunctionConfig, LamkitConfig, LogFormat, Trigger } from './types.js';
2
+ /**
3
+ * Fully resolved function config after merging `defaults` and env fallbacks.
4
+ * Used internally by the CLI; exported for tooling and tests.
5
+ */
6
+ export type MergedFunctionConfig = Required<Pick<FunctionConfig, 'name' | 'entry'>> & {
7
+ trigger: Trigger;
8
+ runtime: string;
9
+ memorySize: number;
10
+ timeout: number;
11
+ logFormat: LogFormat;
12
+ tracing: boolean;
13
+ region: string;
14
+ test?: FunctionConfig['test'];
15
+ aws: {
16
+ queueUrl?: string;
17
+ topicArn?: string;
18
+ endpoint?: string;
19
+ };
20
+ };
21
+ /** Config after defaults, env, and per-function fields are merged. */
22
+ export type MergedConfig = {
23
+ defaults: Required<Pick<DefaultsConfig, 'runtime' | 'memorySize' | 'timeout' | 'logFormat' | 'tracing'>> & {
24
+ region: string;
25
+ aws: {
26
+ endpoint?: string;
27
+ };
28
+ };
29
+ assetLinks: AssetLink[];
30
+ functions: MergedFunctionConfig[];
31
+ };
32
+ export declare function mergeConfig(config: LamkitConfig): MergedConfig;
33
+ export declare function resolveFunction(config: MergedConfig, name?: string): MergedFunctionConfig;
34
+ export declare function redactSecrets(value: unknown): unknown;
35
+ export declare function maskUrl(url: string): string;
36
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/config/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,YAAY,EACZ,SAAS,EACT,OAAO,EACR,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CACzC,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,CACvC,GAAG;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B,GAAG,EAAE;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,QAAQ,CAChB,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,CACrF,GAAG;QACF,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE;YACH,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC,CAAC;AAWF,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAqB9D;AAyBD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,oBAAoB,CAkBtB;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAkBrD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK3C"}
@@ -0,0 +1,89 @@
1
+ const DEFAULT_RUNTIME = 'nodejs20.x';
2
+ const DEFAULT_MEMORY = 512;
3
+ const DEFAULT_TIMEOUT = 30;
4
+ const DEFAULT_LOG_FORMAT = 'text';
5
+ const DEFAULT_TRIGGER = 'sqs';
6
+ function resolveRegion(defaults) {
7
+ return (defaults?.aws?.region ??
8
+ process.env.AWS_REGION ??
9
+ process.env.AWS_DEFAULT_REGION ??
10
+ 'us-east-1');
11
+ }
12
+ export function mergeConfig(config) {
13
+ const defaults = config.defaults;
14
+ const mergedDefaults = {
15
+ runtime: defaults?.runtime ?? DEFAULT_RUNTIME,
16
+ memorySize: defaults?.memorySize ?? DEFAULT_MEMORY,
17
+ timeout: defaults?.timeout ?? DEFAULT_TIMEOUT,
18
+ logFormat: defaults?.logFormat ?? DEFAULT_LOG_FORMAT,
19
+ tracing: defaults?.tracing ?? false,
20
+ region: resolveRegion(defaults),
21
+ aws: {
22
+ endpoint: defaults?.aws?.endpoint,
23
+ },
24
+ };
25
+ const functions = config.functions.map((fn) => mergeFunction(fn, mergedDefaults));
26
+ return {
27
+ defaults: mergedDefaults,
28
+ assetLinks: config.assetLinks ?? [],
29
+ functions,
30
+ };
31
+ }
32
+ function mergeFunction(fn, defaults) {
33
+ return {
34
+ name: fn.name,
35
+ entry: fn.entry,
36
+ trigger: fn.trigger ?? DEFAULT_TRIGGER,
37
+ runtime: defaults.runtime,
38
+ memorySize: fn.memorySize ?? defaults.memorySize,
39
+ timeout: fn.timeout ?? defaults.timeout,
40
+ logFormat: fn.logFormat ?? defaults.logFormat,
41
+ tracing: defaults.tracing,
42
+ region: fn.aws?.region ?? defaults.region,
43
+ test: fn.test,
44
+ aws: {
45
+ queueUrl: fn.aws?.queueUrl,
46
+ topicArn: fn.aws?.topicArn,
47
+ endpoint: fn.aws?.endpoint ?? defaults.aws.endpoint,
48
+ },
49
+ };
50
+ }
51
+ export function resolveFunction(config, name) {
52
+ if (!name) {
53
+ if (config.functions.length === 1) {
54
+ return config.functions[0];
55
+ }
56
+ throw new Error(`Function name required. Available: ${config.functions.map((f) => f.name).join(', ')}`);
57
+ }
58
+ const fn = config.functions.find((f) => f.name === name);
59
+ if (!fn) {
60
+ throw new Error(`Unknown function "${name}". Available: ${config.functions.map((f) => f.name).join(', ')}`);
61
+ }
62
+ return fn;
63
+ }
64
+ const SECRET_KEY_PATTERN = /secret|password|token|credential|api[_-]?key/i;
65
+ export function redactSecrets(value) {
66
+ if (Array.isArray(value)) {
67
+ return value.map(redactSecrets);
68
+ }
69
+ if (value && typeof value === 'object') {
70
+ const result = {};
71
+ for (const [key, entry] of Object.entries(value)) {
72
+ if (SECRET_KEY_PATTERN.test(key) && typeof entry === 'string') {
73
+ result[key] = '[REDACTED]';
74
+ }
75
+ else {
76
+ result[key] = redactSecrets(entry);
77
+ }
78
+ }
79
+ return result;
80
+ }
81
+ return value;
82
+ }
83
+ export function maskUrl(url) {
84
+ if (url.length <= 24) {
85
+ return url;
86
+ }
87
+ return `${url.slice(0, 20)}…${url.slice(-8)}`;
88
+ }
89
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/config/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export type ProjectEnvRule = {
2
+ /** All keys must match process.env (e.g. { sslOn: 'true' }). */
3
+ when: Record<string, string>;
4
+ /** Keys to set when the rule matches. */
5
+ set: Record<string, string>;
6
+ };
7
+ export type LoadProjectEnvOptions = {
8
+ /** Paths relative to `cwd` (default process.cwd()). Later files override earlier ones. */
9
+ files?: string[];
10
+ /** When true, do not load `./.env` in the project directory (see loadRawConfig). */
11
+ skipDotenv?: boolean;
12
+ /** Copy `from` → `to` when `from` is set and `to` is not. */
13
+ aliases?: Record<string, string>;
14
+ /** Conditional env assignments (e.g. sslOn → DB_SSL). */
15
+ rules?: ProjectEnvRule[];
16
+ /**
17
+ * When AWS access key looks like a real IAM user (`AKIA*`), remove custom
18
+ * `AWS_ENDPOINT_URL*` overrides so the SDK uses production AWS endpoints.
19
+ */
20
+ stripCustomEndpointForRealAws?: boolean;
21
+ cwd?: string;
22
+ };
23
+ export declare function loadEnvFileAt(filePath: string, options?: {
24
+ override?: boolean;
25
+ }): void;
26
+ export declare function applyEnvAliases(aliases: Record<string, string> | undefined): void;
27
+ export declare function applyEnvRules(rules: ProjectEnvRule[] | undefined): void;
28
+ export declare function stripCustomAwsEndpointsIfRealCredentials(): void;
29
+ /**
30
+ * Load project env files and normalize names — call at the top of `lamkit.config.*`
31
+ * before reading `process.env` in the config object.
32
+ */
33
+ export declare function loadProjectEnv(options?: LoadProjectEnvOptions): void;
34
+ //# sourceMappingURL=project-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-env.d.ts","sourceRoot":"","sources":["../../src/config/project-env.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,oFAAoF;IACpF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yDAAyD;IACzD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB;;;OAGG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAgCF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAMtF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,CAWjF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,SAAS,GAAG,IAAI,CAmBvE;AAED,wBAAgB,wCAAwC,IAAI,IAAI,CAU/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI,CAoBxE"}