@atlaspack/core 2.24.0 → 2.24.2-dev-ts-project-refs-d30e9754f.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/LICENSE +201 -0
- package/dist/AssetGraph.js +591 -0
- package/dist/Atlaspack.js +656 -0
- package/dist/AtlaspackConfig.js +324 -0
- package/dist/AtlaspackConfig.schema.js +108 -0
- package/dist/BundleGraph.js +1628 -0
- package/dist/CommittedAsset.js +142 -0
- package/dist/Dependency.js +125 -0
- package/dist/Environment.js +132 -0
- package/dist/EnvironmentManager.js +108 -0
- package/dist/IdentifierRegistry.js +38 -0
- package/dist/InternalConfig.js +37 -0
- package/dist/PackagerRunner.js +531 -0
- package/dist/ReporterRunner.js +151 -0
- package/dist/RequestTracker.js +1368 -0
- package/dist/SymbolPropagation.js +620 -0
- package/dist/TargetDescriptor.schema.js +143 -0
- package/dist/Transformation.js +487 -0
- package/dist/UncommittedAsset.js +315 -0
- package/dist/Validation.js +196 -0
- package/dist/applyRuntimes.js +305 -0
- package/dist/assetUtils.js +168 -0
- package/dist/atlaspack-v3/AtlaspackV3.js +70 -0
- package/dist/atlaspack-v3/NapiWorkerPool.js +57 -0
- package/dist/atlaspack-v3/fs.js +52 -0
- package/dist/atlaspack-v3/index.js +25 -0
- package/dist/atlaspack-v3/jsCallable.js +16 -0
- package/dist/atlaspack-v3/worker/compat/asset-symbols.js +190 -0
- package/dist/atlaspack-v3/worker/compat/bitflags.js +94 -0
- package/dist/atlaspack-v3/worker/compat/dependency.js +43 -0
- package/dist/atlaspack-v3/worker/compat/environment.js +57 -0
- package/dist/atlaspack-v3/worker/compat/index.js +25 -0
- package/dist/atlaspack-v3/worker/compat/mutable-asset.js +152 -0
- package/dist/atlaspack-v3/worker/compat/plugin-config.js +76 -0
- package/dist/atlaspack-v3/worker/compat/plugin-logger.js +26 -0
- package/dist/atlaspack-v3/worker/compat/plugin-options.js +122 -0
- package/dist/atlaspack-v3/worker/compat/plugin-tracer.js +10 -0
- package/dist/atlaspack-v3/worker/compat/target.js +14 -0
- package/dist/atlaspack-v3/worker/worker.js +292 -0
- package/dist/constants.js +17 -0
- package/dist/dumpGraphToGraphViz.js +281 -0
- package/dist/index.js +62 -0
- package/dist/loadAtlaspackPlugin.js +128 -0
- package/dist/loadDotEnv.js +41 -0
- package/dist/projectPath.js +83 -0
- package/dist/public/Asset.js +279 -0
- package/dist/public/Bundle.js +224 -0
- package/dist/public/BundleGraph.js +359 -0
- package/dist/public/BundleGroup.js +53 -0
- package/dist/public/Config.js +286 -0
- package/dist/public/Dependency.js +138 -0
- package/dist/public/Environment.js +278 -0
- package/dist/public/MutableBundleGraph.js +277 -0
- package/dist/public/PluginOptions.js +80 -0
- package/dist/public/Symbols.js +248 -0
- package/dist/public/Target.js +69 -0
- package/dist/registerCoreWithSerializer.js +38 -0
- package/dist/requests/AssetGraphRequest.js +429 -0
- package/dist/requests/AssetGraphRequestRust.js +246 -0
- package/dist/requests/AssetRequest.js +130 -0
- package/dist/requests/AtlaspackBuildRequest.js +60 -0
- package/dist/requests/AtlaspackConfigRequest.js +490 -0
- package/dist/requests/BundleGraphRequest.js +441 -0
- package/dist/requests/ConfigRequest.js +222 -0
- package/dist/requests/DevDepRequest.js +204 -0
- package/dist/requests/EntryRequest.js +314 -0
- package/dist/requests/PackageRequest.js +65 -0
- package/dist/requests/PathRequest.js +349 -0
- package/dist/requests/TargetRequest.js +1310 -0
- package/dist/requests/ValidationRequest.js +49 -0
- package/dist/requests/WriteBundleRequest.js +254 -0
- package/dist/requests/WriteBundlesRequest.js +165 -0
- package/dist/requests/asset-graph-diff.js +126 -0
- package/dist/requests/asset-graph-dot.js +131 -0
- package/dist/resolveOptions.js +268 -0
- package/dist/rustWorkerThreadDylibHack.js +19 -0
- package/dist/serializerCore.browser.js +43 -0
- package/dist/summarizeRequest.js +39 -0
- package/dist/types.js +31 -0
- package/dist/utils.js +172 -0
- package/dist/worker.js +130 -0
- package/lib/AssetGraph.js +1 -0
- package/lib/atlaspack-v3/AtlaspackV3.js +7 -3
- package/lib/requests/AssetGraphRequestRust.js +1 -1
- package/lib/types/atlaspack-v3/AtlaspackV3.d.ts +1 -1
- package/package.json +22 -22
- package/src/AssetGraph.ts +1 -0
- package/src/atlaspack-v3/AtlaspackV3.ts +12 -3
- package/src/requests/AssetGraphRequestRust.ts +1 -1
- package/tsconfig.json +55 -2
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AtlaspackConfig = void 0;
|
|
40
|
+
const diagnostic_1 = __importStar(require("@atlaspack/diagnostic"));
|
|
41
|
+
const json5_1 = __importDefault(require("json5"));
|
|
42
|
+
const utils_1 = require("@atlaspack/utils");
|
|
43
|
+
const path_1 = require("path");
|
|
44
|
+
const loadAtlaspackPlugin_1 = __importDefault(require("./loadAtlaspackPlugin"));
|
|
45
|
+
const projectPath_1 = require("./projectPath");
|
|
46
|
+
class AtlaspackConfig {
|
|
47
|
+
constructor(config, options) {
|
|
48
|
+
this.options = options;
|
|
49
|
+
this.filePath = config.filePath;
|
|
50
|
+
this.resolvers = config.resolvers || [];
|
|
51
|
+
this.transformers = config.transformers || {};
|
|
52
|
+
this.runtimes = config.runtimes || [];
|
|
53
|
+
this.bundler = config.bundler;
|
|
54
|
+
this.namers = config.namers || [];
|
|
55
|
+
this.packagers = config.packagers || {};
|
|
56
|
+
this.optimizers = config.optimizers || {};
|
|
57
|
+
this.compressors = config.compressors || {};
|
|
58
|
+
this.reporters = config.reporters || [];
|
|
59
|
+
this.validators = config.validators || {};
|
|
60
|
+
this.pluginCache = new Map();
|
|
61
|
+
this.regexCache = new Map();
|
|
62
|
+
}
|
|
63
|
+
static deserialize(serialized) {
|
|
64
|
+
return new AtlaspackConfig(serialized.config, serialized.options);
|
|
65
|
+
}
|
|
66
|
+
getConfig() {
|
|
67
|
+
return {
|
|
68
|
+
filePath: this.filePath,
|
|
69
|
+
resolvers: this.resolvers,
|
|
70
|
+
transformers: this.transformers,
|
|
71
|
+
validators: this.validators,
|
|
72
|
+
runtimes: this.runtimes,
|
|
73
|
+
bundler: this.bundler,
|
|
74
|
+
namers: this.namers,
|
|
75
|
+
packagers: this.packagers,
|
|
76
|
+
optimizers: this.optimizers,
|
|
77
|
+
compressors: this.compressors,
|
|
78
|
+
reporters: this.reporters,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
serialize() {
|
|
82
|
+
return {
|
|
83
|
+
$$raw: false,
|
|
84
|
+
config: this.getConfig(),
|
|
85
|
+
options: this.options,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
_loadPlugin(node) {
|
|
89
|
+
let plugin = this.pluginCache.get(node.packageName);
|
|
90
|
+
if (plugin) {
|
|
91
|
+
return plugin;
|
|
92
|
+
}
|
|
93
|
+
plugin = (0, loadAtlaspackPlugin_1.default)(node.packageName, (0, projectPath_1.fromProjectPath)(this.options.projectRoot, node.resolveFrom), node.keyPath, this.options);
|
|
94
|
+
this.pluginCache.set(node.packageName, plugin);
|
|
95
|
+
return plugin;
|
|
96
|
+
}
|
|
97
|
+
async loadPlugin(node) {
|
|
98
|
+
let plugin = await this._loadPlugin(node);
|
|
99
|
+
// @ts-expect-error TS2322
|
|
100
|
+
return {
|
|
101
|
+
...plugin,
|
|
102
|
+
name: node.packageName,
|
|
103
|
+
keyPath: node.keyPath,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
invalidatePlugin(packageName) {
|
|
107
|
+
this.pluginCache.delete(packageName);
|
|
108
|
+
}
|
|
109
|
+
loadPlugins(plugins) {
|
|
110
|
+
return Promise.all(plugins.map((p) => this.loadPlugin(p)));
|
|
111
|
+
}
|
|
112
|
+
async getResolvers() {
|
|
113
|
+
if (this.resolvers.length === 0) {
|
|
114
|
+
throw await this.missingPluginError(this.resolvers, 'No resolver plugins specified in .parcelrc config', '/resolvers');
|
|
115
|
+
}
|
|
116
|
+
return this.loadPlugins(this.resolvers);
|
|
117
|
+
}
|
|
118
|
+
_getValidatorNodes(filePath) {
|
|
119
|
+
let validators = this.matchGlobMapPipelines(filePath, this.validators) || [];
|
|
120
|
+
return validators;
|
|
121
|
+
}
|
|
122
|
+
getValidatorNames(filePath) {
|
|
123
|
+
let validators = this._getValidatorNodes(filePath);
|
|
124
|
+
return validators.map((v) => v.packageName);
|
|
125
|
+
}
|
|
126
|
+
getValidators(filePath) {
|
|
127
|
+
let validators = this._getValidatorNodes(filePath);
|
|
128
|
+
return this.loadPlugins(validators);
|
|
129
|
+
}
|
|
130
|
+
getNamedPipelines() {
|
|
131
|
+
return Object.keys(this.transformers)
|
|
132
|
+
.filter((glob) => glob.includes(':'))
|
|
133
|
+
.map((glob) => glob.split(':')[0]);
|
|
134
|
+
}
|
|
135
|
+
async getTransformers(filePath, pipeline, allowEmpty) {
|
|
136
|
+
let transformers = this.matchGlobMapPipelines(filePath, this.transformers, pipeline);
|
|
137
|
+
if (!transformers || transformers.length === 0) {
|
|
138
|
+
if (allowEmpty) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
throw await this.missingPluginError(this.transformers, (0, diagnostic_1.md) `No transformers found for __${(0, projectPath_1.fromProjectPathRelative)(filePath)}__` +
|
|
142
|
+
(pipeline != null ? ` with pipeline: '${pipeline}'` : '') +
|
|
143
|
+
'.', '/transformers');
|
|
144
|
+
}
|
|
145
|
+
return this.loadPlugins(transformers);
|
|
146
|
+
}
|
|
147
|
+
async getBundler() {
|
|
148
|
+
if (!this.bundler) {
|
|
149
|
+
throw await this.missingPluginError([], 'No bundler specified in .parcelrc config', '/bundler');
|
|
150
|
+
}
|
|
151
|
+
return this.loadPlugin(this.bundler);
|
|
152
|
+
}
|
|
153
|
+
async getNamers() {
|
|
154
|
+
if (this.namers.length === 0) {
|
|
155
|
+
throw await this.missingPluginError(this.namers, 'No namer plugins specified in .parcelrc config', '/namers');
|
|
156
|
+
}
|
|
157
|
+
return this.loadPlugins(this.namers);
|
|
158
|
+
}
|
|
159
|
+
getRuntimes() {
|
|
160
|
+
if (!this.runtimes) {
|
|
161
|
+
return Promise.resolve([]);
|
|
162
|
+
}
|
|
163
|
+
return this.loadPlugins(this.runtimes);
|
|
164
|
+
}
|
|
165
|
+
async getPackager(filePath) {
|
|
166
|
+
let packager = this.matchGlobMap((0, projectPath_1.toProjectPathUnsafe)(filePath), this.packagers);
|
|
167
|
+
if (!packager) {
|
|
168
|
+
throw await this.missingPluginError(this.packagers, (0, diagnostic_1.md) `No packager found for __${filePath}__.`, '/packagers');
|
|
169
|
+
}
|
|
170
|
+
return this.loadPlugin(packager);
|
|
171
|
+
}
|
|
172
|
+
_getOptimizerNodes(filePath, pipeline) {
|
|
173
|
+
// If a pipeline is specified, but it doesn't exist in the optimizers config, ignore it.
|
|
174
|
+
// Pipelines for bundles come from their entry assets, so the pipeline likely exists in transformers.
|
|
175
|
+
if (pipeline) {
|
|
176
|
+
let prefix = pipeline + ':';
|
|
177
|
+
if (!Object.keys(this.optimizers).some((glob) => glob.startsWith(prefix))) {
|
|
178
|
+
pipeline = null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return (this.matchGlobMapPipelines((0, projectPath_1.toProjectPathUnsafe)(filePath), this.optimizers, pipeline) ?? []);
|
|
182
|
+
}
|
|
183
|
+
getOptimizerNames(filePath, pipeline) {
|
|
184
|
+
let optimizers = this._getOptimizerNodes(filePath, pipeline);
|
|
185
|
+
return optimizers.map((o) => o.packageName);
|
|
186
|
+
}
|
|
187
|
+
getOptimizers(filePath, pipeline) {
|
|
188
|
+
let optimizers = this._getOptimizerNodes(filePath, pipeline);
|
|
189
|
+
if (optimizers.length === 0) {
|
|
190
|
+
return Promise.resolve([]);
|
|
191
|
+
}
|
|
192
|
+
return this.loadPlugins(optimizers);
|
|
193
|
+
}
|
|
194
|
+
async getCompressors(filePath) {
|
|
195
|
+
let compressors = this.matchGlobMapPipelines((0, projectPath_1.toProjectPathUnsafe)(filePath), this.compressors) ?? [];
|
|
196
|
+
if (compressors.length === 0) {
|
|
197
|
+
throw await this.missingPluginError(this.compressors, (0, diagnostic_1.md) `No compressors found for __${filePath}__.`, '/compressors');
|
|
198
|
+
}
|
|
199
|
+
return this.loadPlugins(compressors);
|
|
200
|
+
}
|
|
201
|
+
getReporters() {
|
|
202
|
+
return this.loadPlugins(this.reporters);
|
|
203
|
+
}
|
|
204
|
+
isGlobMatch(projectPath, pattern, pipeline) {
|
|
205
|
+
// glob's shouldn't be dependant on absolute paths anyway
|
|
206
|
+
let filePath = (0, projectPath_1.fromProjectPathRelative)(projectPath);
|
|
207
|
+
let [patternPipeline, patternGlob] = pattern.split(':');
|
|
208
|
+
if (!patternGlob) {
|
|
209
|
+
patternGlob = patternPipeline;
|
|
210
|
+
// @ts-expect-error TS2322
|
|
211
|
+
patternPipeline = null;
|
|
212
|
+
}
|
|
213
|
+
let re = this.regexCache.get(patternGlob);
|
|
214
|
+
if (!re) {
|
|
215
|
+
re = (0, utils_1.globToRegex)(patternGlob, { dot: true, nocase: true });
|
|
216
|
+
this.regexCache.set(patternGlob, re);
|
|
217
|
+
}
|
|
218
|
+
return ((pipeline === patternPipeline || (!pipeline && !patternPipeline)) &&
|
|
219
|
+
(re.test(filePath) || re.test((0, path_1.basename)(filePath))));
|
|
220
|
+
}
|
|
221
|
+
matchGlobMap(filePath, globMap) {
|
|
222
|
+
for (let pattern in globMap) {
|
|
223
|
+
if (this.isGlobMatch(filePath, pattern)) {
|
|
224
|
+
return globMap[pattern];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
matchGlobMapPipelines(filePath, globMap, pipeline) {
|
|
230
|
+
let matches = [];
|
|
231
|
+
if (pipeline) {
|
|
232
|
+
// If a pipeline is requested, a the glob needs to match exactly
|
|
233
|
+
let exactMatch;
|
|
234
|
+
for (let pattern in globMap) {
|
|
235
|
+
if (this.isGlobMatch(filePath, pattern, pipeline)) {
|
|
236
|
+
exactMatch = globMap[pattern];
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (!exactMatch) {
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
matches.push(exactMatch);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
for (let pattern in globMap) {
|
|
248
|
+
if (this.isGlobMatch(filePath, pattern)) {
|
|
249
|
+
// @ts-expect-error TS2345
|
|
250
|
+
matches.push(globMap[pattern]);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
let flatten = () => {
|
|
254
|
+
let pipeline = matches.shift() || [];
|
|
255
|
+
let spreadIndex = pipeline.indexOf('...');
|
|
256
|
+
if (spreadIndex >= 0) {
|
|
257
|
+
pipeline = [
|
|
258
|
+
...pipeline.slice(0, spreadIndex),
|
|
259
|
+
...flatten(),
|
|
260
|
+
...pipeline.slice(spreadIndex + 1),
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
if (pipeline.includes('...')) {
|
|
264
|
+
throw new Error('Only one spread parameter can be included in a config pipeline');
|
|
265
|
+
}
|
|
266
|
+
return pipeline;
|
|
267
|
+
};
|
|
268
|
+
let res = flatten();
|
|
269
|
+
// @ts-expect-error TS2322
|
|
270
|
+
return res;
|
|
271
|
+
}
|
|
272
|
+
async missingPluginError(plugins, message, key) {
|
|
273
|
+
let configsWithPlugin;
|
|
274
|
+
if (Array.isArray(plugins)) {
|
|
275
|
+
configsWithPlugin = new Set(getConfigPaths(this.options, plugins));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
configsWithPlugin = new Set(Object.keys(plugins).flatMap((k) =>
|
|
279
|
+
// @ts-expect-error TS7053
|
|
280
|
+
Array.isArray(plugins[k])
|
|
281
|
+
? // @ts-expect-error TS7053
|
|
282
|
+
getConfigPaths(this.options, plugins[k])
|
|
283
|
+
: // @ts-expect-error TS7053
|
|
284
|
+
[getConfigPath(this.options, plugins[k])]));
|
|
285
|
+
}
|
|
286
|
+
if (configsWithPlugin.size === 0) {
|
|
287
|
+
configsWithPlugin.add((0, projectPath_1.fromProjectPath)(this.options.projectRoot, this.filePath));
|
|
288
|
+
}
|
|
289
|
+
let seenKey = false;
|
|
290
|
+
let codeFrames = await Promise.all([...configsWithPlugin].map(async (filePath) => {
|
|
291
|
+
let configContents = await this.options.inputFS.readFile(filePath, 'utf8');
|
|
292
|
+
if (!json5_1.default.parse(configContents)[key.slice(1)]) {
|
|
293
|
+
key = '';
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
seenKey = true;
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
filePath,
|
|
300
|
+
code: configContents,
|
|
301
|
+
codeHighlights: (0, diagnostic_1.generateJSONCodeHighlights)(configContents, [{ key }]),
|
|
302
|
+
};
|
|
303
|
+
}));
|
|
304
|
+
return new diagnostic_1.default({
|
|
305
|
+
diagnostic: {
|
|
306
|
+
message,
|
|
307
|
+
origin: '@atlaspack/core',
|
|
308
|
+
codeFrames,
|
|
309
|
+
hints: !seenKey ? ['Try extending __@atlaspack/config-default__'] : [],
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
exports.AtlaspackConfig = AtlaspackConfig;
|
|
315
|
+
function getConfigPaths(options, nodes) {
|
|
316
|
+
return (nodes
|
|
317
|
+
// @ts-expect-error TS2339
|
|
318
|
+
.map((node) => (node !== '...' ? getConfigPath(options, node) : null))
|
|
319
|
+
.filter(Boolean));
|
|
320
|
+
}
|
|
321
|
+
function getConfigPath(options, node) {
|
|
322
|
+
// @ts-expect-error TS2339
|
|
323
|
+
return (0, projectPath_1.fromProjectPath)(options.projectRoot, node.resolveFrom);
|
|
324
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validatePackageName = validatePackageName;
|
|
4
|
+
// Parcel validates plugin package names due to:
|
|
5
|
+
// * https://github.com/parcel-bundler/parcel/issues/3397#issuecomment-521353931
|
|
6
|
+
// Ultimately:
|
|
7
|
+
// * We do not care about package names
|
|
8
|
+
// * Validation makes interop between parcel/atlaspack confusing.
|
|
9
|
+
function validatePackageName(
|
|
10
|
+
// eslint-disable-next-line no-unused-vars
|
|
11
|
+
pkg,
|
|
12
|
+
// eslint-disable-next-line no-unused-vars
|
|
13
|
+
pluginType,
|
|
14
|
+
// eslint-disable-next-line no-unused-vars
|
|
15
|
+
key) { }
|
|
16
|
+
const validatePluginName = (pluginType, key) => {
|
|
17
|
+
return (val) => {
|
|
18
|
+
// allow plugin spread...
|
|
19
|
+
if (val === '...')
|
|
20
|
+
return;
|
|
21
|
+
try {
|
|
22
|
+
validatePackageName(val, pluginType, key);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
return e.message;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
const validateExtends = (val) => {
|
|
30
|
+
// allow relative paths...
|
|
31
|
+
if (val.startsWith('.'))
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
validatePackageName(val, 'config', 'extends');
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
return e.message;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const pipelineSchema = (pluginType, key) => {
|
|
41
|
+
return {
|
|
42
|
+
type: 'array',
|
|
43
|
+
items: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
__validate: validatePluginName(pluginType, key),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const mapPipelineSchema = (pluginType, key) => {
|
|
50
|
+
return {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {},
|
|
53
|
+
additionalProperties: pipelineSchema(pluginType, key),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const mapStringSchema = (pluginType, key) => {
|
|
57
|
+
return {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {},
|
|
60
|
+
additionalProperties: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
__validate: validatePluginName(pluginType, key),
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.default = {
|
|
67
|
+
type: 'object',
|
|
68
|
+
properties: {
|
|
69
|
+
$schema: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
},
|
|
72
|
+
extends: {
|
|
73
|
+
oneOf: [
|
|
74
|
+
{
|
|
75
|
+
type: 'string',
|
|
76
|
+
__validate: validateExtends,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'array',
|
|
80
|
+
items: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
__validate: validateExtends,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
bundler: {
|
|
88
|
+
type: 'string',
|
|
89
|
+
__validate: validatePluginName('bundler', 'bundler'),
|
|
90
|
+
},
|
|
91
|
+
resolvers: pipelineSchema('resolver', 'resolvers'),
|
|
92
|
+
transformers: mapPipelineSchema('transformer', 'transformers'),
|
|
93
|
+
validators: mapPipelineSchema('validator', 'validators'),
|
|
94
|
+
namers: pipelineSchema('namer', 'namers'),
|
|
95
|
+
packagers: mapStringSchema('packager', 'packagers'),
|
|
96
|
+
optimizers: mapPipelineSchema('optimizer', 'optimizers'),
|
|
97
|
+
compressors: mapPipelineSchema('compressor', 'compressors'),
|
|
98
|
+
reporters: pipelineSchema('reporter', 'reporters'),
|
|
99
|
+
runtimes: pipelineSchema('runtime', 'runtimes'),
|
|
100
|
+
filePath: {
|
|
101
|
+
type: 'string',
|
|
102
|
+
},
|
|
103
|
+
resolveFrom: {
|
|
104
|
+
type: 'string',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
additionalProperties: false,
|
|
108
|
+
};
|