ngx-agora
Version:
Angular wrapper for Agora RTC client (https://www.agora.io/en/)
71 lines (65 loc) • 2.03 kB
text/typescript
import {
chain,
Rule,
SchematicContext,
Tree,
} from '@angular-devkit/schematics';
import {
NodePackageInstallTask,
RunSchematicTask,
} from '@angular-devkit/schematics/tasks';
import {
addPackageJsonDependency,
NodeDependency,
NodeDependencyType,
} from '@schematics/angular/utility/dependencies';
import { of } from 'rxjs';
import { map, mergeMap } from 'rxjs/operators';
import { getNPMPackage, NpmRegistryPackage } from '../util/npmjs';
import { Schema } from './schema';
// You don't have to export the function as default. You can also have more than one rule factory
// per file.
export default function (options: Schema): Rule {
return (tree: Tree, context: SchematicContext) => {
return chain([
addPackageJsonDependencies(options),
installDependencies(),
setupProject(options),
])(tree, context);
};
}
function addPackageJsonDependencies(options: Schema): Rule {
return (tree: Tree, _: SchematicContext): any => {
return of(
{ name: 'agora-rtc-sdk', version: options.version },
{ name: 'ngx-agora', version: undefined }
).pipe(
mergeMap((pkg) => getNPMPackage(pkg as NpmRegistryPackage)),
map((npmRegistryPackage: NpmRegistryPackage) => {
const nodeDependency: NodeDependency = {
type: NodeDependencyType.Default,
name: npmRegistryPackage.name,
version: npmRegistryPackage.version,
overwrite: false,
};
addPackageJsonDependency(tree, nodeDependency);
return tree;
})
);
};
}
function installDependencies(): Rule {
return (tree: Tree, context: SchematicContext) => {
context.addTask(new NodePackageInstallTask());
return tree;
};
}
function setupProject(options: Schema): Rule {
return (tree: Tree, context: SchematicContext) => {
const installTaskId = context.addTask(new NodePackageInstallTask());
context.addTask(new RunSchematicTask('ng-add-setup-project', options), [
installTaskId,
]);
return tree;
};
}