aws-service-stack 0.18.308 → 0.18.310

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.
Files changed (45) hide show
  1. package/dist/_examples/controller/commission/commission.config.d.ts +1 -1
  2. package/dist/_examples/controller/commission/commission.config.js +3 -3
  3. package/dist/_examples/controller/commission/commission.config.js.map +1 -1
  4. package/dist/_examples/controller/supplier/supplier-config.js +0 -1
  5. package/dist/_examples/controller/supplier/supplier-config.js.map +1 -1
  6. package/dist/_examples/controller/supplier/supplier-controller-api.d.ts +2 -2
  7. package/dist/_examples/controller/supplier/supplier-controller-api.js +4 -6
  8. package/dist/_examples/controller/supplier/supplier-controller-api.js.map +1 -1
  9. package/dist/_examples/model-shared/supplier-portal.model.d.ts +1 -10
  10. package/dist/_examples/model-shared/supplier-portal.model.js.map +1 -1
  11. package/dist/_examples/repositories/supplier/supplier-repo-db.d.ts +2 -2
  12. package/dist/_examples/repositories/supplier/supplier-repo-db.interface.d.ts +2 -2
  13. package/dist/_examples/repositories/supplier/supplier-repo-db.interface.js.map +1 -1
  14. package/dist/_examples/repositories/supplier/supplier-repo-db.js.map +1 -1
  15. package/dist/_examples/repositories/supplier/supplier-repo-es.d.ts +2 -2
  16. package/dist/_examples/repositories/supplier/supplier-repo-es.interface.d.ts +2 -2
  17. package/dist/_examples/repositories/supplier/supplier-repo-es.interface.js.map +1 -1
  18. package/dist/_examples/repositories/supplier/supplier-repo-es.js.map +1 -1
  19. package/dist/_examples/service/commission/commission-service.js +2 -0
  20. package/dist/_examples/service/commission/commission-service.js.map +1 -1
  21. package/dist/_examples/service/rorder/rorder-service.interface.d.ts +2 -1
  22. package/dist/_examples/service/rorder/rorder-service.interface.js.map +1 -1
  23. package/dist/_examples/service/supplier/supplier-service-crud.d.ts +17 -6
  24. package/dist/_examples/service/supplier/supplier-service-crud.interface.d.ts +12 -5
  25. package/dist/_examples/service/supplier/supplier-service-crud.interface.js.map +1 -1
  26. package/dist/_examples/service/supplier/supplier-service-crud.js +61 -76
  27. package/dist/_examples/service/supplier/supplier-service-crud.js.map +1 -1
  28. package/dist/_examples/service/supplier/supplier-service-stream.d.ts +5 -5
  29. package/dist/_examples/service/supplier/supplier-service-stream.interface.d.ts +2 -2
  30. package/dist/_examples/service/supplier/supplier-service-stream.interface.js.map +1 -1
  31. package/dist/_examples/service/supplier/supplier-service-stream.js.map +1 -1
  32. package/dist/model/filter.model.d.ts +1 -0
  33. package/dist/model/filter.model.js.map +1 -1
  34. package/dist/repositories/base-db.repo.d.ts +1 -0
  35. package/dist/repositories/base-db.repo.interface.d.ts +1 -0
  36. package/dist/repositories/base-db.repo.interface.js.map +1 -1
  37. package/dist/repositories/base-db.repo.js +17 -0
  38. package/dist/repositories/base-db.repo.js.map +1 -1
  39. package/dist/utils/opensearch.utils.d.ts +2 -0
  40. package/dist/utils/opensearch.utils.js +93 -0
  41. package/dist/utils/opensearch.utils.js.map +1 -1
  42. package/dist/utils/reflection.util.js +1 -1
  43. package/dist/utils/reflection.util.js.map +1 -1
  44. package/dist/utils/validation.util.js.map +1 -1
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"base-db.repo.js","sourceRoot":"","sources":["../../src/repositories/base-db.repo.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AttributeValue,\n BatchGetItemCommand,\n BatchWriteItemCommand,\n BatchWriteItemCommandInput,\n DeleteItemCommand,\n GetItemCommand,\n PutItemCommand,\n QueryCommand,\n QueryCommandInput,\n QueryCommandOutput,\n ReturnValue,\n ScanCommand,\n ScanCommandInput,\n ScanCommandOutput,\n TransactWriteItemsCommand,\n TransactWriteItemsCommandInput,\n UpdateItemCommand,\n UpdateItemCommandInput,\n} from \"@aws-sdk/client-dynamodb\";\nimport { marshall, unmarshall } from \"@aws-sdk/util-dynamodb\";\nimport {\n addIndexValue,\n BaseRepoDB,\n buildDynamoDBFilterConditions,\n buildDynamoDBQueryCommand,\n buildDynamoDBScanCommand,\n buildQueryDB,\n buildUpdateExpressions,\n chunkArray,\n DBClientDynamoDB,\n DynamoIndexMap,\n generateLastEvaluatedKey,\n generateUUID,\n List,\n parseIndexFilter,\n parseLastEvaluatedKey,\n removeFields,\n toBase64,\n unMarshall,\n} from \"../index\";\nimport Container, { Service } from \"typedi\";\nimport { ErrorDynamoDB } from \"../exception/errors\";\nimport { BaseEntity, Filter } from \"@chinggis/types\";\n\nService(\"BaseRepoDB\");\n\nexport class BaseRepoDBImpl<T extends BaseEntity> implements BaseRepoDB<T> {\n private readonly dynamoDb: DBClientDynamoDB = Container.get(\"DBClientDynamoDB\");\n private _tableName: string;\n private _indexMap: DynamoIndexMap;\n private readonly DYNAMO_QUERY_LIMIT: number = 25;\n\n async deleteFields(id: string, fieldNames: string[]): Promise<Partial<T>> {\n if (!id || fieldNames.length === 0) {\n return undefined;\n }\n\n const partitionKey = this._indexMap.partitionKey;\n const expressionAttributeNames: Record<string, string> = {};\n const removeExpressions: string[] = [];\n\n for (const field of fieldNames) {\n const placeholder = `#${field}`;\n expressionAttributeNames[placeholder] = field;\n removeExpressions.push(placeholder);\n }\n\n const updateExpression = `REMOVE ${removeExpressions.join(\", \")}`;\n\n const params = {\n TableName: this._tableName,\n Key: marshall({ [partitionKey]: id }),\n UpdateExpression: updateExpression,\n ExpressionAttributeNames: expressionAttributeNames,\n ReturnValues: \"ALL_NEW\" as const,\n };\n\n const result = await this.dynamoDb.send(new UpdateItemCommand(params));\n if (!result.Attributes) {\n throw new Error(\"No attributes returned from UpdateItem.\");\n }\n\n return unmarshall(result.Attributes) as Partial<T>;\n }\n\n fieldNotExists(fieldName: string, from: number, size: number): Promise<T[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n incrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n if (value < 0) {\n throw new Error(\"Increment operation only supports positive values\");\n }\n\n return this.incrementOrDecrementFieldValue(entityId, fieldName, value ?? 1);\n }\n\n decrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n if (value > 0) {\n throw new ErrorDynamoDB(\n this._tableName,\n `Decrement operation only supports negative values, inputValue: ${value}, for field: ${fieldName}`,\n );\n }\n return this.incrementOrDecrementFieldValue(entityId, fieldName, value ?? -1);\n }\n\n transactWrite?(operations: any[]): Promise<boolean> {\n throw new Error(\"Method not implemented.\");\n }\n\n async update(entity: Partial<T>): Promise<T> {\n const partitionKey = this._indexMap.partitionKey;\n\n if (!entity[partitionKey]) {\n throw new ErrorDynamoDB(this._tableName, `Entity must have value in field ${partitionKey}`);\n }\n\n const indexedItem = addIndexValue(entity, this._indexMap);\n\n const { UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues } = buildUpdateExpressions(\n indexedItem,\n [partitionKey],\n );\n\n const params = {\n TableName: this._tableName,\n Key: marshall({ [partitionKey]: indexedItem[partitionKey] }),\n UpdateExpression,\n ExpressionAttributeNames,\n ExpressionAttributeValues,\n ReturnValues: ReturnValue.ALL_NEW,\n };\n\n const result = await this.dynamoDb.send(new UpdateItemCommand(params));\n if (!result.Attributes) {\n throw new Error(\"No attributes returned from UpdateItem.\");\n }\n return unmarshall(result.Attributes) as T;\n }\n\n async updateMany(entityList: Partial<T>[], fields: string[], isTransactional: boolean): Promise<boolean> {\n if (isTransactional === undefined || isTransactional === false || isTransactional === null)\n return await this.updateManyNormal(entityList, fields);\n\n return await this.updateManyTransactional(entityList, fields);\n }\n\n async save(entity: Partial<T>): Promise<T> {\n const partitionKey = this._indexMap.partitionKey;\n\n if (!entity[partitionKey]) throw new Error(`Entity must have a ${partitionKey} field.`);\n\n const indexedItem = addIndexValue(entity, this._indexMap);\n\n const params = {\n TableName: this._tableName,\n Item: marshall(indexedItem, { removeUndefinedValues: true }),\n };\n try {\n await this.dynamoDb.send(new PutItemCommand(params));\n\n return entity as T;\n } catch (error) {\n console.error(\"Error saving entity:\", error);\n throw new ErrorDynamoDB(this._tableName, params, error);\n }\n }\n\n async saveMany(entities: Partial<T>[], isTransactional?: boolean): Promise<Partial<T>[]> {\n if (isTransactional === undefined || isTransactional === null || isTransactional === false)\n return await this.saveManyNormal(entities);\n return await this.saveManyTransactional(entities);\n }\n\n async delete(id: string): Promise<boolean> {\n const params = {\n TableName: this._tableName,\n Key: marshall({ [this._indexMap.partitionKey]: id }),\n };\n\n try {\n await this.dynamoDb.send(new DeleteItemCommand(params));\n return true;\n } catch (error) {\n console.error(\"Error deleting item:\", error);\n throw new ErrorDynamoDB(this._tableName, params, error);\n }\n }\n\n async deleteMany(ids: string[]): Promise<boolean> {\n if (ids?.length === 0) return false;\n const chunked = chunkArray(ids, 25);\n for (const chunk of chunked) {\n const deleteRequests = chunk.map((id) => {\n return {\n DeleteRequest: {\n Key: marshall({ [this._indexMap.partitionKey]: id }),\n },\n };\n });\n\n const params = {\n RequestItems: {\n [this._tableName]: deleteRequests,\n },\n };\n\n await this.dynamoDb.send(new BatchWriteItemCommand(params));\n }\n return true;\n }\n\n async findById(id: string): Promise<T> {\n const params = {\n TableName: this._tableName,\n Key: marshall({ [this._indexMap.partitionKey]: id }),\n };\n\n try {\n const result = await this.dynamoDb.send(new GetItemCommand(params));\n if (!result.Item) return null;\n return unmarshall(result.Item) as T;\n } catch (error) {\n console.error(\"Error getting item:\", error);\n throw new ErrorDynamoDB(this._tableName, params, error);\n }\n }\n\n async findByIds(ids: string[]): Promise<T[]> {\n let items: T[] = [];\n if (!ids || ids.length === 0) throw new Error(\"Item must have entityIds\");\n\n const chunked = chunkArray(ids, 100);\n for (const chunk of chunked) {\n const keys = chunk.map((id) => ({ [this._indexMap.partitionKey]: { S: id } }));\n const params = {\n RequestItems: {\n [this._tableName]: { Keys: keys },\n },\n };\n\n const response = await this.dynamoDb.send(new BatchGetItemCommand(params));\n\n items = items.concat(response.Responses?.[this._tableName]?.map((item) => unmarshall(item)) as T[]) ?? [];\n }\n return items;\n }\n\n async find(filter: Filter): Promise<List<Partial<T>>> {\n if (!filter) filter = { size: this.DYNAMO_QUERY_LIMIT };\n\n // Enforce Query-only: require indexName & indexValue; otherwise instruct the caller to use scan\n if (!filter.indexName || filter.indexValue === undefined || filter.indexValue === null) {\n throw new ErrorDynamoDB(\n this._tableName,\n \"find in by index\",\n \"find requires indexName and indexValue; use scan() otherwise\",\n );\n }\n\n const dbQuery = buildDynamoDBQueryCommand({\n tableName: this._tableName,\n filter,\n filterCondition: buildDynamoDBFilterConditions(filter, this._indexMap),\n indexMap: this._indexMap,\n });\n\n const response = await this.sendCommandDeep<T>(dbQuery, filter?.lastKey);\n const fieldsRemoved = removeFields(response?.items, filter.fieldsInclude, filter.fieldsExclude);\n return { items: fieldsRemoved, lastKey: response?.lastKey };\n }\n\n async scan(filter: Filter): Promise<List<Partial<T>>> {\n if (!filter) filter = { size: this.DYNAMO_QUERY_LIMIT };\n const expression = buildDynamoDBFilterConditions(filter, this._indexMap);\n const scanInput = buildDynamoDBScanCommand({ tableName: this._tableName, filter, expression });\n const response = await this.sendCommandDeep<T>(scanInput, filter?.lastKey);\n const fieldsRemoved = removeFields(response?.items, filter.fieldsInclude, filter.fieldsExclude);\n return { items: fieldsRemoved, lastKey: response?.lastKey };\n }\n\n async findOne(filter: Filter): Promise<T> {\n const queryInput = buildQueryDB(this._tableName, filter, this._indexMap);\n queryInput.Limit = 1;\n\n const result = await this.dynamoDb.send(new QueryCommand(queryInput));\n\n if (!result.Items || result.Items.length === 0) return null;\n return unmarshall(result.Items[0]) as T;\n }\n\n findByIndex(indexName: string, value: string): Promise<List<Partial<T>>> {\n return this.find(parseIndexFilter(indexName + \"=\" + value, this._indexMap));\n }\n\n async count(filter: Filter): Promise<number> {\n const queryInput = buildQueryDB(this._tableName, filter, this._indexMap);\n queryInput.Select = \"COUNT\";\n\n const result = await this.dynamoDb.send(new QueryCommand(queryInput));\n return result.Count ?? 0;\n }\n\n async exists(id: string): Promise<boolean> {\n const key = marshall({ [this._indexMap.partitionKey]: id });\n\n const result = await this.dynamoDb.send(\n new GetItemCommand({\n TableName: this._tableName,\n Key: key,\n ProjectionExpression: this._indexMap.partitionKey,\n }),\n );\n\n return !!result.Item;\n }\n\n async getRaw(filter: Filter): Promise<any> {\n const queryInput = buildQueryDB(this._tableName, filter, this._indexMap);\n return this.dynamoDb.send(new QueryCommand(queryInput));\n }\n\n async transactionRead<T>(operations: { id: string; sortKey?: string }[]): Promise<T[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n async transactRead?<TResult = any>(operations: any[]): Promise<TResult[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n async transactionWrite(operations: {\n create?: { tableName: string; item: Record<string, any> }[];\n update?: {\n tableName: string;\n key: { id: string };\n updateData: Record<string, any>;\n }[];\n delete?: { tableName: string; key: { id: string } }[];\n }): Promise<boolean> {\n const transactItems: any[] = [];\n\n // Create operations\n if (operations.create) {\n for (const { tableName, item } of operations.create) {\n if (!item?.id) {\n item.id = generateUUID();\n }\n transactItems.push({\n Put: {\n TableName: tableName,\n Item: marshall(item, { removeUndefinedValues: true }),\n },\n });\n }\n }\n\n // Update operations\n if (operations.update) {\n for (const { tableName, key, updateData } of operations.update) {\n const { UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues } = buildUpdateExpressions(\n updateData,\n [\"id\"],\n );\n\n transactItems.push({\n Update: {\n TableName: tableName,\n Key: marshall(key),\n UpdateExpression,\n ExpressionAttributeNames,\n ExpressionAttributeValues,\n },\n });\n }\n }\n\n // Delete operations\n if (operations.delete) {\n for (const { tableName, key } of operations.delete) {\n transactItems.push({\n Delete: {\n TableName: tableName,\n Key: marshall(key),\n },\n });\n }\n }\n\n if (transactItems.length === 0) return false;\n\n // Execute transaction\n try {\n await this.dynamoDb.send(new TransactWriteItemsCommand({ TransactItems: transactItems }));\n return true;\n } catch (error) {\n console.error(\"Transaction failed:\", error);\n throw new ErrorDynamoDB(this._tableName, transactItems, error);\n }\n }\n\n getTableName() {\n return this._tableName;\n }\n\n setIndexMap(indexMap: DynamoIndexMap): boolean {\n this._indexMap = indexMap;\n return true;\n }\n\n setTable(tableName: string): boolean {\n this._tableName = tableName;\n return true;\n }\n\n getIndexMap(): DynamoIndexMap {\n return this._indexMap;\n }\n\n private async updateManyNormal(entityList: Partial<T>[], fieldNames: string[]): Promise<boolean> {\n return this.updateManyTransactional(entityList, fieldNames); // todo implement normal updateMany\n }\n\n private async updateManyTransactional(entityList: Partial<T>[], fieldNames: string[]): Promise<boolean> {\n if (entityList.length === 0) return false;\n\n if (!fieldNames || fieldNames.length === 0) {\n await this.saveMany(entityList, true);\n return true;\n }\n\n const partitionKey = this._indexMap.partitionKey;\n fieldNames.push(partitionKey);\n const entityListCleaned = removeFields(entityList, fieldNames);\n\n const indexedItems = entityListCleaned.map((entity) => {\n return addIndexValue(entity, this._indexMap);\n });\n\n const transactItems = indexedItems\n .map((item) => {\n if (!item[partitionKey])\n throw new Error(\n `Item must have an ${partitionKey} field. Entity: ${JSON.stringify(item, null, 2)}, \\nupdateFields: ${JSON.stringify(fieldNames)}`,\n );\n\n const { UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues } = buildUpdateExpressions(item, [\n partitionKey,\n ]);\n\n return {\n Update: {\n TableName: this._tableName,\n Key: { [partitionKey]: { S: item[partitionKey] } }, // id-г шууд key болгож дамжуулах\n UpdateExpression,\n ExpressionAttributeValues,\n ExpressionAttributeNames,\n },\n };\n })\n .filter(Boolean) as any[]; // filter(Boolean) нь хоосон утгуудыг арилгана.\n\n if (transactItems.length < 1) return false;\n\n const chunkedItems = chunkArray(transactItems, 25); // 25-аас дээш бол багцлах\n\n for (const chunk of chunkedItems) await this.dynamoDb.send(new TransactWriteItemsCommand({ TransactItems: chunk }));\n\n return true;\n }\n\n private async saveManyNormal(entities: Partial<T>[]): Promise<Partial<T>[]> {\n if (entities.length === 0) throw new Error(\"Cannot save an empty array of entities.\");\n\n const allSavedEntities: Partial<T>[] = [];\n\n for (const chunk of chunkArray(entities, 25)) {\n chunk.forEach((item) => addIndexValue(item, this._indexMap));\n const putRequests = chunk.map((entity) => ({\n PutRequest: { Item: marshall(entity, { removeUndefinedValues: true }) },\n }));\n\n const params: BatchWriteItemCommandInput = { RequestItems: { [this._tableName]: putRequests } };\n\n const result = await this.dynamoDb.send(new BatchWriteItemCommand(params));\n\n if (result.UnprocessedItems && Object.keys(result.UnprocessedItems).length > 0)\n console.warn(\"⚠️ Some items were unprocessed and need to be retried.\", result.UnprocessedItems);\n\n allSavedEntities.push(...chunk);\n }\n\n return allSavedEntities;\n }\n\n private async saveManyTransactional(entities: Partial<T>[]): Promise<Partial<T>[]> {\n if (entities.length === 0) throw new Error(\"Cannot save an empty array of entities.\");\n\n const allSavedEntities: Partial<T>[] = [];\n\n // DynamoDB TransactWrite limit: 25 actions per request\n for (const chunk of chunkArray(entities, 25)) {\n chunk.forEach((item) => addIndexValue(item, this._indexMap));\n\n const transactItems = chunk.map((entity) => ({\n Put: {\n TableName: this._tableName,\n Item: marshall(entity, { removeUndefinedValues: true }),\n },\n }));\n\n const params: TransactWriteItemsCommandInput = {\n TransactItems: transactItems,\n };\n\n try {\n await this.dynamoDb.send(new TransactWriteItemsCommand(params));\n allSavedEntities.push(...chunk);\n } catch (err) {\n console.error(\"❌ Transaction failed:\", err);\n throw err; // Re-throw so the caller knows it failed\n }\n }\n\n return allSavedEntities;\n }\n\n private async incrementOrDecrementFieldValue(entityId: string, fieldName: string, delta: number): Promise<T> {\n const partitionKey = this._indexMap.partitionKey;\n if (!this?._indexMap?.numberFields?.includes(fieldName)) {\n throw new Error(`${fieldName} field not found in indexMap.numberFields`);\n }\n\n const params: UpdateItemCommandInput = {\n TableName: this._tableName,\n Key: marshall({ [partitionKey]: entityId }),\n UpdateExpression: `SET #field = if_not_exists(#field, :start) + :delta`,\n ExpressionAttributeNames: {\n \"#field\": fieldName,\n },\n ExpressionAttributeValues: {\n \":delta\": marshall(delta),\n \":start\": marshall(0),\n },\n ReturnValues: ReturnValue.ALL_NEW,\n };\n\n const result = await this.dynamoDb.send(new UpdateItemCommand(params));\n\n return unmarshall(result.Attributes) as T;\n }\n\n /**\n * Executes a DynamoDB Query or Scan and returns up to the desired number of items,\n * respecting DynamoDB's 1MB limit (pagination continuation via LastEvaluatedKey).\n * @param queryInput - QueryCommandInput or ScanCommandInput\n * @param startKey - Optional start key for pagination\n */\n\n private async sendCommandDeep<T>(\n queryInput: QueryCommandInput | ScanCommandInput,\n startKey?: string | Record<string, any>,\n ): Promise<List<T>> {\n const result: List<T> = { items: [] };\n\n const size: number = (queryInput as any)?.Limit ?? 10;\n\n let lastEvaluatedKey: Record<string, AttributeValue>;\n\n if (startKey) {\n lastEvaluatedKey =\n typeof startKey === \"string\"\n ? parseLastEvaluatedKey<Record<string, AttributeValue>>(startKey) // will throw if invalid\n : startKey;\n }\n\n do {\n const response: QueryCommandOutput = await this.sendCommand({\n ...queryInput,\n ExclusiveStartKey: lastEvaluatedKey,\n });\n\n // no more items to fetch\n if (response.LastEvaluatedKey == undefined) {\n result?.items.push(...unMarshall<T>(response.Items));\n result.lastKey = undefined;\n return result;\n }\n\n if (response?.Items.length === 0 && response.LastEvaluatedKey) {\n lastEvaluatedKey = response.LastEvaluatedKey;\n continue;\n }\n\n if (result?.items.length + response?.Items.length <= size) {\n result?.items.push(...unMarshall<T>(response.Items));\n lastEvaluatedKey = response.LastEvaluatedKey;\n if (result?.items.length === size) {\n result.lastKey = toBase64(JSON.stringify(response.LastEvaluatedKey));\n return result;\n }\n continue;\n }\n\n const elementIndex = size - result?.items.length - 1;\n result?.items.push(...unMarshall<T>(response.Items.slice(0, elementIndex)));\n\n const index = this._indexMap.get(queryInput.IndexName);\n result.lastKey = generateLastEvaluatedKey(response.Items[elementIndex], index?.field, index?.sortKeyField);\n break;\n } while (lastEvaluatedKey);\n\n return result;\n }\n\n /**\n * Executes a single Query/Scan and returns the result as-is.\n * Supports pagination via ExclusiveStartKey.\n */\n private async sendCommand(\n commandInput: QueryCommandInput | ScanCommandInput,\n ): Promise<ScanCommandOutput | QueryCommandOutput> {\n commandInput.TableName = this._tableName;\n\n // if (startKey) {\n // commandInput.ExclusiveStartKey = typeof startKey === \"string\" ? parseLastEvaluatedKey(startKey) : startKey;\n // }\n\n if (!commandInput.Limit) {\n commandInput.Limit = this.DYNAMO_QUERY_LIMIT;\n }\n\n const isQuery = \"KeyConditionExpression\" in commandInput;\n const command = isQuery ? new QueryCommand(commandInput) : new ScanCommand(commandInput);\n\n log.debug(\"Sending command:\", commandInput);\n\n if (!this.dynamoDb) throw new ErrorDynamoDB(this._tableName, commandInput, \"dynamoDB client not initialized\");\n\n try {\n return await this.dynamoDb.send(command);\n } catch (error) {\n throw new ErrorDynamoDB(this._tableName, commandInput, error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"base-db.repo.js","sourceRoot":"","sources":["../../src/repositories/base-db.repo.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AttributeValue,\n BatchGetItemCommand,\n BatchWriteItemCommand,\n BatchWriteItemCommandInput,\n DeleteItemCommand,\n GetItemCommand,\n PutItemCommand,\n QueryCommand,\n QueryCommandInput,\n QueryCommandOutput,\n ReturnValue,\n ScanCommand,\n ScanCommandInput,\n ScanCommandOutput,\n TransactWriteItemsCommand,\n TransactWriteItemsCommandInput,\n UpdateItemCommand,\n UpdateItemCommandInput,\n} from \"@aws-sdk/client-dynamodb\";\nimport { marshall, unmarshall } from \"@aws-sdk/util-dynamodb\";\nimport {\n addIndexValue,\n BaseRepoDB,\n buildDynamoDBFilterConditions,\n buildDynamoDBQueryCommand,\n buildDynamoDBScanCommand,\n buildQueryDB,\n buildUpdateExpressions,\n chunkArray,\n DBClientDynamoDB,\n DynamoIndexMap,\n generateLastEvaluatedKey,\n generateUUID,\n List,\n parseFilter,\n parseIndexFilter,\n parseLastEvaluatedKey,\n removeFields,\n toBase64,\n unMarshall,\n} from \"../index\";\nimport Container, { Service } from \"typedi\";\nimport { ErrorDynamoDB } from \"../exception/errors\";\nimport { BaseEntity, Filter } from \"@chinggis/types\";\n\nService(\"BaseRepoDB\");\n\nexport class BaseRepoDBImpl<T extends BaseEntity> implements BaseRepoDB<T> {\n private readonly dynamoDb: DBClientDynamoDB = Container.get(\"DBClientDynamoDB\");\n private _tableName: string;\n private _indexMap: DynamoIndexMap;\n private readonly DYNAMO_QUERY_LIMIT: number = 25;\n\n async deleteFields(id: string, fieldNames: string[]): Promise<Partial<T>> {\n if (!id || fieldNames.length === 0) {\n return undefined;\n }\n\n const partitionKey = this._indexMap.partitionKey;\n const expressionAttributeNames: Record<string, string> = {};\n const removeExpressions: string[] = [];\n\n for (const field of fieldNames) {\n const placeholder = `#${field}`;\n expressionAttributeNames[placeholder] = field;\n removeExpressions.push(placeholder);\n }\n\n const updateExpression = `REMOVE ${removeExpressions.join(\", \")}`;\n\n const params = {\n TableName: this._tableName,\n Key: marshall({ [partitionKey]: id }),\n UpdateExpression: updateExpression,\n ExpressionAttributeNames: expressionAttributeNames,\n ReturnValues: \"ALL_NEW\" as const,\n };\n\n const result = await this.dynamoDb.send(new UpdateItemCommand(params));\n if (!result.Attributes) {\n throw new Error(\"No attributes returned from UpdateItem.\");\n }\n\n return unmarshall(result.Attributes) as Partial<T>;\n }\n\n fieldNotExists(fieldName: string, from: number, size: number): Promise<T[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n incrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n if (value < 0) {\n throw new Error(\"Increment operation only supports positive values\");\n }\n\n return this.incrementOrDecrementFieldValue(entityId, fieldName, value ?? 1);\n }\n\n decrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n if (value > 0) {\n throw new ErrorDynamoDB(\n this._tableName,\n `Decrement operation only supports negative values, inputValue: ${value}, for field: ${fieldName}`,\n );\n }\n return this.incrementOrDecrementFieldValue(entityId, fieldName, value ?? -1);\n }\n\n transactWrite?(operations: any[]): Promise<boolean> {\n throw new Error(\"Method not implemented.\");\n }\n\n async update(entity: Partial<T>): Promise<T> {\n const partitionKey = this._indexMap.partitionKey;\n\n if (!entity[partitionKey]) {\n throw new ErrorDynamoDB(this._tableName, `Entity must have value in field ${partitionKey}`);\n }\n\n const indexedItem = addIndexValue(entity, this._indexMap);\n\n const { UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues } = buildUpdateExpressions(\n indexedItem,\n [partitionKey],\n );\n\n const params = {\n TableName: this._tableName,\n Key: marshall({ [partitionKey]: indexedItem[partitionKey] }),\n UpdateExpression,\n ExpressionAttributeNames,\n ExpressionAttributeValues,\n ReturnValues: ReturnValue.ALL_NEW,\n };\n\n const result = await this.dynamoDb.send(new UpdateItemCommand(params));\n if (!result.Attributes) {\n throw new Error(\"No attributes returned from UpdateItem.\");\n }\n return unmarshall(result.Attributes) as T;\n }\n\n async updateMany(entityList: Partial<T>[], fields: string[], isTransactional: boolean): Promise<boolean> {\n if (isTransactional === undefined || isTransactional === false || isTransactional === null)\n return await this.updateManyNormal(entityList, fields);\n\n return await this.updateManyTransactional(entityList, fields);\n }\n\n async save(entity: Partial<T>): Promise<T> {\n const partitionKey = this._indexMap.partitionKey;\n\n if (!entity[partitionKey]) throw new Error(`Entity must have a ${partitionKey} field.`);\n\n const indexedItem = addIndexValue(entity, this._indexMap);\n\n const params = {\n TableName: this._tableName,\n Item: marshall(indexedItem, { removeUndefinedValues: true }),\n };\n try {\n await this.dynamoDb.send(new PutItemCommand(params));\n\n return entity as T;\n } catch (error) {\n console.error(\"Error saving entity:\", error);\n throw new ErrorDynamoDB(this._tableName, params, error);\n }\n }\n\n async saveMany(entities: Partial<T>[], isTransactional?: boolean): Promise<Partial<T>[]> {\n if (isTransactional === undefined || isTransactional === null || isTransactional === false)\n return await this.saveManyNormal(entities);\n return await this.saveManyTransactional(entities);\n }\n\n async delete(id: string): Promise<boolean> {\n const params = {\n TableName: this._tableName,\n Key: marshall({ [this._indexMap.partitionKey]: id }),\n };\n\n try {\n await this.dynamoDb.send(new DeleteItemCommand(params));\n return true;\n } catch (error) {\n console.error(\"Error deleting item:\", error);\n throw new ErrorDynamoDB(this._tableName, params, error);\n }\n }\n\n async deleteMany(ids: string[]): Promise<boolean> {\n if (ids?.length === 0) return false;\n const chunked = chunkArray(ids, 25);\n for (const chunk of chunked) {\n const deleteRequests = chunk.map((id) => {\n return {\n DeleteRequest: {\n Key: marshall({ [this._indexMap.partitionKey]: id }),\n },\n };\n });\n\n const params = {\n RequestItems: {\n [this._tableName]: deleteRequests,\n },\n };\n\n await this.dynamoDb.send(new BatchWriteItemCommand(params));\n }\n return true;\n }\n\n async findById(id: string): Promise<T> {\n const params = {\n TableName: this._tableName,\n Key: marshall({ [this._indexMap.partitionKey]: id }),\n };\n\n try {\n const result = await this.dynamoDb.send(new GetItemCommand(params));\n if (!result.Item) return null;\n return unmarshall(result.Item) as T;\n } catch (error) {\n console.error(\"Error getting item:\", error);\n throw new ErrorDynamoDB(this._tableName, params, error);\n }\n }\n\n async findByIds(ids: string[]): Promise<T[]> {\n let items: T[] = [];\n if (!ids || ids.length === 0) throw new Error(\"Item must have entityIds\");\n\n const chunked = chunkArray(ids, 100);\n for (const chunk of chunked) {\n const keys = chunk.map((id) => ({ [this._indexMap.partitionKey]: { S: id } }));\n const params = {\n RequestItems: {\n [this._tableName]: { Keys: keys },\n },\n };\n\n const response = await this.dynamoDb.send(new BatchGetItemCommand(params));\n\n items = items.concat(response.Responses?.[this._tableName]?.map((item) => unmarshall(item)) as T[]) ?? [];\n }\n return items;\n }\n\n async find(filter: Filter): Promise<List<Partial<T>>> {\n if (!filter) filter = { size: this.DYNAMO_QUERY_LIMIT };\n\n // Enforce Query-only: require indexName & indexValue; otherwise instruct the caller to use scan\n if (!filter.indexName || filter.indexValue === undefined || filter.indexValue === null) {\n throw new ErrorDynamoDB(\n this._tableName,\n \"find in by index\",\n \"find requires indexName and indexValue; use scan() otherwise\",\n );\n }\n\n const dbQuery = buildDynamoDBQueryCommand({\n tableName: this._tableName,\n filter,\n filterCondition: buildDynamoDBFilterConditions(filter, this._indexMap),\n indexMap: this._indexMap,\n });\n\n const response = await this.sendCommandDeep<T>(dbQuery, filter?.lastKey);\n const fieldsRemoved = removeFields(response?.items, filter.fieldsInclude, filter.fieldsExclude);\n return { items: fieldsRemoved, lastKey: response?.lastKey };\n }\n\n async findAll(filter: Filter | string): Promise<Partial<T>[]> {\n if (typeof filter === \"string\") filter = parseFilter(filter);\n const result: Partial<T>[] = [];\n let lastKey = filter?.lastKey;\n\n do {\n const path = `${filter.urlRaw}&lastKey=${lastKey}`;\n const itemList = await this.find(parseFilter(path));\n\n result.push(...itemList.items);\n lastKey = itemList.lastKey;\n\n if (result.length >= 5000) {\n console.warn(\"too many items returned, breaking loop.\");\n break;\n }\n } while (lastKey && lastKey.trim() !== \"\");\n\n return result;\n }\n\n async scan(filter: Filter): Promise<List<Partial<T>>> {\n if (!filter) filter = { size: this.DYNAMO_QUERY_LIMIT };\n const expression = buildDynamoDBFilterConditions(filter, this._indexMap);\n const scanInput = buildDynamoDBScanCommand({ tableName: this._tableName, filter, expression });\n const response = await this.sendCommandDeep<T>(scanInput, filter?.lastKey);\n const fieldsRemoved = removeFields(response?.items, filter.fieldsInclude, filter.fieldsExclude);\n return { items: fieldsRemoved, lastKey: response?.lastKey };\n }\n\n async findOne(filter: Filter): Promise<T> {\n const queryInput = buildQueryDB(this._tableName, filter, this._indexMap);\n queryInput.Limit = 1;\n\n const result = await this.dynamoDb.send(new QueryCommand(queryInput));\n\n if (!result.Items || result.Items.length === 0) return null;\n return unmarshall(result.Items[0]) as T;\n }\n\n findByIndex(indexName: string, value: string): Promise<List<Partial<T>>> {\n return this.find(parseIndexFilter(indexName + \"=\" + value, this._indexMap));\n }\n\n async count(filter: Filter): Promise<number> {\n const queryInput = buildQueryDB(this._tableName, filter, this._indexMap);\n queryInput.Select = \"COUNT\";\n\n const result = await this.dynamoDb.send(new QueryCommand(queryInput));\n return result.Count ?? 0;\n }\n\n async exists(id: string): Promise<boolean> {\n const key = marshall({ [this._indexMap.partitionKey]: id });\n\n const result = await this.dynamoDb.send(\n new GetItemCommand({\n TableName: this._tableName,\n Key: key,\n ProjectionExpression: this._indexMap.partitionKey,\n }),\n );\n\n return !!result.Item;\n }\n\n async getRaw(filter: Filter): Promise<any> {\n const queryInput = buildQueryDB(this._tableName, filter, this._indexMap);\n return this.dynamoDb.send(new QueryCommand(queryInput));\n }\n\n async transactionRead<T>(operations: { id: string; sortKey?: string }[]): Promise<T[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n async transactRead?<TResult = any>(operations: any[]): Promise<TResult[]> {\n throw new Error(\"Method not implemented.\");\n }\n\n async transactionWrite(operations: {\n create?: { tableName: string; item: Record<string, any> }[];\n update?: {\n tableName: string;\n key: { id: string };\n updateData: Record<string, any>;\n }[];\n delete?: { tableName: string; key: { id: string } }[];\n }): Promise<boolean> {\n const transactItems: any[] = [];\n\n // Create operations\n if (operations.create) {\n for (const { tableName, item } of operations.create) {\n if (!item?.id) {\n item.id = generateUUID();\n }\n transactItems.push({\n Put: {\n TableName: tableName,\n Item: marshall(item, { removeUndefinedValues: true }),\n },\n });\n }\n }\n\n // Update operations\n if (operations.update) {\n for (const { tableName, key, updateData } of operations.update) {\n const { UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues } = buildUpdateExpressions(\n updateData,\n [\"id\"],\n );\n\n transactItems.push({\n Update: {\n TableName: tableName,\n Key: marshall(key),\n UpdateExpression,\n ExpressionAttributeNames,\n ExpressionAttributeValues,\n },\n });\n }\n }\n\n // Delete operations\n if (operations.delete) {\n for (const { tableName, key } of operations.delete) {\n transactItems.push({\n Delete: {\n TableName: tableName,\n Key: marshall(key),\n },\n });\n }\n }\n\n if (transactItems.length === 0) return false;\n\n // Execute transaction\n try {\n await this.dynamoDb.send(new TransactWriteItemsCommand({ TransactItems: transactItems }));\n return true;\n } catch (error) {\n console.error(\"Transaction failed:\", error);\n throw new ErrorDynamoDB(this._tableName, transactItems, error);\n }\n }\n\n getTableName() {\n return this._tableName;\n }\n\n setIndexMap(indexMap: DynamoIndexMap): boolean {\n this._indexMap = indexMap;\n return true;\n }\n\n setTable(tableName: string): boolean {\n this._tableName = tableName;\n return true;\n }\n\n getIndexMap(): DynamoIndexMap {\n return this._indexMap;\n }\n\n private async updateManyNormal(entityList: Partial<T>[], fieldNames: string[]): Promise<boolean> {\n return this.updateManyTransactional(entityList, fieldNames); // todo implement normal updateMany\n }\n\n private async updateManyTransactional(entityList: Partial<T>[], fieldNames: string[]): Promise<boolean> {\n if (entityList.length === 0) return false;\n\n if (!fieldNames || fieldNames.length === 0) {\n await this.saveMany(entityList, true);\n return true;\n }\n\n const partitionKey = this._indexMap.partitionKey;\n fieldNames.push(partitionKey);\n const entityListCleaned = removeFields(entityList, fieldNames);\n\n const indexedItems = entityListCleaned.map((entity) => {\n return addIndexValue(entity, this._indexMap);\n });\n\n const transactItems = indexedItems\n .map((item) => {\n if (!item[partitionKey])\n throw new Error(\n `Item must have an ${partitionKey} field. Entity: ${JSON.stringify(item, null, 2)}, \\nupdateFields: ${JSON.stringify(fieldNames)}`,\n );\n\n const { UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues } = buildUpdateExpressions(item, [\n partitionKey,\n ]);\n\n return {\n Update: {\n TableName: this._tableName,\n Key: { [partitionKey]: { S: item[partitionKey] } }, // id-г шууд key болгож дамжуулах\n UpdateExpression,\n ExpressionAttributeValues,\n ExpressionAttributeNames,\n },\n };\n })\n .filter(Boolean) as any[]; // filter(Boolean) нь хоосон утгуудыг арилгана.\n\n if (transactItems.length < 1) return false;\n\n const chunkedItems = chunkArray(transactItems, 25); // 25-аас дээш бол багцлах\n\n for (const chunk of chunkedItems) await this.dynamoDb.send(new TransactWriteItemsCommand({ TransactItems: chunk }));\n\n return true;\n }\n\n private async saveManyNormal(entities: Partial<T>[]): Promise<Partial<T>[]> {\n if (entities.length === 0) throw new Error(\"Cannot save an empty array of entities.\");\n\n const allSavedEntities: Partial<T>[] = [];\n\n for (const chunk of chunkArray(entities, 25)) {\n chunk.forEach((item) => addIndexValue(item, this._indexMap));\n const putRequests = chunk.map((entity) => ({\n PutRequest: { Item: marshall(entity, { removeUndefinedValues: true }) },\n }));\n\n const params: BatchWriteItemCommandInput = { RequestItems: { [this._tableName]: putRequests } };\n\n const result = await this.dynamoDb.send(new BatchWriteItemCommand(params));\n\n if (result.UnprocessedItems && Object.keys(result.UnprocessedItems).length > 0)\n console.warn(\"⚠️ Some items were unprocessed and need to be retried.\", result.UnprocessedItems);\n\n allSavedEntities.push(...chunk);\n }\n\n return allSavedEntities;\n }\n\n private async saveManyTransactional(entities: Partial<T>[]): Promise<Partial<T>[]> {\n if (entities.length === 0) throw new Error(\"Cannot save an empty array of entities.\");\n\n const allSavedEntities: Partial<T>[] = [];\n\n // DynamoDB TransactWrite limit: 25 actions per request\n for (const chunk of chunkArray(entities, 25)) {\n chunk.forEach((item) => addIndexValue(item, this._indexMap));\n\n const transactItems = chunk.map((entity) => ({\n Put: {\n TableName: this._tableName,\n Item: marshall(entity, { removeUndefinedValues: true }),\n },\n }));\n\n const params: TransactWriteItemsCommandInput = {\n TransactItems: transactItems,\n };\n\n try {\n await this.dynamoDb.send(new TransactWriteItemsCommand(params));\n allSavedEntities.push(...chunk);\n } catch (err) {\n console.error(\"❌ Transaction failed:\", err);\n throw err; // Re-throw so the caller knows it failed\n }\n }\n\n return allSavedEntities;\n }\n\n private async incrementOrDecrementFieldValue(entityId: string, fieldName: string, delta: number): Promise<T> {\n const partitionKey = this._indexMap.partitionKey;\n if (!this?._indexMap?.numberFields?.includes(fieldName)) {\n throw new Error(`${fieldName} field not found in indexMap.numberFields`);\n }\n\n const params: UpdateItemCommandInput = {\n TableName: this._tableName,\n Key: marshall({ [partitionKey]: entityId }),\n UpdateExpression: `SET #field = if_not_exists(#field, :start) + :delta`,\n ExpressionAttributeNames: {\n \"#field\": fieldName,\n },\n ExpressionAttributeValues: {\n \":delta\": marshall(delta),\n \":start\": marshall(0),\n },\n ReturnValues: ReturnValue.ALL_NEW,\n };\n\n const result = await this.dynamoDb.send(new UpdateItemCommand(params));\n\n return unmarshall(result.Attributes) as T;\n }\n\n /**\n * Executes a DynamoDB Query or Scan and returns up to the desired number of items,\n * respecting DynamoDB's 1MB limit (pagination continuation via LastEvaluatedKey).\n * @param queryInput - QueryCommandInput or ScanCommandInput\n * @param startKey - Optional start key for pagination\n */\n\n private async sendCommandDeep<T>(\n queryInput: QueryCommandInput | ScanCommandInput,\n startKey?: string | Record<string, any>,\n ): Promise<List<T>> {\n const result: List<T> = { items: [] };\n\n const size: number = (queryInput as any)?.Limit ?? 10;\n\n let lastEvaluatedKey: Record<string, AttributeValue>;\n\n if (startKey) {\n lastEvaluatedKey =\n typeof startKey === \"string\"\n ? parseLastEvaluatedKey<Record<string, AttributeValue>>(startKey) // will throw if invalid\n : startKey;\n }\n\n do {\n const response: QueryCommandOutput = await this.sendCommand({\n ...queryInput,\n ExclusiveStartKey: lastEvaluatedKey,\n });\n\n // no more items to fetch\n if (response.LastEvaluatedKey == undefined) {\n result?.items.push(...unMarshall<T>(response.Items));\n result.lastKey = undefined;\n return result;\n }\n\n if (response?.Items.length === 0 && response.LastEvaluatedKey) {\n lastEvaluatedKey = response.LastEvaluatedKey;\n continue;\n }\n\n if (result?.items.length + response?.Items.length <= size) {\n result?.items.push(...unMarshall<T>(response.Items));\n lastEvaluatedKey = response.LastEvaluatedKey;\n if (result?.items.length === size) {\n result.lastKey = toBase64(JSON.stringify(response.LastEvaluatedKey));\n return result;\n }\n continue;\n }\n\n const elementIndex = size - result?.items.length - 1;\n result?.items.push(...unMarshall<T>(response.Items.slice(0, elementIndex)));\n\n const index = this._indexMap.get(queryInput.IndexName);\n result.lastKey = generateLastEvaluatedKey(response.Items[elementIndex], index?.field, index?.sortKeyField);\n break;\n } while (lastEvaluatedKey);\n\n return result;\n }\n\n /**\n * Executes a single Query/Scan and returns the result as-is.\n * Supports pagination via ExclusiveStartKey.\n */\n private async sendCommand(\n commandInput: QueryCommandInput | ScanCommandInput,\n ): Promise<ScanCommandOutput | QueryCommandOutput> {\n commandInput.TableName = this._tableName;\n\n // if (startKey) {\n // commandInput.ExclusiveStartKey = typeof startKey === \"string\" ? parseLastEvaluatedKey(startKey) : startKey;\n // }\n\n if (!commandInput.Limit) {\n commandInput.Limit = this.DYNAMO_QUERY_LIMIT;\n }\n\n const isQuery = \"KeyConditionExpression\" in commandInput;\n const command = isQuery ? new QueryCommand(commandInput) : new ScanCommand(commandInput);\n\n log.debug(\"Sending command:\", commandInput);\n\n if (!this.dynamoDb) throw new ErrorDynamoDB(this._tableName, commandInput, \"dynamoDB client not initialized\");\n\n try {\n return await this.dynamoDb.send(command);\n } catch (error) {\n throw new ErrorDynamoDB(this._tableName, commandInput, error);\n }\n }\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import { Filter } from "../index";
2
+ export declare function buildQueryOSFromUrl(filter: Filter | string): any;
3
+ export declare function applySearchQuery(boolQuery: any, params: URLSearchParams): void;
2
4
  export declare function buildQueryOS(filter: Filter): any;
3
5
  /**
4
6
  * All non-case sensitive rule accepted characters replaced with upper and lower case
@@ -3,6 +3,8 @@ 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.buildQueryOSFromUrl = buildQueryOSFromUrl;
7
+ exports.applySearchQuery = applySearchQuery;
6
8
  exports.buildQueryOS = buildQueryOS;
7
9
  exports.toCaseInsensitive = toCaseInsensitive;
8
10
  exports.toCaseInsensitiveArray = toCaseInsensitiveArray;
@@ -51,6 +53,32 @@ function addSearchQuery(boolQuery, searchBy, searchKeyword) {
51
53
  shouldBool.minimumShouldMatch(1);
52
54
  boolQuery.must(shouldBool);
53
55
  }
56
+ //function addSearchQuery(boolQuery: any, searchBy?: string | string[], searchKeyword?: string) {
57
+ // if (!searchBy || !searchKeyword || searchKeyword.trim() === "") return;
58
+ //
59
+ // // 1. Collapse multiple '*' into a single '*'
60
+ // let cleanedKeyword = searchKeyword.replace(/\*+/g, "*").trim();
61
+ //
62
+ // // 2. Ensure trailing '*'
63
+ // if (!cleanedKeyword.endsWith("*")) {
64
+ // cleanedKeyword += "*";
65
+ // }
66
+ //
67
+ // // 3. Lowercase for reliable case-insensitive wildcard matching
68
+ // cleanedKeyword = cleanedKeyword.toLowerCase();
69
+ //
70
+ // const fields: string[] = Array.isArray(searchBy) ? searchBy : [searchBy];
71
+ //
72
+ // const shouldBool = esb.boolQuery();
73
+ // for (const field of fields) {
74
+ // shouldBool.should(esb.wildcardQuery(field, cleanedKeyword).caseInsensitive(true));
75
+ // }
76
+ //
77
+ // shouldBool.minimumShouldMatch(1);
78
+ //
79
+ // // 4. MUST always put boolQuery.must() inside array
80
+ // boolQuery.must([shouldBool]);
81
+ //}
54
82
  // Helper function to handle index filtering
55
83
  function addIndexFilter(boolQuery, indexName, indexValue) {
56
84
  if ((indexName && indexValue && indexValue.trim() === "true") || (indexValue && indexValue.trim() === "false")) {
@@ -163,6 +191,71 @@ function addFieldSelection(result, fieldsExclude, fieldsInclude) {
163
191
  result._source_includes = fieldsInclude;
164
192
  }
165
193
  }
194
+ function buildQueryOSFromUrl(filter) {
195
+ const url = typeof filter === "string" ? filter : filter.urlRaw;
196
+ if (!url)
197
+ return {};
198
+ const boolQuery = elastic_builder_1.default.boolQuery();
199
+ const params = new URLSearchParams(url);
200
+ //todo search and search fields
201
+ applySearchQuery(boolQuery, params);
202
+ //todo rangeFilters
203
+ //todo field exist
204
+ //todo text search
205
+ //todo aggergations
206
+ //todo response fieldsExclude, fieldsInclude
207
+ const fieldsExclude = [""];
208
+ const fieldsInclude = [""];
209
+ const sortBy = "createdAt"; // The field to sort by
210
+ const sort = index_1.SortOrder.DESC; // Sorting order, either ascending or descending
211
+ const { from, size } = { from: 0, size: 25 }; //todo
212
+ // Create a request body and handle sorting
213
+ const requestBody = elastic_builder_1.default.requestBodySearch().query(boolQuery);
214
+ if (sortBy && sort) {
215
+ requestBody.sort(elastic_builder_1.default.sort(sortBy, sort));
216
+ }
217
+ requestBody.from(from);
218
+ requestBody.size(size);
219
+ let result = {};
220
+ result.body = requestBody.toJSON();
221
+ addFieldSelection(result, fieldsExclude, fieldsInclude);
222
+ result = (0, index_1.removeEmptyFields)(result);
223
+ return result;
224
+ }
225
+ function applySearchQuery(boolQuery, params) {
226
+ const search = params.get("search");
227
+ if (!search)
228
+ return;
229
+ const fieldsRaw = params.get("searchFields");
230
+ if (!fieldsRaw)
231
+ return;
232
+ const operator = (params.get("searchOperator") || "or").toLowerCase();
233
+ const fields = fieldsRaw
234
+ .split(",")
235
+ .map((f) => f.trim())
236
+ .filter(Boolean);
237
+ const keywords = search.split(" ").filter(Boolean);
238
+ // OR: (title contains "iphone 15" OR description contains "iphone 15")
239
+ if (operator === "or") {
240
+ const shouldQueries = [];
241
+ for (const field of fields) {
242
+ shouldQueries.push(elastic_builder_1.default.matchQuery(field, search).operator("and"));
243
+ }
244
+ boolQuery.should(shouldQueries).minimumShouldMatch(1);
245
+ return;
246
+ }
247
+ // AND: (title contains keyword AND description contains keyword)
248
+ if (operator === "and") {
249
+ for (const field of fields) {
250
+ // each field must contain ALL keywords
251
+ const mustPerField = elastic_builder_1.default.boolQuery();
252
+ for (const word of keywords) {
253
+ mustPerField.must(elastic_builder_1.default.matchQuery(field, word));
254
+ }
255
+ boolQuery.must(mustPerField);
256
+ }
257
+ }
258
+ }
166
259
  function buildQueryOS(filter) {
167
260
  const { sort, sortBy, searchBy, searchKeyword, rangeFilters, indexName, indexValue, fieldsExclude, fieldsInclude } = filter;
168
261
  // Calculate pagination
@@ -1 +1 @@
1
- {"version":3,"file":"opensearch.utils.js","sourceRoot":"","sources":["../../src/utils/opensearch.utils.ts"],"names":[],"mappings":";;;;;AAkLA,oCAgCC;AAMD,8CAIC;AACD,wDAQC;AArOD,kDAA0B;AAC1B,oCAAkE;AAClE,sEAAkC;AAElC,kEAAkE;AAClE,SAAS,iBAAiB,CAAC,KAAa;IACtC,oEAAoE;IACpE,MAAM,cAAc,GAAG,sDAAsD,CAAC;IAC9E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qEAAqE;IACrE,MAAM,MAAM,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,0CAA0C;AAC1C,SAAS,mBAAmB,CAAC,MAAc;IACzC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,SAAS,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,SAAc,EAAE,QAA4B,EAAE,aAAsB;IAC1F,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO;IACvE,+BAA+B;IAC/B,IAAI,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/D,iEAAiE;IACjE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,cAAc,IAAI,GAAG,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAa,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEzE,MAAM,UAAU,GAAG,yBAAG,CAAC,SAAS,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,UAAU,CAAC,MAAM,CAAC,yBAAG,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAEjC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED,4CAA4C;AAC5C,SAAS,cAAc,CAAC,SAAc,EAAE,SAAkB,EAAE,UAAmB;IAC7E,IAAI,CAAC,SAAS,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;QAC/G,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,SAAS,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/D,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,SAAS,CAAC,GAAG,SAAS,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,SAAS,sBAAsB,CAAC,SAAiB,EAAE,GAAY,EAAE,GAAY;IAC3E,MAAM,UAAU,GAAG,yBAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,SAAS;QAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,GAAG,KAAK,SAAS;QAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,oDAAoD;AACpD,SAAS,oBAAoB,CAAC,SAAiB,EAAE,GAAS,EAAE,GAAS;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,UAAU,GAAG,yBAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,OAAO;QAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO;QAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,0CAA0C;AAC1C,SAAS,eAAe,CAAC,SAAc,EAAE,YAA4B;IACnE,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAAE,OAAO;IAE1D,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAC3C,CAAC,WAAW,EAAE,EAAE,CACd,CAAC,WAAW,CAAC,QAAQ,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,CAAC;QAC1E,WAAW,CAAC,SAAS;QACrB,WAAW,CACd,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;QAChE,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;QAEzE,MAAM,UAAU,GAAG,aAAa;YAC9B,CAAC,CAAC,sBAAsB,CAAC,SAAS,EAAE,GAAa,EAAE,GAAa,CAAC;YACjE,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAE9C,IAAI,UAAU,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,SAAS,iBAAiB,CAAC,SAAc,EAAE,MAAc;IACvD,MAAM,kBAAkB,GAAG;QACzB,MAAM;QACN,MAAM;QACN,MAAM;QACN,QAAQ;QACR,UAAU;QACV,eAAe;QACf,cAAc;QACd,WAAW;QACX,YAAY;QACZ,eAAe;QACf,eAAe;KAChB,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAExG,GAAG,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QAE5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,aAAa,CAAC,GAAG,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC7D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC1C,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC5C,SAAS;YACX,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,MAAM,CAAC,yBAAG,CAAC,gBAAgB,CAAC,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,SAAS,iBAAiB,CAAC,MAAW,EAAE,aAAwB,EAAE,aAAwB;IACxF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC;IAC1C,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,GAChH,MAAM,CAAC;IAET,uBAAuB;IACvB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEnD,uBAAuB;IACvB,MAAM,SAAS,GAAG,yBAAG,CAAC,SAAS,EAAE,CAAC;IAElC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACzC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACnD,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAErC,2CAA2C;IAC3C,MAAM,WAAW,GAAG,yBAAG,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,yBAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvB,IAAI,MAAM,GAAQ,EAAE,CAAC;IAErB,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IAEnC,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAExD,MAAM,GAAG,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAC;IAEnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;KAGK;AACL,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AACD,SAAgB,sBAAsB,CAAC,KAAe;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import dayjs from \"dayjs\";\nimport { Filter, RangeFilter, removeEmptyFields } from \"../index\";\nimport esb from \"elastic-builder\";\n\n// Helper function to validate if a string is a proper date format\nfunction isValidDateString(value: string): boolean {\n // Only accept ISO date formats (YYYY-MM-DD) or ISO datetime formats\n const isoDatePattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?)?$/;\n if (!isoDatePattern.test(value)) {\n return false;\n }\n\n // Additional validation with dayjs - just check if it's a valid date\n const parsed = dayjs(value);\n return parsed.isValid();\n}\n\n// Helper function to calculate pagination\nfunction calculatePagination(filter: Filter): { from: number; size: number } {\n let queryFrom = 0;\n let querySize = 25;\n\n if (filter.page && filter.size) {\n queryFrom = (filter.page - 1) * filter.size;\n delete filter.page;\n }\n if (filter.size) {\n querySize = filter.size;\n delete filter.size;\n }\n\n return { from: queryFrom, size: querySize };\n}\n\nfunction addSearchQuery(boolQuery: any, searchBy?: string | string[], searchKeyword?: string) {\n if (!searchBy || !searchKeyword || searchKeyword.trim() === \"\") return;\n // 1. Олон *-уудыг нэг * болгох\n let cleanedKeyword = searchKeyword.replace(/\\*+/g, \"*\").trim();\n\n // 2. Хэрвээ keyword-ын төгсгөлд * байхгүй бол автоматаар * нэмэх\n if (!cleanedKeyword.endsWith(\"*\")) {\n cleanedKeyword += \"*\";\n }\n\n const fields: string[] = Array.isArray(searchBy) ? searchBy : [searchBy];\n\n const shouldBool = esb.boolQuery();\n for (const field of fields) {\n shouldBool.should(esb.wildcardQuery(field, cleanedKeyword).caseInsensitive(true));\n }\n shouldBool.minimumShouldMatch(1);\n\n boolQuery.must(shouldBool);\n}\n\n// Helper function to handle index filtering\nfunction addIndexFilter(boolQuery: any, indexName?: string, indexValue?: string): void {\n if ((indexName && indexValue && indexValue.trim() === \"true\") || (indexValue && indexValue.trim() === \"false\")) {\n boolQuery.filter(esb.termQuery(`${indexName}`, indexValue));\n } else if (indexName && indexValue && indexValue.trim() !== \"\") {\n boolQuery.filter(esb.termQuery(`${indexName}.keyword`, indexValue));\n }\n}\n\n// Helper function to create a range query for numbers\nfunction createNumberRangeQuery(fieldName: string, min?: number, max?: number): any {\n const rangeQuery = esb.rangeQuery(fieldName);\n if (min !== undefined) rangeQuery.gte(min);\n if (max !== undefined) rangeQuery.lte(max);\n return rangeQuery;\n}\n\n// Helper function to create a range query for dates\nfunction createDateRangeQuery(fieldName: string, min?: any, max?: any): any | null {\n const minDate = min ? dayjs(min).format(\"YYYY-MM-DD\") : undefined;\n const maxDate = max ? dayjs(max).format(\"YYYY-MM-DD\") : undefined;\n\n if (!minDate && !maxDate) return null;\n\n const rangeQuery = esb.rangeQuery(fieldName);\n if (minDate) rangeQuery.gte(minDate);\n if (maxDate) rangeQuery.lte(maxDate);\n return rangeQuery;\n}\n\n// Helper function to handle range filters\nfunction addRangeFilters(boolQuery: any, rangeFilters?: RangeFilter[]) {\n if (!rangeFilters || !Array.isArray(rangeFilters)) return;\n\n const validRangeFilters = rangeFilters.filter(\n (rangeFilter) =>\n (rangeFilter.minValue !== undefined || rangeFilter.maxValue !== undefined) &&\n rangeFilter.fieldName &&\n rangeFilter,\n );\n\n for (const rangeFilter of validRangeFilters) {\n const { fieldName, minValue: min, maxValue: max } = rangeFilter;\n const isNumberRange = typeof min === \"number\" || typeof max === \"number\";\n\n const rangeQuery = isNumberRange\n ? createNumberRangeQuery(fieldName, min as number, max as number)\n : createDateRangeQuery(fieldName, min, max);\n\n if (rangeQuery) {\n boolQuery.filter(rangeQuery);\n }\n }\n}\n\n// Helper function to handle dynamic field filtering\nfunction addDynamicFilters(boolQuery: any, filter: Filter): void {\n const specialFilterProps = [\n \"page\",\n \"size\",\n \"sort\",\n \"sortBy\",\n \"searchBy\",\n \"searchKeyword\",\n \"rangeFilters\",\n \"indexName\",\n \"indexValue\",\n \"fieldsExclude\",\n \"fieldsInclude\",\n ];\n\n for (const [key, value] of Object.entries(filter)) {\n if (value === undefined || value === null || value === \"\" || specialFilterProps.includes(key)) continue;\n\n log.debug(`dynamic filter:${key}=${value}`);\n\n if (typeof value === \"string\") {\n if (value.includes(\"*\")) {\n boolQuery.filter(esb.wildcardQuery(key + \".keyword\", value));\n continue;\n }\n\n if (isValidDateString(value)) {\n boolQuery.filter(esb.rangeQuery(key).gte(value));\n continue;\n }\n\n if (value.includes(\",\")) {\n const values = value.split(\",\").filter((v) => v.trim() !== \"\");\n if (values.length > 0) {\n boolQuery.filter(esb.termsQuery(`${key}.keyword`, values));\n }\n continue;\n }\n\n if (value === \"true\" || value === \"false\") {\n boolQuery.filter(esb.termQuery(key, value));\n continue;\n }\n } else if (Array.isArray(value)) {\n if (value.length > 0) {\n boolQuery.filter(esb.termsQuery(`${key}.keyword`, value));\n }\n continue;\n }\n\n if (Array.isArray(value)) {\n boolQuery.filter(esb.termsQuery(`${key}.keyword`, value));\n } else {\n boolQuery.filter(esb.matchPhraseQuery(`${key}`, value));\n }\n }\n}\n\n// Helper function to handle field selection\nfunction addFieldSelection(result: any, fieldsExclude?: string[], fieldsInclude?: string[]): void {\n if (fieldsExclude) {\n result._source_excludes = fieldsExclude;\n } else if (fieldsInclude) {\n result._source_includes = fieldsInclude;\n }\n}\n\nexport function buildQueryOS(filter: Filter): any {\n const { sort, sortBy, searchBy, searchKeyword, rangeFilters, indexName, indexValue, fieldsExclude, fieldsInclude } =\n filter;\n\n // Calculate pagination\n const { from, size } = calculatePagination(filter);\n\n // Build the main query\n const boolQuery = esb.boolQuery();\n\n addRangeFilters(boolQuery, rangeFilters);\n addSearchQuery(boolQuery, searchBy, searchKeyword);\n addIndexFilter(boolQuery, indexName, indexValue);\n addDynamicFilters(boolQuery, filter);\n\n // Create a request body and handle sorting\n const requestBody = esb.requestBodySearch().query(boolQuery);\n if (sortBy && sort) {\n requestBody.sort(esb.sort(sortBy, sort));\n }\n requestBody.from(from);\n requestBody.size(size);\n\n let result: any = {};\n\n result.body = requestBody.toJSON();\n\n addFieldSelection(result, fieldsExclude, fieldsInclude);\n\n result = removeEmptyFields(result);\n\n return result;\n}\n\n/**\n * All non-case sensitive rule accepted characters replaced with upper and lower case\n * а - [аА], б - []\n * */\nexport function toCaseInsensitive(value: string) {\n if (!value || typeof value !== \"string\") return value;\n\n return value.toLowerCase();\n}\nexport function toCaseInsensitiveArray(value: string[]) {\n if (!value) return value;\n\n if (Array.isArray(value)) {\n return value.map((v) => v.toLowerCase());\n }\n\n return value;\n}\n"]}
1
+ {"version":3,"file":"opensearch.utils.js","sourceRoot":"","sources":["../../src/utils/opensearch.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from \"dayjs\";\nimport { Filter, RangeFilter, removeEmptyFields, SortOrder } from \"../index\";\nimport esb from \"elastic-builder\";\n\n// Helper function to validate if a string is a proper date format\nfunction isValidDateString(value: string): boolean {\n // Only accept ISO date formats (YYYY-MM-DD) or ISO datetime formats\n const isoDatePattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?)?$/;\n if (!isoDatePattern.test(value)) {\n return false;\n }\n\n // Additional validation with dayjs - just check if it's a valid date\n const parsed = dayjs(value);\n return parsed.isValid();\n}\n\n// Helper function to calculate pagination\nfunction calculatePagination(filter: Filter): { from: number; size: number } {\n let queryFrom = 0;\n let querySize = 25;\n\n if (filter.page && filter.size) {\n queryFrom = (filter.page - 1) * filter.size;\n delete filter.page;\n }\n if (filter.size) {\n querySize = filter.size;\n delete filter.size;\n }\n\n return { from: queryFrom, size: querySize };\n}\n\nfunction addSearchQuery(boolQuery: any, searchBy?: string | string[], searchKeyword?: string) {\n if (!searchBy || !searchKeyword || searchKeyword.trim() === \"\") return;\n // 1. Олон *-уудыг нэг * болгох\n let cleanedKeyword = searchKeyword.replace(/\\*+/g, \"*\").trim();\n\n // 2. Хэрвээ keyword-ын төгсгөлд * байхгүй бол автоматаар * нэмэх\n if (!cleanedKeyword.endsWith(\"*\")) {\n cleanedKeyword += \"*\";\n }\n\n const fields: string[] = Array.isArray(searchBy) ? searchBy : [searchBy];\n\n const shouldBool = esb.boolQuery();\n for (const field of fields) {\n shouldBool.should(esb.wildcardQuery(field, cleanedKeyword).caseInsensitive(true));\n }\n shouldBool.minimumShouldMatch(1);\n\n boolQuery.must(shouldBool);\n}\n\n//function addSearchQuery(boolQuery: any, searchBy?: string | string[], searchKeyword?: string) {\n// if (!searchBy || !searchKeyword || searchKeyword.trim() === \"\") return;\n//\n// // 1. Collapse multiple '*' into a single '*'\n// let cleanedKeyword = searchKeyword.replace(/\\*+/g, \"*\").trim();\n//\n// // 2. Ensure trailing '*'\n// if (!cleanedKeyword.endsWith(\"*\")) {\n// cleanedKeyword += \"*\";\n// }\n//\n// // 3. Lowercase for reliable case-insensitive wildcard matching\n// cleanedKeyword = cleanedKeyword.toLowerCase();\n//\n// const fields: string[] = Array.isArray(searchBy) ? searchBy : [searchBy];\n//\n// const shouldBool = esb.boolQuery();\n// for (const field of fields) {\n// shouldBool.should(esb.wildcardQuery(field, cleanedKeyword).caseInsensitive(true));\n// }\n//\n// shouldBool.minimumShouldMatch(1);\n//\n// // 4. MUST always put boolQuery.must() inside array\n// boolQuery.must([shouldBool]);\n//}\n\n// Helper function to handle index filtering\nfunction addIndexFilter(boolQuery: any, indexName?: string, indexValue?: string): void {\n if ((indexName && indexValue && indexValue.trim() === \"true\") || (indexValue && indexValue.trim() === \"false\")) {\n boolQuery.filter(esb.termQuery(`${indexName}`, indexValue));\n } else if (indexName && indexValue && indexValue.trim() !== \"\") {\n boolQuery.filter(esb.termQuery(`${indexName}.keyword`, indexValue));\n }\n}\n\n// Helper function to create a range query for numbers\nfunction createNumberRangeQuery(fieldName: string, min?: number, max?: number): any {\n const rangeQuery = esb.rangeQuery(fieldName);\n if (min !== undefined) rangeQuery.gte(min);\n if (max !== undefined) rangeQuery.lte(max);\n return rangeQuery;\n}\n\n// Helper function to create a range query for dates\nfunction createDateRangeQuery(fieldName: string, min?: any, max?: any): any | null {\n const minDate = min ? dayjs(min).format(\"YYYY-MM-DD\") : undefined;\n const maxDate = max ? dayjs(max).format(\"YYYY-MM-DD\") : undefined;\n\n if (!minDate && !maxDate) return null;\n\n const rangeQuery = esb.rangeQuery(fieldName);\n if (minDate) rangeQuery.gte(minDate);\n if (maxDate) rangeQuery.lte(maxDate);\n return rangeQuery;\n}\n\n// Helper function to handle range filters\nfunction addRangeFilters(boolQuery: any, rangeFilters?: RangeFilter[]) {\n if (!rangeFilters || !Array.isArray(rangeFilters)) return;\n\n const validRangeFilters = rangeFilters.filter(\n (rangeFilter) =>\n (rangeFilter.minValue !== undefined || rangeFilter.maxValue !== undefined) &&\n rangeFilter.fieldName &&\n rangeFilter,\n );\n\n for (const rangeFilter of validRangeFilters) {\n const { fieldName, minValue: min, maxValue: max } = rangeFilter;\n const isNumberRange = typeof min === \"number\" || typeof max === \"number\";\n\n const rangeQuery = isNumberRange\n ? createNumberRangeQuery(fieldName, min as number, max as number)\n : createDateRangeQuery(fieldName, min, max);\n\n if (rangeQuery) {\n boolQuery.filter(rangeQuery);\n }\n }\n}\n\n// Helper function to handle dynamic field filtering\nfunction addDynamicFilters(boolQuery: any, filter: Filter): void {\n const specialFilterProps = [\n \"page\",\n \"size\",\n \"sort\",\n \"sortBy\",\n \"searchBy\",\n \"searchKeyword\",\n \"rangeFilters\",\n \"indexName\",\n \"indexValue\",\n \"fieldsExclude\",\n \"fieldsInclude\",\n ];\n\n for (const [key, value] of Object.entries(filter)) {\n if (value === undefined || value === null || value === \"\" || specialFilterProps.includes(key)) continue;\n\n log.debug(`dynamic filter:${key}=${value}`);\n\n if (typeof value === \"string\") {\n if (value.includes(\"*\")) {\n boolQuery.filter(esb.wildcardQuery(key + \".keyword\", value));\n continue;\n }\n\n if (isValidDateString(value)) {\n boolQuery.filter(esb.rangeQuery(key).gte(value));\n continue;\n }\n\n if (value.includes(\",\")) {\n const values = value.split(\",\").filter((v) => v.trim() !== \"\");\n if (values.length > 0) {\n boolQuery.filter(esb.termsQuery(`${key}.keyword`, values));\n }\n continue;\n }\n\n if (value === \"true\" || value === \"false\") {\n boolQuery.filter(esb.termQuery(key, value));\n continue;\n }\n } else if (Array.isArray(value)) {\n if (value.length > 0) {\n boolQuery.filter(esb.termsQuery(`${key}.keyword`, value));\n }\n continue;\n }\n\n if (Array.isArray(value)) {\n boolQuery.filter(esb.termsQuery(`${key}.keyword`, value));\n } else {\n boolQuery.filter(esb.matchPhraseQuery(`${key}`, value));\n }\n }\n}\n\n// Helper function to handle field selection\nfunction addFieldSelection(result: any, fieldsExclude?: string[], fieldsInclude?: string[]): void {\n if (fieldsExclude) {\n result._source_excludes = fieldsExclude;\n } else if (fieldsInclude) {\n result._source_includes = fieldsInclude;\n }\n}\nexport function buildQueryOSFromUrl(filter: Filter | string): any {\n const url = typeof filter === \"string\" ? filter : filter.urlRaw;\n\n if (!url) return {};\n\n const boolQuery = esb.boolQuery();\n const params = new URLSearchParams(url);\n\n //todo search and search fields\n applySearchQuery(boolQuery, params);\n\n //todo rangeFilters\n //todo field exist\n //todo text search\n //todo aggergations\n\n //todo response fieldsExclude, fieldsInclude\n const fieldsExclude = [\"\"];\n const fieldsInclude = [\"\"];\n\n const sortBy = \"createdAt\"; // The field to sort by\n const sort: SortOrder = SortOrder.DESC; // Sorting order, either ascending or descending\n\n const { from, size } = { from: 0, size: 25 }; //todo\n\n // Create a request body and handle sorting\n const requestBody = esb.requestBodySearch().query(boolQuery);\n if (sortBy && sort) {\n requestBody.sort(esb.sort(sortBy, sort));\n }\n requestBody.from(from);\n requestBody.size(size);\n\n let result: any = {};\n\n result.body = requestBody.toJSON();\n\n addFieldSelection(result, fieldsExclude, fieldsInclude);\n\n result = removeEmptyFields(result);\n\n return result;\n}\n\nexport function applySearchQuery(boolQuery: any, params: URLSearchParams) {\n const search = params.get(\"search\");\n if (!search) return;\n\n const fieldsRaw = params.get(\"searchFields\");\n if (!fieldsRaw) return;\n\n const operator = (params.get(\"searchOperator\") || \"or\").toLowerCase();\n const fields = fieldsRaw\n .split(\",\")\n .map((f) => f.trim())\n .filter(Boolean);\n const keywords = search.split(\" \").filter(Boolean);\n\n // OR: (title contains \"iphone 15\" OR description contains \"iphone 15\")\n if (operator === \"or\") {\n const shouldQueries = [];\n\n for (const field of fields) {\n shouldQueries.push(\n esb.matchQuery(field, search).operator(\"and\"), // treats \"iphone 15\" as phrase\n );\n }\n\n boolQuery.should(shouldQueries).minimumShouldMatch(1);\n return;\n }\n\n // AND: (title contains keyword AND description contains keyword)\n if (operator === \"and\") {\n for (const field of fields) {\n // each field must contain ALL keywords\n const mustPerField = esb.boolQuery();\n\n for (const word of keywords) {\n mustPerField.must(esb.matchQuery(field, word));\n }\n\n boolQuery.must(mustPerField);\n }\n }\n}\n\nexport function buildQueryOS(filter: Filter): any {\n const { sort, sortBy, searchBy, searchKeyword, rangeFilters, indexName, indexValue, fieldsExclude, fieldsInclude } =\n filter;\n\n // Calculate pagination\n const { from, size } = calculatePagination(filter);\n\n // Build the main query\n const boolQuery = esb.boolQuery();\n\n addRangeFilters(boolQuery, rangeFilters);\n addSearchQuery(boolQuery, searchBy, searchKeyword);\n addIndexFilter(boolQuery, indexName, indexValue);\n addDynamicFilters(boolQuery, filter);\n\n // Create a request body and handle sorting\n const requestBody = esb.requestBodySearch().query(boolQuery);\n if (sortBy && sort) {\n requestBody.sort(esb.sort(sortBy, sort));\n }\n requestBody.from(from);\n requestBody.size(size);\n\n let result: any = {};\n\n result.body = requestBody.toJSON();\n\n addFieldSelection(result, fieldsExclude, fieldsInclude);\n\n result = removeEmptyFields(result);\n\n return result;\n}\n\n/**\n * All non-case sensitive rule accepted characters replaced with upper and lower case\n * а - [аА], б - []\n * */\nexport function toCaseInsensitive(value: string) {\n if (!value || typeof value !== \"string\") return value;\n\n return value.toLowerCase();\n}\nexport function toCaseInsensitiveArray(value: string[]) {\n if (!value) return value;\n\n if (Array.isArray(value)) {\n return value.map((v) => v.toLowerCase());\n }\n\n return value;\n}\n"]}
@@ -72,7 +72,7 @@ function parseIndexFilter(filter, indexMap) {
72
72
  if (!filter)
73
73
  return undefined;
74
74
  if (typeof filter === "string") {
75
- filter = (0, http_util_1.toRecord)(filter);
75
+ filter = (0, http_util_1.parseFilter)(filter);
76
76
  }
77
77
  let result = { ...filter };
78
78
  result = handleRangeFilters(result);
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.util.js","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseEntity, ChangedField, InclusionMode, TraceChange } from \"../model/base.model\";\nimport { DynamoIndexMap } from \"../model/dynamodb.model\";\nimport { Filter } from \"../model/filter.model\";\nimport { toRecord } from \"./http/http.util\";\nimport dayjs from \"dayjs\";\nimport { extractChangedSnippet } from \"./string.util\";\n\nexport const hasField = (obj: object, fieldName: string): boolean => {\n return Object.hasOwn(obj, fieldName);\n};\n\nexport function isMethodeHasKeyword(methodName: string, keywords: string[]): boolean {\n if (!methodName) return false;\n return keywords.some((keyword) => methodName.toLowerCase().includes(keyword));\n}\n\nexport function handleRangeFilters(filter: Filter): Filter {\n // Use regex to match keys like ageMin, ageMax, tempFrom, etc.\n const rangeFilters: any[] = [];\n const rangeFieldMap: Record<string, { minValue?: any; maxValue?: any }> = {};\n // Suffix mapping\n const minSuffixes = [\"Min\", \"From\", \"Start\"];\n const maxSuffixes = [\"Max\", \"To\", \"End\"];\n const suffixToType: Record<string, \"minValue\" | \"maxValue\"> = {};\n for (const s of minSuffixes) {\n suffixToType[s] = \"minValue\";\n }\n for (const s of maxSuffixes) {\n suffixToType[s] = \"maxValue\";\n }\n // Build regex: (field)(Min|Max|From|To|Start|End)\n const suffixPattern = [...minSuffixes, ...maxSuffixes].join(\"|\");\n const regex = new RegExp(`^(.*)(${suffixPattern})$`);\n\n for (const key of Object.keys(filter)) {\n const match = regex.exec(key); // <- use exec instead of match\n if (match) {\n const fieldName = match[1];\n const suffix = match[2];\n const type = suffixToType[suffix];\n if (!rangeFieldMap[fieldName]) rangeFieldMap[fieldName] = {};\n rangeFieldMap[fieldName][type] = filter[key];\n }\n }\n\n // Remove the original min/max keys from filter and build rangeFilters\n for (const fieldName in rangeFieldMap) {\n const { minValue, maxValue } = rangeFieldMap[fieldName];\n if (minValue !== undefined || maxValue !== undefined) {\n rangeFilters.push({ fieldName, minValue, maxValue });\n for (const suffix of [...minSuffixes, ...maxSuffixes]) {\n delete filter[`${fieldName}${suffix}`];\n }\n }\n }\n\n if (rangeFilters.length > 0) {\n filter.rangeFilters = rangeFilters;\n }\n\n return filter;\n}\n\nexport function parseIndexFilter(filter: Filter | string, indexMap?: DynamoIndexMap): Filter {\n if (!filter) return undefined;\n if (typeof filter === \"string\") {\n filter = toRecord(filter);\n }\n let result: Filter = { ...filter };\n\n result = handleRangeFilters(result);\n\n if (indexMap === undefined || !indexMap || (filter?.indexName && filter?.indexValue)) return result;\n\n let bestMatch: {\n indexName: string;\n rFields: string[];\n fieldSeparator?: string;\n } | null = null;\n\n for (const [indexName, { rFields, fieldSeparator }] of indexMap.entries()) {\n const allFieldsPresent = rFields.every((field) => Object.hasOwn(filter, field));\n if (!allFieldsPresent) continue;\n\n if (!bestMatch || rFields.length > bestMatch.rFields.length) {\n bestMatch = { indexName, rFields, fieldSeparator: fieldSeparator };\n }\n }\n\n if (bestMatch) {\n const indexValues = bestMatch.rFields.map((field) => filter[field]);\n result.indexName = bestMatch.indexName;\n result.indexValue = indexValues.join(bestMatch.fieldSeparator ?? \"\");\n\n // rFields-ийг result-аас хасна\n for (const field of bestMatch.rFields) {\n delete result[field];\n }\n }\n\n return result;\n}\n\nexport function excludeKeys(obj: Record<string, any>, keysToExclude: string[]) {\n if (!obj) return obj;\n const result: Record<string, any> = {};\n for (const key in obj) {\n if (!keysToExclude.includes(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/*\n * remove all fields except the ones in the fieldName array\n * */\nexport const fieldsInclude = (object: any, fieldName: string[]): any => {\n if (typeof object !== \"object\" || object === null) {\n throw new Error(\"Input must be an object\");\n }\n\n // Create a new object with only the specified fields\n return fieldName.reduce(\n (result, field) => {\n if (field in object) {\n result[field] = object[field];\n }\n return result;\n },\n {} as Record<string, any>,\n );\n};\n\nexport const copyField = (object: any, fromFieldName: string, toFieldName: string): any => {\n if (typeof object !== \"object\" || object === null) throw new Error(\"Input must be an object\");\n object[toFieldName] = object[fromFieldName];\n};\n\n/**\n * Removes or keeps specific fields from a list of objects.\n *\n * @param dataList - Array of objects to process\n * @param includes - Optional list of fields to include (whitelist)\n * @param excludes - Optional list of fields to exclude (blacklist)\n * @returns New array of objects with filtered fields\n */\nexport function removeFields<T extends object>(dataList: T[], includes?: string[], excludes?: string[]): Partial<T>[] {\n if (!includes && !excludes) return dataList;\n\n return dataList.map((item) => {\n // If includes are provided, only keep those fields\n if (includes && includes.length > 0) {\n const included: Partial<T> = {};\n for (const key of includes) {\n if (key in item) {\n included[key] = item[key];\n }\n }\n return included;\n }\n\n // If excludes are provided, remove those fields\n if (excludes && excludes.length > 0) {\n const cloned: Partial<T> = { ...item };\n for (const key of excludes) {\n delete cloned[key];\n }\n return cloned;\n }\n\n // If neither includes nor excludes: return the item as is\n return item;\n });\n}\n\n/**\n * @deprecated Use `setSystemData methode in crudService` instead.\n */\nexport const addDates = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.createdAt) entity.createdAt = dayjs().toISOString();\n entity.updatedAt = dayjs().toISOString();\n return entity;\n};\n\n/**\n * @deprecated Use `setSystemData methode in crudService` instead.\n */\nexport const addDatesAndId = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.id) entity.id = crypto.randomUUID();\n return addDates(entity);\n};\n\n/**\n * Recursively checks if an object contains any meaningful content.\n * - Returns false for null, undefined, empty objects, or empty arrays.\n * - Returns true for primitive values (string, number, boolean, etc.).\n * - Recursively checks arrays and nested objects to determine if at least one value is meaningful.\n *\n * This ensures that objects like { bool: {} } are considered empty,\n * and only objects with actual values (e.g., { bool: { must: [...] } }) are considered meaningful.\n */\nexport function hasContent(obj: any): boolean {\n if (obj == null) return false; // null/undefined\n if (typeof obj !== \"object\") return true; // primitive values are meaningful\n if (Array.isArray(obj)) return obj.some(hasContent);\n\n const values = Object.values(obj);\n if (values.length === 0) return false; // empty object\n\n // recursively check if any value is meaningful\n return values.some(hasContent);\n}\n\n/**\n * Recursively removes all \"empty\" fields from an object.\n *\n * Definition of empty:\n * - null or undefined\n * - empty objects {}\n * - empty arrays []\n *\n * Primitives (number, string, boolean) and non-empty objects/arrays are preserved.\n *\n * Usage:\n * ```ts\n * const input = { a: 1, b: null, c: {}, d: [], e: { f: null, g: { h: [] }, i: 2 }, j: [null, {}, 3] };\n * const cleaned = removeEmptyFields(input);\n * // cleaned => { a: 1, e: { i: 2 }, j: [3] }\n * ```\n *\n * This is especially useful when preparing Elasticsearch/OpenSearch queries:\n * - Removes empty objects like `{ bool: {} }`\n * - Removes empty arrays in filters\n * - Ensures the `body` only contains meaningful fields before sending\n */\nexport function removeEmptyFields(obj: any): any {\n if (obj == null) return undefined; // null or undefined -> remove\n if (typeof obj !== \"object\") return obj; // primitives remain\n\n if (Array.isArray(obj)) {\n const arr = obj\n .map(removeEmptyFields) // recursive\n .filter((v) => v !== undefined); // remove empty elements\n return arr.length > 0 ? arr : undefined;\n }\n\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const cleaned = removeEmptyFields(value);\n if (cleaned !== undefined) {\n result[key] = cleaned;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nexport function computeChangedFields<T extends Record<string, any>>(\n oldItem: Partial<T>,\n newItem: Partial<T>,\n traceChange: TraceChange,\n): ChangedField[] {\n const diff = diffObjects(oldItem as Record<string, any>, newItem as Record<string, any>);\n const flattened = flattenDiff(diff);\n\n return traceChange.mode === InclusionMode.INCLUDE\n ? flattened.filter((f) => traceChange.fields.includes(f.fieldName))\n : flattened.filter((f) => !traceChange.fields.includes(f.fieldName));\n}\n\n/**\n * Flatten nested diff object into a ChangedField[] list\n * e.g. { address: { city: { old, new } } } => [{ fieldName: \"address.city\", oldValue, newValue }]\n */\nfunction flattenDiff(diff: Record<string, any>, prefix = \"\"): ChangedField[] {\n const changes: ChangedField[] = [];\n\n for (const [key, value] of Object.entries(diff)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\" && \"old\" in value && \"new\" in value) {\n // direct primitive/string diff\n changes.push({\n fieldName: fullKey,\n oldValue: value.old,\n newValue: value.new,\n });\n } else if (typeof value === \"object\" && !Array.isArray(value)) {\n // nested object diff (recursive)\n changes.push(...flattenDiff(value, fullKey));\n } else {\n // fallback: primitive or unexpected shape\n changes.push({\n fieldName: fullKey,\n oldValue: value?.old ?? null,\n newValue: value?.new ?? null,\n });\n }\n }\n\n return changes;\n}\n\n/* helpers */\nfunction isObject(v: any): v is Record<string, any> {\n return v !== null && typeof v === \"object\" && !Array.isArray(v);\n}\nfunction isPrimitive(v: any): boolean {\n return v === null || (typeof v !== \"object\" && typeof v !== \"function\");\n}\nfunction stableStringify(value: any): string {\n if (isPrimitive(value)) return JSON.stringify(value);\n if (Array.isArray(value)) return \"[\" + value.map((v) => stableStringify(v)).join(\",\") + \"]\";\n // object: sort keys\n const keys = Object.keys(value).sort();\n return \"{\" + keys.map((k) => JSON.stringify(k) + \":\" + stableStringify(value[k])).join(\",\") + \"}\";\n}\nfunction deepEqualIgnoreKeyOrder(a: any, b: any): boolean {\n return stableStringify(a) === stableStringify(b);\n}\n\n/**\n * Only iterate keys from newObj (so fields not provided in the update are ignored).\n * Skip keys where newVal === undefined (treat as \"not provided\" -> no change recorded).\n */\nfunction diffObjects(oldObj: Record<string, any>, newObj: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n const skipKeys = new Set([\"history\", \"createdAt\", \"updatedAt\"]);\n\n for (const key of Object.keys(newObj)) {\n if (skipKeys.has(key)) continue;\n\n const newVal = newObj[key];\n\n // if caller didn't supply the key (explicitly undefined) -> skip\n if (newVal === undefined) continue;\n\n const oldVal = oldObj[key];\n\n // equal -> skip\n if (deepEqualIgnoreKeyOrder(oldVal, newVal)) continue;\n\n // both objects -> nested diff\n if (isObject(oldVal) && isObject(newVal)) {\n const nested = diffObjects(oldVal, newVal);\n if (Object.keys(nested).length > 0) result[key] = nested;\n continue;\n }\n\n // both arrays -> array diff\n if (Array.isArray(oldVal) && Array.isArray(newVal)) {\n const arrDiff = diffArrays(oldVal, newVal);\n if (arrDiff && Object.keys(arrDiff).length > 0) result[key] = arrDiff;\n continue;\n }\n\n // strings: summarize long text changes\n if (typeof oldVal === \"string\" && typeof newVal === \"string\") {\n const oldSnippet = oldVal.length > 200 ? extractChangedSnippet(oldVal, newVal) : oldVal;\n const newSnippet = newVal.length > 200 ? extractChangedSnippet(newVal, oldVal) : newVal;\n result[key] = { old: oldSnippet, new: newSnippet };\n continue;\n }\n\n // fallback: primitive change or type change\n result[key] = { old: oldVal, new: newVal };\n }\n\n return result;\n}\n\n/** array diff similar to earlier, but kept compact */\nfunction diffArrays(oldArr: any[], newArr: any[]): any {\n if (deepEqualIgnoreKeyOrder(oldArr, newArr)) return {};\n\n const allPrimitives = oldArr.every(isPrimitive) && newArr.every(isPrimitive);\n if (allPrimitives) {\n const removed = oldArr.filter((x) => !newArr.includes(x));\n const added = newArr.filter((x) => !oldArr.includes(x));\n const out: any = {};\n if (added.length) out.added = added;\n if (removed.length) out.removed = removed;\n return out;\n }\n\n // complex arrays: index-wise diff\n const maxLen = Math.max(oldArr.length, newArr.length);\n const idxDiffs: Record<string, any> = {};\n for (let i = 0; i < maxLen; i++) {\n const a = oldArr[i];\n const b = newArr[i];\n if (deepEqualIgnoreKeyOrder(a, b)) continue;\n\n if (isObject(a) && isObject(b)) {\n const nested = diffObjects(a, b);\n if (Object.keys(nested).length > 0) idxDiffs[i] = nested;\n continue;\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n const nestedArr = diffArrays(a, b);\n if (Object.keys(nestedArr || {}).length > 0) idxDiffs[i] = nestedArr;\n continue;\n }\n\n idxDiffs[i] = { old: a, new: b };\n }\n\n if (Object.keys(idxDiffs).length === 0) {\n return { oldLength: oldArr.length, newLength: newArr.length };\n }\n return idxDiffs;\n}\n"]}
1
+ {"version":3,"file":"reflection.util.js","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseEntity, ChangedField, InclusionMode, TraceChange } from \"../model/base.model\";\nimport { DynamoIndexMap } from \"../model/dynamodb.model\";\nimport { Filter } from \"../model/filter.model\";\nimport { parseFilter } from \"./http/http.util\";\nimport dayjs from \"dayjs\";\nimport { extractChangedSnippet } from \"./string.util\";\n\nexport const hasField = (obj: object, fieldName: string): boolean => {\n return Object.hasOwn(obj, fieldName);\n};\n\nexport function isMethodeHasKeyword(methodName: string, keywords: string[]): boolean {\n if (!methodName) return false;\n return keywords.some((keyword) => methodName.toLowerCase().includes(keyword));\n}\n\nexport function handleRangeFilters(filter: Filter): Filter {\n // Use regex to match keys like ageMin, ageMax, tempFrom, etc.\n const rangeFilters: any[] = [];\n const rangeFieldMap: Record<string, { minValue?: any; maxValue?: any }> = {};\n // Suffix mapping\n const minSuffixes = [\"Min\", \"From\", \"Start\"];\n const maxSuffixes = [\"Max\", \"To\", \"End\"];\n const suffixToType: Record<string, \"minValue\" | \"maxValue\"> = {};\n for (const s of minSuffixes) {\n suffixToType[s] = \"minValue\";\n }\n for (const s of maxSuffixes) {\n suffixToType[s] = \"maxValue\";\n }\n // Build regex: (field)(Min|Max|From|To|Start|End)\n const suffixPattern = [...minSuffixes, ...maxSuffixes].join(\"|\");\n const regex = new RegExp(`^(.*)(${suffixPattern})$`);\n\n for (const key of Object.keys(filter)) {\n const match = regex.exec(key); // <- use exec instead of match\n if (match) {\n const fieldName = match[1];\n const suffix = match[2];\n const type = suffixToType[suffix];\n if (!rangeFieldMap[fieldName]) rangeFieldMap[fieldName] = {};\n rangeFieldMap[fieldName][type] = filter[key];\n }\n }\n\n // Remove the original min/max keys from filter and build rangeFilters\n for (const fieldName in rangeFieldMap) {\n const { minValue, maxValue } = rangeFieldMap[fieldName];\n if (minValue !== undefined || maxValue !== undefined) {\n rangeFilters.push({ fieldName, minValue, maxValue });\n for (const suffix of [...minSuffixes, ...maxSuffixes]) {\n delete filter[`${fieldName}${suffix}`];\n }\n }\n }\n\n if (rangeFilters.length > 0) {\n filter.rangeFilters = rangeFilters;\n }\n\n return filter;\n}\n\nexport function parseIndexFilter(filter: Filter | string, indexMap?: DynamoIndexMap): Filter {\n if (!filter) return undefined;\n if (typeof filter === \"string\") {\n filter = parseFilter(filter);\n }\n let result: Filter = { ...filter };\n\n result = handleRangeFilters(result);\n\n if (indexMap === undefined || !indexMap || (filter?.indexName && filter?.indexValue)) return result;\n\n let bestMatch: {\n indexName: string;\n rFields: string[];\n fieldSeparator?: string;\n } | null = null;\n\n for (const [indexName, { rFields, fieldSeparator }] of indexMap.entries()) {\n const allFieldsPresent = rFields.every((field) => Object.hasOwn(filter, field));\n if (!allFieldsPresent) continue;\n\n if (!bestMatch || rFields.length > bestMatch.rFields.length) {\n bestMatch = { indexName, rFields, fieldSeparator: fieldSeparator };\n }\n }\n\n if (bestMatch) {\n const indexValues = bestMatch.rFields.map((field) => filter[field]);\n result.indexName = bestMatch.indexName;\n result.indexValue = indexValues.join(bestMatch.fieldSeparator ?? \"\");\n\n // rFields-ийг result-аас хасна\n for (const field of bestMatch.rFields) {\n delete result[field];\n }\n }\n\n return result;\n}\n\nexport function excludeKeys(obj: Record<string, any>, keysToExclude: string[]) {\n if (!obj) return obj;\n const result: Record<string, any> = {};\n for (const key in obj) {\n if (!keysToExclude.includes(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/*\n * remove all fields except the ones in the fieldName array\n * */\nexport const fieldsInclude = (object: any, fieldName: string[]): any => {\n if (typeof object !== \"object\" || object === null) {\n throw new Error(\"Input must be an object\");\n }\n\n // Create a new object with only the specified fields\n return fieldName.reduce(\n (result, field) => {\n if (field in object) {\n result[field] = object[field];\n }\n return result;\n },\n {} as Record<string, any>,\n );\n};\n\nexport const copyField = (object: any, fromFieldName: string, toFieldName: string): any => {\n if (typeof object !== \"object\" || object === null) throw new Error(\"Input must be an object\");\n object[toFieldName] = object[fromFieldName];\n};\n\n/**\n * Removes or keeps specific fields from a list of objects.\n *\n * @param dataList - Array of objects to process\n * @param includes - Optional list of fields to include (whitelist)\n * @param excludes - Optional list of fields to exclude (blacklist)\n * @returns New array of objects with filtered fields\n */\nexport function removeFields<T extends object>(dataList: T[], includes?: string[], excludes?: string[]): Partial<T>[] {\n if (!includes && !excludes) return dataList;\n\n return dataList.map((item) => {\n // If includes are provided, only keep those fields\n if (includes && includes.length > 0) {\n const included: Partial<T> = {};\n for (const key of includes) {\n if (key in item) {\n included[key] = item[key];\n }\n }\n return included;\n }\n\n // If excludes are provided, remove those fields\n if (excludes && excludes.length > 0) {\n const cloned: Partial<T> = { ...item };\n for (const key of excludes) {\n delete cloned[key];\n }\n return cloned;\n }\n\n // If neither includes nor excludes: return the item as is\n return item;\n });\n}\n\n/**\n * @deprecated Use `setSystemData methode in crudService` instead.\n */\nexport const addDates = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.createdAt) entity.createdAt = dayjs().toISOString();\n entity.updatedAt = dayjs().toISOString();\n return entity;\n};\n\n/**\n * @deprecated Use `setSystemData methode in crudService` instead.\n */\nexport const addDatesAndId = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.id) entity.id = crypto.randomUUID();\n return addDates(entity);\n};\n\n/**\n * Recursively checks if an object contains any meaningful content.\n * - Returns false for null, undefined, empty objects, or empty arrays.\n * - Returns true for primitive values (string, number, boolean, etc.).\n * - Recursively checks arrays and nested objects to determine if at least one value is meaningful.\n *\n * This ensures that objects like { bool: {} } are considered empty,\n * and only objects with actual values (e.g., { bool: { must: [...] } }) are considered meaningful.\n */\nexport function hasContent(obj: any): boolean {\n if (obj == null) return false; // null/undefined\n if (typeof obj !== \"object\") return true; // primitive values are meaningful\n if (Array.isArray(obj)) return obj.some(hasContent);\n\n const values = Object.values(obj);\n if (values.length === 0) return false; // empty object\n\n // recursively check if any value is meaningful\n return values.some(hasContent);\n}\n\n/**\n * Recursively removes all \"empty\" fields from an object.\n *\n * Definition of empty:\n * - null or undefined\n * - empty objects {}\n * - empty arrays []\n *\n * Primitives (number, string, boolean) and non-empty objects/arrays are preserved.\n *\n * Usage:\n * ```ts\n * const input = { a: 1, b: null, c: {}, d: [], e: { f: null, g: { h: [] }, i: 2 }, j: [null, {}, 3] };\n * const cleaned = removeEmptyFields(input);\n * // cleaned => { a: 1, e: { i: 2 }, j: [3] }\n * ```\n *\n * This is especially useful when preparing Elasticsearch/OpenSearch queries:\n * - Removes empty objects like `{ bool: {} }`\n * - Removes empty arrays in filters\n * - Ensures the `body` only contains meaningful fields before sending\n */\nexport function removeEmptyFields(obj: any): any {\n if (obj == null) return undefined; // null or undefined -> remove\n if (typeof obj !== \"object\") return obj; // primitives remain\n\n if (Array.isArray(obj)) {\n const arr = obj\n .map(removeEmptyFields) // recursive\n .filter((v) => v !== undefined); // remove empty elements\n return arr.length > 0 ? arr : undefined;\n }\n\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const cleaned = removeEmptyFields(value);\n if (cleaned !== undefined) {\n result[key] = cleaned;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nexport function computeChangedFields<T extends Record<string, any>>(\n oldItem: Partial<T>,\n newItem: Partial<T>,\n traceChange: TraceChange,\n): ChangedField[] {\n const diff = diffObjects(oldItem as Record<string, any>, newItem as Record<string, any>);\n const flattened = flattenDiff(diff);\n\n return traceChange.mode === InclusionMode.INCLUDE\n ? flattened.filter((f) => traceChange.fields.includes(f.fieldName))\n : flattened.filter((f) => !traceChange.fields.includes(f.fieldName));\n}\n\n/**\n * Flatten nested diff object into a ChangedField[] list\n * e.g. { address: { city: { old, new } } } => [{ fieldName: \"address.city\", oldValue, newValue }]\n */\nfunction flattenDiff(diff: Record<string, any>, prefix = \"\"): ChangedField[] {\n const changes: ChangedField[] = [];\n\n for (const [key, value] of Object.entries(diff)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\" && \"old\" in value && \"new\" in value) {\n // direct primitive/string diff\n changes.push({\n fieldName: fullKey,\n oldValue: value.old,\n newValue: value.new,\n });\n } else if (typeof value === \"object\" && !Array.isArray(value)) {\n // nested object diff (recursive)\n changes.push(...flattenDiff(value, fullKey));\n } else {\n // fallback: primitive or unexpected shape\n changes.push({\n fieldName: fullKey,\n oldValue: value?.old ?? null,\n newValue: value?.new ?? null,\n });\n }\n }\n\n return changes;\n}\n\n/* helpers */\nfunction isObject(v: any): v is Record<string, any> {\n return v !== null && typeof v === \"object\" && !Array.isArray(v);\n}\nfunction isPrimitive(v: any): boolean {\n return v === null || (typeof v !== \"object\" && typeof v !== \"function\");\n}\nfunction stableStringify(value: any): string {\n if (isPrimitive(value)) return JSON.stringify(value);\n if (Array.isArray(value)) return \"[\" + value.map((v) => stableStringify(v)).join(\",\") + \"]\";\n // object: sort keys\n const keys = Object.keys(value).sort();\n return \"{\" + keys.map((k) => JSON.stringify(k) + \":\" + stableStringify(value[k])).join(\",\") + \"}\";\n}\nfunction deepEqualIgnoreKeyOrder(a: any, b: any): boolean {\n return stableStringify(a) === stableStringify(b);\n}\n\n/**\n * Only iterate keys from newObj (so fields not provided in the update are ignored).\n * Skip keys where newVal === undefined (treat as \"not provided\" -> no change recorded).\n */\nfunction diffObjects(oldObj: Record<string, any>, newObj: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n const skipKeys = new Set([\"history\", \"createdAt\", \"updatedAt\"]);\n\n for (const key of Object.keys(newObj)) {\n if (skipKeys.has(key)) continue;\n\n const newVal = newObj[key];\n\n // if caller didn't supply the key (explicitly undefined) -> skip\n if (newVal === undefined) continue;\n\n const oldVal = oldObj[key];\n\n // equal -> skip\n if (deepEqualIgnoreKeyOrder(oldVal, newVal)) continue;\n\n // both objects -> nested diff\n if (isObject(oldVal) && isObject(newVal)) {\n const nested = diffObjects(oldVal, newVal);\n if (Object.keys(nested).length > 0) result[key] = nested;\n continue;\n }\n\n // both arrays -> array diff\n if (Array.isArray(oldVal) && Array.isArray(newVal)) {\n const arrDiff = diffArrays(oldVal, newVal);\n if (arrDiff && Object.keys(arrDiff).length > 0) result[key] = arrDiff;\n continue;\n }\n\n // strings: summarize long text changes\n if (typeof oldVal === \"string\" && typeof newVal === \"string\") {\n const oldSnippet = oldVal.length > 200 ? extractChangedSnippet(oldVal, newVal) : oldVal;\n const newSnippet = newVal.length > 200 ? extractChangedSnippet(newVal, oldVal) : newVal;\n result[key] = { old: oldSnippet, new: newSnippet };\n continue;\n }\n\n // fallback: primitive change or type change\n result[key] = { old: oldVal, new: newVal };\n }\n\n return result;\n}\n\n/** array diff similar to earlier, but kept compact */\nfunction diffArrays(oldArr: any[], newArr: any[]): any {\n if (deepEqualIgnoreKeyOrder(oldArr, newArr)) return {};\n\n const allPrimitives = oldArr.every(isPrimitive) && newArr.every(isPrimitive);\n if (allPrimitives) {\n const removed = oldArr.filter((x) => !newArr.includes(x));\n const added = newArr.filter((x) => !oldArr.includes(x));\n const out: any = {};\n if (added.length) out.added = added;\n if (removed.length) out.removed = removed;\n return out;\n }\n\n // complex arrays: index-wise diff\n const maxLen = Math.max(oldArr.length, newArr.length);\n const idxDiffs: Record<string, any> = {};\n for (let i = 0; i < maxLen; i++) {\n const a = oldArr[i];\n const b = newArr[i];\n if (deepEqualIgnoreKeyOrder(a, b)) continue;\n\n if (isObject(a) && isObject(b)) {\n const nested = diffObjects(a, b);\n if (Object.keys(nested).length > 0) idxDiffs[i] = nested;\n continue;\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n const nestedArr = diffArrays(a, b);\n if (Object.keys(nestedArr || {}).length > 0) idxDiffs[i] = nestedArr;\n continue;\n }\n\n idxDiffs[i] = { old: a, new: b };\n }\n\n if (Object.keys(idxDiffs).length === 0) {\n return { oldLength: oldArr.length, newLength: newArr.length };\n }\n return idxDiffs;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.util.js","sourceRoot":"","sources":["../../src/utils/validation.util.ts"],"names":[],"mappings":";;;AAUA,gDAiBC;AAED,oCAqBC;AAlDD,6BAAkC;AAClC,6BAAkD;AAElD;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,MAAW,EAAE,IAAS;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,CAAC,sCAAsC;IACrD,CAAC;IAED,iDAAiD;IACjD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,MAAM;IACN,IAAI,KAAK,YAAY,cAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;YACpC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM;IACN,IAAI,KAAK,YAAY,qBAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,WAAW;IACX,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,8CAA8C;AAC9C,MAAM,cAAc,GAAG,CAAC,KAAU,EAAE,GAAQ,EAAE,EAAE;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,cAAc;YACjB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YAC9C,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,gBAAgB,KAAK,CAAC,QAAQ,eAAe,EAAE,CAAC;QAEpE,KAAK,WAAW;YACd,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,aAAa,EAAE,CAAC;QAEpE,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,OAAO,aAAa,EAAE,CAAC;QAElE;YACE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC;AACH,CAAC,CAAC;AAGO,wCAAc","sourcesContent":["import { z, ZodError } from \"zod\";\nimport { ValidationError as YupError } from \"yup\";\n\n/**\n * Validates data using the appropriate method (Zod or Yup)\n * @param schema - The schema to validate against\n * @param data - The data to validate\n * @returns Validated data\n * @throws Validation error if validation fails\n */\nexport function validateWithSchema(schema: any, data: any): any {\n if (!schema) {\n return data; // No validation if the schema is null\n }\n\n // Check if it's a Zod schema (has .parse method)\n if (typeof schema.parse === \"function\") {\n return schema.parse(data);\n }\n\n // Check if it's a Yup schema (has .validate method)\n if (typeof schema.validate === \"function\") {\n return schema.validate(data);\n }\n\n // If neither, throw an error\n throw new Error(\"Invalid schema: Must be either Zod or Yup schema\");\n}\n\nexport function formatErrors(error: unknown) {\n // Zod\n if (error instanceof ZodError) {\n return error.issues.map((e) => ({\n field: e.path.join(\".\") || \"unknown\",\n message: e.message,\n code: e.code,\n }));\n }\n\n // Yup\n if (error instanceof YupError) {\n return error.inner.map((e) => ({\n field: e.path || \"unknown\",\n message: e.message,\n code: \"yup_validation_error\",\n }));\n }\n\n // fallback\n return [{ field: \"unknown\", message: \"Unknown error\", code: \"unknown\" }];\n}\n\n// Custom error map for Mongolian translations\nconst customErrorMap = (issue: any, ctx: any) => {\n switch (issue.code) {\n case \"invalid_type\":\n if (issue.expected === \"number\" && issue.received === \"string\") {\n return { message: \"Тоон утга оруулна уу\" };\n }\n if (issue.expected === \"string\" && issue.received === \"number\") {\n return { message: \"Текст утга оруулна уу\" };\n }\n return { message: `Буруу төрөл: ${issue.expected} шаардлагатай` };\n \n case \"too_small\":\n return { message: `Хамгийн багадаа ${issue.minimum} байх ёстой` };\n \n case \"too_big\":\n return { message: `Хамгийн ихдээ ${issue.maximum} байх ёстой` };\n \n default:\n return { message: ctx.defaultError };\n }\n};\n\n// Export the error map for use in individual schemas\nexport { customErrorMap };\n"]}
1
+ {"version":3,"file":"validation.util.js","sourceRoot":"","sources":["../../src/utils/validation.util.ts"],"names":[],"mappings":";;;AAUA,gDAiBC;AAED,oCAqBC;AAlDD,6BAAkC;AAClC,6BAAkD;AAElD;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,MAAW,EAAE,IAAS;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,CAAC,sCAAsC;IACrD,CAAC;IAED,iDAAiD;IACjD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,MAAM;IACN,IAAI,KAAK,YAAY,cAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;YACpC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM;IACN,IAAI,KAAK,YAAY,qBAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,WAAW;IACX,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,8CAA8C;AAC9C,MAAM,cAAc,GAAG,CAAC,KAAU,EAAE,GAAQ,EAAE,EAAE;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,cAAc;YACnB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YAC9C,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,gBAAgB,KAAK,CAAC,QAAQ,eAAe,EAAE,CAAC;QAElE,KAAK,WAAW;YACd,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,aAAa,EAAE,CAAC;QAEpE,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,OAAO,aAAa,EAAE,CAAC;QAElE;YACE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC;AACH,CAAC,CAAC;AAGO,wCAAc","sourcesContent":["import { z, ZodError } from \"zod\";\nimport { ValidationError as YupError } from \"yup\";\n\n/**\n * Validates data using the appropriate method (Zod or Yup)\n * @param schema - The schema to validate against\n * @param data - The data to validate\n * @returns Validated data\n * @throws Validation error if validation fails\n */\nexport function validateWithSchema(schema: any, data: any): any {\n if (!schema) {\n return data; // No validation if the schema is null\n }\n\n // Check if it's a Zod schema (has .parse method)\n if (typeof schema.parse === \"function\") {\n return schema.parse(data);\n }\n\n // Check if it's a Yup schema (has .validate method)\n if (typeof schema.validate === \"function\") {\n return schema.validate(data);\n }\n\n // If neither, throw an error\n throw new Error(\"Invalid schema: Must be either Zod or Yup schema\");\n}\n\nexport function formatErrors(error: unknown) {\n // Zod\n if (error instanceof ZodError) {\n return error.issues.map((e) => ({\n field: e.path.join(\".\") || \"unknown\",\n message: e.message,\n code: e.code,\n }));\n }\n\n // Yup\n if (error instanceof YupError) {\n return error.inner.map((e) => ({\n field: e.path || \"unknown\",\n message: e.message,\n code: \"yup_validation_error\",\n }));\n }\n\n // fallback\n return [{ field: \"unknown\", message: \"Unknown error\", code: \"unknown\" }];\n}\n\n// Custom error map for Mongolian translations\nconst customErrorMap = (issue: any, ctx: any) => {\n switch (issue.code) {\n case \"invalid_type\":\n if (issue.expected === \"number\" && issue.received === \"string\") {\n return { message: \"Тоон утга оруулна уу\" };\n }\n if (issue.expected === \"string\" && issue.received === \"number\") {\n return { message: \"Текст утга оруулна уу\" };\n }\n return { message: `Буруу төрөл: ${issue.expected} шаардлагатай` };\n \n case \"too_small\":\n return { message: `Хамгийн багадаа ${issue.minimum} байх ёстой` };\n \n case \"too_big\":\n return { message: `Хамгийн ихдээ ${issue.maximum} байх ёстой` };\n \n default:\n return { message: ctx.defaultError };\n }\n};\n\n// Export the error map for use in individual schemas\nexport { customErrorMap };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aws-service-stack",
3
- "version": "0.18.308",
3
+ "version": "0.18.310",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "chinggis.systems",