storemw-core-api 1.0.177 → 1.0.179
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.
- package/dist/lib/query_builder/queryBuilder.js +8 -6
- package/dist/lib/query_builder/queryBuilder.js.map +1 -1
- package/dist/services/branch/UserBranchService.js +1 -1
- package/dist/services/branch/UserBranchService.js.map +1 -1
- package/dist/services/file/FileService.d.ts +1 -1
- package/dist/services/file/FileService.js +1 -1
- package/dist/services/file/FileService.js.map +1 -1
- package/dist/services/file/ImageCompressionProviderRegistry.d.ts +4 -7
- package/dist/services/file/ImageCompressionProviderRegistry.js.map +1 -1
- package/dist/services/file/unuse_ImageCompression.d.ts +1 -9
- package/dist/services/file/unuse_ImageCompression.js +54 -44
- package/dist/services/file/unuse_ImageCompression.js.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/utils/fileThumbnail.d.ts +3 -2
- package/dist/utils/fileThumbnail.js +20 -6
- package/dist/utils/fileThumbnail.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +2 -3
- package/dist/utils/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -365,10 +365,10 @@ const getListWithCount = async ({ model, tableName, mainAlias, countKey, sqlRela
|
|
|
365
365
|
sqlLimitOffset
|
|
366
366
|
});
|
|
367
367
|
let data = await model.raw(sqlRaw);
|
|
368
|
-
let aliasKeys = requestWhere?.aliasKeys
|
|
369
|
-
let filteredArray = Object.entries(sqlRelationMaps)
|
|
370
|
-
|
|
371
|
-
|
|
368
|
+
// let aliasKeys = requestWhere?.aliasKeys
|
|
369
|
+
// let filteredArray: any = Object.entries(sqlRelationMaps)
|
|
370
|
+
// .filter(([key]) => aliasKeys.includes(key))
|
|
371
|
+
// .map(([_, value]) => value);
|
|
372
372
|
// console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)
|
|
373
373
|
// get the count
|
|
374
374
|
const sqlRawCount = (0, exports.buildSqlRawSelectCount)({
|
|
@@ -376,7 +376,8 @@ const getListWithCount = async ({ model, tableName, mainAlias, countKey, sqlRela
|
|
|
376
376
|
mainAlias,
|
|
377
377
|
accountId,
|
|
378
378
|
sqlSelect: [`${mainAlias}.${countKey}`],
|
|
379
|
-
sqlRelation: filteredArray,
|
|
379
|
+
// sqlRelation: filteredArray,
|
|
380
|
+
sqlRelation: [...sqlRelation, ...sqlRelationAgg],
|
|
380
381
|
sqlWhere,
|
|
381
382
|
// sqlGroupBy: [`${mainAlias}.${countKey}`],
|
|
382
383
|
sqlGroupBy: [],
|
|
@@ -385,7 +386,8 @@ const getListWithCount = async ({ model, tableName, mainAlias, countKey, sqlRela
|
|
|
385
386
|
let count = await model.raw(sqlRawCount);
|
|
386
387
|
return {
|
|
387
388
|
data,
|
|
388
|
-
total: Number(count[0].filtered_count)
|
|
389
|
+
// total: Number(count[0].filtered_count)
|
|
390
|
+
total: Number(count[0]?.count ?? 0)
|
|
389
391
|
};
|
|
390
392
|
};
|
|
391
393
|
exports.getListWithCount = getListWithCount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { queryListFilterOperators } from '@/schema/common';\nimport { QueryList, QueryListFilter } from \"@/schema/common\";\nimport { throwError } from '@/utils';\n\ntype SqlDialect = \"postgres\" | \"mysql\";\ntype JoinType = \"left\" | \"inner\" | \"right\";\n\n/**\n * Create a typed map of model fields for safer access in raw queries.\n *\n * This utility takes a TypeScript model type `T` and returns an object\n * where each key is the field name and the value is the same string.\n * \n * The returned object can be used for dot-suggestion, reducing typos\n * when referencing columns in SQL queries.\n *\n * @example\n * import type { Customer } from \"@prisma/client\";\n * import { createFields } from \"@/utils/createFields\";\n * \n * const CustomerFields = createFields<Customer>();\n * console.log(CustomerFields.id); // \"id\"\n * console.log(CustomerFields.name); // \"name\"\n * \n * const query = `SELECT ${CustomerFields.id}, ${CustomerFields.name} FROM customers`;\n */\ntype FieldMap<T> = {\n [K in keyof T]: K;\n};\n\nexport function getFieldsByType<T>(): FieldMap<T> {\n return new Proxy({} as FieldMap<T>, {\n get: (_, prop) => prop,\n }) as FieldMap<T>;\n}\n\ntype FieldMeta = { name: string; type: string };\n\nexport const toFieldMap = (\n fields: FieldMeta[],\n prefix = \"uip\",\n infix = \"inf_\"\n): Record<string, string> => {\n return Object.fromEntries(\n fields.map(f => [`${prefix}.${f.name}`, `${infix}${f.name}`])\n );\n}\n\nexport const buildSqlRawSelect = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n skipFilterAccountId?: boolean\n}) => {\n\n if (skipFilterAccountId === false) {\n sqlWhere = [...sqlWhere, `${mainAlias}.accountid = ${accountId}`]\n }\n\n return `SELECT \n ${sqlSelect.join(\",\")}\n FROM \n ${tableName} as ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(' and ')}` : ``}\n ${sqlGroupBy.length > 0 ? `GROUP BY ${sqlGroupBy.join(\",\")}` : \"\"}\n ${sqlOrderby} \n ${sqlLimitOffset}\n `\n}\n\n\n// export const buildSqlRawSelectCount = ({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// skipFilterAccountId = false\n// }: {\n// tableName: string,\n// mainAlias: string,\n// accountId: number,\n// sqlSelect: string[]\n// sqlRelation: string[]\n// sqlWhere: string[]\n// sqlGroupBy: string[]\n// sqlOrderby: string,\n// skipFilterAccountId?: boolean\n// }) => {\n\n// const sql = buildSqlRawSelect({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// sqlLimitOffset: \"\",\n// skipFilterAccountId\n// })\n\n// return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`\n// }\n\nexport const buildSqlRawSelectCount = ({\n tableName,\n mainAlias,\n accountId,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[] // ignored on purpose\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string // ignored on purpose\n skipFilterAccountId?: boolean\n}) => {\n\n // enforce account isolation\n if (!skipFilterAccountId) {\n sqlWhere = [\n ...sqlWhere,\n `${mainAlias}.accountid = ${accountId}`\n ]\n }\n\n const baseQuery = `\n FROM ${tableName} AS ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(\" AND \")}` : \"\"}\n `\n\n // CASE 1: no grouping → FASTEST PATH\n if (!sqlGroupBy.length) {\n return `\n SELECT COUNT(*)\n ${baseQuery}\n `\n }\n\n // CASE 2: grouping → safe count of grouped results\n return `\n SELECT COUNT(*)\n FROM (\n SELECT 1\n ${baseQuery}\n GROUP BY ${sqlGroupBy.join(\",\")}\n ) t\n `\n}\n\n/**\n * Build a SQL join clause\n * @param joinType - \"left\" | \"inner\" | \"right\" (default: \"left\")\n * @param sourceAlias - alias of the source table, e.g., \"cus\"\n * @param targetTable - table to join, e.g., \"users\"\n * @param targetAlias - alias for the target table, e.g., \"usr\"\n * @param onConditions - array of ON conditions, e.g., [\"cus.user_id = usr.user_id\", \"usr.isdelete = false\"]\n */\nexport const buildSqlRelation = (\n joinType: JoinType,\n sourceAlias: string,\n targetTable: string,\n targetAlias: string,\n onConditions: string[]\n) => {\n return `\n ${joinType} join ${targetTable} as ${targetAlias}\n on ${onConditions.join(\" and \")}\n `;\n}\n/**\n * Build a SQL SELECT column list with aliases\n *\n * This function takes a table alias and a mapping of column names to\n * desired aliases, and returns a comma-separated string suitable for\n * inclusion in a SQL SELECT statement.\n *\n * @param abb - The alias of the table in the SQL query (e.g., \"cus\" for customers)\n * @param columns - An object mapping column names to their desired aliases\n * e.g., { id: \"customerId\", name: \"customerName\" }\n * @returns A string of columns with aliases, e.g.,\n * \"cus.id as customerId, cus.name as customerName\"\n *\n * @example\n * const cols = buildSqlSelect(\"cus\", { id: \"customerId\", name: \"customerName\" });\n * // cols => \"cus.id as customerId, cus.name as customerName\"\n */\nexport const buildSqlSelect = (abb: string, columns: Record<string, string>): string => {\n\n if (!columns || Object.keys(columns).length === 0) return \"\";\n\n return Object.entries(columns)\n .map(([col, alias]) => `${abb ? abb + \".\" : \"\"}${col} as ${alias}`)\n .join(\", \");\n}\n\nexport const buildSqlWhere = (\n filters: QueryListFilter[] | undefined,\n selectColumns: any,\n ctx: { dialect: SqlDialect } = {\n dialect: \"postgres\"\n }\n): {\n where: string,\n colNames: string[],\n aliasKeys: string[]\n} => {\n\n if (!filters || filters.length === 0) {\n return {\n where: ``,\n colNames: [],\n aliasKeys: []\n }\n }\n\n const andClauses: string[] = [];\n const orClauses: string[] = [];\n\n // const col = (field: string) => (tableAlias ? `${tableAlias}.${field}` : field);\n\n const col = (field: string) => {\n let filteredColumns = Object.fromEntries(\n Object.entries(selectColumns).filter(([key, alias]) => alias === field)\n )\n return filteredColumns ? Object.keys(filteredColumns)[0] : field\n }\n\n const colNames: string[] = []\n\n for (const filter of filters) {\n if (!filter) continue;\n\n const { field, operator, value } = filter;\n\n // const formatValue = (val: any, prefix?: string, suffix?: string) => \n // typeof val === \"string\" ? `'${prefix ?? \"\"}${val.replace(/'/g, \"''\")}${suffix ?? \"\"}'` : val;\n\n const formatValue = (\n val: any,\n operator: QueryListFilter[\"operator\"],\n prefix?: string,\n suffix?: string\n ) => {\n\n let returnValue = val\n let sqlValuePrefix = ``\n let sqlValueSuffix = ``\n\n if (operator === queryListFilterOperators.startsWith) {\n sqlValuePrefix = ``\n sqlValueSuffix = `%`\n }\n\n if (operator === queryListFilterOperators.endsWith) {\n sqlValuePrefix = `%`\n sqlValueSuffix = ``\n }\n\n if (\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n // override\n if (prefix) sqlValuePrefix = prefix\n if (suffix) sqlValueSuffix = suffix\n\n if (typeof val === \"string\") {\n returnValue = `'${sqlValuePrefix ?? \"\"}${val.replace(/'/g, \"''\")}${sqlValueSuffix ?? \"\"}'`\n }\n\n // check the type of val must string & operator is using like\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n if (typeof val !== \"string\") {\n throwError(`Filters part:${field} using:${operator} like the val must be string`)\n }\n }\n\n return returnValue\n\n }\n\n const formatWherePart = (val: any, operator: QueryListFilter[\"operator\"]) => {\n\n let sqlOperator: string = operator\n\n // check with like operator\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlOperator = ctx.dialect === \"postgres\" ? `ILIKE` : `LIKE` // only ILIKE supported in postgres\n }\n\n // not array in value\n if (Array.isArray(value) === false) {\n\n let sqlValue = formatValue(val, operator)\n return `${colName} ${sqlOperator} ${sqlValue}`\n\n }\n\n // for array in value\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\n let sqlValue = `${formatValue(i, operator)}`\n\n subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`)\n\n })\n\n return `(${subOrQuery.join(\" OR \")})`\n\n }\n\n const colName = `${col(field)}`\n\n switch (operator) {\n case queryListFilterOperators.eq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.contains)}`);\n // andClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOf:\n andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNull:\n andClauses.push(`${colName} IS NULL`);\n break;\n case queryListFilterOperators.isNotNull:\n andClauses.push(`${colName} IS NOT NULL`);\n break;\n\n // Or-variants\n case queryListFilterOperators.eqOr:\n // orClauses.push(`${colName} = ${formatValue(value, operator)}`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.eqOr)}`);\n break;\n case queryListFilterOperators.containsOr:\n // orClauses.push(`${colName} ILIKE '%${value, operator}%'`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.containsOr)}`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNullOr:\n orClauses.push(`${colName} IS NULL`);\n break;\n }\n\n colNames.push(colName)\n\n }\n\n const whereParts: string[] = [];\n if (andClauses.length) whereParts.push(`(${andClauses.join(\" AND \")})`);\n if (orClauses.length) whereParts.push(`(${orClauses.join(\" OR \")})`);\n\n // Extract aliasKeys before '.'\n const aliasKeys = Array.from(\n new Set(\n colNames\n .map(key => key.match(/\\b([a-zA-Z_][a-zA-Z0-9_]*)\\./)?.[1])\n .filter((v): v is string => Boolean(v)) // type guard keeps only valid strings\n )\n );\n\n return {\n where: whereParts.length ? `${whereParts.join(\" AND \")}` : \"\",\n colNames,\n aliasKeys\n }\n};\n\n/** Build ORDER BY clause */\nexport const buildSqlOrderBy = (sortField: QueryList[\"sortfield\"], sortOrder: QueryList[\"sortorder\"]) =>\n sortField ? `ORDER BY ${sortField} ${sortOrder.toUpperCase()}` : \"\";\n\n/** Build LIMIT/OFFSET clause */\nexport const buildSqlLimitOffset = (limit?: QueryList[\"limit\"], offset?: QueryList[\"offset\"]) => {\n const parts: string[] = [];\n\n const _limit = Number(limit ?? 10)\n const _offset = Number(offset ?? 0)\n\n if (_limit !== undefined) parts.push(`LIMIT ${_limit}`);\n if (_offset !== undefined) parts.push(`OFFSET ${_offset}`);\n\n return parts.join(\" \");\n};\n\n/** For Injection Fields */\nexport const buildInjectionFieldsSqlSelect = (alias: string, activeInjectionFields: any[] = []) => {\n return activeInjectionFields.reduce((acc, col) => {\n\n // check the field type is decimal\n let castValue = ``\n\n if (col?.fieldType === \"numeric\") {\n castValue = `::float`\n }\n\n if (col?.fieldType === \"integer\") {\n castValue = `::int`\n }\n\n acc[`${alias}.${col?.fieldName}${castValue}`] = `inf_${col?.fieldName}`;\n return acc;\n }, {} as Record<string, string>);\n}\n\n/**\n * Executes a dynamic SQL listing query along with a count query.\n * \n * This function builds SQL SELECT and COUNT statements using the provided\n * relation maps, filters, and query options, then executes them through\n * the given Prisma model's `raw()` method.\n *\n * Commonly used for paginated data listings that require both the\n * result set and total record count.\n * \n * Returns an object containing:\n * - `data`: The paginated result set.\n * - `total`: The total count of records that match the filters.\n */\nexport const getListWithCount = async ({\n model,\n tableName,\n mainAlias,\n countKey,\n sqlRelationMaps,\n accountId,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n}: {\n model: any,\n tableName: string,\n mainAlias: string,\n countKey: string,\n sqlRelationMaps: any,\n accountId: number,\n filters: any[],\n filterColumns: any,\n sqlSelect: string[]\n sqlSelectAgg: string[],\n sqlRelation: string[]\n sqlRelationAgg: string[],\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n}) => {\n\n const requestWhere = buildSqlWhere(filters, filterColumns)\n\n sqlWhere = [\n ...sqlWhere,\n ...(filters.length ? [requestWhere?.where] : []),\n ]\n\n // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await model.raw(sqlRaw)\n\n let aliasKeys = requestWhere?.aliasKeys\n\n let filteredArray: any = Object.entries(sqlRelationMaps)\n .filter(([key]) => aliasKeys.includes(key))\n .map(([_, value]) => value);\n\n // console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [`${mainAlias}.${countKey}`],\n sqlRelation: filteredArray,\n sqlWhere,\n // sqlGroupBy: [`${mainAlias}.${countKey}`],\n sqlGroupBy: [],\n sqlOrderby: ``\n })\n\n let count = await model.raw(sqlRawCount)\n\n return {\n data,\n total: Number(count[0].filtered_count)\n }\n\n}"]}
|
|
1
|
+
{"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { queryListFilterOperators } from '@/schema/common';\nimport { QueryList, QueryListFilter } from \"@/schema/common\";\nimport { throwError } from '@/utils';\n\ntype SqlDialect = \"postgres\" | \"mysql\";\ntype JoinType = \"left\" | \"inner\" | \"right\";\n\n/**\n * Create a typed map of model fields for safer access in raw queries.\n *\n * This utility takes a TypeScript model type `T` and returns an object\n * where each key is the field name and the value is the same string.\n * \n * The returned object can be used for dot-suggestion, reducing typos\n * when referencing columns in SQL queries.\n *\n * @example\n * import type { Customer } from \"@prisma/client\";\n * import { createFields } from \"@/utils/createFields\";\n * \n * const CustomerFields = createFields<Customer>();\n * console.log(CustomerFields.id); // \"id\"\n * console.log(CustomerFields.name); // \"name\"\n * \n * const query = `SELECT ${CustomerFields.id}, ${CustomerFields.name} FROM customers`;\n */\ntype FieldMap<T> = {\n [K in keyof T]: K;\n};\n\nexport function getFieldsByType<T>(): FieldMap<T> {\n return new Proxy({} as FieldMap<T>, {\n get: (_, prop) => prop,\n }) as FieldMap<T>;\n}\n\ntype FieldMeta = { name: string; type: string };\n\nexport const toFieldMap = (\n fields: FieldMeta[],\n prefix = \"uip\",\n infix = \"inf_\"\n): Record<string, string> => {\n return Object.fromEntries(\n fields.map(f => [`${prefix}.${f.name}`, `${infix}${f.name}`])\n );\n}\n\nexport const buildSqlRawSelect = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n skipFilterAccountId?: boolean\n}) => {\n\n if (skipFilterAccountId === false) {\n sqlWhere = [...sqlWhere, `${mainAlias}.accountid = ${accountId}`]\n }\n\n return `SELECT \n ${sqlSelect.join(\",\")}\n FROM \n ${tableName} as ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(' and ')}` : ``}\n ${sqlGroupBy.length > 0 ? `GROUP BY ${sqlGroupBy.join(\",\")}` : \"\"}\n ${sqlOrderby} \n ${sqlLimitOffset}\n `\n}\n\n\n// export const buildSqlRawSelectCount = ({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// skipFilterAccountId = false\n// }: {\n// tableName: string,\n// mainAlias: string,\n// accountId: number,\n// sqlSelect: string[]\n// sqlRelation: string[]\n// sqlWhere: string[]\n// sqlGroupBy: string[]\n// sqlOrderby: string,\n// skipFilterAccountId?: boolean\n// }) => {\n\n// const sql = buildSqlRawSelect({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// sqlLimitOffset: \"\",\n// skipFilterAccountId\n// })\n\n// return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`\n// }\n\nexport const buildSqlRawSelectCount = ({\n tableName,\n mainAlias,\n accountId,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[] // ignored on purpose\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string // ignored on purpose\n skipFilterAccountId?: boolean\n}) => {\n\n // enforce account isolation\n if (!skipFilterAccountId) {\n sqlWhere = [\n ...sqlWhere,\n `${mainAlias}.accountid = ${accountId}`\n ]\n }\n\n const baseQuery = `\n FROM ${tableName} AS ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(\" AND \")}` : \"\"}\n `\n\n // CASE 1: no grouping → FASTEST PATH\n if (!sqlGroupBy.length) {\n return `\n SELECT COUNT(*)\n ${baseQuery}\n `\n }\n\n // CASE 2: grouping → safe count of grouped results\n return `\n SELECT COUNT(*)\n FROM (\n SELECT 1\n ${baseQuery}\n GROUP BY ${sqlGroupBy.join(\",\")}\n ) t\n `\n}\n\n/**\n * Build a SQL join clause\n * @param joinType - \"left\" | \"inner\" | \"right\" (default: \"left\")\n * @param sourceAlias - alias of the source table, e.g., \"cus\"\n * @param targetTable - table to join, e.g., \"users\"\n * @param targetAlias - alias for the target table, e.g., \"usr\"\n * @param onConditions - array of ON conditions, e.g., [\"cus.user_id = usr.user_id\", \"usr.isdelete = false\"]\n */\nexport const buildSqlRelation = (\n joinType: JoinType,\n sourceAlias: string,\n targetTable: string,\n targetAlias: string,\n onConditions: string[]\n) => {\n return `\n ${joinType} join ${targetTable} as ${targetAlias}\n on ${onConditions.join(\" and \")}\n `;\n}\n/**\n * Build a SQL SELECT column list with aliases\n *\n * This function takes a table alias and a mapping of column names to\n * desired aliases, and returns a comma-separated string suitable for\n * inclusion in a SQL SELECT statement.\n *\n * @param abb - The alias of the table in the SQL query (e.g., \"cus\" for customers)\n * @param columns - An object mapping column names to their desired aliases\n * e.g., { id: \"customerId\", name: \"customerName\" }\n * @returns A string of columns with aliases, e.g.,\n * \"cus.id as customerId, cus.name as customerName\"\n *\n * @example\n * const cols = buildSqlSelect(\"cus\", { id: \"customerId\", name: \"customerName\" });\n * // cols => \"cus.id as customerId, cus.name as customerName\"\n */\nexport const buildSqlSelect = (abb: string, columns: Record<string, string>): string => {\n\n if (!columns || Object.keys(columns).length === 0) return \"\";\n\n return Object.entries(columns)\n .map(([col, alias]) => `${abb ? abb + \".\" : \"\"}${col} as ${alias}`)\n .join(\", \");\n}\n\nexport const buildSqlWhere = (\n filters: QueryListFilter[] | undefined,\n selectColumns: any,\n ctx: { dialect: SqlDialect } = {\n dialect: \"postgres\"\n }\n): {\n where: string,\n colNames: string[],\n aliasKeys: string[]\n} => {\n\n if (!filters || filters.length === 0) {\n return {\n where: ``,\n colNames: [],\n aliasKeys: []\n }\n }\n\n const andClauses: string[] = [];\n const orClauses: string[] = [];\n\n // const col = (field: string) => (tableAlias ? `${tableAlias}.${field}` : field);\n\n const col = (field: string) => {\n let filteredColumns = Object.fromEntries(\n Object.entries(selectColumns).filter(([key, alias]) => alias === field)\n )\n return filteredColumns ? Object.keys(filteredColumns)[0] : field\n }\n\n const colNames: string[] = []\n\n for (const filter of filters) {\n if (!filter) continue;\n\n const { field, operator, value } = filter;\n\n // const formatValue = (val: any, prefix?: string, suffix?: string) => \n // typeof val === \"string\" ? `'${prefix ?? \"\"}${val.replace(/'/g, \"''\")}${suffix ?? \"\"}'` : val;\n\n const formatValue = (\n val: any,\n operator: QueryListFilter[\"operator\"],\n prefix?: string,\n suffix?: string\n ) => {\n\n let returnValue = val\n let sqlValuePrefix = ``\n let sqlValueSuffix = ``\n\n if (operator === queryListFilterOperators.startsWith) {\n sqlValuePrefix = ``\n sqlValueSuffix = `%`\n }\n\n if (operator === queryListFilterOperators.endsWith) {\n sqlValuePrefix = `%`\n sqlValueSuffix = ``\n }\n\n if (\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n // override\n if (prefix) sqlValuePrefix = prefix\n if (suffix) sqlValueSuffix = suffix\n\n if (typeof val === \"string\") {\n returnValue = `'${sqlValuePrefix ?? \"\"}${val.replace(/'/g, \"''\")}${sqlValueSuffix ?? \"\"}'`\n }\n\n // check the type of val must string & operator is using like\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n if (typeof val !== \"string\") {\n throwError(`Filters part:${field} using:${operator} like the val must be string`)\n }\n }\n\n return returnValue\n\n }\n\n const formatWherePart = (val: any, operator: QueryListFilter[\"operator\"]) => {\n\n let sqlOperator: string = operator\n\n // check with like operator\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlOperator = ctx.dialect === \"postgres\" ? `ILIKE` : `LIKE` // only ILIKE supported in postgres\n }\n\n // not array in value\n if (Array.isArray(value) === false) {\n\n let sqlValue = formatValue(val, operator)\n return `${colName} ${sqlOperator} ${sqlValue}`\n\n }\n\n // for array in value\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\n let sqlValue = `${formatValue(i, operator)}`\n\n subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`)\n\n })\n\n return `(${subOrQuery.join(\" OR \")})`\n\n }\n\n const colName = `${col(field)}`\n\n switch (operator) {\n case queryListFilterOperators.eq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.contains)}`);\n // andClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOf:\n andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNull:\n andClauses.push(`${colName} IS NULL`);\n break;\n case queryListFilterOperators.isNotNull:\n andClauses.push(`${colName} IS NOT NULL`);\n break;\n\n // Or-variants\n case queryListFilterOperators.eqOr:\n // orClauses.push(`${colName} = ${formatValue(value, operator)}`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.eqOr)}`);\n break;\n case queryListFilterOperators.containsOr:\n // orClauses.push(`${colName} ILIKE '%${value, operator}%'`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.containsOr)}`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNullOr:\n orClauses.push(`${colName} IS NULL`);\n break;\n }\n\n colNames.push(colName)\n\n }\n\n const whereParts: string[] = [];\n if (andClauses.length) whereParts.push(`(${andClauses.join(\" AND \")})`);\n if (orClauses.length) whereParts.push(`(${orClauses.join(\" OR \")})`);\n\n // Extract aliasKeys before '.'\n const aliasKeys = Array.from(\n new Set(\n colNames\n .map(key => key.match(/\\b([a-zA-Z_][a-zA-Z0-9_]*)\\./)?.[1])\n .filter((v): v is string => Boolean(v)) // type guard keeps only valid strings\n )\n );\n\n return {\n where: whereParts.length ? `${whereParts.join(\" AND \")}` : \"\",\n colNames,\n aliasKeys\n }\n};\n\n/** Build ORDER BY clause */\nexport const buildSqlOrderBy = (sortField: QueryList[\"sortfield\"], sortOrder: QueryList[\"sortorder\"]) =>\n sortField ? `ORDER BY ${sortField} ${sortOrder.toUpperCase()}` : \"\";\n\n/** Build LIMIT/OFFSET clause */\nexport const buildSqlLimitOffset = (limit?: QueryList[\"limit\"], offset?: QueryList[\"offset\"]) => {\n const parts: string[] = [];\n\n const _limit = Number(limit ?? 10)\n const _offset = Number(offset ?? 0)\n\n if (_limit !== undefined) parts.push(`LIMIT ${_limit}`);\n if (_offset !== undefined) parts.push(`OFFSET ${_offset}`);\n\n return parts.join(\" \");\n};\n\n/** For Injection Fields */\nexport const buildInjectionFieldsSqlSelect = (alias: string, activeInjectionFields: any[] = []) => {\n return activeInjectionFields.reduce((acc, col) => {\n\n // check the field type is decimal\n let castValue = ``\n\n if (col?.fieldType === \"numeric\") {\n castValue = `::float`\n }\n\n if (col?.fieldType === \"integer\") {\n castValue = `::int`\n }\n\n acc[`${alias}.${col?.fieldName}${castValue}`] = `inf_${col?.fieldName}`;\n return acc;\n }, {} as Record<string, string>);\n}\n\n/**\n * Executes a dynamic SQL listing query along with a count query.\n * \n * This function builds SQL SELECT and COUNT statements using the provided\n * relation maps, filters, and query options, then executes them through\n * the given Prisma model's `raw()` method.\n *\n * Commonly used for paginated data listings that require both the\n * result set and total record count.\n * \n * Returns an object containing:\n * - `data`: The paginated result set.\n * - `total`: The total count of records that match the filters.\n */\nexport const getListWithCount = async ({\n model,\n tableName,\n mainAlias,\n countKey,\n sqlRelationMaps,\n accountId,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n}: {\n model: any,\n tableName: string,\n mainAlias: string,\n countKey: string,\n sqlRelationMaps: any,\n accountId: number,\n filters: any[],\n filterColumns: any,\n sqlSelect: string[]\n sqlSelectAgg: string[],\n sqlRelation: string[]\n sqlRelationAgg: string[],\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n}) => {\n\n const requestWhere = buildSqlWhere(filters, filterColumns)\n\n sqlWhere = [\n ...sqlWhere,\n ...(filters.length ? [requestWhere?.where] : []),\n ]\n\n // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await model.raw(sqlRaw)\n\n // let aliasKeys = requestWhere?.aliasKeys\n\n // let filteredArray: any = Object.entries(sqlRelationMaps)\n // .filter(([key]) => aliasKeys.includes(key))\n // .map(([_, value]) => value);\n\n // console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [`${mainAlias}.${countKey}`],\n // sqlRelation: filteredArray,\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n // sqlGroupBy: [`${mainAlias}.${countKey}`],\n sqlGroupBy: [],\n sqlOrderby: ``\n })\n\n let count = await model.raw(sqlRawCount)\n\n return {\n data,\n // total: Number(count[0].filtered_count)\n total: Number(count[0]?.count ?? 0)\n }\n\n}"]}
|
|
@@ -195,7 +195,7 @@ const UserBranchService = (props) => {
|
|
|
195
195
|
let sqlWhere = [
|
|
196
196
|
`brn.isdelete = false`,
|
|
197
197
|
`brn.istrash = false`,
|
|
198
|
-
...(filters.length ? [
|
|
198
|
+
// ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),
|
|
199
199
|
];
|
|
200
200
|
let sqlOrderby = (0, lib_1.buildSqlOrderBy)(sortfield, sortorder);
|
|
201
201
|
let sqlLimitOffset = (0, lib_1.buildSqlLimitOffset)(limit, offset);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserBranchService.js","sourceRoot":"","sources":["../../../src/services/branch/UserBranchService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n UserBranchModel,\n ModelUserFields,\n ModelUserBranchFields,\n ModelCountryFields,\n ModelStateFields,\n ModelAreaFields\n} from \"@/models\";\n\nimport { buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount, getUserBranchRelationMaps } from \"@/lib\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps } from \"@/utils\";\n\nexport const userBranchUserTypes = {\n customer: \"customer\",\n retailer: \"retailer\"\n}\n\nexport const userBranchTypes = {\n branch: \"branch\",\n branch_shipping: \"branch_shipping\",\n shipping_address: \"shipping_address\"\n} as const\n\nexport type UserBranchType = typeof userBranchTypes[keyof typeof userBranchTypes]\n\nexport type UserBranchUserType = typeof userBranchUserTypes[keyof typeof userBranchUserTypes]\n\nexport type UserBranchServiceProps = DefaultServiceProps & {\n userBranchUserType: UserBranchUserType,\n userBranchType: UserBranchType,\n};\n\nexport type UserBranchGetProps = QueryGet & {\n userBranchId: number,\n};\n\nexport type UserBranchByUserIdGetProps = QueryGet & {\n userId: number,\n onlyHQ?: boolean\n limit?: number\n};\n\nexport type UserBranchListProps = QueryList & {\n // id: number,\n};\n\nexport type UserBranchRemoveProps = {\n userBranchIds: number[]\n};\n\nexport type UserBranchCreateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\nexport type UserBranchUpdateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\n// const getCreatePayload = (branchType: BranchType, data: UserBranchCreateProps[\"data\"]) => {\n\n// if (branchType === \"administrator\" && \"administrator\" in data) {\n\n// return {\n// user_type: branchType,\n// // file_name: data.driverImage.filename,\n// // content_type: data.driverImage.contentType,\n// // bucket_name: data.driverImage.bucketName,\n// // project_id: data.driverImage.projectId,\n// // foldername_year: data.driverImage.foldernameYear,\n// // foldername_month: data.driverImage.foldernameMonth,\n// // foldername_day: data.driverImage.foldernameDay,\n// // upload_type: data.driverImage.uploadType,\n// // buffer_file_name: data.driverImage.bufferFilename,\n// // asset_url: data.driverImage.assetUrl,\n// // reference_id: data.driverImage.referenceId,\n// // reference_label: data.driverImage.referenceLabel,\n// // reference_type: data.driverImage.referenceType,\n// // batch_code: data?.driverImage?.batchCode ?? \"\",\n// // file_size_bytes: data.driverImage.fileSizeBytes,\n// // file_compress_format: data.driverImage.fileCompressFormat,\n// // request_file_size_bytes: data.driverImage.requestFileSizeBytes,\n// // request_file_name: data.driverImage.requestFilename,\n// // reference2_id: data.driverImage.reference2Id,\n// // reference2_label: data.driverImage.reference2Label,\n// // reference2_type: data.driverImage.reference2Type,\n// }\n// }\n\n// return false\n\n// }\n\nlet mainSqlSelect = {\n [`brn.${ModelUserBranchFields.branch_id}`]: \"branch_id\",\n [`brn.${ModelUserBranchFields.user_id}`]: \"user_id\",\n [`brn.${ModelUserBranchFields.area_id}`]: \"area_id\",\n [`brn.${ModelUserBranchFields.state_id}`]: \"state_id\",\n [`brn.${ModelUserBranchFields.country_id}`]: \"country_id\",\n [`brn.${ModelUserBranchFields.address_1}`]: \"address_1\",\n [`brn.${ModelUserBranchFields.address_2}`]: \"address_2\",\n [`brn.${ModelUserBranchFields.branch_code}`]: \"branch_code\",\n [`brn.${ModelUserBranchFields.branch_contact}`]: \"branch_contact\",\n [`brn.${ModelUserBranchFields.branch_email}`]: \"branch_email\",\n [`brn.${ModelUserBranchFields.branch_name}`]: \"branch_name\",\n [`brn.${ModelUserBranchFields.status}`]: \"status\",\n [`brn.${ModelUserBranchFields.is_hq}`]: \"is_hq\",\n [`brn.${ModelUserBranchFields.pic_contact}`]: \"pic_contact\",\n [`brn.${ModelUserBranchFields.pic_email}`]: \"pic_email\",\n [`brn.${ModelUserBranchFields.pic_name}`]: \"pic_name\",\n [`brn.${ModelUserBranchFields.postcode}`]: \"postcode\",\n [`brn.${ModelUserBranchFields.remark}`]: \"remark\",\n [`brn.${ModelUserBranchFields.type}`]: \"type\",\n}\n\nlet regionSqlSelect = {\n [`cou.${ModelCountryFields.country_name}`]: \"country_name\",\n [`state.${ModelStateFields.state_name}`]: \"state_name\",\n [`area.${ModelAreaFields.area_name}`]: \"area_name\",\n}\n\nlet defaultSqlSelect = {\n [`brn.${ModelUserBranchFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`brn.${ModelUserBranchFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`brn.${ModelUserBranchFields.isdelete}`]: \"isdelete\",\n [`brn.${ModelUserBranchFields.istrash}`]: \"istrash\",\n [`brn.${ModelUserBranchFields.accountid}`]: \"accountid\",\n}\n\nconst { relationKeys, sqlRelationMaps } = getUserBranchRelationMaps()\n\nexport const UserBranchService = (props: UserBranchServiceProps) => {\n\n const {\n userBranchType = \"branch\",\n ...rest\n } = props\n\n const userBranchModel = UserBranchModel({ ...rest })\n\n // const createUserBranch = async ({ data, branchType: overrideBranchType }: UserBranchCreateProps) => {\n\n // const _branchType = overrideBranchType || branchType\n\n // const _data = getCreatePayload(_branchType, data)\n\n // if (!_data) {\n // throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n // }\n\n // const response = await userModel.create({ data: _data, createUserId: 0 })\n\n // return response\n // }\n\n const getUserBranch = async ({ userBranchId, datatypes = [] }: UserBranchGetProps) => {\n\n // let data: any = {}\n\n // if (branchType === \"branch\") {\n // // data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"] })\n // }\n\n // if (branchType === \"branch_shipping\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n // if (branchType === \"shipping_address\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n let { data } = await listUserBranches({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelUserBranchFields.branch_id}`, operator: \"=\", value: userBranchId }],\n sortfield: `${ModelUserBranchFields.branch_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n // if (!data) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n const getUserBranchByUserId = async ({ userId, onlyHQ = false, limit = 100, datatypes = [] }: UserBranchByUserIdGetProps) => {\n\n let filters = [\n { field: `${ModelUserBranchFields.user_id}`, operator: \"=\", value: userId }\n ] as any\n\n if (onlyHQ === true) {\n filters.push({\n field: `${ModelUserBranchFields.is_hq}`, operator: \"=\", value: 1\n })\n }\n\n let { data } = await listUserBranches({\n limit,\n offset: 0,\n filters,\n sortfield: `${ModelUserBranchFields.user_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data\n };\n\n const listUserBranches = async ({\n limit,\n offset,\n filters = [],\n sortfield,\n sortorder,\n datatypes = []\n }: UserBranchListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, regionSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n // sqlRelation = [\n // buildSqlRelation(\"left\", \"brn\", \"countries\", \"cou\", [\"brn.country_id = cou.country_id\", \"cou.isdelete = false\", \"cou.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"states\", \"state\", [\"brn.state_id = state.state_id\", \"state.isdelete = false\", \"state.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"areas\", \"area\", [\"brn.area_id = area.area_id\", \"area.isdelete = false\", \"area.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"users\", \"creator\", [\"brn.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"users\", \"updater\", [\"brn.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n // ]\n\n sqlRelation = [\n sqlRelationMaps.cou,\n sqlRelationMaps.state,\n sqlRelationMaps.area,\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = [\n // buildSqlRelation(\"left\", \"brn\", \"document_items\", \"docitm\", [\"brn.document_id = docitm.document_id\", \"docitm.isdelete = false\", \"docitm.istrash = false\"]),\n // ]\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(regionSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...regionSqlSelect,\n ...defaultSqlSelect\n }\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"dif\", activeInjectionFields)\n\n // filterColumns = { ...filterColumns, ...salesOrderInjectionFieldSqlSelect }\n\n // sqlSelect = [...sqlSelect, ...(activeInjectionFields.length > 0 ? [buildSqlSelect(``, salesOrderInjectionFieldSqlSelect)] : [])]\n // sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"brn\", \"document_injection_fields\", \"dif\", [\"brn.document_id = dif.document_id\", \"dif.field_ref = 'document'\", `dif.field_module = '${documentTypeKey.toLowerCase()}'`, \"dif.isdelete = false\", \"dif.istrash = false\"])]\n // sqlGroupBy = [...sqlGroupBy, ...Object.keys(salesOrderInjectionFieldSqlSelect)]\n // }\n\n // let itemSqlSelectAgg = buildDocumentItemSqlSelectAgg()\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderItemInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document_item\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderItemInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"difi\", activeInjectionFields)\n\n // if (Object.entries(salesOrderItemInjectionFieldSqlSelect).length > 0) {\n // Object.entries(salesOrderItemInjectionFieldSqlSelect).map(([col, alias]) => {\n // itemSqlSelectAgg.push(`'${alias}', ${col}`)\n // })\n // }\n\n // sqlRelationAgg = [...sqlRelationAgg, buildSqlRelation(\"left\", \"docitm\", \"document_injection_fields\", \"difi\", [\"docitm.document_item_id = difi.document_item_id\", \"difi.field_ref = 'document_item'\", `difi.field_module = '${documentTypeKey.toLowerCase()}'`, \"difi.isdelete = false\", \"difi.istrash = false\"])]\n\n // }\n\n // let itemSqlSelect = buildDocumentItemSqlSelect(itemSqlSelectAgg)\n\n // sqlSelectAgg = [...sqlSelectAgg, ...[buildSqlSelect(``, itemSqlSelect)]]\n\n let sqlWhere = [\n `brn.isdelete = false`,\n `brn.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the data (pagination)\n // const sqlRaw = buildSqlRawSelect({\n // tableName: \"branches\",\n // mainAlias: \"brn\",\n // accountId: rest.accountId,\n // sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n // sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n // sqlWhere,\n // sqlGroupBy,\n // sqlOrderby,\n // sqlLimitOffset\n // })\n\n // let data = await userBranchModel.raw(sqlRaw)\n\n // // get the count\n // const sqlRawCount = buildSqlRawSelectCount({\n // tableName: \"branches\",\n // mainAlias: \"brn\",\n // accountId: rest.accountId,\n // sqlSelect,\n // sqlRelation,\n // sqlWhere,\n // sqlGroupBy,\n // sqlOrderby\n // })\n\n // let count = await userBranchModel.raw(sqlRawCount)\n\n // const response = {\n // data,\n // total: data.length ? Number(count[0].filtered_count) : 0\n // }\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: userBranchModel,\n tableName: \"branches\",\n mainAlias: \"brn\",\n countKey: `${ModelUserBranchFields.branch_id}`,\n accountId: rest.accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n // const removeUserBranches = async ({ userBranchIds }: UserBranchRemoveProps): Promise<User[] | null> => {\n\n // if (!userBranchIds.length) throwError('id is required');\n\n // const response = await userModel.trash({ userBranchIds, updateUserId: actionUserId });\n\n // return response\n // };\n\n const getUserBranchDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userBranchType === \"branch\") {\n // data = customerService.getDataTypes()\n }\n\n // const data = await userModel.list(payload);\n\n // if (!data?.file_id) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n return {\n // uploadFileByBuffer,\n getUserBranch,\n getUserBranchByUserId,\n listUserBranches,\n // removeUsers,\n getUserBranchDataTypes\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"UserBranchService.js","sourceRoot":"","sources":["../../../src/services/branch/UserBranchService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n UserBranchModel,\n ModelUserFields,\n ModelUserBranchFields,\n ModelCountryFields,\n ModelStateFields,\n ModelAreaFields\n} from \"@/models\";\n\nimport { buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount, getUserBranchRelationMaps } from \"@/lib\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps } from \"@/utils\";\n\nexport const userBranchUserTypes = {\n customer: \"customer\",\n retailer: \"retailer\"\n}\n\nexport const userBranchTypes = {\n branch: \"branch\",\n branch_shipping: \"branch_shipping\",\n shipping_address: \"shipping_address\"\n} as const\n\nexport type UserBranchType = typeof userBranchTypes[keyof typeof userBranchTypes]\n\nexport type UserBranchUserType = typeof userBranchUserTypes[keyof typeof userBranchUserTypes]\n\nexport type UserBranchServiceProps = DefaultServiceProps & {\n userBranchUserType: UserBranchUserType,\n userBranchType: UserBranchType,\n};\n\nexport type UserBranchGetProps = QueryGet & {\n userBranchId: number,\n};\n\nexport type UserBranchByUserIdGetProps = QueryGet & {\n userId: number,\n onlyHQ?: boolean\n limit?: number\n};\n\nexport type UserBranchListProps = QueryList & {\n // id: number,\n};\n\nexport type UserBranchRemoveProps = {\n userBranchIds: number[]\n};\n\nexport type UserBranchCreateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\nexport type UserBranchUpdateProps = {\n userBranchType?: UserBranchType,\n data:\n // driver_image\n {\n administrator: {\n filename: string;\n // contentType: string;\n // bucketName: string;\n // projectId: string;\n // foldernameYear: string;\n // foldernameMonth: string;\n // foldernameDay: string;\n // uploadType: FileUploadType,\n // bufferFilename: string,\n // assetUrl: string,\n // referenceId: string,\n // referenceLabel: string,\n // referenceType: string,\n // batchCode?: string,\n // fileSizeBytes: number,\n // fileCompressFormat: FileCompressFormat,\n // requestFileSizeBytes: number,\n // requestFilename: string,\n // reference2Id: string,\n // reference2Label: string,\n // reference2Type: string,\n }\n }\n}\n\n// const getCreatePayload = (branchType: BranchType, data: UserBranchCreateProps[\"data\"]) => {\n\n// if (branchType === \"administrator\" && \"administrator\" in data) {\n\n// return {\n// user_type: branchType,\n// // file_name: data.driverImage.filename,\n// // content_type: data.driverImage.contentType,\n// // bucket_name: data.driverImage.bucketName,\n// // project_id: data.driverImage.projectId,\n// // foldername_year: data.driverImage.foldernameYear,\n// // foldername_month: data.driverImage.foldernameMonth,\n// // foldername_day: data.driverImage.foldernameDay,\n// // upload_type: data.driverImage.uploadType,\n// // buffer_file_name: data.driverImage.bufferFilename,\n// // asset_url: data.driverImage.assetUrl,\n// // reference_id: data.driverImage.referenceId,\n// // reference_label: data.driverImage.referenceLabel,\n// // reference_type: data.driverImage.referenceType,\n// // batch_code: data?.driverImage?.batchCode ?? \"\",\n// // file_size_bytes: data.driverImage.fileSizeBytes,\n// // file_compress_format: data.driverImage.fileCompressFormat,\n// // request_file_size_bytes: data.driverImage.requestFileSizeBytes,\n// // request_file_name: data.driverImage.requestFilename,\n// // reference2_id: data.driverImage.reference2Id,\n// // reference2_label: data.driverImage.reference2Label,\n// // reference2_type: data.driverImage.reference2Type,\n// }\n// }\n\n// return false\n\n// }\n\nlet mainSqlSelect = {\n [`brn.${ModelUserBranchFields.branch_id}`]: \"branch_id\",\n [`brn.${ModelUserBranchFields.user_id}`]: \"user_id\",\n [`brn.${ModelUserBranchFields.area_id}`]: \"area_id\",\n [`brn.${ModelUserBranchFields.state_id}`]: \"state_id\",\n [`brn.${ModelUserBranchFields.country_id}`]: \"country_id\",\n [`brn.${ModelUserBranchFields.address_1}`]: \"address_1\",\n [`brn.${ModelUserBranchFields.address_2}`]: \"address_2\",\n [`brn.${ModelUserBranchFields.branch_code}`]: \"branch_code\",\n [`brn.${ModelUserBranchFields.branch_contact}`]: \"branch_contact\",\n [`brn.${ModelUserBranchFields.branch_email}`]: \"branch_email\",\n [`brn.${ModelUserBranchFields.branch_name}`]: \"branch_name\",\n [`brn.${ModelUserBranchFields.status}`]: \"status\",\n [`brn.${ModelUserBranchFields.is_hq}`]: \"is_hq\",\n [`brn.${ModelUserBranchFields.pic_contact}`]: \"pic_contact\",\n [`brn.${ModelUserBranchFields.pic_email}`]: \"pic_email\",\n [`brn.${ModelUserBranchFields.pic_name}`]: \"pic_name\",\n [`brn.${ModelUserBranchFields.postcode}`]: \"postcode\",\n [`brn.${ModelUserBranchFields.remark}`]: \"remark\",\n [`brn.${ModelUserBranchFields.type}`]: \"type\",\n}\n\nlet regionSqlSelect = {\n [`cou.${ModelCountryFields.country_name}`]: \"country_name\",\n [`state.${ModelStateFields.state_name}`]: \"state_name\",\n [`area.${ModelAreaFields.area_name}`]: \"area_name\",\n}\n\nlet defaultSqlSelect = {\n [`brn.${ModelUserBranchFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`brn.${ModelUserBranchFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`brn.${ModelUserBranchFields.isdelete}`]: \"isdelete\",\n [`brn.${ModelUserBranchFields.istrash}`]: \"istrash\",\n [`brn.${ModelUserBranchFields.accountid}`]: \"accountid\",\n}\n\nconst { relationKeys, sqlRelationMaps } = getUserBranchRelationMaps()\n\nexport const UserBranchService = (props: UserBranchServiceProps) => {\n\n const {\n userBranchType = \"branch\",\n ...rest\n } = props\n\n const userBranchModel = UserBranchModel({ ...rest })\n\n // const createUserBranch = async ({ data, branchType: overrideBranchType }: UserBranchCreateProps) => {\n\n // const _branchType = overrideBranchType || branchType\n\n // const _data = getCreatePayload(_branchType, data)\n\n // if (!_data) {\n // throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n // }\n\n // const response = await userModel.create({ data: _data, createUserId: 0 })\n\n // return response\n // }\n\n const getUserBranch = async ({ userBranchId, datatypes = [] }: UserBranchGetProps) => {\n\n // let data: any = {}\n\n // if (branchType === \"branch\") {\n // // data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"] })\n // }\n\n // if (branchType === \"branch_shipping\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n // if (branchType === \"shipping_address\") {\n // // data = await administratorService.getAdministrator({ id, })\n // }\n\n let { data } = await listUserBranches({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelUserBranchFields.branch_id}`, operator: \"=\", value: userBranchId }],\n sortfield: `${ModelUserBranchFields.branch_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n // if (!data) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n const getUserBranchByUserId = async ({ userId, onlyHQ = false, limit = 100, datatypes = [] }: UserBranchByUserIdGetProps) => {\n\n let filters = [\n { field: `${ModelUserBranchFields.user_id}`, operator: \"=\", value: userId }\n ] as any\n\n if (onlyHQ === true) {\n filters.push({\n field: `${ModelUserBranchFields.is_hq}`, operator: \"=\", value: 1\n })\n }\n\n let { data } = await listUserBranches({\n limit,\n offset: 0,\n filters,\n sortfield: `${ModelUserBranchFields.user_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data\n };\n\n const listUserBranches = async ({\n limit,\n offset,\n filters = [],\n sortfield,\n sortorder,\n datatypes = []\n }: UserBranchListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, regionSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n // sqlRelation = [\n // buildSqlRelation(\"left\", \"brn\", \"countries\", \"cou\", [\"brn.country_id = cou.country_id\", \"cou.isdelete = false\", \"cou.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"states\", \"state\", [\"brn.state_id = state.state_id\", \"state.isdelete = false\", \"state.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"areas\", \"area\", [\"brn.area_id = area.area_id\", \"area.isdelete = false\", \"area.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"users\", \"creator\", [\"brn.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n // buildSqlRelation(\"left\", \"brn\", \"users\", \"updater\", [\"brn.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n // ]\n\n sqlRelation = [\n sqlRelationMaps.cou,\n sqlRelationMaps.state,\n sqlRelationMaps.area,\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = [\n // buildSqlRelation(\"left\", \"brn\", \"document_items\", \"docitm\", [\"brn.document_id = docitm.document_id\", \"docitm.isdelete = false\", \"docitm.istrash = false\"]),\n // ]\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(regionSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...regionSqlSelect,\n ...defaultSqlSelect\n }\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"dif\", activeInjectionFields)\n\n // filterColumns = { ...filterColumns, ...salesOrderInjectionFieldSqlSelect }\n\n // sqlSelect = [...sqlSelect, ...(activeInjectionFields.length > 0 ? [buildSqlSelect(``, salesOrderInjectionFieldSqlSelect)] : [])]\n // sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"brn\", \"document_injection_fields\", \"dif\", [\"brn.document_id = dif.document_id\", \"dif.field_ref = 'document'\", `dif.field_module = '${documentTypeKey.toLowerCase()}'`, \"dif.isdelete = false\", \"dif.istrash = false\"])]\n // sqlGroupBy = [...sqlGroupBy, ...Object.keys(salesOrderInjectionFieldSqlSelect)]\n // }\n\n // let itemSqlSelectAgg = buildDocumentItemSqlSelectAgg()\n\n // if (datatypes.includes(salesOrderDataTypes.salesOrderItemInjectionFields)) {\n\n // let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"document_item\", documentTypeKey.toLowerCase() as any)\n\n // const salesOrderItemInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"difi\", activeInjectionFields)\n\n // if (Object.entries(salesOrderItemInjectionFieldSqlSelect).length > 0) {\n // Object.entries(salesOrderItemInjectionFieldSqlSelect).map(([col, alias]) => {\n // itemSqlSelectAgg.push(`'${alias}', ${col}`)\n // })\n // }\n\n // sqlRelationAgg = [...sqlRelationAgg, buildSqlRelation(\"left\", \"docitm\", \"document_injection_fields\", \"difi\", [\"docitm.document_item_id = difi.document_item_id\", \"difi.field_ref = 'document_item'\", `difi.field_module = '${documentTypeKey.toLowerCase()}'`, \"difi.isdelete = false\", \"difi.istrash = false\"])]\n\n // }\n\n // let itemSqlSelect = buildDocumentItemSqlSelect(itemSqlSelectAgg)\n\n // sqlSelectAgg = [...sqlSelectAgg, ...[buildSqlSelect(``, itemSqlSelect)]]\n\n let sqlWhere = [\n `brn.isdelete = false`,\n `brn.istrash = false`,\n // ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the data (pagination)\n // const sqlRaw = buildSqlRawSelect({\n // tableName: \"branches\",\n // mainAlias: \"brn\",\n // accountId: rest.accountId,\n // sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n // sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n // sqlWhere,\n // sqlGroupBy,\n // sqlOrderby,\n // sqlLimitOffset\n // })\n\n // let data = await userBranchModel.raw(sqlRaw)\n\n // // get the count\n // const sqlRawCount = buildSqlRawSelectCount({\n // tableName: \"branches\",\n // mainAlias: \"brn\",\n // accountId: rest.accountId,\n // sqlSelect,\n // sqlRelation,\n // sqlWhere,\n // sqlGroupBy,\n // sqlOrderby\n // })\n\n // let count = await userBranchModel.raw(sqlRawCount)\n\n // const response = {\n // data,\n // total: data.length ? Number(count[0].filtered_count) : 0\n // }\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: userBranchModel,\n tableName: \"branches\",\n mainAlias: \"brn\",\n countKey: `${ModelUserBranchFields.branch_id}`,\n accountId: rest.accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n // const removeUserBranches = async ({ userBranchIds }: UserBranchRemoveProps): Promise<User[] | null> => {\n\n // if (!userBranchIds.length) throwError('id is required');\n\n // const response = await userModel.trash({ userBranchIds, updateUserId: actionUserId });\n\n // return response\n // };\n\n const getUserBranchDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userBranchType === \"branch\") {\n // data = customerService.getDataTypes()\n }\n\n // const data = await userModel.list(payload);\n\n // if (!data?.file_id) {\n // throw new Error(`Invalid id: ${id}`);\n // }\n\n return data\n };\n\n return {\n // uploadFileByBuffer,\n getUserBranch,\n getUserBranchByUserId,\n listUserBranches,\n // removeUsers,\n getUserBranchDataTypes\n }\n\n}\n\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InjectionFieldModuleRef } from "../../services";
|
|
2
2
|
import { QueryList, QueryGet } from "../../schema/common";
|
|
3
3
|
import { DefaultServiceProps } from "../../utils";
|
|
4
|
-
export type { FileImageCompressionOptions, ImageCompressionProviderType } from "./ImageCompressionProviderRegistry";
|
|
4
|
+
export type { FileImageCompressionOptions, ImageCompressionProviderType, ImageCompressionProvider } from "./ImageCompressionProviderRegistry";
|
|
5
5
|
export { FileVideoCompressionOptions } from "./VideoCompression";
|
|
6
6
|
import { FeatureFileStorageOptions } from "../../features";
|
|
7
7
|
export { FileStorageProviderType } from "./FileStorageProviderRegistry";
|
|
@@ -308,7 +308,7 @@ const FileService = (props) => {
|
|
|
308
308
|
outputSizeBytes = compressed.sizeBytes; // update the file size
|
|
309
309
|
}
|
|
310
310
|
// generate thumbnail buffer
|
|
311
|
-
const bufferThumbnail = await (0, utils_1.generateFileThumbnailBuffer)(bufferToUpload, mimeType);
|
|
311
|
+
const bufferThumbnail = await (0, utils_1.generateFileThumbnailBuffer)(imageCompressionProvider, bufferToUpload, mimeType);
|
|
312
312
|
// Call the consumer hook, if registered
|
|
313
313
|
if (features_1.FileStorageHook.onStartUpload) {
|
|
314
314
|
await features_1.FileStorageHook.onStartUpload((0, utils_1.buildFeatureCallbackProps)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/services/file/FileService.ts"],"names":[],"mappings":"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","sourcesContent":["import { _, logError, throwError, generateFileThumbnailBuffer, buildFeatureCallbackProps } from \"@/utils\";\n\nimport path from \"path\";\n\nimport {\n FileModel,\n ModelFileFields,\n} from \"@/models\";\n\nimport { FileLocalProviderOptions, FileLocalStorageProvider, FileLocalUploadFileProps } from \"./FileLocalStorageProvider\"\nimport { FileGoogleCloudProviderOptions, FileGoogleCloudStorageProvider, FileGoogleCloudUploadFileProps } from \"./FileGoogleCloudStorageProvider\"\nimport { FileAwsS3ProviderOptions, FileAwsS3StorageProvider, FileAwsS3UploadFileProps } from \"./FileAwsS3StorageProvider\"\nimport { getFileStorageProvider, FileStorageProviderType } from \"./FileStorageProviderRegistry\";\n\nimport { InjectionFieldModuleRef } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { getFileSqlRelationMaps, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount } from \"@/lib\";\n\nimport {\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect\n} from \"@/lib\";\n\n// import { /*FileImageCompressionOptions,*/ compressImageBuffer } from \"./ImageCompression\";\n// export { FileImageCompressionOptions } from \"./ImageCompression\"\nimport { FileImageCompressionOptions, getImageCompressionProvider, ImageCompressionProviderType } from \"./ImageCompressionProviderRegistry\"\nexport type { FileImageCompressionOptions, ImageCompressionProviderType } from \"./ImageCompressionProviderRegistry\"\n\nimport { FileVideoCompressionOptions, compressVideoBuffer } from \"./VideoCompression\";\nexport { FileVideoCompressionOptions } from \"./VideoCompression\"\n\nimport { FeatureFileStorageOptions, FileStorageHook } from \"@/features\";\n\nexport { FileStorageProviderType } from \"./FileStorageProviderRegistry\";\nexport { FileLocalProviderOptions } from \"./FileLocalStorageProvider\";\nexport { FileGoogleCloudProviderOptions } from \"./FileGoogleCloudStorageProvider\";\nexport { FileAwsS3ProviderOptions } from \"./FileAwsS3StorageProvider\";\n\nexport const fileDataTypes = {\n}\n\nexport type FileModuleRef = InjectionFieldModuleRef\n\nexport type FileDataType = keyof typeof fileDataTypes;\n\nexport type FileServiceProps = DefaultServiceProps & {\n};\n\nexport type FileCategoryName =\n | \"image\"\n | \"video\"\n | \"audio\"\n | \"document\"\n | \"archive\"\n | \"code\"\n | \"other\";\n\n\nexport type FileGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n // datatypes: FileDataType[]\n};\n\nexport type FileGetUsageSummaryProps = {\n accountId: number,\n};\n\nexport type FileListProps = Omit<QueryList, \"datatypes\"> & {\n // datatypes: FileDataType[]\n}\n\nexport type FileRemoveProps = {\n fileIds: BigInt[],\n // storageProviderOptions: any\n storageSetup?: FeatureFileStorageOptions\n};\n\nexport type File = {\n tagName: string;\n description: string;\n folderPath: string;\n assetUrl: string;\n thumbnailUrl: string;\n assetPath: string;\n fileLabel: string;\n fileName: string;\n contentType: string;\n fileCategoryName: string;\n inputType: string;\n inputFileSizeBytes: number;\n inputFileName: string;\n fileSizeBytes: number;\n fileDurationSeconds: number;\n fileCompressFormat: string;\n storageProviderName: string;\n foldernameDay: number;\n foldernameMonth: number;\n foldernameYear: number;\n batchCode: string;\n referId1: number;\n referId2: number;\n referLabel1: string;\n referLabel2: string;\n remark: string;\n}\n\nexport type FileUploadItem = {\n buffer: Buffer; // Raw file data\n originalName: string; // Client filename\n mimeType: string; // e.g. \"image/png\"\n sizeBytes: number; // File size in bytes\n // providerName?: FileStorageProviderType; // optional: override global provider\n};\n\n\nexport type FileCreateProps = {\n data: File & {\n fieldRef: FileModuleRef[\"field_ref\"],\n fieldModule: FileModuleRef[\"field_module\"]\n }\n}\n\nexport type FileUploadProps = FileModuleRef & {\n description?: string,\n tagName?: string,\n label?: string,\n refId: number\n refId2?: number\n refLabel?: string\n refLabel2?: string\n remark: string\n foldernameDate?: string,\n files: FileUploadItem[]\n storageSetup?: FeatureFileStorageOptions\n}\n\nlet mainSqlSelect = buildFileMainSqlSelect()\nlet defaultSqlSelect = buildFileDefaultSqlSelect()\n\nconst { relationKeys, sqlRelationMaps } = getFileSqlRelationMaps(``)\n\nconst getCreatePayload = (data: FileCreateProps[\"data\"]) => {\n\n return {\n // [`${ModelFileFields.file_id}`]: fileType,\n [`${ModelFileFields.asset_path}`]: data.assetPath,\n [`${ModelFileFields.asset_url}`]: data.assetUrl,\n [`${ModelFileFields.thumbnail_url}`]: data.thumbnailUrl,\n [`${ModelFileFields.batch_code}`]: data.batchCode,\n [`${ModelFileFields.content_type}`]: data.contentType,\n [`${ModelFileFields.file_category_name}`]: data.fileCategoryName,\n [`${ModelFileFields.field_module}`]: data.fieldModule,\n [`${ModelFileFields.field_ref}`]: data.fieldRef,\n [`${ModelFileFields.file_compress_format}`]: data.fileCompressFormat,\n [`${ModelFileFields.file_label}`]: data.fileLabel,\n [`${ModelFileFields.file_name}`]: data.fileName,\n [`${ModelFileFields.file_size_bytes}`]: data.fileSizeBytes,\n [`${ModelFileFields.file_duration_seconds}`]: data.fileDurationSeconds,\n [`${ModelFileFields.tag_name}`]: data.tagName,\n [`${ModelFileFields.description}`]: data.description,\n [`${ModelFileFields.foldername_day}`]: Number(data.foldernameDay),\n [`${ModelFileFields.foldername_month}`]: Number(data.foldernameMonth),\n [`${ModelFileFields.foldername_year}`]: Number(data.foldernameYear),\n [`${ModelFileFields.input_file_name}`]: data.inputFileName,\n [`${ModelFileFields.input_file_size_bytes}`]: data.inputFileSizeBytes,\n [`${ModelFileFields.input_type}`]: data.inputType,\n [`${ModelFileFields.refer_id_1}`]: data.referId1,\n [`${ModelFileFields.refer_id_2}`]: data.referId2,\n [`${ModelFileFields.refer_label_1}`]: data.referLabel1,\n [`${ModelFileFields.refer_label_2}`]: data.referLabel2,\n [`${ModelFileFields.remark}`]: data.remark,\n [`${ModelFileFields.storage_provider_name}`]: data.storageProviderName,\n }\n\n}\n\n// compatible to browser mimetype\nexport const getBrowserSafeContentType = (incomingMime: string | undefined | null): string => {\n\n if (!incomingMime) {\n return 'application/octet-stream'; // Safe fallback for missing or empty headers\n }\n\n const cleanMime = incomingMime.toLowerCase().trim();\n\n // 1. M4A / AAC Audio Container Variations (iOS / Android recording formats)\n const m4aVariations: string[] = [\n 'audio/x-m4a',\n 'audio/m4a',\n 'audio/mp4',\n 'audio/aac',\n 'audio/x-aac'\n ];\n if (m4aVariations.includes(cleanMime)) {\n return 'audio/mp4'; // Standard web-streaming type for M4A containers\n }\n\n // 2. Legacy Mobile Voice Recording Extensions (3GPP and AMR)\n const legacyAudioMobileVariations: string[] = [\n 'audio/3gpp',\n 'audio/3gpp2',\n 'audio/3gp',\n 'audio/amr',\n 'audio/amr-wb'\n ];\n if (legacyAudioMobileVariations.includes(cleanMime)) {\n return 'audio/mp4'; // Map to mp4 so browser hardware layers can play them\n }\n\n // 3. WebM Audio (Commonly sent by desktop Chrome / Firefox microphone inputs)\n const webmAudioVariations: string[] = [\n 'audio/x-webm',\n 'audio/webm;codecs=opus'\n ];\n if (webmAudioVariations.includes(cleanMime)) {\n return 'audio/webm';\n }\n\n // 4. Video Formats (Fixes iOS QuickTime `.mov` and older `.3gp` video links)\n const videoVariations: string[] = [\n 'video/quicktime', // iOS recorded .mov files\n 'video/3gpp', // Older Android recorded videos\n 'video/3gpp2',\n 'video/x-m4v' // Apple video format\n ];\n if (videoVariations.includes(cleanMime)) {\n return 'video/mp4'; // Forces standard HTML5 inline web video rendering\n }\n\n // 5. Modern Image Formats (Fixes iOS `.heic` and camera `.tiff` uploads)\n const imageVariations: string[] = [\n 'image/heic',\n 'image/heif',\n 'image/tiff',\n 'image/x-tiff'\n ];\n if (imageVariations.includes(cleanMime)) {\n return 'image/jpeg'; // Ensures browsers show image previews instead of downloading files\n }\n\n // 6. Generic App Binary Blocks (Stops S3 from forcing downloads if file headers get lost)\n const genericBinaryVariations: string[] = [\n 'application/octet-stream',\n 'binary/octet-stream'\n ];\n if (genericBinaryVariations.includes(cleanMime)) {\n return 'audio/mp4'; // Safe default assuming core mobile app asset streams\n }\n\n return incomingMime; // Keeps standard valid web-types (image/png, audio/mpeg, application/pdf, etc.) intact\n};\n\nexport const getFileCategoryNameByMimeType = (mimeType: string): FileCategoryName => {\n const lower = mimeType.toLowerCase();\n\n if (lower.startsWith(\"image/\")) return \"image\";\n if (lower.startsWith(\"video/\")) return \"video\";\n if (lower.startsWith(\"audio/\")) return \"audio\";\n\n // Edge-case audio MIME types\n if ([\"application/ogg\"].includes(lower)) return \"audio\";\n\n if (\n lower.startsWith(\"text/\") ||\n [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/rtf\",\n ].includes(lower)\n ) {\n return \"document\";\n }\n\n if (\n [\n \"application/zip\",\n \"application/x-7z-compressed\",\n \"application/x-rar-compressed\",\n \"application/x-tar\",\n \"application/gzip\",\n ].includes(lower)\n ) {\n return \"archive\";\n }\n\n if (\n lower.startsWith(\"application/json\") ||\n lower.startsWith(\"application/javascript\") ||\n lower.startsWith(\"text/html\") ||\n lower.startsWith(\"text/css\") ||\n lower.startsWith(\"text/x-python\") ||\n lower.startsWith(\"text/x-c\") ||\n lower.startsWith(\"text/x-java\")\n ) {\n return \"code\";\n }\n\n return \"other\";\n};\n\nexport const FileService = (props: FileServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const fileModel = FileModel({ ...rest })\n\n const fileGoogleCloudStorageProvider = FileGoogleCloudStorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileAwsS3StorageProvider = FileAwsS3StorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileLocalStorageProvider = FileLocalStorageProvider({})\n\n const thumbnailOptions = {\n suffix: \"-thumb\",\n ext: \"jpg\",\n mimeType: \"image/jpeg\",\n }\n\n const initBatchCode = () => {\n return `${Date.now()}_${_.random(0, 999)}`;\n }\n\n const getStorageSetup = async (overrideStorageSetup?: FeatureFileStorageOptions) => {\n\n const hookSetup = overrideStorageSetup ?\n overrideStorageSetup\n :\n await FileStorageHook.onSetup()\n\n if (hookSetup.storageType === \"local\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n basePath: `${hookSetup.localStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n publicBaseUrl: `${hookSetup.localStorageOptions.baseUrl}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.localStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.localStorageOptions.skipFolderNameYearMonth)\n }\n }\n }\n\n if (hookSetup.storageType === \"gcloud\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,\n basePath: `${hookSetup.gcloudStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,\n publicBaseUrl: `${hookSetup.gcloudStorageOptions.baseUrl}`,\n // bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,\n bucketName: `${hookSetup.gcloudStorageOptions.bucketName}`,\n // credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,\n credentials: `${path.resolve(process.cwd(), `${hookSetup.gcloudStorageOptions.credentialPath}`)}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n if (hookSetup.storageType === \"aws\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n basePath: `${hookSetup.awsStorageOptions.basePath}`,\n publicBaseUrl: `${hookSetup.awsStorageOptions.baseUrl}`,\n bucketName: `${hookSetup.awsStorageOptions.bucketName}`,\n region: hookSetup.awsStorageOptions?.region ?? \"\",\n credentials: {\n accessKeyId: hookSetup.awsStorageOptions.credentials.accessKeyId,\n secretAccessKey: hookSetup.awsStorageOptions.credentials.secretAccessKey,\n },\n skipFoldernameByModuleRef: Boolean(hookSetup.awsStorageOptions.skipFolderNameModuleRef),\n skipFoldernameByDate: Boolean(hookSetup.awsStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n throw new Error(\"Unsupported storage type\")\n }\n\n const uploadFiles = async ({\n field_ref = \"item\",\n field_module = \"item\",\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n files = [],\n storageSetup\n }: FileUploadProps) => {\n\n const {\n storageProviderName,\n storageProviderOptions,\n storageConfiguration\n } = await getStorageSetup(storageSetup)\n\n // get the correct provider\n const provider = await getFileStorageProvider(storageProviderName, storageProviderOptions);\n\n // Image Compression\n const imageCompressionOptions: FileImageCompressionOptions | undefined\n = storageConfiguration?.imageMaxWidth && storageConfiguration?.imageMaxWidth\n ? {\n maxWidth: Number(storageConfiguration.imageMaxWidth),\n quality: Number(storageConfiguration.imageQuality),\n }\n : undefined;\n\n\n const imageCompressionProviderType: ImageCompressionProviderType =\n storageConfiguration?.imageCompressionProvider ? storageConfiguration.imageCompressionProvider : \"sharp\"\n\n // get image compression provider\n const imageCompressionProvider = await getImageCompressionProvider(\n imageCompressionProviderType,\n imageCompressionOptions\n )\n\n // Video Compression\n const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n storageConfiguration?.videoCRF &&\n storageConfiguration?.videoPreset &&\n storageConfiguration?.videoResolution\n ? {\n crf: Number(storageConfiguration.videoCRF),\n preset: storageConfiguration.videoPreset as FileVideoCompressionOptions[\"preset\"],\n resolution: Number(storageConfiguration.videoResolution),\n }\n : undefined;\n\n const allResponses = []\n\n const batchCode = initBatchCode();\n\n const fileLabel = label ?? \"\"\n const referId1 = refId ?? 0\n const referId2 = refId2 ?? 0\n const referLabel1 = refLabel ?? \"\"\n const referLabel2 = refLabel2 ?? \"\"\n const fileRemark = remark ?? \"\"\n\n for (const file of files) {\n\n let bufferToUpload = file.buffer;\n let mimeType = file.mimeType ?? \"\"\n let sizeBytes = file?.sizeBytes\n let fileOriginalName = file.originalName;\n\n let outputSizeBytes = sizeBytes // output file size\n let fileCompressFormat = `` // output image compress\n\n const fileCategoryName = getFileCategoryNameByMimeType(mimeType)\n\n // const ext = file.originalName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n // Image :: Only compress if image and options provided\n if (fileCategoryName === \"image\" && imageCompressionOptions) {\n // const compressed = await compressImageBuffer(\n // bufferToUpload,\n // mimeType,\n // imageCompressionOptions\n // );\n\n const compressed = await imageCompressionProvider.compress(\n bufferToUpload,\n mimeType,\n imageCompressionOptions\n )\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // Vide :: Only compress if video and options provided\n if (fileCategoryName === \"video\" && videoCompressionOptions) {\n const compressed = await compressVideoBuffer(\n bufferToUpload,\n mimeType,\n videoCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // generate thumbnail buffer\n const bufferThumbnail = await generateFileThumbnailBuffer(bufferToUpload, mimeType)\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onStartUpload) {\n\n await FileStorageHook.onStartUpload(buildFeatureCallbackProps({\n defaultServiceProps: rest,\n callbackParams: {\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail?.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n }\n }))\n }\n\n // upload using the provider - buffer\n const uploadResult = await provider.uploadFile({\n field_ref,\n field_module,\n buffer: bufferToUpload,\n bufferThumbnail: bufferThumbnail.buffer,\n thumbnailOptions,\n ...(foldernameDate ? { foldernameDate } : {}),\n mimeType,\n fileName: fileOriginalName\n } as FileModuleRef & (\n FileLocalUploadFileProps |\n FileGoogleCloudUploadFileProps |\n FileAwsS3UploadFileProps\n ));\n\n const fieldRef = field_ref\n const fieldModule = field_module\n\n const fileName = uploadResult?.filename ?? \"\"\n const contentType = mimeType ?? \"\"\n const folderPath = uploadResult.assetPath ?? \"\"\n const assetUrl = uploadResult.assetUrl ?? \"\"\n const thumbnailUrl = uploadResult?.thumbnailUrl ?? \"\"\n const assetPath = uploadResult.assetPath ?? \"\"\n\n const fileDurationSeconds = bufferThumbnail?.durationSeconds ?? 0\n\n const inputType = `buffer`\n const inputFileSizeBytes = sizeBytes ?? 0\n const inputFileName = fileOriginalName ?? \"\"\n\n const fileSizeBytes = outputSizeBytes ?? 0\n // const fileCompressFormat = ``\n\n const foldernameDay = uploadResult?.folderName?.day ?? \"\"\n const foldernameMonth = uploadResult?.folderName?.month ?? \"\"\n const foldernameYear = uploadResult?.folderName?.year ?? \"\"\n\n const payload: FileCreateProps = {\n data: {\n fieldRef,\n fieldModule,\n tagName,\n description,\n remark: fileRemark,\n folderPath,\n assetUrl,\n thumbnailUrl,\n assetPath,\n fileLabel,\n fileName,\n fileCategoryName,\n contentType,\n inputType,\n inputFileSizeBytes,\n inputFileName,\n fileSizeBytes,\n fileDurationSeconds,\n fileCompressFormat,\n storageProviderName,\n foldernameDay,\n foldernameMonth,\n foldernameYear,\n batchCode,\n referId1,\n referId2,\n referLabel1,\n referLabel2\n } as FileCreateProps[\"data\"],\n };\n\n let responseFile = await createFile(payload);\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onSuccessUpload) {\n await FileStorageHook.onSuccessUpload(buildFeatureCallbackProps({\n defaultServiceProps: rest,\n callbackParams: {\n fileId: Number(responseFile?.file_id),\n fileThumbnailUrl: thumbnailUrl,\n fileAssetUrl: assetUrl,\n fileDurationSeconds,\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n }\n }))\n }\n\n allResponses.push(responseFile)\n }\n\n return allResponses\n\n }\n\n // private\n const createFile = async ({ data }: FileCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create file payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await fileModel.create({ data: _data })\n\n const newFileId = response?.file_id ?? \"\"\n\n return newFileId ? await getFile({ id: Number(newFileId) }) : null\n\n }\n\n const getFile = async ({ id }: FileGetProps) => {\n\n let { data } = await listFiles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelFileFields.file_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelFileFields.file_id}`,\n sortorder: \"ASC\"\n })\n\n return data[0] ?? null;\n\n };\n\n const listFiles = async ({ limit, offset, filters = [], sortfield, sortorder }: FileListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = []\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `mainfile.isdelete = false`,\n `mainfile.istrash = false`,\n // `LOWER(mainfile.doc_type) = LOWER('${documentTypeKey}')`\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: fileModel,\n tableName: \"files\",\n mainAlias: \"mainfile\",\n countKey: `${ModelFileFields.file_id}`,\n accountId: rest.accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n const removeFiles = async ({ fileIds, storageSetup }: FileRemoveProps) => {\n\n const {\n // storageProviderName,\n storageProviderOptions\n } = await getStorageSetup(storageSetup)\n\n if (!fileIds.length) throwError('fileIds is required');\n\n const filesToDelete = await fileModel.list({\n where: {\n file_id: { in: fileIds }\n }\n });\n\n // console.log('filesToDelete', filesToDelete)\n\n let providerResponse: any[] = []\n\n // 2️⃣ Delete the physical files\n for (const file of filesToDelete) {\n\n // check the provider to choose delete method\n const storageProviderName = file.storage_provider_name as FileStorageProviderType\n const assetUrl = file.asset_url\n const thumbnailUrl = file.thumbnail_url ?? \"\"\n const assetPath = file.asset_path\n\n if (storageProviderName === \"local\" && assetPath) {\n\n try {\n providerResponse.push(\n await fileLocalStorageProvider.removeFile(assetPath, thumbnailOptions)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Local: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"gcloud\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileGoogleCloudStorageProvider.removeFile(assetUrl, thumbnailUrl, storageProviderOptions.credentials as any)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from GCloud: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"aws\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileAwsS3StorageProvider.removeFile(assetUrl, thumbnailUrl)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Aws S3: ${assetUrl}`\n )\n }\n\n }\n\n }\n\n // remove files\n const response = await fileModel.remove({ where: { [`${ModelFileFields.file_id}`]: { in: fileIds } } });\n\n return {\n files: response,\n providerResponse\n }\n };\n\n const getFileUsageSummary = async ({ accountId = 0 }: FileGetUsageSummaryProps) => {\n\n const summaryCount = await fileModel.aggregate({\n field: `file_id`,\n operation: `count`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const summarySize = await fileModel.aggregate({\n field: `file_size_bytes`,\n operation: `sum`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const totalFiles = summaryCount ?? 0;\n const totalBytes = summarySize ?? 0;\n // const totalFiles = summary._count.id;\n\n // Optional: convert bytes to MB or GB\n const totalMB = totalBytes / (1024 * 1024);\n const totalGB = totalBytes / (1024 * 1024 * 1024);\n\n return {\n totalFiles,\n totalBytes,\n totalMB: parseFloat(totalMB.toFixed(2)), // now decimal\n totalGB: parseFloat(totalGB.toFixed(2)), // now decimal\n };\n }\n\n // const getDataTypes = () => {\n // return Object.values(fileDataTypes);\n // }\n\n return {\n uploadFiles,\n // createFile,\n // updateFile,\n getFile,\n listFiles,\n removeFiles,\n // getDataTypes,\n getFileUsageSummary\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/services/file/FileService.ts"],"names":[],"mappings":"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","sourcesContent":["import { _, logError, throwError, generateFileThumbnailBuffer, buildFeatureCallbackProps } from \"@/utils\";\n\nimport path from \"path\";\n\nimport {\n FileModel,\n ModelFileFields,\n} from \"@/models\";\n\nimport { FileLocalProviderOptions, FileLocalStorageProvider, FileLocalUploadFileProps } from \"./FileLocalStorageProvider\"\nimport { FileGoogleCloudProviderOptions, FileGoogleCloudStorageProvider, FileGoogleCloudUploadFileProps } from \"./FileGoogleCloudStorageProvider\"\nimport { FileAwsS3ProviderOptions, FileAwsS3StorageProvider, FileAwsS3UploadFileProps } from \"./FileAwsS3StorageProvider\"\nimport { getFileStorageProvider, FileStorageProviderType } from \"./FileStorageProviderRegistry\";\n\nimport { InjectionFieldModuleRef } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { getFileSqlRelationMaps, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount } from \"@/lib\";\n\nimport {\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect\n} from \"@/lib\";\n\n// import { /*FileImageCompressionOptions,*/ compressImageBuffer } from \"./ImageCompression\";\n// export { FileImageCompressionOptions } from \"./ImageCompression\"\nimport { FileImageCompressionOptions, getImageCompressionProvider, ImageCompressionProviderType } from \"./ImageCompressionProviderRegistry\"\nexport type { FileImageCompressionOptions, ImageCompressionProviderType, ImageCompressionProvider } from \"./ImageCompressionProviderRegistry\"\n\nimport { FileVideoCompressionOptions, compressVideoBuffer } from \"./VideoCompression\";\nexport { FileVideoCompressionOptions } from \"./VideoCompression\"\n\nimport { FeatureFileStorageOptions, FileStorageHook } from \"@/features\";\n\nexport { FileStorageProviderType } from \"./FileStorageProviderRegistry\";\nexport { FileLocalProviderOptions } from \"./FileLocalStorageProvider\";\nexport { FileGoogleCloudProviderOptions } from \"./FileGoogleCloudStorageProvider\";\nexport { FileAwsS3ProviderOptions } from \"./FileAwsS3StorageProvider\";\n\nexport const fileDataTypes = {\n}\n\nexport type FileModuleRef = InjectionFieldModuleRef\n\nexport type FileDataType = keyof typeof fileDataTypes;\n\nexport type FileServiceProps = DefaultServiceProps & {\n};\n\nexport type FileCategoryName =\n | \"image\"\n | \"video\"\n | \"audio\"\n | \"document\"\n | \"archive\"\n | \"code\"\n | \"other\";\n\n\nexport type FileGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n // datatypes: FileDataType[]\n};\n\nexport type FileGetUsageSummaryProps = {\n accountId: number,\n};\n\nexport type FileListProps = Omit<QueryList, \"datatypes\"> & {\n // datatypes: FileDataType[]\n}\n\nexport type FileRemoveProps = {\n fileIds: BigInt[],\n // storageProviderOptions: any\n storageSetup?: FeatureFileStorageOptions\n};\n\nexport type File = {\n tagName: string;\n description: string;\n folderPath: string;\n assetUrl: string;\n thumbnailUrl: string;\n assetPath: string;\n fileLabel: string;\n fileName: string;\n contentType: string;\n fileCategoryName: string;\n inputType: string;\n inputFileSizeBytes: number;\n inputFileName: string;\n fileSizeBytes: number;\n fileDurationSeconds: number;\n fileCompressFormat: string;\n storageProviderName: string;\n foldernameDay: number;\n foldernameMonth: number;\n foldernameYear: number;\n batchCode: string;\n referId1: number;\n referId2: number;\n referLabel1: string;\n referLabel2: string;\n remark: string;\n}\n\nexport type FileUploadItem = {\n buffer: Buffer; // Raw file data\n originalName: string; // Client filename\n mimeType: string; // e.g. \"image/png\"\n sizeBytes: number; // File size in bytes\n // providerName?: FileStorageProviderType; // optional: override global provider\n};\n\n\nexport type FileCreateProps = {\n data: File & {\n fieldRef: FileModuleRef[\"field_ref\"],\n fieldModule: FileModuleRef[\"field_module\"]\n }\n}\n\nexport type FileUploadProps = FileModuleRef & {\n description?: string,\n tagName?: string,\n label?: string,\n refId: number\n refId2?: number\n refLabel?: string\n refLabel2?: string\n remark: string\n foldernameDate?: string,\n files: FileUploadItem[]\n storageSetup?: FeatureFileStorageOptions\n}\n\nlet mainSqlSelect = buildFileMainSqlSelect()\nlet defaultSqlSelect = buildFileDefaultSqlSelect()\n\nconst { relationKeys, sqlRelationMaps } = getFileSqlRelationMaps(``)\n\nconst getCreatePayload = (data: FileCreateProps[\"data\"]) => {\n\n return {\n // [`${ModelFileFields.file_id}`]: fileType,\n [`${ModelFileFields.asset_path}`]: data.assetPath,\n [`${ModelFileFields.asset_url}`]: data.assetUrl,\n [`${ModelFileFields.thumbnail_url}`]: data.thumbnailUrl,\n [`${ModelFileFields.batch_code}`]: data.batchCode,\n [`${ModelFileFields.content_type}`]: data.contentType,\n [`${ModelFileFields.file_category_name}`]: data.fileCategoryName,\n [`${ModelFileFields.field_module}`]: data.fieldModule,\n [`${ModelFileFields.field_ref}`]: data.fieldRef,\n [`${ModelFileFields.file_compress_format}`]: data.fileCompressFormat,\n [`${ModelFileFields.file_label}`]: data.fileLabel,\n [`${ModelFileFields.file_name}`]: data.fileName,\n [`${ModelFileFields.file_size_bytes}`]: data.fileSizeBytes,\n [`${ModelFileFields.file_duration_seconds}`]: data.fileDurationSeconds,\n [`${ModelFileFields.tag_name}`]: data.tagName,\n [`${ModelFileFields.description}`]: data.description,\n [`${ModelFileFields.foldername_day}`]: Number(data.foldernameDay),\n [`${ModelFileFields.foldername_month}`]: Number(data.foldernameMonth),\n [`${ModelFileFields.foldername_year}`]: Number(data.foldernameYear),\n [`${ModelFileFields.input_file_name}`]: data.inputFileName,\n [`${ModelFileFields.input_file_size_bytes}`]: data.inputFileSizeBytes,\n [`${ModelFileFields.input_type}`]: data.inputType,\n [`${ModelFileFields.refer_id_1}`]: data.referId1,\n [`${ModelFileFields.refer_id_2}`]: data.referId2,\n [`${ModelFileFields.refer_label_1}`]: data.referLabel1,\n [`${ModelFileFields.refer_label_2}`]: data.referLabel2,\n [`${ModelFileFields.remark}`]: data.remark,\n [`${ModelFileFields.storage_provider_name}`]: data.storageProviderName,\n }\n\n}\n\n// compatible to browser mimetype\nexport const getBrowserSafeContentType = (incomingMime: string | undefined | null): string => {\n\n if (!incomingMime) {\n return 'application/octet-stream'; // Safe fallback for missing or empty headers\n }\n\n const cleanMime = incomingMime.toLowerCase().trim();\n\n // 1. M4A / AAC Audio Container Variations (iOS / Android recording formats)\n const m4aVariations: string[] = [\n 'audio/x-m4a',\n 'audio/m4a',\n 'audio/mp4',\n 'audio/aac',\n 'audio/x-aac'\n ];\n if (m4aVariations.includes(cleanMime)) {\n return 'audio/mp4'; // Standard web-streaming type for M4A containers\n }\n\n // 2. Legacy Mobile Voice Recording Extensions (3GPP and AMR)\n const legacyAudioMobileVariations: string[] = [\n 'audio/3gpp',\n 'audio/3gpp2',\n 'audio/3gp',\n 'audio/amr',\n 'audio/amr-wb'\n ];\n if (legacyAudioMobileVariations.includes(cleanMime)) {\n return 'audio/mp4'; // Map to mp4 so browser hardware layers can play them\n }\n\n // 3. WebM Audio (Commonly sent by desktop Chrome / Firefox microphone inputs)\n const webmAudioVariations: string[] = [\n 'audio/x-webm',\n 'audio/webm;codecs=opus'\n ];\n if (webmAudioVariations.includes(cleanMime)) {\n return 'audio/webm';\n }\n\n // 4. Video Formats (Fixes iOS QuickTime `.mov` and older `.3gp` video links)\n const videoVariations: string[] = [\n 'video/quicktime', // iOS recorded .mov files\n 'video/3gpp', // Older Android recorded videos\n 'video/3gpp2',\n 'video/x-m4v' // Apple video format\n ];\n if (videoVariations.includes(cleanMime)) {\n return 'video/mp4'; // Forces standard HTML5 inline web video rendering\n }\n\n // 5. Modern Image Formats (Fixes iOS `.heic` and camera `.tiff` uploads)\n const imageVariations: string[] = [\n 'image/heic',\n 'image/heif',\n 'image/tiff',\n 'image/x-tiff'\n ];\n if (imageVariations.includes(cleanMime)) {\n return 'image/jpeg'; // Ensures browsers show image previews instead of downloading files\n }\n\n // 6. Generic App Binary Blocks (Stops S3 from forcing downloads if file headers get lost)\n const genericBinaryVariations: string[] = [\n 'application/octet-stream',\n 'binary/octet-stream'\n ];\n if (genericBinaryVariations.includes(cleanMime)) {\n return 'audio/mp4'; // Safe default assuming core mobile app asset streams\n }\n\n return incomingMime; // Keeps standard valid web-types (image/png, audio/mpeg, application/pdf, etc.) intact\n};\n\nexport const getFileCategoryNameByMimeType = (mimeType: string): FileCategoryName => {\n const lower = mimeType.toLowerCase();\n\n if (lower.startsWith(\"image/\")) return \"image\";\n if (lower.startsWith(\"video/\")) return \"video\";\n if (lower.startsWith(\"audio/\")) return \"audio\";\n\n // Edge-case audio MIME types\n if ([\"application/ogg\"].includes(lower)) return \"audio\";\n\n if (\n lower.startsWith(\"text/\") ||\n [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/rtf\",\n ].includes(lower)\n ) {\n return \"document\";\n }\n\n if (\n [\n \"application/zip\",\n \"application/x-7z-compressed\",\n \"application/x-rar-compressed\",\n \"application/x-tar\",\n \"application/gzip\",\n ].includes(lower)\n ) {\n return \"archive\";\n }\n\n if (\n lower.startsWith(\"application/json\") ||\n lower.startsWith(\"application/javascript\") ||\n lower.startsWith(\"text/html\") ||\n lower.startsWith(\"text/css\") ||\n lower.startsWith(\"text/x-python\") ||\n lower.startsWith(\"text/x-c\") ||\n lower.startsWith(\"text/x-java\")\n ) {\n return \"code\";\n }\n\n return \"other\";\n};\n\nexport const FileService = (props: FileServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const fileModel = FileModel({ ...rest })\n\n const fileGoogleCloudStorageProvider = FileGoogleCloudStorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileAwsS3StorageProvider = FileAwsS3StorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileLocalStorageProvider = FileLocalStorageProvider({})\n\n const thumbnailOptions = {\n suffix: \"-thumb\",\n ext: \"jpg\",\n mimeType: \"image/jpeg\",\n }\n\n const initBatchCode = () => {\n return `${Date.now()}_${_.random(0, 999)}`;\n }\n\n const getStorageSetup = async (overrideStorageSetup?: FeatureFileStorageOptions) => {\n\n const hookSetup = overrideStorageSetup ?\n overrideStorageSetup\n :\n await FileStorageHook.onSetup()\n\n if (hookSetup.storageType === \"local\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n basePath: `${hookSetup.localStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n publicBaseUrl: `${hookSetup.localStorageOptions.baseUrl}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.localStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.localStorageOptions.skipFolderNameYearMonth)\n }\n }\n }\n\n if (hookSetup.storageType === \"gcloud\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,\n basePath: `${hookSetup.gcloudStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,\n publicBaseUrl: `${hookSetup.gcloudStorageOptions.baseUrl}`,\n // bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,\n bucketName: `${hookSetup.gcloudStorageOptions.bucketName}`,\n // credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,\n credentials: `${path.resolve(process.cwd(), `${hookSetup.gcloudStorageOptions.credentialPath}`)}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n if (hookSetup.storageType === \"aws\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n basePath: `${hookSetup.awsStorageOptions.basePath}`,\n publicBaseUrl: `${hookSetup.awsStorageOptions.baseUrl}`,\n bucketName: `${hookSetup.awsStorageOptions.bucketName}`,\n region: hookSetup.awsStorageOptions?.region ?? \"\",\n credentials: {\n accessKeyId: hookSetup.awsStorageOptions.credentials.accessKeyId,\n secretAccessKey: hookSetup.awsStorageOptions.credentials.secretAccessKey,\n },\n skipFoldernameByModuleRef: Boolean(hookSetup.awsStorageOptions.skipFolderNameModuleRef),\n skipFoldernameByDate: Boolean(hookSetup.awsStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n throw new Error(\"Unsupported storage type\")\n }\n\n const uploadFiles = async ({\n field_ref = \"item\",\n field_module = \"item\",\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n files = [],\n storageSetup\n }: FileUploadProps) => {\n\n const {\n storageProviderName,\n storageProviderOptions,\n storageConfiguration\n } = await getStorageSetup(storageSetup)\n\n // get the correct provider\n const provider = await getFileStorageProvider(storageProviderName, storageProviderOptions);\n\n // Image Compression\n const imageCompressionOptions: FileImageCompressionOptions | undefined\n = storageConfiguration?.imageMaxWidth && storageConfiguration?.imageMaxWidth\n ? {\n maxWidth: Number(storageConfiguration.imageMaxWidth),\n quality: Number(storageConfiguration.imageQuality),\n }\n : undefined;\n\n\n const imageCompressionProviderType: ImageCompressionProviderType =\n storageConfiguration?.imageCompressionProvider ? storageConfiguration.imageCompressionProvider : \"sharp\"\n\n // get image compression provider\n const imageCompressionProvider = await getImageCompressionProvider(\n imageCompressionProviderType,\n imageCompressionOptions\n )\n\n // Video Compression\n const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n storageConfiguration?.videoCRF &&\n storageConfiguration?.videoPreset &&\n storageConfiguration?.videoResolution\n ? {\n crf: Number(storageConfiguration.videoCRF),\n preset: storageConfiguration.videoPreset as FileVideoCompressionOptions[\"preset\"],\n resolution: Number(storageConfiguration.videoResolution),\n }\n : undefined;\n\n const allResponses = []\n\n const batchCode = initBatchCode();\n\n const fileLabel = label ?? \"\"\n const referId1 = refId ?? 0\n const referId2 = refId2 ?? 0\n const referLabel1 = refLabel ?? \"\"\n const referLabel2 = refLabel2 ?? \"\"\n const fileRemark = remark ?? \"\"\n\n for (const file of files) {\n\n let bufferToUpload = file.buffer;\n let mimeType = file.mimeType ?? \"\"\n let sizeBytes = file?.sizeBytes\n let fileOriginalName = file.originalName;\n\n let outputSizeBytes = sizeBytes // output file size\n let fileCompressFormat = `` // output image compress\n\n const fileCategoryName = getFileCategoryNameByMimeType(mimeType)\n\n // const ext = file.originalName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n // Image :: Only compress if image and options provided\n if (fileCategoryName === \"image\" && imageCompressionOptions) {\n // const compressed = await compressImageBuffer(\n // bufferToUpload,\n // mimeType,\n // imageCompressionOptions\n // );\n\n const compressed = await imageCompressionProvider.compress(\n bufferToUpload,\n mimeType,\n imageCompressionOptions\n )\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // Vide :: Only compress if video and options provided\n if (fileCategoryName === \"video\" && videoCompressionOptions) {\n const compressed = await compressVideoBuffer(\n bufferToUpload,\n mimeType,\n videoCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // generate thumbnail buffer\n const bufferThumbnail = await generateFileThumbnailBuffer(imageCompressionProvider, bufferToUpload, mimeType)\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onStartUpload) {\n\n await FileStorageHook.onStartUpload(buildFeatureCallbackProps({\n defaultServiceProps: rest,\n callbackParams: {\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail?.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n }\n }))\n }\n\n // upload using the provider - buffer\n const uploadResult = await provider.uploadFile({\n field_ref,\n field_module,\n buffer: bufferToUpload,\n bufferThumbnail: bufferThumbnail.buffer,\n thumbnailOptions,\n ...(foldernameDate ? { foldernameDate } : {}),\n mimeType,\n fileName: fileOriginalName\n } as FileModuleRef & (\n FileLocalUploadFileProps |\n FileGoogleCloudUploadFileProps |\n FileAwsS3UploadFileProps\n ));\n\n const fieldRef = field_ref\n const fieldModule = field_module\n\n const fileName = uploadResult?.filename ?? \"\"\n const contentType = mimeType ?? \"\"\n const folderPath = uploadResult.assetPath ?? \"\"\n const assetUrl = uploadResult.assetUrl ?? \"\"\n const thumbnailUrl = uploadResult?.thumbnailUrl ?? \"\"\n const assetPath = uploadResult.assetPath ?? \"\"\n\n const fileDurationSeconds = bufferThumbnail?.durationSeconds ?? 0\n\n const inputType = `buffer`\n const inputFileSizeBytes = sizeBytes ?? 0\n const inputFileName = fileOriginalName ?? \"\"\n\n const fileSizeBytes = outputSizeBytes ?? 0\n // const fileCompressFormat = ``\n\n const foldernameDay = uploadResult?.folderName?.day ?? \"\"\n const foldernameMonth = uploadResult?.folderName?.month ?? \"\"\n const foldernameYear = uploadResult?.folderName?.year ?? \"\"\n\n const payload: FileCreateProps = {\n data: {\n fieldRef,\n fieldModule,\n tagName,\n description,\n remark: fileRemark,\n folderPath,\n assetUrl,\n thumbnailUrl,\n assetPath,\n fileLabel,\n fileName,\n fileCategoryName,\n contentType,\n inputType,\n inputFileSizeBytes,\n inputFileName,\n fileSizeBytes,\n fileDurationSeconds,\n fileCompressFormat,\n storageProviderName,\n foldernameDay,\n foldernameMonth,\n foldernameYear,\n batchCode,\n referId1,\n referId2,\n referLabel1,\n referLabel2\n } as FileCreateProps[\"data\"],\n };\n\n let responseFile = await createFile(payload);\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onSuccessUpload) {\n await FileStorageHook.onSuccessUpload(buildFeatureCallbackProps({\n defaultServiceProps: rest,\n callbackParams: {\n fileId: Number(responseFile?.file_id),\n fileThumbnailUrl: thumbnailUrl,\n fileAssetUrl: assetUrl,\n fileDurationSeconds,\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n }\n }))\n }\n\n allResponses.push(responseFile)\n }\n\n return allResponses\n\n }\n\n // private\n const createFile = async ({ data }: FileCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create file payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await fileModel.create({ data: _data })\n\n const newFileId = response?.file_id ?? \"\"\n\n return newFileId ? await getFile({ id: Number(newFileId) }) : null\n\n }\n\n const getFile = async ({ id }: FileGetProps) => {\n\n let { data } = await listFiles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelFileFields.file_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelFileFields.file_id}`,\n sortorder: \"ASC\"\n })\n\n return data[0] ?? null;\n\n };\n\n const listFiles = async ({ limit, offset, filters = [], sortfield, sortorder }: FileListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = []\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `mainfile.isdelete = false`,\n `mainfile.istrash = false`,\n // `LOWER(mainfile.doc_type) = LOWER('${documentTypeKey}')`\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: fileModel,\n tableName: \"files\",\n mainAlias: \"mainfile\",\n countKey: `${ModelFileFields.file_id}`,\n accountId: rest.accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n const removeFiles = async ({ fileIds, storageSetup }: FileRemoveProps) => {\n\n const {\n // storageProviderName,\n storageProviderOptions\n } = await getStorageSetup(storageSetup)\n\n if (!fileIds.length) throwError('fileIds is required');\n\n const filesToDelete = await fileModel.list({\n where: {\n file_id: { in: fileIds }\n }\n });\n\n // console.log('filesToDelete', filesToDelete)\n\n let providerResponse: any[] = []\n\n // 2️⃣ Delete the physical files\n for (const file of filesToDelete) {\n\n // check the provider to choose delete method\n const storageProviderName = file.storage_provider_name as FileStorageProviderType\n const assetUrl = file.asset_url\n const thumbnailUrl = file.thumbnail_url ?? \"\"\n const assetPath = file.asset_path\n\n if (storageProviderName === \"local\" && assetPath) {\n\n try {\n providerResponse.push(\n await fileLocalStorageProvider.removeFile(assetPath, thumbnailOptions)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Local: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"gcloud\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileGoogleCloudStorageProvider.removeFile(assetUrl, thumbnailUrl, storageProviderOptions.credentials as any)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from GCloud: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"aws\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileAwsS3StorageProvider.removeFile(assetUrl, thumbnailUrl)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Aws S3: ${assetUrl}`\n )\n }\n\n }\n\n }\n\n // remove files\n const response = await fileModel.remove({ where: { [`${ModelFileFields.file_id}`]: { in: fileIds } } });\n\n return {\n files: response,\n providerResponse\n }\n };\n\n const getFileUsageSummary = async ({ accountId = 0 }: FileGetUsageSummaryProps) => {\n\n const summaryCount = await fileModel.aggregate({\n field: `file_id`,\n operation: `count`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const summarySize = await fileModel.aggregate({\n field: `file_size_bytes`,\n operation: `sum`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const totalFiles = summaryCount ?? 0;\n const totalBytes = summarySize ?? 0;\n // const totalFiles = summary._count.id;\n\n // Optional: convert bytes to MB or GB\n const totalMB = totalBytes / (1024 * 1024);\n const totalGB = totalBytes / (1024 * 1024 * 1024);\n\n return {\n totalFiles,\n totalBytes,\n totalMB: parseFloat(totalMB.toFixed(2)), // now decimal\n totalGB: parseFloat(totalGB.toFixed(2)), // now decimal\n };\n }\n\n // const getDataTypes = () => {\n // return Object.values(fileDataTypes);\n // }\n\n return {\n uploadFiles,\n // createFile,\n // updateFile,\n getFile,\n listFiles,\n removeFiles,\n // getDataTypes,\n getFileUsageSummary\n }\n\n}\n\n"]}
|
|
@@ -3,10 +3,7 @@ export type FileImageCompressionOptions = {
|
|
|
3
3
|
maxWidth?: number;
|
|
4
4
|
quality?: number;
|
|
5
5
|
};
|
|
6
|
-
export
|
|
7
|
-
compress: (buffer: Buffer, mimeType: string, options?: FileImageCompressionOptions) => Promise<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
sizeBytes: number;
|
|
11
|
-
}>;
|
|
12
|
-
}>;
|
|
6
|
+
export type ImageCompressionProvider = {
|
|
7
|
+
compress: (buffer: Buffer, mimeType: string, options?: FileImageCompressionOptions) => Promise<any>;
|
|
8
|
+
};
|
|
9
|
+
export declare const getImageCompressionProvider: (provider: ImageCompressionProviderType, defaultOptions?: FileImageCompressionOptions) => Promise<ImageCompressionProvider>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageCompressionProviderRegistry.js","sourceRoot":"","sources":["../../../src/services/file/ImageCompressionProviderRegistry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ImageCompressionProviderRegistry.js","sourceRoot":"","sources":["../../../src/services/file/ImageCompressionProviderRegistry.ts"],"names":[],"mappings":";;;AAeO,MAAM,2BAA2B,GAAG,KAAK,EAC5C,QAAsC,EACtC,iBAA8C,EAAE,EACf,EAAE;IACnC,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,4BAA4B,EAAE,GAClC,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAE/C,OAAO;gBACH,QAAQ,EAAE,KAAK,EACX,MAAc,EACd,QAAgB,EAChB,OAAqC,EACvC,EAAE;oBACA,MAAM,MAAM,GAAG;wBACX,GAAG,cAAc;wBACjB,GAAG,OAAO;qBACb,CAAC;oBAEF,OAAO,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClE,CAAC;aACJ,CAAC;QACN,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,EAAE,2BAA2B,EAAE,GACjC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAE9C,OAAO;gBACH,QAAQ,EAAE,KAAK,EACX,MAAc,EACd,QAAgB,EAChB,OAAqC,EACvC,EAAE;oBACA,MAAM,MAAM,GAAG;wBACX,GAAG,cAAc;wBACjB,GAAG,OAAO;qBACb,CAAC;oBAEF,OAAO,2BAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjE,CAAC;aACJ,CAAC;QACN,CAAC;QAED;YACI,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;AACL,CAAC,CAAC;AAhDW,QAAA,2BAA2B,+BAgDtC","sourcesContent":["export type ImageCompressionProviderType = \"sharp\" | \"jimp\";\n\nexport type FileImageCompressionOptions = {\n maxWidth?: number;\n quality?: number;\n};\n\nexport type ImageCompressionProvider = {\n compress: (\n buffer: Buffer,\n mimeType: string,\n options?: FileImageCompressionOptions\n ) => Promise<any>;\n};\n\nexport const getImageCompressionProvider = async (\n provider: ImageCompressionProviderType,\n defaultOptions: FileImageCompressionOptions = {}\n): Promise<ImageCompressionProvider> => {\n switch (provider) {\n case \"sharp\": {\n const { compressImageBufferWithSharp } =\n await import(\"./SharpImageCompression.js\");\n\n return {\n compress: async (\n buffer: Buffer,\n mimeType: string,\n options?: FileImageCompressionOptions\n ) => {\n const merged = {\n ...defaultOptions,\n ...options,\n };\n\n return compressImageBufferWithSharp(buffer, mimeType, merged);\n },\n };\n }\n\n case \"jimp\": {\n const { compressImageBufferWithJimp } =\n await import(\"./JimpImageCompression.js\");\n\n return {\n compress: async (\n buffer: Buffer,\n mimeType: string,\n options?: FileImageCompressionOptions\n ) => {\n const merged = {\n ...defaultOptions,\n ...options,\n };\n\n return compressImageBufferWithJimp(buffer, mimeType, merged);\n },\n };\n }\n\n default:\n throw new Error(`Unknown provider: ${provider}`);\n }\n};"]}
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
maxWidth?: number;
|
|
3
|
-
quality?: number;
|
|
4
|
-
};
|
|
5
|
-
export declare const compressImageBuffer: (buffer: Buffer, mimeType: string, options?: FileImageCompressionOptions) => Promise<{
|
|
6
|
-
compressFormat: string;
|
|
7
|
-
buffer: Buffer;
|
|
8
|
-
sizeBytes: number;
|
|
9
|
-
}>;
|
|
1
|
+
export {};
|
|
@@ -1,47 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// import { sharp } from "../../utils";
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
4
|
+
// export type FileImageCompressionOptions = {
|
|
5
|
+
// maxWidth?: number;
|
|
6
|
+
// quality?: number;
|
|
7
|
+
// }
|
|
8
|
+
// export const compressImageBuffer = async (
|
|
9
|
+
// buffer: Buffer,
|
|
10
|
+
// mimeType: string,
|
|
11
|
+
// options: FileImageCompressionOptions = {}
|
|
12
|
+
// ): Promise<{
|
|
13
|
+
// compressFormat: string;
|
|
14
|
+
// buffer: Buffer;
|
|
15
|
+
// sizeBytes: number;
|
|
16
|
+
// }> => {
|
|
17
|
+
// const { maxWidth = 1024, quality = 80 } = options;
|
|
18
|
+
// const SUPPORTED_IMAGE_MIMES = [
|
|
19
|
+
// "image/jpeg",
|
|
20
|
+
// "image/png",
|
|
21
|
+
// "image/webp",
|
|
22
|
+
// "image/tiff",
|
|
23
|
+
// "image/bmp",
|
|
24
|
+
// ];
|
|
25
|
+
// // Skip unsupported images
|
|
26
|
+
// if (!SUPPORTED_IMAGE_MIMES.includes(mimeType)) {
|
|
27
|
+
// return { compressFormat: '', buffer, sizeBytes: buffer.byteLength };
|
|
28
|
+
// }
|
|
29
|
+
// // let pipeline = sharp(buffer);
|
|
30
|
+
// let pipeline = sharp(buffer)
|
|
31
|
+
// .rotate() // ✅ auto-orients based on EXIF
|
|
32
|
+
// // .resize({ width: maxWidth }); // safe to chain directly
|
|
33
|
+
// if (maxWidth) {
|
|
34
|
+
// pipeline = pipeline.resize({ width: maxWidth });
|
|
35
|
+
// }
|
|
36
|
+
// let compressedBuffer: Buffer;
|
|
37
|
+
// switch (mimeType) {
|
|
38
|
+
// case "image/png":
|
|
39
|
+
// compressedBuffer = await pipeline.png({ quality }).toBuffer();
|
|
40
|
+
// break;
|
|
41
|
+
// case "image/webp":
|
|
42
|
+
// compressedBuffer = await pipeline.webp({ quality }).toBuffer();
|
|
43
|
+
// break;
|
|
44
|
+
// case "image/jpeg":
|
|
45
|
+
// case "image/tiff":
|
|
46
|
+
// case "image/bmp":
|
|
47
|
+
// default:
|
|
48
|
+
// compressedBuffer = await pipeline.jpeg({ quality }).toBuffer();
|
|
49
|
+
// break;
|
|
50
|
+
// }
|
|
51
|
+
// return {
|
|
52
|
+
// compressFormat: JSON.stringify(options),
|
|
53
|
+
// buffer: compressedBuffer,
|
|
54
|
+
// sizeBytes: compressedBuffer.byteLength
|
|
55
|
+
// };
|
|
56
|
+
// };
|
|
47
57
|
//# sourceMappingURL=unuse_ImageCompression.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unuse_ImageCompression.js","sourceRoot":"","sources":["../../../src/services/file/unuse_ImageCompression.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unuse_ImageCompression.js","sourceRoot":"","sources":["../../../src/services/file/unuse_ImageCompression.ts"],"names":[],"mappings":";AAAA,mCAAmC;;AAEnC,8CAA8C;AAC9C,yBAAyB;AACzB,wBAAwB;AACxB,IAAI;AAEJ,6CAA6C;AAC7C,sBAAsB;AACtB,wBAAwB;AACxB,gDAAgD;AAChD,eAAe;AACf,8BAA8B;AAC9B,sBAAsB;AACtB,yBAAyB;AACzB,UAAU;AAEV,yDAAyD;AAEzD,sCAAsC;AACtC,wBAAwB;AACxB,uBAAuB;AACvB,wBAAwB;AACxB,wBAAwB;AACxB,uBAAuB;AACvB,SAAS;AAET,iCAAiC;AACjC,uDAAuD;AACvD,+EAA+E;AAC/E,QAAQ;AAER,uCAAuC;AACvC,mCAAmC;AACnC,oDAAoD;AACpD,iEAAiE;AAEjE,sBAAsB;AACtB,2DAA2D;AAC3D,QAAQ;AAER,oCAAoC;AAEpC,0BAA0B;AAC1B,4BAA4B;AAC5B,6EAA6E;AAC7E,qBAAqB;AACrB,6BAA6B;AAC7B,8EAA8E;AAC9E,qBAAqB;AACrB,6BAA6B;AAC7B,6BAA6B;AAC7B,4BAA4B;AAC5B,mBAAmB;AACnB,8EAA8E;AAC9E,qBAAqB;AACrB,QAAQ;AAER,eAAe;AACf,mDAAmD;AACnD,oCAAoC;AACpC,iDAAiD;AACjD,SAAS;AAET,KAAK","sourcesContent":["// import { sharp } from \"@/utils\";\n\n// export type FileImageCompressionOptions = {\n// maxWidth?: number;\n// quality?: number;\n// }\n\n// export const compressImageBuffer = async (\n// buffer: Buffer,\n// mimeType: string,\n// options: FileImageCompressionOptions = {}\n// ): Promise<{\n// compressFormat: string;\n// buffer: Buffer;\n// sizeBytes: number;\n// }> => {\n\n// const { maxWidth = 1024, quality = 80 } = options;\n\n// const SUPPORTED_IMAGE_MIMES = [\n// \"image/jpeg\",\n// \"image/png\",\n// \"image/webp\",\n// \"image/tiff\",\n// \"image/bmp\",\n// ];\n\n// // Skip unsupported images\n// if (!SUPPORTED_IMAGE_MIMES.includes(mimeType)) {\n// return { compressFormat: '', buffer, sizeBytes: buffer.byteLength };\n// }\n\n// // let pipeline = sharp(buffer);\n// let pipeline = sharp(buffer)\n// .rotate() // ✅ auto-orients based on EXIF\n// // .resize({ width: maxWidth }); // safe to chain directly\n\n// if (maxWidth) {\n// pipeline = pipeline.resize({ width: maxWidth });\n// }\n\n// let compressedBuffer: Buffer;\n\n// switch (mimeType) {\n// case \"image/png\":\n// compressedBuffer = await pipeline.png({ quality }).toBuffer();\n// break;\n// case \"image/webp\":\n// compressedBuffer = await pipeline.webp({ quality }).toBuffer();\n// break;\n// case \"image/jpeg\":\n// case \"image/tiff\":\n// case \"image/bmp\":\n// default:\n// compressedBuffer = await pipeline.jpeg({ quality }).toBuffer();\n// break;\n// }\n\n// return {\n// compressFormat: JSON.stringify(options),\n// buffer: compressedBuffer,\n// sizeBytes: compressedBuffer.byteLength\n// };\n\n// };"]}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export type { ItemServiceProps, ItemType, ItemGetProps, ItemUpdateProps, ItemCre
|
|
|
33
33
|
export { RepositoryService, repositoryTypes } from "../services/repository/RepositoryService";
|
|
34
34
|
export type { RepositoryServiceProps, RepositoryType, RepositoryGetProps, RepositoryUpdateProps, RepositoryCreateProps, RepositoryListProps, RepositoryRemoveProps } from "../services/repository/RepositoryService";
|
|
35
35
|
export { FileService } from "../services/file/FileService";
|
|
36
|
-
export type { FileImageCompressionOptions, FileVideoCompressionOptions, FileStorageProviderType, ImageCompressionProviderType, FileLocalProviderOptions, FileGoogleCloudProviderOptions, FileAwsS3ProviderOptions, FileCategoryName, FileUploadItem, FileServiceProps, FileGetProps, FileUploadProps, FileCreateProps, FileListProps, FileRemoveProps } from "../services/file/FileService";
|
|
36
|
+
export type { FileImageCompressionOptions, FileVideoCompressionOptions, FileStorageProviderType, ImageCompressionProviderType, ImageCompressionProvider, FileLocalProviderOptions, FileGoogleCloudProviderOptions, FileAwsS3ProviderOptions, FileCategoryName, FileUploadItem, FileServiceProps, FileGetProps, FileUploadProps, FileCreateProps, FileListProps, FileRemoveProps } from "../services/file/FileService";
|
|
37
37
|
export { LocationService } from "../services/location/LocationService";
|
|
38
38
|
export type { LocationServiceProps, LocationType, LocationGetProps, LocationUpdateProps, LocationCreateProps, LocationListProps, LocationRemoveProps } from "../services/location/LocationService";
|
|
39
39
|
export { InjectionFieldService, injectionFieldTypes, injectionFieldDataTypes } from "../services/injection_field/InjectionFieldService";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,2DAAoE;AAA3D,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAE/B,2EAA8G;AAArG,oHAAA,gBAAgB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAE9D,uFAAqF;AAA5E,4HAAA,oBAAoB,OAAA;AAE7B,uFAA2G;AAAlG,4HAAA,oBAAoB,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAEnD,oEAAkE;AAAzD,gHAAA,cAAc,OAAA;AAEvB,uEAAqE;AAA5D,kHAAA,eAAe,OAAA;AAGxB,0FAAyI;AAAhI,4HAAA,oBAAoB,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAAE,kIAAA,0BAA0B,OAAA;AAE9E,mGAAiG;AAAxF,kIAAA,uBAAuB,OAAA;AAGhC,2DAAyF;AAAhF,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAGpD,+DAA6D;AAApD,8GAAA,aAAa,OAAA;AAGtB,+FAA6F;AAApF,oIAAA,wBAAwB,OAAA;AAGjC,+FAA6F;AAApF,oIAAA,wBAAwB,OAAA;AAGjC,yEAAwF;AAA/E,sHAAA,iBAAiB,OAAA;AAAE,oHAAA,eAAe,OAAA;AAE3C,iEAA+D;AAAtD,8GAAA,aAAa,OAAA;AAEtB,uEAAqE;AAA5D,kHAAA,eAAe,OAAA;AAExB,2DAAoE;AAA3D,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAE/B,6EAA4F;AAAnF,sHAAA,iBAAiB,OAAA;AAAE,oHAAA,eAAe,OAAA;AAE3C,2DAAyD;AAAhD,0GAAA,WAAW,OAAA;AAEpB,uEAAqE;AAA5D,kHAAA,eAAe,OAAA;AAExB,0FAAsI;AAA7H,8HAAA,qBAAqB,OAAA;AAAE,4HAAA,mBAAmB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAE5E,yFAAuF;AAA9E,sIAAA,yBAAyB,OAAA;AAElC,kFAA8I;AAArI,wHAAA,kBAAkB,OAAA;AAAE,sHAAA,gBAAgB,OAAA;AAAE,6HAAA,uBAAuB,OAAA;AAAE,uHAAA,iBAAiB,OAAA;AAEzF,wEAAsE;AAA7D,oHAAA,gBAAgB,OAAA;AAGzB,gFAAiG;AAAxF,0HAAA,mBAAmB,OAAA;AAAE,wHAAA,iBAAiB,OAAA;AAE/C,wFAAsF;AAA7E,kIAAA,uBAAuB,OAAA;AAEhC,gFAA8E;AAArE,0HAAA,mBAAmB,OAAA;AAG5B,+FAA+F;AAC/F,wIAAwI;AACxI,8EAA4E;AAAnE,4HAAA,oBAAoB,OAAA","sourcesContent":["export { AuthService, authTypes } from \"@/services/auth/AuthService\"\nexport type { AuthServiceProps, AuthType, AuthTokenResult, AuthJwtToken, AuthGetTokenProps } from \"@/services/auth/AuthService\"\nexport { AccessKeyService, accessKeyUserTypes, accessKeyStatus } from \"@/services/access_key/AccessKeyService\"\nexport type { AccessKeyServiceProps, AccessKeyStatus, AccessKeyUserType, AccessKeyCreateProps, AccessKeyRevokeProps } from \"@/services/access_key/AccessKeyService\"\nexport { AccessControlService } from \"@/services/access_control/AccessControlService\"\nexport type { AccessControlServiceProps, AccessControlScopeOrExtra, AccessControlListOptionsProps } from \"@/services/access_control/AccessControlService\"\nexport { ResetPasswordService, resetPasswordMethods } from \"@/services/reset_password/ResetPasswordService\"\nexport type { ResetPasswordServiceProps, ResetPasswordMethod, ResetPasswordRequestProps, ResetPasswordValidateCodeProps, ResetPasswordPerformProps } from \"@/services/reset_password/ResetPasswordService\"\nexport { AccountService } from \"@/services/account/AccountService\"\nexport type { AccountServiceProps, Account, AccountGetProps, AccountListProps, AccountCreateProps, AccountUpdateProps, AccountRemoveProps } from \"@/services/account/AccountService\"\nexport { BusinessService } from \"@/services/business/BusinessService\"\nexport type { BusinessServiceProps, Business, BusinessGetProps, BusinessListProps, BusinessCreateProps, BusinessUpdateProps } from \"@/services/business/BusinessService\"\n\nexport { SubscribePlanService, subscribeCurrencies, subscribePlanBillingCycles } from \"@/services/subscription/plan/SubscribePlanService\"\nexport type { SubscribePlanServiceProps, SubscribePlan, SubscribePlanBillingCycle, SubscribePlanCurrency, SubscribePlanGetProps, SubscribePlanListProps, SubscribePlanCreateProps, SubscribePlanUpdateProps } from \"@/services/subscription/plan/SubscribePlanService\"\nexport { AccountSubscribeService } from \"@/services/subscription/account/AccountSubscribeService\"\nexport type { AccountSubscribeServiceProps, AccountSubscribe, AccountSubscribeGetProps, AccountSubscribeListProps, AccountSubscribeCreateProps, AccountSubscribeCancelProps } from \"@/services/subscription/account/AccountSubscribeService\"\n\nexport { UserService, userTypes, userParentSqlSelect } from \"@/services/user/UserService\"\nexport type { UserServiceProps, UserType, UserGetProps, UserListProps, UserCreateProps, UserUpdateProps, UserRemoveProps, UserReplacePasswordProps } from \"@/services/user/UserService\"\n\nexport { UserMeService } from \"@/services/user/UserMeService\"\nexport type { UserMeServiceProps, UserMeUpdateProps, UserMeChangePasswordProps } from \"@/services/user/UserMeService\"\n\nexport { AccessControlRoleService } from \"@/services/access_control/AccessControlRoleService\"\nexport type { AccessControlRoleServiceProps, AccessControlRoleUserType, AccessControlRoleGetProps, AccessControlRoleListProps, AccessControlRoleCreateProps, AccessControlRoleUpdateProps, AccessControlRoleRemoveProps } from \"@/services/access_control/AccessControlRoleService\"\n\nexport { AccessControlUserService } from \"@/services/access_control/AccessControlUserService\"\nexport type { AccessControlUserServiceProps, AccessControlUserAssignRolesProps } from \"@/services/access_control/AccessControlUserService\"\n\nexport { UserBranchService, userBranchTypes } from \"@/services/branch/UserBranchService\"\nexport type { UserBranchServiceProps, UserBranchType, UserBranchGetProps, UserBranchListProps, UserBranchCreateProps, UserBranchUpdateProps, UserBranchRemoveProps } from \"@/services/branch/UserBranchService\"\nexport { RegionService } from \"@/services/region/RegionService\"\nexport type { RegionServiceProps, RegionType, RegionGetProps, RegionCreateProps, RegionListProps, RegionUpdateProps, RegionRemoveProps } from \"@/services/region/RegionService\"\nexport { DocumentService } from \"@/services/document/DocumentService\"\nexport type { DocumentServiceProps, DocumentType, DocumentGetProps, DocumentUpdateProps, DocumentCreateProps, DocumentListProps, DocumentRemoveProps } from \"@/services/document/DocumentService\"\nexport { ItemService, itemTypes } from \"@/services/item/ItemService\"\nexport type { ItemServiceProps, ItemType, ItemGetProps, ItemUpdateProps, ItemCreateProps, ItemListProps, ItemRemoveProps } from \"@/services/item/ItemService\"\nexport { RepositoryService, repositoryTypes } from \"@/services/repository/RepositoryService\"\nexport type { RepositoryServiceProps, RepositoryType, RepositoryGetProps, RepositoryUpdateProps, RepositoryCreateProps, RepositoryListProps, RepositoryRemoveProps } from \"@/services/repository/RepositoryService\"\nexport { FileService } from \"@/services/file/FileService\"\nexport type { FileImageCompressionOptions, FileVideoCompressionOptions, FileStorageProviderType, ImageCompressionProviderType, FileLocalProviderOptions, FileGoogleCloudProviderOptions, FileAwsS3ProviderOptions, FileCategoryName, FileUploadItem, FileServiceProps, FileGetProps, FileUploadProps, FileCreateProps, FileListProps, FileRemoveProps } from \"@/services/file/FileService\"\nexport { LocationService } from \"@/services/location/LocationService\"\nexport type { LocationServiceProps, LocationType, LocationGetProps, LocationUpdateProps, LocationCreateProps, LocationListProps, LocationRemoveProps } from \"@/services/location/LocationService\"\nexport { InjectionFieldService, injectionFieldTypes, injectionFieldDataTypes } from \"@/services/injection_field/InjectionFieldService\"\nexport type { InjectionFieldModuleRef, InjectionFieldServiceProps, InjectionFieldType, InjectionFieldDataType, InjectionFieldCreateProps, InjectionFieldListProps, InjectionFieldGetProps, InjectionFieldReplaceProps } from \"@/services/injection_field/InjectionFieldService\"\nexport { NumberDateSequenceService } from \"@/services/others/NumberDateSequenceService\"\nexport type { NumberDateSequenceModuleRef, NumberDateSequenceServiceProps, NumberDateSequenceInitProps, NumberDateSequenceCreateProps } from \"@/services/others/NumberDateSequenceService\"\nexport { OneTimeCodeService, oneTimeCodeTypes, oneTimeCodePurposeTypes, oneTimeCodeStatus } from \"@/services/one_time_code/OneTimeCodeService\"\nexport type { OneTimeCodeModuleRef, OneTimeCodeType, OneTimeCodePurposeType, OneTimeCodeStatus, OneTimeCodeServiceProps, OneTimeCodeCreateProps } from \"@/services/one_time_code/OneTimeCodeService\"\nexport { SmtpEmailService } from \"@/services/gateway/SmtpEmailService\"\nexport type { SmtpEmailServiceProps, SmtpEmailSendProps, SmtpEmailTransporterOptions } from \"@/services/gateway/SmtpEmailService\"\n\nexport { SchedulerLogService, schedulerLogTypes } from \"@/services/scheduler/SchedulerLogService\"\nexport type { SchedulerLogServiceProps, SchedulerLogFlowType, SchedulerLogModuleRef, SchedulerLogRemoveProps, SchedulerLogCreateProps, SchedulerLogListProps, SchedulerLogGetProps } from \"@/services/scheduler/SchedulerLogService\"\nexport { SchedulerRequestService } from \"@/services/scheduler/SchedulerRequestService\"\nexport type { SchedulerRequestServiceProps, SchedulerRequestModuleRef, SchedulerRequestRemoveProps, SchedulerRequestCreateProps, SchedulerRequestExecuteProps, SchedulerRequestListProps, SchedulerRequestGetProps } from \"@/services/scheduler/SchedulerRequestService\"\nexport { SchedulerSqlService } from \"@/services/scheduler/SchedulerSqlService\"\nexport type { SchedulerSqlServiceProps, SchedulerSqlExecuteProps } from \"@/services/scheduler/SchedulerSqlService\"\n\n// export { ChangePasswordUtilService } from \"@/services/utils/unuse/ChangePasswordUtilService\"\n// export type { ChangePasswordUtilServiceProps, ChangePasswordUtilChangeProps } from \"@/services/utils/unuse/ChangePasswordUtilService\"\nexport { AccessKeyUtilService } from \"@/services/utils/AccessKeyUtilService\"\nexport type { AccessKeyUtilServiceProps, AccessKeyUtilValidateProps, AccessKeyUtilAccountOwnerProps } from \"@/services/utils/AccessKeyUtilService\""]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,2DAAoE;AAA3D,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAE/B,2EAA8G;AAArG,oHAAA,gBAAgB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAE9D,uFAAqF;AAA5E,4HAAA,oBAAoB,OAAA;AAE7B,uFAA2G;AAAlG,4HAAA,oBAAoB,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAEnD,oEAAkE;AAAzD,gHAAA,cAAc,OAAA;AAEvB,uEAAqE;AAA5D,kHAAA,eAAe,OAAA;AAGxB,0FAAyI;AAAhI,4HAAA,oBAAoB,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAAE,kIAAA,0BAA0B,OAAA;AAE9E,mGAAiG;AAAxF,kIAAA,uBAAuB,OAAA;AAGhC,2DAAyF;AAAhF,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAGpD,+DAA6D;AAApD,8GAAA,aAAa,OAAA;AAGtB,+FAA6F;AAApF,oIAAA,wBAAwB,OAAA;AAGjC,+FAA6F;AAApF,oIAAA,wBAAwB,OAAA;AAGjC,yEAAwF;AAA/E,sHAAA,iBAAiB,OAAA;AAAE,oHAAA,eAAe,OAAA;AAE3C,iEAA+D;AAAtD,8GAAA,aAAa,OAAA;AAEtB,uEAAqE;AAA5D,kHAAA,eAAe,OAAA;AAExB,2DAAoE;AAA3D,0GAAA,WAAW,OAAA;AAAE,wGAAA,SAAS,OAAA;AAE/B,6EAA4F;AAAnF,sHAAA,iBAAiB,OAAA;AAAE,oHAAA,eAAe,OAAA;AAE3C,2DAAyD;AAAhD,0GAAA,WAAW,OAAA;AAEpB,uEAAqE;AAA5D,kHAAA,eAAe,OAAA;AAExB,0FAAsI;AAA7H,8HAAA,qBAAqB,OAAA;AAAE,4HAAA,mBAAmB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAE5E,yFAAuF;AAA9E,sIAAA,yBAAyB,OAAA;AAElC,kFAA8I;AAArI,wHAAA,kBAAkB,OAAA;AAAE,sHAAA,gBAAgB,OAAA;AAAE,6HAAA,uBAAuB,OAAA;AAAE,uHAAA,iBAAiB,OAAA;AAEzF,wEAAsE;AAA7D,oHAAA,gBAAgB,OAAA;AAGzB,gFAAiG;AAAxF,0HAAA,mBAAmB,OAAA;AAAE,wHAAA,iBAAiB,OAAA;AAE/C,wFAAsF;AAA7E,kIAAA,uBAAuB,OAAA;AAEhC,gFAA8E;AAArE,0HAAA,mBAAmB,OAAA;AAG5B,+FAA+F;AAC/F,wIAAwI;AACxI,8EAA4E;AAAnE,4HAAA,oBAAoB,OAAA","sourcesContent":["export { AuthService, authTypes } from \"@/services/auth/AuthService\"\nexport type { AuthServiceProps, AuthType, AuthTokenResult, AuthJwtToken, AuthGetTokenProps } from \"@/services/auth/AuthService\"\nexport { AccessKeyService, accessKeyUserTypes, accessKeyStatus } from \"@/services/access_key/AccessKeyService\"\nexport type { AccessKeyServiceProps, AccessKeyStatus, AccessKeyUserType, AccessKeyCreateProps, AccessKeyRevokeProps } from \"@/services/access_key/AccessKeyService\"\nexport { AccessControlService } from \"@/services/access_control/AccessControlService\"\nexport type { AccessControlServiceProps, AccessControlScopeOrExtra, AccessControlListOptionsProps } from \"@/services/access_control/AccessControlService\"\nexport { ResetPasswordService, resetPasswordMethods } from \"@/services/reset_password/ResetPasswordService\"\nexport type { ResetPasswordServiceProps, ResetPasswordMethod, ResetPasswordRequestProps, ResetPasswordValidateCodeProps, ResetPasswordPerformProps } from \"@/services/reset_password/ResetPasswordService\"\nexport { AccountService } from \"@/services/account/AccountService\"\nexport type { AccountServiceProps, Account, AccountGetProps, AccountListProps, AccountCreateProps, AccountUpdateProps, AccountRemoveProps } from \"@/services/account/AccountService\"\nexport { BusinessService } from \"@/services/business/BusinessService\"\nexport type { BusinessServiceProps, Business, BusinessGetProps, BusinessListProps, BusinessCreateProps, BusinessUpdateProps } from \"@/services/business/BusinessService\"\n\nexport { SubscribePlanService, subscribeCurrencies, subscribePlanBillingCycles } from \"@/services/subscription/plan/SubscribePlanService\"\nexport type { SubscribePlanServiceProps, SubscribePlan, SubscribePlanBillingCycle, SubscribePlanCurrency, SubscribePlanGetProps, SubscribePlanListProps, SubscribePlanCreateProps, SubscribePlanUpdateProps } from \"@/services/subscription/plan/SubscribePlanService\"\nexport { AccountSubscribeService } from \"@/services/subscription/account/AccountSubscribeService\"\nexport type { AccountSubscribeServiceProps, AccountSubscribe, AccountSubscribeGetProps, AccountSubscribeListProps, AccountSubscribeCreateProps, AccountSubscribeCancelProps } from \"@/services/subscription/account/AccountSubscribeService\"\n\nexport { UserService, userTypes, userParentSqlSelect } from \"@/services/user/UserService\"\nexport type { UserServiceProps, UserType, UserGetProps, UserListProps, UserCreateProps, UserUpdateProps, UserRemoveProps, UserReplacePasswordProps } from \"@/services/user/UserService\"\n\nexport { UserMeService } from \"@/services/user/UserMeService\"\nexport type { UserMeServiceProps, UserMeUpdateProps, UserMeChangePasswordProps } from \"@/services/user/UserMeService\"\n\nexport { AccessControlRoleService } from \"@/services/access_control/AccessControlRoleService\"\nexport type { AccessControlRoleServiceProps, AccessControlRoleUserType, AccessControlRoleGetProps, AccessControlRoleListProps, AccessControlRoleCreateProps, AccessControlRoleUpdateProps, AccessControlRoleRemoveProps } from \"@/services/access_control/AccessControlRoleService\"\n\nexport { AccessControlUserService } from \"@/services/access_control/AccessControlUserService\"\nexport type { AccessControlUserServiceProps, AccessControlUserAssignRolesProps } from \"@/services/access_control/AccessControlUserService\"\n\nexport { UserBranchService, userBranchTypes } from \"@/services/branch/UserBranchService\"\nexport type { UserBranchServiceProps, UserBranchType, UserBranchGetProps, UserBranchListProps, UserBranchCreateProps, UserBranchUpdateProps, UserBranchRemoveProps } from \"@/services/branch/UserBranchService\"\nexport { RegionService } from \"@/services/region/RegionService\"\nexport type { RegionServiceProps, RegionType, RegionGetProps, RegionCreateProps, RegionListProps, RegionUpdateProps, RegionRemoveProps } from \"@/services/region/RegionService\"\nexport { DocumentService } from \"@/services/document/DocumentService\"\nexport type { DocumentServiceProps, DocumentType, DocumentGetProps, DocumentUpdateProps, DocumentCreateProps, DocumentListProps, DocumentRemoveProps } from \"@/services/document/DocumentService\"\nexport { ItemService, itemTypes } from \"@/services/item/ItemService\"\nexport type { ItemServiceProps, ItemType, ItemGetProps, ItemUpdateProps, ItemCreateProps, ItemListProps, ItemRemoveProps } from \"@/services/item/ItemService\"\nexport { RepositoryService, repositoryTypes } from \"@/services/repository/RepositoryService\"\nexport type { RepositoryServiceProps, RepositoryType, RepositoryGetProps, RepositoryUpdateProps, RepositoryCreateProps, RepositoryListProps, RepositoryRemoveProps } from \"@/services/repository/RepositoryService\"\nexport { FileService } from \"@/services/file/FileService\"\nexport type { FileImageCompressionOptions, FileVideoCompressionOptions, FileStorageProviderType, ImageCompressionProviderType, ImageCompressionProvider, FileLocalProviderOptions, FileGoogleCloudProviderOptions, FileAwsS3ProviderOptions, FileCategoryName, FileUploadItem, FileServiceProps, FileGetProps, FileUploadProps, FileCreateProps, FileListProps, FileRemoveProps } from \"@/services/file/FileService\"\nexport { LocationService } from \"@/services/location/LocationService\"\nexport type { LocationServiceProps, LocationType, LocationGetProps, LocationUpdateProps, LocationCreateProps, LocationListProps, LocationRemoveProps } from \"@/services/location/LocationService\"\nexport { InjectionFieldService, injectionFieldTypes, injectionFieldDataTypes } from \"@/services/injection_field/InjectionFieldService\"\nexport type { InjectionFieldModuleRef, InjectionFieldServiceProps, InjectionFieldType, InjectionFieldDataType, InjectionFieldCreateProps, InjectionFieldListProps, InjectionFieldGetProps, InjectionFieldReplaceProps } from \"@/services/injection_field/InjectionFieldService\"\nexport { NumberDateSequenceService } from \"@/services/others/NumberDateSequenceService\"\nexport type { NumberDateSequenceModuleRef, NumberDateSequenceServiceProps, NumberDateSequenceInitProps, NumberDateSequenceCreateProps } from \"@/services/others/NumberDateSequenceService\"\nexport { OneTimeCodeService, oneTimeCodeTypes, oneTimeCodePurposeTypes, oneTimeCodeStatus } from \"@/services/one_time_code/OneTimeCodeService\"\nexport type { OneTimeCodeModuleRef, OneTimeCodeType, OneTimeCodePurposeType, OneTimeCodeStatus, OneTimeCodeServiceProps, OneTimeCodeCreateProps } from \"@/services/one_time_code/OneTimeCodeService\"\nexport { SmtpEmailService } from \"@/services/gateway/SmtpEmailService\"\nexport type { SmtpEmailServiceProps, SmtpEmailSendProps, SmtpEmailTransporterOptions } from \"@/services/gateway/SmtpEmailService\"\n\nexport { SchedulerLogService, schedulerLogTypes } from \"@/services/scheduler/SchedulerLogService\"\nexport type { SchedulerLogServiceProps, SchedulerLogFlowType, SchedulerLogModuleRef, SchedulerLogRemoveProps, SchedulerLogCreateProps, SchedulerLogListProps, SchedulerLogGetProps } from \"@/services/scheduler/SchedulerLogService\"\nexport { SchedulerRequestService } from \"@/services/scheduler/SchedulerRequestService\"\nexport type { SchedulerRequestServiceProps, SchedulerRequestModuleRef, SchedulerRequestRemoveProps, SchedulerRequestCreateProps, SchedulerRequestExecuteProps, SchedulerRequestListProps, SchedulerRequestGetProps } from \"@/services/scheduler/SchedulerRequestService\"\nexport { SchedulerSqlService } from \"@/services/scheduler/SchedulerSqlService\"\nexport type { SchedulerSqlServiceProps, SchedulerSqlExecuteProps } from \"@/services/scheduler/SchedulerSqlService\"\n\n// export { ChangePasswordUtilService } from \"@/services/utils/unuse/ChangePasswordUtilService\"\n// export type { ChangePasswordUtilServiceProps, ChangePasswordUtilChangeProps } from \"@/services/utils/unuse/ChangePasswordUtilService\"\nexport { AccessKeyUtilService } from \"@/services/utils/AccessKeyUtilService\"\nexport type { AccessKeyUtilServiceProps, AccessKeyUtilValidateProps, AccessKeyUtilAccountOwnerProps } from \"@/services/utils/AccessKeyUtilService\""]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { ImageCompressionProvider } from "../services";
|
|
1
2
|
export type ThumbnailResult = {
|
|
2
3
|
buffer?: Buffer;
|
|
3
4
|
sizeBytes: number;
|
|
4
5
|
durationSeconds?: number;
|
|
5
6
|
};
|
|
6
|
-
export declare const generateImageThumbnail: (buffer: Buffer, width: number, quality: number) => Promise<ThumbnailResult>;
|
|
7
|
+
export declare const generateImageThumbnail: (imageCompressionProvider: ImageCompressionProvider, buffer: Buffer, width: number, quality: number) => Promise<ThumbnailResult>;
|
|
7
8
|
export declare const generateVideoThumbnail: (buffer: Buffer, width: number) => Promise<ThumbnailResult>;
|
|
8
9
|
export declare const generateAudioInfo: (buffer: Buffer, mimeType: string) => Promise<ThumbnailResult>;
|
|
9
|
-
export declare const generateFileThumbnailBuffer: (buffer: Buffer, mimeType: string, options?: {
|
|
10
|
+
export declare const generateFileThumbnailBuffer: (imageCompressionProvider: ImageCompressionProvider, buffer: Buffer, mimeType: string, options?: {
|
|
10
11
|
width?: number;
|
|
11
12
|
quality?: number;
|
|
12
13
|
}) => Promise<ThumbnailResult>;
|
|
@@ -8,10 +8,24 @@ exports.generateFileThumbnailBuffer = exports.generateAudioInfo = exports.genera
|
|
|
8
8
|
// import { file as tmpFile } from "tmp-promise";
|
|
9
9
|
// import ffmpeg from "fluent-ffmpeg";
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const generateImageThumbnail = async (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
// export const generateImageThumbnail = async (
|
|
12
|
+
// buffer: Buffer,
|
|
13
|
+
// width: number,
|
|
14
|
+
// quality: number
|
|
15
|
+
// ): Promise<ThumbnailResult> => {
|
|
16
|
+
// const sharp = (await import("sharp")).default;
|
|
17
|
+
// const resized = await sharp(buffer).resize({ width }).jpeg({ quality }).toBuffer();
|
|
18
|
+
// return { buffer: resized, sizeBytes: resized.byteLength };
|
|
19
|
+
// };
|
|
20
|
+
const generateImageThumbnail = async (imageCompressionProvider, buffer, width, quality) => {
|
|
21
|
+
const result = await imageCompressionProvider.compress(buffer, "image/jpeg", {
|
|
22
|
+
maxWidth: width,
|
|
23
|
+
quality,
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
buffer: result.buffer,
|
|
27
|
+
sizeBytes: result.buffer.byteLength,
|
|
28
|
+
};
|
|
15
29
|
};
|
|
16
30
|
exports.generateImageThumbnail = generateImageThumbnail;
|
|
17
31
|
const generateVideoThumbnail = async (buffer, width) => {
|
|
@@ -124,10 +138,10 @@ const generateAudioInfo = async (buffer, mimeType) => {
|
|
|
124
138
|
}
|
|
125
139
|
};
|
|
126
140
|
exports.generateAudioInfo = generateAudioInfo;
|
|
127
|
-
const generateFileThumbnailBuffer = async (buffer, mimeType, options = {}) => {
|
|
141
|
+
const generateFileThumbnailBuffer = async (imageCompressionProvider, buffer, mimeType, options = {}) => {
|
|
128
142
|
const { width = 300, quality = 75 } = options;
|
|
129
143
|
if (mimeType.startsWith("image/")) {
|
|
130
|
-
return (0, exports.generateImageThumbnail)(buffer, width, quality);
|
|
144
|
+
return (0, exports.generateImageThumbnail)(imageCompressionProvider, buffer, width, quality);
|
|
131
145
|
}
|
|
132
146
|
if (mimeType.startsWith("video/")) {
|
|
133
147
|
return (0, exports.generateVideoThumbnail)(buffer, width);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileThumbnail.js","sourceRoot":"","sources":["../../src/utils/fileThumbnail.ts"],"names":[],"mappings":"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","sourcesContent":["// import fs from \"fs/promises\";\n// import { file as tmpFile } from \"tmp-promise\";\n// import ffmpeg from \"fluent-ffmpeg\";\nimport path from \"path\";\n\nexport type ThumbnailResult = {\n buffer?: Buffer;\n sizeBytes: number;\n durationSeconds?: number;\n};\n\nexport const generateImageThumbnail = async (\n buffer: Buffer,\n width: number,\n quality: number\n): Promise<ThumbnailResult> => {\n const sharp = (await import(\"sharp\")).default;\n const resized = await sharp(buffer).resize({ width }).jpeg({ quality }).toBuffer();\n return { buffer: resized, sizeBytes: resized.byteLength };\n};\n\nexport const generateVideoThumbnail = async (\n buffer: Buffer,\n width: number\n): Promise<ThumbnailResult> => {\n let ffmpegLib: any;\n try {\n ({ default: ffmpegLib } = await import(\"fluent-ffmpeg\"));\n } catch {\n console.warn(\"⚠️ fluent-ffmpeg not installed, skipping video thumbnail\");\n return { buffer, sizeBytes: buffer.byteLength };\n }\n\n const tmp = await import(\"tmp-promise\");\n const fs = await import(\"fs/promises\");\n\n // optional static binaries\n try {\n const ffmpegStatic = await import(\"ffmpeg-static\");\n const ffmpegPath = (ffmpegStatic as any).default || (ffmpegStatic as any);\n if (ffmpegPath) ffmpegLib.setFfmpegPath(ffmpegPath as string);\n } catch { }\n\n try {\n const ffprobeStatic = await import(\"ffprobe-static\");\n const ffprobePath = (ffprobeStatic as any).path || (ffprobeStatic as any).default;\n if (ffprobePath) ffmpegLib.setFfprobePath(ffprobePath as string);\n } catch { }\n\n const { path: inputPath, cleanup: cleanupInput } = await tmp.file({ postfix: \".mp4\" });\n const { path: outputPath, cleanup: cleanupOutput } = await tmp.file({ postfix: \".jpg\" });\n\n try {\n await fs.writeFile(inputPath, buffer);\n\n // get video duration\n const durationSeconds: number = await new Promise((resolve, reject) => {\n ffmpegLib.ffprobe(inputPath, (err: Error, metadata: any) => {\n if (err) return reject(err);\n resolve(metadata?.format?.duration ?? 0);\n });\n });\n\n // generate thumbnail at middle frame\n await new Promise<void>((resolve, reject) => {\n ffmpegLib(inputPath)\n .screenshots({\n count: 1,\n folder: path.dirname(outputPath),\n filename: path.basename(outputPath),\n timemarks: [String(durationSeconds / 2)],\n size: `${width}x?`,\n })\n .on(\"end\", resolve)\n .on(\"error\", reject);\n });\n\n const thumbBuffer = await fs.readFile(outputPath);\n return { buffer: thumbBuffer, sizeBytes: thumbBuffer.byteLength, durationSeconds };\n } catch (err) {\n console.warn(\"⚠️ Skipping video thumbnail (ffmpeg execution failed)\", err);\n return { buffer, sizeBytes: buffer.byteLength };\n } finally {\n cleanupInput();\n cleanupOutput();\n }\n};\n\nexport const generateAudioInfo = async (buffer: Buffer, mimeType: string): Promise<ThumbnailResult> => {\n\n let ffmpegLib: any;\n\n try {\n ({ default: ffmpegLib } = await import(\"fluent-ffmpeg\"));\n } catch {\n console.warn(\"⚠️ fluent-ffmpeg not installed, skipping video thumbnail\");\n return { buffer, sizeBytes: buffer.byteLength };\n }\n\n // Make fluent-ffmpeg use the static binaries\n try {\n const ffmpegStatic = await import(\"ffmpeg-static\");\n if (ffmpegStatic?.default) ffmpegLib.setFfmpegPath(ffmpegStatic.default);\n } catch { }\n\n try {\n const ffprobeStatic = await import(\"ffprobe-static\");\n if (ffprobeStatic?.path) ffmpegLib.setFfprobePath(ffprobeStatic.path);\n } catch { }\n\n const fs = await import(\"fs/promises\");\n const tmp = await import(\"tmp-promise\");\n\n const extension = mimeType.split(\"/\")[1]; // e.g., \"mpeg\", \"ogg\", \"mp4\"\n\n const { path: inputPath, cleanup } = await tmp.file({ postfix: `${extension}` });\n\n try {\n await fs.writeFile(inputPath, buffer);\n\n const durationSeconds: number = await new Promise((resolve, reject) => {\n ffmpegLib.ffprobe(inputPath, (err: Error, metadata: any) => {\n if (err) return reject(err);\n resolve(metadata?.format?.duration ?? 0);\n });\n });\n\n return { buffer: undefined, sizeBytes: buffer.byteLength, durationSeconds };\n\n } catch (error) {\n console.log('er', error)\n throw error\n } finally {\n cleanup();\n }\n};\n\nexport const generateFileThumbnailBuffer = async (\n buffer: Buffer,\n mimeType: string,\n options: { width?: number; quality?: number } = {}\n): Promise<ThumbnailResult> => {\n\n const { width = 300, quality = 75 } = options;\n\n if (mimeType.startsWith(\"image/\")) {\n return generateImageThumbnail(buffer, width, quality);\n }\n\n if (mimeType.startsWith(\"video/\")) {\n return generateVideoThumbnail(buffer, width);\n }\n\n if (mimeType.startsWith(\"audio/\")) {\n return generateAudioInfo(buffer, mimeType);\n }\n\n // fallback\n // return { buffer, sizeBytes: buffer.byteLength };\n\n // Audio, document, archive → no thumbnail\n return {\n buffer: undefined,\n sizeBytes: 0,\n durationSeconds: 0\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"fileThumbnail.js","sourceRoot":"","sources":["../../src/utils/fileThumbnail.ts"],"names":[],"mappings":"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","sourcesContent":["// import fs from \"fs/promises\";\n// import { file as tmpFile } from \"tmp-promise\";\n// import ffmpeg from \"fluent-ffmpeg\";\nimport path from \"path\";\n\nimport { ImageCompressionProvider } from \"@/services\"\n\nexport type ThumbnailResult = {\n buffer?: Buffer;\n sizeBytes: number;\n durationSeconds?: number;\n};\n\n// export const generateImageThumbnail = async (\n// buffer: Buffer,\n// width: number,\n// quality: number\n// ): Promise<ThumbnailResult> => {\n// const sharp = (await import(\"sharp\")).default;\n// const resized = await sharp(buffer).resize({ width }).jpeg({ quality }).toBuffer();\n// return { buffer: resized, sizeBytes: resized.byteLength };\n// };\nexport const generateImageThumbnail = async (\n imageCompressionProvider: ImageCompressionProvider,\n buffer: Buffer,\n width: number,\n quality: number\n): Promise<ThumbnailResult> => {\n const result = await imageCompressionProvider.compress(\n buffer,\n \"image/jpeg\",\n {\n maxWidth: width,\n quality,\n }\n );\n\n return {\n buffer: result.buffer,\n sizeBytes: result.buffer.byteLength,\n };\n};\n\nexport const generateVideoThumbnail = async (\n buffer: Buffer,\n width: number\n): Promise<ThumbnailResult> => {\n let ffmpegLib: any;\n try {\n ({ default: ffmpegLib } = await import(\"fluent-ffmpeg\"));\n } catch {\n console.warn(\"⚠️ fluent-ffmpeg not installed, skipping video thumbnail\");\n return { buffer, sizeBytes: buffer.byteLength };\n }\n\n const tmp = await import(\"tmp-promise\");\n const fs = await import(\"fs/promises\");\n\n // optional static binaries\n try {\n const ffmpegStatic = await import(\"ffmpeg-static\");\n const ffmpegPath = (ffmpegStatic as any).default || (ffmpegStatic as any);\n if (ffmpegPath) ffmpegLib.setFfmpegPath(ffmpegPath as string);\n } catch { }\n\n try {\n const ffprobeStatic = await import(\"ffprobe-static\");\n const ffprobePath = (ffprobeStatic as any).path || (ffprobeStatic as any).default;\n if (ffprobePath) ffmpegLib.setFfprobePath(ffprobePath as string);\n } catch { }\n\n const { path: inputPath, cleanup: cleanupInput } = await tmp.file({ postfix: \".mp4\" });\n const { path: outputPath, cleanup: cleanupOutput } = await tmp.file({ postfix: \".jpg\" });\n\n try {\n await fs.writeFile(inputPath, buffer);\n\n // get video duration\n const durationSeconds: number = await new Promise((resolve, reject) => {\n ffmpegLib.ffprobe(inputPath, (err: Error, metadata: any) => {\n if (err) return reject(err);\n resolve(metadata?.format?.duration ?? 0);\n });\n });\n\n // generate thumbnail at middle frame\n await new Promise<void>((resolve, reject) => {\n ffmpegLib(inputPath)\n .screenshots({\n count: 1,\n folder: path.dirname(outputPath),\n filename: path.basename(outputPath),\n timemarks: [String(durationSeconds / 2)],\n size: `${width}x?`,\n })\n .on(\"end\", resolve)\n .on(\"error\", reject);\n });\n\n const thumbBuffer = await fs.readFile(outputPath);\n return { buffer: thumbBuffer, sizeBytes: thumbBuffer.byteLength, durationSeconds };\n } catch (err) {\n console.warn(\"⚠️ Skipping video thumbnail (ffmpeg execution failed)\", err);\n return { buffer, sizeBytes: buffer.byteLength };\n } finally {\n cleanupInput();\n cleanupOutput();\n }\n};\n\nexport const generateAudioInfo = async (buffer: Buffer, mimeType: string): Promise<ThumbnailResult> => {\n\n let ffmpegLib: any;\n\n try {\n ({ default: ffmpegLib } = await import(\"fluent-ffmpeg\"));\n } catch {\n console.warn(\"⚠️ fluent-ffmpeg not installed, skipping video thumbnail\");\n return { buffer, sizeBytes: buffer.byteLength };\n }\n\n // Make fluent-ffmpeg use the static binaries\n try {\n const ffmpegStatic = await import(\"ffmpeg-static\");\n if (ffmpegStatic?.default) ffmpegLib.setFfmpegPath(ffmpegStatic.default);\n } catch { }\n\n try {\n const ffprobeStatic = await import(\"ffprobe-static\");\n if (ffprobeStatic?.path) ffmpegLib.setFfprobePath(ffprobeStatic.path);\n } catch { }\n\n const fs = await import(\"fs/promises\");\n const tmp = await import(\"tmp-promise\");\n\n const extension = mimeType.split(\"/\")[1]; // e.g., \"mpeg\", \"ogg\", \"mp4\"\n\n const { path: inputPath, cleanup } = await tmp.file({ postfix: `${extension}` });\n\n try {\n await fs.writeFile(inputPath, buffer);\n\n const durationSeconds: number = await new Promise((resolve, reject) => {\n ffmpegLib.ffprobe(inputPath, (err: Error, metadata: any) => {\n if (err) return reject(err);\n resolve(metadata?.format?.duration ?? 0);\n });\n });\n\n return { buffer: undefined, sizeBytes: buffer.byteLength, durationSeconds };\n\n } catch (error) {\n console.log('er', error)\n throw error\n } finally {\n cleanup();\n }\n};\n\nexport const generateFileThumbnailBuffer = async (\n imageCompressionProvider: ImageCompressionProvider,\n buffer: Buffer,\n mimeType: string,\n options: { width?: number; quality?: number } = {}\n): Promise<ThumbnailResult> => {\n\n const { width = 300, quality = 75 } = options;\n\n if (mimeType.startsWith(\"image/\")) {\n return generateImageThumbnail(imageCompressionProvider, buffer, width, quality);\n }\n\n if (mimeType.startsWith(\"video/\")) {\n return generateVideoThumbnail(buffer, width);\n }\n\n if (mimeType.startsWith(\"audio/\")) {\n return generateAudioInfo(buffer, mimeType);\n }\n\n // fallback\n // return { buffer, sizeBytes: buffer.byteLength };\n\n // Audio, document, archive → no thumbnail\n return {\n buffer: undefined,\n sizeBytes: 0,\n durationSeconds: 0\n };\n};\n"]}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { getCoreConfiguration } from "./coreConfigUtils";
|
|
2
2
|
export { default as _ } from "lodash";
|
|
3
|
-
export { default as sharp } from "sharp";
|
|
4
3
|
export { HTTP_STATUS, sendError, sendSuccess } from "./responseUtils";
|
|
5
4
|
export { dayjs, getCurrentDateTime, getCurrentDateTimeISO, formatDisplayDateTime } from "./dateUtils";
|
|
6
5
|
export { validateWithSchema, validateMultipleSchemas, convertPayloadByTableSchema, validateModelFieldsWithData, createPublicScopeSchema, normalizePublicScopeFromBody } from "./schemaUtils";
|
package/dist/utils/index.js
CHANGED
|
@@ -3,13 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getAllPermissionKeysByPolicies = exports.validateFormatMobileNumber = exports.validateFormatEmailAddress = exports.generateFileThumbnailBuffer = exports.verifyPassword = exports.hashPassword = exports.validateLoginPasswordFormat = exports.loginPasswordFormatSchema = exports.decryptAccessKeySecret = exports.encryptAccessKeySecret = exports.hashAccessKeySecret = exports.generateAccessKeySecret = exports.generateAccessKeyId = exports.verifyAuthToken = exports.generateAuthToken = exports.groupPayloadInjectionFields = exports.buildFullFieldName = exports.buildFeatureCallbackProps = exports.generateServiceProps = exports.getDefaultServiceProps = exports.zodEnumFromObjectValues = exports.buildCommonStatusSchema = exports.getFormattedZodErrorsIntoString = exports.getFormattedZodErrors = exports.logError = exports.throwError = exports.logger = exports.normalizePublicScopeFromBody = exports.createPublicScopeSchema = exports.validateModelFieldsWithData = exports.convertPayloadByTableSchema = exports.validateMultipleSchemas = exports.validateWithSchema = exports.formatDisplayDateTime = exports.getCurrentDateTimeISO = exports.getCurrentDateTime = exports.dayjs = exports.sendSuccess = exports.sendError = exports.HTTP_STATUS = exports.
|
|
6
|
+
exports.getAllPermissionKeysByPolicies = exports.validateFormatMobileNumber = exports.validateFormatEmailAddress = exports.generateFileThumbnailBuffer = exports.verifyPassword = exports.hashPassword = exports.validateLoginPasswordFormat = exports.loginPasswordFormatSchema = exports.decryptAccessKeySecret = exports.encryptAccessKeySecret = exports.hashAccessKeySecret = exports.generateAccessKeySecret = exports.generateAccessKeyId = exports.verifyAuthToken = exports.generateAuthToken = exports.groupPayloadInjectionFields = exports.buildFullFieldName = exports.buildFeatureCallbackProps = exports.generateServiceProps = exports.getDefaultServiceProps = exports.zodEnumFromObjectValues = exports.buildCommonStatusSchema = exports.getFormattedZodErrorsIntoString = exports.getFormattedZodErrors = exports.logError = exports.throwError = exports.logger = exports.normalizePublicScopeFromBody = exports.createPublicScopeSchema = exports.validateModelFieldsWithData = exports.convertPayloadByTableSchema = exports.validateMultipleSchemas = exports.validateWithSchema = exports.formatDisplayDateTime = exports.getCurrentDateTimeISO = exports.getCurrentDateTime = exports.dayjs = exports.sendSuccess = exports.sendError = exports.HTTP_STATUS = exports._ = exports.getCoreConfiguration = void 0;
|
|
7
7
|
var coreConfigUtils_1 = require("./coreConfigUtils");
|
|
8
8
|
Object.defineProperty(exports, "getCoreConfiguration", { enumerable: true, get: function () { return coreConfigUtils_1.getCoreConfiguration; } });
|
|
9
9
|
var lodash_1 = require("lodash");
|
|
10
10
|
Object.defineProperty(exports, "_", { enumerable: true, get: function () { return __importDefault(lodash_1).default; } });
|
|
11
|
-
|
|
12
|
-
Object.defineProperty(exports, "sharp", { enumerable: true, get: function () { return __importDefault(sharp_1).default; } });
|
|
11
|
+
// export { default as sharp } from "sharp";
|
|
13
12
|
var responseUtils_1 = require("./responseUtils");
|
|
14
13
|
Object.defineProperty(exports, "HTTP_STATUS", { enumerable: true, get: function () { return responseUtils_1.HTTP_STATUS; } });
|
|
15
14
|
Object.defineProperty(exports, "sendError", { enumerable: true, get: function () { return responseUtils_1.sendError; } });
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,iCAAsC;AAA7B,4GAAA,OAAO,OAAK;AACrB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,iCAAsC;AAA7B,4GAAA,OAAO,OAAK;AACrB,4CAA4C;AAC5C,iDAAsE;AAA7D,4GAAA,WAAW,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAC5C,yCAAsG;AAA7F,kGAAA,KAAK,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAChF,6CAA6L;AAApL,iHAAA,kBAAkB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,2HAAA,4BAA4B,OAAA;AACrK,uCAA+C;AAAtC,mHAAA,OAAO,OAAU;AAC1B,mDAAwD;AAA/C,4GAAA,UAAU,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC7B,2CAA2C;AAC3C,wFAAwF;AACxF,mEAAmE;AACnE,mDAAmD;AACnD,uCAAqI;AAA5H,iHAAA,qBAAqB,OAAA;AAAE,2HAAA,+BAA+B,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAEjH,+CAA6E;AAApE,sHAAA,sBAAsB,OAAA;AAAE,oHAAA,oBAAoB,OAAA;AACrD,+CAA0D;AAAjD,yHAAA,yBAAyB,OAAA;AAElC,6DAAuF;AAA9E,yHAAA,kBAAkB,OAAA;AAAE,kIAAA,2BAA2B,OAAA;AACxD,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC3C,mDAAoJ;AAA3I,qHAAA,mBAAmB,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAC1H,iDAAsH;AAA7G,0HAAA,yBAAyB,OAAA;AAAE,4HAAA,2BAA2B,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,+GAAA,cAAc,OAAA;AAC7F,iDAA6D;AAApD,4HAAA,2BAA2B,OAAA;AACpC,6DAA8F;AAArF,iIAAA,0BAA0B,OAAA;AAAE,iIAAA,0BAA0B,OAAA;AAC/D,2DAAqE;AAA5D,oIAAA,8BAA8B,OAAA","sourcesContent":["export { getCoreConfiguration } from \"./coreConfigUtils\";\nexport { default as _ } from \"lodash\";\n// export { default as sharp } from \"sharp\";\nexport { HTTP_STATUS, sendError, sendSuccess } from \"./responseUtils\";\nexport { dayjs, getCurrentDateTime, getCurrentDateTimeISO, formatDisplayDateTime } from \"./dateUtils\";\nexport { validateWithSchema, validateMultipleSchemas, convertPayloadByTableSchema, validateModelFieldsWithData, createPublicScopeSchema, normalizePublicScopeFromBody } from \"./schemaUtils\";\nexport { default as logger } from \"./logUtils\";\nexport { throwError, logError } from \"./exceptionUtils\";\n// export { getSwmAuth } from \"./smwUtils\";\n// export { getRequestHeaderLocCode, checkRequestContentIsEmpty } from \"./requestUtils\";\n// export { storeJwtInMemory, getJwtFromMemory } from \"./jwtUtils\";\n// export { resizeImageBuffer } from \"./shapeUtils\"\nexport { getFormattedZodErrors, getFormattedZodErrorsIntoString, buildCommonStatusSchema, zodEnumFromObjectValues } from \"./zodUtils\"\nexport type { DefaultServiceProps } from \"./serviceUtils\"\nexport { getDefaultServiceProps, generateServiceProps } from \"./serviceUtils\"\nexport { buildFeatureCallbackProps } from \"./featureUtils\"\nexport type { FeatureCallbackProps } from \"./featureUtils\"\nexport { buildFullFieldName, groupPayloadInjectionFields } from \"./injectionFieldUtils\"\nexport { generateAuthToken, verifyAuthToken } from \"./authUtils\"\nexport { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret, encryptAccessKeySecret, decryptAccessKeySecret } from \"./accessKeyUtils\"\nexport { loginPasswordFormatSchema, validateLoginPasswordFormat, hashPassword, verifyPassword } from \"./passwordUtils\"\nexport { generateFileThumbnailBuffer } from \"./fileThumbnail\"\nexport { validateFormatEmailAddress, validateFormatMobileNumber } from \"./validateFormatUtils\"\nexport { getAllPermissionKeysByPolicies } from \"./accessControlUtils\""]}
|