Skip to content

Commit 80d9105

Browse files
authored
feat(nodejs): bundling with webpack (#1679)
* feat(nodejs): bundling with webpack * feat(nodejs): load instrumentation packages dynamic * feat(nodejs): load metric and log providers dynamic * feat(nodejs): merge with main branch and update dependency versions
1 parent 51abf3f commit 80d9105

13 files changed

+4116
-1397
lines changed

nodejs/package-lock.json

Lines changed: 2411 additions & 1160 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/bash
2+
3+
set -euf -o pipefail
4+
5+
rm -rf ./build/workspace/node_modules
6+
7+
# Space separated list of external NPM packages
8+
EXTERNAL_PACKAGES=( "import-in-the-middle" )
9+
10+
for EXTERNAL_PACKAGE in "${EXTERNAL_PACKAGES[@]}"
11+
do
12+
echo "Installing external package $EXTERNAL_PACKAGE ..."
13+
14+
PACKAGE_VERSION=$(npm query "#$EXTERNAL_PACKAGE" \
15+
| grep version \
16+
| head -1 \
17+
| awk -F: '{ print $2 }' \
18+
| sed 's/[",]//g')
19+
20+
echo "Resolved version of the external package $EXTERNAL_PACKAGE: $PACKAGE_VERSION"
21+
22+
npm install "$EXTERNAL_PACKAGE@$PACKAGE_VERSION" --prefix ./build/workspace --production --ignore-scripts
23+
24+
echo "Installed external package $EXTERNAL_PACKAGE"
25+
done

nodejs/packages/layer/package-lock.json

Lines changed: 1336 additions & 81 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nodejs/packages/layer/package.json

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,19 @@
55
"description": "Layer including OpenTelemetry SDK for use with AWS Lambda.",
66
"repository": "open-telemetry/opentelemetry-lambda",
77
"scripts": {
8+
"build": "npm run clean && npm run compile && npm run install-externals && npm run package",
89
"clean": "rimraf build/*",
10+
"compile:tsc": "tsc --build tsconfig.json",
11+
"compile:webpack": "webpack",
12+
"compile": "npm run compile:webpack",
13+
"copy-js-files": "copyfiles -f 'src/**/*.js' build/workspace && copyfiles 'test/**/*.js' build",
14+
"copy-esm-files": "copyfiles -f 'src/**/*.mjs' build/workspace && copyfiles 'test/**/*.mjs' build",
15+
"install-externals": "./install-externals.sh",
916
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts",
1017
"lint:fix": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts --fix",
11-
"build": "npm run clean && npm run compile && npm run postcompile",
12-
"copy-esm-files": "copyfiles 'src/**/*.mjs' build && copyfiles 'test/**/*.mjs' build",
13-
"compile": "tsc -p .",
14-
"postcompile": "npm run copy-esm-files && copyfiles 'package*.json' build/workspace/nodejs && npm install --production --ignore-scripts --prefix build/workspace/nodejs && rm build/workspace/nodejs/package.json build/workspace/nodejs/package-lock.json && copyfiles -f 'scripts/*' build/workspace && copyfiles -f 'build/src/*' build/workspace && cd build/workspace && bestzip ../layer.zip *",
15-
"pretest": "npm run compile",
18+
"package": "cd build/workspace && bestzip ../layer.zip *",
19+
"postcompile": "npm run copy-js-files && npm run copy-esm-files && copyfiles -f 'scripts/*' build/workspace && copyfiles -f 'build/src/*.js' build/workspace && copyfiles -f 'build/src/*.mjs' build/workspace",
20+
"pretest": "npm run compile:tsc",
1621
"test:cjs": "mocha 'test/**/*.spec.ts' --exclude 'test/**/*.spec.mjs' --timeout 10000",
1722
"test:esm": "mocha 'test/**/*.spec.mjs' --exclude 'test/**/*.spec.ts' --timeout 10000",
1823
"test": "npm run test:cjs && npm run test:esm"
@@ -52,11 +57,11 @@
5257
"@opentelemetry/instrumentation-mongodb": "^0.51.0",
5358
"@opentelemetry/instrumentation-mysql": "^0.45.0",
5459
"@opentelemetry/instrumentation-net": "^0.43.0",
55-
"@opentelemetry/instrumentation-pg": "^0.50.0",
60+
"@opentelemetry/instrumentation-pg": "^0.51.0",
5661
"@opentelemetry/instrumentation-redis": "^0.46.0",
5762
"@opentelemetry/propagator-aws-xray": "^1.26.0",
58-
"@opentelemetry/propagator-aws-xray-lambda": "^0.53.1",
59-
"@opentelemetry/resource-detector-aws": "^1.10.0",
63+
"@opentelemetry/propagator-aws-xray-lambda": "^0.53.0",
64+
"@opentelemetry/resource-detector-aws": "^1.11.0",
6065
"@opentelemetry/resources": "^1.30.0",
6166
"@opentelemetry/sdk-logs": "^0.57.0",
6267
"@opentelemetry/sdk-metrics": "^1.30.0",
@@ -67,6 +72,11 @@
6772
"@types/sinon": "^17.0.3",
6873
"mocha": "^11.0.1",
6974
"sinon": "^19.0.2",
70-
"ts-node": "^10.9.2"
71-
}
75+
"ts-loader": "^9.5.2",
76+
"ts-node": "^10.9.2",
77+
"webpack": "^5.97.1",
78+
"webpack-cli": "^6.0.1",
79+
"webpack-node-externals": "^3.0.0"
80+
},
81+
"sideEffects": false
7282
}

nodejs/packages/layer/scripts/otel-handler

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -ef -o pipefail
44

5-
export NODE_OPTIONS="${NODE_OPTIONS} --import /opt/loader.mjs --require /opt/wrapper.js"
5+
export NODE_OPTIONS="${NODE_OPTIONS} --import /opt/init.mjs"
66

77
if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then
88
export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}"

nodejs/packages/layer/src/init.mjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const WRAPPER_INIT_START_TIME = Date.now();
2+
const { default: wrapper } = await import('./wrapper.js');
3+
await wrapper.init();
4+
await wrapper.wrap();
5+
console.log('OpenTelemetry wrapper init completed in', Date.now() - WRAPPER_INIT_START_TIME, 'ms');
6+
7+
const LOADER_INIT_START_TIME = Date.now();
8+
await import('./loader.mjs');
9+
console.log('OpenTelemetry loader init completed in', Date.now() - LOADER_INIT_START_TIME, 'ms');

0 commit comments

Comments
 (0)