Repository navigation
Expand file tree
/
Copy pathbuild.js
More file actions
156 lines (142 loc) · 3.81 KB
/
Copy pathbuild.js
File metadata and controls
156 lines (142 loc) · 3.81 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/**
* This is the build script for the project.
*/
import { context } from "esbuild"
import esbuild from "esbuild"
import fs from "node:fs/promises"
import { createRequire } from "node:module"
import path from "node:path"
// eslint-disable-next-line no-undef
const isDev = process?.env?.DEV !== undefined
const require = createRequire(import.meta.url)
const inlangSdkRequire = createRequire(require.resolve("@inlang/sdk"))
const lixSdkDist = path.dirname(inlangSdkRequire.resolve("@lix-js/sdk"))
const defaultEntryPoints = [
{ in: "./src/main.ts", out: "./main" },
{ in: path.join(lixSdkDist, "worker/entry.node.js"), out: "./entry.node" },
]
const packagesToCopy = [
{
src: path.join(lixSdkDist, "wasm/lix_js_sdk_bg.wasm"),
dest: "./dist/wasm/lix_js_sdk_bg.wasm",
transpile: false,
},
{
src: "node_modules/lit-html/lit-html.js",
dest: "./assets/lit-html.js",
transpile: false,
},
{
src: "node_modules/@inlang/settings-component/dist/bundled/index.js",
dest: "./assets/settings-component.js",
transpile: false,
},
]
// Copy complete directory to assets
const packagesToCopyDir = [
{
src: "src/utilities/editor/sherlock-editor-app/build",
dest: "./assets/sherlock-editor-app",
},
]
// Production configuration
/** @type {import("esbuild").BuildOptions} */
let buildOptions = {
entryPoints: defaultEntryPoints,
outdir: "./dist/",
outExtension: { ".js": ".js" },
format: "esm",
banner: {
js: 'import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);',
},
platform: "node",
bundle: true,
minify: true,
sourcemap: false,
external: ["vscode"],
define: {
ENV_DEFINED_IN_BUILD_STEP: JSON.stringify({
IS_PRODUCTION: !isDev,
}),
},
}
// Dev configuration
if (isDev) {
buildOptions = {
...buildOptions,
minify: false,
sourcemap: true,
}
}
const ctx = await context(buildOptions)
await fs.rm(buildOptions.outdir ?? "./dist/", { recursive: true, force: true })
await copyDependencies()
await copyDirectories()
if (isDev) {
await ctx.watch()
console.info("👀 watching for changes...")
} else {
await ctx.rebuild()
console.info("✅ build complete")
await ctx.dispose()
}
// Function to copy required files to assets folder
async function copyDependencies() {
for (const { src, dest, transpile } of packagesToCopy) {
try {
// Ensure the destination directory exists
const destDir = path.dirname(dest)
await fs.mkdir(destDir, { recursive: true })
if (transpile) {
// Transpile from js to mjs
await esbuild.build({
entryPoints: [src],
outfile: dest,
format: "esm",
bundle: true,
platform: "browser",
sourcemap: false,
external: [],
})
} else {
// Copy the file, resolving the symlink if necessary
const resolvedPath = await fs.realpath(src)
await fs.copyFile(resolvedPath, dest)
}
} catch (err) {
console.error(`Error processing ${src} to ${dest}:`, err)
}
}
}
// Function to copy required directories to assets folder
async function copyDirectories() {
for (const { src, dest } of packagesToCopyDir) {
try {
// Check if the source directory exists
await fs.access(src)
await fs.rm(dest, { recursive: true, force: true })
await fs.mkdir(dest, { recursive: true })
await copyDir(src, dest)
} catch (err) {
console.error(`Error copying directory ${src} -> ${dest}:`, err)
}
}
}
// Recursive function to copy directories
/**
* @param {string} src
* @param {string} dest
*/
async function copyDir(src, dest) {
await fs.mkdir(dest, { recursive: true })
const entries = await fs.readdir(src, { withFileTypes: true })
for (const entry of entries) {
const srcPath = path.join(src, entry.name)
const destPath = path.join(dest, entry.name)
if (entry.isDirectory()) {
await copyDir(srcPath, destPath)
} else {
await fs.copyFile(srcPath, destPath)
}
}
}