@atlaspack/transformer-js 3.2.3-canary.9 → 3.2.3-canary.91
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/lib/JSTransformer.js +28 -12
- package/package.json +8 -8
- package/src/JSTransformer.js +34 -21
package/lib/JSTransformer.js
CHANGED
|
@@ -25,6 +25,13 @@ function _rust() {
|
|
|
25
25
|
};
|
|
26
26
|
return data;
|
|
27
27
|
}
|
|
28
|
+
function _assert() {
|
|
29
|
+
const data = _interopRequireDefault(require("assert"));
|
|
30
|
+
_assert = function () {
|
|
31
|
+
return data;
|
|
32
|
+
};
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
28
35
|
function _browserslist() {
|
|
29
36
|
const data = _interopRequireDefault(require("browserslist"));
|
|
30
37
|
_browserslist = function () {
|
|
@@ -160,24 +167,25 @@ var _default = exports.default = new (_plugin().Transformer)({
|
|
|
160
167
|
config,
|
|
161
168
|
options
|
|
162
169
|
}) {
|
|
163
|
-
let
|
|
170
|
+
let packageJson = await config.getPackage();
|
|
164
171
|
let isJSX, pragma, pragmaFrag, jsxImportSource, automaticJSXRuntime, reactRefresh, decorators, useDefineForClassFields;
|
|
165
172
|
if (config.isSource) {
|
|
166
|
-
var
|
|
173
|
+
var _packageJson$dependen2, _packageJson$devDepen2, _packageJson$peerDepe2, _await$config$getConf;
|
|
167
174
|
let reactLib;
|
|
168
|
-
if (
|
|
175
|
+
if (packageJson !== null && packageJson !== void 0 && packageJson.alias && packageJson.alias['react']) {
|
|
169
176
|
// e.g.: `{ alias: { "react": "preact/compat" } }`
|
|
170
177
|
reactLib = 'react';
|
|
171
178
|
} else {
|
|
172
179
|
// Find a dependency that we can map to a JSX pragma
|
|
173
180
|
reactLib = Object.keys(JSX_PRAGMA).find(libName => {
|
|
174
|
-
var
|
|
175
|
-
return (
|
|
181
|
+
var _packageJson$dependen, _packageJson$devDepen, _packageJson$peerDepe;
|
|
182
|
+
return (packageJson === null || packageJson === void 0 || (_packageJson$dependen = packageJson.dependencies) === null || _packageJson$dependen === void 0 ? void 0 : _packageJson$dependen[libName]) || (packageJson === null || packageJson === void 0 || (_packageJson$devDepen = packageJson.devDependencies) === null || _packageJson$devDepen === void 0 ? void 0 : _packageJson$devDepen[libName]) || (packageJson === null || packageJson === void 0 || (_packageJson$peerDepe = packageJson.peerDependencies) === null || _packageJson$peerDepe === void 0 ? void 0 : _packageJson$peerDepe[libName]);
|
|
176
183
|
});
|
|
177
184
|
}
|
|
178
|
-
reactRefresh = options.hmrOptions && options.mode === 'development' && Boolean((
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
reactRefresh = options.hmrOptions && options.mode === 'development' && Boolean((packageJson === null || packageJson === void 0 || (_packageJson$dependen2 = packageJson.dependencies) === null || _packageJson$dependen2 === void 0 ? void 0 : _packageJson$dependen2.react) || (packageJson === null || packageJson === void 0 || (_packageJson$devDepen2 = packageJson.devDependencies) === null || _packageJson$devDepen2 === void 0 ? void 0 : _packageJson$devDepen2.react) || (packageJson === null || packageJson === void 0 || (_packageJson$peerDepe2 = packageJson.peerDependencies) === null || _packageJson$peerDepe2 === void 0 ? void 0 : _packageJson$peerDepe2.react));
|
|
186
|
+
const compilerOptions = (_await$config$getConf = await config.getConfigFrom(options.projectRoot + '/index', ['tsconfig.json', 'jsconfig.json'], {
|
|
187
|
+
readTracking: true
|
|
188
|
+
})) === null || _await$config$getConf === void 0 || (_await$config$getConf = _await$config$getConf.contents) === null || _await$config$getConf === void 0 ? void 0 : _await$config$getConf.compilerOptions;
|
|
181
189
|
|
|
182
190
|
// Use explicitly defined JSX options in tsconfig.json over inferred values from dependencies.
|
|
183
191
|
pragma = (compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.jsxFactory) || (reactLib ? JSX_PRAGMA[reactLib].pragma : undefined);
|
|
@@ -186,10 +194,10 @@ var _default = exports.default = new (_plugin().Transformer)({
|
|
|
186
194
|
jsxImportSource = compilerOptions === null || compilerOptions === void 0 ? void 0 : compilerOptions.jsxImportSource;
|
|
187
195
|
automaticJSXRuntime = true;
|
|
188
196
|
} else if (reactLib) {
|
|
189
|
-
var _JSX_PRAGMA$effective,
|
|
190
|
-
let effectiveReactLib =
|
|
197
|
+
var _JSX_PRAGMA$effective, _packageJson$dependen3, _packageJson$devDepen3, _packageJson$peerDepe3, _semver$minVersion;
|
|
198
|
+
let effectiveReactLib = packageJson !== null && packageJson !== void 0 && packageJson.alias && packageJson.alias['react'] === 'preact/compat' ? 'preact' : reactLib;
|
|
191
199
|
let automaticVersion = (_JSX_PRAGMA$effective = JSX_PRAGMA[effectiveReactLib]) === null || _JSX_PRAGMA$effective === void 0 ? void 0 : _JSX_PRAGMA$effective.automatic;
|
|
192
|
-
let reactLibVersion = (
|
|
200
|
+
let reactLibVersion = (packageJson === null || packageJson === void 0 || (_packageJson$dependen3 = packageJson.dependencies) === null || _packageJson$dependen3 === void 0 ? void 0 : _packageJson$dependen3[effectiveReactLib]) || (packageJson === null || packageJson === void 0 || (_packageJson$devDepen3 = packageJson.devDependencies) === null || _packageJson$devDepen3 === void 0 ? void 0 : _packageJson$devDepen3[effectiveReactLib]) || (packageJson === null || packageJson === void 0 || (_packageJson$peerDepe3 = packageJson.peerDependencies) === null || _packageJson$peerDepe3 === void 0 ? void 0 : _packageJson$peerDepe3[effectiveReactLib]);
|
|
193
201
|
reactLibVersion = reactLibVersion ? _semver().default.validRange(reactLibVersion) : null;
|
|
194
202
|
let minReactLibVersion = reactLibVersion !== null && reactLibVersion !== '*' ? (_semver$minVersion = _semver().default.minVersion(reactLibVersion)) === null || _semver$minVersion === void 0 ? void 0 : _semver$minVersion.toString() : null;
|
|
195
203
|
automaticJSXRuntime = automaticVersion && !(compilerOptions !== null && compilerOptions !== void 0 && compilerOptions.jsxFactory) && minReactLibVersion != null && _semver().default.satisfies(minReactLibVersion, automaticVersion, {
|
|
@@ -215,7 +223,7 @@ var _default = exports.default = new (_plugin().Transformer)({
|
|
|
215
223
|
|
|
216
224
|
// Check if we should ignore fs calls
|
|
217
225
|
// See https://github.com/defunctzombie/node-browser-resolve#skip
|
|
218
|
-
let ignoreFS =
|
|
226
|
+
let ignoreFS = packageJson && packageJson.browser && typeof packageJson.browser === 'object' && packageJson.browser.fs === false;
|
|
219
227
|
let conf = await config.getConfigFrom(options.projectRoot + '/index', [], {
|
|
220
228
|
packageKey: '@atlaspack/transformer-js'
|
|
221
229
|
});
|
|
@@ -373,6 +381,7 @@ var _default = exports.default = new (_plugin().Transformer)({
|
|
|
373
381
|
standalone: asset.query.has('standalone'),
|
|
374
382
|
inline_constants: config.inlineConstants,
|
|
375
383
|
conditional_bundling: options.featureFlags.conditionalBundlingApi,
|
|
384
|
+
hmr_improvements: options.featureFlags.hmrImprovements,
|
|
376
385
|
magic_comments: Boolean(config === null || config === void 0 ? void 0 : config.magicComments),
|
|
377
386
|
callMacro: asset.isSource ? async (err, src, exportName, args, loc) => {
|
|
378
387
|
let mod;
|
|
@@ -629,6 +638,13 @@ var _default = exports.default = new (_plugin().Transformer)({
|
|
|
629
638
|
});
|
|
630
639
|
} else if (dep.kind === 'File') {
|
|
631
640
|
asset.invalidateOnFileChange(dep.specifier);
|
|
641
|
+
} else if (dep.kind === 'Id') {
|
|
642
|
+
// Record parcelRequire calls so that the dev packager can add them as dependencies.
|
|
643
|
+
// This allows the HMR runtime to collect parents across async boundaries (through runtimes).
|
|
644
|
+
// TODO: ideally this would result as an actual dep in the graph rather than asset.meta.
|
|
645
|
+
asset.meta.hmrDeps ??= [];
|
|
646
|
+
(0, _assert().default)(Array.isArray(asset.meta.hmrDeps));
|
|
647
|
+
asset.meta.hmrDeps.push(dep.specifier);
|
|
632
648
|
} else {
|
|
633
649
|
let meta = {
|
|
634
650
|
kind: dep.kind
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaspack/transformer-js",
|
|
3
|
-
"version": "3.2.3-canary.
|
|
3
|
+
"version": "3.2.3-canary.91+644b157de",
|
|
4
4
|
"license": "(MIT OR Apache-2.0)",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"src"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@atlaspack/diagnostic": "2.14.1-canary.
|
|
26
|
-
"@atlaspack/feature-flags": "2.14.1-canary.
|
|
27
|
-
"@atlaspack/plugin": "2.14.5-canary.
|
|
28
|
-
"@atlaspack/rust": "3.2.1-canary.
|
|
29
|
-
"@atlaspack/utils": "2.14.5-canary.
|
|
30
|
-
"@atlaspack/workers": "2.14.5-canary.
|
|
25
|
+
"@atlaspack/diagnostic": "2.14.1-canary.159+644b157de",
|
|
26
|
+
"@atlaspack/feature-flags": "2.14.1-canary.159+644b157de",
|
|
27
|
+
"@atlaspack/plugin": "2.14.5-canary.91+644b157de",
|
|
28
|
+
"@atlaspack/rust": "3.2.1-canary.91+644b157de",
|
|
29
|
+
"@atlaspack/utils": "2.14.5-canary.91+644b157de",
|
|
30
|
+
"@atlaspack/workers": "2.14.5-canary.91+644b157de",
|
|
31
31
|
"@parcel/source-map": "^2.1.1",
|
|
32
32
|
"@swc/helpers": "^0.5.15",
|
|
33
33
|
"browserslist": "^4.6.6",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"@atlaspack/core": "^2.13.1"
|
|
40
40
|
},
|
|
41
41
|
"type": "commonjs",
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "644b157dee72a871acc2d0facf0b87b8eea51956"
|
|
43
43
|
}
|
package/src/JSTransformer.js
CHANGED
|
@@ -12,6 +12,7 @@ import type {Diagnostic} from '@atlaspack/diagnostic';
|
|
|
12
12
|
import SourceMap from '@parcel/source-map';
|
|
13
13
|
import {Transformer} from '@atlaspack/plugin';
|
|
14
14
|
import {transform, transformAsync} from '@atlaspack/rust';
|
|
15
|
+
import invariant from 'assert';
|
|
15
16
|
import browserslist from 'browserslist';
|
|
16
17
|
import semver from 'semver';
|
|
17
18
|
import nullthrows from 'nullthrows';
|
|
@@ -173,7 +174,7 @@ type MacroContext = {|
|
|
|
173
174
|
|
|
174
175
|
export default (new Transformer({
|
|
175
176
|
async loadConfig({config, options}) {
|
|
176
|
-
let
|
|
177
|
+
let packageJson = await config.getPackage();
|
|
177
178
|
let isJSX,
|
|
178
179
|
pragma,
|
|
179
180
|
pragmaFrag,
|
|
@@ -184,16 +185,16 @@ export default (new Transformer({
|
|
|
184
185
|
useDefineForClassFields;
|
|
185
186
|
if (config.isSource) {
|
|
186
187
|
let reactLib;
|
|
187
|
-
if (
|
|
188
|
+
if (packageJson?.alias && packageJson.alias['react']) {
|
|
188
189
|
// e.g.: `{ alias: { "react": "preact/compat" } }`
|
|
189
190
|
reactLib = 'react';
|
|
190
191
|
} else {
|
|
191
192
|
// Find a dependency that we can map to a JSX pragma
|
|
192
193
|
reactLib = Object.keys(JSX_PRAGMA).find(
|
|
193
194
|
(libName) =>
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
195
|
+
packageJson?.dependencies?.[libName] ||
|
|
196
|
+
packageJson?.devDependencies?.[libName] ||
|
|
197
|
+
packageJson?.peerDependencies?.[libName],
|
|
197
198
|
);
|
|
198
199
|
}
|
|
199
200
|
|
|
@@ -201,16 +202,20 @@ export default (new Transformer({
|
|
|
201
202
|
options.hmrOptions &&
|
|
202
203
|
options.mode === 'development' &&
|
|
203
204
|
Boolean(
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
packageJson?.dependencies?.react ||
|
|
206
|
+
packageJson?.devDependencies?.react ||
|
|
207
|
+
packageJson?.peerDependencies?.react,
|
|
207
208
|
);
|
|
208
209
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
210
|
+
const compilerOptions: TSConfig['compilerOptions'] = (
|
|
211
|
+
await config.getConfigFrom<TSConfig>(
|
|
212
|
+
options.projectRoot + '/index',
|
|
213
|
+
['tsconfig.json', 'jsconfig.json'],
|
|
214
|
+
{
|
|
215
|
+
readTracking: true,
|
|
216
|
+
},
|
|
217
|
+
)
|
|
218
|
+
)?.contents?.compilerOptions;
|
|
214
219
|
|
|
215
220
|
// Use explicitly defined JSX options in tsconfig.json over inferred values from dependencies.
|
|
216
221
|
pragma =
|
|
@@ -229,14 +234,14 @@ export default (new Transformer({
|
|
|
229
234
|
automaticJSXRuntime = true;
|
|
230
235
|
} else if (reactLib) {
|
|
231
236
|
let effectiveReactLib =
|
|
232
|
-
|
|
237
|
+
packageJson?.alias && packageJson.alias['react'] === 'preact/compat'
|
|
233
238
|
? 'preact'
|
|
234
239
|
: reactLib;
|
|
235
240
|
let automaticVersion = JSX_PRAGMA[effectiveReactLib]?.automatic;
|
|
236
241
|
let reactLibVersion =
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
242
|
+
packageJson?.dependencies?.[effectiveReactLib] ||
|
|
243
|
+
packageJson?.devDependencies?.[effectiveReactLib] ||
|
|
244
|
+
packageJson?.peerDependencies?.[effectiveReactLib];
|
|
240
245
|
reactLibVersion = reactLibVersion
|
|
241
246
|
? semver.validRange(reactLibVersion)
|
|
242
247
|
: null;
|
|
@@ -278,10 +283,10 @@ export default (new Transformer({
|
|
|
278
283
|
// Check if we should ignore fs calls
|
|
279
284
|
// See https://github.com/defunctzombie/node-browser-resolve#skip
|
|
280
285
|
let ignoreFS =
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
typeof
|
|
284
|
-
|
|
286
|
+
packageJson &&
|
|
287
|
+
packageJson.browser &&
|
|
288
|
+
typeof packageJson.browser === 'object' &&
|
|
289
|
+
packageJson.browser.fs === false;
|
|
285
290
|
|
|
286
291
|
let conf = await config.getConfigFrom(options.projectRoot + '/index', [], {
|
|
287
292
|
packageKey: '@atlaspack/transformer-js',
|
|
@@ -470,6 +475,7 @@ export default (new Transformer({
|
|
|
470
475
|
standalone: asset.query.has('standalone'),
|
|
471
476
|
inline_constants: config.inlineConstants,
|
|
472
477
|
conditional_bundling: options.featureFlags.conditionalBundlingApi,
|
|
478
|
+
hmr_improvements: options.featureFlags.hmrImprovements,
|
|
473
479
|
magic_comments: Boolean(config?.magicComments),
|
|
474
480
|
callMacro: asset.isSource
|
|
475
481
|
? async (err, src, exportName, args, loc) => {
|
|
@@ -776,6 +782,13 @@ export default (new Transformer({
|
|
|
776
782
|
});
|
|
777
783
|
} else if (dep.kind === 'File') {
|
|
778
784
|
asset.invalidateOnFileChange(dep.specifier);
|
|
785
|
+
} else if (dep.kind === 'Id') {
|
|
786
|
+
// Record parcelRequire calls so that the dev packager can add them as dependencies.
|
|
787
|
+
// This allows the HMR runtime to collect parents across async boundaries (through runtimes).
|
|
788
|
+
// TODO: ideally this would result as an actual dep in the graph rather than asset.meta.
|
|
789
|
+
asset.meta.hmrDeps ??= [];
|
|
790
|
+
invariant(Array.isArray(asset.meta.hmrDeps));
|
|
791
|
+
asset.meta.hmrDeps.push(dep.specifier);
|
|
779
792
|
} else {
|
|
780
793
|
let meta: JSONObject = {kind: dep.kind};
|
|
781
794
|
if (dep.attributes) {
|