@itrocks/framework
Version:
RAD framework for intuitive web application development, blending data and domain-driven design with modular architecture
152 lines • 8.25 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.bind = bind;
const lazy_loading_1 = require("@itrocks/lazy-loading");
(0, lazy_loading_1.initLazyLoading)();
const action_1 = require("@itrocks/action");
const app_dir_1 = require("@itrocks/app-dir");
const class_file_1 = require("@itrocks/class-file");
const class_type_1 = require("@itrocks/class-type");
const class_type_2 = require("@itrocks/class-type");
const class_view_1 = require("@itrocks/class-view");
const class_view_2 = require("@itrocks/class-view");
const collection_1 = require("@itrocks/collection");
const composition_1 = require("@itrocks/composition");
const config_1 = require("@itrocks/config");
const core_transformers_1 = require("@itrocks/core-transformers");
const core_transformers_2 = require("@itrocks/core-transformers");
const property_1 = require("@itrocks/decorator/property");
const file_1 = require("@itrocks/file");
const lazy_loading_2 = require("@itrocks/lazy-loading");
const list_properties_1 = require("@itrocks/list-properties");
const mysql_1 = require("@itrocks/mysql");
const password_1 = require("@itrocks/password");
const transformers_1 = require("@itrocks/password/transformers");
const property_translate_1 = require("@itrocks/property-translate");
const transformers_2 = require("@itrocks/property-translate/transformers");
const property_view_1 = require("@itrocks/property-view");
const property_view_2 = require("@itrocks/property-view");
const rename_1 = require("@itrocks/rename");
const rename_2 = require("@itrocks/rename");
const required_1 = require("@itrocks/required");
const route_1 = require("@itrocks/route");
const route_2 = require("@itrocks/route");
const sql_functions_1 = require("@itrocks/sql-functions");
const storage_1 = require("@itrocks/storage");
const store_1 = require("@itrocks/store");
const store_2 = require("@itrocks/store");
const string_formats_1 = require("@itrocks/string-formats");
const transformers_3 = require("@itrocks/string-formats/transformers");
const template_1 = require("@itrocks/template");
const template_insight_1 = require("@itrocks/template-insight");
const transformer_1 = require("@itrocks/transformer");
const transformer_2 = require("@itrocks/transformer");
const transformer_3 = require("@itrocks/transformer");
const translate_1 = require("@itrocks/translate");
const date_fns_1 = require("date-fns");
const node_path_1 = require("node:path");
const node_path_2 = require("node:path");
async function propertyOutput(object, property) {
return (0, transformer_1.applyTransformer)(await object[property], object, property, transformer_2.HTML, transformer_3.OUTPUT);
}
function bind() {
(0, class_view_1.classViewDependsOn)({ propertyOutput, requiredOf: required_1.requiredOf, tr: translate_1.tr });
if (config_1.config.dataSource) {
(0, storage_1.createDataSource)(config_1.config.dataSource);
}
(0, collection_1.initCollection)();
(0, core_transformers_1.initCoreTransformers)({
displayOf: property_view_1.displayOf,
fieldIdOf: rename_2.toCssId,
fieldNameOf: rename_2.toField,
formatDate: date => (0, date_fns_1.format)(date, (0, translate_1.tr)('dd/MM/yyyy', { ucFirst: false })),
ignoreTransformedValue: transformer_2.IGNORE,
parseDate: date => (0, date_fns_1.parse)(date, (0, translate_1.tr)('dd/MM/yyyy', { ucFirst: false }), new Date),
propertyOutput,
representativeValueOf: class_view_2.representativeValueOf,
routeOf: route_2.routeOf,
tr: translate_1.tr
});
(0, file_1.initFileTransformers)();
(0, list_properties_1.initListProperties)();
(0, property_view_2.initOrderedProperties)();
(0, string_formats_1.multilineDependsOn)({
setTransformers: transformers_3.setMultilineTransformers
});
(0, mysql_1.mysqlDependsOn)({
applyReadTransformer: async function (data, property, object) {
const value = await (0, transformer_1.applyTransformer)(data[property.toString()], object, property, transformer_3.SQL, transformer_3.READ, data);
if ((value !== transformer_2.IGNORE) && Reflect.getOwnMetadata(lazy_loading_2.PROTECT_GET, object, (0, property_1.metadataNameOf)(property))) {
Reflect.deleteMetadata(lazy_loading_2.PROTECT_GET, object, (0, property_1.metadataNameOf)(property));
}
return value;
},
applySaveTransformer: async function (object, property, data) {
const value = Reflect.getMetadata(lazy_loading_2.PROTECT_GET, object, (0, property_1.metadataNameOf)(property))
? (Object.hasOwn(object, property) ? object[property] : undefined)
: await object[property];
return (0, transformer_1.applyTransformer)(value, object, property, transformer_3.SQL, transformer_3.SAVE, data);
},
columnOf: rename_1.toColumn,
componentOf: composition_1.componentOf,
ignoreTransformedValue: transformer_2.IGNORE,
QueryFunction: sql_functions_1.SqlFunction,
queryFunctionCall: value => [value.value, value.sql],
storeOf: store_2.storeOf
});
(0, password_1.passwordDependsOn)({
setTransformers: transformers_1.setPasswordTransformers
});
(0, route_1.routeDependsOn)({
calculate: (target) => route_2.routes.summarize((0, class_file_1.fileOf)(target).slice(app_dir_1.appDir.length, -3))
});
(0, property_translate_1.propertyTranslateDependsOn)({
setTransformers: transformers_2.setPropertyTranslateTransformers
});
(0, store_1.storeDependsOn)({
setTransformers: core_transformers_2.initStoreTransformers,
toStoreName: rename_1.toColumn
});
(0, template_1.templateDependsOn)({
toString: async (data) => (((typeof data)[0] === 'o') && (data.toString === Object.prototype.toString))
? (await require('@itrocks/class-view').representativeValueOf(data))
: '' + data
});
(0, translate_1.trInit)('fr-FR');
(0, translate_1.trLoad)((0, node_path_1.join)(__dirname, '..', 'fr-FR.csv')).catch();
(0, translate_1.trLoad)((0, node_path_1.join)(app_dir_1.appDir, 'app', 'fr-FR.csv')).catch();
(0, translate_1.trLoad)((0, node_path_1.join)(app_dir_1.appDir, 'fr-FR.csv')).catch();
action_1.Action.prototype.htmlTemplateResponse = async function (data, request, templateFile, statusCode = 200, headers = {}) {
const containerData = Object.assign(defaultContainerData(request), this);
const contained = !request.request.headers['xhr-info'] && config_1.config.container?.file;
const template = new template_insight_1.Template(data, containerData);
return this.htmlResponse(await template.parseFile(templateFile, contained && (0, node_path_1.join)(app_dir_1.appDir, config_1.config.container.file)), statusCode, headers);
};
}
function configContainerData() {
const configContainerData = config_1.config.container?.data ?? {};
for (const [name, value] of Object.entries(configContainerData)) {
if ((typeof value === 'string') && '@.'.includes(value[0])) {
const exported = value.includes(':')
? require(value.split(':')[0])[value.split(':')[1]]
: (require(value).default ?? Object.values(require(value))[0]);
configContainerData[name] =
(0, class_type_1.isAnyFunction)(exported) ? exported(config_1.config[name]) :
(0, class_type_2.isAnyType)(exported) ? new exported(config_1.config[name]) :
exported;
}
}
return configContainerData;
}
function defaultContainerData(request) {
return Object.assign({
action: request.action,
favicon: config_1.config.container?.favicon ?? (0, node_path_2.normalize)((0, node_path_1.join)(__dirname, '../favicon.ico')),
manifest: config_1.config.container?.manifest ? [config_1.config.container.manifest] : [],
request,
scripts: config_1.config.container?.scripts,
session: request.request.session,
styleSheets: config_1.config.container?.styleSheets,
}, configContainerData());
}
//# sourceMappingURL=dependencies.js.map