UNPKG

3.93 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _assert = _interopRequireDefault(require("assert"));
9
10var _nullthrows = _interopRequireDefault(require("nullthrows"));
11
12var _utils = require("@parcel/utils");
13
14var _logger = require("@parcel/logger");
15
16var _path = _interopRequireDefault(require("path"));
17
18var _InternalConfig = require("./InternalConfig");
19
20var _Config = _interopRequireDefault(require("./public/Config"));
21
22var _loadParcelConfig = _interopRequireDefault(require("./loadParcelConfig"));
23
24var _loadParcelPlugin = _interopRequireDefault(require("./loadParcelPlugin"));
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
28function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
30class ConfigLoader {
31 constructor(options) {
32 _defineProperty(this, "options", void 0);
33
34 _defineProperty(this, "parcelConfig", void 0);
35
36 _defineProperty(this, "queue", void 0);
37
38 this.options = options;
39 this.queue = new _utils.PromiseQueue({
40 maxConcurrent: 32
41 });
42 }
43
44 load(configRequest) {
45 let promise = this.queue.add(() => this._load(configRequest));
46 this.queue.run();
47 return promise;
48 }
49
50 _load(configRequest) {
51 if (!configRequest.plugin) {
52 return this.loadParcelConfig(configRequest);
53 }
54
55 return this.loadPluginConfig(configRequest);
56 }
57
58 async loadParcelConfig(configRequest) {
59 let {
60 filePath,
61 isSource,
62 env,
63 pipeline
64 } = configRequest;
65 let dir = isSource ? _path.default.dirname(filePath) : this.options.projectRoot;
66
67 let searchPath = _path.default.join(dir, 'index');
68
69 let config = (0, _InternalConfig.createConfig)({
70 isSource,
71 searchPath,
72 env
73 });
74 let publicConfig = new _Config.default(config, this.options);
75 let {
76 config: parcelConfig,
77 extendedFiles
78 } = (0, _nullthrows.default)((await (0, _loadParcelConfig.default)(searchPath, this.options)));
79 publicConfig.setResolvedPath(parcelConfig.filePath);
80 publicConfig.setResult(parcelConfig.getConfig());
81 this.parcelConfig = parcelConfig;
82 let devDeps = [];
83
84 switch (configRequest.meta.actionType) {
85 case 'transformation':
86 devDeps = parcelConfig.getTransformerNames(filePath, pipeline);
87 break;
88
89 case 'validation':
90 devDeps = parcelConfig.getValidatorNames(filePath);
91 break;
92
93 case 'dependency':
94 devDeps = parcelConfig.getResolverNames();
95 break;
96 }
97
98 devDeps.forEach(devDep => publicConfig.addDevDependency(devDep));
99 publicConfig.setResultHash((0, _utils.md5FromString)(JSON.stringify(devDeps)));
100 publicConfig.setWatchGlob('**/.parcelrc'); // TODO: if extended config comes from a package, yarn.lock change should invalidate config request
101
102 for (let extendedFile of extendedFiles) {
103 publicConfig.addIncludedFile(extendedFile);
104 }
105
106 return config;
107 }
108
109 async loadPluginConfig({
110 plugin,
111 env,
112 isSource,
113 filePath,
114 meta: {
115 parcelConfigPath
116 }
117 }) {
118 let config = (0, _InternalConfig.createConfig)({
119 isSource,
120 searchPath: filePath,
121 env
122 });
123 (0, _assert.default)(typeof parcelConfigPath === 'string');
124 let pluginInstance = await (0, _loadParcelPlugin.default)(this.options.packageManager, (0, _nullthrows.default)(plugin), parcelConfigPath);
125
126 if (pluginInstance.loadConfig != null) {
127 await pluginInstance.loadConfig({
128 config: new _Config.default(config, this.options),
129 options: this.options,
130 logger: new _logger.PluginLogger({
131 origin: (0, _nullthrows.default)(plugin)
132 })
133 });
134 }
135
136 return config;
137 }
138
139}
140
141exports.default = ConfigLoader;
\No newline at end of file