diff --git a/schematics/scully/package.json b/schematics/scully/package.json index 6bb5fd6c2..b29b06914 100644 --- a/schematics/scully/package.json +++ b/schematics/scully/package.json @@ -13,7 +13,7 @@ "schematics-pack": "tsc -p tsconfig.json && npm pack", "schematics": "npm run build && schematics .:install --blog", "test": "npm run build && jasmine src/**/*_spec.js", - "publish:path": "tsc -p ./tsconfig.json && npm version patch && npm publish --access public", + "publish:patch": "tsc -p ./tsconfig.json && npm version patch && npm publish --access public", "publish:minor": "tsc -p ./tsconfig.json && npm version minor && npm publish --access public", "publish:major": "tsc -p ./tsconfig.json && npm version major && npm publish --access public" }, @@ -40,5 +40,8 @@ "@types/node": "^8.0.31", "jasmine": "^3.3.1", "typescript": "~3.5.3" + }, + "peerDependencies": { + "guess-parser": "^0.4.13" } } diff --git a/schematics/scully/scullyio-init-0.0.17.tgz b/schematics/scully/scullyio-init-0.0.17.tgz index 7d83568cc..656413a4f 100644 Binary files a/schematics/scully/scullyio-init-0.0.17.tgz and b/schematics/scully/scullyio-init-0.0.17.tgz differ diff --git a/schematics/scully/src/collection.json b/schematics/scully/src/collection.json index 0909f3cca..0dd87cc69 100644 --- a/schematics/scully/src/collection.json +++ b/schematics/scully/src/collection.json @@ -37,6 +37,12 @@ "factory": "./add-plugin/index", "schema": "./add-plugin/schema.json", "aliases": ["plugin"] + }, + "route-discovery": { + "description": "Show the routes", + "factory": "./route-discovery/index", + "schema": "./route-discovery/schema.json", + "aliases": ["route", "discovery"] } } } diff --git a/schematics/scully/src/route-discovery/index.ts b/schematics/scully/src/route-discovery/index.ts new file mode 100644 index 000000000..96e50bda6 --- /dev/null +++ b/schematics/scully/src/route-discovery/index.ts @@ -0,0 +1,53 @@ +import {Rule, Tree, chain, SchematicContext} from '@angular-devkit/schematics'; +import {Schema} from './schema'; +import {parseAngularRoutes} from 'guess-parser'; +import {getFileContents, getProject, getScullyConfig} from '../utils/utils'; + +export default (options: Schema): Rule => { + return chain([routeDiscovery(options)]); +}; + +const routeDiscovery = (options: Schema) => async (tree: Tree, context: SchematicContext) => { + let routes: any[] | string[] = []; + const projectName = getProject(tree, options.project); + try { + routes = parseAngularRoutes(projectName).map(r => r.path); + } catch (e) { + const allRoutes = routes; + if (allRoutes.findIndex(r => r === '') === -1) { + console.log('error'); + } + } + console.log(routes); + /** + * read the scully.{{nameProject}}.config.js for check if + * not exist the route, add into the file with the `type: 'ignored'` + */ + + // @ts-ignore + const scullyConfigFile = getScullyConfig(tree, options.project); + const scullyJs = getFileContents(tree, scullyConfigFile); + if (!scullyJs) { + context.logger.error(`No scully configuration file found ${scullyConfigFile}`); + } + + console.log(scullyJs); + let newScullyJs = ''; + routes.forEach(route => { + if (+scullyJs.search(route) < 0) { + const addRoute = `\n '${route}': {\n type: 'ignored'\n },`; + if (+scullyJs.search(/routes: \{/g) > 0) { + const position = +scullyJs.search(/routes: \{/g) + 'routes: {'.length; + newScullyJs = [scullyJs.slice(0, position), addRoute, scullyJs.slice(position)].join(''); + } else if (+scullyJs.search(/routes:\{/g) > 0) { + const position = +scullyJs.search(/routes:\{/g) + 'routes:{'.length; + newScullyJs = [scullyJs.slice(0, position), addRoute, scullyJs.slice(position)].join(''); + } + } else { + console.log(`the ${route} exist.`); + } + }); + newScullyJs = newScullyJs === '' ? scullyJs : newScullyJs; + console.log(newScullyJs); + tree.overwrite(scullyConfigFile, newScullyJs); +}; diff --git a/schematics/scully/src/route-discovery/index_spec.ts b/schematics/scully/src/route-discovery/index_spec.ts new file mode 100644 index 000000000..e69de29bb diff --git a/schematics/scully/src/route-discovery/schema.json b/schematics/scully/src/route-discovery/schema.json new file mode 100644 index 000000000..cf56b8ca9 --- /dev/null +++ b/schematics/scully/src/route-discovery/schema.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "@scullyio/init:discovery-routes", + "title": "Scully: Create a discovery routes", + "type": "object", + "properties": { + "project": { + "type": "string", + "description": "add the project", + "default": "defaultProject" + } + }, + "required": [] +} diff --git a/schematics/scully/src/route-discovery/schema.ts b/schematics/scully/src/route-discovery/schema.ts new file mode 100644 index 000000000..e76548202 --- /dev/null +++ b/schematics/scully/src/route-discovery/schema.ts @@ -0,0 +1,3 @@ +export interface Schema { + project: string; +} diff --git a/schematics/scully/src/utils/utils.ts b/schematics/scully/src/utils/utils.ts index b9654f252..13ce470f0 100644 --- a/schematics/scully/src/utils/utils.ts +++ b/schematics/scully/src/utils/utils.ts @@ -133,8 +133,7 @@ export function getSrc(host: Tree, project: string) { export function getRoot(host: Tree, project: string) { const angularConfig = JSON.parse(host.read('./angular.json').toString()); - const defaultProject = angularConfig[getProject(host, project)]; - return angularConfig.projects[defaultProject].root; + return angularConfig.projects[getProject(host, project)].root; } class FileNotFoundException extends Error { @@ -238,16 +237,13 @@ export const getProject = (host: Tree, project: string) => { }; export const getScullyConfig = (host: Tree, project: string) => { - let scullyConfigFile = './scully.config.js'; - if (project !== 'defaultProject') { - scullyConfigFile = `scully.${getProject(host, project)}.config.js`; - } + const scullyConfigFile = `scully.${getProject(host, project)}.config.js`; return scullyConfigFile; }; export const checkProjectExist = (host: Tree, projectName: string) => { const angularJson = JSON.parse(host.read('/angular.json').toString()); - if (angularJson[projectName] !== undefined) { + if (angularJson.projects[projectName] !== undefined) { return true; } return false;