UNPKG

5.54 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _logger = require("@parcel/logger");
9
10var _diagnostic = _interopRequireWildcard(require("@parcel/diagnostic"));
11
12var _path = _interopRequireDefault(require("path"));
13
14var _url = _interopRequireDefault(require("url"));
15
16var _ReporterRunner = require("./ReporterRunner");
17
18var _Dependency = _interopRequireDefault(require("./public/Dependency"));
19
20var _PluginOptions = _interopRequireDefault(require("./public/PluginOptions"));
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
24function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
25
26function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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 ResolverRunner {
31 constructor({
32 config,
33 options
34 }) {
35 _defineProperty(this, "config", void 0);
36
37 _defineProperty(this, "options", void 0);
38
39 _defineProperty(this, "pluginOptions", void 0);
40
41 this.config = config;
42 this.options = options;
43 this.pluginOptions = new _PluginOptions.default(this.options);
44 }
45
46 async getThrowableDiagnostic(dependency, message) {
47 let diagnostic = {
48 message,
49 origin: '@parcel/resolver-default'
50 };
51
52 if (dependency.loc && dependency.sourcePath) {
53 diagnostic.filePath = dependency.sourcePath;
54 diagnostic.codeFrame = {
55 code: await this.options.inputFS.readFile(dependency.sourcePath, 'utf8'),
56 codeHighlights: dependency.loc ? [{
57 start: dependency.loc.start,
58 end: dependency.loc.end
59 }] : []
60 };
61 }
62
63 return new _diagnostic.default({
64 diagnostic
65 });
66 }
67
68 async resolve(dependency) {
69 let dep = new _Dependency.default(dependency);
70 (0, _ReporterRunner.report)({
71 type: 'buildProgress',
72 phase: 'resolving',
73 dependency: dep
74 });
75 let resolvers = await this.config.getResolvers();
76 let pipeline;
77 let filePath;
78 let validPipelines = new Set(this.config.getNamedPipelines());
79
80 if ( // Don't consider absolute paths. Absolute paths are only supported for entries,
81 // and include e.g. `C:\` on Windows, conflicting with pipelines.
82 !_path.default.isAbsolute(dependency.moduleSpecifier) && dependency.moduleSpecifier.includes(':')) {
83 [pipeline, filePath] = dependency.moduleSpecifier.split(':');
84
85 if (!validPipelines.has(pipeline)) {
86 if (dep.isURL) {
87 // This may be a url protocol or scheme rather than a pipeline, such as
88 // `url('http://example.com/foo.png')`
89 return null;
90 } else {
91 throw new Error(`Unknown pipeline ${pipeline}.`);
92 }
93 }
94 } else {
95 if (dependency.isURL && dependency.moduleSpecifier.startsWith('//')) {
96 // A protocol-relative URL, e.g `url('//example.com/foo.png')`
97 return null;
98 }
99
100 filePath = dependency.moduleSpecifier;
101 }
102
103 if (dependency.isURL) {
104 let parsed = _url.default.parse(filePath);
105
106 if (typeof parsed.pathname !== 'string') {
107 throw new Error(`Received URL without a pathname ${filePath}.`);
108 }
109
110 filePath = decodeURIComponent(parsed.pathname);
111
112 if (!pipeline) {
113 pipeline = 'url';
114 }
115 }
116
117 for (let resolver of resolvers) {
118 try {
119 let result = await resolver.plugin.resolve({
120 filePath,
121 dependency: dep,
122 options: this.pluginOptions,
123 logger: new _logger.PluginLogger({
124 origin: resolver.name
125 })
126 });
127
128 if (result && result.isExcluded) {
129 return null;
130 }
131
132 if (result && result.filePath) {
133 var _pipeline;
134
135 return {
136 filePath: result.filePath,
137 sideEffects: result.sideEffects,
138 code: result.code,
139 env: dependency.env,
140 pipeline: (_pipeline = pipeline) !== null && _pipeline !== void 0 ? _pipeline : dependency.pipeline
141 };
142 }
143 } catch (e) {
144 throw new _diagnostic.default({
145 diagnostic: (0, _diagnostic.errorToDiagnostic)(e, resolver.name)
146 });
147 }
148 }
149
150 if (dep.isOptional) {
151 return null;
152 }
153
154 let dir = dependency.sourcePath ? _path.default.dirname(dependency.sourcePath) : '<none>';
155 let err = await this.getThrowableDiagnostic(dependency, `Cannot find module '${dependency.moduleSpecifier}' from '${dir}'`);
156 err.code = 'MODULE_NOT_FOUND';
157 throw err;
158 }
159
160}
161
162exports.default = ResolverRunner;
\No newline at end of file