This repository has been archived by the owner on Sep 18, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
121 lines (106 loc) · 2.67 KB
/
gulpfile.js
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
require('babel-core/register.js')({
'plugins': require('babel-plugin-transform-es2015-modules-commonjs')
});
let del = require('del');
let gulp = require('gulp');
let sourcemaps = require('gulp-sourcemaps');
let babel = require('gulp-babel');
let jasmine = require('gulp-jasmine');
let jsdoc = require('gulp-jsdoc3');
let change = require('gulp-change');
exports.build = gulp.series(
clean,
gulp.parallel(
copy,
build
)
);
exports.test = test;
exports.dev = dev;
exports.doc = gulp.series(clearDoc, preprocessDoc, generateDoc, cleanUpDoc);
function build() {
return gulp
.src('./src/**/!(*Spec).js')
.pipe(sourcemaps.init())
.pipe(babel({
moduleIds: true,
plugins: ['transform-es2015-modules-commonjs']
}))
.pipe(gulp.dest('./dist'));
}
function copy() {
return gulp
.src(['./package.json', 'README.md', 'LICENSE'])
.pipe(gulp.dest('./dist'));
}
function test() {
global.$Debug = true;
return gulp
.src('./src/**/*Spec.js')
.pipe(jasmine({ includeStackTrace: false }))
.on('error', function() {
this.emit('end');
});
}
function dev() {
return gulp.watch(['./src/**/*.js'], gulp.series(test));
}
function cleanUpDoc() {
return del('./doc-src');
}
function generateDoc(done) {
// Unfortunately, JSDoc invokes the callback for every file. Because of
// this, we have to handle the done callback invocation in a little
// bit more complicated way
const COMPLETION_TIMEOUT = 1000; // milliseconds
let completionTimeout = null;
gulp
.src(['README.md', './doc-src/**/*'], { read: false })
.pipe(jsdoc({
opts: {
destination: './doc',
template: './node_modules/docdash/'
}
}, () => {
if (completionTimeout) {
clearTimeout(completionTimeout);
}
completionTimeout = setTimeout(done, COMPLETION_TIMEOUT);
}));
}
function preprocessDoc() {
return gulp
.src('./src/**/!(*Spec).js')
.pipe(change((content) => {
let oldContent = null;
while (content !== oldContent) {
oldContent = content;
for (let preprocessor of documentationPreprocessors) {
let { pattern, replace } = preprocessor;
content = content.replace(pattern, replace);
}
}
return `/** @module */\n${content}`;
}))
.pipe(gulp.dest('./doc-src'));
}
function clearDoc() {
return del(['./doc-src', './doc']);
}
function clean() {
return del('./dist');
}
documentationPreprocessors = [
{
pattern: /\/[*][*]((?:a|[^a])*?)@(type|param|return)\s*[{]([^}]*?)([a-zA-Z0-9_., *<>|]+)\[\]([^}]*)[}]((a|[^a])*)[*]\//g,
replace: '/**$1@$2 {$3Array<$4>$5}$6*/'
},
{
pattern: /\/[*][*]((?:a|[^a])*?)[{]@code(?:link)? ([^}]*)[}]((a|[^a])*)[*]\//g,
replace: '/**$1<code>$2</code>$3*/'
},
{
pattern: /^\s*export\s+default\s+/gm,
replace: ''
}
];