diff --git a/generators/base-application/support/prepare-relationship.ts b/generators/base-application/support/prepare-relationship.ts index d7d4ade6304a..6f1df4534f25 100644 --- a/generators/base-application/support/prepare-relationship.ts +++ b/generators/base-application/support/prepare-relationship.ts @@ -44,7 +44,7 @@ function _defineOnUpdateAndOnDelete(relationship: Relationship, generator: CoreG export default function prepareRelationship( entityWithConfig: Entity, - relationship: Relationship, + relationship: Relationship>, generator: CoreGenerator, ignoreMissingRequiredRelationship = false, ) { diff --git a/generators/base-application/support/task-type-inference.ts b/generators/base-application/support/task-type-inference.ts index be5cbdac503b..83bcbfd2f9d9 100644 --- a/generators/base-application/support/task-type-inference.ts +++ b/generators/base-application/support/task-type-inference.ts @@ -28,110 +28,110 @@ export function asWriteFilesBlock>(section: Write return section; } -export function asInitializingTask>( - task: (this: CoreGenerator, params: TaskTypes['InitializingTaskParam']) => void, +export function asInitializingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['InitializingTaskParam']) => void, ) { return task; } -export function asPromptingTask>( - task: (this: CoreGenerator, params: TaskTypes['PromptingTaskParam']) => void, +export function asPromptingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PromptingTaskParam']) => void, ) { return task; } -export function asConfiguringTask>( - task: (this: CoreGenerator, params: TaskTypes['ConfiguringTaskParam']) => void, +export function asConfiguringTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['ConfiguringTaskParam']) => void, ) { return task; } -export function asComposingTask>( - task: (this: CoreGenerator, params: TaskTypes['ComposingTaskParam']) => void, +export function asComposingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['ComposingTaskParam']) => void, ) { return task; } -export function asLoadingTask>( - task: (this: CoreGenerator, params: TaskTypes['LoadingTaskParam']) => void, +export function asLoadingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['LoadingTaskParam']) => void, ) { return task; } -export function asPreparingTask>( - task: (this: CoreGenerator, params: TaskTypes['PreparingTaskParam']) => void, +export function asPreparingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PreparingTaskParam']) => void, ) { return task; } -export function asPostPreparingTask>( - task: (this: CoreGenerator, params: TaskTypes['PostPreparingTaskParam']) => void, +export function asPostPreparingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PostPreparingTaskParam']) => void, ) { return task; } -export function asPreparingEachEntityTask>( - task: (this: CoreGenerator, params: TaskTypes['PreparingEachEntityTaskParam']) => void, +export function asPreparingEachEntityTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PreparingEachEntityTaskParam']) => void, ) { return task; } -export function asPreparingEachEntityFieldTask>( - task: (this: CoreGenerator, params: TaskTypes['PreparingEachEntityFieldTaskParam']) => void, +export function asPreparingEachEntityFieldTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PreparingEachEntityFieldTaskParam']) => void, ) { return task; } -export function asPreparingEachEntityRelationshipTask>( - task: (this: CoreGenerator, params: TaskTypes['PreparingEachEntityRelationshipTaskParam']) => void, +export function asPreparingEachEntityRelationshipTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PreparingEachEntityRelationshipTaskParam']) => void, ) { return task; } -export function asPostPreparingEachEntityTask>( - task: (this: CoreGenerator, params: TaskTypes['PostPreparingEachEntityTaskParam']) => void, +export function asPostPreparingEachEntityTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PostPreparingEachEntityTaskParam']) => void, ) { return task; } -export function asDefaultTask>( - task: (this: CoreGenerator, params: TaskTypes['DefaultTaskParam']) => void, +export function asDefaultTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['DefaultTaskParam']) => void, ) { return task; } -export function asWritingTask>( - task: (this: CoreGenerator, params: TaskTypes['WritingTaskParam']) => void, +export function asWritingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['WritingTaskParam']) => void, ) { return task; } -export function asWritingEntitiesTask>( - task: (this: CoreGenerator, params: TaskTypes['WritingEntitiesTaskParam']) => void, +export function asWritingEntitiesTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['WritingEntitiesTaskParam']) => void, ) { return task; } -export function asPostWritingTask>( - task: (this: CoreGenerator, params: TaskTypes['PostWritingTaskParam']) => void, +export function asPostWritingTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PostWritingTaskParam']) => void, ) { return task; } -export function asPostWritingEntitiesTask>( - task: (this: CoreGenerator, params: TaskTypes['PostWritingEntitiesTaskParam']) => void, +export function asPostWritingEntitiesTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['PostWritingEntitiesTaskParam']) => void, ) { return task; } -export function asInstallTask>( - task: (this: CoreGenerator, params: TaskTypes['InstallTaskParam']) => void, +export function asInstallTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['InstallTaskParam']) => void, ) { return task; } -export function asEndTask>( - task: (this: CoreGenerator, params: TaskTypes['EndTaskParam']) => void, +export function asEndTask, const G extends CoreGenerator = CoreGenerator>( + task: (this: G, params: TaskTypes['EndTaskParam']) => void, ) { return task; } diff --git a/generators/base-workspaces/generator.ts b/generators/base-workspaces/generator.ts index 119bf0a5255b..40b4839cc5cf 100644 --- a/generators/base-workspaces/generator.ts +++ b/generators/base-workspaces/generator.ts @@ -25,8 +25,11 @@ import BaseGenerator from '../base/index.js'; import { YO_RC_FILE } from '../generator-constants.js'; import { GENERATOR_BOOTSTRAP_APPLICATION } from '../generator-list.js'; import { normalizePathEnd } from '../base/support/path.js'; -import command from './command.js'; +import type { TaskTypes } from '../../lib/types/base/tasks.js'; +import type { Entity } from '../../lib/types/application/entity.js'; +import type { ApplicationType } from '../../lib/types/application/application.js'; import { CUSTOM_PRIORITIES, PRIORITY_NAMES } from './priorities.js'; +import command from './command.js'; const { PROMPTING_WORKSPACES, @@ -41,10 +44,22 @@ const { END, } = PRIORITY_NAMES; +type WorkspacesTypes = ApplicationType> = TaskTypes & { + LoadingTaskParam: TaskTypes['LoadingTaskParam'] & { applications: A[] }; + PreparingTaskParam: TaskTypes['PreparingTaskParam'] & { applications: A[] }; + PostPreparingTaskParam: TaskTypes['PostPreparingTaskParam'] & { applications: A[] }; + DefaultTaskParam: TaskTypes['DefaultTaskParam'] & { applications: A[] }; + WritingTaskParam: TaskTypes['WritingTaskParam'] & { applications: A[] }; + PostWritingTaskParam: TaskTypes['PostWritingTaskParam'] & { applications: A[] }; + InstallTaskParam: TaskTypes['InstallTaskParam'] & { applications: A[] }; + PostInstallTaskParam: TaskTypes['PostInstallTaskParam'] & { applications: A[] }; + EndTaskParam: TaskTypes['EndTaskParam'] & { applications: A[] }; +}; + /** * This is the base class for a generator that generates entities. */ -export default abstract class BaseWorkspacesGenerator extends BaseGenerator { +export default abstract class BaseWorkspacesGenerator extends BaseGenerator { static PROMPTING_WORKSPACES = BaseGenerator.asPriority(PROMPTING_WORKSPACES); static CONFIGURING_WORKSPACES = BaseGenerator.asPriority(CONFIGURING_WORKSPACES); diff --git a/generators/base/api.d.ts b/generators/base/api.d.ts index 1643fc73b37f..9572d228a1da 100644 --- a/generators/base/api.d.ts +++ b/generators/base/api.d.ts @@ -43,6 +43,9 @@ export type JHipsterGeneratorOptions = BaseOptions & jhipsterContext?: any; composeWithLocalBlueprint?: boolean; + /** boostrap options */ + applyDefaults?: (data: data) => data; + /* generate-blueprint options */ localBlueprint?: boolean; diff --git a/generators/bootstrap-application-base/generator.ts b/generators/bootstrap-application-base/generator.ts index a39fe51839d2..b68f007b1450 100644 --- a/generators/bootstrap-application-base/generator.ts +++ b/generators/bootstrap-application-base/generator.ts @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright 2013-2024 the original author or authors from the JHipster project. * @@ -86,8 +85,11 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator { const jdlStorePath = this.destinationPath(this.jhipsterConfig.jdlStore); const { jdlDefinition } = this.options; - this.features.commitTransformFactory = () => exportJDLTransform({ destinationPath, jdlStorePath, jdlDefinition }); - await this.pipeline({ refresh: true, pendingFiles: false }, importJDLTransform({ destinationPath, jdlStorePath, jdlDefinition })); + this.features.commitTransformFactory = () => exportJDLTransform({ destinationPath, jdlStorePath, jdlDefinition: jdlDefinition! }); + await this.pipeline( + { refresh: true, pendingFiles: false }, + importJDLTransform({ destinationPath, jdlStorePath, jdlDefinition: jdlDefinition! }), + ); } }, }); @@ -257,7 +259,9 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator { if (!relationship.relationshipSide) { // Try to create relationshipSide based on best bet. + // @ts-ignore deprecated property if (relationship.ownerSide !== undefined) { + // @ts-ignore deprecated property relationship.relationshipSide = relationship.ownerSide ? 'left' : 'right'; } else { // Missing ownerSide (one-to-many/many-to-one relationships) depends on the otherSide existence. @@ -352,8 +356,11 @@ export default class BootstrapApplicationBase extends BaseApplicationGenerator { for (const entity of entities) { for (const field of entity.fields) { if (isFieldBinaryType(field)) { - field.fieldTypeBlobContent ??= getBlobContentType(field.fieldType); + if (isFieldBlobType(field)) { + field.fieldTypeBlobContent ??= getBlobContentType(field.fieldType); + } if (application.databaseTypeCassandra || entity.databaseType === 'cassandra') { + // @ts-expect-error set another type field.fieldType = 'ByteBuffer'; } else if (isFieldBlobType(field)) { field.fieldType = 'byte[]' as any; diff --git a/generators/bootstrap-workspaces/command.ts b/generators/bootstrap-workspaces/command.ts index 5319418a4d85..71166bc5242b 100644 --- a/generators/bootstrap-workspaces/command.ts +++ b/generators/bootstrap-workspaces/command.ts @@ -1,14 +1,16 @@ import type { JHipsterCommandDefinition } from '../../lib/command/index.js'; -const command: JHipsterCommandDefinition = { - options: { +const command = { + configs: { customWorkspacesConfig: { - type: Boolean, + cli: { + type: Boolean, + hide: true, + }, description: 'Use custom configuration', scope: 'generator', - hide: true, }, }, -}; +} as const satisfies JHipsterCommandDefinition; export default command; diff --git a/generators/bootstrap-workspaces/generator.ts b/generators/bootstrap-workspaces/generator.ts index 6c0d5463d202..6b1a4cce47a6 100644 --- a/generators/bootstrap-workspaces/generator.ts +++ b/generators/bootstrap-workspaces/generator.ts @@ -18,8 +18,6 @@ */ import BaseWorkspacesGenerator from '../base-workspaces/index.js'; -import command from './command.js'; - export default class DockerComposeGenerator extends BaseWorkspacesGenerator { sharedWorkspaces!: any; customWorkspacesConfig?: boolean; @@ -27,7 +25,6 @@ export default class DockerComposeGenerator extends BaseWorkspacesGenerator { async beforeQueue() { this.sharedWorkspaces = this.getSharedApplication().sharedWorkspaces; this.sharedWorkspaces.existingWorkspaces = this.sharedWorkspaces.existingWorkspaces ?? Boolean(this.jhipsterConfig.appsFolders); - this.parseJHipsterOptions(command.options); if (!this.fromBlueprint) { await this.composeWithBlueprints(); diff --git a/generators/bootstrap-workspaces/index.ts b/generators/bootstrap-workspaces/index.ts index 58ac334eafae..2d8013d19f51 100644 --- a/generators/bootstrap-workspaces/index.ts +++ b/generators/bootstrap-workspaces/index.ts @@ -16,4 +16,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +export { default as command } from './command.js'; export { default } from './generator.js'; diff --git a/generators/client/generator.ts b/generators/client/generator.ts index 690ef2b802e1..87dec9e9c4b9 100644 --- a/generators/client/generator.ts +++ b/generators/client/generator.ts @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright 2013-2024 the original author or authors from the JHipster project. * @@ -30,7 +29,7 @@ import { addEnumerationFiles } from './entity-files.js'; import { writeFiles as writeCommonFiles } from './files-common.js'; import { askForClientTheme, askForClientThemeVariant } from './prompts.js'; -const { ANGULAR, VUE, REACT, NO: CLIENT_FRAMEWORK_NO } = clientFrameworkTypes; +const { ANGULAR, NO: CLIENT_FRAMEWORK_NO } = clientFrameworkTypes; const { CYPRESS } = testFrameworkTypes; export default class JHipsterClientGenerator extends BaseApplicationGenerator { @@ -77,6 +76,7 @@ export default class JHipsterClientGenerator extends BaseApplicationGenerator { } }, upgradeAngular() { + // @ts-ignore deprecated value if (this.jhipsterConfig.clientFramework === 'angularX') { this.jhipsterConfig.clientFramework = ANGULAR; } @@ -108,8 +108,8 @@ export default class JHipsterClientGenerator extends BaseApplicationGenerator { return this.asComposingTaskGroup({ async composing() { const { clientFramework, testFrameworks } = this.jhipsterConfigWithDefaults; - if ([ANGULAR, VUE, REACT].includes(clientFramework)) { - await this.composeWithJHipster(clientFramework); + if (['angular', 'react', 'vue'].includes(clientFramework!)) { + await this.composeWithJHipster(clientFramework!); } if (Array.isArray(testFrameworks) && testFrameworks.includes(CYPRESS)) { await this.composeWithJHipster(GENERATOR_CYPRESS); @@ -126,7 +126,7 @@ export default class JHipsterClientGenerator extends BaseApplicationGenerator { return this.asLoadingTaskGroup({ loadSharedConfig({ application }) { // TODO v8 rename to nodePackageManager; - application.clientPackageManager = 'npm'; + (application as any).clientPackageManager = 'npm'; }, loadPackageJson({ application }) { @@ -227,7 +227,7 @@ export default class JHipsterClientGenerator extends BaseApplicationGenerator { if (!application.clientFrameworkBuiltIn) { return; } - const packageJsonStorage = this.createStorage(this.destinationPath(application.clientRootDir, 'package.json')); + const packageJsonStorage = this.createStorage(this.destinationPath(application.clientRootDir!, 'package.json')); const scriptsStorage = packageJsonStorage.createStorage('scripts'); const devDependencies = packageJsonStorage.createStorage('devDependencies'); @@ -248,11 +248,11 @@ export default class JHipsterClientGenerator extends BaseApplicationGenerator { } if (application.clientFrameworkAngular) { const conditional = application.applicationTypeMicroservice ? "targetOptions.target === 'serve' ? {} : " : ''; - source.addWebpackConfig({ + source.addWebpackConfig!({ config: `${conditional}require('./webpack.microfrontend')(config, options, targetOptions)`, }); } else if (application.clientFrameworkVue || application.clientFrameworkReact) { - source.addWebpackConfig({ config: "require('./webpack.microfrontend')({ serve: options.env.WEBPACK_SERVE })" }); + source.addWebpackConfig!({ config: "require('./webpack.microfrontend')({ serve: options.env.WEBPACK_SERVE })" }); } else { throw new Error(`Client framework ${application.clientFramework} doesn't support microfrontends`); } diff --git a/generators/languages/entity-files.ts b/generators/languages/entity-files.ts index 48e37ebd6dfa..c284793f37fa 100644 --- a/generators/languages/entity-files.ts +++ b/generators/languages/entity-files.ts @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright 2013-2024 the original author or authors from the JHipster project. * @@ -19,6 +18,7 @@ */ import { asWritingEntitiesTask, getEnumInfo } from '../base-application/support/index.js'; import { CLIENT_MAIN_SRC_DIR } from '../generator-constants.js'; +import type LanguagesGenerator from './generator.js'; /** * The default is to use a file path string. It implies use of the template method. @@ -63,7 +63,7 @@ export const enumClientI18nFiles = { export function writeEntityFiles() { return { - writeEnumFiles: asWritingEntitiesTask(async function ({ entities, application }) { + writeEnumFiles: asWritingEntitiesTask(async function (this: LanguagesGenerator, { entities, application }) { if (application.skipClient) return; const languagesToApply = application.enableTranslation ? this.languagesToApply : [...new Set([application.nativeLanguage, 'en'])]; entities = entities.filter(entity => !entity.skipClient && !entity.builtInUser); @@ -93,7 +93,7 @@ export function writeEntityFiles() { ); }), - writeClientFiles: asWritingEntitiesTask(async function ({ application, entities }) { + writeClientFiles: asWritingEntitiesTask(async function (this: LanguagesGenerator, { application, entities }) { if (application.skipClient) return; const entitiesToWriteTranslationFor = entities.filter(entity => !entity.skipClient && !entity.builtInUser); if (application.userManagement?.skipClient) { diff --git a/generators/languages/generator.ts b/generators/languages/generator.ts index d7a77a920222..3f39291f2f94 100644 --- a/generators/languages/generator.ts +++ b/generators/languages/generator.ts @@ -45,6 +45,7 @@ const { NO: NO_CLIENT_FRAMEWORK, ANGULAR } = clientFrameworkTypes; */ export default class LanguagesGenerator extends BaseApplicationGenerator { askForMoreLanguages!: boolean; + askForNativeLanguage!: boolean; translationData; supportedLanguages; languages; @@ -53,7 +54,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator { * Can be incremental or every language. */ languagesToApply; - composedBlueprints!: string[] = []; + composedBlueprints: string[] = []; languageCommand; writeJavaLanguageFiles; regenerateLanguages; @@ -275,7 +276,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator { return; await Promise.all( this.languagesToApply.map(async lang => { - const language = findLanguageForTag(lang); + const language = findLanguageForTag(lang)!; if (language.javaLocaleMessageSourceSuffix) { await this.writeFiles({ sections: { @@ -378,8 +379,8 @@ export default class LanguagesGenerator extends BaseApplicationGenerator { migrateLanguages(languagesToMigrate) { const { languages, nativeLanguage } = this.jhipsterConfig; - if (languagesToMigrate[nativeLanguage]) { - this.jhipsterConfig.nativeLanguage = languagesToMigrate[nativeLanguage]; + if (languagesToMigrate[nativeLanguage!]) { + this.jhipsterConfig.nativeLanguage = languagesToMigrate[nativeLanguage!]; } if (languages?.some(lang => languagesToMigrate[lang])) { this.jhipsterConfig.languages = languages.map(lang => languagesToMigrate[lang] ?? lang); diff --git a/generators/server/generator.ts b/generators/server/generator.ts index ed630a3ca91e..d438850aad0d 100644 --- a/generators/server/generator.ts +++ b/generators/server/generator.ts @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright 2013-2024 the original author or authors from the JHipster project. * @@ -148,20 +147,24 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator { this.log.info(`Using ${application.defaultPackaging} as default packaging`); } }, - setupServerconsts({ application }) { + setupServerconsts({ application, applicationDefaults }) { // Make constants available in templates - application.MAIN_DIR = MAIN_DIR; - application.TEST_DIR = TEST_DIR; - application.LOGIN_REGEX = LOGIN_REGEX; - application.CLIENT_WEBPACK_DIR = CLIENT_WEBPACK_DIR; - application.SERVER_MAIN_SRC_DIR = SERVER_MAIN_SRC_DIR; - application.SERVER_MAIN_RES_DIR = SERVER_MAIN_RES_DIR; - application.SERVER_TEST_SRC_DIR = SERVER_TEST_SRC_DIR; - application.SERVER_TEST_RES_DIR = SERVER_TEST_RES_DIR; - - application.JAVA_VERSION = this.useVersionPlaceholders ? 'JAVA_VERSION' : JAVA_VERSION; - application.JAVA_COMPATIBLE_VERSIONS = JAVA_COMPATIBLE_VERSIONS; - application.javaCompatibleVersions = JAVA_COMPATIBLE_VERSIONS; + applicationDefaults({ + MAIN_DIR, + TEST_DIR, + LOGIN_REGEX, + CLIENT_WEBPACK_DIR, + SERVER_MAIN_SRC_DIR, + SERVER_MAIN_RES_DIR, + SERVER_TEST_SRC_DIR, + SERVER_TEST_RES_DIR, + JAVA_VERSION: this.useVersionPlaceholders ? 'JAVA_VERSION' : JAVA_VERSION, + JAVA_COMPATIBLE_VERSIONS, + javaCompatibleVersions: JAVA_COMPATIBLE_VERSIONS, + ANGULAR, + VUE, + REACT, + }); if (this.projectVersion) { application.projectVersion = this.projectVersion; @@ -179,11 +182,6 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator { application.jhipsterDependenciesVersion = JHIPSTER_DEPENDENCIES_VERSION; } - application.ANGULAR = ANGULAR; - application.VUE = VUE; - application.REACT = REACT; - - this.packagejs = packageJson; application.jhipsterPackageJson = packageJson; }, }); @@ -362,9 +360,11 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator { )}, using ${relationship.otherEntityName} as fallback`, ); } + // @ts-ignore deprecated property if (relationship.useJPADerivedIdentifier) { this.log.verboseInfo('Option useJPADerivedIdentifier is deprecated, use id instead'); - relationship.id = true; + relationship.options ??= {}; + relationship.options.id = true; } }); entityConfig.relationships = relationships; @@ -414,7 +414,8 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator { get postPreparingEachEntity() { return this.asPostPreparingEachEntityTaskGroup({ checkForTableName({ application, entity }) { - const databaseType = entity.prodDatabaseType ?? application.prodDatabaseType ?? entity.databaseType ?? application.databaseType; + const databaseType = + (entity as any).prodDatabaseType ?? application.prodDatabaseType ?? entity.databaseType ?? application.databaseType; const validation = this._validateTableName(entity.entityTableName, databaseType, entity); if (validation !== true) { throw new Error(validation); @@ -435,7 +436,7 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator { if (entitiesWithCompositeIds.length > 0) { throw new Error( `Composite id is not supported. Defined in ${entitiesWithCompositeIds.map( - entity => `${entity.name} (${entity.primaryKey.fields.map(field => field.fieldName)})`, + entity => `${entity.name} (${entity.primaryKey!.fields.map(field => field.fieldName)})`, )}`, ); } @@ -451,8 +452,8 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator { return this.asPostWritingTaskGroup({ packageJsonScripts({ application }) { const packageJsonConfigStorage = this.packageJson.createStorage('config').createProxy(); - packageJsonConfigStorage.backend_port = application.gatewayServerPort || application.serverPort; - packageJsonConfigStorage.packaging = application.defaultPackaging; + (packageJsonConfigStorage as any).backend_port = application.gatewayServerPort || application.serverPort; + (packageJsonConfigStorage as any).packaging = application.defaultPackaging; }, packageJsonBackendScripts({ application }) { const scriptsStorage = this.packageJson.createStorage('scripts'); diff --git a/generators/workspaces/generator.ts b/generators/workspaces/generator.ts index a7f796abc523..ef6f440a4e0d 100644 --- a/generators/workspaces/generator.ts +++ b/generators/workspaces/generator.ts @@ -1,4 +1,3 @@ -// @ts-nocheck /** * Copyright 2013-2024 the original author or authors from the JHipster project. * @@ -26,12 +25,13 @@ import BaseWorkspacesGenerator from '../base-workspaces/index.js'; import { packageJson } from '../../lib/index.js'; export default class WorkspacesGenerator extends BaseWorkspacesGenerator { - workspaces; - generateApplications; - generateWith; - entrypointGenerator; + workspaces!: boolean; + generateApplications!: () => Promise; + generateWith!: string; + entrypointGenerator!: string; + dockerCompose!: boolean; - generateWorkspaces; + generateWorkspaces!: boolean; workspacesConfig!: Record; async beforeQueue() { @@ -40,7 +40,7 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { } if (!this.delegateToBlueprint) { - await this.dependsOnJHipster(GENERATOR_BOOTSTRAP_WORKSPACES, { generatorOptions: { customWorkspacesConfig: true } }); + await this.dependsOnJHipster(GENERATOR_BOOTSTRAP_WORKSPACES, { generatorOptions: { customWorkspacesConfig: true } as any }); } } @@ -71,7 +71,7 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { if (existsSync(this.destinationPath('docker-compose'))) { this.workspacesConfig.dockerCompose = true; } - this.workspacesConfig.appsFolders = [...new Set([...(this.workspacesConfig.packages ?? []), ...this.appsFolders])]; + this.workspacesConfig.appsFolders = [...new Set([...(this.workspacesConfig.packages ?? []), ...this.appsFolders!])]; delete this.workspacesConfig.packages; }, }); @@ -98,7 +98,7 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { if (typeof this.generateApplications === 'function') { await this.generateApplications.call(this); } else { - for (const appName of this.appsFolders) { + for (const appName of this.appsFolders!) { await this.composeWithJHipster(this.entrypointGenerator ?? this.generateWith, { generatorOptions: { destinationRoot: this.destinationPath(appName) }, }); @@ -138,7 +138,7 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { if (!this.generateWorkspaces) return; this.dockerCompose = this.workspacesConfig.dockerCompose; - this.env.options.nodePackageManager = this.workspacesConfig.clientPackageManager; + (this.env as any).options.nodePackageManager = this.workspacesConfig.clientPackageManager; }, }); } @@ -149,10 +149,10 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { get writing() { return this.asWritingTaskGroup({ - async writing({ application }) { + async writing() { await this.writeFiles({ blocks: [{ templates: ['.prettierignore.jhi.workspaces'] }], - context: application, + context: {}, }); }, }); @@ -183,7 +183,7 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { ...this.createConcurrentlyScript('watch', 'backend:build-cache', 'java:docker', 'java:docker:arm64'), ...this.createWorkspacesScript('ci:backend:test', 'ci:frontend:test', 'webapp:test'), }, - }); + } as any); if (applications.some(app => app.clientFrameworkAngular)) { const { @@ -231,11 +231,11 @@ export default class WorkspacesGenerator extends BaseWorkspacesGenerator { createConcurrentlyScript(...scripts) { const scriptsList = scripts .map(script => { - const packageScripts = this.appsFolders.map(packageName => [ + const packageScripts = this.appsFolders!.map(packageName => [ `${script}:${packageName}`, `npm run ${script} --workspace ${packageName} --if-present`, ]); - packageScripts.push([script, `concurrently ${this.appsFolders.map(packageName => `npm:${script}:${packageName}`).join(' ')}`]); + packageScripts.push([script, `concurrently ${this.appsFolders!.map(packageName => `npm:${script}:${packageName}`).join(' ')}`]); return packageScripts; }) .flat(); diff --git a/lib/application/field-types.ts b/lib/application/field-types.ts index e45c03b0c67b..8df39dcf8f27 100644 --- a/lib/application/field-types.ts +++ b/lib/application/field-types.ts @@ -1,5 +1,6 @@ import type { SetFieldType, SetRequired } from 'type-fest'; import type { Field } from '../types/application/field.js'; +import type { Field as BaseField } from '../types/base/field.js'; const blobFieldTypes = { BLOB: 'Blob', @@ -61,7 +62,7 @@ export const isFieldEnumType = (field: Field): field is SetRequired => !field.fieldValues; -export const convertFieldBlobType = (field: Field): Field => { +export const convertFieldBlobType = (field: F): F => { // Convert fieldTypes to correct fieldTypes if (field.fieldTypeBlobContent === 'image') { field.fieldType = 'ImageBlob'; diff --git a/lib/types/application/entity.d.ts b/lib/types/application/entity.d.ts index de2e500fbd56..fb468af44492 100644 --- a/lib/types/application/entity.d.ts +++ b/lib/types/application/entity.d.ts @@ -55,6 +55,7 @@ export interface Entity extends BaseRelationshi id?: boolean; ownerSide?: boolean; relationshipEagerLoad?: boolean; + relationshipRequired?: boolean; propertyJavaBeanName?: string; propertyDtoJavaType?: string; diff --git a/lib/types/base/entity.d.ts b/lib/types/base/entity.d.ts index 918aea72c4f3..c4c816a0d149 100644 --- a/lib/types/base/entity.d.ts +++ b/lib/types/base/entity.d.ts @@ -20,4 +20,5 @@ export type Entity