File tree Expand file tree Collapse file tree 2 files changed +55
-5
lines changed Expand file tree Collapse file tree 2 files changed +55
-5
lines changed Original file line number Diff line number Diff line change 77 ObjectSetPrototypeOf,
88 SafeArrayIterator,
99 SafeSet,
10+ StringPrototypeStartsWith,
11+ StringPrototypeSlice,
1012} = primordials ;
1113
1214const binding = internalBinding ( 'mksnapshot' ) ;
@@ -96,23 +98,29 @@ function supportedInUserSnapshot(id) {
9698}
9799
98100function 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 ) ) ) {
100108 // eslint-disable-next-line no-restricted-syntax
101109 const err = new Error (
102110 `Cannot find module '${ id } '. ` ,
103111 ) ;
104112 err . code = 'MODULE_NOT_FOUND' ;
105113 throw err ;
106114 }
107- if ( ! supportedInUserSnapshot ( id ) ) {
108- if ( ! warnedModules . has ( id ) ) {
115+ if ( ! supportedInUserSnapshot ( normalizedId ) ) {
116+ if ( ! warnedModules . has ( normalizedId ) ) {
109117 process . emitWarning (
110118 `built-in module ${ id } is not yet supported in user snapshots` ) ;
111- warnedModules . add ( id ) ;
119+ warnedModules . add ( normalizedId ) ;
112120 }
113121 }
114122
115- return require ( id ) ;
123+ return require ( normalizedId ) ;
116124}
117125
118126function 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