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.
- package/CHANGELOG.md +72 -0
- package/LICENSE +21 -0
- package/README.md +214 -0
- package/dist/aws/batch-response.d.ts +8 -0
- package/dist/aws/batch-response.d.ts.map +1 -0
- package/dist/aws/batch-response.js +12 -0
- package/dist/aws/batch-response.js.map +1 -0
- package/dist/aws/clients.d.ts +6 -0
- package/dist/aws/clients.d.ts.map +1 -0
- package/dist/aws/clients.js +30 -0
- package/dist/aws/clients.js.map +1 -0
- package/dist/aws/sns-publish.d.ts +10 -0
- package/dist/aws/sns-publish.d.ts.map +1 -0
- package/dist/aws/sns-publish.js +17 -0
- package/dist/aws/sns-publish.js.map +1 -0
- package/dist/aws/sqs-listen.d.ts +17 -0
- package/dist/aws/sqs-listen.d.ts.map +1 -0
- package/dist/aws/sqs-listen.js +113 -0
- package/dist/aws/sqs-listen.js.map +1 -0
- package/dist/aws/sqs-process.d.ts +39 -0
- package/dist/aws/sqs-process.d.ts.map +1 -0
- package/dist/aws/sqs-process.js +95 -0
- package/dist/aws/sqs-process.js.map +1 -0
- package/dist/aws/sqs-send.d.ts +15 -0
- package/dist/aws/sqs-send.d.ts.map +1 -0
- package/dist/aws/sqs-send.js +27 -0
- package/dist/aws/sqs-send.js.map +1 -0
- package/dist/aws/sqs-visibility.d.ts +10 -0
- package/dist/aws/sqs-visibility.d.ts.map +1 -0
- package/dist/aws/sqs-visibility.js +29 -0
- package/dist/aws/sqs-visibility.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +187 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +5 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +8 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +24 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +59 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +23 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/listen.d.ts +20 -0
- package/dist/commands/listen.d.ts.map +1 -0
- package/dist/commands/listen.js +36 -0
- package/dist/commands/listen.js.map +1 -0
- package/dist/commands/send.d.ts +17 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +51 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/test.d.ts +23 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +123 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/config/env.d.ts +8 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +16 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/load.d.ts +9 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +72 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/merge.d.ts +36 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +89 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/project-env.d.ts +34 -0
- package/dist/config/project-env.d.ts.map +1 -0
- package/dist/config/project-env.js +90 -0
- package/dist/config/project-env.js.map +1 -0
- package/dist/config/schema.d.ts +27 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +123 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +167 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/events/apigw.d.ts +41 -0
- package/dist/events/apigw.d.ts.map +1 -0
- package/dist/events/apigw.js +43 -0
- package/dist/events/apigw.js.map +1 -0
- package/dist/events/eventbridge.d.ts +16 -0
- package/dist/events/eventbridge.d.ts.map +1 -0
- package/dist/events/eventbridge.js +19 -0
- package/dist/events/eventbridge.js.map +1 -0
- package/dist/events/index.d.ts +17 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +50 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/s3.d.ts +45 -0
- package/dist/events/s3.d.ts.map +1 -0
- package/dist/events/s3.js +44 -0
- package/dist/events/s3.js.map +1 -0
- package/dist/events/schedule.d.ts +12 -0
- package/dist/events/schedule.d.ts.map +1 -0
- package/dist/events/schedule.js +15 -0
- package/dist/events/schedule.js.map +1 -0
- package/dist/events/sns.d.ts +24 -0
- package/dist/events/sns.d.ts.map +1 -0
- package/dist/events/sns.js +31 -0
- package/dist/events/sns.js.map +1 -0
- package/dist/events/sqs-record.d.ts +44 -0
- package/dist/events/sqs-record.d.ts.map +1 -0
- package/dist/events/sqs-record.js +75 -0
- package/dist/events/sqs-record.js.map +1 -0
- package/dist/events/sqs.d.ts +21 -0
- package/dist/events/sqs.d.ts.map +1 -0
- package/dist/events/sqs.js +28 -0
- package/dist/events/sqs.js.map +1 -0
- package/dist/events/util.d.ts +2 -0
- package/dist/events/util.d.ts.map +1 -0
- package/dist/events/util.js +7 -0
- package/dist/events/util.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/peer-resolve.d.ts +5 -0
- package/dist/peer-resolve.d.ts.map +1 -0
- package/dist/peer-resolve.js +44 -0
- package/dist/peer-resolve.js.map +1 -0
- package/dist/runtime/asset-links.d.ts +15 -0
- package/dist/runtime/asset-links.d.ts.map +1 -0
- package/dist/runtime/asset-links.js +42 -0
- package/dist/runtime/asset-links.js.map +1 -0
- package/dist/runtime/clear-caches.d.ts +5 -0
- package/dist/runtime/clear-caches.d.ts.map +1 -0
- package/dist/runtime/clear-caches.js +8 -0
- package/dist/runtime/clear-caches.js.map +1 -0
- package/dist/runtime/context.d.ts +10 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +42 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/handler-cache.d.ts +6 -0
- package/dist/runtime/handler-cache.d.ts.map +1 -0
- package/dist/runtime/handler-cache.js +14 -0
- package/dist/runtime/handler-cache.js.map +1 -0
- package/dist/runtime/invoke.d.ts +32 -0
- package/dist/runtime/invoke.d.ts.map +1 -0
- package/dist/runtime/invoke.js +111 -0
- package/dist/runtime/invoke.js.map +1 -0
- package/dist/runtime/loader.d.ts +17 -0
- package/dist/runtime/loader.d.ts.map +1 -0
- package/dist/runtime/loader.js +76 -0
- package/dist/runtime/loader.js.map +1 -0
- package/dist/runtime/logs.d.ts +19 -0
- package/dist/runtime/logs.d.ts.map +1 -0
- package/dist/runtime/logs.js +125 -0
- package/dist/runtime/logs.js.map +1 -0
- package/dist/util/payload.d.ts +13 -0
- package/dist/util/payload.d.ts.map +1 -0
- package/dist/util/payload.js +40 -0
- package/dist/util/payload.js.map +1 -0
- package/dist/util/tsx-register.d.ts +4 -0
- package/dist/util/tsx-register.d.ts.map +1 -0
- package/dist/util/tsx-register.js +27 -0
- package/dist/util/tsx-register.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/docs/README.md +23 -0
- package/docs/commands.md +294 -0
- package/docs/configuration.md +652 -0
- package/docs/getting-started.md +400 -0
- package/docs/recipes.md +743 -0
- package/docs/troubleshooting.md +393 -0
- package/package.json +76 -0
- package/templates/.env.example +5 -0
- package/templates/.vscode/launch.json +14 -0
- package/templates/events/sample.json +4 -0
- package/templates/lamkit.config.js +38 -0
- package/templates/lamkit.config.ts +27 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
let coldStart = true;
|
|
3
|
+
let initDurationMs;
|
|
4
|
+
export function resetColdStart() {
|
|
5
|
+
coldStart = true;
|
|
6
|
+
initDurationMs = undefined;
|
|
7
|
+
}
|
|
8
|
+
export function isColdStart() {
|
|
9
|
+
return coldStart;
|
|
10
|
+
}
|
|
11
|
+
export function markWarm() {
|
|
12
|
+
coldStart = false;
|
|
13
|
+
}
|
|
14
|
+
export function setInitDurationMs(ms) {
|
|
15
|
+
initDurationMs = ms;
|
|
16
|
+
}
|
|
17
|
+
export function getInitDurationMs() {
|
|
18
|
+
return initDurationMs;
|
|
19
|
+
}
|
|
20
|
+
export function createContext(fn) {
|
|
21
|
+
const requestId = randomUUID();
|
|
22
|
+
const startedAt = Date.now();
|
|
23
|
+
const timeoutMs = fn.timeout * 1000;
|
|
24
|
+
return {
|
|
25
|
+
callbackWaitsForEmptyEventLoop: true,
|
|
26
|
+
functionName: fn.name,
|
|
27
|
+
functionVersion: '$LATEST',
|
|
28
|
+
invokedFunctionArn: `arn:aws:lambda:${fn.region}:000000000000:function:${fn.name}`,
|
|
29
|
+
memoryLimitInMB: String(fn.memorySize),
|
|
30
|
+
awsRequestId: requestId,
|
|
31
|
+
logGroupName: `/aws/lambda/${fn.name}`,
|
|
32
|
+
logStreamName: new Date().toISOString().slice(0, 10).replace(/-/g, '/') + '/[$LATEST]',
|
|
33
|
+
getRemainingTimeInMillis: () => Math.max(0, timeoutMs - (Date.now() - startedAt)),
|
|
34
|
+
done: () => undefined,
|
|
35
|
+
fail: () => undefined,
|
|
36
|
+
succeed: () => undefined,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function getRequestId(context) {
|
|
40
|
+
return context.awsRequestId;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,IAAI,cAAkC,CAAC;AAEvC,MAAM,UAAU,cAAc;IAC5B,SAAS,GAAG,IAAI,CAAC;IACjB,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,cAAc,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAwB;IACpD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;IAEpC,OAAO;QACL,8BAA8B,EAAE,IAAI;QACpC,YAAY,EAAE,EAAE,CAAC,IAAI;QACrB,eAAe,EAAE,SAAS;QAC1B,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,MAAM,0BAA0B,EAAE,CAAC,IAAI,EAAE;QAClF,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;QACtC,YAAY,EAAE,SAAS;QACvB,YAAY,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE;QACtC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,YAAY;QACtF,wBAAwB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACjF,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;QACrB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;QACrB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO,OAAO,CAAC,YAAY,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Handler } from './invoke.js';
|
|
2
|
+
export declare function handlerCacheKey(cwd: string, entryPath: string): string;
|
|
3
|
+
export declare function getCachedHandler(key: string): Handler | undefined;
|
|
4
|
+
export declare function setCachedHandler(key: string, handler: Handler): void;
|
|
5
|
+
export declare function clearPlainHandlerCache(): void;
|
|
6
|
+
//# sourceMappingURL=handler-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-cache.d.ts","sourceRoot":"","sources":["../../src/runtime/handler-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEjE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAEpE;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const handlerCache = new Map();
|
|
2
|
+
export function handlerCacheKey(cwd, entryPath) {
|
|
3
|
+
return `${cwd}\0${entryPath}`;
|
|
4
|
+
}
|
|
5
|
+
export function getCachedHandler(key) {
|
|
6
|
+
return handlerCache.get(key);
|
|
7
|
+
}
|
|
8
|
+
export function setCachedHandler(key, handler) {
|
|
9
|
+
handlerCache.set(key, handler);
|
|
10
|
+
}
|
|
11
|
+
export function clearPlainHandlerCache() {
|
|
12
|
+
handlerCache.clear();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=handler-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-cache.js","sourceRoot":"","sources":["../../src/runtime/handler-cache.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEhD,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,SAAiB;IAC5D,OAAO,GAAG,GAAG,KAAK,SAAS,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAgB;IAC5D,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Context } from 'aws-lambda';
|
|
2
|
+
import { type LogCapture } from './logs.js';
|
|
3
|
+
import type { MergedFunctionConfig } from '../config/merge.js';
|
|
4
|
+
/** Lambda handler signature — same as production `export const handler`. */
|
|
5
|
+
export type Handler = (event: unknown, context: Context, callback?: (error?: Error | string | null, result?: unknown) => void) => unknown | Promise<unknown>;
|
|
6
|
+
/** Result of a local `invokeHandler()` call. */
|
|
7
|
+
export type InvokeResult = {
|
|
8
|
+
/** Simulated AWS request ID (UUID). */
|
|
9
|
+
requestId: string;
|
|
10
|
+
/** Wall-clock handler duration in milliseconds. */
|
|
11
|
+
durationMs: number;
|
|
12
|
+
/** Billed duration rounded up to 1 ms (matches Lambda REPORT). */
|
|
13
|
+
billedDurationMs: number;
|
|
14
|
+
/** Full stdout including START / END / REPORT lines. */
|
|
15
|
+
logs: string[];
|
|
16
|
+
/** Application `console.log` output only. */
|
|
17
|
+
applicationLogs: string[];
|
|
18
|
+
/** Handler return value when `success` is true. */
|
|
19
|
+
result?: unknown;
|
|
20
|
+
/** Thrown error when `success` is false. */
|
|
21
|
+
error?: Error;
|
|
22
|
+
/** False when the handler threw or timed out. */
|
|
23
|
+
success: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare class InvokeTimeoutError extends Error {
|
|
26
|
+
constructor(timeoutSeconds: number);
|
|
27
|
+
}
|
|
28
|
+
export declare function invokeHandler(handler: Handler, event: unknown, fn: MergedFunctionConfig, options?: {
|
|
29
|
+
context?: Context;
|
|
30
|
+
logCapture?: LogCapture;
|
|
31
|
+
}): Promise<InvokeResult>;
|
|
32
|
+
//# sourceMappingURL=invoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/runtime/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,4EAA4E;AAC5E,MAAM,MAAM,OAAO,GAAG,CACpB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,KACjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,gDAAgD;AAChD,MAAM,MAAM,YAAY,GAAG;IACzB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6CAA6C;IAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,cAAc,EAAE,MAAM;CAInC;AA6ED,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,EAAE,EAAE,oBAAoB,EACxB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GACvD,OAAO,CAAC,YAAY,CAAC,CAmDvB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { createLogCapture, emitInvokeLogs, patchConsole, } from './logs.js';
|
|
2
|
+
import { createContext } from './context.js';
|
|
3
|
+
export class InvokeTimeoutError extends Error {
|
|
4
|
+
constructor(timeoutSeconds) {
|
|
5
|
+
super(`Task timed out after ${timeoutSeconds} seconds`);
|
|
6
|
+
this.name = 'InvokeTimeoutError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function invokeWithCallback(handler, event, context) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
let settled = false;
|
|
12
|
+
const callback = (error, result) => {
|
|
13
|
+
if (settled) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
settled = true;
|
|
17
|
+
if (error) {
|
|
18
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
resolve(result);
|
|
22
|
+
};
|
|
23
|
+
try {
|
|
24
|
+
const maybePromise = handler(event, context, callback);
|
|
25
|
+
if (maybePromise && typeof maybePromise.then === 'function') {
|
|
26
|
+
maybePromise
|
|
27
|
+
.then((result) => {
|
|
28
|
+
if (!settled) {
|
|
29
|
+
settled = true;
|
|
30
|
+
resolve(result);
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
.catch((error) => {
|
|
34
|
+
if (!settled) {
|
|
35
|
+
settled = true;
|
|
36
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else if (!settled) {
|
|
41
|
+
settled = true;
|
|
42
|
+
resolve(maybePromise);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (!settled) {
|
|
47
|
+
settled = true;
|
|
48
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async function runHandler(handler, event, context) {
|
|
54
|
+
const timeoutMs = context.getRemainingTimeInMillis();
|
|
55
|
+
let timeoutId;
|
|
56
|
+
try {
|
|
57
|
+
const result = await Promise.race([
|
|
58
|
+
invokeWithCallback(handler, event, context),
|
|
59
|
+
new Promise((_, reject) => {
|
|
60
|
+
timeoutId = setTimeout(() => {
|
|
61
|
+
reject(new InvokeTimeoutError(Math.ceil(timeoutMs / 1000)));
|
|
62
|
+
}, timeoutMs);
|
|
63
|
+
}),
|
|
64
|
+
]);
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
if (timeoutId !== undefined) {
|
|
69
|
+
clearTimeout(timeoutId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export async function invokeHandler(handler, event, fn, options) {
|
|
74
|
+
const context = options?.context ?? createContext(fn);
|
|
75
|
+
const capture = options?.logCapture ?? createLogCapture();
|
|
76
|
+
const applicationLogs = [];
|
|
77
|
+
const consolePatch = patchConsole((line) => applicationLogs.push(line));
|
|
78
|
+
const startedAt = Date.now();
|
|
79
|
+
try {
|
|
80
|
+
const result = await runHandler(handler, event, context);
|
|
81
|
+
const durationMs = Date.now() - startedAt;
|
|
82
|
+
const awsLogs = emitInvokeLogs(capture, context.awsRequestId, durationMs, fn, applicationLogs);
|
|
83
|
+
return {
|
|
84
|
+
requestId: context.awsRequestId,
|
|
85
|
+
durationMs,
|
|
86
|
+
billedDurationMs: Math.ceil(durationMs / 100) * 100,
|
|
87
|
+
logs: awsLogs,
|
|
88
|
+
applicationLogs,
|
|
89
|
+
result,
|
|
90
|
+
success: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const durationMs = Date.now() - startedAt;
|
|
95
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
96
|
+
const awsLogs = emitInvokeLogs(capture, context.awsRequestId, durationMs, fn, [...applicationLogs, err.stack ?? err.message]);
|
|
97
|
+
return {
|
|
98
|
+
requestId: context.awsRequestId,
|
|
99
|
+
durationMs,
|
|
100
|
+
billedDurationMs: Math.ceil(durationMs / 100) * 100,
|
|
101
|
+
logs: awsLogs,
|
|
102
|
+
applicationLogs,
|
|
103
|
+
error: err,
|
|
104
|
+
success: false,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
consolePatch.restore();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=invoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/runtime/invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MergedFunctionConfig } from '../config/merge.js';
|
|
2
|
+
import type { Handler } from './invoke.js';
|
|
3
|
+
export { clearAllHandlerCaches, clearHandlerCache } from './clear-caches.js';
|
|
4
|
+
export declare class HandlerLoadError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveEntryPath(entry: string, cwd?: string): string;
|
|
8
|
+
export declare function importEntryModule(entryPath: string, cwd?: string, options?: {
|
|
9
|
+
reload?: boolean;
|
|
10
|
+
}): Promise<Record<string, unknown>>;
|
|
11
|
+
export declare function extractHandler(moduleExports: Record<string, unknown>): Handler;
|
|
12
|
+
export type LoadHandlerOptions = {
|
|
13
|
+
/** Bypass the handler module cache (same as `lamkit test --reload`). */
|
|
14
|
+
reload?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function loadHandler(fn: MergedFunctionConfig, cwd?: string, options?: LoadHandlerOptions): Promise<Handler>;
|
|
17
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/runtime/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAqBnF;AAkBD,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAsB,EAC3B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAclC;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAU9E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wBAAsB,WAAW,CAC/B,EAAE,EAAE,oBAAoB,EACxB,GAAG,GAAE,MAAsB,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAelB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { extname, join, relative, resolve } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { getCachedHandler, handlerCacheKey, setCachedHandler, } from './handler-cache.js';
|
|
5
|
+
export { clearAllHandlerCaches, clearHandlerCache } from './clear-caches.js';
|
|
6
|
+
export class HandlerLoadError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'HandlerLoadError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function resolveEntryPath(entry, cwd = process.cwd()) {
|
|
13
|
+
const absoluteEntry = resolve(cwd, entry);
|
|
14
|
+
if (extname(absoluteEntry) !== '.ts') {
|
|
15
|
+
return absoluteEntry;
|
|
16
|
+
}
|
|
17
|
+
const rel = relative(cwd, absoluteEntry);
|
|
18
|
+
if (rel.startsWith('src/')) {
|
|
19
|
+
const distPath = join(cwd, rel.replace(/^src\//, 'dist/').replace(/\.ts$/, '.js'));
|
|
20
|
+
if (existsSync(distPath)) {
|
|
21
|
+
return distPath;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const jsSibling = absoluteEntry.replace(/\.ts$/, '.js');
|
|
25
|
+
if (existsSync(jsSibling)) {
|
|
26
|
+
return jsSibling;
|
|
27
|
+
}
|
|
28
|
+
return absoluteEntry;
|
|
29
|
+
}
|
|
30
|
+
import { MissingPeerError } from '../peer-resolve.js';
|
|
31
|
+
import { ensureTsxRegistered } from '../util/tsx-register.js';
|
|
32
|
+
async function ensureHandlerTsxRegistered(cwd) {
|
|
33
|
+
try {
|
|
34
|
+
await ensureTsxRegistered(cwd, 'TypeScript handler entries');
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof MissingPeerError) {
|
|
38
|
+
throw new HandlerLoadError(error.message);
|
|
39
|
+
}
|
|
40
|
+
throw new HandlerLoadError('TypeScript handler entry requires the optional peer "tsx". Install with: npm i -D tsx');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function importEntryModule(entryPath, cwd = process.cwd(), options) {
|
|
44
|
+
const resolved = resolveEntryPath(entryPath, cwd);
|
|
45
|
+
if (resolved.endsWith('.ts')) {
|
|
46
|
+
await ensureHandlerTsxRegistered(cwd);
|
|
47
|
+
}
|
|
48
|
+
if (!existsSync(resolved)) {
|
|
49
|
+
throw new HandlerLoadError(`Handler entry not found: ${resolved}`);
|
|
50
|
+
}
|
|
51
|
+
const cacheBust = options?.reload ? `?t=${Date.now()}` : '';
|
|
52
|
+
const moduleUrl = `${pathToFileURL(resolved).href}${cacheBust}`;
|
|
53
|
+
return (await import(moduleUrl));
|
|
54
|
+
}
|
|
55
|
+
export function extractHandler(moduleExports) {
|
|
56
|
+
const candidate = moduleExports.handler ?? moduleExports.default;
|
|
57
|
+
if (typeof candidate !== 'function') {
|
|
58
|
+
throw new HandlerLoadError('Handler entry must export a named "handler" or default async function export.');
|
|
59
|
+
}
|
|
60
|
+
return candidate;
|
|
61
|
+
}
|
|
62
|
+
export async function loadHandler(fn, cwd = process.cwd(), options) {
|
|
63
|
+
const resolved = resolveEntryPath(fn.entry, cwd);
|
|
64
|
+
const cacheKey = handlerCacheKey(cwd, resolved);
|
|
65
|
+
if (!options?.reload) {
|
|
66
|
+
const cached = getCachedHandler(cacheKey);
|
|
67
|
+
if (cached) {
|
|
68
|
+
return cached;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const moduleExports = await importEntryModule(fn.entry, cwd, options);
|
|
72
|
+
const handler = extractHandler(moduleExports);
|
|
73
|
+
setCachedHandler(cacheKey, handler);
|
|
74
|
+
return handler;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/runtime/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MergedFunctionConfig } from '../config/merge.js';
|
|
2
|
+
export type LogCapture = {
|
|
3
|
+
lines: string[];
|
|
4
|
+
write(line: string): void;
|
|
5
|
+
};
|
|
6
|
+
export declare function createLogCapture(): LogCapture;
|
|
7
|
+
export declare function formatStart(requestId: string): string;
|
|
8
|
+
export declare function formatEnd(requestId: string): string;
|
|
9
|
+
export declare function roundBilledDuration(durationMs: number): number;
|
|
10
|
+
export declare function formatReport(requestId: string, durationMs: number, fn: MergedFunctionConfig, options?: {
|
|
11
|
+
initDurationMs?: number;
|
|
12
|
+
}): string;
|
|
13
|
+
export declare function resolveInitDuration(cold: boolean, initDurationMs?: number): number | undefined;
|
|
14
|
+
export type ConsolePatch = {
|
|
15
|
+
restore(): void;
|
|
16
|
+
};
|
|
17
|
+
export declare function patchConsole(write: (line: string) => void): ConsolePatch;
|
|
18
|
+
export declare function emitInvokeLogs(capture: LogCapture, requestId: string, durationMs: number, fn: MergedFunctionConfig, applicationLines: string[]): string[];
|
|
19
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/runtime/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,UAAU,CAQ7C;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,oBAAoB,EACxB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC,MAAM,CAoBR;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK9F;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAIF,wBAAgB,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,YAAY,CAoCxE;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,oBAAoB,EACxB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,EAAE,CA2BV"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { getInitDurationMs, isColdStart, markWarm } from './context.js';
|
|
2
|
+
export function createLogCapture() {
|
|
3
|
+
const lines = [];
|
|
4
|
+
return {
|
|
5
|
+
lines,
|
|
6
|
+
write(line) {
|
|
7
|
+
lines.push(line);
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function formatStart(requestId) {
|
|
12
|
+
return `START RequestId: ${requestId} Version: $LATEST`;
|
|
13
|
+
}
|
|
14
|
+
export function formatEnd(requestId) {
|
|
15
|
+
return `END RequestId: ${requestId}`;
|
|
16
|
+
}
|
|
17
|
+
export function roundBilledDuration(durationMs) {
|
|
18
|
+
return Math.ceil(durationMs / 100) * 100;
|
|
19
|
+
}
|
|
20
|
+
export function formatReport(requestId, durationMs, fn, options) {
|
|
21
|
+
const billed = roundBilledDuration(durationMs);
|
|
22
|
+
const parts = [
|
|
23
|
+
`REPORT RequestId: ${requestId}`,
|
|
24
|
+
`Duration: ${durationMs.toFixed(2)} ms`,
|
|
25
|
+
`Billed Duration: ${billed} ms`,
|
|
26
|
+
];
|
|
27
|
+
if (options?.initDurationMs !== undefined && options.initDurationMs > 0) {
|
|
28
|
+
parts.push(`Init Duration: ${options.initDurationMs.toFixed(2)} ms`);
|
|
29
|
+
}
|
|
30
|
+
parts.push(`Memory Size: ${fn.memorySize} MB`);
|
|
31
|
+
parts.push(`Max Memory Used: ${Math.min(fn.memorySize, Math.max(64, Math.ceil(fn.memorySize * 0.12)))} MB`);
|
|
32
|
+
if (fn.tracing) {
|
|
33
|
+
parts.push('X-Ray Trace Id: local-dev-trace');
|
|
34
|
+
}
|
|
35
|
+
return parts.join('\t');
|
|
36
|
+
}
|
|
37
|
+
export function resolveInitDuration(cold, initDurationMs) {
|
|
38
|
+
if (!cold) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return initDurationMs ?? 0;
|
|
42
|
+
}
|
|
43
|
+
const consoleMethods = ['log', 'info', 'warn', 'error', 'debug'];
|
|
44
|
+
export function patchConsole(write) {
|
|
45
|
+
const originals = new Map();
|
|
46
|
+
for (const method of consoleMethods) {
|
|
47
|
+
const original = console[method];
|
|
48
|
+
originals.set(method, original.bind(console));
|
|
49
|
+
console[method] = (...args) => {
|
|
50
|
+
const formatted = args
|
|
51
|
+
.map((arg) => {
|
|
52
|
+
if (typeof arg === 'string') {
|
|
53
|
+
return arg;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return JSON.stringify(arg);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return String(arg);
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
.join(' ');
|
|
63
|
+
write(formatted);
|
|
64
|
+
original(...args);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
restore() {
|
|
69
|
+
for (const method of consoleMethods) {
|
|
70
|
+
const original = originals.get(method);
|
|
71
|
+
if (original) {
|
|
72
|
+
console[method] = original;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function emitInvokeLogs(capture, requestId, durationMs, fn, applicationLines) {
|
|
79
|
+
const initDurationMs = resolveInitDuration(isColdStart(), getInitDurationMs());
|
|
80
|
+
markWarm();
|
|
81
|
+
if (fn.logFormat === 'json') {
|
|
82
|
+
return emitJsonInvokeLogs(capture, requestId, durationMs, fn, applicationLines, initDurationMs);
|
|
83
|
+
}
|
|
84
|
+
const awsLines = [
|
|
85
|
+
formatStart(requestId),
|
|
86
|
+
...applicationLines,
|
|
87
|
+
formatEnd(requestId),
|
|
88
|
+
formatReport(requestId, durationMs, fn, { initDurationMs }),
|
|
89
|
+
];
|
|
90
|
+
for (const line of awsLines) {
|
|
91
|
+
capture.write(line);
|
|
92
|
+
}
|
|
93
|
+
return awsLines;
|
|
94
|
+
}
|
|
95
|
+
function jsonLogLine(type, record) {
|
|
96
|
+
return JSON.stringify({
|
|
97
|
+
time: new Date().toISOString(),
|
|
98
|
+
type,
|
|
99
|
+
record,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function emitJsonInvokeLogs(capture, requestId, durationMs, fn, applicationLines, initDurationMs) {
|
|
103
|
+
const billed = roundBilledDuration(durationMs);
|
|
104
|
+
const awsLines = [
|
|
105
|
+
jsonLogLine('platform.start', { requestId, version: '$LATEST' }),
|
|
106
|
+
...applicationLines.map((message) => jsonLogLine('platform.log', { requestId, message })),
|
|
107
|
+
jsonLogLine('platform.end', { requestId }),
|
|
108
|
+
jsonLogLine('platform.report', {
|
|
109
|
+
requestId,
|
|
110
|
+
durationMs,
|
|
111
|
+
billedDurationMs: billed,
|
|
112
|
+
...(initDurationMs !== undefined && initDurationMs > 0
|
|
113
|
+
? { initDurationMs }
|
|
114
|
+
: {}),
|
|
115
|
+
memorySizeMb: fn.memorySize,
|
|
116
|
+
maxMemoryUsedMb: Math.min(fn.memorySize, Math.max(64, Math.ceil(fn.memorySize * 0.12))),
|
|
117
|
+
...(fn.tracing ? { traceId: 'local-dev-trace' } : {}),
|
|
118
|
+
}),
|
|
119
|
+
];
|
|
120
|
+
for (const line of awsLines) {
|
|
121
|
+
capture.write(line);
|
|
122
|
+
}
|
|
123
|
+
return awsLines;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/runtime/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type PayloadSourceOptions = {
|
|
2
|
+
data?: string;
|
|
3
|
+
dataFile?: string;
|
|
4
|
+
message?: string;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function readPayloadFile(filePath: string, cwd?: string): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* Resolve CLI payload from --data, --data-file, --message, or @path shorthand.
|
|
10
|
+
* --message returns a raw string body; --data/--data-file parse JSON when possible.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolvePayload(options: PayloadSourceOptions): unknown | undefined;
|
|
13
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/util/payload.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAYtF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,GAAG,SAAS,CAsBjF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
3
|
+
export function readPayloadFile(filePath, cwd = process.cwd()) {
|
|
4
|
+
const resolved = isAbsolute(filePath) ? filePath : resolve(cwd, filePath);
|
|
5
|
+
if (!existsSync(resolved)) {
|
|
6
|
+
throw new Error(`Payload file not found: ${resolved}`);
|
|
7
|
+
}
|
|
8
|
+
const raw = readFileSync(resolved, 'utf8');
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(raw);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return raw;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolve CLI payload from --data, --data-file, --message, or @path shorthand.
|
|
18
|
+
* --message returns a raw string body; --data/--data-file parse JSON when possible.
|
|
19
|
+
*/
|
|
20
|
+
export function resolvePayload(options) {
|
|
21
|
+
if (options.message !== undefined) {
|
|
22
|
+
return options.message;
|
|
23
|
+
}
|
|
24
|
+
if (options.dataFile !== undefined) {
|
|
25
|
+
return readPayloadFile(options.dataFile, options.cwd);
|
|
26
|
+
}
|
|
27
|
+
if (options.data === undefined) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
if (options.data.startsWith('@')) {
|
|
31
|
+
return readPayloadFile(options.data.slice(1), options.cwd);
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(options.data);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return options.data;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/util/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAShD,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAA6B;IAC1D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAY,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsx-register.d.ts","sourceRoot":"","sources":["../../src/util/tsx-register.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrF;AAED,8BAA8B;AAC9B,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { importPeerFromConsumer, MissingPeerError } from '../peer-resolve.js';
|
|
2
|
+
let tsxRegistered = false;
|
|
3
|
+
export async function ensureTsxRegistered(cwd, feature) {
|
|
4
|
+
if (tsxRegistered) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const mod = await importPeerFromConsumer(cwd, 'tsx/esm/api', feature);
|
|
9
|
+
const register = mod.register;
|
|
10
|
+
if (typeof register !== 'function') {
|
|
11
|
+
throw new Error('tsx register() not found');
|
|
12
|
+
}
|
|
13
|
+
register();
|
|
14
|
+
tsxRegistered = true;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error instanceof MissingPeerError) {
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`TypeScript support requires the optional peer "tsx". Install with: npm i -D tsx (${feature})`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Visible for tests only. */
|
|
24
|
+
export function resetTsxRegistrationForTests() {
|
|
25
|
+
tsxRegistered = false;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=tsx-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsx-register.js","sourceRoot":"","sources":["../../src/util/tsx-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,OAAe;IACpE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAoC,CAAC;QAC1D,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,QAAQ,EAAE,CAAC;QACX,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CACb,oFAAoF,OAAO,GAAG,CAC/F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,4BAA4B;IAC1C,aAAa,GAAG,KAAK,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
|