forked from tildeio/route-recognizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathember-cli-build.js
129 lines (124 loc) · 3.33 KB
/
ember-cli-build.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
122
123
124
125
126
127
128
129
var Buffer = require('buffer').Buffer;
var path = require('path');
var Rollup = require('broccoli-rollup');
var Funnel = require('broccoli-funnel');
var MergeTrees = require('broccoli-merge-trees');
var replace = require('broccoli-string-replace');
var typescript = require('broccoli-typescript-compiler').typescript;
var buble = require('rollup-plugin-buble');
var fs = require('fs');
var SOURCE_MAPPING_DATA_URL = '//# sourceMap';
SOURCE_MAPPING_DATA_URL += 'pingURL=data:application/json;base64,';
module.exports = function () {
var src = new MergeTrees([
new Funnel(path.dirname(require.resolve('@types/qunit/package')), {
include: [ "**/*.d.ts" ],
destDir: "qunit",
annotation: "qunit typescript typings"
}),
replace(new Funnel("lib", {
include: [ "**/*.ts" ]
}), {
files: ["route-recognizer.ts"],
pattern: {
match: /VERSION_STRING_PLACEHOLDER/g,
replacement: require("./package").version
}
}),
new Funnel("tests", {
include: [ "**/*.ts" ],
destDir: "tests"
})
]);
var compiled = typescript(src, {
annotation: 'compile route-recognizer.ts',
tsconfig: {
compilerOptions: {
module: "es2015",
moduleResolution: "node",
target: "es2015",
declaration: true,
strictNullChecks: true,
inlineSourceMap: true,
inlineSources: true,
baseUrl: "."
},
files: [
"route-recognizer.ts",
"qunit/index.d.ts",
"tests/index.ts"
]
}
});
return new MergeTrees([
new Funnel(compiled, {
include: ['**/*.d.ts']
}),
new Rollup(compiled, {
annotation: 'route-recognizer.js',
rollup: {
entry: 'route-recognizer.js',
plugins: [ loadWithInlineMap(), buble() ],
sourceMap: true,
targets: [{
dest: 'route-recognizer.es.js',
format: 'es',
}, {
dest: 'route-recognizer.js',
format: 'umd',
moduleId: 'route-recognizer',
moduleName: 'RouteRecognizer'
}]
}
}),
new Rollup(compiled, {
annotation: 'tests/index.js',
rollup: {
entry: 'tests/index.js',
plugins: [ loadWithInlineMap(), buble() ],
sourceMap: true,
external: ['route-recognizer'],
targets: [{
dest: 'tests/index.js',
format: 'iife',
globals: {
'route-recognizer': 'RouteRecognizer'
}
}]
}
}),
new Funnel('tests', {
annotation: 'tests/index.html',
files: ['index.html'],
destDir: 'tests'
}),
new Funnel(path.dirname(require.resolve('qunitjs')), {
annotation: 'tests/qunit.{js,css}',
files: ['qunit.css', 'qunit.js'],
destDir: 'tests'
})
], {
annotation: 'dist'
});
};
function loadWithInlineMap() {
return {
load: function (id) {
var code = fs.readFileSync(id, 'utf8');
var result = {
code: code,
map: null
};
var index = code.lastIndexOf(SOURCE_MAPPING_DATA_URL);
if (index === -1) {
return result;
}
result.code = code;
result.map = parseSourceMap(code.slice(index + SOURCE_MAPPING_DATA_URL.length));
return result;
}
};
}
function parseSourceMap(base64) {
return JSON.parse(new Buffer(base64, 'base64').toString('utf8'));
}