Skip to content

Commit 1242e7d

Browse files
committed
refactor: rename private functions and add tarring on build
1 parent c7ef8f6 commit 1242e7d

File tree

2 files changed

+59
-19
lines changed

2 files changed

+59
-19
lines changed

lib/packages.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export interface PackageInfo {
2424
main: string;
2525
dist: string;
2626
build: string;
27+
tar: string;
2728
private: boolean;
2829
packageJson: JsonObject;
2930
dependencies: string[];
@@ -110,6 +111,7 @@ export const packages: PackageMap =
110111
main: path.resolve(pkgRoot, 'src/index.ts'),
111112
dependencies: [],
112113
private: packageJson.private,
114+
tar: path.join(distRoot, name.replace('/', '_') + '.tgz'),
113115
bin,
114116
name,
115117
packageJson,

scripts/build.ts

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,46 @@ import { packages } from '../lib/packages';
1313

1414
const minimatch = require('minimatch');
1515
const npmRun = require('npm-run');
16+
const tar = require('tar');
1617

1718
const gitIgnore = fs.readFileSync(path.join(__dirname, '../.gitignore'), 'utf-8')
1819
.split('\n')
1920
.map(line => line.replace(/#.*/, ''))
2021
.filter(line => !line.match(/^\s*$/));
2122

22-
function gitIgnoreMatch(p: string) {
23+
24+
function _gitIgnoreMatch(p: string) {
2325
p = path.relative(path.dirname(__dirname), p);
2426

2527
return gitIgnore.some(line => minimatch(p, line));
2628
}
2729

2830

29-
function mkdirp(p: string) {
31+
function _mkdirp(p: string) {
3032
// Create parent folder if necessary.
3133
if (!fs.existsSync(path.dirname(p))) {
32-
mkdirp(path.dirname(p));
34+
_mkdirp(path.dirname(p));
3335
}
3436
fs.mkdirSync(p);
3537
}
3638

3739

38-
function copy(from: string, to: string) {
40+
function _tar(out: string, dir: string) {
41+
return tar.create({
42+
gzip: true,
43+
strict: true,
44+
portable: true,
45+
cwd: dir,
46+
file: out,
47+
sync: true,
48+
}, ['.']);
49+
}
50+
51+
52+
function _copy(from: string, to: string) {
3953
// Create parent folder if necessary.
4054
if (!fs.existsSync(path.dirname(to))) {
41-
mkdirp(path.dirname(to));
55+
_mkdirp(path.dirname(to));
4256
}
4357

4458
from = path.relative(process.cwd(), from);
@@ -49,28 +63,28 @@ function copy(from: string, to: string) {
4963
}
5064

5165

52-
function recursiveCopy(from: string, to: string, logger: Logger) {
66+
function _recursiveCopy(from: string, to: string, logger: Logger) {
5367
if (!fs.existsSync(from)) {
5468
logger.error(`File "${from}" does not exist.`);
5569
process.exit(4);
5670
}
5771
if (fs.statSync(from).isDirectory()) {
5872
fs.readdirSync(from).forEach(fileName => {
59-
recursiveCopy(path.join(from, fileName), path.join(to, fileName), logger);
73+
_recursiveCopy(path.join(from, fileName), path.join(to, fileName), logger);
6074
});
6175
} else {
62-
copy(from, to);
76+
_copy(from, to);
6377
}
6478
}
6579

6680

67-
function rm(p: string) {
81+
function _rm(p: string) {
6882
p = path.relative(process.cwd(), p);
6983
fs.unlinkSync(p);
7084
}
7185

7286

73-
function rimraf(p: string) {
87+
function _rimraf(p: string) {
7488
glob.sync(path.join(p, '**/*'), { dot: true, nodir: true })
7589
.forEach(p => fs.unlinkSync(p));
7690
glob.sync(path.join(p, '**/*'), { dot: true })
@@ -79,10 +93,14 @@ function rimraf(p: string) {
7993
}
8094

8195

82-
export default function(_: {}, logger: Logger) {
83-
logger.info('Removing dist/...');
84-
rimraf(path.join(__dirname, '../dist'));
96+
function _clean(logger: Logger) {
97+
logger.info('Cleaning...');
98+
logger.info(' Removing dist/...');
99+
_rimraf(path.join(__dirname, '../dist'));
100+
}
85101

102+
103+
function _sortPackages() {
86104
// Order packages in order of dependency.
87105
// We use bubble sort because we need a full topological sort but adding another dependency
88106
// or implementing a full topo sort would be too much work and I'm lazy. We don't anticipate
@@ -106,7 +124,11 @@ export default function(_: {}, logger: Logger) {
106124
}
107125
} while (swapped);
108126

127+
return sortedPackages;
128+
}
109129

130+
131+
function _build(logger: Logger) {
110132
logger.info('Building...');
111133
const tsConfigPath = path.relative(process.cwd(), path.join(__dirname, '../tsconfig.json'));
112134
try {
@@ -116,14 +138,22 @@ export default function(_: {}, logger: Logger) {
116138
logger.error(`TypeScript compiler failed:\n\nSTDOUT:\n ${stdout}`);
117139
process.exit(1);
118140
}
141+
}
142+
143+
144+
export default function(_: {}, logger: Logger) {
145+
_clean(logger);
146+
147+
const sortedPackages = _sortPackages();
148+
_build(logger);
119149

120150
logger.info('Moving packages to dist/');
121151
const packageLogger = new Logger('packages', logger);
122152
for (const packageName of sortedPackages) {
123153
packageLogger.info(packageName);
124154
const pkg = packages[packageName];
125-
recursiveCopy(pkg.build, pkg.dist, logger);
126-
rimraf(pkg.build);
155+
_recursiveCopy(pkg.build, pkg.dist, logger);
156+
_rimraf(pkg.build);
127157
}
128158

129159
logger.info('Copying resources...');
@@ -171,7 +201,7 @@ export default function(_: {}, logger: Logger) {
171201
}
172202

173203
// Skip files from gitignore.
174-
if (gitIgnoreMatch(fileName)) {
204+
if (_gitIgnoreMatch(fileName)) {
175205
return false;
176206
}
177207

@@ -180,14 +210,14 @@ export default function(_: {}, logger: Logger) {
180210

181211
subSubLogger.info(`${resources.length} resources...`);
182212
resources.forEach(fileName => {
183-
copy(path.join(pkg.root, fileName), path.join(pkg.dist, fileName));
213+
_copy(path.join(pkg.root, fileName), path.join(pkg.dist, fileName));
184214
});
185215
}
186216

187217
logger.info('Copying extra resources...');
188218
for (const packageName of sortedPackages) {
189219
const pkg = packages[packageName];
190-
copy(path.join(__dirname, '../LICENSE'), path.join(pkg.dist, 'LICENSE'));
220+
_copy(path.join(__dirname, '../LICENSE'), path.join(pkg.dist, 'LICENSE'));
191221
}
192222

193223
logger.info('Removing spec files...');
@@ -197,7 +227,7 @@ export default function(_: {}, logger: Logger) {
197227
const pkg = packages[packageName];
198228
const files = glob.sync(path.join(pkg.dist, '**/*_spec.js'));
199229
specLogger.info(` ${files.length} spec files found...`);
200-
files.forEach(fileName => rm(fileName));
230+
files.forEach(fileName => _rm(fileName));
201231
}
202232

203233
logger.info('Setting versions...');
@@ -229,5 +259,13 @@ export default function(_: {}, logger: Logger) {
229259
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
230260
}
231261

262+
logger.info('Tarring all packages...');
263+
const tarLogger = new Logger('license', logger);
264+
Object.keys(packages).forEach(pkgName => {
265+
const pkg = packages[pkgName];
266+
tarLogger.info(`${pkgName} => ${pkg.tar}`);
267+
_tar(pkg.tar, pkg.dist);
268+
});
269+
232270
logger.info(`Done.`);
233271
}

0 commit comments

Comments
 (0)