velocious 1.0.286 → 1.0.289

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.
@@ -11,10 +11,10 @@ export default class FrontendModelWebsocketChannel extends WebsocketChannel {
11
11
  payload: Record<string, any>;
12
12
  }): Promise<void>;
13
13
  /**
14
- * @param {string} id - Model id.
14
+ * @param {string | number} id - Model id.
15
15
  * @returns {Promise<import("../database/record/index.js").default | null>} - Authorized model or null.
16
16
  */
17
- findAuthorizedModelById(id: string): Promise<import("../database/record/index.js").default | null>;
17
+ findAuthorizedModelById(id: string | number): Promise<import("../database/record/index.js").default | null>;
18
18
  /**
19
19
  * @param {import("../database/record/index.js").default} model - Model instance.
20
20
  * @returns {Promise<Record<string, any>>} - Serialized model payload.
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-channel.js"],"names":[],"mappings":"AASA,sEAAsE;AACtE;IAaE;;;;;OAKG;IACH,wCAJG;QAAqB,OAAO,EAApB,MAAM;QACoB,OAAO,EAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KAC3B,GAAU,OAAO,CAAC,IAAI,CAAC,CA8CzB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,OAAO,CAAC,OAAO,6BAA6B,EAAE,OAAO,GAAG,IAAI,CAAC,CAgBzE;IAED;;;OAGG;IACH,sBAHW,OAAO,6BAA6B,EAAE,OAAO,GAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAgBxC;IAED;;OAEG;IACH,2BAFa,uBAAuB,CAYnC;IAED;;OAEG;IACH,aAFa,MAAM,CAUlB;IAED;;OAEG;IACH,mBAFa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAS/B;IAED;;OAEG;IACH,oBAFa,gBAAgB,CAU5B;CACF;6BAlK4B,qCAAqC;oCAH9B,iCAAiC;6BAExC,4CAA4C"}
1
+ {"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-channel.js"],"names":[],"mappings":"AASA,sEAAsE;AACtE;IAaE;;;;;OAKG;IACH,wCAJG;QAAqB,OAAO,EAApB,MAAM;QACoB,OAAO,EAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KAC3B,GAAU,OAAO,CAAC,IAAI,CAAC,CAoDzB;IAED;;;OAGG;IACH,4BAHW,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,OAAO,6BAA6B,EAAE,OAAO,GAAG,IAAI,CAAC,CAgBzE;IAED;;;OAGG;IACH,sBAHW,OAAO,6BAA6B,EAAE,OAAO,GAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAgBxC;IAED;;OAEG;IACH,2BAFa,uBAAuB,CAYnC;IAED;;OAEG;IACH,aAFa,MAAM,CAUlB;IAED;;OAEG;IACH,mBAFa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAS/B;IAED;;OAEG;IACH,oBAFa,gBAAgB,CAU5B;CACF;6BAxK4B,qCAAqC;oCAH9B,iCAAiC;6BAExC,4CAA4C"}
@@ -27,8 +27,12 @@ export default class FrontendModelWebsocketChannel extends WebsocketChannel {
27
27
  void channel;
28
28
  const action = payload?.action;
29
29
  const id = payload?.id;
30
- if ((action !== "create" && action !== "destroy" && action !== "update") || typeof id !== "string")
31
- return;
30
+ if (action !== "create" && action !== "destroy" && action !== "update") {
31
+ throw new Error(`Unknown frontend model broadcast action: ${action}`);
32
+ }
33
+ if (id === undefined || id === null) {
34
+ throw new Error(`Frontend model broadcast missing id for action: ${action}`);
35
+ }
32
36
  if (action === "destroy") {
33
37
  this.websocketSession.sendJson({
34
38
  channel: "frontend-models",
@@ -64,7 +68,7 @@ export default class FrontendModelWebsocketChannel extends WebsocketChannel {
64
68
  });
65
69
  }
66
70
  /**
67
- * @param {string} id - Model id.
71
+ * @param {string | number} id - Model id.
68
72
  * @returns {Promise<import("../database/record/index.js").default | null>} - Authorized model or null.
69
73
  */
70
74
  async findAuthorizedModelById(id) {
@@ -145,4 +149,4 @@ export default class FrontendModelWebsocketChannel extends WebsocketChannel {
145
149
  });
146
150
  }
147
151
  }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1jaGFubmVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHVCQUF1QixNQUFNLGlDQUFpQyxDQUFBO0FBQ3JFLE9BQU8sUUFBUSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3hELE9BQU8sZ0JBQWdCLE1BQU0sNENBQTRDLENBQUE7QUFDekUsT0FBTyxnQkFBZ0IsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNsRSxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMzRSxPQUFPLEVBQUMsb0NBQW9DLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQTtBQUVqRixzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE9BQU8sT0FBTyw2QkFBOEIsU0FBUSxnQkFBZ0I7SUFDekUsb0ZBQW9GO0lBQ3BGLEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRWxDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ3pGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDN0IsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO1lBQzFCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUM7UUFDeEMsS0FBSyxPQUFPLENBQUE7UUFFWixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFBO1FBQzlCLE1BQU0s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T0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdkIsUUFBUSxFQUFFLENBQUM7b0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ3hCLENBQUM7U0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRTtZQUN4QyxNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzlCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUU7U0FDL0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBGcm9udGVuZE1vZGVsQ29udHJvbGxlciBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtY29udHJvbGxlci5qc1wiXG5pbXBvcnQgUmVzcG9uc2UgZnJvbSBcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiXG5pbXBvcnQgV2Vic29ja2V0UmVxdWVzdCBmcm9tIFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCJcbmltcG9ydCBXZWJzb2NrZXRDaGFubmVsIGZyb20gXCIuLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZX0gZnJvbSBcIi4vd2Vic29ja2V0LXB1Ymxpc2hlcnMuanNcIlxuaW1wb3J0IHtzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWV9IGZyb20gXCIuL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzXCJcblxuLyoqIEJ1aWx0LWluIHdlYnNvY2tldCBjaGFubmVsIGZvciBmcm9udGVuZC1tb2RlbCBsaWZlY3ljbGUgZXZlbnRzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJvbnRlbmRNb2RlbFdlYnNvY2tldENoYW5uZWwgZXh0ZW5kcyBXZWJzb2NrZXRDaGFubmVsIHtcbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIHdlYnNvY2tldCBzdWJzY3JpcHRpb24gaXMgcmVhZHkuICovXG4gIGFzeW5jIHN1YnNjcmliZWQoKSB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gdGhpcy5tb2RlbE5hbWUoKVxuXG4gICAgYXdhaXQgdGhpcy5zdHJlYW1Gcm9tKGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpLCB7YWNrbm93bGVkZ2U6IGZhbHNlfSlcbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24uc2VuZEpzb24oe1xuICAgICAgY2hhbm5lbDogXCJmcm9udGVuZC1tb2RlbHNcIixcbiAgICAgIHBhcmFtczoge21vZGVsOiBtb2RlbE5hbWV9LFxuICAgICAgdHlwZTogXCJzdWJzY3JpYmVkXCJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRXZlbnQgYXJncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIEJyb2FkY2FzdCBjaGFubmVsLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MucGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGhhcyBiZWVuIGF1dGhvcml6ZWQgYW5kIGVtaXR0ZWQuXG4gICAqL1xuICBhc3luYyByZWNlaXZlZEJyb2FkY2FzdCh7Y2hhbm5lbCwgcGF5bG9hZH0pIHtcbiAgICB2b2lkIGNoYW5uZWxcblxuICAgIGNvbnN0IGFjdGlvbiA9IHBheWxvYWQ/LmFjdGlvblxuICAgIGNvbnN0IGlkID0gcGF5bG9hZD8uaWRcblxuICAgIGlmICgoYWN0aW9uICE9PSBcImNyZWF0ZVwiICYmIGFjdGlvbiAhPT0gXCJkZXN0cm95XCIgJiYgYWN0aW9uICE9PSBcInVwZGF0ZVwiKSB8fCB0eXBlb2YgaWQgIT09IFwic3RyaW5nXCIpIHJldHVyblxuXG4gICAgaWYgKGFjdGlvbiA9PT0gXCJkZXN0cm95XCIpIHtcbiAgICAgIHRoaXMud2Vic29ja2V0U2Vzc2lvbi5zZW5kSnNvbih7XG4gICAgICAgIGNoYW5uZWw6IFwiZnJvbnRlbmQtbW9kZWxzXCIsXG4gICAgICAgIHBheWxvYWQ6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSh7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpXG4gICAgICAgIH0pLFxuICAgICAgICB0eXBlOiBcImV2ZW50XCJcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzZXJpYWxpemVkTW9kZWxGcm9tUGF5bG9hZCA9IHBheWxvYWQ/LnJlY29yZCAmJiB0eXBlb2YgcGF5bG9hZC5yZWNvcmQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAocGF5bG9hZC5yZWNvcmQpXG4gICAgICA6IG51bGxcbiAgICBjb25zdCBzZXJpYWxpemVkTW9kZWwgPSBzZXJpYWxpemVkTW9kZWxGcm9tUGF5bG9hZCB8fCBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLmZpbmRBdXRob3JpemVkTW9kZWxCeUlkKGlkKVxuXG4gICAgICBpZiAoIW1vZGVsKSByZXR1cm4gbnVsbFxuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJpYWxpemVNb2RlbChtb2RlbClcbiAgICB9KSgpXG5cbiAgICBpZiAoIXNlcmlhbGl6ZWRNb2RlbCkgcmV0dXJuXG5cbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24uc2VuZEpzb24oe1xuICAgICAgY2hhbm5lbDogXCJmcm9udGVuZC1tb2RlbHNcIixcbiAgICAgIHBheWxvYWQ6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSh7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaWQsXG4gICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpLFxuICAgICAgICByZWNvcmQ6IHNlcmlhbGl6ZWRNb2RlbFxuICAgICAgfSksXG4gICAgICB0eXBlOiBcImV2ZW50XCJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIE1vZGVsIGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IG51bGw+fSAtIEF1dGhvcml6ZWQgbW9kZWwgb3IgbnVsbC5cbiAgICovXG4gIGFzeW5jIGZpbmRBdXRob3JpemVkTW9kZWxCeUlkKGlkKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IHRoaXMuZnJvbnRlbmRNb2RlbENvbnRyb2xsZXIoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhYmlsaXR5ID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmVBYmlsaXR5KHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLnN5bnRoZXRpY1BhcmFtcygpLFxuICAgICAgICByZXF1ZXN0OiB0aGlzLnN5bnRoZXRpY1JlcXVlc3QoKSxcbiAgICAgICAgcmVzcG9uc2U6IG5ldyBSZXNwb25zZSh7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucnVuV2l0aEFiaWxpdHkoYWJpbGl0eSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgY29udHJvbGxlci5mcm9udGVuZE1vZGVsQXV0aG9yaXplZFF1ZXJ5KFwiZmluZFwiKS5maW5kQnkoe1tjb250cm9sbGVyLmZyb250ZW5kTW9kZWxQcmltYXJ5S2V5KCldOiBpZH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWwgLSBNb2RlbCBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IC0gU2VyaWFsaXplZCBtb2RlbCBwYXlsb2FkLlxuICAgKi9cbiAgYXN5bmMgc2VyaWFsaXplTW9kZWwobW9kZWwpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5mcm9udGVuZE1vZGVsQ29udHJvbGxlcigpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFiaWxpdHkgPSBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZUFiaWxpdHkoe1xuICAgICAgICBwYXJhbXM6IHRoaXMuc3ludGhldGljUGFyYW1zKCksXG4gICAgICAgIHJlcXVlc3Q6IHRoaXMuc3ludGhldGljUmVxdWVzdCgpLFxuICAgICAgICByZXNwb25zZTogbmV3IFJlc3BvbnNlKHtjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb259KVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5ydW5XaXRoQWJpbGl0eShhYmlsaXR5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjb250cm9sbGVyLmZyb250ZW5kTW9kZWxSZXNvdXJjZUluc3RhbmNlKCkuc2VyaWFsaXplKG1vZGVsLCBcImZpbmRcIilcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbENvbnRyb2xsZXJ9IC0gU3ludGhldGljIGZyb250ZW5kLW1vZGVsIGNvbnRyb2xsZXIuXG4gICAqL1xuICBmcm9udGVuZE1vZGVsQ29udHJvbGxlcigpIHtcbiAgICByZXR1cm4gbmV3IEZyb250ZW5kTW9kZWxDb250cm9sbGVyKHtcbiAgICAgIGFjdGlvbjogXCJmcm9udGVuZEFwaVwiLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29udHJvbGxlcjogXCJmcm9udGVuZC1tb2RlbHNcIixcbiAgICAgIHBhcmFtczogdGhpcy5zeW50aGV0aWNQYXJhbXMoKSxcbiAgICAgIHJlcXVlc3Q6IC8qKiBAdHlwZSB7YW55fSAqLyAodGhpcy5zeW50aGV0aWNSZXF1ZXN0KCkpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBSZXNwb25zZSh7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSksXG4gICAgICB2aWV3UGF0aDogYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzL2Zyb250ZW5kLW1vZGVsc2BcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVxdWVzdGVkIGZyb250ZW5kLW1vZGVsIG5hbWUuXG4gICAqL1xuICBtb2RlbE5hbWUoKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnBhcmFtcygpLm1vZGVsXG5cbiAgICBpZiAodHlwZW9mIG1vZGVsICE9PSBcInN0cmluZ1wiIHx8IG1vZGVsLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBzdWJzY3JpcHRpb24gcGFyYW0gJ21vZGVsJ1wiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIFN5bnRoZXRpYyBwYXJhbXMgZm9yIGF1dGhvcml6YXRpb24gYW5kIHNlcmlhbGl6YXRpb24uXG4gICAqL1xuICBzeW50aGV0aWNQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpLFxuICAgICAgcmVxdWVzdHM6IFt7XG4gICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpXG4gICAgICB9XVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7V2Vic29ja2V0UmVxdWVzdH0gLSBTeW50aGV0aWMgc2hhcmVkIGZyb250ZW5kLW1vZGVsIHJlcXVlc3QuXG4gICAqL1xuICBzeW50aGV0aWNSZXF1ZXN0KCkge1xuICAgIHJldHVybiBuZXcgV2Vic29ja2V0UmVxdWVzdCh7XG4gICAgICBoZWFkZXJzOiB0aGlzLnJlcXVlc3Q/LmhlYWRlcnM/LigpIHx8IHt9LFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBhcmFtczogdGhpcy5zeW50aGV0aWNQYXJhbXMoKSxcbiAgICAgIHBhdGg6IFwiL2Zyb250ZW5kLW1vZGVsc1wiLFxuICAgICAgcmVtb3RlQWRkcmVzczogdGhpcy5yZXF1ZXN0Py5yZW1vdGVBZGRyZXNzPy4oKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1jaGFubmVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHVCQUF1QixNQUFNLGlDQUFpQyxDQUFBO0FBQ3JFLE9BQU8sUUFBUSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3hELE9BQU8sZ0JBQWdCLE1BQU0sNENBQTRDLENBQUE7QUFDekUsT0FBTyxnQkFBZ0IsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNsRSxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMzRSxPQUFPLEVBQUMsb0NBQW9DLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQTtBQUVqRixzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE9BQU8sT0FBTyw2QkFBOEIsU0FBUSxnQkFBZ0I7SUFDekUsb0ZBQW9GO0lBQ3BGLEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRWxDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ3pGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDN0IsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO1lBQzFCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUM7UUFDeEMsS0FBSyxPQUFPLENBQUE7UUFFWixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFBO1FBQzlCLE1BQU0s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SSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsNkJBQTZCO1NBQzVFLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFBO1FBRWpDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdkIsUUFBUSxFQUFFLENBQUM7b0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ3hCLENBQUM7U0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRTtZQUN4QyxNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzlCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUU7U0FDL0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBGcm9udGVuZE1vZGVsQ29udHJvbGxlciBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtY29udHJvbGxlci5qc1wiXG5pbXBvcnQgUmVzcG9uc2UgZnJvbSBcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiXG5pbXBvcnQgV2Vic29ja2V0UmVxdWVzdCBmcm9tIFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCJcbmltcG9ydCBXZWJzb2NrZXRDaGFubmVsIGZyb20gXCIuLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZX0gZnJvbSBcIi4vd2Vic29ja2V0LXB1Ymxpc2hlcnMuanNcIlxuaW1wb3J0IHtzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWV9IGZyb20gXCIuL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzXCJcblxuLyoqIEJ1aWx0LWluIHdlYnNvY2tldCBjaGFubmVsIGZvciBmcm9udGVuZC1tb2RlbCBsaWZlY3ljbGUgZXZlbnRzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJvbnRlbmRNb2RlbFdlYnNvY2tldENoYW5uZWwgZXh0ZW5kcyBXZWJzb2NrZXRDaGFubmVsIHtcbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIHdlYnNvY2tldCBzdWJzY3JpcHRpb24gaXMgcmVhZHkuICovXG4gIGFzeW5jIHN1YnNjcmliZWQoKSB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gdGhpcy5tb2RlbE5hbWUoKVxuXG4gICAgYXdhaXQgdGhpcy5zdHJlYW1Gcm9tKGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpLCB7YWNrbm93bGVkZ2U6IGZhbHNlfSlcbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24uc2VuZEpzb24oe1xuICAgICAgY2hhbm5lbDogXCJmcm9udGVuZC1tb2RlbHNcIixcbiAgICAgIHBhcmFtczoge21vZGVsOiBtb2RlbE5hbWV9LFxuICAgICAgdHlwZTogXCJzdWJzY3JpYmVkXCJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRXZlbnQgYXJncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIEJyb2FkY2FzdCBjaGFubmVsLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MucGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGhhcyBiZWVuIGF1dGhvcml6ZWQgYW5kIGVtaXR0ZWQuXG4gICAqL1xuICBhc3luYyByZWNlaXZlZEJyb2FkY2FzdCh7Y2hhbm5lbCwgcGF5bG9hZH0pIHtcbiAgICB2b2lkIGNoYW5uZWxcblxuICAgIGNvbnN0IGFjdGlvbiA9IHBheWxvYWQ/LmFjdGlvblxuICAgIGNvbnN0IGlkID0gcGF5bG9hZD8uaWRcblxuICAgIGlmIChhY3Rpb24gIT09IFwiY3JlYXRlXCIgJiYgYWN0aW9uICE9PSBcImRlc3Ryb3lcIiAmJiBhY3Rpb24gIT09IFwidXBkYXRlXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmcm9udGVuZCBtb2RlbCBicm9hZGNhc3QgYWN0aW9uOiAke2FjdGlvbn1gKVxuICAgIH1cblxuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZyb250ZW5kIG1vZGVsIGJyb2FkY2FzdCBtaXNzaW5nIGlkIGZvciBhY3Rpb246ICR7YWN0aW9ufWApXG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbiA9PT0gXCJkZXN0cm95XCIpIHtcbiAgICAgIHRoaXMud2Vic29ja2V0U2Vzc2lvbi5zZW5kSnNvbih7XG4gICAgICAgIGNoYW5uZWw6IFwiZnJvbnRlbmQtbW9kZWxzXCIsXG4gICAgICAgIHBheWxvYWQ6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSh7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpXG4gICAgICAgIH0pLFxuICAgICAgICB0eXBlOiBcImV2ZW50XCJcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzZXJpYWxpemVkTW9kZWxGcm9tUGF5bG9hZCA9IHBheWxvYWQ/LnJlY29yZCAmJiB0eXBlb2YgcGF5bG9hZC5yZWNvcmQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAocGF5bG9hZC5yZWNvcmQpXG4gICAgICA6IG51bGxcbiAgICBjb25zdCBzZXJpYWxpemVkTW9kZWwgPSBzZXJpYWxpemVkTW9kZWxGcm9tUGF5bG9hZCB8fCBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLmZpbmRBdXRob3JpemVkTW9kZWxCeUlkKGlkKVxuXG4gICAgICBpZiAoIW1vZGVsKSByZXR1cm4gbnVsbFxuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJpYWxpemVNb2RlbChtb2RlbClcbiAgICB9KSgpXG5cbiAgICBpZiAoIXNlcmlhbGl6ZWRNb2RlbCkgcmV0dXJuXG5cbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24uc2VuZEpzb24oe1xuICAgICAgY2hhbm5lbDogXCJmcm9udGVuZC1tb2RlbHNcIixcbiAgICAgIHBheWxvYWQ6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSh7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaWQsXG4gICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpLFxuICAgICAgICByZWNvcmQ6IHNlcmlhbGl6ZWRNb2RlbFxuICAgICAgfSksXG4gICAgICB0eXBlOiBcImV2ZW50XCJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIE1vZGVsIGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IG51bGw+fSAtIEF1dGhvcml6ZWQgbW9kZWwgb3IgbnVsbC5cbiAgICovXG4gIGFzeW5jIGZpbmRBdXRob3JpemVkTW9kZWxCeUlkKGlkKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IHRoaXMuZnJvbnRlbmRNb2RlbENvbnRyb2xsZXIoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhYmlsaXR5ID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmVBYmlsaXR5KHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLnN5bnRoZXRpY1BhcmFtcygpLFxuICAgICAgICByZXF1ZXN0OiB0aGlzLnN5bnRoZXRpY1JlcXVlc3QoKSxcbiAgICAgICAgcmVzcG9uc2U6IG5ldyBSZXNwb25zZSh7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucnVuV2l0aEFiaWxpdHkoYWJpbGl0eSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgY29udHJvbGxlci5mcm9udGVuZE1vZGVsQXV0aG9yaXplZFF1ZXJ5KFwiZmluZFwiKS5maW5kQnkoe1tjb250cm9sbGVyLmZyb250ZW5kTW9kZWxQcmltYXJ5S2V5KCldOiBpZH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWwgLSBNb2RlbCBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IC0gU2VyaWFsaXplZCBtb2RlbCBwYXlsb2FkLlxuICAgKi9cbiAgYXN5bmMgc2VyaWFsaXplTW9kZWwobW9kZWwpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5mcm9udGVuZE1vZGVsQ29udHJvbGxlcigpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFiaWxpdHkgPSBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZUFiaWxpdHkoe1xuICAgICAgICBwYXJhbXM6IHRoaXMuc3ludGhldGljUGFyYW1zKCksXG4gICAgICAgIHJlcXVlc3Q6IHRoaXMuc3ludGhldGljUmVxdWVzdCgpLFxuICAgICAgICByZXNwb25zZTogbmV3IFJlc3BvbnNlKHtjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb259KVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5ydW5XaXRoQWJpbGl0eShhYmlsaXR5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjb250cm9sbGVyLmZyb250ZW5kTW9kZWxSZXNvdXJjZUluc3RhbmNlKCkuc2VyaWFsaXplKG1vZGVsLCBcImZpbmRcIilcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbENvbnRyb2xsZXJ9IC0gU3ludGhldGljIGZyb250ZW5kLW1vZGVsIGNvbnRyb2xsZXIuXG4gICAqL1xuICBmcm9udGVuZE1vZGVsQ29udHJvbGxlcigpIHtcbiAgICByZXR1cm4gbmV3IEZyb250ZW5kTW9kZWxDb250cm9sbGVyKHtcbiAgICAgIGFjdGlvbjogXCJmcm9udGVuZEFwaVwiLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29udHJvbGxlcjogXCJmcm9udGVuZC1tb2RlbHNcIixcbiAgICAgIHBhcmFtczogdGhpcy5zeW50aGV0aWNQYXJhbXMoKSxcbiAgICAgIHJlcXVlc3Q6IC8qKiBAdHlwZSB7YW55fSAqLyAodGhpcy5zeW50aGV0aWNSZXF1ZXN0KCkpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBSZXNwb25zZSh7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSksXG4gICAgICB2aWV3UGF0aDogYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzL2Zyb250ZW5kLW1vZGVsc2BcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVxdWVzdGVkIGZyb250ZW5kLW1vZGVsIG5hbWUuXG4gICAqL1xuICBtb2RlbE5hbWUoKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnBhcmFtcygpLm1vZGVsXG5cbiAgICBpZiAodHlwZW9mIG1vZGVsICE9PSBcInN0cmluZ1wiIHx8IG1vZGVsLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBzdWJzY3JpcHRpb24gcGFyYW0gJ21vZGVsJ1wiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIFN5bnRoZXRpYyBwYXJhbXMgZm9yIGF1dGhvcml6YXRpb24gYW5kIHNlcmlhbGl6YXRpb24uXG4gICAqL1xuICBzeW50aGV0aWNQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpLFxuICAgICAgcmVxdWVzdHM6IFt7XG4gICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsTmFtZSgpXG4gICAgICB9XVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7V2Vic29ja2V0UmVxdWVzdH0gLSBTeW50aGV0aWMgc2hhcmVkIGZyb250ZW5kLW1vZGVsIHJlcXVlc3QuXG4gICAqL1xuICBzeW50aGV0aWNSZXF1ZXN0KCkge1xuICAgIHJldHVybiBuZXcgV2Vic29ja2V0UmVxdWVzdCh7XG4gICAgICBoZWFkZXJzOiB0aGlzLnJlcXVlc3Q/LmhlYWRlcnM/LigpIHx8IHt9LFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBhcmFtczogdGhpcy5zeW50aGV0aWNQYXJhbXMoKSxcbiAgICAgIHBhdGg6IFwiL2Zyb250ZW5kLW1vZGVsc1wiLFxuICAgICAgcmVtb3RlQWRkcmVzczogdGhpcy5yZXF1ZXN0Py5yZW1vdGVBZGRyZXNzPy4oKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -5,7 +5,7 @@
5
5
  export function frontendModelBroadcastChannelName(modelName: string): string;
6
6
  /**
7
7
  * @param {import("../configuration.js").default} configuration - Configuration instance.
8
- * @returns {void}
8
+ * @returns {Promise<void>}
9
9
  */
10
- export function ensureFrontendModelWebsocketPublishersRegistered(configuration: import("../configuration.js").default): void;
10
+ export function ensureFrontendModelWebsocketPublishersRegistered(configuration: import("../configuration.js").default): Promise<void>;
11
11
  //# sourceMappingURL=websocket-publishers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,6DAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;GAGG;AACH,gFAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CA4DhB"}
1
+ {"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,6DAHW,MAAM,GACJ,MAAM,CAIlB;AAmFD;;;GAGG;AACH,gFAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CA8EzB"}
@@ -1,4 +1,6 @@
1
1
  // @ts-check
2
+ import AuthorizationBaseResource from "../authorization/base-resource.js";
3
+ import FrontendModelBaseResource from "../frontend-model-resource/base-resource.js";
2
4
  import { frontendModelResourcesForBackendProject } from "./resource-definition.js";
3
5
  const registeredConfigurationsByModelClass = new WeakMap();
4
6
  /**
@@ -9,56 +11,139 @@ export function frontendModelBroadcastChannelName(modelName) {
9
11
  return `frontend-models:${modelName}`;
10
12
  }
11
13
  /**
14
+ * Builds a frontend models map from the configuration's ability resources.
15
+ * Each resource class with a static ModelClass property is keyed by model name.
12
16
  * @param {import("../configuration.js").default} configuration - Configuration instance.
13
- * @returns {void}
17
+ * @returns {Record<string, typeof FrontendModelBaseResource>} - Resource definitions keyed by model name.
14
18
  */
15
- export function ensureFrontendModelWebsocketPublishersRegistered(configuration) {
19
+ /**
20
+ * @param {import("../configuration.js").default} configuration - Configuration instance.
21
+ * @returns {Promise<import("../configuration-types.js").AbilityResourceClassType[]>} - Resolved ability resources.
22
+ */
23
+ async function resolveAbilityResourcesList(configuration) {
24
+ // First check explicitly set ability resources
25
+ const explicit = configuration.getAbilityResources();
26
+ if (explicit && explicit.length > 0)
27
+ return explicit;
28
+ // Try to resolve from the ability resolver by calling it with a synthetic
29
+ // context. The resolver may access request/response methods which aren't
30
+ // available during initialization — catch and return empty in that case.
31
+ const resolver = configuration.getAbilityResolver?.();
32
+ if (typeof resolver === "function") {
33
+ try {
34
+ const ability = await resolver({ configuration, params: {}, request: /** @type {any} */ (undefined), response: /** @type {any} */ (undefined) });
35
+ if (ability?.resources && Array.isArray(ability.resources)) {
36
+ return ability.resources;
37
+ }
38
+ }
39
+ catch {
40
+ // Resolver requires request context (e.g. reads request.path()) which is
41
+ // unavailable during initialization. Use configuration.setAbilityResources()
42
+ // or backendProjects.frontendModels for explicit registration instead.
43
+ }
44
+ }
45
+ return [];
46
+ }
47
+ /**
48
+ * @param {import("../configuration-types.js").AbilityResourceClassType[]} abilityResources - Ability resource classes.
49
+ * @returns {Record<string, typeof FrontendModelBaseResource>} - Resource definitions keyed by model name.
50
+ */
51
+ function frontendModelResourcesFromAbilityResourcesList(abilityResources) {
52
+ /** @type {Record<string, typeof FrontendModelBaseResource>} */
53
+ const resources = {};
54
+ if (!abilityResources || abilityResources.length === 0)
55
+ return resources;
56
+ if (!Array.isArray(abilityResources)) {
57
+ throw new Error(`Expected ability resources to be an array but got: ${typeof abilityResources}`);
58
+ }
59
+ for (const resourceClass of abilityResources) {
60
+ if (typeof resourceClass !== "function") {
61
+ throw new Error(`Expected ability resource to be a class but got: ${typeof resourceClass}`);
62
+ }
63
+ if (resourceClass.prototype instanceof FrontendModelBaseResource) {
64
+ const modelClass = /** @type {typeof FrontendModelBaseResource} */ (resourceClass).ModelClass;
65
+ if (!modelClass) {
66
+ throw new Error(`Resource class ${resourceClass.name} is missing a static ModelClass property`);
67
+ }
68
+ const modelName = modelClass.getModelName();
69
+ if (!modelName) {
70
+ throw new Error(`Model class ${modelClass.name} returned empty model name from getModelName()`);
71
+ }
72
+ resources[modelName] = /** @type {typeof FrontendModelBaseResource} */ (resourceClass);
73
+ }
74
+ else if (resourceClass.prototype instanceof AuthorizationBaseResource) {
75
+ // Authorization-only resource — valid but not relevant for WebSocket publishing
76
+ }
77
+ else {
78
+ throw new Error(`Unexpected ability resource class: ${resourceClass.name}. Expected AuthorizationBaseResource or FrontendModelBaseResource subclass.`);
79
+ }
80
+ }
81
+ return resources;
82
+ }
83
+ /**
84
+ * @param {import("../configuration.js").default} configuration - Configuration instance.
85
+ * @returns {Promise<void>}
86
+ */
87
+ export async function ensureFrontendModelWebsocketPublishersRegistered(configuration) {
16
88
  const modelClasses = configuration.getModelClasses();
89
+ /** @type {Record<string, typeof FrontendModelBaseResource>} */
90
+ let allFrontendModels = {};
91
+ let hasExplicitConfig = false;
17
92
  for (const backendProject of configuration.getBackendProjects()) {
18
- const frontendModels = frontendModelResourcesForBackendProject(backendProject);
19
- for (const modelName of Object.keys(frontendModels)) {
20
- const modelClass = modelClasses[modelName];
21
- if (!modelClass)
22
- continue;
23
- let registeredConfigurations = registeredConfigurationsByModelClass.get(modelClass);
24
- if (!registeredConfigurations) {
25
- registeredConfigurations = new WeakSet();
26
- registeredConfigurationsByModelClass.set(modelClass, registeredConfigurations);
27
- }
28
- if (registeredConfigurations.has(configuration))
29
- continue;
30
- registeredConfigurations.add(configuration);
31
- modelClass.beforeCreate((model) => {
32
- /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create";
33
- });
34
- modelClass.beforeUpdate((model) => {
35
- /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update";
36
- });
37
- modelClass.afterSave((model) => {
38
- const modelWithWebsocketAction = /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model);
39
- const action = modelWithWebsocketAction.__frontendModelWebsocketAction;
40
- if (action !== "create" && action !== "update")
41
- return;
42
- void model.getModelClass().connection().afterCommit(async () => {
43
- configuration.getWebsocketEvents()?.publish(frontendModelBroadcastChannelName(modelName), {
44
- action,
45
- id: String(model.id()),
46
- record: model.attributes(),
47
- modelName
48
- });
93
+ if (backendProject.frontendModels !== undefined || backendProject.frontendModelsRequireContext !== undefined) {
94
+ hasExplicitConfig = true;
95
+ }
96
+ const projectResources = frontendModelResourcesForBackendProject(backendProject);
97
+ allFrontendModels = { ...allFrontendModels, ...projectResources };
98
+ }
99
+ // Auto-discover from ability resources only when no backend project
100
+ // explicitly defines frontendModels or frontendModelsRequireContext
101
+ if (!hasExplicitConfig) {
102
+ const abilityResources = await resolveAbilityResourcesList(configuration);
103
+ allFrontendModels = frontendModelResourcesFromAbilityResourcesList(abilityResources);
104
+ }
105
+ for (const modelName of Object.keys(allFrontendModels)) {
106
+ const modelClass = modelClasses[modelName];
107
+ if (!modelClass)
108
+ continue;
109
+ let registeredConfigurations = registeredConfigurationsByModelClass.get(modelClass);
110
+ if (!registeredConfigurations) {
111
+ registeredConfigurations = new WeakSet();
112
+ registeredConfigurationsByModelClass.set(modelClass, registeredConfigurations);
113
+ }
114
+ if (registeredConfigurations.has(configuration))
115
+ continue;
116
+ registeredConfigurations.add(configuration);
117
+ modelClass.beforeCreate((model) => {
118
+ /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create";
119
+ });
120
+ modelClass.beforeUpdate((model) => {
121
+ /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update";
122
+ });
123
+ modelClass.afterSave((model) => {
124
+ const modelWithWebsocketAction = /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model);
125
+ const action = modelWithWebsocketAction.__frontendModelWebsocketAction;
126
+ if (action !== "create" && action !== "update")
127
+ return;
128
+ void model.getModelClass().connection().afterCommit(async () => {
129
+ configuration.getWebsocketEvents()?.publish(frontendModelBroadcastChannelName(modelName), {
130
+ action,
131
+ id: model.id(),
132
+ record: model.attributes(),
133
+ modelName
49
134
  });
50
- delete modelWithWebsocketAction.__frontendModelWebsocketAction;
51
135
  });
52
- modelClass.afterDestroy((model) => {
53
- void model.getModelClass().connection().afterCommit(async () => {
54
- configuration.getWebsocketEvents()?.publish(frontendModelBroadcastChannelName(modelName), {
55
- action: "destroy",
56
- id: String(model.id()),
57
- modelName
58
- });
136
+ delete modelWithWebsocketAction.__frontendModelWebsocketAction;
137
+ });
138
+ modelClass.afterDestroy((model) => {
139
+ void model.getModelClass().connection().afterCommit(async () => {
140
+ configuration.getWebsocketEvents()?.publish(frontendModelBroadcastChannelName(modelName), {
141
+ action: "destroy",
142
+ id: model.id(),
143
+ modelName
59
144
  });
60
145
  });
61
- }
146
+ });
62
147
  }
63
148
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsdUNBQXVDLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUVoRixNQUFNLG9DQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFMUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLFNBQVM7SUFDekQsT0FBTyxtQkFBbUIsU0FBUyxFQUFFLENBQUE7QUFDdkMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnREFBZ0QsQ0FBQyxhQUFhO0lBQzVFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtJQUVwRCxLQUFLLE1BQU0sY0FBYyxJQUFJLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7UUFDaEUsTUFBTSxjQUFjLEdBQUcsdUNBQXVDLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFOUUsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRTFDLElBQUksQ0FBQyxVQUFVO2dCQUFFLFNBQVE7WUFFekIsSUFBSSx3QkFBd0IsR0FBRyxvQ0FBb0MsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFbkYsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQzlCLHdCQUF3QixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7Z0JBQ3hDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsQ0FBQTtZQUNoRixDQUFDO1lBRUQsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO2dCQUFFLFNBQVE7WUFFekQsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBRTNDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEMscUhBQXFILENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyw4QkFBOEIsR0FBRyxRQUFRLENBQUE7WUFDekssQ0FBQyxDQUFDLENBQUE7WUFFRixVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2hDLHFIQUFxSCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsOEJBQThCLEdBQUcsUUFBUSxDQUFBO1lBQ3pLLENBQUMsQ0FBQyxDQUFBO1lBRUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM3QixNQUFNLHdCQUF3QixHQUFHLHFIQUFxSCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQzlKLE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLDhCQUE4QixDQUFBO2dCQUV0RSxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLFFBQVE7b0JBQUUsT0FBTTtnQkFFdEQsS0FBSyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUM3RCxhQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ3hGLE1BQU07d0JBQ04sRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFO3dCQUMxQixTQUFTO3FCQUNWLENBQUMsQ0FBQTtnQkFDSixDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLHdCQUF3QixDQUFDLDhCQUE4QixDQUFBO1lBQ2hFLENBQUMsQ0FBQyxDQUFBO1lBRUYsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNoQyxLQUFLLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQzdELGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsRUFBRTt3QkFDeEYsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUN0QixTQUFTO3FCQUNWLENBQUMsQ0FBQTtnQkFDSixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi9yZXNvdXJjZS1kZWZpbml0aW9uLmpzXCJcblxuY29uc3QgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zQnlNb2RlbENsYXNzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBCcm9hZGNhc3QgY2hhbm5lbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lKG1vZGVsTmFtZSkge1xuICByZXR1cm4gYGZyb250ZW5kLW1vZGVsczoke21vZGVsTmFtZX1gXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVGcm9udGVuZE1vZGVsV2Vic29ja2V0UHVibGlzaGVyc1JlZ2lzdGVyZWQoY29uZmlndXJhdGlvbikge1xuICBjb25zdCBtb2RlbENsYXNzZXMgPSBjb25maWd1cmF0aW9uLmdldE1vZGVsQ2xhc3NlcygpXG5cbiAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiBjb25maWd1cmF0aW9uLmdldEJhY2tlbmRQcm9qZWN0cygpKSB7XG4gICAgY29uc3QgZnJvbnRlbmRNb2RlbHMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBvZiBPYmplY3Qua2V5cyhmcm9udGVuZE1vZGVscykpIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzZXNbbW9kZWxOYW1lXVxuXG4gICAgICBpZiAoIW1vZGVsQ2xhc3MpIGNvbnRpbnVlXG5cbiAgICAgIGxldCByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMgPSByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnNCeU1vZGVsQ2xhc3MuZ2V0KG1vZGVsQ2xhc3MpXG5cbiAgICAgIGlmICghcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgIHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucyA9IG5ldyBXZWFrU2V0KClcbiAgICAgICAgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zQnlNb2RlbENsYXNzLnNldChtb2RlbENsYXNzLCByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMpXG4gICAgICB9XG5cbiAgICAgIGlmIChyZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuaGFzKGNvbmZpZ3VyYXRpb24pKSBjb250aW51ZVxuXG4gICAgICByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuYWRkKGNvbmZpZ3VyYXRpb24pXG5cbiAgICAgIG1vZGVsQ2xhc3MuYmVmb3JlQ3JlYXRlKChtb2RlbCkgPT4ge1xuICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwifX0gKi8gKG1vZGVsKS5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24gPSBcImNyZWF0ZVwiXG4gICAgICB9KVxuXG4gICAgICBtb2RlbENsYXNzLmJlZm9yZVVwZGF0ZSgobW9kZWwpID0+IHtcbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCAmIHtfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24/OiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIn19ICovIChtb2RlbCkuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uID0gXCJ1cGRhdGVcIlxuICAgICAgfSlcblxuICAgICAgbW9kZWxDbGFzcy5hZnRlclNhdmUoKG1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgJiB7X19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uPzogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCJ9fSAqLyAobW9kZWwpXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb25cblxuICAgICAgICBpZiAoYWN0aW9uICE9PSBcImNyZWF0ZVwiICYmIGFjdGlvbiAhPT0gXCJ1cGRhdGVcIikgcmV0dXJuXG5cbiAgICAgICAgdm9pZCBtb2RlbC5nZXRNb2RlbENsYXNzKCkuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25maWd1cmF0aW9uLmdldFdlYnNvY2tldEV2ZW50cygpPy5wdWJsaXNoKGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpLCB7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBpZDogU3RyaW5nKG1vZGVsLmlkKCkpLFxuICAgICAgICAgICAgcmVjb3JkOiBtb2RlbC5hdHRyaWJ1dGVzKCksXG4gICAgICAgICAgICBtb2RlbE5hbWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICBkZWxldGUgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuICAgICAgfSlcblxuICAgICAgbW9kZWxDbGFzcy5hZnRlckRlc3Ryb3koKG1vZGVsKSA9PiB7XG4gICAgICAgIHZvaWQgbW9kZWwuZ2V0TW9kZWxDbGFzcygpLmNvbm5lY3Rpb24oKS5hZnRlckNvbW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uZmlndXJhdGlvbi5nZXRXZWJzb2NrZXRFdmVudHMoKT8ucHVibGlzaChmcm9udGVuZE1vZGVsQnJvYWRjYXN0Q2hhbm5lbE5hbWUobW9kZWxOYW1lKSwge1xuICAgICAgICAgICAgYWN0aW9uOiBcImRlc3Ryb3lcIixcbiAgICAgICAgICAgIGlkOiBTdHJpbmcobW9kZWwuaWQoKSksXG4gICAgICAgICAgICBtb2RlbE5hbWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8seUJBQXlCLE1BQU0sNkNBQTZDLENBQUE7QUFDbkYsT0FBTyxFQUFDLHVDQUF1QyxFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFFaEYsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRTFEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxTQUFTO0lBQ3pELE9BQU8sbUJBQW1CLFNBQVMsRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNIOzs7R0FHRztBQUNILEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxhQUFhO0lBQ3RELCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUVwRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUVwRCwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0lBRXJELElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFD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ZSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi9yZXNvdXJjZS1kZWZpbml0aW9uLmpzXCJcblxuY29uc3QgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zQnlNb2RlbENsYXNzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBCcm9hZGNhc3QgY2hhbm5lbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lKG1vZGVsTmFtZSkge1xuICByZXR1cm4gYGZyb250ZW5kLW1vZGVsczoke21vZGVsTmFtZX1gXG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnJvbnRlbmQgbW9kZWxzIG1hcCBmcm9tIHRoZSBjb25maWd1cmF0aW9uJ3MgYWJpbGl0eSByZXNvdXJjZXMuXG4gKiBFYWNoIHJlc291cmNlIGNsYXNzIHdpdGggYSBzdGF0aWMgTW9kZWxDbGFzcyBwcm9wZXJ0eSBpcyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gLSBSZXNvdXJjZSBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICovXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW10+fSAtIFJlc29sdmVkIGFiaWxpdHkgcmVzb3VyY2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQWJpbGl0eVJlc291cmNlc0xpc3QoY29uZmlndXJhdGlvbikge1xuICAvLyBGaXJzdCBjaGVjayBleHBsaWNpdGx5IHNldCBhYmlsaXR5IHJlc291cmNlc1xuICBjb25zdCBleHBsaWNpdCA9IGNvbmZpZ3VyYXRpb24uZ2V0QWJpbGl0eVJlc291cmNlcygpXG5cbiAgaWYgKGV4cGxpY2l0ICYmIGV4cGxpY2l0Lmxlbmd0aCA+IDApIHJldHVybiBleHBsaWNpdFxuXG4gIC8vIFRyeSB0byByZXNvbHZlIGZyb20gdGhlIGFiaWxpdHkgcmVzb2x2ZXIgYnkgY2FsbGluZyBpdCB3aXRoIGEgc3ludGhldGljXG4gIC8vIGNvbnRleHQuIFRoZSByZXNvbHZlciBtYXkgYWNjZXNzIHJlcXVlc3QvcmVzcG9uc2UgbWV0aG9kcyB3aGljaCBhcmVuJ3RcbiAgLy8gYXZhaWxhYmxlIGR1cmluZyBpbml0aWFsaXphdGlvbiDigJQgY2F0Y2ggYW5kIHJldHVybiBlbXB0eSBpbiB0aGF0IGNhc2UuXG4gIGNvbnN0IHJlc29sdmVyID0gY29uZmlndXJhdGlvbi5nZXRBYmlsaXR5UmVzb2x2ZXI/LigpXG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFiaWxpdHkgPSBhd2FpdCByZXNvbHZlcih7Y29uZmlndXJhdGlvbiwgcGFyYW1zOiB7fSwgcmVxdWVzdDogLyoqIEB0eXBlIHthbnl9ICovICh1bmRlZmluZWQpLCByZXNwb25zZTogLyoqIEB0eXBlIHthbnl9ICovICh1bmRlZmluZWQpfSlcblxuICAgICAgaWYgKGFiaWxpdHk/LnJlc291cmNlcyAmJiBBcnJheS5pc0FycmF5KGFiaWxpdHkucmVzb3VyY2VzKSkge1xuICAgICAgICByZXR1cm4gYWJpbGl0eS5yZXNvdXJjZXNcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFJlc29sdmVyIHJlcXVpcmVzIHJlcXVlc3QgY29udGV4dCAoZS5nLiByZWFkcyByZXF1ZXN0LnBhdGgoKSkgd2hpY2ggaXNcbiAgICAgIC8vIHVuYXZhaWxhYmxlIGR1cmluZyBpbml0aWFsaXphdGlvbi4gVXNlIGNvbmZpZ3VyYXRpb24uc2V0QWJpbGl0eVJlc291cmNlcygpXG4gICAgICAvLyBvciBiYWNrZW5kUHJvamVjdHMuZnJvbnRlbmRNb2RlbHMgZm9yIGV4cGxpY2l0IHJlZ2lzdHJhdGlvbiBpbnN0ZWFkLlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5BYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gYWJpbGl0eVJlc291cmNlcyAtIEFiaWxpdHkgcmVzb3VyY2UgY2xhc3Nlcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZT59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlc0Zyb21BYmlsaXR5UmVzb3VyY2VzTGlzdChhYmlsaXR5UmVzb3VyY2VzKSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U+fSAqL1xuICBjb25zdCByZXNvdXJjZXMgPSB7fVxuXG4gIGlmICghYWJpbGl0eVJlc291cmNlcyB8fCBhYmlsaXR5UmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc291cmNlc1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXR5UmVzb3VyY2VzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYWJpbGl0eSByZXNvdXJjZXMgdG8gYmUgYW4gYXJyYXkgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eVJlc291cmNlc31gKVxuICB9XG5cbiAgZm9yIChjb25zdCByZXNvdXJjZUNsYXNzIG9mIGFiaWxpdHlSZXNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlc291cmNlQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIHRvIGJlIGEgY2xhc3MgYnV0IGdvdDogJHt0eXBlb2YgcmVzb3VyY2VDbGFzc31gKVxuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlfSAqLyAocmVzb3VyY2VDbGFzcykuTW9kZWxDbGFzc1xuXG4gICAgICBpZiAoIW1vZGVsQ2xhc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNvdXJjZSBjbGFzcyAke3Jlc291cmNlQ2xhc3MubmFtZX0gaXMgbWlzc2luZyBhIHN0YXRpYyBNb2RlbENsYXNzIHByb3BlcnR5YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9kZWxOYW1lID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuXG4gICAgICBpZiAoIW1vZGVsTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIGNsYXNzICR7bW9kZWxDbGFzcy5uYW1lfSByZXR1cm5lZCBlbXB0eSBtb2RlbCBuYW1lIGZyb20gZ2V0TW9kZWxOYW1lKClgKVxuICAgICAgfVxuXG4gICAgICByZXNvdXJjZXNbbW9kZWxOYW1lXSA9IC8qKiBAdHlwZSB7dHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2V9ICovIChyZXNvdXJjZUNsYXNzKVxuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBdXRob3JpemF0aW9uQmFzZVJlc291cmNlKSB7XG4gICAgICAvLyBBdXRob3JpemF0aW9uLW9ubHkgcmVzb3VyY2Ug4oCUIHZhbGlkIGJ1dCBub3QgcmVsZXZhbnQgZm9yIFdlYlNvY2tldCBwdWJsaXNoaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIGNsYXNzOiAke3Jlc291cmNlQ2xhc3MubmFtZX0uIEV4cGVjdGVkIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2Ugb3IgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBzdWJjbGFzcy5gKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvdXJjZXNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUZyb250ZW5kTW9kZWxXZWJzb2NrZXRQdWJsaXNoZXJzUmVnaXN0ZXJlZChjb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3NlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0TW9kZWxDbGFzc2VzKClcblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gKi9cbiAgbGV0IGFsbEZyb250ZW5kTW9kZWxzID0ge31cbiAgbGV0IGhhc0V4cGxpY2l0Q29uZmlnID0gZmFsc2VcblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGNvbmZpZ3VyYXRpb24uZ2V0QmFja2VuZFByb2plY3RzKCkpIHtcbiAgICBpZiAoYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHMgIT09IHVuZGVmaW5lZCB8fCBiYWNrZW5kUHJvamVjdC5mcm9udGVuZE1vZGVsc1JlcXVpcmVDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0V4cGxpY2l0Q29uZmlnID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByb2plY3RSZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IHsuLi5hbGxGcm9udGVuZE1vZGVscywgLi4ucHJvamVjdFJlc291cmNlc31cbiAgfVxuXG4gIC8vIEF1dG8tZGlzY292ZXIgZnJvbSBhYmlsaXR5IHJlc291cmNlcyBvbmx5IHdoZW4gbm8gYmFja2VuZCBwcm9qZWN0XG4gIC8vIGV4cGxpY2l0bHkgZGVmaW5lcyBmcm9udGVuZE1vZGVscyBvciBmcm9udGVuZE1vZGVsc1JlcXVpcmVDb250ZXh0XG4gIGlmICghaGFzRXhwbGljaXRDb25maWcpIHtcbiAgICBjb25zdCBhYmlsaXR5UmVzb3VyY2VzID0gYXdhaXQgcmVzb2x2ZUFiaWxpdHlSZXNvdXJjZXNMaXN0KGNvbmZpZ3VyYXRpb24pXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGcm9tQWJpbGl0eVJlc291cmNlc0xpc3QoYWJpbGl0eVJlc291cmNlcylcbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kZWxOYW1lIG9mIE9iamVjdC5rZXlzKGFsbEZyb250ZW5kTW9kZWxzKSkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzZXNbbW9kZWxOYW1lXVxuXG4gICAgaWYgKCFtb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgbGV0IHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucyA9IHJlZ2lzdGVyZWRDb25maWd1cmF0aW9uc0J5TW9kZWxDbGFzcy5nZXQobW9kZWxDbGFzcylcblxuICAgIGlmICghcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zKSB7XG4gICAgICByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMgPSBuZXcgV2Vha1NldCgpXG4gICAgICByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnNCeU1vZGVsQ2xhc3Muc2V0KG1vZGVsQ2xhc3MsIHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucylcbiAgICB9XG5cbiAgICBpZiAocmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zLmhhcyhjb25maWd1cmF0aW9uKSkgY29udGludWVcblxuICAgIHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucy5hZGQoY29uZmlndXJhdGlvbilcblxuICAgIG1vZGVsQ2xhc3MuYmVmb3JlQ3JlYXRlKChtb2RlbCkgPT4ge1xuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCAmIHtfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24/OiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIn19ICovIChtb2RlbCkuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uID0gXCJjcmVhdGVcIlxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZVVwZGF0ZSgobW9kZWwpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgJiB7X19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uPzogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCJ9fSAqLyAobW9kZWwpLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwidXBkYXRlXCJcbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5hZnRlclNhdmUoKG1vZGVsKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbFdpdGhXZWJzb2NrZXRBY3Rpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwifX0gKi8gKG1vZGVsKVxuICAgICAgY29uc3QgYWN0aW9uID0gbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuXG4gICAgICBpZiAoYWN0aW9uICE9PSBcImNyZWF0ZVwiICYmIGFjdGlvbiAhPT0gXCJ1cGRhdGVcIikgcmV0dXJuXG5cbiAgICAgIHZvaWQgbW9kZWwuZ2V0TW9kZWxDbGFzcygpLmNvbm5lY3Rpb24oKS5hZnRlckNvbW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0V2Vic29ja2V0RXZlbnRzKCk/LnB1Ymxpc2goZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lKG1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKCksXG4gICAgICAgICAgcmVjb3JkOiBtb2RlbC5hdHRyaWJ1dGVzKCksXG4gICAgICAgICAgbW9kZWxOYW1lXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgZGVsZXRlIG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb25cbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5hZnRlckRlc3Ryb3koKG1vZGVsKSA9PiB7XG4gICAgICB2b2lkIG1vZGVsLmdldE1vZGVsQ2xhc3MoKS5jb25uZWN0aW9uKCkuYWZ0ZXJDb21taXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25maWd1cmF0aW9uLmdldFdlYnNvY2tldEV2ZW50cygpPy5wdWJsaXNoKGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpLCB7XG4gICAgICAgICAgYWN0aW9uOiBcImRlc3Ryb3lcIixcbiAgICAgICAgICBpZDogbW9kZWwuaWQoKSxcbiAgICAgICAgICBtb2RlbE5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.286",
6
+ "version": "1.0.289",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [