Skip to content

Commit f6db763

Browse files
committed
test: add additional esm sandbox assertions
1 parent 2d1fba5 commit f6db763

13 files changed

Lines changed: 83 additions & 23 deletions

File tree

.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU=

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ examples/npm_deps/patches/[email protected]=-442666336
1616
examples/npm_package/libs/lib_a/package.json=-1377103079
1717
examples/npm_package/packages/pkg_a/package.json=1006424040
1818
examples/npm_package/packages/pkg_b/package.json=1041247977
19-
examples/npm_package/packages/pkg_d/package.json=1110895851
20-
examples/npm_package/packages/pkg_e/package.json=-2145239245
19+
examples/npm_package/packages/pkg_d/package.json=1259011357
20+
examples/npm_package/packages/pkg_e/package.json=-1634325215
2121
examples/runfiles/package.json=-1545884645
2222
examples/stack_traces/package.json=2011229626
2323
examples/webpack_cli/package.json=1911342006

examples/macro/mocha.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ def mocha_test(name, srcs, args = [], data = [], env = {}, **kwargs):
2222
# to the location Bazel expects.
2323
"MOCHA_FILE": "$$XML_OUTPUT_FILE",
2424
}),
25+
preserve_symlinks_main = False,
26+
copy_data_to_bin = False,
2527
**kwargs
2628
)

examples/macro/test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const assert = require('assert')
2+
const { dirname } = require('node:path')
23

34
describe('mocha', () => {
45
it('integrates with Bazel', () => {
@@ -8,4 +9,13 @@ describe('mocha', () => {
89
it('is in bazel-out', () => {
910
assert.match(__dirname, /bazel-out/)
1011
})
12+
13+
it('is sandboxed', () => {
14+
assert.match(__dirname, /examples\/macro\/test_\/test\.runfiles/)
15+
assert.match(
16+
__filename,
17+
/-sandbox\/\d+\/execroot\/_main\/bazel-out\/[^/]+\/bin\/examples\/macro\/test_\/test.runfiles\/_main\/examples\/macro\/test\.js/
18+
)
19+
assert.equal(__dirname, dirname(__filename))
20+
})
1121
})

examples/npm_deps/BUILD.bazel

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,31 +265,37 @@ js_test(
265265

266266
write_file(
267267
name = "write9",
268-
out = "case9.js",
269-
content = ["require('@mycorp/pkg-d')"],
268+
out = "case9.mjs",
269+
content = [
270+
"import { sandboxAssert } from '@mycorp/pkg-d'",
271+
"sandboxAssert()",
272+
],
270273
)
271274

272275
js_test(
273276
name = "test9",
274277
data = [
275278
":node_modules/@mycorp/pkg-d",
276279
],
277-
entry_point = "case9.js",
280+
entry_point = "case9.mjs",
278281
)
279282

280283
#######################################
281284
# Case 10: use a first-party npm package a transitive dependency on a monorepo workspace from a js_library target
282285

283286
write_file(
284287
name = "write10",
285-
out = "case10.js",
286-
content = ["require('@mycorp/pkg-e')"],
288+
out = "case10.mjs",
289+
content = [
290+
"import { sandboxAssert } from '@mycorp/pkg-e'",
291+
"sandboxAssert()",
292+
],
287293
)
288294

289295
js_test(
290296
name = "test10",
291297
data = [
292298
":node_modules/@mycorp/pkg-e",
293299
],
294-
entry_point = "case10.js",
300+
entry_point = "case10.mjs",
295301
)

examples/npm_package/packages/pkg_d/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ js_library(
99
"index.js",
1010
"package.json",
1111
],
12+
copy_data_to_bin = False,
1213
visibility = ["//visibility:public"],
1314
# because we're linking this js_library, we must explictly add our npm dependendies to `deps` so
1415
# they are picked up my the linker. npm dependendies in `data` are not propogated through the
Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
/**
22
* @fileoverview minimal test program that requires a third-party package from npm
33
*/
4-
const acorn = require('acorn')
5-
const { v4: uuid } = require('uuid')
4+
import * as acorn from 'acorn'
5+
import { fileURLToPath } from 'node:url'
6+
export { v4 as uuid } from 'uuid'
67

7-
function toAst(program) {
8+
export function toAst(program) {
89
return JSON.stringify(acorn.parse(program, { ecmaVersion: 2020 })) + '\n'
910
}
1011

11-
function getAcornVersion() {
12+
export function getAcornVersion() {
1213
return acorn.version
1314
}
1415

15-
module.exports = {
16-
toAst,
17-
getAcornVersion,
18-
uuid,
16+
export function sandboxAssert() {
17+
const __filename = fileURLToPath(import.meta.url)
18+
19+
if (
20+
!/-sandbox\/\d+\/execroot\/_main\/bazel-out\/[^/]+\/bin\/.*\.runfiles\/.*\/index.js$/.test(
21+
__filename
22+
)
23+
) {
24+
throw new Error(`Not in sandbox: ${__filename}`)
25+
}
1926
}
27+
28+
sandboxAssert()

examples/npm_package/packages/pkg_d/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
{
22
"name": "@mycorp/pkg-d",
3+
"type": "module",
4+
"exports": {
5+
".": {
6+
"import": "./index.js"
7+
}
8+
},
39
"private": true,
410
"dependencies": {
511
"uuid": "8.3.2"

examples/npm_package/packages/pkg_e/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ js_library(
99
"index.js",
1010
"package.json",
1111
],
12+
copy_data_to_bin = False,
1213
visibility = ["//visibility:public"],
1314
# because we're linking this js_library, we must explictly add our npm dependendies to `deps` so
1415
# they are picked up my the linker. npm dependendies in `data` are not propogated through the

examples/npm_package/packages/pkg_e/index.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,23 @@
33
* that defines its package using js_library.
44
*/
55

6-
module.exports = require('@mycorp/pkg-d')
6+
import { fileURLToPath } from 'node:url'
7+
8+
import { sandboxAssert as dSandboxAssert } from '@mycorp/pkg-d'
9+
export { getAcornVersion, toAst, uuid } from '@mycorp/pkg-d'
10+
11+
export function sandboxAssert() {
12+
const __filename = fileURLToPath(import.meta.url)
13+
14+
if (
15+
!/-sandbox\/\d+\/execroot\/_main\/bazel-out\/[^/]+\/bin\/.*\.runfiles\/.*\/index.js$/.test(
16+
__filename
17+
)
18+
) {
19+
throw new Error(`Not in sandbox: ${__filename}`)
20+
}
21+
22+
dSandboxAssert()
23+
}
24+
25+
sandboxAssert()

examples/npm_package/packages/pkg_e/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
{
22
"name": "@mycorp/pkg-e",
3+
"type": "module",
34
"private": true,
5+
"exports": {
6+
".": {
7+
"import": "./index.js"
8+
}
9+
},
410
"dependencies": {
511
"@mycorp/pkg-d": "workspace:*"
612
}

0 commit comments

Comments
 (0)