Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/prepare-dist.js
1028 views
1
const fs = require('fs');
2
3
const buildDistDir = `${__dirname}/build-dist`;
4
5
const rootPackageJson = require('./package.json');
6
7
const defaults = {
8
repository: rootPackageJson.repository,
9
license: rootPackageJson.license,
10
bugs: rootPackageJson.bugs,
11
author: rootPackageJson.author,
12
contributors: rootPackageJson.contributors,
13
homepage: rootPackageJson.homepage,
14
engines: {
15
node: '>=13.2.0',
16
},
17
publishConfig: {
18
access: 'public',
19
},
20
};
21
22
const licensePath = `${__dirname}/LICENSE.md`;
23
const readmePath = `${__dirname}/README.md`;
24
25
function processPackageJson(packagePath) {
26
const packageJson = JSON.parse(fs.readFileSync(`${packagePath}/package.json`, 'utf8'));
27
let overridesJson = {};
28
if (fs.existsSync(`${packagePath}/package.dist.json`)) {
29
overridesJson = JSON.parse(fs.readFileSync(`${packagePath}/package.dist.json`, 'utf8'));
30
console.log('Has package.json overrides', packagePath, overridesJson);
31
fs.unlinkSync(`${packagePath}/package.dist.json`);
32
}
33
34
if (packageJson.private) {
35
console.log('Private package, skipping', packagePath);
36
return;
37
}
38
fs.copyFileSync(licensePath, `${packagePath}/LICENSE.md`);
39
const finalPackageJson = {
40
name: overridesJson.name || packageJson.name,
41
version: overridesJson.version || packageJson.version,
42
description: overridesJson.description || packageJson.description,
43
main: overridesJson.main || packageJson.main,
44
types: overridesJson.types || packageJson.types,
45
exports: overridesJson.exports || packageJson.exports,
46
files: overridesJson.files || packageJson.files,
47
...defaults,
48
scripts: overridesJson.scripts,
49
dependencies: overridesJson.dependencies || packageJson.dependencies,
50
engine: packageJson.engine, // this is used by emulators
51
bin: packageJson.bin,
52
};
53
54
// check if index exists
55
if (!finalPackageJson.files && !finalPackageJson.main) {
56
if (fs.existsSync(`${packagePath}/index.js`)) {
57
finalPackageJson.main = 'index.js';
58
}
59
}
60
if (finalPackageJson.main && !finalPackageJson.types) {
61
finalPackageJson.types = finalPackageJson.main.replace('.js', '.d.ts');
62
}
63
64
if (finalPackageJson.name === 'secret-agent') {
65
fs.copyFileSync(readmePath, `${packagePath}/README.md`);
66
}
67
68
console.log('writing', `${packagePath}/package.json`);
69
fs.writeFileSync(`${packagePath}/package.json`, JSON.stringify(finalPackageJson, null, 2));
70
}
71
72
function processDir(path) {
73
for (const fileOrDir of fs.readdirSync(path)) {
74
if (fileOrDir === 'node_modules' || fileOrDir.startsWith('.')) continue;
75
76
const fullpath = `${path}/${fileOrDir}`;
77
if (fs.lstatSync(fullpath).isDirectory()) {
78
processDir(fullpath);
79
} else if (fileOrDir === 'package.json') {
80
processPackageJson(path);
81
}
82
}
83
}
84
85
processDir(buildDistDir);
86
87