added ability to revert (#21)
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
import { Category } from '../../domain/Category';
|
||||
import { Application } from '../../domain/Application';
|
||||
import { Category } from '@/domain/Category';
|
||||
import { Application } from '@/domain/Application';
|
||||
import { IApplication } from '@/domain/IApplication';
|
||||
import { ApplicationYaml } from 'js-yaml-loader!./../application.yaml';
|
||||
import { parseCategory } from './CategoryParser';
|
||||
|
||||
export function parseApplication(content: ApplicationYaml): Application {
|
||||
export function parseApplication(content: ApplicationYaml): IApplication {
|
||||
validate(content);
|
||||
const categories = new Array<Category>();
|
||||
if (!content.actions || content.actions.length <= 0) {
|
||||
throw new Error('Application does not define any action');
|
||||
}
|
||||
for (const action of content.actions) {
|
||||
const category = parseCategory(action);
|
||||
categories.push(category);
|
||||
@@ -19,3 +18,12 @@ export function parseApplication(content: ApplicationYaml): Application {
|
||||
categories);
|
||||
return app;
|
||||
}
|
||||
|
||||
function validate(content: ApplicationYaml): void {
|
||||
if (!content) {
|
||||
throw new Error('application is null or undefined');
|
||||
}
|
||||
if (!content.actions || content.actions.length <= 0) {
|
||||
throw new Error('application does not define any action');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
import { YamlCategory, YamlScript } from 'js-yaml-loader!./application.yaml';
|
||||
import { Script } from '@/domain/Script';
|
||||
import { Category } from '../../domain/Category';
|
||||
import { Category } from '@/domain/Category';
|
||||
import { parseDocUrls } from './DocumentationParser';
|
||||
import { parseScript } from './ScriptParser';
|
||||
|
||||
let categoryIdCounter: number = 0;
|
||||
|
||||
|
||||
interface ICategoryChildren {
|
||||
subCategories: Category[];
|
||||
subScripts: Script[];
|
||||
}
|
||||
|
||||
export function parseCategory(category: YamlCategory): Category {
|
||||
if (!category.children || category.children.length <= 0) {
|
||||
throw Error('Category has no children');
|
||||
}
|
||||
ensureValid(category);
|
||||
const children: ICategoryChildren = {
|
||||
subCategories: new Array<Category>(),
|
||||
subScripts: new Array<Script>(),
|
||||
@@ -31,6 +29,18 @@ export function parseCategory(category: YamlCategory): Category {
|
||||
);
|
||||
}
|
||||
|
||||
function ensureValid(category: YamlCategory) {
|
||||
if (!category) {
|
||||
throw Error('category is null or undefined');
|
||||
}
|
||||
if (!category.children || category.children.length === 0) {
|
||||
throw Error('category has no children');
|
||||
}
|
||||
if (!category.category || category.category.length === 0) {
|
||||
throw Error('category has no name');
|
||||
}
|
||||
}
|
||||
|
||||
function parseCategoryChild(
|
||||
categoryOrScript: any, children: ICategoryChildren, parent: YamlCategory) {
|
||||
if (isCategory(categoryOrScript)) {
|
||||
@@ -38,11 +48,7 @@ function parseCategoryChild(
|
||||
children.subCategories.push(subCategory);
|
||||
} else if (isScript(categoryOrScript)) {
|
||||
const yamlScript = categoryOrScript as YamlScript;
|
||||
const script = new Script(
|
||||
/* name */ yamlScript.name,
|
||||
/* code */ yamlScript.code,
|
||||
/* docs */ parseDocUrls(yamlScript),
|
||||
/* is recommended? */ yamlScript.recommend);
|
||||
const script = parseScript(yamlScript);
|
||||
children.subScripts.push(script);
|
||||
} else {
|
||||
throw new Error(`Child element is neither a category or a script.
|
||||
@@ -50,7 +56,6 @@ function parseCategoryChild(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function isScript(categoryOrScript: any): boolean {
|
||||
return categoryOrScript.code && categoryOrScript.code.length > 0;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { YamlDocumentable } from 'js-yaml-loader!./application.yaml';
|
||||
|
||||
export function parseDocUrls(documentable: YamlDocumentable): ReadonlyArray<string> {
|
||||
if (!documentable) {
|
||||
throw new Error('documentable is null or undefined');
|
||||
}
|
||||
const docs = documentable.docs;
|
||||
if (!docs) {
|
||||
return [];
|
||||
|
||||
16
src/application/Parser/ScriptParser.ts
Normal file
16
src/application/Parser/ScriptParser.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { Script } from '@/domain/Script';
|
||||
import { YamlScript } from 'js-yaml-loader!./application.yaml';
|
||||
import { parseDocUrls } from './DocumentationParser';
|
||||
|
||||
export function parseScript(yamlScript: YamlScript): Script {
|
||||
if (!yamlScript) {
|
||||
throw new Error('script is null or undefined');
|
||||
}
|
||||
const script = new Script(
|
||||
/* name */ yamlScript.name,
|
||||
/* code */ yamlScript.code,
|
||||
/* revertCode */ yamlScript.revertCode,
|
||||
/* docs */ parseDocUrls(yamlScript),
|
||||
/* isRecommended */ yamlScript.recommend);
|
||||
return script;
|
||||
}
|
||||
Reference in New Issue
Block a user