-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.js
More file actions
107 lines (91 loc) · 2.51 KB
/
build.js
File metadata and controls
107 lines (91 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import path from 'node:path'
import fs from 'node:fs/promises'
import esbuild from 'esbuild'
import { globby } from 'globby'
import { transformExtPlugin } from '@gjsify/esbuild-plugin-transform-ext'
const args = process.argv.slice(2)
let command = args.shift() || 'build'
const isDev = command === 'dev'
if (isDev) command = args.shift() // Optional: cjs, esm, web
async function fileExists(file) {
try {
await fs.access(file)
return true
} catch (e) {
return false
}
}
;(async () => {
// import { version } from './package.json'
const esbuildOptions = {
logLevel: 'info',
jsx: 'automatic',
tsconfig: 'env/legacy/tsconfig.common.json',
plugins: [
// Built ES module format expects import from .js
transformExtPlugin({ outExtension: { '.ts': '.js' } }),
],
platform: 'node',
bundle: false,
minify: false,
sourcemap: false,
}
const globCommonOptions = {
ignore: ['**/*.spec.ts', '**/*.d.ts'],
}
// For simplicity just compile to ES Module only, no CommonJS
for (const { name, ...options } of [
{
name: 'env',
entryPoints: [`**/*.{ts,js}`],
includeFiles: [
`e2e-plugin/**/*`,
'package.json',
'readme.md',
'tsconfig*.json'
],
ignore: []
},
]) {
const globOptions = {
...globCommonOptions,
cwd: name, // Set to current folder to remove from file path
ignore: [
...globCommonOptions.ignore,
...(options.ignore || [])
]
}
const entryPoints = await globby(options.entryPoints, globOptions)
const includeFiles = options.includeFiles
? await globby(options.includeFiles, globOptions)
: []
const srcDir = name
const destDir = `./build/${name}`
await fs.mkdir(destDir, { recursive: true })
console.log('Build', entryPoints)
const context = await esbuild.context({
...esbuildOptions,
entryPoints: entryPoints.map((file) => `${srcDir}/${file}`),
outdir: destDir,
format: 'esm',
})
await context.rebuild()
for (const file of includeFiles) {
console.log('Copy', file)
const srcFile = `${srcDir}/${file}`
const destFile = `${destDir}/${file}`
// Create any sub directories of file
const dir = path.dirname(destFile)
await fs.mkdir(dir, { recursive: true })
await fs.copyFile(srcFile, destFile)
}
}
if (isDev) {
// await context.watch()
} else {
process.exit()
}
})().catch((error) => {
console.error(error)
process.exit(1)
})