forked from parcel-bundler/lightningcss
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild-npm.js
More file actions
123 lines (107 loc) · 3.4 KB
/
build-npm.js
File metadata and controls
123 lines (107 loc) · 3.4 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
const fs = require('fs');
const pkg = require('../package.json');
const dir = `${__dirname}/..`;
const triples = [
'x86_64-apple-darwin',
'x86_64-unknown-linux-gnu',
'x86_64-pc-windows-msvc',
'aarch64-apple-darwin',
'aarch64-unknown-linux-gnu',
'armv7-unknown-linux-gnueabihf',
'aarch64-unknown-linux-musl',
'x86_64-unknown-linux-musl'
];
const cpuToNodeArch = {
x86_64: 'x64',
aarch64: 'arm64',
i686: 'ia32',
armv7: 'arm',
};
const sysToNodePlatform = {
linux: 'linux',
freebsd: 'freebsd',
darwin: 'darwin',
windows: 'win32',
};
let optionalDependencies = {};
let cliOptionalDependencies = {};
try {
fs.mkdirSync(dir + '/npm');
} catch (err) {}
for (let triple of triples) {
let [cpu, , os, abi] = triple.split('-');
cpu = cpuToNodeArch[cpu] || cpu;
os = sysToNodePlatform[os] || os;
let t = `${os}-${cpu}`;
if (abi) {
t += '-' + abi;
}
buildNode(triple, cpu, os, t);
buildCLI(triple, cpu, os, t);
}
pkg.optionalDependencies = optionalDependencies;
fs.writeFileSync(`${dir}/package.json`, JSON.stringify(pkg, false, 2) + '\n');
let cliPkg = {...pkg};
cliPkg.name += '-cli';
cliPkg.bin = {
'parcel-css': 'parcel_css'
};
delete cliPkg.main;
delete cliPkg.napi;
delete cliPkg.devDependencies;
delete cliPkg.targets;
delete cliPkg.types;
cliPkg.files = ['parcel_css', 'postinstall.js'];
cliPkg.optionalDependencies = cliOptionalDependencies;
cliPkg.scripts = {
postinstall: 'node postinstall.js'
};
fs.writeFileSync(`${dir}/cli/package.json`, JSON.stringify(cliPkg, false, 2) + '\n');
fs.copyFileSync(`${dir}/README.md`, `${dir}/cli/README.md`);
function buildNode(triple, cpu, os, t) {
let name = `parcel-css.${t}.node`;
let pkg2 = {...pkg};
pkg2.name += '-' + t;
pkg2.os = [os];
pkg2.cpu = [cpu];
pkg2.main = name;
pkg2.files = [name];
delete pkg2.napi;
delete pkg2.devDependencies;
delete pkg2.dependencies;
delete pkg2.optionalDependencies;
delete pkg2.targets;
delete pkg2.scripts;
delete pkg2.types;
optionalDependencies[pkg2.name] = pkg.version;
try {
fs.mkdirSync(dir + '/npm/node-' + t);
} catch (err) {}
fs.writeFileSync(`${dir}/npm/node-${t}/package.json`, JSON.stringify(pkg2, false, 2) + '\n');
fs.copyFileSync(`${dir}/artifacts/bindings-${triple}/${name}`, `${dir}/npm/node-${t}/${name}`);
fs.writeFileSync(`${dir}/npm/node-${t}/README.md`, `This is the ${triple} build of @parcel/css. See https://github.com/parcel-bundler/parcel-css for details.`);
}
function buildCLI(triple, cpu, os, t) {
let binary = os === 'win32' ? 'parcel_css.exe' : 'parcel_css';
let pkg2 = {...pkg};
pkg2.name += '-cli-' + t;
pkg2.os = [os];
pkg2.cpu = [cpu];
pkg2.files = [binary];
delete pkg2.main;
delete pkg2.napi;
delete pkg2.devDependencies;
delete pkg2.dependencies;
delete pkg2.optionalDependencies;
delete pkg2.targets;
delete pkg2.scripts;
delete pkg2.types;
cliOptionalDependencies[pkg2.name] = pkg.version;
try {
fs.mkdirSync(dir + '/npm/cli-' + t);
} catch (err) {}
fs.writeFileSync(`${dir}/npm/cli-${t}/package.json`, JSON.stringify(pkg2, false, 2) + '\n');
fs.copyFileSync(`${dir}/artifacts/bindings-${triple}/${binary}`, `${dir}/npm/cli-${t}/${binary}`);
fs.chmodSync(`${dir}/npm/cli-${t}/${binary}`, 0o755); // Ensure execute bit is set.
fs.writeFileSync(`${dir}/npm/cli-${t}/README.md`, `This is the ${triple} build of @parcel/css-cli. See https://github.com/parcel-bundler/parcel-css for details.`);
}