@kaspernj/api-maker 1.0.2091 → 1.0.2094

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.
@@ -4,18 +4,24 @@ export default class ApiMakerCanCan {
4
4
  abilitiesToLoad: any[];
5
5
  abilitiesToLoadData: any[];
6
6
  abilitiesGeneration: number;
7
+ cacheKey: number;
7
8
  loadingCount: number;
9
+ reloadPromises: Map<any, any>;
10
+ resetPromise: any;
11
+ resettingGeneration: any;
8
12
  events: EventEmitter<string | symbol, any>;
9
13
  lock: ReadersWriterLock;
10
14
  can(ability: any, subject: any): any;
11
15
  findAbility(ability: any, subject: any): any;
12
16
  isAbilityLoaded(ability: any, subject: any): boolean;
13
17
  isReloading(): boolean;
18
+ getCacheKey(): number;
14
19
  loadAbilities(abilities: any): Promise<void>;
15
20
  loadAbility(ability: any, subject: any): Promise<any>;
16
21
  queueAbilitiesRequest(): void;
17
22
  queueAbilitiesRequestTimeout: NodeJS.Timeout;
18
- resetAbilities(): Promise<void>;
23
+ resetAbilities(): Promise<any>;
24
+ reloadAbilities(abilities: any, reloadKey: any): Promise<any>;
19
25
  sendAbilitiesRequest: () => Promise<void>;
20
26
  }
21
27
  import { EventEmitter } from "eventemitter3";
@@ -1 +1 @@
1
- {"version":3,"file":"can-can.d.ts","sourceRoot":"/src/","sources":["can-can.js"],"names":[],"mappings":"AASA;IASE,sBAIC;IAZD,iBAAc;IACd,uBAAoB;IACpB,2BAAwB;IACxB,4BAAuB;IACvB,qBAAgB;IAChB,2CAA2B;IAC3B,wBAA8B;IAQ9B,qCAoBC;IAED,6CAuBC;IAED,qDAQC;IAED,uBAEC;IAED,6CAuBC;IAED,sDAsBC;IAED,8BAMC;IADC,6CAA4E;IAG9E,gCAOC;IAED,0CAiCC;CACF;6BAvL0B,eAAe;kCACV,YAAY"}
1
+ {"version":3,"file":"can-can.d.ts","sourceRoot":"/src/","sources":["can-can.js"],"names":[],"mappings":"AASA;IAaE,sBAIC;IAhBD,iBAAc;IACd,uBAAoB;IACpB,2BAAwB;IACxB,4BAAuB;IACvB,iBAAY;IACZ,qBAAgB;IAChB,8BAA0B;IAC1B,kBAAmB;IACnB,yBAA0B;IAC1B,2CAA2B;IAC3B,wBAA8B;IAQ9B,qCAoBC;IAED,6CAuBC;IAED,qDAQC;IAED,uBAEC;IAED,sBAEC;IAED,6CA4BC;IAED,sDAsBC;IAED,8BAMC;IADC,6CAA4E;IAG9E,+BAkBC;IAED,8DAiBC;IAED,0CA4CC;CACF;6BA7O0B,eAAe;kCACV,YAAY"}
package/build/can-can.js CHANGED
@@ -10,7 +10,11 @@ export default class ApiMakerCanCan {
10
10
  abilitiesToLoad = [];
11
11
  abilitiesToLoadData = [];
12
12
  abilitiesGeneration = 0;
13
+ cacheKey = 0;
13
14
  loadingCount = 0;
15
+ reloadPromises = new Map();
16
+ resetPromise = null;
17
+ resettingGeneration = null;
14
18
  events = new EventEmitter();
15
19
  lock = new ReadersWriterLock();
16
20
  static current() {
@@ -64,9 +68,14 @@ export default class ApiMakerCanCan {
64
68
  return false;
65
69
  }
66
70
  isReloading() {
67
- return this.loadingCount > 0;
71
+ return this.loadingCount > 0 || this.resettingGeneration !== null;
72
+ }
73
+ getCacheKey() {
74
+ return this.cacheKey;
68
75
  }
69
76
  async loadAbilities(abilities) {
77
+ const generation = this.abilitiesGeneration;
78
+ this.loadingCount += 1;
70
79
  try {
71
80
  await this.lock.read(async () => {
72
81
  const promises = [];
@@ -87,6 +96,8 @@ export default class ApiMakerCanCan {
87
96
  finally {
88
97
  if (this.loadingCount > 0)
89
98
  this.loadingCount -= 1;
99
+ if (this.resettingGeneration === generation)
100
+ this.resettingGeneration = null;
90
101
  }
91
102
  }
92
103
  loadAbility(ability, subject) {
@@ -115,12 +126,41 @@ export default class ApiMakerCanCan {
115
126
  this.queueAbilitiesRequestTimeout = setTimeout(this.sendAbilitiesRequest, 0);
116
127
  }
117
128
  async resetAbilities() {
118
- await this.lock.write(() => {
119
- this.abilities = [];
120
- this.abilitiesGeneration += 1;
121
- this.loadingCount += 1;
122
- });
123
- this.events.emit("onResetAbilities");
129
+ if (this.resetPromise)
130
+ return this.resetPromise;
131
+ this.resetPromise = (async () => {
132
+ await this.lock.write(() => {
133
+ this.abilities = [];
134
+ this.abilitiesGeneration += 1;
135
+ this.resettingGeneration = this.abilitiesGeneration;
136
+ this.cacheKey += 1;
137
+ });
138
+ this.events.emit("onResetAbilities");
139
+ })();
140
+ try {
141
+ await this.resetPromise;
142
+ }
143
+ finally {
144
+ this.resetPromise = null;
145
+ }
146
+ }
147
+ async reloadAbilities(abilities, reloadKey) {
148
+ if (reloadKey && this.reloadPromises.has(reloadKey)) {
149
+ return this.reloadPromises.get(reloadKey);
150
+ }
151
+ const promise = (async () => {
152
+ await this.resetAbilities();
153
+ await this.loadAbilities(abilities);
154
+ })();
155
+ if (reloadKey)
156
+ this.reloadPromises.set(reloadKey, promise);
157
+ try {
158
+ await promise;
159
+ }
160
+ finally {
161
+ if (reloadKey)
162
+ this.reloadPromises.delete(reloadKey);
163
+ }
124
164
  }
125
165
  sendAbilitiesRequest = async () => {
126
166
  const generation = this.abilitiesGeneration;
@@ -128,12 +168,22 @@ export default class ApiMakerCanCan {
128
168
  const abilitiesToLoadData = this.abilitiesToLoadData;
129
169
  this.abilitiesToLoad = [];
130
170
  this.abilitiesToLoadData = [];
171
+ let abilities = [];
172
+ let didFail = false;
131
173
  // Load abilities from backend
132
- const result = await Services.current().sendRequest("CanCan::LoadAbilities", {
133
- request: abilitiesToLoadData
134
- });
135
- const abilities = digg(result, "abilities");
136
- if (generation !== this.abilitiesGeneration) {
174
+ try {
175
+ const result = await Services.current().sendRequest("CanCan::LoadAbilities", {
176
+ request: abilitiesToLoadData
177
+ });
178
+ const responseAbilities = digg(result, "abilities");
179
+ if (Array.isArray(responseAbilities))
180
+ abilities = responseAbilities;
181
+ }
182
+ catch (error) {
183
+ didFail = true;
184
+ console.error("Failed to load abilities", error);
185
+ }
186
+ if (generation !== this.abilitiesGeneration || didFail) {
137
187
  for (const abilityData of abilitiesToLoad) {
138
188
  for (const callback of abilityData.callbacks) {
139
189
  callback();
@@ -143,6 +193,7 @@ export default class ApiMakerCanCan {
143
193
  }
144
194
  // Set the loaded abilities
145
195
  this.abilities = this.abilities.concat(abilities);
196
+ this.cacheKey += 1;
146
197
  // Call the callbacks that are waiting for the ability to have been loaded
147
198
  for (const abilityData of abilitiesToLoad) {
148
199
  for (const callback of abilityData.callbacks) {
@@ -151,4 +202,4 @@ export default class ApiMakerCanCan {
151
202
  }
152
203
  };
153
204
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2QsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFDeEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLFlBQVksR0FBRyxDQUFDLENBQUE7SUFDaEIsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDM0IsSUFBSSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQTtJQUU5QixNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCO1lBQUUsTUFBTSxDQUFDLHFCQUFxQixHQUFHLElBQUksY0FBYyxFQUFFLENBQUE7UUFFdEYsT0FBTyxNQUFNLENBQUMscUJBQXFCLENBQUE7SUFDckMsQ0FBQztJQUVELEdBQUcsQ0FBRSxPQUFPLEVBQUUsT0FBTztRQUNuQixJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTVELElBQUksWUFBWSxLQUFLLFNBQVMsRUFB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QUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtRQUVwRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQTtRQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFBO1FBRTdCLDhCQUE4QjtRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEVBQUU7WUFDM0UsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDLENBQUE7UUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRTNDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVDLEtBQUssTUFBTSxXQUFXLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzFDLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM3QyxRQUFRLEVBQUUsQ0FBQTtnQkFDWixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU07UUFDUixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFakQsMEVBQTBFO1FBQzFFLEtBQUssTUFBTSxXQUFXLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdDLFFBQVEsRUFBRSxDQUFBO1lBQ1osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0IHtSZWFkZXJzV3JpdGVyTG9ja30gZnJvbSBcImVwaWMtbG9ja3NcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBTZXJ2aWNlcyBmcm9tIFwiLi9zZXJ2aWNlcy5qc1wiXG5cbmNvbnN0IHNoYXJlZCA9IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ2FuQ2FuIHtcbiAgYWJpbGl0aWVzID0gW11cbiAgYWJpbGl0aWVzVG9Mb2FkID0gW11cbiAgYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IFtdXG4gIGFiaWxpdGllc0dlbmVyYXRpb24gPSAwXG4gIGxvYWRpbmdDb3VudCA9IDBcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGxvY2sgPSBuZXcgUmVhZGVyc1dyaXRlckxvY2soKVxuXG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4pIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4gPSBuZXcgQXBpTWFrZXJDYW5DYW4oKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW5cbiAgfVxuXG4gIGNhbiAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGxldCBhYmlsaXR5VG9Vc2UgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eSlcbiAgICBjb25zdCBmb3VuZEFiaWxpdHkgPSB0aGlzLmZpbmRBYmlsaXR5KGFiaWxpdHlUb1VzZSwgc3ViamVjdClcblxuICAgIGlmIChmb3VuZEFiaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuaXNSZWxvYWRpbmcoKSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGxldCBzdWJqZWN0TGFiZWwgPSBzdWJqZWN0XG5cbiAgICAgIC8vIFRyYW5zbGF0ZSByZXNvdXJjZS1tb2RlbHMgaW50byBjbGFzcyBuYW1lIHN0cmluZ3NcbiAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICBzdWJqZWN0TGFiZWwgPSBkaWdnKHN1YmplY3QubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHthYmlsaXR5VG9Vc2V9YCwge2FiaWxpdGllczogdGhpcy5hYmlsaXRpZXMsIGFiaWxpdHksIHN1YmplY3R9KVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRpZ2coZm91bmRBYmlsaXR5LCBcImNhblwiKVxuICAgIH1cbiAgfVxuXG4gIGZpbmRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuYWJpbGl0aWVzLmZpbmQoKGFiaWxpdHlEYXRhKSA9PiB7XG4gICAgICBjb25zdCBhYmlsaXR5RGF0YVN1YmplY3QgPSBkaWdnKGFiaWxpdHlEYXRhLCBcInN1YmplY3RcIilcbiAgICAgIGNvbnN0IGFiaWxpdHlEYXRhQWJpbGl0eSA9IGRpZ2coYWJpbGl0eURhdGEsIFwiYWJpbGl0eVwiKVxuXG4gICAgICBpZiAoYWJpbGl0eURhdGFBYmlsaXR5ID09IGFiaWxpdHkpIHtcbiAgICAgICAgLy8gSWYgYWN0dWFsbHkgc2FtZSBjbGFzc1xuICAgICAgICBpZiAoYWJpbGl0eURhdGFTdWJqZWN0ID09IHN1YmplY3QpIHJldHVybiB0cnVlXG5cbiAgICAgICAgLy8gU29tZXRpbWVzIGluIGRldiB3aGVuIHVzaW5nIGxpbmtpbmcgaXQgd2lsbCBhY3R1YWxseSBiZSB0d28gZGlmZmVyZW50IGJ1dCBpZGVudGljYWwgcmVzb3VyY2UgY2xhc3Nlc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIHN1YmplY3QgPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgc3ViamVjdC5tb2RlbENsYXNzRGF0YSAmJlxuICAgICAgICAgIHR5cGVvZiBhYmlsaXR5RGF0YVN1YmplY3QgPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgYWJpbGl0eURhdGFTdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhICYmXG4gICAgICAgICAgZGlnZyhzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKSA9PSBkaWdnKGFiaWxpdHlEYXRhU3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9KVxuICB9XG5cbiAgaXNBYmlsaXR5TG9hZGVkIChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaXNSZWxvYWRpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgfVxuXG4gIGFzeW5jIGxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvY2sucmVhZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBhYmlsaXR5RGF0YVswXVxuXG4gICAgICAgICAgaWYgKCFzdWJqZWN0KSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3ViamVjdCBnaXZlbiBpbiBhYmlsaXRpZXM6ICR7c3ViamVjdH0gLSAke0pTT04uc3RyaW5naWZ5KGFiaWxpdGllcyl9YClcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJpbGl0eURhdGFbMV0pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IG9mIGFiaWxpdGllcyBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5RGF0YVsxXX06ICR7YWJpbGl0eURhdGFbMV19YClcblxuICAgICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXR5RGF0YVsxXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMubG9hZEFiaWxpdHkoYWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgfSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMubG9hZGluZ0NvdW50ID4gMCkgdGhpcy5sb2FkaW5nQ291bnQgLT0gMVxuICAgIH1cbiAgfVxuXG4gIGxvYWRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuXG4gICAgICBpZiAodGhpcy5pc0FiaWxpdHlMb2FkZWQobm9ybWFsaXplZEFiaWxpdHksIHN1YmplY3QpKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5hYmlsaXRpZXNUb0xvYWQuZmluZCgoYWJpbGl0eVRvTG9hZCkgPT4gZGlnZyhhYmlsaXR5VG9Mb2FkLCBcImFiaWxpdHlcIikgPT0gbm9ybWFsaXplZEFiaWxpdHkgJiZcbiAgICAgICAgZGlnZyhhYmlsaXR5VG9Mb2FkLCBcInN1YmplY3RcIikgPT0gc3ViamVjdFxuICAgICAgKVxuXG4gICAgICBpZiAoZm91bmRBYmlsaXR5KSB7XG4gICAgICAgIGZvdW5kQWJpbGl0eS5jYWxsYmFja3MucHVzaChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQucHVzaCh7YWJpbGl0eTogbm9ybWFsaXplZEFiaWxpdHksIGNhbGxiYWNrczogW3Jlc29sdmVdLCBzdWJqZWN0fSlcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0fSlcblxuICAgICAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHF1ZXVlQWJpbGl0aWVzUmVxdWVzdCAoKSB7XG4gICAgaWYgKHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dClcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2VuZEFiaWxpdGllc1JlcXVlc3QsIDApXG4gIH1cblxuICBhc3luYyByZXNldEFiaWxpdGllcyAoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2NrLndyaXRlKCgpID0+IHtcbiAgICAgIHRoaXMuYWJpbGl0aWVzID0gW11cbiAgICAgIHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbiArPSAxXG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSAxXG4gICAgfSlcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25SZXNldEFiaWxpdGllc1wiKVxuICB9XG5cbiAgc2VuZEFiaWxpdGllc1JlcXVlc3QgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvblxuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZCA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YVxuXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQgPSBbXVxuICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IFtdXG5cbiAgICAvLyBMb2FkIGFiaWxpdGllcyBmcm9tIGJhY2tlbmRcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJDYW5DYW46OkxvYWRBYmlsaXRpZXNcIiwge1xuICAgICAgcmVxdWVzdDogYWJpbGl0aWVzVG9Mb2FkRGF0YVxuICAgIH0pXG4gICAgY29uc3QgYWJpbGl0aWVzID0gZGlnZyhyZXN1bHQsIFwiYWJpbGl0aWVzXCIpXG5cbiAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllc1RvTG9hZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGFiaWxpdHlEYXRhLmNhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxvYWRlZCBhYmlsaXRpZXNcbiAgICB0aGlzLmFiaWxpdGllcyA9IHRoaXMuYWJpbGl0aWVzLmNvbmNhdChhYmlsaXRpZXMpXG5cbiAgICAvLyBDYWxsIHRoZSBjYWxsYmFja3MgdGhhdCBhcmUgd2FpdGluZyBmb3IgdGhlIGFiaWxpdHkgdG8gaGF2ZSBiZWVuIGxvYWRlZFxuICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzVG9Mb2FkKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGFiaWxpdHlEYXRhLmNhbGxiYWNrcykge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2QsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFDeEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDWixZQUFZLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzFCLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDbkIsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO0lBQzFCLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBQzNCLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUE7SUFFOUIsTUFBTSxDQUFDLE9BQU87UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtZQUFFLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO1FBRXRGLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFBO0lBQ3JDLENBQUM7SUFFRCxHQUFHLENBQUUsT0FBTyxFQUFFLE9BQU87UUFDbkIsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLFVBQVUs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QUFDO1lBQ3ZELEtBQUssTUFBTSxXQUFXLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzFDLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM3QyxRQUFRLEVBQUUsQ0FBQTtnQkFDWixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU07UUFDUixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUE7UUFFbEIsMEVBQTBFO1FBQzFFLEtBQUssTUFBTSxXQUFXLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdDLFFBQVEsRUFBRSxDQUFBO1lBQ1osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0IHtSZWFkZXJzV3JpdGVyTG9ja30gZnJvbSBcImVwaWMtbG9ja3NcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBTZXJ2aWNlcyBmcm9tIFwiLi9zZXJ2aWNlcy5qc1wiXG5cbmNvbnN0IHNoYXJlZCA9IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ2FuQ2FuIHtcbiAgYWJpbGl0aWVzID0gW11cbiAgYWJpbGl0aWVzVG9Mb2FkID0gW11cbiAgYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IFtdXG4gIGFiaWxpdGllc0dlbmVyYXRpb24gPSAwXG4gIGNhY2hlS2V5ID0gMFxuICBsb2FkaW5nQ291bnQgPSAwXG4gIHJlbG9hZFByb21pc2VzID0gbmV3IE1hcCgpXG4gIHJlc2V0UHJvbWlzZSA9IG51bGxcbiAgcmVzZXR0aW5nR2VuZXJhdGlvbiA9IG51bGxcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGxvY2sgPSBuZXcgUmVhZGVyc1dyaXRlckxvY2soKVxuXG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4pIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4gPSBuZXcgQXBpTWFrZXJDYW5DYW4oKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW5cbiAgfVxuXG4gIGNhbiAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGxldCBhYmlsaXR5VG9Vc2UgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eSlcbiAgICBjb25zdCBmb3VuZEFiaWxpdHkgPSB0aGlzLmZpbmRBYmlsaXR5KGFiaWxpdHlUb1VzZSwgc3ViamVjdClcblxuICAgIGlmIChmb3VuZEFiaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuaXNSZWxvYWRpbmcoKSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGxldCBzdWJqZWN0TGFiZWwgPSBzdWJqZWN0XG5cbiAgICAgIC8vIFRyYW5zbGF0ZSByZXNvdXJjZS1tb2RlbHMgaW50byBjbGFzcyBuYW1lIHN0cmluZ3NcbiAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICBzdWJqZWN0TGFiZWwgPSBkaWdnKHN1YmplY3QubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHthYmlsaXR5VG9Vc2V9YCwge2FiaWxpdGllczogdGhpcy5hYmlsaXRpZXMsIGFiaWxpdHksIHN1YmplY3R9KVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRpZ2coZm91bmRBYmlsaXR5LCBcImNhblwiKVxuICAgIH1cbiAgfVxuXG4gIGZpbmRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuYWJpbGl0aWVzLmZpbmQoKGFiaWxpdHlEYXRhKSA9PiB7XG4gICAgICBjb25zdCBhYmlsaXR5RGF0YVN1YmplY3QgPSBkaWdnKGFiaWxpdHlEYXRhLCBcInN1YmplY3RcIilcbiAgICAgIGNvbnN0IGFiaWxpdHlEYXRhQWJpbGl0eSA9IGRpZ2coYWJpbGl0eURhdGEsIFwiYWJpbGl0eVwiKVxuXG4gICAgICBpZiAoYWJpbGl0eURhdGFBYmlsaXR5ID09IGFiaWxpdHkpIHtcbiAgICAgICAgLy8gSWYgYWN0dWFsbHkgc2FtZSBjbGFzc1xuICAgICAgICBpZiAoYWJpbGl0eURhdGFTdWJqZWN0ID09IHN1YmplY3QpIHJldHVybiB0cnVlXG5cbiAgICAgICAgLy8gU29tZXRpbWVzIGluIGRldiB3aGVuIHVzaW5nIGxpbmtpbmcgaXQgd2lsbCBhY3R1YWxseSBiZSB0d28gZGlmZmVyZW50IGJ1dCBpZGVudGljYWwgcmVzb3VyY2UgY2xhc3Nlc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIHN1YmplY3QgPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgc3ViamVjdC5tb2RlbENsYXNzRGF0YSAmJlxuICAgICAgICAgIHR5cGVvZiBhYmlsaXR5RGF0YVN1YmplY3QgPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgYWJpbGl0eURhdGFTdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhICYmXG4gICAgICAgICAgZGlnZyhzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKSA9PSBkaWdnKGFiaWxpdHlEYXRhU3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9KVxuICB9XG5cbiAgaXNBYmlsaXR5TG9hZGVkIChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaXNSZWxvYWRpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDAgfHwgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uICE9PSBudWxsXG4gIH1cblxuICBnZXRDYWNoZUtleSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVLZXlcbiAgfVxuXG4gIGFzeW5jIGxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcykge1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb25cblxuICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IDFcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvY2sucmVhZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBhYmlsaXR5RGF0YVswXVxuXG4gICAgICAgICAgaWYgKCFzdWJqZWN0KSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3ViamVjdCBnaXZlbiBpbiBhYmlsaXRpZXM6ICR7c3ViamVjdH0gLSAke0pTT04uc3RyaW5naWZ5KGFiaWxpdGllcyl9YClcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJpbGl0eURhdGFbMV0pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IG9mIGFiaWxpdGllcyBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5RGF0YVsxXX06ICR7YWJpbGl0eURhdGFbMV19YClcblxuICAgICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXR5RGF0YVsxXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMubG9hZEFiaWxpdHkoYWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgfSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMubG9hZGluZ0NvdW50ID4gMCkgdGhpcy5sb2FkaW5nQ291bnQgLT0gMVxuICAgICAgaWYgKHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiA9PT0gZ2VuZXJhdGlvbikgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGxvYWRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuXG4gICAgICBpZiAodGhpcy5pc0FiaWxpdHlMb2FkZWQobm9ybWFsaXplZEFiaWxpdHksIHN1YmplY3QpKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5hYmlsaXRpZXNUb0xvYWQuZmluZCgoYWJpbGl0eVRvTG9hZCkgPT4gZGlnZyhhYmlsaXR5VG9Mb2FkLCBcImFiaWxpdHlcIikgPT0gbm9ybWFsaXplZEFiaWxpdHkgJiZcbiAgICAgICAgZGlnZyhhYmlsaXR5VG9Mb2FkLCBcInN1YmplY3RcIikgPT0gc3ViamVjdFxuICAgICAgKVxuXG4gICAgICBpZiAoZm91bmRBYmlsaXR5KSB7XG4gICAgICAgIGZvdW5kQWJpbGl0eS5jYWxsYmFja3MucHVzaChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQucHVzaCh7YWJpbGl0eTogbm9ybWFsaXplZEFiaWxpdHksIGNhbGxiYWNrczogW3Jlc29sdmVdLCBzdWJqZWN0fSlcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0fSlcblxuICAgICAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHF1ZXVlQWJpbGl0aWVzUmVxdWVzdCAoKSB7XG4gICAgaWYgKHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dClcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2VuZEFiaWxpdGllc1JlcXVlc3QsIDApXG4gIH1cblxuICBhc3luYyByZXNldEFiaWxpdGllcyAoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQcm9taXNlKSByZXR1cm4gdGhpcy5yZXNldFByb21pc2VcblxuICAgIHRoaXMucmVzZXRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMubG9jay53cml0ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWJpbGl0aWVzID0gW11cbiAgICAgICAgdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uICs9IDFcbiAgICAgICAgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgICAgIHRoaXMuY2FjaGVLZXkgKz0gMVxuICAgICAgfSlcbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvblJlc2V0QWJpbGl0aWVzXCIpXG4gICAgfSkoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVzZXRQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVzZXRQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbG9hZEFiaWxpdGllcyAoYWJpbGl0aWVzLCByZWxvYWRLZXkpIHtcbiAgICBpZiAocmVsb2FkS2V5ICYmIHRoaXMucmVsb2FkUHJvbWlzZXMuaGFzKHJlbG9hZEtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbG9hZFByb21pc2VzLmdldChyZWxvYWRLZXkpXG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0QWJpbGl0aWVzKClcbiAgICAgIGF3YWl0IHRoaXMubG9hZEFiaWxpdGllcyhhYmlsaXRpZXMpXG4gICAgfSkoKVxuXG4gICAgaWYgKHJlbG9hZEtleSkgdGhpcy5yZWxvYWRQcm9taXNlcy5zZXQocmVsb2FkS2V5LCBwcm9taXNlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHByb21pc2VcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHJlbG9hZEtleSkgdGhpcy5yZWxvYWRQcm9taXNlcy5kZWxldGUocmVsb2FkS2V5KVxuICAgIH1cbiAgfVxuXG4gIHNlbmRBYmlsaXRpZXNSZXF1ZXN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb25cbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSB0aGlzLmFiaWxpdGllc1RvTG9hZFxuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZERhdGEgPSB0aGlzLmFiaWxpdGllc1RvTG9hZERhdGFcblxuICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkID0gW11cbiAgICB0aGlzLmFiaWxpdGllc1RvTG9hZERhdGEgPSBbXVxuXG4gICAgbGV0IGFiaWxpdGllcyA9IFtdXG4gICAgbGV0IGRpZEZhaWwgPSBmYWxzZVxuXG4gICAgLy8gTG9hZCBhYmlsaXRpZXMgZnJvbSBiYWNrZW5kXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIkNhbkNhbjo6TG9hZEFiaWxpdGllc1wiLCB7XG4gICAgICAgIHJlcXVlc3Q6IGFiaWxpdGllc1RvTG9hZERhdGFcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNwb25zZUFiaWxpdGllcyA9IGRpZ2cocmVzdWx0LCBcImFiaWxpdGllc1wiKVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZUFiaWxpdGllcykpIGFiaWxpdGllcyA9IHJlc3BvbnNlQWJpbGl0aWVzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRpZEZhaWwgPSB0cnVlXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgYWJpbGl0aWVzXCIsIGVycm9yKVxuICAgIH1cblxuICAgIGlmIChnZW5lcmF0aW9uICE9PSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb24gfHwgZGlkRmFpbCkge1xuICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBsb2FkZWQgYWJpbGl0aWVzXG4gICAgdGhpcy5hYmlsaXRpZXMgPSB0aGlzLmFiaWxpdGllcy5jb25jYXQoYWJpbGl0aWVzKVxuICAgIHRoaXMuY2FjaGVLZXkgKz0gMVxuXG4gICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2tzIHRoYXQgYXJlIHdhaXRpbmcgZm9yIHRoZSBhYmlsaXR5IHRvIGhhdmUgYmVlbiBsb2FkZWRcbiAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllc1RvTG9hZCkge1xuICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"use-can-can.d.ts","sourceRoot":"/src/","sources":["use-can-can.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,qDAJW,WAAkB,wBAEhB,MAAM,CA2ClB;mBApDkB,cAAc"}
1
+ {"version":3,"file":"use-can-can.d.ts","sourceRoot":"/src/","sources":["use-can-can.js"],"names":[],"mappings":"AAmCA;;;;GAIG;AACH,qDAJW,WAAkB,wBAEhB,MAAM,CAgDlB;mBApFkB,cAAc"}
@@ -1,9 +1,32 @@
1
+ /* eslint-disable jest/require-hook */
1
2
  import { useCallback, useMemo } from "react";
2
3
  import CanCan from "./can-can.js";
3
4
  import Devise from "./devise.js";
4
5
  import useCurrentUser from "./use-current-user.js";
5
6
  import useEventEmitter from "ya-use-event-emitter";
6
7
  import useShape from "set-state-compare/build/use-shape.js";
8
+ const dependencyKeyMap = new WeakMap();
9
+ let dependencyKeyNextId = 1;
10
+ const dependencyKeyFor = (value) => {
11
+ if (value === null)
12
+ return "null";
13
+ if (value === undefined)
14
+ return "undefined";
15
+ const valueType = typeof value;
16
+ if (valueType !== "object" && valueType !== "function") {
17
+ return `${valueType}:${String(value)}`;
18
+ }
19
+ if (!dependencyKeyMap.has(value)) {
20
+ dependencyKeyMap.set(value, dependencyKeyNextId);
21
+ dependencyKeyNextId += 1;
22
+ }
23
+ return `${valueType}:ref:${dependencyKeyMap.get(value)}`;
24
+ };
25
+ const dependencyListKey = (list) => {
26
+ if (!Array.isArray(list))
27
+ return dependencyKeyFor(list);
28
+ return list.map((value) => dependencyKeyFor(value)).join("|");
29
+ };
7
30
  /**
8
31
  * @param {function() : Array} abilitiesCallback
9
32
  * @param {Array} dependencies
@@ -26,18 +49,21 @@ export default function useCanCan(abilitiesCallback, dependencies) {
26
49
  s.set({ canCan: null });
27
50
  loadAbilities();
28
51
  }, []);
29
- const loadAbilitiesOnNew = useCallback(async () => {
52
+ const loadAbilitiesOnNew = useCallback(async (reloadKey) => {
30
53
  s.set({ canCan: null });
31
- await CanCan.current().resetAbilities();
32
- await loadAbilities();
54
+ const canCan = CanCan.current();
55
+ const abilities = s.p.abilitiesCallback();
56
+ await canCan.reloadAbilities(abilities, reloadKey);
57
+ s.set({ canCan, lastUpdate: new Date() });
33
58
  }, []);
34
59
  const dependencyList = dependencies ?? [currentUser?.id()]; // @ts-expect-error
60
+ const dependencyKey = useMemo(() => dependencyListKey(dependencyList), dependencyList);
35
61
  useMemo(() => {
36
- loadAbilitiesOnNew();
62
+ loadAbilitiesOnNew(dependencyKey);
37
63
  }, dependencyList);
38
64
  useEventEmitter(Devise.events(), "onDeviseSignIn", loadAbilitiesOnNew);
39
65
  useEventEmitter(Devise.events(), "onDeviseSignOut", loadAbilitiesOnNew);
40
66
  useEventEmitter(CanCan.current().events, "onResetAbilities", onResetAbilities);
41
67
  return s.s.canCan;
42
68
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhbi1jYW4uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jYW4tY2FuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQzFDLE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUNqQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxlQUFlLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxRQUFRLE1BQU0sc0NBQXNDLENBQUE7QUFFM0Q7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsU0FBUyxDQUFDLGlCQUFpQixFQUFFLFlBQVk7SUFDL0QsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUE7SUFDcEMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQyxDQUFBO0lBRXZDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtLQUM3QixDQUFDLENBQUE7SUFFRixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQy9CLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUV6QyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBQyxDQUFDLENBQUE7SUFDekMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRU4sTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3hDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNyQixhQUFhLEVBQUUsQ0FBQTtJQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFTixNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNoRCxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFFckIsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsTUFBTSxhQUFhLEVBQUUsQ0FBQTtJQUN2QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFTixNQUFNLGNBQWMsR0FBRyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQSxDQUFDLG1CQUFtQjtJQUU5RSxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ1gsa0JBQWtCLEVBQUUsQ0FBQTtJQUN0QixDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFbEIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3RFLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUN2RSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTlFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgQ2FuQ2FuIGZyb20gXCIuL2Nhbi1jYW4uanNcIlxuaW1wb3J0IERldmlzZSBmcm9tIFwiLi9kZXZpc2UuanNcIlxuaW1wb3J0IHVzZUN1cnJlbnRVc2VyIGZyb20gXCIuL3VzZS1jdXJyZW50LXVzZXIuanNcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwieWEtdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC91c2Utc2hhcGUuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IEFycmF5fSBhYmlsaXRpZXNDYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gZGVwZW5kZW5jaWVzXG4gKiBAcmV0dXJucyB7Q2FuQ2FufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDYW5DYW4oYWJpbGl0aWVzQ2FsbGJhY2ssIGRlcGVuZGVuY2llcykge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZUN1cnJlbnRVc2VyKClcbiAgY29uc3QgcyA9IHVzZVNoYXBlKHthYmlsaXRpZXNDYWxsYmFja30pXG5cbiAgcy51c2VTdGF0ZXMoe1xuICAgIGNhbkNhbjogbnVsbCxcbiAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpXG4gIH0pXG5cbiAgY29uc3QgbG9hZEFiaWxpdGllcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYW5DYW4gPSBDYW5DYW4uY3VycmVudCgpXG4gICAgY29uc3QgYWJpbGl0aWVzID0gcy5wLmFiaWxpdGllc0NhbGxiYWNrKClcblxuICAgIGF3YWl0IGNhbkNhbi5sb2FkQWJpbGl0aWVzKGFiaWxpdGllcylcblxuICAgIHMuc2V0KHtjYW5DYW4sIGxhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxuICB9LCBbXSlcblxuICBjb25zdCBvblJlc2V0QWJpbGl0aWVzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHMuc2V0KHtjYW5DYW46IG51bGx9KVxuICAgIGxvYWRBYmlsaXRpZXMoKVxuICB9LCBbXSlcblxuICBjb25zdCBsb2FkQWJpbGl0aWVzT25OZXcgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgcy5zZXQoe2NhbkNhbjogbnVsbH0pXG5cbiAgICBhd2FpdCBDYW5DYW4uY3VycmVudCgpLnJlc2V0QWJpbGl0aWVzKClcbiAgICBhd2FpdCBsb2FkQWJpbGl0aWVzKClcbiAgfSwgW10pXG5cbiAgY29uc3QgZGVwZW5kZW5jeUxpc3QgPSBkZXBlbmRlbmNpZXMgPz8gW2N1cnJlbnRVc2VyPy5pZCgpXSAvLyBAdHMtZXhwZWN0LWVycm9yXG5cbiAgdXNlTWVtbygoKSA9PiB7XG4gICAgbG9hZEFiaWxpdGllc09uTmV3KClcbiAgfSwgZGVwZW5kZW5jeUxpc3QpXG5cbiAgdXNlRXZlbnRFbWl0dGVyKERldmlzZS5ldmVudHMoKSwgXCJvbkRldmlzZVNpZ25JblwiLCBsb2FkQWJpbGl0aWVzT25OZXcpXG4gIHVzZUV2ZW50RW1pdHRlcihEZXZpc2UuZXZlbnRzKCksIFwib25EZXZpc2VTaWduT3V0XCIsIGxvYWRBYmlsaXRpZXNPbk5ldylcbiAgdXNlRXZlbnRFbWl0dGVyKENhbkNhbi5jdXJyZW50KCkuZXZlbnRzLCBcIm9uUmVzZXRBYmlsaXRpZXNcIiwgb25SZXNldEFiaWxpdGllcylcblxuICByZXR1cm4gcy5zLmNhbkNhblxufVxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhbi1jYW4uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jYW4tY2FuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUMxQyxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sY0FBYyxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sZUFBZSxNQUFNLHNCQUFzQixDQUFBO0FBQ2xELE9BQU8sUUFBUSxNQUFNLHNDQUFzQyxDQUFBO0FBRTNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUN0QyxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtBQUUzQixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDakMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sTUFBTSxDQUFBO0lBQ2pDLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUUzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLEtBQUssQ0FBQTtJQUU5QixJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7SUFDeEMsQ0FBQztJQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUE7UUFDaEQsbUJBQW1CLElBQUksQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFFRCxPQUFPLEdBQUcsU0FBUyxRQUFRLGdCQUFnQixDQUFDLEdBQUcsQ0FB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QUFBO0lBQ3ZFLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFFOUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgamVzdC9yZXF1aXJlLWhvb2sgKi9cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgQ2FuQ2FuIGZyb20gXCIuL2Nhbi1jYW4uanNcIlxuaW1wb3J0IERldmlzZSBmcm9tIFwiLi9kZXZpc2UuanNcIlxuaW1wb3J0IHVzZUN1cnJlbnRVc2VyIGZyb20gXCIuL3VzZS1jdXJyZW50LXVzZXIuanNcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwieWEtdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC91c2Utc2hhcGUuanNcIlxuXG5jb25zdCBkZXBlbmRlbmN5S2V5TWFwID0gbmV3IFdlYWtNYXAoKVxubGV0IGRlcGVuZGVuY3lLZXlOZXh0SWQgPSAxXG5cbmNvbnN0IGRlcGVuZGVuY3lLZXlGb3IgPSAodmFsdWUpID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gXCJudWxsXCJcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBcInVuZGVmaW5lZFwiXG5cbiAgY29uc3QgdmFsdWVUeXBlID0gdHlwZW9mIHZhbHVlXG5cbiAgaWYgKHZhbHVlVHlwZSAhPT0gXCJvYmplY3RcIiAmJiB2YWx1ZVR5cGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBgJHt2YWx1ZVR5cGV9OiR7U3RyaW5nKHZhbHVlKX1gXG4gIH1cblxuICBpZiAoIWRlcGVuZGVuY3lLZXlNYXAuaGFzKHZhbHVlKSkge1xuICAgIGRlcGVuZGVuY3lLZXlNYXAuc2V0KHZhbHVlLCBkZXBlbmRlbmN5S2V5TmV4dElkKVxuICAgIGRlcGVuZGVuY3lLZXlOZXh0SWQgKz0gMVxuICB9XG5cbiAgcmV0dXJuIGAke3ZhbHVlVHlwZX06cmVmOiR7ZGVwZW5kZW5jeUtleU1hcC5nZXQodmFsdWUpfWBcbn1cblxuY29uc3QgZGVwZW5kZW5jeUxpc3RLZXkgPSAobGlzdCkgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHJldHVybiBkZXBlbmRlbmN5S2V5Rm9yKGxpc3QpXG5cbiAgcmV0dXJuIGxpc3QubWFwKCh2YWx1ZSkgPT4gZGVwZW5kZW5jeUtleUZvcih2YWx1ZSkpLmpvaW4oXCJ8XCIpXG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbigpIDogQXJyYXl9IGFiaWxpdGllc0NhbGxiYWNrXG4gKiBAcGFyYW0ge0FycmF5fSBkZXBlbmRlbmNpZXNcbiAqIEByZXR1cm5zIHtDYW5DYW59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNhbkNhbihhYmlsaXRpZXNDYWxsYmFjaywgZGVwZW5kZW5jaWVzKSB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlQ3VycmVudFVzZXIoKVxuICBjb25zdCBzID0gdXNlU2hhcGUoe2FiaWxpdGllc0NhbGxiYWNrfSlcblxuICBzLnVzZVN0YXRlcyh7XG4gICAgY2FuQ2FuOiBudWxsLFxuICAgIGxhc3RVcGRhdGU6ICgpID0+IG5ldyBEYXRlKClcbiAgfSlcblxuICBjb25zdCBsb2FkQWJpbGl0aWVzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbkNhbiA9IENhbkNhbi5jdXJyZW50KClcbiAgICBjb25zdCBhYmlsaXRpZXMgPSBzLnAuYWJpbGl0aWVzQ2FsbGJhY2soKVxuXG4gICAgYXdhaXQgY2FuQ2FuLmxvYWRBYmlsaXRpZXMoYWJpbGl0aWVzKVxuXG4gICAgcy5zZXQoe2NhbkNhbiwgbGFzdFVwZGF0ZTogbmV3IERhdGUoKX0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IG9uUmVzZXRBYmlsaXRpZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcy5zZXQoe2NhbkNhbjogbnVsbH0pXG4gICAgbG9hZEFiaWxpdGllcygpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGxvYWRBYmlsaXRpZXNPbk5ldyA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZWxvYWRLZXkpID0+IHtcbiAgICBzLnNldCh7Y2FuQ2FuOiBudWxsfSlcblxuICAgIGNvbnN0IGNhbkNhbiA9IENhbkNhbi5jdXJyZW50KClcbiAgICBjb25zdCBhYmlsaXRpZXMgPSBzLnAuYWJpbGl0aWVzQ2FsbGJhY2soKVxuXG4gICAgYXdhaXQgY2FuQ2FuLnJlbG9hZEFiaWxpdGllcyhhYmlsaXRpZXMsIHJlbG9hZEtleSlcblxuICAgIHMuc2V0KHtjYW5DYW4sIGxhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxuICB9LCBbXSlcblxuICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llcyA/PyBbY3VycmVudFVzZXI/LmlkKCldIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgY29uc3QgZGVwZW5kZW5jeUtleSA9IHVzZU1lbW8oKCkgPT4gZGVwZW5kZW5jeUxpc3RLZXkoZGVwZW5kZW5jeUxpc3QpLCBkZXBlbmRlbmN5TGlzdClcblxuICB1c2VNZW1vKCgpID0+IHtcbiAgICBsb2FkQWJpbGl0aWVzT25OZXcoZGVwZW5kZW5jeUtleSlcbiAgfSwgZGVwZW5kZW5jeUxpc3QpXG5cbiAgdXNlRXZlbnRFbWl0dGVyKERldmlzZS5ldmVudHMoKSwgXCJvbkRldmlzZVNpZ25JblwiLCBsb2FkQWJpbGl0aWVzT25OZXcpXG4gIHVzZUV2ZW50RW1pdHRlcihEZXZpc2UuZXZlbnRzKCksIFwib25EZXZpc2VTaWduT3V0XCIsIGxvYWRBYmlsaXRpZXNPbk5ldylcbiAgdXNlRXZlbnRFbWl0dGVyKENhbkNhbi5jdXJyZW50KCkuZXZlbnRzLCBcIm9uUmVzZXRBYmlsaXRpZXNcIiwgb25SZXNldEFiaWxpdGllcylcblxuICByZXR1cm4gcy5zLmNhbkNhblxufVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
3
  "type": "module",
4
- "version": "1.0.2091",
4
+ "version": "1.0.2094",
5
5
  "description": "My new module",
6
6
  "files": [
7
7
  "build/**"
@@ -81,7 +81,7 @@
81
81
  "eslint-plugin-jest": "^29.0.1",
82
82
  "eslint-plugin-jsdoc": "^62.0.0",
83
83
  "eslint-plugin-react": "^7.23.2",
84
- "expo": "~53.0.25",
84
+ "expo": "~53.0.26",
85
85
  "expo-module-scripts": "^5.0.8",
86
86
  "jest": "~29.7.0",
87
87
  "react": "19.0.0",