123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- "use strict";
- /**
- * @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.default = default_1;
- const schematics_1 = require("@angular-devkit/schematics");
- const tasks_1 = require("@angular-devkit/schematics/tasks");
- const posix_1 = require("node:path/posix");
- const dependencies_1 = require("../utility/dependencies");
- const json_file_1 = require("../utility/json-file");
- const latest_versions_1 = require("../utility/latest-versions");
- const paths_1 = require("../utility/paths");
- const workspace_1 = require("../utility/workspace");
- const workspace_models_1 = require("../utility/workspace-models");
- function updateTsConfig(packageName, ...paths) {
- return (host) => {
- if (!host.exists('tsconfig.json')) {
- return host;
- }
- const file = new json_file_1.JSONFile(host, 'tsconfig.json');
- const jsonPath = ['compilerOptions', 'paths', packageName];
- const value = file.get(jsonPath);
- file.modify(jsonPath, Array.isArray(value) ? [...value, ...paths] : paths);
- };
- }
- function addDependenciesToPackageJson() {
- return (host) => {
- [
- {
- type: dependencies_1.NodeDependencyType.Dev,
- name: '@angular/compiler-cli',
- version: latest_versions_1.latestVersions.Angular,
- },
- {
- type: dependencies_1.NodeDependencyType.Dev,
- name: '@angular-devkit/build-angular',
- version: latest_versions_1.latestVersions.DevkitBuildAngular,
- },
- {
- type: dependencies_1.NodeDependencyType.Dev,
- name: 'ng-packagr',
- version: latest_versions_1.latestVersions.NgPackagr,
- },
- {
- type: dependencies_1.NodeDependencyType.Default,
- name: 'tslib',
- version: latest_versions_1.latestVersions['tslib'],
- },
- {
- type: dependencies_1.NodeDependencyType.Dev,
- name: 'typescript',
- version: latest_versions_1.latestVersions['typescript'],
- },
- ].forEach((dependency) => (0, dependencies_1.addPackageJsonDependency)(host, dependency));
- return host;
- };
- }
- function addLibToWorkspaceFile(options, projectRoot, projectName) {
- return (0, workspace_1.updateWorkspace)((workspace) => {
- workspace.projects.add({
- name: projectName,
- root: projectRoot,
- sourceRoot: `${projectRoot}/src`,
- projectType: workspace_models_1.ProjectType.Library,
- prefix: options.prefix,
- targets: {
- build: {
- builder: workspace_models_1.Builders.NgPackagr,
- defaultConfiguration: 'production',
- options: {
- project: `${projectRoot}/ng-package.json`,
- },
- configurations: {
- production: {
- tsConfig: `${projectRoot}/tsconfig.lib.prod.json`,
- },
- development: {
- tsConfig: `${projectRoot}/tsconfig.lib.json`,
- },
- },
- },
- test: {
- builder: workspace_models_1.Builders.Karma,
- options: {
- tsConfig: `${projectRoot}/tsconfig.spec.json`,
- polyfills: ['zone.js', 'zone.js/testing'],
- },
- },
- },
- });
- });
- }
- function default_1(options) {
- return async (host) => {
- const prefix = options.prefix;
- // If scoped project (i.e. "@foo/bar"), convert projectDir to "foo/bar".
- const packageName = options.name;
- if (/^@.*\/.*/.test(options.name)) {
- const [, name] = options.name.split('/');
- options.name = name;
- }
- const workspace = await (0, workspace_1.getWorkspace)(host);
- const newProjectRoot = workspace.extensions.newProjectRoot || '';
- let folderName = packageName.startsWith('@') ? packageName.slice(1) : packageName;
- if (/[A-Z]/.test(folderName)) {
- folderName = schematics_1.strings.dasherize(folderName);
- }
- const libDir = options.projectRoot !== undefined
- ? (0, posix_1.join)(options.projectRoot)
- : (0, posix_1.join)(newProjectRoot, folderName);
- const distRoot = `dist/${folderName}`;
- const sourceDir = `${libDir}/src/lib`;
- const templateSource = (0, schematics_1.apply)((0, schematics_1.url)('./files'), [
- (0, schematics_1.applyTemplates)({
- ...schematics_1.strings,
- ...options,
- packageName,
- libDir,
- distRoot,
- relativePathToWorkspaceRoot: (0, paths_1.relativePathToWorkspaceRoot)(libDir),
- prefix,
- angularLatestVersion: latest_versions_1.latestVersions.Angular.replace(/~|\^/, ''),
- tsLibLatestVersion: latest_versions_1.latestVersions['tslib'].replace(/~|\^/, ''),
- folderName,
- }),
- (0, schematics_1.move)(libDir),
- ]);
- return (0, schematics_1.chain)([
- (0, schematics_1.mergeWith)(templateSource),
- addLibToWorkspaceFile(options, libDir, packageName),
- options.skipPackageJson ? (0, schematics_1.noop)() : addDependenciesToPackageJson(),
- options.skipTsConfig ? (0, schematics_1.noop)() : updateTsConfig(packageName, './' + distRoot),
- options.standalone
- ? (0, schematics_1.noop)()
- : (0, schematics_1.schematic)('module', {
- name: options.name,
- commonModule: false,
- flat: true,
- path: sourceDir,
- project: packageName,
- }),
- (0, schematics_1.schematic)('component', {
- name: options.name,
- selector: `${prefix}-${options.name}`,
- inlineStyle: true,
- inlineTemplate: true,
- flat: true,
- path: sourceDir,
- export: true,
- standalone: options.standalone,
- project: packageName,
- }),
- (0, schematics_1.schematic)('service', {
- name: options.name,
- flat: true,
- path: sourceDir,
- project: packageName,
- }),
- (_tree, context) => {
- if (!options.skipPackageJson && !options.skipInstall) {
- context.addTask(new tasks_1.NodePackageInstallTask());
- }
- },
- ]);
- };
- }
|