aws-service-stack 0.18.443 → 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.
- package/dist/_examples/controller/local-task-controller.d.ts.map +1 -1
- package/dist/_examples/controller/local-task-controller.js +1 -1
- package/dist/_examples/controller/local-task-controller.js.map +1 -1
- package/dist/_examples/controller/order/order-config.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-config.js.map +1 -1
- package/dist/_examples/controller/order/order-controller-cron.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-controller-cron.js.map +1 -1
- package/dist/_examples/controller/order/order-controller-streamer.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-controller-streamer.js.map +1 -1
- package/dist/_examples/controller/order/order-controller.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-controller.js.map +1 -1
- package/dist/_examples/controller/order/order-cron.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-cron.js.map +1 -1
- package/dist/_examples/controller/order/order-crud.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-crud.js.map +1 -1
- package/dist/_examples/controller/order/order-streamer.d.ts.map +1 -1
- package/dist/_examples/controller/order/order-streamer.js.map +1 -1
- package/dist/_examples/controller/order-item/order-item-config.d.ts.map +1 -1
- package/dist/_examples/controller/order-item/order-item-config.js.map +1 -1
- package/dist/_examples/controller/order-item/order-item-controller-streamer.d.ts.map +1 -1
- package/dist/_examples/controller/order-item/order-item-controller-streamer.js.map +1 -1
- package/dist/_examples/controller/order-item/order-item-controller.d.ts.map +1 -1
- package/dist/_examples/controller/order-item/order-item-controller.js.map +1 -1
- package/dist/_examples/controller/order-item/order-item-crud.d.ts.map +1 -1
- package/dist/_examples/controller/order-item/order-item-crud.js.map +1 -1
- package/dist/_examples/controller/order-item/order-item-streamer.d.ts.map +1 -1
- package/dist/_examples/controller/order-item/order-item-streamer.js.map +1 -1
- package/dist/_examples/controller/profile/profile-crud-simple.d.ts.map +1 -1
- package/dist/_examples/controller/profile/profile-crud-simple.js.map +1 -1
- package/dist/_examples/controller/profile/profile-crud.d.ts.map +1 -1
- package/dist/_examples/controller/profile/profile-crud.js.map +1 -1
- package/dist/_examples/controller/profile/profile.config.d.ts.map +1 -1
- package/dist/_examples/controller/profile/profile.config.js.map +1 -1
- package/dist/_examples/controller/profile/profile.controller.d.ts.map +1 -1
- package/dist/_examples/controller/profile/profile.controller.js.map +1 -1
- package/dist/_examples/model-shared/example.model.js.map +1 -1
- package/dist/_examples/model-shared/order.model.js.map +1 -1
- package/dist/_examples/repositories/order/order-db.repo.js.map +1 -1
- package/dist/_examples/repositories/order/order-es.repo.js.map +1 -1
- package/dist/_examples/repositories/order/order-item-db.repo.js.map +1 -1
- package/dist/_examples/repositories/order/order-item-es.repo.js.map +1 -1
- package/dist/_examples/repositories/profile/profile-repo-db.js.map +1 -1
- package/dist/_examples/service/order/order-item-service-stream.d.ts.map +1 -1
- package/dist/_examples/service/order/order-item-service-stream.js.map +1 -1
- package/dist/_examples/service/order/order-item-service.d.ts.map +1 -1
- package/dist/_examples/service/order/order-item-service.js.map +1 -1
- package/dist/_examples/service/order/order-service-stream.d.ts.map +1 -1
- package/dist/_examples/service/order/order-service-stream.js.map +1 -1
- package/dist/_examples/service/order/order-service.d.ts.map +1 -1
- package/dist/_examples/service/order/order-service.js.map +1 -1
- package/dist/_examples/service/profile-service.d.ts.map +1 -1
- package/dist/_examples/service/profile-service.js.map +1 -1
- package/dist/controller/base-controller.d.ts.map +1 -1
- package/dist/controller/base-controller.js.map +1 -1
- package/dist/controller/controller-api.d.ts.map +1 -1
- package/dist/controller/controller-api.js +2 -2
- package/dist/controller/controller-api.js.map +1 -1
- package/dist/controller/controller-request.d.ts +3 -3
- package/dist/controller/controller-request.d.ts.map +1 -1
- package/dist/controller/controller-request.js.map +1 -1
- package/dist/controller/controller-role.d.ts.map +1 -1
- package/dist/controller/controller-role.js.map +1 -1
- package/dist/controller/controller-stream.d.ts.map +1 -1
- package/dist/controller/controller-stream.js.map +1 -1
- package/dist/exception/errors.d.ts.map +1 -1
- package/dist/exception/errors.js.map +1 -1
- package/dist/exception/exception-handler.d.ts.map +1 -1
- package/dist/exception/exception-handler.js.map +1 -1
- package/dist/function/cognito/cognito.function.js.map +1 -1
- package/dist/function/logger.d.ts.map +1 -1
- package/dist/function/s3/s3.function.js.map +1 -1
- package/dist/model/base.config.d.ts.map +1 -1
- package/dist/model/base.config.js.map +1 -1
- package/dist/model/base.model.js.map +1 -1
- package/dist/model/cognito-user.model.js.map +1 -1
- package/dist/model/dynamodb.model.d.ts.map +1 -1
- package/dist/model/dynamodb.model.js.map +1 -1
- package/dist/model/filter.model.js.map +1 -1
- package/dist/model/http.model.js.map +1 -1
- package/dist/model/validation.model.js.map +1 -1
- package/dist/provider/apigateway.d.ts.map +1 -1
- package/dist/provider/apigateway.js.map +1 -1
- package/dist/provider/dynamodb.js.map +1 -1
- package/dist/provider/opensearch.d.ts.map +1 -1
- package/dist/provider/opensearch.js.map +1 -1
- package/dist/repositories/base-db.repo.d.ts.map +1 -1
- package/dist/repositories/base-db.repo.js.map +1 -1
- package/dist/repositories/base-es.repo.d.ts.map +1 -1
- package/dist/repositories/base-es.repo.js.map +1 -1
- package/dist/service/api.services/api.service.d.ts.map +1 -1
- package/dist/service/api.services/api.service.js.map +1 -1
- package/dist/service/auth.service.d.ts.map +1 -1
- package/dist/service/auth.service.js.map +1 -1
- package/dist/service/base.service.d.ts.map +1 -1
- package/dist/service/base.service.js.map +1 -1
- package/dist/service/crud-operations.d.ts +8 -2
- package/dist/service/crud-operations.d.ts.map +1 -1
- package/dist/service/crud-operations.js +24 -5
- package/dist/service/crud-operations.js.map +1 -1
- package/dist/service/crud.service.d.ts +1 -0
- package/dist/service/crud.service.d.ts.map +1 -1
- package/dist/service/crud.service.interface.d.ts +5 -0
- package/dist/service/crud.service.interface.d.ts.map +1 -1
- package/dist/service/crud.service.interface.js.map +1 -1
- package/dist/service/crud.service.js +3 -0
- package/dist/service/crud.service.js.map +1 -1
- package/dist/service/key-aws.services.d.ts.map +1 -1
- package/dist/service/key-aws.services.js.map +1 -1
- package/dist/service/permission.cache.d.ts.map +1 -1
- package/dist/service/permission.cache.js.map +1 -1
- package/dist/service/permission.repo.d.ts.map +1 -1
- package/dist/service/permission.repo.js.map +1 -1
- package/dist/service/permission.service.d.ts.map +1 -1
- package/dist/service/permission.service.js.map +1 -1
- package/dist/service/socket.service.d.ts.map +1 -1
- package/dist/service/socket.service.js.map +1 -1
- package/dist/service/stream.service.d.ts.map +1 -1
- package/dist/service/stream.service.js.map +1 -1
- package/dist/utils/array.util.d.ts.map +1 -1
- package/dist/utils/array.util.js.map +1 -1
- package/dist/utils/auth.util.js.map +1 -1
- package/dist/utils/data.util.d.ts.map +1 -1
- package/dist/utils/data.util.js.map +1 -1
- package/dist/utils/date.util.js.map +1 -1
- package/dist/utils/dynamodb.utils.d.ts.map +1 -1
- package/dist/utils/dynamodb.utils.js.map +1 -1
- package/dist/utils/env.util.d.ts.map +1 -1
- package/dist/utils/env.util.js.map +1 -1
- package/dist/utils/http/http-request.d.ts.map +1 -1
- package/dist/utils/http/http-request.js.map +1 -1
- package/dist/utils/http/http.util.d.ts.map +1 -1
- package/dist/utils/http/http.util.js.map +1 -1
- package/dist/utils/json.util.js.map +1 -1
- package/dist/utils/opensearch/opensearch.parser.aggs.js.map +1 -1
- package/dist/utils/opensearch/opensearch.parser.d.ts.map +1 -1
- package/dist/utils/opensearch/opensearch.parser.js.map +1 -1
- package/dist/utils/opensearch/opensearch.parser.keyword.js.map +1 -1
- package/dist/utils/opensearch/opensearch.parser.sort.js.map +1 -1
- package/dist/utils/opensearch/opensearch.parser.utils.js.map +1 -1
- package/dist/utils/opensearch/opensearch.transform.js.map +1 -1
- package/dist/utils/opensearch.utils.js.map +1 -1
- package/dist/utils/reflection.util.d.ts.map +1 -1
- package/dist/utils/reflection.util.js.map +1 -1
- package/dist/utils/string.util.d.ts.map +1 -1
- package/dist/utils/string.util.js.map +1 -1
- package/dist/utils/validation.util.d.ts.map +1 -1
- package/dist/utils/validation.util.js.map +1 -1
- package/package.json +25 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../../src/service/crud.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BaseEntity,\n BaseRepoDB,\n BaseRepoDBImpl,\n BaseRepoES,\n BaseRepoESImpl,\n CognitoUser,\n DynamoIndexMap,\n ErrorReason,\n Filter,\n HttpStatus,\n List,\n} from \"../index\";\nimport { ErrorBase, ErrorDynamoDB, ErrorHttp, ErrorValidation } from \"../exception\";\n\nimport { EntityConfig } from \"@chinggis/types\";\nimport { CrudService } from \"./crud.service.interface\";\nimport {\n DynamoFindOperations,\n DynamoScanOperations,\n DynamoWriteOperations,\n OpenSearchOperations,\n} from \"./crud-operations\";\n\nexport abstract class CrudServiceImpl<\n T extends BaseEntity,\n D extends BaseRepoDB<T>,\n S extends BaseRepoES<T>,\n> implements CrudService<T> {\n protected repoDB: D;\n protected repoES: S;\n protected config: EntityConfig;\n private writeOps: DynamoWriteOperations<T, D>;\n private findOps: DynamoFindOperations<T, D>;\n private scanOps: DynamoScanOperations<T, D>;\n private searchOps: OpenSearchOperations<T, S>;\n\n protected constructor(repoDB: D, repoES: S, printWarning: boolean = true) {\n if (repoDB != null && !(repoDB instanceof BaseRepoDBImpl))\n if (printWarning) console.error(`repoDB is not an instance of BaseRepoDBImpl ${this.constructor.name}`);\n\n if (repoES != null && !(repoES instanceof BaseRepoESImpl))\n if (printWarning) console.error(`repoES is not an instance of BaseRepoESImpl ${this.constructor.name}`);\n\n if (repoDB == null && repoES == null)\n if (printWarning) console.error(`repo initialization is required ${this.constructor.name}`);\n\n this.repoDB = repoDB;\n this.repoES = repoES;\n this.initializeOperations();\n }\n\n getTableName(): string {\n return this.repoDB.getTableName();\n }\n\n async findQuery(queryParams: string): Promise<List<Partial<T>>> {\n return this.findOps.findQuery(queryParams);\n }\n\n async deleteFields(entityId: string, fields: string[]): Promise<Partial<T>> {\n return this.writeOps.deleteFields(entityId, fields);\n }\n\n async searchQuery(\n queryParams: any,\n debug?: boolean,\n ): Promise<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n return this.searchOps.searchQuery(queryParams, debug);\n }\n\n async searchQueryTotalCount(queryParams: any): Promise<number> {\n return this.searchOps.searchQueryTotalCount(queryParams);\n }\n\n async increment(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.writeOps.increment(entityId, fieldName, value);\n }\n\n async decrement(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.writeOps.decrement(entityId, fieldName, value);\n }\n\n async incrementFields(entityId: string, adjustments: Record<string, number>): Promise<T> {\n return this.writeOps.incrementFields(entityId, adjustments);\n }\n\n async decrementFields(entityId: string, adjustments: Record<string, number>): Promise<T> {\n return this.writeOps.decrementFields(entityId, adjustments);\n }\n\n async search(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n return this.searchOps.search(filter, debug);\n }\n\n async searchFieldNotExist(fieldName: string, from: number, size: number): Promise<Partial<T>[]> {\n return this.searchOps.searchFieldNotExist(fieldName, from, size);\n }\n\n async save(entity: Partial<T>, ownerId: string, parentId?: string, createdByUser?: string | CognitoUser): Promise<T> {\n return this.writeOps.save(entity, ownerId, parentId, createdByUser);\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 return this.writeOps.saveAll(entities, ownerId, parentId, createdByUser, isTransactional);\n }\n\n async update(entity: Partial<T>, requestUser?: CognitoUser, fields?: string[]): Promise<T> {\n return this.writeOps.update(entity, requestUser, fields);\n }\n\n async updateAll(\n entities: Partial<T>[],\n fields: string[],\n requestUser?: CognitoUser,\n isTransactional?: boolean,\n ): Promise<boolean> {\n return this.writeOps.updateAll(entities, fields, requestUser, isTransactional);\n }\n\n async updateFields(entity: Partial<T>, fields: string[], requestUser?: CognitoUser): Promise<Partial<T>> {\n return this.writeOps.updateFields(entity, fields);\n }\n\n async remove(entityId: string, requestUser?: CognitoUser): Promise<boolean> {\n return this.writeOps.remove(entityId, requestUser);\n }\n\n async removeAll(entityIds: string[], requestUser?: CognitoUser): Promise<boolean> {\n return this.writeOps.removeAll(entityIds, requestUser);\n }\n\n async removeMatch(filter: Filter | string, requestUser?: CognitoUser): Promise<boolean> {\n const { items } = await this.find(filter);\n if (items.length === 0) return true;\n\n return this.removeAll(\n items.map((item) => item.id),\n requestUser,\n );\n }\n\n async changeOwner(entityId: string, ownerId: string): Promise<T> {\n return this.writeOps.changeOwner(entityId, ownerId);\n }\n\n setTable(tableName: string, dynamoIndexMap: DynamoIndexMap): boolean {\n this.repoDB.setTable(tableName);\n this.repoDB.setIndexMap(dynamoIndexMap);\n return true;\n }\n\n setOpensearch(indexName: string, opensearchEndpoint: string): boolean {\n this.repoES.setIndexName(indexName);\n this.repoES.setEndpoint(opensearchEndpoint);\n return true;\n }\n\n getIndexES(): string {\n return this.repoES.getIndexName();\n }\n\n getIndexMapDB(): DynamoIndexMap {\n return this.repoDB.getIndexMap();\n }\n\n setIndexMapDB(indexMap: DynamoIndexMap): boolean {\n this.repoDB.setIndexMap(indexMap);\n return true;\n }\n\n async findAll(): Promise<T[]> {\n return this.findOps.findAll();\n }\n\n async findAllMatch(filter: Filter | string): Promise<T[]> {\n return this.findOps.findAllMatch(filter);\n }\n\n async findAllByIndex(indexName: string, indexValue: any): Promise<T[]> {\n return this.findOps.findAllByIndex(indexName, indexValue);\n }\n\n async findByField(fieldName: string, fieldValue: any): Promise<List<T>> {\n return this.findOps.findByField(fieldName, fieldValue);\n }\n\n async findFirst(fieldName: string, fieldValue: string | boolean | number | Date): Promise<T> {\n return this.findOps.findFirst(fieldName, fieldValue);\n }\n\n async find(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n return this.findOps.find(filter, debug);\n }\n\n async *findStream(filter: string, size?: number): AsyncGenerator<T> {\n yield* this.findOps.findStream(filter, size);\n }\n\n async *searchStream(filter: string, size?: number): AsyncGenerator<T> {\n yield* this.searchOps.searchStream(filter, size);\n }\n\n async *searchStreamAggr(\n filter: string,\n size?: number,\n ): AsyncGenerator<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n yield* this.searchOps.searchStreamAggr(filter, size);\n }\n\n async findById(entityId: string, requestUser?: CognitoUser): Promise<T> {\n return this.writeOps.findById(entityId, requestUser);\n }\n\n async findByIds(entityIds: string[], requestUser?: CognitoUser): Promise<T[]> {\n return this.writeOps.findByIds(entityIds, requestUser);\n }\n\n async scan(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n return this.scanOps.scan(filter, debug);\n }\n\n throwErrorHttp(error: { message: string; code: number }, message?: string, errorContent?: any): void {\n throw new ErrorHttp({ code: error.code, msg: error.message }, message, errorContent);\n }\n\n throwErrorsHttp(code: number, message: string, errorContent?: any): void {\n throw new ErrorHttp({ code, msg: message }, message, errorContent);\n }\n\n throwHttpError(status: HttpStatus, message: string, content?: any, reason?: ErrorReason): void {\n throw new ErrorHttp(status, message, content, reason);\n }\n\n throwErrorDatabase(tableName: string, command: any, errorContent?: any): void {\n throw new ErrorDynamoDB(tableName, command, errorContent);\n }\n\n throwErrorValidation(entityName: string, validation: Map<string, any>, errorContent?: any): void {\n throw new ErrorValidation(entityName, validation, errorContent);\n }\n\n throwError(code: number, message: string, errorContent?: any): void {\n throw new ErrorBase(code, message, errorContent);\n }\n\n setConfig(config: EntityConfig) {\n this.config = config;\n\n if (this.repoDB) {\n this.repoDB.setIndexMap(config.DYNAMO_DB?.MAP);\n this.repoDB.setTable(config.DYNAMO_DB?.NAME);\n }\n\n this.writeOps = new DynamoWriteOperations(this.repoDB, config);\n this.findOps = new DynamoFindOperations(this.repoDB, config);\n this.scanOps = new DynamoScanOperations(this.repoDB, config);\n this.searchOps = new OpenSearchOperations(this.repoES, config);\n\n if (this.repoES) {\n this.repoES.setEndpoint(config.OPEN_SEARCH.DOMAIN);\n this.repoES.setIndexName(config.OPEN_SEARCH.INDEX);\n }\n }\n\n /**\n * Creates operation delegates with the current config snapshot.\n */\n private initializeOperations(): void {\n this.writeOps = new DynamoWriteOperations(this.repoDB, this.config);\n this.findOps = new DynamoFindOperations(this.repoDB, this.config);\n this.scanOps = new DynamoScanOperations(this.repoDB, this.config);\n this.searchOps = new OpenSearchOperations(this.repoES, this.config);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../../src/service/crud.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BaseEntity,\n BaseRepoDB,\n BaseRepoDBImpl,\n BaseRepoES,\n BaseRepoESImpl,\n CognitoUser,\n DynamoIndexMap,\n ErrorReason,\n Filter,\n HttpStatus,\n List,\n} from \"../index\";\nimport { ErrorBase, ErrorDynamoDB, ErrorHttp, ErrorValidation } from \"../exception\";\n\nimport { EntityConfig } from \"@chinggis/types\";\nimport { CrudService } from \"./crud.service.interface\";\nimport {\n DynamoFindOperations,\n DynamoScanOperations,\n DynamoWriteOperations,\n OpenSearchOperations,\n} from \"./crud-operations\";\n\nexport abstract class CrudServiceImpl<\n T extends BaseEntity,\n D extends BaseRepoDB<T>,\n S extends BaseRepoES<T>,\n> implements CrudService<T> {\n protected repoDB: D;\n protected repoES: S;\n protected config: EntityConfig;\n private writeOps: DynamoWriteOperations<T, D>;\n private findOps: DynamoFindOperations<T, D>;\n private scanOps: DynamoScanOperations<T, D>;\n private searchOps: OpenSearchOperations<T, S>;\n\n protected constructor(repoDB: D, repoES: S, printWarning: boolean = true) {\n if (repoDB != null && !(repoDB instanceof BaseRepoDBImpl))\n if (printWarning) console.error(`repoDB is not an instance of BaseRepoDBImpl ${this.constructor.name}`);\n\n if (repoES != null && !(repoES instanceof BaseRepoESImpl))\n if (printWarning) console.error(`repoES is not an instance of BaseRepoESImpl ${this.constructor.name}`);\n\n if (repoDB == null && repoES == null)\n if (printWarning) console.error(`repo initialization is required ${this.constructor.name}`);\n\n this.repoDB = repoDB;\n this.repoES = repoES;\n this.initializeOperations();\n }\n\n getTableName(): string {\n return this.repoDB.getTableName();\n }\n\n async findQuery(queryParams: string): Promise<List<Partial<T>>> {\n return this.findOps.findQuery(queryParams);\n }\n\n async deleteFields(entityId: string, fields: string[]): Promise<Partial<T>> {\n return this.writeOps.deleteFields(entityId, fields);\n }\n\n async searchQuery(\n queryParams: any,\n debug?: boolean,\n ): Promise<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n return this.searchOps.searchQuery(queryParams, debug);\n }\n\n async searchQueryTotalCount(queryParams: any): Promise<number> {\n return this.searchOps.searchQueryTotalCount(queryParams);\n }\n\n async increment(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.writeOps.increment(entityId, fieldName, value);\n }\n\n async decrement(entityId: string, fieldName: string, value = 1): Promise<T> {\n return this.writeOps.decrement(entityId, fieldName, value);\n }\n\n async incrementFields(entityId: string, adjustments: Record<string, number>): Promise<T> {\n return this.writeOps.incrementFields(entityId, adjustments);\n }\n\n async decrementFields(entityId: string, adjustments: Record<string, number>): Promise<T> {\n return this.writeOps.decrementFields(entityId, adjustments);\n }\n\n async search(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n return this.searchOps.search(filter, debug);\n }\n\n async searchFieldNotExist(fieldName: string, from: number, size: number): Promise<Partial<T>[]> {\n return this.searchOps.searchFieldNotExist(fieldName, from, size);\n }\n\n async save(entity: Partial<T>, ownerId: string, parentId?: string, createdByUser?: string | CognitoUser): Promise<T> {\n return this.writeOps.save(entity, ownerId, parentId, createdByUser);\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 return this.writeOps.saveAll(entities, ownerId, parentId, createdByUser, isTransactional);\n }\n\n async update(entity: Partial<T>, requestUser?: CognitoUser, fields?: string[]): Promise<T> {\n return this.writeOps.update(entity, requestUser, fields);\n }\n\n async updateAll(\n entities: Partial<T>[],\n fields: string[],\n requestUser?: CognitoUser,\n isTransactional?: boolean,\n ): Promise<boolean> {\n return this.writeOps.updateAll(entities, fields, requestUser, isTransactional);\n }\n\n async updateFields(entity: Partial<T>, fields: string[], requestUser?: CognitoUser): Promise<Partial<T>> {\n return this.writeOps.updateFields(entity, fields);\n }\n\n async remove(entityId: string, requestUser?: CognitoUser): Promise<boolean> {\n return this.writeOps.remove(entityId, requestUser);\n }\n\n async removeAll(entityIds: string[], requestUser?: CognitoUser): Promise<boolean> {\n return this.writeOps.removeAll(entityIds, requestUser);\n }\n\n async removeMatch(filter: Filter | string, requestUser?: CognitoUser): Promise<boolean> {\n const { items } = await this.find(filter);\n if (items.length === 0) return true;\n\n return this.removeAll(\n items.map((item) => item.id),\n requestUser,\n );\n }\n\n async changeOwner(entityId: string, ownerId: string): Promise<T> {\n return this.writeOps.changeOwner(entityId, ownerId);\n }\n\n setTable(tableName: string, dynamoIndexMap: DynamoIndexMap): boolean {\n this.repoDB.setTable(tableName);\n this.repoDB.setIndexMap(dynamoIndexMap);\n return true;\n }\n\n setOpensearch(indexName: string, opensearchEndpoint: string): boolean {\n this.repoES.setIndexName(indexName);\n this.repoES.setEndpoint(opensearchEndpoint);\n return true;\n }\n\n getIndexES(): string {\n return this.repoES.getIndexName();\n }\n\n getIndexMapDB(): DynamoIndexMap {\n return this.repoDB.getIndexMap();\n }\n\n setIndexMapDB(indexMap: DynamoIndexMap): boolean {\n this.repoDB.setIndexMap(indexMap);\n return true;\n }\n\n async findAll(): Promise<T[]> {\n return this.findOps.findAll();\n }\n\n async findAllMatch(filter: Filter | string): Promise<T[]> {\n return this.findOps.findAllMatch(filter);\n }\n\n async findAllByIndex(indexName: string, indexValue: any): Promise<T[]> {\n return this.findOps.findAllByIndex(indexName, indexValue);\n }\n\n async findByField(fieldName: string, fieldValue: any): Promise<List<T>> {\n return this.findOps.findByField(fieldName, fieldValue);\n }\n\n async findFirst(fieldName: string, fieldValue: string | boolean | number | Date): Promise<T> {\n return this.findOps.findFirst(fieldName, fieldValue);\n }\n\n async find(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n return this.findOps.find(filter, debug);\n }\n\n async *findStream(filter: string, size?: number): AsyncGenerator<T> {\n yield* this.findOps.findStream(filter, size);\n }\n\n async *findStreamAll(size?: number): AsyncGenerator<T> {\n yield* this.findOps.findStreamAll(size);\n }\n\n async *searchStream(filter: string, size?: number): AsyncGenerator<T> {\n yield* this.searchOps.searchStream(filter, size);\n }\n\n async *searchStreamAggr(\n filter: string,\n size?: number,\n ): AsyncGenerator<{ items: Partial<T>[]; total: number; aggs?: Record<string, any> }> {\n yield* this.searchOps.searchStreamAggr(filter, size);\n }\n\n async findById(entityId: string, requestUser?: CognitoUser): Promise<T> {\n return this.writeOps.findById(entityId, requestUser);\n }\n\n async findByIds(entityIds: string[], requestUser?: CognitoUser): Promise<T[]> {\n return this.writeOps.findByIds(entityIds, requestUser);\n }\n\n async scan(filter: Filter | string, debug?: boolean): Promise<List<Partial<T>>> {\n return this.scanOps.scan(filter, debug);\n }\n\n throwErrorHttp(error: { message: string; code: number }, message?: string, errorContent?: any): void {\n throw new ErrorHttp({ code: error.code, msg: error.message }, message, errorContent);\n }\n\n throwErrorsHttp(code: number, message: string, errorContent?: any): void {\n throw new ErrorHttp({ code, msg: message }, message, errorContent);\n }\n\n throwHttpError(status: HttpStatus, message: string, content?: any, reason?: ErrorReason): void {\n throw new ErrorHttp(status, message, content, reason);\n }\n\n throwErrorDatabase(tableName: string, command: any, errorContent?: any): void {\n throw new ErrorDynamoDB(tableName, command, errorContent);\n }\n\n throwErrorValidation(entityName: string, validation: Map<string, any>, errorContent?: any): void {\n throw new ErrorValidation(entityName, validation, errorContent);\n }\n\n throwError(code: number, message: string, errorContent?: any): void {\n throw new ErrorBase(code, message, errorContent);\n }\n\n setConfig(config: EntityConfig) {\n this.config = config;\n\n if (this.repoDB) {\n this.repoDB.setIndexMap(config.DYNAMO_DB?.MAP);\n this.repoDB.setTable(config.DYNAMO_DB?.NAME);\n }\n\n this.writeOps = new DynamoWriteOperations(this.repoDB, config);\n this.findOps = new DynamoFindOperations(this.repoDB, config);\n this.scanOps = new DynamoScanOperations(this.repoDB, config);\n this.searchOps = new OpenSearchOperations(this.repoES, config);\n\n if (this.repoES) {\n this.repoES.setEndpoint(config.OPEN_SEARCH.DOMAIN);\n this.repoES.setIndexName(config.OPEN_SEARCH.INDEX);\n }\n }\n\n /**\n * Creates operation delegates with the current config snapshot.\n */\n private initializeOperations(): void {\n this.writeOps = new DynamoWriteOperations(this.repoDB, this.config);\n this.findOps = new DynamoFindOperations(this.repoDB, this.config);\n this.scanOps = new DynamoScanOperations(this.repoDB, this.config);\n this.searchOps = new OpenSearchOperations(this.repoES, this.config);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-aws.services.d.ts","sourceRoot":"","sources":["../../src/service/key-aws.services.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,qBACa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;
|
|
1
|
+
{"version":3,"file":"key-aws.services.d.ts","sourceRoot":"","sources":["../../src/service/key-aws.services.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,qBACa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAE9C,YAAY,MAAM,EAAE,MAAM,EAEzB;IAEK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUxC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-aws.services.js","sourceRoot":"","sources":["../../src/service/key-aws.services.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4EAA8F;AAE9F,mCAAiC;AAI1B,IAAM,cAAc,GAApB,MAAM,cAAc;IACR,MAAM,CAAuB;IAE9C,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,6CAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,wBAAwB;IACtF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC;gBACxC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,OAAO,QAAQ,CAAC,YAAY,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF,CAAA
|
|
1
|
+
{"version":3,"file":"key-aws.services.js","sourceRoot":"","sources":["../../src/service/key-aws.services.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4EAA8F;AAE9F,mCAAiC;AAI1B,IAAM,cAAc,GAApB,MAAM,cAAc;IACR,MAAM,CAAuB;IAE9C,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,6CAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,wBAAwB;IACtF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC;gBACxC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,OAAO,QAAQ,CAAC,YAAY,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF,CAAA;;yBAlBY,cAAc;IAD1B,IAAA,gBAAO,EAAC,YAAY,CAAC;;GACT,cAAc,CAkB1B","sourcesContent":["import { GetSecretValueCommand, SecretsManagerClient } from \"@aws-sdk/client-secrets-manager\";\n\nimport { Service } from \"typedi\";\nimport { KeyService } from \"./key.services.interface\";\n\n@Service(\"KeyService\")\nexport class KeyServiceImpl implements KeyService {\n private readonly client: SecretsManagerClient;\n\n constructor(region: string) {\n this.client = new SecretsManagerClient({ region: region }); // Change to your region\n }\n\n async get(keyId: string): Promise<string> {\n try {\n const command = new GetSecretValueCommand({\n SecretId: keyId,\n });\n const response = await this.client.send(command);\n return response.SecretString;\n } catch (error) {\n console.error(\"Error fetching key details:\", error);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.cache.d.ts","sourceRoot":"","sources":["../../src/service/permission.cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AASjD;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;
|
|
1
|
+
{"version":3,"file":"permission.cache.d.ts","sourceRoot":"","sources":["../../src/service/permission.cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AASjD;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,YAAY,KAAK,GAAE,MAAuB,EAEzC;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQlC;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAExC;IAED;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAenG;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5B;IAED,KAAK,IAAI,IAAI,CAEZ;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.cache.js","sourceRoot":"","sources":["../../src/service/permission.cache.ts"],"names":[],"mappings":";;;AAOA,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEpD;;;;;;;GAOG;AACH
|
|
1
|
+
{"version":3,"file":"permission.cache.js","sourceRoot":"","sources":["../../src/service/permission.cache.ts"],"names":[],"mappings":";;;AAOA,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEpD;;;;;;;GAOG;AACH;IACmB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAC;IACzD,KAAK,CAAS;IAE/B,YAAY,KAAK,GAAW,cAAc;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAiB;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,OAAyC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,MAAM;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF","sourcesContent":["import { Permission } from \"../model/role.model\";\n\ninterface CacheEntry {\n value: Permission;\n expiresAt: number;\n}\n\nconst DEFAULT_TTL_MS = 15 * 60 * 1000; // 15 minutes\n\n/**\n * In-memory read-through cache for Permission entities.\n *\n * - Keyed by permissionKey (deterministic, namespaced).\n * - TTL-based expiry per entry.\n * - Survives across warm Lambda invocations (module-level singleton).\n * - Handles concurrent fetches for the same key via in-flight dedup.\n */\nexport class PermissionCache {\n private readonly store = new Map<string, CacheEntry>();\n private readonly inflight = new Map<string, Promise<Permission | null>>();\n private readonly ttlMs: number;\n\n constructor(ttlMs: number = DEFAULT_TTL_MS) {\n this.ttlMs = ttlMs;\n }\n\n get(key: string): Permission | null {\n const entry = this.store.get(key);\n if (!entry) return null;\n if (Date.now() > entry.expiresAt) {\n this.store.delete(key);\n return null;\n }\n return entry.value;\n }\n\n set(key: string, value: Permission): void {\n this.store.set(key, { value, expiresAt: Date.now() + this.ttlMs });\n }\n\n /**\n * Read-through: returns cached value or calls `fetcher` exactly once.\n * Concurrent calls for the same key share a single in-flight promise.\n */\n async getOrFetch(key: string, fetcher: () => Promise<Permission | null>): Promise<Permission | null> {\n const cached = this.get(key);\n if (cached) return cached;\n\n const existing = this.inflight.get(key);\n if (existing) return existing;\n\n const promise = fetcher().then((result) => {\n this.inflight.delete(key);\n if (result) this.set(key, result);\n return result;\n });\n\n this.inflight.set(key, promise);\n return promise;\n }\n\n invalidate(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\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;AAgBzC;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA6B;
|
|
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;IAEhD,YAAY,SAAS,EAAE,MAAM,EAI5B;IAEK,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAErD;IAEK,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAK3E;IAEK,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAGrE;IAEK,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAa/D;IAEK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CASjE;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEzC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAE/C;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.repo.js","sourceRoot":"","sources":["../../src/service/permission.repo.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAC9D,4DAAyD;AAEzD,4DAAuD;AAGvD,kDAAuD;AACvD,8DAA4D;AAE5D,SAAS,wBAAwB;IAC/B,MAAM,GAAG,GAAG,IAAI,+BAAc,EAAE,CAAC;IACjC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IACpH,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE3D,GAAG,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../src/service/permission.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;
|
|
1
|
+
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../src/service/permission.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IAExC,YAAY,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAGjD;IAMD,oFAAoF;IAC9E,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAI1E;IAED,mDAAmD;IAC7C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAI9D;IAMD;;;;;;;OAOG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnG;IAMK,gBAAgB,CAAC,KAAK,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;KAC9B,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BtB;IAMK,gBAAgB,CACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,GAC3E,OAAO,CAAC,UAAU,CAAC,CA8BrB;IAMK,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnD;IAMK,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAKzE;IAMD,UAAU,IAAI,IAAI,CAEjB;IAMD,0CAA0C;IAC1C,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../src/service/permission.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Permission } from \"../model/role.model\";\nimport { ErrorHttp, HTTP } from \"../exception\";\nimport { PermissionCache } from \"./permission.cache\";\nimport { PermissionRepo } from \"./permission.repo\";\nimport { Filter, List } from \"@chinggis/types\";\n\n/**\n * PermissionService — cache + orchestration layer for Permission entities.\n *\n * Design decisions:\n * - Read-through cache via PermissionCache (in-flight dedup, TTL).\n * - Repository handles only DB I/O.\n * - Cache invalidation on every mutation.\n * - ~100 roles total, read-heavy → caching makes sense.\n * - Cache keyed by `perm:{permissionKey}` for deterministic, namespaced lookup.\n */\nexport class PermissionService {\n private readonly repo: PermissionRepo;\n private readonly cache: PermissionCache;\n\n constructor(tableName: string, cacheTtlMs?: number) {\n this.repo = new PermissionRepo(tableName);\n this.cache = new PermissionCache(cacheTtlMs);\n }\n\n // ---------------------------------------------------------------------------\n // Core lookup\n // ---------------------------------------------------------------------------\n\n /** Fetch Permission by composite key (role#resource#scope). Read-through cached. */\n async getPermissionByKey(permissionKey: string): Promise<Permission | null> {\n if (!permissionKey) return null;\n\n return this.cache.getOrFetch(`perm:${permissionKey}`, () => this.repo.findByPermissionKey(permissionKey));\n }\n\n /** Fetch Permission by id. Read-through cached. */\n async getPermissionById(id: string): Promise<Permission | null> {\n if (!id) return null;\n\n return this.cache.getOrFetch(`id:${id}`, () => this.repo.findById(id));\n }\n\n // ---------------------------------------------------------------------------\n // Permission check\n // ---------------------------------------------------------------------------\n\n /**\n * Check if the given role+resource+scope has a specific HTTP method allowed.\n *\n * Builds the permissionKey `role#resource#scope`, fetches the Permission,\n * and checks the method map.\n *\n * @returns `true` if allowed, `false` otherwise.\n */\n async hasPermission(role: string, resource: string, scope: string, method: string): Promise<boolean> {\n if (!role || !resource || !scope || !method) return false;\n\n const permissionKey = `${role}#${resource}#${scope}`;\n const permission = await this.getPermissionByKey(permissionKey);\n if (!permission?.method) return false;\n\n const methodKey = method.toUpperCase() as keyof Permission[\"method\"];\n\n return permission.method[methodKey] === true;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — create\n // ---------------------------------------------------------------------------\n\n async createPermission(input: {\n role: string;\n resource: string;\n scope: string;\n method: Permission[\"method\"];\n }): Promise<Permission> {\n if (!input.role?.trim()) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"Role is required\");\n }\n if (!input.resource?.trim()) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"Resource is required\");\n }\n if (!input.scope?.trim()) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"Scope is required\");\n }\n\n // Duplicate check\n const permissionKey = `${input.role.trim()}#${input.resource.trim()}#${input.scope.trim()}`;\n const existing = await this.repo.findByPermissionKey(permissionKey);\n if (existing) {\n throw new ErrorHttp(HTTP.CONFLICT, `Permission \"${permissionKey}\" already exists`);\n }\n\n const saved = await this.repo.save({\n role: input.role.trim(),\n resource: input.resource.trim(),\n scope: input.scope.trim(),\n method: this.normalizeMethodKeys(input.method ?? {}),\n permissionKey,\n });\n\n this.cache.clear();\n return saved;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — update\n // ---------------------------------------------------------------------------\n\n async updatePermission(\n id: string,\n updates: Partial<Pick<Permission, \"role\" | \"resource\" | \"scope\" | \"method\">>,\n ): Promise<Permission> {\n if (!id) throw new ErrorHttp(HTTP.BAD_REQUEST, \"Permission id is required\");\n\n const existing = await this.repo.findById(id);\n if (!existing) throw new ErrorHttp(HTTP.NOT_FOUND, `Permission \"${id}\" not found`);\n\n const data: Partial<Permission> = { id };\n if (updates.role !== undefined) data.role = updates.role.trim();\n if (updates.resource !== undefined) data.resource = updates.resource.trim();\n if (updates.scope !== undefined) data.scope = updates.scope.trim();\n if (updates.method !== undefined) data.method = this.normalizeMethodKeys(updates.method);\n\n // Rebuild key if any key component changed\n const role = data.role ?? existing.role;\n const resource = data.resource ?? existing.resource;\n const scope = data.scope ?? existing.scope;\n data.permissionKey = `${role}#${resource}#${scope}`;\n\n // Check for duplicate key if components changed\n if (data.permissionKey !== existing.permissionKey) {\n const conflict = await this.repo.findByPermissionKey(data.permissionKey);\n if (conflict) {\n throw new ErrorHttp(HTTP.CONFLICT, `Permission \"${data.permissionKey}\" already exists`);\n }\n }\n\n const updated = await this.repo.update(data);\n\n this.cache.clear();\n return updated;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — delete\n // ---------------------------------------------------------------------------\n\n async deletePermission(id: string): Promise<boolean> {\n if (!id) throw new ErrorHttp(HTTP.BAD_REQUEST, \"Permission id is required\");\n\n const existing = await this.repo.findById(id);\n if (!existing) throw new ErrorHttp(HTTP.NOT_FOUND, `Permission \"${id}\" not found`);\n\n const result = await this.repo.delete(id);\n\n this.cache.clear();\n return result;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — list\n // ---------------------------------------------------------------------------\n\n async listPermissions(filter?: Filter): Promise<List<Partial<Permission>>> {\n if (!filter) {\n return this.repo.scan();\n }\n return this.repo.findByIndex(filter);\n }\n\n // ---------------------------------------------------------------------------\n // Cache control (for testing)\n // ---------------------------------------------------------------------------\n\n clearCache(): void {\n this.cache.clear();\n }\n\n // ---------------------------------------------------------------------------\n // Utils\n // ---------------------------------------------------------------------------\n\n /** Normalize method keys to uppercase. */\n private normalizeMethodKeys(method: Permission[\"method\"]): Permission[\"method\"] {\n const normalized: Permission[\"method\"] = {} as any;\n for (const key in method) {\n if (method[key] === true) {\n normalized[key.toUpperCase()] = true;\n }\n }\n return normalized;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../src/service/permission.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Permission } from \"../model/role.model\";\nimport { ErrorHttp, HTTP } from \"../exception\";\nimport { PermissionCache } from \"./permission.cache\";\nimport { PermissionRepo } from \"./permission.repo\";\nimport { Filter, List } from \"@chinggis/types\";\n\n/**\n * PermissionService — cache + orchestration layer for Permission entities.\n *\n * Design decisions:\n * - Read-through cache via PermissionCache (in-flight dedup, TTL).\n * - Repository handles only DB I/O.\n * - Cache invalidation on every mutation.\n * - ~100 roles total, read-heavy → caching makes sense.\n * - Cache keyed by `perm:{permissionKey}` for deterministic, namespaced lookup.\n */\nexport class PermissionService {\n private readonly repo: PermissionRepo;\n private readonly cache: PermissionCache;\n\n constructor(tableName: string, cacheTtlMs?: number) {\n this.repo = new PermissionRepo(tableName);\n this.cache = new PermissionCache(cacheTtlMs);\n }\n\n // ---------------------------------------------------------------------------\n // Core lookup\n // ---------------------------------------------------------------------------\n\n /** Fetch Permission by composite key (role#resource#scope). Read-through cached. */\n async getPermissionByKey(permissionKey: string): Promise<Permission | null> {\n if (!permissionKey) return null;\n\n return this.cache.getOrFetch(`perm:${permissionKey}`, () => this.repo.findByPermissionKey(permissionKey));\n }\n\n /** Fetch Permission by id. Read-through cached. */\n async getPermissionById(id: string): Promise<Permission | null> {\n if (!id) return null;\n\n return this.cache.getOrFetch(`id:${id}`, () => this.repo.findById(id));\n }\n\n // ---------------------------------------------------------------------------\n // Permission check\n // ---------------------------------------------------------------------------\n\n /**\n * Check if the given role+resource+scope has a specific HTTP method allowed.\n *\n * Builds the permissionKey `role#resource#scope`, fetches the Permission,\n * and checks the method map.\n *\n * @returns `true` if allowed, `false` otherwise.\n */\n async hasPermission(role: string, resource: string, scope: string, method: string): Promise<boolean> {\n if (!role || !resource || !scope || !method) return false;\n\n const permissionKey = `${role}#${resource}#${scope}`;\n const permission = await this.getPermissionByKey(permissionKey);\n if (!permission?.method) return false;\n\n const methodKey = method.toUpperCase() as keyof Permission[\"method\"];\n\n return permission.method[methodKey] === true;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — create\n // ---------------------------------------------------------------------------\n\n async createPermission(input: {\n role: string;\n resource: string;\n scope: string;\n method: Permission[\"method\"];\n }): Promise<Permission> {\n if (!input.role?.trim()) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"Role is required\");\n }\n if (!input.resource?.trim()) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"Resource is required\");\n }\n if (!input.scope?.trim()) {\n throw new ErrorHttp(HTTP.BAD_REQUEST, \"Scope is required\");\n }\n\n // Duplicate check\n const permissionKey = `${input.role.trim()}#${input.resource.trim()}#${input.scope.trim()}`;\n const existing = await this.repo.findByPermissionKey(permissionKey);\n if (existing) {\n throw new ErrorHttp(HTTP.CONFLICT, `Permission \"${permissionKey}\" already exists`);\n }\n\n const saved = await this.repo.save({\n role: input.role.trim(),\n resource: input.resource.trim(),\n scope: input.scope.trim(),\n method: this.normalizeMethodKeys(input.method ?? {}),\n permissionKey,\n });\n\n this.cache.clear();\n return saved;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — update\n // ---------------------------------------------------------------------------\n\n async updatePermission(\n id: string,\n updates: Partial<Pick<Permission, \"role\" | \"resource\" | \"scope\" | \"method\">>,\n ): Promise<Permission> {\n if (!id) throw new ErrorHttp(HTTP.BAD_REQUEST, \"Permission id is required\");\n\n const existing = await this.repo.findById(id);\n if (!existing) throw new ErrorHttp(HTTP.NOT_FOUND, `Permission \"${id}\" not found`);\n\n const data: Partial<Permission> = { id };\n if (updates.role !== undefined) data.role = updates.role.trim();\n if (updates.resource !== undefined) data.resource = updates.resource.trim();\n if (updates.scope !== undefined) data.scope = updates.scope.trim();\n if (updates.method !== undefined) data.method = this.normalizeMethodKeys(updates.method);\n\n // Rebuild key if any key component changed\n const role = data.role ?? existing.role;\n const resource = data.resource ?? existing.resource;\n const scope = data.scope ?? existing.scope;\n data.permissionKey = `${role}#${resource}#${scope}`;\n\n // Check for duplicate key if components changed\n if (data.permissionKey !== existing.permissionKey) {\n const conflict = await this.repo.findByPermissionKey(data.permissionKey);\n if (conflict) {\n throw new ErrorHttp(HTTP.CONFLICT, `Permission \"${data.permissionKey}\" already exists`);\n }\n }\n\n const updated = await this.repo.update(data);\n\n this.cache.clear();\n return updated;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — delete\n // ---------------------------------------------------------------------------\n\n async deletePermission(id: string): Promise<boolean> {\n if (!id) throw new ErrorHttp(HTTP.BAD_REQUEST, \"Permission id is required\");\n\n const existing = await this.repo.findById(id);\n if (!existing) throw new ErrorHttp(HTTP.NOT_FOUND, `Permission \"${id}\" not found`);\n\n const result = await this.repo.delete(id);\n\n this.cache.clear();\n return result;\n }\n\n // ---------------------------------------------------------------------------\n // CRUD — list\n // ---------------------------------------------------------------------------\n\n async listPermissions(filter?: Filter): Promise<List<Partial<Permission>>> {\n if (!filter) {\n return this.repo.scan();\n }\n return this.repo.findByIndex(filter);\n }\n\n // ---------------------------------------------------------------------------\n // Cache control (for testing)\n // ---------------------------------------------------------------------------\n\n clearCache(): void {\n this.cache.clear();\n }\n\n // ---------------------------------------------------------------------------\n // Utils\n // ---------------------------------------------------------------------------\n\n /** Normalize method keys to uppercase. */\n private normalizeMethodKeys(method: Permission[\"method\"]): Permission[\"method\"] {\n const normalized: Permission[\"method\"] = {} as any;\n for (const key in method) {\n if (method[key] === true) {\n normalized[key.toUpperCase()] = true;\n }\n }\n return normalized;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../src/service/socket.service.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,qBACa,oBAAoB,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAE5F,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../src/service/socket.service.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,qBACa,oBAAoB,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAE5F,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAO7D;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.service.js","sourceRoot":"","sources":["../../src/service/socket.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyC;AACzC,0CAAmD;AACnD,kCAAgC;AAEhC,4FAAkF;AAG3E,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACkB,oBAAoB,CAAuB;IAE5F,iBAAiB,CAAC,YAAoB,EAAE,IAAO;QAC7C,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACnC,IAAI,wDAAuB,CAAC;YAC1B,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"socket.service.js","sourceRoot":"","sources":["../../src/service/socket.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyC;AACzC,0CAAmD;AACnD,kCAAgC;AAEhC,4FAAkF;AAG3E,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACkB,oBAAoB,CAAuB;IAE5F,iBAAiB,CAAC,YAAoB,EAAE,IAAO;QAC7C,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACnC,IAAI,wDAAuB,CAAC;YAC1B,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;;AAVkD;IAAhD,IAAA,eAAM,EAAC,sBAAsB,CAAC;8BAAwC,+BAAoB;kEAAC;+BADjF,oBAAoB;IADhC,IAAA,gBAAO,EAAC,mBAAmB,CAAC;GAChB,oBAAoB,CAWhC","sourcesContent":["import { Inject, Service } from \"typedi\";\nimport { ApiGatewayManagement } from \"../provider\";\nimport \"../provider/apigateway\";\nimport { BaseSocketService } from \"./socket.service.interface\";\nimport { PostToConnectionCommand } from \"@aws-sdk/client-apigatewaymanagementapi\";\n\n@Service(\"BaseSocketService\")\nexport class BaseSocketServiceIml<T> implements BaseSocketService<T> {\n @Inject(\"ApiGatewayManagement\") private readonly apiGatewayManagement: ApiGatewayManagement;\n\n sendSocketMessage(connectionId: string, data: T): Promise<any> {\n return this.apiGatewayManagement.send(\n new PostToConnectionCommand({\n ConnectionId: connectionId,\n Data: JSON.stringify(data),\n }),\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.service.d.ts","sourceRoot":"","sources":["../../src/service/stream.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAkB,UAAU,EAAkB,cAAc,EAAE,MAAM,UAAU,CAAC;AAE9G,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,kBAAkB,CAAC;AAG1B,8BAAsB,iBAAiB,CACrC,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EACvB,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,CACvB,YAAW,aAAa,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpB,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;IAE/B,SAAS,aAAa,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.service.d.ts","sourceRoot":"","sources":["../../src/service/stream.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAkB,UAAU,EAAkB,cAAc,EAAE,MAAM,UAAU,CAAC;AAE9G,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,kBAAkB,CAAC;AAG1B,8BAAsB,iBAAiB,CACrC,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EACvB,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,CACvB,YAAW,aAAa,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpB,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;IAE/B,SAAS,aAAa,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAWzC;IAED,YAAY,IAAI,MAAM,CAErB;IAED,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAInE;IAED,aAAa,IAAI,cAAc,CAE9B;IAED,SAAS,CAAC,MAAM,EAAE,YAAY,QAc7B;IACD,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtF,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEnF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.service.js","sourceRoot":"","sources":["../../src/service/stream.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAA8G;AAI9G,4BAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"stream.service.js","sourceRoot":"","sources":["../../src/service/stream.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAA8G;AAI9G,4BAA0B;AAC1B,MAAY,OAAO,yCAAqB;AAExC;IAKY,MAAM,CAAI;IACV,MAAM,CAAI;IACV,MAAM,CAAe;IAE/B,YAAsB,MAAS,EAAE,MAAS;QACxC,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,YAAY,sBAAc,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAExF,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,YAAY,sBAAc,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAExF,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,cAA8B;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,MAAoB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CAMF","sourcesContent":["import { BaseEntity, BaseRepoDB, BaseRepoDBImpl, BaseRepoES, BaseRepoESImpl, DynamoIndexMap } from \"../index\";\n\nimport { EntityConfig } from \"@chinggis/types\";\nimport { StreamService } from \"./stream.service.interface\";\nimport \"./stream.service\";\nimport * as console from \"node:console\";\n\nexport abstract class StreamServiceImpl<\n T extends BaseEntity,\n D extends BaseRepoDB<T>,\n S extends BaseRepoES<T>,\n> implements StreamService<T> {\n protected repoDB: D;\n protected repoES: S;\n protected config: EntityConfig;\n\n protected constructor(repoDB: D, repoES: S) {\n if (repoDB != null && !(repoDB instanceof BaseRepoDBImpl))\n console.error(`repoDB is not an instance of BaseRepoDBImpl ${this.constructor.name}`);\n\n if (repoES != null && !(repoES instanceof BaseRepoESImpl))\n console.error(`repoES is not an instance of BaseRepoESImpl ${this.constructor.name}`);\n\n if (repoDB == null && repoES == null) console.error(`repo initialization is required ${this.constructor.name}`);\n\n this.repoDB = repoDB;\n this.repoES = repoES;\n }\n\n getTableName(): string {\n return this.repoDB.getTableName();\n }\n\n setTable(tableName: string, dynamoIndexMap: DynamoIndexMap): boolean {\n this.repoDB.setTable(tableName);\n this.repoDB.setIndexMap(dynamoIndexMap);\n return true;\n }\n\n getIndexMapDB(): DynamoIndexMap {\n return this.repoDB.getIndexMap();\n }\n\n setConfig(config: EntityConfig) {\n this.config = config;\n\n this.setTable(config.DYNAMO_DB.NAME, config.DYNAMO_DB.MAP);\n\n if (this.repoDB) {\n this.repoDB.setIndexMap(config.DYNAMO_DB.MAP);\n this.repoDB.setTable(config.DYNAMO_DB.NAME);\n }\n\n if (this.repoES) {\n this.repoES.setEndpoint(config.OPEN_SEARCH.DOMAIN);\n this.repoES.setIndexName(config.OPEN_SEARCH.INDEX);\n }\n }\n abstract processModification(itemOld: T, itemNew: T, tableName: string): Promise<any>;\n\n abstract processDeletion(oldItem: T, newItem: T, tableName?: string): Promise<any>;\n\n abstract processInsertion(newItem: T, tableName: string): Promise<any>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.util.d.ts","sourceRoot":"","sources":["../../src/utils/array.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"array.util.d.ts","sourceRoot":"","sources":["../../src/utils/array.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,CAAC,EAAE,aAAa,MAAM,KAAG,CAAC,EAAE,EAMhE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.util.js","sourceRoot":"","sources":["../../src/utils/array.util.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAI,KAAU,EAAE,SAAiB,EAAS,EAAE;IACpE,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AANW,QAAA,UAAU,
|
|
1
|
+
{"version":3,"file":"array.util.js","sourceRoot":"","sources":["../../src/utils/array.util.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAI,KAAU,EAAE,SAAiB,EAAS,EAAE;IACpE,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AANW,QAAA,UAAU,GAAV,UAAU,CAMrB","sourcesContent":["/**\n * Splits an array into chunks of a specified size.\n * @param array The array to split.\n * @param chunkSize The size of each chunk.\n * @returns An array of chunks.\n */\nexport const chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n const result: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n return result;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.util.js","sourceRoot":"","sources":["../../src/utils/auth.util.ts"],"names":[],"mappings":";;;AAAA,oCAA0C;AAEnC,MAAM,iBAAiB,GAAG,GAG/B,EAAE;IACF,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,gBAAgB,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,IAAA,sBAAc,EAAC,uBAAuB,EAAE,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC9G,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AACtE,CAAC,CAAC;AAPW,QAAA,iBAAiB,
|
|
1
|
+
{"version":3,"file":"auth.util.js","sourceRoot":"","sources":["../../src/utils/auth.util.ts"],"names":[],"mappings":";;;AAAA,oCAA0C;AAEnC,MAAM,iBAAiB,GAAG,GAG/B,EAAE;IACF,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,gBAAgB,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,IAAA,sBAAc,EAAC,uBAAuB,EAAE,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC9G,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AACtE,CAAC,CAAC;AAPW,QAAA,iBAAiB,GAAjB,iBAAiB,CAO5B","sourcesContent":["import { getEnvVariable } from \"../index\";\n\nexport const getAWSCredentials = (): {\n accessKeyId: string;\n secretAccessKey: string;\n} => {\n const accessKey = getEnvVariable(\"IAM_ACCESS_KEY\", new Error(\"IAM_ACCESS_KEY_NOT_FOUND\"));\n const secretAccessKey = getEnvVariable(\"IAM_SECRET_ACCESS_KEY\", new Error(\"IAM_SECRET_ACCESS_KEY_NOT_FOUND\"));\n return { accessKeyId: accessKey, secretAccessKey: secretAccessKey };\n};\n\nexport interface AuthConfig {\n region?: string;\n credentials?: {\n accessKeyId: string;\n secretAccessKey: string;\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.util.d.ts","sourceRoot":"","sources":["../../src/utils/data.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAmF,OAAO,EAAE,MAAM,KAAK,CAAC;AAElH,KAAK,aAAa,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAExC;;;;;;GAMG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAIvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAL9B,OAAO,CAAC,IAAI,CAAK;
|
|
1
|
+
{"version":3,"file":"data.util.d.ts","sourceRoot":"","sources":["../../src/utils/data.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAmF,OAAO,EAAE,MAAM,KAAK,CAAC;AAElH,KAAK,aAAa,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAExC;;;;;;GAMG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAIvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAL9B,OAAO,CAAC,IAAI,CAAK;IAEjB,YACmB,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,aAAoB,EAC7B,WAAW,GAAE,MAAU,EACtC;IAEJ,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAElB;IAED,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,gBAAgB;CAYzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.util.js","sourceRoot":"","sources":["../../src/utils/data.util.ts"],"names":[],"mappings":";;;AAAA,6BAAkH;AAIlH;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"data.util.js","sourceRoot":"","sources":["../../src/utils/data.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { z, ZodArray, ZodBoolean, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodString, ZodType } from \"zod\";\n\ntype InvalidConfig = boolean | string[];\n\n/**\n * EntityBuilder generates mock objects from a Zod schema.\n * - Can produce fully valid objects\n * - Can produce random invalid objects (at least one field invalid)\n * - Can produce targeted invalid objects (specific fields)\n * - Arrays are autofilled with multiple elements if `arrayLength` > 1\n */\nexport class EntityBuilder<T extends ZodType<any, any, any>> {\n private seed = 1;\n\n constructor(\n private readonly schema: T,\n private readonly invalid: InvalidConfig = true,\n private readonly arrayLength: number = 1, // default number of elements in arrays\n ) {}\n\n build(): z.infer<T> {\n return this.buildFromZod(this.schema, this.invalid) as z.infer<T>;\n }\n\n private buildFromZod(schema: ZodType<any, any, any>, invalidConfig: InvalidConfig, path: string[] = []): any {\n // Optional / Nullable unwrap\n if (schema instanceof ZodOptional || schema instanceof ZodNullable) {\n const inner = (schema as any)._def.innerType as ZodType<any, any, any>;\n return this.buildFromZod(inner, invalidConfig, path);\n }\n\n if (schema instanceof ZodString) {\n return this.shouldInvalidate(path, invalidConfig) ? \"INVALID\" : `valid_${path.join(\"_\")}`;\n }\n\n if (schema instanceof ZodNumber) {\n return this.shouldInvalidate(path, invalidConfig) ? -1 : 1;\n }\n\n if (schema instanceof ZodBoolean) {\n return !this.shouldInvalidate(path, invalidConfig);\n }\n\n if (schema instanceof ZodArray) {\n const elementSchema = (schema as ZodArray<any>).element as ZodType<any, any, any>;\n const arr = [];\n for (let i = 0; i < this.arrayLength; i++) {\n arr.push(this.buildFromZod(elementSchema, invalidConfig, path.concat([String(i)])));\n }\n return arr;\n }\n\n if (schema instanceof ZodObject) {\n const obj: any = {};\n const shape = (schema as ZodObject<any>).shape;\n for (const key in shape) {\n obj[key] = this.buildFromZod(shape[key], invalidConfig, path.concat([key]));\n }\n return obj;\n }\n\n // fallback for unsupported types\n return null;\n }\n\n private shouldInvalidate(path: string[], invalidConfig: InvalidConfig): boolean {\n if (invalidConfig === false) {\n // random invalid\n const x = Math.sin(this.seed++) * 10000;\n return x - Math.floor(x) > 0.5;\n }\n if (Array.isArray(invalidConfig)) {\n // targeted invalid\n return invalidConfig.includes(path.join(\".\"));\n }\n return false; // valid by default\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.util.js","sourceRoot":"","sources":["../../src/utils/date.util.ts"],"names":[],"mappings":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamodb.utils.d.ts","sourceRoot":"","sources":["../../src/utils/dynamodb.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI/F,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzE,eAAO,MAAM,YAAY,QAAO,MAE/B,CAAC;AAEF,eAAO,MAAM,6BAA6B,
|
|
1
|
+
{"version":3,"file":"dynamodb.utils.d.ts","sourceRoot":"","sources":["../../src/utils/dynamodb.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI/F,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzE,eAAO,MAAM,YAAY,QAAO,MAE/B,CAAC;AAEF,eAAO,MAAM,6BAA6B,WAAY,MAAM,YAAY,cAAc,KAAG,gBAiJxF,CAAC;AAmBF,eAAO,MAAM,YAAY,cACZ,MAAM,UACT,MAAM,YACJ,cAAc,KACvB,iBAoBF,CAAC;AAEF,eAAO,MAAM,wBAAwB,uCAIlC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,KAAG,gBAeH,CAAC;AAEF,eAAO,MAAM,yBAAyB,sDAKnC;IACD,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;CAC1B,KAAG,iBAyDH,CAAC;AAiGF,eAAO,MAAM,mBAAmB,UAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,cAAc,2BAYvF,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,cAAc,wBAWlF,CAAC;AACF,eAAO,MAAM,6BAA6B,WAChC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cACf,MAAM,EAAE,cACR,MAAM,KACjB,OAOF,CAAC;AAEF,eAAO,MAAM,aAAa,eAAgB,MAAM,EAAE,YAAY,cAAc,KAAG,MAAM,EAoDpF,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAErF;AAED,eAAO,MAAM,iBAAiB,oBAE3B;IACD,UAAU,CAAC,EAAE;QACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjD,CAAC;CACH,KAAG,OAQH,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,WAIvD;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,cAAc,QAAS,MAAM,SAAS,MAAM,YAAY,cAAc,KAAG,MAAM,GAAG,MAU9F,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChD;AAgCD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,WAAW,GAAE,MAAM,EAAO,EAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,gBAAgB,CAuClB;AAED,eAAO,MAAM,qBAAqB,GAAI,CAAC,WAAW,MAAM,KAAG,CAAC,GAAG,SAU9D,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAUtG;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAE9C;AAED,wBAAgB,YAAY,CAAC,cAAc,EAAE,GAAG,GAAG,MAAM,CAMxD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,uBASpC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,cAAc,CAWzF"}
|