Skip to content

Commit f924424

Browse files
committed
feat: resolve node modules, closes #1
1 parent 8cd22ab commit f924424

File tree

5 files changed

+251
-11
lines changed

5 files changed

+251
-11
lines changed

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@
1414
},
1515
"dependencies": {
1616
"rollup": "^2.8.2",
17-
"rollup-plugin-esbuild": "^1.2.0"
17+
"rollup-plugin-esbuild": "^1.3.1"
1818
},
1919
"devDependencies": {
20+
"@rollup/plugin-commonjs": "^11.1.0",
2021
"@types/node": "^13.9.2",
22+
"@types/resolve": "^1.17.0",
2123
"cac": "^6.5.8",
24+
"colorette": "^1.1.0",
25+
"resolve": "^1.17.0",
2226
"rollup-plugin-hashbang": "^2.2.2",
2327
"typescript": "^3.8.3"
2428
}

src/cli.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { readFileSync } from 'fs'
33
import { join } from 'path'
44
import { cac } from 'cac'
5+
import { handlError } from './errors'
56

67
const cli = cac('tsup')
78

@@ -15,27 +16,52 @@ cli
1516
.option('--target <target>', 'Bundle target, "es20XX" or "esnext"', {
1617
default: 'es2017',
1718
})
19+
.option('--watch', 'Watch mode')
1820
.action(async (files: string[], options) => {
19-
const { rollup } = await import('rollup')
21+
const { rollup, watch } = await import('rollup')
2022
const { default: hashbangPlugin } = await import('rollup-plugin-hashbang')
2123
const { default: esbuildPlugin } = await import('rollup-plugin-esbuild')
24+
const { default: commonjsPlugin } = await import('@rollup/plugin-commonjs')
25+
const { resolvePlugin } = await import('./resolve-plugin')
2226

23-
const result = await rollup({
27+
const inputOptions = {
2428
input: files,
2529
plugins: [
2630
hashbangPlugin(),
31+
resolvePlugin(),
32+
commonjsPlugin(),
2733
esbuildPlugin({ minify: options.minify, target: options.target }),
2834
],
29-
})
30-
await result.write({
35+
}
36+
const outputOptions = {
3137
dir: options.outDir,
3238
format: options.format,
33-
})
39+
}
40+
if (options.watch) {
41+
const watcher = watch({
42+
...inputOptions,
43+
output: outputOptions,
44+
})
45+
watcher.on('event', (event) => {
46+
console.log(event)
47+
})
48+
} else {
49+
try {
50+
const result = await rollup(inputOptions)
51+
await result.write(outputOptions)
52+
} catch (error) {
53+
handlError(error)
54+
}
55+
}
3456
})
3557

3658
cli.help()
3759

3860
const pkgPath = join(__dirname, '../package.json')
3961
cli.version(JSON.parse(readFileSync(pkgPath, 'utf8')).version)
4062

41-
cli.parse()
63+
try {
64+
cli.parse()
65+
} catch (error) {
66+
handlError(error)
67+
}

src/errors.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import colors from 'colorette'
2+
3+
export function handlError(error: any) {
4+
if (error.frame) {
5+
console.error(colors.red(`Error parsing: ${error.loc.file}:${error.loc.line}:${error.loc.column}`))
6+
console.error(colors.dim(error.frame))
7+
} else {
8+
console.error(colors.red(error.stack))
9+
}
10+
process.exitCode = 1
11+
}

src/resolve-plugin.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {builtinModules} from 'module'
2+
import { dirname } from 'path'
3+
import { Plugin } from 'rollup'
4+
import r, { Opts as ResolveOpts } from 'resolve'
5+
6+
const resolvePackage = (id: string, options: ResolveOpts): Promise<string> =>
7+
new Promise((resolve, reject) => {
8+
r(id, options, (err, result) => {
9+
if (err) {
10+
return reject(err)
11+
}
12+
resolve(result)
13+
})
14+
})
15+
16+
const PACKAGE_NAME_RE = /^[@a-z]/
17+
18+
export const resolvePlugin = (): Plugin => {
19+
return {
20+
name: 'resolve',
21+
22+
async resolveId(source, importer) {
23+
// Always exclude builtin modules
24+
if (builtinModules.includes(source)) {
25+
return false
26+
}
27+
28+
const cwd = importer && dirname(importer)
29+
if (cwd && PACKAGE_NAME_RE.test(source)) {
30+
const id = await resolvePackage(source, { basedir: cwd })
31+
return id
32+
}
33+
return null
34+
},
35+
}
36+
}

yarn.lock

Lines changed: 167 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,191 @@
22
# yarn lockfile v1
33

44

5+
"@rollup/plugin-commonjs@^11.1.0":
6+
version "11.1.0"
7+
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef"
8+
integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==
9+
dependencies:
10+
"@rollup/pluginutils" "^3.0.8"
11+
commondir "^1.0.1"
12+
estree-walker "^1.0.1"
13+
glob "^7.1.2"
14+
is-reference "^1.1.2"
15+
magic-string "^0.25.2"
16+
resolve "^1.11.0"
17+
18+
"@rollup/pluginutils@^3.0.10", "@rollup/pluginutils@^3.0.8":
19+
version "3.0.10"
20+
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.10.tgz#a659b9025920378494cd8f8c59fbf9b3a50d5f12"
21+
integrity sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==
22+
dependencies:
23+
"@types/estree" "0.0.39"
24+
estree-walker "^1.0.1"
25+
picomatch "^2.2.2"
26+
27+
28+
version "0.0.39"
29+
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
30+
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
31+
32+
"@types/node@*":
33+
version "13.13.5"
34+
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.5.tgz#96ec3b0afafd64a4ccea9107b75bf8489f0e5765"
35+
integrity sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==
36+
537
"@types/node@^13.9.2":
638
version "13.9.2"
739
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349"
840
integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg==
941

42+
"@types/resolve@^1.17.0":
43+
version "1.17.0"
44+
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.0.tgz#eb25b38e2682f641d33841df162e052d7364eaa8"
45+
integrity sha512-CKOBcXAHvoGEjYsg6Bkc/kLPqTmtnUEGrWnJJC6LNnk+D36uc1GAHcNnwK2g58x/JWjGlqGfIao9rsJk7LePWw==
46+
dependencies:
47+
"@types/node" "*"
48+
49+
balanced-match@^1.0.0:
50+
version "1.0.0"
51+
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
52+
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
53+
54+
brace-expansion@^1.1.7:
55+
version "1.1.11"
56+
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
57+
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
58+
dependencies:
59+
balanced-match "^1.0.0"
60+
concat-map "0.0.1"
61+
1062
cac@^6.5.8:
1163
version "6.5.8"
1264
resolved "https://registry.yarnpkg.com/cac/-/cac-6.5.8.tgz#b15d183ee478226f846888be74612ac080533667"
1365
integrity sha512-jLv2+ps4T2HRVR1k4UlQZoAFvliAhf5LVR0yjPjIaIr/Cw99p/I7CXIEkXtw5q+AkYk4NCFJcF5ErmELSyrZnw==
1466

67+
colorette@^1.1.0:
68+
version "1.1.0"
69+
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
70+
integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==
71+
72+
commondir@^1.0.1:
73+
version "1.0.1"
74+
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
75+
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
76+
77+
78+
version "0.0.1"
79+
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
80+
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
81+
1582
esbuild@^0.2.9:
1683
version "0.2.10"
1784
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.2.10.tgz#28ad1d39a032ae4dfe78b5eb344ed5062e70a4c2"
1885
integrity sha512-Drg5gA+NF+Dc1Qd2J/Jjvpmtv2PQqeyEjIP6ipY6bz1sUOHKK3/R+v7oitr7/M8rNrI9PrUYPSR5M6hb2edoog==
1986

87+
estree-walker@^1.0.1:
88+
version "1.0.1"
89+
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
90+
integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
91+
92+
fs.realpath@^1.0.0:
93+
version "1.0.0"
94+
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
95+
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
96+
2097
fsevents@~2.1.2:
2198
version "2.1.2"
2299
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
23100
integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==
24101

102+
glob@^7.1.2:
103+
version "7.1.6"
104+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
105+
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
106+
dependencies:
107+
fs.realpath "^1.0.0"
108+
inflight "^1.0.4"
109+
inherits "2"
110+
minimatch "^3.0.4"
111+
once "^1.3.0"
112+
path-is-absolute "^1.0.0"
113+
114+
inflight@^1.0.4:
115+
version "1.0.6"
116+
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
117+
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
118+
dependencies:
119+
once "^1.3.0"
120+
wrappy "1"
121+
122+
inherits@2:
123+
version "2.0.4"
124+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
125+
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
126+
127+
is-reference@^1.1.2:
128+
version "1.1.4"
129+
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427"
130+
integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==
131+
dependencies:
132+
"@types/estree" "0.0.39"
133+
25134
magic-string@^0.22.4:
26135
version "0.22.5"
27136
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
28137
integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==
29138
dependencies:
30139
vlq "^0.2.2"
31140

32-
rollup-plugin-esbuild@^1.2.0:
33-
version "1.2.0"
34-
resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-1.2.0.tgz#370f13b3031bb6f968be4f8bafee7ddc3bf22080"
35-
integrity sha512-1wFivEfmSW2zYEi+TTYn+l6w9iSSrYc2ioFoD+jTzL4SycqmtiiB1RlyFVFVCGA3oNxddNdKZggBYNm1NQPNCg==
141+
magic-string@^0.25.2:
142+
version "0.25.7"
143+
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
144+
integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
145+
dependencies:
146+
sourcemap-codec "^1.4.4"
147+
148+
minimatch@^3.0.4:
149+
version "3.0.4"
150+
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
151+
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
152+
dependencies:
153+
brace-expansion "^1.1.7"
154+
155+
once@^1.3.0:
156+
version "1.4.0"
157+
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
158+
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
159+
dependencies:
160+
wrappy "1"
161+
162+
path-is-absolute@^1.0.0:
163+
version "1.0.1"
164+
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
165+
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
166+
167+
path-parse@^1.0.6:
168+
version "1.0.6"
169+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
170+
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
171+
172+
picomatch@^2.2.2:
173+
version "2.2.2"
174+
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
175+
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
176+
177+
resolve@^1.11.0, resolve@^1.17.0:
178+
version "1.17.0"
179+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
180+
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
36181
dependencies:
182+
path-parse "^1.0.6"
183+
184+
rollup-plugin-esbuild@^1.3.1:
185+
version "1.3.1"
186+
resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-1.3.1.tgz#f87c25bec618c940a44ecc95ce52f61eb544b494"
187+
integrity sha512-wsb0fXwBsNThSzgdJuom7UtZD1hMoe+/K4YHNz+XGxp4I8SXW+bFEgUvpl6snnFOnee8p+ozxK3BDR1z/rmjRg==
188+
dependencies:
189+
"@rollup/pluginutils" "^3.0.10"
37190
esbuild "^0.2.9"
38191

39192
rollup-plugin-hashbang@^2.2.2:
@@ -50,6 +203,11 @@ rollup@^2.8.2:
50203
optionalDependencies:
51204
fsevents "~2.1.2"
52205

206+
sourcemap-codec@^1.4.4:
207+
version "1.4.8"
208+
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
209+
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
210+
53211
typescript@^3.8.3:
54212
version "3.8.3"
55213
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
@@ -59,3 +217,8 @@ vlq@^0.2.2:
59217
version "0.2.3"
60218
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
61219
integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==
220+
221+
wrappy@1:
222+
version "1.0.2"
223+
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
224+
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=

0 commit comments

Comments
 (0)