esmLoaderHost.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.esmLoaderRegistered = void 0;
  6. exports.incorporateCompilationCache = incorporateCompilationCache;
  7. exports.initializeEsmLoader = initializeEsmLoader;
  8. exports.registerESMLoader = registerESMLoader;
  9. exports.startCollectingFileDeps = startCollectingFileDeps;
  10. exports.stopCollectingFileDeps = stopCollectingFileDeps;
  11. var _url = _interopRequireDefault(require("url"));
  12. var _compilationCache = require("../transform/compilationCache");
  13. var _transform = require("../transform/transform");
  14. var _portTransport = require("../transform/portTransport");
  15. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  16. /**
  17. * Copyright (c) Microsoft Corporation.
  18. *
  19. * Licensed under the Apache License, Version 2.0 (the "License");
  20. * you may not use this file except in compliance with the License.
  21. * You may obtain a copy of the License at
  22. *
  23. * http://www.apache.org/licenses/LICENSE-2.0
  24. *
  25. * Unless required by applicable law or agreed to in writing, software
  26. * distributed under the License is distributed on an "AS IS" BASIS,
  27. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  28. * See the License for the specific language governing permissions and
  29. * limitations under the License.
  30. */
  31. let loaderChannel;
  32. // Node.js < 20
  33. if (globalThis.__esmLoaderPortPreV20) loaderChannel = createPortTransport(globalThis.__esmLoaderPortPreV20);
  34. // Node.js >= 20
  35. let esmLoaderRegistered = exports.esmLoaderRegistered = false;
  36. function registerESMLoader() {
  37. const {
  38. port1,
  39. port2
  40. } = new MessageChannel();
  41. // register will wait until the loader is initialized.
  42. require('node:module').register(_url.default.pathToFileURL(require.resolve('../transform/esmLoader')), {
  43. parentURL: _url.default.pathToFileURL(__filename),
  44. data: {
  45. port: port2
  46. },
  47. transferList: [port2]
  48. });
  49. loaderChannel = createPortTransport(port1);
  50. exports.esmLoaderRegistered = esmLoaderRegistered = true;
  51. }
  52. function createPortTransport(port) {
  53. return new _portTransport.PortTransport(port, async (method, params) => {
  54. if (method === 'pushToCompilationCache') (0, _compilationCache.addToCompilationCache)(params.cache);
  55. });
  56. }
  57. async function startCollectingFileDeps() {
  58. if (!loaderChannel) return;
  59. await loaderChannel.send('startCollectingFileDeps', {});
  60. }
  61. async function stopCollectingFileDeps(file) {
  62. if (!loaderChannel) return;
  63. await loaderChannel.send('stopCollectingFileDeps', {
  64. file
  65. });
  66. }
  67. async function incorporateCompilationCache() {
  68. if (!loaderChannel) return;
  69. const result = await loaderChannel.send('getCompilationCache', {});
  70. (0, _compilationCache.addToCompilationCache)(result.cache);
  71. }
  72. async function initializeEsmLoader() {
  73. if (!loaderChannel) return;
  74. await loaderChannel.send('setTransformConfig', {
  75. config: (0, _transform.transformConfig)()
  76. });
  77. await loaderChannel.send('addToCompilationCache', {
  78. cache: (0, _compilationCache.serializeCompilationCache)()
  79. });
  80. }