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..54c977789109 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,14 @@ 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 JDLApplication from '../../models/jdl-application.js'; +import JSONEntity from '../../jhipster/json-entity.js'; +import { JdlObjectWrapper } from '../../models/jdl-object-wrapper.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 +38,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 +59,7 @@ export function convert(args: any = {}) { return entitiesForEachApplication; } -function init(args) { +function init(args: JdlObjectWrapper): void { if (jdlObject) { resetState(); } @@ -64,13 +68,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 +84,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 +120,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 +139,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 +160,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.spec.ts b/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.spec.ts index 21f1ae637f82..f350b93d9136 100644 --- a/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.spec.ts +++ b/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.spec.ts @@ -191,62 +191,62 @@ JSONEntity { const options = [ new JDLUnaryOption({ name: unaryOptions.EMBEDDED, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLUnaryOption({ name: unaryOptions.NO_FLUENT_METHOD, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLUnaryOption({ name: unaryOptions.FILTER, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLUnaryOption({ name: unaryOptions.READ_ONLY, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLUnaryOption({ name: unaryOptions.SKIP_CLIENT, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLUnaryOption({ name: unaryOptions.SKIP_SERVER, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.ANGULAR_SUFFIX, value: 'suffix', - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.CLIENT_ROOT_FOLDER, value: '../client_root_folder', - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.DTO, value: binaryOptions.Values.dto.MAPSTRUCT, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.MICROSERVICE, value: 'myMs', - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.PAGINATION, value: binaryOptions.Values.pagination.PAGINATION, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.SEARCH, value: binaryOptions.Values.search.COUCHBASE, - entityNames: ['A'], + entityNames: new Set(['A']), }), new JDLBinaryOption({ name: binaryOptions.Options.SERVICE, value: binaryOptions.Values.service.SERVICE_IMPL, - entityNames: ['A'], + entityNames: new Set(['A']), }), ]; jdlObject.addEntity(entityA); @@ -304,7 +304,7 @@ JSONEntity { new JDLBinaryOption({ name: binaryOptions.Options.DTO, value: binaryOptions.Values.dto.MAPSTRUCT, - entityNames: ['A'], + entityNames: new Set(['A']), }), ); const returnedMap: any = convert({ @@ -363,7 +363,7 @@ JSONEntity { jdlObject.addOption( new JDLUnaryOption({ name: unaryOptions.FILTER, - entityNames: ['A'], + entityNames: new Set(['A']), }), ); const returnedMap: any = convert({ @@ -418,11 +418,11 @@ JSONEntity { }); jdlObject.addEntity(entityA); jdlObject.addOption( - new JDLUnaryOption({ + new JDLBinaryOption({ name: binaryOptions.Options.SEARCH, - values: binaryOptions.Values.search.COUCHBASE, - entityNames: ['*'], - excludedNames: ['A'], + value: binaryOptions.Values.search.COUCHBASE, + entityNames: new Set(['*']), + excludedNames: new Set(['A']), }), ); const returnedMap: any = convert({ @@ -1041,6 +1041,8 @@ JSONEntity { global: { custom: 42, }, + source: {}, + destination: {}, }, }); jdlObject.addEntity(entityA); @@ -1087,6 +1089,8 @@ JSONEntity { global: { [BUILT_IN_ENTITY]: true, }, + source: {}, + destination: {}, }, }); jdlObject.addEntity(entityA); 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..7bff71fd62e1 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 @@ -22,9 +22,11 @@ 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 JSONEntity from '../../jhipster/json-entity.js'; +import { JdlObjectWrapper } from '../../models/jdl-object-wrapper.js'; -let entities; -let jdlObject: JDLObject | null; +let entities: Record | null | undefined; +let jdlObject: JDLObject | null | undefined; export default { convert, @@ -39,7 +41,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 +51,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 +62,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-wrapper.ts b/jdl/models/jdl-object-wrapper.ts new file mode 100644 index 000000000000..e79c1ccfe037 --- /dev/null +++ b/jdl/models/jdl-object-wrapper.ts @@ -0,0 +1,39 @@ +/** + * Copyright 2013-2024 the original author or authors from the JHipster project. + * + * This file is part of the JHipster project, see https://www.jhipster.tech/ + * for more information. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import JDLObject from './jdl-object.js'; + +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'; +} & Record; diff --git a/jdl/models/jdl-object.ts b/jdl/models/jdl-object.ts index 836004afd031..33a39e9c4958 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; } @@ -292,6 +292,6 @@ function relationshipsToString(relationships: JDLRelationships): string { return relationships.toString(); } -function optionsToString(options: JDLOptions) { +function optionsToString(options: JDLOptions): string { return options.toString(); } 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(); }