Skip to content

esbuild: ensure aws-sdk can be built#3591

Merged
khanayan123 merged 6 commits into
masterfrom
tlhunter/esbuild-aws-sdk
Sep 26, 2023
Merged

esbuild: ensure aws-sdk can be built#3591
khanayan123 merged 6 commits into
masterfrom
tlhunter/esbuild-aws-sdk

Conversation

@tlhunter

@tlhunter tlhunter commented Aug 28, 2023

Copy link
Copy Markdown
Member

What does this PR do?

  • adds an integration test for the aws-sdk library
  • fixes 4.9.0 esbuild plugin causes [Cannot read properties of undefined (reading 'inherit')] on lambda init #3479
  • instead of inserting a "virtual" / "proxy" / intermediary file in the build using the datadog namespace to wrap a module
    • we now inject code into the existing module
    • this fixes a bug where
      • file A is instrumented
      • file A exports a subset of all the things it's going to export
      • file A requires file B
      • file B requires file A and uses an "early" export
      • file B fails as it receives an empty export object instead of the early, partially exported object

Motivation

  • aws-sdk currently fails to build with the dd-trace esbuild plugin

Plugin Checklist

@github-actions

github-actions Bot commented Aug 28, 2023

Copy link
Copy Markdown
Contributor

Overall package size

Self size: 5.22 MB
Deduped: 60.72 MB
No deduping: 60.89 MB

Dependency sizes

name version self size total size
@datadog/native-iast-taint-tracking 1.5.0 14.86 MB 14.86 MB
@datadog/native-appsec 4.0.0 14.83 MB 14.83 MB
@datadog/pprof 3.2.0 10.8 MB 11.64 MB
protobufjs 7.2.4 2.74 MB 6.52 MB
@datadog/native-iast-rewriter 2.1.3 2.23 MB 2.32 MB
@opentelemetry/core 1.14.0 872.87 kB 1.47 MB
@datadog/native-metrics 2.0.0 898.77 kB 1.3 MB
@opentelemetry/api 1.4.1 780.32 kB 780.32 kB
import-in-the-middle 1.4.2 41.4 kB 704.79 kB
msgpack-lite 0.1.26 201.16 kB 281.59 kB
opentracing 0.14.7 194.81 kB 194.81 kB
semver 7.5.4 93.4 kB 123.8 kB
@datadog/sketches-js 2.1.0 109.9 kB 109.9 kB
lodash.sortby 4.7.0 75.76 kB 75.76 kB
lru-cache 7.14.0 74.95 kB 74.95 kB
ipaddr.js 2.1.0 60.23 kB 60.23 kB
ignore 5.2.4 51.22 kB 51.22 kB
int64-buffer 0.1.10 49.18 kB 49.18 kB
istanbul-lib-coverage 3.2.0 29.34 kB 29.34 kB
lodash.uniq 4.5.0 25.01 kB 25.01 kB
limiter 1.1.5 23.17 kB 23.17 kB
retry 0.13.1 18.85 kB 18.85 kB
lodash.kebabcase 4.1.1 17.75 kB 17.75 kB
node-abort-controller 3.1.1 16.89 kB 16.89 kB
lodash.pick 4.4.0 16.33 kB 16.33 kB
crypto-randomuuid 1.0.0 11.18 kB 11.18 kB
diagnostics_channel 1.1.0 7.07 kB 7.07 kB
path-to-regexp 0.1.7 6.78 kB 6.78 kB
koalas 1.0.2 6.47 kB 6.47 kB
methods 1.1.2 5.29 kB 5.29 kB
module-details-from-path 1.0.3 4.47 kB 4.47 kB

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@codecov

codecov Bot commented Aug 28, 2023

Copy link
Copy Markdown

Codecov Report

Merging #3591 (bf6af96) into master (ed839d9) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #3591   +/-   ##
=======================================
  Coverage   84.77%   84.77%           
=======================================
  Files         219      219           
  Lines        8961     8961           
  Branches       33       33           
=======================================
  Hits         7597     7597           
  Misses       1364     1364           

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@pr-commenter

pr-commenter Bot commented Aug 28, 2023

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2023-09-26 00:29:34

Comparing candidate commit bf6af96 in PR branch tlhunter/esbuild-aws-sdk with baseline commit ed839d9 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 384 metrics, 8 unstable metrics.

@khanayan123
khanayan123 force-pushed the tlhunter/esbuild-aws-sdk branch from e84b742 to e62901d Compare September 25, 2023 21:21
Comment thread packages/datadog-esbuild/index.js Outdated
@tlhunter
tlhunter marked this pull request as ready for review September 25, 2023 21:25
@tlhunter
tlhunter requested a review from a team as a code owner September 25, 2023 21:25
Qard
Qard previously approved these changes Sep 25, 2023
// Module code from ${args.path}
(function() {
${fileCode}
})(...arguments);

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For future reviewers: This is for a weird case where a user can access arguments from the root of a commonJS file, which contains [exports, require, module, __filename, __dirname]. Surely nobody would use arguments directly but we've certainly seen weirder things happen.

Comment thread packages/datadog-esbuild/index.js Outdated
@tlhunter

Copy link
Copy Markdown
Member Author

I suspect we may have an issue when a third party module begins with a #! shebang.

@tlhunter

Copy link
Copy Markdown
Member Author

Actually, the shebang shouldn't really matter for modules. It's beneficial for application code but surely it's super rare that a module would use it. I won't block the PR for it.

Qard
Qard previously approved these changes Sep 26, 2023
@khanayan123
khanayan123 merged commit 5494f6b into master Sep 26, 2023
@khanayan123 khanayan123 mentioned this pull request Sep 26, 2023
@khanayan123 khanayan123 mentioned this pull request Sep 26, 2023
khanayan123 added a commit that referenced this pull request Sep 26, 2023
* fix esbuild aws-sdk issue by forgoing use of proxy file in favor of injecting instrumentation code directly into the module code

---------

Co-authored-by: Ayan Khan <[email protected]>
khanayan123 added a commit that referenced this pull request Sep 26, 2023
* fix esbuild aws-sdk issue by forgoing use of proxy file in favor of injecting instrumentation code directly into the module code

---------

Co-authored-by: Ayan Khan <[email protected]>
khanayan123 added a commit that referenced this pull request Sep 27, 2023
* fix esbuild aws-sdk issue by forgoing use of proxy file in favor of injecting instrumentation code directly into the module code

---------

Co-authored-by: Ayan Khan <[email protected]>
khanayan123 added a commit that referenced this pull request Sep 27, 2023
* fix esbuild aws-sdk issue by forgoing use of proxy file in favor of injecting instrumentation code directly into the module code

---------

Co-authored-by: Ayan Khan <[email protected]>
Comment thread package.json
"devDependencies": {
"@types/node": ">=16",
"autocannon": "^4.5.2",
"aws-sdk": "^2.1446.0",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any way to not need this? Can't we use what gets installed in the versions folder somehow? If we start depending on all our integrations this will become way too bloated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4.9.0 esbuild plugin causes [Cannot read properties of undefined (reading 'inherit')] on lambda init

4 participants