11'use strict'
22
3- const { mkdirSync } = require ( 'fs' )
3+ const { mkdirSync, readFileSync } = require ( 'fs' )
44const path = require ( 'path' )
55
66const transformDependencies = require ( './transform-dependencies' )
@@ -24,22 +24,40 @@ const enqueueInstall = (tmpdir, dependencies, allow) => {
2424 return next
2525}
2626
27- module . exports = async ( snippet , { tmpdir = DEFAULT_TMPDIR , allow = { } } = { } ) => {
27+ module . exports = async ( snippet , { tmpdir = DEFAULT_TMPDIR , allow = { } , nodePaths = [ ] } = { } ) => {
2828 let content = template ( snippet )
2929 const phases = { install : 0 }
3030
31- const dependencies = detectDependencies ( content )
31+ const allDependencies = detectDependencies ( content )
32+ installDependencies . validateDependencies ( allDependencies , allow . dependencies )
33+ const dependencies = nodePaths . length
34+ ? allDependencies . filter ( dep => {
35+ const name = installDependencies . extractPackageName ( dep )
36+ const version = dep . slice ( name . length + 1 )
37+ try {
38+ const pkgPath = require . resolve ( path . join ( name , 'package.json' ) , { paths : nodePaths } )
39+ if ( version === 'latest' ) return false
40+ return JSON . parse ( readFileSync ( pkgPath , 'utf8' ) ) . version !== version
41+ } catch {
42+ return true
43+ }
44+ } )
45+ : allDependencies
46+
3247 if ( dependencies . length ) {
3348 content = transformDependencies ( content )
3449 mkdirSync ( tmpdir , { recursive : true } )
3550 const elapsed = timeSpan ( )
3651 await enqueueInstall ( tmpdir , dependencies , allow )
3752 phases . install = elapsed ( )
53+ } else if ( allDependencies . length ) {
54+ content = transformDependencies ( content )
55+ mkdirSync ( tmpdir , { recursive : true } )
3856 }
3957
40- const cwd = dependencies . length ? tmpdir : process . cwd ( )
58+ const cwd = allDependencies . length ? tmpdir : process . cwd ( )
4159 const elapsed = timeSpan ( )
42- const result = await build ( { content, cwd } )
60+ const result = await build ( { content, cwd, nodePaths } )
4361 phases . build = elapsed ( )
4462 content = result . outputFiles [ 0 ] . text
4563
0 commit comments