File tree 2 files changed +55
-5
lines changed
2 files changed +55
-5
lines changed Original file line number Diff line number Diff line change 7
7
ObjectSetPrototypeOf,
8
8
SafeArrayIterator,
9
9
SafeSet,
10
+ StringPrototypeStartsWith,
11
+ StringPrototypeSlice,
10
12
} = primordials ;
11
13
12
14
const binding = internalBinding ( 'mksnapshot' ) ;
@@ -96,23 +98,29 @@ function supportedInUserSnapshot(id) {
96
98
}
97
99
98
100
function requireForUserSnapshot ( id ) {
99
- if ( ! BuiltinModule . canBeRequiredByUsers ( id ) ) {
101
+ let normalizedId = id ;
102
+ if ( StringPrototypeStartsWith ( id , 'node:' ) ) {
103
+ normalizedId = StringPrototypeSlice ( id , 5 ) ;
104
+ }
105
+ if ( ! BuiltinModule . canBeRequiredByUsers ( normalizedId ) ||
106
+ ( id !== normalizedId &&
107
+ ! BuiltinModule . canBeRequiredWithoutScheme ( normalizedId ) ) ) {
100
108
// eslint-disable-next-line no-restricted-syntax
101
109
const err = new Error (
102
110
`Cannot find module '${ id } '. ` ,
103
111
) ;
104
112
err . code = 'MODULE_NOT_FOUND' ;
105
113
throw err ;
106
114
}
107
- if ( ! supportedInUserSnapshot ( id ) ) {
108
- if ( ! warnedModules . has ( id ) ) {
115
+ if ( ! supportedInUserSnapshot ( normalizedId ) ) {
116
+ if ( ! warnedModules . has ( normalizedId ) ) {
109
117
process . emitWarning (
110
118
`built-in module ${ id } is not yet supported in user snapshots` ) ;
111
- warnedModules . add ( id ) ;
119
+ warnedModules . add ( normalizedId ) ;
112
120
}
113
121
}
114
122
115
- return require ( id ) ;
123
+ return require ( normalizedId ) ;
116
124
}
117
125
118
126
function main ( ) {
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // This tests snapshot JS API using the example in the docs.
4
+
5
+ require ( '../common' ) ;
6
+ const assert = require ( 'assert' ) ;
7
+ const { spawnSync } = require ( 'child_process' ) ;
8
+ const tmpdir = require ( '../common/tmpdir' ) ;
9
+ const path = require ( 'path' ) ;
10
+ const fs = require ( 'fs' ) ;
11
+
12
+ tmpdir . refresh ( ) ;
13
+ const blobPath = path . join ( tmpdir . path , 'snapshot.blob' ) ;
14
+ {
15
+ // The list of modules supported in the snapshot is unstable, so just check
16
+ // a few that are known to work.
17
+ const code = `
18
+ require("node:v8");
19
+ require("node:fs");
20
+ require("node:fs/promises");
21
+ ` ;
22
+ fs . writeFileSync (
23
+ path . join ( tmpdir . path , 'entry.js' ) ,
24
+ code ,
25
+ 'utf8'
26
+ ) ;
27
+ const child = spawnSync ( process . execPath , [
28
+ '--snapshot-blob' ,
29
+ blobPath ,
30
+ '--build-snapshot' ,
31
+ 'entry.js' ,
32
+ ] , {
33
+ cwd : tmpdir . path
34
+ } ) ;
35
+ if ( child . status !== 0 ) {
36
+ console . log ( child . stderr . toString ( ) ) ;
37
+ console . log ( child . stdout . toString ( ) ) ;
38
+ assert . strictEqual ( child . status , 0 ) ;
39
+ }
40
+ const stats = fs . statSync ( path . join ( tmpdir . path , 'snapshot.blob' ) ) ;
41
+ assert ( stats . isFile ( ) ) ;
42
+ }
You can’t perform that action at this time.
0 commit comments