From b998015760649a3d36343d9a5b820787700fd345 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Fri, 22 Apr 2022 16:53:28 +0300 Subject: [PATCH 1/2] proxy generation api versioning imp --- .../packages/schematics/src/models/method.ts | 7 +-- .../packages/schematics/src/utils/index.ts | 1 + .../packages/schematics/src/utils/methods.ts | 4 ++ .../packages/schematics/src/utils/service.ts | 46 +++++++++++++++++-- .../packages/schematics/src/utils/text.ts | 3 ++ 5 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 npm/ng-packs/packages/schematics/src/utils/methods.ts diff --git a/npm/ng-packs/packages/schematics/src/models/method.ts b/npm/ng-packs/packages/schematics/src/models/method.ts index b6ee494089..7e6147b2d4 100644 --- a/npm/ng-packs/packages/schematics/src/models/method.ts +++ b/npm/ng-packs/packages/schematics/src/models/method.ts @@ -1,5 +1,6 @@ import { eBindingSourceId, eMethodModifier } from '../enums'; -import { camel } from '../utils/text'; +import { camel, camelizeHyphen } from '../utils/text'; +import { getParamName } from '../utils/methods'; import { ParameterInBody } from './api-definition'; import { Property } from './model'; import { Omissible } from './util'; @@ -50,12 +51,12 @@ export class Body { ? shouldQuote(paramName) ? `${descriptorName}['${paramName}']` : `${descriptorName}.${paramName}` - : nameOnMethod; + : camelizeHyphen(nameOnMethod); switch (bindingSourceId) { case eBindingSourceId.Model: case eBindingSourceId.Query: - this.params.push(paramName === value ? value : `${paramName}: ${value}`); + this.params.push(paramName === value ? value : `${getParamName(paramName)}: ${value}`); break; case eBindingSourceId.Body: this.body = value; diff --git a/npm/ng-packs/packages/schematics/src/utils/index.ts b/npm/ng-packs/packages/schematics/src/utils/index.ts index e6df05b2e2..eeb12e6d9e 100644 --- a/npm/ng-packs/packages/schematics/src/utils/index.ts +++ b/npm/ng-packs/packages/schematics/src/utils/index.ts @@ -7,6 +7,7 @@ export * from './enum'; export * from './file'; export * from './generics'; export * from './import'; +export * from './methods'; export * from './model'; export * from './namespace'; export * from './path'; diff --git a/npm/ng-packs/packages/schematics/src/utils/methods.ts b/npm/ng-packs/packages/schematics/src/utils/methods.ts new file mode 100644 index 0000000000..7b7547b9e1 --- /dev/null +++ b/npm/ng-packs/packages/schematics/src/utils/methods.ts @@ -0,0 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const shouldQuote = require('should-quote'); +export const getParamName = (paramName: string) => + shouldQuote(paramName) ? `["${paramName}"]` : paramName; diff --git a/npm/ng-packs/packages/schematics/src/utils/service.ts b/npm/ng-packs/packages/schematics/src/utils/service.ts index 70655c821d..f37384d27d 100644 --- a/npm/ng-packs/packages/schematics/src/utils/service.ts +++ b/npm/ng-packs/packages/schematics/src/utils/service.ts @@ -20,6 +20,8 @@ import { createTypesToImportsReducer, removeTypeModifiers, } from './type'; +import { eBindingSourceId } from '../enums'; +import { camelizeHyphen } from './text'; export function serializeParameters(parameters: Property[]) { return parameters.map(p => p.name + p.optional + ': ' + p.type + p.default, '').join(', '); @@ -79,8 +81,12 @@ export function createActionToSignatureMapper() { return (action: Action) => { const signature = new Signature({ name: getMethodNameFromAction(action) }); - - signature.parameters = action.parametersOnMethod.map(p => { + const versionParameter = getVersionParameter(action); + const parameters = [ + ...action.parametersOnMethod, + ...(versionParameter ? [versionParameter] : []), + ]; + signature.parameters = parameters.map(p => { const type = adaptType(p.typeSimple); const parameter = new Property({ name: p.name, type }); parameter.setDefault(p.defaultValue); @@ -93,7 +99,41 @@ export function createActionToSignatureMapper() { } function getMethodNameFromAction(action: Action): string { - return action.uniqueName.split('Async')[0]; + return action.uniqueName.replace('Async', ''); +} + +function getVersionParameter(action: Action) { + const versionParameter = action.parameters.find( + p => + (p.name == 'apiVersion' && p.bindingSourceId == eBindingSourceId.Path) || + (p.name == 'api-version' && p.bindingSourceId == eBindingSourceId.Query), + ); + const bestVersion = findBestApiVersion(action); + return versionParameter && bestVersion + ? { + ...versionParameter, + name: camelizeHyphen(versionParameter.name), + defaultValue: `"${bestVersion}"`, + } + : null; +} + +// Implementation of https://github.com/abpframework/abp/commit/c3f77c1229508279015054a9b4f5586404a88a14#diff-a4dbf6be9a1aa21d8294f11047774949363ee6b601980bf3225e8046c0748c9eR101 +function findBestApiVersion(action: Action) { + /* + TODO: Implement configuredVersion when js proxies implemented + let configuredVersion = null; + if (action.supportedVersions.includes(configuredVersion)) { + return configuredVersion; + } + */ + + if (!action.supportedVersions?.length) { + // TODO: return configuredVersion if exists or '1.0' + return '1.0'; + } + //TODO: Ensure to get the latest version! + return action.supportedVersions[action.supportedVersions.length - 1]; } function createActionToImportsReducer( diff --git a/npm/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/packages/schematics/src/utils/text.ts index b7a8def0f4..6215ffaacd 100644 --- a/npm/ng-packs/packages/schematics/src/utils/text.ts +++ b/npm/ng-packs/packages/schematics/src/utils/text.ts @@ -55,3 +55,6 @@ function isUpperCase(str = '') { function toLowerCase(str = '') { return str.toLowerCase(); } +export function camelizeHyphen(str: string) { + return str.replace(/-([a-z])/g, g => g[1].toUpperCase()); +} From 7dd744137ce40f727d3fb02a25cecd4831acf6df Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Fri, 22 Apr 2022 17:08:34 +0300 Subject: [PATCH 2/2] rollback string replace - move condition from ternary op to if --- npm/ng-packs/packages/schematics/src/models/method.ts | 9 +++++---- npm/ng-packs/packages/schematics/src/utils/service.ts | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/models/method.ts b/npm/ng-packs/packages/schematics/src/models/method.ts index 7e6147b2d4..d8f56e383e 100644 --- a/npm/ng-packs/packages/schematics/src/models/method.ts +++ b/npm/ng-packs/packages/schematics/src/models/method.ts @@ -47,11 +47,12 @@ export class Body { const { bindingSourceId, descriptorName, jsonName, name, nameOnMethod } = param; const camelName = camel(name); const paramName = jsonName || camelName; - const value = descriptorName - ? shouldQuote(paramName) + let value = camelizeHyphen(nameOnMethod); + if (descriptorName) { + value = shouldQuote(paramName) ? `${descriptorName}['${paramName}']` - : `${descriptorName}.${paramName}` - : camelizeHyphen(nameOnMethod); + : `${descriptorName}.${paramName}`; + } switch (bindingSourceId) { case eBindingSourceId.Model: diff --git a/npm/ng-packs/packages/schematics/src/utils/service.ts b/npm/ng-packs/packages/schematics/src/utils/service.ts index f37384d27d..4e2fdc7c02 100644 --- a/npm/ng-packs/packages/schematics/src/utils/service.ts +++ b/npm/ng-packs/packages/schematics/src/utils/service.ts @@ -99,7 +99,7 @@ export function createActionToSignatureMapper() { } function getMethodNameFromAction(action: Action): string { - return action.uniqueName.replace('Async', ''); + return action.uniqueName.split('Async')[0]; } function getVersionParameter(action: Action) {