cmp-aws-database 1.2.0-dev.79 → 1.2.0-dev.80

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.
@@ -1,8 +1,7 @@
1
- import { BaseModel } from '../base-model';
2
- export declare const ExampleModel: import("dynamoose/dist/General").ModelType<import("dynamoose/dist/Item").AnyItem>;
3
- export declare class Example extends BaseModel {
4
- id?: string;
1
+ import { BaseModel } from "../base-model";
2
+ export declare class ExampleModel extends BaseModel {
3
+ id: string;
5
4
  exampleStringProperty: string;
6
5
  exampleNumberProperty: number;
7
- exampleBooleanProperty: boolean;
6
+ exampleBooleanProperty: string;
8
7
  }
@@ -1,71 +1,37 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
24
10
  };
25
11
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Example = exports.ExampleModel = void 0;
27
- const dynamoose_1 = __importStar(require("dynamoose"));
12
+ exports.ExampleModel = void 0;
13
+ const annotations_1 = require("@nova-odm/annotations");
28
14
  const base_model_1 = require("../base-model");
29
- const ExampleSchema = new dynamoose_1.Schema({
30
- id: {
31
- type: String,
32
- hashKey: true,
33
- default: () => require('crypto').randomUUID()
34
- },
35
- exampleStringProperty: {
36
- type: String,
37
- required: true
38
- },
39
- exampleNumberProperty: {
40
- type: Number,
41
- required: true
42
- },
43
- exampleBooleanProperty: {
44
- type: Boolean,
45
- required: true
46
- },
47
- created_time: {
48
- type: Date,
49
- default: () => new Date()
50
- },
51
- updated_time: {
52
- type: Date,
53
- default: () => new Date()
54
- },
55
- created_user: {
56
- type: String
57
- },
58
- updated_user: {
59
- type: String
60
- }
61
- }, {
62
- timestamps: {
63
- createdAt: 'created_time',
64
- updatedAt: 'updated_time'
65
- }
66
- });
67
- exports.ExampleModel = dynamoose_1.default.model('example', ExampleSchema);
68
- class Example extends base_model_1.BaseModel {
69
- }
70
- exports.Example = Example;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b21lci11c2VyL2V4YW1wbGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1REFBOEM7QUFDOUMsOENBQTBDO0FBRTFDLE1BQU0sYUFBYSxHQUFHLElBQUksa0JBQU0sQ0FBQztJQUM3QixFQUFFLEVBQUU7UUFDQSxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUU7S0FDaEQ7SUFDRCxxQkFBcUIsRUFBRTtRQUNuQixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QscUJBQXFCLEVBQUU7UUFDbkIsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELHNCQUFzQixFQUFFO1FBQ3BCLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxZQUFZLEVBQUU7UUFDVixJQUFJLEVBQUUsSUFBSTtRQUNWLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtLQUM1QjtJQUNELFlBQVksRUFBRTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO0tBQzVCO0lBQ0QsWUFBWSxFQUFFO1FBQ1YsSUFBSSxFQUFFLE1BQU07S0FDZjtJQUNELFlBQVksRUFBRTtRQUNWLElBQUksRUFBRSxNQUFNO0tBQ2Y7Q0FDSixFQUFFO0lBQ0MsVUFBVSxFQUFFO1FBQ1IsU0FBUyxFQUFFLGNBQWM7UUFDekIsU0FBUyxFQUFFLGNBQWM7S0FDNUI7Q0FDSixDQUFDLENBQUM7QUFFVSxRQUFBLFlBQVksR0FBRyxtQkFBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFFdEUsTUFBYSxPQUFRLFNBQVEsc0JBQVM7Q0FLckM7QUFMRCwwQkFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkeW5hbW9vc2UsIHsgU2NoZW1hIH0gZnJvbSAnZHluYW1vb3NlJztcbmltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJy4uL2Jhc2UtbW9kZWwnO1xuXG5jb25zdCBFeGFtcGxlU2NoZW1hID0gbmV3IFNjaGVtYSh7XG4gICAgaWQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBoYXNoS2V5OiB0cnVlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiByZXF1aXJlKCdjcnlwdG8nKS5yYW5kb21VVUlEKClcbiAgICB9LFxuICAgIGV4YW1wbGVTdHJpbmdQcm9wZXJ0eToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBleGFtcGxlTnVtYmVyUHJvcGVydHk6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZXhhbXBsZUJvb2xlYW5Qcm9wZXJ0eToge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgY3JlYXRlZF90aW1lOiB7XG4gICAgICAgIHR5cGU6IERhdGUsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IG5ldyBEYXRlKClcbiAgICB9LFxuICAgIHVwZGF0ZWRfdGltZToge1xuICAgICAgICB0eXBlOiBEYXRlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiBuZXcgRGF0ZSgpXG4gICAgfSxcbiAgICBjcmVhdGVkX3VzZXI6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICB1cGRhdGVkX3VzZXI6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgfVxufSwge1xuICAgIHRpbWVzdGFtcHM6IHtcbiAgICAgICAgY3JlYXRlZEF0OiAnY3JlYXRlZF90aW1lJyxcbiAgICAgICAgdXBkYXRlZEF0OiAndXBkYXRlZF90aW1lJ1xuICAgIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgRXhhbXBsZU1vZGVsID0gZHluYW1vb3NlLm1vZGVsKCdleGFtcGxlJywgRXhhbXBsZVNjaGVtYSk7XG5cbmV4cG9ydCBjbGFzcyBFeGFtcGxlIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBleGFtcGxlU3RyaW5nUHJvcGVydHk6IHN0cmluZztcbiAgICBleGFtcGxlTnVtYmVyUHJvcGVydHk6IG51bWJlcjtcbiAgICBleGFtcGxlQm9vbGVhblByb3BlcnR5OiBib29sZWFuO1xufSJdfQ==
15
+ let ExampleModel = class ExampleModel extends base_model_1.BaseModel {
16
+ };
17
+ exports.ExampleModel = ExampleModel;
18
+ __decorate([
19
+ (0, annotations_1.autoGeneratedHashKey)({ type: "String" }),
20
+ __metadata("design:type", String)
21
+ ], ExampleModel.prototype, "id", void 0);
22
+ __decorate([
23
+ (0, annotations_1.attribute)(),
24
+ __metadata("design:type", String)
25
+ ], ExampleModel.prototype, "exampleStringProperty", void 0);
26
+ __decorate([
27
+ (0, annotations_1.attribute)(),
28
+ __metadata("design:type", Number)
29
+ ], ExampleModel.prototype, "exampleNumberProperty", void 0);
30
+ __decorate([
31
+ (0, annotations_1.attribute)(),
32
+ __metadata("design:type", String)
33
+ ], ExampleModel.prototype, "exampleBooleanProperty", void 0);
34
+ exports.ExampleModel = ExampleModel = __decorate([
35
+ (0, annotations_1.table)("example")
36
+ ], ExampleModel);
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b21lci11c2VyL2V4YW1wbGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXdGO0FBQ3hGLDhDQUEwQztBQUduQyxJQUFNLFlBQVksR0FBbEIsTUFBTSxZQUFhLFNBQVEsc0JBQVM7Q0FTMUMsQ0FBQTtBQVRZLG9DQUFZO0FBRXJCO0lBREMsSUFBQSxrQ0FBb0IsRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzs7d0NBQzlCO0FBRVg7SUFEQyxJQUFBLHVCQUFTLEdBQUU7OzJEQUNrQjtBQUU5QjtJQURDLElBQUEsdUJBQVMsR0FBRTs7MkRBQ2tCO0FBRTlCO0lBREMsSUFBQSx1QkFBUyxHQUFFOzs0REFDbUI7dUJBUnRCLFlBQVk7SUFEeEIsSUFBQSxtQkFBSyxFQUFDLFNBQVMsQ0FBQztHQUNKLFlBQVksQ0FTeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdHRyaWJ1dGUsIGF1dG9HZW5lcmF0ZWRIYXNoS2V5LCBoYXNoS2V5LCB0YWJsZSB9IGZyb20gXCJAbm92YS1vZG0vYW5ub3RhdGlvbnNcIjtcbmltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gXCIuLi9iYXNlLW1vZGVsXCI7XG5cbkB0YWJsZShcImV4YW1wbGVcIilcbmV4cG9ydCBjbGFzcyBFeGFtcGxlTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAgIEBhdXRvR2VuZXJhdGVkSGFzaEtleSh7IHR5cGU6IFwiU3RyaW5nXCIgfSlcbiAgICBpZDogc3RyaW5nO1xuICAgIEBhdHRyaWJ1dGUoKVxuICAgIGV4YW1wbGVTdHJpbmdQcm9wZXJ0eTogc3RyaW5nO1xuICAgIEBhdHRyaWJ1dGUoKVxuICAgIGV4YW1wbGVOdW1iZXJQcm9wZXJ0eTogbnVtYmVyO1xuICAgIEBhdHRyaWJ1dGUoKVxuICAgIGV4YW1wbGVCb29sZWFuUHJvcGVydHk6IHN0cmluZztcbn0iXX0=
@@ -7,4 +7,5 @@ export declare class OccasionModel extends BaseModel {
7
7
  occasionStatus: string;
8
8
  filterCategory: string[];
9
9
  isBbqOccasion?: boolean;
10
+ occasionOrder?: number;
10
11
  }
@@ -43,64 +43,11 @@ __decorate([
43
43
  (0, annotations_1.attribute)(),
44
44
  __metadata("design:type", Boolean)
45
45
  ], OccasionModel.prototype, "isBbqOccasion", void 0);
46
+ __decorate([
47
+ (0, annotations_1.attribute)(),
48
+ __metadata("design:type", Number)
49
+ ], OccasionModel.prototype, "occasionOrder", void 0);
46
50
  exports.OccasionModel = OccasionModel = __decorate([
47
51
  (0, annotations_1.table)("OccasionEventTable")
48
52
  ], OccasionModel);
49
- // for filter category values
50
- // {
51
- // "House Warming": [
52
- // "PARTY_AND_CELEBRATIONS",
53
- // "PUJA_AND_TRADITIONAL_FESTIVALS",
54
- // "WEDDING_CEREMONIES"
55
- // ],
56
- // "Kitty Party": [
57
- // "PARTY_AND_CELEBRATIONS"
58
- // ],
59
- // "Cocktail Party": [
60
- // "PARTY_AND_CELEBRATIONS",
61
- // "FORMAL_AND_CORPORATE_EVENTS",
62
- // "WEDDING_CEREMONIES"
63
- // ],
64
- // "Farm House Party": [
65
- // "PARTY_AND_CELEBRATIONS"
66
- // ],
67
- // "Family Get-Together": [
68
- // "PARTY_AND_CELEBRATIONS",
69
- // "FORMAL_AND_CORPORATE_EVENTS",
70
- // "PUJA_AND_TRADITIONAL_FESTIVALS"
71
- // ],
72
- // "Birthday Party": [
73
- // "PARTY_AND_CELEBRATIONS"
74
- // ],
75
- // "House Party": [
76
- // "PARTY_AND_CELEBRATIONS",
77
- // "FORMAL_AND_CORPORATE_EVENTS"
78
- // ],
79
- // "Engagement": [
80
- // "PARTY_AND_CELEBRATIONS",
81
- // "WEDDING_CEREMONIES"
82
- // ],
83
- // "Reception": [
84
- // "PARTY_AND_CELEBRATIONS",
85
- // "PUJA_AND_TRADITIONAL_FESTIVALS",
86
- // "WEDDING_CEREMONIES"
87
- // ],
88
- // "Workshops": [
89
- // "FORMAL_AND_CORPORATE_EVENTS"
90
- // ],
91
- // "Corporate Events": [
92
- // "FORMAL_AND_CORPORATE_EVENTS"
93
- // ],
94
- // "Puja": [
95
- // "PUJA_AND_TRADITIONAL_FESTIVALS"
96
- // ],
97
- // "Wedding": [
98
- // "PUJA_AND_TRADITIONAL_FESTIVALS",
99
- // "WEDDING_CEREMONIES"
100
- // ],
101
- // "Haldi": [
102
- // "PUJA_AND_TRADITIONAL_FESTIVALS",
103
- // "WEDDING_CEREMONIES"
104
- // ]
105
- // }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NjYXNpb24tbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VzdG9tZXItdXNlci9vY2Nhc3Rpb24vb2NjYXNpb24tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsdURBQStFO0FBQy9FLGlEQUE2QztBQUl0QyxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsc0JBQVM7Q0FxQjNDLENBQUE7QUFyQlksc0NBQWE7QUFFdEI7SUFEQyxJQUFBLGtDQUFvQixFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDOztpREFDdEI7QUFHbkI7SUFEQyxJQUFBLHVCQUFTLEdBQUU7O21EQUNTO0FBR3JCO0lBREMsSUFBQSx1QkFBUyxHQUFFOzt1REFDYTtBQUd6QjtJQURDLElBQUEsdUJBQVMsRUFBQyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzs7K0NBQ2xFO0FBR2pCO0lBREMsSUFBQSx1QkFBUyxFQUFDLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7O3FEQUNuRTtBQUd2QjtJQURDLElBQUEsdUJBQVMsR0FBRTs7cURBQ2E7QUFHekI7SUFEQyxJQUFBLHVCQUFTLEdBQUU7O29EQUNZO3dCQXBCZixhQUFhO0lBRHpCLElBQUEsbUJBQUssRUFBQyxvQkFBb0IsQ0FBQztHQUNmLGFBQWEsQ0FxQnpCO0FBRUQsNkJBQTZCO0FBQzdCLElBQUk7QUFDSix5QkFBeUI7QUFDekIsa0NBQWtDO0FBQ2xDLDBDQUEwQztBQUMxQyw2QkFBNkI7QUFDN0IsU0FBUztBQUNULHVCQUF1QjtBQUN2QixpQ0FBaUM7QUFDakMsU0FBUztBQUNULDBCQUEwQjtBQUMxQixrQ0FBa0M7QUFDbEMsdUNBQXVDO0FBQ3ZDLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLGlDQUFpQztBQUNqQyxTQUFTO0FBQ1QsK0JBQStCO0FBQy9CLGtDQUFrQztBQUNsQyx1Q0FBdUM7QUFDdkMseUNBQXlDO0FBQ3pDLFNBQVM7QUFDVCwwQkFBMEI7QUFDMUIsaUNBQWlDO0FBQ2pDLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkIsa0NBQWtDO0FBQ2xDLHNDQUFzQztBQUN0QyxTQUFTO0FBQ1Qsc0JBQXNCO0FBQ3RCLGtDQUFrQztBQUNsQyw2QkFBNkI7QUFDN0IsU0FBUztBQUNULHFCQUFxQjtBQUNyQixrQ0FBa0M7QUFDbEMsMENBQTBDO0FBQzFDLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QscUJBQXFCO0FBQ3JCLHNDQUFzQztBQUN0QyxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLHNDQUFzQztBQUN0QyxTQUFTO0FBQ1QsZ0JBQWdCO0FBQ2hCLHlDQUF5QztBQUN6QyxTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLDBDQUEwQztBQUMxQyw2QkFBNkI7QUFDN0IsU0FBUztBQUNULGlCQUFpQjtBQUNqQiwwQ0FBMEM7QUFDMUMsNkJBQTZCO0FBQzdCLFFBQVE7QUFDUixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXR0cmlidXRlLCBhdXRvR2VuZXJhdGVkSGFzaEtleSwgdGFibGUgfSBmcm9tIFwiQG5vdmEtb2RtL2Fubm90YXRpb25zXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbFwiO1xuXG5cbkB0YWJsZShcIk9jY2FzaW9uRXZlbnRUYWJsZVwiKVxuZXhwb3J0IGNsYXNzIE9jY2FzaW9uTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAgIEBhdXRvR2VuZXJhdGVkSGFzaEtleSh7IHR5cGU6IFwiU3RyaW5nXCIgfSlcbiAgICBvY2Nhc2lvbklkOiBzdHJpbmc7XG5cbiAgICBAYXR0cmlidXRlKClcbiAgICBvY2Nhc2lvbk5hbWU6IHN0cmluZztcblxuICAgIEBhdHRyaWJ1dGUoKVxuICAgIG9jY2FzaW9uSW1hZ2VVcmw6IHN0cmluZztcblxuICAgIEBhdHRyaWJ1dGUoeyBpbmRleEtleUNvbmZpZ3VyYXRpb25zOiB7IFwiY2F0ZWdvcnlJbmRleFwiOiBcIkhBU0hcIiB9LCB0eXBlOiAnU3RyaW5nJyB9KVxuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG5cbiAgICBAYXR0cmlidXRlKHsgaW5kZXhLZXlDb25maWd1cmF0aW9uczogeyBcIm9jY2FzaW9uU3RhdHVzSW5kZXhcIjogXCJSQU5HRVwiIH0sIHR5cGU6ICdTdHJpbmcnIH0pXG4gICAgb2NjYXNpb25TdGF0dXM6IHN0cmluZztcblxuICAgIEBhdHRyaWJ1dGUoKVxuICAgIGZpbHRlckNhdGVnb3J5OiBzdHJpbmdbXTsgLy8gVjJcblxuICAgIEBhdHRyaWJ1dGUoKVxuICAgIGlzQmJxT2NjYXNpb24/OiBib29sZWFuOyAvLyBOZXcgQWRkZWQgMjItMTItMjAyNVxufVxuXG4vLyBmb3IgZmlsdGVyIGNhdGVnb3J5IHZhbHVlc1xuLy8ge1xuLy8gICAgIFwiSG91c2UgV2FybWluZ1wiOiBbXG4vLyAgICAgICBcIlBBUlRZX0FORF9DRUxFQlJBVElPTlNcIixcbi8vICAgICAgIFwiUFVKQV9BTkRfVFJBRElUSU9OQUxfRkVTVElWQUxTXCIsXG4vLyAgICAgICBcIldFRERJTkdfQ0VSRU1PTklFU1wiXG4vLyAgICAgXSxcbi8vICAgICBcIktpdHR5IFBhcnR5XCI6IFtcbi8vICAgICAgIFwiUEFSVFlfQU5EX0NFTEVCUkFUSU9OU1wiXG4vLyAgICAgXSxcbi8vICAgICBcIkNvY2t0YWlsIFBhcnR5XCI6IFtcbi8vICAgICAgIFwiUEFSVFlfQU5EX0NFTEVCUkFUSU9OU1wiLFxuLy8gICAgICAgXCJGT1JNQUxfQU5EX0NPUlBPUkFURV9FVkVOVFNcIixcbi8vICAgICAgIFwiV0VERElOR19DRVJFTU9OSUVTXCJcbi8vICAgICBdLFxuLy8gICAgIFwiRmFybSBIb3VzZSBQYXJ0eVwiOiBbXG4vLyAgICAgICBcIlBBUlRZX0FORF9DRUxFQlJBVElPTlNcIlxuLy8gICAgIF0sXG4vLyAgICAgXCJGYW1pbHkgR2V0LVRvZ2V0aGVyXCI6IFtcbi8vICAgICAgIFwiUEFSVFlfQU5EX0NFTEVCUkFUSU9OU1wiLFxuLy8gICAgICAgXCJGT1JNQUxfQU5EX0NPUlBPUkFURV9FVkVOVFNcIixcbi8vICAgICAgIFwiUFVKQV9BTkRfVFJBRElUSU9OQUxfRkVTVElWQUxTXCJcbi8vICAgICBdLFxuLy8gICAgIFwiQmlydGhkYXkgUGFydHlcIjogW1xuLy8gICAgICAgXCJQQVJUWV9BTkRfQ0VMRUJSQVRJT05TXCJcbi8vICAgICBdLFxuLy8gICAgIFwiSG91c2UgUGFydHlcIjogW1xuLy8gICAgICAgXCJQQVJUWV9BTkRfQ0VMRUJSQVRJT05TXCIsXG4vLyAgICAgICBcIkZPUk1BTF9BTkRfQ09SUE9SQVRFX0VWRU5UU1wiXG4vLyAgICAgXSxcbi8vICAgICBcIkVuZ2FnZW1lbnRcIjogW1xuLy8gICAgICAgXCJQQVJUWV9BTkRfQ0VMRUJSQVRJT05TXCIsXG4vLyAgICAgICBcIldFRERJTkdfQ0VSRU1PTklFU1wiXG4vLyAgICAgXSxcbi8vICAgICBcIlJlY2VwdGlvblwiOiBbXG4vLyAgICAgICBcIlBBUlRZX0FORF9DRUxFQlJBVElPTlNcIixcbi8vICAgICAgIFwiUFVKQV9BTkRfVFJBRElUSU9OQUxfRkVTVElWQUxTXCIsXG4vLyAgICAgICBcIldFRERJTkdfQ0VSRU1PTklFU1wiXG4vLyAgICAgXSxcbi8vICAgICBcIldvcmtzaG9wc1wiOiBbXG4vLyAgICAgICBcIkZPUk1BTF9BTkRfQ09SUE9SQVRFX0VWRU5UU1wiXG4vLyAgICAgXSxcbi8vICAgICBcIkNvcnBvcmF0ZSBFdmVudHNcIjogW1xuLy8gICAgICAgXCJGT1JNQUxfQU5EX0NPUlBPUkFURV9FVkVOVFNcIlxuLy8gICAgIF0sXG4vLyAgICAgXCJQdWphXCI6IFtcbi8vICAgICAgIFwiUFVKQV9BTkRfVFJBRElUSU9OQUxfRkVTVElWQUxTXCJcbi8vICAgICBdLFxuLy8gICAgIFwiV2VkZGluZ1wiOiBbXG4vLyAgICAgICBcIlBVSkFfQU5EX1RSQURJVElPTkFMX0ZFU1RJVkFMU1wiLFxuLy8gICAgICAgXCJXRURESU5HX0NFUkVNT05JRVNcIlxuLy8gICAgIF0sXG4vLyAgICAgXCJIYWxkaVwiOiBbXG4vLyAgICAgICBcIlBVSkFfQU5EX1RSQURJVElPTkFMX0ZFU1RJVkFMU1wiLFxuLy8gICAgICAgXCJXRURESU5HX0NFUkVNT05JRVNcIlxuLy8gICAgIF1cbi8vICAgfVxuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NjYXNpb24tbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VzdG9tZXItdXNlci9vY2Nhc3Rpb24vb2NjYXNpb24tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsdURBQStFO0FBQy9FLGlEQUE2QztBQUl0QyxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsc0JBQVM7Q0F3QjNDLENBQUE7QUF4Qlksc0NBQWE7QUFFdEI7SUFEQyxJQUFBLGtDQUFvQixFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDOztpREFDdEI7QUFHbkI7SUFEQyxJQUFBLHVCQUFTLEdBQUU7O21EQUNTO0FBR3JCO0lBREMsSUFBQSx1QkFBUyxHQUFFOzt1REFDYTtBQUd6QjtJQURDLElBQUEsdUJBQVMsRUFBQyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzs7K0NBQ2xFO0FBR2pCO0lBREMsSUFBQSx1QkFBUyxFQUFDLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7O3FEQUNuRTtBQUd2QjtJQURDLElBQUEsdUJBQVMsR0FBRTs7cURBQ2E7QUFHekI7SUFEQyxJQUFBLHVCQUFTLEdBQUU7O29EQUNZO0FBR3hCO0lBREMsSUFBQSx1QkFBUyxHQUFFOztvREFDVzt3QkF2QmQsYUFBYTtJQUR6QixJQUFBLG1CQUFLLEVBQUMsb0JBQW9CLENBQUM7R0FDZixhQUFhLENBd0J6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF0dHJpYnV0ZSwgYXV0b0dlbmVyYXRlZEhhc2hLZXksIHRhYmxlIH0gZnJvbSBcIkBub3ZhLW9kbS9hbm5vdGF0aW9uc1wiO1xuaW1wb3J0IHsgQmFzZU1vZGVsIH0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcblxuXG5AdGFibGUoXCJPY2Nhc2lvbkV2ZW50VGFibGVcIilcbmV4cG9ydCBjbGFzcyBPY2Nhc2lvbk1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBAYXV0b0dlbmVyYXRlZEhhc2hLZXkoeyB0eXBlOiBcIlN0cmluZ1wiIH0pXG4gICAgb2NjYXNpb25JZDogc3RyaW5nO1xuXG4gICAgQGF0dHJpYnV0ZSgpXG4gICAgb2NjYXNpb25OYW1lOiBzdHJpbmc7XG5cbiAgICBAYXR0cmlidXRlKClcbiAgICBvY2Nhc2lvbkltYWdlVXJsOiBzdHJpbmc7XG5cbiAgICBAYXR0cmlidXRlKHsgaW5kZXhLZXlDb25maWd1cmF0aW9uczogeyBcImNhdGVnb3J5SW5kZXhcIjogXCJIQVNIXCIgfSwgdHlwZTogJ1N0cmluZycgfSlcbiAgICBjYXRlZ29yeTogc3RyaW5nO1xuXG4gICAgQGF0dHJpYnV0ZSh7IGluZGV4S2V5Q29uZmlndXJhdGlvbnM6IHsgXCJvY2Nhc2lvblN0YXR1c0luZGV4XCI6IFwiUkFOR0VcIiB9LCB0eXBlOiAnU3RyaW5nJyB9KVxuICAgIG9jY2FzaW9uU3RhdHVzOiBzdHJpbmc7XG5cbiAgICBAYXR0cmlidXRlKClcbiAgICBmaWx0ZXJDYXRlZ29yeTogc3RyaW5nW107IC8vIFYyXG5cbiAgICBAYXR0cmlidXRlKClcbiAgICBpc0JicU9jY2FzaW9uPzogYm9vbGVhbjsgLy8gTmV3IEFkZGVkIDIyLTEyLTIwMjVcblxuICAgIEBhdHRyaWJ1dGUoKVxuICAgIG9jY2FzaW9uT3JkZXI/OiBudW1iZXI7IC8vIE5ldyBBZGRlZCAyMi0xMi0yMDI1XG59Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cmp-aws-database",
3
- "version": "1.2.0-dev.79",
3
+ "version": "1.2.0-dev.80",
4
4
  "bin": {
5
5
  "craft-my-plate-database": "bin/craft-my-plate-database.js"
6
6
  },
@@ -1,27 +0,0 @@
1
- import { BaseModel } from './base-model';
2
- export interface AuthContext {
3
- userSub: string;
4
- clientId?: string;
5
- }
6
- export declare const dynamoDB: import("@aws-sdk/client-dynamodb").DynamoDB;
7
- export declare class GenericDAO<T extends BaseModel> {
8
- protected model: any;
9
- constructor(model: any);
10
- batchUpdate(items: T[], batchSize?: number, authContext?: AuthContext): Promise<T[]>;
11
- parallelBatchPut(inputItems: T[], batchSize?: number, maxConcurrentSegments?: number, authContext?: AuthContext): Promise<T[]>;
12
- parallelBatchDelete(inputItems: T[], batchSize?: number, maxConcurrentSegments?: number): Promise<T[]>;
13
- parallelScan(options?: Record<string, unknown>): Promise<T[]>;
14
- scan(options?: Record<string, unknown>): Promise<T[]>;
15
- save(item: T, authContext?: AuthContext): Promise<T>;
16
- update(item: T, authContext?: AuthContext): Promise<T>;
17
- delete(item: T): Promise<T | undefined>;
18
- get(item: T): Promise<T>;
19
- batchPut(items: T[], authContext?: AuthContext): Promise<T[]>;
20
- batchDelete(items: T[]): Promise<T[]>;
21
- batchGet(items: T[]): Promise<T[]>;
22
- parallelBatchGet(inputItems: T[], batchSize?: number, maxConcurrentSegments?: number): Promise<T[]>;
23
- parallelQuery(keyConditions: Record<string, unknown>[], maxConcurrentCalls?: number, options?: Record<string, unknown>): Promise<T[]>;
24
- private customQuery;
25
- decode(continuationToken: string | undefined): Record<string, unknown> | undefined;
26
- encode(lastEvaluatedKey: Record<string, unknown>): Promise<string>;
27
- }
@@ -1,250 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.GenericDAO = exports.dynamoDB = void 0;
7
- const dynamoose_1 = __importDefault(require("dynamoose"));
8
- exports.dynamoDB = new dynamoose_1.default.aws.ddb.DynamoDB({
9
- maxAttempts: 10
10
- });
11
- class GenericDAO {
12
- constructor(model) {
13
- this.model = model;
14
- }
15
- async batchUpdate(items, batchSize = 100, authContext) {
16
- let success = 0, totalToUpdate = items.length;
17
- let updateItems = [];
18
- while (items.length > 0) {
19
- let promises = [];
20
- let batch = items.splice(0, batchSize);
21
- promises = batch.map(item => this.update(item, authContext));
22
- let results = await Promise.allSettled(promises);
23
- results.forEach(result => {
24
- if (result.status === "fulfilled") {
25
- success += 1;
26
- updateItems.push(result.value);
27
- }
28
- });
29
- console.log(`${success}/${totalToUpdate}`);
30
- }
31
- return updateItems;
32
- }
33
- async parallelBatchPut(inputItems, batchSize = 1000, maxConcurrentSegments = 20, authContext) {
34
- let startTime = Date.now();
35
- let items = [];
36
- items = items.concat(inputItems);
37
- items = items.map(item => {
38
- item.created_time = new Date();
39
- if (authContext) {
40
- item.created_user = authContext.userSub;
41
- }
42
- return item;
43
- });
44
- let maxSegments = [];
45
- let putItems = [];
46
- while (items.length > 0) {
47
- let batch = items.splice(0, batchSize * maxConcurrentSegments);
48
- let segment = [];
49
- while (batch.length > 0) {
50
- segment.push(batch.splice(0, batchSize));
51
- }
52
- maxSegments.push(segment);
53
- }
54
- for (const segment of maxSegments) {
55
- let startTime = Date.now();
56
- let promises = [];
57
- console.log(`batch length = ${segment.length}`);
58
- for (const batch of segment) {
59
- promises.push(this.batchPut(batch, authContext));
60
- }
61
- let result = await Promise.all(promises);
62
- console.log("segment complete");
63
- result.forEach((res) => {
64
- putItems = putItems.concat(res);
65
- });
66
- console.log(`time for segment put ${Date.now() - startTime}`);
67
- }
68
- console.log(`total time for complete parallel put ${Date.now() - startTime}`);
69
- return putItems;
70
- }
71
- async parallelBatchDelete(inputItems, batchSize = 1000, maxConcurrentSegments = 20) {
72
- let startTime = Date.now();
73
- let items = [];
74
- items = items.concat(inputItems);
75
- let maxSegments = [];
76
- let deletedItems = [];
77
- while (items.length > 0) {
78
- let batch = items.splice(0, batchSize * maxConcurrentSegments);
79
- let segment = [];
80
- while (batch.length > 0) {
81
- segment.push(batch.splice(0, batchSize));
82
- }
83
- maxSegments.push(segment);
84
- }
85
- for (const segment of maxSegments) {
86
- let startTime = Date.now();
87
- let promises = [];
88
- console.log(`batch length = ${segment.length}`);
89
- for (const batch of segment) {
90
- promises.push(this.batchDelete(batch));
91
- }
92
- let result = await Promise.all(promises);
93
- console.log("segment complete");
94
- result.forEach((res) => {
95
- deletedItems = deletedItems.concat(res);
96
- });
97
- console.log(`time for segment delete ${Date.now() - startTime}`);
98
- }
99
- console.log(`total time for complete parallel delete ${Date.now() - startTime}`);
100
- return deletedItems;
101
- }
102
- async parallelScan(options) {
103
- let items = [];
104
- const scan = this.model.scan().all();
105
- for await (const item of scan) {
106
- items.push(item);
107
- if (items.length % 100000 === 0) {
108
- console.log("read 100K");
109
- }
110
- }
111
- return items;
112
- }
113
- async scan(options) {
114
- let items = [];
115
- const scan = this.model.scan();
116
- for await (const item of scan) {
117
- items.push(item);
118
- }
119
- return items;
120
- }
121
- async save(item, authContext) {
122
- item.created_time = new Date();
123
- if (authContext) {
124
- item.created_user = authContext.userSub;
125
- }
126
- const res = await this.model.create(item);
127
- return res;
128
- }
129
- async update(item, authContext) {
130
- item.updated_time = new Date();
131
- if (authContext) {
132
- item.updated_user = authContext.userSub;
133
- }
134
- const res = await this.model.update(item);
135
- return res;
136
- }
137
- async delete(item) {
138
- return await this.model.delete(item);
139
- }
140
- async get(item) {
141
- const res = await this.model.get(item);
142
- return res;
143
- }
144
- async batchPut(items, authContext) {
145
- let finalItems = [];
146
- items = items.map(item => {
147
- item.created_time = new Date();
148
- if (authContext) {
149
- item.created_user = authContext.userSub;
150
- }
151
- return item;
152
- });
153
- for await (const item of this.model.batchPut(items)) {
154
- console.log(item);
155
- finalItems.push(item);
156
- }
157
- return finalItems;
158
- }
159
- async batchDelete(items) {
160
- let deleteItems = [];
161
- for await (const item of this.model.batchDelete(items)) {
162
- deleteItems.push(item);
163
- }
164
- return deleteItems;
165
- }
166
- async batchGet(items) {
167
- let getItems = [];
168
- for await (const item of this.model.batchGet(items)) {
169
- getItems.push(item);
170
- }
171
- return getItems;
172
- }
173
- async parallelBatchGet(inputItems, batchSize = 1000, maxConcurrentSegments = 20) {
174
- let startTime = Date.now();
175
- let items = [];
176
- items = items.concat(inputItems);
177
- let maxSegments = [];
178
- let resultItems = [];
179
- while (items.length > 0) {
180
- let batch = items.splice(0, batchSize * maxConcurrentSegments);
181
- let segment = [];
182
- while (batch.length > 0) {
183
- segment.push(batch.splice(0, batchSize));
184
- }
185
- maxSegments.push(segment);
186
- }
187
- for (const segment of maxSegments) {
188
- let startTime = Date.now();
189
- let promises = [];
190
- console.log(`batch length = ${segment.length}`);
191
- for (const batch of segment) {
192
- promises.push(this.batchGet(batch));
193
- }
194
- let result = await Promise.all(promises);
195
- console.log("segment complete");
196
- result.forEach((res) => {
197
- resultItems = resultItems.concat(res);
198
- });
199
- console.log(`time for segment get ${Date.now() - startTime}`);
200
- }
201
- console.log(`total time for complete parallel get ${Date.now() - startTime}`);
202
- return resultItems;
203
- }
204
- async parallelQuery(keyConditions, maxConcurrentCalls = 20, options) {
205
- const startTime = Date.now();
206
- const results = [];
207
- while (keyConditions.length > 0) {
208
- const segmentConditions = keyConditions.splice(0, maxConcurrentCalls);
209
- const queryPromises = segmentConditions.map((keyCondition) => {
210
- return this.customQuery(keyCondition, options);
211
- });
212
- const queryResults = await Promise.all(queryPromises);
213
- for (const queryResult of queryResults) {
214
- results.push(...queryResult);
215
- }
216
- }
217
- console.log(`total time for complete parallel query ${Date.now() - startTime}`);
218
- return results;
219
- }
220
- async customQuery(keyConditions, options) {
221
- const startTime = Date.now();
222
- const items = [];
223
- const query = this.model.query(keyConditions);
224
- if (options?.limit)
225
- query.limit(options.limit);
226
- for await (const item of query) {
227
- items.push(item);
228
- }
229
- console.log(`total time for complete query ${Date.now() - startTime}`);
230
- return items;
231
- }
232
- decode(continuationToken) {
233
- if (continuationToken) {
234
- try {
235
- let lastEvaluatedKey = JSON.parse(Buffer.from(continuationToken, 'base64').toString('utf8'));
236
- console.log("Incoming Last Evaluated Key " + lastEvaluatedKey);
237
- return lastEvaluatedKey;
238
- }
239
- catch (error) {
240
- throw new Error('Invalid continuationToken');
241
- }
242
- }
243
- return undefined;
244
- }
245
- async encode(lastEvaluatedKey) {
246
- return Buffer.from(JSON.stringify(lastEvaluatedKey)).toString('base64');
247
- }
248
- }
249
- exports.GenericDAO = GenericDAO;
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYW8tZHluYW1vb3NlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtZGFvLWR5bmFtb29zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFRckIsUUFBQSxRQUFRLEdBQUcsSUFBSSxtQkFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ25ELFdBQVcsRUFBRSxFQUFFO0NBQ2xCLENBQUMsQ0FBQztBQUVILE1BQWEsVUFBVTtJQUNuQixZQUFzQixLQUFVO1FBQVYsVUFBSyxHQUFMLEtBQUssQ0FBSztJQUFJLENBQUM7SUFFckMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFVLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxXQUF5QjtRQUNwRSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDOUMsSUFBSSxXQUFXLEdBQVEsRUFBRSxDQUFDO1FBRTFCLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLFFBQVEsR0FBaUIsRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFakQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUNoQyxPQUFPLElBQUksQ0FBQyxDQUFDO29CQUNi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Z0IsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLGdCQUFnQixDQUFDO1lBQzVCLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUF5QztRQUNsRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDSjtBQXpSRCxnQ0F5UkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZHluYW1vb3NlIGZyb20gJ2R5bmFtb29zZSc7XG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuL2Jhc2UtbW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDb250ZXh0IHtcbiAgICB1c2VyU3ViOiBzdHJpbmc7XG4gICAgY2xpZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9EQiA9IG5ldyBkeW5hbW9vc2UuYXdzLmRkYi5EeW5hbW9EQih7XG4gICAgbWF4QXR0ZW1wdHM6IDEwXG59KTtcblxuZXhwb3J0IGNsYXNzIEdlbmVyaWNEQU88VCBleHRlbmRzIEJhc2VNb2RlbD4ge1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBtb2RlbDogYW55KSB7IH1cblxuICAgIGFzeW5jIGJhdGNoVXBkYXRlKGl0ZW1zOiBUW10sIGJhdGNoU2l6ZSA9IDEwMCwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gMCwgdG90YWxUb1VwZGF0ZSA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgbGV0IHVwZGF0ZUl0ZW1zOiBUW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHByb21pc2VzOiBQcm9taXNlPFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGxldCBiYXRjaCA9IGl0ZW1zLnNwbGljZSgwLCBiYXRjaFNpemUpO1xuICAgICAgICAgICAgcHJvbWlzZXMgPSBiYXRjaC5tYXAoaXRlbSA9PiB0aGlzLnVwZGF0ZShpdGVtLCBhdXRoQ29udGV4dCkpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAgICAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW1zLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3N1Y2Nlc3N9LyR7dG90YWxUb1VwZGF0ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlSXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgcGFyYWxsZWxCYXRjaFB1dChpbnB1dEl0ZW1zOiBUW10sIGJhdGNoU2l6ZTogbnVtYmVyID0gMTAwMCwgbWF4Q29uY3VycmVudFNlZ21lbnRzOiBudW1iZXIgPSAyMCwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgaXRlbXM6IFRbXSA9IFtdO1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChpbnB1dEl0ZW1zKTtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLmNyZWF0ZWRfdGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBpZiAoYXV0aENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmNyZWF0ZWRfdXNlciA9IGF1dGhDb250ZXh0LnVzZXJTdWI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IG1heFNlZ21lbnRzOiBUW11bXVtdID0gW107XG4gICAgICAgIGxldCBwdXRJdGVtczogVFtdID0gW107XG5cbiAgICAgICAgd2hpbGUgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBiYXRjaCA9IGl0ZW1zLnNwbGljZSgwLCBiYXRjaFNpemUgKiBtYXhDb25jdXJyZW50U2VnbWVudHMpO1xuICAgICAgICAgICAgbGV0IHNlZ21lbnQ6IFRbXVtdID0gW107XG4gICAgICAgICAgICB3aGlsZSAoYmF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnQucHVzaChiYXRjaC5zcGxpY2UoMCwgYmF0Y2hTaXplKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXhTZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIG1heFNlZ21lbnRzKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBwcm9taXNlczogUHJvbWlzZTxUW10+W10gPSBbXTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBiYXRjaCBsZW5ndGggPSAke3NlZ21lbnQubGVuZ3RofWApO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHNlZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuYmF0Y2hQdXQoYmF0Y2gsIGF1dGhDb250ZXh0KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNlZ21lbnQgY29tcGxldGVcIik7XG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0SXRlbXMgPSBwdXRJdGVtcy5jb25jYXQocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHRpbWUgZm9yIHNlZ21lbnQgcHV0ICR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGB0b3RhbCB0aW1lIGZvciBjb21wbGV0ZSBwYXJhbGxlbCBwdXQgJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfWApO1xuICAgICAgICByZXR1cm4gcHV0SXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgcGFyYWxsZWxCYXRjaERlbGV0ZShpbnB1dEl0ZW1zOiBUW10sIGJhdGNoU2l6ZTogbnVtYmVyID0gMTAwMCwgbWF4Q29uY3VycmVudFNlZ21lbnRzOiBudW1iZXIgPSAyMCk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgaXRlbXM6IFRbXSA9IFtdO1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChpbnB1dEl0ZW1zKTtcbiAgICAgICAgbGV0IG1heFNlZ21lbnRzOiBUW11bXVtdID0gW107XG4gICAgICAgIGxldCBkZWxldGVkSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgYmF0Y2ggPSBpdGVtcy5zcGxpY2UoMCwgYmF0Y2hTaXplICogbWF4Q29uY3VycmVudFNlZ21lbnRzKTtcbiAgICAgICAgICAgIGxldCBzZWdtZW50OiBUW11bXSA9IFtdO1xuICAgICAgICAgICAgd2hpbGUgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50LnB1c2goYmF0Y2guc3BsaWNlKDAsIGJhdGNoU2l6ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF4U2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBtYXhTZWdtZW50cykge1xuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZXM6IFByb21pc2U8VFtdPltdID0gW107XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgYmF0Y2ggbGVuZ3RoID0gJHtzZWdtZW50Lmxlbmd0aH1gKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBiYXRjaCBvZiBzZWdtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmJhdGNoRGVsZXRlKGJhdGNoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNlZ21lbnQgY29tcGxldGVcIik7XG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlZEl0ZW1zID0gZGVsZXRlZEl0ZW1zLmNvbmNhdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdGltZSBmb3Igc2VnbWVudCBkZWxldGUgJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHRvdGFsIHRpbWUgZm9yIGNvbXBsZXRlIHBhcmFsbGVsIGRlbGV0ZSAke0RhdGUubm93KCkgLSBzdGFydFRpbWV9YCk7XG4gICAgICAgIHJldHVybiBkZWxldGVkSXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgcGFyYWxsZWxTY2FuKG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBpdGVtczogVFtdID0gW107XG4gICAgICAgIGNvbnN0IHNjYW4gPSB0aGlzLm1vZGVsLnNjYW4oKS5hbGwoKTtcblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2Ygc2Nhbikge1xuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggJSAxMDAwMDAgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlYWQgMTAwS1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgc2NhbihvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPFRbXT4ge1xuICAgICAgICBsZXQgaXRlbXM6IFRbXSA9IFtdO1xuICAgICAgICBjb25zdCBzY2FuID0gdGhpcy5tb2RlbC5zY2FuKCk7XG5cbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHNjYW4pIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIGFzeW5jIHNhdmUoaXRlbTogVCwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8VD4ge1xuICAgICAgICBpdGVtLmNyZWF0ZWRfdGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChhdXRoQ29udGV4dCkge1xuICAgICAgICAgICAgaXRlbS5jcmVhdGVkX3VzZXIgPSBhdXRoQ29udGV4dC51c2VyU3ViO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubW9kZWwuY3JlYXRlKGl0ZW0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZShpdGVtOiBULCBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGl0ZW0udXBkYXRlZF90aW1lID0gbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKGF1dGhDb250ZXh0KSB7XG4gICAgICAgICAgICBpdGVtLnVwZGF0ZWRfdXNlciA9IGF1dGhDb250ZXh0LnVzZXJTdWI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5tb2RlbC51cGRhdGUoaXRlbSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlKGl0ZW06IFQpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kZWwuZGVsZXRlKGl0ZW0pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldChpdGVtOiBUKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubW9kZWwuZ2V0KGl0ZW0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGFzeW5jIGJhdGNoUHV0KGl0ZW1zOiBUW10sIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHQpOiBQcm9taXNlPFRbXT4ge1xuICAgICAgICBsZXQgZmluYWxJdGVtczogVFtdID0gW107XG4gICAgICAgIGl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5jcmVhdGVkX3RpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGF1dGhDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgaXRlbS5jcmVhdGVkX3VzZXIgPSBhdXRoQ29udGV4dC51c2VyU3ViO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmJhdGNoUHV0KGl0ZW1zKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coaXRlbSk7XG4gICAgICAgICAgICBmaW5hbEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmFsSXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgYmF0Y2hEZWxldGUoaXRlbXM6IFRbXSk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBkZWxldGVJdGVtczogVFtdID0gW107XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmJhdGNoRGVsZXRlKGl0ZW1zKSkge1xuICAgICAgICAgICAgZGVsZXRlSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsZXRlSXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgYmF0Y2hHZXQoaXRlbXM6IFRbXSk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBnZXRJdGVtczogVFtdID0gW107XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmJhdGNoR2V0KGl0ZW1zKSkge1xuICAgICAgICAgICAgZ2V0SXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0SXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgcGFyYWxsZWxCYXRjaEdldChpbnB1dEl0ZW1zOiBUW10sIGJhdGNoU2l6ZTogbnVtYmVyID0gMTAwMCwgbWF4Q29uY3VycmVudFNlZ21lbnRzOiBudW1iZXIgPSAyMCk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgaXRlbXM6IFRbXSA9IFtdO1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChpbnB1dEl0ZW1zKTtcbiAgICAgICAgbGV0IG1heFNlZ21lbnRzOiBUW11bXVtdID0gW107XG4gICAgICAgIGxldCByZXN1bHRJdGVtczogVFtdID0gW107XG5cbiAgICAgICAgd2hpbGUgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBiYXRjaCA9IGl0ZW1zLnNwbGljZSgwLCBiYXRjaFNpemUgKiBtYXhDb25jdXJyZW50U2VnbWVudHMpO1xuICAgICAgICAgICAgbGV0IHNlZ21lbnQ6IFRbXVtdID0gW107XG4gICAgICAgICAgICB3aGlsZSAoYmF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnQucHVzaChiYXRjaC5zcGxpY2UoMCwgYmF0Y2hTaXplKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXhTZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIG1heFNlZ21lbnRzKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBwcm9taXNlczogUHJvbWlzZTxUW10+W10gPSBbXTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBiYXRjaCBsZW5ndGggPSAke3NlZ21lbnQubGVuZ3RofWApO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHNlZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuYmF0Y2hHZXQoYmF0Y2gpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2VnbWVudCBjb21wbGV0ZVwiKTtcbiAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRJdGVtcyA9IHJlc3VsdEl0ZW1zLmNvbmNhdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdGltZSBmb3Igc2VnbWVudCBnZXQgJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHRvdGFsIHRpbWUgZm9yIGNvbXBsZXRlIHBhcmFsbGVsIGdldCAke0RhdGUubm93KCkgLSBzdGFydFRpbWV9YCk7XG4gICAgICAgIHJldHVybiByZXN1bHRJdGVtcztcbiAgICB9XG5cbiAgICBhc3luYyBwYXJhbGxlbFF1ZXJ5KFxuICAgICAgICBrZXlDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgICAgICBtYXhDb25jdXJyZW50Q2FsbHM6IG51bWJlciA9IDIwLFxuICAgICAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApOiBQcm9taXNlPFRbXT4ge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoa2V5Q29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50Q29uZGl0aW9ucyA9IGtleUNvbmRpdGlvbnMuc3BsaWNlKDAsIG1heENvbmN1cnJlbnRDYWxscyk7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVByb21pc2VzID0gc2VnbWVudENvbmRpdGlvbnMubWFwKChrZXlDb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVyeShrZXlDb25kaXRpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHF1ZXJ5UHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVyeVJlc3VsdCBvZiBxdWVyeVJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goLi4ucXVlcnlSZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHRvdGFsIHRpbWUgZm9yIGNvbXBsZXRlIHBhcmFsbGVsIHF1ZXJ5ICR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1gKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjdXN0b21RdWVyeShrZXlDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxUW10+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5tb2RlbC5xdWVyeShrZXlDb25kaXRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmxpbWl0KSBxdWVyeS5saW1pdChvcHRpb25zLmxpbWl0KTtcblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgcXVlcnkpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhgdG90YWwgdGltZSBmb3IgY29tcGxldGUgcXVlcnkgJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfWApO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgZGVjb2RlKGNvbnRpbnVhdGlvblRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChjb250aW51YXRpb25Ub2tlbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdEV2YWx1YXRlZEtleSA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20oY29udGludWF0aW9uVG9rZW4sICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkluY29taW5nIExhc3QgRXZhbHVhdGVkIEtleSBcIiArIGxhc3RFdmFsdWF0ZWRLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0RXZhbHVhdGVkS2V5O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udGludWF0aW9uVG9rZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGFzeW5jIGVuY29kZShsYXN0RXZhbHVhdGVkS2V5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShsYXN0RXZhbHVhdGVkS2V5KSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,7 +0,0 @@
1
- export declare const BaseSchema: import("dynamoose/dist/Schema").Schema;
2
- export declare class BaseModel {
3
- created_time?: Date;
4
- updated_time?: Date;
5
- created_user?: string;
6
- updated_user?: string;
7
- }
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseModel = exports.BaseSchema = void 0;
4
- const dynamoose_1 = require("dynamoose");
5
- exports.BaseSchema = new dynamoose_1.Schema({
6
- created_time: {
7
- type: Date,
8
- default: () => new Date()
9
- },
10
- updated_time: {
11
- type: Date,
12
- default: () => new Date()
13
- },
14
- created_user: {
15
- type: String
16
- },
17
- updated_user: {
18
- type: String
19
- }
20
- }, {
21
- timestamps: {
22
- createdAt: 'created_time',
23
- updatedAt: 'updated_time'
24
- }
25
- });
26
- class BaseModel {
27
- }
28
- exports.BaseModel = BaseModel;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC1keW5hbW9vc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmFzZS1tb2RlbC1keW5hbW9vc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQW1DO0FBRXRCLFFBQUEsVUFBVSxHQUFHLElBQUksa0JBQU0sQ0FBQztJQUNqQyxZQUFZLEVBQUU7UUFDVixJQUFJLEVBQUUsSUFBSTtRQUNWLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtLQUM1QjtJQUNELFlBQVksRUFBRTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO0tBQzVCO0lBQ0QsWUFBWSxFQUFFO1FBQ1YsSUFBSSxFQUFFLE1BQU07S0FDZjtJQUNELFlBQVksRUFBRTtRQUNWLElBQUksRUFBRSxNQUFNO0tBQ2Y7Q0FDSixFQUFFO0lBQ0MsVUFBVSxFQUFFO1FBQ1IsU0FBUyxFQUFFLGNBQWM7UUFDekIsU0FBUyxFQUFFLGNBQWM7S0FDNUI7Q0FDSixDQUFDLENBQUM7QUFFSCxNQUFhLFNBQVM7Q0FLckI7QUFMRCw4QkFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ2R5bmFtb29zZSc7XG5cbmV4cG9ydCBjb25zdCBCYXNlU2NoZW1hID0gbmV3IFNjaGVtYSh7XG4gICAgY3JlYXRlZF90aW1lOiB7XG4gICAgICAgIHR5cGU6IERhdGUsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IG5ldyBEYXRlKClcbiAgICB9LFxuICAgIHVwZGF0ZWRfdGltZToge1xuICAgICAgICB0eXBlOiBEYXRlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiBuZXcgRGF0ZSgpXG4gICAgfSxcbiAgICBjcmVhdGVkX3VzZXI6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICB1cGRhdGVkX3VzZXI6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgfVxufSwge1xuICAgIHRpbWVzdGFtcHM6IHtcbiAgICAgICAgY3JlYXRlZEF0OiAnY3JlYXRlZF90aW1lJyxcbiAgICAgICAgdXBkYXRlZEF0OiAndXBkYXRlZF90aW1lJ1xuICAgIH1cbn0pO1xuXG5leHBvcnQgY2xhc3MgQmFzZU1vZGVsIHtcbiAgICBjcmVhdGVkX3RpbWU/OiBEYXRlO1xuICAgIHVwZGF0ZWRfdGltZT86IERhdGU7XG4gICAgY3JlYXRlZF91c2VyPzogc3RyaW5nO1xuICAgIHVwZGF0ZWRfdXNlcj86IHN0cmluZztcbn1cbiJdfQ==
@@ -1,21 +0,0 @@
1
- import { GenericDAO, AuthContext } from '../base-dao-dynamoose';
2
- import { Example } from './example-model';
3
- export declare class ExampleDAO extends GenericDAO<Example> {
4
- constructor();
5
- findByExampleStringProperty(value: string): Promise<Example[]>;
6
- findByExampleNumberProperty(value: number): Promise<Example[]>;
7
- findByExampleBooleanProperty(value: boolean): Promise<Example[]>;
8
- findByCreatedUser(userSub: string): Promise<Example[]>;
9
- createExample(exampleStringProperty: string, exampleNumberProperty: number, exampleBooleanProperty: boolean, authContext?: AuthContext): Promise<Example>;
10
- updateExample(id: string, updates: Partial<Example>, authContext?: AuthContext): Promise<Example>;
11
- deleteExample(id: string): Promise<void>;
12
- getExampleById(id: string): Promise<Example>;
13
- getAllExamples(): Promise<Example[]>;
14
- batchCreateExamples(examples: Array<{
15
- exampleStringProperty: string;
16
- exampleNumberProperty: number;
17
- exampleBooleanProperty: boolean;
18
- }>, authContext?: AuthContext): Promise<Example[]>;
19
- batchDeleteExamples(ids: string[]): Promise<void>;
20
- batchGetExamples(ids: string[]): Promise<Example[]>;
21
- }
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExampleDAO = void 0;
4
- const base_dao_dynamoose_1 = require("../base-dao-dynamoose");
5
- const example_model_1 = require("./example-model");
6
- class ExampleDAO extends base_dao_dynamoose_1.GenericDAO {
7
- constructor() {
8
- super(example_model_1.ExampleModel);
9
- }
10
- async findByExampleStringProperty(value) {
11
- return await this.model.scan('exampleStringProperty').eq(value).exec();
12
- }
13
- async findByExampleNumberProperty(value) {
14
- return await this.model.scan('exampleNumberProperty').eq(value).exec();
15
- }
16
- async findByExampleBooleanProperty(value) {
17
- return await this.model.scan('exampleBooleanProperty').eq(value).exec();
18
- }
19
- async findByCreatedUser(userSub) {
20
- return await this.model.scan('created_user').eq(userSub).exec();
21
- }
22
- async createExample(exampleStringProperty, exampleNumberProperty, exampleBooleanProperty, authContext) {
23
- const example = new example_model_1.Example();
24
- example.exampleStringProperty = exampleStringProperty;
25
- example.exampleNumberProperty = exampleNumberProperty;
26
- example.exampleBooleanProperty = exampleBooleanProperty;
27
- return await this.save(example, authContext);
28
- }
29
- async updateExample(id, updates, authContext) {
30
- const example = new example_model_1.Example();
31
- example.id = id;
32
- Object.assign(example, updates);
33
- return await this.update(example, authContext);
34
- }
35
- async deleteExample(id) {
36
- const example = new example_model_1.Example();
37
- example.id = id;
38
- await this.delete(example);
39
- }
40
- async getExampleById(id) {
41
- const example = new example_model_1.Example();
42
- example.id = id;
43
- return await this.get(example);
44
- }
45
- async getAllExamples() {
46
- return await this.scan();
47
- }
48
- async batchCreateExamples(examples, authContext) {
49
- const exampleObjects = examples.map(ex => {
50
- const example = new example_model_1.Example();
51
- example.exampleStringProperty = ex.exampleStringProperty;
52
- example.exampleNumberProperty = ex.exampleNumberProperty;
53
- example.exampleBooleanProperty = ex.exampleBooleanProperty;
54
- return example;
55
- });
56
- return await this.batchPut(exampleObjects, authContext);
57
- }
58
- async batchDeleteExamples(ids) {
59
- const examples = ids.map(id => {
60
- const example = new example_model_1.Example();
61
- example.id = id;
62
- return example;
63
- });
64
- await this.batchDelete(examples);
65
- }
66
- async batchGetExamples(ids) {
67
- const examples = ids.map(id => {
68
- const example = new example_model_1.Example();
69
- example.id = id;
70
- return example;
71
- });
72
- return await this.batchGet(examples);
73
- }
74
- }
75
- exports.ExampleDAO = ExampleDAO;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS1kYW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VzdG9tZXItdXNlci9leGFtcGxlLWRhby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBZ0U7QUFDaEUsbURBQXdEO0FBRXhELE1BQWEsVUFBVyxTQUFRLCtCQUFtQjtJQUMvQztRQUNJLEtBQUssQ0FBQyw0QkFBWSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxLQUFhO1FBQzNDLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQWE7UUFDM0MsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQUMsS0FBYztRQUM3QyxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQ2YscUJBQTZCLEVBQzdCLHFCQUE2QixFQUM3QixzQkFBK0IsRUFDL0IsV0FBeUI7UUFFekIsTUFBTSxPQUFP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QyxDQUFDO0lBQ3pDLENBQUM7Q0FDSjtBQW5HRCxnQ0FtR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmljREFPLCBBdXRoQ29udGV4dCB9IGZyb20gJy4uL2Jhc2UtZGFvLWR5bmFtb29zZSc7XG5pbXBvcnQgeyBFeGFtcGxlTW9kZWwsIEV4YW1wbGUgfSBmcm9tICcuL2V4YW1wbGUtbW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgRXhhbXBsZURBTyBleHRlbmRzIEdlbmVyaWNEQU88RXhhbXBsZT4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihFeGFtcGxlTW9kZWwpO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmRCeUV4YW1wbGVTdHJpbmdQcm9wZXJ0eSh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTxFeGFtcGxlW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kZWwuc2NhbignZXhhbXBsZVN0cmluZ1Byb3BlcnR5JykuZXEodmFsdWUpLmV4ZWMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5kQnlFeGFtcGxlTnVtYmVyUHJvcGVydHkodmFsdWU6IG51bWJlcik6IFByb21pc2U8RXhhbXBsZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1vZGVsLnNjYW4oJ2V4YW1wbGVOdW1iZXJQcm9wZXJ0eScpLmVxKHZhbHVlKS5leGVjKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmluZEJ5RXhhbXBsZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZTogYm9vbGVhbik6IFByb21pc2U8RXhhbXBsZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1vZGVsLnNjYW4oJ2V4YW1wbGVCb29sZWFuUHJvcGVydHknKS5lcSh2YWx1ZSkuZXhlYygpO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmRCeUNyZWF0ZWRVc2VyKHVzZXJTdWI6IHN0cmluZyk6IFByb21pc2U8RXhhbXBsZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1vZGVsLnNjYW4oJ2NyZWF0ZWRfdXNlcicpLmVxKHVzZXJTdWIpLmV4ZWMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVFeGFtcGxlKFxuICAgICAgICBleGFtcGxlU3RyaW5nUHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgZXhhbXBsZU51bWJlclByb3BlcnR5OiBudW1iZXIsXG4gICAgICAgIGV4YW1wbGVCb29sZWFuUHJvcGVydHk6IGJvb2xlYW4sXG4gICAgICAgIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHRcbiAgICApOiBQcm9taXNlPEV4YW1wbGU+IHtcbiAgICAgICAgY29uc3QgZXhhbXBsZSA9IG5ldyBFeGFtcGxlKCk7XG4gICAgICAgIGV4YW1wbGUuZXhhbXBsZVN0cmluZ1Byb3BlcnR5ID0gZXhhbXBsZVN0cmluZ1Byb3BlcnR5O1xuICAgICAgICBleGFtcGxlLmV4YW1wbGVOdW1iZXJQcm9wZXJ0eSA9IGV4YW1wbGVOdW1iZXJQcm9wZXJ0eTtcbiAgICAgICAgZXhhbXBsZS5leGFtcGxlQm9vbGVhblByb3BlcnR5ID0gZXhhbXBsZUJvb2xlYW5Qcm9wZXJ0eTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zYXZlKGV4YW1wbGUsIGF1dGhDb250ZXh0KTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVFeGFtcGxlKFxuICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICB1cGRhdGVzOiBQYXJ0aWFsPEV4YW1wbGU+LFxuICAgICAgICBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0XG4gICAgKTogUHJvbWlzZTxFeGFtcGxlPiB7XG4gICAgICAgIGNvbnN0IGV4YW1wbGUgPSBuZXcgRXhhbXBsZSgpO1xuICAgICAgICBleGFtcGxlLmlkID0gaWQ7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXhhbXBsZSwgdXBkYXRlcyk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlKGV4YW1wbGUsIGF1dGhDb250ZXh0KTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGVFeGFtcGxlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXhhbXBsZSA9IG5ldyBFeGFtcGxlKCk7XG4gICAgICAgIGV4YW1wbGUuaWQgPSBpZDtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUoZXhhbXBsZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RXhhbXBsZUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8RXhhbXBsZT4ge1xuICAgICAgICBjb25zdCBleGFtcGxlID0gbmV3IEV4YW1wbGUoKTtcbiAgICAgICAgZXhhbXBsZS5pZCA9IGlkO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQoZXhhbXBsZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsRXhhbXBsZXMoKTogUHJvbWlzZTxFeGFtcGxlW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2NhbigpO1xuICAgIH1cblxuICAgIGFzeW5jIGJhdGNoQ3JlYXRlRXhhbXBsZXMoXG4gICAgICAgIGV4YW1wbGVzOiBBcnJheTx7XG4gICAgICAgICAgICBleGFtcGxlU3RyaW5nUHJvcGVydHk6IHN0cmluZztcbiAgICAgICAgICAgIGV4YW1wbGVOdW1iZXJQcm9wZXJ0eTogbnVtYmVyO1xuICAgICAgICAgICAgZXhhbXBsZUJvb2xlYW5Qcm9wZXJ0eTogYm9vbGVhbjtcbiAgICAgICAgfT4sXG4gICAgICAgIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHRcbiAgICApOiBQcm9taXNlPEV4YW1wbGVbXT4ge1xuICAgICAgICBjb25zdCBleGFtcGxlT2JqZWN0cyA9IGV4YW1wbGVzLm1hcChleCA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGFtcGxlID0gbmV3IEV4YW1wbGUoKTtcbiAgICAgICAgICAgIGV4YW1wbGUuZXhhbXBsZVN0cmluZ1Byb3BlcnR5ID0gZXguZXhhbXBsZVN0cmluZ1Byb3BlcnR5O1xuICAgICAgICAgICAgZXhhbXBsZS5leGFtcGxlTnVtYmVyUHJvcGVydHkgPSBleC5leGFtcGxlTnVtYmVyUHJvcGVydHk7XG4gICAgICAgICAgICBleGFtcGxlLmV4YW1wbGVCb29sZWFuUHJvcGVydHkgPSBleC5leGFtcGxlQm9vbGVhblByb3BlcnR5O1xuICAgICAgICAgICAgcmV0dXJuIGV4YW1wbGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJhdGNoUHV0KGV4YW1wbGVPYmplY3RzLCBhdXRoQ29udGV4dCk7XG4gICAgfVxuXG4gICAgYXN5bmMgYmF0Y2hEZWxldGVFeGFtcGxlcyhpZHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV4YW1wbGVzID0gaWRzLm1hcChpZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGFtcGxlID0gbmV3IEV4YW1wbGUoKTtcbiAgICAgICAgICAgIGV4YW1wbGUuaWQgPSBpZDtcbiAgICAgICAgICAgIHJldHVybiBleGFtcGxlO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5iYXRjaERlbGV0ZShleGFtcGxlcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgYmF0Y2hHZXRFeGFtcGxlcyhpZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxFeGFtcGxlW10+IHtcbiAgICAgICAgY29uc3QgZXhhbXBsZXMgPSBpZHMubWFwKGlkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4YW1wbGUgPSBuZXcgRXhhbXBsZSgpO1xuICAgICAgICAgICAgZXhhbXBsZS5pZCA9IGlkO1xuICAgICAgICAgICAgcmV0dXJuIGV4YW1wbGU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXRjaEdldChleGFtcGxlcyk7XG4gICAgfVxufVxuIl19