@jsenv/core 40.3.2 → 40.3.3

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.
Files changed (115) hide show
  1. package/dist/browserslist_index/browserslist_index.js +4951 -0
  2. package/dist/build/build.js +188 -75
  3. package/dist/jsenv_core_node_modules.js +25 -1
  4. package/dist/jsenv_core_packages.js +6384 -11580
  5. package/dist/start_build_server/start_build_server.js +0 -5
  6. package/dist/start_dev_server/start_dev_server.js +108 -74
  7. package/package.json +20 -19
  8. package/src/build/build.js +79 -0
  9. package/src/kitchen/errors.js +6 -1
  10. package/src/kitchen/kitchen.js +95 -7
  11. package/src/plugins/package_side_effects/jsenv_plugin_package_side_effects.js +5 -65
  12. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +0 -112
  13. package/dist/babel_helpers/AwaitValue/AwaitValue.js +0 -3
  14. package/dist/babel_helpers/OverloadYield/OverloadYield.js +0 -11
  15. package/dist/babel_helpers/applyDecoratedDescriptor/applyDecoratedDescriptor.js +0 -32
  16. package/dist/babel_helpers/applyDecs/applyDecs.js +0 -813
  17. package/dist/babel_helpers/applyDecs2203/applyDecs2203.js +0 -635
  18. package/dist/babel_helpers/applyDecs2203R/applyDecs2203R.js +0 -654
  19. package/dist/babel_helpers/applyDecs2301/applyDecs2301.js +0 -721
  20. package/dist/babel_helpers/applyDecs2305/applyDecs2305.js +0 -531
  21. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +0 -7
  22. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +0 -4
  23. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
  24. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +0 -9
  25. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -55
  26. package/dist/babel_helpers/asyncIterator/asyncIterator.js +0 -68
  27. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +0 -34
  28. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
  29. package/dist/babel_helpers/callSuper/callSuper.js +0 -25
  30. package/dist/babel_helpers/checkInRHS/checkInRHS.js +0 -11
  31. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -23
  32. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
  33. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
  34. package/dist/babel_helpers/classCallCheck/classCallCheck.js +0 -5
  35. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -8
  36. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -11
  37. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -13
  38. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +0 -6
  39. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
  40. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
  41. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
  42. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
  43. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
  44. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
  45. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
  46. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -13
  47. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
  48. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -10
  49. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
  50. package/dist/babel_helpers/construct/construct.js +0 -20
  51. package/dist/babel_helpers/createClass/createClass.js +0 -17
  52. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -61
  53. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -24
  54. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +0 -50
  55. package/dist/babel_helpers/createSuper/createSuper.js +0 -22
  56. package/dist/babel_helpers/decorate/decorate.js +0 -488
  57. package/dist/babel_helpers/defaults/defaults.js +0 -11
  58. package/dist/babel_helpers/defineAccessor/defineAccessor.js +0 -6
  59. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
  60. package/dist/babel_helpers/defineProperty/defineProperty.js +0 -21
  61. package/dist/babel_helpers/dispose/dispose.js +0 -45
  62. package/dist/babel_helpers/extends/extends.js +0 -14
  63. package/dist/babel_helpers/get/get.js +0 -19
  64. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +0 -4
  65. package/dist/babel_helpers/identity/identity.js +0 -3
  66. package/dist/babel_helpers/importDeferProxy/importDeferProxy.js +0 -31
  67. package/dist/babel_helpers/inherits/inherits.js +0 -19
  68. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +0 -7
  69. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +0 -12
  70. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +0 -6
  71. package/dist/babel_helpers/instanceof/instanceof.js +0 -10
  72. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +0 -3
  73. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +0 -47
  74. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +0 -9
  75. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -19
  76. package/dist/babel_helpers/iterableToArray/iterableToArray.js +0 -7
  77. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +0 -54
  78. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -16
  79. package/dist/babel_helpers/jsx/jsx.js +0 -50
  80. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +0 -10
  81. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +0 -5
  82. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +0 -5
  83. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +0 -5
  84. package/dist/babel_helpers/nullishReceiverError/nullishReceiverError.js +0 -3
  85. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
  86. package/dist/babel_helpers/objectSpread/objectSpread.js +0 -23
  87. package/dist/babel_helpers/objectSpread2/objectSpread2.js +0 -43
  88. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +0 -19
  89. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
  90. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +0 -12
  91. package/dist/babel_helpers/readOnlyError/readOnlyError.js +0 -4
  92. package/dist/babel_helpers/regeneratorRuntime/regeneratorRuntime.js +0 -698
  93. package/dist/babel_helpers/set/set.js +0 -47
  94. package/dist/babel_helpers/setFunctionName/setFunctionName.js +0 -19
  95. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +0 -7
  96. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
  97. package/dist/babel_helpers/slicedToArray/slicedToArray.js +0 -10
  98. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
  99. package/dist/babel_helpers/superPropBase/superPropBase.js +0 -10
  100. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
  101. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
  102. package/dist/babel_helpers/tdz/tdz.js +0 -4
  103. package/dist/babel_helpers/temporalRef/temporalRef.js +0 -6
  104. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +0 -3
  105. package/dist/babel_helpers/toArray/toArray.js +0 -10
  106. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +0 -10
  107. package/dist/babel_helpers/toPrimitive/toPrimitive.js +0 -14
  108. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +0 -10
  109. package/dist/babel_helpers/typeof/typeof.js +0 -15
  110. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
  111. package/dist/babel_helpers/using/using.js +0 -23
  112. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
  113. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +0 -30
  114. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +0 -79
  115. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +0 -3
@@ -1,7 +1,6 @@
1
1
  import { startServer, jsenvServiceCORS, jsenvServiceErrorHandler, jsenvAccessControlAllowedHeaders, createFileSystemFetch } from "@jsenv/server";
2
2
  import { existsSync } from "node:fs";
3
3
  import { assertAndNormalizeDirectoryUrl$2 as assertAndNormalizeDirectoryUrl, createLogger$2 as createLogger, Abort$1 as Abort, raceProcessTeardownEvents$1 as raceProcessTeardownEvents, createTaskLog$2 as createTaskLog, urlToExtension$2 as urlToExtension, urlToPathname$2 as urlToPathname } from "../jsenv_core_packages.js";
4
- import "strip-ansi";
5
4
  import "../jsenv_core_node_modules.js";
6
5
  import "node:process";
7
6
  import "node:os";
@@ -10,10 +9,6 @@ import "node:util";
10
9
  import "node:path";
11
10
  import "node:crypto";
12
11
  import "node:url";
13
- import "@jsenv/ast";
14
- import "@jsenv/sourcemap";
15
- import "node:module";
16
- import "@jsenv/js-module-fallback";
17
12
 
18
13
  /*
19
14
  * startBuildServer is mean to interact with the build files;
@@ -1,22 +1,21 @@
1
1
  import { WebSocketResponse, pickContentType, ServerEvents, jsenvServiceCORS, jsenvAccessControlAllowedHeaders, composeTwoResponses, serveDirectory, jsenvServiceErrorHandler, startServer } from "@jsenv/server";
2
2
  import { convertFileSystemErrorToResponseProperties } from "@jsenv/server/src/internal/convertFileSystemErrorToResponseProperties.js";
3
- import { lookupPackageDirectory, registerDirectoryLifecycle, urlToRelativeUrl, moveUrl, urlIsInsideOf, ensureWindowsDriveLetter, createDetailedMessage, stringifyUrlSite, generateContentFrame, validateResponseIntegrity, setUrlFilename, getCallerPosition, urlToBasename, urlToExtension, asSpecifierWithoutSearch, asUrlWithoutSearch, injectQueryParamsIntoSpecifier, bufferToEtag, isFileSystemPath, urlToPathname, setUrlBasename, urlToFileSystemPath, writeFileSync, createLogger, URL_META, applyNodeEsmResolution, RUNTIME_COMPAT, normalizeUrl, ANSI, CONTENT_TYPE, errorToHTML, DATA_URL, normalizeImportMap, composeTwoImportMaps, resolveImport, JS_QUOTES, defaultLookupPackageScope, defaultReadPackageJson, readCustomConditionsFromProcessArgs, readEntryStatSync, urlToFilename, ensurePathnameTrailingSlash, compareFileUrls, applyFileSystemMagicResolution, getExtensionsToTry, setUrlExtension, isSpecifierForNodeBuiltin, updateJsonFileSync, jsenvPluginTranspilation, memoizeByFirstArgument, assertAndNormalizeDirectoryUrl, createTaskLog, readPackageAtOrNull } from "../jsenv_core_packages.js";
3
+ import { lookupPackageDirectory, registerDirectoryLifecycle, urlToRelativeUrl, moveUrl, urlIsInsideOf, ensureWindowsDriveLetter, createDetailedMessage, stringifyUrlSite, generateContentFrame, validateResponseIntegrity, setUrlFilename, getCallerPosition, urlToBasename, urlToExtension, asSpecifierWithoutSearch, asUrlWithoutSearch, injectQueryParamsIntoSpecifier, bufferToEtag, isFileSystemPath, urlToPathname, setUrlBasename, urlToFileSystemPath, writeFileSync, createLogger, URL_META, applyNodeEsmResolution, RUNTIME_COMPAT, normalizeUrl, ANSI, CONTENT_TYPE, errorToHTML, DATA_URL, normalizeImportMap, composeTwoImportMaps, resolveImport, JS_QUOTES, defaultLookupPackageScope, defaultReadPackageJson, readCustomConditionsFromProcessArgs, readEntryStatSync, urlToFilename, ensurePathnameTrailingSlash, compareFileUrls, applyFileSystemMagicResolution, getExtensionsToTry, setUrlExtension, isSpecifierForNodeBuiltin, memoizeByFirstArgument, assertAndNormalizeDirectoryUrl, createTaskLog, readPackageAtOrNull } from "../jsenv_core_packages.js";
4
4
  import { readFileSync, existsSync, readdirSync, lstatSync, realpathSync } from "node:fs";
5
5
  import { pathToFileURL } from "node:url";
6
6
  import { generateSourcemapFileUrl, createMagicSource, composeTwoSourcemaps, generateSourcemapDataUrl, SOURCEMAP } from "@jsenv/sourcemap";
7
7
  import { parseHtml, injectHtmlNodeAsEarlyAsPossible, createHtmlNode, stringifyHtmlAst, applyBabelPlugins, generateUrlForInlineContent, parseJsWithAcorn, parseCssUrls, getHtmlNodeAttribute, getHtmlNodePosition, getHtmlNodeAttributePosition, setHtmlNodeAttributes, parseSrcSet, getUrlForContentInsideHtml, removeHtmlNodeText, setHtmlNodeText, getHtmlNodeText, analyzeScriptNode, visitHtmlNodes, parseJsUrls, getUrlForContentInsideJs, analyzeLinkNode, injectJsenvScript } from "@jsenv/ast";
8
8
  import { performance } from "node:perf_hooks";
9
9
  import { jsenvPluginSupervisor } from "@jsenv/plugin-supervisor";
10
+ import { jsenvPluginTranspilation } from "@jsenv/plugin-transpilation";
10
11
  import { randomUUID } from "node:crypto";
11
12
  import { createRequire } from "node:module";
12
- import "strip-ansi";
13
13
  import "../jsenv_core_node_modules.js";
14
14
  import "node:process";
15
15
  import "node:os";
16
16
  import "node:tty";
17
17
  import "node:util";
18
18
  import "node:path";
19
- import "@jsenv/js-module-fallback";
20
19
 
21
20
  // default runtimeCompat corresponds to
22
21
  // "we can keep <script type="module"> intact":
@@ -239,6 +238,7 @@ ${reason}`,
239
238
  if (error.code === "DIRECTORY_REFERENCE_NOT_ALLOWED") {
240
239
  error.message = createDetailedMessage(error.message, {
241
240
  "reference trace": reference.trace.message,
241
+ ...detailsFromFirstReference(reference),
242
242
  });
243
243
  return error;
244
244
  }
@@ -478,7 +478,11 @@ const detailsFromFirstReference = (reference) => {
478
478
  };
479
479
  const getFirstReferenceInProject = (reference) => {
480
480
  const ownerUrlInfo = reference.ownerUrlInfo;
481
- if (!ownerUrlInfo.url.includes("/node_modules/")) {
481
+ if (
482
+ !ownerUrlInfo.url.includes("/node_modules/") &&
483
+ ownerUrlInfo.packageDirectoryUrl ===
484
+ ownerUrlInfo.context.packageDirectory.url
485
+ ) {
482
486
  return reference;
483
487
  }
484
488
  return getFirstReferenceInProject(ownerUrlInfo.firstReference);
@@ -2687,10 +2691,9 @@ const shouldHandleSourcemap = (urlInfo) => {
2687
2691
  return true;
2688
2692
  };
2689
2693
 
2690
- const inlineContentClientFileUrl = new URL(
2694
+ const inlineContentClientFileUrl = import.meta.resolve(
2691
2695
  "../client/inline_content/inline_content.js",
2692
- import.meta.url,
2693
- ).href;
2696
+ );
2694
2697
 
2695
2698
  const createKitchen = ({
2696
2699
  name,
@@ -2699,12 +2702,14 @@ const createKitchen = ({
2699
2702
 
2700
2703
  rootDirectoryUrl,
2701
2704
  mainFilePath,
2702
- ignore,
2703
- ignoreProtocol = "remove",
2704
- supportedProtocols = ["file:", "data:", "virtual:", "http:", "https:"],
2705
2705
  dev = false,
2706
2706
  build = false,
2707
2707
  runtimeCompat,
2708
+
2709
+ ignore,
2710
+ ignoreProtocol = "remove",
2711
+ supportedProtocols = ["file:", "data:", "virtual:", "http:", "https:"],
2712
+
2708
2713
  // during dev/test clientRuntimeCompat is a single runtime
2709
2714
  // during build clientRuntimeCompat is runtimeCompat
2710
2715
  clientRuntimeCompat = runtimeCompat,
@@ -2717,12 +2722,17 @@ const createKitchen = ({
2717
2722
  outDirectoryUrl,
2718
2723
  initialContext = {},
2719
2724
  packageDirectory,
2725
+ packageDependencies,
2720
2726
  }) => {
2721
2727
  const logger = createLogger({ logLevel });
2722
2728
 
2723
2729
  const nodeRuntimeEnabled = Object.keys(runtimeCompat).includes("node");
2724
2730
  const packageConditions = [nodeRuntimeEnabled ? "node" : "browser", "import"];
2725
2731
 
2732
+ if (packageDependencies === "auto") {
2733
+ packageDependencies = build && nodeRuntimeEnabled ? "ignore" : "include";
2734
+ }
2735
+
2726
2736
  const kitchen = {
2727
2737
  context: {
2728
2738
  ...initialContext,
@@ -2792,6 +2802,82 @@ const createKitchen = ({
2792
2802
  const protocolIsSupported = supportedProtocols.includes(protocol);
2793
2803
  return !protocolIsSupported;
2794
2804
  };
2805
+ const isIgnoredBecauseInPackageDependencies = (() => {
2806
+ if (packageDependencies === undefined) {
2807
+ return FUNCTION_RETURNING_FALSE;
2808
+ }
2809
+ if (packageDependencies === "include") {
2810
+ return FUNCTION_RETURNING_FALSE;
2811
+ }
2812
+ if (!packageDirectory.url) {
2813
+ return FUNCTION_RETURNING_FALSE;
2814
+ }
2815
+ const rootPackageJSON = packageDirectory.read(packageDirectory.url);
2816
+ if (!rootPackageJSON) {
2817
+ return FUNCTION_RETURNING_FALSE;
2818
+ }
2819
+ const { dependencies = {}, optionalDependencies = {} } = rootPackageJSON;
2820
+ const dependencyKeys = Object.keys(dependencies);
2821
+ const optionalDependencyKeys = Object.keys(optionalDependencies);
2822
+ const dependencySet = new Set([
2823
+ ...dependencyKeys,
2824
+ ...optionalDependencyKeys,
2825
+ ]);
2826
+ if (dependencySet.size === 0) {
2827
+ return FUNCTION_RETURNING_FALSE;
2828
+ }
2829
+
2830
+ let getEffect;
2831
+ if (packageDependencies === "ignore") {
2832
+ getEffect = (dependencyName) => {
2833
+ if (!dependencySet.has(dependencyName)) {
2834
+ return "include";
2835
+ }
2836
+ return "ignore";
2837
+ };
2838
+ } else if (typeof packageDependencies === "object") {
2839
+ let defaultEffect = "ignore";
2840
+ const dependencyEffectMap = new Map();
2841
+ for (const dependencyKey of Object.keys(packageDependencies)) {
2842
+ const dependencyEffect = packageDependencies[dependencyKey];
2843
+ if (dependencyKey === "*") {
2844
+ defaultEffect = dependencyEffect;
2845
+ } else {
2846
+ dependencyEffectMap.set(dependencyKey, dependencyEffect);
2847
+ }
2848
+ }
2849
+ getEffect = (dependencyName) => {
2850
+ if (!dependencySet.has(dependencyName)) {
2851
+ return "include";
2852
+ }
2853
+ const dependencyEffect = packageDependencies[dependencyName];
2854
+ if (dependencyEffect) {
2855
+ return dependencyEffect;
2856
+ }
2857
+ return defaultEffect;
2858
+ };
2859
+ }
2860
+ return (url) => {
2861
+ if (!url.startsWith("file:")) {
2862
+ return false;
2863
+ }
2864
+ const packageDirectoryUrl = packageDirectory.find(url);
2865
+ if (!packageDirectoryUrl) {
2866
+ return false;
2867
+ }
2868
+ const packageJSON = packageDirectory.read(packageDirectoryUrl);
2869
+ const name = packageJSON?.name;
2870
+ if (!name) {
2871
+ return false;
2872
+ }
2873
+ const effect = getEffect(name);
2874
+ if (effect !== "ignore") {
2875
+ return false;
2876
+ }
2877
+ return true;
2878
+ };
2879
+ })();
2880
+
2795
2881
  let isIgnoredByParam = () => false;
2796
2882
  if (ignore) {
2797
2883
  const associations = URL_META.resolveAssociations(
@@ -2811,7 +2897,11 @@ const createKitchen = ({
2811
2897
  };
2812
2898
  }
2813
2899
  const isIgnored = (url) => {
2814
- return isIgnoredByProtocol(url) || isIgnoredByParam(url);
2900
+ return (
2901
+ isIgnoredByProtocol(url) ||
2902
+ isIgnoredByParam(url) ||
2903
+ isIgnoredBecauseInPackageDependencies(url)
2904
+ );
2815
2905
  };
2816
2906
  const resolveReference = (reference) => {
2817
2907
  const setReferenceUrl = (referenceUrl) => {
@@ -3302,6 +3392,8 @@ ${urlInfo.firstReference.trace.message}`;
3302
3392
  return kitchen;
3303
3393
  };
3304
3394
 
3395
+ const FUNCTION_RETURNING_FALSE = () => false;
3396
+
3305
3397
  const debounceCook = (cook) => {
3306
3398
  const pendingDishes = new Map();
3307
3399
  return async (urlInfo, context) => {
@@ -8270,29 +8362,6 @@ const jsenvPluginPackageSideEffects = ({ packageDirectory }) => {
8270
8362
  return [];
8271
8363
  }
8272
8364
 
8273
- const normalizeSideEffectFileUrl = (url) => {
8274
- const urlRelativeToPackage = urlToRelativeUrl(url, packageDirectory.url);
8275
- return urlRelativeToPackage[0] === "."
8276
- ? urlRelativeToPackage
8277
- : `./${urlRelativeToPackage}`;
8278
- };
8279
-
8280
- const updatePackageSideEffects = (sideEffectBuildFileUrls) => {
8281
- const packageJsonFileUrl = new URL("./package.json", packageDirectory.url)
8282
- .href;
8283
- const sideEffectRelativeUrlArray = [];
8284
- for (const sideEffectBuildUrl of sideEffectBuildFileUrls) {
8285
- sideEffectRelativeUrlArray.push(
8286
- normalizeSideEffectFileUrl(sideEffectBuildUrl),
8287
- );
8288
- }
8289
- updateJsonFileSync(packageJsonFileUrl, {
8290
- sideEffects: sideEffectRelativeUrlArray,
8291
- });
8292
- };
8293
-
8294
- const sideEffectBuildFileUrls = [];
8295
-
8296
8365
  const packageSideEffectsCacheMap = new Map();
8297
8366
  const readSideEffectInfoFromClosestPackage = (urlInfo) => {
8298
8367
  const closestPackageDirectoryUrl = urlInfo.packageDirectoryUrl;
@@ -8418,52 +8487,17 @@ const jsenvPluginPackageSideEffects = ({ packageDirectory }) => {
8418
8487
  return;
8419
8488
  }
8420
8489
  },
8421
- refineBuildUrlContent: (buildUrlInfo, { buildUrl }) => {
8490
+ refineBuildUrlContent: (
8491
+ buildUrlInfo,
8492
+ { buildUrl, registerBuildSideEffectFile },
8493
+ ) => {
8422
8494
  for (const sideEffect of buildUrlInfo.contentSideEffects) {
8423
8495
  if (sideEffect.has) {
8424
- sideEffectBuildFileUrls.push(buildUrl);
8496
+ registerBuildSideEffectFile(buildUrl);
8425
8497
  return;
8426
8498
  }
8427
8499
  }
8428
8500
  },
8429
- refineBuild: (kitchen) => {
8430
- if (sideEffectBuildFileUrls.length === 0) {
8431
- return;
8432
- }
8433
- if (sideEffects === false) {
8434
- updatePackageSideEffects(sideEffectBuildFileUrls);
8435
- return;
8436
- }
8437
- const { buildDirectoryUrl } = kitchen.context;
8438
- const sideEffectFileUrlSet = new Set();
8439
- if (Array.isArray(sideEffects)) {
8440
- let packageNeedsUpdate = false;
8441
- for (const sideEffectFileRelativeUrl of sideEffects) {
8442
- const sideEffectFileUrl = new URL(
8443
- sideEffectFileRelativeUrl,
8444
- packageDirectory.url,
8445
- ).href;
8446
- if (
8447
- urlIsInsideOf(sideEffectFileUrl, buildDirectoryUrl) &&
8448
- !sideEffectBuildFileUrls.includes(sideEffectFileUrl)
8449
- ) {
8450
- packageNeedsUpdate = true;
8451
- } else {
8452
- sideEffectFileUrlSet.add(sideEffectFileUrl);
8453
- }
8454
- }
8455
- for (const sideEffectBuildUrl of sideEffectBuildFileUrls) {
8456
- if (sideEffectFileUrlSet.has(sideEffectBuildUrl)) {
8457
- continue;
8458
- }
8459
- packageNeedsUpdate = true;
8460
- sideEffectFileUrlSet.add(sideEffectBuildUrl);
8461
- }
8462
- if (packageNeedsUpdate) {
8463
- updatePackageSideEffects(sideEffectFileUrlSet);
8464
- }
8465
- }
8466
- },
8467
8501
  };
8468
8502
  };
8469
8503
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/core",
3
- "version": "40.3.2",
3
+ "version": "40.3.3",
4
4
  "description": "Tool to develop, test and build js projects",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -49,9 +49,10 @@
49
49
  ],
50
50
  "sideEffects": [
51
51
  "./src/kitchen/client/inline_content.js",
52
+ "./dist/client/new_stylesheet/new_stylesheet.js",
52
53
  "./dist/client/inline_content/inline_content.js",
53
- "./dist/jsenv_core_node_modules.js",
54
- "./dist/client/new_stylesheet/new_stylesheet.js"
54
+ "./dist/client/directory_listing/jsenv_core_node_modules.js",
55
+ "./dist/jsenv_core_node_modules.js"
55
56
  ],
56
57
  "scripts": {
57
58
  "eslint": "npx eslint .",
@@ -79,23 +80,14 @@
79
80
  },
80
81
  "dependencies": {
81
82
  "@financial-times/polyfill-useragent-normaliser": "1.10.2",
82
- "@jsenv/abort": "4.3.1",
83
- "@jsenv/ast": "6.6.9",
84
- "@jsenv/filesystem": "4.15.0",
85
- "@jsenv/humanize": "1.5.0",
86
- "@jsenv/importmap": "1.2.2",
87
- "@jsenv/integrity": "0.0.2",
88
- "@jsenv/js-module-fallback": "1.4.7",
89
- "@jsenv/node-esm-resolution": "1.2.0",
90
- "@jsenv/plugin-bundling": "2.9.3",
83
+ "@jsenv/ast": "6.6.10",
84
+ "@jsenv/js-module-fallback": "1.4.8",
85
+ "@jsenv/plugin-bundling": "2.9.4",
91
86
  "@jsenv/plugin-minification": "1.6.3",
92
- "@jsenv/plugin-supervisor": "1.6.13",
93
- "@jsenv/plugin-transpilation": "1.5.14",
94
- "@jsenv/server": "16.0.8",
95
- "@jsenv/sourcemap": "1.3.5",
96
- "@jsenv/url-meta": "8.5.6",
97
- "@jsenv/urls": "2.7.2",
98
- "@jsenv/utils": "2.3.0"
87
+ "@jsenv/plugin-supervisor": "1.6.14",
88
+ "@jsenv/plugin-transpilation": "1.5.15",
89
+ "@jsenv/sourcemap": "1.3.6",
90
+ "@jsenv/server": "16.1.1"
99
91
  },
100
92
  "devDependencies": {
101
93
  "@babel/plugin-syntax-decorators": "7.25.9",
@@ -117,6 +109,15 @@
117
109
  "@jsenv/terminal-table": "workspace:*",
118
110
  "@jsenv/os-metrics": "workspace:*",
119
111
  "@jsenv/runtime-compat": "workspace:*",
112
+ "@jsenv/url-meta": "workspace:*",
113
+ "@jsenv/urls": "workspace:*",
114
+ "@jsenv/utils": "workspace:*",
115
+ "@jsenv/abort": "workspace:*",
116
+ "@jsenv/filesystem": "workspace:*",
117
+ "@jsenv/humanize": "workspace:*",
118
+ "@jsenv/importmap": "workspace:*",
119
+ "@jsenv/integrity": "workspace:*",
120
+ "@jsenv/node-esm-resolution": "workspace:*",
120
121
  "@playwright/browser-chromium": "1.51.1",
121
122
  "@playwright/browser-firefox": "1.51.1",
122
123
  "@playwright/browser-webkit": "1.51.1",
@@ -26,6 +26,7 @@ import {
26
26
  ensureEmptyDirectory,
27
27
  lookupPackageDirectory,
28
28
  readPackageAtOrNull,
29
+ updateJsonFileSync,
29
30
  writeFileSync,
30
31
  } from "@jsenv/filesystem";
31
32
  import {
@@ -636,6 +637,7 @@ export const build = async ({
636
637
  entryBuildInfo.buildFileVersions = result.buildFileVersions;
637
638
  entryBuildInfo.buildInlineContents = result.buildInlineContents;
638
639
  entryBuildInfo.buildManifest = result.buildManifest;
640
+ entryBuildInfo.buildSideEffectFiles = result.buildSideEffectFiles;
639
641
  entryBuildInfo.duration = Date.now() - entryPointBuildStartMs;
640
642
  onEntryPointBuildEnd();
641
643
  })();
@@ -658,11 +660,15 @@ export const build = async ({
658
660
  const buildFileVersions = {};
659
661
  const buildInlineContents = {};
660
662
  const buildManifest = {};
663
+ const buildSideEffectUrlSet = new Set();
661
664
  for (const [, entryBuildInfo] of entryBuildInfoMap) {
662
665
  Object.assign(buildFileContents, entryBuildInfo.buildFileContents);
663
666
  Object.assign(buildFileVersions, entryBuildInfo.buildFileVersions);
664
667
  Object.assign(buildInlineContents, entryBuildInfo.buildInlineContents);
665
668
  Object.assign(buildManifest, entryBuildInfo.buildManifest);
669
+ for (const buildSideEffectUrl of entryBuildInfo.buildSideEffectFiles) {
670
+ buildSideEffectUrlSet.add(buildSideEffectUrl);
671
+ }
666
672
  }
667
673
  if (writeOnFileSystem) {
668
674
  clearDirectorySync(buildDirectoryUrl, buildDirectoryCleanPatterns);
@@ -671,6 +677,70 @@ export const build = async ({
671
677
  const buildUrl = new URL(buildRelativeUrl, buildDirectoryUrl);
672
678
  writeFileSync(buildUrl, buildFileContents[buildRelativeUrl]);
673
679
  }
680
+ if (buildSideEffectUrlSet.size) {
681
+ const normalizeSideEffectFileUrl = (url) => {
682
+ const urlRelativeToPackage = urlToRelativeUrl(
683
+ url,
684
+ packageDirectory.url,
685
+ );
686
+ return urlRelativeToPackage[0] === "."
687
+ ? urlRelativeToPackage
688
+ : `./${urlRelativeToPackage}`;
689
+ };
690
+ const updatePackageSideEffects = (sideEffectUrlSet) => {
691
+ const packageJsonFileUrl = new URL(
692
+ "./package.json",
693
+ packageDirectory.url,
694
+ ).href;
695
+ const sideEffectRelativeUrlArray = [];
696
+ for (const sideEffectUrl of sideEffectUrlSet) {
697
+ sideEffectRelativeUrlArray.push(
698
+ normalizeSideEffectFileUrl(sideEffectUrl),
699
+ );
700
+ }
701
+ updateJsonFileSync(packageJsonFileUrl, {
702
+ sideEffects: sideEffectRelativeUrlArray,
703
+ });
704
+ };
705
+ const sideEffects = readPackageDirectory(
706
+ packageDirectory.url,
707
+ )?.sideEffects;
708
+ if (sideEffects === false) {
709
+ updatePackageSideEffects(buildSideEffectUrlSet);
710
+ } else if (Array.isArray(sideEffects)) {
711
+ const sideEffectUrlSet = new Set();
712
+ const packageSideEffectUrlSet = new Set();
713
+ for (const sideEffectFileRelativeUrl of sideEffects) {
714
+ const sideEffectFileUrl = new URL(
715
+ sideEffectFileRelativeUrl,
716
+ packageDirectory.url,
717
+ ).href;
718
+ packageSideEffectUrlSet.add(sideEffectFileUrl);
719
+ }
720
+ let hasSomeOutdatedSideEffectUrl = false;
721
+ for (const packageSideEffectUrl of packageSideEffectUrlSet) {
722
+ if (
723
+ urlIsInsideOf(packageSideEffectUrl, buildDirectoryUrl) &&
724
+ !buildSideEffectUrlSet.has(packageSideEffectUrl)
725
+ ) {
726
+ hasSomeOutdatedSideEffectUrl = true;
727
+ } else {
728
+ sideEffectUrlSet.add(packageSideEffectUrl);
729
+ }
730
+ }
731
+ let hasSomeNewSideEffectsUrl = false;
732
+ for (const buildSideEffectUrl of buildSideEffectUrlSet) {
733
+ if (packageSideEffectUrlSet.has(buildSideEffectUrl)) {
734
+ continue;
735
+ }
736
+ hasSomeNewSideEffectsUrl = true;
737
+ sideEffectUrlSet.add(buildSideEffectUrl);
738
+ }
739
+ if (hasSomeOutdatedSideEffectUrl || hasSomeNewSideEffectsUrl) {
740
+ updatePackageSideEffects(sideEffectUrlSet);
741
+ }
742
+ }
743
+ }
674
744
  }
675
745
  onBuildEnd({
676
746
  buildFileContents,
@@ -796,6 +866,7 @@ const entryPointDefaultParams = {
796
866
  assetManifest: false,
797
867
  assetManifestFileRelativeUrl: "asset-manifest.json",
798
868
  packageSideEffects: true,
869
+ packageDependencies: "auto", // "auto", "ignore", "include"
799
870
  };
800
871
 
801
872
  const prepareEntryPointBuild = async (
@@ -846,6 +917,7 @@ const prepareEntryPointBuild = async (
846
917
  assetManifest,
847
918
  assetManifestFileRelativeUrl,
848
919
  packageSideEffects,
920
+ packageDependencies,
849
921
  } = {
850
922
  ...entryPointDefaultParams,
851
923
  ...entryPointParams,
@@ -939,6 +1011,7 @@ const prepareEntryPointBuild = async (
939
1011
  ? new URL("craft/", outDirectoryUrl)
940
1012
  : undefined,
941
1013
  packageDirectory,
1014
+ packageDependencies,
942
1015
  });
943
1016
 
944
1017
  let _getOtherEntryBuildInfo;
@@ -1038,6 +1111,7 @@ const prepareEntryPointBuild = async (
1038
1111
  ? new URL("shape/", outDirectoryUrl)
1039
1112
  : undefined,
1040
1113
  packageDirectory,
1114
+ packageDependencies,
1041
1115
  });
1042
1116
  const buildSpecifierManager = createBuildSpecifierManager({
1043
1117
  rawKitchen,
@@ -1245,6 +1319,7 @@ const prepareEntryPointBuild = async (
1245
1319
  });
1246
1320
  }
1247
1321
 
1322
+ const buildSideEffectFiles = [];
1248
1323
  refine: {
1249
1324
  finalKitchen.context.buildStep = "refine";
1250
1325
 
@@ -1332,6 +1407,9 @@ const prepareEntryPointBuild = async (
1332
1407
  for (const refineBuildUrlContentCallback of refineBuildUrlContentCallbackSet) {
1333
1408
  refineBuildUrlContentCallback(buildUrlInfo, {
1334
1409
  buildUrl: buildSpecifierManager.getBuildUrl(buildUrlInfo),
1410
+ registerBuildSideEffectFile: (buildFileUrl) => {
1411
+ buildSideEffectFiles.push(buildFileUrl);
1412
+ },
1335
1413
  });
1336
1414
  }
1337
1415
  },
@@ -1362,6 +1440,7 @@ const prepareEntryPointBuild = async (
1362
1440
  buildFileVersions,
1363
1441
  buildInlineContents,
1364
1442
  buildManifest,
1443
+ buildSideEffectFiles,
1365
1444
  };
1366
1445
  },
1367
1446
  };
@@ -49,6 +49,7 @@ ${reason}`,
49
49
  if (error.code === "DIRECTORY_REFERENCE_NOT_ALLOWED") {
50
50
  error.message = createDetailedMessage(error.message, {
51
51
  "reference trace": reference.trace.message,
52
+ ...detailsFromFirstReference(reference),
52
53
  });
53
54
  return error;
54
55
  }
@@ -288,7 +289,11 @@ const detailsFromFirstReference = (reference) => {
288
289
  };
289
290
  const getFirstReferenceInProject = (reference) => {
290
291
  const ownerUrlInfo = reference.ownerUrlInfo;
291
- if (!ownerUrlInfo.url.includes("/node_modules/")) {
292
+ if (
293
+ !ownerUrlInfo.url.includes("/node_modules/") &&
294
+ ownerUrlInfo.packageDirectoryUrl ===
295
+ ownerUrlInfo.context.packageDirectory.url
296
+ ) {
292
297
  return reference;
293
298
  }
294
299
  return getFirstReferenceInProject(ownerUrlInfo.firstReference);