Initial content
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getCartDetail = void 0;
|
||||
const _1 = require(".");
|
||||
const getCartDetail = async (cart) => {
|
||||
const ids = cart.lines.map(l => l.productId);
|
||||
const db_data = await _1.catalog_repository.getProductDetails(ids);
|
||||
const products = Object.fromEntries(db_data.map(p => [p.id, p]));
|
||||
const lines = cart.lines.map(line => ({
|
||||
product: products[line.productId],
|
||||
quantity: line.quantity,
|
||||
subtotal: products[line.productId].price * line.quantity
|
||||
}));
|
||||
const total = lines.reduce((total, line) => total + line.subtotal, 0);
|
||||
return { lines, total };
|
||||
};
|
||||
exports.getCartDetail = getCartDetail;
|
||||
@@ -0,0 +1,19 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.removeLine = exports.addLine = exports.createCart = void 0;
|
||||
const createCart = () => ({ lines: [] });
|
||||
exports.createCart = createCart;
|
||||
const addLine = (cart, productId, quantity) => {
|
||||
const line = cart.lines.find(l => l.productId == productId);
|
||||
if (line !== undefined) {
|
||||
line.quantity += quantity;
|
||||
}
|
||||
else {
|
||||
cart.lines.push({ productId, quantity });
|
||||
}
|
||||
};
|
||||
exports.addLine = addLine;
|
||||
const removeLine = (cart, productId) => {
|
||||
cart.lines = cart.lines.filter(l => l.productId !== productId);
|
||||
};
|
||||
exports.removeLine = removeLine;
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.order_repository = exports.catalog_repository = void 0;
|
||||
const orm_1 = require("./orm");
|
||||
const repo = new orm_1.CatalogRepoImpl();
|
||||
exports.catalog_repository = repo;
|
||||
exports.order_repository = repo;
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
@@ -0,0 +1,38 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BaseRepo = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
const config_1 = require("../../config");
|
||||
const models_1 = require("./models");
|
||||
const fs_1 = require("fs");
|
||||
const config = (0, config_1.getConfig)("catalog:orm_repo");
|
||||
const logging = config.logging
|
||||
? { logging: console.log, logQueryParameters: true }
|
||||
: { logging: false };
|
||||
class BaseRepo {
|
||||
sequelize;
|
||||
constructor() {
|
||||
this.sequelize = new sequelize_1.Sequelize({ ...config.settings, ...logging });
|
||||
this.initModelsAndDatabase();
|
||||
}
|
||||
async initModelsAndDatabase() {
|
||||
(0, models_1.initializeModels)(this.sequelize);
|
||||
if (config.reset_db) {
|
||||
await this.sequelize.drop();
|
||||
await this.sequelize.sync();
|
||||
await this.addSeedData();
|
||||
}
|
||||
else {
|
||||
await this.sequelize.sync();
|
||||
}
|
||||
}
|
||||
async addSeedData() {
|
||||
const data = JSON.parse((0, fs_1.readFileSync)(config.seed_file).toString());
|
||||
await this.sequelize.transaction(async (transaction) => {
|
||||
await models_1.SupplierModel.bulkCreate(data.suppliers, { transaction });
|
||||
await models_1.CategoryModel.bulkCreate(data.categories, { transaction });
|
||||
await models_1.ProductModel.bulkCreate(data.products, { transaction });
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.BaseRepo = BaseRepo;
|
||||
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CatalogRepoImpl = void 0;
|
||||
const core_1 = require("./core");
|
||||
const queries_1 = require("./queries");
|
||||
const storage_1 = require("./storage");
|
||||
const order_queries_1 = require("./order_queries");
|
||||
const order_storage_1 = require("./order_storage");
|
||||
const CatalogRepo = (0, storage_1.AddStorage)((0, queries_1.AddQueries)(core_1.BaseRepo));
|
||||
const RepoWithOrders = (0, order_storage_1.AddOrderStorage)((0, order_queries_1.AddOrderQueries)(CatalogRepo));
|
||||
exports.CatalogRepoImpl = RepoWithOrders;
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.initializeCatalogModels = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
const catalog_models_1 = require("./catalog_models");
|
||||
const primaryKey = {
|
||||
id: { type: sequelize_1.DataTypes.INTEGER, autoIncrement: true, primaryKey: true }
|
||||
};
|
||||
const initializeCatalogModels = (sequelize) => {
|
||||
catalog_models_1.ProductModel.init({
|
||||
...primaryKey,
|
||||
name: { type: sequelize_1.DataTypes.STRING },
|
||||
description: { type: sequelize_1.DataTypes.STRING },
|
||||
price: { type: sequelize_1.DataTypes.DECIMAL(10, 2) }
|
||||
}, { sequelize });
|
||||
catalog_models_1.CategoryModel.init({
|
||||
...primaryKey,
|
||||
name: { type: sequelize_1.DataTypes.STRING }
|
||||
}, { sequelize });
|
||||
catalog_models_1.SupplierModel.init({
|
||||
...primaryKey,
|
||||
name: { type: sequelize_1.DataTypes.STRING }
|
||||
}, { sequelize });
|
||||
catalog_models_1.ProductModel.belongsTo(catalog_models_1.CategoryModel, { foreignKey: "categoryId", as: "category" });
|
||||
catalog_models_1.ProductModel.belongsTo(catalog_models_1.SupplierModel, { foreignKey: "supplierId", as: "supplier" });
|
||||
catalog_models_1.CategoryModel.hasMany(catalog_models_1.ProductModel, { foreignKey: "categoryId", as: "products" });
|
||||
catalog_models_1.SupplierModel.hasMany(catalog_models_1.ProductModel, { foreignKey: "supplierId", as: "products" });
|
||||
};
|
||||
exports.initializeCatalogModels = initializeCatalogModels;
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SupplierModel = exports.CategoryModel = exports.ProductModel = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
class ProductModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.ProductModel = ProductModel;
|
||||
class CategoryModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.CategoryModel = CategoryModel;
|
||||
class SupplierModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.SupplierModel = SupplierModel;
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.initializeCustomerModels = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
const customer_models_1 = require("./customer_models");
|
||||
const initializeCustomerModels = (sequelize) => {
|
||||
customer_models_1.CustomerModel.init({
|
||||
id: { type: sequelize_1.DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
|
||||
name: { type: sequelize_1.DataTypes.STRING },
|
||||
email: { type: sequelize_1.DataTypes.STRING }
|
||||
}, { sequelize });
|
||||
};
|
||||
exports.initializeCustomerModels = initializeCustomerModels;
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CustomerModel = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
class CustomerModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.CustomerModel = CustomerModel;
|
||||
@@ -0,0 +1,16 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.initializeModels = exports.SupplierModel = exports.CategoryModel = exports.ProductModel = void 0;
|
||||
const catalog_helpers_1 = require("./catalog_helpers");
|
||||
const customer_helpers_1 = require("./customer_helpers");
|
||||
const order_helpers_1 = require("./order_helpers");
|
||||
var catalog_models_1 = require("./catalog_models");
|
||||
Object.defineProperty(exports, "ProductModel", { enumerable: true, get: function () { return catalog_models_1.ProductModel; } });
|
||||
Object.defineProperty(exports, "CategoryModel", { enumerable: true, get: function () { return catalog_models_1.CategoryModel; } });
|
||||
Object.defineProperty(exports, "SupplierModel", { enumerable: true, get: function () { return catalog_models_1.SupplierModel; } });
|
||||
const initializeModels = (sequelize) => {
|
||||
(0, catalog_helpers_1.initializeCatalogModels)(sequelize);
|
||||
(0, customer_helpers_1.initializeCustomerModels)(sequelize);
|
||||
(0, order_helpers_1.initializeOrderModels)(sequelize);
|
||||
};
|
||||
exports.initializeModels = initializeModels;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.initializeOrderModels = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
const order_models_1 = require("./order_models");
|
||||
const customer_models_1 = require("./customer_models");
|
||||
const _1 = require(".");
|
||||
const primaryKey = {
|
||||
id: { type: sequelize_1.DataTypes.INTEGER, autoIncrement: true, primaryKey: true }
|
||||
};
|
||||
const initializeOrderModels = (sequelize) => {
|
||||
order_models_1.OrderModel.init({
|
||||
...primaryKey, shipped: sequelize_1.DataTypes.BOOLEAN
|
||||
}, { sequelize });
|
||||
order_models_1.ProductSelectionModel.init({
|
||||
...primaryKey,
|
||||
quantity: sequelize_1.DataTypes.INTEGER, price: sequelize_1.DataTypes.DECIMAL(10, 2)
|
||||
}, { sequelize });
|
||||
order_models_1.AddressModel.init({
|
||||
...primaryKey,
|
||||
street: sequelize_1.DataTypes.STRING, city: sequelize_1.DataTypes.STRING,
|
||||
state: sequelize_1.DataTypes.STRING, zip: sequelize_1.DataTypes.STRING,
|
||||
}, { sequelize });
|
||||
order_models_1.OrderModel.belongsTo(customer_models_1.CustomerModel, { as: "customer" });
|
||||
order_models_1.OrderModel.belongsTo(order_models_1.AddressModel, { foreignKey: "addressId", as: "address" });
|
||||
order_models_1.OrderModel.belongsToMany(order_models_1.ProductSelectionModel, { through: "OrderProductJunction",
|
||||
foreignKey: "orderId", as: "selections" });
|
||||
order_models_1.ProductSelectionModel.belongsTo(_1.ProductModel, { as: "product" });
|
||||
};
|
||||
exports.initializeOrderModels = initializeOrderModels;
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AddressModel = exports.ProductSelectionModel = exports.OrderModel = void 0;
|
||||
const sequelize_1 = require("sequelize");
|
||||
class OrderModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.OrderModel = OrderModel;
|
||||
class ProductSelectionModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.ProductSelectionModel = ProductSelectionModel;
|
||||
class AddressModel extends sequelize_1.Model {
|
||||
}
|
||||
exports.AddressModel = AddressModel;
|
||||
@@ -0,0 +1,24 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AddOrderQueries = void 0;
|
||||
const order_models_1 = require("./models/order_models");
|
||||
const customer_models_1 = require("./models/customer_models");
|
||||
const queryConfig = {
|
||||
include: [
|
||||
{ model: order_models_1.AddressModel, as: "address" },
|
||||
{ model: customer_models_1.CustomerModel, as: "customer" }
|
||||
],
|
||||
raw: true, nest: true
|
||||
};
|
||||
function AddOrderQueries(Base) {
|
||||
return class extends Base {
|
||||
getOrder(id) {
|
||||
return order_models_1.OrderModel.findByPk(id, queryConfig);
|
||||
}
|
||||
getOrders(excludeShipped) {
|
||||
return order_models_1.OrderModel.findAll(excludeShipped ?
|
||||
{ ...queryConfig, where: { shipped: false } } : queryConfig);
|
||||
}
|
||||
};
|
||||
}
|
||||
exports.AddOrderQueries = AddOrderQueries;
|
||||
@@ -0,0 +1,38 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AddOrderStorage = void 0;
|
||||
const order_models_1 = require("./models/order_models");
|
||||
const customer_models_1 = require("./models/customer_models");
|
||||
function AddOrderStorage(Base) {
|
||||
return class extends Base {
|
||||
storeOrder(order) {
|
||||
return this.sequelize.transaction(async (transaction) => {
|
||||
const { id, shipped } = order;
|
||||
const [stored] = await order_models_1.OrderModel.upsert({ id, shipped }, { transaction });
|
||||
if (order.customer) {
|
||||
const [{ id }] = await customer_models_1.CustomerModel.findOrCreate({
|
||||
where: { email: order.customer.email },
|
||||
defaults: order.customer,
|
||||
transaction
|
||||
});
|
||||
stored.customerId = id;
|
||||
}
|
||||
if (order.address) {
|
||||
const [{ id }] = await order_models_1.AddressModel.findOrCreate({
|
||||
where: { ...order.address },
|
||||
defaults: order.address,
|
||||
transaction
|
||||
});
|
||||
stored.addressId = id;
|
||||
}
|
||||
await stored.save({ transaction });
|
||||
if (order.selections) {
|
||||
const sels = await order_models_1.ProductSelectionModel.bulkCreate(order.selections, { transaction });
|
||||
await stored.setSelections(sels, { transaction });
|
||||
}
|
||||
return stored;
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
exports.AddOrderStorage = AddOrderStorage;
|
||||
@@ -0,0 +1,49 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AddQueries = void 0;
|
||||
const models_1 = require("./models");
|
||||
const sequelize_1 = require("sequelize");
|
||||
function AddQueries(Base) {
|
||||
return class extends Base {
|
||||
async getProducts(params) {
|
||||
const opts = {};
|
||||
if (params?.page && params.pageSize) {
|
||||
opts.limit = params?.pageSize,
|
||||
opts.offset = (params.page - 1) * params.pageSize;
|
||||
}
|
||||
if (params?.searchTerm) {
|
||||
const searchOp = { [sequelize_1.Op.like]: "%" + params.searchTerm + "%" };
|
||||
opts.where = {
|
||||
[sequelize_1.Op.or]: { name: searchOp, description: searchOp }
|
||||
};
|
||||
}
|
||||
if (params?.category) {
|
||||
opts.where = {
|
||||
...opts.where, categoryId: params.category
|
||||
};
|
||||
}
|
||||
const result = await models_1.ProductModel.findAndCountAll({
|
||||
include: [
|
||||
{ model: models_1.SupplierModel, as: "supplier" },
|
||||
{ model: models_1.CategoryModel, as: "category" }
|
||||
],
|
||||
raw: true, nest: true,
|
||||
...opts
|
||||
});
|
||||
const categories = await this.getCategories();
|
||||
return { products: result.rows, totalCount: result.count, categories };
|
||||
}
|
||||
getCategories() {
|
||||
return models_1.CategoryModel.findAll({ raw: true, nest: true });
|
||||
}
|
||||
getSuppliers() {
|
||||
return models_1.SupplierModel.findAll({ raw: true, nest: true });
|
||||
}
|
||||
getProductDetails(ids) {
|
||||
return models_1.ProductModel.findAll({
|
||||
where: { id: { [sequelize_1.Op.in]: ids } }, raw: true, nest: true,
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
exports.AddQueries = AddQueries;
|
||||
@@ -0,0 +1,37 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AddStorage = void 0;
|
||||
const models_1 = require("./models");
|
||||
function AddStorage(Base) {
|
||||
return class extends Base {
|
||||
storeProduct(p) {
|
||||
return this.sequelize.transaction(async (transaction) => {
|
||||
if (p.category) {
|
||||
p.category = await this.storeCategory(p.category);
|
||||
}
|
||||
if (p.supplier) {
|
||||
p.supplier = await this.storeSupplier(p.supplier);
|
||||
}
|
||||
const [stored] = await models_1.ProductModel.upsert({
|
||||
id: p.id, name: p.name, description: p.description,
|
||||
price: p.price, categoryId: p.category?.id,
|
||||
supplierId: p.supplier?.id
|
||||
}, { transaction });
|
||||
return stored;
|
||||
});
|
||||
}
|
||||
async storeCategory(c, transaction) {
|
||||
const [stored] = await models_1.CategoryModel.upsert({
|
||||
id: c.id, name: c.name
|
||||
}, { transaction });
|
||||
return stored;
|
||||
}
|
||||
async storeSupplier(s, transaction) {
|
||||
const [stored] = await models_1.SupplierModel.upsert({
|
||||
id: s.id, name: s.name
|
||||
}, { transaction });
|
||||
return stored;
|
||||
}
|
||||
};
|
||||
}
|
||||
exports.AddStorage = AddStorage;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.no_op = exports.required = exports.email = exports.minLength = void 0;
|
||||
const validator_1 = __importDefault(require("validator"));
|
||||
const minLength = (min) => (status) => {
|
||||
if (!validator_1.default.isLength(status.value, { min })) {
|
||||
status.setInvalid(true);
|
||||
status.messages.push(`Enter at least ${min} characters`);
|
||||
}
|
||||
};
|
||||
exports.minLength = minLength;
|
||||
const email = (status) => {
|
||||
if (!validator_1.default.isEmail(status.value)) {
|
||||
status.setInvalid(true);
|
||||
status.messages.push("Enter an email address");
|
||||
}
|
||||
};
|
||||
exports.email = email;
|
||||
const required = (status) => {
|
||||
if (validator_1.default.isEmpty(status.value.toString(), { ignore_whitespace: true })) {
|
||||
status.setInvalid(true);
|
||||
status.messages.push("A value is required");
|
||||
}
|
||||
};
|
||||
exports.required = required;
|
||||
const no_op = (status) => { };
|
||||
exports.no_op = no_op;
|
||||
@@ -0,0 +1,20 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__exportStar(require("./validation_types"), exports);
|
||||
__exportStar(require("./validator"), exports);
|
||||
__exportStar(require("./basic_rules"), exports);
|
||||
__exportStar(require("./order_rules"), exports);
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AddressValidator = exports.CustomerValidator = void 0;
|
||||
const validator_1 = require("./validator");
|
||||
const basic_rules_1 = require("./basic_rules");
|
||||
exports.CustomerValidator = new validator_1.Validator({
|
||||
name: [basic_rules_1.required, (0, basic_rules_1.minLength)(6)],
|
||||
email: basic_rules_1.email
|
||||
});
|
||||
exports.AddressValidator = new validator_1.Validator({
|
||||
street: basic_rules_1.required,
|
||||
city: basic_rules_1.required,
|
||||
state: basic_rules_1.required,
|
||||
zip: basic_rules_1.no_op
|
||||
});
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ValidationStatus = void 0;
|
||||
class ValidationStatus {
|
||||
value;
|
||||
invalid = false;
|
||||
constructor(value) {
|
||||
this.value = value;
|
||||
}
|
||||
get isInvalid() {
|
||||
return this.invalid;
|
||||
}
|
||||
setInvalid(newValue) {
|
||||
this.invalid = newValue || this.invalid;
|
||||
}
|
||||
messages = [];
|
||||
}
|
||||
exports.ValidationStatus = ValidationStatus;
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getData = exports.isValid = exports.Validator = void 0;
|
||||
const validation_types_1 = require("./validation_types");
|
||||
class Validator {
|
||||
rules;
|
||||
breakOnInvalid;
|
||||
constructor(rules, breakOnInvalid = true) {
|
||||
this.rules = rules;
|
||||
this.breakOnInvalid = breakOnInvalid;
|
||||
}
|
||||
async validate(data) {
|
||||
const vdata = Object.entries(this.rules).map(async ([key, rules]) => {
|
||||
const status = new validation_types_1.ValidationStatus(data?.[key] ?? "");
|
||||
const rs = (Array.isArray(rules) ? rules : [rules]);
|
||||
for (const r of rs) {
|
||||
if (!status.isInvalid || !this.breakOnInvalid) {
|
||||
await r(status);
|
||||
}
|
||||
}
|
||||
return [key, status];
|
||||
});
|
||||
const done = await Promise.all(vdata);
|
||||
return Object.fromEntries(done);
|
||||
}
|
||||
validateOriginal(data) {
|
||||
const vdata = Object.entries(this.rules).map(([key, rules]) => {
|
||||
const status = new validation_types_1.ValidationStatus(data?.[key] ?? "");
|
||||
(Array.isArray(rules) ? rules : [rules])
|
||||
.forEach(async (rule) => {
|
||||
if (!status.isInvalid || !this.breakOnInvalid) {
|
||||
await rule(status);
|
||||
}
|
||||
});
|
||||
return [key, status];
|
||||
});
|
||||
return Object.fromEntries(vdata);
|
||||
}
|
||||
}
|
||||
exports.Validator = Validator;
|
||||
function isValid(result) {
|
||||
return Object.values(result)
|
||||
.every(r => r.isInvalid === false);
|
||||
}
|
||||
exports.isValid = isValid;
|
||||
function getData(result) {
|
||||
return Object.fromEntries(Object.entries(result)
|
||||
.map(([key, status]) => [key, status.value]));
|
||||
}
|
||||
exports.getData = getData;
|
||||
Reference in New Issue
Block a user