@admin-layout/timetracker-module-server 1.0.3-alpha.25 → 1.0.3-alpha.29

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/lib/index.js CHANGED
@@ -1369,7 +1369,7 @@ exports.schema = schema;
1369
1369
 
1370
1370
  "use strict";
1371
1371
  __webpack_require__.r(__webpack_exports__);
1372
- /* harmony default export */ __webpack_exports__["default"] = ("type TimeRecord {\n id: String\n startTime: DateTime\n endTime: DateTime\n taskId: String\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n userId: String\n orgId: String\n timesheetId: String\n editable: Boolean\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus]\n}\n\ntype PauseStatus {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput PauseStatus_Input {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput TimeRecordRequest {\n userId: String\n startTime: DateTime\n endTime: DateTime\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n timesheetId: String\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus_Input]\n}\n\n\"\"\"\n Subscription event for timer\n\"\"\"\nenum TimeRecordPubSubEvents {\n TimeRecordCreated\n TimeRecordUpdated\n TimeRecordStopped\n TimeRecordDeleted\n TimeRecordConfigurationUpdate\n}\n\ntype SubscriptionTimeRecord {\n mutation: TimeRecordPubSubEvents\n timeRecord: TimeRecord\n}\n\nextend type Query {\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\n getPlayingTimeRecord: TimeRecord @addAccountContext\n}\n\nextend type Mutation {\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\n}\n\nextend type Subscription {\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\n}\n");
1372
+ /* harmony default export */ __webpack_exports__["default"] = ("type TimeRecords {\n orgId: String\n userId: String\n timeRecords: [TimeRecord]\n}\n\ntype TimeRecord {\n id: String\n startTime: DateTime\n endTime: DateTime\n taskId: String\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n userId: String\n orgId: String\n timesheetId: String\n editable: Boolean\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus]\n}\n\ntype PauseStatus {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput PauseStatus_Input {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput TimeRecordRequest {\n userId: String\n startTime: DateTime\n endTime: DateTime\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n timesheetId: String\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus_Input]\n}\n\n\"\"\"\n Subscription event for timer\n\"\"\"\nenum TimeRecordPubSubEvents {\n TimeRecordCreated\n TimeRecordUpdated\n TimeRecordStopped\n TimeRecordDeleted\n TimeRecordConfigurationUpdate\n}\n\ntype SubscriptionTimeRecord {\n mutation: TimeRecordPubSubEvents\n timeRecord: TimeRecord\n}\n\nextend type Query {\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\n getPlayingTimeRecord: TimeRecord @addAccountContext\n}\n\nextend type Mutation {\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\n}\n\nextend type Subscription {\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\n}\n");
1373
1373
 
1374
1374
  /***/ }),
1375
1375
 
@@ -1382,7 +1382,7 @@ __webpack_require__.r(__webpack_exports__);
1382
1382
 
1383
1383
  "use strict";
1384
1384
  __webpack_require__.r(__webpack_exports__);
1385
- /* harmony default export */ __webpack_exports__["default"] = ("# scalar DateTime\nenum TimesheetState {\n OPEN\n APPROVED_PENDING\n APPROVED\n APPROVED_FINALIZED # --- which means no going back\n DENYED\n SUBMITTED\n DENYED_FINALIZED # --- which means no going back\n}\n\ntype Timesheet {\n id: ID\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n timeRecordsId: [String]\n}\n\ninput TimesheetCreateRequest {\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n timeRecordsId: [String]\n}\n\ntype TimesheetResponse {\n id: ID\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n userId: String\n orgId: String\n totalDuration: Int\n}\n\nextend type Query {\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\n}\n\nextend type Mutation {\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\n removeTimesheet(sheetId: String): Boolean @addAccountContext\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\n}\n");
1385
+ /* harmony default export */ __webpack_exports__["default"] = ("# scalar DateTime\nenum TimesheetState {\n OPEN\n APPROVED_PENDING\n APPROVED\n APPROVED_FINALIZED # --- which means no going back\n DENYED\n SUBMITTED\n DENYED_FINALIZED # --- which means no going back\n}\n\ntype Timesheets {\n orgId: String\n userId: String\n timesheets: [Timesheet]\n}\n\ntype Timesheet {\n id: ID\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n timeRecordsId: [String]\n}\n\ninput TimesheetCreateRequest {\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n timeRecordsId: [String]\n}\n\ntype TimesheetResponse {\n id: ID\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n userId: String\n orgId: String\n totalDuration: Int\n}\n\nextend type Query {\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\n}\n\nextend type Mutation {\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\n removeTimesheet(sheetId: String): Boolean @addAccountContext\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\n}\n");
1386
1386
 
1387
1387
  /***/ }),
1388
1388
 
@@ -1699,6 +1699,106 @@ TimesheetService = __decorate([
1699
1699
  exports.TimesheetService = TimesheetService;
1700
1700
 
1701
1701
 
1702
+ /***/ }),
1703
+
1704
+ /***/ "./src/store/models/timerecords-model.ts":
1705
+ /*!***********************************************!*\
1706
+ !*** ./src/store/models/timerecords-model.ts ***!
1707
+ \***********************************************/
1708
+ /*! no static exports found */
1709
+ /***/ (function(module, exports, __webpack_require__) {
1710
+
1711
+ "use strict";
1712
+
1713
+ Object.defineProperty(exports, "__esModule", { value: true });
1714
+ exports.TimeRecordsModelFunc = void 0;
1715
+ const mongoose_1 = __webpack_require__(/*! mongoose */ "mongoose");
1716
+ const PauseStatusSchema = new mongoose_1.Schema({
1717
+ pausedTime: { type: Date },
1718
+ restartTime: { type: Date },
1719
+ });
1720
+ // ===> TimeRecord
1721
+ const TimeRecordSchema = new mongoose_1.Schema({
1722
+ userId: { type: String, index: true },
1723
+ startTime: { type: Date },
1724
+ endTime: { type: Date, default: null },
1725
+ taskName: { type: String },
1726
+ description: { type: String },
1727
+ taskId: { type: String },
1728
+ tags: { type: [String] },
1729
+ isBillable: { type: Boolean },
1730
+ projectId: { type: String },
1731
+ timesheetId: { type: String },
1732
+ isPause: { type: Boolean, default: false },
1733
+ isTimeout: { type: Boolean, default: false },
1734
+ pauseStatus: { type: [PauseStatusSchema] }
1735
+ });
1736
+ TimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 });
1737
+ const TimeRecordsSchema = new mongoose_1.Schema({
1738
+ orgId: { type: String, index: true },
1739
+ timeRecords: [TimeRecordSchema],
1740
+ });
1741
+ TimeRecordSchema.virtual('id').get(function () {
1742
+ return this._id.toHexString();
1743
+ });
1744
+ TimeRecordSchema.set('toJSON', {
1745
+ virtuals: true,
1746
+ });
1747
+ TimeRecordsSchema.set('toObject', { virtuals: true });
1748
+ exports.TimeRecordsModelFunc = (db) => db.model('timerecords', TimeRecordsSchema);
1749
+
1750
+
1751
+ /***/ }),
1752
+
1753
+ /***/ "./src/store/models/timesheets-model.ts":
1754
+ /*!**********************************************!*\
1755
+ !*** ./src/store/models/timesheets-model.ts ***!
1756
+ \**********************************************/
1757
+ /*! no static exports found */
1758
+ /***/ (function(module, exports, __webpack_require__) {
1759
+
1760
+ "use strict";
1761
+
1762
+ Object.defineProperty(exports, "__esModule", { value: true });
1763
+ exports.TimesheetsModelFunc = void 0;
1764
+ const mongoose_1 = __webpack_require__(/*! mongoose */ "mongoose");
1765
+ var TimesheetState;
1766
+ (function (TimesheetState) {
1767
+ TimesheetState[TimesheetState["OPEN"] = 0] = "OPEN";
1768
+ TimesheetState[TimesheetState["APPROVED_PENDING"] = 1] = "APPROVED_PENDING";
1769
+ TimesheetState[TimesheetState["APPROVED"] = 2] = "APPROVED";
1770
+ TimesheetState[TimesheetState["APPROVED_FINALIZED"] = 3] = "APPROVED_FINALIZED";
1771
+ TimesheetState[TimesheetState["DENYED"] = 4] = "DENYED";
1772
+ TimesheetState[TimesheetState["SUBMITTED"] = 5] = "SUBMITTED";
1773
+ TimesheetState[TimesheetState["DENYED_FINALIZED"] = 6] = "DENYED_FINALIZED";
1774
+ })(TimesheetState || (TimesheetState = {}));
1775
+ // ===> Timesheet
1776
+ const TimesheetSchema = new mongoose_1.Schema({
1777
+ userId: { type: String, index: true },
1778
+ startDate: { type: Date },
1779
+ endDate: { type: Date },
1780
+ state: { type: TimesheetState },
1781
+ submittedOn: { type: Date },
1782
+ approvedOn: { type: Date },
1783
+ approvedBy: { type: String },
1784
+ updatedBy: { type: String },
1785
+ updatedOn: { type: Date },
1786
+ timeRecordsId: { type: [String] },
1787
+ });
1788
+ const TimesheetsSchema = new mongoose_1.Schema({
1789
+ orgId: { type: String, index: true },
1790
+ timesheets: [TimesheetSchema],
1791
+ });
1792
+ TimesheetsSchema.virtual('id').get(function () {
1793
+ return this._id.toHexString();
1794
+ });
1795
+ TimesheetsSchema.set('toJSON', {
1796
+ virtuals: true,
1797
+ });
1798
+ TimesheetsSchema.set('toObject', { virtuals: true });
1799
+ exports.TimesheetsModelFunc = (db) => db.model('timesheets', TimesheetsSchema);
1800
+
1801
+
1702
1802
  /***/ }),
1703
1803
 
1704
1804
  /***/ "./src/store/models/timetracker-model.ts":
@@ -1836,12 +1936,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
1836
1936
  Object.defineProperty(exports, "__esModule", { value: true });
1837
1937
  exports.TimeRecordRepository = void 0;
1838
1938
  const inversify_1 = __webpack_require__(/*! inversify */ "inversify");
1939
+ const timerecords_model_1 = __webpack_require__(/*! ../models/timerecords-model */ "./src/store/models/timerecords-model.ts");
1839
1940
  const _ = __webpack_require__(/*! lodash */ "lodash");
1840
- const timetracker_model_1 = __webpack_require__(/*! ../models/timetracker-model */ "./src/store/models/timetracker-model.ts");
1841
1941
  let TimeRecordRepository = class TimeRecordRepository {
1842
1942
  constructor(db, logger) {
1843
1943
  this.logger = logger.child({ className: 'TimeRecordRepository' });
1844
- this.timeTrackerModel = timetracker_model_1.TimeTrackerModelFunc(db);
1944
+ this.timeRecordsModel = timerecords_model_1.TimeRecordsModelFunc(db);
1845
1945
  }
1846
1946
  async getTimeRecords(orgId, userId, from, until) {
1847
1947
  if (!userId) {
@@ -1856,7 +1956,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1856
1956
  if (until) {
1857
1957
  match = Object.assign(Object.assign({}, match), { 'timeRecords.endTime': { $lte: until } });
1858
1958
  }
1859
- const result = await this.timeTrackerModel.aggregate([
1959
+ const result = await this.timeRecordsModel.aggregate([
1860
1960
  {
1861
1961
  $match: {
1862
1962
  orgId,
@@ -1889,14 +1989,14 @@ let TimeRecordRepository = class TimeRecordRepository {
1889
1989
  return result[0].timeRecords;
1890
1990
  }
1891
1991
  async getOrganizationTimeRecords(orgId) {
1892
- const trackDoc = await this.timeTrackerModel.findOne({ orgId });
1992
+ const trackDoc = await this.timeRecordsModel.findOne({ orgId });
1893
1993
  if (trackDoc && trackDoc.timeRecords) {
1894
1994
  return trackDoc.timeRecords;
1895
1995
  }
1896
1996
  return [];
1897
1997
  }
1898
1998
  async getPlayingTimeRecord(userId, orgId) {
1899
- const trackDoc = await this.timeTrackerModel.findOne({ orgId });
1999
+ const trackDoc = await this.timeRecordsModel.findOne({ orgId });
1900
2000
  if (trackDoc) {
1901
2001
  let res;
1902
2002
  if (trackDoc.timeRecords)
@@ -1907,7 +2007,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1907
2007
  }
1908
2008
  async createTimeRecord(userId, orgId, request) {
1909
2009
  try {
1910
- const response = await this.timeTrackerModel.findOneAndUpdate({ orgId }, { orgId, $push: { timeRecords: request } }, {
2010
+ const response = await this.timeRecordsModel.findOneAndUpdate({ orgId }, { orgId, $push: { timeRecords: request } }, {
1911
2011
  upsert: true,
1912
2012
  new: true,
1913
2013
  projection: { userId, orgId, timeRecords: { $elemMatch: { startTime: request.startTime } } },
@@ -1926,7 +2026,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1926
2026
  _.forIn(request, (value, key) => {
1927
2027
  setRequest = Object.assign(Object.assign({}, setRequest), { [`timeRecords.$.${key}`]: value });
1928
2028
  });
1929
- const response = await this.timeTrackerModel.findOneAndUpdate({ orgId, timeRecords: { $elemMatch: { _id: recordId } } }, {
2029
+ const response = await this.timeRecordsModel.findOneAndUpdate({ orgId, timeRecords: { $elemMatch: { _id: recordId } } }, {
1930
2030
  $set: Object.assign({}, setRequest),
1931
2031
  }, {
1932
2032
  new: true,
@@ -1944,7 +2044,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1944
2044
  }
1945
2045
  async removeTimeRecord(userId, orgId, recordId) {
1946
2046
  try {
1947
- const result = await this.timeTrackerModel.update({
2047
+ const result = await this.timeRecordsModel.update({
1948
2048
  orgId,
1949
2049
  }, {
1950
2050
  $pull: { timeRecords: { _id: recordId } },
@@ -1960,10 +2060,10 @@ let TimeRecordRepository = class TimeRecordRepository {
1960
2060
  }
1961
2061
  async removeDurationTimeRecords(userId, orgId, startTime, endTime, projectId) {
1962
2062
  try {
1963
- const trackerDoc = await this.timeTrackerModel.find({ orgId });
2063
+ const trackerDoc = await this.timeRecordsModel.find({ orgId });
1964
2064
  if (trackerDoc && trackerDoc.length > 0) {
1965
2065
  const timeRecords = trackerDoc[0].timeRecords.filter((tr) => tr.startTime < startTime || tr.startTime > endTime || tr.projectId !== projectId);
1966
- await this.timeTrackerModel.update({
2066
+ await this.timeRecordsModel.update({
1967
2067
  orgId,
1968
2068
  }, {
1969
2069
  timeRecords,
@@ -1978,7 +2078,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1978
2078
  }
1979
2079
  async approveTimeRecords(orgId, sheetId, startDate, endDate) {
1980
2080
  try {
1981
- await this.timeTrackerModel.updateMany({
2081
+ await this.timeRecordsModel.updateMany({
1982
2082
  orgId,
1983
2083
  }, { $set: { 'timeRecords.$[el].timesheetId': sheetId } }, {
1984
2084
  multi: true,
@@ -1998,7 +2098,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1998
2098
  }
1999
2099
  async disapproveTimeRecords(orgId, sheetId) {
2000
2100
  try {
2001
- await this.timeTrackerModel.updateMany({
2101
+ await this.timeRecordsModel.updateMany({
2002
2102
  orgId,
2003
2103
  }, { $set: { 'timeRecords.$[el].timesheetId': null } }, {
2004
2104
  multi: true,
@@ -2048,15 +2148,15 @@ exports.TimesheetRepository = void 0;
2048
2148
  const inversify_1 = __webpack_require__(/*! inversify */ "inversify");
2049
2149
  const _ = __webpack_require__(/*! lodash */ "lodash");
2050
2150
  const core_1 = __webpack_require__(/*! @common-stack/core */ "@common-stack/core");
2051
- const timetracker_model_1 = __webpack_require__(/*! ../models/timetracker-model */ "./src/store/models/timetracker-model.ts");
2151
+ const timesheets_model_1 = __webpack_require__(/*! ../models/timesheets-model */ "./src/store/models/timesheets-model.ts");
2052
2152
  let TimesheetRepository = class TimesheetRepository {
2053
2153
  constructor(db, logger, broker) {
2054
2154
  this.broker = broker;
2055
2155
  this.logger = logger.child({ className: 'TimesheetRepository' });
2056
- this.timeTrackerModel = timetracker_model_1.TimeTrackerModelFunc(db);
2156
+ this.timesheetsModel = timesheets_model_1.TimesheetsModelFunc(db);
2057
2157
  }
2058
2158
  async getOrganizationTimesheets(orgId) {
2059
- const trackDoc = await this.timeTrackerModel.findOne({ orgId });
2159
+ const trackDoc = await this.timesheetsModel.findOne({ orgId });
2060
2160
  if (trackDoc && trackDoc.timesheets) {
2061
2161
  return trackDoc.timesheets;
2062
2162
  }
@@ -2068,7 +2168,7 @@ let TimesheetRepository = class TimesheetRepository {
2068
2168
  }
2069
2169
  async createTimesheet(userId, orgId, request) {
2070
2170
  try {
2071
- const response = await this.timeTrackerModel.update({ orgId }, { $push: { timesheets: request } }, { upsert: true });
2171
+ const response = await this.timesheetsModel.update({ orgId }, { $push: { timesheets: request } }, { upsert: true });
2072
2172
  return true;
2073
2173
  }
2074
2174
  catch (err) {
@@ -2081,7 +2181,7 @@ let TimesheetRepository = class TimesheetRepository {
2081
2181
  _.forIn(request, (value, key) => {
2082
2182
  setRequest = Object.assign(Object.assign({}, setRequest), { [`timesheets.$.${key}`]: value });
2083
2183
  });
2084
- const response = await this.timeTrackerModel.update({ orgId, timesheets: { $elemMatch: { _id: sheetId } } }, { $set: Object.assign({}, setRequest) });
2184
+ const response = await this.timesheetsModel.update({ orgId, timesheets: { $elemMatch: { _id: sheetId } } }, { $set: Object.assign({}, setRequest) });
2085
2185
  return response;
2086
2186
  }
2087
2187
  catch (err) {
@@ -2090,7 +2190,7 @@ let TimesheetRepository = class TimesheetRepository {
2090
2190
  }
2091
2191
  async updateTimesheetStatus(orgId, sheetId, state) {
2092
2192
  try {
2093
- const response = await this.timeTrackerModel.update({
2193
+ const response = await this.timesheetsModel.update({
2094
2194
  orgId,
2095
2195
  $elemMatch: { 'timesheets.id': sheetId },
2096
2196
  }, {
@@ -2106,7 +2206,7 @@ let TimesheetRepository = class TimesheetRepository {
2106
2206
  }
2107
2207
  async removeTimesheet(userId, orgId, sheetId) {
2108
2208
  try {
2109
- await this.timeTrackerModel.update({
2209
+ await this.timesheetsModel.update({
2110
2210
  orgId,
2111
2211
  }, {
2112
2212
  $pull: { timesheets: { _id: sheetId } },
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/config/config.ts","webpack:///./src/config/index.ts","webpack:///./src/constants/constants.ts","webpack:///./src/constants/index.ts","webpack:///./src/containers/containers.ts","webpack:///./src/containers/index.ts","webpack:///./src/index.ts","webpack:///./src/initialization/index.ts","webpack:///./src/initialization/service-initialization.ts","webpack:///./src/migration/approval_notification.ejs","webpack:///./src/migration/index.ts","webpack:///./src/migration/mail-template.ts","webpack:///./src/migration/submit_notification.ejs","webpack:///./src/module.ts","webpack:///./src/preferences/index.ts","webpack:///./src/preferences/permissions/index.ts","webpack:///./src/preferences/permissions/timing-permissions-contribution.ts","webpack:///./src/preferences/permissions/timing-roles-permission-overwrite.ts","webpack:///./src/preferences/settings/general-settings.ts","webpack:///./src/preferences/settings/index.ts","webpack:///./src/preferences/settings/payment-settings.ts","webpack:///./src/resolvers/index.ts","webpack:///./src/resolvers/timerecord-resolver.ts","webpack:///./src/resolvers/timesheet-resolver.ts","webpack:///./src/schema/common-schema.graphql","webpack:///./src/schema/index.ts","webpack:///./src/schema/timerecord-schema.graphql","webpack:///./src/schema/timesheet-schema.graphql","webpack:///./src/schema/timetracker-schema.graphql","webpack:///./src/services/index.ts","webpack:///./src/services/timerecord-service.ts","webpack:///./src/services/timesheet-service.ts","webpack:///./src/store/models/timetracker-model.ts","webpack:///./src/store/repository/index.ts","webpack:///./src/store/repository/timerecord-repository.ts","webpack:///./src/store/repository/timesheet-repository.ts","webpack:///external \"@adminide-stack/core\"","webpack:///external \"@common-stack/core\"","webpack:///external \"@common-stack/server-core\"","webpack:///external \"@vscode-alt/monaco-editor/esm/vs/nls\"","webpack:///external \"@workbench-stack/core\"","webpack:///external \"envalid\"","webpack:///external \"graphql-subscriptions\"","webpack:///external \"inversify\"","webpack:///external \"lodash\"","webpack:///external \"moment\"","webpack:///external \"mongoose\""],"names":[],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","/* eslint-disable import/no-extraneous-dependencies */\nimport * as envalid from 'envalid';\n\nconst { str, num } = envalid;\n\nexport const config = envalid.cleanEnv(process.env, {\n MAIL_SEND_DEFAULT_EMAIL: str(),\n CLIENT_URL: str(),\n});\n","export * from './config';\n","export const DEFAULT_USER = '123';\nexport const DEFAULT_ORG = '123';\nexport const TYPES = {\n ITimeTrackerService: Symbol('ITimeTrackerService'),\n ITimeRecordService: Symbol('ITimeRecordService'),\n ITimesheetService: Symbol('ITimesheetService'),\n ITimeTrackerRepository: Symbol('ITimeTrackerRepository'),\n ITimeRecordRepository: Symbol('ITimeRecordRepository'),\n ITimesheetRepository: Symbol('ITimesheetRepository'),\n ITaskRepository: Symbol('ITaskRepository'),\n ITaskService: Symbol('ITaskService'),\n};\n\nexport const EmailTemplateCodes = {\n TIMESHEET_APPROVAL: 'TIMESHEET_APPROVAL_EMAIL_TEMPLATE',\n ENABLE_TIMETRACKER: 'ENABLE_TIMETRACKER_EMAIL_TEMPLATE',\n SUBMIT_TIME: 'SUBMIT_TIME_EMAIL_TEMPLATE',\n TIMETRACKING_STOP: 'TIMETRACKING_STOP_TEMPLATE',\n};\n\nexport enum IPreDefineAccountPermissions {\n // others\n viewOthersTimeTracker = 'organization.timetracker.others.view',\n createOthersTimeTracker = 'organization.timetracker.others.create',\n editOthersTimeTracker = 'organization.timetracker.others.edit',\n deleteOthersTimeTracker = 'organization.timetracker.others.delete',\n manageOthersTimeTracker = 'organization.timetracker.others.manage',\n\n // self\n viewSelfTimeTracker = 'organization.timetracker.self.view',\n createSelfTimeTracker = 'organization.timetracker.self.create',\n editSelfTimeTracker = 'organization.timetracker.self.edit',\n deleteSelfTimeTracker = 'organization.timetracker.self.delete',\n manageSelfTimeTracker = 'organization.timetracker.self.manage',\n}\n","export * from './constants';\n","import { ContainerModule, interfaces } from 'inversify';\nimport { TYPES } from '../constants';\nimport { TimeRecordService, TimesheetService } from '../services';\nimport { TimeRecordRepository, TimesheetRepository } from '../store/repository';\nimport { TimesheetApprovalMailTemplate, TimesheetSubmitMailTemplate } from '../migration';\n\nexport const timeTrackerModule: (settings: any) => ContainerModule = (setting) =>\n new ContainerModule((bind: interfaces.Bind) => {\n bind(TYPES.ITimeRecordRepository).to(TimeRecordRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetRepository).to(TimesheetRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimeRecordService).to(TimeRecordService).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetService).to(TimesheetService).inSingletonScope().whenTargetIsDefault();\n\n bind('MongodbMigration').to(TimesheetApprovalMailTemplate).whenTargetNamed(TimesheetApprovalMailTemplate.name);\n bind('MongodbMigration').to(TimesheetSubmitMailTemplate).whenTargetNamed(TimesheetSubmitMailTemplate.name);\n });\n","export * from './containers';\n","import { Feature } from '@common-stack/server-core';\nimport TimeTracker from './module';\n\nexport * from './constants';\nexport * from './store/repository';\nexport * from './store/models/timetracker-model';\n\nexport default new Feature(TimeTracker);\n","export * from './service-initialization';\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { IRegistryExtensions as RegistryExtensions, IConfigurationRegistry, IRegistry } from '@adminide-stack/core';\nimport * as ILogger from 'bunyan';\nimport { TYPES as serverTypes, Schemas } from '@workbench-stack/core';\nimport { CommonType } from '@common-stack/core';\nimport { interfaces } from 'inversify';\nimport { TimeTrackerContribution } from '../preferences';\n\nexport const mainLoadConfigurationPre = async (_, container: interfaces.Container) => {\n const logger = container.get<ILogger>(CommonType.LOGGER);\n logger.info('PRESTART START: -- load TimeTrackerContribution to registry');\n\n const registry = container.get<IRegistry>(serverTypes.IRegistry);\n const configurationRegistry = registry.as<IConfigurationRegistry>(RegistryExtensions.Configuration);\n configurationRegistry.registerConfiguration(TimeTrackerContribution);\n logger.info('PRESTART ENDS: -- load TimeTrackerContribution to registry');\n};\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has approved! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been approved! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","export * from './mail-template'","/* eslint-disable max-classes-per-file */\nimport * as Logger from 'bunyan';\nimport { injectable, inject, tagged } from 'inversify';\nimport { IDatabaseMigration } from '@adminide-stack/core';\nimport { IMoleculerServiceName, IMailServiceAction, IMailerServicesendArgs } from '@container-stack/mailing-api';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { CallingOptions, ServiceBroker } from 'moleculer';\nimport { EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\n\nconst TimeApprovalTemplate = require('./approval_notification.ejs');\nconst TimeSubmitTemplate = require('./submit_notification.ejs');\n\n@injectable()\nexport class TimesheetApprovalMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'EmailTemplateCodes_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.TIMESHEET_APPROVAL,\n description: 'Timesheet approved',\n html: TimeApprovalTemplate.default,\n text: 'Timesheet approved',\n name: 'Timesheet approval notification',\n topic: 'Timesheet approved.',\n };\n\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n\n@injectable()\nexport class TimesheetSubmitMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'TimesheetSubmitMailTemplate_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.SUBMIT_TIME,\n description: 'Timesheet submitted',\n html: TimeSubmitTemplate.default,\n text: 'Timesheet submitted',\n name: 'Timesheet submit notification',\n topic: 'Timesheet submitted.',\n };\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has submitted! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been submitted! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","import { Feature } from '@common-stack/server-core';\nimport { interfaces } from 'inversify';\nimport { schema } from './schema';\nimport { timeTrackerModule } from './containers';\nimport { resolvers } from './resolvers';\nimport { TYPES } from './constants';\nimport { mainLoadConfigurationPre } from './initialization';\nimport { TimeTrackerRolesContribution, TimeTrackerRolesPermissionOverwrite } from './preferences';\n\nconst createServiceFunc = (container: interfaces.Container) => ({\n timeRecordService: container.get(TYPES.ITimeRecordService),\n timesheetService: container.get(TYPES.ITimesheetService),\n});\n\nexport default new Feature({\n schema,\n createResolversFunc: resolvers,\n createContainerFunc: [timeTrackerModule],\n createServiceFunc,\n preStartFunc: [mainLoadConfigurationPre],\n addPermissions: {\n createPermissions: [TimeTrackerRolesContribution],\n },\n rolesUpdate: {\n overwriteRolesPermissions: TimeTrackerRolesPermissionOverwrite,\n },\n});\n","export * from './settings';\nexport * from './permissions';\n","export * from './timing-permissions-contribution';\nexport * from './timing-roles-permission-overwrite';\n","import { ConfigurationScope, IPermissionType } from '@adminide-stack/core';\nimport * as nls from '@vscode-alt/monaco-editor/esm/vs/nls';\nimport { IRoles } from '@common-stack/server-core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nconst extraParams = {\n type: 'string',\n enum: [IPermissionType.Allow, IPermissionType.Deny, IPermissionType.NotSet],\n default: IPermissionType.NotSet,\n scope: ConfigurationScope.WINDOW,\n};\nexport const TimeTrackerRolesContribution: IRoles<ConfigurationScope> = {\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewOthersTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of others.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createOthersTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of other members.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteOthersTimeTracker,\n 'Delete Time Tracker and Timesheet of other members.',\n ),\n ...extraParams,\n },\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewSelfTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of self',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createSelfTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteSelfTimeTracker,\n 'Delete Time Tracker and Timesheet of self.',\n ),\n ...extraParams,\n },\n};\n","import { IPermissionType, IApplicationRoles } from '@adminide-stack/core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nexport const TimeTrackerRolesPermissionOverwrite = {\n [IApplicationRoles.OWNER]: {\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ORGANIZATION_MANAGER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.PROJECT_ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.MEMBER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.PROJECT_VIEWER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.USER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.GUEST]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n// const localize = (id, defaultMessage) => defineMessages({\n// id,\n// defaultMessage,\n\n// });\nconst enum TimeFormat {\n ROUNDED_0_00_12 = 'h.mm A',\n ROUNDED_0_00_24 = 'H.mm',\n PRECISE_00_00_00_12 = 'hh:mm:ss A',\n PRECISE_00_00_00_24 = 'HH:mm:ss',\n ROUNDED_UP_00_00_12 = 'hh:mm A',\n ROUNDED_UP_00_00_24 = 'HH:mm',\n}\n\nconst enum GroupProjectsBy {\n CLIENT = 'Client',\n CATEGORY = 'Category',\n CUSTOM = 'Custom',\n}\nconst enum DateFormat {\n USFORMAT = 'MM-DD-YYYY',\n UKFORMAT = 'DD-MM-YYYY',\n ISOFORMAT = 'YYYY-MM-DD',\n}\n\nexport const enum WeekDay {\n SUN = 'Sunday',\n MON = 'Monday',\n TUE = 'Tuesday',\n WED = 'Wednesday',\n THU = 'Thursday',\n FRI = 'Friday',\n SAT = 'Saturday',\n}\n\nconst enum FristWeekOfTheYear {\n FIRST_DAY = 'Week containing first day of the year',\n FIRST_FULL_7DAY = 'First full seven-day week in January',\n FIRST_4_DAY = 'First four-day week in January',\n}\n\nconst enum TimeRoundingUpToValue {\n IN_MINUTES_15 = 15 * 60,\n IN_MINUTES_1 = 1 * 60,\n IN_MINUTES_5 = 5 * 60,\n IN_MINUTES_6 = 6 * 60,\n IN_MINUTES_10 = 10 * 60,\n IN_MINUTES_12 = 12 * 60,\n IN_MINUTES_30 = 30 * 60,\n IN_HOUR_1 = 1 * 60 * 60,\n IN_HOUR_4 = 4 * 60 * 60,\n}\n\nconst enum TimeRoundedType {\n ROUND_UP_TO = 'Round up to',\n ROUND_TO_NEAREST = 'Round to nearest',\n ROUND_DOWN_TO = 'Roudn down to',\n}\nexport const TimeTrackerProperties: { [path: string]: IConfigurationPropertySchema } = {\n // notifications\n 'timetracker.notifications.enableTimetrackerNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'Allow timetracker emails to be send',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n 'timetracker.notifications.timeTrackingNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'An email will be send when tracking is stopped by the system due to lack of user response',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.approvalNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.approvalNotifications',\n 'An email will be sent to me when my timesheet is approved',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.submitNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.submitNotifications',\n 'An email will be sent to me when team member submits time (Approval Managers only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n // Time Tracking\n 'timetracker.activity.autoStop': {\n type: 'number',\n default: 24,\n description: localize(\n 'timetracker.activity.autoStop',\n 'Tracking will stop once maximum tack length has been exceeded',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.waitingTime': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.waitingTime',\n 'Enable activity check on the time tracking to ask if you are still tracking after the choosen idle time (in seconds)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.maxTimeInADay': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.maxTimeInADay',\n 'Enable activity check on the time tracking upto choosen max time in a day(in seconds). It can change upto 1440',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.automaticLock': {\n type: 'string',\n default: null,\n description: localize(\n 'accountNotificationPrimaryEmail',\n 'Prevent regular users from editing their past time or adding new entries to past dates',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.billable': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.project.billable',\n 'When you create a project, make it billable so its time entries are set as billable by default.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.daysAllowedToWork': {\n type: ['string'],\n default: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI],\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n description: localize('timetracker.project.recurringDailyLimit', 'Select working day'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstDayOfTheWeek': {\n type: 'string',\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n default: WeekDay.MON,\n description: localize('timetracker.project.firstDayOfTheWeek', 'First day of the week'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstWeekOfTheyear': {\n type: 'string',\n enum: [FristWeekOfTheYear.FIRST_4_DAY, FristWeekOfTheYear.FIRST_FULL_7DAY, FristWeekOfTheYear.FIRST_DAY],\n default: FristWeekOfTheYear.FIRST_4_DAY,\n enumDescriptions: [\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_4_DAY',\n 'The week regarded to be the first week of the year is that which contains at least 4 days of the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_FULL_7DAY',\n 'The week regarded as the first week of the year is that which contains 7 full days in the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_DAY',\n 'The week regarded as the first week of the years is that which contains at least one-day of the new year.',\n ),\n ],\n description: localize(\n 'timetracker.project.firstWeekOfTheyear',\n 'You can set how you start or view the first calendar week of the year. This will be visible on Timetracker pages like \"Reports\" or \"Calender View\".',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeFormat': {\n type: 'string',\n enum: [\n TimeFormat.ROUNDED_0_00_12,\n TimeFormat.ROUNDED_0_00_24,\n TimeFormat.PRECISE_00_00_00_12,\n TimeFormat.PRECISE_00_00_00_24,\n TimeFormat.ROUNDED_UP_00_00_12,\n TimeFormat.ROUNDED_UP_00_00_24,\n ],\n default: TimeFormat.PRECISE_00_00_00_12,\n enumDescriptions: [\n localize('timetracker.project.timeFormat.ROUNDED_0_00_12', '\"0.00 AM/PM\" (12 hours rounded)'),\n localize('timetracker.project.timeFormat.ROUNDED_0_00_24', '\"0.00\" (24 hours rounded)'),\n localize(\n 'timetracker.project.timeFormat.PRECISE_00_00_00_12',\n '\"00:00:00 AM/PM\" (precise 12 hours format)',\n ),\n localize('timetracker.project.timeFormat.PRECISE_00_00_00_24', '\"13:00:00\" (precise 24 hours format)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_12', '\"00:00 AM/PM\" (rounded up)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_24', '\"13:00\" (rounded up)'),\n ],\n description: localize(\n 'timetracker.project.timeFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.dateFormat': {\n type: 'string',\n enum: [DateFormat.USFORMAT, DateFormat.UKFORMAT, DateFormat.ISOFORMAT],\n default: DateFormat.USFORMAT,\n enumDescriptions: [\n localize('timetracker.project.dateFormat.USFORMAT', '\"MM-DD-YYYY\" (US standard)'),\n localize('timetracker.project.dateFormat.UKFORMAT', '\"DD-MM-YYYY\" (UK standard)'),\n localize('timetracker.project.dateFormat.ISOFORMAT', '\"YYYY-MM-DD\" (ISO FORMAT)'),\n ],\n description: localize(\n 'timetracker.project.dateFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedToNearest': {\n type: 'string',\n enum: [\n TimeRoundingUpToValue.IN_MINUTES_1,\n TimeRoundingUpToValue.IN_MINUTES_5,\n TimeRoundingUpToValue.IN_MINUTES_6,\n TimeRoundingUpToValue.IN_MINUTES_10,\n TimeRoundingUpToValue.IN_MINUTES_12,\n TimeRoundingUpToValue.IN_MINUTES_15,\n TimeRoundingUpToValue.IN_MINUTES_30,\n TimeRoundingUpToValue.IN_HOUR_1,\n TimeRoundingUpToValue.IN_HOUR_4,\n ],\n default: TimeRoundingUpToValue.IN_MINUTES_15,\n enumDescriptions: [\n localize('TimeRoundingUpToValue.IN_MINUTES_1', '1 minute'),\n localize('TimeRoundingUpToValue.IN_MINUTES_5', '5 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_6', '6 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_10', '10 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_12', '12 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_15', '15 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_30', '30 minutes'),\n localize('TimeRoundingUpToValue.IN_HOUR_1', '1 hour'),\n localize('TimeRoundingUpToValue.IN_HOUR_4', '4 hours'),\n ],\n description: localize('timetracker.project.roundedToNearest', 'Round to nearest selected minute/hour'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedType': {\n type: 'string',\n enum: [TimeRoundedType.ROUND_UP_TO, TimeRoundedType.ROUND_TO_NEAREST, TimeRoundedType.ROUND_DOWN_TO],\n default: TimeRoundedType.ROUND_TO_NEAREST,\n enumDescriptions: [\n localize(\n 'timetracker.project.roundedType.ROUND_UP_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in report as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_TO_NEAREST',\n 'e.g. if you set theinterval to 30min, a 14min entry will up as 0min and 26min entry as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_DOWN_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in reports as 0min',\n ),\n ],\n description: localize('timetracker.project.roundedType', 'Select the time rounding type'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.report.timeRoundingInReports': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.report.timeRoundingInReports',\n 'Round time in reports up, down, or to nearest X minutes',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n // 'timetracker.project.favorites': {\n // type: 'boolean',\n // default: true,\n // description: localize(\n // 'timetracker.project.favorites',\n // 'Let people mark their most used projects as favorite so they appear at the top of their project list when tracking time.',\n // ),\n // scope: ConfigurationScope.RESOURCE,\n // },\n 'timetracker.project.groupingLabel': {\n type: 'string',\n default: GroupProjectsBy.CLIENT,\n enum: [GroupProjectsBy.CLIENT, GroupProjectsBy.CATEGORY, GroupProjectsBy.CUSTOM],\n description: localize(\n 'timetracker.project.groupingLabel',\n 'Group Project by clients or departments, you can change the lable to somethign else',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.pickerSpecialFilter': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.pickerSpecialFilter',\n 'Quickly find the right task in project picker by using the task@project syntax.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.screenshotsEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.timerecord.screenshotsEnabled',\n 'Generate screenshots every 5 minutes while the timer is running (desktop app only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskBillableEnabled': {\n type: 'boolean',\n default: false,\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskRateEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.taskRateEnabled',\n 'Have a different rate depending on the task on a project, plus choose whether tasks are billable by default.',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeApprovalEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.timeApprovalEnabled',\n 'Your team can submit their weekly timehseets for review, which you can approve or reject',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeTrackingMode': {\n type: 'string',\n default: 'DEFAULT',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.trackTimeDownToSecond': {\n type: 'boolean',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n default: true,\n scope: ConfigurationScope.WINDOW,\n },\n};\n","import { IConfigurationNode } from '@adminide-stack/core';\nimport { IConfigurationContributionNames } from '@admin-layout/timetracker-core';\nimport { TimeTrackerProperties } from './general-settings';\nimport { TrackerPaymentProperties } from './payment-settings';\n\nexport const TimeTrackerContribution: IConfigurationNode = {\n id: IConfigurationContributionNames.timeTracker,\n type: 'object',\n properties: { ...TimeTrackerProperties, ...TrackerPaymentProperties },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n\nconst enum PayPeriod {\n NONE = 'None',\n WEEKLY = 'Weekly',\n TWICE_PER_MONTH = 'Twice per month',\n BI_WEEKLY = 'Bi-weekly',\n MONTHLY = 'Monthly',\n}\n\nconst enum PayRate {\n HOURLY = 'Hourly',\n FIXED = 'Fixed',\n}\n\nconst enum ProcessPayment {\n MANUALLY = 'Manually',\n AUTOMATICALLY = 'Automatically',\n}\n\nexport const TrackerPaymentProperties: { [path: string]: IConfigurationPropertySchema } = {\n 'timetracker.user.payment.processPayments': {\n type: 'string',\n default: ProcessPayment.MANUALLY,\n enum: [ProcessPayment.MANUALLY, ProcessPayment.AUTOMATICALLY],\n enumDescriptions: [\n localize(\n 'timetracker.payment.processPayments.manually',\n 'When set manually, time need to be updated manually.',\n ),\n localize(\n 'timetracker.payment.processPayments.automatically',\n \"When set automatically, time is marked as 'paid' in our system and if you have payroll enabled, the payment will be send.\",\n ),\n ],\n description: localize(\n 'timetracker.payment.processPayments',\n 'Choose whether you want to manually send payments or have them automatically processed.',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n 'timetracker.user.payment.sendPaymentAfter': {\n type: 'number',\n default: 0,\n description: localize(\n 'timetracker.payment.sendPaymentAfter',\n 'Number of days after pay period ends, you would like to send payments for timesheets. ',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n\n 'timetracker.user.payment.payPeriod': {\n type: 'string',\n enum: [PayPeriod.NONE, PayPeriod.WEEKLY, PayPeriod.TWICE_PER_MONTH, PayPeriod.BI_WEEKLY, PayPeriod.MONTHLY],\n default: PayPeriod.NONE,\n description: localize('timetracker.payment.payPeriod', 'Pay Period'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payType': {\n type: 'string',\n enum: [PayRate.HOURLY, PayRate.FIXED],\n default: PayRate.HOURLY,\n description: localize('timetracker.payment.payType', 'Pay type'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.billRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.billRate', 'Billing Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.payRate', 'Paying Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.requireTimesheetApproval': {\n type: 'boolean',\n default: false,\n description: localize('timetracker.payment.requireTimesheetApproval', 'Whether it requires Timesheet Approval'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n // User limits\n 'timetracker.user.recurringWeeklyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringWeeklyLimit',\n 'Limits how much time can be tracked each week',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.recurringDailyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringDailyLimit',\n 'Limits how much time can be tracked each day',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n};\n","import { resolver as timerecordResolver } from './timerecord-resolver';\nimport { resolver as timesheetResolver } from './timesheet-resolver';\n\nexport const resolvers = [timerecordResolver, timesheetResolver];\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable no-underscore-dangle */\nimport * as _ from 'lodash';\nimport { withFilter } from 'graphql-subscriptions';\nimport { ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\n\nexport const resolver = (options) => ({\n TimeRecord: {\n id: (root) => root.id || root._id,\n },\n Query: {\n getTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getTimeRecords) args %j', args);\n return timeRecordService.getTimeRecords(userContext.orgId, args.userId);\n },\n getDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getDurationTimeRecords) args %j', args);\n return timeRecordService.getDurationTimeRecords(userContext.orgId, args.startTime, args.endTime, args.userId);\n },\n getPlayingTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getPlayingTimeRecord) args %j', args);\n return timeRecordService.getPlayingTimeRecord(user._id || user.sub, userContext.orgId);\n },\n },\n Mutation: {\n createTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.createTimeRecord(userId, userContext.orgId, args.request);\n },\n updateTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.updateTimeRecord(userId, userContext.orgId, args.recordId, args.request);\n },\n removeTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimeRecord) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeTimeRecord(userId, userContext.orgId, args.recordId);\n },\n removeDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeDurationTimeRecords) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeDurationTimeRecords(\n userId,\n userContext.orgId,\n args.startTime,\n args.endTime,\n args.projectId,\n );\n },\n },\n Subscription: {\n SubscribeToTimeTracker: {\n subscribe: withFilter(\n () =>\n options.pubsub.asyncIterator([\n ITimeRecordPubSubEvents.TimeRecordCreated,\n ITimeRecordPubSubEvents.TimeRecordUpdated,\n ITimeRecordPubSubEvents.TimeRecordDeleted,\n ]),\n async (payload, variables, context: {}) =>\n payload.SubscribeToTimeTracker.orgName === variables.orgName &&\n payload.SubscribeToTimeTracker.userId === variables.userId,\n ),\n },\n },\n});\n","/* eslint-disable no-underscore-dangle */\nexport const resolver = (options) => ({\n Query: {\n getTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getTimeSheets) args %j', args);\n if (!args.withTotalHours) return timesheetService.getTimesheets(userContext.orgId);\n return timesheetService.getTimesheetsWithTotalHours(userContext.orgId);\n },\n getDurationTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getDurationTimesheets) args %j', args);\n return timesheetService.getDurationTimesheets(userContext.orgId, args.start, args.end);\n },\n },\n\n Mutation: {\n createTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimesheet) args %j', args);\n return timesheetService.createTimesheet(user._id || user.sub, userContext.orgId, args.request);\n },\n updateTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheet) args %j', args);\n return timesheetService.updateTimesheet(user._id || user.sub, userContext.orgId, args.sheetId, args.request, {\n ...userContext,\n username: user.name,\n });\n },\n removeTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimesheet) args %j', args);\n return timesheetService.removeTimesheet(user._id || user.sub, userContext.orgId, args.sheetId);\n },\n updateTimesheetStatus: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheetStatus) args %j', args);\n return timesheetService.updateTimesheetStatus(userContext.orgId, args.sheetId, args.state);\n },\n },\n});\n","export default \"type Tag {\\n id: ID!\\n name: String\\n}\\n\\nenum StartYearWeekType {\\n FIRST_FOURDAY_WEEK\\n FIRST_FULL_WEEK\\n FIRST_DAY_WEEK\\n}\\n\\nextend type Query {\\n getTags: [Tag]\\n getSettings: Settings\\n}\\n\";","import timeRecordSchema from './timerecord-schema.graphql';\nimport timesheetSchema from './timesheet-schema.graphql';\nimport timeTrackerSchema from './timetracker-schema.graphql';\nimport commonSchema from './common-schema.graphql';\n\nconst schema = [timeRecordSchema, timesheetSchema, timeTrackerSchema, commonSchema].join('\\n');\n\nexport { schema };\n","export default \"type TimeRecord {\\n id: String\\n startTime: DateTime\\n endTime: DateTime\\n taskId: String\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n userId: String\\n orgId: String\\n timesheetId: String\\n editable: Boolean\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus]\\n}\\n\\ntype PauseStatus {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput PauseStatus_Input {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput TimeRecordRequest {\\n userId: String\\n startTime: DateTime\\n endTime: DateTime\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n timesheetId: String\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus_Input]\\n}\\n\\n\\\"\\\"\\\"\\n Subscription event for timer\\n\\\"\\\"\\\"\\nenum TimeRecordPubSubEvents {\\n TimeRecordCreated\\n TimeRecordUpdated\\n TimeRecordStopped\\n TimeRecordDeleted\\n TimeRecordConfigurationUpdate\\n}\\n\\ntype SubscriptionTimeRecord {\\n mutation: TimeRecordPubSubEvents\\n timeRecord: TimeRecord\\n}\\n\\nextend type Query {\\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\\n getPlayingTimeRecord: TimeRecord @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\\n}\\n\\nextend type Subscription {\\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\\n}\\n\";","export default \"# scalar DateTime\\nenum TimesheetState {\\n OPEN\\n APPROVED_PENDING\\n APPROVED\\n APPROVED_FINALIZED # --- which means no going back\\n DENYED\\n SUBMITTED\\n DENYED_FINALIZED # --- which means no going back\\n}\\n\\ntype Timesheet {\\n id: ID\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n timeRecordsId: [String]\\n}\\n\\ninput TimesheetCreateRequest {\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n timeRecordsId: [String]\\n}\\n\\ntype TimesheetResponse {\\n id: ID\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n userId: String\\n orgId: String\\n totalDuration: Int\\n}\\n\\nextend type Query {\\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\\n removeTimesheet(sheetId: String): Boolean @addAccountContext\\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\\n}\\n\";","export default \"type TimeTracker {\\n userId: String\\n orgId: String\\n timeRecords: [TimeRecord]\\n timesheets: [Timesheet]\\n}\\n\";","export * from './timesheet-service';\nexport * from './timerecord-service';\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable import/no-extraneous-dependencies */\nimport { CdmLogger } from '@cdm-logger/core';\nimport { inject, injectable } from 'inversify';\nimport { ITimeRecord, ITimeRecordRequest, ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\nimport { ServerTypes, IPreferencesService } from '@adminide-stack/core';\nimport { PubSubEngine } from 'graphql-subscriptions';\nimport { ServiceBroker } from 'moleculer';\nimport { CommonType } from '@common-stack/core';\nimport { ITimeRecordRepository } from '../interfaces';\nimport { TYPES } from '../constants';\nimport { ITimeRecordService } from '../interfaces/timerecord-service';\n\n@injectable()\nexport class TimeRecordService implements ITimeRecordService {\n private logger: CdmLogger.ILogger;\n\n constructor(\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('PubSub')\n private pubsub: PubSubEngine,\n\n @inject('Logger')\n logger: CdmLogger.ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimeRecords(orgId: string, userId: string): Promise<Array<ITimeRecord>> {\n return this.timeRecordRepository.getTimeRecords(orgId, userId);\n }\n\n public async getDurationTimeRecords(\n orgId: string,\n startTime: Date,\n endTime: Date,\n userId?: string,\n ): Promise<Array<ITimeRecord>> {\n const timeRecords = await this.timeRecordRepository.getTimeRecords(orgId, userId, startTime, endTime);\n return timeRecords.filter((r) => r.endTime !== null);\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n return this.timeRecordRepository.getPlayingTimeRecord(userId, orgId);\n }\n\n public async createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.createTimeRecord(userId, orgId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordCreated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordCreated, { SubscribeToTimeTracker: record });\n }\n return (data as any)._id;\n }\n\n public async updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.updateTimeRecord(userId, orgId, recordId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordUpdated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordUpdated, { SubscribeToTimeTracker: record });\n }\n return true;\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n const data = await this.timeRecordRepository.removeTimeRecord(userId, orgId, recordId);\n const record = {\n orgName: data.orgId,\n userId: data.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordDeleted,\n timeRecord: data?.timeRecords[0],\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordDeleted, { SubscribeToTimeTracker: record });\n return true;\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n return this.timeRecordRepository.removeDurationTimeRecords(userId, orgId, startTime, endTime, projectId);\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n this.timeRecordRepository.approveTimeRecords(orgId, sheetId, startDate, endDate);\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n this.timeRecordRepository.disapproveTimeRecords(orgId, sheetId);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport * as ILogger from 'bunyan';\nimport { inject, injectable, tagged } from 'inversify';\nimport { ITimesheetState, ITimesheetCreateRequest, ITimeRecord } from '@admin-layout/timetracker-core';\nimport {\n ConfigurationTarget,\n generateOrgUri,\n IConfigFragmentName,\n ServerTypes,\n IPreferencesService,\n} from '@adminide-stack/core';\nimport { IMailServiceAction, IMailerServicesendArgs, IMoleculerServiceName } from '@container-stack/mailing-api';\nimport * as moment from 'moment';\nimport { ServiceBroker, CallingOptions } from 'moleculer';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { TYPES, EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\nimport { ITimesheetService } from '../interfaces/timesheet-service';\nimport { ITimesheetRepository, ITimeRecordRepository } from '../interfaces';\n\n@injectable()\nexport class TimesheetService implements ITimesheetService {\n private logger: ILogger;\n\n constructor(\n @inject(TYPES.ITimesheetRepository)\n protected timesheetRepository: ITimesheetRepository,\n\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(TYPES.ITimeRecordService)\n protected timeRecordService: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n @inject('Logger')\n logger: ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimesheets(orgId: string, userId?: string) {\n return this.timesheetRepository.getTimesheets(orgId, userId);\n }\n\n public async getTimesheetsWithTotalHours(orgId: string, userId?: string) {\n const timesheets = await this.timesheetRepository.getTimesheets(orgId, userId);\n const timeRecords: (ITimeRecord & { _id?: Object })[] = await this.timeRecordRepository.getTimeRecords(orgId, userId);\n return timesheets.map((timesheet) => {\n const sheetTotalDuration = timeRecords\n .filter(\n (tr) =>\n timesheet.timeRecordsId?.includes(tr._id.toString()),\n )\n .reduce(\n (duration, tr) =>\n duration + Math.floor((moment(tr.endTime).valueOf() - moment(tr.startTime).valueOf()) / 1000),\n 0,\n );\n return {\n id: timesheet.id,\n startDate: timesheet.startDate,\n endDate: timesheet.endDate,\n state: timesheet.state,\n userId: timesheet.userId,\n orgId,\n approvedBy: timesheet.approvedBy,\n approvedOn: timesheet.approvedOn,\n submittedOn: timesheet.submittedOn,\n updatedBy: timesheet.updatedBy,\n updatedOn: timesheet.updatedOn,\n totalDuration: sheetTotalDuration,\n };\n });\n }\n\n public async getDurationTimesheets(orgId: string, start: Date, end: Date) {\n const timesheets = await this.timesheetRepository.getOrganizationTimesheets(orgId);\n return timesheets.filter(\n (sh) =>\n moment(start).format('YYYY-MM-DD') === moment(sh.startDate).format('YYYY-MM-DD') &&\n moment(end).format('YYYY-MM-DD') === moment(sh.endDate).format('YYYY-MM-DD'),\n );\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest) {\n return this.timesheetRepository.createTimesheet(userId, orgId, request);\n }\n\n public async updateTimesheet(\n userId: string,\n orgId: string,\n sheetId: string,\n request: ITimesheetCreateRequest,\n userContext?: any,\n ) {\n try {\n await this.timesheetRepository.updateTimesheet(orgId, sheetId, request);\n if (request.state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n this.timeRecordService.approveTimeRecords(orgId, sheetId, request.startDate, request.endDate);\n } else if (request.state === ITimesheetState.DENYED) {\n // approve time records from startDate to endDate\n this.timeRecordService.disapproveTimeRecords(orgId, sheetId);\n }\n const resourceUri = generateOrgUri(orgId, IConfigFragmentName.settings);\n const { settings } = (await this.preferencesService.viewerSettings({\n target: ConfigurationTarget.ORGANIZATION_RESOURCE,\n settingsResource: resourceUri,\n })) as any;\n if (\n request.state === ITimesheetState.APPROVED &&\n settings.timetracker.notifications.approvalNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet approved';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.TIMESHEET_APPROVAL;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n }\n if (\n request.state === ITimesheetState.SUBMITTED &&\n settings.timetracker.notifications.submitNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet submitted';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.SUBMIT_TIME;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n\n return true;\n }\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const timesheet = await this.timesheetRepository.updateTimesheetStatus(orgId, sheetId, state);\n console.log('updateTimesheetStatus.timesheet =>', timesheet);\n if (state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n console.log('APPROVED');\n }\n\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string) {\n return this.timesheetRepository.removeTimesheet(userId, orgId, sheetId);\n }\n\n private sendMail(topic, to, from, templateId, templateVars) {\n return this.callAction<void, IMailerServicesendArgs>(\n IMailServiceAction.send,\n {\n request: {\n topic,\n to,\n templateId,\n from,\n variables: templateVars,\n },\n },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","/* eslint-disable no-underscore-dangle */\nimport { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimeTracker, ITimeRecord, ITimesheet } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeRecordModel extends ITimeRecord, Document {\n id?: any;\n}\nexport interface ITimeSheetModel extends ITimesheet, Document {\n id?: any;\n}\nexport interface ITimeTrackerModel extends ITimeTracker, Document {\n id: any;\n timeRecords: ITimeRecordModel[];\n timesheets: ITimeSheetModel[];\n}\n\nenum TimesheetState {\n OPEN,\n APPROVED_PENDING,\n APPROVED,\n APPROVED_FINALIZED,\n DENYED,\n SUBMITTED,\n DENYED_FINALIZED,\n}\n\nconst TimeActivitySchema = new Schema({\n count: { type: Number },\n isPaused: { type: Boolean },\n isTimeout: { type: Boolean },\n startTime: { type: Number },\n endTime: { type: Number },\n});\n\nconst PauseStatusSchema = new Schema({\n pausedTime: { type: Date },\n restartTime: { type: Date },\n});\n\n// ===> TimeRecord\nconst TimeRecordSchema = new Schema({\n userId: { type: String, index: true },\n startTime: { type: Date },\n endTime: { type: Date, default: null },\n taskName: { type: String },\n description: { type: String },\n taskId: { type: String }, // ----> task\n tags: { type: [String] },\n isBillable: { type: Boolean },\n projectId: { type: String }, // ----> project\n timesheetId: { type: String }, // ----> timesheet\n activities: [TimeActivitySchema],\n isPause: { type: Boolean, default: false },\n isTimeout: { type: Boolean, default: false },\n pauseStatus: { type: [PauseStatusSchema] }\n});\n\nTimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 } as any);\n\n// ===> Timesheet\nconst TimesheetSchema = new Schema({\n userId: { type: String, index: true },\n startDate: { type: Date },\n endDate: { type: Date },\n state: { type: TimesheetState },\n submittedOn: { type: Date },\n approvedOn: { type: Date },\n approvedBy: { type: String },\n updatedBy: { type: String },\n updatedOn: { type: Date },\n timeRecordsId: { type: [String] },\n});\n\nconst TimeTrackerSchema = new Schema({\n orgId: { type: String, index: true },\n timeRecords: [TimeRecordSchema],\n timesheets: [TimesheetSchema],\n});\n\nTimeRecordSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeRecordSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeTrackerSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.set('toObject', { virtuals: true });\n\nexport type TimeTrackerModelType = Model<ITimeTrackerModel>;\n\nexport const TimeTrackerModelFunc: (db: Connection) => TimeTrackerModelType = (db) =>\n db.model<ITimeTrackerModel>('timetracker', TimeTrackerSchema);\n","export * from './timerecord-repository';\nexport * from './timesheet-repository';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\nimport * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport * as moment from 'moment';\nimport { ITimeRecordRequest, ITimeRecord, ITimeTracker } from '@admin-layout/timetracker-core';\nimport * as _ from 'lodash';\nimport {\n TimeTrackerModelType,\n TimeTrackerModelFunc,\n ITimeRecordModel,\n ITimeTrackerModel,\n} from '../models/timetracker-model';\nimport { ITimeRecordRepository } from '../../interfaces';\n\n@injectable()\nexport class TimeRecordRepository implements ITimeRecordRepository {\n private timeTrackerModel: TimeTrackerModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n\n @inject('Logger')\n logger: Logger,\n ) {\n this.logger = logger.child({ className: 'TimeRecordRepository' });\n this.timeTrackerModel = TimeTrackerModelFunc(db);\n }\n\n public async getTimeRecords(orgId: string, userId?: string | RegExp, from?: Date, until?: Date): Promise<any> {\n if (!userId) {\n userId = /.*/;\n }\n let match: any = {\n 'timeRecords.userId': userId,\n };\n if (from) {\n match = { ...match, 'timeRecords.startTime': { $gte: from } };\n }\n if (until) {\n match = { ...match, 'timeRecords.endTime': { $lte: until } };\n }\n\n const result = await this.timeTrackerModel.aggregate([\n {\n $match: {\n orgId,\n },\n },\n {\n $unwind: '$timeRecords',\n },\n {\n $match: {\n ...match,\n },\n },\n {\n $group: {\n _id: '$orgId',\n timeRecords: {\n $push: '$timeRecords',\n },\n },\n },\n {\n $project: {\n orgId: 1,\n timeRecords: 1,\n },\n },\n ]);\n if (result.length === 0) {\n return [];\n }\n return result[0].timeRecords;\n }\n\n public async getOrganizationTimeRecords(orgId: string): Promise<ITimeRecordModel[]> {\n const trackDoc = await this.timeTrackerModel.findOne({ orgId });\n if (trackDoc && trackDoc.timeRecords) {\n return trackDoc.timeRecords;\n }\n return [];\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n const trackDoc = await this.timeTrackerModel.findOne({ orgId });\n if (trackDoc) {\n let res;\n if (trackDoc.timeRecords) res = trackDoc.timeRecords.find((tr) => tr.userId === userId && tr.endTime === null);\n return res;\n }\n return null;\n }\n\n public async createTimeRecord(\n userId: string,\n orgId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeTracker>> {\n try {\n const response = await this.timeTrackerModel.findOneAndUpdate(\n { orgId },\n { orgId, $push: { timeRecords: request } },\n {\n upsert: true,\n new: true,\n projection: { userId, orgId, timeRecords: { $elemMatch: { startTime: request.startTime } } },\n },\n );\n return response.toObject() as ITimeTrackerModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimeRecord(\n userId: string,\n orgId: string,\n recordId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeTrackerModel>> {\n try {\n if (recordId === null || recordId === undefined) throw new Error('TimeRecord id not specified!');\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timeRecords.$.${key}`]: value,\n };\n });\n const response = await this.timeTrackerModel.findOneAndUpdate(\n { orgId, timeRecords: { $elemMatch: { _id: recordId } } },\n {\n $set: {\n ...setRequest,\n },\n },\n {\n new: true,\n projection: {\n userId,\n orgId,\n timeRecords: { $elemMatch: { _id: recordId } },\n },\n },\n );\n return response.toObject() as ITimeTrackerModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n try {\n const result = await this.timeTrackerModel.update(\n {\n orgId,\n },\n {\n $pull: { timeRecords: { _id: recordId } },\n },\n );\n if (result.nModified !== 1) {\n throw new Error('TimeRecord is not modified');\n }\n return { userId, orgId, timeRecords: [{ _id: recordId } as any] as ITimeRecord[] };\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n try {\n const trackerDoc = await this.timeTrackerModel.find({ orgId });\n if (trackerDoc && trackerDoc.length > 0) {\n const timeRecords = trackerDoc[0].timeRecords.filter(\n (tr) => tr.startTime < startTime || tr.startTime > endTime || tr.projectId !== projectId,\n );\n await this.timeTrackerModel.update(\n {\n orgId,\n },\n {\n timeRecords,\n },\n );\n return true;\n }\n return false;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n try {\n await this.timeTrackerModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': sheetId } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.startTime': { $gte: startDate },\n 'el.endTime': { $lte: endDate },\n 'el.timesheetId': null,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('approveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n try {\n await this.timeTrackerModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': null } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.timesheetId': sheetId,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('disapproveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable class-methods-use-this */\nimport * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport { ITimesheetCreateRequest, ITimesheetState } from '@admin-layout/timetracker-core';\nimport * as _ from 'lodash';\nimport { CommonType } from '@common-stack/core';\nimport { ServiceBroker } from 'moleculer';\nimport { TimeTrackerModelType, TimeTrackerModelFunc, ITimeSheetModel } from '../models/timetracker-model';\nimport { ITimesheetRepository } from '../../interfaces';\n\n@injectable()\nexport class TimesheetRepository implements ITimesheetRepository {\n private timeTrackerModel: TimeTrackerModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n\n @inject('Logger')\n logger: Logger,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n ) {\n this.logger = logger.child({ className: 'TimesheetRepository' });\n this.timeTrackerModel = TimeTrackerModelFunc(db);\n }\n\n public async getOrganizationTimesheets(orgId: string): Promise<ITimeSheetModel[]> {\n const trackDoc = await this.timeTrackerModel.findOne({ orgId });\n if (trackDoc && trackDoc.timesheets) {\n return trackDoc.timesheets;\n }\n return [];\n }\n\n public async getTimesheets(orgId: string, userId?: string): Promise<ITimeSheetModel[]> {\n const timesheets = await this.getOrganizationTimesheets(orgId);\n return timesheets.filter((sheet) => !userId || sheet.userId === userId);\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest): Promise<boolean> {\n try {\n const response = await this.timeTrackerModel.update(\n { orgId },\n { $push: { timesheets: request } },\n { upsert: true },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheet(orgId: string, sheetId: string, request: ITimesheetCreateRequest) {\n try {\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timesheets.$.${key}`]: value,\n };\n });\n const response = await this.timeTrackerModel.update(\n { orgId, timesheets: { $elemMatch: { _id: sheetId } } },\n { $set: { ...setRequest } },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const response = await this.timeTrackerModel.update(\n {\n orgId,\n $elemMatch: { 'timesheets.id': sheetId },\n },\n {\n $set: {\n 'timesheets.$.status': state,\n },\n },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string): Promise<boolean> {\n try {\n await this.timeTrackerModel.update(\n {\n orgId,\n },\n {\n $pull: { timesheets: { _id: sheetId } },\n },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n}\n","module.exports = require(\"@adminide-stack/core\");","module.exports = require(\"@common-stack/core\");","module.exports = require(\"@common-stack/server-core\");","module.exports = require(\"@vscode-alt/monaco-editor/esm/vs/nls\");","module.exports = require(\"@workbench-stack/core\");","module.exports = require(\"envalid\");","module.exports = require(\"graphql-subscriptions\");","module.exports = require(\"inversify\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"mongoose\");"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/config/config.ts","webpack:///./src/config/index.ts","webpack:///./src/constants/constants.ts","webpack:///./src/constants/index.ts","webpack:///./src/containers/containers.ts","webpack:///./src/containers/index.ts","webpack:///./src/index.ts","webpack:///./src/initialization/index.ts","webpack:///./src/initialization/service-initialization.ts","webpack:///./src/migration/approval_notification.ejs","webpack:///./src/migration/index.ts","webpack:///./src/migration/mail-template.ts","webpack:///./src/migration/submit_notification.ejs","webpack:///./src/module.ts","webpack:///./src/preferences/index.ts","webpack:///./src/preferences/permissions/index.ts","webpack:///./src/preferences/permissions/timing-permissions-contribution.ts","webpack:///./src/preferences/permissions/timing-roles-permission-overwrite.ts","webpack:///./src/preferences/settings/general-settings.ts","webpack:///./src/preferences/settings/index.ts","webpack:///./src/preferences/settings/payment-settings.ts","webpack:///./src/resolvers/index.ts","webpack:///./src/resolvers/timerecord-resolver.ts","webpack:///./src/resolvers/timesheet-resolver.ts","webpack:///./src/schema/common-schema.graphql","webpack:///./src/schema/index.ts","webpack:///./src/schema/timerecord-schema.graphql","webpack:///./src/schema/timesheet-schema.graphql","webpack:///./src/schema/timetracker-schema.graphql","webpack:///./src/services/index.ts","webpack:///./src/services/timerecord-service.ts","webpack:///./src/services/timesheet-service.ts","webpack:///./src/store/models/timerecords-model.ts","webpack:///./src/store/models/timesheets-model.ts","webpack:///./src/store/models/timetracker-model.ts","webpack:///./src/store/repository/index.ts","webpack:///./src/store/repository/timerecord-repository.ts","webpack:///./src/store/repository/timesheet-repository.ts","webpack:///external \"@adminide-stack/core\"","webpack:///external \"@common-stack/core\"","webpack:///external \"@common-stack/server-core\"","webpack:///external \"@vscode-alt/monaco-editor/esm/vs/nls\"","webpack:///external \"@workbench-stack/core\"","webpack:///external \"envalid\"","webpack:///external \"graphql-subscriptions\"","webpack:///external \"inversify\"","webpack:///external \"lodash\"","webpack:///external \"moment\"","webpack:///external \"mongoose\""],"names":[],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;;;AClFA,sDAAsD;AACtD,8DAAmC;AAEnC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AAEhB,cAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;IAClD,uBAAuB,EAAE,GAAG,EAAE;IAC9B,UAAU,EAAE,GAAG,EAAE;CAClB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACRH,qFAAyB;;;;;;;;;;;;;;;;ACAZ,oBAAY,GAAG,KAAK,CAAC;AACrB,mBAAW,GAAG,KAAK,CAAC;AACpB,aAAK,GAAG;IACnB,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,CAAC;IAClD,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC;IAChD,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,CAAC;IAC9C,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC;IACxD,qBAAqB,EAAE,MAAM,CAAC,uBAAuB,CAAC;IACtD,oBAAoB,EAAE,MAAM,CAAC,sBAAsB,CAAC;IACpD,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;CACrC,CAAC;AAEW,0BAAkB,GAAG;IAChC,kBAAkB,EAAE,mCAAmC;IACvD,kBAAkB,EAAE,mCAAmC;IACvD,WAAW,EAAE,4BAA4B;IACzC,iBAAiB,EAAE,4BAA4B;CAChD,CAAC;AAEF,IAAY,4BAcX;AAdD,WAAY,4BAA4B;IACtC,SAAS;IACT,8FAA8D;IAC9D,kGAAkE;IAClE,8FAA8D;IAC9D,kGAAkE;IAClE,kGAAkE;IAElE,OAAO;IACP,0FAA0D;IAC1D,8FAA8D;IAC9D,0FAA0D;IAC1D,8FAA8D;IAC9D,8FAA8D;AAChE,CAAC,EAdW,4BAA4B,GAA5B,oCAA4B,KAA5B,oCAA4B,QAcvC;;;;;;;;;;;;;;;;;;;;;;;;;AClCD,8FAA4B;;;;;;;;;;;;;;;;ACA5B,sEAAwD;AACxD,wFAAqC;AACrC,qFAAkE;AAClE,uGAAgF;AAChF,wFAA0F;AAE7E,yBAAiB,GAAuC,CAAC,OAAO,EAAE,EAAE,CAC/E,IAAI,2BAAe,CAAC,CAAC,IAAqB,EAAE,EAAE;IAC5C,IAAI,CAAC,iBAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,iCAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC,mBAAmB,EAAE,CAAC;IACpG,IAAI,CAAC,iBAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,gCAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAClG,IAAI,CAAC,iBAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,4BAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAC9F,IAAI,CAAC,iBAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,2BAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAE5F,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,yCAA6B,CAAC,CAAC,eAAe,CAAC,yCAA6B,CAAC,IAAI,CAAC,CAAC;IAC/G,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,uCAA2B,CAAC,CAAC,eAAe,CAAC,uCAA2B,CAAC,IAAI,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACfL,iGAA6B;;;;;;;;;;;;;;;;;;;;;;;;;ACA7B,wGAAoD;AACpD,wEAAmC;AAEnC,0FAA4B;AAC5B,wGAAmC;AACnC,8HAAiD;AAEjD,kBAAe,IAAI,qBAAO,CAAC,gBAAW,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACPxC,6HAAyC;;;;;;;;;;;;;;;;ACGzC,yFAAsE;AACtE,mFAAgD;AAEhD,8FAAyD;AAE5C,gCAAwB,GAAG,KAAK,EAAE,CAAC,EAAE,SAA+B,EAAE,EAAE;IACnF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAU,iBAAU,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAY,YAAW,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,qBAAqB,GAAG,QAAQ,CAAC,EAAE,qCAA0D,CAAC;IACpG,qBAAqB,CAAC,qBAAqB,CAAC,qCAAuB,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;AAC7E,CAAC,CAAC;;;;;;;;;;;;;AChBF;AAAe,gjBAAif,E;;;;;;;;;;;;;;;;;;;;;;;;ACAhgB,sGAA+B;;;;;;;;;;;;;;;;;;;;;;;;;ACE/B,sEAAuD;AAGvD,mFAA4D;AAE5D,wFAAkD;AAClD,+EAAmC;AAEnC,MAAM,oBAAoB,GAAG,mBAAO,CAAC,8EAA6B,CAAC,CAAC;AACpE,MAAM,kBAAkB,GAAG,mBAAO,CAAC,0EAA2B,CAAC,CAAC;AAGhE,IAAa,6BAA6B,GAA1C,MAAa,6BAA6B;IACtC,YAEc,MAAqB,EAGvB,QAAa;QAHX,WAAM,GAAN,MAAM,CAAe;QAGvB,aAAQ,GAAR,QAAQ,CAAK;IACrB,CAAC;IAEL,IAAI,EAAE;QACF,OAAO,6BAA6B,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,EAAE;QACX,MAAM,WAAW,GAAG;YAChB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,8BAAkB,CAAC,kBAAkB;YAC3C,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,oBAAoB,CAAC,OAAO;YAClC,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,iCAAiC;YACvC,KAAK,EAAE,qBAAqB;SAC/B,CAAC;QAEF,IAAI,eAAM,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;SACpD;QAED,OAAO,IAAI,CAAC,UAAU,oCAElB,EAAE,OAAO,EAAE,WAAW,EAAE,kCAE3B,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,UAAU,CAAa,OAAe,EAAE,MAAU,EAAE,KAAc,EAAE,IAAqB;QACnG,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,GAAG,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1G,CAAC;CACJ;AAtCY,6BAA6B;IADzC,sBAAU,EAAE;IAGJ,6BAAM,CAAC,iBAAU,CAAC,gBAAgB,CAAC;IAEnC,6BAAM,CAAC,UAAU,CAAC;IAClB,6BAAM,CAAC,iBAAU,CAAC,YAAY,EAAE,IAAI,CAAC;GALjC,6BAA6B,CAsCzC;AAtCY,sEAA6B;AAyC1C,IAAa,2BAA2B,GAAxC,MAAa,2BAA2B;IACpC,YAEc,MAAqB,EAGvB,QAAa;QAHX,WAAM,GAAN,MAAM,CAAe;QAGvB,aAAQ,GAAR,QAAQ,CAAK;IACrB,CAAC;IAEL,IAAI,EAAE;QACF,OAAO,sCAAsC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,EAAE;QACX,MAAM,WAAW,GAAG;YAChB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,8BAAkB,CAAC,WAAW;YACpC,WAAW,EAAE,qBAAqB;YAClC,IAAI,EAAE,kBAAkB,CAAC,OAAO;YAChC,IAAI,EAAE,qBAAqB;YAC3B,IAAI,EAAE,+BAA+B;YACrC,KAAK,EAAE,sBAAsB;SAChC,CAAC;QACF,IAAI,eAAM,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;SACpD;QAED,OAAO,IAAI,CAAC,UAAU,oCAElB,EAAE,OAAO,EAAE,WAAW,EAAE,kCAE3B,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,UAAU,CAAa,OAAe,EAAE,MAAU,EAAE,KAAc,EAAE,IAAqB;QACnG,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,GAAG,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1G,CAAC;CACJ;AArCY,2BAA2B;IADvC,sBAAU,EAAE;IAGJ,6BAAM,CAAC,iBAAU,CAAC,gBAAgB,CAAC;IAEnC,6BAAM,CAAC,UAAU,CAAC;IAClB,6BAAM,CAAC,iBAAU,CAAC,YAAY,EAAE,IAAI,CAAC;GALjC,2BAA2B,CAqCvC;AArCY,kEAA2B;;;;;;;;;;;;;ACvDxC;AAAe,kjBAAmf,E;;;;;;;;;;;;;;ACAlgB,wGAAoD;AAEpD,8EAAkC;AAClC,0FAAiD;AACjD,uFAAwC;AACxC,uFAAoC;AACpC,sGAA4D;AAC5D,6FAAkG;AAElG,MAAM,iBAAiB,GAAG,CAAC,SAA+B,EAAE,EAAE,CAAC,CAAC;IAC9D,iBAAiB,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAK,CAAC,kBAAkB,CAAC;IAC1D,gBAAgB,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAK,CAAC,iBAAiB,CAAC;CACzD,CAAC,CAAC;AAEH,kBAAe,IAAI,qBAAO,CAAC;IACzB,MAAM,EAAN,eAAM;IACN,mBAAmB,EAAE,qBAAS;IAC9B,mBAAmB,EAAE,CAAC,8BAAiB,CAAC;IACxC,iBAAiB;IACjB,YAAY,EAAE,CAAC,yCAAwB,CAAC;IACxC,cAAc,EAAE;QACd,iBAAiB,EAAE,CAAC,0CAA4B,CAAC;KAClD;IACD,WAAW,EAAE;QACX,yBAAyB,EAAE,iDAAmC;KAC/D;CACF,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;AC1BH,oGAA2B;AAC3B,0GAA8B;;;;;;;;;;;;;;;;;;;;;;;;;ACD9B,wJAAkD;AAClD,4JAAoD;;;;;;;;;;;;;;;;ACApD,oHAA4D;AAE5D,2FAA+D;AAE/D,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,+DAAqE;IAC3E,OAAO,uBAAwB;IAC/B,KAAK,gBAA2B;CACnC,CAAC;AACW,oCAA4B,GAA+B;IACpE,SAAS;IACT,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,kBAChD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,mBAAqB,EAAE,EAChF,2EAA2E,CAC9E;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,iBAAoB,EAAE,EAC/E,0EAA0E,CAC7E;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,qBAAqB,EAClD,6DAA6D,CAChE,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,kBAClD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,uBAAuB,IAAI,mBAAqB,EAAE,EAClF,6EAA6E,CAChF;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,uBAAuB,IAAI,iBAAoB,EAAE,EACjF,4EAA4E,CAC/E;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,uBAAuB,EACpD,8DAA8D,CACjE,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,kBAChD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,mBAAqB,EAAE,EAChF,2EAA2E,CAC9E;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,iBAAoB,EAAE,EAC/E,0EAA0E,CAC7E;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,qBAAqB,EAClD,6DAA6D,CAChE,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,kBAClD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,uBAAuB,IAAI,mBAAqB,EAAE,EAClF,6EAA6E,CAChF;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,uBAAuB,IAAI,iBAAoB,EAAE,EACjF,4EAA4E,CAC/E;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,uBAAuB,EACpD,6DAA6D,CAChE,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,kBAClD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,uBAAuB,IAAI,mBAAqB,EAAE,EAClF,qEAAqE,CACxE;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,uBAAuB,IAAI,iBAAoB,EAAE,EACjF,oEAAoE,CACvE;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,uBAAuB,EACpD,qDAAqD,CACxD,IACE,WAAW,CACjB;IACD,OAAO;IACP,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,kBAC9C,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,mBAAmB,IAAI,mBAAqB,EAAE,EAC9E,kEAAkE,CACrE;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,mBAAmB,IAAI,iBAAoB,EAAE,EAC7E,iEAAiE,CACpE;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,mBAAmB,EAChD,0DAA0D,CAC7D,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,kBAChD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,mBAAqB,EAAE,EAChF,oEAAoE,CACvE;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,iBAAoB,EAAE,EAC/E,mEAAmE,CACtE;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,qBAAqB,EAClD,qDAAqD,CACxD,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,kBAC9C,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,mBAAmB,IAAI,mBAAqB,EAAE,EAC9E,kEAAkE,CACrE;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,mBAAmB,IAAI,iBAAoB,EAAE,EAC7E,iEAAiE,CACpE;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,mBAAmB,EAChD,qDAAqD,CACxD,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,kBAChD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,mBAAqB,EAAE,EAChF,oEAAoE,CACvE;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,iBAAoB,EAAE,EAC/E,mEAAmE,CACtE;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,qBAAqB,EAClD,qDAAqD,CACxD,IACE,WAAW,CACjB;IACD,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,kBAChD,gBAAgB,EAAE;YACd,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,mBAAqB,EAAE,EAChF,4DAA4D,CAC/D;YACD,GAAG,CAAC,QAAQ,CACR,GAAG,wCAA4B,CAAC,qBAAqB,IAAI,iBAAoB,EAAE,EAC/E,2DAA2D,CAC9D;SACJ,EACD,WAAW,EAAE,GAAG,CAAC,QAAQ,CACrB,wCAA4B,CAAC,qBAAqB,EAClD,4CAA4C,CAC/C,IACE,WAAW,CACjB;CACJ,CAAC;;;;;;;;;;;;;;;;ACvLF,2FAA+D;AAElD,2CAAmC,GAAG;IAC/C,qBAAyB,EAAE;QACvB,OAAO;QACP,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAE3E,SAAS;QACT,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;KAChF;IACD,qBAAyB,EAAE;QACvB,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAE1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;KAChF;IACD,mDAAwC,EAAE;QACtC,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAE3E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;KAChF;IACD,qCAAiC,EAAE;QAC/B,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAE1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;QAC7E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,qBAAuB;KAChF;IACD,uBAA0B,EAAE;QACxB,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAE1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;KAC/E;IACD,uCAAkC,EAAE;QAChC,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAE1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;KAC/E;IACD,mBAAwB,EAAE;QACtB,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,qBAAuB;QAC3E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,qBAAuB;QACzE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAE1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;KAC/E;IACD,qBAAyB,EAAE;QACvB,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,mBAAsB;QACxE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,mBAAmB,CAAC,mBAAsB;QACxE,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAE1E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,mBAAsB;QAC1E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;QAC5E,CAAC,wCAA4B,CAAC,uBAAuB,CAAC,mBAAsB;KAC/E;CACJ,CAAC;;;;;;;;;;;;;;;;AC7GF,sHAAgE;AAChE,4DAA4D;AAC5D,UAAU;AACV,sBAAsB;AAEtB,MAAM;AACN,IAAW,UAOV;AAPD,WAAW,UAAU;IACjB,wCAA0B;IAC1B,sCAAwB;IACxB,gDAAkC;IAClC,8CAAgC;IAChC,6CAA+B;IAC/B,2CAA6B;AACjC,CAAC,EAPU,UAAU,KAAV,UAAU,QAOpB;AAED,IAAW,eAIV;AAJD,WAAW,eAAe;IACtB,oCAAiB;IACjB,wCAAqB;IACrB,oCAAiB;AACrB,CAAC,EAJU,eAAe,KAAf,eAAe,QAIzB;AACD,IAAW,UAIV;AAJD,WAAW,UAAU;IACjB,qCAAuB;IACvB,qCAAuB;IACvB,sCAAwB;AAC5B,CAAC,EAJU,UAAU,KAAV,UAAU,QAIpB;AAED,IAAkB,OAQjB;AARD,WAAkB,OAAO;IACrB,yBAAc;IACd,yBAAc;IACd,0BAAe;IACf,4BAAiB;IACjB,2BAAgB;IAChB,yBAAc;IACd,2BAAgB;AACpB,CAAC,EARiB,OAAO,GAAP,eAAO,KAAP,eAAO,QAQxB;AAED,IAAW,kBAIV;AAJD,WAAW,kBAAkB;IACzB,yEAAmD;IACnD,8EAAwD;IACxD,oEAA8C;AAClD,CAAC,EAJU,kBAAkB,KAAlB,kBAAkB,QAI5B;AAED,IAAW,qBAUV;AAVD,WAAW,qBAAqB;IAC5B,qFAAuB;IACvB,kFAAqB;IACrB,mFAAqB;IACrB,mFAAqB;IACrB,qFAAuB;IACvB,qFAAuB;IACvB,sFAAuB;IACvB,8EAAuB;IACvB,+EAAuB;AAC3B,CAAC,EAVU,qBAAqB,KAArB,qBAAqB,QAU/B;AAED,IAAW,eAIV;AAJD,WAAW,eAAe;IACtB,8CAA2B;IAC3B,wDAAqC;IACrC,kDAA+B;AACnC,CAAC,EAJU,eAAe,KAAf,eAAe,QAIzB;AACY,6BAAqB,GAAqD;IACnF,gBAAgB;IAChB,0DAA0D,EAAE;QACxD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,oDAAoD,EACpD,qCAAqC,CACxC;QACD,KAAK,gBAA2B;KACnC;IAED,qDAAqD,EAAE;QACnD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,oDAAoD,EACpD,2FAA2F,CAC9F;QACD,KAAK,gBAA2B;KACnC;IACD,iDAAiD,EAAE;QAC/C,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,iDAAiD,EACjD,2DAA2D,CAC9D;QACD,KAAK,gBAA2B;KACnC;IACD,+CAA+C,EAAE;QAC7C,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,+CAA+C,EAC/C,oFAAoF,CACvF;QACD,KAAK,gBAA2B;KACnC;IAED,gBAAgB;IAChB,+BAA+B,EAAE;QAC7B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,cAAQ,CACjB,+BAA+B,EAC/B,+DAA+D,CAClE;QACD,KAAK,gBAA2B;KACnC;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,cAAQ,CACjB,kCAAkC,EAClC,sHAAsH,CACzH;QACD,KAAK,gBAA2B;KACnC;IACD,oCAAoC,EAAE;QAClC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,cAAQ,CACjB,oCAAoC,EACpC,gHAAgH,CACnH;QACD,KAAK,gBAA2B;KACnC;IACD,sCAAsC,EAAE;QACpC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,iCAAiC,EACjC,wFAAwF,CAC3F;QACD,KAAK,kBAA6B;KACrC;IACD,8BAA8B,EAAE;QAC5B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,8BAA8B,EAC9B,iGAAiG,CACpG;QACD,KAAK,gBAA2B;KACnC;IACD,uCAAuC,EAAE;QACrC,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,0GAAiE;QAC1E,IAAI,EAAE,oJAA2F;QACjG,WAAW,EAAE,cAAQ,CAAC,yCAAyC,EAAE,oBAAoB,CAAC;QACtF,KAAK,kBAA6B;KACrC;IACD,uCAAuC,EAAE;QACrC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,oJAA2F;QACjG,OAAO,oBAAa;QACpB,WAAW,EAAE,cAAQ,CAAC,uCAAuC,EAAE,uBAAuB,CAAC;QACvF,KAAK,kBAA6B;KACrC;IACD,wCAAwC,EAAE;QACtC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,2KAAkG;QACxG,OAAO,oDAAgC;QACvC,gBAAgB,EAAE;YACd,cAAQ,CACJ,oDAAoD,EACpD,4GAA4G,CAC/G;YACD,cAAQ,CACJ,wDAAwD,EACxD,qGAAqG,CACxG;YACD,cAAQ,CACJ,kDAAkD,EAClD,2GAA2G,CAC9G;SACJ;QACD,WAAW,EAAE,cAAQ,CACjB,wCAAwC,EACxC,qJAAqJ,CACxJ;QACD,KAAK,kBAA6B;KACrC;IACD,gCAAgC,EAAE;QAC9B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;;;;;;;SAOL;QACD,OAAO,wCAAgC;QACvC,gBAAgB,EAAE;YACd,cAAQ,CAAC,gDAAgD,EAAE,iCAAiC,CAAC;YAC7F,cAAQ,CAAC,gDAAgD,EAAE,2BAA2B,CAAC;YACvF,cAAQ,CACJ,oDAAoD,EACpD,4CAA4C,CAC/C;YACD,cAAQ,CAAC,oDAAoD,EAAE,sCAAsC,CAAC;YACtG,cAAQ,CAAC,oDAAoD,EAAE,4BAA4B,CAAC;YAC5F,cAAQ,CAAC,oDAAoD,EAAE,sBAAsB,CAAC;SACzF;QACD,WAAW,EAAE,cAAQ,CACjB,gCAAgC,EAChC,4DAA4D,CAC/D;QACD,KAAK,kBAA6B;KACrC;IACD,gCAAgC,EAAE;QAC9B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,wFAAgE;QACtE,OAAO,6BAAqB;QAC5B,gBAAgB,EAAE;YACd,cAAQ,CAAC,yCAAyC,EAAE,4BAA4B,CAAC;YACjF,cAAQ,CAAC,yCAAyC,EAAE,4BAA4B,CAAC;YACjF,cAAQ,CAAC,0CAA0C,EAAE,2BAA2B,CAAC;SACpF;QACD,WAAW,EAAE,cAAQ,CACjB,gCAAgC,EAChC,4DAA4D,CAC/D;QACD,KAAK,kBAA6B;KACrC;IACD,sCAAsC,EAAE;QACpC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE;;;;;;;;;;SAUL;QACD,OAAO,yBAAqC;QAC5C,gBAAgB,EAAE;YACd,cAAQ,CAAC,oCAAoC,EAAE,UAAU,CAAC;YAC1D,cAAQ,CAAC,oCAAoC,EAAE,WAAW,CAAC;YAC3D,cAAQ,CAAC,oCAAoC,EAAE,WAAW,CAAC;YAC3D,cAAQ,CAAC,qCAAqC,EAAE,YAAY,CAAC;YAC7D,cAAQ,CAAC,qCAAqC,EAAE,YAAY,CAAC;YAC7D,cAAQ,CAAC,qCAAqC,EAAE,YAAY,CAAC;YAC7D,cAAQ,CAAC,qCAAqC,EAAE,YAAY,CAAC;YAC7D,cAAQ,CAAC,iCAAiC,EAAE,QAAQ,CAAC;YACrD,cAAQ,CAAC,iCAAiC,EAAE,SAAS,CAAC;SACzD;QACD,WAAW,EAAE,cAAQ,CAAC,sCAAsC,EAAE,uCAAuC,CAAC;QACtG,KAAK,kBAA6B;KACrC;IACD,iCAAiC,EAAE;QAC/B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,iHAA8F;QACpG,OAAO,2CAAkC;QACzC,gBAAgB,EAAE;YACd,cAAQ,CACJ,6CAA6C,EAC7C,sFAAsF,CACzF;YACD,cAAQ,CACJ,kDAAkD,EAClD,8FAA8F,CACjG;YACD,cAAQ,CACJ,+CAA+C,EAC/C,sFAAsF,CACzF;SACJ;QACD,WAAW,EAAE,cAAQ,CAAC,iCAAiC,EAAE,+BAA+B,CAAC;QACzF,KAAK,kBAA6B;KACrC;IACD,0CAA0C,EAAE;QACxC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CACjB,0CAA0C,EAC1C,yDAAyD,CAC5D;QACD,KAAK,gBAA2B;KACnC;IACD,qCAAqC;IACrC,qBAAqB;IACrB,mBAAmB;IACnB,2BAA2B;IAC3B,uCAAuC;IACvC,kIAAkI;IAClI,OAAO;IACP,wCAAwC;IACxC,KAAK;IACL,mCAAmC,EAAE;QACjC,IAAI,EAAE,QAAQ;QACd,OAAO,uBAAwB;QAC/B,IAAI,EAAE,yEAA0E;QAChF,WAAW,EAAE,cAAQ,CACjB,mCAAmC,EACnC,qFAAqF,CACxF;QACD,KAAK,kBAA6B;KACrC;IACD,yCAAyC,EAAE;QACvC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CACjB,yCAAyC,EACzC,iFAAiF,CACpF;QACD,KAAK,gBAA2B;KACnC;IACD,2CAA2C,EAAE;QACzC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CACjB,2CAA2C,EAC3C,oFAAoF,CACvF;QACD,KAAK,gBAA2B;KACnC;IACD,yCAAyC,EAAE;QACvC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CAAC,iCAAiC,EAAE,kCAAkC,CAAC;QAC5F,KAAK,gBAA2B;KACnC;IACD,qCAAqC,EAAE;QACnC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CACjB,qCAAqC,EACrC,8GAA8G,CACjH;QACD,KAAK,kBAA6B;KACrC;IACD,yCAAyC,EAAE;QACvC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CACjB,yCAAyC,EACzC,0FAA0F,CAC7F;QACD,KAAK,kBAA6B;KACrC;IACD,sCAAsC,EAAE;QACpC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,cAAQ,CAAC,iCAAiC,EAAE,kCAAkC,CAAC;QAC5F,KAAK,kBAA6B;KACrC;IACD,2CAA2C,EAAE;QACzC,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,cAAQ,CAAC,iCAAiC,EAAE,kCAAkC,CAAC;QAC5F,OAAO,EAAE,IAAI;QACb,KAAK,gBAA2B;KACnC;CACJ,CAAC;;;;;;;;;;;;;;;;ACpWF,2HAA2D;AAC3D,2HAA8D;AAEjD,+BAAuB,GAAuB;IACvD,EAAE,iCAA6C;IAC/C,IAAI,EAAE,QAAQ;IACd,UAAU,kCAAO,wCAAqB,GAAK,2CAAwB,CAAE;CACxE,CAAC;;;;;;;;;;;;;;;;ACRF,sHAAgE;AAEhE,IAAW,SAMV;AAND,WAAW,SAAS;IAChB,0BAAa;IACb,8BAAiB;IACjB,gDAAmC;IACnC,oCAAuB;IACvB,gCAAmB;AACvB,CAAC,EANU,SAAS,KAAT,SAAS,QAMnB;AAED,IAAW,OAGV;AAHD,WAAW,OAAO;IACd,4BAAiB;IACjB,0BAAe;AACnB,CAAC,EAHU,OAAO,KAAP,OAAO,QAGjB;AAED,IAAW,cAGV;AAHD,WAAW,cAAc;IACrB,uCAAqB;IACrB,iDAA+B;AACnC,CAAC,EAHU,cAAc,KAAd,cAAc,QAGxB;AAEY,gCAAwB,GAAqD;IACtF,0CAA0C,EAAE;QACxC,IAAI,EAAE,QAAQ;QACd,OAAO,2BAAyB;QAChC,IAAI,EAAE,gEAAuD;QAC7D,gBAAgB,EAAE;YACd,cAAQ,CACJ,8CAA8C,EAC9C,sDAAsD,CACzD;YACD,cAAQ,CACJ,mDAAmD,EACnD,2HAA2H,CAC9H;SACJ;QACD,WAAW,EAAE,cAAQ,CACjB,qCAAqC,EACrC,yFAAyF,CAC5F;QACD,KAAK,gBAA2B;QAChC,WAAW,EAAE,IAAI;KACpB;IACD,2CAA2C,EAAE;QACzC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,cAAQ,CACjB,sCAAsC,EACtC,wFAAwF,CAC3F;QACD,KAAK,gBAA2B;QAChC,WAAW,EAAE,IAAI;KACpB;IAED,oCAAoC,EAAE;QAClC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,yIAAqG;QAC3G,OAAO,mBAAgB;QACvB,WAAW,EAAE,cAAQ,CAAC,+BAA+B,EAAE,YAAY,CAAC;QACpE,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,4CAA+B;QACrC,OAAO,uBAAgB;QACvB,WAAW,EAAE,cAAQ,CAAC,6BAA6B,EAAE,UAAU,CAAC;QAChE,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;IACD,mCAAmC,EAAE;QACjC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,cAAQ,CAAC,8BAA8B,EAAE,cAAc,CAAC;QACrE,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;IACD,kCAAkC,EAAE;QAChC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,cAAQ,CAAC,6BAA6B,EAAE,aAAa,CAAC;QACnE,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;IACD,mDAAmD,EAAE;QACjD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,cAAQ,CAAC,8CAA8C,EAAE,wCAAwC,CAAC;QAC/G,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;IACD,cAAc;IACd,uCAAuC,EAAE;QACrC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,0CAA0C,EAC1C,+CAA+C,CAClD;QACD,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;IACD,sCAAsC,EAAE;QACpC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,cAAQ,CACjB,yCAAyC,EACzC,8CAA8C,CACjD;QACD,KAAK,kBAA6B;QAClC,WAAW,EAAE,IAAI;KACpB;CACJ,CAAC;;;;;;;;;;;;;;;;AChHF,yHAAuE;AACvE,sHAAqE;AAExD,iBAAS,GAAG,CAAC,8BAAkB,EAAE,6BAAiB,CAAC,CAAC;;;;;;;;;;;;;;;;ACCjE,0GAAmD;AAGtC,gBAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE;QACV,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG;KAClC;IACD,KAAK,EAAE;QACL,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;YAC7D,OAAO,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC;QACD,sBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;YACrE,OAAO,iBAAiB,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChH,CAAC;QACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAC;YACnE,OAAO,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QACzF,CAAC;KACF;IACD,QAAQ,EAAE;QACR,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YACxD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrF,CAAC;QACD,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YACxD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpG,CAAC;QACD,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YACpC,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtF,CAAC;QACD,yBAAyB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,IAAI,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YACpC,OAAO,iBAAiB,CAAC,yBAAyB,CAChD,MAAM,EACN,WAAW,CAAC,KAAK,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CACf,CAAC;QACJ,CAAC;KACF;IACD,YAAY,EAAE;QACZ,sBAAsB,EAAE;YACtB,SAAS,EAAE,kCAAU,CACnB,GAAG,EAAE,CACH,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;;;;aAI5B,CAAC,EACJ,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAW,EAAE,EAAE,CACxC,OAAO,CAAC,sBAAsB,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO;gBAC5D,OAAO,CAAC,sBAAsB,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAC7D;SACF;KACF;CACF,CAAC,CAAC;;;;;;;;;;;;;;;;ACtEH,yCAAyC;AAC5B,gBAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE;QACL,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,EAAE;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE,OAAO,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnF,OAAO,gBAAgB,CAAC,2BAA2B,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,EAAE;YACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;YACpE,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACzF,CAAC;KACF;IAED,QAAQ,EAAE;QACR,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC;YACjE,OAAO,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,CAAC;QACD,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC;YACjE,OAAO,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,kCACtG,WAAW,KACd,QAAQ,EAAE,IAAI,CAAC,IAAI,IACnB,CAAC;QACL,CAAC;QACD,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC;YACjE,OAAO,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,CAAC;QACD,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;YACvE,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7F,CAAC;KACF;CACF,CAAC,CAAC;;;;;;;;;;;;;ACnCH;AAAe,0EAAW,8BAA8B,4BAA4B,8DAA8D,uBAAuB,8CAA8C,GAAG,E;;;;;;;;;;;;;;;ACA1N,qIAA2D;AAC3D,kIAAyD;AACzD,wIAA6D;AAC7D,yHAAmD;AAEnD,MAAM,MAAM,GAAG,CAAC,mCAAgB,EAAE,kCAAe,EAAE,oCAAiB,EAAE,+BAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEtF,wBAAM;;;;;;;;;;;;;ACPf;AAAe,kFAAmB,mEAAmE,qBAAqB,mWAAmW,sBAAsB,oDAAoD,6BAA6B,oDAAoD,6BAA6B,mSAAmS,gFAAgF,kIAAkI,iCAAiC,iEAAiE,uBAAuB,gPAAgP,0BAA0B,oWAAoW,8BAA8B,sFAAsF,GAAG,E;;;;;;;;;;;;ACAx+D;AAAe,wGAAyC,4KAA4K,qBAAqB,iEAAiE,oBAAoB,gQAAgQ,kCAAkC,sPAAsP,4BAA4B,4QAA4Q,uBAAuB,sMAAsM,0BAA0B,iVAAiV,GAAG,E;;;;;;;;;;;;ACAztD;AAAe,kFAAmB,8FAA8F,GAAG,E;;;;;;;;;;;;;;;;;;;;;;;;ACAnI,6GAAoC;AACpC,+GAAqC;;;;;;;;;;;;;;;;;;;;;;;;;ACGrC,sEAA+C;AAE/C,uFAAwE;AAGxE,mFAAgD;AAEhD,wFAAqC;AAIrC,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;IAG5B,YAEY,oBAA2C,EAG7C,kBAAuC,EAGvC,MAAqB,EAGrB,MAAoB,EAG5B,MAAyB;QAZf,yBAAoB,GAApB,oBAAoB,CAAuB;QAG7C,uBAAkB,GAAlB,kBAAkB,CAAqB;QAGvC,WAAM,GAAN,MAAM,CAAe;QAGrB,WAAM,GAAN,MAAM,CAAc;QAK5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,MAAc;QACvD,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAEM,KAAK,CAAC,sBAAsB,CACjC,KAAa,EACb,SAAe,EACf,OAAa,EACb,MAAe;QAEf,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,KAAa;QAC7D,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAE,OAA2B;QACtF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,UAAU,EAAE;YACd,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,IAAI,CAAC,KAAK;gBACnB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,6CAA2C;gBACnD,UAAU;aACX,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,8CAA4C,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC;SACpG;QACD,OAAQ,IAAY,CAAC,GAAG,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAE,QAAgB,EAAE,OAA2B;QACxG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChG,MAAM,UAAU,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,UAAU,EAAE;YACd,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,IAAI,CAAC,KAAK;gBACnB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,6CAA2C;gBACnD,UAAU;aACX,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,8CAA4C,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC;SACpG;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAE,QAAgB;QAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,6CAA2C;YACnD,UAAU,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,CAAC,CAAC;SACjC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,8CAA4C,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,yBAAyB,CACpC,MAAc,EACd,KAAa,EACb,SAAe,EACf,OAAa,EACb,SAAiB;QAEjB,OAAO,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3G,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,OAAe,EAAE,SAAe,EAAE,OAAa;QAC5F,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,OAAe;QAC/D,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;CACF;AAnGY,iBAAiB;IAD7B,sBAAU,EAAE;IAKR,6BAAM,CAAC,iBAAK,CAAC,qBAAqB,CAAC;IAGnC,6BAAM,CAAC,kBAAW,CAAC,wBAAwB,CAAC;IAG5C,6BAAM,CAAC,iBAAU,CAAC,gBAAgB,CAAC;IAGnC,6BAAM,CAAC,QAAQ,CAAC;IAGhB,6BAAM,CAAC,QAAQ,CAAC;GAhBR,iBAAiB,CAmG7B;AAnGY,8CAAiB;;;;;;;;;;;;;;;;;;;;;;;;;ACb9B,sEAAuD;AAEvD,uFAM8B;AAE9B,2DAAiC;AAEjC,mFAA4D;AAC5D,wFAAyD;AACzD,+EAAmC;AAKnC,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAG3B,YAEY,mBAAyC,EAGzC,oBAA2C,EAG3C,iBAAwC,EAG1C,kBAAuC,EAGvC,MAAqB,EAIrB,QAAa,EAErB,MAAe;QAlBL,wBAAmB,GAAnB,mBAAmB,CAAsB;QAGzC,yBAAoB,GAApB,oBAAoB,CAAuB;QAG3C,sBAAiB,GAAjB,iBAAiB,CAAuB;QAG1C,uBAAkB,GAAlB,kBAAkB,CAAqB;QAGvC,WAAM,GAAN,MAAM,CAAe;QAIrB,aAAQ,GAAR,QAAQ,CAAK;QAIrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,MAAe;QACvD,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,KAAa,EAAE,MAAe;QACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAuC,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtH,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAClC,MAAM,kBAAkB,GAAG,WAAW;iBACnC,MAAM,CACL,CAAC,EAAE,EAAE,EAAE,wBACH,SAAS,CAAC,aAAa,0CAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAC,CACzD;iBACA,MAAM,CACL,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CACf,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAC/F,CAAC,CACF,CAAC;YACJ,OAAO;gBACL,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,KAAK;gBACL,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,aAAa,EAAE,kBAAkB;aAClC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,KAAW,EAAE,GAAS;QACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,UAAU,CAAC,MAAM,CACtB,CAAC,EAAE,EAAE,EAAE,CACL,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YAChF,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAC/E,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,OAAgC;QAC1F,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,MAAc,EACd,KAAa,EACb,OAAe,EACf,OAAgC,EAChC,WAAiB;QAEjB,IAAI;YACF,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,OAAO,CAAC,KAAK,8BAA6B,EAAE;gBAC9C,iDAAiD;gBACjD,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;aAC/F;iBAAM,IAAI,OAAO,CAAC,KAAK,0BAA2B,EAAE;gBACnD,iDAAiD;gBACjD,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAC9D;YACD,MAAM,WAAW,GAAG,qBAAc,CAAC,KAAK,4BAA+B,CAAC;YACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC;gBACjE,MAAM,+BAA2C;gBACjD,gBAAgB,EAAE,WAAW;aAC9B,CAAC,CAAQ,CAAC;YACX,IACE,OAAO,CAAC,KAAK,8BAA6B;gBAC1C,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB;gBACxD,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,8BAA8B,EACjE;gBACA,MAAM,SAAS,GAAG,mBAAmB,CAAC;gBACtC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;gBACnC,MAAM,QAAQ,GAAG,eAAM,CAAC,uBAAuB,CAAC;gBAChD,MAAM,UAAU,GAAG,8BAAkB,CAAC,kBAAkB,CAAC;gBACzD,MAAM,YAAY,GAAG;oBACnB,IAAI,EAAE,WAAW,CAAC,QAAQ;oBAC1B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;oBACzD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;oBACrD,aAAa,EAAE,GAAG,eAAM,CAAC,UAAU,IAAI,KAAK,4BAA4B;oBACxE,WAAW,EAAE,GAAG,eAAM,CAAC,UAAU,EAAE;iBACpC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;aACtE;YACD,IACE,OAAO,CAAC,KAAK,gCAA8B;gBAC3C,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,mBAAmB;gBACtD,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,8BAA8B,EACjE;gBACA,MAAM,SAAS,GAAG,oBAAoB,CAAC;gBACvC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;gBACnC,MAAM,QAAQ,GAAG,eAAM,CAAC,uBAAuB,CAAC;gBAChD,MAAM,UAAU,GAAG,8BAAkB,CAAC,WAAW,CAAC;gBAClD,MAAM,YAAY,GAAG;oBACnB,IAAI,EAAE,WAAW,CAAC,QAAQ;oBAC1B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;oBACzD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;oBACrD,aAAa,EAAE,GAAG,eAAM,CAAC,UAAU,IAAI,KAAK,4BAA4B;oBACxE,WAAW,EAAE,GAAG,eAAM,CAAC,UAAU,EAAE;iBACpC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;gBAErE,OAAO,IAAI,CAAC;aACb;SACF;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,OAAe,EAAE,KAAsB;QACvF,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,KAAK,8BAA6B,EAAE;gBACtC,iDAAiD;gBACjD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;aACzB;YAED,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,OAAe;QACzE,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEO,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY;QACxD,OAAO,IAAI,CAAC,UAAU,oBAEpB;YACE,OAAO,EAAE;gBACP,KAAK;gBACL,EAAE;gBACF,UAAU;gBACV,IAAI;gBACJ,SAAS,EAAE,YAAY;aACxB;SACF,kCAEF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU,CAAa,OAAe,EAAE,MAAU,EAAE,KAAc,EAAE,IAAqB;QACrG,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,GAAG,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxG,CAAC;CACF;AAlLY,gBAAgB;IAD5B,sBAAU,EAAE;IAKR,6BAAM,CAAC,iBAAK,CAAC,oBAAoB,CAAC;IAGlC,6BAAM,CAAC,iBAAK,CAAC,qBAAqB,CAAC;IAGnC,6BAAM,CAAC,iBAAK,CAAC,kBAAkB,CAAC;IAGhC,6BAAM,CAAC,kBAAW,CAAC,wBAAwB,CAAC;IAG5C,6BAAM,CAAC,iBAAU,CAAC,gBAAgB,CAAC;IAGnC,6BAAM,CAAC,UAAU,CAAC;IAClB,6BAAM,CAAC,iBAAU,CAAC,YAAY,EAAE,IAAI,CAAC;IAErC,6BAAM,CAAC,QAAQ,CAAC;GAtBR,gBAAgB,CAkL5B;AAlLY,4CAAgB;;;;;;;;;;;;;;;;ACrB7B,mEAA+D;AAc/D,MAAM,iBAAiB,GAAG,IAAI,iBAAM,CAAC;IACjC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CAC9B,CAAC,CAAC;AAEH,kBAAkB;AAClB,MAAM,gBAAgB,GAAG,IAAI,iBAAM,CAAC;IAChC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACrC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACzB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACxB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;IACxB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5C,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE;CAC7C,CAAC,CAAC;AAEH,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAS,CAAC,CAAC;AAEvE,MAAM,iBAAiB,GAAG,IAAI,iBAAM,CAAC;IACjC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACpC,WAAW,EAAE,CAAC,gBAAgB,CAAC;CAClC,CAAC,CAAC;AAEH,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAIzC,4BAAoB,GAA6C,CAAC,EAAE,EAAE,EAAE,CACjF,EAAE,CAAC,KAAK,CAAoB,aAAa,EAAE,iBAAiB,CAAC,CAAC;;;;;;;;;;;;;;;;ACxDlE,mEAA+D;AAa/D,IAAK,cAQJ;AARD,WAAK,cAAc;IACf,mDAAI;IACJ,2EAAgB;IAChB,2DAAQ;IACR,+EAAkB;IAClB,uDAAM;IACN,6DAAS;IACT,2EAAgB;AACpB,CAAC,EARI,cAAc,KAAd,cAAc,QAQlB;AAED,iBAAiB;AACjB,MAAM,eAAe,GAAG,IAAI,iBAAM,CAAC;IAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACrC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACzB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/B,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACzB,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,iBAAM,CAAC;IAChC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACpC,UAAU,EAAE,CAAC,eAAe,CAAC;CAChC,CAAC,CAAC;AAEH,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAIxC,2BAAmB,GAA4C,CAAC,EAAE,EAAE,EAAE,CAC/E,EAAE,CAAC,KAAK,CAAmB,YAAY,EAAE,gBAAgB,CAAC,CAAC;;;;;;;;;;;;;;;;ACvD/D,yCAAyC;AACzC,mEAA+D;AAiB/D,IAAK,cAQJ;AARD,WAAK,cAAc;IACjB,mDAAI;IACJ,2EAAgB;IAChB,2DAAQ;IACR,+EAAkB;IAClB,uDAAM;IACN,6DAAS;IACT,2EAAgB;AAClB,CAAC,EARI,cAAc,KAAd,cAAc,QAQlB;AAED,MAAM,kBAAkB,GAAG,IAAI,iBAAM,CAAC;IACpC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,iBAAM,CAAC;IACnC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AAEH,kBAAkB;AAClB,MAAM,gBAAgB,GAAG,IAAI,iBAAM,CAAC;IAClC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACrC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACzB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACxB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;IACxB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,UAAU,EAAE,CAAC,kBAAkB,CAAC;IAChC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5C,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE;CAC3C,CAAC,CAAC;AAEH,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAS,CAAC,CAAC;AAEvE,iBAAiB;AACjB,MAAM,eAAe,GAAG,IAAI,iBAAM,CAAC;IACjC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACrC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACzB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/B,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACzB,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,iBAAM,CAAC;IACnC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACpC,WAAW,EAAE,CAAC,gBAAgB,CAAC;IAC/B,UAAU,EAAE,CAAC,eAAe,CAAC;CAC9B,CAAC,CAAC;AAEH,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAIzC,4BAAoB,GAA6C,CAAC,EAAE,EAAE,EAAE,CACnF,EAAE,CAAC,KAAK,CAAoB,aAAa,EAAE,iBAAiB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACtGhE,6HAAwC;AACxC,2HAAuC;;;;;;;;;;;;;;;;;;;;;;;;;ACIvC,sEAA+C;AAI/C,8HAA8H;AAC9H,sDAA4B;AAG5B,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAK/B,YAEE,EAAuB,EAEvB,MAAc;QAEd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,wCAAoB,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,cAAc,CACvB,KAAa,EAAE,MAAwB,EAAE,IAAW,EAAE,KAAY;QAEpE,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,GAAG,IAAI,CAAC;SACf;QACD,IAAI,KAAK,GAAQ;YACf,oBAAoB,EAAE,MAAM;SAC7B,CAAC;QACF,IAAI,IAAI,EAAE;YACR,KAAK,mCAAQ,KAAK,KAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAE,CAAC;SAC/D;QACD,IAAI,KAAK,EAAE;YACT,KAAK,mCAAQ,KAAK,KAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAE,CAAC;SAC9D;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YACnD;gBACE,MAAM,EAAE;oBACN,KAAK;iBACN;aACF;YACD;gBACE,OAAO,EAAE,cAAc;aACxB;YACD;gBACE,MAAM,oBACD,KAAK,CACT;aACF;YACD;gBACE,MAAM,EAAE;oBACN,GAAG,EAAE,QAAQ;oBACb,WAAW,EAAE;wBACX,KAAK,EAAE,cAAc;qBACtB;iBACF;aACF;YACD;gBACE,QAAQ,EAAE;oBACR,KAAK,EAAE,CAAC;oBACR,WAAW,EAAE,CAAC;iBACf;aACF;SACF,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,EAAE,CAAC;SACX;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,0BAA0B,CAAC,KAAa;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE;YACpC,OAAO,QAAQ,CAAC,WAAW,CAAC;SAC7B;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,KAAa;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,QAAQ,EAAE;YACZ,IAAI,GAAG,CAAC;YACR,IAAI,QAAQ,CAAC,WAAW;gBAAE,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;YAC/G,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAC3B,MAAc,EACd,KAAa,EACb,OAA2B;QAE3B,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAC3D,EAAE,KAAK,EAAE,EACT,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAC1C;gBACE,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE;aAC7F,CACF,CAAC;YACF,OAAO,QAAQ,CAAC,QAAQ,EAAuB,CAAC;SACjD;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAC3B,MAAc,EACd,KAAa,EACb,QAAgB,EAChB,OAA2B;QAE3B,IAAI;YACF,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACjG,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC7B,UAAU,mCACL,UAAU,KACb,CAAC,iBAAiB,GAAG,EAAE,CAAC,EAAE,KAAK,GAChC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAC3D,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EACzD;gBACE,IAAI,oBACC,UAAU,CACd;aACF,EACD;gBACE,GAAG,EAAE,IAAI;gBACT,UAAU,EAAE;oBACV,MAAM;oBACN,KAAK;oBACL,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;iBAC/C;aACF,CACF,CAAC;YACF,OAAO,QAAQ,CAAC,QAAQ,EAAuB,CAAC;SACjD;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAE,QAAgB;QAC3E,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC/C;gBACE,KAAK;aACN,EACD;gBACE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;aAC1C,CACF,CAAC;YACF,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;aAC/C;YACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAS,CAAkB,EAAE,CAAC;SACpF;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,yBAAyB,CACpC,MAAc,EACd,KAAa,EACb,SAAe,EACf,OAAa,EACb,SAAiB;QAEjB,IAAI;YACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAClD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC,SAAS,GAAG,OAAO,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,CACzF,CAAC;gBACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAChC;oBACE,KAAK;iBACN,EACD;oBACE,WAAW;iBACZ,CACF,CAAC;gBACF,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,OAAe,EAAE,SAAe,EAAE,OAAa;QAC5F,IAAI;YACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CACpC;gBACE,KAAK;aACN,EACD,EAAE,IAAI,EAAE,EAAE,+BAA+B,EAAE,OAAO,EAAE,EAAE,EACtD;gBACE,KAAK,EAAE,IAAI;gBACX,YAAY,EAAE;oBACZ;wBACE,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;wBACnC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;wBAC/B,gBAAgB,EAAE,IAAI;qBACvB;iBACF;aACF,CACF,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,OAAe;QAC/D,IAAI;YACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CACpC;gBACE,KAAK;aACN,EACD,EAAE,IAAI,EAAE,EAAE,+BAA+B,EAAE,IAAI,EAAE,EAAE,EACnD;gBACE,KAAK,EAAE,IAAI;gBACX,YAAY,EAAE;oBACZ;wBACE,gBAAgB,EAAE,OAAO;qBAC1B;iBACF;aACF,CACF,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC;CACF;AA3OY,oBAAoB;IADhC,sBAAU,EAAE;IAOR,6BAAM,CAAC,mBAAmB,CAAC;IAE3B,6BAAM,CAAC,QAAQ,CAAC;GARR,oBAAoB,CA2OhC;AA3OY,oDAAoB;;;;;;;;;;;;;;;;;;;;;;;;;ACZjC,sEAA+C;AAG/C,sDAA4B;AAC5B,mFAAgD;AAEhD,2HAAuG;AAIvG,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAK9B,YAEE,EAAuB,EAEvB,MAAc,EAEN,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QAE7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,GAAG,sCAAmB,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,KAAa;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE;YACnC,OAAO,QAAQ,CAAC,UAAU,CAAC;SAC5B;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,MAAe;QACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,OAAgC;QAC1F,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD,EAAE,KAAK,EAAE,EACT,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAClC,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,OAAe,EAAE,OAAgC;QAC3F,IAAI;YACF,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC7B,UAAU,mCACL,UAAU,KACb,CAAC,gBAAgB,GAAG,EAAE,CAAC,EAAE,KAAK,GAC/B,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EACvD,EAAE,IAAI,oBAAO,UAAU,CAAE,EAAE,CAC5B,CAAC;YACF,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,OAAe,EAAE,KAAsB;QACvF,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD;gBACE,KAAK;gBACL,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;aACzC,EACD;gBACE,IAAI,EAAE;oBACJ,qBAAqB,EAAE,KAAK;iBAC7B;aACF,CACF,CAAC;YACF,OAAO,QAAQ,CAAC;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,OAAe;QACzE,IAAI;YACF,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAC/B;gBACE,KAAK;aACN,EACD;gBACE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;aACxC,CACF,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;CACF;AAhGY,mBAAmB;IAD/B,sBAAU,EAAE;IAOR,6BAAM,CAAC,mBAAmB,CAAC;IAE3B,6BAAM,CAAC,QAAQ,CAAC;IAEhB,6BAAM,CAAC,iBAAU,CAAC,gBAAgB,CAAC;GAV3B,mBAAmB,CAgG/B;AAhGY,kDAAmB;;;;;;;;;;;;ACXhC,iD;;;;;;;;;;;ACAA,+C;;;;;;;;;;;ACAA,sD;;;;;;;;;;;ACAA,iE;;;;;;;;;;;ACAA,kD;;;;;;;;;;;ACAA,oC;;;;;;;;;;;ACAA,kD;;;;;;;;;;;ACAA,sC;;;;;;;;;;;ACAA,mC;;;;;;;;;;;ACAA,mC;;;;;;;;;;;ACAA,qC","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","/* eslint-disable import/no-extraneous-dependencies */\nimport * as envalid from 'envalid';\n\nconst { str, num } = envalid;\n\nexport const config = envalid.cleanEnv(process.env, {\n MAIL_SEND_DEFAULT_EMAIL: str(),\n CLIENT_URL: str(),\n});\n","export * from './config';\n","export const DEFAULT_USER = '123';\nexport const DEFAULT_ORG = '123';\nexport const TYPES = {\n ITimeTrackerService: Symbol('ITimeTrackerService'),\n ITimeRecordService: Symbol('ITimeRecordService'),\n ITimesheetService: Symbol('ITimesheetService'),\n ITimeTrackerRepository: Symbol('ITimeTrackerRepository'),\n ITimeRecordRepository: Symbol('ITimeRecordRepository'),\n ITimesheetRepository: Symbol('ITimesheetRepository'),\n ITaskRepository: Symbol('ITaskRepository'),\n ITaskService: Symbol('ITaskService'),\n};\n\nexport const EmailTemplateCodes = {\n TIMESHEET_APPROVAL: 'TIMESHEET_APPROVAL_EMAIL_TEMPLATE',\n ENABLE_TIMETRACKER: 'ENABLE_TIMETRACKER_EMAIL_TEMPLATE',\n SUBMIT_TIME: 'SUBMIT_TIME_EMAIL_TEMPLATE',\n TIMETRACKING_STOP: 'TIMETRACKING_STOP_TEMPLATE',\n};\n\nexport enum IPreDefineAccountPermissions {\n // others\n viewOthersTimeTracker = 'organization.timetracker.others.view',\n createOthersTimeTracker = 'organization.timetracker.others.create',\n editOthersTimeTracker = 'organization.timetracker.others.edit',\n deleteOthersTimeTracker = 'organization.timetracker.others.delete',\n manageOthersTimeTracker = 'organization.timetracker.others.manage',\n\n // self\n viewSelfTimeTracker = 'organization.timetracker.self.view',\n createSelfTimeTracker = 'organization.timetracker.self.create',\n editSelfTimeTracker = 'organization.timetracker.self.edit',\n deleteSelfTimeTracker = 'organization.timetracker.self.delete',\n manageSelfTimeTracker = 'organization.timetracker.self.manage',\n}\n","export * from './constants';\n","import { ContainerModule, interfaces } from 'inversify';\nimport { TYPES } from '../constants';\nimport { TimeRecordService, TimesheetService } from '../services';\nimport { TimeRecordRepository, TimesheetRepository } from '../store/repository';\nimport { TimesheetApprovalMailTemplate, TimesheetSubmitMailTemplate } from '../migration';\n\nexport const timeTrackerModule: (settings: any) => ContainerModule = (setting) =>\n new ContainerModule((bind: interfaces.Bind) => {\n bind(TYPES.ITimeRecordRepository).to(TimeRecordRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetRepository).to(TimesheetRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimeRecordService).to(TimeRecordService).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetService).to(TimesheetService).inSingletonScope().whenTargetIsDefault();\n\n bind('MongodbMigration').to(TimesheetApprovalMailTemplate).whenTargetNamed(TimesheetApprovalMailTemplate.name);\n bind('MongodbMigration').to(TimesheetSubmitMailTemplate).whenTargetNamed(TimesheetSubmitMailTemplate.name);\n });\n","export * from './containers';\n","import { Feature } from '@common-stack/server-core';\nimport TimeTracker from './module';\n\nexport * from './constants';\nexport * from './store/repository';\nexport * from './store/models/timetracker-model';\n\nexport default new Feature(TimeTracker);\n","export * from './service-initialization';\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { IRegistryExtensions as RegistryExtensions, IConfigurationRegistry, IRegistry } from '@adminide-stack/core';\nimport * as ILogger from 'bunyan';\nimport { TYPES as serverTypes, Schemas } from '@workbench-stack/core';\nimport { CommonType } from '@common-stack/core';\nimport { interfaces } from 'inversify';\nimport { TimeTrackerContribution } from '../preferences';\n\nexport const mainLoadConfigurationPre = async (_, container: interfaces.Container) => {\n const logger = container.get<ILogger>(CommonType.LOGGER);\n logger.info('PRESTART START: -- load TimeTrackerContribution to registry');\n\n const registry = container.get<IRegistry>(serverTypes.IRegistry);\n const configurationRegistry = registry.as<IConfigurationRegistry>(RegistryExtensions.Configuration);\n configurationRegistry.registerConfiguration(TimeTrackerContribution);\n logger.info('PRESTART ENDS: -- load TimeTrackerContribution to registry');\n};\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has approved! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been approved! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","export * from './mail-template'","/* eslint-disable max-classes-per-file */\nimport * as Logger from 'bunyan';\nimport { injectable, inject, tagged } from 'inversify';\nimport { IDatabaseMigration } from '@adminide-stack/core';\nimport { IMoleculerServiceName, IMailServiceAction, IMailerServicesendArgs } from '@container-stack/mailing-api';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { CallingOptions, ServiceBroker } from 'moleculer';\nimport { EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\n\nconst TimeApprovalTemplate = require('./approval_notification.ejs');\nconst TimeSubmitTemplate = require('./submit_notification.ejs');\n\n@injectable()\nexport class TimesheetApprovalMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'EmailTemplateCodes_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.TIMESHEET_APPROVAL,\n description: 'Timesheet approved',\n html: TimeApprovalTemplate.default,\n text: 'Timesheet approved',\n name: 'Timesheet approval notification',\n topic: 'Timesheet approved.',\n };\n\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n\n@injectable()\nexport class TimesheetSubmitMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'TimesheetSubmitMailTemplate_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.SUBMIT_TIME,\n description: 'Timesheet submitted',\n html: TimeSubmitTemplate.default,\n text: 'Timesheet submitted',\n name: 'Timesheet submit notification',\n topic: 'Timesheet submitted.',\n };\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has submitted! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been submitted! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","import { Feature } from '@common-stack/server-core';\nimport { interfaces } from 'inversify';\nimport { schema } from './schema';\nimport { timeTrackerModule } from './containers';\nimport { resolvers } from './resolvers';\nimport { TYPES } from './constants';\nimport { mainLoadConfigurationPre } from './initialization';\nimport { TimeTrackerRolesContribution, TimeTrackerRolesPermissionOverwrite } from './preferences';\n\nconst createServiceFunc = (container: interfaces.Container) => ({\n timeRecordService: container.get(TYPES.ITimeRecordService),\n timesheetService: container.get(TYPES.ITimesheetService),\n});\n\nexport default new Feature({\n schema,\n createResolversFunc: resolvers,\n createContainerFunc: [timeTrackerModule],\n createServiceFunc,\n preStartFunc: [mainLoadConfigurationPre],\n addPermissions: {\n createPermissions: [TimeTrackerRolesContribution],\n },\n rolesUpdate: {\n overwriteRolesPermissions: TimeTrackerRolesPermissionOverwrite,\n },\n});\n","export * from './settings';\nexport * from './permissions';\n","export * from './timing-permissions-contribution';\nexport * from './timing-roles-permission-overwrite';\n","import { ConfigurationScope, IPermissionType } from '@adminide-stack/core';\nimport * as nls from '@vscode-alt/monaco-editor/esm/vs/nls';\nimport { IRoles } from '@common-stack/server-core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nconst extraParams = {\n type: 'string',\n enum: [IPermissionType.Allow, IPermissionType.Deny, IPermissionType.NotSet],\n default: IPermissionType.NotSet,\n scope: ConfigurationScope.WINDOW,\n};\nexport const TimeTrackerRolesContribution: IRoles<ConfigurationScope> = {\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewOthersTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of others.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createOthersTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of other members.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteOthersTimeTracker,\n 'Delete Time Tracker and Timesheet of other members.',\n ),\n ...extraParams,\n },\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewSelfTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of self',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createSelfTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteSelfTimeTracker,\n 'Delete Time Tracker and Timesheet of self.',\n ),\n ...extraParams,\n },\n};\n","import { IPermissionType, IApplicationRoles } from '@adminide-stack/core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nexport const TimeTrackerRolesPermissionOverwrite = {\n [IApplicationRoles.OWNER]: {\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ORGANIZATION_MANAGER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.PROJECT_ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.MEMBER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.PROJECT_VIEWER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.USER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.GUEST]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n// const localize = (id, defaultMessage) => defineMessages({\n// id,\n// defaultMessage,\n\n// });\nconst enum TimeFormat {\n ROUNDED_0_00_12 = 'h.mm A',\n ROUNDED_0_00_24 = 'H.mm',\n PRECISE_00_00_00_12 = 'hh:mm:ss A',\n PRECISE_00_00_00_24 = 'HH:mm:ss',\n ROUNDED_UP_00_00_12 = 'hh:mm A',\n ROUNDED_UP_00_00_24 = 'HH:mm',\n}\n\nconst enum GroupProjectsBy {\n CLIENT = 'Client',\n CATEGORY = 'Category',\n CUSTOM = 'Custom',\n}\nconst enum DateFormat {\n USFORMAT = 'MM-DD-YYYY',\n UKFORMAT = 'DD-MM-YYYY',\n ISOFORMAT = 'YYYY-MM-DD',\n}\n\nexport const enum WeekDay {\n SUN = 'Sunday',\n MON = 'Monday',\n TUE = 'Tuesday',\n WED = 'Wednesday',\n THU = 'Thursday',\n FRI = 'Friday',\n SAT = 'Saturday',\n}\n\nconst enum FristWeekOfTheYear {\n FIRST_DAY = 'Week containing first day of the year',\n FIRST_FULL_7DAY = 'First full seven-day week in January',\n FIRST_4_DAY = 'First four-day week in January',\n}\n\nconst enum TimeRoundingUpToValue {\n IN_MINUTES_15 = 15 * 60,\n IN_MINUTES_1 = 1 * 60,\n IN_MINUTES_5 = 5 * 60,\n IN_MINUTES_6 = 6 * 60,\n IN_MINUTES_10 = 10 * 60,\n IN_MINUTES_12 = 12 * 60,\n IN_MINUTES_30 = 30 * 60,\n IN_HOUR_1 = 1 * 60 * 60,\n IN_HOUR_4 = 4 * 60 * 60,\n}\n\nconst enum TimeRoundedType {\n ROUND_UP_TO = 'Round up to',\n ROUND_TO_NEAREST = 'Round to nearest',\n ROUND_DOWN_TO = 'Roudn down to',\n}\nexport const TimeTrackerProperties: { [path: string]: IConfigurationPropertySchema } = {\n // notifications\n 'timetracker.notifications.enableTimetrackerNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'Allow timetracker emails to be send',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n 'timetracker.notifications.timeTrackingNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'An email will be send when tracking is stopped by the system due to lack of user response',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.approvalNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.approvalNotifications',\n 'An email will be sent to me when my timesheet is approved',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.submitNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.submitNotifications',\n 'An email will be sent to me when team member submits time (Approval Managers only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n // Time Tracking\n 'timetracker.activity.autoStop': {\n type: 'number',\n default: 24,\n description: localize(\n 'timetracker.activity.autoStop',\n 'Tracking will stop once maximum tack length has been exceeded',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.waitingTime': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.waitingTime',\n 'Enable activity check on the time tracking to ask if you are still tracking after the choosen idle time (in seconds)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.maxTimeInADay': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.maxTimeInADay',\n 'Enable activity check on the time tracking upto choosen max time in a day(in seconds). It can change upto 1440',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.automaticLock': {\n type: 'string',\n default: null,\n description: localize(\n 'accountNotificationPrimaryEmail',\n 'Prevent regular users from editing their past time or adding new entries to past dates',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.billable': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.project.billable',\n 'When you create a project, make it billable so its time entries are set as billable by default.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.daysAllowedToWork': {\n type: ['string'],\n default: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI],\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n description: localize('timetracker.project.recurringDailyLimit', 'Select working day'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstDayOfTheWeek': {\n type: 'string',\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n default: WeekDay.MON,\n description: localize('timetracker.project.firstDayOfTheWeek', 'First day of the week'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstWeekOfTheyear': {\n type: 'string',\n enum: [FristWeekOfTheYear.FIRST_4_DAY, FristWeekOfTheYear.FIRST_FULL_7DAY, FristWeekOfTheYear.FIRST_DAY],\n default: FristWeekOfTheYear.FIRST_4_DAY,\n enumDescriptions: [\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_4_DAY',\n 'The week regarded to be the first week of the year is that which contains at least 4 days of the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_FULL_7DAY',\n 'The week regarded as the first week of the year is that which contains 7 full days in the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_DAY',\n 'The week regarded as the first week of the years is that which contains at least one-day of the new year.',\n ),\n ],\n description: localize(\n 'timetracker.project.firstWeekOfTheyear',\n 'You can set how you start or view the first calendar week of the year. This will be visible on Timetracker pages like \"Reports\" or \"Calender View\".',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeFormat': {\n type: 'string',\n enum: [\n TimeFormat.ROUNDED_0_00_12,\n TimeFormat.ROUNDED_0_00_24,\n TimeFormat.PRECISE_00_00_00_12,\n TimeFormat.PRECISE_00_00_00_24,\n TimeFormat.ROUNDED_UP_00_00_12,\n TimeFormat.ROUNDED_UP_00_00_24,\n ],\n default: TimeFormat.PRECISE_00_00_00_12,\n enumDescriptions: [\n localize('timetracker.project.timeFormat.ROUNDED_0_00_12', '\"0.00 AM/PM\" (12 hours rounded)'),\n localize('timetracker.project.timeFormat.ROUNDED_0_00_24', '\"0.00\" (24 hours rounded)'),\n localize(\n 'timetracker.project.timeFormat.PRECISE_00_00_00_12',\n '\"00:00:00 AM/PM\" (precise 12 hours format)',\n ),\n localize('timetracker.project.timeFormat.PRECISE_00_00_00_24', '\"13:00:00\" (precise 24 hours format)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_12', '\"00:00 AM/PM\" (rounded up)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_24', '\"13:00\" (rounded up)'),\n ],\n description: localize(\n 'timetracker.project.timeFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.dateFormat': {\n type: 'string',\n enum: [DateFormat.USFORMAT, DateFormat.UKFORMAT, DateFormat.ISOFORMAT],\n default: DateFormat.USFORMAT,\n enumDescriptions: [\n localize('timetracker.project.dateFormat.USFORMAT', '\"MM-DD-YYYY\" (US standard)'),\n localize('timetracker.project.dateFormat.UKFORMAT', '\"DD-MM-YYYY\" (UK standard)'),\n localize('timetracker.project.dateFormat.ISOFORMAT', '\"YYYY-MM-DD\" (ISO FORMAT)'),\n ],\n description: localize(\n 'timetracker.project.dateFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedToNearest': {\n type: 'string',\n enum: [\n TimeRoundingUpToValue.IN_MINUTES_1,\n TimeRoundingUpToValue.IN_MINUTES_5,\n TimeRoundingUpToValue.IN_MINUTES_6,\n TimeRoundingUpToValue.IN_MINUTES_10,\n TimeRoundingUpToValue.IN_MINUTES_12,\n TimeRoundingUpToValue.IN_MINUTES_15,\n TimeRoundingUpToValue.IN_MINUTES_30,\n TimeRoundingUpToValue.IN_HOUR_1,\n TimeRoundingUpToValue.IN_HOUR_4,\n ],\n default: TimeRoundingUpToValue.IN_MINUTES_15,\n enumDescriptions: [\n localize('TimeRoundingUpToValue.IN_MINUTES_1', '1 minute'),\n localize('TimeRoundingUpToValue.IN_MINUTES_5', '5 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_6', '6 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_10', '10 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_12', '12 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_15', '15 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_30', '30 minutes'),\n localize('TimeRoundingUpToValue.IN_HOUR_1', '1 hour'),\n localize('TimeRoundingUpToValue.IN_HOUR_4', '4 hours'),\n ],\n description: localize('timetracker.project.roundedToNearest', 'Round to nearest selected minute/hour'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedType': {\n type: 'string',\n enum: [TimeRoundedType.ROUND_UP_TO, TimeRoundedType.ROUND_TO_NEAREST, TimeRoundedType.ROUND_DOWN_TO],\n default: TimeRoundedType.ROUND_TO_NEAREST,\n enumDescriptions: [\n localize(\n 'timetracker.project.roundedType.ROUND_UP_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in report as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_TO_NEAREST',\n 'e.g. if you set theinterval to 30min, a 14min entry will up as 0min and 26min entry as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_DOWN_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in reports as 0min',\n ),\n ],\n description: localize('timetracker.project.roundedType', 'Select the time rounding type'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.report.timeRoundingInReports': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.report.timeRoundingInReports',\n 'Round time in reports up, down, or to nearest X minutes',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n // 'timetracker.project.favorites': {\n // type: 'boolean',\n // default: true,\n // description: localize(\n // 'timetracker.project.favorites',\n // 'Let people mark their most used projects as favorite so they appear at the top of their project list when tracking time.',\n // ),\n // scope: ConfigurationScope.RESOURCE,\n // },\n 'timetracker.project.groupingLabel': {\n type: 'string',\n default: GroupProjectsBy.CLIENT,\n enum: [GroupProjectsBy.CLIENT, GroupProjectsBy.CATEGORY, GroupProjectsBy.CUSTOM],\n description: localize(\n 'timetracker.project.groupingLabel',\n 'Group Project by clients or departments, you can change the lable to somethign else',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.pickerSpecialFilter': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.pickerSpecialFilter',\n 'Quickly find the right task in project picker by using the task@project syntax.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.screenshotsEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.timerecord.screenshotsEnabled',\n 'Generate screenshots every 5 minutes while the timer is running (desktop app only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskBillableEnabled': {\n type: 'boolean',\n default: false,\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskRateEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.taskRateEnabled',\n 'Have a different rate depending on the task on a project, plus choose whether tasks are billable by default.',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeApprovalEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.timeApprovalEnabled',\n 'Your team can submit their weekly timehseets for review, which you can approve or reject',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeTrackingMode': {\n type: 'string',\n default: 'DEFAULT',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.trackTimeDownToSecond': {\n type: 'boolean',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n default: true,\n scope: ConfigurationScope.WINDOW,\n },\n};\n","import { IConfigurationNode } from '@adminide-stack/core';\nimport { IConfigurationContributionNames } from '@admin-layout/timetracker-core';\nimport { TimeTrackerProperties } from './general-settings';\nimport { TrackerPaymentProperties } from './payment-settings';\n\nexport const TimeTrackerContribution: IConfigurationNode = {\n id: IConfigurationContributionNames.timeTracker,\n type: 'object',\n properties: { ...TimeTrackerProperties, ...TrackerPaymentProperties },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n\nconst enum PayPeriod {\n NONE = 'None',\n WEEKLY = 'Weekly',\n TWICE_PER_MONTH = 'Twice per month',\n BI_WEEKLY = 'Bi-weekly',\n MONTHLY = 'Monthly',\n}\n\nconst enum PayRate {\n HOURLY = 'Hourly',\n FIXED = 'Fixed',\n}\n\nconst enum ProcessPayment {\n MANUALLY = 'Manually',\n AUTOMATICALLY = 'Automatically',\n}\n\nexport const TrackerPaymentProperties: { [path: string]: IConfigurationPropertySchema } = {\n 'timetracker.user.payment.processPayments': {\n type: 'string',\n default: ProcessPayment.MANUALLY,\n enum: [ProcessPayment.MANUALLY, ProcessPayment.AUTOMATICALLY],\n enumDescriptions: [\n localize(\n 'timetracker.payment.processPayments.manually',\n 'When set manually, time need to be updated manually.',\n ),\n localize(\n 'timetracker.payment.processPayments.automatically',\n \"When set automatically, time is marked as 'paid' in our system and if you have payroll enabled, the payment will be send.\",\n ),\n ],\n description: localize(\n 'timetracker.payment.processPayments',\n 'Choose whether you want to manually send payments or have them automatically processed.',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n 'timetracker.user.payment.sendPaymentAfter': {\n type: 'number',\n default: 0,\n description: localize(\n 'timetracker.payment.sendPaymentAfter',\n 'Number of days after pay period ends, you would like to send payments for timesheets. ',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n\n 'timetracker.user.payment.payPeriod': {\n type: 'string',\n enum: [PayPeriod.NONE, PayPeriod.WEEKLY, PayPeriod.TWICE_PER_MONTH, PayPeriod.BI_WEEKLY, PayPeriod.MONTHLY],\n default: PayPeriod.NONE,\n description: localize('timetracker.payment.payPeriod', 'Pay Period'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payType': {\n type: 'string',\n enum: [PayRate.HOURLY, PayRate.FIXED],\n default: PayRate.HOURLY,\n description: localize('timetracker.payment.payType', 'Pay type'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.billRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.billRate', 'Billing Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.payRate', 'Paying Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.requireTimesheetApproval': {\n type: 'boolean',\n default: false,\n description: localize('timetracker.payment.requireTimesheetApproval', 'Whether it requires Timesheet Approval'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n // User limits\n 'timetracker.user.recurringWeeklyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringWeeklyLimit',\n 'Limits how much time can be tracked each week',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.recurringDailyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringDailyLimit',\n 'Limits how much time can be tracked each day',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n};\n","import { resolver as timerecordResolver } from './timerecord-resolver';\nimport { resolver as timesheetResolver } from './timesheet-resolver';\n\nexport const resolvers = [timerecordResolver, timesheetResolver];\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable no-underscore-dangle */\nimport * as _ from 'lodash';\nimport { withFilter } from 'graphql-subscriptions';\nimport { ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\n\nexport const resolver = (options) => ({\n TimeRecord: {\n id: (root) => root.id || root._id,\n },\n Query: {\n getTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getTimeRecords) args %j', args);\n return timeRecordService.getTimeRecords(userContext.orgId, args.userId);\n },\n getDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getDurationTimeRecords) args %j', args);\n return timeRecordService.getDurationTimeRecords(userContext.orgId, args.startTime, args.endTime, args.userId);\n },\n getPlayingTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getPlayingTimeRecord) args %j', args);\n return timeRecordService.getPlayingTimeRecord(user._id || user.sub, userContext.orgId);\n },\n },\n Mutation: {\n createTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.createTimeRecord(userId, userContext.orgId, args.request);\n },\n updateTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.updateTimeRecord(userId, userContext.orgId, args.recordId, args.request);\n },\n removeTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimeRecord) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeTimeRecord(userId, userContext.orgId, args.recordId);\n },\n removeDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeDurationTimeRecords) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeDurationTimeRecords(\n userId,\n userContext.orgId,\n args.startTime,\n args.endTime,\n args.projectId,\n );\n },\n },\n Subscription: {\n SubscribeToTimeTracker: {\n subscribe: withFilter(\n () =>\n options.pubsub.asyncIterator([\n ITimeRecordPubSubEvents.TimeRecordCreated,\n ITimeRecordPubSubEvents.TimeRecordUpdated,\n ITimeRecordPubSubEvents.TimeRecordDeleted,\n ]),\n async (payload, variables, context: {}) =>\n payload.SubscribeToTimeTracker.orgName === variables.orgName &&\n payload.SubscribeToTimeTracker.userId === variables.userId,\n ),\n },\n },\n});\n","/* eslint-disable no-underscore-dangle */\nexport const resolver = (options) => ({\n Query: {\n getTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getTimeSheets) args %j', args);\n if (!args.withTotalHours) return timesheetService.getTimesheets(userContext.orgId);\n return timesheetService.getTimesheetsWithTotalHours(userContext.orgId);\n },\n getDurationTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getDurationTimesheets) args %j', args);\n return timesheetService.getDurationTimesheets(userContext.orgId, args.start, args.end);\n },\n },\n\n Mutation: {\n createTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimesheet) args %j', args);\n return timesheetService.createTimesheet(user._id || user.sub, userContext.orgId, args.request);\n },\n updateTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheet) args %j', args);\n return timesheetService.updateTimesheet(user._id || user.sub, userContext.orgId, args.sheetId, args.request, {\n ...userContext,\n username: user.name,\n });\n },\n removeTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimesheet) args %j', args);\n return timesheetService.removeTimesheet(user._id || user.sub, userContext.orgId, args.sheetId);\n },\n updateTimesheetStatus: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheetStatus) args %j', args);\n return timesheetService.updateTimesheetStatus(userContext.orgId, args.sheetId, args.state);\n },\n },\n});\n","export default \"type Tag {\\n id: ID!\\n name: String\\n}\\n\\nenum StartYearWeekType {\\n FIRST_FOURDAY_WEEK\\n FIRST_FULL_WEEK\\n FIRST_DAY_WEEK\\n}\\n\\nextend type Query {\\n getTags: [Tag]\\n getSettings: Settings\\n}\\n\";","import timeRecordSchema from './timerecord-schema.graphql';\nimport timesheetSchema from './timesheet-schema.graphql';\nimport timeTrackerSchema from './timetracker-schema.graphql';\nimport commonSchema from './common-schema.graphql';\n\nconst schema = [timeRecordSchema, timesheetSchema, timeTrackerSchema, commonSchema].join('\\n');\n\nexport { schema };\n","export default \"type TimeRecords {\\n orgId: String\\n userId: String\\n timeRecords: [TimeRecord]\\n}\\n\\ntype TimeRecord {\\n id: String\\n startTime: DateTime\\n endTime: DateTime\\n taskId: String\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n userId: String\\n orgId: String\\n timesheetId: String\\n editable: Boolean\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus]\\n}\\n\\ntype PauseStatus {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput PauseStatus_Input {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput TimeRecordRequest {\\n userId: String\\n startTime: DateTime\\n endTime: DateTime\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n timesheetId: String\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus_Input]\\n}\\n\\n\\\"\\\"\\\"\\n Subscription event for timer\\n\\\"\\\"\\\"\\nenum TimeRecordPubSubEvents {\\n TimeRecordCreated\\n TimeRecordUpdated\\n TimeRecordStopped\\n TimeRecordDeleted\\n TimeRecordConfigurationUpdate\\n}\\n\\ntype SubscriptionTimeRecord {\\n mutation: TimeRecordPubSubEvents\\n timeRecord: TimeRecord\\n}\\n\\nextend type Query {\\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\\n getPlayingTimeRecord: TimeRecord @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\\n}\\n\\nextend type Subscription {\\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\\n}\\n\";","export default \"# scalar DateTime\\nenum TimesheetState {\\n OPEN\\n APPROVED_PENDING\\n APPROVED\\n APPROVED_FINALIZED # --- which means no going back\\n DENYED\\n SUBMITTED\\n DENYED_FINALIZED # --- which means no going back\\n}\\n\\ntype Timesheets {\\n orgId: String\\n userId: String\\n timesheets: [Timesheet]\\n}\\n\\ntype Timesheet {\\n id: ID\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n timeRecordsId: [String]\\n}\\n\\ninput TimesheetCreateRequest {\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n timeRecordsId: [String]\\n}\\n\\ntype TimesheetResponse {\\n id: ID\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n userId: String\\n orgId: String\\n totalDuration: Int\\n}\\n\\nextend type Query {\\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\\n removeTimesheet(sheetId: String): Boolean @addAccountContext\\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\\n}\\n\";","export default \"type TimeTracker {\\n userId: String\\n orgId: String\\n timeRecords: [TimeRecord]\\n timesheets: [Timesheet]\\n}\\n\";","export * from './timesheet-service';\nexport * from './timerecord-service';\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable import/no-extraneous-dependencies */\nimport { CdmLogger } from '@cdm-logger/core';\nimport { inject, injectable } from 'inversify';\nimport { ITimeRecord, ITimeRecordRequest, ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\nimport { ServerTypes, IPreferencesService } from '@adminide-stack/core';\nimport { PubSubEngine } from 'graphql-subscriptions';\nimport { ServiceBroker } from 'moleculer';\nimport { CommonType } from '@common-stack/core';\nimport { ITimeRecordRepository } from '../interfaces';\nimport { TYPES } from '../constants';\nimport { ITimeRecordService } from '../interfaces/timerecord-service';\n\n@injectable()\nexport class TimeRecordService implements ITimeRecordService {\n private logger: CdmLogger.ILogger;\n\n constructor(\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('PubSub')\n private pubsub: PubSubEngine,\n\n @inject('Logger')\n logger: CdmLogger.ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimeRecords(orgId: string, userId: string): Promise<Array<ITimeRecord>> {\n return this.timeRecordRepository.getTimeRecords(orgId, userId);\n }\n\n public async getDurationTimeRecords(\n orgId: string,\n startTime: Date,\n endTime: Date,\n userId?: string,\n ): Promise<Array<ITimeRecord>> {\n const timeRecords = await this.timeRecordRepository.getTimeRecords(orgId, userId, startTime, endTime);\n return timeRecords.filter((r) => r.endTime !== null);\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n return this.timeRecordRepository.getPlayingTimeRecord(userId, orgId);\n }\n\n public async createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.createTimeRecord(userId, orgId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordCreated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordCreated, { SubscribeToTimeTracker: record });\n }\n return (data as any)._id;\n }\n\n public async updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.updateTimeRecord(userId, orgId, recordId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordUpdated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordUpdated, { SubscribeToTimeTracker: record });\n }\n return true;\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n const data = await this.timeRecordRepository.removeTimeRecord(userId, orgId, recordId);\n const record = {\n orgName: data.orgId,\n userId: data.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordDeleted,\n timeRecord: data?.timeRecords[0],\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordDeleted, { SubscribeToTimeTracker: record });\n return true;\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n return this.timeRecordRepository.removeDurationTimeRecords(userId, orgId, startTime, endTime, projectId);\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n this.timeRecordRepository.approveTimeRecords(orgId, sheetId, startDate, endDate);\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n this.timeRecordRepository.disapproveTimeRecords(orgId, sheetId);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport * as ILogger from 'bunyan';\nimport { inject, injectable, tagged } from 'inversify';\nimport { ITimesheetState, ITimesheetCreateRequest, ITimeRecord } from '@admin-layout/timetracker-core';\nimport {\n ConfigurationTarget,\n generateOrgUri,\n IConfigFragmentName,\n ServerTypes,\n IPreferencesService,\n} from '@adminide-stack/core';\nimport { IMailServiceAction, IMailerServicesendArgs, IMoleculerServiceName } from '@container-stack/mailing-api';\nimport * as moment from 'moment';\nimport { ServiceBroker, CallingOptions } from 'moleculer';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { TYPES, EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\nimport { ITimesheetService } from '../interfaces/timesheet-service';\nimport { ITimesheetRepository, ITimeRecordRepository } from '../interfaces';\n\n@injectable()\nexport class TimesheetService implements ITimesheetService {\n private logger: ILogger;\n\n constructor(\n @inject(TYPES.ITimesheetRepository)\n protected timesheetRepository: ITimesheetRepository,\n\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(TYPES.ITimeRecordService)\n protected timeRecordService: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n @inject('Logger')\n logger: ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimesheets(orgId: string, userId?: string) {\n return this.timesheetRepository.getTimesheets(orgId, userId);\n }\n\n public async getTimesheetsWithTotalHours(orgId: string, userId?: string) {\n const timesheets = await this.timesheetRepository.getTimesheets(orgId, userId);\n const timeRecords: (ITimeRecord & { _id?: Object })[] = await this.timeRecordRepository.getTimeRecords(orgId, userId);\n return timesheets.map((timesheet) => {\n const sheetTotalDuration = timeRecords\n .filter(\n (tr) =>\n timesheet.timeRecordsId?.includes(tr._id.toString()),\n )\n .reduce(\n (duration, tr) =>\n duration + Math.floor((moment(tr.endTime).valueOf() - moment(tr.startTime).valueOf()) / 1000),\n 0,\n );\n return {\n id: timesheet.id,\n startDate: timesheet.startDate,\n endDate: timesheet.endDate,\n state: timesheet.state,\n userId: timesheet.userId,\n orgId,\n approvedBy: timesheet.approvedBy,\n approvedOn: timesheet.approvedOn,\n submittedOn: timesheet.submittedOn,\n updatedBy: timesheet.updatedBy,\n updatedOn: timesheet.updatedOn,\n totalDuration: sheetTotalDuration,\n };\n });\n }\n\n public async getDurationTimesheets(orgId: string, start: Date, end: Date) {\n const timesheets = await this.timesheetRepository.getOrganizationTimesheets(orgId);\n return timesheets.filter(\n (sh) =>\n moment(start).format('YYYY-MM-DD') === moment(sh.startDate).format('YYYY-MM-DD') &&\n moment(end).format('YYYY-MM-DD') === moment(sh.endDate).format('YYYY-MM-DD'),\n );\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest) {\n return this.timesheetRepository.createTimesheet(userId, orgId, request);\n }\n\n public async updateTimesheet(\n userId: string,\n orgId: string,\n sheetId: string,\n request: ITimesheetCreateRequest,\n userContext?: any,\n ) {\n try {\n await this.timesheetRepository.updateTimesheet(orgId, sheetId, request);\n if (request.state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n this.timeRecordService.approveTimeRecords(orgId, sheetId, request.startDate, request.endDate);\n } else if (request.state === ITimesheetState.DENYED) {\n // approve time records from startDate to endDate\n this.timeRecordService.disapproveTimeRecords(orgId, sheetId);\n }\n const resourceUri = generateOrgUri(orgId, IConfigFragmentName.settings);\n const { settings } = (await this.preferencesService.viewerSettings({\n target: ConfigurationTarget.ORGANIZATION_RESOURCE,\n settingsResource: resourceUri,\n })) as any;\n if (\n request.state === ITimesheetState.APPROVED &&\n settings.timetracker.notifications.approvalNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet approved';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.TIMESHEET_APPROVAL;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n }\n if (\n request.state === ITimesheetState.SUBMITTED &&\n settings.timetracker.notifications.submitNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet submitted';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.SUBMIT_TIME;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n\n return true;\n }\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const timesheet = await this.timesheetRepository.updateTimesheetStatus(orgId, sheetId, state);\n console.log('updateTimesheetStatus.timesheet =>', timesheet);\n if (state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n console.log('APPROVED');\n }\n\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string) {\n return this.timesheetRepository.removeTimesheet(userId, orgId, sheetId);\n }\n\n private sendMail(topic, to, from, templateId, templateVars) {\n return this.callAction<void, IMailerServicesendArgs>(\n IMailServiceAction.send,\n {\n request: {\n topic,\n to,\n templateId,\n from,\n variables: templateVars,\n },\n },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","import { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimeRecords, ITimeRecord, } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeRecordModel extends ITimeRecord, Document {\n id?: any;\n}\n\nexport interface ITimeRecordsModel extends ITimeRecords, Document {\n id: any;\n timeRecords: ITimeRecordModel[];\n}\n\nconst PauseStatusSchema = new Schema({\n pausedTime: { type: Date },\n restartTime: { type: Date },\n});\n\n// ===> TimeRecord\nconst TimeRecordSchema = new Schema({\n userId: { type: String, index: true },\n startTime: { type: Date },\n endTime: { type: Date, default: null },\n taskName: { type: String },\n description: { type: String },\n taskId: { type: String }, // ----> task\n tags: { type: [String] },\n isBillable: { type: Boolean },\n projectId: { type: String }, // ----> project\n timesheetId: { type: String }, // ----> timesheet\n isPause: { type: Boolean, default: false },\n isTimeout: { type: Boolean, default: false },\n pauseStatus: { type: [PauseStatusSchema] }\n});\n\nTimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 } as any);\n\nconst TimeRecordsSchema = new Schema({\n orgId: { type: String, index: true },\n timeRecords: [TimeRecordSchema],\n});\n\nTimeRecordSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeRecordSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeRecordsSchema.set('toObject', { virtuals: true });\n\nexport type TimeRecordsModelType = Model<ITimeRecordsModel>;\n\nexport const TimeRecordsModelFunc: (db: Connection) => TimeRecordsModelType = (db) =>\n db.model<ITimeRecordsModel>('timerecords', TimeRecordsSchema);\n","import { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimesheets, ITimesheet } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeSheetModel extends ITimesheet, Document {\n id?: any;\n}\nexport interface ITimesheetsModel extends ITimesheets, Document {\n id: any;\n timesheets: ITimeSheetModel[];\n}\n\nenum TimesheetState {\n OPEN,\n APPROVED_PENDING,\n APPROVED,\n APPROVED_FINALIZED,\n DENYED,\n SUBMITTED,\n DENYED_FINALIZED,\n}\n\n// ===> Timesheet\nconst TimesheetSchema = new Schema({\n userId: { type: String, index: true },\n startDate: { type: Date },\n endDate: { type: Date },\n state: { type: TimesheetState },\n submittedOn: { type: Date },\n approvedOn: { type: Date },\n approvedBy: { type: String },\n updatedBy: { type: String },\n updatedOn: { type: Date },\n timeRecordsId: { type: [String] },\n});\n\nconst TimesheetsSchema = new Schema({\n orgId: { type: String, index: true },\n timesheets: [TimesheetSchema],\n});\n\nTimesheetsSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimesheetsSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimesheetsSchema.set('toObject', { virtuals: true });\n\nexport type TimesheetsModelType = Model<ITimesheetsModel>;\n\nexport const TimesheetsModelFunc: (db: Connection) => TimesheetsModelType = (db) =>\n db.model<ITimesheetsModel>('timesheets', TimesheetsSchema);\n","/* eslint-disable no-underscore-dangle */\nimport { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimeTracker, ITimeRecord, ITimesheet } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeRecordModel extends ITimeRecord, Document {\n id?: any;\n}\nexport interface ITimeSheetModel extends ITimesheet, Document {\n id?: any;\n}\nexport interface ITimeTrackerModel extends ITimeTracker, Document {\n id: any;\n timeRecords: ITimeRecordModel[];\n timesheets: ITimeSheetModel[];\n}\n\nenum TimesheetState {\n OPEN,\n APPROVED_PENDING,\n APPROVED,\n APPROVED_FINALIZED,\n DENYED,\n SUBMITTED,\n DENYED_FINALIZED,\n}\n\nconst TimeActivitySchema = new Schema({\n count: { type: Number },\n isPaused: { type: Boolean },\n isTimeout: { type: Boolean },\n startTime: { type: Number },\n endTime: { type: Number },\n});\n\nconst PauseStatusSchema = new Schema({\n pausedTime: { type: Date },\n restartTime: { type: Date },\n});\n\n// ===> TimeRecord\nconst TimeRecordSchema = new Schema({\n userId: { type: String, index: true },\n startTime: { type: Date },\n endTime: { type: Date, default: null },\n taskName: { type: String },\n description: { type: String },\n taskId: { type: String }, // ----> task\n tags: { type: [String] },\n isBillable: { type: Boolean },\n projectId: { type: String }, // ----> project\n timesheetId: { type: String }, // ----> timesheet\n activities: [TimeActivitySchema],\n isPause: { type: Boolean, default: false },\n isTimeout: { type: Boolean, default: false },\n pauseStatus: { type: [PauseStatusSchema] }\n});\n\nTimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 } as any);\n\n// ===> Timesheet\nconst TimesheetSchema = new Schema({\n userId: { type: String, index: true },\n startDate: { type: Date },\n endDate: { type: Date },\n state: { type: TimesheetState },\n submittedOn: { type: Date },\n approvedOn: { type: Date },\n approvedBy: { type: String },\n updatedBy: { type: String },\n updatedOn: { type: Date },\n timeRecordsId: { type: [String] },\n});\n\nconst TimeTrackerSchema = new Schema({\n orgId: { type: String, index: true },\n timeRecords: [TimeRecordSchema],\n timesheets: [TimesheetSchema],\n});\n\nTimeRecordSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeRecordSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeTrackerSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.set('toObject', { virtuals: true });\n\nexport type TimeTrackerModelType = Model<ITimeTrackerModel>;\n\nexport const TimeTrackerModelFunc: (db: Connection) => TimeTrackerModelType = (db) =>\n db.model<ITimeTrackerModel>('timetracker', TimeTrackerSchema);\n","export * from './timerecord-repository';\nexport * from './timesheet-repository';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\nimport * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport { ITimeRecordRequest, ITimeRecord, ITimeRecords } from '@admin-layout/timetracker-core';\nimport { ITimeRecordRepository } from '../../interfaces';\nimport { TimeRecordsModelFunc, TimeRecordsModelType, ITimeRecordModel, ITimeRecordsModel } from '../models/timerecords-model';\nimport * as _ from 'lodash';\n\n@injectable()\nexport class TimeRecordRepository implements ITimeRecordRepository {\n private timeRecordsModel: TimeRecordsModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n @inject('Logger')\n logger: Logger,\n ) {\n this.logger = logger.child({ className: 'TimeRecordRepository' });\n this.timeRecordsModel = TimeRecordsModelFunc(db);\n }\n\n public async getTimeRecords(\n orgId: string, userId?: string | RegExp, from?: Date, until?: Date\n ): Promise<Array<ITimeRecord>> {\n if (!userId) {\n userId = /.*/;\n }\n let match: any = {\n 'timeRecords.userId': userId,\n };\n if (from) {\n match = { ...match, 'timeRecords.startTime': { $gte: from } };\n }\n if (until) {\n match = { ...match, 'timeRecords.endTime': { $lte: until } };\n }\n\n const result = await this.timeRecordsModel.aggregate([\n {\n $match: {\n orgId,\n },\n },\n {\n $unwind: '$timeRecords',\n },\n {\n $match: {\n ...match,\n },\n },\n {\n $group: {\n _id: '$orgId',\n timeRecords: {\n $push: '$timeRecords',\n },\n },\n },\n {\n $project: {\n orgId: 1,\n timeRecords: 1,\n },\n },\n ]);\n if (result.length === 0) {\n return [];\n }\n return result[0].timeRecords;\n }\n\n public async getOrganizationTimeRecords(orgId: string): Promise<ITimeRecordModel[]> {\n const trackDoc = await this.timeRecordsModel.findOne({ orgId });\n if (trackDoc && trackDoc.timeRecords) {\n return trackDoc.timeRecords;\n }\n return [];\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n const trackDoc = await this.timeRecordsModel.findOne({ orgId });\n if (trackDoc) {\n let res;\n if (trackDoc.timeRecords) res = trackDoc.timeRecords.find((tr) => tr.userId === userId && tr.endTime === null);\n return res;\n }\n return null;\n }\n\n public async createTimeRecord(\n userId: string,\n orgId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeRecords>> {\n try {\n const response = await this.timeRecordsModel.findOneAndUpdate(\n { orgId },\n { orgId, $push: { timeRecords: request } },\n {\n upsert: true,\n new: true,\n projection: { userId, orgId, timeRecords: { $elemMatch: { startTime: request.startTime } } },\n },\n );\n return response.toObject() as ITimeRecordsModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimeRecord(\n userId: string,\n orgId: string,\n recordId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeRecordsModel>> {\n try {\n if (recordId === null || recordId === undefined) throw new Error('TimeRecord id not specified!');\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timeRecords.$.${key}`]: value,\n };\n });\n const response = await this.timeRecordsModel.findOneAndUpdate(\n { orgId, timeRecords: { $elemMatch: { _id: recordId } } },\n {\n $set: {\n ...setRequest,\n },\n },\n {\n new: true,\n projection: {\n userId,\n orgId,\n timeRecords: { $elemMatch: { _id: recordId } },\n },\n },\n );\n return response.toObject() as ITimeRecordsModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n try {\n const result = await this.timeRecordsModel.update(\n {\n orgId,\n },\n {\n $pull: { timeRecords: { _id: recordId } },\n },\n );\n if (result.nModified !== 1) {\n throw new Error('TimeRecord is not modified');\n }\n return { userId, orgId, timeRecords: [{ _id: recordId } as any] as ITimeRecord[] };\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n try {\n const trackerDoc = await this.timeRecordsModel.find({ orgId });\n if (trackerDoc && trackerDoc.length > 0) {\n const timeRecords = trackerDoc[0].timeRecords.filter(\n (tr) => tr.startTime < startTime || tr.startTime > endTime || tr.projectId !== projectId,\n );\n await this.timeRecordsModel.update(\n {\n orgId,\n },\n {\n timeRecords,\n },\n );\n return true;\n }\n return false;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n try {\n await this.timeRecordsModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': sheetId } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.startTime': { $gte: startDate },\n 'el.endTime': { $lte: endDate },\n 'el.timesheetId': null,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('approveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n try {\n await this.timeRecordsModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': null } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.timesheetId': sheetId,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('disapproveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n}\n","import * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport { ITimesheetCreateRequest, ITimesheetState } from '@admin-layout/timetracker-core';\nimport * as _ from 'lodash';\nimport { CommonType } from '@common-stack/core';\nimport { ServiceBroker } from 'moleculer';\nimport { TimesheetsModelFunc, TimesheetsModelType, ITimeSheetModel } from '../models/timesheets-model';\nimport { ITimesheetRepository } from '../../interfaces';\n\n@injectable()\nexport class TimesheetRepository implements ITimesheetRepository {\n private timesheetsModel: TimesheetsModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n @inject('Logger')\n logger: Logger,\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n ) {\n this.logger = logger.child({ className: 'TimesheetRepository' });\n this.timesheetsModel = TimesheetsModelFunc(db);\n }\n\n public async getOrganizationTimesheets(orgId: string): Promise<ITimeSheetModel[]> {\n const trackDoc = await this.timesheetsModel.findOne({ orgId });\n if (trackDoc && trackDoc.timesheets) {\n return trackDoc.timesheets;\n }\n return [];\n }\n\n public async getTimesheets(orgId: string, userId?: string): Promise<ITimeSheetModel[]> {\n const timesheets = await this.getOrganizationTimesheets(orgId);\n return timesheets.filter((sheet) => !userId || sheet.userId === userId);\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest): Promise<boolean> {\n try {\n const response = await this.timesheetsModel.update(\n { orgId },\n { $push: { timesheets: request } },\n { upsert: true },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheet(orgId: string, sheetId: string, request: ITimesheetCreateRequest) {\n try {\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timesheets.$.${key}`]: value,\n };\n });\n const response = await this.timesheetsModel.update(\n { orgId, timesheets: { $elemMatch: { _id: sheetId } } },\n { $set: { ...setRequest } },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const response = await this.timesheetsModel.update(\n {\n orgId,\n $elemMatch: { 'timesheets.id': sheetId },\n },\n {\n $set: {\n 'timesheets.$.status': state,\n },\n },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string): Promise<boolean> {\n try {\n await this.timesheetsModel.update(\n {\n orgId,\n },\n {\n $pull: { timesheets: { _id: sheetId } },\n },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n}\n","module.exports = require(\"@adminide-stack/core\");","module.exports = require(\"@common-stack/core\");","module.exports = require(\"@common-stack/server-core\");","module.exports = require(\"@vscode-alt/monaco-editor/esm/vs/nls\");","module.exports = require(\"@workbench-stack/core\");","module.exports = require(\"envalid\");","module.exports = require(\"graphql-subscriptions\");","module.exports = require(\"inversify\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"mongoose\");"],"sourceRoot":""}
@@ -1,11 +1,11 @@
1
- import { ITimeRecordRequest, ITimeRecord, ITimeTracker } from '@admin-layout/timetracker-core';
1
+ import { ITimeRecordRequest, ITimeRecord, ITimeRecords } from '@admin-layout/timetracker-core';
2
2
  export interface ITimeRecordRepository {
3
3
  getTimeRecords(orgId: string, userId?: string, startTime?: Date, endTime?: Date): Promise<Array<ITimeRecord>>;
4
4
  getOrganizationTimeRecords(orgId: string): Promise<Array<ITimeRecord>>;
5
5
  getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord>;
6
- createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
7
- updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
8
- removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<Partial<ITimeTracker>>;
6
+ createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
7
+ updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
8
+ removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<Partial<ITimeRecords>>;
9
9
  removeDurationTimeRecords(userId: string, orgId: string, startTime: Date, endTime: Date, projectId: string): Promise<boolean>;
10
10
  approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date): any;
11
11
  disapproveTimeRecords(orgId: string, sheetId: string): any;
@@ -1,9 +1,9 @@
1
- import { ITimeRecord, ITimeRecordRequest, ITimeTracker } from '@admin-layout/timetracker-core';
1
+ import { ITimeRecord, ITimeRecordRequest, ITimeRecords } from '@admin-layout/timetracker-core';
2
2
  export interface ITimeRecordService {
3
3
  getTimeRecords(orgId: string, userId?: string): Promise<Array<ITimeRecord>>;
4
4
  getDurationTimeRecords(orgId: string, startTime: Date, endTime: Date, userId?: string): Promise<Array<ITimeRecord>>;
5
5
  getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord>;
6
- createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
6
+ createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
7
7
  updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<boolean>;
8
8
  removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<boolean>;
9
9
  removeDurationTimeRecords(userId: string, orgId: string, startTime: Date, endTime: Date, projectId: string): Promise<boolean>;
@@ -0,0 +1,12 @@
1
+ import { Model, Document, Connection } from 'mongoose';
2
+ import { ITimeRecords, ITimeRecord } from '@admin-layout/timetracker-core';
3
+ export declare type Maybe<T> = T | null;
4
+ export interface ITimeRecordModel extends ITimeRecord, Document {
5
+ id?: any;
6
+ }
7
+ export interface ITimeRecordsModel extends ITimeRecords, Document {
8
+ id: any;
9
+ timeRecords: ITimeRecordModel[];
10
+ }
11
+ export declare type TimeRecordsModelType = Model<ITimeRecordsModel>;
12
+ export declare const TimeRecordsModelFunc: (db: Connection) => TimeRecordsModelType;
@@ -0,0 +1,12 @@
1
+ import { Model, Document, Connection } from 'mongoose';
2
+ import { ITimesheets, ITimesheet } from '@admin-layout/timetracker-core';
3
+ export declare type Maybe<T> = T | null;
4
+ export interface ITimeSheetModel extends ITimesheet, Document {
5
+ id?: any;
6
+ }
7
+ export interface ITimesheetsModel extends ITimesheets, Document {
8
+ id: any;
9
+ timesheets: ITimeSheetModel[];
10
+ }
11
+ export declare type TimesheetsModelType = Model<ITimesheetsModel>;
12
+ export declare const TimesheetsModelFunc: (db: Connection) => TimesheetsModelType;
@@ -1,17 +1,17 @@
1
1
  import * as Logger from 'bunyan';
2
2
  import * as mongoose from 'mongoose';
3
- import { ITimeRecordRequest, ITimeRecord, ITimeTracker } from '@admin-layout/timetracker-core';
4
- import { ITimeRecordModel, ITimeTrackerModel } from '../models/timetracker-model';
3
+ import { ITimeRecordRequest, ITimeRecord, ITimeRecords } from '@admin-layout/timetracker-core';
5
4
  import { ITimeRecordRepository } from '../../interfaces';
5
+ import { ITimeRecordModel, ITimeRecordsModel } from '../models/timerecords-model';
6
6
  export declare class TimeRecordRepository implements ITimeRecordRepository {
7
- private timeTrackerModel;
7
+ private timeRecordsModel;
8
8
  private logger;
9
9
  constructor(db: mongoose.Connection, logger: Logger);
10
- getTimeRecords(orgId: string, userId?: string | RegExp, from?: Date, until?: Date): Promise<any>;
10
+ getTimeRecords(orgId: string, userId?: string | RegExp, from?: Date, until?: Date): Promise<Array<ITimeRecord>>;
11
11
  getOrganizationTimeRecords(orgId: string): Promise<ITimeRecordModel[]>;
12
12
  getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord>;
13
- createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
14
- updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTrackerModel>>;
13
+ createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
14
+ updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecordsModel>>;
15
15
  removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<{
16
16
  userId: string;
17
17
  orgId: string;
@@ -2,11 +2,11 @@ import * as Logger from 'bunyan';
2
2
  import * as mongoose from 'mongoose';
3
3
  import { ITimesheetCreateRequest, ITimesheetState } from '@admin-layout/timetracker-core';
4
4
  import { ServiceBroker } from 'moleculer';
5
- import { ITimeSheetModel } from '../models/timetracker-model';
5
+ import { ITimeSheetModel } from '../models/timesheets-model';
6
6
  import { ITimesheetRepository } from '../../interfaces';
7
7
  export declare class TimesheetRepository implements ITimesheetRepository {
8
8
  private broker;
9
- private timeTrackerModel;
9
+ private timesheetsModel;
10
10
  private logger;
11
11
  constructor(db: mongoose.Connection, logger: Logger, broker: ServiceBroker);
12
12
  getOrganizationTimesheets(orgId: string): Promise<ITimeSheetModel[]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@admin-layout/timetracker-module-server",
3
- "version": "1.0.3-alpha.25",
3
+ "version": "1.0.3-alpha.29",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -38,7 +38,7 @@
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "@admin-layout/timetracker-core": "1.0.3-alpha.25",
41
+ "@admin-layout/timetracker-core": "1.0.3-alpha.29",
42
42
  "@container-stack/mailing-api": "^0.0.26-61",
43
43
  "humanize-duration": "^3.24.0",
44
44
  "moment": "^2.29.1"
@@ -60,5 +60,5 @@
60
60
  "typescript": {
61
61
  "definition": "lib/index.d.ts"
62
62
  },
63
- "gitHead": "c63cfc2c7ac88a7bbd25b0d2ea3b3aa0ea4a2bab"
63
+ "gitHead": "fcbb1ac3f3870c0244a5325d0801217c7a6dc412"
64
64
  }