tychat-contracts 1.0.106 → 1.0.107
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-contact-filters-query.validator.d.ts","sourceRoot":"","sources":["../../src/conversations/conversation-contact-filters-query.validator.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EAGnB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-contact-filters-query.validator.d.ts","sourceRoot":"","sources":["../../src/conversations/conversation-contact-filters-query.validator.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EAGnB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AA8CzB;;;;;;;GAOG;AACH,qBACa,yCACX,YAAW,4BAA4B;IAEvC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO;IAyH5D,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;CAMlD"}
|
|
@@ -25,6 +25,30 @@ function flattenErrors(errors, prefix = '') {
|
|
|
25
25
|
}
|
|
26
26
|
return out;
|
|
27
27
|
}
|
|
28
|
+
/** Alguns gateways/parsers envolvem o item em um ou mais arrays de um elemento. */
|
|
29
|
+
function unwrapSingleElementArrays(el, maxDepth = 8) {
|
|
30
|
+
let cur = el;
|
|
31
|
+
let d = 0;
|
|
32
|
+
while (Array.isArray(cur) && cur.length === 1 && d < maxDepth) {
|
|
33
|
+
cur = cur[0];
|
|
34
|
+
d += 1;
|
|
35
|
+
}
|
|
36
|
+
return cur;
|
|
37
|
+
}
|
|
38
|
+
/** JSON string que, ao dar parse, ainda é string (double-encoded), até virar objeto/array. */
|
|
39
|
+
function jsonParseLoose(text) {
|
|
40
|
+
let parsed = JSON.parse(text);
|
|
41
|
+
let guard = 0;
|
|
42
|
+
while (typeof parsed === 'string' && guard < 4) {
|
|
43
|
+
const s = parsed.trim();
|
|
44
|
+
if (s === '') {
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
parsed = JSON.parse(s);
|
|
48
|
+
guard += 1;
|
|
49
|
+
}
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
28
52
|
/**
|
|
29
53
|
* Aceita na query (e no payload Kafka já desserializado):
|
|
30
54
|
* - array de strings: cada string é JSON de um objeto `{ key, op, value }`
|
|
@@ -50,7 +74,7 @@ let ConversationContactFiltersQueryConstraint = class ConversationContactFilters
|
|
|
50
74
|
}
|
|
51
75
|
let parsed;
|
|
52
76
|
try {
|
|
53
|
-
parsed =
|
|
77
|
+
parsed = jsonParseLoose(t);
|
|
54
78
|
}
|
|
55
79
|
catch {
|
|
56
80
|
conversationContactFiltersQueryError.set(parent, 'filters: string não é JSON válido');
|
|
@@ -83,7 +107,7 @@ let ConversationContactFiltersQueryConstraint = class ConversationContactFilters
|
|
|
83
107
|
}
|
|
84
108
|
const out = [];
|
|
85
109
|
for (let i = 0; i < rawItems.length; i++) {
|
|
86
|
-
const el = rawItems[i];
|
|
110
|
+
const el = unwrapSingleElementArrays(rawItems[i]);
|
|
87
111
|
let plain;
|
|
88
112
|
if (typeof el === 'string') {
|
|
89
113
|
const s = el.trim();
|
|
@@ -92,18 +116,19 @@ let ConversationContactFiltersQueryConstraint = class ConversationContactFilters
|
|
|
92
116
|
return false;
|
|
93
117
|
}
|
|
94
118
|
try {
|
|
95
|
-
plain =
|
|
119
|
+
plain = jsonParseLoose(s);
|
|
96
120
|
}
|
|
97
121
|
catch {
|
|
98
122
|
conversationContactFiltersQueryError.set(parent, `filters[${i}]: JSON inválido`);
|
|
99
123
|
return false;
|
|
100
124
|
}
|
|
125
|
+
plain = unwrapSingleElementArrays(plain);
|
|
101
126
|
}
|
|
102
127
|
else if (el !== null && typeof el === 'object' && !Array.isArray(el)) {
|
|
103
128
|
plain = el;
|
|
104
129
|
}
|
|
105
130
|
else {
|
|
106
|
-
conversationContactFiltersQueryError.set(parent, `filters[${i}] deve ser string JSON ou
|
|
131
|
+
conversationContactFiltersQueryError.set(parent, `filters[${i}] deve ser string JSON, objeto, ou array de um único filtro (formato recebido inválido)`);
|
|
107
132
|
return false;
|
|
108
133
|
}
|
|
109
134
|
if (plain === null ||
|
package/package.json
CHANGED
|
@@ -25,6 +25,32 @@ function flattenErrors(errors: ValidationError[], prefix = ''): string[] {
|
|
|
25
25
|
return out;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/** Alguns gateways/parsers envolvem o item em um ou mais arrays de um elemento. */
|
|
29
|
+
function unwrapSingleElementArrays(el: unknown, maxDepth = 8): unknown {
|
|
30
|
+
let cur = el;
|
|
31
|
+
let d = 0;
|
|
32
|
+
while (Array.isArray(cur) && cur.length === 1 && d < maxDepth) {
|
|
33
|
+
cur = cur[0];
|
|
34
|
+
d += 1;
|
|
35
|
+
}
|
|
36
|
+
return cur;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** JSON string que, ao dar parse, ainda é string (double-encoded), até virar objeto/array. */
|
|
40
|
+
function jsonParseLoose(text: string): unknown {
|
|
41
|
+
let parsed: unknown = JSON.parse(text);
|
|
42
|
+
let guard = 0;
|
|
43
|
+
while (typeof parsed === 'string' && guard < 4) {
|
|
44
|
+
const s = parsed.trim();
|
|
45
|
+
if (s === '') {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
parsed = JSON.parse(s);
|
|
49
|
+
guard += 1;
|
|
50
|
+
}
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
|
|
28
54
|
/**
|
|
29
55
|
* Aceita na query (e no payload Kafka já desserializado):
|
|
30
56
|
* - array de strings: cada string é JSON de um objeto `{ key, op, value }`
|
|
@@ -55,7 +81,7 @@ export class ConversationContactFiltersQueryConstraint
|
|
|
55
81
|
}
|
|
56
82
|
let parsed: unknown;
|
|
57
83
|
try {
|
|
58
|
-
parsed =
|
|
84
|
+
parsed = jsonParseLoose(t);
|
|
59
85
|
} catch {
|
|
60
86
|
conversationContactFiltersQueryError.set(
|
|
61
87
|
parent,
|
|
@@ -96,7 +122,7 @@ export class ConversationContactFiltersQueryConstraint
|
|
|
96
122
|
|
|
97
123
|
const out: ConversationContactListFilterDto[] = [];
|
|
98
124
|
for (let i = 0; i < rawItems.length; i++) {
|
|
99
|
-
const el = rawItems[i];
|
|
125
|
+
const el = unwrapSingleElementArrays(rawItems[i]);
|
|
100
126
|
let plain: unknown;
|
|
101
127
|
if (typeof el === 'string') {
|
|
102
128
|
const s = el.trim();
|
|
@@ -108,7 +134,7 @@ export class ConversationContactFiltersQueryConstraint
|
|
|
108
134
|
return false;
|
|
109
135
|
}
|
|
110
136
|
try {
|
|
111
|
-
plain =
|
|
137
|
+
plain = jsonParseLoose(s);
|
|
112
138
|
} catch {
|
|
113
139
|
conversationContactFiltersQueryError.set(
|
|
114
140
|
parent,
|
|
@@ -116,12 +142,13 @@ export class ConversationContactFiltersQueryConstraint
|
|
|
116
142
|
);
|
|
117
143
|
return false;
|
|
118
144
|
}
|
|
145
|
+
plain = unwrapSingleElementArrays(plain);
|
|
119
146
|
} else if (el !== null && typeof el === 'object' && !Array.isArray(el)) {
|
|
120
147
|
plain = el;
|
|
121
148
|
} else {
|
|
122
149
|
conversationContactFiltersQueryError.set(
|
|
123
150
|
parent,
|
|
124
|
-
`filters[${i}] deve ser string JSON ou
|
|
151
|
+
`filters[${i}] deve ser string JSON, objeto, ou array de um único filtro (formato recebido inválido)`,
|
|
125
152
|
);
|
|
126
153
|
return false;
|
|
127
154
|
}
|