@questwork/q-utilities 0.1.29 → 0.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"q-utilities.iife.js","sources":["../lib/helpers/authorize/authorize.js","../lib/helpers/calculateAge/calculateAge.js","../lib/helpers/changeCreatorOwner/changeCreatorOwner.js","../lib/helpers/isConvertibleToNumber/isConvertibleToNumber.js","../lib/helpers/getValueByKeys/getValueByKeys.js","../lib/helpers/objectHelper/objectHelper.js","../lib/models/keyValueObject/keyValueObject.js","../lib/helpers/getValidation/getValidation.js","../lib/helpers/formatDate/formatDate.js","../lib/models/templateCompiler/templateCompilerException.js","../lib/models/templateCompiler/constants.js","../lib/models/templateCompiler/helpers/_concatIf.js","../lib/models/templateCompiler/helpers/_divide.js","../lib/models/templateCompiler/helpers/_eq.js","../lib/models/templateCompiler/helpers/_exec.js","../lib/models/templateCompiler/helpers/_filterAll.js","../lib/models/templateCompiler/helpers/_filterOne.js","../lib/models/templateCompiler/helpers/_formatDate.js","../lib/models/templateCompiler/helpers/_get.js","../lib/models/templateCompiler/helpers/_gt.js","../lib/models/templateCompiler/helpers/_gte.js","../lib/models/templateCompiler/helpers/_isEmpty.js","../lib/models/templateCompiler/helpers/_isNotEmpty.js","../lib/models/templateCompiler/helpers/_join.js","../lib/models/templateCompiler/helpers/_lt.js","../lib/models/templateCompiler/helpers/_lte.js","../lib/models/templateCompiler/helpers/_map.js","../lib/models/templateCompiler/helpers/_neq.js","../lib/models/templateCompiler/helpers/_removeHtml.js","../lib/models/templateCompiler/helpers/_replaceChar.js","../lib/models/templateCompiler/helpers/_sum.js","../lib/models/templateCompiler/helpers/_toLowerCase.js","../lib/models/templateCompiler/helpers/_toUpperCase.js","../lib/models/templateCompiler/templateCompiler.js","../lib/helpers/concatStringByArray/concatStringByArray.js","../lib/helpers/convertString/convertString.js","../lib/helpers/convertTimestampToString/handler/create.js","../lib/helpers/convertTimestampToString/handler/handler.js","../lib/helpers/convertTimestampToString/handler/padding.js","../lib/helpers/convertTimestampToString/handler/handlerDate.js","../lib/helpers/convertTimestampToString/handler/handlerMonth.js","../lib/helpers/convertTimestampToString/handler/handlerYear.js","../lib/helpers/convertTimestampToString/handler/handlerTime.js","../lib/helpers/convertTimestampToString/handler/handlerTimezone.js","../lib/helpers/convertTimestampToString/handler/handle.js","../lib/helpers/convertTimestampToString/convertTimestampToString.js","../lib/helpers/detectControlCharacters/detectControlCharacters.js","../lib/helpers/displayName/displayName.js","../lib/helpers/downloadFileByUrl/downloadFileByUrl.js","../lib/helpers/escapeRegex/escapeRegex.js","../lib/helpers/expressHelper/customHandler.js","../lib/helpers/expressHelper/findAllResult.js","../lib/helpers/expressHelper/findOneResult.js","../lib/helpers/expressHelper/hideSensitiveFields.js","../lib/helpers/expressHelper/postResult.js","../lib/helpers/expressHelper/updateOneResult.js","../lib/helpers/expressHelper/index.js","../lib/helpers/extractEmails/extractEmails.js","../lib/helpers/pReduce/pReduce.js","../lib/models/repo/repo.js","../lib/models/apiResponse/apiResponse.js","../lib/models/apiResponse/makeApiResponse.js","../lib/models/service/service.js","../lib/helpers/generalPost/generalPost.js","../lib/helpers/getObjectByArr/getObjectByArr.js","../lib/helpers/groupArrayByKey/groupArrayByKey.js","../lib/helpers/init/init.js","../lib/helpers/initFromArray/initFromArray.js","../lib/helpers/initOnlyValidFromArray/initOnlyValidFromArray.js","../lib/helpers/mergeArraysByKey/mergeArraysByKey.js","../lib/helpers/padZeros/padZeros.js","../lib/helpers/pMap/pMap.js","../lib/helpers/renderByTemplate/renderByTemplate.js","../lib/helpers/replacePlaceholders/replacePlaceholders.js","../lib/helpers/sanitizeText/sanitizeText.js","../lib/helpers/setId/setId.js","../lib/helpers/shuffleArray/shuffleArray.js","../lib/helpers/stringFormatter/stringFormatter.js","../lib/helpers/stringHelper/stringHelper.js","../lib/helpers/trackingPlugin/trackingPlugin.js","../lib/helpers/tenantPlugin/tenantPlugin.js","../lib/models/awsStsS3Client/awsStsS3Client.js","../lib/models/metadata/metadata.js","../lib/models/trackedEntity/trackedEntity.js","../lib/models/pushEnvelope/pushEnvelope.js","../lib/models/qLog/logLevel.js","../lib/models/qLog/logRecord.js","../lib/models/qLog/qLog.js","../lib/models/qLog/handlers/consoleLog.js","../lib/models/qLog/logEnv.js","../lib/models/qMeta/qMeta.js","../lib/models/status/actionRecord.js","../lib/models/status/status.js","../lib/models/status/statusDocument.js","../lib/models/tenantAwareEntity/tenantAwareEntity.js","../lib/models/uniqueKeyGenerator/uniqueKeyGenerator.js","../lib/models/webAppRequest/webAppRequest.ts","../lib/models/webAppResponse/errorDetail.ts","../lib/models/webAppResponse/webAppResponse.ts","../lib/index.ts"],"sourcesContent":["export function authorize({ allowCoordinator, allowOwner, query = {}, required, user }) {\n if (!user) {\n throw new Error('Require login.')\n }\n if (!user.permission) {\n // throw new Error('You do not have any permission.')\n }\n const scopes = user.permission.getScopes(required || {}) || []\n if (!scopes || scopes.length === 0) {\n // throw new Error('You are not allowed in this scope.')\n }\n if (!scopes.includes('*')) {\n query.tenantCode = user.tenantCode\n }\n if (!scopes.includes('TENANT')) {\n query.eventShortCode = user.eventShortCode\n }\n // if (!scopes.includes('EVENT')) {\n // query.eventRegistrationCode = user.eventRegistrationCode\n // }\n if (allowCoordinator) {\n if (query.registrationGroupCode && user.myManagedRegistrationGroupCodes.includes(query.registrationGroupCode)) {\n query.__ALLOW_COORDINATOR = true\n } else {\n if (!scopes.includes('EVENT')) {\n query.eventRegistrationCode = user.eventRegistrationCode\n }\n }\n } else {\n if (!scopes.includes('EVENT')) {\n query.eventRegistrationCode = user.eventRegistrationCode\n }\n }\n if (allowOwner) {\n query.__ALLOW_OWNER = true\n }\n // not good, just use it as example\n const excludedFields = user.getExcludedFields(required)\n if (excludedFields.length > 0) {\n query.__EXCLUDED_FIELDS = excludedFields\n }\n query.__LOGIN_SUBJECT_CODE = user.loginSubjectCode\n return query\n}\n","export function calculateAge(timestamp, reference) {\n const birthDate = new Date(timestamp)\n const refDate = reference ? new Date(reference) : new Date()\n // Validate inputs\n if (isNaN(birthDate.getTime())) {\n return null\n }\n if (isNaN(refDate.getTime())) {\n return null\n }\n if (birthDate > refDate) {\n return null\n }\n\n // Calculate raw difference\n let age = refDate.getFullYear() - birthDate.getFullYear()\n const monthDiff = refDate.getMonth() - birthDate.getMonth()\n\n // Adjust if birthday hasn't occurred yet this year\n if (monthDiff < 0 || (monthDiff === 0 && refDate.getDate() < birthDate.getDate())) {\n age--\n }\n\n return age\n}\n","export function changeCreatorOwner(that, { source, target }) {\n if (that.meta) {\n if (!that.meta.creator || that.meta.creator === source.getId()) {\n that.meta.creator = target.getId()\n }\n if (!that.meta.owner || that.meta.owner === source.getId()) {\n that.meta.owner = target.getId()\n }\n } else {\n if (!that.creator || that.creator === source.getId()) {\n that.creator = target.getId()\n }\n if (!that.owner || that.owner === source.getId()) {\n that.owner = target.getId()\n }\n }\n return that\n}\n","export function isConvertibleToNumber(value) {\n return value !== null\n && value !== undefined\n && typeof value !== 'boolean'\n && String(value).trim() !== ''\n && !isNaN(Number(value))\n}\n","// keys can be array or object or string\nfunction getValueByKeys(keys, data) {\n let _keys = keys\n let _data = data\n if (typeof keys === 'string') {\n _keys = _keys.split('.')\n }\n if (!Array.isArray(keys) && typeof keys === 'object') {\n const { keys: keyArr, obj } = keys\n _keys = keyArr\n _data = obj\n }\n if (_keys.length === 0) {\n return _data\n }\n const firstKey = _keys.shift()\n if (_data && Object.prototype.hasOwnProperty.call(_data, firstKey)) {\n return getValueByKeys(_keys, _data[firstKey])\n }\n if (_data && firstKey) {\n if (_keys.length > 0) {\n return getValueByKeys(_keys, _data[firstKey])\n }\n return _data[firstKey]\n }\n return _data\n}\nexport default {\n getValueByKeys\n}\nexport {\n getValueByKeys\n}\n","function expandDotNotation(obj) {\n const result = {}\n\n for (const [key, value] of Object.entries(obj)) {\n // Use pipe | for Excel-friendly type annotations\n const typeMatch = key.match(/^(.*?)\\|(boolean|date|html|number|string)$/)\n\n let actualKey = key\n let type = null\n\n if (typeMatch) {\n actualKey = typeMatch[1] // The path without type annotation\n type = typeMatch[2] // The type\n }\n\n const keys = actualKey.split('.')\n let current = result\n\n // Create nested structure\n for (let i = 0; i < keys.length - 1; i++) {\n const part = keys[i]\n if (!current[part] || typeof current[part] !== 'object') {\n current[part] = {}\n }\n current = current[part]\n }\n\n const lastKey = keys[keys.length - 1]\n\n // Convert value based on type\n if (type === 'boolean') {\n // Handle various Excel boolean representations\n if (value === 1 || value === '1' || value === true || value === 'true' || value === 'TRUE') {\n current[lastKey] = true\n } else if (value === 0 || value === '0' || value === false || value === 'false' || value === 'FALSE') {\n current[lastKey] = false\n } else {\n current[lastKey] = Boolean(value)\n }\n } else if (type === 'number') {\n current[lastKey] = Number(value) || 0\n } else if (type === 'date') {\n current[lastKey] = new Date(value)\n } else if (type === 'html') {\n // Handle HTML type: intelligently detect paragraph breaks\n if (value && typeof value === 'string') {\n let paragraphs = []\n\n // Try to detect paragraph breaks - first check for double newlines (common in rich text)\n if (value.includes('\\n\\n') || value.includes('\\r\\n\\r\\n')) {\n // Double newlines indicate distinct paragraphs\n paragraphs = value.split(/\\r?\\n\\s*\\r?\\n/).filter(p => p.trim() !== '')\n } else {\n // Single newlines - treat each line as a separate paragraph\n paragraphs = value.split(/\\r?\\n/).filter(p => p.trim() !== '')\n }\n\n if (paragraphs.length > 0) {\n // Wrap each paragraph in <div> tags\n current[lastKey] = paragraphs.map(p => `<div>${p.trim()}</div>`).join('')\n } else {\n // If no paragraphs after filtering, use the original string wrapped in a single div\n current[lastKey] = value ? `<div>${value}</div>` : ''\n }\n } else {\n // Convert non-string values to string and wrap\n current[lastKey] = value ? `<div>${value.toString()}</div>` : ''\n }\n } else {\n // Default: auto-detect if value is numeric\n if (value === null || value === undefined) {\n current[lastKey] = ''\n } else if (typeof value === 'number') {\n // Already a number\n current[lastKey] = value\n } else if (typeof value === 'string' && value.trim() !== '') {\n // Check if string is numeric (integer or decimal)\n const trimmed = value.trim()\n // Regular expression for numbers: optional negative sign, digits, optional decimal part\n if (/^-?\\d+$/.test(trimmed)) {\n // Integer\n current[lastKey] = Number.parseInt(trimmed, 10)\n } else if (/^-?\\d+\\.\\d+$/.test(trimmed)) {\n // Decimal\n current[lastKey] = Number.parseFloat(trimmed)\n } else {\n // Regular string\n current[lastKey] = value\n }\n } else {\n // Convert anything else to string\n current[lastKey] = value?.toString() || ''\n }\n }\n }\n\n return result\n}\n\nfunction get(obj, path) {\n const parts = path.split('.')\n return parts.reduce((acc, part) => {\n if (part.endsWith('[]')) {\n // 处理数组遍历\n const key = part.slice(0, -2) // 去掉 '[]' 得到属性名\n if (Array.isArray(acc[key])) {\n return acc[key] // 返回整个数组\n }\n return [] // 如果不是数组,返回空数组\n }\n if (part.includes('[') && part.includes(']')) {\n // 处理数组索引\n const arrayMatch = part.match(/(\\w+)\\[(\\d+)\\]/)\n if (arrayMatch) {\n const key = arrayMatch[1]\n const index = arrayMatch[2]\n return acc && acc[key] && acc[key][index]\n }\n } else if (acc && Array.isArray(acc)) {\n // 如果当前值是数组,提取每个对象的指定属性\n return acc.map((item) => item[part])\n } else {\n // 处理普通属性\n return acc && acc[part]\n }\n }, obj)\n}\n\nfunction getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined\n }, obj)\n}\n\nfunction isPlainObject(value) {\n return (\n value !== null\n && typeof value === 'object'\n && !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp) &&\n // Optional: exclude other built-in objects\n Object.prototype.toString.call(value) === '[object Object]'\n )\n}\n\nfunction merge(target, ...sources) {\n if (!sources.length)\n return target\n\n const source = sources.shift() // 取出第一个源对象\n\n if (_isObject(target) && _isObject(source)) {\n for (const key in source) {\n if (_isObject(source[key])) {\n if (!target[key]) {\n // 如果目标对象没有该属性,创建一个空对象\n target[key] = {}\n }\n // 递归合并\n merge(target[key], source[key])\n } else {\n // 直接覆盖\n target[key] = source[key]\n }\n }\n }\n\n // 继续合并剩余的源对象\n return merge(target, ...sources)\n}\n\nfunction set(obj, path, value) {\n const parts = path.split('.')\n let current = obj\n\n // 处理所有中间部分\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n let key, index\n\n // 检查是否是数组索引格式,如key[0]\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/)\n if (arrayMatch) {\n key = arrayMatch[1]\n index = Number.parseInt(arrayMatch[2], 10)\n // 确保当前层级的数组存在\n if (!current[key] || !Array.isArray(current[key])) {\n current[key] = []\n }\n // 扩展数组到足够大\n while (current[key].length <= index) {\n current[key].push(undefined)\n }\n // 如果当前位置未定义或为null,初始化为对象\n if (current[key][index] == null) {\n current[key][index] = {}\n }\n current = current[key][index]\n } else {\n // 处理普通属性\n if (!current[part]) {\n current[part] = {}\n }\n current = current[part]\n }\n }\n\n // 处理最后一部分\n const lastPart = parts[parts.length - 1]\n const arrayMatch = lastPart.match(/^(\\w+)\\[(\\d+)\\]$/)\n if (arrayMatch) {\n const key = arrayMatch[1]\n const index = Number.parseInt(arrayMatch[2], 10)\n // 确保数组存在\n if (!current[key] || !Array.isArray(current[key])) {\n current[key] = []\n }\n // 扩展数组到所需索引\n while (current[key].length <= index) {\n current[key].push(undefined)\n }\n current[key][index] = value\n } else {\n current[lastPart] = value\n }\n}\n\nfunction _isObject(obj) {\n return obj && typeof obj === 'object' && !Array.isArray(obj)\n}\n\nconst objectHelper = {\n expandDotNotation,\n get,\n getNestedValue,\n isPlainObject,\n merge,\n set,\n}\n\nexport {\n objectHelper\n}\n","import { objectHelper } from '../../helpers/objectHelper/index.js'\n\nclass KeyValueObject {\n constructor(options = {}) {\n options = options || {}\n this.key = options.key || null\n this.value = (typeof options.value !== 'undefined') ? options.value : ''\n }\n\n // Class methods\n static init(options = {}) {\n if (options instanceof this) {\n return options\n }\n const instance = new this(options)\n return instance.isValid ? instance : null\n }\n static initFromArray(arr = []) {\n if (Array.isArray(arr)) {\n return arr.map((a) => this.init(a))\n }\n return []\n }\n static initOnlyValidFromArray(arr = []) {\n return this.initFromArray(arr).filter((i) => i)\n }\n static get _classname() {\n return 'KeyValueObject'\n }\n static get _superclass() {\n return 'KeyValueObject'\n }\n\n static addItem(arr, key, value) {\n arr.push(this.init({ key, value }))\n }\n static addRecord(arr = [], key, value) {\n if (!this.hasKeyValue(arr, key, value)) {\n arr.push(this.init({ key, value }))\n }\n return arr\n }\n static appendRecord(arr = [], key, value) {\n return arr.map((item) => {\n if (this.sameKey(item, key)) {\n item.value = [...item.value, ...value]\n }\n return item\n })\n }\n static appendValueArray(arr = [], key, value) {\n return arr.map((item) => {\n if (this.sameKey(item, key)) {\n item.value = [...item.value, ...value]\n }\n return item\n })\n }\n static foundByKey(arr = [], key) {\n const found = arr.find((m) => {\n return this.sameKey(m, key)\n })\n return found || null\n }\n static foundValueByKey(arr = [], key) {\n const found = this.foundByKey(arr, key)\n return found ? found.value : null\n }\n static fromObject(options = {}) {\n return Object.keys(options).reduce((acc, key) => {\n acc.push(this.init({ key, value: options[key] }))\n return acc\n }, [])\n }\n static getValueByKey(arr = [], key) {\n return this.foundValueByKey(arr, key)\n }\n static getMetadataValueByKeyAsArray(arr = [], key) {\n const _value = this.getValueByKey(arr, key)\n if (!_value) {\n return []\n }\n if (objectHelper.isPlainObject(_value)) {\n return Object.keys(_value).reduce((acc, key) => {\n acc.push({ key, value: _value[key] })\n return acc\n }, [])\n }\n return _value\n }\n static getValueByKeyFromArray(arr = [], key) {\n if (arr.length === 0) {\n return null\n }\n const firstArr = arr.shift()\n const found = firstArr.find((i) => {\n return this.sameKey(i, key)\n })\n if (found && found.value) {\n return found.value\n }\n return this.getValueByKeyFromArray(arr, key)\n }\n static getValuesByKey(arr = [], key) {\n return arr.reduce((acc, item) => {\n if (this.sameKey(item, key)) {\n acc.push(item.value)\n }\n return acc\n }, [])\n }\n static hasKeyValue(arr = [], key, value) {\n if (typeof value === 'undefined') {\n return arr.filter((item) => this.sameKey(item, key)).length > 0\n }\n return arr.filter((item) => (this.sameKey(item, key) && _isSame(item.value, value))).length > 0\n }\n static insertOrUpdateRecord(arr = [], key, value) {\n let copy = [...arr]\n if (!this.hasKeyValue(arr, key)) {\n copy.push(this.init({ key, value }))\n } else {\n copy = this.updateRecord(arr, key, value)\n }\n return copy\n }\n static keys(arr = []) {\n if (Array.isArray(arr)) {\n return arr.reduce((acc, item) => {\n acc.push(item.key)\n return acc\n }, [])\n }\n return []\n }\n static mapToKeyValue(arr = [], keyPath = 'key', valuePath = 'value') {\n if (!Array.isArray(arr)) {\n return []\n }\n return arr.reduce((acc, item) => {\n if (item && typeof item === 'object') {\n // Use objectHelper.get to support nested paths\n const key = objectHelper.get(item, keyPath)\n const value = objectHelper.get(item, valuePath)\n\n // Only add if key exists (isValid condition)\n if (key !== undefined && key !== null) {\n acc.push(this.init({\n key,\n value: value !== undefined ? value : ''\n }))\n }\n }\n return acc\n }, [])\n }\n static merge(toArr, fromArr) {\n (fromArr || []).map((from) => {\n const found = toArr.find((to) => {\n return to.key === from.key\n })\n if (found) {\n found.value = _mergeValues(from.value, found.value)\n } else {\n toArr.push(from)\n }\n })\n return toArr\n }\n static removeByKey(arr, key) {\n return arr.reduce((acc, item) => {\n if (!this.sameKey(item, key)) {\n acc.push(item)\n }\n return acc\n }, [])\n }\n static removeByKeys(arr, keys) {\n return arr.reduce((acc, item) => {\n if (!keys.includes(item.key)) {\n acc.push(item)\n }\n return acc\n }, [])\n }\n static sameKey(item, key) {\n if (item) {\n return _isSame(item.key, key)\n }\n return false\n }\n static toObject(arr = []) {\n if (Array.isArray(arr)) {\n return arr.reduce((acc, item) => {\n acc[item.key] = item.value\n return acc\n }, {})\n }\n return {}\n }\n static toString(arr = [], delimiter = '; ') {\n if (Array.isArray(arr)) {\n return arr.reduce((acc, item) => {\n acc.push(`${item.key}: ${item.value}`)\n return acc\n }, []).join(delimiter)\n }\n return ''\n }\n static updateRecord(arr = [], key, value) {\n return arr.map((item) => {\n if (this.sameKey(item, key)) {\n return {\n ...item,\n value\n }\n }\n return item\n })\n }\n static updateOrInsertRecord(arr = [], key, value) {\n return this.insertOrUpdateRecord(arr, key, value)\n }\n static updateRecordsFromArray(arr = [], updateArr = []) {\n if (Array.isArray(arr) && Array.isArray(updateArr)) {\n const obj1 = this.toObject(arr)\n const obj2 = this.toObject(updateArr)\n return this.fromObject({\n ...obj1,\n ...obj2\n })\n }\n return []\n }\n static values(arr = []) {\n if (Array.isArray(arr)) {\n return arr.reduce((acc, item) => {\n acc.push(item.value)\n return acc\n }, [])\n }\n return []\n }\n\n // getters\n get isValid() {\n return !!this.key\n }\n\n get toObject() {\n const obj = {}\n if (this.isValid) {\n obj[this.key] = this.value\n }\n return obj\n }\n}\n\nfunction _mergeValues(existingValue, newValue) {\n if (existingValue === undefined)\n return newValue\n\n // Handle arrays by concatenating\n if (Array.isArray(existingValue) && Array.isArray(newValue)) {\n return [...new Set([...existingValue, ...newValue])]\n }\n\n // Handle objects by merging\n if (typeof existingValue === 'object' && typeof newValue === 'object'\n && !Array.isArray(existingValue) && !Array.isArray(newValue)) {\n return { ...existingValue, ...newValue }\n }\n\n // // Handle numbers by adding\n // if (typeof existingValue === 'number' && typeof newValue === 'number') {\n // return existingValue\n // }\n\n // // Handle strings by concatenating\n // if (typeof existingValue === 'string' && typeof newValue === 'string') {\n // return existingValue\n // }\n\n // Default: use the new value\n return newValue\n}\n\nfunction _isSame(key1, key2) {\n return key1 === key2\n}\n\nexport {\n KeyValueObject\n}\n","import { isConvertibleToNumber } from '../isConvertibleToNumber/index.js'\nimport { getValueByKeys } from '../getValueByKeys/index.js'\nimport { KeyValueObject as _KeyValueObject } from '../../models/keyValueObject/index.js'\n\nfunction getValidation(rule, data, getDataByKey = _getDataByKey, KeyValueObject = _KeyValueObject) {\n if (!rule) {\n return true\n }\n if (typeof getDataByKey !== 'function' || (KeyValueObject && typeof KeyValueObject !== 'function')) {\n return false\n }\n const { key = '', value, placeholder, keyValuePath = '' } = rule\n const [valueAttribute] = Object.keys(value)\n\n if (!key && typeof placeholder === 'undefined') {\n switch (valueAttribute) {\n case '$and': {\n return value.$and.reduce((acc, item) => (acc && getValidation(item, data, getDataByKey, KeyValueObject)), true)\n }\n case '$or': {\n return value.$or.reduce((acc, item) => (acc || getValidation(item, data, getDataByKey, KeyValueObject)), false)\n }\n default:\n return false\n }\n }\n let rowValue = typeof placeholder === 'undefined' ? getDataByKey(key, data) : placeholder\n\n // if KeyValue object\n if (keyValuePath) {\n const rowValueData = KeyValueObject.toObject(rowValue)\n rowValue = getDataByKey(keyValuePath, rowValueData)\n }\n\n switch (valueAttribute) {\n case '$after': {\n if (isConvertibleToNumber(value?.$after)) {\n const _value = Number(String(value?.$after))\n return Date.now() > _value\n }\n return false\n }\n case '$before': {\n if (isConvertibleToNumber(value?.$before)) {\n const _value = Number(String(value?.$before))\n return Date.now() < _value\n }\n return false\n }\n case '$empty': {\n const isEmpty = rowValue === null || rowValue === undefined\n return isEmpty === value.$empty\n }\n case '$eq': {\n return rowValue === value.$eq\n }\n case '$gt': {\n return rowValue > value.$gt\n }\n case '$gte': {\n return rowValue >= value.$gte\n }\n case '$hasOverlap': {\n return _hasOverlap(rowValue, value.$hasOverlap)\n }\n case '$lt': {\n return rowValue < value.$lt\n }\n case '$lte': {\n return rowValue <= value.$lte\n }\n case '$in': {\n if (Array.isArray(rowValue)) {\n return !!rowValue.find((e) => (value.$in.includes(e)))\n }\n if (typeof rowValue !== 'object') {\n return !!value.$in.includes(rowValue)\n }\n return false\n }\n case '$includes': {\n if (Array.isArray(rowValue)) {\n return rowValue.includes(value.$includes)\n }\n return false\n }\n case '$intervalTimeGt': {\n const now = new Date().getTime()\n const timestamp = new Date(rowValue).getTime()\n return (now - timestamp) > value.$intervalTimeGt\n }\n case '$intervalTimeLt': {\n const now = new Date().getTime()\n const timestamp = new Date(rowValue).getTime()\n return (now - timestamp) < value.$intervalTimeLt\n }\n case '$inValue': {\n const result = getDataByKey(value.$inValue, data)\n const _value = Array.isArray(result) ? result : []\n if (Array.isArray(rowValue)) {\n return !!rowValue.find((e) => (_value.includes(e)))\n }\n if (typeof rowValue === 'string') {\n return !!_value.includes(rowValue)\n }\n return false\n }\n case '$isToday': {\n const currentDate = new Date()\n const start = currentDate.setHours(0, 0, 0, 0)\n const end = currentDate.setHours(23, 59, 59, 59)\n const dateValue = new Date(rowValue).getTime()\n return (start <= dateValue && end >= dateValue) === value.$isToday\n }\n case '$ne': {\n return rowValue !== value.$ne\n }\n case '$notIn': {\n if (Array.isArray(rowValue)) {\n return !rowValue.find((e) => (value.$notIn.includes(e)))\n }\n if (typeof rowValue !== 'object') {\n return !value.$notIn.includes(rowValue)\n }\n return false\n }\n case '$notInValue': {\n const result = getDataByKey(value.$notInValue, data)\n const _value = Array.isArray(result) ? result : []\n if (Array.isArray(rowValue)) {\n return !rowValue.find((e) => (_value.includes(e)))\n }\n if (typeof rowValue !== 'object') {\n return !_value.includes(rowValue)\n }\n return false\n }\n case '$range': {\n const [min, max] = value.$range\n if (typeof min === 'number' && typeof max === 'number' && rowValue >= min && rowValue <= max) {\n return true\n }\n return false\n }\n default:\n return false\n }\n}\n\nfunction _getDataByKey(key, data) {\n return getValueByKeys(key.split('.'), data)\n}\n\nfunction _hasOverlap(item1, item2) {\n let arr1 = item1\n let arr2 = item2\n if (typeof arr1 === 'string') {\n arr1 = arr1.split(',')\n }\n if (typeof arr2 === 'string') {\n arr2 = arr2.split(',')\n }\n const set1 = new Set(arr1)\n return arr2.find((i) => (set1.has(i)))\n}\n\nexport default {\n getValidation\n}\nexport {\n getValidation\n}\n","function formatDate(date, format) {\n const _date = date && date instanceof Date ? date : new Date(date)\n const dayMapChi = ['日', '一', '二', '三', '四', '五', '六']\n const dayMapEng = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n const dayMapEngShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n const _format = format || 'YYYY/MM/DD hh:mm'\n const e = _date.getDay()\n const ee = dayMapEngShort[e]\n const eee = dayMapChi[e]\n const eeee = dayMapEng[e]\n const y = _date.getFullYear()\n const m = _date.getMonth() + 1\n const d = _date.getDate()\n const h = _date.getHours()\n const mm = _date.getMinutes()\n const s = _date.getSeconds()\n\n return _format.replace('YYYY', y)\n .replace('MM', padding(m))\n .replace('MM', padding(m))\n .replace('DD', padding(d))\n .replace('hh', padding(h))\n .replace('mm', padding(mm))\n .replace('ss', padding(s))\n .replace('M', m)\n .replace('D', d)\n .replace('h', h)\n .replace('m', mm)\n .replace('s', s)\n .replace('EEEE', padding(eeee))\n .replace('EEE', padding(eee))\n .replace('EE', padding(ee))\n .replace('E', padding(e))\n}\n\nfunction padding(m) {\n return m < 10 ? `0${m}` : m\n}\n\nexport default {\n formatDate\n}\nexport {\n formatDate\n}\n","const TEMPLATE_COMPILER_EXCEPTION_TYPE = {\n argumentEmptyException: 'Argument is empty',\n argumentFormatException: 'Incorrect number or format of argument',\n invalidFuntionException: 'Function Name is invalid',\n invalidRegExpException: 'Invalid regular expression',\n isNotAFunctionException: 'Is not a function',\n notExistException: 'Key does not exist',\n resultEmptyException: 'Result is empty',\n resultMoreThanOneException: 'More than one result'\n}\n\nclass TemplateCompilerException extends Error {\n constructor(message) {\n super(message)\n this.message = message\n }\n}\n\nexport {\n TEMPLATE_COMPILER_EXCEPTION_TYPE,\n TemplateCompilerException,\n}\n","const _EMPTY = '_EMPTY'\nconst _FN_NAMES = [\n 'concatIf',\n 'divide',\n 'eq',\n 'exec',\n 'filterAll',\n 'filterOne',\n 'formatDate',\n 'get',\n 'gt',\n 'gte',\n 'isEmpty',\n 'isNotEmpty',\n 'join',\n 'lt',\n 'lte',\n 'map',\n 'neq',\n 'removeHtml',\n 'replaceChar',\n 'sum',\n 'toLowerCase',\n 'toUpperCase',\n]\nconst _HIDE = '_HIDE'\nconst _NOT_EMPTY = '_NOT_EMPTY'\nconst _SELF = '_SELF'\nconst TAGS_EJS = ['<%=', '%>']\nconst TAGS_HANDLEBAR = ['{{', '}}']\n\nexport {\n _EMPTY,\n _FN_NAMES,\n _HIDE,\n _NOT_EMPTY,\n _SELF,\n TAGS_EJS,\n TAGS_HANDLEBAR,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _EMPTY,\n _HIDE,\n _NOT_EMPTY,\n} from '../constants.js'\n\nfunction _concatIf(data, args) {\n if (typeof data !== 'string') {\n throw new TemplateCompilerException(`_concatIf: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: the data must be string :${data.join(', ')}`)\n }\n if (args.length !== 3) {\n throw new TemplateCompilerException(`_concatIf: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n const [condition, success, failover] = args\n const validConditions = [_EMPTY, _NOT_EMPTY]\n if (validConditions.includes(condition) || success.length !== 2) {\n throw new TemplateCompilerException(`concatIf: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentEmptyException}: ${condition}, ${success}`)\n }\n if (data === '' && failover.includes(_HIDE)) {\n return ''\n }\n if (data !== '' && (data !== null || data !== undefined) && failover.includes(_HIDE)) {\n return `${success[0]}${data}${success[success.length - 1]}`\n }\n return failover\n}\n\nexport {\n _concatIf,\n}\n","function _divide(value, divisor) {\n try {\n if (Number.isNaN(value)) {\n return value\n }\n return (value / divisor)\n } catch (e) {\n throw e\n }\n}\n\nexport {\n _divide,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _eq(data, args) {\n if (args.length !== 3) {\n throw new TemplateCompilerException(`eq: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n const expected = args[0]\n return data === expected ? args[1] : args[2]\n}\n\nexport {\n _eq,\n}\n","function _exec(data, args) {\n try {\n const [methodName, ..._args] = args\n return data[methodName](..._args)\n } catch (e) {\n throw e\n }\n}\n\nexport {\n _exec\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\nimport { getValueByKeys } from '../../../helpers/getValueByKeys/index.js'\n\n// const DELIMITER = '~~~'\n\nfunction _filterAll(data, args) {\n try {\n if (!Array.isArray(args) || args.length === 0) {\n throw new TemplateCompilerException(TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentEmptyException)\n }\n if (!Array.isArray(data) || data.length === 0) {\n return []\n }\n if (typeof data[0] === 'object') {\n return _existObject(data, args)\n }\n if (typeof data[0] === 'string' || typeof data[0] === 'number') {\n return _exist(data, args)\n }\n return []\n } catch (e) {\n throw e\n }\n}\n\nfunction _exist(data, args) {\n const _args = args.flat()\n return data.filter((e) => _args.some((arg) => _performOperation(arg, e)))\n}\n\nfunction _existObject(data, args) {\n if (args.length === 1) {\n const arg = args[0]\n return data.filter((e) => {\n if (arg.includes('.')) {\n return getValueByKeys(arg.split('.'), e)\n }\n return Object.prototype.hasOwnProperty.call(e, arg)\n })\n }\n\n if (args.length > 2) {\n let res = data\n for (let i = 0; i < args.length; i += 2) {\n const group = [args[i], args[i + 1]]\n res = _existObject(res, group)\n }\n return res\n }\n\n const [key, ..._argsArr] = args\n const _args = _argsArr.flat()\n return data.filter((e) => {\n const value = key.includes('.') ? getValueByKeys(key.split('.'), e) : e[key]\n return _args.some((arg) => _performOperation(arg, value))\n })\n}\n\nfunction _performOperation(arg, value) {\n // the arg is undefined\n if (arg === undefined && value === undefined)\n return true\n\n // the arg is null\n if (arg === null && value === null)\n return true\n\n // the arg is boolean\n if (typeof arg === 'boolean') {\n return arg === value\n }\n\n // the arg is blank or *: Blank => Empty, * => Not Empty\n if (arg === '' || arg === '*') {\n // null and undefined are not included in either case\n if (value === null || value === undefined) {\n return false\n }\n if (typeof value === 'string') {\n return arg === '' ? value === '' : value !== ''\n }\n if (Array.isArray(value)) {\n return arg === '' ? value.length === 0 : value.length !== 0\n }\n return arg !== ''\n }\n\n // the arg is alphabetic or number\n if (_isPureStringOrNumber(arg)) {\n return arg === value\n }\n\n // the arg is array of [] or [*]: [] => Empty, [*] => Not Empty\n if (arg.startsWith('[') && arg.endsWith(']')) {\n if (arg === '[]') {\n return Array.isArray(value) && value.length === 0\n }\n if (arg === '[*]') {\n return Array.isArray(value) && value.length !== 0\n }\n return false\n }\n\n // the arg is 'operator + string | number'\n const { operator, value: argValue } = _splitOperator(arg)\n if (!operator || (argValue !== 0 && !argValue)) {\n return false\n }\n switch (operator) {\n case '>':\n return value > argValue\n case '<':\n return value < argValue\n case '!=':\n return value !== argValue\n case '>=':\n return value >= argValue\n case '<=':\n return value <= argValue\n default:\n return false\n }\n}\n\nfunction _isPureStringOrNumber(input) {\n if (typeof input === 'string') {\n if (input.startsWith('[') && input.endsWith(']')) {\n return false\n }\n if (/!=|>=|<=|>|</.test(input)) {\n return false\n }\n return true\n }\n return !Number.isNaN(input)\n}\n\nfunction _splitOperator(str) {\n const operators = ['!=', '>=', '<=', '>', '<']\n\n const matchedOp = operators.find((op) => str.startsWith(op))\n if (!matchedOp)\n return { operator: null, value: null }\n\n const remaining = str.slice(matchedOp.length)\n\n // '>Primary' or '<Primary' is invalid\n if (/^[a-z]*$/i.test(remaining) && matchedOp !== '!=') {\n return { operator: null, value: null }\n }\n\n // if it is a number it is converted to a number\n const value = (!Number.isNaN(Number.parseFloat(remaining)) && !Number.isNaN(remaining)) ? Number(remaining) : remaining\n\n return {\n operator: matchedOp,\n value\n }\n}\n\nexport {\n _filterAll\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\nimport { _filterAll } from './_filterAll.js'\n\nfunction _filterOne(data, args) {\n try {\n const list = _filterAll(data, args)\n if (list.length === 1) {\n return list[0]\n }\n if (list.length === 0) {\n return null\n }\n throw new TemplateCompilerException(TEMPLATE_COMPILER_EXCEPTION_TYPE.resultMoreThanOneException)\n } catch (e) {\n throw e\n }\n}\n\nexport {\n _filterOne\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nfunction _formatDate(timestamp, format) {\n if (format.length === 0) {\n throw new TemplateCompilerException(`_formateDate: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: format parts must be not empty array`)\n }\n\n if (timestamp === null || timestamp === undefined) {\n return null\n }\n\n const date = new Date(timestamp)\n\n const partsMap = {\n yyyy: String(date.getFullYear()),\n mm: String(date.getMonth() + 1).padStart(2, '0'),\n dd: String(date.getDate()).padStart(2, '0')\n }\n\n // Check for invalid format tokens\n const validTokens = ['yyyy', 'mm', 'dd']\n const invalidTokens = format.filter((part) => part.length > 1 && !validTokens.includes(part))\n\n if (invalidTokens.length > 0) {\n throw new TemplateCompilerException(\n `_formateDate: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: the format type is not valid: ${format.join(', ')}`\n )\n }\n\n // Build the formatted string using reduce\n return format.reduce((result, part) => result + (partsMap[part] || part), '')\n}\n\nexport {\n _formatDate,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nfunction _get(data, key, failover = null) {\n try {\n if (key === null || (typeof key === 'undefined') || key === '') {\n throw new TemplateCompilerException(TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentEmptyException)\n }\n if (data === null) {\n return null\n }\n if (key.includes('.')) {\n const parts = key.split('.')\n if (parts.length > 1) {\n const first = parts.shift()\n const remainingKey = parts.join('.')\n if (typeof data[first] !== 'undefined') {\n return _get(data[first], remainingKey, failover)\n }\n return _handleFailover(key, failover)\n }\n }\n if (typeof data[key] !== 'undefined') {\n return data[key]\n }\n return _handleFailover(key, failover)\n } catch (e) {\n throw e\n }\n}\n\nfunction _handleFailover(key, failover) {\n if (failover !== null) {\n return failover\n }\n return null\n // throw new TemplateCompilerException(`Key \"${key}\" does not exist and no failover`)\n}\n\nexport {\n _get,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _gt(data, args) {\n if (args.length !== 3) {\n throw new TemplateCompilerException(`_gt: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n const expected = args[0]\n return data > expected ? args[1] : args[2]\n}\n\nexport {\n _gt,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _gte(data, args) {\n if (args.length !== 3) {\n throw new TemplateCompilerException(`_gte: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n const expected = args[0]\n return data >= expected ? args[1] : args[2]\n}\n\nexport {\n _gte,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _isEmpty(data, args) {\n if (args.length !== 2) {\n throw new TemplateCompilerException(`_isEmpty: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n // if (data === null || (typeof data === 'undefined')) {\n // return null\n // }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n if (data !== null && typeof data === 'object' && Object.keys(data).length === 0) {\n return args[0]\n }\n return (data === '' || data === null || data === undefined || data.length === 0) ? args[0] : args[1]\n}\n\nexport {\n _isEmpty,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _isNotEmpty(data, args) {\n if (args.length !== 2) {\n throw new TemplateCompilerException(`_isNotEmpty: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n // if (data === null || (typeof data === 'undefined')) {\n // return null\n // }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n if (data !== null && typeof data === 'object' && Object.keys(data).length === 0) {\n return args[1]\n }\n if (Array.isArray(data) && data.length === 0) {\n return args[1]\n }\n if (typeof data === 'string' && data === '') {\n return args[1]\n }\n if (data === null || data === undefined) {\n return args[1]\n }\n return args[0]\n}\n\nexport {\n _isNotEmpty,\n}\n","function _join(data, delimiter) {\n try {\n if (data.length === 0)\n return ''\n if (data.length === 1)\n return _stringifyObject(data[0])\n return data.map((item) => _stringifyObject(item)).join(delimiter)\n } catch (e) {\n throw e\n }\n}\n\nfunction _stringifyObject(obj) {\n return JSON.stringify(obj).replace(/\"([^\"]+)\":/g, '$1: ').replace(/\"([^\"]+)\"/g, '$1').replace(/,/g, ', ')\n}\n\nexport {\n _join,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _lt(data, args) {\n if (args.length !== 3) {\n throw new TemplateCompilerException(`_lt: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n const expected = args[0]\n return data < expected ? args[1] : args[2]\n}\n\nexport {\n _lt,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _lte(data, args) {\n if (args.length !== 3) {\n throw new TemplateCompilerException(`_lte: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n const expected = args[0]\n return data <= expected ? args[1] : args[2]\n}\n\nexport {\n _lte,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\nimport { _get } from './_get.js'\n\nfunction _map(data, args) {\n try {\n if (args.length === 0) {\n throw new TemplateCompilerException(TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentEmptyException)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n\n const result = data.reduce((acc, item) => {\n if (args.length === 1 && Array.isArray(args[0])) {\n args = args[0]\n acc.hasFormat = true\n }\n const list = args.map((key) => {\n if (key.includes('.')) {\n const parts = key.split('.')\n const first = parts[0]\n parts.shift()\n const remainingKey = parts.join('.')\n return _get(item[first], remainingKey)\n }\n if (typeof item[key] !== 'undefined') {\n return item[key]\n }\n return null\n })\n if (acc.hasFormat) {\n acc.content.push(list)\n } else {\n acc.content = acc.content.concat(list)\n }\n return acc\n }, {\n content: [],\n hasFormat: false\n })\n return result.content\n } catch (e) {\n throw e\n }\n}\n\nexport {\n _map,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nimport {\n _SELF,\n} from '../constants.js'\n\nfunction _neq(data, args) {\n if (args.length !== 3) {\n throw new TemplateCompilerException(`_neq: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined')) {\n return null\n }\n if (args.includes(_SELF)) {\n args = args.map((arg) => {\n return (arg === _SELF) ? data : arg\n })\n }\n const expected = args[0]\n return data !== expected ? args[1] : args[2]\n}\n\nexport {\n _neq,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nfunction _removeHtml(html, args) {\n if (html === null || html === undefined) {\n return null\n }\n if (!Array.isArray(args)) {\n throw new TemplateCompilerException(`_removeHtml: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: args parts must be array`)\n }\n\n return _htmlToPlainText(html, args[0])\n}\n\nfunction _htmlToPlainText(html, delimiter = '\\n') {\n if (typeof delimiter !== 'string') {\n delimiter = '\\n' // Fallback to default if not a string\n }\n\n // First decode HTML entities and normalize whitespace\n const decodedHtml = html\n .replace(/&nbsp;/g, ' ')\n .replace(/\\s+/g, ' ') // Collapse all whitespace to single spaces\n\n // Process HTML tags\n let text = decodedHtml\n // Replace block tags with temporary marker (~~~)\n .replace(/<\\/?(p|div|h[1-6]|ul|ol|li|pre|section|article|table|tr|td|th)(\\s[^>]*)?>/gi, '~~~')\n // Replace <br> tags with temporary marker (~~~)\n .replace(/<br\\s*\\/?>/gi, '~~~')\n // Remove all other tags\n .replace(/<[^>]+>/g, '')\n // Convert markers to specified delimiter\n .replace(/~{3,}/g, delimiter)\n // Trim and clean whitespace\n .trim()\n\n // Special handling for empty delimiter\n if (delimiter === '') {\n // Collapse all whitespace to single space\n text = text.replace(/\\s+/g, ' ')\n } else {\n // Collapse multiple delimiters to single\n text = text.replace(new RegExp(`${escapeRegExp(delimiter)}+`, 'g'), delimiter)\n // Remove leading/trailing delimiters\n text = text.replace(new RegExp(`^${escapeRegExp(delimiter)}|${escapeRegExp(delimiter)}$`, 'g'), '')\n }\n\n return text\n}\n\nfunction escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nexport {\n _removeHtml,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nfunction _replaceChar(str, args) {\n if (str === null || str === undefined) {\n return null\n }\n if (!Array.isArray(args)) {\n throw new TemplateCompilerException(`_replaceChar: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: args parts must be array`)\n }\n\n return _findAndReplace(str, args[0], args[1])\n}\n\nfunction _findAndReplace(str, find, replace) {\n if (!str || !find) {\n return str\n }\n\n return str.replace(new RegExp(find, 'g'), replace)\n}\n\nexport {\n _replaceChar,\n}\n","function _sum(data, args) {\n if (Number.isNaN(data) || data === null || (typeof data === 'undefined') || data === '') {\n return data\n }\n return args.reduce((acc, e) => (acc + e), data)\n}\n\nexport {\n _sum,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nfunction _toLowerCase(data, args) {\n if (args !== undefined) {\n throw new TemplateCompilerException(`_toLowerCase: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined') || typeof data !== 'string') {\n return null\n }\n return String(data).toLowerCase()\n}\n\nexport {\n _toLowerCase,\n}\n","import { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from '../templateCompilerException.js'\n\nfunction _toUpperCase(data, args) {\n if (typeof data !== 'string') {\n throw new TemplateCompilerException(`_toUpperCase: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: the data must be string: ${data}`)\n }\n if (args !== undefined) {\n throw new TemplateCompilerException(`_toUpperCase: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException}: the argument must be empty: ${args.join(', ')}`)\n }\n if (data === null || (typeof data === 'undefined') || typeof data !== 'string') {\n return null\n }\n return String(data).toUpperCase()\n}\n\nexport {\n _toUpperCase,\n}\n","import {\n _concatIf,\n _divide,\n _eq,\n _exec,\n _filterAll,\n _filterOne,\n _formatDate,\n _get,\n _gt,\n _gte,\n _isEmpty,\n _isNotEmpty,\n _join,\n _lt,\n _lte,\n _map,\n _neq,\n _removeHtml,\n _replaceChar,\n _sum,\n _toLowerCase,\n _toUpperCase,\n} from './helpers/index.js'\nimport {\n _FN_NAMES,\n TAGS_EJS,\n TAGS_HANDLEBAR,\n} from './constants.js'\nimport { TEMPLATE_COMPILER_EXCEPTION_TYPE, TemplateCompilerException } from './templateCompilerException.js'\n\nclass TemplateCompiler {\n constructor(data) {\n this.data = data\n }\n static init(options) {\n return new this(options)\n }\n static initFromArray(arr = []) {\n if (Array.isArray(arr)) {\n return arr.map((a) => this.init(a))\n }\n return []\n }\n static initOnlyValidFromArray(arr = []) {\n return this.initFromArray(arr).filter((i) => i)\n }\n static concatIf(data, args) {\n return _concatIf(data, args)\n }\n static divide(data, args) {\n return _divide(data, args)\n }\n static eq(data, args) {\n return _eq(data, args)\n }\n\n static filterAll(data, args) {\n return _filterAll(data, args)\n }\n\n static formatDate(data, args) {\n return _formatDate(data, args)\n }\n static get(data, key, failover = null) {\n return _get(data, key, failover)\n }\n static gt(data, args) {\n return _gt(data, args)\n }\n static gte(data, args) {\n return _gte(data, args)\n }\n static isEmpty(data, args) {\n return _isEmpty(data, args)\n }\n static isNotEmpty(data, args) {\n return _isNotEmpty(data, args)\n }\n static join(data, separator = '') {\n return _join(data, separator)\n }\n static lt(data, args) {\n return _lt(data, args)\n }\n static lte(data, args) {\n return _lte(data, args)\n }\n static map(data, args = []) {\n return _map(data, args)\n }\n static neq(data, args) {\n return _neq(data, args)\n }\n static removeHtml(data, args) {\n return _removeHtml(data, args)\n }\n static replaceChar(data, args) {\n return _replaceChar(data, args)\n }\n static sum(data, args) {\n return _sum(data, args)\n }\n static toLowerCase(data, args) {\n return _toLowerCase(data, args)\n }\n static toUpperCase(data, args) {\n return _toUpperCase(data, args)\n }\n static parseFunction(expression) {\n return _parseFunction(expression, _FN_NAMES)\n }\n static parseParams(parameters) {\n return _parseParams(parameters)\n }\n\n pipe(expression = '') {\n this.delimiters = expression.substring(0, 2) === '{{' ? TAGS_HANDLEBAR : TAGS_EJS\n const regex = new RegExp(`${this.delimiters[0]}\\\\s(.*?)\\\\s${this.delimiters[1]}`)\n const match = expression.match(regex)\n if (match !== null) {\n try {\n const functionList = _parseFunction(match[1], _FN_NAMES)\n return functionList.reduce((acc, fn) => {\n return _callFunction(acc, fn.name, fn.args)\n }, this.data)\n } catch (e) {\n throw new TemplateCompilerException(`TemplateCompiler engine error: ${e.message}`)\n }\n }\n throw new TemplateCompilerException(`TemplateCompiler engine error: ${TEMPLATE_COMPILER_EXCEPTION_TYPE.invalidRegExpException}`)\n }\n}\n\nfunction _parseFunction(expression, existFunctionNames) {\n // Improved regex that handles nested structures and quoted strings properly\n const functionRegex = /(\\w+)\\(((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*)\\)/\n let parts\n\n if (expression.includes('|')) {\n // Split by | but not when inside parentheses or quotes\n parts = []\n let currentPart = ''\n let parenCount = 0\n let quoteChar = null\n\n for (let i = 0; i < expression.length; i++) {\n const char = expression[i]\n\n // Track quotes (handle escaped quotes)\n if ((char === '\"' || char === \"'\") && (i === 0 || expression[i-1] !== '\\\\')) {\n if (quoteChar === char) {\n quoteChar = null // Closing quote\n } else if (quoteChar === null) {\n quoteChar = char // Opening quote\n }\n currentPart += char\n continue\n }\n\n // Track parentheses (but not inside quotes)\n if (quoteChar === null) {\n if (char === '(') {\n parenCount++\n } else if (char === ')') {\n parenCount--\n }\n }\n\n // Split on | only when not inside parentheses or quotes\n if (char === '|' && parenCount === 0 && quoteChar === null) {\n parts.push(currentPart)\n currentPart = ''\n } else {\n currentPart += char\n }\n }\n\n // Add the last part\n if (currentPart) {\n parts.push(currentPart)\n }\n } else {\n parts = [expression]\n }\n\n return parts.reduce((acc, part) => {\n const match = part.match(functionRegex)\n if (match !== null) {\n const functionName = match[1]\n const parameters = match[2]\n const paramList = _parseParams(parameters)\n\n if (existFunctionNames.includes(functionName)) {\n acc.push({\n name: functionName,\n args: paramList\n })\n } else {\n throw new TemplateCompilerException(`${functionName} is not a valid function`)\n }\n }\n return acc\n }, [])\n}\n\nfunction _parseParams(parameters) {\n const _parameters = parameters.trim()\n if (!_parameters) return []\n \n // Split parameters respecting quotes, brackets, and parentheses\n if (_parameters.includes(',')) {\n const parts = _splitParamsRespectingContext(_parameters)\n return parts.map(part => _parseSinglePart(part.trim()))\n }\n \n return [_parseSinglePart(_parameters)]\n}\n\nfunction _splitParamsRespectingContext(str) {\n const parts = []\n let current = ''\n let bracketDepth = 0\n let parenDepth = 0\n let quoteChar = null\n \n for (let i = 0; i < str.length; i++) {\n const char = str[i]\n \n // Track quotes (handle escaped quotes)\n if ((char === '\"' || char === \"'\") && (i === 0 || str[i-1] !== '\\\\')) {\n if (quoteChar === char) {\n quoteChar = null // Closing quote\n } else if (quoteChar === null) {\n quoteChar = char // Opening quote\n }\n current += char\n continue\n }\n \n // If we're inside quotes, add the character and continue\n if (quoteChar !== null) {\n current += char\n continue\n }\n \n // Track brackets and parentheses (only when not in quotes)\n if (char === '[') {\n bracketDepth++\n } else if (char === ']') {\n bracketDepth--\n } else if (char === '(') {\n parenDepth++\n } else if (char === ')') {\n parenDepth--\n }\n \n // Split on comma only when not in quotes and not in nested brackets/parentheses\n if (char === ',' && quoteChar === null && bracketDepth === 0 && parenDepth === 0) {\n parts.push(current)\n current = ''\n } else {\n current += char\n }\n }\n \n // Add the last part\n if (current) {\n parts.push(current)\n }\n \n return parts\n}\n\nfunction _parseSinglePart(input) {\n if (typeof input !== 'string') {\n return input\n }\n \n const trimmed = input.trim()\n \n // Handle quoted strings - remove outer quotes\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.substring(1, trimmed.length - 1)\n }\n \n // Try basic type conversion\n const basicType = _toBasicType(trimmed)\n if (typeof basicType !== 'string') {\n return basicType\n }\n \n // Handle array syntax\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return _parseArrayContent(trimmed)\n }\n \n return input\n}\n\nfunction _parseArrayContent(arrayStr) {\n const content = arrayStr.substring(1, arrayStr.length - 1).trim()\n if (!content) return []\n \n // Split array items respecting quotes\n const items = []\n let current = ''\n let quoteChar = null\n \n for (let i = 0; i < content.length; i++) {\n const char = content[i]\n \n // Track quotes\n if ((char === '\"' || char === \"'\") && (i === 0 || content[i-1] !== '\\\\')) {\n if (quoteChar === char) {\n quoteChar = null\n } else if (quoteChar === null) {\n quoteChar = char\n }\n current += char\n continue\n }\n \n // Split on comma only when not in quotes\n if (char === ',' && quoteChar === null) {\n if (current.trim()) {\n items.push(current.trim())\n }\n current = ''\n } else {\n current += char\n }\n }\n \n if (current.trim()) {\n items.push(current.trim())\n }\n \n return items.map(item => _parseSinglePart(item))\n}\n\n// Your _toBasicType function\nfunction _toBasicType(input) {\n if (input.startsWith('\"') && input.endsWith('\"')) {\n return input.substring(1, input.length - 1)\n }\n if (input.startsWith('\\'') && input.endsWith('\\'')) {\n return input.substring(1, input.length - 1)\n }\n if (input === 'true') {\n return true\n }\n if (input === 'false') {\n return false\n }\n if (input === 'undefined') {\n return undefined\n }\n if (input === 'null') {\n return null\n }\n if (!Number.isNaN(input) && !Number.isNaN(Number.parseFloat(input))) {\n return Number(input)\n }\n return input\n}\n\nfunction _callFunction(data, functionName, parameters) {\n try {\n let failover\n switch (functionName) {\n case 'concatIf':\n return _concatIf(data, parameters)\n case 'divide':\n return _divide(data, parameters)\n case 'eq':\n return _eq(data, parameters)\n case 'exec':\n return _exec(data, parameters)\n case 'filterAll':\n return _filterAll(data, parameters)\n case 'filterOne':\n return _filterOne(data, parameters)\n case 'formatDate':\n return _formatDate(data, parameters)\n case 'get':\n if (parameters.length > 2) {\n throw new TemplateCompilerException(TEMPLATE_COMPILER_EXCEPTION_TYPE.argumentFormatException)\n }\n if (parameters.length === 2) {\n failover = parameters[parameters.length - 1]\n }\n return _get(data, parameters[0], failover)\n case 'gt':\n return _gt(data, parameters)\n case 'gte':\n return _gte(data, parameters)\n case 'isEmpty':\n return _isEmpty(data, parameters)\n case 'isNotEmpty':\n return _isNotEmpty(data, parameters)\n case 'join':\n return _join(data, parameters[0])\n case 'lt':\n return _lt(data, parameters)\n case 'lte':\n return _lte(data, parameters)\n case 'map':\n return _map(data, parameters)\n case 'neq':\n return _neq(data, parameters)\n case 'removeHtml':\n return _removeHtml(data, parameters)\n case 'replaceChar':\n return _replaceChar(data, parameters)\n case 'sum':\n return _sum(data, parameters)\n case 'toLowerCase':\n return _toLowerCase(data)\n case 'toUpperCase':\n return _toUpperCase(data)\n default:\n throw new Error(`${functionName} is not a valid function`)\n }\n } catch (e) {\n throw e\n }\n}\n\nexport {\n TemplateCompiler,\n}\n","import { getValidation } from '../getValidation/index.js'\nimport { formatDate } from '../formatDate/index.js'\nimport { getValueByKeys } from '../getValueByKeys/index.js'\nimport { TemplateCompiler } from '../../models/templateCompiler/index.js'\n\nfunction concatStringByArray(arrTemplate, data) {\n return arrTemplate.reduce((acc, item) => {\n const { type, value = '', restriction, template, format, showMinutes } = item\n switch (type) {\n case ('array'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n const _value = getValueByKeys(value.split('.'), data) || []\n acc += _value.reduce((_acc, item) => {\n return _acc += concatStringByArray(template, item)\n }, '')\n }\n break\n }\n case ('date'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n const _value = getValueByKeys(value.split('.'), data) || ''\n acc += (formatDate(_value, format).toString())\n }\n break\n }\n case ('ellipsis'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n const { maxLength } = item\n const _value = getValueByKeys(value.split('.'), data) || ''\n if (_value.length <= maxLength) {\n acc += (_value.toString())\n } else {\n acc += `${_value.substr(0, maxLength)}...`\n }\n }\n break\n }\n case ('group'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n return concatStringByArray(value, data)\n }\n break\n }\n case ('label'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n acc += (value.toString())\n }\n break\n }\n case ('templateCompiler'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n const templateCompiler = new TemplateCompiler({ data })\n acc += templateCompiler.pipe(value)\n }\n break\n }\n case ('value'): {\n if (getValidation(restriction, data, getValueByKeys)) {\n const _value = getValueByKeys(value.split('.'), data) || ''\n acc += (_value.toString())\n }\n break\n }\n }\n return acc\n }, '')\n}\nexport default {\n concatStringByArray\n}\nexport {\n concatStringByArray\n}\n","import { getValueByKeys as utilitiesGetValueByKeys } from '../getValueByKeys/getValueByKeys.js'\n\nfunction convertString(string, patternMatch = /\\$\\{(.+?)\\}/g, value, getValueByKeys) {\n if (!string) {\n return ''\n }\n const _getValueByKeys = typeof getValueByKeys === 'function' ? getValueByKeys : utilitiesGetValueByKeys\n const reg = new RegExp(patternMatch, 'g')\n return string.replace(reg, (match, key) => {\n const result = _getValueByKeys({ keys: key.split('.'), obj: value })\n if (result === null || result === undefined) {\n return ''\n }\n return typeof result === 'object' ? JSON.stringify(result) : result\n })\n}\n\nexport default {\n convertString\n}\nexport {\n convertString\n}\n","function create(str, timezoneOffset = 0) {\n try {\n if (typeof str === 'number') {\n if (str.toString().length === 10) {\n str = str * 1000\n }\n return new Date(str)\n }\n if (typeof str === 'string' && str.length === 8) {\n const year = Number.parseInt(str.slice(0, 4), 10)\n const month = Number.parseInt(str.slice(4, 6), 10) - 1\n const day = Number.parseInt(str.slice(6, 8), 10)\n return new Date(year, month, day)\n }\n return new Date(str)\n } catch (e) {\n throw new Error('input does not meet the requirements')\n }\n}\n\nexport {\n create\n}\n","class Handler {\n constructor({ date, isUTC, is24Hour, timezoneOffset = 0 } = {}) {\n this.date = date\n this.isUTC = isUTC\n this.is24Hour = is24Hour\n this.timezoneOffset = timezoneOffset // in minutes\n }\n \n // Get date component with timezone offset applied\n getDateComponent(methodName) {\n if (this.timezoneOffset !== 0) {\n // For specific timezone offsets, calculate the adjusted time\n const offsetMs = this.timezoneOffset * 60 * 1000\n const adjustedDate = new Date(this.date.getTime() + offsetMs)\n return adjustedDate[`getUTC${methodName}`]()\n } else if (this.isUTC) {\n return this.date[`getUTC${methodName}`]()\n } else {\n return this.date[`get${methodName}`]()\n }\n }\n \n process(dateFormat) {\n return dateFormat\n }\n}\n\nexport {\n Handler\n}\n","function padding(num, char = '0') {\n if (typeof num !== 'number') {\n throw new TypeError('Parameter must be of number')\n }\n return num < 10 ? `${char}${num}` : num\n}\n\nexport {\n padding\n}\n","import { Handler } from './handler.js'\nimport { padding } from './padding.js'\n\nclass HandlerDate extends Handler {\n process(dateFormat) {\n const day = this.getDateComponent('Date')\n dateFormat = dateFormat.replace('DD', padding(day))\n return dateFormat\n }\n}\n\nexport {\n HandlerDate\n}\n","import { Handler } from './handler.js'\nimport { padding } from './padding.js'\n\nconst MONTH_ENG_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\nclass HandlerMonth extends Handler {\n process(dateFormat) {\n const month = this.getDateComponent('Month')\n dateFormat = dateFormat.replace('MMM', MONTH_ENG_SHORT[month])\n dateFormat = dateFormat.replace('MM', padding(month + 1))\n return dateFormat\n }\n}\n\nexport {\n HandlerMonth\n}\n","import { Handler } from './handler.js'\n\nclass HandlerYear extends Handler {\n process(dateFormat) {\n const year = this.getDateComponent('FullYear')\n dateFormat = dateFormat.replace('yyyy', year)\n dateFormat = dateFormat.replace('YYYY', year)\n dateFormat = dateFormat.replace('yy', year.toString().slice(-2))\n dateFormat = dateFormat.replace('YY', year.toString().slice(-2))\n return dateFormat\n }\n}\n\nexport {\n HandlerYear\n}\n","import { Handler } from './handler.js'\nimport { padding } from './padding.js'\n\nclass HandlerTime extends Handler {\n process(dateFormat) {\n // Handle hours\n let hours = this.getDateComponent('Hours')\n const is12Hour = !this.is24Hour\n \n if (is12Hour && hours > 12) {\n hours -= 12\n }\n if (is12Hour && hours === 0) {\n hours = 12\n }\n \n dateFormat = dateFormat.replace('HH', padding(this.getDateComponent('Hours')))\n dateFormat = dateFormat.replace('hh', padding(hours))\n \n // Handle AM/PM\n if (!this.is24Hour) {\n if (dateFormat.includes('A')) {\n const ampm = this.getDateComponent('Hours') >= 12 ? 'PM' : 'AM'\n dateFormat = dateFormat.replace(/\\bA\\b/g, ampm)\n }\n if (dateFormat.includes('a')) {\n const ampm = this.getDateComponent('Hours') >= 12 ? 'pm' : 'am'\n dateFormat = dateFormat.replace(/\\ba\\b/g, ampm)\n }\n } else {\n // Ignore AM/PM if using 24-hour format\n dateFormat = dateFormat.replace(/\\s*\\bA\\b\\s*/g, ' ')\n dateFormat = dateFormat.replace(/\\s*\\ba\\b\\s*/g, ' ')\n // Remove extra spaces\n dateFormat = dateFormat.replace(/\\s+/g, ' ').trim()\n }\n \n // Handle minutes\n dateFormat = dateFormat.replace('mm', padding(this.getDateComponent('Minutes')))\n \n // Handle seconds\n dateFormat = dateFormat.replace('ss', padding(this.getDateComponent('Seconds')))\n \n return dateFormat\n }\n}\n\nexport {\n HandlerTime\n}\n","import { Handler } from './handler.js'\n\nclass HandlerTimezone extends Handler {\n process(dateFormat) {\n // Handle UTC timezone indicator\n if (dateFormat.includes('Z')) {\n if (this.isUTC) {\n dateFormat = dateFormat.replace('Z', '+0000')\n } else {\n // Calculate local timezone offset\n const offsetMinutes = this.date.getTimezoneOffset()\n const sign = offsetMinutes > 0 ? '-' : '+'\n const absOffset = Math.abs(offsetMinutes)\n const hours = Math.floor(absOffset / 60)\n const minutes = absOffset % 60\n const offsetString = `${sign}${hours.toString().padStart(2, '0')}${minutes.toString().padStart(2, '0')}`\n dateFormat = dateFormat.replace('Z', offsetString)\n }\n }\n \n // Handle full day of week\n if (dateFormat.includes('ddd')) {\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n const dayIndex = this.getDateComponent('Day')\n dateFormat = dateFormat.replace('ddd', days[dayIndex])\n }\n \n // Handle day of week\n if (dateFormat.includes('dd')) {\n const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n const dayIndex = this.getDateComponent('Day')\n dateFormat = dateFormat.replace('dd', days[dayIndex])\n }\n \n return dateFormat\n }\n}\n\nexport {\n HandlerTimezone\n}\n","import { HandlerDate } from './handlerDate.js'\nimport { HandlerMonth } from './handlerMonth.js'\nimport { HandlerYear } from './handlerYear.js'\nimport { HandlerTime } from './handlerTime.js'\nimport { HandlerTimezone } from './handlerTimezone.js'\n\nfunction handle({ date, format, isUTC, is24Hour, timezoneOffset = 0 }) {\n return [\n HandlerTimezone,\n HandlerDate,\n HandlerMonth,\n HandlerYear,\n HandlerTime\n ].reduce((acc, Handler) => {\n const handler = new Handler({ date, isUTC, is24Hour, timezoneOffset })\n return handler.process(acc)\n }, format)\n}\n\nexport {\n handle\n}\n","import {\n create,\n handle\n} from './handler/index.js'\n\nexport function convertTimestampToString(timestamp, dateFormat) {\n const format = dateFormat || 'YYYY/MM/DD hh:mm'\n const is24Hour = format.includes('HH')\n\n // Determine timezone offset from format\n let timezoneOffset = null // null means use local timezone\n\n if (format.includes('Z')) {\n // Z means UTC\n timezoneOffset = 0\n } else if (format.includes('+')) {\n // Extract offset like +0800, +05:30, etc.\n const offsetMatch = format.match(/[+-]\\d{2}:?\\d{2}/)\n if (offsetMatch) {\n const offsetStr = offsetMatch[0]\n const sign = offsetStr[0] === '+' ? 1 : -1\n const hours = parseInt(offsetStr.slice(1, 3), 10)\n const minutes = offsetStr.includes(':') \n ? parseInt(offsetStr.slice(4, 6), 10)\n : parseInt(offsetStr.slice(3, 5), 10)\n timezoneOffset = sign * (hours * 60 + minutes)\n }\n }\n // If no timezone indicator, timezoneOffset stays null (use local)\n\n const date = create(timestamp, timezoneOffset === null ? 0 : timezoneOffset)\n\n return handle({ date, format, isUTC: timezoneOffset !== null, is24Hour, timezoneOffset: timezoneOffset === null ? 0 : timezoneOffset })\n}\n","/**\n * Detects and reports hidden/control characters in a string without modifying it.\n * @param {string} input - The string to analyze.\n * @param {Object} [options] - Configuration options.\n * @param {boolean} [options.preserveBasicWhitespace=true] - Whether to consider basic whitespace as valid.\n * @returns {Object} Report object with detection results.\n */\nexport function detectControlCharacters(input, options = {}) {\n const {\n preserveBasicWhitespace = true,\n removeNewlines = false\n } = options\n\n if (typeof input !== 'string') {\n return {\n hasControlChars: false,\n matches: [],\n inputType: typeof input,\n message: 'Input is not a string'\n }\n }\n\n const matches = []\n let regex\n\n if (preserveBasicWhitespace && !removeNewlines) {\n // Same regex as Phase 1 preserve mode - keep tab (\\t), newline (\\n), carriage return (\\r)\n regex = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x9F\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g\n } else {\n // Same regex as Phase 1 full removal mode - use consistent escape sequences\n regex = /[\\x00-\\x1F\\x7F-\\x9F\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g\n }\n\n // Use a replacer function to capture matches without modifying the string\n input.replace(regex, (match, offset) => {\n matches.push({\n character: match,\n code: match.charCodeAt(0),\n hex: '0x' + match.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0'),\n position: offset,\n context: getContext(input, offset, 10) // Show surrounding text\n })\n return '' // Return empty but we don't use the result\n })\n\n return {\n hasControlChars: matches.length > 0,\n matches,\n totalFound: matches.length,\n inputPreview: input.length > 50 ? input.substring(0, 50) + '...' : input,\n inputLength: input.length,\n optionsUsed: { preserveBasicWhitespace },\n regexPattern: regex.toString()\n }\n}\n\n/**\n * Helper function to get context around a match\n */\nfunction getContext(str, position, contextLength = 10) {\n const start = Math.max(0, position - contextLength)\n const end = Math.min(str.length, position + contextLength + 1)\n let context = str.substring(start, end)\n \n // Replace control characters with their escape sequences for readability\n context = context.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, (match) => {\n return '\\\\u' + match.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')\n })\n \n return context\n}\n\n/**\n * Pretty print the detection results to console\n */\nexport function printControlCharReport(report) {\n console.log('=== Control Character Detection Report ===')\n console.log(`Input: \"${report.inputPreview}\" (${report.inputLength} chars)`)\n console.log(`Options: preserveBasicWhitespace = ${report.optionsUsed.preserveBasicWhitespace}`)\n console.log(`Regex pattern: ${report.regexPattern}`)\n console.log(`Control characters found: ${report.totalFound}`)\n \n if (report.hasControlChars) {\n console.log('\\n📋 Matches found:')\n report.matches.forEach((match, index) => {\n console.log(`\\n${index + 1}. Character: ${JSON.stringify(match.character)}`)\n console.log(` Code: ${match.code} (${match.hex})`)\n console.log(` Position: ${match.position}`)\n console.log(` Context: \"...${match.context}...\"`)\n })\n } else {\n console.log('✅ No control characters detected in Phase 1 range')\n }\n \n console.log('=== End Report ===')\n}\n","export function displayName(user, options) {\n user = user || {}\n options = options || {}\n const { firstName, middleName, noFirstName, prefix, title, upperCaseLastName = true } = options\n options.hasAsianCharacters = false\n let parts = []\n if ((prefix || title) && user.prefix) {\n const _prefixHandler = _makeHandler(options)\n parts = _prefixHandler(parts, user.prefix)\n parts = _prefixHandler(parts, user.title)\n }\n if (firstName !== false && !noFirstName) {\n const _firstNameHandler = _makeHandler(options)\n parts = _firstNameHandler(parts, user.firstName)\n parts = _firstNameHandler(parts, user.givenName)\n }\n if (middleName === true && user.middleName) {\n options.hasAsianCharacters = options.hasAsianCharacters || _test(user.middleName.toString())\n parts.push(user.middleName.toString())\n }\n const _lastNameHandler = _makeHandler(options, upperCaseLastName)\n parts = _lastNameHandler(parts, user.lastName)\n parts = _lastNameHandler(parts, user.familyName)\n parts = _lastNameHandler(parts, user.surname)\n if (options.hasAsianCharacters) {\n return parts.reverse().join('')\n }\n return parts.join(' ')\n}\n\nfunction _makeHandler(options = {}, upperCaseLastName = false) {\n let match = false\n return (parts, field) => {\n if (!match && field) {\n match = true\n options.hasAsianCharacters = options.hasAsianCharacters || _test(field.toString())\n const _field = upperCaseLastName\n ? field.toString().toUpperCase()\n : field.toString()\n parts.push(_field)\n }\n return parts\n }\n}\n\nfunction _test(str) {\n return /[\\u3400-\\u9FBF]/.test(str)\n}\n","function downloadFileByUrl({ dataUrl = '', filename = '' } = {}) {\n const link = document.createElement('a')\n link.download = filename\n link.href = dataUrl\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n\nexport {\n downloadFileByUrl\n}\n","export function escapeRegex(string) {\n return String(string).replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n}\n","/**\n * Unified Middleware Handler (Express & Koa Compatible)\n */\nexport function customHandler({ responseHelper, handler, ignoreError = false }) {\n return async (reqOrCtx, resOrNext, nextInExpress) => {\n // 1. Framework Detection\n // Express: (req, res, next) | Koa: (ctx, next)\n const isKoa = typeof resOrNext === 'function' && !nextInExpress\n \n const ctx = isKoa ? reqOrCtx : null\n const req = isKoa ? reqOrCtx.request : reqOrCtx // Use Koa's augmented request for .body\n const res = isKoa ? reqOrCtx.response : resOrNext\n const next = isKoa ? resOrNext : nextInExpress\n\n try {\n // 2. Execute Business Logic\n // We pass the extracted req/res to keep handlers framework-agnostic\n await handler({ req, res })\n\n // 3. Success Flow\n // Koa must await next to maintain the Onion Model\n if (isKoa) {\n return await next()\n } else {\n return next()\n }\n\n } catch (err) {\n // 4. Error Handling\n if (ignoreError) {\n return isKoa ? await next() : next()\n }\n\n // If no responseHelper, we must not proceed (Security Risk)\n // Pass to the framework's global error handler\n if (!responseHelper) {\n if (isKoa) {\n throw err // Koa standard\n }\n return next(err) // Express standard\n }\n\n const status = err.status || 400\n const message = err.message || 'An error occurred'\n const formattedResponse = responseHelper.standardizeResponse({ err, message })\n\n // 5. Send Response\n if (isKoa) {\n ctx.status = status\n ctx.body = formattedResponse\n } else {\n res.status(status).json(formattedResponse)\n }\n }\n }\n}\n","export function findAllResult({ responseHelper, service }) {\n return async (req, res, next) => {\n try {\n const { query } = req\n const result = await service.findAll({ query })\n res.locals.findAllResult = result\n await next()\n } catch (err) {\n res.status(400).json(responseHelper.standardizeResponse({ err, message: err.message || err }))\n }\n }\n}\n","export function findOneResult({ responseHelper, service }) {\n return async (req, res, next) => {\n try {\n const { params, query } = req\n const { id } = params\n const result = await service.findOne({\n query: {\n ...query,\n id\n }\n })\n res.locals.findOneResult = result\n await next()\n } catch (err) {\n res.status(400).json(responseHelper.standardizeResponse({ err, message: err.message || err }))\n }\n }\n}\n","export function hideSensitiveFields(aggregation, { query = {} } = {}) {\n if (!query.__EXCLUDED_FIELDS\n || (Array.isArray(query.__EXCLUDED_FIELDS) && query.__EXCLUDED_FIELDS.length === 0)\n ) {\n return\n }\n aggregation.push({\n $set: {\n __originalEmail: '$_eventRegistration.email',\n __originalPhone: '$_eventRegistration.phone',\n\n // 1. Force __queryArr to be an array even if query.__EXCLUDED_FIELDS is undefined/missing\n __queryArr: { $ifNull: [query.__EXCLUDED_FIELDS || [], []] },\n\n __isMyself: { $eq: ['$_eventRegistration.loginSubjectCode', query.__LOGIN_SUBJECT_CODE] },\n __isGroupCoordinator: !!query.__ALLOW_COORDINATOR,\n __hasEventRegistration: { $ne: ['$_eventRegistration', null] }\n }\n })\n\n aggregation.push({\n $set: {\n __shouldShowEmail: {\n $and: [\n '$__hasEventRegistration',\n {\n $or: [\n '$__isMyself',\n '$__isGroupCoordinator',\n // Only hide if 'email' is explicitly in the exclusion array\n { $not: { $in: ['email', '$__queryArr'] } }\n ]\n }\n ]\n },\n __shouldShowPhone: {\n $and: [\n '$__hasEventRegistration',\n {\n $or: [\n '$__isMyself',\n '$__isGroupCoordinator',\n { $not: { $in: ['phone', '$__queryArr'] } }\n ]\n }\n ]\n }\n }\n })\n\n // Final Step: Restore or Remove\n aggregation.push({\n $set: {\n '_eventRegistration.email': {\n $cond: ['$__shouldShowEmail', '$__originalEmail', '$$REMOVE']\n },\n '_eventRegistration.phone': {\n $cond: ['$__shouldShowPhone', '$__originalPhone', '$$REMOVE']\n }\n }\n })\n\n // Cleanup\n aggregation.push({\n $unset: [\n '__originalEmail',\n '__originalPhone',\n '__isMyself',\n '__isGroupCoordinator',\n '__queryArr',\n '__hasEventRegistration',\n '__shouldShowEmail',\n '__shouldShowPhone'\n ]\n })\n}\n","export function postResult({ responseHelper, service }) {\n return async (req, res, next) => {\n try {\n const { body } = req\n let result\n if (Array.isArray(body)) {\n result = await service.saveAll({ docs: body })\n } else {\n result = await service.saveOne({ doc: body })\n }\n res.locals.postResult = result\n await next()\n } catch (err) {\n res.status(400).json(responseHelper.standardizeResponse({ err, message: err.message || err }))\n }\n }\n}\n","export function updateOneResult({ responseHelper, service }) {\n return async (req, res, next) => {\n try {\n const { body, params } = req\n const { id } = params\n if (id !== body.id) {\n throw new Error('id in params and body must be same')\n }\n const { data } = await service.findOne({ query: { id } })\n const doc = data[0]\n doc.update(body)\n const result = await service.saveOne({ doc })\n res.locals.updateOneResult = result\n await next()\n } catch (err) {\n res.status(400).json(responseHelper.standardizeResponse({ err, message: err.message || err }))\n }\n }\n}\n","import { customHandler } from './customHandler.js'\nimport { findAllResult } from './findAllResult.js'\nimport { findOneResult } from './findOneResult.js'\nimport { hideSensitiveFields } from './hideSensitiveFields.js'\nimport { postResult } from './postResult.js'\nimport { updateOneResult } from './updateOneResult.js'\n\nexport const expressHelper = {\n customHandler,\n findAllResult,\n findOneResult,\n hideSensitiveFields,\n postResult,\n updateOneResult,\n}\n","/**\n * Extracts and normalizes unique email addresses from an array containing messy entries\n * @param {Array} dirtyArray - Array that may contain emails in various formats (may include null/empty entries)\n * @returns {Array} Sorted array of unique, lowercase email addresses\n */\nexport function extractEmails(dirtyArray) {\n const emailRegex = /[\\w.%+-]+@[a-z0-9.-]+\\.[a-z]{2,}/gi\n const emails = new Set()\n\n // Handle null/undefined input array\n if (!dirtyArray)\n return []\n\n dirtyArray.forEach((entry) => {\n // Skip null, undefined, empty, or whitespace-only entries\n if (!entry || typeof entry !== 'string' || !entry.trim())\n return\n\n try {\n const cleanEntry = entry\n .replace(/[\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g, '') // Remove hidden chars\n .replace(/[<>]/g, ' ') // Convert email delimiters to spaces\n .replace(/\\s+/g, ' ') // Collapse multiple whitespace\n .trim()\n\n // Extract all email matches\n const matches = cleanEntry.match(emailRegex)\n if (matches) {\n matches.forEach((email) => emails.add(email.toLowerCase())) // Normalize to lowercase\n }\n } catch (e) {\n console.warn('Failed to process entry:', entry, e)\n }\n })\n\n // Convert Set to array and sort alphabetically\n return Array.from(emails).sort((a, b) => a.localeCompare(b))\n}\n","async function pReduce(iterable, reducer, initialValue) {\n return new Promise((resolve, reject) => {\n const iterator = iterable[Symbol.iterator]()\n let index = 0\n\n const next = async (total) => {\n const element = iterator.next()\n\n if (element.done) {\n resolve(total)\n return\n }\n\n try {\n const [resolvedTotal, resolvedValue] = await Promise.all([total, element.value])\n next(reducer(resolvedTotal, resolvedValue, index++))\n } catch (error) {\n reject(error)\n }\n }\n\n next(initialValue)\n })\n}\n\nexport {\n pReduce\n}\n","import { init, pMap } from '../../helpers/index.js'\n\nclass Repo {\n constructor(options) {\n options = options || {}\n this.model = options.model\n this._sharedOptions = options._sharedOptions // { session: this.dbTransaction }\n this._queryOptions = options._queryOptions\n this._saveOptions = options._saveOptions\n this._Class = options._constructor && options._constructor._Class\n ? options._constructor._Class\n : null\n }\n static init(options = {}) {\n return init(this, options)\n }\n static get _classname() {\n return 'Repo'\n }\n static get _superclass() {\n return 'Repo'\n }\n\n get _classname() {\n return 'Repo'\n }\n\n get _superclass() {\n return 'Repo'\n }\n\n get isValid() {\n return this.model\n && (typeof this.model.deleteOne === 'function')\n && (typeof this.model.findAll === 'function')\n && (typeof this.model.saveOne === 'function')\n }\n\n get queryOptions() {\n return {\n ...this._sharedOptions,\n ...this._queryOptions,\n }\n }\n\n get saveOptions() {\n return {\n ...this._sharedOptions,\n ...this._saveOptions,\n }\n }\n\n init(options) {\n if (this._Class && typeof this._Class.init === 'function') {\n return this._Class.init(options)\n }\n return options\n }\n\n async deleteOne({ id }) {\n try {\n const result = await this.model.deleteOne({ _id: id })\n return {\n ...result, // { message: 'ok', total }\n isNew: false,\n data: []\n }\n } catch (err) {\n throw err\n }\n }\n\n // systemLog is optional\n findAll({ config = {}, query, systemLog }) {\n const log = _makeLog({\n systemLog,\n label: 'REPO_READ',\n message: `fn ${this._classname}.prototype.findAll`,\n input: [{ query: { ...query }, systemLog: { ...systemLog } }]\n })\n const queryOptions = {\n ...this.queryOptions,\n ...config,\n }\n return new Promise((resolve, reject) => {\n this.model.findAll(query, queryOptions, (err, data, total) => {\n if (err) {\n log({ level: 'warn', output: err.toString() })\n reject(err)\n } else {\n const result = {\n isNew: false,\n data,\n total: total || data.length\n }\n log({ level: 'info', output: { ...result } })\n resolve(result)\n }\n })\n })\n }\n\n findOne({ config = {}, query, systemLog }) {\n const log = _makeLog({\n systemLog,\n label: 'REPO_READ',\n message: `fn ${this._classname}.prototype.findOne`,\n input: [{ query: { ...query }, systemLog: { ...systemLog } }]\n })\n const queryOptions = {\n ...this.queryOptions,\n ...config,\n }\n return new Promise((resolve, reject) => {\n this.model.findAll(query, queryOptions, (err, data) => {\n if (err) {\n reject(err)\n } else if (data.length === 1) {\n const result = {\n isNew: false,\n data,\n total: 1\n }\n log({ level: 'info', output: { ...result } })\n resolve(result)\n } else if (data.length === 0) {\n reject(new Error('record not found'))\n } else {\n reject(new Error('more than one is found'))\n }\n })\n })\n .catch((err) => {\n log({ level: 'warn', output: err.toString() })\n throw err\n })\n }\n\n saveAll({ config = {}, docs, systemLog }) {\n let isNew\n const log = _makeLog({\n systemLog,\n label: 'REPO_WRITE',\n message: `fn ${this._classname}.prototype.saveAll`,\n input: [{ config, docs: [...docs], systemLog: { ...systemLog } }]\n })\n const promise = typeof this.model.saveAll === 'function'\n ? this.model.saveAll({ config, docs })\n : _saveAll({ config, docs, service: this })\n // : Promise.all(docs.map(async (doc) => {\n // if (doc) {\n // const result = await this.saveOne({ config, doc })\n // isNew = result.isNew\n // const _data = result._data || result.data\n // return _data[0]\n // }\n // return null\n // }))\n return promise.then((savedData) => {\n if (savedData.length !== 1)\n isNew = null\n const result = {\n data: savedData,\n isNew,\n total: savedData.length\n }\n log({ level: 'info', output: { ...result } })\n return result\n }).catch((err) => {\n log({ level: 'warn', output: err.toString() })\n throw err\n })\n }\n\n saveOne({ config = {}, doc, systemLog }) {\n const log = _makeLog({\n systemLog,\n label: 'REPO_WRITE',\n message: `fn ${this._classname}.prototype.saveOne`,\n input: [{ config, doc: { ...doc }, systemLog: { ...systemLog } }]\n })\n const saveOptions = {\n ...this.saveOptions,\n ...config,\n }\n return new Promise((resolve, reject) => {\n this.model.saveOne(doc, saveOptions, (err, result) => {\n if (err) {\n log({ level: 'warn', output: err.toString() })\n reject(err)\n } else {\n log({ level: 'info', output: { ...result } })\n resolve(result)\n }\n })\n })\n }\n}\n\nfunction _makeLog({ systemLog, label, message: message1, input } = {}) {\n return ({ level, messgae: massage2, output } = {}) => {\n if (systemLog && systemLog.systemLogHelper) {\n systemLog.systemLogHelper.log({\n batchId: systemLog.batchId,\n label,\n level,\n message: massage2 || message1,\n data: {\n payload: {\n input,\n output\n }\n }\n })\n }\n }\n}\n\nasync function _saveAll({ config = {}, docs, service }) {\n let _result = null\n if (config.session || service.saveOptions.session) {\n _result = await pMap(docs, async (doc) => {\n if (doc) {\n const result = await service.saveOne({ config, doc })\n // isNew = result.isNew\n const _data = result._data || result.data\n return _data[0]\n }\n return null\n }, { concurrency: 1 })\n } else {\n _result = await Promise.all(docs.map(async (doc) => {\n if (doc) {\n const result = await service.saveOne({ config, doc })\n // isNew = result.isNew\n const _data = result._data || result.data\n return _data[0]\n }\n return null\n }))\n }\n return _result\n}\n\nexport {\n Repo\n}\n","class ApiResponse {\n constructor(options = {}) {\n options = options || {}\n this._data = options.data || options._data || []\n this.err = options.err\n this.isNew = options.isNew || false\n this.message = options.message\n this.total = options.total || 0\n this._instanceBuilder = options._instanceBuilder\n }\n\n static init(options = {}) {\n if (options instanceof this) {\n return options\n }\n const instance = new this(options)\n return instance\n }\n static get _classname() {\n return 'ApiResponse'\n }\n static get _superclass() {\n return 'ApiResponse'\n }\n\n // getters\n get data() {\n if (this._instanceBuilder && (typeof this._instanceBuilder === 'function')) {\n return this._data.map(this._instanceBuilder)\n }\n return this._data\n }\n}\n\nexport {\n ApiResponse,\n}\n","import { ApiResponse } from './apiResponse.js'\n\nfunction makeApiResponse({ repo, result }) {\n return ApiResponse.init({\n ...result,\n _instanceBuilder: (i) => {\n return repo.init(i)\n }\n })\n}\n\nexport {\n makeApiResponse\n}\n","import { makeApiResponse } from '../apiResponse/index.js'\nimport { Repo } from '../repo/index.js'\n\nclass Service {\n constructor({ repo }) {\n this.repo = repo\n }\n\n static get _classname() {\n return 'Service'\n }\n static get _superclass() {\n return 'Service'\n }\n\n async deleteOne({ id }) {\n const result = await this.repo.deleteOne({ id })\n return makeApiResponse({\n repo: this.repo,\n result\n })\n // return this.repo.delete({ id })\n // .catch(() => {\n // throw new Error(`Not found for query: ${id}`)\n // })\n }\n\n async findAll({ config = {}, query = {}, systemLog } = {}) {\n const result = await this.repo.findAll({ config, query, systemLog })\n return makeApiResponse({\n repo: this.repo,\n result\n })\n }\n\n async findOne({ config = {}, query = {}, systemLog } = {}) {\n const result = await this.repo.findOne({ config, query, systemLog })\n return makeApiResponse({\n repo: this.repo,\n result\n })\n }\n\n init(options) {\n return this.repo.init(options)\n }\n initFromArray(arr = []) {\n if (Array.isArray(arr)) {\n return arr.map((a) => this.init(a))\n }\n return []\n }\n initOnlyValidFromArray(arr = []) {\n return this.initFromArray(arr).filter((i) => i)\n }\n\n async saveAll({ config = {}, docs = [], systemLog } = {}) {\n const copies = docs.map((doc) => {\n return config.skipInit ? doc : this.init(doc)\n })\n const result = await this.repo.saveAll({ config, docs: copies, systemLog })\n return makeApiResponse({\n repo: this.repo,\n result\n })\n }\n\n // set skipInit to true if we want to use POST for query\n async saveOne({ config = {}, doc = {}, systemLog } = {}) {\n const copy = config.skipInit ? doc : this.init(doc)\n if (copy) {\n const result = await this.repo.saveOne({ config, doc: copy, systemLog })\n return makeApiResponse({\n repo: this.repo,\n result\n })\n }\n return {\n isNew: null,\n data: [],\n err: new Error('doc is not a valid instance')\n }\n }\n}\n\nfunction makeService({ repo }) {\n if (repo === undefined) {\n throw new Error('repo is required.')\n }\n if (repo._superclass !== Repo._superclass) {\n throw new Error('repo is not an instance of Repo.')\n }\n return new Service({ repo })\n}\n\nexport {\n makeService,\n Service,\n}\n","import { objectHelper } from '../objectHelper/index.js'\nimport { pReduce } from '../pReduce/index.js'\nimport { Repo } from '../../models/repo/index.js'\nimport { makeService } from '../../models/service/index.js'\n\nasync function generalPost({ body = {}, GeneralModel, UniqueKeyGenerator, resourceInfo }) {\n const { resources, data, globalShared = {}, shared = {}, relationship = {} } = body\n const _resourceInfo = resourceInfo || body.resourceInfo\n _attachShared(data, globalShared, shared)\n const obj = await pReduce(resources, async (acc, resource) => {\n const service = _makeService(resource, _resourceInfo, UniqueKeyGenerator, GeneralModel)\n _createRelationship(data, relationship[resource], acc)\n const _data = data[resource]\n const result = await service.saveAll({ docs: [].concat(_data) })\n acc[resource] = Array.isArray(_data) ? result._data : result._data[0]\n return acc\n }, {})\n return obj\n}\n\nfunction _attachShared(data, globalShared = {}, shared = {}) {\n Object.keys(shared).forEach((key) => {\n const _data = data[key]\n if (Array.isArray(_data)) {\n data[key] = _data.map((_dataItem) => {\n return objectHelper.merge({}, _dataItem, globalShared, shared[key] || {})\n })\n } else {\n data[key] = objectHelper.merge({}, _data, globalShared, shared[key] || {})\n }\n })\n}\n\nfunction _createRelationship(data, relationship = {}, object) {\n Object.keys(relationship).forEach((key) => {\n const path = relationship[key]\n const val = objectHelper.get(object, path)\n objectHelper.set(data, key, val)\n })\n}\n\nfunction _makeService(resource, resourceInfo, UniqueKeyGenerator, GeneralModel) {\n const { collectionName, fields } = resourceInfo[resource]\n const uniqueKeyGenerator = UniqueKeyGenerator.makeGenerator(fields)\n const model = new GeneralModel({ collectionName, uniqueKeyGenerator })\n return makeService({\n repo: new Repo({ model })\n })\n}\n\nexport {\n generalPost\n}\n","import { KeyValueObject as KeyValueObjectUtilities } from '../../models/keyValueObject/keyValueObject.js'\n\nfunction getObjectByArr(arr, data, getValueByKeys, getValidation, KeyValueObject) {\n const _KeyValueObject = KeyValueObject || KeyValueObjectUtilities\n if (!Array.isArray(arr) || arr.length === 0) {\n return null\n }\n return arr.reduce((acc, e) => {\n const { key, type, value, restriction } = e\n const isValid = getValidation && typeof getValidation === 'function' ? getValidation({ rule: restriction, data }) : true\n if (isValid) {\n let _value = value\n switch (type) {\n case 'array': {\n // _value = _getObjectByArr(value, data, getValueByKeys, getValidation)\n _value = value.map((el) => {\n const result = getValueByKeys({ keys: el.value.split('.'), obj: data })\n return result\n })\n break\n }\n case 'fromKeyValue': {\n const { dataPath, key: valueKey } = value\n const keyValues = getValueByKeys({ keys: dataPath.split('.'), obj: data })\n _value = _KeyValueObject.getValuesByKey(keyValues, valueKey)[0]\n break\n }\n case 'toKeyValue': {\n const keyValues = getValueByKeys({ keys: value.split('.'), obj: data })\n _value = _KeyValueObject.fromObject(keyValues)\n break\n }\n case 'nested': {\n _value = getObjectByArr(value, data, getValueByKeys, getValidation)\n break\n }\n case 'path': {\n _value = getValueByKeys({ keys: value.split('.'), obj: data })\n break\n }\n // should be deleted\n case 'orgin': {\n _value = value\n break\n }\n case 'origin': {\n _value = value\n break\n }\n default: {\n _value = value\n break\n }\n }\n if (key) {\n return {\n ...acc,\n [key]: _value,\n }\n }\n if (typeof _value === 'string') {\n return _value\n }\n return {\n ...acc,\n ..._value,\n }\n }\n return acc\n }, {})\n}\n\n\nexport default {\n getObjectByArr,\n}\nexport {\n getObjectByArr,\n}\n","export function groupArrayByKey(arr, key) {\n if (!key || typeof key !== 'string') {\n return {}\n }\n return arr.reduce((acc, curr) => {\n if (!acc[curr[key]]) {\n acc[curr[key]] = 0\n }\n acc[curr[key]]++\n return acc\n }, {})\n}\n","export function init(_class, options) {\n if (options instanceof _class) {\n return options\n }\n try {\n const instance = new _class(options)\n return instance.isValid !== false ? instance : null\n } catch (e) {\n console.log(`init failed for class: ${_class._classname || 'no _classname'}`, e)\n return null\n }\n}\n","import { init } from '../init/index.js'\n\nexport function initFromArray(_class, arr) {\n if (Array.isArray(arr)) {\n return arr.map((a) => init(_class, a))\n }\n return []\n}\n","import { initFromArray } from '../initFromArray/index.js'\n\nexport function initOnlyValidFromArray(_class, arr) {\n return initFromArray(_class, arr).filter((i) => i)\n}\n","export function mergeArraysByKey(arr1, arr2) {\n // Handle undefined/null inputs by defaulting to empty arrays\n const safeArr1 = Array.isArray(arr1) ? arr1 : []\n const safeArr2 = Array.isArray(arr2) ? arr2 : []\n\n const mergedMap = new Map()\n\n // Helper function to merge values based on their type\n const mergeValues = (existingValue, newValue) => {\n if (existingValue === undefined)\n return newValue\n\n // Handle arrays by concatenating\n if (Array.isArray(existingValue) && Array.isArray(newValue)) {\n return [...new Set([...existingValue, ...newValue])]\n }\n\n // Handle objects by merging\n if (typeof existingValue === 'object' && typeof newValue === 'object'\n && !Array.isArray(existingValue) && !Array.isArray(newValue)) {\n return { ...existingValue, ...newValue }\n }\n\n // // Handle numbers by adding\n // if (typeof existingValue === 'number' && typeof newValue === 'number') {\n // return existingValue\n // }\n\n // // Handle strings by concatenating\n // if (typeof existingValue === 'string' && typeof newValue === 'string') {\n // return existingValue\n // }\n\n // Default: use the new value\n return newValue\n }\n\n // Process first array\n safeArr1.forEach((item) => {\n mergedMap.set(item.key, item.value)\n })\n\n // Process second array and merge values\n safeArr2.forEach((item) => {\n const existingValue = mergedMap.get(item.key)\n mergedMap.set(item.key, mergeValues(existingValue, item.value))\n })\n\n // Convert back to array format\n return Array.from(mergedMap.entries()).map(([key, value]) => ({\n key,\n value\n }))\n}\n","function padZeros(num, minLength = 6) {\n num = num.toString()\n if (num.length < minLength) {\n return padZeros(`0${num}`, minLength)\n }\n return num\n}\n\nexport {\n padZeros\n}\n","export async function pMap(\n iterable,\n mapper,\n {\n concurrency = Number.POSITIVE_INFINITY,\n stopOnError = true,\n signal,\n } = {},\n) {\n return new Promise((resolve_, reject_) => {\n if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n throw new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`)\n }\n\n if (typeof mapper !== 'function') {\n throw new TypeError('Mapper function is required')\n }\n\n if (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n throw new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`)\n }\n\n const result = []\n const errors = []\n const skippedIndexesMap = new Map()\n let isRejected = false\n let isResolved = false\n let isIterableDone = false\n let resolvingCount = 0\n let currentIndex = 0\n const iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]()\n\n const signalListener = () => {\n reject(signal.reason)\n }\n\n const cleanup = () => {\n signal?.removeEventListener('abort', signalListener)\n }\n\n const resolve = (value) => {\n resolve_(value)\n cleanup()\n }\n\n const reject = (reason) => {\n isRejected = true\n isResolved = true\n reject_(reason)\n cleanup()\n }\n\n if (signal) {\n if (signal.aborted) {\n reject(signal.reason)\n }\n\n signal.addEventListener('abort', signalListener, { once: true })\n }\n\n const next = async () => {\n if (isResolved) {\n return\n }\n\n const nextItem = await iterator.next()\n\n const index = currentIndex\n currentIndex++\n\n // Note: `iterator.next()` can be called many times in parallel.\n // This can cause multiple calls to this `next()` function to\n // receive a `nextItem` with `done === true`.\n // The shutdown logic that rejects/resolves must be protected\n // so it runs only one time as the `skippedIndex` logic is\n // non-idempotent.\n if (nextItem.done) {\n isIterableDone = true\n\n if (resolvingCount === 0 && !isResolved) {\n if (!stopOnError && errors.length > 0) {\n reject(new AggregateError(errors)) // eslint-disable-line unicorn/error-message\n return\n }\n\n isResolved = true\n\n if (skippedIndexesMap.size === 0) {\n resolve(result)\n return\n }\n\n const pureResult = []\n\n // Support multiple `pMapSkip`'s.\n for (const [index, value] of result.entries()) {\n if (skippedIndexesMap.get(index) === pMapSkip) {\n continue\n }\n\n pureResult.push(value)\n }\n\n resolve(pureResult)\n }\n\n return\n }\n\n resolvingCount++;\n\n // Intentionally detached\n (async () => {\n try {\n const element = await nextItem.value\n\n if (isResolved) {\n return\n }\n\n const value = await mapper(element, index)\n\n // Use Map to stage the index of the element.\n if (value === pMapSkip) {\n skippedIndexesMap.set(index, value)\n }\n\n result[index] = value\n\n resolvingCount--\n await next()\n } catch (error) {\n if (stopOnError) {\n reject(error)\n } else {\n errors.push(error)\n resolvingCount--\n\n // In that case we can't really continue regardless of `stopOnError` state\n // since an iterable is likely to continue throwing after it throws once.\n // If we continue calling `next()` indefinitely we will likely end up\n // in an infinite loop of failed iteration.\n try {\n await next()\n } catch (error) {\n reject(error)\n }\n }\n }\n })()\n };\n\n // Create the concurrent runners in a detached (non-awaited)\n // promise. We need this so we can await the `next()` calls\n // to stop creating runners before hitting the concurrency limit\n // if the iterable has already been marked as done.\n // NOTE: We *must* do this for async iterators otherwise we'll spin up\n // infinite `next()` calls by default and never start the event loop.\n (async () => {\n for (let index = 0; index < concurrency; index++) {\n try {\n await next()\n } catch (error) {\n reject(error)\n break\n }\n\n if (isIterableDone || isRejected) {\n break\n }\n }\n })()\n })\n}\n\nexport function pMapIterable(\n iterable,\n mapper,\n {\n concurrency = Number.POSITIVE_INFINITY,\n backpressure = concurrency,\n } = {},\n) {\n if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n throw new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`)\n }\n\n if (typeof mapper !== 'function') {\n throw new TypeError('Mapper function is required')\n }\n\n if (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n throw new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`)\n }\n\n if (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {\n throw new TypeError(`Expected \\`backpressure\\` to be an integer from \\`concurrency\\` (${concurrency}) and up or \\`Infinity\\`, got \\`${backpressure}\\` (${typeof backpressure})`)\n }\n\n return {\n async* [Symbol.asyncIterator]() {\n const iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]()\n\n const promises = []\n let pendingPromisesCount = 0\n let isDone = false\n let index = 0\n\n function trySpawn() {\n if (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {\n return\n }\n\n pendingPromisesCount++\n\n const promise = (async () => {\n const { done, value } = await iterator.next()\n\n if (done) {\n pendingPromisesCount--\n return { done: true }\n }\n\n // Spawn if still below concurrency and backpressure limit\n trySpawn()\n\n try {\n const returnValue = await mapper(await value, index++)\n\n pendingPromisesCount--\n\n if (returnValue === pMapSkip) {\n const index = promises.indexOf(promise)\n\n if (index > 0) {\n promises.splice(index, 1)\n }\n }\n\n // Spawn if still below backpressure limit and just dropped below concurrency limit\n trySpawn()\n\n return { done: false, value: returnValue }\n } catch (error) {\n pendingPromisesCount--\n isDone = true\n return { error }\n }\n })()\n\n promises.push(promise)\n }\n\n trySpawn()\n\n while (promises.length > 0) {\n const { error, done, value } = await promises[0]\n\n promises.shift()\n\n if (error) {\n throw error\n }\n\n if (done) {\n return\n }\n\n // Spawn if just dropped below backpressure limit and below the concurrency limit\n trySpawn()\n\n if (value === pMapSkip) {\n continue\n }\n\n yield value\n }\n },\n }\n}\n\nexport const pMapSkip = Symbol('skip')\n","function renderByTemplate({ engine, template, value } = {}) {\n if (!template) {\n return ''\n }\n const _model = engine.init(value)\n const regex = /\\{\\{\\s(.*?)\\s\\}\\}/g\n return template.replace(regex, (match) => {\n const result = _model.pipe(match)\n if (result === null || result === undefined) {\n return ''\n }\n return typeof result === 'object' ? JSON.stringify(result) : result\n })\n}\n\nexport default {\n renderByTemplate\n}\nexport {\n renderByTemplate\n}\n","export function replacePlaceholders({ content, mapping }) {\n let isObjectMode = false\n\n if (typeof content === 'object' && content !== null) {\n content = JSON.stringify(content)\n isObjectMode = true\n }\n\n /** \n // [[ eventRegistration.eventRegistrationCode | 0 ]]\n const regex = /(\\[*)\\[\\[\\s*([\\w.\\-]+)(?:\\s*\\|\\s*([^:\\]\\s]+))?(?:\\s*:\\s*([^\\]\\s]+))?\\s*\\]\\](\\]*)/g\n\n const result = content.replace(regex, (match, leadingBrackets, path, defaultValue, type, trailingBrackets) => {\n // Split the path into parts\n const keys = path.trim().split('.')\n\n // Traverse the nested object structure\n let value = mapping\n for (const key of keys) {\n // Handle empty keys (in case of double dots or leading/trailing dots)\n if (!key)\n continue\n\n value = value?.[key]\n if (value === undefined) {\n break\n }\n }\n\n // Apply default if missing\n if (value === undefined)\n value = defaultValue?.trim()\n if (value === undefined)\n return isObjectMode ? undefined : match\n\n value = value !== undefined\n ? leadingBrackets + value + trailingBrackets\n : match\n\n // Return replacement or original if not found\n return value\n })\n */\n\n // Regex to match both simple and complex expressions\n const regex = /\\[\\[\\s*([^[\\]]+?)\\s*\\]\\]/g;\n\n const result = content.replace(regex, (match, expression) => {\n // Trim whitespace from the expression\n const trimmedExpr = expression.trim()\n\n // Check if it's a simple path (alphanumeric, dots, hyphens only)\n if (/^[\\w.\\-]+$/.test(trimmedExpr)) {\n // Try to find this path in the mapping\n const keys = trimmedExpr.split('.')\n let value = mapping\n\n for (const key of keys) {\n if (!key) continue;\n value = value?.[key];\n if (value === undefined) break\n }\n\n // If found in mapping, return the value\n if (value !== undefined) {\n return value\n }\n }\n\n // For complex expressions or unmatched simple expressions, convert to EJS syntax\n return `<%= ${trimmedExpr} %>`\n })\n\n if (isObjectMode) {\n return JSON.parse(result)\n }\n return result\n}\n","/**\n * Sanitizes input by removing hidden/control characters with customizable whitespace handling.\n * @param {string} input - The string to sanitize.\n * @param {object} [options] - Configuration options.\n * @param {boolean} [options.normalizeWhitespace] - Collapse multiple spaces/tabs into one space.\n * @param {boolean} [options.removeNewlines] - If true, replaces newlines with spaces.\n * @param {boolean} [options.trim] - If true, trims leading/trailing whitespace.\n * @param {boolean} [options.debug] - If true, logs debug information about removed characters.\n * @returns {string} The sanitized string.\n */\nexport function sanitizeText(input, options = {}) {\n const {\n normalizeWhitespace = true,\n removeNewlines = false,\n trim = true,\n preserveBasicWhitespace = true,\n debug = false, // new option for debugging\n } = options\n\n if (typeof input !== 'string') {\n return input\n }\n\n let result = input\n\n if (debug) {\n console.log('Original input:', JSON.stringify(input))\n console.log('Options:', { normalizeWhitespace, removeNewlines, trim, preserveBasicWhitespace })\n }\n\n // Phase 1: Remove all control characters except basic whitespace if requested\n if (preserveBasicWhitespace && !removeNewlines) {\n if (debug) {\n const before = result\n const matches = []\n // Use a replacer function to capture what's being removed\n result = result.replace(/[\\x00-\\x08\\v\\f\\x0E-\\x1F\\x7F-\\x9F\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g, (match) => {\n matches.push({\n char: match,\n code: match.charCodeAt(0),\n hex: `0x${match.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')}`\n })\n return ''\n })\n if (matches.length > 0) {\n console.log('Phase 1 (preserve mode) - Removed characters:')\n matches.forEach((m) => {\n console.log(` - Character: ${JSON.stringify(m.char)}, Code: ${m.code}, Hex: ${m.hex}`)\n })\n console.log(`Removed ${matches.length} control character(s)`)\n } else {\n console.log('Phase 1 (preserve mode) - No control characters found')\n }\n } else {\n result = result.replace(/[\\x00-\\x08\\v\\f\\x0E-\\x1F\\x7F-\\x9F\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g, '')\n }\n } else {\n if (debug) {\n const before = result\n const matches = []\n result = result.replace(/[\\x00-\\x1F\\x7F-\\x9F\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g, (match) => {\n matches.push({\n char: match,\n code: match.charCodeAt(0),\n hex: `0x${match.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')}`\n })\n return ''\n })\n if (matches.length > 0) {\n console.log('Phase 1 (full removal mode) - Removed characters:')\n matches.forEach((m) => {\n console.log(` - Character: ${JSON.stringify(m.char)}, Code: ${m.code}, Hex: ${m.hex}`)\n })\n console.log(`Removed ${matches.length} control character(s)`)\n } else {\n console.log('Phase 1 (full removal mode) - No control characters found')\n }\n } else {\n result = result.replace(/[\\x00-\\x1F\\x7F-\\x9F\\u200B-\\u200D\\uFEFF\\u202A-\\u202E]/g, '')\n }\n }\n\n if (debug) {\n console.log('After Phase 1:', JSON.stringify(result))\n }\n\n // Phase 2: Handle whitespace transformations\n if (removeNewlines) {\n if (debug) {\n const before = result\n result = result.replace(/[\\r\\n]+/g, ' ')\n console.log('Phase 2 - Converted newlines to spaces')\n } else {\n result = result.replace(/[\\r\\n]+/g, ' ')\n }\n }\n\n if (normalizeWhitespace) {\n if (debug) {\n const before = result\n result = result.replace(/[ \\t]+/g, ' ')\n console.log('Phase 2 - Normalized whitespace')\n } else {\n result = result.replace(/[ \\t]+/g, ' ')\n }\n }\n\n if (debug) {\n console.log('After Phase 2:', JSON.stringify(result))\n }\n\n // Phase 3: Final trimming\n if (trim) {\n if (debug) {\n const before = result\n result = result.trim()\n console.log('Phase 3 - Trimmed leading/trailing whitespace')\n } else {\n result = result.trim()\n }\n }\n\n if (debug) {\n console.log('Final result:', JSON.stringify(result))\n console.log('--- Sanitization complete ---')\n }\n\n return result\n}\n","export function setId(id) {\n if (id && typeof id.toString === 'function') {\n return id.toString()\n }\n return id\n}\n","export function shuffleArray(array) {\n const arr = [...array]\n for (let i = arr.length - 1; i >= 0; i--) { // Changed `i > 0` to `i >= 0`\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]]\n }\n return arr\n}\n","function stringFormatter(str, delimiter = '_') {\n if (str === null || typeof str === 'undefined' || typeof str.toString === 'undefined') {\n return null\n }\n return str.toString()\n .trim()\n .toUpperCase()\n .replace('-', delimiter)\n .replace(' ', delimiter)\n}\n\nexport {\n stringFormatter\n}\n","function baseXEncode(num, base = 34) {\n const charset = getBaseCharset(base)\n return encode(num, charset)\n}\n\nfunction encode(int, charset) {\n const { byCode } = charset\n if (int === 0) {\n return byCode[0]\n }\n\n let res = ''\n const max = charset.length\n while (int > 0) {\n res = byCode[int % max] + res\n int = Math.floor(int / max)\n }\n return res\n}\n\nfunction getBaseCharset(base) {\n let charset = '9876543210ABCDEFGHJKLMNPQRSTUVWXYZ'\n if (base === 58) {\n charset = '9876543210ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz'\n }\n return indexCharset(charset)\n}\n\nfunction getCssClass(str) {\n return punctuationless(`${str}`).toLowerCase().split(' ').join('-')\n}\n\nfunction indexCharset(str) {\n const byCode = {}\n const byChar = {}\n const { length } = str\n let char\n for (let i = 0; i < length; i++) {\n char = str[i]\n byCode[i] = char\n byChar[char] = i\n }\n return { byCode, byChar, length }\n}\n\nfunction isSame(str1, str2) {\n if (typeof str1 !== 'string' || typeof str2 !== 'string') {\n return false\n }\n return str1.trim().toUpperCase() === str2.trim().toUpperCase()\n}\n\nfunction punctuationless(str) {\n return str.replace(/\\s+/g, '-').replace(/[.,\\/#!$%\\^&\\*;:{}=\\_`~()]/g, '');\n}\n\nfunction randomString({ len = 16, pattern = 'a1' } = {}) {\n const A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const a = 'abcdefghijklmnopqrstuvwxyz'\n const num = '1234567890'\n const mark = '~!@#$%^&*_+-='\n let str = ''\n if (pattern.includes('A')) {\n str += A\n }\n if (pattern.includes('a')) {\n str += a\n }\n if (pattern.includes('1')) {\n str += num\n }\n if (pattern.includes('#')) {\n str += mark\n }\n const chars = [...str]\n return [...new Array(len)].map((i) => {\n return chars[(Math.random() * chars.length) | 0]\n }).join``\n}\n\nfunction reverse(str) {\n const _str = (typeof str !== 'string') ? str.toString() : str\n const splitString = _str.split('')\n const reverseArray = splitString.reverse()\n return reverseArray.join('')\n}\n\nfunction safeToUpperCase(input) {\n return (typeof input?.toUpperCase === 'function') ? input.toUpperCase() : ''\n}\n\nfunction setCode(param) {\n // Initialize with defaults\n let base = 34\n let len = 8\n\n // Check the type of the parameter\n if (param === undefined) {\n // No parameters - use all defaults\n // base, len, pattern already have defaults\n } else if (typeof param === 'number') {\n // Backward compatibility: setCode(58)\n base = param\n // len and pattern stay at defaults\n } else if (typeof param === 'object' && param !== null) {\n // New style: setCode({ base: 58, len: 10, pattern: '2' })\n base = param.base ?? base\n len = param.len ?? len\n }\n\n const now = (new Date()).valueOf()\n const random = randomString({\n len,\n pattern: '1'\n })\n const str = reverse(`${now}${random}`)\n // const str = `${now}${random}`\n return baseXEncode(str, base)\n}\n\nfunction toCamelCase(str) {\n if (!str)\n return ''\n return str\n .trim()\n .split(/\\s+/)\n .map((word, index) => {\n if (!word)\n return ''\n if (index === 0) {\n return word.toLowerCase()\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n })\n .join('')\n}\n\nfunction toLowerCase(str) {\n if (!str)\n return ''\n return str\n .trim()\n .toLowerCase()\n}\n\nfunction toScreamingSnakeCase(str) {\n if (/[^\\w\\s]|_/g.test(str.replace(/_/g, ''))) {\n return null\n }\n return str\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/[\\s\\-\\.]+/g, '_')\n .toUpperCase()\n .replace(/^_+|_+$/g, '')\n .replace(/_{2,}/g, '_')\n}\n\nconst stringHelper = {\n getCssClass,\n isSame,\n punctuationless,\n safeToUpperCase,\n setCode,\n toCamelCase,\n toLowerCase,\n toScreamingSnakeCase,\n}\n\nexport {\n stringHelper\n}\n","export function trackingPlugin(schema, options) {\n // Add meta fields\n schema.add({\n meta: {\n active: { type: Boolean, default: true },\n created: { type: Number },\n creator: { type: String },\n deleted: { type: Boolean, default: false },\n modified: { type: Number },\n owner: { type: String },\n }\n })\n\n // Auto-update hook\n schema.pre('save', function (next) {\n this.meta.modified = Date.now()\n next()\n })\n\n // Add core indexes\n schema.index({\n 'meta.active': 1,\n 'meta.deleted': 1\n }, {\n name: 'tracking_status_index',\n background: true,\n partialFilterExpression: {\n 'meta.active': true,\n 'meta.deleted': false\n }\n })\n\n // Optional: Add helper methods\n // schema.methods.touch = function(userId) {\n // this.meta.updatedAt = new Date()\n // this.meta.updatedBy = userId\n // }\n}\n","import { trackingPlugin } from '../trackingPlugin/index.js'\n\nexport function tenantPlugin(schema, options) {\n // Apply tracking plugin first if not already present\n if (!schema.path('meta')) {\n trackingPlugin(schema, options)\n }\n\n // Add tenant-specific fields\n schema.add({\n metadata: [{ type: Object }], // Instead of Schema.Types.Mixed\n remarks: [{ type: Object }],\n tenantCode: { type: String, required: true }\n })\n\n // Add core indexes\n schema.index({\n tenantCode: 1\n }, {\n name: 'tenant_core_index',\n background: true\n })\n\n // 1. ENHANCE EXISTING TRACKING INDEXES\n const existingIndexes = schema.indexes()\n\n // Check if tracking_status_index exists\n const hasTenantStatusIndex = existingIndexes.some((idx) =>\n idx.name === 'tenant_status_index' // Check by name for reliability\n )\n\n if (!hasTenantStatusIndex) {\n schema.index({\n tenantCode: 1, // Unique field first\n _type: 1, // Low-cardinality field last\n }, {\n name: 'tenant_status_index',\n background: true,\n partialFilterExpression: {\n '_type': 'Tenant',\n 'meta.active': true,\n 'meta.deleted': false\n }\n })\n }\n}\n","class AwsStsS3Client {\n constructor(options) {\n options = options || {}\n\n this.expiration = options.expiration || null\n this.s3Client = options.s3Client || null\n this.getIdToken = options.getIdToken\n this.region = options.region || 'ap-east-1'\n this.roleArn = options.roleArn\n this.roleSessionName = options.roleSessionName || 'web-identity-session'\n this.durationSession = options.durationSession || 3600\n this.awsClientSts = options.awsClientSts\n this.awsClientS3 = options.awsClientS3\n }\n\n static dummyData() {\n return {\n getIdToken: () => 'mock-web-identity-token',\n roleArn: 'arn:aws:iam::846252828949:role/oidcS3Jccpa',\n awsClientSts: {\n STSClient: class {},\n AssumeRoleWithWebIdentityCommand: class {}\n },\n awsClientS3: {\n S3Client: class {},\n PutObjectCommand: class {},\n GetObjectCommand: class {},\n DeleteObjectCommand: class {}\n }\n }\n }\n\n static init(options = {}) {\n if (options instanceof this) {\n return options\n }\n try {\n const instance = new this(options)\n if (!instance.isValid) {\n return null\n }\n return instance\n } catch (error) {\n return null\n }\n }\n\n get isExpired() {\n if (!this.expiration)\n return true\n const now = new Date()\n const bufferMs = 1 * 60 * 1000 // 一分钟缓冲\n return now >= new Date(this.expiration.getTime() - bufferMs)\n }\n\n get isValid() {\n if (!this.getIdToken) {\n throw new Error('Missing required configuration: getIdToken function')\n }\n if (!this.roleArn) {\n throw new Error('Missing required configuration: roleArn')\n }\n if (!this.awsClientSts) {\n throw new Error('Missing required AWS awsClientSts client configuration')\n }\n if (!this.awsClientSts.STSClient) {\n throw new Error('Missing STSClient in AWS awsClientSts client configuration')\n }\n if (!this.awsClientSts.AssumeRoleWithWebIdentityCommand) {\n throw new Error('Missing AssumeRoleWithWebIdentityCommand in AWS awsClientSts client configuration')\n }\n if (!this.awsClientS3) {\n throw new Error('Missing required AWS awsClientS3 client configuration')\n }\n\n const requiredS3Components = [\n 'S3Client',\n 'PutObjectCommand',\n 'GetObjectCommand',\n 'DeleteObjectCommand'\n ]\n\n for (const component of requiredS3Components) {\n if (!this.awsClientS3[component]) {\n throw new Error(`Missing ${component} in AWS awsClientS3 client configuration`)\n }\n }\n\n return true\n }\n\n async refreshCredentials() {\n try {\n const webIdentityToken = await this.getIdToken()\n if (!webIdentityToken) {\n throw new Error('getIdToken function returned empty or invalid token')\n }\n\n const stsClient = new this.awsClientSts.STSClient({ region: this.region })\n\n const stsResponse = await stsClient.send(\n new this.awsClientSts.AssumeRoleWithWebIdentityCommand({\n RoleArn: this.roleArn,\n RoleSessionName: this.roleSessionName,\n WebIdentityToken: await this.getIdToken(),\n DurationSeconds: this.durationSession,\n })\n )\n\n const credentials = stsResponse.Credentials\n if (!credentials) {\n throw new Error('No credentials returned from awsClientSts')\n }\n\n this.expiration = credentials.Expiration\n\n this.s3Client = new this.awsClientS3.S3Client({\n region: this.region,\n credentials: {\n accessKeyId: credentials.AccessKeyId,\n secretAccessKey: credentials.SecretAccessKey,\n sessionToken: credentials.SessionToken,\n }\n })\n\n return this\n } catch (error) {\n throw new Error(`Failed to refresh credentials: ${error.message}`)\n }\n }\n\n async getS3Client() {\n if (this.isExpired || !this.s3Client) {\n await this.refreshCredentials()\n }\n return this.s3Client\n }\n\n async putObject(params) {\n try {\n const client = await this.getS3Client()\n const command = new this.awsClientS3.PutObjectCommand(params)\n await client.send(command)\n const fileArr = params.Key.split('/')\n return {\n url: `https://s3.${this.region}.amazonaws.com/${params.Bucket}/${params.Key}`,\n filename: fileArr.pop(),\n folder: params.Bucket,\n subFolders: fileArr\n }\n } catch (error) {\n throw new Error(`Failed to put object: ${error.message}`)\n }\n }\n\n async getObject(params) {\n try {\n const client = await this.getS3Client()\n const command = new this.awsClientS3.GetObjectCommand(params)\n const response = await client.send(command)\n return {\n body: response.Body,\n contentType: response.ContentType,\n lastModified: response.LastModified,\n contentLength: response.ContentLength,\n }\n } catch (error) {\n throw new Error(`Failed to get object: ${error.message}`)\n }\n }\n\n async deleteObject(params) {\n try {\n const client = await this.getS3Client()\n const command = new this.awsClientS3.DeleteObjectCommand(params)\n await client.send(command)\n return true\n } catch (error) {\n throw new Error(`Failed to delete object: ${error.message}`)\n }\n }\n}\n\nexport { AwsStsS3Client }\n","import { KeyValueObject } from '../keyValueObject/index.js'\nimport { objectHelper } from '../../helpers/objectHelper/index.js'\nimport { stringFormatter } from '../../helpers/stringFormatter/index.js'\nimport { stringHelper } from '../../helpers/stringHelper/index.js'\n\nconst DELIMITER = '_'\n\nclass Metadata extends KeyValueObject {\n static init(options = {}) {\n if (options instanceof this) {\n return options\n }\n const instance = new this({\n ...options,\n key: stringFormatter(options.key, DELIMITER),\n })\n return instance.isValid ? instance : null\n }\n static get _classname() {\n return 'Metadata'\n }\n // Override the fromArrayWithCustomMapping method\n static mapToKeyValue(arr = [], keyPath = 'key', valuePath = 'value') {\n if (!Array.isArray(arr)) {\n return []\n }\n\n return arr.reduce((acc, item) => {\n if (item && typeof item === 'object') {\n // Use objectHelper.get to support nested paths (assuming objectHelper is available)\n const key = objectHelper.get(item, keyPath)\n const value = objectHelper.get(item, valuePath)\n\n // Only add if key exists (isValid condition)\n if (key !== undefined && key !== null) {\n // Convert value to screaming snake case\n const formattedValue = value !== undefined ? stringHelper.toScreamingSnakeCase(String(value)) : ''\n acc.push(this.init({\n key,\n value: formattedValue\n }))\n }\n }\n return acc\n }, [])\n }\n static merge(toArr, fromArr) {\n (fromArr || []).map((from) => {\n const found = toArr.find((to) => {\n return _isSame(to.key, from.key)\n })\n if (found) {\n found.value = _mergeValues(from.value, found.value)\n } else {\n toArr.push(from)\n }\n return from\n })\n return toArr\n }\n static sameKey(item, key) {\n return _isSame(item.key, key)\n }\n}\n\nfunction _isSame(key1, key2) {\n return stringFormatter(key1, DELIMITER) === stringFormatter(key2, DELIMITER)\n}\n\nfunction _mergeValues(existingValue, newValue) {\n if (existingValue === undefined)\n return newValue\n\n // Handle arrays by concatenating\n if (Array.isArray(existingValue) && Array.isArray(newValue)) {\n return [...new Set([...existingValue, ...newValue])]\n }\n\n // Handle objects by merging\n if (typeof existingValue === 'object' && typeof newValue === 'object'\n && !Array.isArray(existingValue) && !Array.isArray(newValue)) {\n return { ...existingValue, ...newValue }\n }\n\n // // Handle numbers by adding\n // if (typeof existingValue === 'number' && typeof newValue === 'number') {\n // return existingValue\n // }\n\n // // Handle strings by concatenating\n // if (typeof existingValue === 'string' && typeof newValue === 'string') {\n // return existingValue\n // }\n\n // Default: use the new value\n return newValue\n}\n\nexport {\n Metadata\n}\n","import {\n changeCreatorOwner,\n init,\n initFromArray,\n initOnlyValidFromArray,\n setId,\n} from '../../helpers/index.js'\n\nexport class TrackedEntity {\n constructor(options = {}) {\n options = options || {}\n\n const id = options._id || options.id\n this.id = setId(id)\n this._type = options._type || 'TrackedEntity'\n\n const timestamp = Date.now()\n this.meta = {\n active: options.meta?.active ?? options.active ?? true,\n created: options.meta?.created ?? (options.created\n ? new Date(options.created).getTime()\n : timestamp),\n creator: options.meta?.creator ?? options.creator ?? '',\n deleted: options.meta?.deleted ?? options.deleted ?? false,\n modified: options.meta?.modified ?? (options.modified\n ? new Date(options.modified).getTime()\n : timestamp),\n owner: options.meta?.owner ?? options.owner ?? '',\n }\n\n // if (trackFlat) {\n // Object.assign(this, _tracking)\n // } else {\n // this.meta = { ..._tracking, ...options.meta }\n // }\n }\n\n // Class methods\n static dummyData() {\n const now = Date.now()\n return {\n meta: {\n active: true,\n deleted: false,\n created: now,\n creator: 'creator',\n modified: now,\n owner: 'owner'\n }\n }\n }\n\n static get _classname() {\n return 'TrackedEntity'\n }\n static get _superclass() {\n return 'TrackedEntity'\n }\n\n static init(options = {}) {\n return init(this, options)\n }\n static initFromArray(arr = []) {\n return initFromArray(this, arr)\n }\n static initOnlyValidFromArray(arr = []) {\n return initOnlyValidFromArray(this, arr)\n }\n // In your class definition\n static ALLOWED_META_PROPS = ['active', 'deleted', 'owner']\n\n // static nest(entity) {\n // const { active, created, creator, deleted, modified, owner, ...rest } = entity\n // return { ...rest, meta: { active, created, creator, deleted, modified, owner } }\n // }\n\n // getters\n get __valid() {\n return {}\n }\n get isValid() {\n return !!this\n }\n get active() {\n return this.meta?.active ?? this.active\n }\n get created() {\n return this.meta?.created ?? this.created\n }\n get creator() {\n return this.meta?.creator ?? this.creator\n }\n get deleted() {\n return this.meta?.deleted ?? this.deleted\n }\n get modified() {\n return this.meta?.modified ?? this.modified\n }\n get owner() {\n return this.meta?.owner ?? this.owner\n }\n changeCreatorOwner({ source, target }) {\n return changeCreatorOwner(this, { source, target }).setModified()\n }\n delete() {\n return this.setDeleted()\n }\n setActive() {\n if (this.meta) {\n this.meta.active = true\n } else {\n this.active = true\n }\n return this\n }\n setDeleted() {\n if (this.meta) {\n this.meta.deleted = true\n } else {\n this.deleted = true\n }\n return this\n }\n setModified() {\n const timestamp = Date.now()\n if (this.meta) {\n this.meta.modified = timestamp\n } else {\n this.modified = timestamp\n }\n return this\n }\n setOwner(owner) {\n if (!owner) {\n return this\n }\n if (this.meta) {\n this.meta.owner = owner\n } else {\n this.owner = owner\n }\n return this\n }\n unsetActive() {\n if (this.meta) {\n this.meta.active = false\n } else {\n this.active = false\n }\n return this\n }\n unsetDeleted() {\n if (this.meta) {\n this.meta.deleted = false\n } else {\n this.deleted = false\n }\n return this\n }\n\n update(update) {\n const allowedProps = this.constructor.ALLOWED_META_PROPS\n\n // Start with current meta\n const newMeta = { ...this.meta }\n\n // Handle update.meta\n if (update.meta) {\n allowedProps.forEach(prop => {\n if (update.meta.hasOwnProperty(prop)) {\n newMeta[prop] = update.meta[prop]\n }\n })\n }\n\n // Handle root-level props\n allowedProps.forEach(prop => {\n if (update.hasOwnProperty(prop)) {\n newMeta[prop] = update[prop]\n }\n })\n\n // Only update if changed\n if (JSON.stringify(this.meta) !== JSON.stringify(newMeta)) {\n this.meta = newMeta\n }\n\n return this.setModified()\n }\n}\n","import { init } from '../../helpers/index.js'\nimport { KeyValueObject } from '../keyValueObject/index.js'\nimport { Metadata } from '../metadata/index.js'\nimport { TrackedEntity } from '../trackedEntity/index.js'\n\nexport class PushEnvelope extends TrackedEntity {\n constructor(options) {\n options = options || {}\n super(options)\n\n this.id = options.id\n this.body = options.body\n this.data = options.data\n this.dirty = options.dirty\n this.metadata = Metadata.initOnlyValidFromArray(options.metadata)\n this.remarks = KeyValueObject.initOnlyValidFromArray(options.remarks)\n this.threadID = options.threadID\n this.title = options.title\n }\n static get _classname() {\n return 'PushEnvelope'\n }\n static get _superclass() {\n return 'PushEnvelope'\n }\n static init(options = {}) {\n return init(this, options)\n }\n\n get _classname() {\n return 'PushEnvelope'\n }\n\n get _superclass() {\n return 'PushEnvelope'\n }\n\n get isValid() {\n return super.isValid && this.data\n }\n}\n","const QLogLevel = {\n trace: { weight: 10, name: 'TRACE' },\n debug: { weight: 20, name: 'DEBUG' },\n info: { weight: 30, name: 'INFO' },\n warn: { weight: 40, name: 'WARN' },\n error: { weight: 50, name: 'ERROR' },\n critical: { weight: 60, name: 'CRITICAL' },\n alert: { weight: 70, name: 'ALERT' },\n emergency: { weight: 80, name: 'EMERGENCY' }\n}\n\nfunction getQLogLevel(name) {\n const key = name.toLowerCase()\n if (QLogLevel[key]) return QLogLevel[key]\n return null\n}\n\nexport {\n getQLogLevel,\n QLogLevel,\n}\n","class LogRecord {\n constructor(options = {}) {\n options = options || {}\n this.data = options.data\n this.level = options.level\n this.timestamp = options.timestamp\n this.stackTrace = _setStackTrace(options)\n this.name = options.name ?? ''\n this.zone = options.zone\n }\n\n toString() {\n return `[${this.logName(this)}] ${this.serialize(this)}\\n${this.stackTrace || ''}\\n${this.zone || ''}`\n }\n\n logName() {\n let result = `${this.timestamp}`\n if (this.level.name) {\n result += `>${this.level.name}`\n }\n if (this.name) {\n result += `>${this.name}`\n }\n return result\n }\n\n serialize() {\n if (this.data instanceof Error || typeof this.data?.message !== 'undefined') {\n return this.data.message\n }\n if (this.data === null) {\n return 'null'\n }\n if (this.data === undefined) {\n return 'undefined'\n }\n if (typeof this.data === 'object') {\n return JSON.stringify(this.data)\n }\n return this.data.toString()\n }\n}\n\nfunction _setStackTrace(options) {\n if (options.stackTrace) {\n return options.stackTrace\n }\n if (options.data instanceof Error || typeof options.data?.stack !== 'undefined') {\n return options.data.stack\n }\n return null\n}\n\nexport {\n LogRecord\n}\n","import { QLogLevel } from './logLevel.js'\nimport { LogRecord } from './logRecord.js'\n\nlet instance\n\nclass QLog {\n constructor(options = {}) {\n const { level } = options\n this._level = level ?? QLogLevel.debug\n this._handlers = new Map()\n }\n\n static getInstance(options) {\n if (!instance) {\n instance = new QLog(options)\n }\n return instance\n }\n\n setLevel(level) {\n this._level = level\n return this\n }\n\n addHandler(handler) {\n if (handler instanceof QLog) {\n this._handlers.set(handler.constructor, handler)\n }\n return this\n }\n\n removeHandler(handlerClass) {\n this._handlers.delete(handlerClass)\n return this\n }\n\n receive({ record }) {\n if (record.level?.weight < this._level?.weight) {\n return\n }\n this._handlers.forEach((value) => {\n value.receive({ record })\n })\n this.logBody(record)\n }\n\n logBody(record) {\n }\n\n trace(options, object) { // trace('user', user)\n return this._log({\n level: QLogLevel.trace,\n object,\n options,\n })\n }\n\n debug(options, object) { // debug('user', user)\n return this._log({\n level: QLogLevel.debug,\n object,\n options,\n })\n }\n\n info(options, object) {\n return this._log({\n level: QLogLevel.info,\n object,\n options,\n })\n }\n\n warn(options, object) {\n return this._log({\n level: QLogLevel.warn,\n object,\n options,\n })\n }\n\n error(options, object) { // error('message', e)\n return this._log({\n level: QLogLevel.error,\n object,\n options,\n })\n }\n\n critical(options, object) {\n return this._log({\n level: QLogLevel.critical,\n object,\n options,\n })\n }\n\n _log({ level, object, options }) {\n if (typeof object === 'undefined') {\n object = options\n options = ''\n }\n const timestamp = Date.now()\n const record = new LogRecord({\n data: object,\n level,\n timestamp,\n stackTrace: object?.stack ?? options?.stack ?? null,\n name: options ?? ''\n })\n return this.receive({ record })\n }\n}\n\nfunction logger() {\n return QLog.getInstance()\n}\n\nexport {\n logger,\n QLog\n}\n","import { QLogLevel } from '../logLevel.js'\nimport { QLog } from '../qLog.js'\n\nclass ConsoleLog extends QLog {\n constructor(options = {}) {\n const { format } = options\n super(options)\n this.format = format\n }\n\n logBody(record) {\n const logName = record.logName()\n const message = this.format ? this.format(record) : record.serialize()\n\n switch (record.level) {\n case QLogLevel.error:\n case QLogLevel.critical:\n case QLogLevel.alert:\n case QLogLevel.emergency:\n console.error(`[${logName}] ${message}`, record.stackTrace || '')\n break\n case QLogLevel.warn:\n console.warn(`[${logName}] ${message}`, record.stackTrace || '')\n break\n case QLogLevel.info:\n console.error(`[${logName}] ${message}`, record.stackTrace || '')\n break\n case QLogLevel.debug:\n console.error(`[${logName}] ${message}`, record.stackTrace || '')\n break\n default:\n console.error(`[${logName}] ${message}`, record.stackTrace || '')\n }\n }\n}\n\nexport {\n ConsoleLog\n}\n","const QLogEnv = {\n debug: { name: 'DEBUG' },\n production: { name: 'PRODUCTION' }\n}\n\nfunction getQLogEnv(name) {\n const key = name.toLowerCase()\n if (QLogEnv[key]) {\n return QLogEnv[key]\n }\n return null\n}\n\nexport {\n getQLogEnv,\n QLogEnv,\n}\n","import { KeyValueObject } from '../keyValueObject/index.js'\n\nconst updateAllowedProps = [\n 'attributes',\n 'ref'\n]\n\nclass QMeta {\n constructor(options = {}) {\n options = options || {}\n this.attributes = KeyValueObject.initOnlyValidFromArray(options.attributes)\n this.ref = options.ref || {}\n }\n\n static get _classname() {\n return 'QMeta'\n }\n static get _superclass() {\n return 'QMeta'\n }\n\n // Class methods\n static init(options = {}) {\n if (options instanceof QMeta) {\n return options\n }\n return new QMeta(options)\n }\n\n // instance methods\n addAttribute(obj) {\n const kvObject = KeyValueObject.init(obj)\n if (!kvObject) {\n throw new Error('invalid meta attribute')\n }\n this.attributes.push(kvObject)\n return this\n }\n\n update(obj) {\n Object.keys(obj).forEach((key) => {\n if (updateAllowedProps.includes(key)) {\n if (key === 'attributes') {\n this[key] = KeyValueObject.initOnlyValidFromArray(obj[key])\n } else {\n this[key] = obj[key]\n }\n }\n })\n return this\n }\n}\n\nexport {\n QMeta\n}\n","import { init } from '../../helpers/index.js'\n\nexport class ActionRecord {\n constructor(options) {\n options = options || {}\n\n const { _Actor } = options._constructor || {}\n this._Actor = _Actor\n\n this._actor = options._actor\n\n this.actorCode = typeof options === 'number' ? null : (options.actorCode || null)\n this.timestamp = typeof options === 'number' ? options : (options.timestamp || null)\n }\n\n static get _classname() {\n return 'ActionRecord'\n }\n static get _superclass() {\n return 'ActionRecord'\n }\n static dummyData() {\n return {\n timestamp: (new Date()).valueOf(),\n }\n }\n static init(options = {}) {\n return init(this, options)\n }\n\n get _classname() {\n return 'ActionRecord'\n }\n\n get _superclass() {\n return 'ActionRecord'\n }\n\n get actor() {\n return this._Actor && typeof this._Actor.init === 'function' ? this._Actor.init(this._actor) : this._actor\n }\n\n get isValid() {\n return !!this.timestamp\n }\n\n update(update) {\n if (typeof update === 'number') {\n this.timestamp = update\n return this\n }\n Object.keys(update).forEach((key) => {\n this[key] = update[key]\n })\n return this\n }\n}\n","import { init, initFromArray, initOnlyValidFromArray } from '../../helpers/index.js'\nimport { ActionRecord } from './actionRecord.js'\n\nconst notUpdateAllowedProps = [\n '_ActionRecord',\n 'created',\n // 'statusType'\n]\n\nexport class Status {\n constructor(options) {\n options = options || {}\n\n const { _ActionRecord } = options._constructor || {}\n this._ActionRecord = _ActionRecord && (_ActionRecord._superclass === ActionRecord._superclass) ? _ActionRecord : ActionRecord\n\n this.created = this._ActionRecord.init(options.created || { timestamp: (new Date()).valueOf() })\n // this.statusType = options.statusType || 'Status'\n }\n\n static get _classname() {\n return 'Status'\n }\n static get _superclass() {\n return 'Status'\n }\n static dummyData() {\n return {}\n }\n static init(options = {}) {\n return init(this, options)\n }\n static initFromArray(arr = []) {\n return initFromArray(this, arr)\n }\n static initOnlyValidFromArray(arr = []) {\n return initOnlyValidFromArray(this, arr)\n }\n\n get _classname() {\n return 'Status'\n }\n get _superclass() {\n return 'Status'\n }\n get isCreated() {\n return this.created?.timestamp !== null\n }\n get isValid() {\n return !!this\n }\n\n setValue(t, actorCode, key) {\n const timestamp = t || Date.now()\n this[key] = this[key] instanceof this._ActionRecord ? this[key].update({ actorCode, timestamp }) : this._ActionRecord.init({ actorCode, timestamp })\n return this\n }\n\n update(update) {\n Object.keys(update).forEach((key) => {\n if (!notUpdateAllowedProps.includes(key)) {\n this[key] = this[key] instanceof this._ActionRecord ? this[key].update(update[key]) : this._ActionRecord.init(update[key])\n }\n })\n return this\n }\n}\n","import { Status } from './status.js'\n\nexport class StatusDocument extends Status {\n constructor(options) {\n options = options || {}\n super(options)\n\n this.archived = this._ActionRecord.init(options.archived)\n this.completed = this._ActionRecord.init(options.completed)\n this.discarded = this._ActionRecord.init(options.discarded)\n this.drafted = this._ActionRecord.init(options.drafted)\n // this.statusType = 'StatusDocument'\n }\n\n static get _classname() {\n return 'StatusDocument'\n }\n get _classname() {\n return 'StatusDocument'\n }\n get isArchived() {\n return this.created?.timestamp !== null\n }\n get isCompleted() {\n return this.completed?.timestamp !== null\n }\n get isDiscarded() {\n return this.discarded?.timestamp !== null\n }\n get isDrafted() {\n return this.drafted?.timestamp !== null\n }\n get isValid() {\n return super.isValid\n }\n setArchived(value, actorCode) {\n // const timestamp = value || Date.now()\n // this.archived = this.archived instanceof this._ActionRecord ? this.archived.update({ actorCode, timestamp }) : this._ActionRecord.init({ actorCode, timestamp })\n // return this\n return this.setValue(value, actorCode, 'archived')\n }\n setCompleted(value, actorCode) {\n return this.setValue(value, actorCode, 'completed')\n }\n setDiscarded(value, actorCode) {\n return this.setValue(value, actorCode, 'discarded')\n }\n setDrafted(value, actorCode) {\n return this.setValue(value, actorCode, 'drafted')\n }\n}\n","import { KeyValueObject } from '../keyValueObject/index.js'\nimport { Metadata } from '../metadata/index.js'\nimport { TrackedEntity } from '../trackedEntity/index.js'\n\nexport class TenantAwareEntity extends TrackedEntity {\n constructor(options = {}) {\n options = options || {}\n\n /**\n * instead of throw error, we choose to implement the isValid checking\n */\n // if (!options.tenantCode) {\n // throw new Error('tenantCode required')\n // }\n\n super(options)\n this._type = options._type || 'TenantAwareEntity'\n\n this._tenant = options._tenant\n\n this.metadata = Metadata.initOnlyValidFromArray(options.metadata)\n this.remarks = KeyValueObject.initOnlyValidFromArray(options.remarks)\n this.tenantCode = options.tenantCode // Required for multi-tenancy\n }\n\n // Class methods\n static dummyData() {\n return {\n ...super.dummyData(),\n metadata: [],\n remarks: [],\n tenantCode: 'tenantCode'\n }\n }\n static get _classname() {\n return 'TenantAwareEntity'\n }\n static get _superclass() {\n return 'TenantAwareEntity'\n }\n\n // getters\n get __valid() {\n return {\n ...super.__valid,\n tenantCode: this.tenantCode\n }\n }\n get isValid() {\n return super.isValid && !!this.tenantCode // Required for multi-tenancy\n }\n\n // instance methods\n insertOrUpdateMetadata(key, value) {\n this.metadata = Metadata.insertOrUpdateRecord(this.metadata, key, value)\n return this\n }\n getMetadata() {\n return this.metadata\n }\n getMetadataByKey(key) {\n return Metadata.foundByKey(this.metadata, key)\n }\n getMetadataValueByKey(key) {\n const found = this.getMetadataByKey(key)\n return found ? found.value : null\n }\n getMetadataValueByKeys(keys, kv) {\n if (!Array.isArray(keys)) {\n return null\n }\n kv = kv || this.metadata\n if (keys.length === 0) {\n return kv\n }\n const key = keys.shift()\n const _val = Metadata.getMetadataValueByKeyAsArray(kv, key)\n return this.getMetadataValueByKeys(keys, _val)\n }\n getMetadataValueByKeyAsArray(key) {\n return Metadata.getMetadataValueByKeyAsArray(this.metadata, key)\n }\n getRemarks() {\n return this.remarks\n }\n getRemarkByKey(key) {\n return KeyValueObject.foundByKey(this.remarks, key)\n }\n getRemarksValueByKey(key) {\n const found = this.getRemarkByKey(key)\n return found ? found.value : null\n }\n getTenantCode() {\n return this.tenantCode\n }\n\n update(update) {\n if (update.metadata && Array.isArray(update.metadata)) {\n this.metadata = Metadata.initOnlyValidFromArray(update.metadata)\n }\n if (update.remarks && Array.isArray(update.remarks)) {\n this.remarks = KeyValueObject.initOnlyValidFromArray(update.remarks)\n }\n return super.update(update)\n }\n}\n","import { pReduce, stringHelper } from '../../helpers/index.js'\n\nclass UniqueKeyGenerator {\n static get _classname() {\n return 'UniqueKeyGenerator'\n }\n static get _superclass() {\n return 'UniqueKeyGenerator'\n }\n static makeFormatter({ fieldName, format, options }) {\n switch (format) {\n case 'set_code':\n return _makeSetCode(fieldName, options)\n default:\n return _makeSetCode(fieldName, options)\n }\n }\n static makeGenerator(arr) {\n const fns = arr.map((item) => this.makeFormatter(item))\n return async (obj) => {\n const output = await pReduce(fns, async (acc, fn) => {\n const _obj = await fn(obj)\n return Object.assign(acc, _obj)\n }, obj)\n return output\n }\n }\n}\n\nfunction _makeSetCode(fieldName, options) {\n return async (obj = {}) => {\n if (obj[fieldName]) {\n return {}\n }\n return {\n [fieldName]: stringHelper.setCode()\n }\n }\n}\n\nexport {\n UniqueKeyGenerator\n}\n","import { WebAppResponse } from '../webAppResponse/webAppResponse'\n\ntype WebAppResponseCallbackFunction = (WebAppResponse) => void\n\ninterface WebAppRequestOptions {\n blockUI?: boolean | null\n callback?: WebAppResponseCallbackFunction | null\n data?: any[] | null\n event?: string | null\n reloadPage?: boolean | null\n sessionId?: string | null\n timeout?: number | null\n}\n\n\nclass WebAppRequest {\n [key: string]: any;\n public blockUI: boolean | null\n public callback: WebAppResponseCallbackFunction | null\n public data: any[] | null\n public event: string | null\n public reloadPage: boolean | null\n public sessionId: string | null\n public timeout: number | null\n \n constructor(options: WebAppRequestOptions = {}) {\n this.blockUI = options.blockUI ?? false\n this.callback = options.callback ?? null\n this.data = options.data ?? null\n this.event = options.event ?? null\n this.reloadPage = options.reloadPage ?? false\n this.sessionId = options.sessionId ?? null\n this.timeout = options.timeout ?? 30000\n }\n\n // Class methods\n static get _classname(): string {\n return 'WebAppRequest'\n }\n static get _superclass(): string {\n return 'WebAppRequest'\n }\n static init(options: any): WebAppRequest | null {\n if (options instanceof WebAppRequest) {\n return options\n }\n const instance = new WebAppRequest(options)\n return instance.isValid ? instance : null\n }\n static dummyData(): WebAppRequestOptions {\n return {\n data: null,\n sessionId: 'sessionId',\n }\n }\n\n // getters\n get isValid(): boolean {\n return !!this.sessionId\n }\n\n getId(): string | null {\n try {\n return this.sessionId\n } catch (err) {\n return null\n }\n }\n\n}\n\nexport {\n WebAppRequest\n}\n","// Helper type for when you want to restrict to known code\ntype KnownErrorCode = keyof typeof ERROR_CODES\ntype ErrorCode = typeof ERROR_CODES[KnownErrorCode]\n\nconst ERROR_CODES = {\n EXCUTE_EVENT_ERROR: 'EXCUTE_EVENT_ERROR',\n NOT_FOUND: 'NOT_FOUND',\n SERVER_ERROR: 'SERVER_ERROR',\n TIMEOUT: 'TIMEOUT',\n UNAUTHORIZED: 'UNAUTHORIZED',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n} as const\n\ninterface ErrorDetailOptions {\n code?: ErrorCode\n message?: string\n timestamp?: number | null\n}\n\nclass ErrorDetail {\n [key: string]: any;\n public code: ErrorCode | null\n public message: string\n public timestamp: number | null\n\n constructor(options: ErrorDetailOptions = {}) {\n this.code = options.code ?? null\n this.message = options.message ?? ''\n this.timestamp = options.timestamp ?? null\n }\n\n static init(options: any): ErrorDetail | null {\n if (options instanceof ErrorDetail) {\n return options\n }\n const instance = new ErrorDetail(options)\n return instance.isValid ? instance : null\n }\n\n get isValid(): boolean {\n return !!this.code\n }\n}\n\nexport {\n ErrorDetail,\n ERROR_CODES,\n type ErrorCode,\n type KnownErrorCode,\n type ErrorDetailOptions\n}\n","import { ErrorDetail } from './errorDetail'\n\ninterface WebAppResponseOptions {\n data?: any[] | null\n errorDetail?: any | null;\n sessionId?: string | null\n success?: boolean\n}\n\nclass WebAppResponse {\n [key: string]: any;\n public data: any[] | null\n public errorDetail: ErrorDetail | null;\n public sessionId: string | null\n public success: boolean;\n\n constructor(options: WebAppResponseOptions = {}) {\n this.data = options.data ?? null\n this.errorDetail = ErrorDetail.init(options.errorDetail)\n this.sessionId = options.sessionId ?? null\n this.success = options.success ?? false\n }\n\n // Class methods\n static get _classname(): string {\n return 'WebAppResponse'\n }\n static get _superclass(): string {\n return 'WebAppResponse'\n }\n static init(options: any): WebAppResponse | null {\n if (options instanceof WebAppResponse) {\n return options\n }\n const instance = new WebAppResponse(options)\n return instance.isValid ? instance : null\n }\n static dummyData(): WebAppResponseOptions {\n return {\n data: null,\n errorDetail: null,\n sessionId: 'sessionId',\n success: false\n }\n }\n\n // getters\n get isValid(): boolean {\n return !!this.sessionId\n }\n\n getId(): string | null {\n try {\n return this.sessionId\n } catch (err) {\n return null\n }\n }\n}\n\nexport {\n WebAppResponse\n}\n","// TypeScript entry point for q-utilities\n\n// 1. Named Exports (Keep these! They allow: import { helperA } from '...')\nexport * from './helpers/index.js'\nexport * from './models/index.js'\n\n// 2. Create the Default Export (Fixes: 'does not provide an export named default')\nimport * as helpers from './helpers/index.js'\nimport * as models from './models/index.js'\n\nexport default {\n ...helpers,\n ...models\n}\n"],"names":["authorize","allowCoordinator","allowOwner","query","required","user","scopes","excludedFields","calculateAge","timestamp","reference","birthDate","refDate","age","monthDiff","changeCreatorOwner","that","source","target","isConvertibleToNumber","value","getValueByKeys","keys","data","_keys","_data","keyArr","obj","firstKey","expandDotNotation","result","key","typeMatch","actualKey","type","current","i","part","lastKey","paragraphs","p","trimmed","get","path","acc","arrayMatch","index","item","getNestedValue","isPlainObject","merge","sources","_isObject","set","parts","lastPart","objectHelper","KeyValueObject","options","instance","arr","a","m","found","_value","_isSame","copy","keyPath","valuePath","toArr","fromArr","from","to","_mergeValues","delimiter","updateArr","obj1","obj2","existingValue","newValue","key1","key2","getValidation","rule","getDataByKey","_getDataByKey","_KeyValueObject","placeholder","keyValuePath","valueAttribute","rowValue","rowValueData","_hasOverlap","e","now","currentDate","start","end","dateValue","min","max","item1","item2","arr1","arr2","set1","formatDate","date","format","_date","dayMapChi","dayMapEng","dayMapEngShort","_format","ee","eee","eeee","y","d","h","mm","s","padding","TEMPLATE_COMPILER_EXCEPTION_TYPE","TemplateCompilerException","message","_EMPTY","_FN_NAMES","_HIDE","_NOT_EMPTY","_SELF","TAGS_EJS","TAGS_HANDLEBAR","_concatIf","args","condition","success","failover","_divide","divisor","_eq","arg","expected","_exec","methodName","_args","_filterAll","_existObject","_exist","_performOperation","res","group","_argsArr","_isPureStringOrNumber","operator","argValue","_splitOperator","input","str","matchedOp","op","remaining","_filterOne","list","_formatDate","partsMap","validTokens","_get","first","remainingKey","_handleFailover","_gt","_gte","_isEmpty","_isNotEmpty","_join","_stringifyObject","_lt","_lte","_map","_neq","_removeHtml","html","_htmlToPlainText","text","escapeRegExp","string","_replaceChar","_findAndReplace","find","replace","_sum","_toLowerCase","_toUpperCase","TemplateCompiler","separator","expression","_parseFunction","parameters","_parseParams","regex","match","fn","_callFunction","existFunctionNames","functionRegex","currentPart","parenCount","quoteChar","char","functionName","paramList","_parameters","_splitParamsRespectingContext","_parseSinglePart","bracketDepth","parenDepth","basicType","_toBasicType","_parseArrayContent","arrayStr","content","items","concatStringByArray","arrTemplate","restriction","template","showMinutes","_acc","maxLength","templateCompiler","convertString","patternMatch","_getValueByKeys","utilitiesGetValueByKeys","reg","create","timezoneOffset","year","month","day","Handler","isUTC","is24Hour","offsetMs","dateFormat","num","HandlerDate","MONTH_ENG_SHORT","HandlerMonth","HandlerYear","HandlerTime","hours","is12Hour","ampm","HandlerTimezone","offsetMinutes","sign","absOffset","minutes","offsetString","days","dayIndex","handle","convertTimestampToString","offsetMatch","offsetStr","detectControlCharacters","preserveBasicWhitespace","removeNewlines","matches","offset","getContext","position","contextLength","context","printControlCharReport","report","displayName","firstName","middleName","noFirstName","prefix","title","upperCaseLastName","_prefixHandler","_makeHandler","_firstNameHandler","_test","_lastNameHandler","field","_field","downloadFileByUrl","dataUrl","filename","link","escapeRegex","customHandler","responseHelper","handler","ignoreError","reqOrCtx","resOrNext","nextInExpress","isKoa","ctx","req","next","err","status","formattedResponse","findAllResult","service","findOneResult","params","id","hideSensitiveFields","aggregation","postResult","body","updateOneResult","doc","expressHelper","extractEmails","dirtyArray","emailRegex","emails","entry","email","b","pReduce","iterable","reducer","initialValue","resolve","reject","iterator","total","element","resolvedTotal","resolvedValue","error","Repo","init","config","systemLog","log","_makeLog","queryOptions","docs","isNew","_saveAll","savedData","saveOptions","label","message1","level","massage2","output","_result","pMap","ApiResponse","makeApiResponse","repo","Service","copies","makeService","generalPost","GeneralModel","UniqueKeyGenerator","resourceInfo","resources","globalShared","shared","relationship","_resourceInfo","_attachShared","resource","_makeService","_createRelationship","_dataItem","object","val","collectionName","fields","uniqueKeyGenerator","model","getObjectByArr","KeyValueObjectUtilities","el","dataPath","valueKey","keyValues","groupArrayByKey","curr","_class","initFromArray","initOnlyValidFromArray","mergeArraysByKey","safeArr1","safeArr2","mergedMap","mergeValues","padZeros","minLength","mapper","concurrency","stopOnError","signal","resolve_","reject_","errors","skippedIndexesMap","isRejected","isResolved","isIterableDone","resolvingCount","currentIndex","signalListener","cleanup","reason","nextItem","pureResult","pMapSkip","pMapIterable","backpressure","promises","pendingPromisesCount","isDone","trySpawn","promise","done","returnValue","renderByTemplate","engine","_model","replacePlaceholders","mapping","isObjectMode","trimmedExpr","sanitizeText","normalizeWhitespace","trim","debug","setId","shuffleArray","array","j","stringFormatter","baseXEncode","base","charset","getBaseCharset","encode","int","byCode","indexCharset","getCssClass","punctuationless","byChar","length","isSame","str1","str2","randomString","len","pattern","A","mark","chars","reverse","safeToUpperCase","setCode","param","random","toCamelCase","word","toLowerCase","toScreamingSnakeCase","stringHelper","trackingPlugin","schema","tenantPlugin","idx","AwsStsS3Client","bufferMs","requiredS3Components","component","credentials","client","command","fileArr","response","DELIMITER","Metadata","formattedValue","TrackedEntity","_a","_b","_c","_d","_e","_f","owner","update","allowedProps","newMeta","prop","__publicField","PushEnvelope","QLogLevel","LogRecord","_setStackTrace","QLog","handlerClass","record","ConsoleLog","logName","QLogEnv","getQLogEnv","name","updateAllowedProps","QMeta","kvObject","ActionRecord","_Actor","notUpdateAllowedProps","Status","_ActionRecord","t","actorCode","StatusDocument","TenantAwareEntity","kv","_val","fieldName","_makeSetCode","fns","_obj","WebAppRequest","ERROR_CODES","ErrorDetail","WebAppResponse","helpers"],"mappings":"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"}