@angular/build
Version:
Official build system for Angular
50 lines (49 loc) • 1.95 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.createAngularLocalizeInitWarningPlugin = createAngularLocalizeInitWarningPlugin;
const NG_LOCALIZE_RESOLUTION = Symbol('NG_LOCALIZE_RESOLUTION');
/**
* This plugin addresses an issue where '@angular/localize/init' is directly imported,
* potentially resulting in undefined behavior. By detecting such imports, the plugin
* issues a warning and suggests including '@angular/localize/init' as a polyfill.
*
* @returns An esbuild plugin.
*/
function createAngularLocalizeInitWarningPlugin() {
return {
name: 'angular-localize-init-warning',
setup(build) {
build.onResolve({ filter: /^@angular\/localize\/init/ }, async (args) => {
if (args.pluginData?.[NG_LOCALIZE_RESOLUTION]) {
return null;
}
const { importer, kind, resolveDir, namespace, pluginData = {} } = args;
pluginData[NG_LOCALIZE_RESOLUTION] = true;
const result = await build.resolve(args.path, {
importer,
kind,
namespace,
pluginData,
resolveDir,
});
return {
...result,
warnings: [
...result.warnings,
{
text: `Direct import of '@angular/localize/init' detected. This may lead to undefined behavior.`,
notes: [{ text: `Include '@angular/localize/init' as a polyfill instead.` }],
},
],
};
});
},
};
}