@kaspernj/api-maker 1.0.2171 → 1.0.2173
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/commands-pool.d.ts +139 -0
- package/build/commands-pool.d.ts.map +1 -1
- package/build/commands-pool.js +88 -19
- package/build/config.d.ts +21 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +24 -1
- package/build/session-expired-error.d.ts +14 -0
- package/build/session-expired-error.d.ts.map +1 -0
- package/build/session-expired-error.js +19 -0
- package/build/session-status-updater.d.ts +16 -0
- package/build/session-status-updater.d.ts.map +1 -1
- package/build/session-status-updater.js +34 -1
- package/build/table/export/cell-value.d.ts +3 -0
- package/build/table/export/cell-value.d.ts.map +1 -0
- package/build/table/export/cell-value.js +47 -0
- package/build/table/export/file-sinks/web-file-sink.d.ts +53 -0
- package/build/table/export/file-sinks/web-file-sink.d.ts.map +1 -0
- package/build/table/export/file-sinks/web-file-sink.js +75 -0
- package/build/table/export/format-writers/csv-writer.d.ts +30 -0
- package/build/table/export/format-writers/csv-writer.d.ts.map +1 -0
- package/build/table/export/format-writers/csv-writer.js +47 -0
- package/build/table/export/format-writers/html-writer.d.ts +20 -0
- package/build/table/export/format-writers/html-writer.d.ts.map +1 -0
- package/build/table/export/format-writers/html-writer.js +30 -0
- package/build/table/export/format-writers/xlsx-writer.d.ts +23 -0
- package/build/table/export/format-writers/xlsx-writer.d.ts.map +1 -0
- package/build/table/export/format-writers/xlsx-writer.js +41 -0
- package/build/table/export/open-export-file-sink.d.ts +19 -0
- package/build/table/export/open-export-file-sink.d.ts.map +1 -0
- package/build/table/export/open-export-file-sink.js +26 -0
- package/build/table/export/table-exporter.d.ts +80 -0
- package/build/table/export/table-exporter.d.ts.map +1 -0
- package/build/table/export/table-exporter.js +141 -0
- package/build/table/settings/download-action.d.ts +8 -1
- package/build/table/settings/download-action.d.ts.map +1 -1
- package/build/table/settings/download-action.js +51 -24
- package/package.json +4 -3
package/build/commands-pool.d.ts
CHANGED
|
@@ -44,6 +44,42 @@ export default class ApiMakerCommandsPool {
|
|
|
44
44
|
commandSubmitData: CommandSubmitData;
|
|
45
45
|
commandExecution?: ApiMakerCommandExecution;
|
|
46
46
|
}): Promise<CommandsRequestResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Performs a single command request over websocket or HTTP.
|
|
49
|
+
* @param {object} args
|
|
50
|
+
* @param {string} args.url
|
|
51
|
+
* @param {CommandSubmitData} args.commandSubmitData
|
|
52
|
+
* @param {ApiMakerCommandExecution} [args.commandExecution]
|
|
53
|
+
* @returns {Promise<CommandsRequestResponse>}
|
|
54
|
+
*/
|
|
55
|
+
performRequest({ commandExecution, commandSubmitData, url }: {
|
|
56
|
+
url: string;
|
|
57
|
+
commandSubmitData: CommandSubmitData;
|
|
58
|
+
commandExecution?: ApiMakerCommandExecution;
|
|
59
|
+
}): Promise<CommandsRequestResponse>;
|
|
60
|
+
/**
|
|
61
|
+
* The user ids the frontend believes it is signed in as, keyed by Devise
|
|
62
|
+
* scope. Sent with each request so the backend can detect (and let the
|
|
63
|
+
* frontend recover from) a stale session before running commands. Undefined
|
|
64
|
+
* when nothing is signed in, so genuinely anonymous requests send no belief.
|
|
65
|
+
* @returns {Record<string, number | string> | undefined}
|
|
66
|
+
*/
|
|
67
|
+
believedDeviseUserIds(): Record<string, number | string> | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* The global request data merged with the believed signed-in identity.
|
|
70
|
+
* @returns {Record<string, unknown>}
|
|
71
|
+
*/
|
|
72
|
+
globalDataForRequest(): Record<string, unknown>;
|
|
73
|
+
/**
|
|
74
|
+
* Recovers from an `authentication_changed` response: refreshes the existing
|
|
75
|
+
* websocket connection's auth in-place from the current server session (no
|
|
76
|
+
* reconnect, no password) and reconciles the local session cache. Returns
|
|
77
|
+
* whether a previously signed-in scope is still authenticated, so the request
|
|
78
|
+
* can be retried; false means the user is genuinely signed out (the sign-in
|
|
79
|
+
* form is shown centrally via the Devise sign-out event).
|
|
80
|
+
* @returns {Promise<boolean>}
|
|
81
|
+
*/
|
|
82
|
+
recoverAuthentication(): Promise<boolean>;
|
|
47
83
|
/** Sends the currently queued commands and resolves or rejects their executions. */
|
|
48
84
|
flush: () => Promise<void>;
|
|
49
85
|
/**
|
|
@@ -119,6 +155,109 @@ export type PoolDataType = {
|
|
|
119
155
|
};
|
|
120
156
|
};
|
|
121
157
|
};
|
|
158
|
+
export type BaseModelWithId = {
|
|
159
|
+
abilities: import("./base-model.js").ModelAbilityMap;
|
|
160
|
+
changes: import("./base-model.js").ModelDataMap;
|
|
161
|
+
collection: import("./collection.js").default<any>;
|
|
162
|
+
_identifierKey: string | number;
|
|
163
|
+
_markedForDestruction: boolean;
|
|
164
|
+
modelData: import("./base-model.js").ModelDataMap;
|
|
165
|
+
newRecord: boolean;
|
|
166
|
+
previousModelData: any;
|
|
167
|
+
preloadedRelationships: import("./base-model.js").PreloadedRelationshipMap;
|
|
168
|
+
relationshipsCache: import("./base-model.js").LoadedRelationshipMap;
|
|
169
|
+
relationships: import("./base-model.js").LoadedRelationshipMap;
|
|
170
|
+
uniqueKeyValue: number;
|
|
171
|
+
assignAttributes(newAttributes: ModelDataMap): void;
|
|
172
|
+
attributes(): ModelDataMap;
|
|
173
|
+
can(givenAbilityName: string): boolean;
|
|
174
|
+
clone(): /*elided*/ any;
|
|
175
|
+
cacheKey(): number | string;
|
|
176
|
+
localCacheKey(): string;
|
|
177
|
+
fullCacheKey(): string;
|
|
178
|
+
create(attributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
|
|
179
|
+
model: /*elided*/ any;
|
|
180
|
+
response: ModelCommandResponse;
|
|
181
|
+
}>;
|
|
182
|
+
createRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions): Promise<{
|
|
183
|
+
model: /*elided*/ any;
|
|
184
|
+
response: ModelCommandResponse;
|
|
185
|
+
}>;
|
|
186
|
+
destroy(): Promise<{
|
|
187
|
+
model: /*elided*/ any;
|
|
188
|
+
response: ModelCommandResponse;
|
|
189
|
+
}>;
|
|
190
|
+
ensureAbilities(listOfAbilities: string[]): Promise<void>;
|
|
191
|
+
getAttributes(): ModelDataMap;
|
|
192
|
+
handleResponseError(response: ModelCommandResponse): never;
|
|
193
|
+
identifierKey(): number | string;
|
|
194
|
+
isAssociationLoaded(associationName: string): boolean;
|
|
195
|
+
isAssociationLoadedUnderscore(associationNameUnderscore: string): boolean;
|
|
196
|
+
isAssociationPresent(associationName: string): boolean;
|
|
197
|
+
ensureAssociationLoaded(associationName: string): Promise<LoadedRelationshipValue>;
|
|
198
|
+
ensureAssociationLoadedUnderscore(associationNameUnderscore: string): Promise<LoadedRelationshipValue>;
|
|
199
|
+
isAttributeChanged(attributeName: string): boolean;
|
|
200
|
+
isChanged(): boolean;
|
|
201
|
+
isNewRecord(): boolean;
|
|
202
|
+
isPersisted(): boolean;
|
|
203
|
+
savedChangeToAttribute(attributeName: string): boolean;
|
|
204
|
+
setNewModel(model: /*elided*/ any): void;
|
|
205
|
+
setNewModelData(model: /*elided*/ any): void;
|
|
206
|
+
_isDateChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
207
|
+
_isIntegerChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
208
|
+
_isStringChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
209
|
+
modelClassData(): ModelClassDataType;
|
|
210
|
+
reload(): Promise<void>;
|
|
211
|
+
save(): Promise<{
|
|
212
|
+
model: /*elided*/ any;
|
|
213
|
+
response?: object;
|
|
214
|
+
}>;
|
|
215
|
+
saveRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
|
|
216
|
+
simpleModelErrors?: boolean;
|
|
217
|
+
}): Promise<{
|
|
218
|
+
model: /*elided*/ any;
|
|
219
|
+
response: ModelCommandResponse;
|
|
220
|
+
}>;
|
|
221
|
+
update(newAttributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
|
|
222
|
+
model: /*elided*/ any;
|
|
223
|
+
response?: object;
|
|
224
|
+
}>;
|
|
225
|
+
_refreshModelFromResponse(response: ModelCommandResponse): void;
|
|
226
|
+
_refreshModelDataFromResponse(response: ModelCommandResponse): void;
|
|
227
|
+
updateRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
|
|
228
|
+
simpleModelErrors?: boolean;
|
|
229
|
+
}): Promise<{
|
|
230
|
+
response: ModelCommandResponse;
|
|
231
|
+
model: /*elided*/ any;
|
|
232
|
+
}>;
|
|
233
|
+
isValid(): never;
|
|
234
|
+
isValidOnServer(): Promise<{
|
|
235
|
+
valid: boolean;
|
|
236
|
+
errors: ValidationResponseErrors;
|
|
237
|
+
}>;
|
|
238
|
+
modelClass(): BaseModelClassType;
|
|
239
|
+
preloadRelationship(relationshipName: string, model: /*elided*/ any | /*elided*/ any[] | null): void;
|
|
240
|
+
markForDestruction(): void;
|
|
241
|
+
markedForDestruction(): boolean;
|
|
242
|
+
uniqueKey(): number;
|
|
243
|
+
_callMemberCommand(args: ModelCommandDescriptor, commandArgs: ModelCommandOptions): import("./command-execution.js").default;
|
|
244
|
+
readAttribute(attributeName: string): ModelValue | null | undefined;
|
|
245
|
+
readAttributeUnderscore(attributeName: string): ModelValue | null | undefined;
|
|
246
|
+
isAttributeLoaded(attributeName: string): boolean;
|
|
247
|
+
_isPresent(value: ModelValue | null | undefined): boolean;
|
|
248
|
+
_loadBelongsToReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any | null>;
|
|
249
|
+
_readBelongsToReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
|
|
250
|
+
_loadHasManyReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any[]>;
|
|
251
|
+
_loadHasOneReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any | null>;
|
|
252
|
+
_readHasOneReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
|
|
253
|
+
_readModelDataFromArgs(args?: BaseModelArgsObject): void;
|
|
254
|
+
_readPreloadedRelationships(preloaded: {
|
|
255
|
+
getModel: (relationshipType: string, relationshipId: number | string) => /*elided*/ any;
|
|
256
|
+
}): void;
|
|
257
|
+
primaryKey(): number | string;
|
|
258
|
+
} & {
|
|
259
|
+
id: () => number | string;
|
|
260
|
+
};
|
|
122
261
|
import ApiMakerCommandExecution from "./command-execution.js";
|
|
123
262
|
import CommandSubmitData from "./command-submit-data.js";
|
|
124
263
|
import RunLast from "./run-last.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-pool.d.ts","sourceRoot":"/src/","sources":["commands-pool.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands-pool.d.ts","sourceRoot":"/src/","sources":["commands-pool.js"],"names":[],"mappings":"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"}
|
package/build/commands-pool.js
CHANGED
|
@@ -12,6 +12,7 @@ import events from "./events.js";
|
|
|
12
12
|
import FormDataObjectizer from "form-data-objectizer"; // eslint-disable-line sort-imports
|
|
13
13
|
import RunLast from "./run-last.js";
|
|
14
14
|
import Serializer from "./serializer.js";
|
|
15
|
+
import SessionExpiredError from "./session-expired-error.js";
|
|
15
16
|
import SessionStatusUpdater from "./session-status-updater.js";
|
|
16
17
|
import ValidationError from "./validation-error.js";
|
|
17
18
|
import { ValidationErrors } from "./validation-errors.js";
|
|
@@ -57,6 +58,7 @@ import WebsocketRequestClient from "./websocket-request-client.js";
|
|
|
57
58
|
* @property {string} stack
|
|
58
59
|
*/
|
|
59
60
|
/** @typedef {{[key: string]: {[key: string]: {[key: string]: {[key: number]: {args: object, primary_key: number | string, id: number}}}}}} PoolDataType */
|
|
61
|
+
/** @typedef {import("./base-model.js").default & {id: () => number | string}} BaseModelWithId */
|
|
60
62
|
const shared = {};
|
|
61
63
|
/** Batches command submissions and flushes them over HTTP or websockets. */
|
|
62
64
|
export default class ApiMakerCommandsPool {
|
|
@@ -162,32 +164,89 @@ export default class ApiMakerCommandsPool {
|
|
|
162
164
|
* @returns {Promise<CommandsRequestResponse>}
|
|
163
165
|
*/
|
|
164
166
|
async sendRequest({ commandExecution, commandSubmitData, url }) {
|
|
167
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
168
|
+
const response = await this.performRequest({ commandExecution, commandSubmitData, url }); // eslint-disable-line no-await-in-loop
|
|
169
|
+
if (response?.success === false && response.type == "invalid_authenticity_token") {
|
|
170
|
+
console.log("Invalid authenticity token - try again");
|
|
171
|
+
await SessionStatusUpdater.current().updateSessionStatus(); // eslint-disable-line no-await-in-loop
|
|
172
|
+
continue; // eslint-disable-line no-continue
|
|
173
|
+
}
|
|
174
|
+
if (response?.success === false && response.type == "authentication_changed") {
|
|
175
|
+
const recovered = await this.recoverAuthentication(); // eslint-disable-line no-await-in-loop
|
|
176
|
+
if (recovered)
|
|
177
|
+
continue; // eslint-disable-line no-continue
|
|
178
|
+
throw new SessionExpiredError();
|
|
179
|
+
}
|
|
180
|
+
return /** @type {CommandsRequestResponse} */ (response);
|
|
181
|
+
}
|
|
182
|
+
throw new Error("Couldnt successfully execute request");
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Performs a single command request over websocket or HTTP.
|
|
186
|
+
* @param {object} args
|
|
187
|
+
* @param {string} args.url
|
|
188
|
+
* @param {CommandSubmitData} args.commandSubmitData
|
|
189
|
+
* @param {ApiMakerCommandExecution} [args.commandExecution]
|
|
190
|
+
* @returns {Promise<CommandsRequestResponse>}
|
|
191
|
+
*/
|
|
192
|
+
async performRequest({ commandExecution, commandSubmitData, url }) {
|
|
165
193
|
if (Config.getWebsocketRequests() && !this.requestOptions.forceHttp && commandSubmitData.getFilesCount() == 0) {
|
|
166
194
|
return /** @type {Promise<CommandsRequestResponse>} */ (WebsocketRequestClient.current().perform({
|
|
167
195
|
cacheResponse: this.requestOptions.cacheResponse,
|
|
168
|
-
global: this.
|
|
196
|
+
global: this.globalDataForRequest(),
|
|
169
197
|
onLog: (message) => commandExecution?.addLog(message),
|
|
170
198
|
onProgress: (progressData) => commandExecution?.setProgress(progressData),
|
|
171
199
|
onReceived: (receivedData) => commandExecution?.setReceived(receivedData),
|
|
172
200
|
request: commandSubmitData.getJsonData()
|
|
173
201
|
}));
|
|
174
202
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
if (commandSubmitData.getFilesCount() > 0) {
|
|
178
|
-
response = await Api.requestLocal({ path: url, method: "POST", rawData: commandSubmitData.getFormData() }); // eslint-disable-line no-await-in-loop
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
response = await Api.requestLocal({ path: url, method: "POST", data: commandSubmitData.getJsonData() }); // eslint-disable-line no-await-in-loop
|
|
182
|
-
}
|
|
183
|
-
if (response.success === false && response.type == "invalid_authenticity_token") {
|
|
184
|
-
console.log("Invalid authenticity token - try again");
|
|
185
|
-
await SessionStatusUpdater.current().updateSessionStatus(); // eslint-disable-line no-await-in-loop
|
|
186
|
-
continue; // eslint-disable-line no-continue
|
|
187
|
-
}
|
|
188
|
-
return /** @type {CommandsRequestResponse} */ (response);
|
|
203
|
+
if (commandSubmitData.getFilesCount() > 0) {
|
|
204
|
+
return /** @type {CommandsRequestResponse} */ (await Api.requestLocal({ path: url, method: "POST", rawData: commandSubmitData.getFormData() }));
|
|
189
205
|
}
|
|
190
|
-
|
|
206
|
+
return /** @type {CommandsRequestResponse} */ (await Api.requestLocal({ path: url, method: "POST", data: commandSubmitData.getJsonData() }));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* The user ids the frontend believes it is signed in as, keyed by Devise
|
|
210
|
+
* scope. Sent with each request so the backend can detect (and let the
|
|
211
|
+
* frontend recover from) a stale session before running commands. Undefined
|
|
212
|
+
* when nothing is signed in, so genuinely anonymous requests send no belief.
|
|
213
|
+
* @returns {Record<string, number | string> | undefined}
|
|
214
|
+
*/
|
|
215
|
+
believedDeviseUserIds() {
|
|
216
|
+
const believed = /** @type {Record<string, number | string>} */ ({});
|
|
217
|
+
for (const scope of Devise.registeredScopes()) {
|
|
218
|
+
const model = Devise.current().getCurrentScope(scope);
|
|
219
|
+
if (model)
|
|
220
|
+
believed[scope] = /** @type {BaseModelWithId} */ (model).id();
|
|
221
|
+
}
|
|
222
|
+
return Object.keys(believed).length > 0 ? believed : undefined;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* The global request data merged with the believed signed-in identity.
|
|
226
|
+
* @returns {Record<string, unknown>}
|
|
227
|
+
*/
|
|
228
|
+
globalDataForRequest() {
|
|
229
|
+
const believed = this.believedDeviseUserIds();
|
|
230
|
+
if (!believed)
|
|
231
|
+
return this.globalRequestData;
|
|
232
|
+
return { ...this.globalRequestData, believed_devise_user_ids: believed };
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Recovers from an `authentication_changed` response: refreshes the existing
|
|
236
|
+
* websocket connection's auth in-place from the current server session (no
|
|
237
|
+
* reconnect, no password) and reconciles the local session cache. Returns
|
|
238
|
+
* whether a previously signed-in scope is still authenticated, so the request
|
|
239
|
+
* can be retried; false means the user is genuinely signed out (the sign-in
|
|
240
|
+
* form is shown centrally via the Devise sign-out event).
|
|
241
|
+
* @returns {Promise<boolean>}
|
|
242
|
+
*/
|
|
243
|
+
async recoverAuthentication() {
|
|
244
|
+
const sessionStatusUpdater = SessionStatusUpdater.current();
|
|
245
|
+
const sessionStatus = await sessionStatusUpdater.sessionStatus();
|
|
246
|
+
const scopes = Devise.registeredScopes();
|
|
247
|
+
await Promise.all(scopes.map((scope) => Devise.refreshWebsocketSession({ scope, shadowSessionToken: sessionStatus?.shadow_session_token })));
|
|
248
|
+
sessionStatusUpdater.applyResult(sessionStatus);
|
|
249
|
+
return scopes.some((scope) => Boolean(sessionStatus?.scopes?.[scope]?.signed_in));
|
|
191
250
|
}
|
|
192
251
|
/** Sends the currently queued commands and resolves or rejects their executions. */
|
|
193
252
|
flush = async () => {
|
|
@@ -201,8 +260,9 @@ export default class ApiMakerCommandsPool {
|
|
|
201
260
|
this.flushCount++;
|
|
202
261
|
try {
|
|
203
262
|
const submitData = { pool: currentPoolData };
|
|
204
|
-
|
|
205
|
-
|
|
263
|
+
const globalData = this.globalDataForRequest();
|
|
264
|
+
if (Object.keys(globalData).length > 0)
|
|
265
|
+
submitData.global = globalData;
|
|
206
266
|
const commandSubmitData = new CommandSubmitData(submitData);
|
|
207
267
|
const url = "/api_maker/commands";
|
|
208
268
|
const commandExecution = Object.values(currentPool)[0]?.commandExecution;
|
|
@@ -232,6 +292,15 @@ export default class ApiMakerCommandsPool {
|
|
|
232
292
|
}
|
|
233
293
|
}));
|
|
234
294
|
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
// sendRequest (e.g. an unrecoverable SessionExpiredError) or response
|
|
297
|
+
// handling can throw before the per-command promises are settled. Reject
|
|
298
|
+
// every queued command so callers awaiting their execution don't hang
|
|
299
|
+
// forever. Already-settled executions ignore the extra reject.
|
|
300
|
+
for (const commandData of Object.values(currentPool)) {
|
|
301
|
+
commandData.commandExecution.reject(/** @type {Error} */ (error));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
235
304
|
finally {
|
|
236
305
|
this.flushCount--;
|
|
237
306
|
}
|
|
@@ -314,4 +383,4 @@ export default class ApiMakerCommandsPool {
|
|
|
314
383
|
}
|
|
315
384
|
flushRunLast = new RunLast(this.flush);
|
|
316
385
|
}
|
|
317
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMtcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29tbWFuZHMtcG9vbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sd0JBQXdCLE1BQU0sd0JBQXdCLENBQUE7QUFDN0QsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDaEYsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBLENBQUMsbUNBQW1DO0FBQ3ZFLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBLENBQUMsbUNBQW1DO0FBQ3pGLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQTtBQUNuQyxPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLG9CQUFvQixNQUFNLDZCQUE2QixDQUFBO0FBQzlELE9BQU8sZUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQ25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sc0JBQXNCLE1BQU0sK0JBQStCLENBQUE7QUFFbEUscUdBQXFHO0FBQ3JHLDBJQUEwSTtBQUMxSSx5RUFBeUU7QUFDekU7Ozs7Ozs7R0FPRztBQUNIOzs7OztHQUtHO0FBQ0g7Ozs7R0FJRztBQUNIOzs7OztHQUtHO0FBQ0g7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUVILDJKQUEySjtBQUUzSixNQUFNLE1B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dGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEFwaSBmcm9tIFwiLi9hcGkuanNcIlxuaW1wb3J0IEFwaU1ha2VyQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwiLi9jb21tYW5kLWV4ZWN1dGlvbi5qc1wiXG5pbXBvcnQgQ29tbWFuZFN1Ym1pdERhdGEgZnJvbSBcIi4vY29tbWFuZC1zdWJtaXQtZGF0YS5qc1wiXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuL2NvbmZpZy5qc1wiXG5pbXBvcnQgQ3VzdG9tRXJyb3IgZnJvbSBcIi4vY3VzdG9tLWVycm9yLmpzXCJcbmltcG9ydCBEZXN0cm95RXJyb3IgZnJvbSBcIi4vZGVzdHJveS1lcnJvci5qc1wiXG5pbXBvcnQgRGVzZXJpYWxpemVyIGZyb20gXCIuL2Rlc2VyaWFsaXplci5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgRGV2aXNlIGZyb20gXCIuL2RldmlzZS5qc1wiXG5pbXBvcnQge2RpZywgZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgZXZlbnRzIGZyb20gXCIuL2V2ZW50cy5qc1wiXG5pbXBvcnQgRm9ybURhdGFPYmplY3RpemVyIGZyb20gXCJmb3JtLWRhdGEtb2JqZWN0aXplclwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgUnVuTGFzdCBmcm9tIFwiLi9ydW4tbGFzdC5qc1wiXG5pbXBvcnQgU2VyaWFsaXplciBmcm9tIFwiLi9zZXJpYWxpemVyLmpzXCJcbmltcG9ydCBTZXNzaW9uU3RhdHVzVXBkYXRlciBmcm9tIFwiLi9zZXNzaW9uLXN0YXR1cy11cGRhdGVyLmpzXCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSBcIi4vdmFsaWRhdGlvbi1lcnJvci5qc1wiXG5pbXBvcnQge1ZhbGlkYXRpb25FcnJvcnN9IGZyb20gXCIuL3ZhbGlkYXRpb24tZXJyb3JzLmpzXCJcbmltcG9ydCBXZWJzb2NrZXRSZXF1ZXN0Q2xpZW50IGZyb20gXCIuL3dlYnNvY2tldC1yZXF1ZXN0LWNsaWVudC5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7b2JqZWN0IHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IENvbW1hbmRBcmd1bWVudFNjYWxhck9yT2JqZWN0ICovXG4vKiogQHR5cGVkZWYge0NvbW1hbmRBcmd1bWVudFNjYWxhck9yT2JqZWN0IHwgRmlsZSB8IEZvcm1EYXRhIHwgSFRNTEZvcm1FbGVtZW50IHwgQ29tbWFuZEFyZ3VtZW50U2NhbGFyT3JPYmplY3RbXX0gQ29tbWFuZEFyZ3VtZW50VmFsdWUgKi9cbi8qKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgQ29tbWFuZEFyZ3VtZW50VmFsdWU+fSBDb21tYW5kQXJndW1lbnRNYXAgKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29tbWFuZERlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7Q29tbWFuZEFyZ3VtZW50VmFsdWV9IFthcmdzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbGxlY3Rpb25OYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tbWFuZFxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IFtwcmltYXJ5S2V5XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kUmVxdWVzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NhY2hlUmVzcG9uc2VdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmb3JjZUh0dHBdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpbnN0YW50XVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbW1hbmRSZXNwb25zZUVudmVsb3BlXG4gKiBAcHJvcGVydHkge0NvbW1hbmRBcmd1bWVudE1hcH0gZGF0YVxuICogQHByb3BlcnR5IHtcInN1Y2Nlc3NcIiB8IFwiZXJyb3JcIiB8IFwiZmFpbGVkXCJ9IHR5cGVcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kc1JlcXVlc3RSZXNwb25zZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBDb21tYW5kUmVzcG9uc2VFbnZlbG9wZT59IHJlc3BvbnNlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbc3VjY2Vzc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHlwZV1cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGYWlsZWRDb21tYW5kUmVzcG9uc2VEYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXJyb3JfdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Vycm9yc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt2YWxpZGF0aW9uX2Vycm9yc11cbiAqIEBwcm9wZXJ0eSB7Q29tbWFuZEFyZ3VtZW50TWFwfSBbbW9kZWxdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kRGF0YVR5cGVcbiAqIEBwcm9wZXJ0eSB7QXBpTWFrZXJDb21tYW5kRXhlY3V0aW9ufSBjb21tYW5kRXhlY3V0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhY2tcbiAqL1xuXG4vKiogQHR5cGVkZWYge3tba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IHtba2V5OiBudW1iZXJdOiB7YXJnczogb2JqZWN0LCBwcmltYXJ5X2tleTogbnVtYmVyIHwgc3RyaW5nLCBpZDogbnVtYmVyfX19fX19IFBvb2xEYXRhVHlwZSAqL1xuXG5jb25zdCBzaGFyZWQgPSB7fVxuXG4vKiogQmF0Y2hlcyBjb21tYW5kIHN1Ym1pc3Npb25zIGFuZCBmbHVzaGVzIHRoZW0gb3ZlciBIVFRQIG9yIHdlYnNvY2tldHMuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNvbW1hbmRzUG9vbCB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY29tbWFuZCB0byB0aGUgc2hhcmVkIG9yIG9uZS1vZmYgY29tbWFuZCBwb29sIGFuZCBzY2hlZHVsZXMgYSBmbHVzaC5cbiAgICogQHBhcmFtIHtDb21tYW5kRGVzY3JpcHRvcn0gZGF0YVxuICAgKiBAcGFyYW0ge0NvbW1hbmRSZXF1ZXN0T3B0aW9uc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtBcGlNYWtlckNvbW1hbmRFeGVjdXRpb259XG4gICAqL1xuICBzdGF0aWMgYWRkQ29tbWFuZChkYXRhLCBhcmdzID0ge30pIHtcbiAgICBsZXQgcG9vbFxuICAgIGNvbnN0IHVzZVdlYnNvY2tldFJlcXVlc3RzID0gQ29uZmlnLmdldFdlYnNvY2tldFJlcXVlc3RzKClcblxuICAgIGlmIChhcmdzLmluc3RhbnQgfHwgdXNlV2Vic29ja2V0UmVxdWVzdHMpIHtcbiAgICAgIHBvb2wgPSBuZXcgQXBpTWFrZXJDb21tYW5kc1Bvb2woKVxuICAgICAgcG9vbC5nbG9iYWxSZXF1ZXN0RGF0YSA9IHsuLi5BcGlNYWtlckNvbW1hbmRzUG9vbC5jdXJyZW50KCkuZ2xvYmFsUmVxdWVzdERhdGF9XG4gICAgICBwb29sLnJlcXVlc3RPcHRpb25zID0gey4uLmFyZ3N9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvb2wgPSBBcGlNYWtlckNvbW1hbmRzUG9vbC5jdXJyZW50KClcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlUmVzdWx0ID0gcG9vbC5hZGRDb21tYW5kKGRhdGEpXG5cbiAgICBpZiAoYXJncy5pbnN0YW50IHx8IHVzZVdlYnNvY2tldFJlcXVlc3RzKSB7XG4gICAgICBwb29sLmZsdXNoUnVuTGFzdC5ydW4oKVxuICAgIH0gZWxzZSB7XG4gICAgICBwb29sLmZsdXNoUnVuTGFzdC5xdWV1ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VSZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgY29tbWFuZCBwb29sIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7QXBpTWFrZXJDb21tYW5kc1Bvb2x9XG4gICAqL1xuICBzdGF0aWMgY3VycmVudCgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDb21tYW5kc1Bvb2wpIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDb21tYW5kc1Bvb2wgPSBuZXcgQXBpTWFrZXJDb21tYW5kc1Bvb2woKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDb21tYW5kc1Bvb2xcbiAgfVxuXG4gIC8qKiBGbHVzaGVzIHRoZSBzaGFyZWQgY29tbWFuZCBwb29sIGltbWVkaWF0ZWx5LiAqL1xuICBzdGF0aWMgZmx1c2goKSB7XG4gICAgQXBpTWFrZXJDb21tYW5kc1Bvb2wuY3VycmVudCgpLmZsdXNoKClcbiAgfVxuXG4gIC8qKiBJbml0aWFsaXplcyBvbmUgY29tbWFuZCBwb29sIGluc3RhbmNlIHdpdGggZW1wdHkgcXVldWVkIHN0YXRlLiAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZsdXNoQ291bnQgPSAwXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIsIENvbW1hbmREYXRhVHlwZT59ICovXG4gICAgdGhpcy5wb29sID0ge31cblxuICAgIC8qKiBAdHlwZSB7UG9vbERhdGFUeXBlfSAqL1xuICAgIHRoaXMucG9vbERhdGEgPSB7fVxuXG4gICAgdGhpcy5jdXJyZW50SWQgPSAxXG5cbiAgICAvKiogQHR5cGUge0NvbW1hbmRBcmd1bWVudE1hcH0gKi9cbiAgICB0aGlzLmdsb2JhbFJlcXVlc3REYXRhID0ge31cblxuICAgIC8qKiBAdHlwZSB7Q29tbWFuZFJlcXVlc3RPcHRpb25zfSAqL1xuICAgIHRoaXMucmVxdWVzdE9wdGlvbnMgPSB7fVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb25lIGNvbW1hbmQgZXhlY3V0aW9uIHRvIHRoaXMgcG9vbCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtDb21tYW5kRGVzY3JpcHRvcn0gZGF0YVxuICAgKiBAcmV0dXJucyB7QXBpTWFrZXJDb21tYW5kRXhlY3V0aW9ufVxuICAgKi9cbiAgYWRkQ29tbWFuZChkYXRhKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBFcnJvcigpLnN0YWNrXG4gICAgY29uc3QgaWQgPSB0aGlzLmN1cnJlbnRJZFxuICAgIGNvbnN0IGNvbW1hbmRFeGVjdXRpb24gPSBuZXcgQXBpTWFrZXJDb21tYW5kRXhlY3V0aW9uKClcbiAgICBjb25zdCBjb21tYW5kVHlwZSA9IGRhdGEudHlwZVxuICAgIGNvbnN0IGNvbW1hbmROYW1lID0gZGF0YS5jb21tYW5kXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBkYXRhLmNvbGxlY3Rpb25OYW1lXG5cbiAgICB0aGlzLmN1cnJlbnRJZCArPSAxXG4gICAgdGhpcy5wb29sW2lkXSA9IHtjb21tYW5kRXhlY3V0aW9uLCBzdGFja31cblxuICAgIGlmICghdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV0pIHRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdID0ge31cbiAgICBpZiAoIXRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdW2NvbGxlY3Rpb25OYW1lXSkgdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdID0ge31cbiAgICBpZiAoIXRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdW2NvbGxlY3Rpb25OYW1lXVtjb21tYW5kTmFtZV0pIHRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdW2NvbGxlY3Rpb25OYW1lXVtjb21tYW5kTmFtZV0gPSB7fVxuXG4gICAgbGV0IGFyZ3NcblxuICAgIGlmIChkYXRhLmFyZ3M/Lm5vZGVOYW1lID09IFwiRk9STVwiKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhLmFyZ3MpXG5cbiAgICAgIGFyZ3MgPSBGb3JtRGF0YU9iamVjdGl6ZXIudG9PYmplY3QoZm9ybURhdGEpXG4gICAgfSBlbHNlIGlmIChkYXRhLmFyZ3MgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgYXJncyA9IEZvcm1EYXRhT2JqZWN0aXplci50b09iamVjdChkYXRhLmFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBTZXJpYWxpemVyLnNlcmlhbGl6ZShkYXRhLmFyZ3MpXG4gICAgfVxuXG4gICAgdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdW2NvbW1hbmROYW1lXVtpZF0gPSB7XG4gICAgICBhcmdzLFxuICAgICAgcHJpbWFyeV9rZXk6IGRhdGEucHJpbWFyeUtleSxcbiAgICAgIGlkXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1hbmRFeGVjdXRpb25cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBjb21tYW5kc0NvdW50KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnBvb2wpLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnVybFxuICAgKiBAcGFyYW0ge0NvbW1hbmRTdWJtaXREYXRhfSBhcmdzLmNvbW1hbmRTdWJtaXREYXRhXG4gICAqIEBwYXJhbSB7QXBpTWFrZXJDb21tYW5kRXhlY3V0aW9ufSBbYXJncy5jb21tYW5kRXhlY3V0aW9uXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb21tYW5kc1JlcXVlc3RSZXNwb25zZT59XG4gICAqL1xuICBhc3luYyBzZW5kUmVxdWVzdCh7Y29tbWFuZEV4ZWN1dGlvbiwgY29tbWFuZFN1Ym1pdERhdGEsIHVybH0pIHtcbiAgICBpZiAoQ29uZmlnLmdldFdlYnNvY2tldFJlcXVlc3RzKCkgJiYgIXRoaXMucmVxdWVzdE9wdGlvbnMuZm9yY2VIdHRwICYmIGNvbW1hbmRTdWJtaXREYXRhLmdldEZpbGVzQ291bnQoKSA9PSAwKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtQcm9taXNlPENvbW1hbmRzUmVxdWVzdFJlc3BvbnNlPn0gKi8gKFdlYnNvY2tldFJlcXVlc3RDbGllbnQuY3VycmVudCgpLnBlcmZvcm0oe1xuICAgICAgICBjYWNoZVJlc3BvbnNlOiB0aGlzLnJlcXVlc3RPcHRpb25zLmNhY2hlUmVzcG9uc2UsXG4gICAgICAgIGdsb2JhbDogdGhpcy5nbG9iYWxSZXF1ZXN0RGF0YSxcbiAgICAgICAgb25Mb2c6IChtZXNzYWdlKSA9PiBjb21tYW5kRXhlY3V0aW9uPy5hZGRMb2cobWVzc2FnZSksXG4gICAgICAgIG9uUHJvZ3Jlc3M6IChwcm9ncmVzc0RhdGEpID0+IGNvbW1hbmRFeGVjdXRpb24/LnNldFByb2dyZXNzKHByb2dyZXNzRGF0YSksXG4gICAgICAgIG9uUmVjZWl2ZWQ6IChyZWNlaXZlZERhdGEpID0+IGNvbW1hbmRFeGVjdXRpb24/LnNldFJlY2VpdmVkKHJlY2VpdmVkRGF0YSksXG4gICAgICAgIHJlcXVlc3Q6IGNvbW1hbmRTdWJtaXREYXRhLmdldEpzb25EYXRhKClcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIGxldCByZXNwb25zZVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGlmIChjb21tYW5kU3VibWl0RGF0YS5nZXRGaWxlc0NvdW50KCkgPiAwKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgQXBpLnJlcXVlc3RMb2NhbCh7cGF0aDogdXJsLCBtZXRob2Q6IFwiUE9TVFwiLCByYXdEYXRhOiBjb21tYW5kU3VibWl0RGF0YS5nZXRGb3JtRGF0YSgpfSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IEFwaS5yZXF1ZXN0TG9jYWwoe3BhdGg6IHVybCwgbWV0aG9kOiBcIlBPU1RcIiwgZGF0YTogY29tbWFuZFN1Ym1pdERhdGEuZ2V0SnNvbkRhdGEoKX0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gZmFsc2UgJiYgcmVzcG9uc2UudHlwZSA9PSBcImludmFsaWRfYXV0aGVudGljaXR5X3Rva2VuXCIpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJJbnZhbGlkIGF1dGhlbnRpY2l0eSB0b2tlbiAtIHRyeSBhZ2FpblwiKVxuICAgICAgICBhd2FpdCBTZXNzaW9uU3RhdHVzVXBkYXRlci5jdXJyZW50KCkudXBkYXRlU2Vzc2lvblN0YXR1cygpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgICBjb250aW51ZSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge0NvbW1hbmRzUmVxdWVzdFJlc3BvbnNlfSAqLyAocmVzcG9uc2UpXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRudCBzdWNjZXNzZnVsbHkgZXhlY3V0ZSByZXF1ZXN0XCIpXG4gIH1cblxuICAvKiogU2VuZHMgdGhlIGN1cnJlbnRseSBxdWV1ZWQgY29tbWFuZHMgYW5kIHJlc29sdmVzIG9yIHJlamVjdHMgdGhlaXIgZXhlY3V0aW9ucy4gKi9cbiAgZmx1c2ggPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuY29tbWFuZHNDb3VudCgpID09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRQb29sID0gdGhpcy5wb29sXG4gICAgY29uc3QgY3VycmVudFBvb2xEYXRhID0gdGhpcy5wb29sRGF0YVxuXG4gICAgdGhpcy5wb29sID0ge31cbiAgICB0aGlzLnBvb2xEYXRhID0ge31cbiAgICB0aGlzLmZsdXNoQ291bnQrK1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1Ym1pdERhdGEgPSB7cG9vbDogY3VycmVudFBvb2xEYXRhfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5nbG9iYWxSZXF1ZXN0RGF0YSkubGVuZ3RoID4gMClcbiAgICAgICAgc3VibWl0RGF0YS5nbG9iYWwgPSB0aGlzLmdsb2JhbFJlcXVlc3REYXRhXG5cbiAgICAgIGNvbnN0IGNvbW1hbmRTdWJtaXREYXRhID0gbmV3IENvbW1hbmRTdWJtaXREYXRhKHN1Ym1pdERhdGEpXG4gICAgICBjb25zdCB1cmwgPSBcIi9hcGlfbWFrZXIvY29tbWFuZHNcIlxuICAgICAgY29uc3QgY29tbWFuZEV4ZWN1dGlvbiA9IE9iamVjdC52YWx1ZXMoY3VycmVudFBvb2wpWzBdPy5jb21tYW5kRXhlY3V0aW9uXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe2NvbW1hbmRFeGVjdXRpb24sIGNvbW1hbmRTdWJtaXREYXRhLCB1cmx9KVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhyZXNwb25zZS5yZXNwb25zZXMpLm1hcChhc3luYyhjb21tYW5kSWQpID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gcmVzcG9uc2UucmVzcG9uc2VzW2NvbW1hbmRJZF1cbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlRGF0YSA9IERlc2VyaWFsaXplci5wYXJzZShjb21tYW5kUmVzcG9uc2UuZGF0YSlcbiAgICAgICAgY29uc3QgY29tbWFuZERhdGEgPSBjdXJyZW50UG9vbFtwYXJzZUludChjb21tYW5kSWQsIDEwKV1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gY29tbWFuZFJlc3BvbnNlLnR5cGVcblxuICAgICAgICBpZiAoY29tbWFuZFJlc3BvbnNlRGF0YSAmJiB0eXBlb2YgY29tbWFuZFJlc3BvbnNlRGF0YSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgY29uc3QgYnVnUmVwb3J0VXJsID0gZGlnKGNvbW1hbmRSZXNwb25zZURhdGEsIFwiYnVnX3JlcG9ydF91cmxcIilcblxuICAgICAgICAgIGlmIChidWdSZXBvcnRVcmwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBCdWcgcmVwb3J0IFVSTDogJHtidWdSZXBvcnRVcmx9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgY29tbWFuZERhdGEuY29tbWFuZEV4ZWN1dGlvbi5yZXNvbHZlKGNvbW1hbmRSZXNwb25zZURhdGEpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoaXMucmVqZWN0V2l0aENhbGxlclN0YWNrKGNvbW1hbmREYXRhLCBuZXcgQ3VzdG9tRXJyb3IoXCJDb21tYW5kIGVycm9yXCIsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGYWlsZWRSZXNwb25zZShjb21tYW5kRGF0YSwgY29tbWFuZFJlc3BvbnNlRGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCByZXNwb25zZSB0eXBlOiAke3Jlc3BvbnNlVHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9KSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5mbHVzaENvdW50LS1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb21tYW5kRGF0YVR5cGV9IGNvbW1hbmREYXRhXG4gICAqIEBwYXJhbSB7RmFpbGVkQ29tbWFuZFJlc3BvbnNlRGF0YX0gY29tbWFuZFJlc3BvbnNlRGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGhhbmRsZUZhaWxlZFJlc3BvbnNlKGNvbW1hbmREYXRhLCBjb21tYW5kUmVzcG9uc2VEYXRhKSB7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoU2Vzc2lvblN0YXR1c0Zvck5vQWNjZXNzRXJyb3IoY29tbWFuZFJlc3BvbnNlRGF0YSlcblxuICAgIGxldCBlcnJvclxuXG4gICAgaWYgKGNvbW1hbmRSZXNwb25zZURhdGEuZXJyb3JfdHlwZSA9PSBcImRlc3Ryb3lfZXJyb3JcIikge1xuICAgICAgZXJyb3IgPSBuZXcgRGVzdHJveUVycm9yKFwiRGVzdHJveSBmYWlsZWRcIiwge3Jlc3BvbnNlOiBjb21tYW5kUmVzcG9uc2VEYXRhfSlcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmRSZXNwb25zZURhdGEuZXJyb3JfdHlwZSA9PSBcInZhbGlkYXRpb25fZXJyb3JcIikge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IG5ldyBWYWxpZGF0aW9uRXJyb3JzKHtcbiAgICAgICAgbW9kZWw6IGRpZ2coY29tbWFuZFJlc3BvbnNlRGF0YSwgXCJtb2RlbFwiKSxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogZGlnZyhjb21tYW5kUmVzcG9uc2VEYXRhLCBcInZhbGlkYXRpb25fZXJyb3JzXCIpXG4gICAgICB9KVxuICAgICAgZXJyb3IgPSBuZXcgVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRpb25FcnJvcnMsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pXG5cbiAgICAgIGV2ZW50cy5lbWl0KFwib25WYWxpZGF0aW9uRXJyb3JzXCIsIHZhbGlkYXRpb25FcnJvcnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGNvbW1hbmRSZXNwb25zZURhdGEuZXJyb3JzID8gdW5kZWZpbmVkIDogXCJDb21tYW5kIGZhaWxlZFwiXG5cbiAgICAgIGVycm9yID0gbmV3IEN1c3RvbUVycm9yKGVycm9yTWVzc2FnZSwge3Jlc3BvbnNlOiBjb21tYW5kUmVzcG9uc2VEYXRhfSlcbiAgICB9XG5cbiAgICB0aGlzLnJlamVjdFdpdGhDYWxsZXJTdGFjayhjb21tYW5kRGF0YSwgZXJyb3IpXG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0cyB0aGUgY29tbWFuZCB3aXRoIHRoZSBnaXZlbiBlcnJvciwgc3BsaWNpbmcgdGhlIGNhbGxlcidzIHN0YWNrIChjYXB0dXJlZCBzeW5jaHJvbm91c2x5IGluIGFkZENvbW1hbmQpIG9udG8gZXJyb3Iuc3RhY2suXG4gICAqIE5lZWRlZCBiZWNhdXNlIGVycm9yLnN0YWNrIGlzIGZyb3plbiBhdCBjb25zdHJ1Y3Rpb24gdGltZSBpbnNpZGUgZmx1c2goKSdzIG1pY3JvdGFzayBhbmQgdGhlcmVmb3JlIGxvc2VzIHRoZSBjYWxsZXIncyBmcmFtZXMuXG4gICAqIEBwYXJhbSB7Q29tbWFuZERhdGFUeXBlfSBjb21tYW5kRGF0YVxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlamVjdFdpdGhDYWxsZXJTdGFjayhjb21tYW5kRGF0YSwgZXJyb3IpIHtcbiAgICBpZiAoY29tbWFuZERhdGEuc3RhY2spIHtcbiAgICAgIC8vIFY4IHByZWZpeGVzIFwiRXJyb3JcXG5cIiBhcyBhIGhlYWRlcjsgSlNDL1NwaWRlck1vbmtleSBzdGFja3Mgc3RhcnQgZGlyZWN0bHkgd2l0aCBhIGZyYW1lLlxuICAgICAgY29uc3QgY2FsbGVyRnJhbWVzID0gY29tbWFuZERhdGEuc3RhY2suc3RhcnRzV2l0aChcIkVycm9yXCIpXG4gICAgICAgID8gY29tbWFuZERhdGEuc3RhY2tcbiAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgICA6IGNvbW1hbmREYXRhLnN0YWNrXG5cbiAgICAgIGlmIChjYWxsZXJGcmFtZXMpIHtcbiAgICAgICAgZXJyb3Iuc3RhY2sgPSBgJHtlcnJvci5zdGFjayA/PyBcIlwifVxcbiR7Y2FsbGVyRnJhbWVzfWBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21tYW5kRGF0YS5jb21tYW5kRXhlY3V0aW9uLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0ZhaWxlZENvbW1hbmRSZXNwb25zZURhdGF9IGNvbW1hbmRSZXNwb25zZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByZWZyZXNoU2Vzc2lvblN0YXR1c0Zvck5vQWNjZXNzRXJyb3IoY29tbWFuZFJlc3BvbnNlRGF0YSkge1xuICAgIGlmIChjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yX3R5cGUgIT0gXCJub3RfZm91bmRfb3Jfbm9fYWNjZXNzXCIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lZEluU2NvcGUgPSBEZXZpc2VcbiAgICAgIC5yZWdpc3RlcmVkU2NvcGVzKClcbiAgICAgIC5maW5kKChzY29wZSkgPT4gRGV2aXNlLmN1cnJlbnQoKS5oYXNDdXJyZW50U2NvcGUoc2NvcGUpIHx8IERldmlzZS5jdXJyZW50KCkuaGFzR2xvYmFsQ3VycmVudFNjb3BlKHNjb3BlKSlcblxuICAgIGlmICghc2lnbmVkSW5TY29wZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXdhaXQgU2Vzc2lvblN0YXR1c1VwZGF0ZXIuY3VycmVudCgpLnVwZGF0ZVNlc3Npb25TdGF0dXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGlsZSBvbmUgb3IgbW9yZSBmbHVzaGVzIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy5jb21tYW5kc0NvdW50KCkgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZsdXNoQ291bnQgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZmx1c2hSdW5MYXN0ID0gbmV3IFJ1bkxhc3QodGhpcy5mbHVzaClcbn1cbiJdfQ==
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMtcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29tbWFuZHMtcG9vbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sd0JBQXdCLE1BQU0sd0JBQXdCLENBQUE7QUFDN0QsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDaEYsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBLENBQUMsbUNBQW1DO0FBQ3ZFLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBLENBQUMsbUNBQW1DO0FBQ3pGLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQTtBQUNuQyxPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLG1CQUFtQixNQUFNLDRCQUE0QixDQUFBO0FBQzVELE9BQU8sb0JBQW9CLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxlQUFlLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDdkQsT0FBTyxzQkFBc0IsTUFBTSwrQkFBK0IsQ0FBQTtBQUVsRSxxR0FBcUc7QUFDckcsMElBQTBJO0FBQzFJLHlFQUF5RTtBQUN6RTs7Ozs7OztHQU9HO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7Ozs7O0dBTUc7QUFF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QUNkLENBQUM7SUFFRCxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBBcGkgZnJvbSBcIi4vYXBpLmpzXCJcbmltcG9ydCBBcGlNYWtlckNvbW1hbmRFeGVjdXRpb24gZnJvbSBcIi4vY29tbWFuZC1leGVjdXRpb24uanNcIlxuaW1wb3J0IENvbW1hbmRTdWJtaXREYXRhIGZyb20gXCIuL2NvbW1hbmQtc3VibWl0LWRhdGEuanNcIlxuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi9jb25maWcuanNcIlxuaW1wb3J0IEN1c3RvbUVycm9yIGZyb20gXCIuL2N1c3RvbS1lcnJvci5qc1wiXG5pbXBvcnQgRGVzdHJveUVycm9yIGZyb20gXCIuL2Rlc3Ryb3ktZXJyb3IuanNcIlxuaW1wb3J0IERlc2VyaWFsaXplciBmcm9tIFwiLi9kZXNlcmlhbGl6ZXIuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IERldmlzZSBmcm9tIFwiLi9kZXZpc2UuanNcIlxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IGV2ZW50cyBmcm9tIFwiLi9ldmVudHMuanNcIlxuaW1wb3J0IEZvcm1EYXRhT2JqZWN0aXplciBmcm9tIFwiZm9ybS1kYXRhLW9iamVjdGl6ZXJcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IFJ1bkxhc3QgZnJvbSBcIi4vcnVuLWxhc3QuanNcIlxuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcIi4vc2VyaWFsaXplci5qc1wiXG5pbXBvcnQgU2Vzc2lvbkV4cGlyZWRFcnJvciBmcm9tIFwiLi9zZXNzaW9uLWV4cGlyZWQtZXJyb3IuanNcIlxuaW1wb3J0IFNlc3Npb25TdGF0dXNVcGRhdGVyIGZyb20gXCIuL3Nlc3Npb24tc3RhdHVzLXVwZGF0ZXIuanNcIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tIFwiLi92YWxpZGF0aW9uLWVycm9yLmpzXCJcbmltcG9ydCB7VmFsaWRhdGlvbkVycm9yc30gZnJvbSBcIi4vdmFsaWRhdGlvbi1lcnJvcnMuanNcIlxuaW1wb3J0IFdlYnNvY2tldFJlcXVlc3RDbGllbnQgZnJvbSBcIi4vd2Vic29ja2V0LXJlcXVlc3QtY2xpZW50LmpzXCJcblxuLyoqIEB0eXBlZGVmIHtvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gQ29tbWFuZEFyZ3VtZW50U2NhbGFyT3JPYmplY3QgKi9cbi8qKiBAdHlwZWRlZiB7Q29tbWFuZEFyZ3VtZW50U2NhbGFyT3JPYmplY3QgfCBGaWxlIHwgRm9ybURhdGEgfCBIVE1MRm9ybUVsZW1lbnQgfCBDb21tYW5kQXJndW1lbnRTY2FsYXJPck9iamVjdFtdfSBDb21tYW5kQXJndW1lbnRWYWx1ZSAqL1xuLyoqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBDb21tYW5kQXJndW1lbnRWYWx1ZT59IENvbW1hbmRBcmd1bWVudE1hcCAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHtDb21tYW5kQXJndW1lbnRWYWx1ZX0gW2FyZ3NdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29sbGVjdGlvbk5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW3ByaW1hcnlLZXldXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbW1hbmRSZXF1ZXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbY2FjaGVSZXNwb25zZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2ZvcmNlSHR0cF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luc3RhbnRdXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29tbWFuZFJlc3BvbnNlRW52ZWxvcGVcbiAqIEBwcm9wZXJ0eSB7Q29tbWFuZEFyZ3VtZW50TWFwfSBkYXRhXG4gKiBAcHJvcGVydHkge1wic3VjY2Vzc1wiIHwgXCJlcnJvclwiIHwgXCJmYWlsZWRcIn0gdHlwZVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbW1hbmRzUmVxdWVzdFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIENvbW1hbmRSZXNwb25zZUVudmVsb3BlPn0gcmVzcG9uc2VzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzdWNjZXNzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZhaWxlZENvbW1hbmRSZXNwb25zZURhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlcnJvcl90eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZXJyb3JzXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3ZhbGlkYXRpb25fZXJyb3JzXVxuICogQHByb3BlcnR5IHtDb21tYW5kQXJndW1lbnRNYXB9IFttb2RlbF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbW1hbmREYXRhVHlwZVxuICogQHByb3BlcnR5IHtBcGlNYWtlckNvbW1hbmRFeGVjdXRpb259IGNvbW1hbmRFeGVjdXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGFja1xuICovXG5cbi8qKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXToge1trZXk6IG51bWJlcl06IHthcmdzOiBvYmplY3QsIHByaW1hcnlfa2V5OiBudW1iZXIgfCBzdHJpbmcsIGlkOiBudW1iZXJ9fX19fX0gUG9vbERhdGFUeXBlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0ICYge2lkOiAoKSA9PiBudW1iZXIgfCBzdHJpbmd9fSBCYXNlTW9kZWxXaXRoSWQgKi9cblxuY29uc3Qgc2hhcmVkID0ge31cblxuLyoqIEJhdGNoZXMgY29tbWFuZCBzdWJtaXNzaW9ucyBhbmQgZmx1c2hlcyB0aGVtIG92ZXIgSFRUUCBvciB3ZWJzb2NrZXRzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb21tYW5kc1Bvb2wge1xuICAvKipcbiAgICogQWRkcyBhIGNvbW1hbmQgdG8gdGhlIHNoYXJlZCBvciBvbmUtb2ZmIGNvbW1hbmQgcG9vbCBhbmQgc2NoZWR1bGVzIGEgZmx1c2guXG4gICAqIEBwYXJhbSB7Q29tbWFuZERlc2NyaXB0b3J9IGRhdGFcbiAgICogQHBhcmFtIHtDb21tYW5kUmVxdWVzdE9wdGlvbnN9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7QXBpTWFrZXJDb21tYW5kRXhlY3V0aW9ufVxuICAgKi9cbiAgc3RhdGljIGFkZENvbW1hbmQoZGF0YSwgYXJncyA9IHt9KSB7XG4gICAgbGV0IHBvb2xcbiAgICBjb25zdCB1c2VXZWJzb2NrZXRSZXF1ZXN0cyA9IENvbmZpZy5nZXRXZWJzb2NrZXRSZXF1ZXN0cygpXG5cbiAgICBpZiAoYXJncy5pbnN0YW50IHx8IHVzZVdlYnNvY2tldFJlcXVlc3RzKSB7XG4gICAgICBwb29sID0gbmV3IEFwaU1ha2VyQ29tbWFuZHNQb29sKClcbiAgICAgIHBvb2wuZ2xvYmFsUmVxdWVzdERhdGEgPSB7Li4uQXBpTWFrZXJDb21tYW5kc1Bvb2wuY3VycmVudCgpLmdsb2JhbFJlcXVlc3REYXRhfVxuICAgICAgcG9vbC5yZXF1ZXN0T3B0aW9ucyA9IHsuLi5hcmdzfVxuICAgIH0gZWxzZSB7XG4gICAgICBwb29sID0gQXBpTWFrZXJDb21tYW5kc1Bvb2wuY3VycmVudCgpXG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZVJlc3VsdCA9IHBvb2wuYWRkQ29tbWFuZChkYXRhKVxuXG4gICAgaWYgKGFyZ3MuaW5zdGFudCB8fCB1c2VXZWJzb2NrZXRSZXF1ZXN0cykge1xuICAgICAgcG9vbC5mbHVzaFJ1bkxhc3QucnVuKClcbiAgICB9IGVsc2Uge1xuICAgICAgcG9vbC5mbHVzaFJ1bkxhc3QucXVldWUoKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlUmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2hhcmVkIGNvbW1hbmQgcG9vbCBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge0FwaU1ha2VyQ29tbWFuZHNQb29sfVxuICAgKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyQ29tbWFuZHNQb29sKSBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ29tbWFuZHNQb29sID0gbmV3IEFwaU1ha2VyQ29tbWFuZHNQb29sKClcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ29tbWFuZHNQb29sXG4gIH1cblxuICAvKiogRmx1c2hlcyB0aGUgc2hhcmVkIGNvbW1hbmQgcG9vbCBpbW1lZGlhdGVseS4gKi9cbiAgc3RhdGljIGZsdXNoKCkge1xuICAgIEFwaU1ha2VyQ29tbWFuZHNQb29sLmN1cnJlbnQoKS5mbHVzaCgpXG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgb25lIGNvbW1hbmQgcG9vbCBpbnN0YW5jZSB3aXRoIGVtcHR5IHF1ZXVlZCBzdGF0ZS4gKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5mbHVzaENvdW50ID0gMFxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyLCBDb21tYW5kRGF0YVR5cGU+fSAqL1xuICAgIHRoaXMucG9vbCA9IHt9XG5cbiAgICAvKiogQHR5cGUge1Bvb2xEYXRhVHlwZX0gKi9cbiAgICB0aGlzLnBvb2xEYXRhID0ge31cblxuICAgIHRoaXMuY3VycmVudElkID0gMVxuXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kQXJndW1lbnRNYXB9ICovXG4gICAgdGhpcy5nbG9iYWxSZXF1ZXN0RGF0YSA9IHt9XG5cbiAgICAvKiogQHR5cGUge0NvbW1hbmRSZXF1ZXN0T3B0aW9uc30gKi9cbiAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0ge31cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9uZSBjb21tYW5kIGV4ZWN1dGlvbiB0byB0aGlzIHBvb2wgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7Q29tbWFuZERlc2NyaXB0b3J9IGRhdGFcbiAgICogQHJldHVybnMge0FwaU1ha2VyQ29tbWFuZEV4ZWN1dGlvbn1cbiAgICovXG4gIGFkZENvbW1hbmQoZGF0YSkge1xuICAgIGNvbnN0IHN0YWNrID0gRXJyb3IoKS5zdGFja1xuICAgIGNvbnN0IGlkID0gdGhpcy5jdXJyZW50SWRcbiAgICBjb25zdCBjb21tYW5kRXhlY3V0aW9uID0gbmV3IEFwaU1ha2VyQ29tbWFuZEV4ZWN1dGlvbigpXG4gICAgY29uc3QgY29tbWFuZFR5cGUgPSBkYXRhLnR5cGVcbiAgICBjb25zdCBjb21tYW5kTmFtZSA9IGRhdGEuY29tbWFuZFxuICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZGF0YS5jb2xsZWN0aW9uTmFtZVxuXG4gICAgdGhpcy5jdXJyZW50SWQgKz0gMVxuICAgIHRoaXMucG9vbFtpZF0gPSB7Y29tbWFuZEV4ZWN1dGlvbiwgc3RhY2t9XG5cbiAgICBpZiAoIXRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdKSB0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXSA9IHt9XG4gICAgaWYgKCF0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV0pIHRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdW2NvbGxlY3Rpb25OYW1lXSA9IHt9XG4gICAgaWYgKCF0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV1bY29tbWFuZE5hbWVdKSB0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV1bY29tbWFuZE5hbWVdID0ge31cblxuICAgIGxldCBhcmdzXG5cbiAgICBpZiAoZGF0YS5hcmdzPy5ub2RlTmFtZSA9PSBcIkZPUk1cIikge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZGF0YS5hcmdzKVxuXG4gICAgICBhcmdzID0gRm9ybURhdGFPYmplY3RpemVyLnRvT2JqZWN0KGZvcm1EYXRhKVxuICAgIH0gZWxzZSBpZiAoZGF0YS5hcmdzIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgIGFyZ3MgPSBGb3JtRGF0YU9iamVjdGl6ZXIudG9PYmplY3QoZGF0YS5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gU2VyaWFsaXplci5zZXJpYWxpemUoZGF0YS5hcmdzKVxuICAgIH1cblxuICAgIHRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdW2NvbGxlY3Rpb25OYW1lXVtjb21tYW5kTmFtZV1baWRdID0ge1xuICAgICAgYXJncyxcbiAgICAgIHByaW1hcnlfa2V5OiBkYXRhLnByaW1hcnlLZXksXG4gICAgICBpZFxuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kRXhlY3V0aW9uXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgY29tbWFuZHNDb3VudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wb29sKS5sZW5ndGhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy51cmxcbiAgICogQHBhcmFtIHtDb21tYW5kU3VibWl0RGF0YX0gYXJncy5jb21tYW5kU3VibWl0RGF0YVxuICAgKiBAcGFyYW0ge0FwaU1ha2VyQ29tbWFuZEV4ZWN1dGlvbn0gW2FyZ3MuY29tbWFuZEV4ZWN1dGlvbl1cbiAgICogQHJldHVybnMge1Byb21pc2U8Q29tbWFuZHNSZXF1ZXN0UmVzcG9uc2U+fVxuICAgKi9cbiAgYXN5bmMgc2VuZFJlcXVlc3Qoe2NvbW1hbmRFeGVjdXRpb24sIGNvbW1hbmRTdWJtaXREYXRhLCB1cmx9KSB7XG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAzOyBhdHRlbXB0KyspIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wZXJmb3JtUmVxdWVzdCh7Y29tbWFuZEV4ZWN1dGlvbiwgY29tbWFuZFN1Ym1pdERhdGEsIHVybH0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MgPT09IGZhbHNlICYmIHJlc3BvbnNlLnR5cGUgPT0gXCJpbnZhbGlkX2F1dGhlbnRpY2l0eV90b2tlblwiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW52YWxpZCBhdXRoZW50aWNpdHkgdG9rZW4gLSB0cnkgYWdhaW5cIilcbiAgICAgICAgYXdhaXQgU2Vzc2lvblN0YXR1c1VwZGF0ZXIuY3VycmVudCgpLnVwZGF0ZVNlc3Npb25TdGF0dXMoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgY29udGludWUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MgPT09IGZhbHNlICYmIHJlc3BvbnNlLnR5cGUgPT0gXCJhdXRoZW50aWNhdGlvbl9jaGFuZ2VkXCIpIHtcbiAgICAgICAgY29uc3QgcmVjb3ZlcmVkID0gYXdhaXQgdGhpcy5yZWNvdmVyQXV0aGVudGljYXRpb24oKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWF3YWl0LWluLWxvb3BcblxuICAgICAgICBpZiAocmVjb3ZlcmVkKSBjb250aW51ZSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRpbnVlXG5cbiAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeHBpcmVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtDb21tYW5kc1JlcXVlc3RSZXNwb25zZX0gKi8gKHJlc3BvbnNlKVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbnQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGUgcmVxdWVzdFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgc2luZ2xlIGNvbW1hbmQgcmVxdWVzdCBvdmVyIHdlYnNvY2tldCBvciBIVFRQLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy51cmxcbiAgICogQHBhcmFtIHtDb21tYW5kU3VibWl0RGF0YX0gYXJncy5jb21tYW5kU3VibWl0RGF0YVxuICAgKiBAcGFyYW0ge0FwaU1ha2VyQ29tbWFuZEV4ZWN1dGlvbn0gW2FyZ3MuY29tbWFuZEV4ZWN1dGlvbl1cbiAgICogQHJldHVybnMge1Byb21pc2U8Q29tbWFuZHNSZXF1ZXN0UmVzcG9uc2U+fVxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybVJlcXVlc3Qoe2NvbW1hbmRFeGVjdXRpb24sIGNvbW1hbmRTdWJtaXREYXRhLCB1cmx9KSB7XG4gICAgaWYgKENvbmZpZy5nZXRXZWJzb2NrZXRSZXF1ZXN0cygpICYmICF0aGlzLnJlcXVlc3RPcHRpb25zLmZvcmNlSHR0cCAmJiBjb21tYW5kU3VibWl0RGF0YS5nZXRGaWxlc0NvdW50KCkgPT0gMCkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7UHJvbWlzZTxDb21tYW5kc1JlcXVlc3RSZXNwb25zZT59ICovIChXZWJzb2NrZXRSZXF1ZXN0Q2xpZW50LmN1cnJlbnQoKS5wZXJmb3JtKHtcbiAgICAgICAgY2FjaGVSZXNwb25zZTogdGhpcy5yZXF1ZXN0T3B0aW9ucy5jYWNoZVJlc3BvbnNlLFxuICAgICAgICBnbG9iYWw6IHRoaXMuZ2xvYmFsRGF0YUZvclJlcXVlc3QoKSxcbiAgICAgICAgb25Mb2c6IChtZXNzYWdlKSA9PiBjb21tYW5kRXhlY3V0aW9uPy5hZGRMb2cobWVzc2FnZSksXG4gICAgICAgIG9uUHJvZ3Jlc3M6IChwcm9ncmVzc0RhdGEpID0+IGNvbW1hbmRFeGVjdXRpb24/LnNldFByb2dyZXNzKHByb2dyZXNzRGF0YSksXG4gICAgICAgIG9uUmVjZWl2ZWQ6IChyZWNlaXZlZERhdGEpID0+IGNvbW1hbmRFeGVjdXRpb24/LnNldFJlY2VpdmVkKHJlY2VpdmVkRGF0YSksXG4gICAgICAgIHJlcXVlc3Q6IGNvbW1hbmRTdWJtaXREYXRhLmdldEpzb25EYXRhKClcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIGlmIChjb21tYW5kU3VibWl0RGF0YS5nZXRGaWxlc0NvdW50KCkgPiAwKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtDb21tYW5kc1JlcXVlc3RSZXNwb25zZX0gKi8gKGF3YWl0IEFwaS5yZXF1ZXN0TG9jYWwoe3BhdGg6IHVybCwgbWV0aG9kOiBcIlBPU1RcIiwgcmF3RGF0YTogY29tbWFuZFN1Ym1pdERhdGEuZ2V0Rm9ybURhdGEoKX0pKVxuICAgIH1cblxuICAgIHJldHVybiAvKiogQHR5cGUge0NvbW1hbmRzUmVxdWVzdFJlc3BvbnNlfSAqLyAoYXdhaXQgQXBpLnJlcXVlc3RMb2NhbCh7cGF0aDogdXJsLCBtZXRob2Q6IFwiUE9TVFwiLCBkYXRhOiBjb21tYW5kU3VibWl0RGF0YS5nZXRKc29uRGF0YSgpfSkpXG4gIH1cblxuICAvKipcbiAgICogVGhlIHVzZXIgaWRzIHRoZSBmcm9udGVuZCBiZWxpZXZlcyBpdCBpcyBzaWduZWQgaW4gYXMsIGtleWVkIGJ5IERldmlzZVxuICAgKiBzY29wZS4gU2VudCB3aXRoIGVhY2ggcmVxdWVzdCBzbyB0aGUgYmFja2VuZCBjYW4gZGV0ZWN0IChhbmQgbGV0IHRoZVxuICAgKiBmcm9udGVuZCByZWNvdmVyIGZyb20pIGEgc3RhbGUgc2Vzc2lvbiBiZWZvcmUgcnVubmluZyBjb21tYW5kcy4gVW5kZWZpbmVkXG4gICAqIHdoZW4gbm90aGluZyBpcyBzaWduZWQgaW4sIHNvIGdlbnVpbmVseSBhbm9ueW1vdXMgcmVxdWVzdHMgc2VuZCBubyBiZWxpZWYuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgYmVsaWV2ZWREZXZpc2VVc2VySWRzKCkge1xuICAgIGNvbnN0IGJlbGlldmVkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSAqLyAoe30pXG5cbiAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIERldmlzZS5yZWdpc3RlcmVkU2NvcGVzKCkpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gRGV2aXNlLmN1cnJlbnQoKS5nZXRDdXJyZW50U2NvcGUoc2NvcGUpXG5cbiAgICAgIGlmIChtb2RlbCkgYmVsaWV2ZWRbc2NvcGVdID0gLyoqIEB0eXBlIHtCYXNlTW9kZWxXaXRoSWR9ICovIChtb2RlbCkuaWQoKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhiZWxpZXZlZCkubGVuZ3RoID4gMCA/IGJlbGlldmVkIDogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogVGhlIGdsb2JhbCByZXF1ZXN0IGRhdGEgbWVyZ2VkIHdpdGggdGhlIGJlbGlldmVkIHNpZ25lZC1pbiBpZGVudGl0eS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKi9cbiAgZ2xvYmFsRGF0YUZvclJlcXVlc3QoKSB7XG4gICAgY29uc3QgYmVsaWV2ZWQgPSB0aGlzLmJlbGlldmVkRGV2aXNlVXNlcklkcygpXG5cbiAgICBpZiAoIWJlbGlldmVkKSByZXR1cm4gdGhpcy5nbG9iYWxSZXF1ZXN0RGF0YVxuXG4gICAgcmV0dXJuIHsuLi50aGlzLmdsb2JhbFJlcXVlc3REYXRhLCBiZWxpZXZlZF9kZXZpc2VfdXNlcl9pZHM6IGJlbGlldmVkfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXJzIGZyb20gYW4gYGF1dGhlbnRpY2F0aW9uX2NoYW5nZWRgIHJlc3BvbnNlOiByZWZyZXNoZXMgdGhlIGV4aXN0aW5nXG4gICAqIHdlYnNvY2tldCBjb25uZWN0aW9uJ3MgYXV0aCBpbi1wbGFjZSBmcm9tIHRoZSBjdXJyZW50IHNlcnZlciBzZXNzaW9uIChub1xuICAgKiByZWNvbm5lY3QsIG5vIHBhc3N3b3JkKSBhbmQgcmVjb25jaWxlcyB0aGUgbG9jYWwgc2Vzc2lvbiBjYWNoZS4gUmV0dXJuc1xuICAgKiB3aGV0aGVyIGEgcHJldmlvdXNseSBzaWduZWQtaW4gc2NvcGUgaXMgc3RpbGwgYXV0aGVudGljYXRlZCwgc28gdGhlIHJlcXVlc3RcbiAgICogY2FuIGJlIHJldHJpZWQ7IGZhbHNlIG1lYW5zIHRoZSB1c2VyIGlzIGdlbnVpbmVseSBzaWduZWQgb3V0ICh0aGUgc2lnbi1pblxuICAgKiBmb3JtIGlzIHNob3duIGNlbnRyYWxseSB2aWEgdGhlIERldmlzZSBzaWduLW91dCBldmVudCkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlckF1dGhlbnRpY2F0aW9uKCkge1xuICAgIGNvbnN0IHNlc3Npb25TdGF0dXNVcGRhdGVyID0gU2Vzc2lvblN0YXR1c1VwZGF0ZXIuY3VycmVudCgpXG4gICAgY29uc3Qgc2Vzc2lvblN0YXR1cyA9IGF3YWl0IHNlc3Npb25TdGF0dXNVcGRhdGVyLnNlc3Npb25TdGF0dXMoKVxuICAgIGNvbnN0IHNjb3BlcyA9IERldmlzZS5yZWdpc3RlcmVkU2NvcGVzKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgc2NvcGVzLm1hcCgoc2NvcGUpID0+IERldmlzZS5yZWZyZXNoV2Vic29ja2V0U2Vzc2lvbih7c2NvcGUsIHNoYWRvd1Nlc3Npb25Ub2tlbjogc2Vzc2lvblN0YXR1cz8uc2hhZG93X3Nlc3Npb25fdG9rZW59KSlcbiAgICApXG5cbiAgICBzZXNzaW9uU3RhdHVzVXBkYXRlci5hcHBseVJlc3VsdChzZXNzaW9uU3RhdHVzKVxuXG4gICAgcmV0dXJuIHNjb3Blcy5zb21lKChzY29wZSkgPT4gQm9vbGVhbihzZXNzaW9uU3RhdHVzPy5zY29wZXM/LltzY29wZV0/LnNpZ25lZF9pbikpXG4gIH1cblxuICAvKiogU2VuZHMgdGhlIGN1cnJlbnRseSBxdWV1ZWQgY29tbWFuZHMgYW5kIHJlc29sdmVzIG9yIHJlamVjdHMgdGhlaXIgZXhlY3V0aW9ucy4gKi9cbiAgZmx1c2ggPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuY29tbWFuZHNDb3VudCgpID09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRQb29sID0gdGhpcy5wb29sXG4gICAgY29uc3QgY3VycmVudFBvb2xEYXRhID0gdGhpcy5wb29sRGF0YVxuXG4gICAgdGhpcy5wb29sID0ge31cbiAgICB0aGlzLnBvb2xEYXRhID0ge31cbiAgICB0aGlzLmZsdXNoQ291bnQrK1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1Ym1pdERhdGEgPSB7cG9vbDogY3VycmVudFBvb2xEYXRhfVxuICAgICAgY29uc3QgZ2xvYmFsRGF0YSA9IHRoaXMuZ2xvYmFsRGF0YUZvclJlcXVlc3QoKVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZ2xvYmFsRGF0YSkubGVuZ3RoID4gMClcbiAgICAgICAgc3VibWl0RGF0YS5nbG9iYWwgPSBnbG9iYWxEYXRhXG5cbiAgICAgIGNvbnN0IGNvbW1hbmRTdWJtaXREYXRhID0gbmV3IENvbW1hbmRTdWJtaXREYXRhKHN1Ym1pdERhdGEpXG4gICAgICBjb25zdCB1cmwgPSBcIi9hcGlfbWFrZXIvY29tbWFuZHNcIlxuICAgICAgY29uc3QgY29tbWFuZEV4ZWN1dGlvbiA9IE9iamVjdC52YWx1ZXMoY3VycmVudFBvb2wpWzBdPy5jb21tYW5kRXhlY3V0aW9uXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe2NvbW1hbmRFeGVjdXRpb24sIGNvbW1hbmRTdWJtaXREYXRhLCB1cmx9KVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhyZXNwb25zZS5yZXNwb25zZXMpLm1hcChhc3luYyhjb21tYW5kSWQpID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gcmVzcG9uc2UucmVzcG9uc2VzW2NvbW1hbmRJZF1cbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlRGF0YSA9IERlc2VyaWFsaXplci5wYXJzZShjb21tYW5kUmVzcG9uc2UuZGF0YSlcbiAgICAgICAgY29uc3QgY29tbWFuZERhdGEgPSBjdXJyZW50UG9vbFtwYXJzZUludChjb21tYW5kSWQsIDEwKV1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gY29tbWFuZFJlc3BvbnNlLnR5cGVcblxuICAgICAgICBpZiAoY29tbWFuZFJlc3BvbnNlRGF0YSAmJiB0eXBlb2YgY29tbWFuZFJlc3BvbnNlRGF0YSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgY29uc3QgYnVnUmVwb3J0VXJsID0gZGlnKGNvbW1hbmRSZXNwb25zZURhdGEsIFwiYnVnX3JlcG9ydF91cmxcIilcblxuICAgICAgICAgIGlmIChidWdSZXBvcnRVcmwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBCdWcgcmVwb3J0IFVSTDogJHtidWdSZXBvcnRVcmx9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgY29tbWFuZERhdGEuY29tbWFuZEV4ZWN1dGlvbi5yZXNvbHZlKGNvbW1hbmRSZXNwb25zZURhdGEpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoaXMucmVqZWN0V2l0aENhbGxlclN0YWNrKGNvbW1hbmREYXRhLCBuZXcgQ3VzdG9tRXJyb3IoXCJDb21tYW5kIGVycm9yXCIsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGYWlsZWRSZXNwb25zZShjb21tYW5kRGF0YSwgY29tbWFuZFJlc3BvbnNlRGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCByZXNwb25zZSB0eXBlOiAke3Jlc3BvbnNlVHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9KSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gc2VuZFJlcXVlc3QgKGUuZy4gYW4gdW5yZWNvdmVyYWJsZSBTZXNzaW9uRXhwaXJlZEVycm9yKSBvciByZXNwb25zZVxuICAgICAgLy8gaGFuZGxpbmcgY2FuIHRocm93IGJlZm9yZSB0aGUgcGVyLWNvbW1hbmQgcHJvbWlzZXMgYXJlIHNldHRsZWQuIFJlamVjdFxuICAgICAgLy8gZXZlcnkgcXVldWVkIGNvbW1hbmQgc28gY2FsbGVycyBhd2FpdGluZyB0aGVpciBleGVjdXRpb24gZG9uJ3QgaGFuZ1xuICAgICAgLy8gZm9yZXZlci4gQWxyZWFkeS1zZXR0bGVkIGV4ZWN1dGlvbnMgaWdub3JlIHRoZSBleHRyYSByZWplY3QuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1hbmREYXRhIG9mIE9iamVjdC52YWx1ZXMoY3VycmVudFBvb2wpKSB7XG4gICAgICAgIGNvbW1hbmREYXRhLmNvbW1hbmRFeGVjdXRpb24ucmVqZWN0KC8qKiBAdHlwZSB7RXJyb3J9ICovIChlcnJvcikpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZmx1c2hDb3VudC0tXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29tbWFuZERhdGFUeXBlfSBjb21tYW5kRGF0YVxuICAgKiBAcGFyYW0ge0ZhaWxlZENvbW1hbmRSZXNwb25zZURhdGF9IGNvbW1hbmRSZXNwb25zZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBoYW5kbGVGYWlsZWRSZXNwb25zZShjb21tYW5kRGF0YSwgY29tbWFuZFJlc3BvbnNlRGF0YSkge1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaFNlc3Npb25TdGF0dXNGb3JOb0FjY2Vzc0Vycm9yKGNvbW1hbmRSZXNwb25zZURhdGEpXG5cbiAgICBsZXQgZXJyb3JcblxuICAgIGlmIChjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yX3R5cGUgPT0gXCJkZXN0cm95X2Vycm9yXCIpIHtcbiAgICAgIGVycm9yID0gbmV3IERlc3Ryb3lFcnJvcihcIkRlc3Ryb3kgZmFpbGVkXCIsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pXG4gICAgfSBlbHNlIGlmIChjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yX3R5cGUgPT0gXCJ2YWxpZGF0aW9uX2Vycm9yXCIpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBuZXcgVmFsaWRhdGlvbkVycm9ycyh7XG4gICAgICAgIG1vZGVsOiBkaWdnKGNvbW1hbmRSZXNwb25zZURhdGEsIFwibW9kZWxcIiksXG4gICAgICAgIHZhbGlkYXRpb25FcnJvcnM6IGRpZ2coY29tbWFuZFJlc3BvbnNlRGF0YSwgXCJ2YWxpZGF0aW9uX2Vycm9yc1wiKVxuICAgICAgfSlcbiAgICAgIGVycm9yID0gbmV3IFZhbGlkYXRpb25FcnJvcih2YWxpZGF0aW9uRXJyb3JzLCB7cmVzcG9uc2U6IGNvbW1hbmRSZXNwb25zZURhdGF9KVxuXG4gICAgICBldmVudHMuZW1pdChcIm9uVmFsaWRhdGlvbkVycm9yc1wiLCB2YWxpZGF0aW9uRXJyb3JzKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9ycyA/IHVuZGVmaW5lZCA6IFwiQ29tbWFuZCBmYWlsZWRcIlxuXG4gICAgICBlcnJvciA9IG5ldyBDdXN0b21FcnJvcihlcnJvck1lc3NhZ2UsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pXG4gICAgfVxuXG4gICAgdGhpcy5yZWplY3RXaXRoQ2FsbGVyU3RhY2soY29tbWFuZERhdGEsIGVycm9yKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdHMgdGhlIGNvbW1hbmQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3IsIHNwbGljaW5nIHRoZSBjYWxsZXIncyBzdGFjayAoY2FwdHVyZWQgc3luY2hyb25vdXNseSBpbiBhZGRDb21tYW5kKSBvbnRvIGVycm9yLnN0YWNrLlxuICAgKiBOZWVkZWQgYmVjYXVzZSBlcnJvci5zdGFjayBpcyBmcm96ZW4gYXQgY29uc3RydWN0aW9uIHRpbWUgaW5zaWRlIGZsdXNoKCkncyBtaWNyb3Rhc2sgYW5kIHRoZXJlZm9yZSBsb3NlcyB0aGUgY2FsbGVyJ3MgZnJhbWVzLlxuICAgKiBAcGFyYW0ge0NvbW1hbmREYXRhVHlwZX0gY29tbWFuZERhdGFcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWplY3RXaXRoQ2FsbGVyU3RhY2soY29tbWFuZERhdGEsIGVycm9yKSB7XG4gICAgaWYgKGNvbW1hbmREYXRhLnN0YWNrKSB7XG4gICAgICAvLyBWOCBwcmVmaXhlcyBcIkVycm9yXFxuXCIgYXMgYSBoZWFkZXI7IEpTQy9TcGlkZXJNb25rZXkgc3RhY2tzIHN0YXJ0IGRpcmVjdGx5IHdpdGggYSBmcmFtZS5cbiAgICAgIGNvbnN0IGNhbGxlckZyYW1lcyA9IGNvbW1hbmREYXRhLnN0YWNrLnN0YXJ0c1dpdGgoXCJFcnJvclwiKVxuICAgICAgICA/IGNvbW1hbmREYXRhLnN0YWNrXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICAgICAgOiBjb21tYW5kRGF0YS5zdGFja1xuXG4gICAgICBpZiAoY2FsbGVyRnJhbWVzKSB7XG4gICAgICAgIGVycm9yLnN0YWNrID0gYCR7ZXJyb3Iuc3RhY2sgPz8gXCJcIn1cXG4ke2NhbGxlckZyYW1lc31gXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tbWFuZERhdGEuY29tbWFuZEV4ZWN1dGlvbi5yZWplY3QoZXJyb3IpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtGYWlsZWRDb21tYW5kUmVzcG9uc2VEYXRhfSBjb21tYW5kUmVzcG9uc2VEYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaFNlc3Npb25TdGF0dXNGb3JOb0FjY2Vzc0Vycm9yKGNvbW1hbmRSZXNwb25zZURhdGEpIHtcbiAgICBpZiAoY29tbWFuZFJlc3BvbnNlRGF0YS5lcnJvcl90eXBlICE9IFwibm90X2ZvdW5kX29yX25vX2FjY2Vzc1wiKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaWduZWRJblNjb3BlID0gRGV2aXNlXG4gICAgICAucmVnaXN0ZXJlZFNjb3BlcygpXG4gICAgICAuZmluZCgoc2NvcGUpID0+IERldmlzZS5jdXJyZW50KCkuaGFzQ3VycmVudFNjb3BlKHNjb3BlKSB8fCBEZXZpc2UuY3VycmVudCgpLmhhc0dsb2JhbEN1cnJlbnRTY29wZShzY29wZSkpXG5cbiAgICBpZiAoIXNpZ25lZEluU2NvcGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGF3YWl0IFNlc3Npb25TdGF0dXNVcGRhdGVyLmN1cnJlbnQoKS51cGRhdGVTZXNzaW9uU3RhdHVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hpbGUgb25lIG9yIG1vcmUgZmx1c2hlcyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNBY3RpdmUoKSB7XG4gICAgaWYgKHRoaXMuY29tbWFuZHNDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mbHVzaENvdW50ID4gMCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZsdXNoUnVuTGFzdCA9IG5ldyBSdW5MYXN0KHRoaXMuZmx1c2gpXG59XG4iXX0=
|
package/build/config.d.ts
CHANGED
|
@@ -62,5 +62,26 @@ declare class ApiMakerConfig {
|
|
|
62
62
|
* @param {boolean} _newValue
|
|
63
63
|
*/
|
|
64
64
|
setUseHtmlForm(_newValue: boolean): void;
|
|
65
|
+
/**
|
|
66
|
+
* Opens a streaming file sink for table exports on platforms without a web default (e.g. React
|
|
67
|
+
* Native/Expo). Receives `{fileName, mimeType, format}` and returns a sink
|
|
68
|
+
* `{write(chunk), close(), abort()}`.
|
|
69
|
+
* @returns {((args: object) => Promise<object>) | undefined}
|
|
70
|
+
*/
|
|
71
|
+
getExportFileSinkOpener(): ((args: object) => Promise<object>) | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* @param {((args: object) => Promise<object>) | undefined} opener
|
|
74
|
+
*/
|
|
75
|
+
setExportFileSinkOpener(opener: ((args: object) => Promise<object>) | undefined): void;
|
|
76
|
+
/**
|
|
77
|
+
* Serializes an array-of-arrays (header + rows) into xlsx bytes, enabling the optional Excel export format
|
|
78
|
+
* without api_maker depending on a spreadsheet library. Returns a `Uint8Array` (or a promise of one).
|
|
79
|
+
* @returns {((rows: Array<Array<unknown>>) => Uint8Array | Promise<Uint8Array>) | undefined}
|
|
80
|
+
*/
|
|
81
|
+
getExportXlsxSerializer(): ((rows: Array<Array<unknown>>) => Uint8Array | Promise<Uint8Array>) | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* @param {((rows: Array<Array<unknown>>) => Uint8Array | Promise<Uint8Array>) | undefined} serializer
|
|
84
|
+
*/
|
|
85
|
+
setExportXlsxSerializer(serializer: ((rows: Array<Array<unknown>>) => Uint8Array | Promise<Uint8Array>) | undefined): void;
|
|
65
86
|
}
|
|
66
87
|
//# sourceMappingURL=config.d.ts.map
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"/src/","sources":["config.js"],"names":[],"mappings":";mCAIc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;6BAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;uBAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;+BACtB;IAAC,MAAM,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC;2BAE9C;IAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAC,KAAK,IAAI,CAAA;CAAC;0BAG5F,oBAAoB,EAAE,GAAG,cAAc,EAAE,GAAG,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAClG,OAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"/src/","sources":["config.js"],"names":[],"mappings":";mCAIc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;6BAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;uBAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;+BACtB;IAAC,MAAM,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC;2BAE9C;IAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAC,KAAK,IAAI,CAAA;CAAC;0BAG5F,oBAAoB,EAAE,GAAG,cAAc,EAAE,GAAG,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAClG,OAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;AAqLnD,6CAA2C;6BAjMhB,eAAe;AAkD1C,uFAAuF;AACvF;IAKI,YAA6C;IAC7C,2CAAgC;IAGlC;;;OAGG;IACH,aAFa,YAAY,CAES;IAElC,kDAAkD;IAClD,cADc,OAAO,SAAS,EAAE,cAAc,CAG7C;IAED,wBAAwB;IACxB,WADc,MAAM,CAGnB;IAED,oCAAoC;IACpC,eADc,MAAM,GAAG,SAAS,CAG/B;IAED,wBAAwB;IACxB,iCADc,MAAM,CAGnB;IAED;;OAEG;IACH,yCAFW,MAAM,QAEyF;IAE1G;;OAEG;IACH,uBAFW,MAAM,GAAG,SAAS,QAEyC;IAEtE,qCAAqC;IACrC,wBADc,OAAO,GAAG,SAAS,CAGhC;IAED;;OAEG;IACH,gCAFW,OAAO,GAAG,SAAS,QAE0D;IAExF,uCAAuC;IACvC,2BADc,KAAK,CAAC,cAAc,CAAC,CAGlC;IAED,wBAAwB;IACxB,YADc,MAAM,CAGnB;IAED,kCAAkC;IAClC,uBADc,gBAAgB,CAG7B;IAED,0BAA0B;IAC1B,aADc,QAAQ,CAGrB;IAED,yBAAyB;IACzB,kBADc,OAAO,CAGpB;IAED;;OAEG;IACH,0BAFW,OAAO,QAE0D;IAK5E;;;;;OAKG;IACH,2BAFa,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAES;IAErE;;OAEG;IACH,gCAFW,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,QAEmB;IAE7E;;;;OAIG;IACH,2BAFa,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAEvB;IAErE;;OAEG;IACH,oCAFW,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,QAEL;CACtF"}
|
package/build/config.js
CHANGED
|
@@ -115,6 +115,29 @@ class ApiMakerConfig {
|
|
|
115
115
|
* @param {boolean} _newValue
|
|
116
116
|
*/
|
|
117
117
|
setUseHtmlForm(_newValue) { apiMakerConfigNotImplemented("setUseHtmlForm"); }
|
|
118
|
+
// Table export hooks. These hold functions that should be returned as-is (not invoked), so they use
|
|
119
|
+
// explicit accessors instead of the generic accessor loop below (which would call function values).
|
|
120
|
+
/**
|
|
121
|
+
* Opens a streaming file sink for table exports on platforms without a web default (e.g. React
|
|
122
|
+
* Native/Expo). Receives `{fileName, mimeType, format}` and returns a sink
|
|
123
|
+
* `{write(chunk), close(), abort()}`.
|
|
124
|
+
* @returns {((args: object) => Promise<object>) | undefined}
|
|
125
|
+
*/
|
|
126
|
+
getExportFileSinkOpener() { return this.global.exportFileSinkOpener; }
|
|
127
|
+
/**
|
|
128
|
+
* @param {((args: object) => Promise<object>) | undefined} opener
|
|
129
|
+
*/
|
|
130
|
+
setExportFileSinkOpener(opener) { this.global.exportFileSinkOpener = opener; }
|
|
131
|
+
/**
|
|
132
|
+
* Serializes an array-of-arrays (header + rows) into xlsx bytes, enabling the optional Excel export format
|
|
133
|
+
* without api_maker depending on a spreadsheet library. Returns a `Uint8Array` (or a promise of one).
|
|
134
|
+
* @returns {((rows: Array<Array<unknown>>) => Uint8Array | Promise<Uint8Array>) | undefined}
|
|
135
|
+
*/
|
|
136
|
+
getExportXlsxSerializer() { return this.global.exportXlsxSerializer; }
|
|
137
|
+
/**
|
|
138
|
+
* @param {((rows: Array<Array<unknown>>) => Uint8Array | Promise<Uint8Array>) | undefined} serializer
|
|
139
|
+
*/
|
|
140
|
+
setExportXlsxSerializer(serializer) { this.global.exportXlsxSerializer = serializer; }
|
|
118
141
|
}
|
|
119
142
|
for (const accessorName in accessors) {
|
|
120
143
|
const accessorData = accessors[accessorName];
|
|
@@ -141,4 +164,4 @@ for (const accessorName in accessors) {
|
|
|
141
164
|
}
|
|
142
165
|
const apiMakerConfig = new ApiMakerConfig();
|
|
143
166
|
export default apiMakerConfig;
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb25maWcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUEsQ0FBQyxtQ0FBbUM7QUFFNUUsdUVBQXVFO0FBQ3ZFLDhEQUE4RDtBQUM5RCxpREFBaUQ7QUFDakQsZ0ZBQWdGO0FBQ2hGOztHQUVHO0FBQ0g7OztHQUdHO0FBRUgsTUFBTSxTQUFTLEdBQUc7SUFDaEIsV0FBVyxFQUFFO1FBQ1gsT0FBTyxFQUFFO1lBQ1AsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ1osQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ1gsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEVBQUUsSUFBSTtLQUNmO0lBQ0QsUUFBUSxFQUFFLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQztJQUMxQixvQkFBb0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7SUFDdEMsMEJBQTBCLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7SUFDNUQsT0FBTyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztJQUN6QixJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFDO0lBQ3ZCLElBQUksRUFBRSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUM7SUFDdkIsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztJQUN4QixLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFDO0lBQ3hCLFVBQVUsRUFB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b3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gXCJldmVudGVtaXR0ZXIzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuXG4vKiogQHR5cGVkZWYge1tuYW1lOiBzdHJpbmcsIG1pbldpZHRoOiBudW1iZXJdfSBCcmVha3BvaW50RGVmaW5pdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtbbGFiZWw6IHN0cmluZywgY29kZTogc3RyaW5nXX0gQ3VycmVuY3lPcHRpb24gKi9cbi8qKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgb2JqZWN0Pn0gUm91dGVNYXAgKi9cbi8qKiBAdHlwZWRlZiB7e3JvdXRlczogQXJyYXk8e25hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nfT59fSBSb3V0ZURlZmluaXRpb25zICovXG4vKipcbiAqIEB0eXBlZGVmIHt7ZW1pdDogKGV2ZW50TmFtZTogc3RyaW5nLCBwYXlsb2FkOiB7b2xkVmFsdWU6IENvbmZpZ1ZhbHVlLCBuZXdWYWx1ZTogQ29uZmlnVmFsdWV9KSA9PiB2b2lkfX0gQ29uZmlnRXZlbnRzXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge0JyZWFrcG9pbnREZWZpbml0aW9uW10gfCBDdXJyZW5jeU9wdGlvbltdIHwgUm91dGVNYXAgfCBSb3V0ZURlZmluaXRpb25zIHwgRXZlbnRFbWl0dGVyIHxcbiAqICAgYm9vbGVhbiB8IG51bWJlciB8IG9iamVjdCB8IHN0cmluZyB8IHVuZGVmaW5lZH0gQ29uZmlnVmFsdWVcbiAqL1xuXG5jb25zdCBhY2Nlc3NvcnMgPSB7XG4gIGJyZWFrcG9pbnRzOiB7XG4gICAgZGVmYXVsdDogW1xuICAgICAgW1wieHhsXCIsIDE0MDBdLFxuICAgICAgW1wieGxcIiwgMTIwMF0sXG4gICAgICBbXCJsZ1wiLCA5OTJdLFxuICAgICAgW1wibWRcIiwgNzY4XSxcbiAgICAgIFtcInNtXCIsIDU3Nl0sXG4gICAgICBbXCJ4c1wiLCAwXVxuICAgIF0sXG4gICAgcmVxdWlyZWQ6IHRydWVcbiAgfSxcbiAgY2FibGVVcmw6IHtyZXF1aXJlOiBmYWxzZX0sXG4gIGN1cnJlbmNpZXNDb2xsZWN0aW9uOiB7cmVxdWlyZWQ6IHRydWV9LFxuICBkYW5nZXJvdXNSb3dDb3VudFRocmVzaG9sZDoge2RlZmF1bHQ6IDEwMDAsIHJlcXVpcmVkOiBmYWxzZX0sXG4gIGhpc3Rvcnk6IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIGhvc3Q6IHtyZXF1aXJlZDogZmFsc2V9LFxuICBpMThuOiB7cmVxdWlyZWQ6IGZhbHNlfSxcbiAgbGlua1RvOiB7cmVxdWlyZWQ6IHRydWV9LFxuICBtb2RhbDoge3JlcXVpcmVkOiBmYWxzZX0sXG4gIG5hdmlnYXRpb246IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIHJvdXRlczoge3JlcXVpcmVkOiBmYWxzZX0sXG4gIHJvdXRlRGVmaW5pdGlvbnM6IHtyZXF1aXJlZDogZmFsc2V9LFxuICB1c2VIdG1sRm9ybToge2RlZmF1bHQ6IGZhbHNlLCByZXF1aXJlZDogZmFsc2V9LFxuICB3ZWJzb2NrZXRSZXF1ZXN0czoge3JlcXVpcmVkOiBmYWxzZX1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZVxuICogQHJldHVybnMge25ldmVyfVxuICovXG5jb25zdCBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkID0gKG1ldGhvZE5hbWUpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKGAnJHttZXRob2ROYW1lfScgbm90IGltcGxlbWVudGVkYClcbn1cblxuLyoqIFN0b3JlcyBnbG9iYWxseSBjb25maWd1cmVkIEFwaSBNYWtlciBpbnRlZ3JhdGlvbiBob29rcyBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMuICovXG5jbGFzcyBBcGlNYWtlckNvbmZpZyB7XG4gIC8qKiBJbml0aWFsaXplcyB0aGUgc2hhcmVkIGNvbmZpZyBzdGF0ZSBhbmQgY2hhbmdlIGVtaXR0ZXIuICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghZ2xvYmFsVGhpcy5hcGlNYWtlckNvbmZpZ0dsb2JhbCkgZ2xvYmFsVGhpcy5hcGlNYWtlckNvbmZpZ0dsb2JhbCA9IHt9XG5cbiAgICB0aGlzLmdsb2JhbCA9IGdsb2JhbFRoaXMuYXBpTWFrZXJDb25maWdHbG9iYWxcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV2ZW50IGVtaXR0ZXIgdXNlZCBmb3IgY29uZmlnIGNoYW5nZSBub3RpZmljYXRpb25zLlxuICAgKiBAcmV0dXJucyB7Q29uZmlnRXZlbnRzfVxuICAgKi9cbiAgZ2V0RXZlbnRzKCkgeyByZXR1cm4gdGhpcy5ldmVudHMgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiaGlzdG9yeVwiKS5Ccm93c2VySGlzdG9yeX0gKi9cbiAgZ2V0SGlzdG9yeSgpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldEhpc3RvcnlcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBnZXRIb3N0KCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0SG9zdFwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gIGdldENhYmxlVXJsKCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0Q2FibGVVcmxcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBnZXREYW5nZXJvdXNSb3dDb3VudFRocmVzaG9sZCgpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldERhbmdlcm91c1Jvd0NvdW50VGhyZXNob2xkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IF9uZXdWYWx1ZVxuICAgKi9cbiAgc2V0RGFuZ2Vyb3VzUm93Q291bnRUaHJlc2hvbGQoX25ld1ZhbHVlKSB7IGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJzZXREYW5nZXJvdXNSb3dDb3VudFRocmVzaG9sZFwiKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBfbmV3VmFsdWVcbiAgICovXG4gIHNldENhYmxlVXJsKF9uZXdWYWx1ZSkgeyBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwic2V0Q2FibGVVcmxcIikgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgZ2V0V2Vic29ja2V0UmVxdWVzdHMoKSB7XG4gICAgcmV0dXJuIGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJnZXRXZWJzb2NrZXRSZXF1ZXN0c1wiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gX25ld1ZhbHVlXG4gICAqL1xuICBzZXRXZWJzb2NrZXRSZXF1ZXN0cyhfbmV3VmFsdWUpIHsgYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcInNldFdlYnNvY2tldFJlcXVlc3RzXCIpIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEN1cnJlbmN5T3B0aW9uPn0gKi9cbiAgZ2V0Q3VycmVuY2llc0NvbGxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJnZXRDdXJyZW5jaWVzQ29sbGVjdGlvblwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtvYmplY3R9ICovXG4gIGdldE1vZGFsKCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0TW9kYWxcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Um91dGVEZWZpbml0aW9uc30gKi9cbiAgZ2V0Um91dGVEZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldFJvdXRlRGVmaW5pdGlvbnNcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Um91dGVNYXB9ICovXG4gIGdldFJvdXRlcygpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldFJvdXRlc1wiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBnZXRVc2VIdG1sRm9ybSgpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldFVzZUh0bWxGb3JtXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBfbmV3VmFsdWVcbiAgICovXG4gIHNldFVzZUh0bWxGb3JtKF9uZXdWYWx1ZSkgeyBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwic2V0VXNlSHRtbEZvcm1cIikgfVxufVxuXG5mb3IgKGNvbnN0IGFjY2Vzc29yTmFtZSBpbiBhY2Nlc3NvcnMpIHtcbiAgY29uc3QgYWNjZXNzb3JEYXRhID0gYWNjZXNzb3JzW2FjY2Vzc29yTmFtZV1cbiAgY29uc3QgY2FtZWxpemVkQWNjZXNzb3IgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFjY2Vzc29yTmFtZSlcblxuICBBcGlNYWtlckNvbmZpZy5wcm90b3R5cGVbYHNldCR7Y2FtZWxpemVkQWNjZXNzb3J9YF0gPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2xvYmFsW2FjY2Vzc29yTmFtZV1cblxuICAgIHRoaXMuZ2xvYmFsW2FjY2Vzc29yTmFtZV0gPSBuZXdWYWx1ZVxuXG4gICAgaWYgKG9sZFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5ldmVudHMuZW1pdChgb24ke2NhbWVsaXplZEFjY2Vzc29yfUNoYW5nZWAsIHtvbGRWYWx1ZSwgbmV3VmFsdWV9KVxuICAgIH1cbiAgfVxuXG4gIEFwaU1ha2VyQ29uZmlnLnByb3RvdHlwZVtgZ2V0JHtjYW1lbGl6ZWRBY2Nlc3Nvcn1gXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHRoaXMuZ2xvYmFsW2FjY2Vzc29yTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFjY2Vzc29yRGF0YS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiBhY2Nlc3NvckRhdGEuZGVmYXVsdFxuICAgICAgaWYgKGFjY2Vzc29yRGF0YS5yZXF1aXJlZCkgdGhyb3cgbmV3IEVycm9yKGAke2FjY2Vzc29yTmFtZX0gaGFzbid0IGJlZW4gc2V0YClcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2xvYmFsW2FjY2Vzc29yTmFtZV1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdmFsdWUoLi4uYXJncylcblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbmNvbnN0IGFwaU1ha2VyQ29uZmlnID0gbmV3IEFwaU1ha2VyQ29uZmlnKClcblxuZXhwb3J0IGRlZmF1bHQgYXBpTWFrZXJDb25maWdcbiJdfQ==
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb25maWcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUEsQ0FBQyxtQ0FBbUM7QUFFNUUsdUVBQXVFO0FBQ3ZFLDhEQUE4RDtBQUM5RCxpREFBaUQ7QUFDakQsZ0ZBQWdGO0FBQ2hGOztHQUVHO0FBQ0g7OztHQUdHO0FBRUgsTUFBTSxTQUFTLEdBQUc7SUFDaEIsV0FBVyxFQUFFO1FBQ1gsT0FBTyxFQUFFO1lBQ1AsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ1osQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ1gsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ1gsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEVBQUUsSUFBSTtLQUNmO0lBQ0QsUUFBUSxFQUFFLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQztJQUMxQixvQkFBb0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7SUFDdEMsMEJBQTBCLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7SUFDNUQsT0FBTyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztJQUN6QixJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFDO0lBQ3ZCLElBQUksRUFBRSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUM7SUFDdkIsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztJQUN4QixLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFDO0lBQ3hCLFVBQVUsRUFB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Q0FBQTtZQUNuRSxJQUFJLFlBQVksQ0FBQyxRQUFRO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLGtCQUFrQixDQUFDLENBQUE7UUFDL0UsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFdkMsSUFBSSxPQUFPLEtBQUssSUFBSSxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUVyRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO0FBRTNDLGVBQWUsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5cbi8qKiBAdHlwZWRlZiB7W25hbWU6IHN0cmluZywgbWluV2lkdGg6IG51bWJlcl19IEJyZWFrcG9pbnREZWZpbml0aW9uICovXG4vKiogQHR5cGVkZWYge1tsYWJlbDogc3RyaW5nLCBjb2RlOiBzdHJpbmddfSBDdXJyZW5jeU9wdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fSBSb3V0ZU1hcCAqL1xuLyoqIEB0eXBlZGVmIHt7cm91dGVzOiBBcnJheTx7bmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmd9Pn19IFJvdXRlRGVmaW5pdGlvbnMgKi9cbi8qKlxuICogQHR5cGVkZWYge3tlbWl0OiAoZXZlbnROYW1lOiBzdHJpbmcsIHBheWxvYWQ6IHtvbGRWYWx1ZTogQ29uZmlnVmFsdWUsIG5ld1ZhbHVlOiBDb25maWdWYWx1ZX0pID0+IHZvaWR9fSBDb25maWdFdmVudHNcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7QnJlYWtwb2ludERlZmluaXRpb25bXSB8IEN1cnJlbmN5T3B0aW9uW10gfCBSb3V0ZU1hcCB8IFJvdXRlRGVmaW5pdGlvbnMgfCBFdmVudEVtaXR0ZXIgfFxuICogICBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBDb25maWdWYWx1ZVxuICovXG5cbmNvbnN0IGFjY2Vzc29ycyA9IHtcbiAgYnJlYWtwb2ludHM6IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICBbXCJ4eGxcIiwgMTQwMF0sXG4gICAgICBbXCJ4bFwiLCAxMjAwXSxcbiAgICAgIFtcImxnXCIsIDk5Ml0sXG4gICAgICBbXCJtZFwiLCA3NjhdLFxuICAgICAgW1wic21cIiwgNTc2XSxcbiAgICAgIFtcInhzXCIsIDBdXG4gICAgXSxcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LFxuICBjYWJsZVVybDoge3JlcXVpcmU6IGZhbHNlfSxcbiAgY3VycmVuY2llc0NvbGxlY3Rpb246IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIGRhbmdlcm91c1Jvd0NvdW50VGhyZXNob2xkOiB7ZGVmYXVsdDogMTAwMCwgcmVxdWlyZWQ6IGZhbHNlfSxcbiAgaGlzdG9yeToge3JlcXVpcmVkOiB0cnVlfSxcbiAgaG9zdDoge3JlcXVpcmVkOiBmYWxzZX0sXG4gIGkxOG46IHtyZXF1aXJlZDogZmFsc2V9LFxuICBsaW5rVG86IHtyZXF1aXJlZDogdHJ1ZX0sXG4gIG1vZGFsOiB7cmVxdWlyZWQ6IGZhbHNlfSxcbiAgbmF2aWdhdGlvbjoge3JlcXVpcmVkOiB0cnVlfSxcbiAgcm91dGVzOiB7cmVxdWlyZWQ6IGZhbHNlfSxcbiAgcm91dGVEZWZpbml0aW9uczoge3JlcXVpcmVkOiBmYWxzZX0sXG4gIHVzZUh0bWxGb3JtOiB7ZGVmYXVsdDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZX0sXG4gIHdlYnNvY2tldFJlcXVlc3RzOiB7cmVxdWlyZWQ6IGZhbHNlfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lXG4gKiBAcmV0dXJucyB7bmV2ZXJ9XG4gKi9cbmNvbnN0IGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQgPSAobWV0aG9kTmFtZSkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoYCcke21ldGhvZE5hbWV9JyBub3QgaW1wbGVtZW50ZWRgKVxufVxuXG4vKiogU3RvcmVzIGdsb2JhbGx5IGNvbmZpZ3VyZWQgQXBpIE1ha2VyIGludGVncmF0aW9uIGhvb2tzIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcy4gKi9cbmNsYXNzIEFwaU1ha2VyQ29uZmlnIHtcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBzaGFyZWQgY29uZmlnIHN0YXRlIGFuZCBjaGFuZ2UgZW1pdHRlci4gKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCFnbG9iYWxUaGlzLmFwaU1ha2VyQ29uZmlnR2xvYmFsKSBnbG9iYWxUaGlzLmFwaU1ha2VyQ29uZmlnR2xvYmFsID0ge31cblxuICAgIHRoaXMuZ2xvYmFsID0gZ2xvYmFsVGhpcy5hcGlNYWtlckNvbmZpZ0dsb2JhbFxuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXZlbnQgZW1pdHRlciB1c2VkIGZvciBjb25maWcgY2hhbmdlIG5vdGlmaWNhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtDb25maWdFdmVudHN9XG4gICAqL1xuICBnZXRFdmVudHMoKSB7IHJldHVybiB0aGlzLmV2ZW50cyB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJoaXN0b3J5XCIpLkJyb3dzZXJIaXN0b3J5fSAqL1xuICBnZXRIaXN0b3J5KCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0SGlzdG9yeVwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIGdldEhvc3QoKSB7XG4gICAgcmV0dXJuIGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJnZXRIb3N0XCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgZ2V0Q2FibGVVcmwoKSB7XG4gICAgcmV0dXJuIGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJnZXRDYWJsZVVybFwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ9ICovXG4gIGdldERhbmdlcm91c1Jvd0NvdW50VGhyZXNob2xkKCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0RGFuZ2Vyb3VzUm93Q291bnRUaHJlc2hvbGRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gX25ld1ZhbHVlXG4gICAqL1xuICBzZXREYW5nZXJvdXNSb3dDb3VudFRocmVzaG9sZChfbmV3VmFsdWUpIHsgYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcInNldERhbmdlcm91c1Jvd0NvdW50VGhyZXNob2xkXCIpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IF9uZXdWYWx1ZVxuICAgKi9cbiAgc2V0Q2FibGVVcmwoX25ld1ZhbHVlKSB7IGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJzZXRDYWJsZVVybFwiKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBnZXRXZWJzb2NrZXRSZXF1ZXN0cygpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldFdlYnNvY2tldFJlcXVlc3RzXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBfbmV3VmFsdWVcbiAgICovXG4gIHNldFdlYnNvY2tldFJlcXVlc3RzKF9uZXdWYWx1ZSkgeyBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwic2V0V2Vic29ja2V0UmVxdWVzdHNcIikgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8Q3VycmVuY3lPcHRpb24+fSAqL1xuICBnZXRDdXJyZW5jaWVzQ29sbGVjdGlvbigpIHtcbiAgICByZXR1cm4gYXBpTWFrZXJDb25maWdOb3RJbXBsZW1lbnRlZChcImdldEN1cnJlbmNpZXNDb2xsZWN0aW9uXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge29iamVjdH0gKi9cbiAgZ2V0TW9kYWwoKSB7XG4gICAgcmV0dXJuIGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJnZXRNb2RhbFwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSb3V0ZURlZmluaXRpb25zfSAqL1xuICBnZXRSb3V0ZURlZmluaXRpb25zKCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0Um91dGVEZWZpbml0aW9uc1wiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSb3V0ZU1hcH0gKi9cbiAgZ2V0Um91dGVzKCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0Um91dGVzXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGdldFVzZUh0bWxGb3JtKCkge1xuICAgIHJldHVybiBhcGlNYWtlckNvbmZpZ05vdEltcGxlbWVudGVkKFwiZ2V0VXNlSHRtbEZvcm1cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IF9uZXdWYWx1ZVxuICAgKi9cbiAgc2V0VXNlSHRtbEZvcm0oX25ld1ZhbHVlKSB7IGFwaU1ha2VyQ29uZmlnTm90SW1wbGVtZW50ZWQoXCJzZXRVc2VIdG1sRm9ybVwiKSB9XG5cbiAgLy8gVGFibGUgZXhwb3J0IGhvb2tzLiBUaGVzZSBob2xkIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBhcy1pcyAobm90IGludm9rZWQpLCBzbyB0aGV5IHVzZVxuICAvLyBleHBsaWNpdCBhY2Nlc3NvcnMgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBhY2Nlc3NvciBsb29wIGJlbG93ICh3aGljaCB3b3VsZCBjYWxsIGZ1bmN0aW9uIHZhbHVlcykuXG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgc3RyZWFtaW5nIGZpbGUgc2luayBmb3IgdGFibGUgZXhwb3J0cyBvbiBwbGF0Zm9ybXMgd2l0aG91dCBhIHdlYiBkZWZhdWx0IChlLmcuIFJlYWN0XG4gICAqIE5hdGl2ZS9FeHBvKS4gUmVjZWl2ZXMgYHtmaWxlTmFtZSwgbWltZVR5cGUsIGZvcm1hdH1gIGFuZCByZXR1cm5zIGEgc2lua1xuICAgKiBge3dyaXRlKGNodW5rKSwgY2xvc2UoKSwgYWJvcnQoKX1gLlxuICAgKiBAcmV0dXJucyB7KChhcmdzOiBvYmplY3QpID0+IFByb21pc2U8b2JqZWN0PikgfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXRFeHBvcnRGaWxlU2lua09wZW5lcigpIHsgcmV0dXJuIHRoaXMuZ2xvYmFsLmV4cG9ydEZpbGVTaW5rT3BlbmVyIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsoKGFyZ3M6IG9iamVjdCkgPT4gUHJvbWlzZTxvYmplY3Q+KSB8IHVuZGVmaW5lZH0gb3BlbmVyXG4gICAqL1xuICBzZXRFeHBvcnRGaWxlU2lua09wZW5lcihvcGVuZXIpIHsgdGhpcy5nbG9iYWwuZXhwb3J0RmlsZVNpbmtPcGVuZXIgPSBvcGVuZXIgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGFuIGFycmF5LW9mLWFycmF5cyAoaGVhZGVyICsgcm93cykgaW50byB4bHN4IGJ5dGVzLCBlbmFibGluZyB0aGUgb3B0aW9uYWwgRXhjZWwgZXhwb3J0IGZvcm1hdFxuICAgKiB3aXRob3V0IGFwaV9tYWtlciBkZXBlbmRpbmcgb24gYSBzcHJlYWRzaGVldCBsaWJyYXJ5LiBSZXR1cm5zIGEgYFVpbnQ4QXJyYXlgIChvciBhIHByb21pc2Ugb2Ygb25lKS5cbiAgICogQHJldHVybnMgeygocm93czogQXJyYXk8QXJyYXk8dW5rbm93bj4+KSA9PiBVaW50OEFycmF5IHwgUHJvbWlzZTxVaW50OEFycmF5PikgfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXRFeHBvcnRYbHN4U2VyaWFsaXplcigpIHsgcmV0dXJuIHRoaXMuZ2xvYmFsLmV4cG9ydFhsc3hTZXJpYWxpemVyIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsoKHJvd3M6IEFycmF5PEFycmF5PHVua25vd24+PikgPT4gVWludDhBcnJheSB8IFByb21pc2U8VWludDhBcnJheT4pIHwgdW5kZWZpbmVkfSBzZXJpYWxpemVyXG4gICAqL1xuICBzZXRFeHBvcnRYbHN4U2VyaWFsaXplcihzZXJpYWxpemVyKSB7IHRoaXMuZ2xvYmFsLmV4cG9ydFhsc3hTZXJpYWxpemVyID0gc2VyaWFsaXplciB9XG59XG5cbmZvciAoY29uc3QgYWNjZXNzb3JOYW1lIGluIGFjY2Vzc29ycykge1xuICBjb25zdCBhY2Nlc3NvckRhdGEgPSBhY2Nlc3NvcnNbYWNjZXNzb3JOYW1lXVxuICBjb25zdCBjYW1lbGl6ZWRBY2Nlc3NvciA9IGluZmxlY3Rpb24uY2FtZWxpemUoYWNjZXNzb3JOYW1lKVxuXG4gIEFwaU1ha2VyQ29uZmlnLnByb3RvdHlwZVtgc2V0JHtjYW1lbGl6ZWRBY2Nlc3Nvcn1gXSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5nbG9iYWxbYWNjZXNzb3JOYW1lXVxuXG4gICAgdGhpcy5nbG9iYWxbYWNjZXNzb3JOYW1lXSA9IG5ld1ZhbHVlXG5cbiAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KGBvbiR7Y2FtZWxpemVkQWNjZXNzb3J9Q2hhbmdlYCwge29sZFZhbHVlLCBuZXdWYWx1ZX0pXG4gICAgfVxuICB9XG5cbiAgQXBpTWFrZXJDb25maWcucHJvdG90eXBlW2BnZXQke2NhbWVsaXplZEFjY2Vzc29yfWBdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxbYWNjZXNzb3JOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYWNjZXNzb3JEYXRhLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFjY2Vzc29yRGF0YS5kZWZhdWx0XG4gICAgICBpZiAoYWNjZXNzb3JEYXRhLnJlcXVpcmVkKSB0aHJvdyBuZXcgRXJyb3IoYCR7YWNjZXNzb3JOYW1lfSBoYXNuJ3QgYmVlbiBzZXRgKVxuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nbG9iYWxbYWNjZXNzb3JOYW1lXVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWx1ZSguLi5hcmdzKVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuY29uc3QgYXBpTWFrZXJDb25maWcgPSBuZXcgQXBpTWFrZXJDb25maWcoKVxuXG5leHBvcnQgZGVmYXVsdCBhcGlNYWtlckNvbmZpZ1xuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raised by the commands pool when a request could not run because the session
|
|
3
|
+
* had expired (the frontend's believed user diverged from the backend's actual
|
|
4
|
+
* user) and could not be renewed. Callers can treat this as a benign "please
|
|
5
|
+
* sign in again" signal — the sign-in form is shown centrally via the Devise
|
|
6
|
+
* sign-out event — rather than a real command failure.
|
|
7
|
+
*/
|
|
8
|
+
export default class ApiMakerSessionExpiredError extends Error {
|
|
9
|
+
static apiMakerType: string;
|
|
10
|
+
/** @param {string} [message] */
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
apiMakerType: string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=session-expired-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-expired-error.d.ts","sourceRoot":"/src/","sources":["session-expired-error.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH;IACE,4BAA2C;IAG3C,gCAAgC;IAChC,sBADY,MAAM,EAKjB;IAPD,qBAAoC;CAQrC"}
|