mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-23 23:59:27 +08:00
129 lines
3.2 KiB
TypeScript
129 lines
3.2 KiB
TypeScript
import * as path from 'path';
|
|
import {
|
|
JsonAstObject,
|
|
JsonParseMode,
|
|
JsonValue,
|
|
experimental,
|
|
normalize,
|
|
parseJsonAst,
|
|
virtualFs,
|
|
} from '@angular-devkit/core';
|
|
import { NodeJsSyncHost } from '@angular-devkit/core/node';
|
|
import { findUp } from './find-up';
|
|
|
|
function getSchemaLocation(): string {
|
|
const packagePath = require.resolve('@angular-devkit/core/package.json');
|
|
|
|
return path.join(path.dirname(packagePath), 'src/workspace/workspace-schema.json');
|
|
}
|
|
|
|
export const workspaceSchemaPath = getSchemaLocation();
|
|
|
|
function configFilePath(projectPath?: string): string | null {
|
|
const configNames = [ 'angular.json', '.angular.json' ];
|
|
// Find the configuration, either where specified, in the Angular CLI project
|
|
// (if it's in node_modules) or from the current process.
|
|
return (projectPath && findUp(configNames, projectPath))
|
|
|| findUp(configNames, process.cwd())
|
|
|| findUp(configNames, __dirname);
|
|
}
|
|
|
|
let cachedWorkspace: experimental.workspace.Workspace | null | undefined = undefined;
|
|
export function getWorkspace(): experimental.workspace.Workspace | null {
|
|
if (cachedWorkspace != undefined) {
|
|
return cachedWorkspace;
|
|
}
|
|
|
|
const configPath = configFilePath();
|
|
|
|
if (!configPath) {
|
|
cachedWorkspace = null;
|
|
return null;
|
|
}
|
|
|
|
const root = path.dirname(configPath);
|
|
const workspace = new experimental.workspace.Workspace(
|
|
normalize(root),
|
|
new NodeJsSyncHost(),
|
|
);
|
|
|
|
workspace.loadWorkspaceFromHost(normalize(path.basename(configPath))).subscribe();
|
|
cachedWorkspace = workspace;
|
|
return workspace;
|
|
}
|
|
|
|
export function getWorkspaceRaw(): [JsonAstObject | null, string] {
|
|
const configPath = configFilePath();
|
|
|
|
if (!configPath) {
|
|
return null;
|
|
}
|
|
|
|
let content;
|
|
new NodeJsSyncHost().read(normalize(configPath))
|
|
.subscribe(data => content = virtualFs.fileBufferToString(data));
|
|
|
|
const ast = parseJsonAst(content, JsonParseMode.Loose);
|
|
|
|
if (ast.kind != 'object') {
|
|
throw new Error('Invalid JSON');
|
|
}
|
|
return [ast as JsonAstObject, configPath];
|
|
}
|
|
|
|
export function validateWorkspace(json: JsonValue) {
|
|
const workspace = new experimental.workspace.Workspace(
|
|
normalize('.'),
|
|
new NodeJsSyncHost(),
|
|
);
|
|
|
|
let error;
|
|
workspace.loadWorkspaceFromJson(json).subscribe({
|
|
error: e => error = e,
|
|
});
|
|
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
export function getPackageManager(): string {
|
|
const workspace = getWorkspace();
|
|
if (workspace && workspace.getCli()) {
|
|
const value = workspace.getCli()['packageManager'];
|
|
if (typeof value == 'string') {
|
|
return value;
|
|
}
|
|
}
|
|
return 'npm';
|
|
}
|
|
|
|
export function getDefaultSchematicCollection(): string {
|
|
const workspace = getWorkspace();
|
|
if (workspace && workspace.getSchematics()) {
|
|
const value = workspace.getSchematics()['defaultCollection'];
|
|
if (typeof value == 'string') {
|
|
return value;
|
|
}
|
|
}
|
|
|
|
return '@schematics/angular';
|
|
}
|
|
|
|
export function isWarningEnabled(warning: string): boolean {
|
|
const workspace = getWorkspace();
|
|
if (workspace && workspace.getCli()) {
|
|
const warnings = workspace.getCli()['warnings'];
|
|
if (typeof warnings == 'object' && !Array.isArray(warnings)) {
|
|
const value = warnings[warning];
|
|
if (value === false) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|