@angular/build
Version:
Official build system for Angular
44 lines (43 loc) • 1.67 kB
JavaScript
;
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRxjsEsmResolutionPlugin = createRxjsEsmResolutionPlugin;
const RXJS_ESM_RESOLUTION = Symbol('RXJS_ESM_RESOLUTION');
/**
* Creates a plugin that forces ESM resolution of rxjs.
* This is needed as when targeting node, the CJS version is used to the current package conditional exports.
* @see: https://github.com/ReactiveX/rxjs/blob/2947583bb33e97f3db9e6d9f6cea70c62a173060/package.json#L19.
*
* NOTE: This can be removed when and if rxjs adds an import condition that allows ESM usage on Node.js.
*
* @returns An esbuild plugin.
*/
function createRxjsEsmResolutionPlugin() {
return {
name: 'angular-rxjs-resolution',
setup(build) {
build.onResolve({ filter: /^rxjs/ }, async (args) => {
if (args.pluginData?.[RXJS_ESM_RESOLUTION]) {
return null;
}
const { importer, kind, resolveDir, namespace, pluginData = {} } = args;
pluginData[RXJS_ESM_RESOLUTION] = true;
const result = await build.resolve(args.path, {
importer,
kind,
namespace,
pluginData,
resolveDir,
});
result.path = result.path.replace(/([\\/]dist[\\/])cjs([\\/])/, '$1esm$2');
return result;
});
},
};
}