diff --git a/packages/utils/typescript/lib/generators/common/imports.js b/packages/utils/typescript/lib/generators/common/imports.js index 9d1311ecf4..e326010b2e 100644 --- a/packages/utils/typescript/lib/generators/common/imports.js +++ b/packages/utils/typescript/lib/generators/common/imports.js @@ -18,9 +18,9 @@ module.exports = { }, generateImportDefinition() { - const formattedImports = imports.map((key) => - factory.createImportSpecifier(false, undefined, factory.createIdentifier(key)) - ); + const formattedImports = imports + .sort() + .map((key) => factory.createImportSpecifier(false, undefined, factory.createIdentifier(key))); return [ factory.createImportDeclaration( diff --git a/packages/utils/typescript/lib/generators/common/models/schema.js b/packages/utils/typescript/lib/generators/common/models/schema.js index 83a12ef6fa..7660d47c03 100644 --- a/packages/utils/typescript/lib/generators/common/models/schema.js +++ b/packages/utils/typescript/lib/generators/common/models/schema.js @@ -22,9 +22,11 @@ const { addImport } = require('../imports'); const generateAttributePropertySignature = (schema) => { const { attributes } = schema; - const properties = Object.entries(attributes).map(([attributeName, attribute]) => { - return attributeToPropertySignature(schema, attributeName, attribute); - }); + const properties = Object.entries(attributes) + .sort((a, b) => a[0].localeCompare(b[0])) + .map(([attributeName, attribute]) => { + return attributeToPropertySignature(schema, attributeName, attribute); + }); return factory.createPropertySignature( undefined, diff --git a/packages/utils/typescript/lib/generators/common/models/utils.js b/packages/utils/typescript/lib/generators/common/models/utils.js index a27d3d193c..cc4bcb8a12 100644 --- a/packages/utils/typescript/lib/generators/common/models/utils.js +++ b/packages/utils/typescript/lib/generators/common/models/utils.js @@ -111,7 +111,7 @@ const toTypeLiteral = (data) => { throw new Error(`Cannot convert to object literal. Unknown type "${typeof data}"`); } - const entries = Object.entries(data); + const entries = Object.entries(data).sort((a, b) => a[0].localeCompare(b[0])); const props = entries.reduce((acc, [key, value]) => { // Handle keys such as content-type-builder & co. diff --git a/packages/utils/typescript/lib/generators/components/index.js b/packages/utils/typescript/lib/generators/components/index.js index 3f42a70962..6ae299549e 100644 --- a/packages/utils/typescript/lib/generators/components/index.js +++ b/packages/utils/typescript/lib/generators/components/index.js @@ -1,6 +1,7 @@ 'use strict'; const { factory } = require('typescript'); +const { pipe, values, sortBy, map } = require('lodash/fp'); const { models } = require('../common'); const { emitDefinitions, format, generateSharedExtensionDefinition } = require('../utils'); @@ -23,10 +24,14 @@ const generateComponentsDefinitions = async (options = {}) => { const { components } = strapi; - const componentsDefinitions = Object.values(components).map((contentType) => ({ - uid: contentType.uid, - definition: models.schema.generateSchemaDefinition(contentType), - })); + const componentsDefinitions = pipe( + values, + sortBy('uid'), + map((component) => ({ + uid: component.uid, + definition: models.schema.generateSchemaDefinition(component), + })) + )(components); options.logger.debug(`Found ${componentsDefinitions.length} components.`); diff --git a/packages/utils/typescript/lib/generators/content-types/index.js b/packages/utils/typescript/lib/generators/content-types/index.js index f77181dd9c..70cb89badb 100644 --- a/packages/utils/typescript/lib/generators/content-types/index.js +++ b/packages/utils/typescript/lib/generators/content-types/index.js @@ -1,6 +1,7 @@ 'use strict'; const { factory } = require('typescript'); +const { values, pipe, map, sortBy } = require('lodash/fp'); const { models } = require('../common'); const { emitDefinitions, format, generateSharedExtensionDefinition } = require('../utils'); @@ -23,10 +24,14 @@ const generateContentTypesDefinitions = async (options = {}) => { const { contentTypes } = strapi; - const contentTypesDefinitions = Object.values(contentTypes).map((contentType) => ({ - uid: contentType.uid, - definition: models.schema.generateSchemaDefinition(contentType), - })); + const contentTypesDefinitions = pipe( + values, + sortBy('uid'), + map((contentType) => ({ + uid: contentType.uid, + definition: models.schema.generateSchemaDefinition(contentType), + })) + )(contentTypes); options.logger.debug(`Found ${contentTypesDefinitions.length} content-types.`);