You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.6 KiB
97 lines
3.6 KiB
"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 });
|
|
exports.allTargetOptions = exports.allWorkspaceTargets = exports.createDefaultPath = exports.buildDefaultPath = exports.getWorkspace = exports.updateWorkspace = void 0;
|
|
const core_1 = require("@angular-devkit/core");
|
|
const schematics_1 = require("@angular-devkit/schematics");
|
|
const workspace_models_1 = require("./workspace-models");
|
|
function createHost(tree) {
|
|
return {
|
|
async readFile(path) {
|
|
const data = tree.read(path);
|
|
if (!data) {
|
|
throw new Error('File not found.');
|
|
}
|
|
return core_1.virtualFs.fileBufferToString(data);
|
|
},
|
|
async writeFile(path, data) {
|
|
return tree.overwrite(path, data);
|
|
},
|
|
async isDirectory(path) {
|
|
// approximate a directory check
|
|
return !tree.exists(path) && tree.getDir(path).subfiles.length > 0;
|
|
},
|
|
async isFile(path) {
|
|
return tree.exists(path);
|
|
},
|
|
};
|
|
}
|
|
function updateWorkspace(updaterOrWorkspace) {
|
|
return async (tree) => {
|
|
const host = createHost(tree);
|
|
if (typeof updaterOrWorkspace === 'function') {
|
|
const { workspace } = await core_1.workspaces.readWorkspace('/', host);
|
|
const result = await updaterOrWorkspace(workspace);
|
|
await core_1.workspaces.writeWorkspace(workspace, host);
|
|
return result || schematics_1.noop;
|
|
}
|
|
else {
|
|
await core_1.workspaces.writeWorkspace(updaterOrWorkspace, host);
|
|
return schematics_1.noop;
|
|
}
|
|
};
|
|
}
|
|
exports.updateWorkspace = updateWorkspace;
|
|
async function getWorkspace(tree, path = '/') {
|
|
const host = createHost(tree);
|
|
const { workspace } = await core_1.workspaces.readWorkspace(path, host);
|
|
return workspace;
|
|
}
|
|
exports.getWorkspace = getWorkspace;
|
|
/**
|
|
* Build a default project path for generating.
|
|
* @param project The project which will have its default path generated.
|
|
*/
|
|
function buildDefaultPath(project) {
|
|
const root = project.sourceRoot ? `/${project.sourceRoot}/` : `/${project.root}/src/`;
|
|
const projectDirName = project.extensions['projectType'] === workspace_models_1.ProjectType.Application ? 'app' : 'lib';
|
|
return `${root}${projectDirName}`;
|
|
}
|
|
exports.buildDefaultPath = buildDefaultPath;
|
|
async function createDefaultPath(tree, projectName) {
|
|
const workspace = await getWorkspace(tree);
|
|
const project = workspace.projects.get(projectName);
|
|
if (!project) {
|
|
throw new Error(`Project "${projectName}" does not exist.`);
|
|
}
|
|
return buildDefaultPath(project);
|
|
}
|
|
exports.createDefaultPath = createDefaultPath;
|
|
function* allWorkspaceTargets(workspace) {
|
|
for (const [projectName, project] of workspace.projects) {
|
|
for (const [targetName, target] of project.targets) {
|
|
yield [targetName, target, projectName, project];
|
|
}
|
|
}
|
|
}
|
|
exports.allWorkspaceTargets = allWorkspaceTargets;
|
|
function* allTargetOptions(target, skipBaseOptions = false) {
|
|
if (!skipBaseOptions && target.options) {
|
|
yield [undefined, target.options];
|
|
}
|
|
if (!target.configurations) {
|
|
return;
|
|
}
|
|
for (const [name, options] of Object.entries(target.configurations)) {
|
|
if (options !== undefined) {
|
|
yield [name, options];
|
|
}
|
|
}
|
|
}
|
|
exports.allTargetOptions = allTargetOptions;
|