mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
Migrate the remaing usages of esbuild and nodejs_binary in adev to the new toolchain versions. PR Close #62435
75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
/*!
|
|
* @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
|
|
*/
|
|
|
|
import {join} from 'path';
|
|
import {FileAndContentRecord} from '../../interfaces/index';
|
|
import {existsSync, mkdirSync, writeFileSync} from 'fs';
|
|
import {addDirectoryToFilesRecord, findAllConfigs} from './utils.mjs';
|
|
import {generateMetadata} from './metadata.mjs';
|
|
import {generateSourceCode} from './source-code.mjs';
|
|
import {generatePlaygroundRoutes} from './routes.mjs';
|
|
|
|
/**
|
|
* Generates the playground files for the playground directory.
|
|
*
|
|
* Creates a routes file for the overall playground, and metadata and soure-code files for
|
|
* each of the plaground entries.
|
|
*/
|
|
async function generatePlaygroundFiles(
|
|
playgroundDir: string,
|
|
commonDir: string,
|
|
outputDir: string,
|
|
) {
|
|
/** All files available in the playground entries. */
|
|
const files: FileAndContentRecord = {};
|
|
/** All of the configs, one for each playground entry. */
|
|
const configs = await findAllConfigs(playgroundDir);
|
|
|
|
// Add all of the files from the common directory into the files record.
|
|
await addDirectoryToFilesRecord(files, commonDir);
|
|
|
|
// If the playground directory provides additional common files, add them to the files record.
|
|
const commonPlaygroundDir = join(playgroundDir, 'common');
|
|
if (existsSync(commonPlaygroundDir)) {
|
|
await addDirectoryToFilesRecord(files, commonPlaygroundDir);
|
|
}
|
|
|
|
// For each playground entry, generate the metadata and source-code files.
|
|
for (const [path, config] of Object.entries(configs)) {
|
|
/** Duplication of the common shared files to add the playground entry files in. */
|
|
const itemFiles = {...files};
|
|
/** Directory of the current config. */
|
|
const configDir = join(playgroundDir, path);
|
|
|
|
await addDirectoryToFilesRecord(itemFiles, configDir);
|
|
|
|
// Ensure the directory for the playground entry exists, then write the metadata
|
|
// and source-code files.
|
|
mkdirSync(join(outputDir, path), {recursive: true});
|
|
writeFileSync(
|
|
join(outputDir, path, 'metadata.json'),
|
|
JSON.stringify(await generateMetadata(configDir, config, itemFiles)),
|
|
);
|
|
writeFileSync(
|
|
join(outputDir, path, 'source-code.json'),
|
|
JSON.stringify(await generateSourceCode(config, itemFiles)),
|
|
);
|
|
}
|
|
|
|
// Generate the playground routes, and write the file.
|
|
writeFileSync(
|
|
join(outputDir, 'routes.json'),
|
|
JSON.stringify(await generatePlaygroundRoutes(configs)),
|
|
);
|
|
}
|
|
|
|
// Immediately invoke the generation.
|
|
(async () => {
|
|
const [playgroundDir, commonDir, outputDir] = process.argv.slice(2);
|
|
await generatePlaygroundFiles(playgroundDir, commonDir, outputDir);
|
|
})();
|