Skip to main content

File

Rules

deployFiles

Deploys assets files and optionally applies computation to them.

import { deployFiles, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
// By default: deploy schematic `./files` folder into project root folder
deployFiles(),

// Use defaults but also apply computation to `*.template` files
deployFiles(options),

// Use a different source folder
deployFiles(undefined, './my-files'),

// Use a different destination folder
deployFiles(undefined, './files', './my-dest-folder'),
]);

deleteFiles

Deletes a collection of files or folders

import { deleteFiles, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
deleteFiles([
'src/assets/.gitkeep',
'src/app/app.component.spec.ts'
]),

// Folder deletion needs to be forced
deleteFiles(['src'], true)
]);

renameFile

Rename a file

import { renameFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
renameFile('src/old/a.ts', 'src/new/b.ts')
]);

createOrUpdateFile

Creates or updates a file.

import { createOrUpdateFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
createOrUpdateFile('README.md', 'My readme content')
]);

downloadFile

Downloads a file.

import { downloadFile, schematic } from '@hug/ngx-schematics-utilities';
import { chain, Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
(): Rule => {
const sizes = ['72', '96', '128', '144', '152', '192', '384', '512'];
return chain(
sizes.map(size => downloadFile(
`https://my-cdn.com/icons/icon-${size}x${size}.png`,
`src/assets/icons/icon-${size}x${size}.png`
))
);
}
]);

replaceInFile

Replaces text in a file, using a regular expression or a search string.

import { replaceInFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
replaceInFile('.editorconfig', /(indent_size = )(.*)/gm, '$14')
]);

addImportToFile

Adds an import to a file.

import { addImportToFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
// ES format : `import { environment } from './environments/environment';`
addImportToFile('src/main.ts', 'environment', './environments/environment'),

// Default format : `import packageJson from 'package.json';`
addImportToFile('src/main.ts', 'packageJson', 'package.json', true)
]);

modifyImportInFile

Modifies or removes an import inside a file.

import { modifyImportInFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
// Rename an import
modifyImportInFile('src/main.ts', 'name', 'newName', 'src/my-file');

// Remove an import
modifyImportInFile('src/main.ts', 'environment', undefined, 'src/environments/environment');
]);

removeImportFromFile

Removes an import inside a file.

import { modifyImportInFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
removeImportFromFile('src/main.ts', 'environment', 'src/environments/environment');
]);

modifyJsonFile

Adds, modifies or removes an element in a JSON file.

import { modifyJsonFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
// Add or update an element
modifyJsonFile('tsconfig.json', ['compilerOptions', 'emitDecoratorMetadata'], true),

// Remove an element
modifyJsonFile('tsconfig.json', ['compilerOptions', 'strict'], undefined),

// Add an element at the beginning
modifyJsonFile('tsconfig.json', ['extends'], './my-tsconfig.json', () => 0)
]);

removeFromJsonFile

Removes an element inside a JSON file.

import { removeFromJsonFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
removeFromJsonFile('package.json', ['scripts', 'start'])
]);

Helpers

serializeToJson

Converts a JavaScript value to a JavaScript Object Notation (JSON) string.

Note

Uses a default indentation of 2.

import { serializeToJson, schematic } from '@hug/ngx-schematics-utilities';
import { chain, Rule } from '@angular-devkit/schematics';

export default (options: any): Rule =>
schematic('my-schematic', [
(): Rule => {
const data = { key: 'value' };
const str = serializeToJson(data);
...
}
]);

getTsSourceFile

Gets the source of a TypeScript file.

import { getTsSourceFile, schematic } from '@hug/ngx-schematics-utilities';
import { Rule, Tree } from '@angular-devkit/schematics';

export const myRule = (filePath: string): Rule =>
(tree: Tree): void => {
const sourceFile = getTsSourceFile(tree, filePath);
...
};

commitChanges

Applies changes on a file inside the current schematic's project tree.

import { commitChanges } from '@hug/ngx-schematics-utilities';
import { Rule, Tree } from '@angular-devkit/schematics';

export const myRule = (filePath: string): Rule =>
(tree: Tree): void => {
...
commitChanges(tree, filePath, changes);
};