@dev.smartpricing/message-composer-utils 3.1.2
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/dist/types/api/aiIntegration.js +7 -0
- package/dist/types/api/aiIntegration.js.map +1 -0
- package/dist/types/api/apiMessages.js +2 -0
- package/dist/types/api/apiMessages.js.map +1 -0
- package/dist/types/api/index.js +3 -0
- package/dist/types/api/index.js.map +1 -0
- package/dist/types/app.js +23 -0
- package/dist/types/app.js.map +1 -0
- package/dist/types/brand.js +31 -0
- package/dist/types/brand.js.map +1 -0
- package/dist/types/dynamic-values.js +5 -0
- package/dist/types/dynamic-values.js.map +1 -0
- package/dist/types/emailblocks.v1.defaults.js +83 -0
- package/dist/types/emailblocks.v1.defaults.js.map +1 -0
- package/dist/types/emailblocks.v1.js +339 -0
- package/dist/types/emailblocks.v1.js.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/kafka-events.js +2 -0
- package/dist/types/kafka-events.js.map +1 -0
- package/dist/types/language.js +2 -0
- package/dist/types/language.js.map +1 -0
- package/dist/types/media.js +6 -0
- package/dist/types/media.js.map +1 -0
- package/dist/types/message.js +41 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/meta-template.js +2 -0
- package/dist/types/meta-template.js.map +1 -0
- package/dist/types/meta-webhook.js +2 -0
- package/dist/types/meta-webhook.js.map +1 -0
- package/dist/types/submission-job.js +2 -0
- package/dist/types/submission-job.js.map +1 -0
- package/dist/types/tag.js +2 -0
- package/dist/types/tag.js.map +1 -0
- package/dist/types/utils.js +2 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/types/whatsappblocks.v1.js +24 -0
- package/dist/types/whatsappblocks.v1.js.map +1 -0
- package/dist/utils/array.js +26 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/async.js +22 -0
- package/dist/utils/async.js.map +1 -0
- package/dist/utils/date.js +37 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/index.js +34 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/intl.js +37 -0
- package/dist/utils/intl.js.map +1 -0
- package/dist/utils/meta-status.js +21 -0
- package/dist/utils/meta-status.js.map +1 -0
- package/dist/utils/number.js +24 -0
- package/dist/utils/number.js.map +1 -0
- package/dist/utils/object.js +87 -0
- package/dist/utils/object.js.map +1 -0
- package/dist/utils/string.js +22 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/templates/brand-cascade.js +116 -0
- package/dist/utils/templates/brand-cascade.js.map +1 -0
- package/dist/utils/templates/email-compiler.js +126 -0
- package/dist/utils/templates/email-compiler.js.map +1 -0
- package/dist/utils/templates/email-mjml.js +444 -0
- package/dist/utils/templates/email-mjml.js.map +1 -0
- package/dist/utils/templates/email.js +580 -0
- package/dist/utils/templates/email.js.map +1 -0
- package/dist/utils/templates/html-sanitizer.js +95 -0
- package/dist/utils/templates/html-sanitizer.js.map +1 -0
- package/dist/utils/templates/messages.js +33 -0
- package/dist/utils/templates/messages.js.map +1 -0
- package/dist/utils/templates/meta.js +246 -0
- package/dist/utils/templates/meta.js.map +1 -0
- package/dist/utils/templates/tiptap.js +167 -0
- package/dist/utils/templates/tiptap.js.map +1 -0
- package/dist/utils/templates/whatsapp-compiler.js +168 -0
- package/dist/utils/templates/whatsapp-compiler.js.map +1 -0
- package/dist/utils/templates/whatsapp.js +329 -0
- package/dist/utils/templates/whatsapp.js.map +1 -0
- package/dist/utils/validations.js +39 -0
- package/dist/utils/validations.js.map +1 -0
- package/package.json +43 -0
- package/src/types/api/aiIntegration.ts +59 -0
- package/src/types/api/apiMessages.ts +22 -0
- package/src/types/api/index.ts +2 -0
- package/src/types/app.ts +76 -0
- package/src/types/brand.ts +80 -0
- package/src/types/dynamic-values.ts +47 -0
- package/src/types/emailblocks.v1.defaults.ts +123 -0
- package/src/types/emailblocks.v1.ts +655 -0
- package/src/types/index.ts +15 -0
- package/src/types/kafka-events.ts +46 -0
- package/src/types/language.ts +9 -0
- package/src/types/media.ts +26 -0
- package/src/types/message.ts +635 -0
- package/src/types/meta-template.ts +50 -0
- package/src/types/meta-webhook.ts +32 -0
- package/src/types/submission-job.ts +30 -0
- package/src/types/tag.ts +8 -0
- package/src/types/utils.ts +14 -0
- package/src/types/whatsappblocks.v1.ts +102 -0
- package/src/utils/array.ts +33 -0
- package/src/utils/async.ts +30 -0
- package/src/utils/date.ts +39 -0
- package/src/utils/index.ts +44 -0
- package/src/utils/intl.ts +51 -0
- package/src/utils/meta-status.ts +24 -0
- package/src/utils/number.ts +36 -0
- package/src/utils/object.ts +101 -0
- package/src/utils/string.ts +24 -0
- package/src/utils/templates/brand-cascade.ts +156 -0
- package/src/utils/templates/email-compiler.ts +155 -0
- package/src/utils/templates/email-mjml.ts +602 -0
- package/src/utils/templates/email.ts +713 -0
- package/src/utils/templates/html-sanitizer.ts +121 -0
- package/src/utils/templates/messages.ts +44 -0
- package/src/utils/templates/meta.ts +336 -0
- package/src/utils/templates/tiptap.ts +247 -0
- package/src/utils/templates/whatsapp-compiler.ts +212 -0
- package/src/utils/templates/whatsapp.ts +408 -0
- package/src/utils/validations.ts +49 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission-job.js","sourceRoot":"","sources":["../../src/types/submission-job.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/types/tag.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/types/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const WA_HEADER_TYPES_V1 = [
|
|
2
|
+
"none",
|
|
3
|
+
"text",
|
|
4
|
+
"video",
|
|
5
|
+
"image",
|
|
6
|
+
"document",
|
|
7
|
+
];
|
|
8
|
+
export const WA_BUTTON_TYPES_V1 = [
|
|
9
|
+
"unsubscribe",
|
|
10
|
+
"phone",
|
|
11
|
+
"link",
|
|
12
|
+
"quick_reply",
|
|
13
|
+
];
|
|
14
|
+
// Validation constants
|
|
15
|
+
export const WA_HEADER_TEXT_MAX_LENGTH = 60;
|
|
16
|
+
export const WA_BODY_MAX_LENGTH = 1024;
|
|
17
|
+
export const WA_FOOTER_MAX_LENGTH = 60;
|
|
18
|
+
export const WA_BUTTON_TEXT_MAX_LENGTH = 20;
|
|
19
|
+
export const WA_BUTTON_MAX_LINK_BUTTONS = 1;
|
|
20
|
+
export const WA_BUTTON_MAX_PHONE_BUTTONS = 1;
|
|
21
|
+
export const WA_BUTTON_MAX_UNSUBSCRIBE_BUTTONS = 1;
|
|
22
|
+
export const WA_BUTTON_MAX_QUICK_REPLY_BUTTONS = 3;
|
|
23
|
+
export const WA_BUTTON_MAX_BUTTONS = 10;
|
|
24
|
+
//# sourceMappingURL=whatsappblocks.v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsappblocks.v1.js","sourceRoot":"","sources":["../../src/types/whatsappblocks.v1.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;CACF,CAAC;AAuCX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa;IACb,OAAO;IACP,MAAM;IACN,aAAa;CACL,CAAC;AAuCX,uBAAuB;AACvB,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Array utility functions
|
|
2
|
+
export const unique = (array) => {
|
|
3
|
+
return [...new Set(array)];
|
|
4
|
+
};
|
|
5
|
+
export const uniqueBy = (array, keyFn) => {
|
|
6
|
+
const seen = new Set();
|
|
7
|
+
return array.filter((item) => {
|
|
8
|
+
const key = keyFn(item);
|
|
9
|
+
if (seen.has(key)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
seen.add(key);
|
|
13
|
+
return true;
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
export const groupBy = (array, keyFn) => {
|
|
17
|
+
return array.reduce((groups, item) => {
|
|
18
|
+
const key = keyFn(item);
|
|
19
|
+
if (!groups[key]) {
|
|
20
|
+
groups[key] = [];
|
|
21
|
+
}
|
|
22
|
+
groups[key].push(item);
|
|
23
|
+
return groups;
|
|
24
|
+
}, {});
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,KAAU,EAAO,EAAE;IAC3C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAO,KAAU,EAAE,KAAqB,EAAO,EAAE;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAK,CAAC;IAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,KAAU,EACV,KAAqB,EACL,EAAE;IAClB,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAAoB,CACrB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
export const sleep = (ms) => {
|
|
3
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
4
|
+
};
|
|
5
|
+
export const debounce = (func, delay) => {
|
|
6
|
+
let timeoutId;
|
|
7
|
+
return (...args) => {
|
|
8
|
+
clearTimeout(timeoutId);
|
|
9
|
+
timeoutId = setTimeout(() => func(...args), delay);
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export const throttle = (func, limit) => {
|
|
13
|
+
let inThrottle;
|
|
14
|
+
return (...args) => {
|
|
15
|
+
if (!inThrottle) {
|
|
16
|
+
func(...args);
|
|
17
|
+
inThrottle = true;
|
|
18
|
+
setTimeout(() => (inThrottle = false), limit);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/utils/async.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAAO,EACP,KAAa,EACuB,EAAE;IACtC,IAAI,SAAwC,CAAC;IAC7C,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAAO,EACP,KAAa,EACuB,EAAE;IACtC,IAAI,UAAmB,CAAC;IACxB,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,UAAU,GAAG,IAAI,CAAC;YAClB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function parseDate(date) {
|
|
2
|
+
if (typeof date === "number") {
|
|
3
|
+
return new Date(date);
|
|
4
|
+
}
|
|
5
|
+
if (typeof date === "string") {
|
|
6
|
+
return new Date(date);
|
|
7
|
+
}
|
|
8
|
+
return date;
|
|
9
|
+
}
|
|
10
|
+
// Date utility functions
|
|
11
|
+
export const formatDate = (date) => {
|
|
12
|
+
date = parseDate(date);
|
|
13
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
14
|
+
year: "numeric",
|
|
15
|
+
month: "2-digit",
|
|
16
|
+
day: "2-digit",
|
|
17
|
+
}).format(date);
|
|
18
|
+
};
|
|
19
|
+
export const formatDateTime = (date) => {
|
|
20
|
+
date = parseDate(date);
|
|
21
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
22
|
+
year: "numeric",
|
|
23
|
+
month: "2-digit",
|
|
24
|
+
day: "2-digit",
|
|
25
|
+
hour: "2-digit",
|
|
26
|
+
minute: "2-digit",
|
|
27
|
+
}).format(date);
|
|
28
|
+
};
|
|
29
|
+
export const formatTime = (date) => {
|
|
30
|
+
date = parseDate(date);
|
|
31
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
32
|
+
hour: "2-digit",
|
|
33
|
+
minute: "2-digit",
|
|
34
|
+
second: "2-digit",
|
|
35
|
+
}).format(date);
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAAA,SAAS,SAAS,CAAC,IAA4B;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yBAAyB;AACzB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAA4B,EAAU,EAAE;IACjE,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;KACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAmB,EAAU,EAAE;IAC5D,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAmB,EAAU,EAAE;IACxD,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Export all utilities by category
|
|
2
|
+
export * from "./async.js";
|
|
3
|
+
export * from "./array.js";
|
|
4
|
+
export * from "./date.js";
|
|
5
|
+
export * from "./number.js";
|
|
6
|
+
export * from "./object.js";
|
|
7
|
+
export * from "./string.js";
|
|
8
|
+
export * from "./intl.js";
|
|
9
|
+
export * from "./templates/messages.js";
|
|
10
|
+
export * from "./templates/whatsapp.js";
|
|
11
|
+
export * from "./templates/email.js";
|
|
12
|
+
export * from "./templates/meta.js";
|
|
13
|
+
export * from "./templates/tiptap.js";
|
|
14
|
+
export * from "./templates/whatsapp-compiler.js";
|
|
15
|
+
export * from "./templates/email-compiler.js";
|
|
16
|
+
export * from "./templates/email-mjml.js";
|
|
17
|
+
export * from "./templates/brand-cascade.js";
|
|
18
|
+
export * from "./templates/html-sanitizer.js";
|
|
19
|
+
export * from "./validations.js";
|
|
20
|
+
export * from "./meta-status.js";
|
|
21
|
+
// Also export as namespaced modules for cleaner imports
|
|
22
|
+
export * as AsyncUtils from "./async.js";
|
|
23
|
+
export * as ArrayUtils from "./array.js";
|
|
24
|
+
export * as DateUtils from "./date.js";
|
|
25
|
+
export * as NumberUtils from "./number.js";
|
|
26
|
+
export * as ObjectUtils from "./object.js";
|
|
27
|
+
export * as StringUtils from "./string.js";
|
|
28
|
+
export * as WhatsappUtils from "./templates/whatsapp.js";
|
|
29
|
+
export * as ValidationsUtils from "./validations.js";
|
|
30
|
+
export * as IntlUtils from "./intl.js";
|
|
31
|
+
// Re-export specific functions with aliases for clarity
|
|
32
|
+
export { normalizeParameters, compileWhatsappTemplate, extractRequiredParameters, validateParameters as validateWhatsappParameters, } from "./templates/whatsapp-compiler.js";
|
|
33
|
+
export { extractEmailParameters, validateEmailParameters, } from "./templates/email-compiler.js";
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,wDAAwD;AACxD,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,gBAAgB,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AAEvC,wDAAwD;AACxD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,IAAI,0BAA0B,GACjD,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function getIntlDisplayName(settings) {
|
|
2
|
+
if (settings.of.trim() === "") {
|
|
3
|
+
return "-";
|
|
4
|
+
}
|
|
5
|
+
try {
|
|
6
|
+
const x = new Intl.DisplayNames([settings.locale], {
|
|
7
|
+
type: settings.type,
|
|
8
|
+
}).of(settings.of.toUpperCase());
|
|
9
|
+
return x;
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
console.log(e);
|
|
13
|
+
return settings.of;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function getLanguageDisplayName(language, locale = "en") {
|
|
17
|
+
return getIntlDisplayName({
|
|
18
|
+
locale: locale,
|
|
19
|
+
type: "language",
|
|
20
|
+
of: language ?? "",
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function getCountryDisplayName(country, locale = "en") {
|
|
24
|
+
return getIntlDisplayName({
|
|
25
|
+
locale: locale,
|
|
26
|
+
type: "region",
|
|
27
|
+
of: country ?? "",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export function getNationalityDisplayName(nationality, locale = "en") {
|
|
31
|
+
return getIntlDisplayName({
|
|
32
|
+
locale: locale,
|
|
33
|
+
type: "region",
|
|
34
|
+
of: nationality ?? "",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=intl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intl.js","sourceRoot":"","sources":["../../src/utils/intl.ts"],"names":[],"mappings":"AAAA,SAAS,kBAAkB,CAAC,QAI3B;IACC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACjD,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAuB,EACvB,SAAiB,IAAI;IAErB,OAAO,kBAAkB,CAAC;QACxB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,QAAQ,IAAI,EAAE;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAsB,EACtB,SAAiB,IAAI;IAErB,OAAO,kBAAkB,CAAC;QACxB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,OAAO,IAAI,EAAE;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,WAA0B,EAC1B,SAAiB,IAAI;IAErB,OAAO,kBAAkB,CAAC;QACxB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,WAAW,IAAI,EAAE;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts Meta API status to internal status format
|
|
3
|
+
* @param metaStatus The status from Meta API
|
|
4
|
+
* @returns The internal status representation
|
|
5
|
+
*/
|
|
6
|
+
export function mapMetaStatusToInternal(metaStatus) {
|
|
7
|
+
if (!metaStatus) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
switch (metaStatus) {
|
|
11
|
+
case "PENDING":
|
|
12
|
+
return "pending";
|
|
13
|
+
case "APPROVED":
|
|
14
|
+
return "approved";
|
|
15
|
+
case "REJECTED":
|
|
16
|
+
return "rejected";
|
|
17
|
+
default:
|
|
18
|
+
return "pending";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=meta-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-status.js","sourceRoot":"","sources":["../../src/utils/meta-status.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA+B;IAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Number utility functions
|
|
2
|
+
export const randomBetween = (min, max) => {
|
|
3
|
+
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
4
|
+
};
|
|
5
|
+
export const clamp = (value, min, max) => {
|
|
6
|
+
return Math.min(Math.max(value, min), max);
|
|
7
|
+
};
|
|
8
|
+
export const formatNumber = (value, options = {}) => {
|
|
9
|
+
return new Intl.NumberFormat("en-US", options).format(value);
|
|
10
|
+
};
|
|
11
|
+
export const formatCurrency = (value, currency = "USD") => {
|
|
12
|
+
return new Intl.NumberFormat("en-US", {
|
|
13
|
+
style: "currency",
|
|
14
|
+
currency,
|
|
15
|
+
}).format(value);
|
|
16
|
+
};
|
|
17
|
+
export const formatPercentage = (value, decimals = 2) => {
|
|
18
|
+
return new Intl.NumberFormat("en-US", {
|
|
19
|
+
style: "percent",
|
|
20
|
+
minimumFractionDigits: decimals,
|
|
21
|
+
maximumFractionDigits: decimals,
|
|
22
|
+
}).format(value);
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/utils/number.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE;IAChE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE;IACvE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAa,EACb,UAAoC,EAAE,EAC9B,EAAE;IACV,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAa,EACb,WAAmB,KAAK,EAChB,EAAE;IACV,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QACpC,KAAK,EAAE,UAAU;QACjB,QAAQ;KACT,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,WAAmB,CAAC,EACZ,EAAE;IACV,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QACpC,KAAK,EAAE,SAAS;QAChB,qBAAqB,EAAE,QAAQ;QAC/B,qBAAqB,EAAE,QAAQ;KAChC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object utility functions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Checks if value is a function
|
|
6
|
+
*/
|
|
7
|
+
export function isFunction(value) {
|
|
8
|
+
return typeof value === "function";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Gets the value at path of object. Similar to lodash get.
|
|
12
|
+
*/
|
|
13
|
+
export function get(object, path) {
|
|
14
|
+
if (!object || !path) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const pathArray = Array.isArray(path) ? path : path.split(".");
|
|
18
|
+
let result = object;
|
|
19
|
+
for (let i = 0; i < pathArray.length; i++) {
|
|
20
|
+
if (result == null) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
result = result[pathArray[i]];
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Checks if a value exists and is not null or undefined
|
|
29
|
+
*/
|
|
30
|
+
export function isDefined(value) {
|
|
31
|
+
return value !== null && value !== undefined;
|
|
32
|
+
}
|
|
33
|
+
export function isEmpty(value) {
|
|
34
|
+
if (value === null || value === undefined)
|
|
35
|
+
return true;
|
|
36
|
+
if (typeof value === "string")
|
|
37
|
+
return value.trim().length === 0;
|
|
38
|
+
if (Array.isArray(value))
|
|
39
|
+
return value.length === 0;
|
|
40
|
+
if (typeof value === "object")
|
|
41
|
+
return Object.keys(value).length === 0;
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
export function deepClone(value) {
|
|
45
|
+
try {
|
|
46
|
+
return structuredClone(value);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Fallback to JSON serialization for objects that can't be structuredClone'd
|
|
50
|
+
// (e.g., Vue reactive proxies, objects with symbols, etc.)
|
|
51
|
+
return JSON.parse(JSON.stringify(value));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Deep equality comparison between two values
|
|
56
|
+
*/
|
|
57
|
+
export function deepEqual(a, b) {
|
|
58
|
+
// Handle identical references and primitive equality
|
|
59
|
+
if (a === b)
|
|
60
|
+
return true;
|
|
61
|
+
// Handle null/undefined
|
|
62
|
+
if (a == null || b == null)
|
|
63
|
+
return a === b;
|
|
64
|
+
// Handle dates
|
|
65
|
+
if (a instanceof Date && b instanceof Date) {
|
|
66
|
+
return a.getTime() === b.getTime();
|
|
67
|
+
}
|
|
68
|
+
// Handle arrays
|
|
69
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
70
|
+
if (a.length !== b.length)
|
|
71
|
+
return false;
|
|
72
|
+
return a.every((item, index) => deepEqual(item, b[index]));
|
|
73
|
+
}
|
|
74
|
+
// Handle objects
|
|
75
|
+
if (typeof a === "object" && typeof b === "object") {
|
|
76
|
+
const keysA = Object.keys(a);
|
|
77
|
+
const keysB = Object.keys(b);
|
|
78
|
+
if (keysA.length !== keysB.length)
|
|
79
|
+
return false;
|
|
80
|
+
return keysA.every((key) => Object.prototype.hasOwnProperty.call(b, key) &&
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
+
deepEqual(a[key], b[key]));
|
|
83
|
+
}
|
|
84
|
+
// Handle other types (strings, numbers, etc)
|
|
85
|
+
return a === b;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// String utility functions
|
|
2
|
+
export const capitalize = (str) => {
|
|
3
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
4
|
+
};
|
|
5
|
+
export const truncate = (str, length) => {
|
|
6
|
+
if (str.length <= length)
|
|
7
|
+
return str;
|
|
8
|
+
return str.substring(0, length) + "...";
|
|
9
|
+
};
|
|
10
|
+
export const snakeCase = (str) => {
|
|
11
|
+
return str
|
|
12
|
+
.replace(/([a-z])([A-Z])/g, "$1_$2")
|
|
13
|
+
.replace(/\s+/g, "_")
|
|
14
|
+
.toLowerCase();
|
|
15
|
+
};
|
|
16
|
+
export const removeWhitespace = (str) => {
|
|
17
|
+
return str.replaceAll(" ", "");
|
|
18
|
+
};
|
|
19
|
+
export const isEmptyOrWhitespace = (str) => {
|
|
20
|
+
return !str || !str.trim();
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IAChD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,MAAc,EAAU,EAAE;IAC9D,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;IAC/C,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,WAAW,EAAE,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAU,EAAE;IACtD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAW,EAAE;IAC1D,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { DEFAULT_EMAIL_GLOBAL_SETTINGS } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves EmailGlobalSettings by cascading:
|
|
4
|
+
* generalSettings → brand → hardcoded defaults
|
|
5
|
+
*/
|
|
6
|
+
export function resolveEmailSettings(settings, brand) {
|
|
7
|
+
const brandSettings = brand?.default_email_settings ?? {};
|
|
8
|
+
const brandButtons = brand?.default_button_settings ?? {};
|
|
9
|
+
return {
|
|
10
|
+
backgroundColor: settings.backgroundColor ??
|
|
11
|
+
brandSettings.backgroundColor ??
|
|
12
|
+
DEFAULT_EMAIL_GLOBAL_SETTINGS.backgroundColor,
|
|
13
|
+
contentBackgroundColor: settings.contentBackgroundColor ??
|
|
14
|
+
brandSettings.contentBackgroundColor ??
|
|
15
|
+
DEFAULT_EMAIL_GLOBAL_SETTINGS.contentBackgroundColor,
|
|
16
|
+
contentWidth: settings.contentWidth ?? DEFAULT_EMAIL_GLOBAL_SETTINGS.contentWidth,
|
|
17
|
+
fontFamily: settings.fontFamily ??
|
|
18
|
+
brandSettings.fontFamily ??
|
|
19
|
+
DEFAULT_EMAIL_GLOBAL_SETTINGS.fontFamily,
|
|
20
|
+
textColor: settings.textColor ??
|
|
21
|
+
brandSettings.textColor ??
|
|
22
|
+
DEFAULT_EMAIL_GLOBAL_SETTINGS.textColor,
|
|
23
|
+
verticalSpacing: settings.verticalSpacing ?? DEFAULT_EMAIL_GLOBAL_SETTINGS.verticalSpacing,
|
|
24
|
+
horizontalSpacing: settings.horizontalSpacing ??
|
|
25
|
+
DEFAULT_EMAIL_GLOBAL_SETTINGS.horizontalSpacing,
|
|
26
|
+
button: {
|
|
27
|
+
backgroundColor: brandButtons.backgroundColor ?? "#000000",
|
|
28
|
+
textColor: brandButtons.textColor ?? "#FFFFFF",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolves blocks with brand cascade data.
|
|
34
|
+
* - Header: fills empty src with brand logo
|
|
35
|
+
* - Socials: fills missing URLs from brand socials
|
|
36
|
+
* - Buttons: fills undefined colors from brand button defaults
|
|
37
|
+
*/
|
|
38
|
+
function resolveBlocks(blocks, brand) {
|
|
39
|
+
if (!brand)
|
|
40
|
+
return blocks;
|
|
41
|
+
return blocks.map((block) => {
|
|
42
|
+
switch (block.type) {
|
|
43
|
+
case "header": {
|
|
44
|
+
if (!block.settings.src && brand.logo_url) {
|
|
45
|
+
return {
|
|
46
|
+
...block,
|
|
47
|
+
settings: { ...block.settings, src: brand.logo_url },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return block;
|
|
51
|
+
}
|
|
52
|
+
case "socials": {
|
|
53
|
+
if (!brand.default_socials)
|
|
54
|
+
return block;
|
|
55
|
+
const resolvedSocials = { ...block.settings.socials };
|
|
56
|
+
for (const platform of Object.keys(resolvedSocials)) {
|
|
57
|
+
const blockSocial = resolvedSocials[platform];
|
|
58
|
+
if (!blockSocial?.enabled)
|
|
59
|
+
continue;
|
|
60
|
+
// Enabled + no block URL → cascade from brand
|
|
61
|
+
if (!blockSocial.url) {
|
|
62
|
+
const brandUrl = brand.default_socials[platform];
|
|
63
|
+
if (brandUrl) {
|
|
64
|
+
resolvedSocials[platform] = { ...blockSocial, url: brandUrl };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
...block,
|
|
70
|
+
settings: { ...block.settings, socials: resolvedSocials },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
case "button": {
|
|
74
|
+
const brandButton = brand.default_button_settings;
|
|
75
|
+
return {
|
|
76
|
+
...block,
|
|
77
|
+
settings: {
|
|
78
|
+
...block.settings,
|
|
79
|
+
textColor: block.settings.textColor ?? brandButton.textColor,
|
|
80
|
+
backgroundColor: block.settings.backgroundColor ?? brandButton.backgroundColor,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
case "grid": {
|
|
85
|
+
// Recurse into grid column blocks
|
|
86
|
+
return {
|
|
87
|
+
...block,
|
|
88
|
+
settings: {
|
|
89
|
+
...block.settings,
|
|
90
|
+
columnData: block.settings.columnData.map((col) => ({
|
|
91
|
+
...col,
|
|
92
|
+
blocks: resolveBlocks(col.blocks, brand),
|
|
93
|
+
})),
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
return block;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Resolves the full email message body with brand cascade.
|
|
104
|
+
* Returns a new body where all undefined settings and block values
|
|
105
|
+
* are filled from the brand, then from hardcoded defaults.
|
|
106
|
+
*
|
|
107
|
+
* The returned body can be passed directly to translateEmailToMjml.
|
|
108
|
+
*/
|
|
109
|
+
export function resolveEmailBodyWithBrand(body, brand) {
|
|
110
|
+
return {
|
|
111
|
+
subject: body.subject,
|
|
112
|
+
blocks: resolveBlocks(body.blocks, brand),
|
|
113
|
+
settings: resolveEmailSettings(body.settings, brand),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=brand-cascade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-cascade.js","sourceRoot":"","sources":["../../../src/utils/templates/brand-cascade.ts"],"names":[],"mappings":"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"}
|