mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
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
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @fileoverview
|
||
|
|
*
|
||
|
|
* Script that copies the npm package contents of e.g. `@angular/cdk` over into
|
||
|
|
* a new output directory while performing Angular linking using the local
|
||
|
|
* Angular compiler-cli version.
|
||
|
|
*
|
||
|
|
* This is necessary for the devtools as we don't want to rely on JIT compilation,
|
||
|
|
* and consumed libraries like Angular CDK, or Angular Material are only shipping
|
||
|
|
* partial compilation output to npm.
|
||
|
|
*/
|
||
|
|
|
||
|
|
import linkerBabelPlugin from '../../../packages/compiler-cli/linker/babel/index.mjs';
|
||
|
|
import {transformAsync} from '@babel/core';
|
||
|
|
import {readFile, writeFile, mkdir} from 'node:fs/promises';
|
||
|
|
import {globSync} from 'tinyglobby';
|
||
|
|
import path from 'path';
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
const [packageDir, outDir] = process.argv.slice(2);
|
||
|
|
|
||
|
|
// Copy without preserving readonly permissions from Bazel.
|
||
|
|
await Promise.all(
|
||
|
|
globSync('**/*', {cwd: packageDir}).map(async (filePath) => {
|
||
|
|
await mkdir(path.dirname(path.join(outDir, filePath)), {recursive: true});
|
||
|
|
await writeFile(path.join(outDir, filePath), await readFile(path.join(packageDir, filePath)));
|
||
|
|
}),
|
||
|
|
);
|
||
|
|
|
||
|
|
const fesmBundles = globSync('fesm2022/**/*.mjs', {cwd: outDir});
|
||
|
|
const tasks = [];
|
||
|
|
const babelOptions = {
|
||
|
|
plugins: [
|
||
|
|
[
|
||
|
|
linkerBabelPlugin,
|
||
|
|
{
|
||
|
|
// We compile with an unstamped version of the compiler, so ignore.
|
||
|
|
unknownDeclarationVersionHandling: 'ignore',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
],
|
||
|
|
};
|
||
|
|
|
||
|
|
for (const bundleFile of fesmBundles) {
|
||
|
|
tasks.push(
|
||
|
|
(async () => {
|
||
|
|
const filePath = path.join(outDir, bundleFile);
|
||
|
|
const content = await readFile(filePath, 'utf8');
|
||
|
|
const result = await transformAsync(content, {...babelOptions, filename: filePath});
|
||
|
|
|
||
|
|
await writeFile(path.join(outDir, bundleFile), result.code);
|
||
|
|
})(),
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
await Promise.all(tasks);
|
||
|
|
}
|
||
|
|
|
||
|
|
main().catch((e) => {
|
||
|
|
console.error(e, e.stack);
|
||
|
|
process.exitCode = 1;
|
||
|
|
});
|