generator-jhipster
Version:
Spring Boot + Angular/React/Vue in one handy generator
107 lines (106 loc) • 4.35 kB
JavaScript
import { getConfigWithDefaults } from "../../lib/jhipster/default-application-options.js";
import { createDelayedMutationContext, mutateData } from "../../lib/utils/index.js";
import BaseGenerator from "../base/index.js";
import { PRIORITY_NAMES } from "../base-core/priorities.js";
import { sanitizeConfigForNodeApplications } from "./support/config-hardening.js";
import { CONTEXT_DATA_APPLICATION_KEY, CONTEXT_DATA_SANITIZATION_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,
skipLoadCommand: false,
configTransform: (...args) => {
const configTransform = this.getContextData(CONTEXT_DATA_SANITIZATION_KEY, {
factory: () => (config, configKey) => {
const cleanups = sanitizeConfigForNodeApplications(config, { depth: -1, keyPath: configKey });
for (const [key, { oldValue, newValue }] of Object.entries(cleanups)) {
this.log.warn(`The configuration property '${key}' contained a template literal which has been sanitized for security hardening. Original value: '${oldValue}', new value: '${newValue}'`);
}
return config;
},
});
return configTransform(...args);
},
...features,
});
}
get context() {
return this.#application;
}
get #source() {
return this.getContextData(CONTEXT_DATA_SOURCE_KEY, { factory: () => ({}) });
}
get #application() {
return this.getContextData(CONTEXT_DATA_APPLICATION_KEY, {
factory: () => createDelayedMutationContext({ autoDelay: true }),
});
}
/**
* JHipster config with default values fallback
*/
get jhipsterConfigWithDefaults() {
return getConfigWithDefaults(super.jhipsterConfigWithDefaults);
}
/**
* @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) {
return this.getApplicationArgForPriority(getFirstArgForPriority(priorityName));
}
getApplicationArgForPriority({ source, application, applicationDefaults, }) {
const taskArg = {};
if (application) {
taskArg.application = this.#application;
}
if (applicationDefaults) {
taskArg.applicationDefaults = (...args) => mutateData(this.#application, ...args.map(data => ({ __override__: false, ...data })));
}
if (source) {
taskArg.source = this.#source;
}
return taskArg;
}
/**
* Utility method to get typed objects for autocomplete.
*/
asBootstrapApplicationTaskGroup(taskGroup) {
return taskGroup;
}
}