Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ddTrace esbuild plugin /* @dd-bundle: */ comment expressions PoC #2899

Closed
wants to merge 8 commits into from

Conversation

iunanua
Copy link
Contributor

@iunanua iunanua commented Mar 16, 2023

What does this PR do?

It is only a PoC with a possible solution to embed template files when bundling the tracer.

Modifies ddTrace esbuild plugin to detect /* @dd-bundle: */ comments and replace js code with the result of evaluating expressions contained in the comments (in a quick and simple way)

Example appsec/index.js. A literal replacement.

Before bundler

/* @dd-bundle:const rules = require('./recommended.json') */
const rules = JSON.parse(fs.readFileSync(_config.appsec.rules || path.join(__dirname, 'recommended.json')))    

After

const rules = require_recommended();

Note that our expression const rules = require('./recommended.json') is replaced by the bundler with one call to a internal function.

Example appsec/blocking.js. An evaluated replacement. The expression included in the comment must be evaluated before replacing the original expression.

Before bundler

/* @dd-bundle:templateHtml = ${template('./templates/blocked.html')} */
templateHtml = fs.readFileSync(config.appsec.blockedTemplateHtml)

After

templateHtml = `<!-- Sorry, you've been blocked -->
<!DOCTYPE html>
<html lang="en">

<head>
...
`

Motivation

appsec components are loading from disk some html or json files and when bundling dd-trace-js these files are not included in the final js causing errors (#2841)

Plugin Checklist

Additional Notes

@github-actions
Copy link

github-actions bot commented Mar 16, 2023

Overall package size

Self size: 3.87 MB
Deduped: 57.53 MB
No deduping: 57.57 MB

Dependency sizes

name version self size total size
@datadog/native-iast-taint-tracking 1.1.1 13.38 MB 13.39 MB
@datadog/native-appsec 2.0.0 12.33 MB 12.34 MB
@datadog/pprof 2.0.0 10.47 MB 11.35 MB
@datadog/native-metrics 1.5.0 7.1 MB 7.11 MB
protobufjs 7.1.2 2.76 MB 6.55 MB
@datadog/native-iast-rewriter 2.0.1 2.09 MB 2.1 MB
opentracing 0.14.7 194.81 kB 194.81 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
semver 5.7.1 61.58 kB 61.58 kB
ipaddr.js 2.0.1 59.52 kB 59.52 kB
ignore 5.2.0 48.87 kB 48.87 kB
import-in-the-middle 1.3.4 32.7 kB 37.17 kB
istanbul-lib-coverage 3.2.0 29.34 kB 29.34 kB
retry 0.10.1 27.44 kB 27.44 kB
lodash.uniq 4.5.0 25.01 kB 25.01 kB
limiter 1.1.5 23.17 kB 23.17 kB
lodash.kebabcase 4.1.1 17.75 kB 17.75 kB
lodash.pick 4.4.0 16.33 kB 16.33 kB
node-abort-controller 3.0.1 14.33 kB 14.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
Copy link

codecov bot commented Mar 16, 2023

Codecov Report

Merging #2899 (0023e84) into tlhunter/esbuild (79977f3) will not change coverage.
The diff coverage is 100.00%.

@@                Coverage Diff                @@
##           tlhunter/esbuild    #2899   +/-   ##
=================================================
  Coverage             89.27%   89.27%           
=================================================
  Files                   318      318           
  Lines                 11298    11298           
  Branches                 33       33           
=================================================
  Hits                  10086    10086           
  Misses                 1212     1212           
Impacted Files Coverage Δ
packages/dd-trace/src/appsec/blocking.js 100.00% <ø> (ø)
packages/dd-trace/src/appsec/index.js 100.00% <100.00%> (ø)

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

@pr-commenter
Copy link

pr-commenter bot commented Mar 16, 2023

Benchmarks

Comparing candidate commit 661de0a in PR branch igor/esbuild_ddbundle with baseline commit 79977f3 in branch tlhunter/esbuild.

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

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.

2 participants