From 656ca95fa4f4c8f769285ceaef79a8c90d58f989 Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 3 Mar 2025 15:25:11 +0100 Subject: [PATCH 1/3] feat: Window support (#92) --- src/frameworks/cdkFramework.ts | 28 +++++++++++++++---------- src/frameworks/cdkFrameworkWorker.mjs | 3 ++- src/nodeWorker.ts | 30 ++++++++++++++------------- src/nodeWorkerRunner.mjs | 4 +++- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/frameworks/cdkFramework.ts b/src/frameworks/cdkFramework.ts index bf86c9e2..deb37695 100755 --- a/src/frameworks/cdkFramework.ts +++ b/src/frameworks/cdkFramework.ts @@ -1,6 +1,7 @@ import * as esbuild from 'esbuild'; import * as fs from 'fs/promises'; import * as path from 'path'; +import { pathToFileURL } from 'url'; import { BundlingType, LambdaResource } from '../types/resourcesDiscovery.js'; import { outputFolder } from '../constants.js'; import { findPackageJson } from '../utils/findPackageJson.js'; @@ -287,7 +288,11 @@ export class CdkFramework implements IFramework { ? 'js' : (fileExtension as esbuild.Loader); // Inject code to get the file path of the Lambda function and CDK hierarchy - if (args.path.includes('aws-cdk-lib/aws-lambda/lib/function.')) { + if ( + args.path.includes( + path.join('aws-cdk-lib', 'aws-lambda', 'lib', 'function.'), + ) + ) { const codeToFind = 'try{jsiiDeprecationWarnings().aws_cdk_lib_aws_lambda_FunctionProps(props)}'; @@ -487,20 +492,21 @@ export class CdkFramework implements IFramework { compileCodeFile: string; }) { const lambdas: any[] = await new Promise((resolve, reject) => { - const worker = new Worker( + const workerPath = pathToFileURL( path.resolve( path.join(getModuleDirname(), 'frameworks/cdkFrameworkWorker.mjs'), ), - { - workerData: { - verbose: config.verbose, - awsCdkLibPath, - projectDirname: getProjectDirname(), - moduleDirname: getModuleDirname(), - subfolder: config.subfolder, - }, + ).href; + + const worker = new Worker(new URL(workerPath), { + workerData: { + verbose: config.verbose, + awsCdkLibPath, + projectDirname: getProjectDirname(), + moduleDirname: getModuleDirname(), + subfolder: config.subfolder, }, - ); + }); worker.on('message', async (message) => { resolve(message); diff --git a/src/frameworks/cdkFrameworkWorker.mjs b/src/frameworks/cdkFrameworkWorker.mjs index 9f29a1bb..7f779045 100755 --- a/src/frameworks/cdkFrameworkWorker.mjs +++ b/src/frameworks/cdkFrameworkWorker.mjs @@ -1,5 +1,6 @@ // @ts-nocheck import { workerData, parentPort } from 'node:worker_threads'; +import { pathToFileURL } from 'url'; import { Logger } from '../logger.mjs'; Logger.setVerbose(workerData.verbose); @@ -14,7 +15,7 @@ parentPort.on('message', async (data) => { Logger.verbose(`[Worker] Received message`, data); // execute code to get the data into global.lambdas - await import(data.compileOutput); + await import(pathToFileURL(data.compileOutput).href); if (!global.lambdas || global.lambdas?.length === 0) { throw new Error('No Lambda functions found in the CDK code'); diff --git a/src/nodeWorker.ts b/src/nodeWorker.ts index 4ddb09dd..aee2dd9c 100644 --- a/src/nodeWorker.ts +++ b/src/nodeWorker.ts @@ -1,6 +1,7 @@ import { Worker } from 'node:worker_threads'; import { FuctionRequest } from './ioTService.js'; import * as path from 'path'; +import { pathToFileURL } from 'url'; import { Configuration } from './configuration.js'; import { getModuleDirname, getProjectDirname } from './getDirname.js'; import { Logger } from './logger.js'; @@ -125,22 +126,23 @@ function startWorker(input: WorkerRequest) { const localProjectDir = getProjectDirname(); - const worker: MyWorker = new Worker( + const workerPath = pathToFileURL( path.resolve(path.join(getModuleDirname(), `./nodeWorkerRunner.mjs`)), - { - env: { - ...input.environment, - IS_LOCAL: 'true', - LOCAL_PROJECT_DIR: localProjectDir, - }, - execArgv: ['--enable-source-maps'], - workerData: input, - stderr: true, - stdin: true, - stdout: true, - //type: "module", + ).href; + + const worker: MyWorker = new Worker(workerPath, { + env: { + ...input.environment, + IS_LOCAL: 'true', + LOCAL_PROJECT_DIR: localProjectDir, }, - ); + execArgv: ['--enable-source-maps'], + workerData: input, + stderr: true, + stdin: true, + stdout: true, + //type: "module", + }); worker.stdout.on('data', (data: Buffer) => { Logger.log(`[Function ${input.functionId}]`, data.toString()); diff --git a/src/nodeWorkerRunner.mjs b/src/nodeWorkerRunner.mjs index f9a29f1f..2f0cf5fc 100755 --- a/src/nodeWorkerRunner.mjs +++ b/src/nodeWorkerRunner.mjs @@ -1,5 +1,6 @@ // @ts-nocheck import { createRequire as topLevelCreateRequire } from 'module'; +import { pathToFileURL } from 'url'; // eslint-disable-next-line @typescript-eslint/no-unused-vars const require = topLevelCreateRequire(import.meta.url); @@ -14,7 +15,8 @@ Logger.verbose( parentPort.on('message', async (data) => { Logger.verbose(`[Worker ${workerData.workerId}] Received message`, data); try { - const mod = await import(workerData.artifactFile); + const artifactFile = pathToFileURL(workerData.artifactFile).href; + const mod = await import(artifactFile); const fn = mod[workerData.handler]; if (!fn) { From a54e5a0a5e7692394c3ec0b089cd457c74a97901 Mon Sep 17 00:00:00 2001 From: "Marko (ServerlessLife)" Date: Mon, 3 Mar 2025 15:59:43 +0100 Subject: [PATCH 2/3] fix: path --- src/nodeWorker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nodeWorker.ts b/src/nodeWorker.ts index aee2dd9c..8fd54656 100644 --- a/src/nodeWorker.ts +++ b/src/nodeWorker.ts @@ -130,7 +130,7 @@ function startWorker(input: WorkerRequest) { path.resolve(path.join(getModuleDirname(), `./nodeWorkerRunner.mjs`)), ).href; - const worker: MyWorker = new Worker(workerPath, { + const worker: MyWorker = new Worker(new URL(workerPath), { env: { ...input.environment, IS_LOCAL: 'true', From ad4f8e738f58a894138c032b348cf21aff79036d Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 3 Mar 2025 16:16:24 +0100 Subject: [PATCH 3/3] fix: add-bang script --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7030f498..f04738eb 100755 --- a/package.json +++ b/package.json @@ -44,11 +44,11 @@ "lint": "eslint . --fix", "prettier": "prettier . --write", "prepare": "husky", - "add-bang": "printf '#!/usr/bin/env node\\n%s' \"$(cat ./dist/lldebugger.mjs)\" > ./dist/lldebugger.mjs.tmp && mv ./dist/lldebugger.mjs.tmp ./dist/lldebugger.mjs", + "add-bang": "echo '#!/usr/bin/env node' | cat - ./dist/lldebugger.mjs > ./dist/lldebugger.mjs.tmp && mv ./dist/lldebugger.mjs.tmp ./dist/lldebugger.mjs", "build": "tsc -p tsconfig.build.json && cp src/nodeWorkerRunner.mjs dist && cp src/frameworks/cdkFrameworkWorker.mjs dist/frameworks && node fix-imports.js && npm run add-bang && npm run bundle-extension", "bundle-extension": "cd src/extension && npm run build && cd ../../", "deploy-github-role": "aws cloudformation deploy --stack-name lld-deploy-role --template-file cloudformation/gitHubDeployRole.yaml --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --profile lldebugger", - "deploy-tests": "npm run deploy --workspaces", + "deploy-tests": "npm run deploy --workspaces --if-present --parallel", "test": "npm run build && RUN_TEST_FROM_CLI=true vitest run && RUN_TEST_FROM_CLI=true OBSERVABLE_MODE=true vitest run", "test-cdk-basic": "npm run build && RUN_TEST_FROM_CLI=true vitest run test/cdk-basic.test.ts", "test-cdk-basic-observable": "npm run build && RUN_TEST_FROM_CLI=true OBSERVABLE_MODE=true vitest run test/cdk-basic.test.ts",