Skip to content

Commit

Permalink
fix: quote object mock key if it is an identifier name (orval-labs#186)
Browse files Browse the repository at this point in the history
* chore: add esutils dependency

* fix: quote key in object mock if it is not an identifier name

* style: fix style in other files

* test: add an iri-reference in petstore
  • Loading branch information
alanpoulain authored Jul 26, 2021
1 parent da15e58 commit 03e701a
Show file tree
Hide file tree
Showing 16 changed files with 43 additions and 26 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
"chalk": "^4.1.0",
"commander": "^7.2.0",
"cuid": "^2.1.8",
"esutils": "2.0.3",
"fs-extra": "^9.1.0",
"ibm-openapi-validator": "^0.40.1",
"inquirer": "^8.0.0",
Expand Down
3 changes: 3 additions & 0 deletions samples/react-app-with-react-query/petstore.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ components:
- id
- name
properties:
'@id':
type: string
format: iri-reference
id:
type: integer
format: int64
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand All @@ -13,9 +13,9 @@ import type {
Pet
} from '../model'

export const getListPetsMock = () => ([...Array(faker.datatype.number({min: 1, max: 10}))].map(() => ({id: (() => faker.random.number({ min: 1, max: 99999 }))(), name: (() => faker.name.lastName())(), tag: (() => faker.name.lastName())(), email: faker.helpers.randomize([faker.internet.email(), undefined])})))
export const getListPetsMock = () => ([...Array(faker.datatype.number({min: 1, max: 10}))].map(() => ({'@id': faker.helpers.randomize([faker.random.word(), undefined]), id: (() => faker.random.number({ min: 1, max: 99999 }))(), name: (() => faker.name.lastName())(), tag: (() => faker.name.lastName())(), email: faker.helpers.randomize([faker.internet.email(), undefined])})))

export const getCreatePetsMock = () => ({id: faker.datatype.number(), name: (() => faker.name.lastName())(), tag: (() => faker.name.lastName())(), email: faker.helpers.randomize([faker.internet.email(), undefined])})
export const getCreatePetsMock = () => ({'@id': faker.helpers.randomize([faker.random.word(), undefined]), id: faker.datatype.number(), name: (() => faker.name.lastName())(), tag: (() => faker.name.lastName())(), email: faker.helpers.randomize([faker.internet.email(), undefined])})

export const getShowPetByIdMock = () => ((() => ({
id: faker.random.number({ min: 1, max: 99 }),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
2 changes: 1 addition & 1 deletion samples/react-app-with-react-query/src/api/model/error.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
3 changes: 2 additions & 1 deletion samples/react-app-with-react-query/src/api/model/pet.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
*/

export interface Pet {
'@id'?: string;
id: number;
name: string;
tag?: string;
Expand Down
2 changes: 1 addition & 1 deletion samples/react-app-with-react-query/src/api/model/pets.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Generated by orval v5.4.10 🍺
* Generated by orval v5.5.0 🍺
* Do not edit manually.
* Swagger Petstore
* OpenAPI spec version: 1.0.0
Expand Down
4 changes: 2 additions & 2 deletions src/core/generators/angular.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ const generateImplementation = (
queryParams,
response,
verb,
isFormData
isFormData,
});

const requestOptions = isRequestOptions
Expand Down Expand Up @@ -138,7 +138,7 @@ const generateImplementation = (
response,
verb,
requestOptions: override?.requestOptions,
isFormData
isFormData,
});

return ` ${operationName}<TData = ${
Expand Down
11 changes: 5 additions & 6 deletions src/core/generators/axios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const generateAxiosImplementation = (
queryParams,
response,
verb,
isFormData
isFormData,
});

const requestOptions = isRequestOptions
Expand All @@ -57,10 +57,9 @@ const generateAxiosImplementation = (
: '// eslint-disable-next-line\n// @ts-ignore\n options'
: '';

return `const ${operationName} = <TData = ${response.definition.success || 'unknown'}>(\n ${toObjectString(
props,
'implementation',
)}\n ${
return `const ${operationName} = <TData = ${
response.definition.success || 'unknown'
}>(\n ${toObjectString(props, 'implementation')}\n ${
isRequestOptions
? `options?: SecondParameter<typeof ${mutator.name}>`
: ''
Expand All @@ -79,7 +78,7 @@ const generateAxiosImplementation = (
response,
verb,
requestOptions: override?.requestOptions,
isFormData
isFormData,
});

return `const ${operationName} = <TData = AxiosResponse<${
Expand Down
8 changes: 6 additions & 2 deletions src/core/getters/object.mock.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import cuid from 'cuid';
import { ReferenceObject, SchemaObject } from 'openapi3-ts';
import { keyword } from 'esutils';
import { ContextSpecs, MockOptions } from '../../types';
import { GeneratorImport } from '../../types/generator';
import { MockDefinition } from '../../types/mocks';
Expand Down Expand Up @@ -86,11 +87,14 @@ export const getMockObject = async ({
imports = [...imports, ...resolvedValue.imports];
properties = [...properties, key];

const keyDefinition = keyword.isIdentifierNameES5(key)
? key
: `'${key}'`;
if (!isRequired && !resolvedValue.overrided) {
return `${key}: faker.helpers.randomize([${resolvedValue.value}, undefined])`;
return `${keyDefinition}: faker.helpers.randomize([${resolvedValue.value}, undefined])`;
}

return `${key}: ${resolvedValue.value}`;
return `${keyDefinition}: ${resolvedValue.value}`;
},
),
)
Expand Down
12 changes: 7 additions & 5 deletions src/core/getters/queryParams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ const getQueryParamsTypes = (
schema: SchemaObject;
};

const { value, imports, isEnum, type, schemas, ref } = await resolveValue({
schema: schema!,
context,
name: pascal(operationName) + pascal(name),
});
const { value, imports, isEnum, type, schemas, ref } = await resolveValue(
{
schema: schema!,
context,
name: pascal(operationName) + pascal(name),
},
);

const key = getKey(name);

Expand Down
4 changes: 3 additions & 1 deletion src/core/writers/targetTags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ export const generateTargetForTags = (
operations: GeneratorOperations,
options?: OutputOptions,
) => {
const operationNames = Object.values(operations).map(({operationName}) => operationName);
const operationNames = Object.values(operations).map(
({ operationName }) => operationName,
);
const allTargetTags = Object.values(operations)
.map(addDefaultTagIfEmpty)
.reduce((acc, operation, index, arr) => {
Expand Down
5 changes: 5 additions & 0 deletions src/types/esutils.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
declare module 'esutils' {
export namespace keyword {
export function isIdentifierNameES5(str: string): boolean;
}
}
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2287,7 +2287,7 @@ estraverse@^5.1.0, estraverse@^5.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==

esutils@^2.0.2:
esutils@2.0.3, esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
Expand Down

0 comments on commit 03e701a

Please sign in to comment.