@atlaspack/transformer-js 3.2.3-canary.12 → 3.2.3-canary.120

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.
@@ -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 pkg = await config.getPackage();
170
+ let packageJson = await config.getPackage();
164
171
  let isJSX, pragma, pragmaFrag, jsxImportSource, automaticJSXRuntime, reactRefresh, decorators, useDefineForClassFields;
165
172
  if (config.isSource) {
166
- var _pkg$dependencies2, _pkg$devDependencies2, _pkg$peerDependencies2, _tsconfig$contents;
173
+ var _packageJson$dependen2, _packageJson$devDepen2, _packageJson$peerDepe2, _await$config$getConf;
167
174
  let reactLib;
168
- if (pkg !== null && pkg !== void 0 && pkg.alias && pkg.alias['react']) {
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 _pkg$dependencies, _pkg$devDependencies, _pkg$peerDependencies;
175
- return (pkg === null || pkg === void 0 || (_pkg$dependencies = pkg.dependencies) === null || _pkg$dependencies === void 0 ? void 0 : _pkg$dependencies[libName]) || (pkg === null || pkg === void 0 || (_pkg$devDependencies = pkg.devDependencies) === null || _pkg$devDependencies === void 0 ? void 0 : _pkg$devDependencies[libName]) || (pkg === null || pkg === void 0 || (_pkg$peerDependencies = pkg.peerDependencies) === null || _pkg$peerDependencies === void 0 ? void 0 : _pkg$peerDependencies[libName]);
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((pkg === null || pkg === void 0 || (_pkg$dependencies2 = pkg.dependencies) === null || _pkg$dependencies2 === void 0 ? void 0 : _pkg$dependencies2.react) || (pkg === null || pkg === void 0 || (_pkg$devDependencies2 = pkg.devDependencies) === null || _pkg$devDependencies2 === void 0 ? void 0 : _pkg$devDependencies2.react) || (pkg === null || pkg === void 0 || (_pkg$peerDependencies2 = pkg.peerDependencies) === null || _pkg$peerDependencies2 === void 0 ? void 0 : _pkg$peerDependencies2.react));
179
- let tsconfig = await config.getConfigFrom(options.projectRoot + '/index', ['tsconfig.json', 'jsconfig.json']);
180
- let compilerOptions = tsconfig === null || tsconfig === void 0 || (_tsconfig$contents = tsconfig.contents) === null || _tsconfig$contents === void 0 ? void 0 : _tsconfig$contents.compilerOptions;
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, _pkg$dependencies3, _pkg$devDependencies3, _pkg$peerDependencies3, _semver$minVersion;
190
- let effectiveReactLib = pkg !== null && pkg !== void 0 && pkg.alias && pkg.alias['react'] === 'preact/compat' ? 'preact' : reactLib;
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 = (pkg === null || pkg === void 0 || (_pkg$dependencies3 = pkg.dependencies) === null || _pkg$dependencies3 === void 0 ? void 0 : _pkg$dependencies3[effectiveReactLib]) || (pkg === null || pkg === void 0 || (_pkg$devDependencies3 = pkg.devDependencies) === null || _pkg$devDependencies3 === void 0 ? void 0 : _pkg$devDependencies3[effectiveReactLib]) || (pkg === null || pkg === void 0 || (_pkg$peerDependencies3 = pkg.peerDependencies) === null || _pkg$peerDependencies3 === void 0 ? void 0 : _pkg$peerDependencies3[effectiveReactLib]);
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 = pkg && pkg.browser && typeof pkg.browser === 'object' && pkg.browser.fs === false;
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
  });
@@ -305,6 +313,9 @@ var _default = exports.default = new (_plugin().Transformer)({
305
313
  if (options.env.NODE_ENV != null) {
306
314
  env.NODE_ENV = options.env.NODE_ENV;
307
315
  }
316
+ if (process.env.ATLASPACK_BUILD_ENV === 'test') {
317
+ env.ATLASPACK_BUILD_ENV = 'test';
318
+ }
308
319
  } else if (Array.isArray(config === null || config === void 0 ? void 0 : config.inlineEnvironment)) {
309
320
  for (let match of (0, _utils().globMatch)(Object.keys(options.env), config.inlineEnvironment)) {
310
321
  env[match] = String(options.env[match]);
@@ -333,6 +344,7 @@ var _default = exports.default = new (_plugin().Transformer)({
333
344
  shebang,
334
345
  hoist_result,
335
346
  symbol_result,
347
+ is_empty_or_empty_export,
336
348
  needs_esm_helpers,
337
349
  diagnostics,
338
350
  used_env,
@@ -373,6 +385,8 @@ var _default = exports.default = new (_plugin().Transformer)({
373
385
  standalone: asset.query.has('standalone'),
374
386
  inline_constants: config.inlineConstants,
375
387
  conditional_bundling: options.featureFlags.conditionalBundlingApi,
388
+ hmr_improvements: options.featureFlags.hmrImprovements,
389
+ computed_properties_fix: options.featureFlags.unusedComputedPropertyFix,
376
390
  magic_comments: Boolean(config === null || config === void 0 ? void 0 : config.magicComments),
377
391
  callMacro: asset.isSource ? async (err, src, exportName, args, loc) => {
378
392
  let mod;
@@ -398,7 +412,7 @@ var _default = exports.default = new (_plugin().Transformer)({
398
412
  }
399
413
  try {
400
414
  if (typeof mod[exportName] === 'function') {
401
- return mod[exportName].apply({
415
+ let ctx = {
402
416
  // Allows macros to emit additional assets to add as dependencies (e.g. css).
403
417
  addAsset(a) {
404
418
  let k = String(macroAssets.length);
@@ -457,7 +471,8 @@ var _default = exports.default = new (_plugin().Transformer)({
457
471
  invalidateOnBuild() {
458
472
  asset.invalidateOnBuild();
459
473
  }
460
- }, args);
474
+ };
475
+ return mod[exportName].apply(ctx, args);
461
476
  } else {
462
477
  throw new Error(`"${exportName}" in "${src}" is not a function.`);
463
478
  }
@@ -629,6 +644,13 @@ var _default = exports.default = new (_plugin().Transformer)({
629
644
  });
630
645
  } else if (dep.kind === 'File') {
631
646
  asset.invalidateOnFileChange(dep.specifier);
647
+ } else if (dep.kind === 'Id') {
648
+ // Record parcelRequire calls so that the dev packager can add them as dependencies.
649
+ // This allows the HMR runtime to collect parents across async boundaries (through runtimes).
650
+ // TODO: ideally this would result as an actual dep in the graph rather than asset.meta.
651
+ asset.meta.hmrDeps ??= [];
652
+ (0, _assert().default)(Array.isArray(asset.meta.hmrDeps));
653
+ asset.meta.hmrDeps.push(dep.specifier);
632
654
  } else {
633
655
  let meta = {
634
656
  kind: dep.kind
@@ -802,6 +824,9 @@ var _default = exports.default = new (_plugin().Transformer)({
802
824
  // (and the asset has side effects), or the asset is wrapped.
803
825
  // This allows accessing symbols that don't exist without errors in symbol propagation.
804
826
  if (hoist_result.has_cjs_exports || !hoist_result.is_esm && asset.sideEffects && deps.size === 0 && Object.keys(hoist_result.exported_symbols).length === 0 || hoist_result.should_wrap && !asset.symbols.hasExportSymbol('*')) {
827
+ if (is_empty_or_empty_export) {
828
+ asset.meta.emptyFileStarReexport = true;
829
+ }
805
830
  asset.symbols.set('*', `$${asset.id}$exports`);
806
831
  }
807
832
  asset.meta.hasCJSExports = hoist_result.has_cjs_exports;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaspack/transformer-js",
3
- "version": "3.2.3-canary.12+143753ba0",
3
+ "version": "3.2.3-canary.120+22e54c6bd",
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.80+143753ba0",
26
- "@atlaspack/feature-flags": "2.14.1-canary.80+143753ba0",
27
- "@atlaspack/plugin": "2.14.5-canary.12+143753ba0",
28
- "@atlaspack/rust": "3.2.1-canary.12+143753ba0",
29
- "@atlaspack/utils": "2.14.5-canary.12+143753ba0",
30
- "@atlaspack/workers": "2.14.5-canary.12+143753ba0",
25
+ "@atlaspack/diagnostic": "2.14.1-canary.188+22e54c6bd",
26
+ "@atlaspack/feature-flags": "2.14.1-canary.188+22e54c6bd",
27
+ "@atlaspack/plugin": "2.14.5-canary.120+22e54c6bd",
28
+ "@atlaspack/rust": "3.2.1-canary.120+22e54c6bd",
29
+ "@atlaspack/utils": "2.14.5-canary.120+22e54c6bd",
30
+ "@atlaspack/workers": "2.14.5-canary.120+22e54c6bd",
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": "143753ba049078d59fbf1a8880f4c4caf2320311"
42
+ "gitHead": "22e54c6bd98f6c1aa1c74dffb7f54b97e0392740"
43
43
  }
@@ -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 pkg = await config.getPackage();
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 (pkg?.alias && pkg.alias['react']) {
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
- pkg?.dependencies?.[libName] ||
195
- pkg?.devDependencies?.[libName] ||
196
- pkg?.peerDependencies?.[libName],
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
- pkg?.dependencies?.react ||
205
- pkg?.devDependencies?.react ||
206
- pkg?.peerDependencies?.react,
205
+ packageJson?.dependencies?.react ||
206
+ packageJson?.devDependencies?.react ||
207
+ packageJson?.peerDependencies?.react,
207
208
  );
208
209
 
209
- let tsconfig = await config.getConfigFrom<TSConfig>(
210
- options.projectRoot + '/index',
211
- ['tsconfig.json', 'jsconfig.json'],
212
- );
213
- let compilerOptions = tsconfig?.contents?.compilerOptions;
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
- pkg?.alias && pkg.alias['react'] === 'preact/compat'
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
- pkg?.dependencies?.[effectiveReactLib] ||
238
- pkg?.devDependencies?.[effectiveReactLib] ||
239
- pkg?.peerDependencies?.[effectiveReactLib];
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
- pkg &&
282
- pkg.browser &&
283
- typeof pkg.browser === 'object' &&
284
- pkg.browser.fs === false;
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',
@@ -423,6 +428,7 @@ export default (new Transformer({
423
428
  shebang,
424
429
  hoist_result,
425
430
  symbol_result,
431
+ is_empty_or_empty_export,
426
432
  needs_esm_helpers,
427
433
  diagnostics,
428
434
  used_env,
@@ -470,6 +476,8 @@ export default (new Transformer({
470
476
  standalone: asset.query.has('standalone'),
471
477
  inline_constants: config.inlineConstants,
472
478
  conditional_bundling: options.featureFlags.conditionalBundlingApi,
479
+ hmr_improvements: options.featureFlags.hmrImprovements,
480
+ computed_properties_fix: options.featureFlags.unusedComputedPropertyFix,
473
481
  magic_comments: Boolean(config?.magicComments),
474
482
  callMacro: asset.isSource
475
483
  ? async (err, src, exportName, args, loc) => {
@@ -776,6 +784,13 @@ export default (new Transformer({
776
784
  });
777
785
  } else if (dep.kind === 'File') {
778
786
  asset.invalidateOnFileChange(dep.specifier);
787
+ } else if (dep.kind === 'Id') {
788
+ // Record parcelRequire calls so that the dev packager can add them as dependencies.
789
+ // This allows the HMR runtime to collect parents across async boundaries (through runtimes).
790
+ // TODO: ideally this would result as an actual dep in the graph rather than asset.meta.
791
+ asset.meta.hmrDeps ??= [];
792
+ invariant(Array.isArray(asset.meta.hmrDeps));
793
+ asset.meta.hmrDeps.push(dep.specifier);
779
794
  } else {
780
795
  let meta: JSONObject = {kind: dep.kind};
781
796
  if (dep.attributes) {
@@ -991,6 +1006,9 @@ export default (new Transformer({
991
1006
  Object.keys(hoist_result.exported_symbols).length === 0) ||
992
1007
  (hoist_result.should_wrap && !asset.symbols.hasExportSymbol('*'))
993
1008
  ) {
1009
+ if (is_empty_or_empty_export) {
1010
+ asset.meta.emptyFileStarReexport = true;
1011
+ }
994
1012
  asset.symbols.set('*', `$${asset.id}$exports`);
995
1013
  }
996
1014