From bf1ba4c5129d1543c714606d3585fedfaf642a91 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Mon, 17 Aug 2020 23:00:18 +0300 Subject: [PATCH] feat: add rule creators for saving and reading api definition --- .../packages/schematics/src/utils/source.ts | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/source.ts b/npm/ng-packs/packages/schematics/src/utils/source.ts index cc1d45cebd..e08ecec285 100644 --- a/npm/ng-packs/packages/schematics/src/utils/source.ts +++ b/npm/ng-packs/packages/schematics/src/utils/source.ts @@ -1,12 +1,12 @@ import { SchematicsException, Tree } from '@angular-devkit/schematics'; import got from 'got'; import { Exception } from '../enums'; -import { Project } from '../models'; +import { ApiDefinition, Project } from '../models'; import { getAssignedPropertyFromObjectliteral } from './ast'; import { interpolate } from './common'; import { readEnvironment } from './workspace'; -export async function getSourceJson(url: string) { +export async function getApiDefinition(url: string) { let body: any; try { @@ -45,3 +45,24 @@ export function getSourceUrl(tree: Tree, project: Project, moduleName: string) { return assignment.replace(/[`'"]/g, ''); } + +export function createApiDefinitionReader(targetPath: string) { + return (tree: Tree) => { + try { + const buffer = tree.read(targetPath); + const apiDefinition: ApiDefinition = JSON.parse(buffer!.toString()); + return apiDefinition; + } catch (_) {} + + throw new SchematicsException(interpolate(Exception.NoApiDefinition, targetPath)); + }; +} + +export function createApiDefinitionSaver(apiDefinition: ApiDefinition, targetPath: string) { + return (tree: Tree) => { + tree[tree.exists(targetPath) ? 'overwrite' : 'create']( + targetPath, + JSON.stringify(apiDefinition, null, 2), + ); + }; +}