diff --git a/README.md b/README.md index 67db6b5e8..97d26cb1e 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ The project is very much Work In Progress and will be published on maven central # Release Notes BOAT is still under development and subject to change. +## 0.17.4 +* Boat Angular generator + * New format for Angular mocks, which are now export an array with responses. ## 0.17.3 * Boat Angular generator * Map the `Set` type to `Array` by default to avoid breaking changes vs clients generated with 0.16.x. diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/angular/BoatAngularGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/angular/BoatAngularGenerator.java index bde1adb62..27e8c9b0d 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/angular/BoatAngularGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/angular/BoatAngularGenerator.java @@ -60,7 +60,6 @@ public class BoatAngularGenerator extends AbstractTypeScriptClientCodegen { public static final String WITH_MOCKS = "withMocks"; public static final String NG_VERSION = "ngVersion"; - public static final String FOUNDATION_VERSION = "foundationVersion"; public static final String SPEC_VERSION = "specVersion"; public static final String SPEC_ARTIFACT_ID = "specArtifactId"; public static final String SPEC_GROUP_ID = "specGroupId"; @@ -75,12 +74,13 @@ public class BoatAngularGenerator extends AbstractTypeScriptClientCodegen { public static final String PATH_NAME_KEY = "pathName"; public static final String HAS_EXAMPLES = "hasExamples"; public static final String PATTERN = "pattern"; - protected String foundationVersion = "6.6.7"; protected String ngVersion = "10.0.0"; protected String serviceSuffix = "Service"; protected String serviceFileSuffix = ".service"; protected String modelFileSuffix = ""; + private static final String MOCKS_ARRAY_TEMPLATE_NAME = "apiMocks.array.mustache"; + public BoatAngularGenerator() { super(); @@ -109,7 +109,6 @@ public BoatAngularGenerator() { "Setting this property to true will generate mocks out of the examples.", false)); this.cliOptions.add(new CliOption(NG_VERSION, "The version of Angular. (At least 10.0.0)").defaultValue(this.ngVersion)); - this.cliOptions.add(new CliOption(FOUNDATION_VERSION, "The version of foundation-ang library.").defaultValue(this.foundationVersion)); this.cliOptions.add(new CliOption(API_MODULE_PREFIX, "The prefix of the generated ApiModule.")); this.cliOptions.add(new CliOption(SERVICE_SUFFIX, "The suffix of the generated service.").defaultValue(this.serviceSuffix)); this.cliOptions.add(new CliOption(BUILD_DIST, "Path to build package to")); @@ -119,6 +118,16 @@ public BoatAngularGenerator() { } + @Override + public String apiFilename(String templateName, String tag) { + String suffix = apiTemplateFiles().get(templateName); + String folder = templateName.equals(MOCKS_ARRAY_TEMPLATE_NAME) ? mocksArrayFolder() : apiFileFolder(); + return folder + File.separator + toApiFilename(tag) + suffix; + } + + protected String mocksArrayFolder() { + return outputFolder + File.separator + "mocks"; + } @Override public void preprocessOpenAPI(OpenAPI openAPI) { @@ -191,15 +200,6 @@ public void processOpts() { () -> applyAngularVersion(this.ngVersion) ); - processOpt(FOUNDATION_VERSION, - value -> additionalProperties.put(FOUNDATION_VERSION, new SemVer(value)), - () -> { - SemVer version = new SemVer(this.foundationVersion); - additionalProperties.put(FOUNDATION_VERSION, version); - log.info("generating code with foundation-ang {} ...", version); - log.info(" (you can select the angular version by setting the additionalProperty foundationVersion)"); - }); - processOpt(SPEC_VERSION, value -> { if(StringUtils.isNotEmpty(value)) { @@ -231,11 +231,11 @@ public void processOpts() { () -> { log.info("generating code without OpenAPI YAML SPEC_GROUP_ID ..."); log.info(" (you can select the specGroupId by setting the additionalProperty specGroupId)"); - }); + }); processBooleanOpt(WITH_MOCKS, withMocks -> { if (Boolean.TRUE.equals(withMocks)) { - apiTemplateFiles.put("apiMocks.mustache", ".mocks.ts"); + apiTemplateFiles.put(MOCKS_ARRAY_TEMPLATE_NAME, ".mocks.array.js"); } }); diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/README.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/README.mustache deleted file mode 100644 index da19a8292..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/README.mustache +++ /dev/null @@ -1,29 +0,0 @@ -## {{npmName}}@{{npmVersion}} - -### Building - -To install the required dependencies and to build the typescript sources run: -``` -npm install -npm run build -``` - -### publishing - -First build the package then run ```npm publish dist``` (don't forget to specify the `dist` folder!) - -### consuming - -Navigate to the folder of your consuming project and run one of next commands. - -_published:_ - -``` -npm install {{npmName}}@{{npmVersion}} --save -``` - -#### General usage - -In your Angular project: - -todo diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/apiMocks.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/apiMocks.mustache deleted file mode 100644 index 4ac38039d..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/apiMocks.mustache +++ /dev/null @@ -1,43 +0,0 @@ -import { createMocks } from '@backbase/foundation-ang/data-http'; -import { Provider } from '@angular/core'; - -let example; - -const {{baseName}}Examples = []; -{{#operations}} - {{#operation}} -const {{nickname}}Examples = [ - { - urlPattern: "{{{basePathWithoutHost}}}{{path}}", - method: "{{#lambda.uppercase}}{{httpMethod}}{{/lambda.uppercase}}", - responses: [ - {{#responses}} - - {{#examples}} - {{#isJson}} - { - status: {{{code}}}, - body: {{{prettyPrintValue}}} - }, - {{/isJson}} - {{^isJson}} - { - status: {{{code}}}, - body: "{{#escapeJavascript}}{{{prettyPrintValue}}}{{/escapeJavascript}}" - }, - {{/isJson}} - {{/examples}} - {{/responses}} - ] -}]; -{{baseName}}Examples.push({{nickname}}Examples); -/** -* Mocks provider for {{{basePathWithoutHost}}}{{pattern}} URL pattern -*/ -export const {{classname}}{{#lambda.titlecase}}{{nickname}}{{/lambda.titlecase}}MocksProvider = /*#__PURE__*/ createMocks({{nickname}}Examples); - - {{/operation}} -{{/operations}} -export const {{classname}}MocksProvider = /*#__PURE__*/ createMocks({{baseName}}Examples); - - diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/apis.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/apis.mustache deleted file mode 100644 index 0f302fc4b..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/apis.mustache +++ /dev/null @@ -1,5 +0,0 @@ -{{#apiInfo}} -{{#apis}} -export * from './{{ classFilename }}.mocks'; -{{/apis}} -{{/apiInfo}} diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/gitignore b/boat-scaffold/src/main/templates/boat-angular-mock/gitignore deleted file mode 100644 index f06235c46..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/index.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/index.mustache deleted file mode 100644 index 28679b1ef..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/index.mustache +++ /dev/null @@ -1 +0,0 @@ -export * from './api/api'; diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/licenseInfo.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/licenseInfo.mustache deleted file mode 100644 index 869763f01..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/licenseInfo.mustache +++ /dev/null @@ -1,11 +0,0 @@ -/** - * {{{appName}}} - * {{{appDescription}}} - * - * {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} - * {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} - * - * NOTE: This class is auto generated by OpenAPI Generator (https://github.com/Backbase/backbase-openapi-tools). - * https://github.com/Backbase/backbase-openapi-tools - * Do not edit the class manually. - */ diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/ng-package.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/ng-package.mustache deleted file mode 100644 index 3b17900dc..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/ng-package.mustache +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "./node_modules/ng-packagr/ng-package.schema.json", - "lib": { - "entryFile": "index.ts" - } -} diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/package.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/package.mustache deleted file mode 100644 index a251106f0..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/package.mustache +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "{{{npmName}}}", - "version": "{{{npmVersion}}}", - "description": "OpenAPI client for {{{npmName}}}", - "backbase": { - {{#specVersion}} - "specVersion": "{{{specVersion}}}" - {{/specVersion}} - {{#specArtifactId}} - "specArtifactId": "{{{specArtifactId}}}" - {{/specArtifactId}} - {{#specGroupId}} - "specGroupId": "{{{specGroupId}}}" - {{/specGroupId}} - }, - "keywords": [ - "backbase", - "web", - "wa3", - "wc3", - "openapi-mock", - "openapi-generator" - ], - "license": "Unlicense", - "scripts": { - "build": "ng-packagr -p ng-package.json" - }, - "peerDependencies": { - "@angular/core": "^{{ngVersion}}", - "@backbase/foundation-ang": "^{{foundationVersion}}" - }, - "devDependencies": { - "@angular/common": "~{{ngVersion}}", - "@angular/compiler": "~{{ngVersion}}", - "@angular/compiler-cli": "~{{ngVersion}}", - "@angular/core": "~{{ngVersion}}", - "@angular/platform-browser": "~{{ngVersion}}", - "ng-packagr": "^{{ngPackagrVersion}}", - "reflect-metadata": "^0.1.3", - "@backbase/foundation-ang": "~{{foundationVersion}}", - "rxjs": "~{{rxjsVersion}}", - "tsickle": "^{{tsickleVersion}}", - "typescript": "{{{tsVersion}}}", - "zone.js": "^{{zonejsVersion}}" - }{{#npmRepository}}, - "publishConfig": { - "registry": "{{{npmRepository}}}" - } -{{/npmRepository}} - -} diff --git a/boat-scaffold/src/main/templates/boat-angular-mock/tsconfig.mustache b/boat-scaffold/src/main/templates/boat-angular-mock/tsconfig.mustache deleted file mode 100644 index 56b839768..000000000 --- a/boat-scaffold/src/main/templates/boat-angular-mock/tsconfig.mustache +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "noImplicitAny": false, - "suppressImplicitAnyIndexErrors": true, - "target": "{{#supportsES6}}es6{{/supportsES6}}{{^supportsES6}}es5{{/supportsES6}}", - "module": "{{#supportsES6}}es6{{/supportsES6}}{{^supportsES6}}commonjs{{/supportsES6}}", - "moduleResolution": "node", - "removeComments": false, - "sourceMap": true, - "outDir": "./dist", - "noLib": false, - "declaration": true, - "lib": [ "es6", "dom" ], - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "dist" - ], - "filesGlob": [ - "./api/*.ts" - ] -} diff --git a/boat-scaffold/src/main/templates/boat-angular/api.module.mustache b/boat-scaffold/src/main/templates/boat-angular/api.module.mustache index 3b1ecd911..f54afbebf 100644 --- a/boat-scaffold/src/main/templates/boat-angular/api.module.mustache +++ b/boat-scaffold/src/main/templates/boat-angular/api.module.mustache @@ -1,11 +1,7 @@ import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; -import { {{configurationClassName}}{{#withMocks}}, CONFIG_TOKEN{{/withMocks}} } from './configuration'; +import { {{configurationClassName}} } from './configuration'; import { HttpClient } from '@angular/common/http'; -{{#withMocks}} -import { DataModulesManager } from "@backbase/foundation-ang/data-http"; -{{/withMocks}} - @NgModule({ imports: [], declarations: [], @@ -22,11 +18,6 @@ export class {{apiModuleClassName}} { constructor( @Optional() @SkipSelf() parentModule: {{apiModuleClassName}}, @Optional() http: HttpClient, - {{#withMocks}} - @Optional() dataModulesManager: DataModulesManager | null, - config: {{configurationClassName}}, - {{/withMocks}} - ) { if (parentModule) { throw new Error('{{apiModuleClassName}} is already loaded. Import in your base AppModule only.'); @@ -35,15 +26,5 @@ export class {{apiModuleClassName}} { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } - - {{#withMocks}} - if (dataModulesManager) { - dataModulesManager.setModuleConfig(CONFIG_TOKEN, { - apiRoot: '', - servicePath: config.basePath || '', - headers: {}, - }); - } - {{/withMocks}} } } diff --git a/boat-scaffold/src/main/templates/boat-angular/apiMocks.array.mustache b/boat-scaffold/src/main/templates/boat-angular/apiMocks.array.mustache new file mode 100644 index 000000000..39b6f77eb --- /dev/null +++ b/boat-scaffold/src/main/templates/boat-angular/apiMocks.array.mustache @@ -0,0 +1,32 @@ +module.exports = [{{#operations}} + {{#operation}} +{ + urlPattern: "{{{basePathWithoutHost}}}{{pattern}}", + method: "{{#lambda.uppercase}}{{httpMethod}}{{/lambda.uppercase}}", + responses: [ + {{#responses}} + {{#examples}} + {{#isJson}} + { + status: {{{code}}}, + body: {{{prettyPrintValue}}} + }, + {{/isJson}} + {{^isJson}} + { + status: {{{code}}}, + body: "{{#escapeJavascript}}{{{prettyPrintValue}}}{{/escapeJavascript}}" + }, + {{/isJson}} + {{/examples}} + {{#hasEmptyBody}} + { + status: {{{code}}}, + body: "" + }, + {{/hasEmptyBody}} + {{/responses}} + ] +}, +{{/operation}} +{{/operations}}] diff --git a/boat-scaffold/src/main/templates/boat-angular/apiMocks.mustache b/boat-scaffold/src/main/templates/boat-angular/apiMocks.mustache deleted file mode 100644 index 589b18c2f..000000000 --- a/boat-scaffold/src/main/templates/boat-angular/apiMocks.mustache +++ /dev/null @@ -1,76 +0,0 @@ -import { createMocks } from '@backbase/foundation-ang/data-http'; -import { Provider } from '@angular/core'; - -{{#operations}} - {{#operation}} -/** -* Mocks provider for {{{basePathWithoutHost}}}{{pattern}} URL pattern -*/ -export const {{classname}}{{#lambda.titlecase}}{{nickname}}{{/lambda.titlecase}}MocksProvider = /*#__PURE__*/ createMocks([{ - urlPattern: "{{{basePathWithoutHost}}}{{pattern}}", - method: "{{#lambda.uppercase}}{{httpMethod}}{{/lambda.uppercase}}", - responses: [ - {{#responses}} - {{#examples}} - {{#isJson}} - { - status: {{{code}}}, - body: {{{prettyPrintValue}}} - }, - {{/isJson}} - {{^isJson}} - { - status: {{{code}}}, - body: "{{#escapeJavascript}}{{{prettyPrintValue}}}{{/escapeJavascript}}" - }, - {{/isJson}} - {{/examples}} - {{#hasEmptyBody}} - { - status: {{{code}}}, - body: "" - }, - {{/hasEmptyBody}} - {{/responses}} - ] -}]); - {{/operation}} -{{/operations}} - -export const {{classname}}MocksProvider = /*#__PURE__*/ createMocks( - [{{#operations}} - {{#operation}} - { - urlPattern: "{{{basePathWithoutHost}}}{{pattern}}", - method: "{{#lambda.uppercase}}{{httpMethod}}{{/lambda.uppercase}}", - responses: [ - {{#responses}} - - {{#examples}} - {{#isJson}} - { - status: {{{code}}}, - body: {{{prettyPrintValue}}} - }, - {{/isJson}} - {{^isJson}} - { - status: {{{code}}}, - body: "{{#escapeJavascript}}{{{prettyPrintValue}}}{{/escapeJavascript}}" - }, - {{/isJson}} - {{/examples}} - {{#hasEmptyBody}} - { - status: {{{code}}}, - body: "" - }, - {{/hasEmptyBody}} - {{/responses}} - ] -}, - {{/operation}} -{{/operations}}] -); - - diff --git a/boat-scaffold/src/main/templates/boat-angular/configuration.mustache b/boat-scaffold/src/main/templates/boat-angular/configuration.mustache index e7d6ddb8a..c6e648010 100644 --- a/boat-scaffold/src/main/templates/boat-angular/configuration.mustache +++ b/boat-scaffold/src/main/templates/boat-angular/configuration.mustache @@ -1,9 +1,5 @@ import { HttpParameterCodec } from '@angular/common/http'; -{{#withMocks}} -import { InjectionToken } from '@angular/core'; -{{/withMocks}} - export interface {{configurationParametersInterfaceName}} { apiKeys?: {[ key: string ]: string}; username?: string; @@ -146,8 +142,3 @@ export class {{configurationClassName}} { : value; } } - -{{#withMocks}} -export const CONFIG_TOKEN = new InjectionToken('api-data-module {{configurationClassName}}'); -{{/withMocks}} - diff --git a/boat-scaffold/src/main/templates/boat-angular/ng-package.mustache b/boat-scaffold/src/main/templates/boat-angular/ng-package.mustache index f3b5a1322..676dc505a 100644 --- a/boat-scaffold/src/main/templates/boat-angular/ng-package.mustache +++ b/boat-scaffold/src/main/templates/boat-angular/ng-package.mustache @@ -3,5 +3,6 @@ "lib": { "entryFile": "public_api.ts" }, - "dest": "{{{buildDist}}}" + "dest": "{{{buildDist}}}", + "assets": ["mocks/*.js"] } diff --git a/boat-scaffold/src/main/templates/boat-angular/package.mustache b/boat-scaffold/src/main/templates/boat-angular/package.mustache index c9229e7cf..1bb6fed66 100644 --- a/boat-scaffold/src/main/templates/boat-angular/package.mustache +++ b/boat-scaffold/src/main/templates/boat-angular/package.mustache @@ -4,14 +4,23 @@ "description": "OpenAPI client for {{{npmName}}}", "backbase": { {{#specVersion}} - "specVersion": "{{{specVersion}}}" + "specVersion": "{{{specVersion}}}", {{/specVersion}} {{#specArtifactId}} - "specArtifactId": "{{{specArtifactId}}}" + "specArtifactId": "{{{specArtifactId}}}", {{/specArtifactId}} {{#specGroupId}} - "specGroupId": "{{{specGroupId}}}" + "specGroupId": "{{{specGroupId}}}", {{/specGroupId}} + {{#inputSpecRelative}} + "inputSpecRelative": "{{{inputSpecRelative}}}", + {{/inputSpecRelative}} + {{#specClassifier}} + "specClassifier": "{{{specClassifier}}}", + {{/specClassifier}} + {{#specType}} + "specType": "{{{specType}}}" + {{/specType}} }, "keywords": [ "backbase", @@ -26,9 +35,6 @@ }, "peerDependencies": { "@angular/core": ">={{ngVersion}}", - {{#withMocks}} - "@backbase/foundation-ang": ">={{foundationVersion}}", - {{/withMocks}} "rxjs": ">={{rxjsVersion}}" }, "devDependencies": { @@ -42,9 +48,6 @@ "@ngrx/store": "^{{ngVersion}}", "ng-packagr": "^{{ngPackagrVersion}}", "reflect-metadata": "^0.1.3", - {{#withMocks}} - "@backbase/foundation-ang": "^{{foundationVersion}}", - {{/withMocks}} "rxjs": "^{{rxjsVersion}}", "typescript": "~{{{tsVersion}}}", "zone.js": "^{{zonejsVersion}}" diff --git a/boat-scaffold/src/main/templates/boat-angular/public_api.mustache b/boat-scaffold/src/main/templates/boat-angular/public_api.mustache index 2412f5f30..6bed3705a 100644 --- a/boat-scaffold/src/main/templates/boat-angular/public_api.mustache +++ b/boat-scaffold/src/main/templates/boat-angular/public_api.mustache @@ -8,9 +8,5 @@ export * from './api.module'; {{#operations}} export * from './api/{{ classFilename }}'; {{/operations}} - -{{#withMocks}} -export * from './api/{{ classFilename }}.mocks'; -{{/withMocks}} {{/apis}} {{/apiInfo}} \ No newline at end of file diff --git a/boat-scaffold/src/test/java/com/backbase/oss/codegen/angular/BoatAngularTemplatesTests.java b/boat-scaffold/src/test/java/com/backbase/oss/codegen/angular/BoatAngularTemplatesTests.java index db1335a6d..2b72311ad 100644 --- a/boat-scaffold/src/test/java/com/backbase/oss/codegen/angular/BoatAngularTemplatesTests.java +++ b/boat-scaffold/src/test/java/com/backbase/oss/codegen/angular/BoatAngularTemplatesTests.java @@ -121,7 +121,7 @@ public void npmRepository() { @Check public void withMocks() { assertThat( - findPattern(selectFiles("/api/.+\\.service\\.mocks\\.ts$"), "MocksProvider = /\\*#__PURE__\\*/ createMocks"), + findPattern(selectFiles("/mocks/.+\\.service\\.mocks\\.array\\.js$"), "module.exports"), equalTo(this.param.withMocks)); } @@ -235,9 +235,6 @@ private List generateFrom(String templates) { if (!Objects.isNull(this.param.ngVersion)) { cf.addAdditionalProperty(BoatAngularGenerator.NG_VERSION, this.param.ngVersion); } - if (!Objects.isNull(this.param.foundationVersion)) { - cf.addAdditionalProperty(BoatAngularGenerator.FOUNDATION_VERSION, this.param.foundationVersion); - } if (!Objects.isNull(this.param.specVersion)) { cf.addAdditionalProperty(BoatAngularGenerator.SPEC_VERSION, this.param.specVersion); @@ -283,7 +280,6 @@ static class Combination { final String name; final String ngVersion; - final String foundationVersion; final String specVersion; final String specArtifactId; final String specGroupId; @@ -297,7 +293,6 @@ static class Combination { Combination(int mask, String ngVersion) { this.name = caseName(mask) + "-ng-" + ngVersion; this.ngVersion = ngVersion; - this.foundationVersion = mask == 0 ? "6.0.0" : mask == 1 ? "7.0.0" : null; this.specVersion = mask == 0 ? "1.0.0" : mask == 1 ? "2.0.0" : null; this.specArtifactId = "specArtifactId"; this.specGroupId = "specGroupId";