From 11984e050b920e38faca6c90e2fdda517c9124e8 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Sun, 12 May 2024 20:52:15 +0200 Subject: [PATCH] typesafety on jdl to json --- .../jdl-to-json-basic-entity-converter.ts | 2 +- .../jdl-to-json-field-converter.ts | 6 +- .../jdl-to-json-option-converter.ts | 12 ++-- ...jdl-to-json-relationship-converter.spec.ts | 2 +- .../jdl-to-json-relationship-converter.ts | 36 ++++++------ ...jdl-with-applications-to-json-converter.ts | 57 ++++++++++--------- ...l-without-application-to-json-converter.ts | 37 ++++++------ jdl/jdl-importer.ts | 3 +- jdl/jhipster/json-entity.ts | 8 +-- jdl/models/jdl-field.ts | 9 +-- jdl/models/jdl-object.ts | 28 +++++++-- jdl/models/jdl-options.ts | 4 +- jdl/models/jdl-relationship.ts | 20 +++---- jdl/models/jdl-validation.ts | 6 +- 14 files changed, 130 insertions(+), 100 deletions(-) diff --git a/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.ts b/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.ts index 85e8511fd6ea..f3ba00d48973 100644 --- a/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.ts +++ b/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.ts @@ -31,7 +31,7 @@ export default { * @param jdlEntities - the JDL entities to convert. * @return a map having for keys entity names and for values the corresponding JSON entities. */ -export function convert(jdlEntities: JDLEntity[]): Map { +export function convert(jdlEntities?: JDLEntity[] | null): Map { if (!jdlEntities) { throw new Error('JDL entities must be passed to get the basic entity information.'); } diff --git a/jdl/converters/jdl-to-json/jdl-to-json-field-converter.ts b/jdl/converters/jdl-to-json/jdl-to-json-field-converter.ts index b09f6da9c75a..933e17e1e7cd 100644 --- a/jdl/converters/jdl-to-json/jdl-to-json-field-converter.ts +++ b/jdl/converters/jdl-to-json/jdl-to-json-field-converter.ts @@ -42,7 +42,7 @@ export default { convert }; * @param jdlObject - the JDL object containing entities, fields and enums. * @return a map having for keys an entity's name and for values its JSON fields. */ -export function convert(jdlObject: JDLObject): Map { +export function convert(jdlObject?: JDLObject | null): Map { if (!jdlObject) { throw new Error('A JDL Object must be passed to convert JDL fields to JSON.'); } @@ -102,7 +102,7 @@ function getConvertedFieldsForEntity(jdlEntity: JDLEntity, jdlObject: JDLObject) return convertedEntityFields; } -function getBlobFieldData(fieldType: string) { +function getBlobFieldData(fieldType: string): { fieldType: 'bytes'; fieldTypeBlobContent: 'image' | 'any' | 'text' } { const blobFieldData: any = { fieldType: BYTES, }; @@ -136,7 +136,7 @@ function getFieldValidations(jdlField: JDLField) { return fieldValidations; } -function getOptionsForField(jdlField) { +function getOptionsForField(jdlField: JDLField) { const fieldOptions = { options: {}, }; diff --git a/jdl/converters/jdl-to-json/jdl-to-json-option-converter.ts b/jdl/converters/jdl-to-json/jdl-to-json-option-converter.ts index 4e35a33a3a8e..5caa0ac0f909 100644 --- a/jdl/converters/jdl-to-json/jdl-to-json-option-converter.ts +++ b/jdl/converters/jdl-to-json/jdl-to-json-option-converter.ts @@ -50,7 +50,7 @@ type JDLOptionHolder = JDLObject | JDLApplication; * @param jdlOptionHolder - a JDL object (a JDLObject or a JDLApplication) containing the options. * @return {Map} a map having for keys entity names and for values the JSON option contents. */ -export function convert(jdlOptionHolder: JDLOptionHolder) { +export function convert(jdlOptionHolder?: JDLOptionHolder | null): Map { if (!jdlOptionHolder) { throw new Error('A JDL object or application must be passed to convert JDL options to JSON.'); } @@ -60,7 +60,7 @@ export function convert(jdlOptionHolder: JDLOptionHolder) { return convertedOptionContent; } -function resolveEntityNamesForEachOption(jdlOptionHolder: JDLOptionHolder) { +function resolveEntityNamesForEachOption(jdlOptionHolder: JDLOptionHolder): void { jdlOptionHolder.forEachOption(jdlOption => { if (jdlOption.entityNames.has('*')) { jdlOption.setEntityNames(jdlOptionHolder.getEntityNames().filter(entityName => !jdlOption.excludedNames.has(entityName))); @@ -68,13 +68,13 @@ function resolveEntityNamesForEachOption(jdlOptionHolder: JDLOptionHolder) { }); } -function setConvertedOptionContents(jdlOptionHolder: JDLOptionHolder) { +function setConvertedOptionContents(jdlOptionHolder: JDLOptionHolder): void { jdlOptionHolder.forEachOption(jdlOption => { setOptionsToEachEntityName(jdlOption); }); } -function setOptionsToEachEntityName(jdlOption) { +function setOptionsToEachEntityName(jdlOption: AbstractJDLOption): void { const { key, value } = getJSONOptionKeyAndValue(jdlOption); jdlOption.entityNames.forEach(entityName => { @@ -118,13 +118,13 @@ function getJSONOptionKeyAndValue(jdlOption: AbstractJDLOption): { key: string; } } -function preventEntitiesFromBeingSearched(entityNames: string[]) { +function preventEntitiesFromBeingSearched(entityNames: Set) { entityNames.forEach(entityName => { setOptionToEntityName({ optionName: 'searchEngine', optionValue: NO_SEARCH_ENGINE }, entityName); }); } -function setOptionToEntityName(option, entityName: string) { +function setOptionToEntityName(option, entityName: string): void { const { optionName, optionValue } = option; const optionContentForEntity = convertedOptionContent.get(entityName) ?? {}; optionContentForEntity[optionName] = optionValue; diff --git a/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.spec.ts b/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.spec.ts index 523054ee0da9..90635a7b0bd2 100644 --- a/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.spec.ts +++ b/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.spec.ts @@ -18,7 +18,7 @@ */ /* eslint-disable no-unused-expressions */ -import { before, it, describe, expect, expect as jestExpect } from 'esmocha'; +import { before, it, describe, expect as jestExpect } from 'esmocha'; import { expect } from 'chai'; import JDLRelationship from '../../models/jdl-relationship.js'; import { convert } from './jdl-to-json-relationship-converter.js'; diff --git a/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.ts b/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.ts index 29a1df9a7ee3..939ea960ce43 100644 --- a/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.ts +++ b/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.ts @@ -21,6 +21,8 @@ import { kebabCase } from 'lodash-es'; import { relationshipOptions, validations } from '../../jhipster/index.js'; import { camelCase, lowerFirst } from '../../utils/string-utils.js'; import JDLRelationship from '../../models/jdl-relationship.js'; +import { JSONRelationship } from '../types.js'; +import { RelationshipType } from '../../basic-types/relationships.js'; const { Validations: { REQUIRED }, @@ -50,13 +52,15 @@ export function convert(jdlRelationships: JDLRelationship[] = [], entityNames: s return convertedRelationships; } -function getRelatedRelationships(relationships, entityNames) { +type RelationshipsRelatedToEntity = { + from: JDLRelationship[]; + to: JDLRelationship[]; +}; + +function getRelatedRelationships(relationships: JDLRelationship[], entityNames: string[]) { const relatedRelationships = new Map(); entityNames.forEach(entityName => { - const relationshipsRelatedToEntity: { - from: any[]; - to: any[]; - } = { + const relationshipsRelatedToEntity: RelationshipsRelatedToEntity = { from: [], to: [], }; @@ -76,12 +80,12 @@ function getRelatedRelationships(relationships, entityNames) { return relatedRelationships; } -function setRelationshipsFromEntity(relatedRelationships, entityName) { +function setRelationshipsFromEntity(relatedRelationships: RelationshipsRelatedToEntity, entityName: string) { relatedRelationships.from.forEach(relationshipToConvert => { const otherSplitField: any = extractField(relationshipToConvert.injectedFieldInTo); - const convertedRelationship: any = { + const convertedRelationship: Partial = { relationshipSide: 'left', - relationshipType: kebabCase(relationshipToConvert.type), + relationshipType: kebabCase(relationshipToConvert.type) as RelationshipType, otherEntityName: camelCase(relationshipToConvert.to), }; if (otherSplitField.relationshipName) { @@ -106,7 +110,7 @@ function setRelationshipsFromEntity(relatedRelationships, entityName) { export const otherRelationshipType = relationshipType => relationshipType.split('-').reverse().join('-'); -function setRelationshipsToEntity(relatedRelationships, entityName) { +function setRelationshipsToEntity(relatedRelationships: RelationshipsRelatedToEntity, entityName: string) { relatedRelationships.to.forEach(relationshipToConvert => { const otherSplitField = extractField(relationshipToConvert.injectedFieldInFrom); const convertedRelationship: any = { @@ -137,30 +141,30 @@ function setRelationshipsToEntity(relatedRelationships, entityName) { }); } -function setOptionsForRelationshipSourceSide(relationshipToConvert, convertedRelationship) { +function setOptionsForRelationshipSourceSide(relationshipToConvert: JDLRelationship, convertedRelationship: Partial) { convertedRelationship.options = convertedRelationship.options || {}; relationshipToConvert.forEachGlobalOption((optionName, optionValue) => { if (optionName === BUILT_IN_ENTITY) { convertedRelationship.relationshipWithBuiltInEntity = optionValue; } else { - convertedRelationship.options[optionName] = optionValue; + convertedRelationship.options![optionName] = optionValue; } }); relationshipToConvert.forEachDestinationOption((optionName, optionValue) => { - convertedRelationship.options[optionName] = optionValue; + convertedRelationship.options![optionName] = optionValue; }); if (Object.keys(convertedRelationship.options).length === 0) { delete convertedRelationship.options; } } -function setOptionsForRelationshipDestinationSide(relationshipToConvert, convertedRelationship) { +function setOptionsForRelationshipDestinationSide(relationshipToConvert: JDLRelationship, convertedRelationship: JSONRelationship) { convertedRelationship.options = convertedRelationship.options || {}; relationshipToConvert.forEachGlobalOption((optionName, optionValue) => { - convertedRelationship.options[optionName] = optionValue; + convertedRelationship.options![optionName] = optionValue; }); relationshipToConvert.forEachSourceOption((optionName, optionValue) => { - convertedRelationship.options[optionName] = optionValue; + convertedRelationship.options![optionName] = optionValue; }); if (Object.keys(convertedRelationship.options).length === 0) { delete convertedRelationship.options; @@ -173,7 +177,7 @@ function setOptionsForRelationshipDestinationSide(relationshipToConvert, convert * @return{Object} where 'relationshipName' is the relationship name and * 'otherEntityField' is the other entity field name */ -function extractField(field) { +function extractField(field?: string | null) { const splitField: any = { relationshipName: '', }; diff --git a/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.ts b/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.ts index fa7bf2d8d020..6fcf198c9ab0 100644 --- a/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.ts +++ b/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.ts @@ -21,10 +21,13 @@ import BasicEntityConverter from './jdl-to-json-basic-entity-converter.js'; import FieldConverter from './jdl-to-json-field-converter.js'; import RelationshipConverter from './jdl-to-json-relationship-converter.js'; import OptionConverter from './jdl-to-json-option-converter.js'; +import JDLObject, { JDLObjectWrapper } from '../../models/jdl-object.js'; +import JDLApplication from '../../models/jdl-application.js'; +import JSONEntity from '../../jhipster/json-entity.js'; -let entities; -let jdlObject; -let entitiesPerApplication; +let entities: Record | null | undefined; +let jdlObject: JDLObject | null | undefined; +let entitiesPerApplication: Map; export default { convert }; @@ -34,13 +37,13 @@ export default { convert }; * @param {JDLObject} args.jdlObject - the JDLObject to convert to JSON * @returns {Map} entities that can be exported to JSON */ -export function convert(args: any = {}) { +export function convert(args: JDLObjectWrapper = {}) { if (!args.jdlObject) { throw new Error('The JDL object is mandatory.'); } init(args); setEntitiesPerApplication(); - if (entitiesPerApplication.size === 0) { + if (entitiesPerApplication.size === 0 && jdlObject) { const applicationNames = jdlObject.getApplications().map(jdlApplication => jdlApplication.getConfigurationOptionValue('baseName')); return new Map(applicationNames.map(applicationName => [applicationName, []])); } @@ -55,7 +58,7 @@ export function convert(args: any = {}) { return entitiesForEachApplication; } -function init(args) { +function init(args: JDLObjectWrapper): void { if (jdlObject) { resetState(); } @@ -64,13 +67,13 @@ function init(args) { entitiesPerApplication = new Map(); } -function resetState() { +function resetState(): void { jdlObject = null; entities = null; } -function setEntitiesPerApplication() { - jdlObject.forEachApplication(jdlApplication => { +function setEntitiesPerApplication(): void { + jdlObject?.forEachApplication((jdlApplication: JDLApplication) => { const entityNames = jdlApplication.getEntityNames(); if (entityNames.length === 0) { return; @@ -80,35 +83,35 @@ function setEntitiesPerApplication() { }); } -function setBasicEntityInformation() { - const convertedEntities = BasicEntityConverter.convert(jdlObject.getEntities()); +function setBasicEntityInformation(): void { + const convertedEntities = BasicEntityConverter.convert(jdlObject?.getEntities()); convertedEntities.forEach((jsonEntity, entityName) => { - entities[entityName] = jsonEntity; + entities![entityName] = jsonEntity; }); } -function setFields() { +function setFields(): void { const convertedFields = FieldConverter.convert(jdlObject); convertedFields.forEach((entityFields, entityName) => { - entities[entityName].addFields(entityFields); + entities![entityName].addFields(entityFields); }); } -function setRelationships() { - const convertedRelationships = RelationshipConverter.convert(jdlObject.getRelationships(), jdlObject.getEntityNames()); +function setRelationships(): void { + const convertedRelationships = RelationshipConverter.convert(jdlObject?.getRelationships(), jdlObject?.getEntityNames()); convertedRelationships.forEach((entityRelationships, entityName) => { - entities[entityName].addRelationships(entityRelationships); + entities![entityName].addRelationships(entityRelationships); }); } -function setApplicationToEntities() { - jdlObject.forEachApplication(jdlApplication => { +function setApplicationToEntities(): void { + jdlObject?.forEachApplication((jdlApplication: JDLApplication) => { const baseName = jdlApplication.getConfigurationOptionValue('baseName'); - jdlApplication.forEachEntityName(entityName => { - if (!entities[entityName]) { + jdlApplication.forEachEntityName((entityName: string) => { + if (!entities![entityName]) { return; } - entities[entityName].applications.push(baseName); + entities![entityName].applications.push(baseName); }); }); } @@ -116,9 +119,9 @@ function setApplicationToEntities() { function setOptions(entitiesForEachApplication) { const convertedOptionContents = OptionConverter.convert(jdlObject); convertedOptionContents.forEach((optionContent, entityName) => { - entities[entityName].setOptions(optionContent); + entities![entityName].setOptions(optionContent); }); - jdlObject.forEachApplication(jdlApplication => { + jdlObject?.forEachApplication(jdlApplication => { const convertedOptionContentsForApplication = OptionConverter.convert(jdlApplication); const applicationName = jdlApplication.getConfigurationOptionValue('baseName'); const applicationEntities = entitiesForEachApplication.get(applicationName); @@ -135,8 +138,8 @@ function getEntitiesForEachApplicationMap() { const entitiesForEachApplication = new Map(); entitiesPerApplication.forEach((entityNames, applicationName) => { const entitiesInObject = entityNames - .filter(entityName => !!entities[entityName]) - .map(entityName => entities[entityName]) + .filter(entityName => !!entities![entityName]) + .map(entityName => entities![entityName]) .reduce((accumulator, currentEntity) => { return { ...accumulator, @@ -156,7 +159,7 @@ function formatEntitiesForEachApplication(entitiesForEachApplication) { } function addApplicationsWithoutEntities(entitiesForEachApplication) { - jdlObject.forEachApplication(jdlApplication => { + jdlObject?.forEachApplication(jdlApplication => { if (jdlApplication.getEntityNames().length === 0) { entitiesForEachApplication.set(jdlApplication.getConfigurationOptionValue('baseName'), []); } diff --git a/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.ts b/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.ts index d5798de32248..3e84ca001d02 100644 --- a/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.ts +++ b/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.ts @@ -21,10 +21,11 @@ import BasicEntityConverter from './jdl-to-json-basic-entity-converter.js'; import FieldConverter from './jdl-to-json-field-converter.js'; import RelationshipConverter from './jdl-to-json-relationship-converter.js'; import OptionConverter from './jdl-to-json-option-converter.js'; -import JDLObject from '../../models/jdl-object.js'; +import JDLObject, { JDLObjectWrapper } from '../../models/jdl-object.js'; +import JSONEntity from '../../jhipster/json-entity.js'; -let entities; -let jdlObject: JDLObject | null; +let entities: Record | null | undefined; +let jdlObject: JDLObject | null | undefined; export default { convert, @@ -39,7 +40,7 @@ export default { * @param {string} args.applicationType - the application's type * @returns {Map} entities that can be exported to JSON */ -export function convert(args: any = {}) { +export function convert(args: JDLObjectWrapper = {}) { if (!args.jdlObject || !args.applicationName || !args.databaseType) { throw new Error("The JDL object, the application's name, and its the database type are mandatory."); } @@ -49,10 +50,10 @@ export function convert(args: any = {}) { setFields(); setRelationships(); setApplicationToEntities(); - return new Map([[args.applicationName, Object.values(entities)]]); + return new Map([[args.applicationName, Object.values(entities!)]]); } -function init(args) { +function init(args: JDLObjectWrapper) { if (jdlObject) { resetState(); } @@ -60,41 +61,41 @@ function init(args) { entities = {}; } -function resetState() { +function resetState(): void { jdlObject = null; entities = null; } -function setBasicEntityInformation() { +function setBasicEntityInformation(): void { const convertedEntities = BasicEntityConverter.convert(jdlObject!.getEntities()); convertedEntities.forEach((jsonEntity, entityName) => { - entities[entityName] = jsonEntity; + entities![entityName] = jsonEntity; }); } -function setOptions() { +function setOptions(): void { const convertedOptionContents = OptionConverter.convert(jdlObject!); convertedOptionContents.forEach((optionContent, entityName) => { - entities[entityName].setOptions(optionContent); + entities![entityName].setOptions(optionContent); }); } -function setFields() { +function setFields(): void { const convertedFields = FieldConverter.convert(jdlObject!); convertedFields.forEach((entityFields, entityName) => { - entities[entityName].addFields(entityFields); + entities![entityName].addFields(entityFields); }); } -function setRelationships() { +function setRelationships(): void { const convertedRelationships = RelationshipConverter.convert(jdlObject!.getRelationships(), jdlObject!.getEntityNames()); convertedRelationships.forEach((entityRelationships, entityName) => { - entities[entityName].addRelationships(entityRelationships); + entities![entityName].addRelationships(entityRelationships); }); } -function setApplicationToEntities() { - Object.keys(entities).forEach(entityName => { - entities[entityName].applications = '*'; +function setApplicationToEntities(): void { + Object.keys(entities!).forEach(entityName => { + entities![entityName].applications = '*'; }); } diff --git a/jdl/jdl-importer.ts b/jdl/jdl-importer.ts index 0fe9de57862e..f8b92af03910 100644 --- a/jdl/jdl-importer.ts +++ b/jdl/jdl-importer.ts @@ -29,6 +29,7 @@ import exportEntities from './exporters/jhipster-entity-exporter.js'; import createWithApplicationValidator from './validators/jdl-with-application-validator.js'; import createWithoutApplicationValidator from './validators/jdl-without-application-validator.js'; import { applicationOptions } from './jhipster/index.js'; +import JDLObject from './models/jdl-object.js'; const { OptionNames } = applicationOptions; const { APPLICATION_TYPE, BASE_NAME } = OptionNames; @@ -212,7 +213,7 @@ function importOnlyEntities(jdlObject, configuration) { return exportJSONEntities(jsonEntities, configuration); } -function importOneApplicationAndEntities(jdlObject, configuration) { +function importOneApplicationAndEntities(jdlObject: JDLObject, configuration) { const importState: ImportState = { exportedApplications: [], exportedApplicationsWithEntities: {}, diff --git a/jdl/jhipster/json-entity.ts b/jdl/jhipster/json-entity.ts index 3f451d2d85a7..888ae74cc0e4 100644 --- a/jdl/jhipster/json-entity.ts +++ b/jdl/jhipster/json-entity.ts @@ -44,14 +44,14 @@ class JSONEntity { * - fluentMethods, defaults to true, * - clientRootFolder */ - constructor(args) { + constructor(args?: Partial) { if (!args || !args.entityName) { throw new Error('At least an entity name must be passed.'); } - const merged = merge(getDefaults(args.entityName), args); + const merged: Partial = merge(getDefaults(args.entityName), args); this.name = merged.name; this.fields = merged.fields; - this.annotations = merged.annotations; + this.annotations = merged.annotations ?? {}; this.relationships = merged.relationships; this.documentation = merged.documentation; this.entityTableName = merged.entityTableName; @@ -119,7 +119,7 @@ class JSONEntity { export default JSONEntity; -function getDefaults(entityName) { +function getDefaults(entityName: string): Pick { return { name: upperFirst(entityName), fields: [], diff --git a/jdl/models/jdl-field.ts b/jdl/models/jdl-field.ts index 947451fdc0ab..441c136e322d 100644 --- a/jdl/models/jdl-field.ts +++ b/jdl/models/jdl-field.ts @@ -20,13 +20,14 @@ import { upperFirst } from 'lodash-es'; import { merge } from '../utils/object-utils.js'; import JDLValidation from './jdl-validation.js'; +import AbstractJDLOption from './abstract-jdl-option.js'; export default class JDLField { name: string; type: any; comment: string | undefined; validations: Record; - options: any; + options: Record; constructor(args: Partial) { const merged: Partial = merge(defaults(), args); @@ -37,7 +38,7 @@ export default class JDLField { this.type = merged.type; this.comment = merged.comment; this.validations = merged.validations ?? {}; - this.options = merged.options; + this.options = merged.options ?? {}; } addValidation(validation) { @@ -47,7 +48,7 @@ export default class JDLField { this.validations[validation.name] = validation; } - forEachValidation(functionToApply) { + forEachValidation(functionToApply: (validation: JDLValidation) => void) { if (!functionToApply) { throw new Error('A function must be passed to iterate over validations'); } @@ -58,7 +59,7 @@ export default class JDLField { return Object.keys(this.validations).length; } - forEachOption(functionToApply) { + forEachOption(functionToApply: (value: [string, AbstractJDLOption | boolean | number]) => void) { if (!functionToApply) { throw new Error('A function must be passed to iterate over options'); } diff --git a/jdl/models/jdl-object.ts b/jdl/models/jdl-object.ts index 836004afd031..b789f6f56f29 100644 --- a/jdl/models/jdl-object.ts +++ b/jdl/models/jdl-object.ts @@ -48,7 +48,7 @@ export default class JDLObject { this.options = new JDLOptions(); } - getOptions(): any[] { + getOptions(): AbstractJDLOption[] { return this.options.getOptions(); } @@ -68,18 +68,18 @@ export default class JDLObject { return Object.keys(this.applications).length; } - getApplication(applicationName: string): any { + getApplication(applicationName: string): JDLApplication | undefined { if (!applicationName) { return undefined; } return this.applications[applicationName]; } - getApplications(): any[] { + getApplications(): JDLApplication[] { return Object.values(this.applications); } - forEachApplication(passedFunction): void { + forEachApplication(passedFunction: (app: JDLApplication) => void | undefined | null): void { if (!passedFunction) { return; } @@ -295,3 +295,23 @@ function relationshipsToString(relationships: JDLRelationships): string { function optionsToString(options: JDLOptions) { return options.toString(); } + +export type JDLObjectWrapper = { + jdlObject?: JDLObject; + applicationName?: string; + applicationType?: 'monolith' | 'microservice' | 'gateway'; + databaseType?: + | 'sql' + | 'mysql' + | 'mariadb' + | 'postgresql' + | 'mssql' + | 'oracle' + | 'h2Disk' + | 'h2Memory' + | 'mongodb' + | 'cassandra' + | 'couchbase' + | 'neo4j' + | 'no'; +}; diff --git a/jdl/models/jdl-options.ts b/jdl/models/jdl-options.ts index 479c4d8af04d..313b9d3ba969 100644 --- a/jdl/models/jdl-options.ts +++ b/jdl/models/jdl-options.ts @@ -41,7 +41,7 @@ export default class JDLOptions { this.optionSize++; } - getOptions() { + getOptions(): AbstractJDLOption[] { const options: any[] = []; Object.values(this.options).forEach(item => { if (item.getType && item.getType() === 'UNARY') { @@ -53,7 +53,7 @@ export default class JDLOptions { return options; } - getOptionsForName(optionName: string) { + getOptionsForName(optionName: string): AbstractJDLOption[] { if (!optionName) { return []; } diff --git a/jdl/models/jdl-relationship.ts b/jdl/models/jdl-relationship.ts index ddc6c550441f..7e4dbcc766a8 100644 --- a/jdl/models/jdl-relationship.ts +++ b/jdl/models/jdl-relationship.ts @@ -26,31 +26,31 @@ const { REQUIRED } = Validations; export type JDLRelationshipOptions = Record<'global' | 'source' | 'destination', Record>; export type JDLRelationshipModel = { - side: RelationshipSide | undefined; + side?: RelationshipSide; from: string; to: string; type: JDLRelationshipType; options: JDLRelationshipOptions; - injectedFieldInFrom: null | string; - injectedFieldInTo: null | string; + injectedFieldInFrom?: string | null; + injectedFieldInTo?: string | null; isInjectedFieldInFromRequired: boolean; isInjectedFieldInToRequired: boolean; - commentInFrom: null | string; - commentInTo: null | string; + commentInFrom?: string | null; + commentInTo?: string | null; }; export default class JDLRelationship implements JDLRelationshipModel { - side: RelationshipSide | undefined; + side?: RelationshipSide; from: string; to: string; type: JDLRelationshipType; options: { global: Record; source: Record; destination: Record }; - injectedFieldInFrom: null | string; - injectedFieldInTo: null | string; + injectedFieldInFrom?: string | null; + injectedFieldInTo?: string | null; isInjectedFieldInFromRequired: boolean; isInjectedFieldInToRequired: boolean; - commentInFrom: null | string; - commentInTo: null | string; + commentInFrom?: string | null; + commentInTo?: string | null; constructor(args: Partial & Pick) { const merged = mergeDefaultsWithOverrides(args); diff --git a/jdl/models/jdl-validation.ts b/jdl/models/jdl-validation.ts index 783eb1026a4d..1334678ae288 100644 --- a/jdl/models/jdl-validation.ts +++ b/jdl/models/jdl-validation.ts @@ -26,7 +26,7 @@ const { export default class JDLValidation { name: string; - value?: string | number | RegExp; + value?: string | number | RegExp | boolean; constructor(args: Partial) { const merged = merge(defaults(), args); @@ -50,14 +50,14 @@ function defaults(): JDLValidation { }; } -function formatValidationValue(name: string, value: string | number | RegExp) { +function formatValidationValue(name: string, value: string | number | RegExp | boolean) { if (name === PATTERN) { return getPatternValidationValue(value); } return value; } -function getPatternValidationValue(value: string | number | RegExp) { +function getPatternValidationValue(value: string | number | RegExp | boolean) { if (value instanceof RegExp) { return value.toString(); }