aws-service-stack 0.18.444 → 0.18.445

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 (147) hide show
  1. package/dist/_examples/controller/local-task-controller.d.ts.map +1 -1
  2. package/dist/_examples/controller/local-task-controller.js +1 -1
  3. package/dist/_examples/controller/local-task-controller.js.map +1 -1
  4. package/dist/_examples/controller/order/order-config.d.ts.map +1 -1
  5. package/dist/_examples/controller/order/order-config.js.map +1 -1
  6. package/dist/_examples/controller/order/order-controller-cron.d.ts.map +1 -1
  7. package/dist/_examples/controller/order/order-controller-cron.js.map +1 -1
  8. package/dist/_examples/controller/order/order-controller-streamer.d.ts.map +1 -1
  9. package/dist/_examples/controller/order/order-controller-streamer.js.map +1 -1
  10. package/dist/_examples/controller/order/order-controller.d.ts.map +1 -1
  11. package/dist/_examples/controller/order/order-controller.js.map +1 -1
  12. package/dist/_examples/controller/order/order-cron.d.ts.map +1 -1
  13. package/dist/_examples/controller/order/order-cron.js.map +1 -1
  14. package/dist/_examples/controller/order/order-crud.d.ts.map +1 -1
  15. package/dist/_examples/controller/order/order-crud.js.map +1 -1
  16. package/dist/_examples/controller/order/order-streamer.d.ts.map +1 -1
  17. package/dist/_examples/controller/order/order-streamer.js.map +1 -1
  18. package/dist/_examples/controller/order-item/order-item-config.d.ts.map +1 -1
  19. package/dist/_examples/controller/order-item/order-item-config.js.map +1 -1
  20. package/dist/_examples/controller/order-item/order-item-controller-streamer.d.ts.map +1 -1
  21. package/dist/_examples/controller/order-item/order-item-controller-streamer.js.map +1 -1
  22. package/dist/_examples/controller/order-item/order-item-controller.d.ts.map +1 -1
  23. package/dist/_examples/controller/order-item/order-item-controller.js.map +1 -1
  24. package/dist/_examples/controller/order-item/order-item-crud.d.ts.map +1 -1
  25. package/dist/_examples/controller/order-item/order-item-crud.js.map +1 -1
  26. package/dist/_examples/controller/order-item/order-item-streamer.d.ts.map +1 -1
  27. package/dist/_examples/controller/order-item/order-item-streamer.js.map +1 -1
  28. package/dist/_examples/controller/profile/profile-crud-simple.d.ts.map +1 -1
  29. package/dist/_examples/controller/profile/profile-crud-simple.js.map +1 -1
  30. package/dist/_examples/controller/profile/profile-crud.d.ts.map +1 -1
  31. package/dist/_examples/controller/profile/profile-crud.js.map +1 -1
  32. package/dist/_examples/controller/profile/profile.config.d.ts.map +1 -1
  33. package/dist/_examples/controller/profile/profile.config.js.map +1 -1
  34. package/dist/_examples/controller/profile/profile.controller.d.ts.map +1 -1
  35. package/dist/_examples/controller/profile/profile.controller.js.map +1 -1
  36. package/dist/_examples/model-shared/example.model.js.map +1 -1
  37. package/dist/_examples/model-shared/order.model.js.map +1 -1
  38. package/dist/_examples/repositories/order/order-db.repo.js.map +1 -1
  39. package/dist/_examples/repositories/order/order-es.repo.js.map +1 -1
  40. package/dist/_examples/repositories/order/order-item-db.repo.js.map +1 -1
  41. package/dist/_examples/repositories/order/order-item-es.repo.js.map +1 -1
  42. package/dist/_examples/repositories/profile/profile-repo-db.js.map +1 -1
  43. package/dist/_examples/service/order/order-item-service-stream.d.ts.map +1 -1
  44. package/dist/_examples/service/order/order-item-service-stream.js.map +1 -1
  45. package/dist/_examples/service/order/order-item-service.d.ts.map +1 -1
  46. package/dist/_examples/service/order/order-item-service.js.map +1 -1
  47. package/dist/_examples/service/order/order-service-stream.d.ts.map +1 -1
  48. package/dist/_examples/service/order/order-service-stream.js.map +1 -1
  49. package/dist/_examples/service/order/order-service.d.ts.map +1 -1
  50. package/dist/_examples/service/order/order-service.js.map +1 -1
  51. package/dist/_examples/service/profile-service.d.ts.map +1 -1
  52. package/dist/_examples/service/profile-service.js.map +1 -1
  53. package/dist/controller/base-controller.d.ts.map +1 -1
  54. package/dist/controller/base-controller.js.map +1 -1
  55. package/dist/controller/controller-api.d.ts.map +1 -1
  56. package/dist/controller/controller-api.js.map +1 -1
  57. package/dist/controller/controller-request.d.ts +3 -3
  58. package/dist/controller/controller-request.d.ts.map +1 -1
  59. package/dist/controller/controller-request.js.map +1 -1
  60. package/dist/controller/controller-role.d.ts.map +1 -1
  61. package/dist/controller/controller-role.js.map +1 -1
  62. package/dist/controller/controller-stream.d.ts.map +1 -1
  63. package/dist/controller/controller-stream.js.map +1 -1
  64. package/dist/exception/errors.d.ts.map +1 -1
  65. package/dist/exception/errors.js.map +1 -1
  66. package/dist/exception/exception-handler.d.ts.map +1 -1
  67. package/dist/exception/exception-handler.js.map +1 -1
  68. package/dist/function/cognito/cognito.function.js.map +1 -1
  69. package/dist/function/logger.d.ts.map +1 -1
  70. package/dist/function/s3/s3.function.js.map +1 -1
  71. package/dist/model/base.config.d.ts.map +1 -1
  72. package/dist/model/base.config.js.map +1 -1
  73. package/dist/model/base.model.js.map +1 -1
  74. package/dist/model/cognito-user.model.js.map +1 -1
  75. package/dist/model/dynamodb.model.d.ts.map +1 -1
  76. package/dist/model/dynamodb.model.js.map +1 -1
  77. package/dist/model/filter.model.js.map +1 -1
  78. package/dist/model/http.model.js.map +1 -1
  79. package/dist/model/validation.model.js.map +1 -1
  80. package/dist/provider/apigateway.d.ts.map +1 -1
  81. package/dist/provider/apigateway.js.map +1 -1
  82. package/dist/provider/dynamodb.js.map +1 -1
  83. package/dist/provider/opensearch.d.ts.map +1 -1
  84. package/dist/provider/opensearch.js.map +1 -1
  85. package/dist/repositories/base-db.repo.d.ts.map +1 -1
  86. package/dist/repositories/base-db.repo.js.map +1 -1
  87. package/dist/repositories/base-es.repo.d.ts.map +1 -1
  88. package/dist/repositories/base-es.repo.js.map +1 -1
  89. package/dist/service/api.services/api.service.d.ts.map +1 -1
  90. package/dist/service/api.services/api.service.js.map +1 -1
  91. package/dist/service/auth.service.d.ts.map +1 -1
  92. package/dist/service/auth.service.js.map +1 -1
  93. package/dist/service/base.service.d.ts.map +1 -1
  94. package/dist/service/base.service.js.map +1 -1
  95. package/dist/service/crud-operations.d.ts +8 -2
  96. package/dist/service/crud-operations.d.ts.map +1 -1
  97. package/dist/service/crud-operations.js +24 -5
  98. package/dist/service/crud-operations.js.map +1 -1
  99. package/dist/service/crud.service.d.ts +1 -0
  100. package/dist/service/crud.service.d.ts.map +1 -1
  101. package/dist/service/crud.service.interface.d.ts +5 -0
  102. package/dist/service/crud.service.interface.d.ts.map +1 -1
  103. package/dist/service/crud.service.interface.js.map +1 -1
  104. package/dist/service/crud.service.js +3 -0
  105. package/dist/service/crud.service.js.map +1 -1
  106. package/dist/service/key-aws.services.d.ts.map +1 -1
  107. package/dist/service/key-aws.services.js.map +1 -1
  108. package/dist/service/permission.cache.d.ts.map +1 -1
  109. package/dist/service/permission.cache.js.map +1 -1
  110. package/dist/service/permission.repo.d.ts.map +1 -1
  111. package/dist/service/permission.repo.js.map +1 -1
  112. package/dist/service/permission.service.d.ts.map +1 -1
  113. package/dist/service/permission.service.js.map +1 -1
  114. package/dist/service/socket.service.d.ts.map +1 -1
  115. package/dist/service/socket.service.js.map +1 -1
  116. package/dist/service/stream.service.d.ts.map +1 -1
  117. package/dist/service/stream.service.js.map +1 -1
  118. package/dist/utils/array.util.d.ts.map +1 -1
  119. package/dist/utils/array.util.js.map +1 -1
  120. package/dist/utils/auth.util.js.map +1 -1
  121. package/dist/utils/data.util.d.ts.map +1 -1
  122. package/dist/utils/data.util.js.map +1 -1
  123. package/dist/utils/date.util.js.map +1 -1
  124. package/dist/utils/dynamodb.utils.d.ts.map +1 -1
  125. package/dist/utils/dynamodb.utils.js.map +1 -1
  126. package/dist/utils/env.util.d.ts.map +1 -1
  127. package/dist/utils/env.util.js.map +1 -1
  128. package/dist/utils/http/http-request.d.ts.map +1 -1
  129. package/dist/utils/http/http-request.js.map +1 -1
  130. package/dist/utils/http/http.util.d.ts.map +1 -1
  131. package/dist/utils/http/http.util.js.map +1 -1
  132. package/dist/utils/json.util.js.map +1 -1
  133. package/dist/utils/opensearch/opensearch.parser.aggs.js.map +1 -1
  134. package/dist/utils/opensearch/opensearch.parser.d.ts.map +1 -1
  135. package/dist/utils/opensearch/opensearch.parser.js.map +1 -1
  136. package/dist/utils/opensearch/opensearch.parser.keyword.js.map +1 -1
  137. package/dist/utils/opensearch/opensearch.parser.sort.js.map +1 -1
  138. package/dist/utils/opensearch/opensearch.parser.utils.js.map +1 -1
  139. package/dist/utils/opensearch/opensearch.transform.js.map +1 -1
  140. package/dist/utils/opensearch.utils.js.map +1 -1
  141. package/dist/utils/reflection.util.d.ts.map +1 -1
  142. package/dist/utils/reflection.util.js.map +1 -1
  143. package/dist/utils/string.util.d.ts.map +1 -1
  144. package/dist/utils/string.util.js.map +1 -1
  145. package/dist/utils/validation.util.d.ts.map +1 -1
  146. package/dist/utils/validation.util.js.map +1 -1
  147. package/package.json +25 -27
@@ -1 +1 @@
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\nexport function calculatePagination(filter: Filter): { from: number; size: number } {\n let queryFrom = 0;\n let querySize = 100;\n const parsedSize = Number(filter.size);\n const parsedPage = Number(filter.page);\n\n if (Number.isFinite(parsedSize) && parsedSize > 0) {\n querySize = parsedSize;\n delete filter.size;\n }\n if (Number.isFinite(parsedPage) && parsedPage > 0) {\n queryFrom = (parsedPage - 1) * querySize;\n delete filter.page;\n }\n\n return { from: queryFrom, size: querySize > 250 ? 250 : 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 const filterObject = Object.fromEntries(params.entries()) as Filter;\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: string[] | undefined = undefined;\n const fieldsInclude: string[] | undefined = undefined;\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 } = calculatePagination(filterObject);\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"]}
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\nexport function calculatePagination(filter: Filter): { from: number; size: number } {\n let queryFrom = 0;\n let querySize = 100;\n const parsedSize = Number(filter.size);\n const parsedPage = Number(filter.page);\n\n if (Number.isFinite(parsedSize) && parsedSize > 0) {\n querySize = parsedSize;\n delete filter.size;\n }\n if (Number.isFinite(parsedPage) && parsedPage > 0) {\n queryFrom = (parsedPage - 1) * querySize;\n delete filter.page;\n }\n\n return { from: queryFrom, size: querySize > 250 ? 250 : 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 const filterObject = Object.fromEntries(params.entries()) as Filter;\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: string[] | undefined = undefined;\n const fieldsInclude: string[] | undefined = undefined;\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 } = calculatePagination(filterObject);\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.util.d.ts","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAiB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInG,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,WAAW,MAAM,KAAG,OAEzD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAGnF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6CzD;AAoDD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CA+C3F;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,uBAS5E;AAKD,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,EAAE,WAAW,MAAM,EAAE,KAAG,GAehE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,EAAE,eAAe,MAAM,EAAE,aAAa,MAAM,KAAG,GAGnF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CA8BpH;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAU5C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAoB/C;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,WAAW,GACvB,YAAY,EAAE,CAShB;AAiJD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAU7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA0BvD"}
1
+ {"version":3,"file":"reflection.util.d.ts","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAiB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInG,eAAO,MAAM,QAAQ,QAAS,MAAM,aAAa,MAAM,KAAG,OAEzD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAGnF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6CzD;AAoDD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CA+C3F;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,uBAS5E;AAKD,eAAO,MAAM,aAAa,WAAY,GAAG,aAAa,MAAM,EAAE,KAAG,GAehE,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,GAAG,iBAAiB,MAAM,eAAe,MAAM,KAAG,GAGnF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CA8BpH;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAU5C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAoB/C;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,WAAW,GACvB,YAAY,EAAE,CAShB;AAiJD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAU7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA0BvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.util.js","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangedField, DynamoIndexMap, Filter, InclusionMode, TraceChange } from \"@chinggis/types\";\nimport { parseFilter } from \"./http/http.util\";\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\nfunction handleOperatorRangeFilters(filter: Filter): Filter {\n const rangeFilters = [...(filter.rangeFilters ?? [])];\n const operatorRegex = /^(.*)__(gte|lte|gt|lt)$/;\n const rangeFieldMap = new Map<\n string,\n {\n fieldName: string;\n minValue?: any;\n maxValue?: any;\n minExclude?: boolean;\n maxExclude?: boolean;\n }\n >();\n\n for (const existing of rangeFilters) {\n rangeFieldMap.set(existing.fieldName, { ...existing });\n }\n\n for (const [key, value] of Object.entries(filter)) {\n const match = operatorRegex.exec(key);\n if (!match) continue;\n\n const [, fieldName, operator] = match;\n const rangeFilter = rangeFieldMap.get(fieldName) ?? { fieldName };\n\n if (operator === \"gte\") {\n rangeFilter.minValue = value;\n rangeFilter.minExclude = false;\n } else if (operator === \"gt\") {\n rangeFilter.minValue = value;\n rangeFilter.minExclude = true;\n } else if (operator === \"lte\") {\n rangeFilter.maxValue = value;\n rangeFilter.maxExclude = false;\n } else if (operator === \"lt\") {\n rangeFilter.maxValue = value;\n rangeFilter.maxExclude = true;\n }\n\n rangeFieldMap.set(fieldName, rangeFilter);\n delete filter[key];\n }\n\n if (rangeFieldMap.size > 0) {\n filter.rangeFilters = Array.from(rangeFieldMap.values());\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 result = handleOperatorRangeFilters(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, sortKeyField }] of indexMap.entries()) {\n const allFieldsPresent = rFields.every((field) => Object.hasOwn(filter, field));\n if (!allFieldsPresent) continue;\n\n const hasSortField = !!sortKeyField && Object.hasOwn(filter, sortKeyField);\n const bestIndexInfo = bestMatch ? indexMap.get(bestMatch.indexName) : undefined;\n const bestHasSortField = !!bestIndexInfo?.sortKeyField && Object.hasOwn(filter, bestIndexInfo.sortKeyField);\n\n if (\n !bestMatch ||\n rFields.length > bestMatch.rFields.length ||\n (rFields.length === bestMatch.rFields.length && hasSortField && !bestHasSortField)\n ) {\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 path of includes) {\n const value = getByPath(item, path);\n if (value !== undefined) {\n setByPath(included, path, value);\n }\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\n for (const path of excludes) {\n deleteByPath(cloned, path);\n }\n\n return cloned;\n }\n\n return item;\n });\n}\n\nfunction getByPath(obj: any, path: string) {\n return path.split(\".\").reduce((acc, key) => acc?.[key], obj);\n}\n\nfunction setByPath(obj: any, path: string, value: any) {\n const keys = path.split(\".\");\n let current = obj;\n\n keys.forEach((key, index) => {\n if (index === keys.length - 1) {\n current[key] = value;\n } else {\n current[key] ??= {};\n current = current[key];\n }\n });\n}\n\nfunction deleteByPath(obj: any, path: string) {\n const keys = path.split(\".\");\n const lastKey = keys.pop();\n const parent = keys.reduce((acc, key) => acc?.[key], obj);\n\n if (parent && lastKey) {\n delete parent[lastKey];\n }\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 console.log(\"flattened\", flattened);\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: JSON.stringify(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: JSON.stringify(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\n/**\n * Returns a shallow copy of the object, removing any keys with:\n * - undefined\n * - null\n * - empty objects\n * - empty arrays\n *\n * Only the top-level keys are processed; nested objects are not cleaned.\n *\n * @template T\n * @param {T} obj - The input object to clean\n * @returns {Partial<T>} A new object containing only meaningful values\n */\nexport function pickDefined<T extends Record<string, any>>(obj: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) =>\n value !== undefined &&\n value !== null &&\n !(typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0) &&\n !(Array.isArray(value) && value.length === 0),\n ),\n ) as Partial<T>;\n}\n\n/**\n * Recursively removes undefined, null, empty objects, and empty arrays\n * from a nested object or array structure.\n *\n * This function returns a new object or array where all irrelevant or empty\n * fields have been stripped. Primitive values (numbers, strings, booleans)\n * are preserved.\n *\n * @template T\n * @param {T} value - The object, array, or primitive value to clean\n * @returns {Partial<T> | undefined} A cleaned version of the input or undefined if empty\n */\nexport function pickDefinedDeep<T>(value: T): Partial<T> {\n if (value === undefined || value === null) {\n return undefined as any;\n }\n\n if (Array.isArray(value)) {\n const cleaned = value.map(pickDefinedDeep).filter((v) => v !== undefined);\n\n return cleaned.length > 0 ? (cleaned as any) : undefined;\n }\n\n if (typeof value === \"object\") {\n const result: Record<string, any> = {};\n\n for (const [key, val] of Object.entries(value)) {\n const cleaned = pickDefinedDeep(val);\n if (cleaned !== undefined) {\n result[key] = cleaned;\n }\n }\n\n return Object.keys(result).length > 0 ? (result as Partial<T>) : undefined;\n }\n\n // primitive (number, boolean, string, etc.)\n return value as Partial<T>;\n}\n"]}
1
+ {"version":3,"file":"reflection.util.js","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangedField, DynamoIndexMap, Filter, InclusionMode, TraceChange } from \"@chinggis/types\";\nimport { parseFilter } from \"./http/http.util\";\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\nfunction handleOperatorRangeFilters(filter: Filter): Filter {\n const rangeFilters = [...(filter.rangeFilters ?? [])];\n const operatorRegex = /^(.*)__(gte|lte|gt|lt)$/;\n const rangeFieldMap = new Map<\n string,\n {\n fieldName: string;\n minValue?: any;\n maxValue?: any;\n minExclude?: boolean;\n maxExclude?: boolean;\n }\n >();\n\n for (const existing of rangeFilters) {\n rangeFieldMap.set(existing.fieldName, { ...existing });\n }\n\n for (const [key, value] of Object.entries(filter)) {\n const match = operatorRegex.exec(key);\n if (!match) continue;\n\n const [, fieldName, operator] = match;\n const rangeFilter = rangeFieldMap.get(fieldName) ?? { fieldName };\n\n if (operator === \"gte\") {\n rangeFilter.minValue = value;\n rangeFilter.minExclude = false;\n } else if (operator === \"gt\") {\n rangeFilter.minValue = value;\n rangeFilter.minExclude = true;\n } else if (operator === \"lte\") {\n rangeFilter.maxValue = value;\n rangeFilter.maxExclude = false;\n } else if (operator === \"lt\") {\n rangeFilter.maxValue = value;\n rangeFilter.maxExclude = true;\n }\n\n rangeFieldMap.set(fieldName, rangeFilter);\n delete filter[key];\n }\n\n if (rangeFieldMap.size > 0) {\n filter.rangeFilters = Array.from(rangeFieldMap.values());\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 result = handleOperatorRangeFilters(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, sortKeyField }] of indexMap.entries()) {\n const allFieldsPresent = rFields.every((field) => Object.hasOwn(filter, field));\n if (!allFieldsPresent) continue;\n\n const hasSortField = !!sortKeyField && Object.hasOwn(filter, sortKeyField);\n const bestIndexInfo = bestMatch ? indexMap.get(bestMatch.indexName) : undefined;\n const bestHasSortField = !!bestIndexInfo?.sortKeyField && Object.hasOwn(filter, bestIndexInfo.sortKeyField);\n\n if (\n !bestMatch ||\n rFields.length > bestMatch.rFields.length ||\n (rFields.length === bestMatch.rFields.length && hasSortField && !bestHasSortField)\n ) {\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 path of includes) {\n const value = getByPath(item, path);\n if (value !== undefined) {\n setByPath(included, path, value);\n }\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\n for (const path of excludes) {\n deleteByPath(cloned, path);\n }\n\n return cloned;\n }\n\n return item;\n });\n}\n\nfunction getByPath(obj: any, path: string) {\n return path.split(\".\").reduce((acc, key) => acc?.[key], obj);\n}\n\nfunction setByPath(obj: any, path: string, value: any) {\n const keys = path.split(\".\");\n let current = obj;\n\n keys.forEach((key, index) => {\n if (index === keys.length - 1) {\n current[key] = value;\n } else {\n current[key] ??= {};\n current = current[key];\n }\n });\n}\n\nfunction deleteByPath(obj: any, path: string) {\n const keys = path.split(\".\");\n const lastKey = keys.pop();\n const parent = keys.reduce((acc, key) => acc?.[key], obj);\n\n if (parent && lastKey) {\n delete parent[lastKey];\n }\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 console.log(\"flattened\", flattened);\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: JSON.stringify(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: JSON.stringify(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\n/**\n * Returns a shallow copy of the object, removing any keys with:\n * - undefined\n * - null\n * - empty objects\n * - empty arrays\n *\n * Only the top-level keys are processed; nested objects are not cleaned.\n *\n * @template T\n * @param {T} obj - The input object to clean\n * @returns {Partial<T>} A new object containing only meaningful values\n */\nexport function pickDefined<T extends Record<string, any>>(obj: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) =>\n value !== undefined &&\n value !== null &&\n !(typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0) &&\n !(Array.isArray(value) && value.length === 0),\n ),\n ) as Partial<T>;\n}\n\n/**\n * Recursively removes undefined, null, empty objects, and empty arrays\n * from a nested object or array structure.\n *\n * This function returns a new object or array where all irrelevant or empty\n * fields have been stripped. Primitive values (numbers, strings, booleans)\n * are preserved.\n *\n * @template T\n * @param {T} value - The object, array, or primitive value to clean\n * @returns {Partial<T> | undefined} A cleaned version of the input or undefined if empty\n */\nexport function pickDefinedDeep<T>(value: T): Partial<T> {\n if (value === undefined || value === null) {\n return undefined as any;\n }\n\n if (Array.isArray(value)) {\n const cleaned = value.map(pickDefinedDeep).filter((v) => v !== undefined);\n\n return cleaned.length > 0 ? (cleaned as any) : undefined;\n }\n\n if (typeof value === \"object\") {\n const result: Record<string, any> = {};\n\n for (const [key, val] of Object.entries(value)) {\n const cleaned = pickDefinedDeep(val);\n if (cleaned !== undefined) {\n result[key] = cleaned;\n }\n }\n\n return Object.keys(result).length > 0 ? (result as Partial<T>) : undefined;\n }\n\n // primitive (number, boolean, string, etc.)\n return value as Partial<T>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"string.util.d.ts","sourceRoot":"","sources":["../../src/utils/string.util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,WAG1C,CAAC;AACF,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,EAAE,CAE/D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAgB3F"}
1
+ {"version":3,"file":"string.util.d.ts","sourceRoot":"","sources":["../../src/utils/string.util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,eAAe,QAAS,MAAM,WAG1C,CAAC;AACF,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,EAAE,CAE/D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAgB3F"}
@@ -1 +1 @@
1
- {"version":3,"file":"string.util.js","sourceRoot":"","sources":["../../src/utils/string.util.ts"],"names":[],"mappings":";;;AAKA,0BAEC;AAED,wCAEC;AAED,4BAEC;AAMD,sDAgBC;AArCY,QAAA,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE;IAC7C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,mBAAW,OAAO,mBAAW,KAAK,EAAE,GAAG,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B;AACF,SAAgB,OAAO,CAAI,GAA+B;IACxD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,cAAc,CAAC,GAAa;IAC1C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAwB;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,KAAa,EAAE,KAAa,EAAE,SAAS,GAAG,GAAG;IACjF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC;IAE1C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,CAAC;IAEtE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrG,GAAG,EAAE,CAAC;IACR,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,gBAAgB,CAAC;IAE7C,OAAO,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AACxF,CAAC","sourcesContent":["export const specialChar = \"/$\\\\s\";\nexport const trimSpecialChar = (str: string) => {\n const regex = new RegExp(`^[${specialChar}]+|[${specialChar}]+$`, \"g\");\n return str.replace(regex, \"\");\n};\nexport function toArray<T>(val: T | T[] | undefined | null): T[] {\n return val == null ? [] : Array.isArray(val) ? val : [val];\n}\n\nexport function normalizeLower(arr: string[]): string[] {\n return arr.map((s) => s.toLowerCase());\n}\n\nexport function getFirst(value: string | string[]): string {\n return Array.isArray(value) ? value[0] : value;\n}\n\n/**\n * Finds the changed snippet between two long texts.\n * Shows only the differing middle part, trimmed to a max length.\n */\nexport function extractChangedSnippet(textA: string, textB: string, maxLength = 100): string {\n if (!textA && !textB) return \"\";\n if (textA === textB) return \"(no change)\";\n\n let start = 0;\n while (start < textA.length && textA[start] === textB[start]) start++;\n\n let end = 0;\n while (end < textA.length - start && textA[textA.length - 1 - end] === textB[textB.length - 1 - end]) {\n end++;\n }\n\n const snippet = textA.substring(start, textA.length - end);\n if (!snippet.trim()) return \"(minor change)\";\n\n return snippet.length > maxLength ? snippet.substring(0, maxLength) + \"...\" : snippet;\n}\n"]}
1
+ {"version":3,"file":"string.util.js","sourceRoot":"","sources":["../../src/utils/string.util.ts"],"names":[],"mappings":";;;;;;;AAAa,QAAA,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE;IAC7C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,QAAA,WAAW,OAAO,QAAA,WAAW,KAAK,EAAE,GAAG,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC;AAHW,QAAA,eAAe,GAAf,eAAe,CAG1B;AACF,iBAA2B,GAA+B;IACxD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,wBAA+B,GAAa;IAC1C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,kBAAyB,KAAwB;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,+BAAsC,KAAa,EAAE,KAAa,EAAE,SAAS,GAAG,GAAG;IACjF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC;IAE1C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,CAAC;IAEtE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrG,GAAG,EAAE,CAAC;IACR,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,gBAAgB,CAAC;IAE7C,OAAO,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AACxF,CAAC","sourcesContent":["export const specialChar = \"/$\\\\s\";\nexport const trimSpecialChar = (str: string) => {\n const regex = new RegExp(`^[${specialChar}]+|[${specialChar}]+$`, \"g\");\n return str.replace(regex, \"\");\n};\nexport function toArray<T>(val: T | T[] | undefined | null): T[] {\n return val == null ? [] : Array.isArray(val) ? val : [val];\n}\n\nexport function normalizeLower(arr: string[]): string[] {\n return arr.map((s) => s.toLowerCase());\n}\n\nexport function getFirst(value: string | string[]): string {\n return Array.isArray(value) ? value[0] : value;\n}\n\n/**\n * Finds the changed snippet between two long texts.\n * Shows only the differing middle part, trimmed to a max length.\n */\nexport function extractChangedSnippet(textA: string, textB: string, maxLength = 100): string {\n if (!textA && !textB) return \"\";\n if (textA === textB) return \"(no change)\";\n\n let start = 0;\n while (start < textA.length && textA[start] === textB[start]) start++;\n\n let end = 0;\n while (end < textA.length - start && textA[textA.length - 1 - end] === textB[textB.length - 1 - end]) {\n end++;\n }\n\n const snippet = textA.substring(start, textA.length - end);\n if (!snippet.trim()) return \"(minor change)\";\n\n return snippet.length > maxLength ? snippet.substring(0, maxLength) + \"...\" : snippet;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.util.d.ts","sourceRoot":"","sources":["../../src/utils/validation.util.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,CAiB9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO;;;;IAqB1C;AAGD,QAAA,MAAM,cAAc,GAAI,OAAO,GAAG,EAAE,KAAK,GAAG;;CAoB3C,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"validation.util.d.ts","sourceRoot":"","sources":["../../src/utils/validation.util.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,CAiB9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO;;;;IAqB1C;AAGD,QAAA,MAAM,cAAc,UAAW,GAAG,OAAO,GAAG;;CAoB3C,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -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;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"]}
1
+ {"version":3,"file":"validation.util.js","sourceRoot":"","sources":["../../src/utils/validation.util.ts"],"names":[],"mappings":";;;;;AAAA,6BAAkC;AAClC,6BAAkD;AAElD;;;;;;GAMG;AACH,4BAAmC,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,sBAA6B,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;QAGO,cAAc","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,14 +1,12 @@
1
1
  {
2
2
  "name": "aws-service-stack",
3
- "version": "0.18.444",
3
+ "version": "0.18.445",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "chinggis.systems",
7
7
  "license": "MIT",
8
8
  "description": "chinggis core backend package",
9
- "files": [
10
- "dist"
11
- ],
9
+ "files": ["dist"],
12
10
  "publishConfig": {
13
11
  "registry": "https://registry.npmjs.org/",
14
12
  "access": "public"
@@ -30,7 +28,11 @@
30
28
  },
31
29
  "scripts": {
32
30
  "check": "tsc --noEmit",
33
- "test": "jest",
31
+ "check:tests": "tsc -p src/__tests__/tsconfig.json",
32
+ "test": "vitest run",
33
+ "lint": "biome lint .",
34
+ "lint:ci": "biome ci .",
35
+ "format": "biome format --write .",
34
36
  "build": "tsc && tsc-alias",
35
37
  "release": "npm version patch --no-git-tag && npm run build"
36
38
  },
@@ -38,34 +40,30 @@
38
40
  "reflect-metadata": "^0.2.2"
39
41
  },
40
42
  "peerDependencies": {
41
- "@aws-sdk/client-apigatewaymanagementapi": "^3.1030.0",
42
- "@aws-sdk/client-cognito-identity-provider": "^3.1030.0",
43
- "@aws-sdk/client-dynamodb": "^3.1030.0",
44
- "@aws-sdk/client-secrets-manager": "^3.1030.0",
45
- "@aws-sdk/credential-provider-node": "^3.972.30",
46
- "@aws-sdk/lib-dynamodb": "^3.1030.0",
47
- "@aws-sdk/util-dynamodb": "^3.996.2",
48
- "@opensearch-project/opensearch": "^3.5.1",
49
- "axios": "^1.15.0",
50
- "dayjs": "^1.11.20",
43
+ "@aws-sdk/client-apigatewaymanagementapi": "^3.1111.0",
44
+ "@aws-sdk/client-cognito-identity-provider": "^3.1111.0",
45
+ "@aws-sdk/client-dynamodb": "^3.1111.0",
46
+ "@aws-sdk/client-secrets-manager": "^3.1111.0",
47
+ "@aws-sdk/credential-provider-node": "^3.972.80",
48
+ "@aws-sdk/lib-dynamodb": "^3.1111.0",
49
+ "@aws-sdk/util-dynamodb": "^3.996.9",
50
+ "@opensearch-project/opensearch": "^3.6.0",
51
+ "axios": "^1.19.0",
52
+ "dayjs": "^1.11.21",
51
53
  "elastic-builder": "^4.1.0",
52
54
  "typedi": "0.10.0",
53
55
  "yup": "^1.7.1",
54
56
  "zod": "^4.3.6"
55
57
  },
56
58
  "devDependencies": {
57
- "@types/aws-lambda": "^8.10.161",
58
- "@types/jest": "^30.0.0",
59
- "@types/node": "^24.10.0",
60
- "eslint": "^10.2.1",
61
- "@typescript-eslint/eslint-plugin": "^8.59.0",
62
- "@typescript-eslint/parser": "^8.59.0",
63
- "jest": "^30.3.0",
64
- "ts-jest": "^29.4.9",
59
+ "@biomejs/biome": "^2.5.8",
60
+ "@types/aws-lambda": "^8.10.162",
61
+ "@types/node": "^26.2.0",
62
+ "@vitest/coverage-v8": "^4.1.10",
65
63
  "ts-node": "^10.9.2",
66
- "tsc-alias": "^1.8.16",
67
- "typescript": "^6.0.3",
68
- "prettier": "^3.8.2",
69
- "typescript-transform-paths": "^3.5.6"
64
+ "tsc-alias": "^1.9.1",
65
+ "typescript": "^7.0.2",
66
+ "typescript-transform-paths": "^4.0.0",
67
+ "vitest": "^4.1.10"
70
68
  }
71
69
  }