From 3d1b088c377f645722f0626656454036d7d368dc Mon Sep 17 00:00:00 2001 From: Daniel Schuba Date: Mon, 17 May 2021 09:23:54 +0200 Subject: [PATCH] bugfix(schematics): fix for angular 12 and align schematics --- projects/spectator/package.json | 1 + .../src/spectator/component-schema.json | 5 ++++ ...me@dasherize__.__type@dasherize__.spec.ts} | 0 ...me@dasherize__.__type@dasherize__.spec.ts} | 0 ...me@dasherize__.__type@dasherize__.spec.ts} | 0 .../schematics/src/spectator/index.ts | 23 +++++++++++++++---- .../schematics/src/spectator/schema.ts | 4 ++++ 7 files changed, 29 insertions(+), 4 deletions(-) rename projects/spectator/schematics/src/spectator/files/component-custom-host/{__name@dasherize__.component.spec.ts => __name@dasherize__.__type@dasherize__.spec.ts} (100%) rename projects/spectator/schematics/src/spectator/files/component-host/{__name@dasherize__.component.spec.ts => __name@dasherize__.__type@dasherize__.spec.ts} (100%) rename projects/spectator/schematics/src/spectator/files/component/{__name@dasherize__.component.spec.ts => __name@dasherize__.__type@dasherize__.spec.ts} (100%) diff --git a/projects/spectator/package.json b/projects/spectator/package.json index 1cae382d..ec63f39a 100644 --- a/projects/spectator/package.json +++ b/projects/spectator/package.json @@ -23,6 +23,7 @@ "angular testing dumb components" ], "dependencies": { + "@angular-devkit/core": ">= 10.1.0", "@testing-library/dom": "7.26.5", "jquery": "3.6.0", "replace-in-file": "^6.2.0", diff --git a/projects/spectator/schematics/src/spectator/component-schema.json b/projects/spectator/schematics/src/spectator/component-schema.json index cc7468ae..1488516e 100644 --- a/projects/spectator/schematics/src/spectator/component-schema.json +++ b/projects/spectator/schematics/src/spectator/component-schema.json @@ -84,6 +84,11 @@ "styl" ] }, + "type": { + "type": "string", + "description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\".", + "default": "Component" + }, "spec": { "type": "boolean", "description": "When true (the default), generates a \"spec.ts\" test file for the new component.", diff --git a/projects/spectator/schematics/src/spectator/files/component-custom-host/__name@dasherize__.component.spec.ts b/projects/spectator/schematics/src/spectator/files/component-custom-host/__name@dasherize__.__type@dasherize__.spec.ts similarity index 100% rename from projects/spectator/schematics/src/spectator/files/component-custom-host/__name@dasherize__.component.spec.ts rename to projects/spectator/schematics/src/spectator/files/component-custom-host/__name@dasherize__.__type@dasherize__.spec.ts diff --git a/projects/spectator/schematics/src/spectator/files/component-host/__name@dasherize__.component.spec.ts b/projects/spectator/schematics/src/spectator/files/component-host/__name@dasherize__.__type@dasherize__.spec.ts similarity index 100% rename from projects/spectator/schematics/src/spectator/files/component-host/__name@dasherize__.component.spec.ts rename to projects/spectator/schematics/src/spectator/files/component-host/__name@dasherize__.__type@dasherize__.spec.ts diff --git a/projects/spectator/schematics/src/spectator/files/component/__name@dasherize__.component.spec.ts b/projects/spectator/schematics/src/spectator/files/component/__name@dasherize__.__type@dasherize__.spec.ts similarity index 100% rename from projects/spectator/schematics/src/spectator/files/component/__name@dasherize__.component.spec.ts rename to projects/spectator/schematics/src/spectator/files/component/__name@dasherize__.__type@dasherize__.spec.ts diff --git a/projects/spectator/schematics/src/spectator/index.ts b/projects/spectator/schematics/src/spectator/index.ts index e2bf6fa7..2514cc7e 100644 --- a/projects/spectator/schematics/src/spectator/index.ts +++ b/projects/spectator/schematics/src/spectator/index.ts @@ -21,7 +21,7 @@ import { ComponentOptions, DirectiveOptions, ServiceOptions } from './schema'; export function spectatorComponentSchematic(options: ComponentOptions): Rule { return chain([ externalSchematic('@schematics/angular', 'component', { - ...options, + ..._omit(options, ['jest', 'withHost', 'withCustomHost']), skipTests: true, spec: false }), @@ -52,7 +52,7 @@ export function spectatorComponentSchematic(options: ComponentOptions): Rule { export function spectatorServiceSchematic(options: ServiceOptions): Rule { return chain([ externalSchematic('@schematics/angular', 'service', { - ...options, + ..._omit(options, ['jest']), skipTests: true, spec: false }), @@ -79,7 +79,7 @@ export function spectatorServiceSchematic(options: ServiceOptions): Rule { export function spectatorDirectiveSchematic(options: DirectiveOptions): Rule { return chain([ externalSchematic('@schematics/angular', 'directive', { - ...options, + ..._omit(options, ['jest']), skipTests: true, spec: false }), @@ -106,7 +106,7 @@ export function spectatorDirectiveSchematic(options: DirectiveOptions): Rule { export function spectatorPipeSchematic(options: DirectiveOptions): Rule { return chain([ externalSchematic('@schematics/angular', 'pipe', { - ...options, + ..._omit(options, ['jest']), skipTests: true, spec: false }), @@ -147,3 +147,18 @@ async function _ensurePath(tree: Tree, options: any): Promise { options.name = parsedPath.name; options.path = parsedPath.path; } + +/** + * create a new object without given keys + * @param raw initial object + * @param keys list of keys to remove from object + */ +function _omit>(raw: T, keys: (keyof T)[]): any { + return Object.keys(raw) + .filter(key => !keys.includes(key)) + .reduce((obj: any, key) => { + obj[key] = raw[key]; + + return obj; + }, {}); +} diff --git a/projects/spectator/schematics/src/spectator/schema.ts b/projects/spectator/schematics/src/spectator/schema.ts index bdff8561..9712182d 100644 --- a/projects/spectator/schematics/src/spectator/schema.ts +++ b/projects/spectator/schematics/src/spectator/schema.ts @@ -5,6 +5,10 @@ export class ComponentOptions { path?: string; withHost?: boolean; withCustomHost?: boolean; + /** + * Adds a developer-defined type to the filename, in the format "name.type.ts" + */ + type?: string; /** * Specifies the change detection strategy. */