-
Notifications
You must be signed in to change notification settings - Fork 40
/
index.js
125 lines (106 loc) · 4.03 KB
/
index.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
'use strict';
var path = require('path');
var Funnel = require('broccoli-funnel');
var MergeTrees = require('broccoli-merge-trees');
module.exports = {
name: 'ember-cli-pretender',
_findPretenderPaths: function() {
if (!this._pretenderPath) {
this._pretenderPath = require.resolve('pretender');
this._pretenderDir = path.dirname(this._pretenderPath);
this._routeRecognizerPath = require.resolve('route-recognizer');
this._fakeRequestPath = require.resolve('fake-xml-http-request');
this._abortControllerPath = require.resolve('abortcontroller-polyfill/dist/abortcontroller-polyfill-only.js');
this._whatwgFetchPath = require.resolve('whatwg-fetch/dist/fetch.umd.js');
}
},
_autoimportInfo() {
let chalk = require("chalk");
let info = chalk.yellow(`
INFORMATION (ember-cli-pretender)
${chalk.inverse(
"ember-auto-import"
)} seems to be in your package dependencies.
As a result, you don't need pretender to be wrapped anymore.
You can install ${chalk.bold("pretender")} and remove ${chalk.bold(
"ember-cli-pretender"
)}.
`);
// eslint-disable-next-line no-console
console.log(info);
},
init() {
this._super.init && this._super.init.apply(this, arguments);
if (this.parent.dependencies()["ember-auto-import"]) {
this._autoimportInfo();
}
},
treeForVendor: function(tree) {
this._findPretenderPaths();
var pretenderTree = new Funnel(this._pretenderDir, {
files: [path.basename(this._pretenderPath)],
destDir: '/pretender',
});
var routeRecognizerFilename = path.basename(this._routeRecognizerPath);
var routeRecognizerTree = new Funnel(path.dirname(this._routeRecognizerPath), {
files: [routeRecognizerFilename, routeRecognizerFilename + '.map'],
destDir: '/route-recognizer',
});
var fakeRequestTree = new Funnel(path.dirname(this._fakeRequestPath), {
files: [path.basename(this._fakeRequestPath)],
destDir: '/fake-xml-http-request',
});
var abortControllerTree = new Funnel(path.dirname(this._abortControllerPath), {
files: [path.basename(this._abortControllerPath)],
destDir: '/abortcontroller-polyfill',
});
var whatwgFetchTree = new Funnel(path.dirname(this._whatwgFetchPath), {
files: [path.basename(this._whatwgFetchPath)],
destDir: '/whatwg-fetch',
});
var trees = [
tree,
pretenderTree,
routeRecognizerTree,
fakeRequestTree,
abortControllerTree,
whatwgFetchTree
// tree is not always defined, so filter out if empty
].filter(Boolean);
return new MergeTrees(trees, {
annotation: 'ember-cli-pretender: treeForVendor'
});
},
included: function included() {
var app = this._findApp();
this.app = app;
var opts = app.options.pretender || { enabled: app.tests };
if (opts.enabled) {
this._findPretenderPaths();
app.import('vendor/fake-xml-http-request/' + path.basename(this._fakeRequestPath));
app.import('vendor/route-recognizer/' + path.basename(this._routeRecognizerPath));
var includeFetchPolyfill = opts.includeFetchPolyfill || typeof opts.includeFetchPolyfill === 'undefined';
if (includeFetchPolyfill) {
app.import('vendor/abortcontroller-polyfill/' + path.basename(this._abortControllerPath));
app.import('vendor/whatwg-fetch/' + path.basename(this._whatwgFetchPath));
}
app.import('vendor/pretender/' + path.basename(this._pretenderPath));
}
},
_findApp() {
if (typeof this._findHost === 'function') {
return this._findHost();
} else {
// Otherwise, we'll use this implementation borrowed from the _findHost()
// method in ember-cli.
// Keep iterating upward until we don't have a grandparent.
// Has to do this grandparent check because at some point we hit the project.
let app;
let current = this;
do {
app = current.app || this;
} while (current.parent && current.parent.parent && (current = current.parent));
return app;
}
},
};