-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.packages.ts
More file actions
92 lines (68 loc) · 2.29 KB
/
gulpfile.packages.ts
File metadata and controls
92 lines (68 loc) · 2.29 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
import {startsWith, exists, find} from '@slicky/utils';
import * as path from 'path';
import * as fs from 'fs';
import * as merge from 'merge2';
import * as gulp from 'gulp';
import * as ts from 'gulp-typescript';
const ROOT = path.join(__dirname, 'packages');
declare interface PackageConfig
{
name: string,
dependencies: Array<string>,
root: string,
}
const unsortedPackages = fs.readdirSync(ROOT)
.map((file) => path.join(ROOT, file))
.filter((file) => fs.statSync(file).isDirectory())
.map((directory: string): PackageConfig => {
const pckg = JSON.parse(<string>fs.readFileSync(path.join(directory, 'package.json'), {encoding: 'utf-8'}));
return {
root: directory,
name: pckg.name.substr(8),
dependencies: Object.keys(exists(pckg.dependencies) ? pckg.dependencies : {})
.filter((dependency: string) => startsWith(dependency, '@slicky/'))
.map((dependency: string) => dependency.substr(8)),
};
});
unsortedPackages.forEach((pckg: PackageConfig) => {
pckg.dependencies = pckg.dependencies.filter((dependency: string) => {
return exists(find(unsortedPackages, (pckgFind: PackageConfig) => {
return pckgFind.name === dependency;
}));
});
});
const packages: Array<PackageConfig> = [];
const packageExists = (pckg: PackageConfig) => {
return exists(find(packages, (pckgFind: PackageConfig) => pckgFind === pckg));
};
unsortedPackages.forEach((pckg: PackageConfig) => {
if (!pckg.dependencies.length) {
if (packageExists(pckg)) {
packages.splice(packages.indexOf(pckg), 1);
}
return packages.unshift(pckg);
}
pckg.dependencies.forEach((dependency: string) => {
const dependencyPackage = find(unsortedPackages, (pckgFind: PackageConfig) => pckgFind.name === dependency);
if (!packageExists(dependencyPackage)) {
packages.push(dependencyPackage);
}
});
if (!packageExists(pckg)) {
packages.push(pckg);
}
});
const tasks = [];
packages.forEach((pckg: PackageConfig) => {
tasks.push(`compile:package:${pckg.name}`);
gulp.task(`compile:package:${pckg.name}`, () => {
let project = ts.createProject(path.join(pckg.root, 'tsconfig.json'));
let result = project.src()
.pipe(project());
return merge([
result.js.pipe(gulp.dest(pckg.root)),
result.dts.pipe(gulp.dest(pckg.root)),
]);
});
});
gulp.task('compile:packages', gulp.series(tasks));