velocious 1.0.325 → 1.0.326

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.
@@ -1,4 +1,24 @@
1
1
  export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
2
+ /**
3
+ * Try to resolve a scope column value from a loaded belongsTo
4
+ * relationship on the model. When a Task is created via
5
+ * `new Task({project})`, the FK (`projectId`) is only flushed onto
6
+ * the attribute store during save — but the relationship object is
7
+ * already loaded and carries the id we need for the WHERE clause.
8
+ *
9
+ * @param {import("../index.js").default} model
10
+ * @param {string} scopeColumn - camelCase attribute name (e.g. `"projectId"`).
11
+ * @returns {string | number | null}
12
+ */
13
+ _resolveScopeValueFromRelationship(model: import("../index.js").default, scopeColumn: string): string | number | null;
14
+ /**
15
+ * Normalize the `scope` option into an array of attribute names.
16
+ * Supports string (`"userId"`), array of strings (`["userId", "projectId"]`),
17
+ * or absent (empty array — no scope, original single-column behavior).
18
+ *
19
+ * @returns {string[]}
20
+ */
21
+ _normalizeScopeColumns(): string[];
2
22
  }
3
23
  import Base from "./base.js";
4
24
  //# sourceMappingURL=uniqueness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uniqueness.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/validators/uniqueness.js"],"names":[],"mappings":"AAKA;CAoCC;iBAvCgB,WAAW"}
1
+ {"version":3,"file":"uniqueness.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/validators/uniqueness.js"],"names":[],"mappings":"AAKA;IA2DE;;;;;;;;;;OAUG;IACH,0CAJW,OAAO,aAAa,EAAE,OAAO,eAC7B,MAAM,GACJ,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBlC;IAED;;;;;;OAMG;IACH,0BAFa,MAAM,EAAE,CASpB;CACF;iBAhHgB,WAAW"}
@@ -17,6 +17,24 @@ export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
17
17
  /** @type {Record<string, string | number>} */
18
18
  const whereArgs = {};
19
19
  whereArgs[attributeNameUnderscore] = attributeValue;
20
+ // Rails parity: `validates :attr, uniqueness: {scope: :other}` adds
21
+ // the scoped column(s) to the WHERE clause so uniqueness is checked
22
+ // within the given scope (e.g. `role` unique per `userId`).
23
+ const scopeColumns = this._normalizeScopeColumns();
24
+ for (const scopeColumn of scopeColumns) {
25
+ const scopeUnderscore = inflection.underscore(scopeColumn);
26
+ let scopeValue = model.readAttribute(scopeColumn);
27
+ // When the FK hasn't been flushed from the relationship object
28
+ // onto the attribute store yet (e.g. `new Task({project})` where
29
+ // `projectId` is still undefined), try resolving it from the
30
+ // loaded belongsTo relationship instead.
31
+ if (scopeValue == null) {
32
+ scopeValue = this._resolveScopeValueFromRelationship(model, scopeColumn);
33
+ }
34
+ if (scopeValue == null)
35
+ return;
36
+ whereArgs[scopeUnderscore] = /** @type {string | number} */ (scopeValue);
37
+ }
20
38
  let existingRecordQuery = modelClass
21
39
  .select(modelClass.primaryKey())
22
40
  .where(whereArgs);
@@ -30,5 +48,49 @@ export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
30
48
  model._validationErrors[attributeName].push({ type: "uniqueness", message: "has already been taken" });
31
49
  }
32
50
  }
51
+ /**
52
+ * Try to resolve a scope column value from a loaded belongsTo
53
+ * relationship on the model. When a Task is created via
54
+ * `new Task({project})`, the FK (`projectId`) is only flushed onto
55
+ * the attribute store during save — but the relationship object is
56
+ * already loaded and carries the id we need for the WHERE clause.
57
+ *
58
+ * @param {import("../index.js").default} model
59
+ * @param {string} scopeColumn - camelCase attribute name (e.g. `"projectId"`).
60
+ * @returns {string | number | null}
61
+ */
62
+ _resolveScopeValueFromRelationship(model, scopeColumn) {
63
+ const modelClass = /** @type {typeof import("../index.js").default} */ (model.constructor);
64
+ const relationships = modelClass.getRelationshipsMap();
65
+ for (const relationshipName in relationships) {
66
+ const relationship = relationships[relationshipName];
67
+ if (relationship.getType?.() !== "belongsTo")
68
+ continue;
69
+ const foreignKey = inflection.camelize(relationship.getForeignKey(), true);
70
+ if (foreignKey !== scopeColumn)
71
+ continue;
72
+ const instanceRelationship = model.getRelationshipByName(relationshipName);
73
+ const loaded = instanceRelationship.loaded();
74
+ if (loaded && !Array.isArray(loaded) && typeof loaded.id === "function") {
75
+ return loaded.id();
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+ /**
81
+ * Normalize the `scope` option into an array of attribute names.
82
+ * Supports string (`"userId"`), array of strings (`["userId", "projectId"]`),
83
+ * or absent (empty array — no scope, original single-column behavior).
84
+ *
85
+ * @returns {string[]}
86
+ */
87
+ _normalizeScopeColumns() {
88
+ const scope = this.args?.scope;
89
+ if (!scope)
90
+ return [];
91
+ if (Array.isArray(scope))
92
+ return scope;
93
+ return [String(scope)];
94
+ }
33
95
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlbmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvdmFsaWRhdG9ycy91bmlxdWVuZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFFeEMsTUFBTSxDQUFDLE9BQU8sT0FBTywyQ0FBNEMsU0FBUSxJQUFJO0lBQzNFOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsbURBQW1ELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFMUYsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNsRCxNQUFNLGNBQWMsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUMxRixNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFcEUsOENBQThDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixTQUFTLENBQUMsdUJBQXVCLENBQUMsR0FBRyxjQUFjLENBQUE7UUFFbkQsSUFBSSxtQkFBbUIsR0FBRyxVQUFVO2FBQ2pDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDL0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRW5CLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDeEIsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3hKLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFBO1FBRXhELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztnQkFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBRTVGLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBQyxDQUFDLENBQUE7UUFDdEcsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi9iYXNlLmpzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZFZhbGlkYXRvcnNVbmlxdWVuZXNzIGV4dGVuZHMgQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWwgLSBNb2RlbCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYXR0cmlidXRlTmFtZSAtIEF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgdmFsaWRhdGUoe21vZGVsLCBhdHRyaWJ1dGVOYW1lfSkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAobW9kZWwuY29uc3RydWN0b3IpXG5cbiAgICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLl9nZXRUYWJsZSgpLmdldE5hbWUoKVxuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKVxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1thdHRyaWJ1dGVOYW1lVW5kZXJzY29yZV0gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgbGV0IGV4aXN0aW5nUmVjb3JkUXVlcnkgPSBtb2RlbENsYXNzXG4gICAgICAuc2VsZWN0KG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKVxuICAgICAgLndoZXJlKHdoZXJlQXJncylcblxuICAgIGlmIChtb2RlbC5pc1BlcnNpc3RlZCgpKSB7XG4gICAgICBleGlzdGluZ1JlY29yZFF1ZXJ5LndoZXJlKGAke2Nvbm5lY3Rpb24ucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke2Nvbm5lY3Rpb24ucXVvdGVDb2x1bW4obW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpfSAhPSAke2Nvbm5lY3Rpb24ucXVvdGUobW9kZWwuaWQoKSl9YClcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1JlY29yZCA9IGF3YWl0IGV4aXN0aW5nUmVjb3JkUXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKGV4aXN0aW5nUmVjb3JkKSB7XG4gICAgICBpZiAoIShhdHRyaWJ1dGVOYW1lIGluIG1vZGVsLl92YWxpZGF0aW9uRXJyb3JzKSkgbW9kZWwuX3ZhbGlkYXRpb25FcnJvcnNbYXR0cmlidXRlTmFtZV0gPSBbXVxuXG4gICAgICBtb2RlbC5fdmFsaWRhdGlvbkVycm9yc1thdHRyaWJ1dGVOYW1lXS5wdXNoKHt0eXBlOiBcInVuaXF1ZW5lc3NcIiwgbWVzc2FnZTogXCJoYXMgYWxyZWFkeSBiZWVuIHRha2VuXCJ9KVxuICAgIH1cbiAgfVxufVxuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlbmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvdmFsaWRhdG9ycy91bmlxdWVuZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFFeEMsTUFBTSxDQUFDLE9BQU8sT0FBTywyQ0FBNEMsU0FBUSxJQUFJO0lBQzNFOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsbURBQW1ELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFMUYsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNsRCxNQUFNLGNBQWMsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUMxRixNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFcEUsOENBQThDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixTQUFTLENBQUMsdUJBQXVCLENBQUMsR0FBRyxjQUFjLENBQUE7UUFFbkQsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSw0REFBNEQ7UUFDNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFFbEQsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcs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QUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUNyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi9iYXNlLmpzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZFZhbGlkYXRvcnNVbmlxdWVuZXNzIGV4dGVuZHMgQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWwgLSBNb2RlbCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYXR0cmlidXRlTmFtZSAtIEF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgdmFsaWRhdGUoe21vZGVsLCBhdHRyaWJ1dGVOYW1lfSkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAobW9kZWwuY29uc3RydWN0b3IpXG5cbiAgICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLl9nZXRUYWJsZSgpLmdldE5hbWUoKVxuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKVxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1thdHRyaWJ1dGVOYW1lVW5kZXJzY29yZV0gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gUmFpbHMgcGFyaXR5OiBgdmFsaWRhdGVzIDphdHRyLCB1bmlxdWVuZXNzOiB7c2NvcGU6IDpvdGhlcn1gIGFkZHNcbiAgICAvLyB0aGUgc2NvcGVkIGNvbHVtbihzKSB0byB0aGUgV0hFUkUgY2xhdXNlIHNvIHVuaXF1ZW5lc3MgaXMgY2hlY2tlZFxuICAgIC8vIHdpdGhpbiB0aGUgZ2l2ZW4gc2NvcGUgKGUuZy4gYHJvbGVgIHVuaXF1ZSBwZXIgYHVzZXJJZGApLlxuICAgIGNvbnN0IHNjb3BlQ29sdW1ucyA9IHRoaXMuX25vcm1hbGl6ZVNjb3BlQ29sdW1ucygpXG5cbiAgICBmb3IgKGNvbnN0IHNjb3BlQ29sdW1uIG9mIHNjb3BlQ29sdW1ucykge1xuICAgICAgY29uc3Qgc2NvcGVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHNjb3BlQ29sdW1uKVxuICAgICAgbGV0IHNjb3BlVmFsdWUgPSBtb2RlbC5yZWFkQXR0cmlidXRlKHNjb3BlQ29sdW1uKVxuXG4gICAgICAvLyBXaGVuIHRoZSBGSyBoYXNuJ3QgYmVlbiBmbHVzaGVkIGZyb20gdGhlIHJlbGF0aW9uc2hpcCBvYmplY3RcbiAgICAgIC8vIG9udG8gdGhlIGF0dHJpYnV0ZSBzdG9yZSB5ZXQgKGUuZy4gYG5ldyBUYXNrKHtwcm9qZWN0fSlgIHdoZXJlXG4gICAgICAvLyBgcHJvamVjdElkYCBpcyBzdGlsbCB1bmRlZmluZWQpLCB0cnkgcmVzb2x2aW5nIGl0IGZyb20gdGhlXG4gICAgICAvLyBsb2FkZWQgYmVsb25nc1RvIHJlbGF0aW9uc2hpcCBpbnN0ZWFkLlxuICAgICAgaWYgKHNjb3BlVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBzY29wZVZhbHVlID0gdGhpcy5fcmVzb2x2ZVNjb3BlVmFsdWVGcm9tUmVsYXRpb25zaGlwKG1vZGVsLCBzY29wZUNvbHVtbilcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3BlVmFsdWUgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgIHdoZXJlQXJnc1tzY29wZVVuZGVyc2NvcmVdID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChzY29wZVZhbHVlKVxuICAgIH1cblxuICAgIGxldCBleGlzdGluZ1JlY29yZFF1ZXJ5ID0gbW9kZWxDbGFzc1xuICAgICAgLnNlbGVjdChtb2RlbENsYXNzLnByaW1hcnlLZXkoKSlcbiAgICAgIC53aGVyZSh3aGVyZUFyZ3MpXG5cbiAgICBpZiAobW9kZWwuaXNQZXJzaXN0ZWQoKSkge1xuICAgICAgZXhpc3RpbmdSZWNvcmRRdWVyeS53aGVyZShgJHtjb25uZWN0aW9uLnF1b3RlVGFibGUodGFibGVOYW1lKX0uJHtjb25uZWN0aW9uLnF1b3RlQ29sdW1uKG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKX0gIT0gJHtjb25uZWN0aW9uLnF1b3RlKG1vZGVsLmlkKCkpfWApXG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdSZWNvcmQgPSBhd2FpdCBleGlzdGluZ1JlY29yZFF1ZXJ5LmZpcnN0KClcblxuICAgIGlmIChleGlzdGluZ1JlY29yZCkge1xuICAgICAgaWYgKCEoYXR0cmlidXRlTmFtZSBpbiBtb2RlbC5fdmFsaWRhdGlvbkVycm9ycykpIG1vZGVsLl92YWxpZGF0aW9uRXJyb3JzW2F0dHJpYnV0ZU5hbWVdID0gW11cblxuICAgICAgbW9kZWwuX3ZhbGlkYXRpb25FcnJvcnNbYXR0cmlidXRlTmFtZV0ucHVzaCh7dHlwZTogXCJ1bmlxdWVuZXNzXCIsIG1lc3NhZ2U6IFwiaGFzIGFscmVhZHkgYmVlbiB0YWtlblwifSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHJlc29sdmUgYSBzY29wZSBjb2x1bW4gdmFsdWUgZnJvbSBhIGxvYWRlZCBiZWxvbmdzVG9cbiAgICogcmVsYXRpb25zaGlwIG9uIHRoZSBtb2RlbC4gV2hlbiBhIFRhc2sgaXMgY3JlYXRlZCB2aWFcbiAgICogYG5ldyBUYXNrKHtwcm9qZWN0fSlgLCB0aGUgRksgKGBwcm9qZWN0SWRgKSBpcyBvbmx5IGZsdXNoZWQgb250b1xuICAgKiB0aGUgYXR0cmlidXRlIHN0b3JlIGR1cmluZyBzYXZlIOKAlCBidXQgdGhlIHJlbGF0aW9uc2hpcCBvYmplY3QgaXNcbiAgICogYWxyZWFkeSBsb2FkZWQgYW5kIGNhcnJpZXMgdGhlIGlkIHdlIG5lZWQgZm9yIHRoZSBXSEVSRSBjbGF1c2UuXG4gICAqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlQ29sdW1uIC0gY2FtZWxDYXNlIGF0dHJpYnV0ZSBuYW1lIChlLmcuIGBcInByb2plY3RJZFwiYCkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfVxuICAgKi9cbiAgX3Jlc29sdmVTY29wZVZhbHVlRnJvbVJlbGF0aW9uc2hpcChtb2RlbCwgc2NvcGVDb2x1bW4pIHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKG1vZGVsLmNvbnN0cnVjdG9yKVxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcHNNYXAoKVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIGluIHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHNbcmVsYXRpb25zaGlwTmFtZV1cblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlPy4oKSAhPT0gXCJiZWxvbmdzVG9cIikgY29udGludWVcblxuICAgICAgY29uc3QgZm9yZWlnbktleSA9IGluZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXkoKSwgdHJ1ZSlcblxuICAgICAgaWYgKGZvcmVpZ25LZXkgIT09IHNjb3BlQ29sdW1uKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBpbnN0YW5jZVJlbGF0aW9uc2hpcCA9IG1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShyZWxhdGlvbnNoaXBOYW1lKVxuICAgICAgY29uc3QgbG9hZGVkID0gaW5zdGFuY2VSZWxhdGlvbnNoaXAubG9hZGVkKClcblxuICAgICAgaWYgKGxvYWRlZCAmJiAhQXJyYXkuaXNBcnJheShsb2FkZWQpICYmIHR5cGVvZiBsb2FkZWQuaWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gbG9hZGVkLmlkKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB0aGUgYHNjb3BlYCBvcHRpb24gaW50byBhbiBhcnJheSBvZiBhdHRyaWJ1dGUgbmFtZXMuXG4gICAqIFN1cHBvcnRzIHN0cmluZyAoYFwidXNlcklkXCJgKSwgYXJyYXkgb2Ygc3RyaW5ncyAoYFtcInVzZXJJZFwiLCBcInByb2plY3RJZFwiXWApLFxuICAgKiBvciBhYnNlbnQgKGVtcHR5IGFycmF5IOKAlCBubyBzY29wZSwgb3JpZ2luYWwgc2luZ2xlLWNvbHVtbiBiZWhhdmlvcikuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIF9ub3JtYWxpemVTY29wZUNvbHVtbnMoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmFyZ3M/LnNjb3BlXG5cbiAgICBpZiAoIXNjb3BlKSByZXR1cm4gW11cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY29wZSkpIHJldHVybiBzY29wZVxuXG4gICAgcmV0dXJuIFtTdHJpbmcoc2NvcGUpXVxuICB9XG59XG4iXX0=
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.325",
6
+ "version": "1.0.326",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [