171 lines
6.9 KiB
JavaScript
Executable file
171 lines
6.9 KiB
JavaScript
Executable file
"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.io/license
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core_1 = require("@angular-devkit/core");
|
|
const schematics_1 = require("@angular-devkit/schematics");
|
|
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
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['ng-packagr'],
|
|
},
|
|
{
|
|
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, core_1.normalize)(options.projectRoot)
|
|
: (0, core_1.join)((0, core_1.normalize)(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());
|
|
}
|
|
},
|
|
]);
|
|
};
|
|
}
|
|
exports.default = default_1;
|