Skip to content

Commit

Permalink
Reimplement types (#27193)
Browse files Browse the repository at this point in the history
  • Loading branch information
mshima authored Sep 6, 2024
1 parent a8cb96d commit d6b5690
Show file tree
Hide file tree
Showing 65 changed files with 791 additions and 704 deletions.
7 changes: 3 additions & 4 deletions generators/angular/cleanup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@
* limitations under the License.
*/

import type CoreGenerator from '../base-core/index.js';
import { asWritingTask } from '../base-application/support/task-type-inference.js';
import { CLIENT_WEBPACK_DIR } from '../generator-constants.js';
import type { GeneratorDefinition } from '../base-application/generator.js';

/**
* Removes files that where generated in previous JHipster versions and therefore
* need to be removed.
*/

export default function cleanupOldFilesTask(this: CoreGenerator, { application }: GeneratorDefinition['writingTaskParam']) {
export default asWritingTask(function cleanupOldFilesTask(this, { application }) {
if (this.isJhipsterVersionLessThan('3.2.0')) {
// removeFile and removeFolder methods should be called here for files and folders to cleanup
this.removeFile(`${application.clientSrcDir}app/components/form/uib-pager.config.js`);
Expand Down Expand Up @@ -292,4 +291,4 @@ export default function cleanupOldFilesTask(this: CoreGenerator, { application }
this.removeFile(`${application.clientSrcDir}app/entities/user/user.service.ts`);
this.removeFile(`${application.clientSrcDir}app/entities/user/user.service.spec.ts`);
}
}
});
26 changes: 9 additions & 17 deletions generators/angular/entity-files-angular.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { GeneratorDefinition } from '../base-application/generator.js';
import { clientApplicationTemplatesBlock } from '../client/support/files.js';
import type CoreGenerator from '../base-core/index.js';
import type { WriteFileSection } from '../base/api.js';
import { asWritingEntitiesTask } from '../base-application/support/index.js';
import { asPostWritingEntitiesTask, asWritingEntitiesTask } from '../base-application/support/index.js';

const entityModelFiles = clientApplicationTemplatesBlock({
templates: ['entities/_entityFolder_/_entityFile_.model.ts', 'entities/_entityFolder_/_entityFile_.test-samples.ts'],
Expand Down Expand Up @@ -95,10 +93,7 @@ export const userManagementFiles: WriteFileSection = {
],
};

export const writeEntitiesFiles = asWritingEntitiesTask(async function (
this: CoreGenerator,
{ control, application, entities }: GeneratorDefinition['writingEntitiesTaskParam'],
) {
export const writeEntitiesFiles = asWritingEntitiesTask(async function ({ control, application, entities }) {
for (const entity of (control.filterEntitiesAndPropertiesForClient ?? (entities => entities))(entities)) {
if (entity.builtInUser) {
await this.writeFiles({
Expand All @@ -111,7 +106,7 @@ export const writeEntitiesFiles = asWritingEntitiesTask(async function (
},
});

if (application.generateUserManagement && application.userManagement.skipClient) {
if (application.generateUserManagement && application.userManagement!.skipClient) {
await this.writeFiles({
sections: userManagementFiles,
context: {
Expand All @@ -132,18 +127,15 @@ export const writeEntitiesFiles = asWritingEntitiesTask(async function (
}
});

export async function postWriteEntitiesFiles(this: CoreGenerator, taskParam: GeneratorDefinition['postWritingEntitiesTaskParam']) {
const { control, source, application } = taskParam;
export const postWriteEntitiesFiles = asPostWritingEntitiesTask(async function (this, taskParam) {
const { control, source } = taskParam;
const entities = (control.filterEntitiesForClient ?? (entities => entities))(taskParam.entities).filter(
entity => !entity.builtInUser && !entity.embedded && !entity.entityClientModelOnly,
);
source.addEntitiesToClient({ application, entities });
}
source.addEntitiesToClient({ ...taskParam, entities });
});

export function cleanupEntitiesFiles(
this: CoreGenerator,
{ control, application, entities }: GeneratorDefinition['writingEntitiesTaskParam'],
) {
export const cleanupEntitiesFiles = asWritingEntitiesTask(function ({ control, application, entities }) {
for (const entity of (control.filterEntitiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtIn)) {
const { entityFolderName, entityFileName, name: entityName } = entity;
if (this.isJhipsterVersionLessThan('5.0.0')) {
Expand Down Expand Up @@ -189,4 +181,4 @@ export function cleanupEntitiesFiles(
this.removeFile(`${application.clientSrcDir}app/entities/${entityFolderName}/route/${entityFileName}-routing.module.ts`);
}
}
}
});
9 changes: 5 additions & 4 deletions generators/angular/support/needles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { Entity } from '../../base-application/index.js';
import type { BaseApplication, CommonClientServerApplication } from '../../base-application/types.js';
import type { Entity } from '../../../lib/types/application/entity.js';
import type { BaseApplication } from '../../base-application/types.js';
import { createNeedleCallback } from '../../base/support/needles.js';
import { upperFirstCamelCase } from '../../../lib/utils/string.js';
import { joinCallbacks } from '../../base/support/write-files.js';
import { asPostWritingEntitiesTask } from '../../base-application/support/task-type-inference.js';

export function addRoute({
needle,
Expand Down Expand Up @@ -55,7 +56,7 @@ export function addRoute({
});
}

export function addEntitiesRoute({ application, entities }: { application: CommonClientServerApplication; entities: Entity[] }) {
export const addEntitiesRoute = asPostWritingEntitiesTask(function addEntitiesRoute({ application, entities }: { application; entities }) {
const { enableTranslation } = application;
return joinCallbacks(
...entities.map(entity => {
Expand All @@ -72,7 +73,7 @@ export function addEntitiesRoute({ application, entities }: { application: Commo
});
}),
);
}
});

type MenuItem = {
jhiPrefix: string;
Expand Down
104 changes: 46 additions & 58 deletions generators/base-application/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ import type { ComposeOptions, Storage } from 'yeoman-generator';

import BaseGenerator from '../base/index.js';
import { JHIPSTER_CONFIG_DIR } from '../generator-constants.js';
import type { GenericSourceTypeDefinition, GenericTaskGroup } from '../base/tasks.js';
import type { SpringBootSourceType } from '../server/types.js';
import type { ClientSourceType } from '../client/types.js';
import type { I18nApplication } from '../languages/types.js';
import type { JHipsterGeneratorFeatures, JHipsterGeneratorOptions } from '../base/api.js';
import { mutateData } from '../../lib/utils/object.js';
import {
Expand All @@ -33,9 +29,11 @@ import {
GENERATOR_BOOTSTRAP_APPLICATION_CLIENT,
GENERATOR_BOOTSTRAP_APPLICATION_SERVER,
} from '../generator-list.js';
import type { TaskTypes as DefaultTaskTypes } from '../../lib/types/application/tasks.js';
import type { ApplicationType } from '../../lib/types/application/application.js';
import type { Entity } from '../../lib/types/application/entity.js';
import type { GenericTaskGroup } from '../../lib/types/base/tasks.js';
import { getEntitiesFromDir } from './support/index.js';
import type { BaseApplication, CommonClientServerApplication } from './types.js';
import type { BaseApplicationGeneratorDefinition, GenericApplicationDefinition } from './tasks.js';
import { CUSTOM_PRIORITIES, PRIORITY_NAMES, QUEUES } from './priorities.js';

const {
Expand Down Expand Up @@ -71,24 +69,14 @@ const {

const asPriority = BaseGenerator.asPriority;

export type BaseApplicationSource = Record<string, (...args: any[]) => any> & SpringBootSourceType & ClientSourceType & I18nApplication;

export type JHipsterApplication = BaseApplication & Partial<CommonClientServerApplication>;

export type GeneratorDefinition = BaseApplicationGeneratorDefinition<
GenericApplicationDefinition<JHipsterApplication> & GenericSourceTypeDefinition<BaseApplicationSource>
>;

/**
* This is the base class for a generator that generates entities.
*/
export default class BaseApplicationGenerator<
Definition extends BaseApplicationGeneratorDefinition<{
applicationType: any;
entityType: any;
sourceType: any;
}> = GeneratorDefinition,
> extends BaseGenerator<Definition> {
E = Entity,
A = ApplicationType<E>,
TaskTypes extends DefaultTaskTypes<any, any> = DefaultTaskTypes<E, A>,
> extends BaseGenerator<TaskTypes> {
static CONFIGURING_EACH_ENTITY = asPriority(CONFIGURING_EACH_ENTITY);

static LOADING_ENTITIES = asPriority(LOADING_ENTITIES);
Expand Down Expand Up @@ -218,118 +206,118 @@ export default class BaseApplicationGenerator<
*
* Configuring each entity should configure entities.
*/
get configuringEachEntity(): GenericTaskGroup<this, Definition['configuringEachEntityTaskParam']> {
return this.asConfiguringEachEntityTaskGroup({});
get configuringEachEntity() {
return {};
}

get preparingEachEntity(): GenericTaskGroup<this, Definition['preparingEachEntityTaskParam']> {
return this.asPreparingEachEntityTaskGroup({});
get preparingEachEntity() {
return {};
}

/**
* Priority API stub for blueprints.
*/
get preparingEachEntityField(): GenericTaskGroup<this, Definition['preparingEachEntityFieldTaskParam']> {
return this.asPreparingEachEntityFieldTaskGroup({});
get preparingEachEntityField() {
return {};
}

/**
* Priority API stub for blueprints.
*/
get preparingEachEntityRelationship(): GenericTaskGroup<this, Definition['preparingEachEntityRelationshipTaskParam']> {
return this.asPreparingEachEntityRelationshipTaskGroup({});
get preparingEachEntityRelationship() {
return {};
}

/**
* Priority API stub for blueprints.
*/
get postPreparingEachEntity(): GenericTaskGroup<this, Definition['postPreparingEachEntityTaskParam']> {
return this.asPostPreparingEachEntityTaskGroup({});
get postPreparingEachEntity() {
return {};
}

/**
* Priority API stub for blueprints.
*/
get writingEntities(): GenericTaskGroup<this, Definition['writingEntitiesTaskParam']> {
return this.asWritingEntitiesTaskGroup({});
get writingEntities() {
return {};
}

/**
* Priority API stub for blueprints.
*/
get postWritingEntities(): GenericTaskGroup<this, Definition['postWritingEntitiesTaskParam']> {
return this.asPostWritingEntitiesTaskGroup({});
get postWritingEntities() {
return {};
}

/**
* Utility method to get typed objects for autocomplete.
*/
asConfiguringEachEntityTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['configuringEachEntityTaskParam']>,
): GenericTaskGroup<this, Definition['configuringEachEntityTaskParam']> {
asConfiguringEachEntityTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['ConfiguringEachEntityTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['ConfiguringEachEntityTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asLoadingEntitiesTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['loadingEntitiesTaskParam']>,
): GenericTaskGroup<this, Definition['loadingEntitiesTaskParam']> {
asLoadingEntitiesTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['LoadingEntitiesTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['LoadingEntitiesTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asPreparingEachEntityTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['preparingEachEntityTaskParam']>,
): GenericTaskGroup<this, Definition['preparingEachEntityTaskParam']> {
asPreparingEachEntityTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['PreparingEachEntityTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['PreparingEachEntityTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asPreparingEachEntityFieldTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['preparingEachEntityFieldTaskParam']>,
): GenericTaskGroup<this, Definition['preparingEachEntityFieldTaskParam']> {
asPreparingEachEntityFieldTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['PreparingEachEntityFieldTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['PreparingEachEntityFieldTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asPreparingEachEntityRelationshipTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['preparingEachEntityRelationshipTaskParam']>,
): GenericTaskGroup<this, Definition['preparingEachEntityRelationshipTaskParam']> {
asPreparingEachEntityRelationshipTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['PreparingEachEntityRelationshipTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['PreparingEachEntityRelationshipTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asPostPreparingEachEntityTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['postPreparingEachEntityTaskParam']>,
): GenericTaskGroup<this, Definition['postPreparingEachEntityTaskParam']> {
asPostPreparingEachEntityTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['PostPreparingEachEntityTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['PostPreparingEachEntityTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asWritingEntitiesTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['writingEntitiesTaskParam']>,
): GenericTaskGroup<this, Definition['writingEntitiesTaskParam']> {
asWritingEntitiesTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['WritingEntitiesTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['WritingEntitiesTaskParam'], K> {
return taskGroup;
}

/**
* Utility method to get typed objects for autocomplete.
*/
asPostWritingEntitiesTaskGroup(
taskGroup: GenericTaskGroup<this, Definition['postWritingEntitiesTaskParam']>,
): GenericTaskGroup<this, Definition['postWritingEntitiesTaskParam']> {
asPostWritingEntitiesTaskGroup<const K extends string>(
taskGroup: GenericTaskGroup<this, TaskTypes['PostWritingEntitiesTaskParam'], K>,
): GenericTaskGroup<any, TaskTypes['PostWritingEntitiesTaskParam'], K> {
return taskGroup;
}

Expand Down
2 changes: 1 addition & 1 deletion generators/base-application/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@
* Register generator-base at yeoman-environment
*/
export { default } from './generator.js';
export type { BaseEntity, Entity, Field, Relationship } from './types/index.js';
export type { Entity, Field, Relationship } from '../../lib/types/application/index.js';
2 changes: 1 addition & 1 deletion generators/base-application/support/prepare-entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import { getEntityParentPathAddition, getTypescriptKeyType } from '../../client/
import { applicationTypes, databaseTypes, entityOptions, fieldTypes, searchEngineTypes } from '../../../jdl/jhipster/index.js';
import { binaryOptions } from '../../../jdl/built-in-options/index.js';

import type { Entity } from '../types/index.js';
import type { Entity } from '../../../lib/types/application/index.js';
import type CoreGenerator from '../../base-core/generator.js';
import { fieldIsEnum } from './field-utils.js';
import { fieldToReference } from './prepare-field.js';
Expand Down
Loading

0 comments on commit d6b5690

Please sign in to comment.