angular-toaster
Version:
An Angular Toaster Notification library based on AngularJS-Toaster
61 lines (60 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const tslib_1 = require("tslib");
const schematics_1 = require("@angular-devkit/schematics");
const ng_ast_utils_1 = require("@schematics/angular/utility/ng-ast-utils");
const utility_1 = require("@schematics/angular/utility");
const workspace_models_1 = require("@schematics/angular/utility/workspace-models");
const workspace_1 = require("@schematics/angular/utility/workspace");
const theming_1 = require("./theming");
const ast_1 = require("../utils/ast");
const project_1 = require("../utils/project");
const ng_module_imports_1 = require("../utils/ng-module-imports");
function default_1(options) {
return (host, context) => tslib_1.__awaiter(this, void 0, void 0, function* () {
const workspace = yield (0, workspace_1.getWorkspace)(host);
const project = (0, project_1.getProjectFromWorkspace)(workspace, options.project);
if (project.extensions['projectType'] !== workspace_models_1.ProjectType.Application) {
context.logger.warn(`project '${options.project}' is not an angular application. it look like angular library`);
return;
}
return (0, schematics_1.chain)([addAngularToaster(options), (0, theming_1.addThemeToAppStyles)(options)]);
});
}
function addAngularToaster(options) {
return (host) => tslib_1.__awaiter(this, void 0, void 0, function* () {
const workspace = yield (0, workspace_1.getWorkspace)(host);
const project = (0, project_1.getProjectFromWorkspace)(workspace, options.project);
const mainFilePath = (0, project_1.getProjectMainFile)(project);
if ((0, ng_ast_utils_1.isStandaloneApp)(host, mainFilePath)) {
return addAngularToasterToStandaloneApp(options.project);
}
else {
return addAngularToasterToNoStandaloneApp(project, mainFilePath);
}
});
}
function addAngularToasterToNoStandaloneApp(project, mainFile) {
return (host, context) => {
const angularToasterModulue = 'ToasterModule';
const angularToasterModulueForRoot = `${angularToasterModulue}.forRoot()`;
const libName = 'angular-toaster';
const appModulePath = (0, ng_ast_utils_1.getAppModulePath)(host, mainFile);
if ((0, ng_module_imports_1.hasNgModuleImport)(host, appModulePath, angularToasterModulue)) {
context.logger.warn(`Could not set up "${angularToasterModulue}" ` +
`because "${angularToasterModulue}" is already imported.`);
}
(0, ast_1.addModuleImportToRootModule)(host, angularToasterModulueForRoot, libName, project);
return host;
};
}
function addAngularToasterToStandaloneApp(project) {
return () => {
const providerFn = 'provideAngularToaster';
const libName = 'angular-toaster';
return (0, utility_1.addRootProvider)(project, ({ code, external }) => {
return code `${external(providerFn, libName)}()`;
});
};
}