gen-jhipster
Version:
VHipster - Spring Boot + Angular/React/Vue in one handy generator
85 lines (84 loc) • 3.24 kB
JavaScript
import { getConfigWithDefaults } from "../../lib/jhipster/default-application-options.js";
import { mutateData } from "../../lib/utils/index.js";
import BaseGenerator from "../base/index.js";
import { PRIORITY_NAMES } from "../base-core/priorities.js";
import { CONTEXT_DATA_APPLICATION_KEY, CONTEXT_DATA_SOURCE_KEY } from "./support/index.js";
const { LOADING, PREPARING, POST_PREPARING, DEFAULT, WRITING, POST_WRITING, PRE_CONFLICTS, INSTALL, END } = PRIORITY_NAMES;
const PRIORITY_WITH_SOURCE = new Set([PREPARING, POST_PREPARING, POST_WRITING]);
const PRIORITY_WITH_APPLICATION_DEFAULTS = new Set([PREPARING, LOADING]);
const PRIORITY_WITH_APPLICATION = new Set([
LOADING,
PREPARING,
POST_PREPARING,
DEFAULT,
WRITING,
POST_WRITING,
PRE_CONFLICTS,
INSTALL,
END,
]);
const getFirstArgForPriority = (priorityName) => ({
source: PRIORITY_WITH_SOURCE.has(priorityName),
application: PRIORITY_WITH_APPLICATION.has(priorityName),
applicationDefaults: PRIORITY_WITH_APPLICATION_DEFAULTS.has(priorityName),
});
/**
* This is the base class for a generator that generates entities.
*/
export default class BaseSimpleApplicationGenerator extends BaseGenerator {
constructor(args, options, features) {
super(args, options, { storeJHipsterVersion: true, storeBlueprintVersion: true, ...features });
}
get context() {
return this.getContextData(CONTEXT_DATA_APPLICATION_KEY, {
factory: () => ({ nodeDependencies: {}, customizeTemplatePaths: [], user: undefined }),
});
}
get #source() {
return this.getContextData(CONTEXT_DATA_SOURCE_KEY, { factory: () => ({}) });
}
/**
* JHipster config with default values fallback
*/
get jhipsterConfigWithDefaults() {
const configWithDefaults = getConfigWithDefaults(super.jhipsterConfigWithDefaults);
return configWithDefaults;
}
/**
* @deprecated use dependsOnBootstrap('common'), dependsOnBootstrap('base-application') or dependsOnBootstrap('base-simple-application')
*/
dependsOnBootstrapApplicationBase(options) {
return this.dependsOnJHipster('jhipster:base-application:bootstrap', options);
}
getArgsForPriority(priorityName) {
const args = super.getArgsForPriority(priorityName);
let firstArg = this.getTaskFirstArgForPriority(priorityName);
if (args.length > 0) {
firstArg = { ...args[0], ...firstArg };
}
return [firstArg];
}
/**
* @protected
*/
getTaskFirstArgForPriority(priorityName) {
const { source, application, applicationDefaults } = getFirstArgForPriority(priorityName);
const args = {};
if (application) {
args.application = this.context;
}
if (source) {
args.source = this.#source;
}
if (applicationDefaults) {
args.applicationDefaults = (...args) => mutateData(this.context, ...args.map(data => ({ __override__: false, ...data })));
}
return args;
}
/**
* Utility method to get typed objects for autocomplete.
*/
asBootstrapApplicationTaskGroup(taskGroup) {
return taskGroup;
}
}