@kaspernj/api-maker 1.0.2092 → 1.0.2095

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.
@@ -6,9 +6,17 @@ export default class ApiMakerCanCan {
6
6
  abilitiesGeneration: number;
7
7
  cacheKey: number;
8
8
  loadingCount: number;
9
+ missingAbilities: Map<any, any>;
10
+ missingAbilitiesTimeout: any;
11
+ reloadPromises: Map<any, any>;
12
+ resetPromise: any;
13
+ resettingGeneration: any;
9
14
  events: EventEmitter<string | symbol, any>;
10
15
  lock: ReadersWriterLock;
11
- can(ability: any, subject: any): any;
16
+ can(ability: any, subject: any, options?: {}): any;
17
+ recordMissingAbility(ability: any, subject: any): void;
18
+ queueMissingAbilitiesLoad(): void;
19
+ loadMissingAbilities: () => void;
12
20
  findAbility(ability: any, subject: any): any;
13
21
  isAbilityLoaded(ability: any, subject: any): boolean;
14
22
  isReloading(): boolean;
@@ -17,7 +25,8 @@ export default class ApiMakerCanCan {
17
25
  loadAbility(ability: any, subject: any): Promise<any>;
18
26
  queueAbilitiesRequest(): void;
19
27
  queueAbilitiesRequestTimeout: NodeJS.Timeout;
20
- resetAbilities(): Promise<void>;
28
+ resetAbilities(): Promise<any>;
29
+ reloadAbilities(abilities: any, reloadKey: any): Promise<any>;
21
30
  sendAbilitiesRequest: () => Promise<void>;
22
31
  }
23
32
  import { EventEmitter } from "eventemitter3";
@@ -1 +1 @@
1
- {"version":3,"file":"can-can.d.ts","sourceRoot":"/src/","sources":["can-can.js"],"names":[],"mappings":"AASA;IAUE,sBAIC;IAbD,iBAAc;IACd,uBAAoB;IACpB,2BAAwB;IACxB,4BAAuB;IACvB,iBAAY;IACZ,qBAAgB;IAChB,2CAA2B;IAC3B,wBAA8B;IAQ9B,qCAoBC;IAED,6CAuBC;IAED,qDAQC;IAED,uBAEC;IAED,sBAEC;IAED,6CAuBC;IAED,sDAsBC;IAED,8BAMC;IADC,6CAA4E;IAG9E,gCAQC;IAED,0CAkCC;CACF;6BA9L0B,eAAe;kCACV,YAAY"}
1
+ {"version":3,"file":"can-can.d.ts","sourceRoot":"/src/","sources":["can-can.js"],"names":[],"mappings":"AASA;IAeE,sBAIC;IAlBD,iBAAc;IACd,uBAAoB;IACpB,2BAAwB;IACxB,4BAAuB;IACvB,iBAAY;IACZ,qBAAgB;IAChB,gCAA4B;IAC5B,6BAA8B;IAC9B,8BAA0B;IAC1B,kBAAmB;IACnB,yBAA0B;IAC1B,2CAA2B;IAC3B,wBAA8B;IAQ9B,mDAsBC;IAED,uDAYC;IAED,kCAIC;IAED,iCAeC;IAED,6CAuBC;IAED,qDAQC;IAED,uBAEC;IAED,sBAEC;IAED,6CA4BC;IAED,sDAsBC;IAED,8BAIC;IADC,6CAA4E;IAG9E,+BAkBC;IAED,8DAiBC;IAED,0CA6CC;CACF;6BArR0B,eAAe;kCACV,YAAY"}
package/build/can-can.js CHANGED
@@ -12,6 +12,11 @@ export default class ApiMakerCanCan {
12
12
  abilitiesGeneration = 0;
13
13
  cacheKey = 0;
14
14
  loadingCount = 0;
15
+ missingAbilities = new Map();
16
+ missingAbilitiesTimeout = null;
17
+ reloadPromises = new Map();
18
+ resetPromise = null;
19
+ resettingGeneration = null;
15
20
  events = new EventEmitter();
16
21
  lock = new ReadersWriterLock();
17
22
  static current() {
@@ -19,24 +24,53 @@ export default class ApiMakerCanCan {
19
24
  shared.currentApiMakerCanCan = new ApiMakerCanCan();
20
25
  return shared.currentApiMakerCanCan;
21
26
  }
22
- can(ability, subject) {
27
+ can(ability, subject, options = {}) {
23
28
  let abilityToUse = inflection.underscore(ability);
24
29
  const foundAbility = this.findAbility(abilityToUse, subject);
25
30
  if (foundAbility === undefined) {
26
- if (this.isReloading())
27
- return false;
28
- let subjectLabel = subject;
29
- // Translate resource-models into class name strings
30
- if (typeof subject == "function" && subject.modelClassData) {
31
- subjectLabel = digg(subject.modelClassData(), "name");
31
+ this.recordMissingAbility(abilityToUse, subject);
32
+ if (options.debug) {
33
+ let subjectLabel = subject;
34
+ // Translate resource-models into class name strings
35
+ if (typeof subject == "function" && subject.modelClassData) {
36
+ subjectLabel = digg(subject.modelClassData(), "name");
37
+ }
38
+ console.error(`Ability not loaded ${subjectLabel}#${abilityToUse}`, { abilities: this.abilities, ability, subject });
32
39
  }
33
- console.error(`Ability not loaded ${subjectLabel}#${abilityToUse}`, { abilities: this.abilities, ability, subject });
34
- return false;
40
+ return null;
35
41
  }
36
42
  else {
37
43
  return digg(foundAbility, "can");
38
44
  }
39
45
  }
46
+ recordMissingAbility(ability, subject) {
47
+ let missingAbilitySet = this.missingAbilities.get(subject);
48
+ if (!missingAbilitySet) {
49
+ missingAbilitySet = new Set();
50
+ this.missingAbilities.set(subject, missingAbilitySet);
51
+ }
52
+ if (missingAbilitySet.has(ability))
53
+ return;
54
+ missingAbilitySet.add(ability);
55
+ this.queueMissingAbilitiesLoad();
56
+ }
57
+ queueMissingAbilitiesLoad() {
58
+ if (this.missingAbilitiesTimeout)
59
+ return;
60
+ this.missingAbilitiesTimeout = setTimeout(this.loadMissingAbilities, 0);
61
+ }
62
+ loadMissingAbilities = () => {
63
+ const missingAbilities = this.missingAbilities;
64
+ this.missingAbilities = new Map();
65
+ this.missingAbilitiesTimeout = null;
66
+ const abilitiesToLoad = [];
67
+ for (const [subject, abilities] of missingAbilities.entries()) {
68
+ abilitiesToLoad.push([subject, Array.from(abilities)]);
69
+ }
70
+ if (abilitiesToLoad.length > 0) {
71
+ this.loadAbilities(abilitiesToLoad);
72
+ }
73
+ };
40
74
  findAbility(ability, subject) {
41
75
  return this.abilities.find((abilityData) => {
42
76
  const abilityDataSubject = digg(abilityData, "subject");
@@ -65,12 +99,14 @@ export default class ApiMakerCanCan {
65
99
  return false;
66
100
  }
67
101
  isReloading() {
68
- return this.loadingCount > 0;
102
+ return this.loadingCount > 0 || this.resettingGeneration !== null;
69
103
  }
70
104
  getCacheKey() {
71
105
  return this.cacheKey;
72
106
  }
73
107
  async loadAbilities(abilities) {
108
+ const generation = this.abilitiesGeneration;
109
+ this.loadingCount += 1;
74
110
  try {
75
111
  await this.lock.read(async () => {
76
112
  const promises = [];
@@ -91,6 +127,8 @@ export default class ApiMakerCanCan {
91
127
  finally {
92
128
  if (this.loadingCount > 0)
93
129
  this.loadingCount -= 1;
130
+ if (this.resettingGeneration === generation)
131
+ this.resettingGeneration = null;
94
132
  }
95
133
  }
96
134
  loadAbility(ability, subject) {
@@ -113,32 +151,70 @@ export default class ApiMakerCanCan {
113
151
  });
114
152
  }
115
153
  queueAbilitiesRequest() {
116
- if (this.queueAbilitiesRequestTimeout) {
117
- clearTimeout(this.queueAbilitiesRequestTimeout);
118
- }
154
+ if (this.queueAbilitiesRequestTimeout)
155
+ return;
119
156
  this.queueAbilitiesRequestTimeout = setTimeout(this.sendAbilitiesRequest, 0);
120
157
  }
121
158
  async resetAbilities() {
122
- await this.lock.write(() => {
123
- this.abilities = [];
124
- this.abilitiesGeneration += 1;
125
- this.cacheKey += 1;
126
- this.loadingCount += 1;
127
- });
128
- this.events.emit("onResetAbilities");
159
+ if (this.resetPromise)
160
+ return this.resetPromise;
161
+ this.resetPromise = (async () => {
162
+ await this.lock.write(() => {
163
+ this.abilities = [];
164
+ this.abilitiesGeneration += 1;
165
+ this.resettingGeneration = this.abilitiesGeneration;
166
+ this.cacheKey += 1;
167
+ });
168
+ this.events.emit("onResetAbilities");
169
+ })();
170
+ try {
171
+ await this.resetPromise;
172
+ }
173
+ finally {
174
+ this.resetPromise = null;
175
+ }
176
+ }
177
+ async reloadAbilities(abilities, reloadKey) {
178
+ if (reloadKey && this.reloadPromises.has(reloadKey)) {
179
+ return this.reloadPromises.get(reloadKey);
180
+ }
181
+ const promise = (async () => {
182
+ await this.resetAbilities();
183
+ await this.loadAbilities(abilities);
184
+ })();
185
+ if (reloadKey)
186
+ this.reloadPromises.set(reloadKey, promise);
187
+ try {
188
+ await promise;
189
+ }
190
+ finally {
191
+ if (reloadKey)
192
+ this.reloadPromises.delete(reloadKey);
193
+ }
129
194
  }
130
195
  sendAbilitiesRequest = async () => {
196
+ this.queueAbilitiesRequestTimeout = null;
131
197
  const generation = this.abilitiesGeneration;
132
198
  const abilitiesToLoad = this.abilitiesToLoad;
133
199
  const abilitiesToLoadData = this.abilitiesToLoadData;
134
200
  this.abilitiesToLoad = [];
135
201
  this.abilitiesToLoadData = [];
202
+ let abilities = [];
203
+ let didFail = false;
136
204
  // Load abilities from backend
137
- const result = await Services.current().sendRequest("CanCan::LoadAbilities", {
138
- request: abilitiesToLoadData
139
- });
140
- const abilities = digg(result, "abilities");
141
- if (generation !== this.abilitiesGeneration) {
205
+ try {
206
+ const result = await Services.current().sendRequest("CanCan::LoadAbilities", {
207
+ request: abilitiesToLoadData
208
+ }, { instant: true });
209
+ const responseAbilities = digg(result, "abilities");
210
+ if (Array.isArray(responseAbilities))
211
+ abilities = responseAbilities;
212
+ }
213
+ catch (error) {
214
+ didFail = true;
215
+ console.error("Failed to load abilities", error);
216
+ }
217
+ if (generation !== this.abilitiesGeneration || didFail) {
142
218
  for (const abilityData of abilitiesToLoad) {
143
219
  for (const callback of abilityData.callbacks) {
144
220
  callback();
@@ -157,4 +233,4 @@ export default class ApiMakerCanCan {
157
233
  }
158
234
  };
159
235
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2QsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFDeEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDWixZQUFZLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBQzNCLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUE7SUFFOUIsTUFBTSxDQUFDLE9BQU87UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtZQUFFLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO1FBRXRGLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFBO0lBQ3JDLENBQUM7SUFFRCxHQUFHLENBQUUsT0FBTyxFQUFFLE9BQU87UUFDbkIsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUU1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WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gXCJldmVudGVtaXR0ZXIzXCJcbmltcG9ydCB7UmVhZGVyc1dyaXRlckxvY2t9IGZyb20gXCJlcGljLWxvY2tzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgU2VydmljZXMgZnJvbSBcIi4vc2VydmljZXMuanNcIlxuXG5jb25zdCBzaGFyZWQgPSB7fVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNhbkNhbiB7XG4gIGFiaWxpdGllcyA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZCA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZERhdGEgPSBbXVxuICBhYmlsaXRpZXNHZW5lcmF0aW9uID0gMFxuICBjYWNoZUtleSA9IDBcbiAgbG9hZGluZ0NvdW50ID0gMFxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgbG9jayA9IG5ldyBSZWFkZXJzV3JpdGVyTG9jaygpXG5cbiAgc3RhdGljIGN1cnJlbnQgKCkge1xuICAgIGlmICghc2hhcmVkLmN1cnJlbnRBcGlNYWtlckNhbkNhbikgc2hhcmVkLmN1cnJlbnRBcGlNYWtlckNhbkNhbiA9IG5ldyBBcGlNYWtlckNhbkNhbigpXG5cbiAgICByZXR1cm4gc2hhcmVkLmN1cnJlbnRBcGlNYWtlckNhbkNhblxuICB9XG5cbiAgY2FuIChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgbGV0IGFiaWxpdHlUb1VzZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuICAgIGNvbnN0IGZvdW5kQWJpbGl0eSA9IHRoaXMuZmluZEFiaWxpdHkoYWJpbGl0eVRvVXNlLCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5pc1JlbG9hZGluZygpKSByZXR1cm4gZmFsc2VcblxuICAgICAgbGV0IHN1YmplY3RMYWJlbCA9IHN1YmplY3RcblxuICAgICAgLy8gVHJhbnNsYXRlIHJlc291cmNlLW1vZGVscyBpbnRvIGNsYXNzIG5hbWUgc3RyaW5nc1xuICAgICAgaWYgKHR5cGVvZiBzdWJqZWN0ID09IFwiZnVuY3Rpb25cIiAmJiBzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKSB7XG4gICAgICAgIHN1YmplY3RMYWJlbCA9IGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5lcnJvcihgQWJpbGl0eSBub3QgbG9hZGVkICR7c3ViamVjdExhYmVsfSMke2FiaWxpdHlUb1VzZX1gLCB7YWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllcywgYWJpbGl0eSwgc3ViamVjdH0pXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlnZyhmb3VuZEFiaWxpdHksIFwiY2FuXCIpXG4gICAgfVxuICB9XG5cbiAgZmluZEFiaWxpdHkgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5hYmlsaXRpZXMuZmluZCgoYWJpbGl0eURhdGEpID0+IHtcbiAgICAgIGNvbnN0IGFiaWxpdHlEYXRhU3ViamVjdCA9IGRpZ2coYWJpbGl0eURhdGEsIFwic3ViamVjdFwiKVxuICAgICAgY29uc3QgYWJpbGl0eURhdGFBYmlsaXR5ID0gZGlnZyhhYmlsaXR5RGF0YSwgXCJhYmlsaXR5XCIpXG5cbiAgICAgIGlmIChhYmlsaXR5RGF0YUFiaWxpdHkgPT0gYWJpbGl0eSkge1xuICAgICAgICAvLyBJZiBhY3R1YWxseSBzYW1lIGNsYXNzXG4gICAgICAgIGlmIChhYmlsaXR5RGF0YVN1YmplY3QgPT0gc3ViamVjdCkgcmV0dXJuIHRydWVcblxuICAgICAgICAvLyBTb21ldGltZXMgaW4gZGV2IHdoZW4gdXNpbmcgbGlua2luZyBpdCB3aWxsIGFjdHVhbGx5IGJlIHR3byBkaWZmZXJlbnQgYnV0IGlkZW50aWNhbCByZXNvdXJjZSBjbGFzc2VzXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICBzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhICYmXG4gICAgICAgICAgdHlwZW9mIGFiaWxpdHlEYXRhU3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICBhYmlsaXR5RGF0YVN1YmplY3QubW9kZWxDbGFzc0RhdGEgJiZcbiAgICAgICAgICBkaWdnKHN1YmplY3QubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpID09IGRpZ2coYWJpbGl0eURhdGFTdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBpc0FiaWxpdHlMb2FkZWQgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICBjb25zdCBmb3VuZEFiaWxpdHkgPSB0aGlzLmZpbmRBYmlsaXR5KGFiaWxpdHksIHN1YmplY3QpXG5cbiAgICBpZiAoZm91bmRBYmlsaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpc1JlbG9hZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICB9XG5cbiAgZ2V0Q2FjaGVLZXkgKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlS2V5XG4gIH1cblxuICBhc3luYyBsb2FkQWJpbGl0aWVzIChhYmlsaXRpZXMpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2NrLnJlYWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gYWJpbGl0eURhdGFbMF1cblxuICAgICAgICAgIGlmICghc3ViamVjdCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN1YmplY3QgZ2l2ZW4gaW4gYWJpbGl0aWVzOiAke3N1YmplY3R9IC0gJHtKU09OLnN0cmluZ2lmeShhYmlsaXRpZXMpfWApXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdHlEYXRhWzFdKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSBvZiBhYmlsaXRpZXMgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eURhdGFbMV19OiAke2FiaWxpdHlEYXRhWzFdfWApXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHkgb2YgYWJpbGl0eURhdGFbMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmxvYWRBYmlsaXR5KGFiaWxpdHksIHN1YmplY3QpXG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIH0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmdDb3VudCA+IDApIHRoaXMubG9hZGluZ0NvdW50IC09IDFcbiAgICB9XG4gIH1cblxuICBsb2FkQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEFiaWxpdHkgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eSlcblxuICAgICAgaWYgKHRoaXMuaXNBYmlsaXR5TG9hZGVkKG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0KSkge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kQWJpbGl0eSA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkLmZpbmQoKGFiaWxpdHlUb0xvYWQpID0+IGRpZ2coYWJpbGl0eVRvTG9hZCwgXCJhYmlsaXR5XCIpID09IG5vcm1hbGl6ZWRBYmlsaXR5ICYmXG4gICAgICAgIGRpZ2coYWJpbGl0eVRvTG9hZCwgXCJzdWJqZWN0XCIpID09IHN1YmplY3RcbiAgICAgIClcblxuICAgICAgaWYgKGZvdW5kQWJpbGl0eSkge1xuICAgICAgICBmb3VuZEFiaWxpdHkuY2FsbGJhY2tzLnB1c2gocmVzb2x2ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBjYWxsYmFja3M6IFtyZXNvbHZlXSwgc3ViamVjdH0pXG4gICAgICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YS5wdXNoKHthYmlsaXR5OiBub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdH0pXG5cbiAgICAgICAgdGhpcy5xdWV1ZUFiaWxpdGllc1JlcXVlc3QoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBxdWV1ZUFiaWxpdGllc1JlcXVlc3QgKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQpXG4gICAgfVxuXG4gICAgdGhpcy5xdWV1ZUFiaWxpdGllc1JlcXVlc3RUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLnNlbmRBYmlsaXRpZXNSZXF1ZXN0LCAwKVxuICB9XG5cbiAgYXN5bmMgcmVzZXRBYmlsaXRpZXMgKCkge1xuICAgIGF3YWl0IHRoaXMubG9jay53cml0ZSgoKSA9PiB7XG4gICAgICB0aGlzLmFiaWxpdGllcyA9IFtdXG4gICAgICB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb24gKz0gMVxuICAgICAgdGhpcy5jYWNoZUtleSArPSAxXG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSAxXG4gICAgfSlcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25SZXNldEFiaWxpdGllc1wiKVxuICB9XG5cbiAgc2VuZEFiaWxpdGllc1JlcXVlc3QgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvblxuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZCA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YVxuXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQgPSBbXVxuICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IFtdXG5cbiAgICAvLyBMb2FkIGFiaWxpdGllcyBmcm9tIGJhY2tlbmRcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJDYW5DYW46OkxvYWRBYmlsaXRpZXNcIiwge1xuICAgICAgcmVxdWVzdDogYWJpbGl0aWVzVG9Mb2FkRGF0YVxuICAgIH0pXG4gICAgY29uc3QgYWJpbGl0aWVzID0gZGlnZyhyZXN1bHQsIFwiYWJpbGl0aWVzXCIpXG5cbiAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllc1RvTG9hZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGFiaWxpdHlEYXRhLmNhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxvYWRlZCBhYmlsaXRpZXNcbiAgICB0aGlzLmFiaWxpdGllcyA9IHRoaXMuYWJpbGl0aWVzLmNvbmNhdChhYmlsaXRpZXMpXG4gICAgdGhpcy5jYWNoZUtleSArPSAxXG5cbiAgICAvLyBDYWxsIHRoZSBjYWxsYmFja3MgdGhhdCBhcmUgd2FpdGluZyBmb3IgdGhlIGFiaWxpdHkgdG8gaGF2ZSBiZWVuIGxvYWRlZFxuICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzVG9Mb2FkKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGFiaWxpdHlEYXRhLmNhbGxiYWNrcykge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2QsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFDeEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDWixZQUFZLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDNUIsdUJBQXVCLEdBQUcsSUFBSSxDQUFBO0lBQzlCLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzFCLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDbkIsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO0lBQzFCLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBQzNCLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUE7SUFFOUIsTUFBTSxDQUFDLE9BQU87UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtZQUFFLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO1FBRXRGLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFBO0lBQ3JDLENBQUM7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LENBQUE7WUFFbkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2dCQUFFLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQTtRQUNyRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2xELENBQUM7UUFFRCxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsbUJBQW1CLElBQUksT0FBTyxFQUFFLENBQUM7WUFDdkQsS0FBSyxNQUFNLFdBQVcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDMUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzdDLFFBQVEsRUFBRSxDQUFBO2dCQUNaLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTTtRQUNSLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQTtRQUVsQiwwRUFBMEU7UUFDMUUsS0FBSyxNQUFNLFdBQVcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUMxQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDN0MsUUFBUSxFQUFFLENBQUE7WUFDWixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQge1JlYWRlcnNXcml0ZXJMb2NrfSBmcm9tIFwiZXBpYy1sb2Nrc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDYW5DYW4ge1xuICBhYmlsaXRpZXMgPSBbXVxuICBhYmlsaXRpZXNUb0xvYWQgPSBbXVxuICBhYmlsaXRpZXNUb0xvYWREYXRhID0gW11cbiAgYWJpbGl0aWVzR2VuZXJhdGlvbiA9IDBcbiAgY2FjaGVLZXkgPSAwXG4gIGxvYWRpbmdDb3VudCA9IDBcbiAgbWlzc2luZ0FiaWxpdGllcyA9IG5ldyBNYXAoKVxuICBtaXNzaW5nQWJpbGl0aWVzVGltZW91dCA9IG51bGxcbiAgcmVsb2FkUHJvbWlzZXMgPSBuZXcgTWFwKClcbiAgcmVzZXRQcm9taXNlID0gbnVsbFxuICByZXNldHRpbmdHZW5lcmF0aW9uID0gbnVsbFxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgbG9jayA9IG5ldyBSZWFkZXJzV3JpdGVyTG9jaygpXG5cbiAgc3RhdGljIGN1cnJlbnQgKCkge1xuICAgIGlmICghc2hhcmVkLmN1cnJlbnRBcGlNYWtlckNhbkNhbikgc2hhcmVkLmN1cnJlbnRBcGlNYWtlckNhbkNhbiA9IG5ldyBBcGlNYWtlckNhbkNhbigpXG5cbiAgICByZXR1cm4gc2hhcmVkLmN1cnJlbnRBcGlNYWtlckNhbkNhblxuICB9XG5cbiAgY2FuIChhYmlsaXR5LCBzdWJqZWN0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgYWJpbGl0eVRvVXNlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHkpXG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5VG9Vc2UsIHN1YmplY3QpXG5cbiAgICBpZiAoZm91bmRBYmlsaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVjb3JkTWlzc2luZ0FiaWxpdHkoYWJpbGl0eVRvVXNlLCBzdWJqZWN0KVxuXG4gICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICBsZXQgc3ViamVjdExhYmVsID0gc3ViamVjdFxuXG4gICAgICAgIC8vIFRyYW5zbGF0ZSByZXNvdXJjZS1tb2RlbHMgaW50byBjbGFzcyBuYW1lIHN0cmluZ3NcbiAgICAgICAgaWYgKHR5cGVvZiBzdWJqZWN0ID09IFwiZnVuY3Rpb25cIiAmJiBzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKSB7XG4gICAgICAgICAgc3ViamVjdExhYmVsID0gZGlnZyhzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihgQWJpbGl0eSBub3QgbG9hZGVkICR7c3ViamVjdExhYmVsfSMke2FiaWxpdHlUb1VzZX1gLCB7YWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllcywgYWJpbGl0eSwgc3ViamVjdH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaWdnKGZvdW5kQWJpbGl0eSwgXCJjYW5cIilcbiAgICB9XG4gIH1cblxuICByZWNvcmRNaXNzaW5nQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGxldCBtaXNzaW5nQWJpbGl0eVNldCA9IHRoaXMubWlzc2luZ0FiaWxpdGllcy5nZXQoc3ViamVjdClcblxuICAgIGlmICghbWlzc2luZ0FiaWxpdHlTZXQpIHtcbiAgICAgIG1pc3NpbmdBYmlsaXR5U2V0ID0gbmV3IFNldCgpXG4gICAgICB0aGlzLm1pc3NpbmdBYmlsaXRpZXMuc2V0KHN1YmplY3QsIG1pc3NpbmdBYmlsaXR5U2V0KVxuICAgIH1cblxuICAgIGlmIChtaXNzaW5nQWJpbGl0eVNldC5oYXMoYWJpbGl0eSkpIHJldHVyblxuXG4gICAgbWlzc2luZ0FiaWxpdHlTZXQuYWRkKGFiaWxpdHkpXG4gICAgdGhpcy5xdWV1ZU1pc3NpbmdBYmlsaXRpZXNMb2FkKClcbiAgfVxuXG4gIHF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQgKCkge1xuICAgIGlmICh0aGlzLm1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0KSByZXR1cm5cblxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMubG9hZE1pc3NpbmdBYmlsaXRpZXMsIDApXG4gIH1cblxuICBsb2FkTWlzc2luZ0FiaWxpdGllcyA9ICgpID0+IHtcbiAgICBjb25zdCBtaXNzaW5nQWJpbGl0aWVzID0gdGhpcy5taXNzaW5nQWJpbGl0aWVzXG5cbiAgICB0aGlzLm1pc3NpbmdBYmlsaXRpZXMgPSBuZXcgTWFwKClcbiAgICB0aGlzLm1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0ID0gbnVsbFxuXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0gW11cblxuICAgIGZvciAoY29uc3QgW3N1YmplY3QsIGFiaWxpdGllc10gb2YgbWlzc2luZ0FiaWxpdGllcy5lbnRyaWVzKCkpIHtcbiAgICAgIGFiaWxpdGllc1RvTG9hZC5wdXNoKFtzdWJqZWN0LCBBcnJheS5mcm9tKGFiaWxpdGllcyldKVxuICAgIH1cblxuICAgIGlmIChhYmlsaXRpZXNUb0xvYWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkQWJpbGl0aWVzKGFiaWxpdGllc1RvTG9hZClcbiAgICB9XG4gIH1cblxuICBmaW5kQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIHJldHVybiB0aGlzLmFiaWxpdGllcy5maW5kKChhYmlsaXR5RGF0YSkgPT4ge1xuICAgICAgY29uc3QgYWJpbGl0eURhdGFTdWJqZWN0ID0gZGlnZyhhYmlsaXR5RGF0YSwgXCJzdWJqZWN0XCIpXG4gICAgICBjb25zdCBhYmlsaXR5RGF0YUFiaWxpdHkgPSBkaWdnKGFiaWxpdHlEYXRhLCBcImFiaWxpdHlcIilcblxuICAgICAgaWYgKGFiaWxpdHlEYXRhQWJpbGl0eSA9PSBhYmlsaXR5KSB7XG4gICAgICAgIC8vIElmIGFjdHVhbGx5IHNhbWUgY2xhc3NcbiAgICAgICAgaWYgKGFiaWxpdHlEYXRhU3ViamVjdCA9PSBzdWJqZWN0KSByZXR1cm4gdHJ1ZVxuXG4gICAgICAgIC8vIFNvbWV0aW1lcyBpbiBkZXYgd2hlbiB1c2luZyBsaW5raW5nIGl0IHdpbGwgYWN0dWFsbHkgYmUgdHdvIGRpZmZlcmVudCBidXQgaWRlbnRpY2FsIHJlc291cmNlIGNsYXNzZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBzdWJqZWN0ID09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgIHN1YmplY3QubW9kZWxDbGFzc0RhdGEgJiZcbiAgICAgICAgICB0eXBlb2YgYWJpbGl0eURhdGFTdWJqZWN0ID09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgIGFiaWxpdHlEYXRhU3ViamVjdC5tb2RlbENsYXNzRGF0YSAmJlxuICAgICAgICAgIGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIikgPT0gZGlnZyhhYmlsaXR5RGF0YVN1YmplY3QubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgfVxuXG4gIGlzQWJpbGl0eUxvYWRlZCAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGNvbnN0IGZvdW5kQWJpbGl0eSA9IHRoaXMuZmluZEFiaWxpdHkoYWJpbGl0eSwgc3ViamVjdClcblxuICAgIGlmIChmb3VuZEFiaWxpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlzUmVsb2FkaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwIHx8IHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiAhPT0gbnVsbFxuICB9XG5cbiAgZ2V0Q2FjaGVLZXkgKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlS2V5XG4gIH1cblxuICBhc3luYyBsb2FkQWJpbGl0aWVzIChhYmlsaXRpZXMpIHtcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG5cbiAgICB0aGlzLmxvYWRpbmdDb3VudCArPSAxXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2NrLnJlYWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gYWJpbGl0eURhdGFbMF1cblxuICAgICAgICAgIGlmICghc3ViamVjdCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN1YmplY3QgZ2l2ZW4gaW4gYWJpbGl0aWVzOiAke3N1YmplY3R9IC0gJHtKU09OLnN0cmluZ2lmeShhYmlsaXRpZXMpfWApXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdHlEYXRhWzFdKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSBvZiBhYmlsaXRpZXMgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eURhdGFbMV19OiAke2FiaWxpdHlEYXRhWzFdfWApXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHkgb2YgYWJpbGl0eURhdGFbMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmxvYWRBYmlsaXR5KGFiaWxpdHksIHN1YmplY3QpXG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIH0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmdDb3VudCA+IDApIHRoaXMubG9hZGluZ0NvdW50IC09IDFcbiAgICAgIGlmICh0aGlzLnJlc2V0dGluZ0dlbmVyYXRpb24gPT09IGdlbmVyYXRpb24pIHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBsb2FkQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEFiaWxpdHkgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eSlcblxuICAgICAgaWYgKHRoaXMuaXNBYmlsaXR5TG9hZGVkKG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0KSkge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kQWJpbGl0eSA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkLmZpbmQoKGFiaWxpdHlUb0xvYWQpID0+IGRpZ2coYWJpbGl0eVRvTG9hZCwgXCJhYmlsaXR5XCIpID09IG5vcm1hbGl6ZWRBYmlsaXR5ICYmXG4gICAgICAgIGRpZ2coYWJpbGl0eVRvTG9hZCwgXCJzdWJqZWN0XCIpID09IHN1YmplY3RcbiAgICAgIClcblxuICAgICAgaWYgKGZvdW5kQWJpbGl0eSkge1xuICAgICAgICBmb3VuZEFiaWxpdHkuY2FsbGJhY2tzLnB1c2gocmVzb2x2ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBjYWxsYmFja3M6IFtyZXNvbHZlXSwgc3ViamVjdH0pXG4gICAgICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YS5wdXNoKHthYmlsaXR5OiBub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdH0pXG5cbiAgICAgICAgdGhpcy5xdWV1ZUFiaWxpdGllc1JlcXVlc3QoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBxdWV1ZUFiaWxpdGllc1JlcXVlc3QgKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQpIHJldHVyblxuXG4gICAgdGhpcy5xdWV1ZUFiaWxpdGllc1JlcXVlc3RUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLnNlbmRBYmlsaXRpZXNSZXF1ZXN0LCAwKVxuICB9XG5cbiAgYXN5bmMgcmVzZXRBYmlsaXRpZXMgKCkge1xuICAgIGlmICh0aGlzLnJlc2V0UHJvbWlzZSkgcmV0dXJuIHRoaXMucmVzZXRQcm9taXNlXG5cbiAgICB0aGlzLnJlc2V0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmxvY2sud3JpdGUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFiaWxpdGllcyA9IFtdXG4gICAgICAgIHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbiArPSAxXG4gICAgICAgIHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiA9IHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvblxuICAgICAgICB0aGlzLmNhY2hlS2V5ICs9IDFcbiAgICAgIH0pXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25SZXNldEFiaWxpdGllc1wiKVxuICAgIH0pKClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlc2V0UHJvbWlzZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcywgcmVsb2FkS2V5KSB7XG4gICAgaWYgKHJlbG9hZEtleSAmJiB0aGlzLnJlbG9hZFByb21pc2VzLmhhcyhyZWxvYWRLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWxvYWRQcm9taXNlcy5nZXQocmVsb2FkS2V5KVxuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5yZXNldEFiaWxpdGllcygpXG4gICAgICBhd2FpdCB0aGlzLmxvYWRBYmlsaXRpZXMoYWJpbGl0aWVzKVxuICAgIH0pKClcblxuICAgIGlmIChyZWxvYWRLZXkpIHRoaXMucmVsb2FkUHJvbWlzZXMuc2V0KHJlbG9hZEtleSwgcHJvbWlzZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChyZWxvYWRLZXkpIHRoaXMucmVsb2FkUHJvbWlzZXMuZGVsZXRlKHJlbG9hZEtleSlcbiAgICB9XG4gIH1cblxuICBzZW5kQWJpbGl0aWVzUmVxdWVzdCA9IGFzeW5jICgpID0+IHtcbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBudWxsXG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvblxuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZCA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YVxuXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQgPSBbXVxuICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IFtdXG5cbiAgICBsZXQgYWJpbGl0aWVzID0gW11cbiAgICBsZXQgZGlkRmFpbCA9IGZhbHNlXG5cbiAgICAvLyBMb2FkIGFiaWxpdGllcyBmcm9tIGJhY2tlbmRcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiQ2FuQ2FuOjpMb2FkQWJpbGl0aWVzXCIsIHtcbiAgICAgICAgcmVxdWVzdDogYWJpbGl0aWVzVG9Mb2FkRGF0YVxuICAgICAgfSwge2luc3RhbnQ6IHRydWV9KVxuICAgICAgY29uc3QgcmVzcG9uc2VBYmlsaXRpZXMgPSBkaWdnKHJlc3VsdCwgXCJhYmlsaXRpZXNcIilcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VBYmlsaXRpZXMpKSBhYmlsaXRpZXMgPSByZXNwb25zZUFiaWxpdGllc1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaWRGYWlsID0gdHJ1ZVxuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBsb2FkIGFiaWxpdGllc1wiLCBlcnJvcilcbiAgICB9XG5cbiAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uIHx8IGRpZEZhaWwpIHtcbiAgICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzVG9Mb2FkKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgbG9hZGVkIGFiaWxpdGllc1xuICAgIHRoaXMuYWJpbGl0aWVzID0gdGhpcy5hYmlsaXRpZXMuY29uY2F0KGFiaWxpdGllcylcbiAgICB0aGlzLmNhY2hlS2V5ICs9IDFcblxuICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrcyB0aGF0IGFyZSB3YWl0aW5nIGZvciB0aGUgYWJpbGl0eSB0byBoYXZlIGJlZW4gbG9hZGVkXG4gICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"devise.d.ts","sourceRoot":"/src/","sources":["devise.js"],"names":[],"mappings":"AAqBA;IACE,yCAEC;IAED,gCAAgC;IAChC,kBADc,cAAc,CAO3B;IAED,4EAEC;IAED,iDAYC;IAED,iCAKC;IAED;;;OAcC;IAED,kDAMC;IAQD,qCAEC;IAED,wCAgBC;IA1BD,qCAIC;IAyBC,aAAkB;IAGpB,iCAMC;IAED,2CAMC;IAED,kCAkBC;CACF"}
1
+ {"version":3,"file":"devise.d.ts","sourceRoot":"/src/","sources":["devise.js"],"names":[],"mappings":"AAqBA;IACE,yCAEC;IAED,gCAAgC;IAChC,kBADc,cAAc,CAO3B;IAED,4EAEC;IAED,iDAYC;IAED,iCAKC;IAED;;;OAcC;IAED,kDAMC;IAQD,qCAEC;IAED,wCAeC;IAzBD,qCAIC;IAwBC,aAAkB;IAGpB,iCAMC;IAED,2CAMC;IAED,kCAkBC;CACF"}
package/build/devise.js CHANGED
@@ -76,12 +76,12 @@ export default class ApiMakerDevise {
76
76
  args.scope = "user";
77
77
  }
78
78
  const response = await Services.current().sendRequest("Devise::SignOut", { args });
79
+ ApiMakerDevise.setSignedOut(args);
80
+ ApiMakerDevise.callSignOutEvent(args);
79
81
  // Cannot use the class because they would both import each other
80
82
  if (shared.apiMakerSessionStatusUpdater) {
81
83
  shared.apiMakerSessionStatusUpdater.updateSessionStatus();
82
84
  }
83
- ApiMakerDevise.setSignedOut(args);
84
- ApiMakerDevise.callSignOutEvent(args);
85
85
  return response;
86
86
  }
87
87
  constructor() {
@@ -115,4 +115,4 @@ export default class ApiMakerDevise {
115
115
  return modelInstance;
116
116
  }
117
117
  }
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aXNlLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJkZXZpc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNuQyxPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQSxDQUFDLG1DQUFtQztBQUNoRixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUEsQ0FBQyxtQ0FBbUM7QUFDNUUsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUEsQ0FBQyxtQ0FBbUM7QUFFeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjO0lBQUUsVUFBVSxDQUFDLGNBQWMsR0FBRyxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQTtBQUV4RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFBO0FBRXhDLE1BQU0sV0FBVztJQUNmLFlBQVksS0FBSyxFQUFFLElBQUk7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQTtRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0lBRUQsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7Q0FDaEM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDakMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUk7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FB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dGV4dH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBEZXNlcmlhbGl6ZXIgZnJvbSBcIi4vZGVzZXJpYWxpemVyLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuL21vZGVsLWNsYXNzLXJlcXVpcmUuanNcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcblxuaWYgKCFnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlKSBnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlID0ge3Njb3Blczoge319XG5cbmNvbnN0IHNoYXJlZCA9IGdsb2JhbFRoaXMuQXBpTWFrZXJEZXZpc2VcblxuY2xhc3MgRGV2aXNlU2NvcGUge1xuICBjb25zdHJ1Y3RvcihzY29wZSwgYXJncykge1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgICB0aGlzLmNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcbiAgICB0aGlzLnNjb3BlID0gc2NvcGVcbiAgfVxuXG4gIGdldENvbnRleHQgPSAoKSA9PiB0aGlzLmNvbnRleHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJEZXZpc2Uge1xuICBzdGF0aWMgY2FsbFNpZ25PdXRFdmVudChhcmdzKSB7XG4gICAgZXZlbnRzLmVtaXQoXCJvbkRldmlzZVNpZ25PdXRcIiwge2FyZ3N9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcGlNYWtlckRldmlzZX0gKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlKSB7XG4gICAgICBzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlID0gbmV3IEFwaU1ha2VyRGV2aXNlKClcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhcmVkLmN1cnJlbnRBcGlNYWtlckRldmlzZVxuICB9XG5cbiAgc3RhdGljIGV2ZW50cygpIHtcbiAgICByZXR1cm4gZXZlbnRzXG4gIH1cblxuICBzdGF0aWMgYWRkVXNlclNjb3BlKHNjb3BlLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCBzY29wZUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUpXG4gICAgY29uc3QgY3VycmVudE1ldGhvZE5hbWUgPSBgY3VycmVudCR7c2NvcGVDYW1lbGl6ZWR9YFxuICAgIGNvbnN0IGlzU2lnbmVkSW5NZXRob2ROYW1lID0gYGlzJHtzY29wZUNhbWVsaXplZH1TaWduZWRJbmBcbiAgICBjb25zdCBnZXRBcmdzTWV0aG9kTmFtZSA9IGBnZXQke3Njb3BlQ2FtZWxpemVkfUFyZ3NgXG4gICAgY29uc3QgZ2V0U2NvcGVOYW1lID0gYGdldCR7c2NvcGVDYW1lbGl6ZWR9U2NvcGVgXG4gICAgY29uc3Qgc2NvcGVJbnN0YW5jZSA9IG5ldyBEZXZpc2VTY29wZShzY29wZSwgYXJncylcblxuICAgIEFwaU1ha2VyRGV2aXNlW2N1cnJlbnRNZXRob2ROYW1lXSA9ICgpID0+IEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5nZXRDdXJyZW50U2NvcGUoc2NvcGUpXG4gICAgQXBpTWFrZXJEZXZpc2VbaXNTaWduZWRJbk1ldGhvZE5hbWVdID0gKCkgPT4gQm9vbGVhbihBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuZ2V0Q3VycmVudFNjb3BlKHNjb3BlKSlcbiAgICBBcGlNYWtlckRldmlzZVtnZXRBcmdzTWV0aG9kTmFtZV0gPSAoKSA9PiBhcmdzXG4gICAgQXBpTWFrZXJEZXZpc2VbZ2V0U2NvcGVOYW1lXSA9ICgpID0+IHNjb3BlSW5zdGFuY2VcbiAgfVxuXG4gIHN0YXRpYyBnZXRTY29wZShzY29wZSkge1xuICAgIGNvbnN0IHNjb3BlQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShzY29wZSlcbiAgICBjb25zdCBnZXRTY29wZU5hbWUgPSBgZ2V0JHtzY29wZUNhbWVsaXplZH1TY29wZWBcblxuICAgIHJldHVybiBBcGlNYWtlckRldmlzZVtnZXRTY29wZU5hbWVdKClcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzaWduSW4odXNlcm5hbWUsIHBhc3N3b3JkLCBhcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3Muc2NvcGUpIGFyZ3Muc2NvcGUgPSBcInVzZXJcIlxuXG4gICAgY29uc3QgcG9zdERhdGEgPSB7dXNlcm5hbWUsIHBhc3N3b3JkLCBhcmdzfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiRGV2aXNlOjpTaWduSW5cIiwgcG9zdERhdGEpXG5cbiAgICBsZXQgbW9kZWwgPSByZXNwb25zZS5tb2RlbFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpKSBtb2RlbCA9IG1vZGVsWzBdXG5cbiAgICBBcGlNYWtlckRldmlzZS51cGRhdGVTZXNzaW9uKG1vZGVsKVxuICAgIGV2ZW50cy5lbWl0KFwib25EZXZpc2VTaWduSW5cIiwge3VzZXJuYW1lLCAuLi5hcmdzfSlcblxuICAgIHJldHVybiB7bW9kZWwsIHJlc3BvbnNlfVxuICB9XG5cbiAgc3RhdGljIHVwZGF0ZVNlc3Npb24obW9kZWwsIGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkgYXJncy5zY29wZSA9IFwidXNlclwiXG5cbiAgICBjb25zdCBjYW1lbGl6ZWRTY29wZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFyZ3Muc2NvcGUsIHRydWUpXG5cbiAgICBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuY3VycmVudHNbY2FtZWxpemVkU2NvcGVOYW1lXSA9IG1vZGVsXG4gIH1cblxuICBoYXNDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBjb25zdCBjYW1lbGl6ZWRTY29wZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHNjb3BlLCB0cnVlKVxuXG4gICAgcmV0dXJuIGNhbWVsaXplZFNjb3BlTmFtZSBpbiBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuY3VycmVudHNcbiAgfVxuXG4gIHN0YXRpYyBzZXRTaWduZWRPdXQoYXJncykge1xuICAgIEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5jdXJyZW50c1tpbmZsZWN0aW9uLmNhbWVsaXplKGFyZ3Muc2NvcGUsIHRydWUpXSA9IG51bGxcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzaWduT3V0KGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkge1xuICAgICAgYXJncy5zY29wZSA9IFwidXNlclwiXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJEZXZpc2U6OlNpZ25PdXRcIiwge2FyZ3N9KVxuXG4gICAgLy8gQ2Fubm90IHVzZSB0aGUgY2xhc3MgYmVjYXVzZSB0aGV5IHdvdWxkIGJvdGggaW1wb3J0IGVhY2ggb3RoZXJcbiAgICBpZiAoc2hhcmVkLmFwaU1ha2VyU2Vzc2lvblN0YXR1c1VwZGF0ZXIpIHtcbiAgICAgIHNoYXJlZC5hcGlNYWtlclNlc3Npb25TdGF0dXNVcGRhdGVyLnVwZGF0ZVNlc3Npb25TdGF0dXMoKVxuICAgIH1cblxuICAgIEFwaU1ha2VyRGV2aXNlLnNldFNpZ25lZE91dChhcmdzKVxuICAgIEFwaU1ha2VyRGV2aXNlLmNhbGxTaWduT3V0RXZlbnQoYXJncylcblxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jdXJyZW50cyA9IHt9XG4gIH1cblxuICBnZXRDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBpZiAoIShzY29wZSBpbiB0aGlzLmN1cnJlbnRzKSkge1xuICAgICAgdGhpcy5jdXJyZW50c1tzY29wZV0gPSB0aGlzLmxvYWRDdXJyZW50U2NvcGUoc2NvcGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudHNbc2NvcGVdXG4gIH1cblxuICBoYXNHbG9iYWxDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBpZiAoZ2xvYmFsVGhpcy5hcGlNYWtlckRldmlzZUN1cnJlbnQgJiYgc2NvcGUgaW4gZ2xvYmFsVGhpcy5hcGlNYWtlckRldmlzZUN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsb2FkQ3VycmVudFNjb3BlKHNjb3BlKSB7XG4gICAgaWYgKCF0aGlzLmhhc0dsb2JhbEN1cnJlbnRTY29wZShzY29wZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGVEYXRhID0gZ2xvYmFsVGhpcy5hcGlNYWtlckRldmlzZUN1cnJlbnRbc2NvcGVdXG5cbiAgICBpZiAoIXNjb3BlRGF0YSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHBhcnNlZFNjb3BlRGF0YSA9IERlc2VyaWFsaXplci5wYXJzZShzY29wZURhdGEpXG5cbiAgICAvLyBNaWdodCBiZSBhIGNvbGxlY3Rpb24gd2l0aCBwcmVsb2FkZWQgcmVsYXRpb25zaGlwc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZFNjb3BlRGF0YSkpIHJldHVybiBwYXJzZWRTY29wZURhdGFbMF1cblxuICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzUmVxdWlyZShzY29wZSlcbiAgICBjb25zdCBtb2RlbEluc3RhbmNlID0gbmV3IE1vZGVsQ2xhc3Moe2RhdGE6IHBhcnNlZFNjb3BlRGF0YX0pXG5cbiAgICByZXR1cm4gbW9kZWxJbnN0YW5jZVxuICB9XG59XG4iXX0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aXNlLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJkZXZpc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNuQyxPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQSxDQUFDLG1DQUFtQztBQUNoRixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUEsQ0FBQyxtQ0FBbUM7QUFDNUUsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUEsQ0FBQyxtQ0FBbUM7QUFFeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjO0lBQUUsVUFBVSxDQUFDLGNBQWMsR0FBRyxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQTtBQUV4RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFBO0FBRXhDLE1BQU0sV0FBVztJQUNmLFlBQVksS0FBSyxFQUFFLElBQUk7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQTtRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0lBRUQsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7Q0FDaEM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDakMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUk7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FB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dGV4dH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBEZXNlcmlhbGl6ZXIgZnJvbSBcIi4vZGVzZXJpYWxpemVyLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuL21vZGVsLWNsYXNzLXJlcXVpcmUuanNcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcblxuaWYgKCFnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlKSBnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlID0ge3Njb3Blczoge319XG5cbmNvbnN0IHNoYXJlZCA9IGdsb2JhbFRoaXMuQXBpTWFrZXJEZXZpc2VcblxuY2xhc3MgRGV2aXNlU2NvcGUge1xuICBjb25zdHJ1Y3RvcihzY29wZSwgYXJncykge1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgICB0aGlzLmNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcbiAgICB0aGlzLnNjb3BlID0gc2NvcGVcbiAgfVxuXG4gIGdldENvbnRleHQgPSAoKSA9PiB0aGlzLmNvbnRleHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJEZXZpc2Uge1xuICBzdGF0aWMgY2FsbFNpZ25PdXRFdmVudChhcmdzKSB7XG4gICAgZXZlbnRzLmVtaXQoXCJvbkRldmlzZVNpZ25PdXRcIiwge2FyZ3N9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcGlNYWtlckRldmlzZX0gKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlKSB7XG4gICAgICBzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlID0gbmV3IEFwaU1ha2VyRGV2aXNlKClcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhcmVkLmN1cnJlbnRBcGlNYWtlckRldmlzZVxuICB9XG5cbiAgc3RhdGljIGV2ZW50cygpIHtcbiAgICByZXR1cm4gZXZlbnRzXG4gIH1cblxuICBzdGF0aWMgYWRkVXNlclNjb3BlKHNjb3BlLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCBzY29wZUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUpXG4gICAgY29uc3QgY3VycmVudE1ldGhvZE5hbWUgPSBgY3VycmVudCR7c2NvcGVDYW1lbGl6ZWR9YFxuICAgIGNvbnN0IGlzU2lnbmVkSW5NZXRob2ROYW1lID0gYGlzJHtzY29wZUNhbWVsaXplZH1TaWduZWRJbmBcbiAgICBjb25zdCBnZXRBcmdzTWV0aG9kTmFtZSA9IGBnZXQke3Njb3BlQ2FtZWxpemVkfUFyZ3NgXG4gICAgY29uc3QgZ2V0U2NvcGVOYW1lID0gYGdldCR7c2NvcGVDYW1lbGl6ZWR9U2NvcGVgXG4gICAgY29uc3Qgc2NvcGVJbnN0YW5jZSA9IG5ldyBEZXZpc2VTY29wZShzY29wZSwgYXJncylcblxuICAgIEFwaU1ha2VyRGV2aXNlW2N1cnJlbnRNZXRob2ROYW1lXSA9ICgpID0+IEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5nZXRDdXJyZW50U2NvcGUoc2NvcGUpXG4gICAgQXBpTWFrZXJEZXZpc2VbaXNTaWduZWRJbk1ldGhvZE5hbWVdID0gKCkgPT4gQm9vbGVhbihBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuZ2V0Q3VycmVudFNjb3BlKHNjb3BlKSlcbiAgICBBcGlNYWtlckRldmlzZVtnZXRBcmdzTWV0aG9kTmFtZV0gPSAoKSA9PiBhcmdzXG4gICAgQXBpTWFrZXJEZXZpc2VbZ2V0U2NvcGVOYW1lXSA9ICgpID0+IHNjb3BlSW5zdGFuY2VcbiAgfVxuXG4gIHN0YXRpYyBnZXRTY29wZShzY29wZSkge1xuICAgIGNvbnN0IHNjb3BlQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShzY29wZSlcbiAgICBjb25zdCBnZXRTY29wZU5hbWUgPSBgZ2V0JHtzY29wZUNhbWVsaXplZH1TY29wZWBcblxuICAgIHJldHVybiBBcGlNYWtlckRldmlzZVtnZXRTY29wZU5hbWVdKClcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzaWduSW4odXNlcm5hbWUsIHBhc3N3b3JkLCBhcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3Muc2NvcGUpIGFyZ3Muc2NvcGUgPSBcInVzZXJcIlxuXG4gICAgY29uc3QgcG9zdERhdGEgPSB7dXNlcm5hbWUsIHBhc3N3b3JkLCBhcmdzfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiRGV2aXNlOjpTaWduSW5cIiwgcG9zdERhdGEpXG5cbiAgICBsZXQgbW9kZWwgPSByZXNwb25zZS5tb2RlbFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpKSBtb2RlbCA9IG1vZGVsWzBdXG5cbiAgICBBcGlNYWtlckRldmlzZS51cGRhdGVTZXNzaW9uKG1vZGVsKVxuICAgIGV2ZW50cy5lbWl0KFwib25EZXZpc2VTaWduSW5cIiwge3VzZXJuYW1lLCAuLi5hcmdzfSlcblxuICAgIHJldHVybiB7bW9kZWwsIHJlc3BvbnNlfVxuICB9XG5cbiAgc3RhdGljIHVwZGF0ZVNlc3Npb24obW9kZWwsIGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkgYXJncy5zY29wZSA9IFwidXNlclwiXG5cbiAgICBjb25zdCBjYW1lbGl6ZWRTY29wZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFyZ3Muc2NvcGUsIHRydWUpXG5cbiAgICBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuY3VycmVudHNbY2FtZWxpemVkU2NvcGVOYW1lXSA9IG1vZGVsXG4gIH1cblxuICBoYXNDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBjb25zdCBjYW1lbGl6ZWRTY29wZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHNjb3BlLCB0cnVlKVxuXG4gICAgcmV0dXJuIGNhbWVsaXplZFNjb3BlTmFtZSBpbiBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuY3VycmVudHNcbiAgfVxuXG4gIHN0YXRpYyBzZXRTaWduZWRPdXQoYXJncykge1xuICAgIEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5jdXJyZW50c1tpbmZsZWN0aW9uLmNhbWVsaXplKGFyZ3Muc2NvcGUsIHRydWUpXSA9IG51bGxcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzaWduT3V0KGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkge1xuICAgICAgYXJncy5zY29wZSA9IFwidXNlclwiXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJEZXZpc2U6OlNpZ25PdXRcIiwge2FyZ3N9KVxuICAgIEFwaU1ha2VyRGV2aXNlLnNldFNpZ25lZE91dChhcmdzKVxuICAgIEFwaU1ha2VyRGV2aXNlLmNhbGxTaWduT3V0RXZlbnQoYXJncylcblxuICAgIC8vIENhbm5vdCB1c2UgdGhlIGNsYXNzIGJlY2F1c2UgdGhleSB3b3VsZCBib3RoIGltcG9ydCBlYWNoIG90aGVyXG4gICAgaWYgKHNoYXJlZC5hcGlNYWtlclNlc3Npb25TdGF0dXNVcGRhdGVyKSB7XG4gICAgICBzaGFyZWQuYXBpTWFrZXJTZXNzaW9uU3RhdHVzVXBkYXRlci51cGRhdGVTZXNzaW9uU3RhdHVzKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY3VycmVudHMgPSB7fVxuICB9XG5cbiAgZ2V0Q3VycmVudFNjb3BlKHNjb3BlKSB7XG4gICAgaWYgKCEoc2NvcGUgaW4gdGhpcy5jdXJyZW50cykpIHtcbiAgICAgIHRoaXMuY3VycmVudHNbc2NvcGVdID0gdGhpcy5sb2FkQ3VycmVudFNjb3BlKHNjb3BlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRzW3Njb3BlXVxuICB9XG5cbiAgaGFzR2xvYmFsQ3VycmVudFNjb3BlKHNjb3BlKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuYXBpTWFrZXJEZXZpc2VDdXJyZW50ICYmIHNjb3BlIGluIGdsb2JhbFRoaXMuYXBpTWFrZXJEZXZpc2VDdXJyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbG9hZEN1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGlmICghdGhpcy5oYXNHbG9iYWxDdXJyZW50U2NvcGUoc2NvcGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHNjb3BlRGF0YSA9IGdsb2JhbFRoaXMuYXBpTWFrZXJEZXZpc2VDdXJyZW50W3Njb3BlXVxuXG4gICAgaWYgKCFzY29wZURhdGEpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwYXJzZWRTY29wZURhdGEgPSBEZXNlcmlhbGl6ZXIucGFyc2Uoc2NvcGVEYXRhKVxuXG4gICAgLy8gTWlnaHQgYmUgYSBjb2xsZWN0aW9uIHdpdGggcHJlbG9hZGVkIHJlbGF0aW9uc2hpcHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRTY29wZURhdGEpKSByZXR1cm4gcGFyc2VkU2NvcGVEYXRhWzBdXG5cbiAgICBjb25zdCBNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUoc2NvcGUpXG4gICAgY29uc3QgbW9kZWxJbnN0YW5jZSA9IG5ldyBNb2RlbENsYXNzKHtkYXRhOiBwYXJzZWRTY29wZURhdGF9KVxuXG4gICAgcmV0dXJuIG1vZGVsSW5zdGFuY2VcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  export default class ApiMakerServices {
2
2
  static current(): any;
3
- sendRequest(serviceName: any, args: any): any;
3
+ sendRequest(serviceName: any, args: any, options?: {}): any;
4
4
  }
5
5
  //# sourceMappingURL=services.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"/src/","sources":["services.js"],"names":[],"mappings":"AAIA;IACE,sBAIC;IAED,8CAUC;CACF"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"/src/","sources":["services.js"],"names":[],"mappings":"AAIA;IACE,sBAIC;IAED,4DAUC;CACF"}
package/build/services.js CHANGED
@@ -6,7 +6,7 @@ export default class ApiMakerServices {
6
6
  shared.currentApiMakerService = new ApiMakerServices();
7
7
  return shared.currentApiMakerService;
8
8
  }
9
- sendRequest(serviceName, args) {
9
+ sendRequest(serviceName, args, options = {}) {
10
10
  return CommandsPool.addCommand({
11
11
  args: {
12
12
  service_args: args,
@@ -15,7 +15,7 @@ export default class ApiMakerServices {
15
15
  command: "services",
16
16
  collectionName: "calls",
17
17
  type: "service"
18
- });
18
+ }, options);
19
19
  }
20
20
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInNlcnZpY2VzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUVqQixNQUFNLENBQUMsT0FBTyxPQUFPLGdCQUFnQjtJQUNuQyxNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCO1lBQUUsTUFBTSxDQUFDLHNCQUFzQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtRQUUxRixPQUFPLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFFLFdBQVcsRUFBRSxJQUFJO1FBQzVCLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUM3QixJQUFJLEVBQUU7Z0JBQ0osWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFlBQVksRUFBRSxXQUFXO2FBQzFCO1lBQ0QsT0FBTyxFQUFFLFVBQVU7WUFDbkIsY0FBYyxFQUFFLE9BQU87WUFDdkIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmRzUG9vbCBmcm9tIFwiLi9jb21tYW5kcy1wb29sLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJTZXJ2aWNlcyB7XG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJTZXJ2aWNlKSBzaGFyZWQuY3VycmVudEFwaU1ha2VyU2VydmljZSA9IG5ldyBBcGlNYWtlclNlcnZpY2VzKClcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyU2VydmljZVxuICB9XG5cbiAgc2VuZFJlcXVlc3QgKHNlcnZpY2VOYW1lLCBhcmdzKSB7XG4gICAgcmV0dXJuIENvbW1hbmRzUG9vbC5hZGRDb21tYW5kKHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgc2VydmljZV9hcmdzOiBhcmdzLFxuICAgICAgICBzZXJ2aWNlX25hbWU6IHNlcnZpY2VOYW1lXG4gICAgICB9LFxuICAgICAgY29tbWFuZDogXCJzZXJ2aWNlc1wiLFxuICAgICAgY29sbGVjdGlvbk5hbWU6IFwiY2FsbHNcIixcbiAgICAgIHR5cGU6IFwic2VydmljZVwiXG4gICAgfSlcbiAgfVxufVxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInNlcnZpY2VzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUVqQixNQUFNLENBQUMsT0FBTyxPQUFPLGdCQUFnQjtJQUNuQyxNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCO1lBQUUsTUFBTSxDQUFDLHNCQUFzQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtRQUUxRixPQUFPLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDMUMsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQzdCLElBQUksRUFBRTtnQkFDSixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsWUFBWSxFQUFFLFdBQVc7YUFDMUI7WUFDRCxPQUFPLEVBQUUsVUFBVTtZQUNuQixjQUFjLEVBQUUsT0FBTztZQUN2QixJQUFJLEVBQUUsU0FBUztTQUNoQixFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmRzUG9vbCBmcm9tIFwiLi9jb21tYW5kcy1wb29sLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJTZXJ2aWNlcyB7XG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJTZXJ2aWNlKSBzaGFyZWQuY3VycmVudEFwaU1ha2VyU2VydmljZSA9IG5ldyBBcGlNYWtlclNlcnZpY2VzKClcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyU2VydmljZVxuICB9XG5cbiAgc2VuZFJlcXVlc3QgKHNlcnZpY2VOYW1lLCBhcmdzLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gQ29tbWFuZHNQb29sLmFkZENvbW1hbmQoe1xuICAgICAgYXJnczoge1xuICAgICAgICBzZXJ2aWNlX2FyZ3M6IGFyZ3MsXG4gICAgICAgIHNlcnZpY2VfbmFtZTogc2VydmljZU5hbWVcbiAgICAgIH0sXG4gICAgICBjb21tYW5kOiBcInNlcnZpY2VzXCIsXG4gICAgICBjb2xsZWN0aW9uTmFtZTogXCJjYWxsc1wiLFxuICAgICAgdHlwZTogXCJzZXJ2aWNlXCJcbiAgICB9LCBvcHRpb25zKVxuICB9XG59XG4iXX0=
@@ -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
- import { useCallback, useMemo } from "react";
1
+ /* eslint-disable jest/require-hook */
2
+ import { useCallback, useEffect, useMemo, useRef } 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
@@ -13,31 +36,37 @@ export default function useCanCan(abilitiesCallback, dependencies) {
13
36
  const currentUser = useCurrentUser();
14
37
  const s = useShape({ abilitiesCallback });
15
38
  s.useStates({
16
- canCan: null,
39
+ canCan: CanCan.current(),
17
40
  lastUpdate: () => new Date()
18
41
  });
19
- const loadAbilities = useCallback(async () => {
42
+ const deviseReloadKeyRef = useRef(0);
43
+ const loadAbilities = useCallback(async (reloadKey) => {
20
44
  const canCan = CanCan.current();
21
45
  const abilities = s.p.abilitiesCallback();
22
- await canCan.loadAbilities(abilities);
23
- s.set({ canCan, lastUpdate: new Date() });
46
+ if (reloadKey === undefined) {
47
+ await canCan.loadAbilities(abilities);
48
+ }
49
+ else {
50
+ await canCan.reloadAbilities(abilities, reloadKey);
51
+ }
52
+ s.set({ lastUpdate: new Date() });
24
53
  }, []);
54
+ const onDeviseChange = useCallback(() => {
55
+ deviseReloadKeyRef.current += 1;
56
+ loadAbilities(`devise:${deviseReloadKeyRef.current}`);
57
+ }, [loadAbilities]);
25
58
  const onResetAbilities = useCallback(() => {
26
- s.set({ canCan: null });
27
59
  loadAbilities();
28
- }, []);
29
- const loadAbilitiesOnNew = useCallback(async () => {
30
- s.set({ canCan: null });
31
- await CanCan.current().resetAbilities();
32
- await loadAbilities();
33
- }, []);
34
- const dependencyList = dependencies ?? [currentUser?.id()]; // @ts-expect-error
35
- useMemo(() => {
36
- loadAbilitiesOnNew();
37
- }, dependencyList);
38
- useEventEmitter(Devise.events(), "onDeviseSignIn", loadAbilitiesOnNew);
39
- useEventEmitter(Devise.events(), "onDeviseSignOut", loadAbilitiesOnNew);
60
+ }, [loadAbilities]);
61
+ const currentUserId = currentUser?.id();
62
+ const dependencyList = dependencies ?? [currentUserId];
63
+ const dependencyKey = useMemo(() => dependencyListKey(dependencyList), dependencyList);
64
+ useEffect(() => {
65
+ loadAbilities(dependencyKey);
66
+ }, [dependencyKey]);
67
+ useEventEmitter(Devise.events(), "onDeviseSignIn", onDeviseChange);
68
+ useEventEmitter(Devise.events(), "onDeviseSignOut", onDeviseChange);
40
69
  useEventEmitter(CanCan.current().events, "onResetAbilities", onResetAbilities);
41
70
  return s.s.canCan;
42
71
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhbi1jYW4uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jYW4tY2FuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQzFDLE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUNqQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxlQUFlLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxRQUFRLE1BQU0sc0NBQXNDLENBQUE7QUFFM0Q7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsU0FBUyxDQUFDLGlCQUFpQixFQUFFLFlBQVk7SUFDL0QsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUE7SUFDcEMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQyxDQUFBO0lBRXZDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtLQUM3QixDQUFDLENBQUE7SUFFRixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQy9CLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUV6QyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBQyxDQUFDLENBQUE7SUFDekMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRU4sTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3hDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNyQixhQUFhLEVBQUUsQ0FBQTtJQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFTixNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNoRCxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFFckIsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsTUFBTSxhQUFhLEVBQUUsQ0FBQTtJQUN2QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFTixNQUFNLGNBQWMsR0FBRyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQSxDQUFDLG1CQUFtQjtJQUU5RSxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ1gsa0JBQWtCLEVBQUUsQ0FBQTtJQUN0QixDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFbEIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3RFLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUN2RSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTlFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgQ2FuQ2FuIGZyb20gXCIuL2Nhbi1jYW4uanNcIlxuaW1wb3J0IERldmlzZSBmcm9tIFwiLi9kZXZpc2UuanNcIlxuaW1wb3J0IHVzZUN1cnJlbnRVc2VyIGZyb20gXCIuL3VzZS1jdXJyZW50LXVzZXIuanNcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwieWEtdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC91c2Utc2hhcGUuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IEFycmF5fSBhYmlsaXRpZXNDYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gZGVwZW5kZW5jaWVzXG4gKiBAcmV0dXJucyB7Q2FuQ2FufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDYW5DYW4oYWJpbGl0aWVzQ2FsbGJhY2ssIGRlcGVuZGVuY2llcykge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZUN1cnJlbnRVc2VyKClcbiAgY29uc3QgcyA9IHVzZVNoYXBlKHthYmlsaXRpZXNDYWxsYmFja30pXG5cbiAgcy51c2VTdGF0ZXMoe1xuICAgIGNhbkNhbjogbnVsbCxcbiAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpXG4gIH0pXG5cbiAgY29uc3QgbG9hZEFiaWxpdGllcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYW5DYW4gPSBDYW5DYW4uY3VycmVudCgpXG4gICAgY29uc3QgYWJpbGl0aWVzID0gcy5wLmFiaWxpdGllc0NhbGxiYWNrKClcblxuICAgIGF3YWl0IGNhbkNhbi5sb2FkQWJpbGl0aWVzKGFiaWxpdGllcylcblxuICAgIHMuc2V0KHtjYW5DYW4sIGxhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxuICB9LCBbXSlcblxuICBjb25zdCBvblJlc2V0QWJpbGl0aWVzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHMuc2V0KHtjYW5DYW46IG51bGx9KVxuICAgIGxvYWRBYmlsaXRpZXMoKVxuICB9LCBbXSlcblxuICBjb25zdCBsb2FkQWJpbGl0aWVzT25OZXcgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgcy5zZXQoe2NhbkNhbjogbnVsbH0pXG5cbiAgICBhd2FpdCBDYW5DYW4uY3VycmVudCgpLnJlc2V0QWJpbGl0aWVzKClcbiAgICBhd2FpdCBsb2FkQWJpbGl0aWVzKClcbiAgfSwgW10pXG5cbiAgY29uc3QgZGVwZW5kZW5jeUxpc3QgPSBkZXBlbmRlbmNpZXMgPz8gW2N1cnJlbnRVc2VyPy5pZCgpXSAvLyBAdHMtZXhwZWN0LWVycm9yXG5cbiAgdXNlTWVtbygoKSA9PiB7XG4gICAgbG9hZEFiaWxpdGllc09uTmV3KClcbiAgfSwgZGVwZW5kZW5jeUxpc3QpXG5cbiAgdXNlRXZlbnRFbWl0dGVyKERldmlzZS5ldmVudHMoKSwgXCJvbkRldmlzZVNpZ25JblwiLCBsb2FkQWJpbGl0aWVzT25OZXcpXG4gIHVzZUV2ZW50RW1pdHRlcihEZXZpc2UuZXZlbnRzKCksIFwib25EZXZpc2VTaWduT3V0XCIsIGxvYWRBYmlsaXRpZXNPbk5ldylcbiAgdXNlRXZlbnRFbWl0dGVyKENhbkNhbi5jdXJyZW50KCkuZXZlbnRzLCBcIm9uUmVzZXRBYmlsaXRpZXNcIiwgb25SZXNldEFiaWxpdGllcylcblxuICByZXR1cm4gcy5zLmNhbkNhblxufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhbi1jYW4uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jYW4tY2FuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQzdELE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUNqQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxlQUFlLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxRQUFRLE1BQU0sc0NBQXNDLENBQUE7QUFFM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBQ3RDLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0FBRTNCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNqQyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxNQUFNLENBQUE7SUFDakMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFBO0lBRTNDLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxDQUFBO0lBRTlCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkQsT0FBTyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUNoRCxtQkFBbUIsSUFBSSxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUVELE9BQU8sR0FBRyxTQUFTLFFBQVEs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RSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTlFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGplc3QvcmVxdWlyZS1ob29rICovXG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBDYW5DYW4gZnJvbSBcIi4vY2FuLWNhbi5qc1wiXG5pbXBvcnQgRGV2aXNlIGZyb20gXCIuL2RldmlzZS5qc1wiXG5pbXBvcnQgdXNlQ3VycmVudFVzZXIgZnJvbSBcIi4vdXNlLWN1cnJlbnQtdXNlci5qc1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlU2hhcGUgZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3VzZS1zaGFwZS5qc1wiXG5cbmNvbnN0IGRlcGVuZGVuY3lLZXlNYXAgPSBuZXcgV2Vha01hcCgpXG5sZXQgZGVwZW5kZW5jeUtleU5leHRJZCA9IDFcblxuY29uc3QgZGVwZW5kZW5jeUtleUZvciA9ICh2YWx1ZSkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBcIm51bGxcIlxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwidW5kZWZpbmVkXCJcblxuICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgdmFsdWVcblxuICBpZiAodmFsdWVUeXBlICE9PSBcIm9iamVjdFwiICYmIHZhbHVlVHlwZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlVHlwZX06JHtTdHJpbmcodmFsdWUpfWBcbiAgfVxuXG4gIGlmICghZGVwZW5kZW5jeUtleU1hcC5oYXModmFsdWUpKSB7XG4gICAgZGVwZW5kZW5jeUtleU1hcC5zZXQodmFsdWUsIGRlcGVuZGVuY3lLZXlOZXh0SWQpXG4gICAgZGVwZW5kZW5jeUtleU5leHRJZCArPSAxXG4gIH1cblxuICByZXR1cm4gYCR7dmFsdWVUeXBlfTpyZWY6JHtkZXBlbmRlbmN5S2V5TWFwLmdldCh2YWx1ZSl9YFxufVxuXG5jb25zdCBkZXBlbmRlbmN5TGlzdEtleSA9IChsaXN0KSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgcmV0dXJuIGRlcGVuZGVuY3lLZXlGb3IobGlzdClcblxuICByZXR1cm4gbGlzdC5tYXAoKHZhbHVlKSA9PiBkZXBlbmRlbmN5S2V5Rm9yKHZhbHVlKSkuam9pbihcInxcIilcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiBBcnJheX0gYWJpbGl0aWVzQ2FsbGJhY2tcbiAqIEBwYXJhbSB7QXJyYXl9IGRlcGVuZGVuY2llc1xuICogQHJldHVybnMge0NhbkNhbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ2FuQ2FuKGFiaWxpdGllc0NhbGxiYWNrLCBkZXBlbmRlbmNpZXMpIHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VDdXJyZW50VXNlcigpXG4gIGNvbnN0IHMgPSB1c2VTaGFwZSh7YWJpbGl0aWVzQ2FsbGJhY2t9KVxuXG4gIHMudXNlU3RhdGVzKHtcbiAgICBjYW5DYW46IENhbkNhbi5jdXJyZW50KCksXG4gICAgbGFzdFVwZGF0ZTogKCkgPT4gbmV3IERhdGUoKVxuICB9KVxuXG4gIGNvbnN0IGRldmlzZVJlbG9hZEtleVJlZiA9IHVzZVJlZigwKVxuXG4gIGNvbnN0IGxvYWRBYmlsaXRpZXMgPSB1c2VDYWxsYmFjayhhc3luYyAocmVsb2FkS2V5KSA9PiB7XG4gICAgY29uc3QgY2FuQ2FuID0gQ2FuQ2FuLmN1cnJlbnQoKVxuICAgIGNvbnN0IGFiaWxpdGllcyA9IHMucC5hYmlsaXRpZXNDYWxsYmFjaygpXG5cbiAgICBpZiAocmVsb2FkS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IGNhbkNhbi5sb2FkQWJpbGl0aWVzKGFiaWxpdGllcylcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgY2FuQ2FuLnJlbG9hZEFiaWxpdGllcyhhYmlsaXRpZXMsIHJlbG9hZEtleSlcbiAgICB9XG5cbiAgICBzLnNldCh7bGFzdFVwZGF0ZTogbmV3IERhdGUoKX0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IG9uRGV2aXNlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRldmlzZVJlbG9hZEtleVJlZi5jdXJyZW50ICs9IDFcbiAgICBsb2FkQWJpbGl0aWVzKGBkZXZpc2U6JHtkZXZpc2VSZWxvYWRLZXlSZWYuY3VycmVudH1gKVxuICB9LCBbbG9hZEFiaWxpdGllc10pXG5cbiAgY29uc3Qgb25SZXNldEFiaWxpdGllcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBsb2FkQWJpbGl0aWVzKClcbiAgfSwgW2xvYWRBYmlsaXRpZXNdKVxuXG4gIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBjdXJyZW50VXNlcj8uaWQoKVxuICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llcyA/PyBbY3VycmVudFVzZXJJZF1cbiAgY29uc3QgZGVwZW5kZW5jeUtleSA9IHVzZU1lbW8oKCkgPT4gZGVwZW5kZW5jeUxpc3RLZXkoZGVwZW5kZW5jeUxpc3QpLCBkZXBlbmRlbmN5TGlzdClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWRBYmlsaXRpZXMoZGVwZW5kZW5jeUtleSlcbiAgfSwgW2RlcGVuZGVuY3lLZXldKVxuXG4gIHVzZUV2ZW50RW1pdHRlcihEZXZpc2UuZXZlbnRzKCksIFwib25EZXZpc2VTaWduSW5cIiwgb25EZXZpc2VDaGFuZ2UpXG4gIHVzZUV2ZW50RW1pdHRlcihEZXZpc2UuZXZlbnRzKCksIFwib25EZXZpc2VTaWduT3V0XCIsIG9uRGV2aXNlQ2hhbmdlKVxuICB1c2VFdmVudEVtaXR0ZXIoQ2FuQ2FuLmN1cnJlbnQoKS5ldmVudHMsIFwib25SZXNldEFiaWxpdGllc1wiLCBvblJlc2V0QWJpbGl0aWVzKVxuXG4gIHJldHVybiBzLnMuY2FuQ2FuXG59XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
3
  "type": "module",
4
- "version": "1.0.2092",
4
+ "version": "1.0.2095",
5
5
  "description": "My new module",
6
6
  "files": [
7
7
  "build/**"
@@ -21,6 +21,7 @@
21
21
  "release:patch": "node scripts/release-patch.js",
22
22
  "release:patch-master": "node scripts/release-patch.js --require-master",
23
23
  "typecheck": "tsc --noEmit",
24
+ "typecheck:file": "sh -c 'file=\"${npm_config_file:-${FILE:-}}\"; if [ -z \"$file\" ] && [ \"${0#--file=}\" != \"$0\" ]; then file=\"${0#--file=}\"; fi; if [ -z \"$file\" ] && [ \"${1#--file=}\" != \"$1\" ]; then file=\"${1#--file=}\"; fi; file=\"${file#npm-api-maker/}\"; file=\"${file#./}\"; if [ -z \"$file\" ]; then echo \"Missing --file=src/path/to/file.js\"; exit 2; fi; tmp=$(mktemp); tsc --noEmit -p tsconfig.json --pretty false >\"$tmp\" 2>&1; if rg --fixed-strings \"$file\" \"$tmp\" >/dev/null; then rg --fixed-strings \"$file\" \"$tmp\"; rm -f \"$tmp\"; exit 1; else rm -f \"$tmp\"; exit 0; fi'",
24
25
  "watch": "tsc -w"
25
26
  },
26
27
  "keywords": [
@@ -81,7 +82,7 @@
81
82
  "eslint-plugin-jest": "^29.0.1",
82
83
  "eslint-plugin-jsdoc": "^62.0.0",
83
84
  "eslint-plugin-react": "^7.23.2",
84
- "expo": "~53.0.25",
85
+ "expo": "~53.0.26",
85
86
  "expo-module-scripts": "^5.0.8",
86
87
  "jest": "~29.7.0",
87
88
  "react": "19.0.0",