Skip to content

Commit

Permalink
internal: types adjusts
Browse files Browse the repository at this point in the history
  • Loading branch information
mshima committed Oct 21, 2024
1 parent 2081ef1 commit 9ac42dc
Show file tree
Hide file tree
Showing 17 changed files with 137 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ function _defineOnUpdateAndOnDelete(relationship: Relationship, generator: CoreG

export default function prepareRelationship(
entityWithConfig: Entity,
relationship: Relationship<Entity>,
relationship: Relationship<Omit<Entity, 'relationships'>>,
generator: CoreGenerator,
ignoreMissingRequiredRelationship = false,
) {
Expand Down
72 changes: 36 additions & 36 deletions generators/base-application/support/task-type-inference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,110 +28,110 @@ export function asWriteFilesBlock<Data = ApplicationType<Entity>>(section: Write
return section;
}

export function asInitializingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['InitializingTaskParam']) => void,
export function asInitializingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['InitializingTaskParam']) => void,
) {
return task;
}

export function asPromptingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PromptingTaskParam']) => void,
export function asPromptingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PromptingTaskParam']) => void,
) {
return task;
}

export function asConfiguringTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['ConfiguringTaskParam']) => void,
export function asConfiguringTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['ConfiguringTaskParam']) => void,
) {
return task;
}

export function asComposingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['ComposingTaskParam']) => void,
export function asComposingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['ComposingTaskParam']) => void,
) {
return task;
}

export function asLoadingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['LoadingTaskParam']) => void,
export function asLoadingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['LoadingTaskParam']) => void,
) {
return task;
}

export function asPreparingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingTaskParam']) => void,
export function asPreparingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PreparingTaskParam']) => void,
) {
return task;
}

export function asPostPreparingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PostPreparingTaskParam']) => void,
export function asPostPreparingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PostPreparingTaskParam']) => void,
) {
return task;
}

export function asPreparingEachEntityTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingEachEntityTaskParam']) => void,
export function asPreparingEachEntityTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PreparingEachEntityTaskParam']) => void,
) {
return task;
}

export function asPreparingEachEntityFieldTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingEachEntityFieldTaskParam']) => void,
export function asPreparingEachEntityFieldTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PreparingEachEntityFieldTaskParam']) => void,
) {
return task;
}

export function asPreparingEachEntityRelationshipTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PreparingEachEntityRelationshipTaskParam']) => void,
export function asPreparingEachEntityRelationshipTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PreparingEachEntityRelationshipTaskParam']) => void,
) {
return task;
}

export function asPostPreparingEachEntityTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PostPreparingEachEntityTaskParam']) => void,
export function asPostPreparingEachEntityTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PostPreparingEachEntityTaskParam']) => void,
) {
return task;
}

export function asDefaultTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['DefaultTaskParam']) => void,
export function asDefaultTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['DefaultTaskParam']) => void,
) {
return task;
}

export function asWritingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['WritingTaskParam']) => void,
export function asWritingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['WritingTaskParam']) => void,
) {
return task;
}

export function asWritingEntitiesTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['WritingEntitiesTaskParam']) => void,
export function asWritingEntitiesTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['WritingEntitiesTaskParam']) => void,
) {
return task;
}

export function asPostWritingTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PostWritingTaskParam']) => void,
export function asPostWritingTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PostWritingTaskParam']) => void,
) {
return task;
}

export function asPostWritingEntitiesTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['PostWritingEntitiesTaskParam']) => void,
export function asPostWritingEntitiesTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['PostWritingEntitiesTaskParam']) => void,
) {
return task;
}

export function asInstallTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['InstallTaskParam']) => void,
export function asInstallTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['InstallTaskParam']) => void,
) {
return task;
}

export function asEndTask<E = Entity, A = ApplicationType<E>>(
task: (this: CoreGenerator, params: TaskTypes<E, A>['EndTaskParam']) => void,
export function asEndTask<E = Entity, A = ApplicationType<E>, const G extends CoreGenerator = CoreGenerator>(
task: (this: G, params: TaskTypes<E, A>['EndTaskParam']) => void,
) {
return task;
}
19 changes: 17 additions & 2 deletions generators/base-workspaces/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -41,10 +44,22 @@ const {
END,
} = PRIORITY_NAMES;

type WorkspacesTypes<E extends Entity = Entity, A extends ApplicationType<E> = ApplicationType<E>> = 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<WorkspacesTypes> {
static PROMPTING_WORKSPACES = BaseGenerator.asPriority(PROMPTING_WORKSPACES);

static CONFIGURING_WORKSPACES = BaseGenerator.asPriority(CONFIGURING_WORKSPACES);
Expand Down
3 changes: 3 additions & 0 deletions generators/base/api.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ export type JHipsterGeneratorOptions = BaseOptions &
jhipsterContext?: any;
composeWithLocalBlueprint?: boolean;

/** boostrap options */
applyDefaults?: <const data = any>(data: data) => data;

/* generate-blueprint options */
localBlueprint?: boolean;

Expand Down
15 changes: 11 additions & 4 deletions generators/bootstrap-application-base/generator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// @ts-nocheck
/**
* Copyright 2013-2024 the original author or authors from the JHipster project.
*
Expand Down Expand Up @@ -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! }),
);
}
},
});
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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;
Expand Down
12 changes: 7 additions & 5 deletions generators/bootstrap-workspaces/command.ts
Original file line number Diff line number Diff line change
@@ -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;
3 changes: 0 additions & 3 deletions generators/bootstrap-workspaces/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,13 @@
*/
import BaseWorkspacesGenerator from '../base-workspaces/index.js';

import command from './command.js';

export default class DockerComposeGenerator extends BaseWorkspacesGenerator {
sharedWorkspaces!: any;
customWorkspacesConfig?: boolean;

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();
Expand Down
1 change: 1 addition & 0 deletions generators/bootstrap-workspaces/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
16 changes: 8 additions & 8 deletions generators/client/generator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// @ts-nocheck
/**
* Copyright 2013-2024 the original author or authors from the JHipster project.
*
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -77,6 +76,7 @@ export default class JHipsterClientGenerator extends BaseApplicationGenerator {
}
},
upgradeAngular() {
// @ts-ignore deprecated value
if (this.jhipsterConfig.clientFramework === 'angularX') {
this.jhipsterConfig.clientFramework = ANGULAR;
}
Expand Down Expand Up @@ -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);
Expand All @@ -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 }) {
Expand Down Expand Up @@ -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');
Expand All @@ -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`);
}
Expand Down
6 changes: 3 additions & 3 deletions generators/languages/entity-files.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// @ts-nocheck
/**
* Copyright 2013-2024 the original author or authors from the JHipster project.
*
Expand All @@ -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.
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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) {
Expand Down
Loading

0 comments on commit 9ac42dc

Please sign in to comment.