aws-service-stack 0.18.430 → 0.18.432

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 (60) hide show
  1. package/dist/_examples/model-shared/order.model.d.ts +7 -7
  2. package/dist/_examples/model-shared/order.model.d.ts.map +1 -1
  3. package/dist/_examples/model-shared/order.model.js.map +1 -1
  4. package/dist/_examples/repositories/order/order-item-es.repo.d.ts +8 -0
  5. package/dist/_examples/repositories/order/order-item-es.repo.d.ts.map +1 -0
  6. package/dist/_examples/repositories/order/order-item-es.repo.interface.d.ts +5 -0
  7. package/dist/_examples/repositories/order/order-item-es.repo.interface.d.ts.map +1 -0
  8. package/dist/_examples/repositories/order/order-item-es.repo.interface.js +3 -0
  9. package/dist/_examples/repositories/order/order-item-es.repo.interface.js.map +1 -0
  10. package/dist/_examples/repositories/order/order-item-es.repo.js +20 -0
  11. package/dist/_examples/repositories/order/order-item-es.repo.js.map +1 -0
  12. package/dist/_examples/service/order/order-item-service-stream.d.ts.map +1 -1
  13. package/dist/_examples/service/order/order-item-service-stream.js +3 -2
  14. package/dist/_examples/service/order/order-item-service-stream.js.map +1 -1
  15. package/dist/_examples/service/order/order-item-service.d.ts +3 -1
  16. package/dist/_examples/service/order/order-item-service.d.ts.map +1 -1
  17. package/dist/_examples/service/order/order-item-service.js +4 -2
  18. package/dist/_examples/service/order/order-item-service.js.map +1 -1
  19. package/dist/_examples/service/order/order-service-stream.d.ts.map +1 -1
  20. package/dist/_examples/service/order/order-service-stream.js +3 -2
  21. package/dist/_examples/service/order/order-service-stream.js.map +1 -1
  22. package/dist/_examples/service/order/order-service.d.ts.map +1 -1
  23. package/dist/_examples/service/order/order-service.js +4 -3
  24. package/dist/_examples/service/order/order-service.js.map +1 -1
  25. package/dist/function/cognito/cognito.function.d.ts.map +1 -1
  26. package/dist/function/cognito/cognito.function.js +10 -9
  27. package/dist/function/cognito/cognito.function.js.map +1 -1
  28. package/dist/model/base.model.d.ts +10 -12
  29. package/dist/model/base.model.d.ts.map +1 -1
  30. package/dist/model/base.model.js.map +1 -1
  31. package/dist/model/cognito-user.model.d.ts +3 -3
  32. package/dist/model/cognito-user.model.d.ts.map +1 -1
  33. package/dist/model/cognito-user.model.js.map +1 -1
  34. package/dist/model/date-string.model.d.ts +10 -0
  35. package/dist/model/date-string.model.d.ts.map +1 -0
  36. package/dist/model/date-string.model.js +3 -0
  37. package/dist/model/date-string.model.js.map +1 -0
  38. package/dist/model/index.d.ts +1 -0
  39. package/dist/model/index.d.ts.map +1 -1
  40. package/dist/model/index.js +1 -0
  41. package/dist/model/index.js.map +1 -1
  42. package/dist/service/base.service.d.ts.map +1 -1
  43. package/dist/service/base.service.js +17 -7
  44. package/dist/service/base.service.js.map +1 -1
  45. package/dist/service/crud-operations.d.ts +1 -1
  46. package/dist/service/crud-operations.d.ts.map +1 -1
  47. package/dist/service/crud-operations.js +11 -11
  48. package/dist/service/crud-operations.js.map +1 -1
  49. package/dist/service/permission.repo.d.ts.map +1 -1
  50. package/dist/service/permission.repo.js +3 -2
  51. package/dist/service/permission.repo.js.map +1 -1
  52. package/dist/utils/date.util.d.ts +17 -4
  53. package/dist/utils/date.util.d.ts.map +1 -1
  54. package/dist/utils/date.util.js +83 -5
  55. package/dist/utils/date.util.js.map +1 -1
  56. package/dist/utils/reflection.util.d.ts +1 -11
  57. package/dist/utils/reflection.util.d.ts.map +1 -1
  58. package/dist/utils/reflection.util.js +3 -26
  59. package/dist/utils/reflection.util.js.map +1 -1
  60. package/package.json +5 -5
@@ -88,7 +88,7 @@ class DynamoWriteOperations {
88
88
  fields.push(fieldName);
89
89
  if (fields && fields.length > 0)
90
90
  entity = (0, index_1.removeFields)([entity], fields)[0];
91
- if (!entity || !entity[fieldName])
91
+ if (!entity?.[fieldName])
92
92
  throw new exception_1.ErrorHttp(exception_1.HTTP.BAD_REQUEST, `id required`);
93
93
  const item = await this.repoDB.findById(entity[fieldName]);
94
94
  if (!entity || !item)
@@ -115,7 +115,7 @@ class DynamoWriteOperations {
115
115
  async remove(entityId, requestUser) {
116
116
  if (!entityId)
117
117
  throw new Error("Entity id required");
118
- if (requestUser && requestUser.isAdmin)
118
+ if (requestUser?.isAdmin)
119
119
  return this.repoDB.delete(entityId);
120
120
  const entity = await this.repoDB.findById(entityId);
121
121
  if (!entity)
@@ -170,7 +170,7 @@ class DynamoWriteOperations {
170
170
  setSystemData(itemNew, action, requestUser, itemOld) {
171
171
  if (!action || action === index_1.Action.DELETE || action === index_1.Action.READ)
172
172
  return itemNew;
173
- const date = (0, dayjs_1.default)().toISOString();
173
+ const date = (0, index_1.formatDateTimeStr)((0, dayjs_1.default)());
174
174
  const user = this.extractUser(requestUser);
175
175
  switch (action) {
176
176
  case index_1.Action.CREATE:
@@ -195,15 +195,15 @@ class DynamoWriteOperations {
195
195
  * Populates system fields that are required when creating an entity.
196
196
  */
197
197
  handleCreate(entity, user, date) {
198
- const dayjsData = (0, dayjs_1.default)(new Date(date));
198
+ const dayjsData = (0, dayjs_1.default)(date);
199
199
  const noIdExist = entity[this.config.DYNAMO_DB.MAP.partitionKey ?? "id"] === undefined;
200
200
  if (noIdExist)
201
201
  entity[this.config.DYNAMO_DB.MAP.partitionKey ?? "id"] = crypto.randomUUID();
202
- entity.createdAt = date;
202
+ entity.createdAt = (0, index_1.formatDateTimeStr)(dayjsData);
203
203
  if (user)
204
204
  entity.createdBy = user;
205
- entity.year = dayjsData.year().toString();
206
- entity.yearMonth = dayjsData.format("YYYY-MM");
205
+ entity.year = (0, index_1.formatYearStr)(dayjsData);
206
+ entity.yearMonth = (0, index_1.formatYearMonthStr)(dayjsData);
207
207
  if (!entity.updatedAt) {
208
208
  entity.updatedAt = entity.createdAt;
209
209
  }
@@ -298,11 +298,11 @@ class DynamoFindOperations {
298
298
  parsedFilter = (0, index_1.parseIndexFilter)(filter, this.getIndexMap());
299
299
  return this.repoDB.find(parsedFilter, debug);
300
300
  }
301
- async *findStream(filter, size) {
301
+ async *findStream(filter, pageSize = 50) {
302
302
  let lastKey = "";
303
- const pageSize = size ?? 50;
304
303
  do {
305
- const filterStr = `size=${pageSize}&${filter}${lastKey ? `&lastKey=${encodeURIComponent(lastKey)}` : ""}`;
304
+ const encodedLastKey = lastKey ? "&lastKey=" + encodeURIComponent(lastKey) : "";
305
+ const filterStr = `size=${pageSize}&${filter}${encodedLastKey}`;
306
306
  const itemList = await this.findQuery(filterStr);
307
307
  yield* itemList.items;
308
308
  lastKey = itemList.lastKey;
@@ -363,7 +363,7 @@ class DynamoFindOperations {
363
363
  }
364
364
  }
365
365
  if (invalidFields.length > 0) {
366
- const availableFields = Array.from(validFields).sort();
366
+ const availableFields = Array.from(validFields).sort((a, b) => a.localeCompare(b));
367
367
  throw new exception_1.ErrorHttp(exception_1.HTTP.BAD_REQUEST, `Invalid field names in filter: ${invalidFields.join(", ")}. Available fields: ${availableFields.join(", ")}`);
368
368
  }
369
369
  }
@@ -1 +1 @@
1
- {"version":3,"file":"crud-operations.js","sourceRoot":"","sources":["../../src/service/crud-operations.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Action,\n BaseEntity,\n BaseRepoDB,\n BaseRepoES,\n ChangeHistory,\n CognitoUser,\n computeChangedFields,\n Filter,\n List,\n parseFilter,\n parseIndexFilter,\n removeFields,\n} from \"../index\";\nimport { ErrorDynamoDB, ErrorHttp, HTTP } from \"../exception\";\nimport { buildSearchQueryOS } from \"../utils/opensearch/opensearch.parser\";\nimport { EntityConfig } from \"@chinggis/types\";\nimport dayjs from \"dayjs\";\n\n/**\n * Maps public owner aliases to the entity-specific owner field names.\n */\nfunction parseOwnerFields(filter: Filter, entityConfig: EntityConfig): Filter {\n if (!filter) return null;\n\n const parsedFilter = filter;\n\n log.debug(\"input filter\", parsedFilter);\n\n if (parsedFilter.ownerParentId && !entityConfig.OWNER_PARENT_ID_FIELD_NAME) {\n parsedFilter.profileId = parsedFilter.ownerParentId;\n delete parsedFilter.ownerParentId;\n }\n if (!parsedFilter.profileId) delete parsedFilter.profileId;\n\n if (parsedFilter.ownerParentId && entityConfig.OWNER_PARENT_ID_FIELD_NAME) {\n parsedFilter[entityConfig.OWNER_PARENT_ID_FIELD_NAME] = parsedFilter.ownerParentId;\n if (entityConfig.OWNER_PARENT_ID_FIELD_NAME !== \"ownerParentId\") delete parsedFilter.ownerParentId;\n }\n\n if (parsedFilter.profileId && entityConfig.OWNER_ID_FIELD_NAME) {\n parsedFilter[entityConfig.OWNER_ID_FIELD_NAME] = parsedFilter.profileId;\n if (entityConfig.OWNER_ID_FIELD_NAME !== \"profileId\") delete parsedFilter.profileId;\n }\n\n if (parsedFilter.ownerId && entityConfig.OWNER_ID_FIELD_NAME) {\n parsedFilter[entityConfig.OWNER_ID_FIELD_NAME] = parsedFilter.ownerId;\n if (entityConfig.OWNER_ID_FIELD_NAME !== \"ownerId\") delete parsedFilter.ownerId;\n }\n log.debug(\"parsedFilter\", parsedFilter);\n\n return parsedFilter;\n}\n\nexport class DynamoWriteOperations<T extends BaseEntity, D extends BaseRepoDB<T>> {\n constructor(\n private readonly repoDB: D,\n private readonly config: EntityConfig,\n ) {}\n\n deleteFields(entityId: string, fields: string[]): Promise<Partial<T>> {\n return this.repoDB.deleteFields(entityId, fields);\n }\n\n incrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n return this.repoDB.incrementValueByField(entityId, fieldName, value);\n }\n\n decrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n return this.repoDB.decrementValueByField(entityId, fieldName, value);\n }\n\n increment(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.repoDB.incrementValueByField(entityId, fieldName, value, \".\");\n }\n\n decrement(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.repoDB.decrementValueByField(entityId, fieldName, -Math.abs(value), \".\");\n }\n\n async save(entity: Partial<T>, ownerId: string, parentId?: string, createdByUser?: string | CognitoUser): Promise<T> {\n entity = this.setSystemData(entity, Action.CREATE, createdByUser);\n\n if (ownerId && this.config.OWNER_ID_FIELD_NAME) entity[this.config.OWNER_ID_FIELD_NAME] = ownerId;\n if (parentId && this.config.OWNER_PARENT_ID_FIELD_NAME) entity[this.config.OWNER_PARENT_ID_FIELD_NAME] = parentId;\n\n return this.repoDB.save(entity);\n }\n\n async saveAll(\n entities: Partial<T>[],\n ownerId: string,\n parentId?: string,\n createdByUser?: string | CognitoUser,\n isTransactional?: boolean,\n ): Promise<Partial<T>[]> {\n const entitiesUpdated = [];\n\n for (const item of entities) {\n const entity = this.setSystemData(item, Action.CREATE, createdByUser || ownerId);\n\n if (parentId && this.config.OWNER_PARENT_ID_FIELD_NAME) entity[this.config.OWNER_PARENT_ID_FIELD_NAME] = parentId;\n if (ownerId && this.config.OWNER_ID_FIELD_NAME) entity[this.config.OWNER_ID_FIELD_NAME] = ownerId;\n\n entitiesUpdated.push(entity);\n }\n\n return this.repoDB.saveMany(entitiesUpdated, isTransactional);\n }\n\n async update(entity: Partial<T>, requestUser?: CognitoUser, fields?: string[]): Promise<T> {\n const fieldName = this.config.DYNAMO_DB?.MAP?.partitionKey ?? \"id\";\n if (fields && fields.length > 0) fields.push(fieldName);\n if (fields && fields.length > 0) entity = removeFields([entity], fields)[0];\n\n if (!entity || !entity[fieldName]) throw new ErrorHttp(HTTP.BAD_REQUEST, `id required`);\n\n const item = await this.repoDB.findById(entity[fieldName]);\n\n if (!entity || !item) throw new ErrorHttp(HTTP.BAD_REQUEST, `id not found`);\n\n if (\n requestUser &&\n !requestUser.isScope &&\n !requestUser.isAdmin &&\n (item[this.config.OWNER_ID_FIELD_NAME] !== requestUser.profile ||\n item[this.config.OWNER_PARENT_ID_FIELD_NAME] !== requestUser.parentId)\n )\n throw new ErrorHttp(HTTP.FORBIDDEN, `No permission to resource: ${entity.id}`);\n\n entity = this.setSystemData(entity, Action.UPDATE, requestUser, item);\n\n return this.repoDB.update(entity);\n }\n\n updateAll(\n entities: Partial<T>[],\n fields: string[],\n requestUser?: CognitoUser,\n isTransactional?: boolean,\n ): Promise<boolean> {\n if (requestUser) log.warn(\"this methode is under development, cannot check ownership by updateAll\");\n\n return this.repoDB.updateMany(entities, fields, isTransactional);\n }\n\n updateFields(entity: Partial<T>, fields: string[]): Promise<Partial<T>> {\n if (!entity || !fields?.length) return Promise.resolve(entity);\n return this.repoDB.updateFields(entity, [...fields]);\n }\n\n async remove(entityId: string, requestUser?: CognitoUser): Promise<boolean> {\n if (!entityId) throw new Error(\"Entity id required\");\n\n if (requestUser && requestUser.isAdmin) return this.repoDB.delete(entityId);\n\n const entity = await this.repoDB.findById(entityId);\n if (!entity) throw new Error(\"Entity not found\");\n\n if (\n requestUser &&\n !requestUser.isScope &&\n (entity[this.config.OWNER_ID_FIELD_NAME] !== requestUser.profile ||\n entity[this.config.OWNER_PARENT_ID_FIELD_NAME] !== requestUser.parentId)\n )\n throw new ErrorHttp(HTTP.FORBIDDEN, `No permission to resource: ${entity.id}`);\n\n return this.repoDB.delete(entityId);\n }\n\n removeAll(entityIds: string[], requestUser?: CognitoUser): Promise<boolean> {\n if (requestUser) log.warn(\"this methode is under development, cannot check ownership by removeAll\");\n return this.repoDB.deleteMany(entityIds);\n }\n\n async changeOwner(entityId: string, ownerId: string): Promise<T> {\n const entity = await this.repoDB.findById(entityId);\n entity[this.config.OWNER_ID_FIELD_NAME] = ownerId;\n return this.repoDB.update(entity);\n }\n\n async findById(entityId: string, requestUser?: CognitoUser): Promise<T> {\n const entity = await this.repoDB.findById(entityId);\n\n if (!entity) return null;\n if (!requestUser || requestUser.isAdmin) return entity;\n\n const isOwnerParent = entity[this.config.OWNER_PARENT_ID_FIELD_NAME] == requestUser.profile;\n const isParent = entity[this.config.OWNER_ID_FIELD_NAME] == requestUser.profile;\n\n if (!requestUser.profile || isOwnerParent || isParent) return entity;\n\n return null;\n }\n\n async findByIds(entityIds: string[], requestUser?: CognitoUser): Promise<T[]> {\n if (entityIds.length > 25) throw new ErrorDynamoDB(this.repoDB.getTableName(), \"findByIds\", \"Too many entities\");\n\n const entities = await this.repoDB.findByIds(entityIds);\n\n if (!requestUser || requestUser.isAdmin) return entities;\n\n const ownEntities = [];\n for (const entity of entities) {\n if (\n entity[this.config.OWNER_PARENT_ID_FIELD_NAME] == requestUser.profile ||\n entity[this.config.OWNER_ID_FIELD_NAME] == requestUser.profile\n ) {\n ownEntities.push(entity);\n }\n }\n return ownEntities;\n }\n\n /**\n * Applies generated id, timestamps, audit user, and optional change history.\n */\n private setSystemData(itemNew: Partial<T>, action: Action, requestUser?: string | CognitoUser, itemOld?: T): T {\n if (!action || action === Action.DELETE || action === Action.READ) return itemNew as T;\n\n const date = dayjs().toISOString();\n const user = this.extractUser(requestUser);\n\n switch (action) {\n case Action.CREATE:\n return this.handleCreate(itemNew, user, date);\n case Action.UPDATE:\n return this.handleUpdate(itemNew, itemOld, user, date);\n default:\n return itemNew as T;\n }\n }\n\n /**\n * Normalizes a raw username or Cognito user into a stored audit username.\n */\n private extractUser(requestUser: string | CognitoUser): string {\n if (!requestUser) return undefined;\n\n if (typeof requestUser === \"string\") return requestUser;\n\n return requestUser.username;\n }\n\n /**\n * Populates system fields that are required when creating an entity.\n */\n private handleCreate(entity: Partial<T>, user: string, date: string): T {\n const dayjsData = dayjs(new Date(date));\n\n const noIdExist = entity[this.config.DYNAMO_DB.MAP.partitionKey ?? \"id\"] === undefined;\n if (noIdExist) entity[this.config.DYNAMO_DB.MAP.partitionKey ?? \"id\"] = crypto.randomUUID();\n\n entity.createdAt = date;\n if (user) entity.createdBy = user;\n entity.year = dayjsData.year().toString();\n entity.yearMonth = dayjsData.format(\"YYYY-MM\");\n\n if (!entity.updatedAt) {\n entity.updatedAt = entity.createdAt;\n }\n\n if (!this.config.TRACE_CHANGE?.fields) return entity as T;\n\n entity.history = this.addHistory(entity.history, { action: Action.CREATE, user, date });\n return entity as T;\n }\n\n /**\n * Populates update metadata and records traced field changes when configured.\n */\n private handleUpdate(entity: Partial<T>, itemOld: T | undefined, user: string, date: string): T {\n if (user) entity.updatedBy = user;\n entity.history = entity.history || itemOld?.history;\n\n entity.updatedAt = date;\n\n if (!this.config.TRACE_CHANGE?.fields || !itemOld) {\n return entity as T;\n }\n\n const changes = computeChangedFields(itemOld, entity, this.config.TRACE_CHANGE);\n if (changes.length > 0) {\n entity.history = this.addHistory(entity.history, {\n action: Action.UPDATE,\n user,\n date,\n changes,\n });\n }\n\n return entity as T;\n }\n\n /**\n * Appends a non-empty history entry while keeping the in-entity history bounded.\n */\n private addHistory(history: ChangeHistory[] | undefined, entry: ChangeHistory): ChangeHistory[] {\n if (!entry.changes || entry.changes.length === 0) {\n return history || [];\n }\n\n const newHistory = [...(history || [])];\n\n const MAX_HISTORY_ENTRIES = 100;\n if (newHistory.length >= MAX_HISTORY_ENTRIES) {\n newHistory.shift();\n }\n\n newHistory.push(entry);\n return newHistory;\n }\n}\n\nexport class DynamoFindOperations<T extends BaseEntity, D extends BaseRepoDB<T>> {\n constructor(\n private readonly repoDB: D,\n private readonly config: EntityConfig,\n ) {}\n\n async findQuery(queryParams: string): Promise<List<Partial<T>>> {\n const filter = parseIndexFilter(queryParams, this.getIndexMap());\n this.checkIsIndexedField(filter);\n return this.find(filter);\n }\n\n async findAll(): Promise<T[]> {\n throw new ErrorDynamoDB(\n this.repoDB.getTableName(),\n \"findAll\",\n \"findAll requires an index filter; use scan() otherwise\",\n );\n }\n\n async findAllMatch(filter: Filter | string): Promise<T[]> {\n if (typeof filter === \"string\") filter = parseIndexFilter(filter, this.getIndexMap());\n this.checkIsIndexedField(filter);\n return this.fetchAll(filter);\n }\n\n async findAllByIndex(indexName: string, indexValue: any): Promise<T[]> {\n const filter = { indexName: indexName, indexValue: indexValue };\n this.checkIsIndexedField(filter);\n\n const parsedFilter = parseIndexFilter(filter, this.getIndexMap());\n return this.fetchAll(parsedFilter);\n }\n\n async findByField(fieldName: string, fieldValue: any): Promise<List<T>> {\n const filter = { [fieldName]: fieldValue, size: 100 };\n this.checkIsIndexedField(filter);\n const parsedFilter = parseIndexFilter(fieldName + \"=\" + fieldValue + \"&size=100\", this.getIndexMap());\n return (await this.find(parsedFilter)) as List<T>;\n }\n\n async findFirst(fieldName: string, fieldValue: string | boolean | number | Date): Promise<T> {\n const filter = { [fieldName]: fieldValue };\n this.checkIsIndexedField(filter);\n\n const result = await this.findByField(fieldName, fieldValue);\n return result.items.length > 0 ? result.items[0] : null;\n }\n\n async find(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n if (typeof filter === \"string\") filter = parseIndexFilter(filter, this.getIndexMap());\n\n let parsedFilter = parseOwnerFields(filter, this.config);\n this.checkIsIndexedField(parsedFilter);\n\n parsedFilter = parseIndexFilter(filter, this.getIndexMap());\n return this.repoDB.find(parsedFilter, debug);\n }\n\n async *findStream(filter: string, size?: number): AsyncGenerator<T> {\n let lastKey: string = \"\";\n const pageSize = size ?? 50;\n\n do {\n const filterStr = `size=${pageSize}&${filter}${lastKey ? `&lastKey=${encodeURIComponent(lastKey)}` : \"\"}`;\n const itemList = await this.findQuery(filterStr);\n\n yield* itemList.items as T[];\n\n lastKey = itemList.lastKey;\n } while (lastKey);\n }\n\n /**\n * Walks DynamoDB Query pages for indexed find-all helpers.\n */\n private async fetchAll(filter: Filter | string): Promise<T[]> {\n if (typeof filter === \"string\") filter = parseFilter(filter);\n\n const result: Partial<T>[] = [];\n do {\n const response = await this.repoDB.find(filter);\n result.push(...response.items);\n filter.lastKey = response.lastKey;\n } while (filter.lastKey);\n\n return result as T[];\n }\n\n /**\n * Rejects find filters containing fields outside the configured index map.\n */\n private checkIsIndexedField(filter: Filter): void {\n if (!filter || typeof filter !== \"object\") {\n return;\n }\n\n const indexMap = this.getIndexMap();\n if (!indexMap || indexMap.size === 0) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"No indexes configured for this table\");\n }\n\n const validFields = new Set<string>();\n\n if (indexMap.partitionKey) {\n validFields.add(indexMap.partitionKey);\n }\n\n for (const [, indexConfig] of indexMap.entries()) {\n if (indexConfig.field) {\n validFields.add(indexConfig.field);\n }\n if (indexConfig.rFields) {\n indexConfig.rFields.forEach((field) => validFields.add(field));\n }\n if (indexConfig.sortKeyField) {\n validFields.add(indexConfig.sortKeyField);\n }\n }\n\n const invalidFields: string[] = [];\n for (const fieldName of Object.keys(filter)) {\n if (\n [\"indexName\", \"indexValue\", \"size\", \"lastKey\", \"fieldsInclude\", \"fieldsExclude\", \"rangeFilters\"].includes(\n fieldName,\n )\n ) {\n continue;\n }\n\n const rangeSuffixes = [\"Min\", \"Max\", \"From\", \"To\", \"Start\", \"End\"];\n const isRangeField = rangeSuffixes.some((suffix) => fieldName.endsWith(suffix));\n if (isRangeField) {\n continue;\n }\n\n if (!validFields.has(fieldName)) {\n invalidFields.push(fieldName);\n }\n }\n\n if (invalidFields.length > 0) {\n const availableFields = Array.from(validFields).sort();\n throw new ErrorHttp(\n HTTP.BAD_REQUEST,\n `Invalid field names in filter: ${invalidFields.join(\", \")}. Available fields: ${availableFields.join(\", \")}`,\n );\n }\n }\n\n /**\n * Returns the DynamoDB index map from the operation config snapshot.\n */\n private getIndexMap() {\n return this.config.DYNAMO_DB?.MAP;\n }\n}\n\nexport class DynamoScanOperations<T extends BaseEntity, D extends BaseRepoDB<T>> {\n constructor(\n private readonly repoDB: D,\n private readonly config: EntityConfig,\n ) {}\n\n async scan(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n const parsedFilter = parseIndexFilter(filter, this.getIndexMap());\n return this.repoDB.scan(parsedFilter, debug);\n }\n\n /**\n * Returns the DynamoDB index map used for scan filter parsing.\n */\n private getIndexMap() {\n return this.config.DYNAMO_DB?.MAP;\n }\n}\n\nexport class OpenSearchOperations<T extends BaseEntity, S extends BaseRepoES<T>> {\n constructor(\n private readonly repoES: S,\n private readonly config: EntityConfig,\n ) {}\n\n async searchQuery(\n queryParams: any,\n debug?: boolean,\n ): Promise<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n const query = buildSearchQueryOS(queryParams, this.config);\n\n return this.repoES.search(query, debug);\n }\n\n searchQueryTotalCount(queryParams: any): Promise<number> {\n const query = buildSearchQueryOS(queryParams, this.config);\n\n return this.repoES.count(query);\n }\n\n async search(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n if (typeof filter === \"string\") filter = parseIndexFilter(filter, this.getIndexMap());\n\n let parsedFilter = parseOwnerFields(filter, this.config);\n parsedFilter = this.setIndexField(parsedFilter);\n\n return this.repoES.find(parsedFilter, debug);\n }\n\n searchFieldNotExist(fieldName: string, from: number, size: number): Promise<Partial<T>[]> {\n return this.repoES.fieldNotExists(fieldName, from, size);\n }\n\n async *searchStream(filter: string, pageSize = 50): AsyncGenerator<T> {\n let pageNumber = 1;\n let yieldedCount = 0;\n\n while (true) {\n const filterStr = `page=${pageNumber++}&size=${pageSize}&${filter}`;\n const resultList = await this.searchQuery(filterStr);\n if (resultList.items.length === 0) break;\n\n yield* resultList.items as T[];\n yieldedCount += resultList.items.length;\n if (yieldedCount >= resultList.total || resultList.items.length < pageSize) break;\n }\n }\n\n async *searchStreamAggr(\n filter: string,\n pageSize = 50,\n ): AsyncGenerator<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n let pageNumber = 1;\n let yieldedCount = 0;\n\n while (true) {\n const filterStr = `page=${pageNumber++}&size=${pageSize}&${filter}`;\n const resultList = await this.searchQuery(filterStr);\n if (resultList.items.length === 0) break;\n\n yield resultList;\n yieldedCount += resultList.items.length;\n if (yieldedCount >= resultList.total || resultList.items.length < pageSize) break;\n }\n }\n\n /**\n * Converts a DynamoDB index name to its OpenSearch field name for search filters.\n */\n private setIndexField(filter: Filter): Filter {\n if (!filter.indexName || !filter.indexValue) return filter;\n\n const indexMap = this.config.DYNAMO_DB.MAP;\n if (!indexMap || indexMap.size === 0) return filter;\n\n const indexConfig = indexMap.get(filter.indexName);\n if (!indexConfig) return filter;\n\n filter.indexName = indexConfig.field;\n return filter;\n }\n\n /**\n * Returns the DynamoDB index map used to parse shared filter strings.\n */\n private getIndexMap() {\n return this.config.DYNAMO_DB?.MAP;\n }\n}\n"]}
1
+ {"version":3,"file":"crud-operations.js","sourceRoot":"","sources":["../../src/service/crud-operations.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Action,\n BaseEntity,\n BaseRepoDB,\n BaseRepoES,\n ChangeHistory,\n CognitoUser,\n computeChangedFields,\n DateTimeStr,\n Filter,\n formatDateTimeStr,\n formatYearMonthStr,\n formatYearStr,\n List,\n parseFilter,\n parseIndexFilter,\n removeFields,\n} from \"../index\";\nimport { ErrorDynamoDB, ErrorHttp, HTTP } from \"../exception\";\nimport { buildSearchQueryOS } from \"../utils/opensearch/opensearch.parser\";\nimport { EntityConfig } from \"@chinggis/types\";\nimport dayjs from \"dayjs\";\n\n/**\n * Maps public owner aliases to the entity-specific owner field names.\n */\nfunction parseOwnerFields(filter: Filter, entityConfig: EntityConfig): Filter {\n if (!filter) return null;\n\n const parsedFilter = filter;\n\n log.debug(\"input filter\", parsedFilter);\n\n if (parsedFilter.ownerParentId && !entityConfig.OWNER_PARENT_ID_FIELD_NAME) {\n parsedFilter.profileId = parsedFilter.ownerParentId;\n delete parsedFilter.ownerParentId;\n }\n if (!parsedFilter.profileId) delete parsedFilter.profileId;\n\n if (parsedFilter.ownerParentId && entityConfig.OWNER_PARENT_ID_FIELD_NAME) {\n parsedFilter[entityConfig.OWNER_PARENT_ID_FIELD_NAME] = parsedFilter.ownerParentId;\n if (entityConfig.OWNER_PARENT_ID_FIELD_NAME !== \"ownerParentId\") delete parsedFilter.ownerParentId;\n }\n\n if (parsedFilter.profileId && entityConfig.OWNER_ID_FIELD_NAME) {\n parsedFilter[entityConfig.OWNER_ID_FIELD_NAME] = parsedFilter.profileId;\n if (entityConfig.OWNER_ID_FIELD_NAME !== \"profileId\") delete parsedFilter.profileId;\n }\n\n if (parsedFilter.ownerId && entityConfig.OWNER_ID_FIELD_NAME) {\n parsedFilter[entityConfig.OWNER_ID_FIELD_NAME] = parsedFilter.ownerId;\n if (entityConfig.OWNER_ID_FIELD_NAME !== \"ownerId\") delete parsedFilter.ownerId;\n }\n log.debug(\"parsedFilter\", parsedFilter);\n\n return parsedFilter;\n}\n\nexport class DynamoWriteOperations<T extends BaseEntity, D extends BaseRepoDB<T>> {\n constructor(\n private readonly repoDB: D,\n private readonly config: EntityConfig,\n ) {}\n\n deleteFields(entityId: string, fields: string[]): Promise<Partial<T>> {\n return this.repoDB.deleteFields(entityId, fields);\n }\n\n incrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n return this.repoDB.incrementValueByField(entityId, fieldName, value);\n }\n\n decrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T> {\n return this.repoDB.decrementValueByField(entityId, fieldName, value);\n }\n\n increment(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.repoDB.incrementValueByField(entityId, fieldName, value, \".\");\n }\n\n decrement(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.repoDB.decrementValueByField(entityId, fieldName, -Math.abs(value), \".\");\n }\n\n async save(entity: Partial<T>, ownerId: string, parentId?: string, createdByUser?: string | CognitoUser): Promise<T> {\n entity = this.setSystemData(entity, Action.CREATE, createdByUser);\n\n if (ownerId && this.config.OWNER_ID_FIELD_NAME) entity[this.config.OWNER_ID_FIELD_NAME] = ownerId;\n if (parentId && this.config.OWNER_PARENT_ID_FIELD_NAME) entity[this.config.OWNER_PARENT_ID_FIELD_NAME] = parentId;\n\n return this.repoDB.save(entity);\n }\n\n async saveAll(\n entities: Partial<T>[],\n ownerId: string,\n parentId?: string,\n createdByUser?: string | CognitoUser,\n isTransactional?: boolean,\n ): Promise<Partial<T>[]> {\n const entitiesUpdated = [];\n\n for (const item of entities) {\n const entity = this.setSystemData(item, Action.CREATE, createdByUser || ownerId);\n\n if (parentId && this.config.OWNER_PARENT_ID_FIELD_NAME) entity[this.config.OWNER_PARENT_ID_FIELD_NAME] = parentId;\n if (ownerId && this.config.OWNER_ID_FIELD_NAME) entity[this.config.OWNER_ID_FIELD_NAME] = ownerId;\n\n entitiesUpdated.push(entity);\n }\n\n return this.repoDB.saveMany(entitiesUpdated, isTransactional);\n }\n\n async update(entity: Partial<T>, requestUser?: CognitoUser, fields?: string[]): Promise<T> {\n const fieldName = this.config.DYNAMO_DB?.MAP?.partitionKey ?? \"id\";\n if (fields && fields.length > 0) fields.push(fieldName);\n if (fields && fields.length > 0) entity = removeFields([entity], fields)[0];\n\n if (!entity?.[fieldName]) throw new ErrorHttp(HTTP.BAD_REQUEST, `id required`);\n\n const item = await this.repoDB.findById(entity[fieldName]);\n\n if (!entity || !item) throw new ErrorHttp(HTTP.BAD_REQUEST, `id not found`);\n\n if (\n requestUser &&\n !requestUser.isScope &&\n !requestUser.isAdmin &&\n (item[this.config.OWNER_ID_FIELD_NAME] !== requestUser.profile ||\n item[this.config.OWNER_PARENT_ID_FIELD_NAME] !== requestUser.parentId)\n )\n throw new ErrorHttp(HTTP.FORBIDDEN, `No permission to resource: ${entity.id}`);\n\n entity = this.setSystemData(entity, Action.UPDATE, requestUser, item);\n\n return this.repoDB.update(entity);\n }\n\n updateAll(\n entities: Partial<T>[],\n fields: string[],\n requestUser?: CognitoUser,\n isTransactional?: boolean,\n ): Promise<boolean> {\n if (requestUser) log.warn(\"this methode is under development, cannot check ownership by updateAll\");\n\n return this.repoDB.updateMany(entities, fields, isTransactional);\n }\n\n updateFields(entity: Partial<T>, fields: string[]): Promise<Partial<T>> {\n if (!entity || !fields?.length) return Promise.resolve(entity);\n return this.repoDB.updateFields(entity, [...fields]);\n }\n\n async remove(entityId: string, requestUser?: CognitoUser): Promise<boolean> {\n if (!entityId) throw new Error(\"Entity id required\");\n\n if (requestUser?.isAdmin) return this.repoDB.delete(entityId);\n\n const entity = await this.repoDB.findById(entityId);\n if (!entity) throw new Error(\"Entity not found\");\n\n if (\n requestUser &&\n !requestUser.isScope &&\n (entity[this.config.OWNER_ID_FIELD_NAME] !== requestUser.profile ||\n entity[this.config.OWNER_PARENT_ID_FIELD_NAME] !== requestUser.parentId)\n )\n throw new ErrorHttp(HTTP.FORBIDDEN, `No permission to resource: ${entity.id}`);\n\n return this.repoDB.delete(entityId);\n }\n\n removeAll(entityIds: string[], requestUser?: CognitoUser): Promise<boolean> {\n if (requestUser) log.warn(\"this methode is under development, cannot check ownership by removeAll\");\n return this.repoDB.deleteMany(entityIds);\n }\n\n async changeOwner(entityId: string, ownerId: string): Promise<T> {\n const entity = await this.repoDB.findById(entityId);\n entity[this.config.OWNER_ID_FIELD_NAME] = ownerId;\n return this.repoDB.update(entity);\n }\n\n async findById(entityId: string, requestUser?: CognitoUser): Promise<T> {\n const entity = await this.repoDB.findById(entityId);\n\n if (!entity) return null;\n if (!requestUser || requestUser.isAdmin) return entity;\n\n const isOwnerParent = entity[this.config.OWNER_PARENT_ID_FIELD_NAME] == requestUser.profile;\n const isParent = entity[this.config.OWNER_ID_FIELD_NAME] == requestUser.profile;\n\n if (!requestUser.profile || isOwnerParent || isParent) return entity;\n\n return null;\n }\n\n async findByIds(entityIds: string[], requestUser?: CognitoUser): Promise<T[]> {\n if (entityIds.length > 25) throw new ErrorDynamoDB(this.repoDB.getTableName(), \"findByIds\", \"Too many entities\");\n\n const entities = await this.repoDB.findByIds(entityIds);\n\n if (!requestUser || requestUser.isAdmin) return entities;\n\n const ownEntities = [];\n for (const entity of entities) {\n if (\n entity[this.config.OWNER_PARENT_ID_FIELD_NAME] == requestUser.profile ||\n entity[this.config.OWNER_ID_FIELD_NAME] == requestUser.profile\n ) {\n ownEntities.push(entity);\n }\n }\n return ownEntities;\n }\n\n /**\n * Applies generated id, timestamps, audit user, and optional change history.\n */\n private setSystemData(itemNew: Partial<T>, action: Action, requestUser?: string | CognitoUser, itemOld?: T): T {\n if (!action || action === Action.DELETE || action === Action.READ) return itemNew as T;\n\n const date = formatDateTimeStr(dayjs());\n const user = this.extractUser(requestUser);\n\n switch (action) {\n case Action.CREATE:\n return this.handleCreate(itemNew, user, date);\n case Action.UPDATE:\n return this.handleUpdate(itemNew, itemOld, user, date);\n default:\n return itemNew as T;\n }\n }\n\n /**\n * Normalizes a raw username or Cognito user into a stored audit username.\n */\n private extractUser(requestUser: string | CognitoUser): string {\n if (!requestUser) return undefined;\n\n if (typeof requestUser === \"string\") return requestUser;\n\n return requestUser.username;\n }\n\n /**\n * Populates system fields that are required when creating an entity.\n */\n private handleCreate(entity: Partial<T>, user: string, date: DateTimeStr): T {\n const dayjsData = dayjs(date);\n\n const noIdExist = entity[this.config.DYNAMO_DB.MAP.partitionKey ?? \"id\"] === undefined;\n if (noIdExist) entity[this.config.DYNAMO_DB.MAP.partitionKey ?? \"id\"] = crypto.randomUUID();\n\n entity.createdAt = formatDateTimeStr(dayjsData);\n if (user) entity.createdBy = user;\n entity.year = formatYearStr(dayjsData);\n entity.yearMonth = formatYearMonthStr(dayjsData);\n\n if (!entity.updatedAt) {\n entity.updatedAt = entity.createdAt;\n }\n\n if (!this.config.TRACE_CHANGE?.fields) return entity as T;\n\n entity.history = this.addHistory(entity.history, { action: Action.CREATE, user, date });\n return entity as T;\n }\n\n /**\n * Populates update metadata and records traced field changes when configured.\n */\n private handleUpdate(entity: Partial<T>, itemOld: T | undefined, user: string, date: DateTimeStr): T {\n if (user) entity.updatedBy = user;\n entity.history = entity.history || itemOld?.history;\n\n entity.updatedAt = date;\n\n if (!this.config.TRACE_CHANGE?.fields || !itemOld) {\n return entity as T;\n }\n\n const changes = computeChangedFields(itemOld, entity, this.config.TRACE_CHANGE);\n if (changes.length > 0) {\n entity.history = this.addHistory(entity.history, {\n action: Action.UPDATE,\n user,\n date,\n changes,\n });\n }\n\n return entity as T;\n }\n\n /**\n * Appends a non-empty history entry while keeping the in-entity history bounded.\n */\n private addHistory(history: ChangeHistory[] | undefined, entry: ChangeHistory): ChangeHistory[] {\n if (!entry.changes || entry.changes.length === 0) {\n return history || [];\n }\n\n const newHistory = [...(history || [])];\n\n const MAX_HISTORY_ENTRIES = 100;\n if (newHistory.length >= MAX_HISTORY_ENTRIES) {\n newHistory.shift();\n }\n\n newHistory.push(entry);\n return newHistory;\n }\n}\n\nexport class DynamoFindOperations<T extends BaseEntity, D extends BaseRepoDB<T>> {\n constructor(\n private readonly repoDB: D,\n private readonly config: EntityConfig,\n ) {}\n\n async findQuery(queryParams: string): Promise<List<Partial<T>>> {\n const filter = parseIndexFilter(queryParams, this.getIndexMap());\n this.checkIsIndexedField(filter);\n return this.find(filter);\n }\n\n async findAll(): Promise<T[]> {\n throw new ErrorDynamoDB(\n this.repoDB.getTableName(),\n \"findAll\",\n \"findAll requires an index filter; use scan() otherwise\",\n );\n }\n\n async findAllMatch(filter: Filter | string): Promise<T[]> {\n if (typeof filter === \"string\") filter = parseIndexFilter(filter, this.getIndexMap());\n this.checkIsIndexedField(filter);\n return this.fetchAll(filter);\n }\n\n async findAllByIndex(indexName: string, indexValue: any): Promise<T[]> {\n const filter = { indexName: indexName, indexValue: indexValue };\n this.checkIsIndexedField(filter);\n\n const parsedFilter = parseIndexFilter(filter, this.getIndexMap());\n return this.fetchAll(parsedFilter);\n }\n\n async findByField(fieldName: string, fieldValue: any): Promise<List<T>> {\n const filter = { [fieldName]: fieldValue, size: 100 };\n this.checkIsIndexedField(filter);\n const parsedFilter = parseIndexFilter(fieldName + \"=\" + fieldValue + \"&size=100\", this.getIndexMap());\n return (await this.find(parsedFilter)) as List<T>;\n }\n\n async findFirst(fieldName: string, fieldValue: string | boolean | number | Date): Promise<T> {\n const filter = { [fieldName]: fieldValue };\n this.checkIsIndexedField(filter);\n\n const result = await this.findByField(fieldName, fieldValue);\n return result.items.length > 0 ? result.items[0] : null;\n }\n\n async find(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n if (typeof filter === \"string\") filter = parseIndexFilter(filter, this.getIndexMap());\n\n let parsedFilter = parseOwnerFields(filter, this.config);\n this.checkIsIndexedField(parsedFilter);\n\n parsedFilter = parseIndexFilter(filter, this.getIndexMap());\n return this.repoDB.find(parsedFilter, debug);\n }\n\n async *findStream(filter: string, pageSize = 50): AsyncGenerator<T> {\n let lastKey: string = \"\";\n\n do {\n const encodedLastKey = lastKey ? \"&lastKey=\" + encodeURIComponent(lastKey) : \"\";\n const filterStr = `size=${pageSize}&${filter}${encodedLastKey}`;\n const itemList = await this.findQuery(filterStr);\n\n yield* itemList.items as T[];\n\n lastKey = itemList.lastKey;\n } while (lastKey);\n }\n\n /**\n * Walks DynamoDB Query pages for indexed find-all helpers.\n */\n private async fetchAll(filter: Filter | string): Promise<T[]> {\n if (typeof filter === \"string\") filter = parseFilter(filter);\n\n const result: Partial<T>[] = [];\n do {\n const response = await this.repoDB.find(filter);\n result.push(...response.items);\n filter.lastKey = response.lastKey;\n } while (filter.lastKey);\n\n return result as T[];\n }\n\n /**\n * Rejects find filters containing fields outside the configured index map.\n */\n private checkIsIndexedField(filter: Filter): void {\n if (!filter || typeof filter !== \"object\") {\n return;\n }\n\n const indexMap = this.getIndexMap();\n if (!indexMap || indexMap.size === 0) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"No indexes configured for this table\");\n }\n\n const validFields = new Set<string>();\n\n if (indexMap.partitionKey) {\n validFields.add(indexMap.partitionKey);\n }\n\n for (const [, indexConfig] of indexMap.entries()) {\n if (indexConfig.field) {\n validFields.add(indexConfig.field);\n }\n if (indexConfig.rFields) {\n indexConfig.rFields.forEach((field) => validFields.add(field));\n }\n if (indexConfig.sortKeyField) {\n validFields.add(indexConfig.sortKeyField);\n }\n }\n\n const invalidFields: string[] = [];\n for (const fieldName of Object.keys(filter)) {\n if (\n [\"indexName\", \"indexValue\", \"size\", \"lastKey\", \"fieldsInclude\", \"fieldsExclude\", \"rangeFilters\"].includes(\n fieldName,\n )\n ) {\n continue;\n }\n\n const rangeSuffixes = [\"Min\", \"Max\", \"From\", \"To\", \"Start\", \"End\"];\n const isRangeField = rangeSuffixes.some((suffix) => fieldName.endsWith(suffix));\n if (isRangeField) {\n continue;\n }\n\n if (!validFields.has(fieldName)) {\n invalidFields.push(fieldName);\n }\n }\n\n if (invalidFields.length > 0) {\n const availableFields = Array.from(validFields).sort((a, b) => a.localeCompare(b));\n throw new ErrorHttp(\n HTTP.BAD_REQUEST,\n `Invalid field names in filter: ${invalidFields.join(\", \")}. Available fields: ${availableFields.join(\", \")}`,\n );\n }\n }\n\n /**\n * Returns the DynamoDB index map from the operation config snapshot.\n */\n private getIndexMap() {\n return this.config.DYNAMO_DB?.MAP;\n }\n}\n\nexport class DynamoScanOperations<T extends BaseEntity, D extends BaseRepoDB<T>> {\n constructor(\n private readonly repoDB: D,\n private readonly config: EntityConfig,\n ) {}\n\n async scan(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n const parsedFilter = parseIndexFilter(filter, this.getIndexMap());\n return this.repoDB.scan(parsedFilter, debug);\n }\n\n /**\n * Returns the DynamoDB index map used for scan filter parsing.\n */\n private getIndexMap() {\n return this.config.DYNAMO_DB?.MAP;\n }\n}\n\nexport class OpenSearchOperations<T extends BaseEntity, S extends BaseRepoES<T>> {\n constructor(\n private readonly repoES: S,\n private readonly config: EntityConfig,\n ) {}\n\n async searchQuery(\n queryParams: any,\n debug?: boolean,\n ): Promise<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n const query = buildSearchQueryOS(queryParams, this.config);\n\n return this.repoES.search(query, debug);\n }\n\n searchQueryTotalCount(queryParams: any): Promise<number> {\n const query = buildSearchQueryOS(queryParams, this.config);\n\n return this.repoES.count(query);\n }\n\n async search(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n if (typeof filter === \"string\") filter = parseIndexFilter(filter, this.getIndexMap());\n\n let parsedFilter = parseOwnerFields(filter, this.config);\n parsedFilter = this.setIndexField(parsedFilter);\n\n return this.repoES.find(parsedFilter, debug);\n }\n\n searchFieldNotExist(fieldName: string, from: number, size: number): Promise<Partial<T>[]> {\n return this.repoES.fieldNotExists(fieldName, from, size);\n }\n\n async *searchStream(filter: string, pageSize = 50): AsyncGenerator<T> {\n let pageNumber = 1;\n let yieldedCount = 0;\n\n while (true) {\n const filterStr = `page=${pageNumber++}&size=${pageSize}&${filter}`;\n const resultList = await this.searchQuery(filterStr);\n if (resultList.items.length === 0) break;\n\n yield* resultList.items as T[];\n yieldedCount += resultList.items.length;\n if (yieldedCount >= resultList.total || resultList.items.length < pageSize) break;\n }\n }\n\n async *searchStreamAggr(\n filter: string,\n pageSize = 50,\n ): AsyncGenerator<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n let pageNumber = 1;\n let yieldedCount = 0;\n\n while (true) {\n const filterStr = `page=${pageNumber++}&size=${pageSize}&${filter}`;\n const resultList = await this.searchQuery(filterStr);\n if (resultList.items.length === 0) break;\n\n yield resultList;\n yieldedCount += resultList.items.length;\n if (yieldedCount >= resultList.total || resultList.items.length < pageSize) break;\n }\n }\n\n /**\n * Converts a DynamoDB index name to its OpenSearch field name for search filters.\n */\n private setIndexField(filter: Filter): Filter {\n if (!filter.indexName || !filter.indexValue) return filter;\n\n const indexMap = this.config.DYNAMO_DB.MAP;\n if (!indexMap || indexMap.size === 0) return filter;\n\n const indexConfig = indexMap.get(filter.indexName);\n if (!indexConfig) return filter;\n\n filter.indexName = indexConfig.field;\n return filter;\n }\n\n /**\n * Returns the DynamoDB index map used to parse shared filter strings.\n */\n private getIndexMap() {\n return this.config.DYNAMO_DB?.MAP;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"permission.repo.d.ts","sourceRoot":"","sources":["../../src/service/permission.repo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAezC;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA6B;gBAEpC,SAAS,EAAE,MAAM;IAMvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIhD,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOtE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAKhE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAe1D,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAW5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CAGjD"}
1
+ {"version":3,"file":"permission.repo.d.ts","sourceRoot":"","sources":["../../src/service/permission.repo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAgBzC;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA6B;gBAEpC,SAAS,EAAE,MAAM;IAMvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIhD,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOtE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAKhE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAe1D,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAW5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CAGjD"}
@@ -4,6 +4,7 @@ exports.PermissionRepo = void 0;
4
4
  const base_db_repo_1 = require("../repositories/base-db.repo");
5
5
  const dynamodb_model_1 = require("../model/dynamodb.model");
6
6
  const dynamodb_utils_1 = require("../utils/dynamodb.utils");
7
+ const date_util_1 = require("../utils/date.util");
7
8
  const reflection_util_1 = require("../utils/reflection.util");
8
9
  function createPermissionIndexMap() {
9
10
  const map = new dynamodb_model_1.DynamoIndexMap();
@@ -42,7 +43,7 @@ class PermissionRepo {
42
43
  async save(permission) {
43
44
  if (!permission.id)
44
45
  permission.id = (0, dynamodb_utils_1.generateUUID)();
45
- const now = new Date().toISOString();
46
+ const now = (0, date_util_1.formatDateTimeStr)(new Date());
46
47
  if (!permission.createdAt)
47
48
  permission.createdAt = now;
48
49
  permission.updatedAt = now;
@@ -53,7 +54,7 @@ class PermissionRepo {
53
54
  return this.db.save(permission);
54
55
  }
55
56
  async update(permission) {
56
- permission.updatedAt = new Date().toISOString();
57
+ permission.updatedAt = (0, date_util_1.formatDateTimeStr)(new Date());
57
58
  // Rebuild composite key if components changed
58
59
  if (permission.role && permission.resource && permission.scope) {
59
60
  permission.permissionKey = `${permission.role}#${permission.resource}#${permission.scope}`;
@@ -1 +1 @@
1
- {"version":3,"file":"permission.repo.js","sourceRoot":"","sources":["../../src/service/permission.repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseRepoDBImpl } from \"../repositories/base-db.repo\";\nimport { DynamoIndexMap } from \"../model/dynamodb.model\";\nimport { Permission } from \"../model/role.model\";\nimport { generateUUID } from \"../utils/dynamodb.utils\";\nimport { List } from \"../model/base.model\";\nimport { Filter } from \"@chinggis/types\";\nimport { parseIndexFilter } from \"../utils/reflection.util\";\n\nfunction createPermissionIndexMap(): DynamoIndexMap {\n const map = new DynamoIndexMap();\n map.partitionKey = \"id\";\n map.set(\"byPermissionKey\", { field: \"permissionKey\", rFields: [\"role\", \"resource\", \"scope\"], fieldSeparator: \"#\" });\n map.set(\"byRole\", { field: \"role\", rFields: [\"role\"] });\n map.set(\"byResource\", { field: \"resource\", rFields: [\"resource\"] });\n map.set(\"byScope\", { field: \"scope\", rFields: [\"scope\"] });\n\n map.mapFields = [\"method\"];\n return map;\n}\n\n/**\n * Repository layer for Permission table.\n * Pure DB operations — no caching, no business logic.\n */\nexport class PermissionRepo {\n private readonly db: BaseRepoDBImpl<Permission>;\n\n constructor(tableName: string) {\n this.db = new BaseRepoDBImpl<Permission>();\n this.db.setTable(tableName);\n this.db.setIndexMap(createPermissionIndexMap());\n }\n\n async findById(id: string): Promise<Permission | null> {\n return this.db.findById(id);\n }\n\n async findByPermissionKey(permissionKey: string): Promise<Permission | null> {\n return this.db.findOne({\n indexName: \"byPermissionKey\",\n indexValue: permissionKey,\n });\n }\n\n async findByIndex(filter?: Filter): Promise<List<Partial<Permission>>> {\n const parsedFilter = parseIndexFilter(filter, this.db.getIndexMap());\n return this.db.find({ indexName: parsedFilter.indexName, indexValue: parsedFilter.indexValue });\n }\n\n async save(permission: Partial<Permission>): Promise<Permission> {\n if (!permission.id) permission.id = generateUUID();\n\n const now = new Date().toISOString();\n if (!permission.createdAt) permission.createdAt = now;\n permission.updatedAt = now;\n\n // Build composite key: role#resource#scope\n if (permission.role && permission.resource && permission.scope) {\n permission.permissionKey = `${permission.role}#${permission.resource}#${permission.scope}`;\n }\n\n return this.db.save(permission);\n }\n\n async update(permission: Partial<Permission>): Promise<Permission> {\n permission.updatedAt = new Date().toISOString();\n\n // Rebuild composite key if components changed\n if (permission.role && permission.resource && permission.scope) {\n permission.permissionKey = `${permission.role}#${permission.resource}#${permission.scope}`;\n }\n\n return this.db.update(permission);\n }\n\n async delete(id: string): Promise<boolean> {\n return this.db.delete(id);\n }\n\n async scan(): Promise<List<Partial<Permission>>> {\n return this.db.scan({});\n }\n}\n"]}
1
+ {"version":3,"file":"permission.repo.js","sourceRoot":"","sources":["../../src/service/permission.repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseRepoDBImpl } from \"../repositories/base-db.repo\";\nimport { DynamoIndexMap } from \"../model/dynamodb.model\";\nimport { Permission } from \"../model/role.model\";\nimport { generateUUID } from \"../utils/dynamodb.utils\";\nimport { List } from \"../model/base.model\";\nimport { Filter } from \"@chinggis/types\";\nimport { formatDateTimeStr } from \"../utils/date.util\";\nimport { parseIndexFilter } from \"../utils/reflection.util\";\n\nfunction createPermissionIndexMap(): DynamoIndexMap {\n const map = new DynamoIndexMap();\n map.partitionKey = \"id\";\n map.set(\"byPermissionKey\", { field: \"permissionKey\", rFields: [\"role\", \"resource\", \"scope\"], fieldSeparator: \"#\" });\n map.set(\"byRole\", { field: \"role\", rFields: [\"role\"] });\n map.set(\"byResource\", { field: \"resource\", rFields: [\"resource\"] });\n map.set(\"byScope\", { field: \"scope\", rFields: [\"scope\"] });\n\n map.mapFields = [\"method\"];\n return map;\n}\n\n/**\n * Repository layer for Permission table.\n * Pure DB operations — no caching, no business logic.\n */\nexport class PermissionRepo {\n private readonly db: BaseRepoDBImpl<Permission>;\n\n constructor(tableName: string) {\n this.db = new BaseRepoDBImpl<Permission>();\n this.db.setTable(tableName);\n this.db.setIndexMap(createPermissionIndexMap());\n }\n\n async findById(id: string): Promise<Permission | null> {\n return this.db.findById(id);\n }\n\n async findByPermissionKey(permissionKey: string): Promise<Permission | null> {\n return this.db.findOne({\n indexName: \"byPermissionKey\",\n indexValue: permissionKey,\n });\n }\n\n async findByIndex(filter?: Filter): Promise<List<Partial<Permission>>> {\n const parsedFilter = parseIndexFilter(filter, this.db.getIndexMap());\n return this.db.find({ indexName: parsedFilter.indexName, indexValue: parsedFilter.indexValue });\n }\n\n async save(permission: Partial<Permission>): Promise<Permission> {\n if (!permission.id) permission.id = generateUUID();\n\n const now = formatDateTimeStr(new Date());\n if (!permission.createdAt) permission.createdAt = now;\n permission.updatedAt = now;\n\n // Build composite key: role#resource#scope\n if (permission.role && permission.resource && permission.scope) {\n permission.permissionKey = `${permission.role}#${permission.resource}#${permission.scope}`;\n }\n\n return this.db.save(permission);\n }\n\n async update(permission: Partial<Permission>): Promise<Permission> {\n permission.updatedAt = formatDateTimeStr(new Date());\n\n // Rebuild composite key if components changed\n if (permission.role && permission.resource && permission.scope) {\n permission.permissionKey = `${permission.role}#${permission.resource}#${permission.scope}`;\n }\n\n return this.db.update(permission);\n }\n\n async delete(id: string): Promise<boolean> {\n return this.db.delete(id);\n }\n\n async scan(): Promise<List<Partial<Permission>>> {\n return this.db.scan({});\n }\n}\n"]}
@@ -1,9 +1,22 @@
1
- import { Dayjs } from "dayjs";
1
+ import type { Dayjs } from "dayjs";
2
+ import { DateInput, DateStr, DateTimeStr, LocalTimeStr, TimeStr, YearMonthStr, YearStr } from "../model/index.js";
3
+ export declare function isDateStr(value: string): value is DateStr;
4
+ export declare function isDateTimeStr(value: string): value is DateTimeStr;
5
+ export declare function isTimeStr(value: string): value is TimeStr;
6
+ export declare function isLocalTimeStr(value: string): value is LocalTimeStr;
7
+ export declare function isYearMonthStr(value: string): value is YearMonthStr;
8
+ export declare function isYearStr(value: string): value is YearStr;
9
+ export declare function formatDateStr(value: DateInput): DateStr;
10
+ export declare function formatDateTimeStr(value: DateInput): DateTimeStr;
11
+ export declare function formatTimeStr(value: DateInput): TimeStr;
12
+ export declare function formatLocalTimeStr(value: DateInput): LocalTimeStr;
13
+ export declare function formatYearMonthStr(value: DateInput): YearMonthStr;
14
+ export declare function formatYearStr(value: DateInput): YearStr;
2
15
  export declare function isValidDate(dateStr: string): boolean;
3
- export declare function isSameYearMonth(date1: string | Date | Dayjs, date2: string | Date | Dayjs): boolean;
4
- export declare function isCurrentMonth(date: string | Date | Dayjs): boolean;
16
+ export declare function isSameYearMonth(date1: DateInput, date2: DateInput): boolean;
17
+ export declare function isCurrentMonth(date: DateInput): boolean;
5
18
  export declare function isFutureMonth(date: string): boolean;
6
- export declare function addSecondToDate(date: string | Date | Dayjs): Dayjs;
19
+ export declare function addSecondToDate(date: DateInput): Dayjs;
7
20
  /**
8
21
  * Returns the oldest date string from a list of date strings.
9
22
  * @param dateStrList List of date strings (ISO or other formats supported by dayjs).
@@ -1 +1 @@
1
- {"version":3,"file":"date.util.d.ts","sourceRoot":"","sources":["../../src/utils/date.util.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAErC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAInG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAEnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAElE;AACD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,MAAM,CAErD"}
1
+ {"version":3,"file":"date.util.d.ts","sourceRoot":"","sources":["../../src/utils/date.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAwChH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAEzD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAE/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAEjE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEvD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAI3E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAEtD;AACD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,MAAM,CAErD"}
@@ -3,6 +3,18 @@ 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.isDateStr = isDateStr;
7
+ exports.isDateTimeStr = isDateTimeStr;
8
+ exports.isTimeStr = isTimeStr;
9
+ exports.isLocalTimeStr = isLocalTimeStr;
10
+ exports.isYearMonthStr = isYearMonthStr;
11
+ exports.isYearStr = isYearStr;
12
+ exports.formatDateStr = formatDateStr;
13
+ exports.formatDateTimeStr = formatDateTimeStr;
14
+ exports.formatTimeStr = formatTimeStr;
15
+ exports.formatLocalTimeStr = formatLocalTimeStr;
16
+ exports.formatYearMonthStr = formatYearMonthStr;
17
+ exports.formatYearStr = formatYearStr;
6
18
  exports.isValidDate = isValidDate;
7
19
  exports.isSameYearMonth = isSameYearMonth;
8
20
  exports.isCurrentMonth = isCurrentMonth;
@@ -11,6 +23,73 @@ exports.addSecondToDate = addSecondToDate;
11
23
  exports.minDateStr = minDateStr;
12
24
  exports.maxDateStr = maxDateStr;
13
25
  const dayjs_1 = __importDefault(require("dayjs"));
26
+ const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
27
+ const utc_1 = __importDefault(require("dayjs/plugin/utc"));
28
+ dayjs_1.default.extend(customParseFormat_1.default);
29
+ dayjs_1.default.extend(utc_1.default);
30
+ const DATE_STRING_FORMAT = "YYYY-MM-DD";
31
+ const DATE_YEAR_MONTH_STRING_FORMAT = "YYYY-MM";
32
+ const DATE_YEAR_STRING_FORMAT = "YYYY";
33
+ const TIME_STRING_WITHOUT_OFFSET_FORMAT = "HH:mm:ss.SSS";
34
+ const TIME_STRING_WITH_OFFSET_FORMAT = "HH:mm:ss.SSSZ";
35
+ const DATE_TIME_STRING_FORMATS = ["YYYY-MM-DDTHH:mm:ss.SSS[Z]", "YYYY-MM-DDTHH:mm:ss.SSSZ"];
36
+ function isValidFormat(value, format) {
37
+ return (0, dayjs_1.default)(value, format, true).isValid();
38
+ }
39
+ function castDateStr(value) {
40
+ return value;
41
+ }
42
+ function castDateTimeStr(value) {
43
+ return value;
44
+ }
45
+ function castYearMonthStr(value) {
46
+ return value;
47
+ }
48
+ function castYearStr(value) {
49
+ return value;
50
+ }
51
+ function castTimeStr(value) {
52
+ return value;
53
+ }
54
+ function castLocalTimeStr(value) {
55
+ return value;
56
+ }
57
+ function isDateStr(value) {
58
+ return isValidFormat(value, DATE_STRING_FORMAT);
59
+ }
60
+ function isDateTimeStr(value) {
61
+ return isValidFormat(value, DATE_TIME_STRING_FORMATS);
62
+ }
63
+ function isTimeStr(value) {
64
+ return isValidFormat(value, TIME_STRING_WITH_OFFSET_FORMAT);
65
+ }
66
+ function isLocalTimeStr(value) {
67
+ return isValidFormat(value, TIME_STRING_WITHOUT_OFFSET_FORMAT);
68
+ }
69
+ function isYearMonthStr(value) {
70
+ return isValidFormat(value, DATE_YEAR_MONTH_STRING_FORMAT);
71
+ }
72
+ function isYearStr(value) {
73
+ return isValidFormat(value, DATE_YEAR_STRING_FORMAT);
74
+ }
75
+ function formatDateStr(value) {
76
+ return castDateStr((0, dayjs_1.default)(value).format(DATE_STRING_FORMAT));
77
+ }
78
+ function formatDateTimeStr(value) {
79
+ return castDateTimeStr((0, dayjs_1.default)(value).utc().format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"));
80
+ }
81
+ function formatTimeStr(value) {
82
+ return castTimeStr((0, dayjs_1.default)(value).format(TIME_STRING_WITH_OFFSET_FORMAT));
83
+ }
84
+ function formatLocalTimeStr(value) {
85
+ return castLocalTimeStr((0, dayjs_1.default)(value).format(TIME_STRING_WITHOUT_OFFSET_FORMAT));
86
+ }
87
+ function formatYearMonthStr(value) {
88
+ return castYearMonthStr((0, dayjs_1.default)(value).format(DATE_YEAR_MONTH_STRING_FORMAT));
89
+ }
90
+ function formatYearStr(value) {
91
+ return castYearStr((0, dayjs_1.default)(value).format(DATE_YEAR_STRING_FORMAT));
92
+ }
14
93
  function isValidDate(dateStr) {
15
94
  const d = new Date(dateStr);
16
95
  return !Number.isNaN(d.getTime());
@@ -59,11 +138,10 @@ function minMaxDateStr(dateStrList, isMax) {
59
138
  const filtered = dateStrList.filter((d) => !!d);
60
139
  if (filtered.length === 0)
61
140
  return "";
62
- return filtered.reduce((newestDate, current) => {
141
+ return filtered.slice(1).reduce((selectedDate, current) => {
63
142
  if (isMax)
64
- return (0, dayjs_1.default)(current).isAfter((0, dayjs_1.default)(newestDate)) ? current : newestDate;
65
- else
66
- return (0, dayjs_1.default)(current).isBefore((0, dayjs_1.default)(newestDate)) ? newestDate : current;
67
- });
143
+ return (0, dayjs_1.default)(current).isAfter((0, dayjs_1.default)(selectedDate)) ? current : selectedDate;
144
+ return (0, dayjs_1.default)(current).isBefore((0, dayjs_1.default)(selectedDate)) ? current : selectedDate;
145
+ }, filtered[0]);
68
146
  }
69
147
  //# sourceMappingURL=date.util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.util.js","sourceRoot":"","sources":["../../src/utils/date.util.ts"],"names":[],"mappings":";;;;;AAEA,kCAGC;AAED,0CAIC;AAED,wCAEC;AAED,sCAYC;AAED,0CAEC;AAMD,gCAEC;AAOD,gCAEC;AAlDD,kDAAqC;AAErC,SAAgB,WAAW,CAAC,OAAe;IACzC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,eAAe,CAAC,KAA4B,EAAE,KAA4B;IACxF,MAAM,EAAE,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,cAAc,CAAC,IAA2B;IACxD,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IAEzB,yBAAyB;IACzB,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,oBAAoB;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEtC,qBAAqB;IACrB,OAAO,SAAS,GAAG,WAAW,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC;AAC7F,CAAC;AAED,SAAgB,eAAe,CAAC,IAA2B;IACzD,OAAO,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AACD;;;;GAIG;AACH,SAAgB,UAAU,CAAC,WAAkB;IAC3C,OAAO,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,WAAkB;IAC3C,OAAO,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,WAAkB,EAAE,KAAc;IACvD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAExD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE;QAC7C,IAAI,KAAK;YAAE,OAAO,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAA,eAAK,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;;YAC9E,OAAO,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAA,eAAK,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import dayjs, { Dayjs } from \"dayjs\";\n\nexport function isValidDate(dateStr: string): boolean {\n const d = new Date(dateStr);\n return !Number.isNaN(d.getTime());\n}\n\nexport function isSameYearMonth(date1: string | Date | Dayjs, date2: string | Date | Dayjs): boolean {\n const d1 = dayjs(date1);\n const d2 = dayjs(date2);\n return d1.isSame(d2, \"month\") && d1.isSame(d2, \"year\");\n}\n\nexport function isCurrentMonth(date: string | Date | Dayjs): boolean {\n return isSameYearMonth(date, new Date());\n}\n\nexport function isFutureMonth(date: string): boolean {\n const inputDate = new Date(date);\n const today = new Date();\n\n // Extract year and month\n const inputYear = inputDate.getFullYear();\n const inputMonth = inputDate.getMonth(); // 0-based (0 = Jan)\n const currentYear = today.getFullYear();\n const currentMonth = today.getMonth();\n\n // Compare year-month\n return inputYear > currentYear || (inputYear === currentYear && inputMonth > currentMonth);\n}\n\nexport function addSecondToDate(date: string | Date | Dayjs): Dayjs {\n return dayjs(date).add(1, \"second\");\n}\n/**\n * Returns the oldest date string from a list of date strings.\n * @param dateStrList List of date strings (ISO or other formats supported by dayjs).\n * @returns The oldest date string, or an empty string if the list is empty.\n */\nexport function minDateStr(dateStrList: any[]): string {\n return minMaxDateStr(dateStrList, false);\n}\n\n/**\n * Returns the newest date string from a list of date strings.\n * @param dateStrList List of date strings (ISO or other formats supported by dayjs).\n * @returns The newest date string, or an empty string if the list is empty.\n */\nexport function maxDateStr(dateStrList: any[]): string {\n return minMaxDateStr(dateStrList, true);\n}\n\nfunction minMaxDateStr(dateStrList: any[], isMax: boolean): string {\n if (!dateStrList || dateStrList.length === 0) return \"\";\n\n const filtered = dateStrList.filter((d) => !!d);\n if (filtered.length === 0) return \"\";\n\n return filtered.reduce((newestDate, current) => {\n if (isMax) return dayjs(current).isAfter(dayjs(newestDate)) ? current : newestDate;\n else return dayjs(current).isBefore(dayjs(newestDate)) ? newestDate : current;\n });\n}\n"]}
1
+ {"version":3,"file":"date.util.js","sourceRoot":"","sources":["../../src/utils/date.util.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Dayjs } from \"dayjs\";\nimport dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport utc from \"dayjs/plugin/utc\";\nimport { DateInput, DateStr, DateTimeStr, LocalTimeStr, TimeStr, YearMonthStr, YearStr } from \"@chinggis/types\";\n\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\n\nconst DATE_STRING_FORMAT = \"YYYY-MM-DD\";\nconst DATE_YEAR_MONTH_STRING_FORMAT = \"YYYY-MM\";\nconst DATE_YEAR_STRING_FORMAT = \"YYYY\";\nconst TIME_STRING_WITHOUT_OFFSET_FORMAT = \"HH:mm:ss.SSS\";\nconst TIME_STRING_WITH_OFFSET_FORMAT = \"HH:mm:ss.SSSZ\";\nconst DATE_TIME_STRING_FORMATS = [\"YYYY-MM-DDTHH:mm:ss.SSS[Z]\", \"YYYY-MM-DDTHH:mm:ss.SSSZ\"];\n\nfunction isValidFormat(value: string, format: string | string[]): boolean {\n return dayjs(value, format, true).isValid();\n}\n\nfunction castDateStr(value: string): DateStr {\n return value as DateStr;\n}\n\nfunction castDateTimeStr(value: string): DateTimeStr {\n return value as DateTimeStr;\n}\n\nfunction castYearMonthStr(value: string): YearMonthStr {\n return value as YearMonthStr;\n}\n\nfunction castYearStr(value: string): YearStr {\n return value as YearStr;\n}\n\nfunction castTimeStr(value: string): TimeStr {\n return value as TimeStr;\n}\n\nfunction castLocalTimeStr(value: string): LocalTimeStr {\n return value as LocalTimeStr;\n}\n\nexport function isDateStr(value: string): value is DateStr {\n return isValidFormat(value, DATE_STRING_FORMAT);\n}\n\nexport function isDateTimeStr(value: string): value is DateTimeStr {\n return isValidFormat(value, DATE_TIME_STRING_FORMATS);\n}\n\nexport function isTimeStr(value: string): value is TimeStr {\n return isValidFormat(value, TIME_STRING_WITH_OFFSET_FORMAT);\n}\n\nexport function isLocalTimeStr(value: string): value is LocalTimeStr {\n return isValidFormat(value, TIME_STRING_WITHOUT_OFFSET_FORMAT);\n}\n\nexport function isYearMonthStr(value: string): value is YearMonthStr {\n return isValidFormat(value, DATE_YEAR_MONTH_STRING_FORMAT);\n}\n\nexport function isYearStr(value: string): value is YearStr {\n return isValidFormat(value, DATE_YEAR_STRING_FORMAT);\n}\n\nexport function formatDateStr(value: DateInput): DateStr {\n return castDateStr(dayjs(value).format(DATE_STRING_FORMAT));\n}\n\nexport function formatDateTimeStr(value: DateInput): DateTimeStr {\n return castDateTimeStr(dayjs(value).utc().format(\"YYYY-MM-DDTHH:mm:ss.SSS[Z]\"));\n}\n\nexport function formatTimeStr(value: DateInput): TimeStr {\n return castTimeStr(dayjs(value).format(TIME_STRING_WITH_OFFSET_FORMAT));\n}\n\nexport function formatLocalTimeStr(value: DateInput): LocalTimeStr {\n return castLocalTimeStr(dayjs(value).format(TIME_STRING_WITHOUT_OFFSET_FORMAT));\n}\n\nexport function formatYearMonthStr(value: DateInput): YearMonthStr {\n return castYearMonthStr(dayjs(value).format(DATE_YEAR_MONTH_STRING_FORMAT));\n}\n\nexport function formatYearStr(value: DateInput): YearStr {\n return castYearStr(dayjs(value).format(DATE_YEAR_STRING_FORMAT));\n}\n\nexport function isValidDate(dateStr: string): boolean {\n const d = new Date(dateStr);\n return !Number.isNaN(d.getTime());\n}\n\nexport function isSameYearMonth(date1: DateInput, date2: DateInput): boolean {\n const d1 = dayjs(date1);\n const d2 = dayjs(date2);\n return d1.isSame(d2, \"month\") && d1.isSame(d2, \"year\");\n}\n\nexport function isCurrentMonth(date: DateInput): boolean {\n return isSameYearMonth(date, new Date());\n}\n\nexport function isFutureMonth(date: string): boolean {\n const inputDate = new Date(date);\n const today = new Date();\n\n // Extract year and month\n const inputYear = inputDate.getFullYear();\n const inputMonth = inputDate.getMonth(); // 0-based (0 = Jan)\n const currentYear = today.getFullYear();\n const currentMonth = today.getMonth();\n\n // Compare year-month\n return inputYear > currentYear || (inputYear === currentYear && inputMonth > currentMonth);\n}\n\nexport function addSecondToDate(date: DateInput): Dayjs {\n return dayjs(date).add(1, \"second\");\n}\n/**\n * Returns the oldest date string from a list of date strings.\n * @param dateStrList List of date strings (ISO or other formats supported by dayjs).\n * @returns The oldest date string, or an empty string if the list is empty.\n */\nexport function minDateStr(dateStrList: any[]): string {\n return minMaxDateStr(dateStrList, false);\n}\n\n/**\n * Returns the newest date string from a list of date strings.\n * @param dateStrList List of date strings (ISO or other formats supported by dayjs).\n * @returns The newest date string, or an empty string if the list is empty.\n */\nexport function maxDateStr(dateStrList: any[]): string {\n return minMaxDateStr(dateStrList, true);\n}\n\nfunction minMaxDateStr(dateStrList: any[], isMax: boolean): string {\n if (!dateStrList || dateStrList.length === 0) return \"\";\n\n const filtered = dateStrList.filter((d) => !!d);\n if (filtered.length === 0) return \"\";\n\n return filtered.slice(1).reduce((selectedDate, current) => {\n if (isMax) return dayjs(current).isAfter(dayjs(selectedDate)) ? current : selectedDate;\n return dayjs(current).isBefore(dayjs(selectedDate)) ? current : selectedDate;\n }, filtered[0]);\n}\n"]}
@@ -1,6 +1,4 @@
1
- import { BaseEntity, ChangedField, TraceChange } from "../model/base.model";
2
- import { DynamoIndexMap } from "../model/dynamodb.model";
3
- import { Filter } from "../model/filter.model";
1
+ import { ChangedField, DynamoIndexMap, Filter, TraceChange } from "../model/index.js";
4
2
  export declare const hasField: (obj: object, fieldName: string) => boolean;
5
3
  export declare function isMethodeHasKeyword(methodName: string, keywords: string[]): boolean;
6
4
  export declare function handleRangeFilters(filter: Filter): Filter;
@@ -17,14 +15,6 @@ export declare const copyField: (object: any, fromFieldName: string, toFieldName
17
15
  * @returns New array of objects with filtered fields
18
16
  */
19
17
  export declare function removeFields<T extends object>(dataList: T[], includes?: string[], excludes?: string[]): Partial<T>[];
20
- /**
21
- * @deprecated Use `setSystemData methode in crudService` instead.
22
- */
23
- export declare const addDates: (entity: Partial<BaseEntity>) => Partial<BaseEntity>;
24
- /**
25
- * @deprecated Use `setSystemData methode in crudService` instead.
26
- */
27
- export declare const addDatesAndId: (entity: Partial<BaseEntity>) => Partial<BaseEntity>;
28
18
  /**
29
19
  * Recursively checks if an object contains any meaningful content.
30
20
  * - Returns false for null, undefined, empty objects, or empty arrays.
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.util.d.ts","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAiB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK/C,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;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,OAAO,CAAC,UAAU,CAAC,KAAG,OAAO,CAAC,UAAU,CAIxE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,OAAO,CAAC,UAAU,CAAC,KAAG,OAAO,CAAC,UAAU,CAG7E,CAAC;AAEF;;;;;;;;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,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,9 +1,6 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.addDatesAndId = exports.addDates = exports.copyField = exports.fieldsInclude = exports.hasField = void 0;
3
+ exports.copyField = exports.fieldsInclude = exports.hasField = void 0;
7
4
  exports.isMethodeHasKeyword = isMethodeHasKeyword;
8
5
  exports.handleRangeFilters = handleRangeFilters;
9
6
  exports.parseIndexFilter = parseIndexFilter;
@@ -14,9 +11,8 @@ exports.removeEmptyFields = removeEmptyFields;
14
11
  exports.computeChangedFields = computeChangedFields;
15
12
  exports.pickDefined = pickDefined;
16
13
  exports.pickDefinedDeep = pickDefinedDeep;
17
- const base_model_1 = require("../model/base.model");
14
+ const types_1 = require("../model/index.js");
18
15
  const http_util_1 = require("./http/http.util");
19
- const dayjs_1 = __importDefault(require("dayjs"));
20
16
  const string_util_1 = require("./string.util");
21
17
  const hasField = (obj, fieldName) => {
22
18
  return Object.hasOwn(obj, fieldName);
@@ -234,25 +230,6 @@ function deleteByPath(obj, path) {
234
230
  delete parent[lastKey];
235
231
  }
236
232
  }
237
- /**
238
- * @deprecated Use `setSystemData methode in crudService` instead.
239
- */
240
- const addDates = (entity) => {
241
- if (!entity.createdAt)
242
- entity.createdAt = (0, dayjs_1.default)().toISOString();
243
- entity.updatedAt = (0, dayjs_1.default)().toISOString();
244
- return entity;
245
- };
246
- exports.addDates = addDates;
247
- /**
248
- * @deprecated Use `setSystemData methode in crudService` instead.
249
- */
250
- const addDatesAndId = (entity) => {
251
- if (!entity.id)
252
- entity.id = crypto.randomUUID();
253
- return (0, exports.addDates)(entity);
254
- };
255
- exports.addDatesAndId = addDatesAndId;
256
233
  /**
257
234
  * Recursively checks if an object contains any meaningful content.
258
235
  * - Returns false for null, undefined, empty objects, or empty arrays.
@@ -321,7 +298,7 @@ function computeChangedFields(oldItem, newItem, traceChange) {
321
298
  const diff = diffObjects(oldItem, newItem);
322
299
  const flattened = flattenDiff(diff);
323
300
  console.log("flattened", flattened);
324
- return traceChange.mode === base_model_1.InclusionMode.INCLUDE
301
+ return traceChange.mode === types_1.InclusionMode.INCLUDE
325
302
  ? flattened.filter((f) => traceChange.fields.includes(f.fieldName))
326
303
  : flattened.filter((f) => !traceChange.fields.includes(f.fieldName));
327
304
  }