@cargolift-cdi/lib-payload 0.1.11 → 0.1.13

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.
Files changed (29) hide show
  1. package/dist/cjs/lib-payload/src/index.js +27 -0
  2. package/dist/cjs/lib-payload/src/index.js.map +1 -0
  3. package/dist/cjs/lib-payload/src/payload-condition/payload-condition.js +50 -0
  4. package/dist/cjs/lib-payload/src/payload-condition/payload-condition.js.map +1 -0
  5. package/dist/cjs/lib-payload/src/payload-response-interpreter/payload-response-interpreter.js +80 -0
  6. package/dist/cjs/lib-payload/src/payload-response-interpreter/payload-response-interpreter.js.map +1 -0
  7. package/dist/cjs/lib-payload/src/util/payload-comparator.util.js +65 -0
  8. package/dist/cjs/lib-payload/src/util/payload-comparator.util.js.map +1 -0
  9. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  10. package/dist/cjs/types/src/interfaces/payload-condition.interface.js +3 -0
  11. package/dist/cjs/types/src/interfaces/payload-condition.interface.js.map +1 -0
  12. package/dist/esm/lib-payload/src/index.js +11 -0
  13. package/dist/esm/lib-payload/src/index.js.map +1 -0
  14. package/dist/esm/lib-payload/src/payload-condition/payload-condition.js +46 -0
  15. package/dist/esm/lib-payload/src/payload-condition/payload-condition.js.map +1 -0
  16. package/dist/esm/lib-payload/src/payload-response-interpreter/payload-response-interpreter.js +76 -0
  17. package/dist/esm/lib-payload/src/payload-response-interpreter/payload-response-interpreter.js.map +1 -0
  18. package/dist/esm/lib-payload/src/util/payload-comparator.util.js +61 -0
  19. package/dist/esm/lib-payload/src/util/payload-comparator.util.js.map +1 -0
  20. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  21. package/dist/esm/types/src/interfaces/payload-condition.interface.js +2 -0
  22. package/dist/esm/types/src/interfaces/payload-condition.interface.js.map +1 -0
  23. package/dist/types/lib-payload/src/index.d.ts +10 -0
  24. package/dist/types/lib-payload/src/payload-condition/payload-condition.d.ts +4 -0
  25. package/dist/types/lib-payload/src/payload-response-interpreter/payload-response-interpreter.d.ts +12 -0
  26. package/dist/types/lib-payload/src/payload-validation/payload-validation.d.ts +18 -0
  27. package/dist/types/lib-payload/src/util/payload-comparator.util.d.ts +6 -0
  28. package/dist/types/types/src/interfaces/payload-condition.interface.d.ts +21 -0
  29. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=payload-condition.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-condition.interface.js","sourceRoot":"","sources":["../../../../../../types/src/interfaces/payload-condition.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export * from "./payload-validation/payload-validation.js";
2
+ export * from "./payload-validation/payload-validation.interface.js";
3
+ export * from "./payload-response-interpreter/payload-response-interpreter.js";
4
+ export * from "./payload-transformation/payload-transformation.js";
5
+ export * from "./util/util.js";
6
+ export * from "./payload-condition/payload-condition.js";
7
+ export * from "../../types/src/interfaces/payload-condition.interface.js";
8
+ export * from "./util/payload-path.util.js";
9
+ export * from "./util/payload-comparator.util.js";
10
+ export * from "./util/payload-pointer.util.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sDAAsD,CAAC;AACrE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,oDAAoD,CAAC;AAEnE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0CAA0C,CAAC;AACzD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { PayloadUtil } from "../util/util.js";
2
+ import { PayloadPath } from "../util/payload-path.util.js";
3
+ import { PayloadComparator } from "../util/payload-comparator.util.js";
4
+ export class PayloadCondition {
5
+ static async evaluate(conditions, payload) {
6
+ if (conditions?.conditions === undefined || conditions.conditions === null) {
7
+ return { success: true };
8
+ }
9
+ try {
10
+ const normalizedPayload = PayloadUtil.normalize(payload);
11
+ if (normalizedPayload === undefined) {
12
+ return { success: false, error: "Payload invalido para avaliacao de condicoes" };
13
+ }
14
+ const success = ConditionEvaluator.evaluate(conditions.conditions, normalizedPayload);
15
+ return { success };
16
+ }
17
+ catch (err) {
18
+ return { success: false, error: "Erro ao verificar condicoes: " + err.message };
19
+ }
20
+ }
21
+ }
22
+ class ConditionEvaluator {
23
+ static evaluate(condition, payload) {
24
+ if (Array.isArray(condition)) {
25
+ return condition.every((c) => this.evaluate(c, payload));
26
+ }
27
+ if (this.isAll(condition)) {
28
+ return condition.all.every((c) => this.evaluate(c, payload));
29
+ }
30
+ if (this.isAny(condition)) {
31
+ return condition.any.some((c) => this.evaluate(c, payload));
32
+ }
33
+ return this.evaluateBase(condition, payload);
34
+ }
35
+ static evaluateBase(condition, payload) {
36
+ const leftValue = PayloadPath.get(payload, condition.left);
37
+ return PayloadComparator.compare(leftValue, condition.operator, condition.right);
38
+ }
39
+ static isAll(condition) {
40
+ return condition.all !== undefined;
41
+ }
42
+ static isAny(condition) {
43
+ return condition.any !== undefined;
44
+ }
45
+ }
46
+ //# sourceMappingURL=payload-condition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-condition.js","sourceRoot":"","sources":["../../../../../src/payload-condition/payload-condition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAKvE,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAA6B,EAAE,OAAY;QAC/D,IAAI,UAAU,EAAE,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;YACnF,CAAC;YAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACtF,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,GAAI,GAAa,CAAC,OAAO,EAAE,CAAC;QAC7F,CAAC;IACH,CAAC;CACF;AAED,MAAM,kBAAkB;IACtB,MAAM,CAAC,QAAQ,CAAC,SAAkC,EAAE,OAAgB;QAClE,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,SAAwB,EAAE,OAAgB;QACpE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,SAAoB;QACvC,OAAQ,SAA0B,CAAC,GAAG,KAAK,SAAS,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,SAAoB;QACvC,OAAQ,SAA0B,CAAC,GAAG,KAAK,SAAS,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,76 @@
1
+ import { PayloadUtil } from "../util/util.js";
2
+ export class PayloadResponseInterpreter {
3
+ validate(rules, payload) {
4
+ if (!rules) {
5
+ return;
6
+ }
7
+ const parsedPayload = PayloadUtil.normalize(payload);
8
+ if (parsedPayload === undefined) {
9
+ throw new Error("Payload inválido para avaliação do template de resposta.");
10
+ }
11
+ return {
12
+ success: this.evaluateSuccess(rules.success, parsedPayload, rules),
13
+ message: this.extractTemplateValue(parsedPayload, rules.message || ""),
14
+ details: this.extractTemplateValue(parsedPayload, rules.details || ""),
15
+ };
16
+ }
17
+ evaluateSuccess(successTemplate, payload, rules) {
18
+ if (!successTemplate) {
19
+ return true;
20
+ }
21
+ const templates = Array.isArray(successTemplate) ? successTemplate : [successTemplate];
22
+ for (const template of templates) {
23
+ const value = this.extractTemplateValue(payload, template.path);
24
+ if (value === undefined) {
25
+ continue;
26
+ }
27
+ if (template.equals === undefined) {
28
+ return true;
29
+ }
30
+ else {
31
+ return value === template.equals;
32
+ }
33
+ }
34
+ if (rules.options?.failureOnMissingPath) {
35
+ return false;
36
+ }
37
+ return true;
38
+ }
39
+ extractTemplateValue(source, selector) {
40
+ if (!selector || selector === "") {
41
+ return undefined;
42
+ }
43
+ const steps = this.toPathArray(selector);
44
+ let current = source;
45
+ for (const step of steps) {
46
+ if (current === null || current === undefined) {
47
+ return undefined;
48
+ }
49
+ if (Array.isArray(current)) {
50
+ const idx = Number(step);
51
+ if (Number.isNaN(idx)) {
52
+ return undefined;
53
+ }
54
+ current = current[idx];
55
+ continue;
56
+ }
57
+ if (typeof current === "object" && step in current) {
58
+ current = current[step];
59
+ continue;
60
+ }
61
+ return undefined;
62
+ }
63
+ return current;
64
+ }
65
+ toPathArray(selector) {
66
+ if (Array.isArray(selector)) {
67
+ return selector.map(String).filter((segment) => segment.length > 0);
68
+ }
69
+ return selector
70
+ .replaceAll(/\[(\d+)\]/g, ".$1")
71
+ .split("/")
72
+ .map((segment) => segment.trim())
73
+ .filter((segment) => segment.length > 0);
74
+ }
75
+ }
76
+ //# sourceMappingURL=payload-response-interpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-response-interpreter.js","sourceRoot":"","sources":["../../../../../src/payload-response-interpreter/payload-response-interpreter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ export class PayloadComparator {
2
+ static compare(left, operator, right) {
3
+ switch (operator) {
4
+ case "=":
5
+ return left === right || left == right;
6
+ case "!=":
7
+ return left !== right && left != right;
8
+ case ">":
9
+ return left > right;
10
+ case ">=":
11
+ return left >= right;
12
+ case "<":
13
+ return left < right;
14
+ case "<=":
15
+ return left <= right;
16
+ case "in":
17
+ return Array.isArray(right) && right.includes(left);
18
+ case "not_in":
19
+ return Array.isArray(right) && !right.includes(left);
20
+ case "contains":
21
+ return this.contains(left, right);
22
+ case "not_contains":
23
+ return !this.contains(left, right);
24
+ case "starts_with":
25
+ return typeof left === "string" && typeof right === "string" && left.startsWith(right);
26
+ case "ends_with":
27
+ return typeof left === "string" && typeof right === "string" && left.endsWith(right);
28
+ case "regex":
29
+ return typeof left === "string" && new RegExp(String(right)).test(left);
30
+ case "exists":
31
+ return right ? left !== undefined && left !== null : left === undefined || left === null;
32
+ case "not_exists":
33
+ return right ? left === undefined || left === null : left !== undefined && left !== null;
34
+ case "empty":
35
+ return !!right === this.isEmpty(left);
36
+ case "not_empty":
37
+ return !!right === !this.isEmpty(left);
38
+ default:
39
+ return false;
40
+ }
41
+ }
42
+ static contains(container, value) {
43
+ if (Array.isArray(container))
44
+ return container.includes(value);
45
+ if (typeof container === "string")
46
+ return container.includes(String(value));
47
+ return false;
48
+ }
49
+ static isEmpty(value) {
50
+ if (value === undefined || value === null)
51
+ return true;
52
+ if (typeof value === "string")
53
+ return value.length === 0;
54
+ if (Array.isArray(value))
55
+ return value.length === 0;
56
+ if (typeof value === "object")
57
+ return Object.keys(value).length === 0;
58
+ return false;
59
+ }
60
+ }
61
+ //# sourceMappingURL=payload-comparator.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-comparator.util.js","sourceRoot":"","sources":["../../../../../src/util/payload-comparator.util.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IACrB,MAAM,CAAC,OAAO,CAAC,IAAa,EAAE,QAAkB,EAAE,KAAc;QACrE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,IAAI,KAAK,KAAK,IAAK,IAAY,IAAK,KAAa,CAAC;YAC3D,KAAK,IAAI;gBACP,OAAO,IAAI,KAAK,KAAK,IAAK,IAAY,IAAK,KAAa,CAAC;YAC3D,KAAK,GAAG;gBACN,OAAQ,IAAY,GAAI,KAAa,CAAC;YACxC,KAAK,IAAI;gBACP,OAAQ,IAAY,IAAK,KAAa,CAAC;YACzC,KAAK,GAAG;gBACN,OAAQ,IAAY,GAAI,KAAa,CAAC;YACxC,KAAK,IAAI;gBACP,OAAQ,IAAY,IAAK,KAAa,CAAC;YACzC,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAW,CAAC,CAAC;YAC7D,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAW,CAAC,CAAC;YAC9D,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpC,KAAK,cAAc;gBACjB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,KAAK,aAAa;gBAChB,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzF,KAAK,WAAW;gBACd,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvF,KAAK,OAAO;gBACV,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;YAC3F,KAAK,YAAY;gBACf,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;YAC3F,KAAK,OAAO;gBACV,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,KAAK,WAAW;gBACd,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,SAAkB,EAAE,KAAc;QACxD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,KAAc;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACjG,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}