@sinequa/assistant 3.8.0 → 3.9.0

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 (151) hide show
  1. package/chat/charts/chart/chart.component.d.ts +13 -13
  2. package/chat/chat-message/chat-message.component.d.ts +85 -81
  3. package/chat/chat-message/i18n/en.json +11 -0
  4. package/chat/chat-message/i18n/fr.json +11 -0
  5. package/chat/chat-reference/chat-reference.component.d.ts +14 -14
  6. package/chat/chat-reference/i18n/en.json +4 -0
  7. package/chat/chat-reference/i18n/fr.json +4 -0
  8. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
  9. package/chat/chat-settings-v3/i18n/en.json +14 -0
  10. package/chat/chat-settings-v3/i18n/fr.json +14 -0
  11. package/chat/chat.component.d.ts +388 -1405
  12. package/chat/chat.service.d.ts +247 -228
  13. package/chat/debug-message/debug-message.component.d.ts +17 -17
  14. package/chat/debug-message/i18n/en.json +3 -0
  15. package/chat/debug-message/i18n/fr.json +3 -0
  16. package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
  17. package/chat/dialogs/i18n/en.json +19 -0
  18. package/chat/dialogs/i18n/fr.json +19 -0
  19. package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
  20. package/chat/dialogs/updates.component.d.ts +15 -0
  21. package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
  22. package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
  23. package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
  24. package/chat/documents-upload/documents-upload.model.d.ts +66 -66
  25. package/chat/documents-upload/documents-upload.service.d.ts +170 -174
  26. package/chat/documents-upload/i18n/en.json +24 -0
  27. package/chat/documents-upload/i18n/fr.json +24 -0
  28. package/chat/format-icon/format-icon.component.d.ts +10 -10
  29. package/chat/format-icon/icons.d.ts +5 -5
  30. package/chat/i18n/en.json +42 -0
  31. package/chat/i18n/fr.json +42 -0
  32. package/chat/index.d.ts +5 -5
  33. package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
  34. package/chat/instance-manager.service.d.ts +28 -28
  35. package/chat/pipes/message-content.pipe.d.ts +16 -0
  36. package/chat/prompt.component.d.ts +25 -21
  37. package/chat/public-api.d.ts +17 -17
  38. package/chat/references/i18n/en.json +6 -0
  39. package/chat/references/i18n/fr.json +6 -0
  40. package/chat/references/inline-image-reference.d.ts +21 -0
  41. package/chat/references/inline-page-reference.d.ts +21 -0
  42. package/chat/rest-chat.service.d.ts +31 -33
  43. package/chat/saved-chats/i18n/en.json +4 -0
  44. package/chat/saved-chats/i18n/fr.json +4 -0
  45. package/chat/saved-chats/saved-chats.component.d.ts +30 -36
  46. package/chat/services/app.service.d.ts +8 -0
  47. package/chat/services/dialog.service.d.ts +12 -0
  48. package/chat/services/notification.service.d.ts +10 -0
  49. package/chat/services/principal.service.d.ts +7 -0
  50. package/chat/services/search.service.d.ts +7 -0
  51. package/chat/services/signalR.web.service.d.ts +45 -0
  52. package/chat/services/ui.service.d.ts +13 -0
  53. package/chat/services/user-settings.service.d.ts +7 -0
  54. package/chat/token-progress-bar/i18n/en.json +4 -0
  55. package/chat/token-progress-bar/i18n/fr.json +4 -0
  56. package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
  57. package/chat/tooltip/tooltip.component.d.ts +12 -0
  58. package/chat/tooltip/tooltip.directive.d.ts +81 -0
  59. package/chat/types/message-content.types.d.ts +54 -0
  60. package/chat/types/message-reference.types.d.ts +11 -0
  61. package/chat/types.d.ts +913 -873
  62. package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
  63. package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
  64. package/chat/utils/assistant-json.d.ts +2 -0
  65. package/chat/websocket-chat.service.d.ts +102 -103
  66. package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
  67. package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
  68. package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
  69. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
  70. package/esm2022/chat/chat.component.mjs +1090 -0
  71. package/esm2022/chat/chat.service.mjs +417 -0
  72. package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
  73. package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
  74. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
  75. package/esm2022/chat/dialogs/updates.component.mjs +61 -0
  76. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
  77. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
  78. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
  79. package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
  80. package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
  81. package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
  82. package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
  83. package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
  84. package/esm2022/chat/instance-manager.service.mjs +46 -0
  85. package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
  86. package/esm2022/chat/prompt.component.mjs +88 -0
  87. package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
  88. package/esm2022/chat/references/inline-image-reference.mjs +110 -0
  89. package/esm2022/chat/references/inline-page-reference.mjs +110 -0
  90. package/esm2022/chat/rest-chat.service.mjs +296 -0
  91. package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
  92. package/esm2022/chat/services/app.service.mjs +19 -0
  93. package/esm2022/chat/services/dialog.service.mjs +40 -0
  94. package/esm2022/chat/services/notification.service.mjs +25 -0
  95. package/esm2022/chat/services/principal.service.mjs +16 -0
  96. package/esm2022/chat/services/search.service.mjs +13 -0
  97. package/esm2022/chat/services/signalR.web.service.mjs +79 -0
  98. package/esm2022/chat/services/ui.service.mjs +61 -0
  99. package/esm2022/chat/services/user-settings.service.mjs +22 -0
  100. package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
  101. package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
  102. package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
  103. package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
  104. package/esm2022/chat/types/message-content.types.mjs +2 -0
  105. package/esm2022/chat/types/message-reference.types.mjs +2 -0
  106. package/esm2022/chat/types.mjs +130 -0
  107. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
  108. package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
  109. package/esm2022/chat/utils/assistant-json.mjs +12 -0
  110. package/esm2022/chat/websocket-chat.service.mjs +654 -0
  111. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  112. package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
  113. package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
  114. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
  115. package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
  116. package/index.d.ts +5 -5
  117. package/package.json +52 -25
  118. package/public-api.d.ts +1 -1
  119. package/chat/messages/de.d.ts +0 -4
  120. package/chat/messages/en.d.ts +0 -4
  121. package/chat/messages/fr.d.ts +0 -4
  122. package/chat/messages/index.d.ts +0 -4
  123. package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
  124. package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
  125. package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
  126. package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
  127. package/esm2020/chat/chat.component.mjs +0 -1069
  128. package/esm2020/chat/chat.service.mjs +0 -333
  129. package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
  130. package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
  131. package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
  132. package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
  133. package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
  134. package/esm2020/chat/instance-manager.service.mjs +0 -46
  135. package/esm2020/chat/messages/de.mjs +0 -4
  136. package/esm2020/chat/messages/en.mjs +0 -4
  137. package/esm2020/chat/messages/fr.mjs +0 -4
  138. package/esm2020/chat/messages/index.mjs +0 -9
  139. package/esm2020/chat/prompt.component.mjs +0 -88
  140. package/esm2020/chat/rest-chat.service.mjs +0 -241
  141. package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
  142. package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
  143. package/esm2020/chat/types.mjs +0 -112
  144. package/esm2020/chat/websocket-chat.service.mjs +0 -641
  145. package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
  146. package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
  147. package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
  148. package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
  149. package/fesm2020/sinequa-assistant.mjs +0 -9
  150. package/fesm2020/sinequa-assistant.mjs.map +0 -1
  151. /package/{fesm2015 → fesm2022}/sinequa-assistant.mjs.map +0 -0
@@ -0,0 +1,130 @@
1
+ import { z } from "zod";
2
+ // Define the Zod representation for the connectionSettings object
3
+ export const connectionSettingsSchema = z
4
+ .object({
5
+ connectionErrorMessage: z.string(),
6
+ restEndpoint: z.string().optional(),
7
+ websocketEndpoint: z.string().optional(),
8
+ signalRTransport: z.enum([
9
+ "WebSockets",
10
+ "ServerSentEvents",
11
+ "LongPolling",
12
+ "None",
13
+ ]),
14
+ signalRLogLevel: z.enum([
15
+ "Critical",
16
+ "Debug",
17
+ "Error",
18
+ "Information",
19
+ "None",
20
+ "Trace",
21
+ "Warning",
22
+ ]),
23
+ signalRServerTimeoutInMilliseconds: z.number().optional(),
24
+ })
25
+ .refine((data) => !!data.restEndpoint || !!data.websocketEndpoint, {
26
+ message: "Based on the provided input() protocol ('REST' or 'WEBSOCKET') to the Chat Component, either 'restEndpoint' or 'websocketEndpoint' property should be provided in the 'globalSettings' of the assistant instance.",
27
+ });
28
+ // Define the Zod representation for the serviceSettings object
29
+ const serviceSettingsSchema = z.object({
30
+ service_id: z.string(),
31
+ model_id: z.string(),
32
+ temperature: z.number(),
33
+ top_p: z.number(),
34
+ max_tokens: z.number(),
35
+ });
36
+ // Define the Zod representation for the additionalServiceSettings object
37
+ const additionalServiceSettingsSchema = z.object({});
38
+ // Define the Zod representation for the additionalWorkflowProperties object
39
+ const additionalWorkflowPropertiesSchema = z.object({});
40
+ // Define the Zod representation for the uiSettings object
41
+ const uiSettingsSchema = z.object({
42
+ display: z.boolean(),
43
+ servicesModels: z.boolean(),
44
+ functions: z.boolean(),
45
+ temperature: z.boolean(),
46
+ top_p: z.boolean(),
47
+ max_tokens: z.boolean(),
48
+ debug: z.boolean(),
49
+ displaySystemPrompt: z.boolean(),
50
+ displayUserPrompt: z.boolean(),
51
+ });
52
+ // Define the Zod representation for the defaultValues object
53
+ const defaultValuesSchema = z.object({
54
+ service_id: z.string(),
55
+ model_id: z.string(),
56
+ functions: z.array(z.object({
57
+ name: z.string(),
58
+ enabled: z.boolean(),
59
+ })),
60
+ temperature: z.number(),
61
+ top_p: z.number(),
62
+ max_tokens: z.number(),
63
+ debug: z.boolean(),
64
+ systemPrompt: z.string(),
65
+ userPrompt: z.string(),
66
+ });
67
+ // Define the Zod representation for the action object
68
+ const actionSchema = z.object({
69
+ forcedWorkflow: z.string(), // forcedWorkflow must be a string
70
+ forcedWorkflowProperties: z.record(z.unknown()).optional(), // forcedWorkflowProperties must be an object (Map equivalent)
71
+ });
72
+ // Define the Zod representation for the modeSettings object
73
+ const initializationSchema = z
74
+ .object({
75
+ event: z.enum(["Query", "Prompt"]),
76
+ forcedWorkflow: z.string().optional(),
77
+ forcedFunction: z.string().optional(),
78
+ displayUserQuery: z.boolean().optional(),
79
+ })
80
+ // ❌ Rule 1: Cannot have both forcedWorkflow and forcedFunction
81
+ .refine((data) => data.event !== "Query" || !(data.forcedWorkflow && data.forcedFunction), {
82
+ message: "Both 'forcedFunction' and 'forcedWorkflow' properties are set, but they should not.",
83
+ })
84
+ // ❌ Rule 2: Must have one of forcedWorkflow or forcedFunction when event is 'Query'
85
+ .refine((data) => data.event !== "Query" || !!data.forcedWorkflow || !!data.forcedFunction, {
86
+ message: "One of 'forcedWorkflow' or 'forcedFunction' must be provided when the initialization's event is 'Query'.",
87
+ })
88
+ // ❌ Rule 3: Must have displayUserQuery set when event is 'Query'
89
+ .refine((data) => data.event !== "Query" ||
90
+ (data.displayUserQuery !== undefined && data.displayUserQuery !== null), {
91
+ message: "'displayUserQuery' must be provided when the initialization's event is 'Query'.",
92
+ });
93
+ const modeSettingsSchema = z.object({
94
+ enabledUserInput: z.boolean(),
95
+ displayUserPrompt: z.boolean(),
96
+ sendUserPrompt: z.boolean(),
97
+ initialization: initializationSchema,
98
+ actions: z.record(actionSchema).optional(),
99
+ });
100
+ // Define the Zod representation for the savedChatSettings object
101
+ const savedChatSettingsSchema = z.object({
102
+ enabled: z.boolean(),
103
+ display: z.boolean(),
104
+ });
105
+ // Define the Zod representation for the globalSettings object
106
+ const globalSettingsSchema = z.object({
107
+ searchWarningMessage: z.string(),
108
+ disclaimer: z.string().optional(),
109
+ genericChatErrorMessage: z.string().optional(),
110
+ displayUserQuotaConsumption: z.boolean().optional(),
111
+ displayChatTokensConsumption: z.boolean().optional(),
112
+ });
113
+ // Define the Zod representation for the auditSettings object
114
+ const auditSettingsSchema = z.object({
115
+ issueTypes: z.array(z.string()).optional(),
116
+ logContent: z.boolean(),
117
+ });
118
+ // Define the Zod representation for the entire ChatConfig object
119
+ export const chatConfigSchema = z.object({
120
+ connectionSettings: connectionSettingsSchema,
121
+ defaultValues: defaultValuesSchema,
122
+ modeSettings: modeSettingsSchema,
123
+ uiSettings: uiSettingsSchema,
124
+ savedChatSettings: savedChatSettingsSchema,
125
+ globalSettings: globalSettingsSchema,
126
+ auditSettings: auditSettingsSchema,
127
+ additionalServiceSettings: additionalServiceSettingsSchema,
128
+ additionalWorkflowProperties: additionalWorkflowPropertiesSchema,
129
+ });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBaUt4QixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQztLQUN0QyxNQUFNLENBQUM7SUFDTixzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2QixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixNQUFNO0tBQ1AsQ0FBQztJQUNGLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RCLFVBQVU7UUFDVixPQUFPO1FBQ1AsT0FBTztRQUNQLGFBQWE7UUFDYixNQUFNO1FBQ04sT0FBTztRQUNQLFNBQVM7S0FDVixDQUFDO0lBQ0Ysa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMxRCxDQUFDO0tBQ0QsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0lBQ2pFLE9BQU8sRUFDTCxtTkFBbU47Q0FDdE4sQ0FBQyxDQUFDO0FBSUwsK0RBQStEO0FBQy9ELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN0QixRQUFRLEVBQUUsQ0FB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QUFDLE1BQU0sRUFBRTtJQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbkQsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNyRCxDQUFDLENBQUM7QUFFSCw2REFBNkQ7QUFDN0QsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtDQUN4QixDQUFDLENBQUM7QUFLSCxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxrQkFBa0IsRUFBRSx3QkFBd0I7SUFDNUMsYUFBYSxFQUFFLG1CQUFtQjtJQUNsQyxZQUFZLEVBQUUsa0JBQWtCO0lBQ2hDLFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsaUJBQWlCLEVBQUUsdUJBQXVCO0lBQzFDLGNBQWMsRUFBRSxvQkFBb0I7SUFDcEMsYUFBYSxFQUFFLG1CQUFtQjtJQUNsQyx5QkFBeUIsRUFBRSwrQkFBK0I7SUFDMUQsNEJBQTRCLEVBQUUsa0NBQWtDO0NBQ2pFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFF1ZXJ5LCBBcnRpY2xlIGFzIFJlY29yZCB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcblxuaW1wb3J0IHsgUmF3TWVzc2FnZUNvbnRlbnQgfSBmcm9tIFwiLi90eXBlcy9tZXNzYWdlLWNvbnRlbnQudHlwZXNcIjtcbmltcG9ydCB7IE1lc3NhZ2VJbWFnZVJlZmVyZW5jZSB9IGZyb20gXCIuL3R5cGVzL21lc3NhZ2UtcmVmZXJlbmNlLnR5cGVzXCI7XG5cbi8qKlxuICogSW5kaXZpZHVhbCBtZXNzYWdlIHNlbnQgJiByZXR1cm5lZCBieSB0aGUgQ2hhdEdQVCBBUEkuXG4gKiBJZiB0aGlzIG1lc3NhZ2UgaXMgYW4gYXR0YWNobWVudCwgd2UgYXR0YWNoIHRoZSBtaW5pbWFsXG4gKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcmVjb25zdHJ1Y3QgdGhpcyBhdHRhY2htZW50IChSYXdBdHRhY2htZW50KVxuICogYXMgd2VsbCBhcyB0aGUgcmVmZXJlbmNlIGlkIGNvbXB1dGVkIGF0IHRoZSBtb21lbnQgb2Ygc2VuZGluZ1xuICogdGhlIGF0dGFjaG1lbnQgdG8gdGhlIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXdNZXNzYWdlIHtcbiAgcm9sZTogc3RyaW5nO1xuICBjb250ZW50OiBSYXdNZXNzYWdlQ29udGVudDtcbiAgLy8gVXNlZCBvbmx5IGJ5IFdQUyB0byBiZSByZW1vdmVkXG4gIC8vIGh0dHBzOi8vc2luZXF1YS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9FUy0yMzcxMFxuICBtZXNzYWdlVHlwZT86IFwiQ0hBUlRcIiB8IFwiTUFSS0RPV05cIjtcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH07XG59XG5cbi8qKlxuICogQSBjaGF0IG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgdG8gaW5jbHVkZSB0aGUgbWFya2Rvd24tZm9ybWF0dGVkXG4gKiBjb250ZW50IGZvciBkaXNwbGF5LCBhcyB3ZWxsIGFzIGRldGFpbGVkIGF0dGFjaG1lbnQgZGF0YSwgYW5kIG9wdGlvbmFsbHlcbiAqIGEgbGlzdCBvZiB0aGUgcmVmZXJlbmNlcyBleHRyYWN0ZWQgZnJvbSB0aGF0IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0TWVzc2FnZSBleHRlbmRzIFJhd01lc3NhZ2Uge1xuICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgIGRpc3BsYXk/OiBib29sZWFuO1xuICAgICRwcm9ncmVzcz86IENoYXRQcm9ncmVzc1tdO1xuICAgICRhdHRhY2htZW50PzogQ2hhdENvbnRleHRBdHRhY2htZW50W107XG4gICAgJHN1Z2dlc3RlZEFjdGlvbj86IFN1Z2dlc3RlZEFjdGlvbltdO1xuICAgICRkZWJ1Zz86IERlYnVnTWVzc2FnZVtdO1xuICAgIGZvcmNlZFdvcmtmbG93Pzogc3RyaW5nO1xuICAgIGZvcmNlZFdvcmtmbG93UHJvcGVydGllcz86IGFueTtcbiAgICBxdWVyeT86IFF1ZXJ5O1xuICAgIGlzVXNlcklucHV0PzogYm9vbGVhbjtcbiAgICB1c2FnZU1ldHJpY3M/OiBDaGF0VXNhZ2VNZXRyaWNzO1xuICAgIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXM/OiBhbnk7XG4gICAgJGxpa2VkPzogYm9vbGVhbjtcbiAgICAkZGlzbGlrZWQ/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0UHJvZ3Jlc3Mge1xuICB0aXRsZTogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBkb25lPzogYm9vbGVhbjtcbiAgdGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYXdBdHRhY2htZW50IHtcbiAgLyoqIFR5cGUgb2YgdGhlIGF0dGFjaG1lbnQgKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogUmVjb3JkIGlkIGZyb20gd2hpY2ggdGhpcyBhdHRhY2htZW50IGlzIHRha2VuICovXG4gIHJlY29yZElkOiBzdHJpbmc7XG4gIC8qKiBSZWNvcmQgZnJvbSB3aGljaCB0aGlzIHRoaXMgYXR0YWNobWVudCBpcyB0YWtlbiAqL1xuICByZWNvcmQ6IFJlY29yZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudFBhcnQge1xuICBwYXJ0SWQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxlbmd0aDogbnVtYmVyO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGltYWdlcz86IHN0cmluZ1tdIHwgTWVzc2FnZUltYWdlUmVmZXJlbmNlW107XG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50UGFnZSA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIG1pbWVUeXBlOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIG9mZlNldD86IG51bWJlcjtcbiAgcGFnZU51bWJlcj86IG51bWJlcjtcbiAgcmVtYXBwZWRMZW5ndGg/OiBudW1iZXI7XG4gIHJlbWFwcGVkT2Zmc2V0PzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29udGV4dEF0dGFjaG1lbnQgZXh0ZW5kcyBSYXdBdHRhY2htZW50IHtcbiAgLyoqIFR5cGUgb2YgdGhlIGF0dGFjaG1lbnQgKi9cbiAgdHlwZTogXCJDb250ZXh0XCI7XG4gIC8qKiBSYW5rIG9mIHRoZSBhdHRhY2htZW50IGluIHRoZSBjb250ZXh0IG1lc3NhZ2UgKi9cbiAgY29udGV4dElkOiBudW1iZXI7XG4gIC8qKiBQYXJ0cyBvZiB0aGUgcmVjb3JkIHRoYXQgdGhlIGFzc2lzdGFudCB1c2VzIHRvIGFuc3dlciAqL1xuICBwYXJ0czogRG9jdW1lbnRQYXJ0W107XG4gIC8qKiBQYWdlcyBvZiB0aGUgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBxdWVyeSAqL1xuICBwYWdlcz86IERvY3VtZW50UGFnZVtdO1xuICAvKiogVGhlIHNwZWNpZmljIGlkIHVzZWQgb2YgdGhlIHJlZmVyZW5jZWQgcGFydCAqL1xuICAkcGFydElkPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJhdyByZXNwb25zZSBvZiB0aGUgY2hhdCBBUElcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXdSZXNwb25zZSB7XG4gIGhpc3Rvcnk6IFJhd01lc3NhZ2VbXTtcbiAgZXhlY3V0aW9uVGltZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBleGVjdXRpb25UaW1lTWlsbGlzZWNvbmRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRW5yaWNoZWQgcmVzcG9uc2Ugb2YgdGhlIGNoYXQgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFJlc3BvbnNlIGV4dGVuZHMgUmF3UmVzcG9uc2Uge1xuICBoaXN0b3J5OiBDaGF0TWVzc2FnZVtdO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIG9mIHRoZSBMaXN0TW9kZWxzIEFQSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdsbG1Nb2RlbERlc2NyaXB0aW9uIHtcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgc2VydmljZUlkOiBzdHJpbmc7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgZW5hYmxlOiBib29sZWFuO1xuICBtYXhHZW5lcmF0aW9uU2l6ZTogbnVtYmVyO1xuICBjb250ZXh0V2luZG93U2l6ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIG9mIHRoZSBMaXN0RnVuY3Rpb25zIEFQSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdsbG1GdW5jdGlvbiB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBwYXJhbWV0ZXJzOiBHbGxtRnVuY3Rpb25QYXJhbWV0ZXJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbGxtRnVuY3Rpb25QYXJhbWV0ZXIge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpc1JlcXVpcmVkOiBib29sZWFuO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBNaW5pbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgc2F2ZWQgY2hhdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG1vZGlmaWVkVVRDOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGF0YSBzdHJ1Y3R1cmUgc2F2ZWQgdG8gcmVjb25zdHJ1Y3QgYSBzYXZlZCBjaGF0IGNvbnZlcnNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdEhpc3RvcnkgZXh0ZW5kcyBTYXZlZENoYXQge1xuICBoaXN0b3J5OiBDaGF0TWVzc2FnZVtdO1xufVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb25TZXR0aW5ncyBvYmplY3RcbmV4cG9ydCBjb25zdCBjb25uZWN0aW9uU2V0dGluZ3NTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbm5lY3Rpb25FcnJvck1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgcmVzdEVuZHBvaW50OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgd2Vic29ja2V0RW5kcG9pbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzaWduYWxSVHJhbnNwb3J0OiB6LmVudW0oW1xuICAgICAgXCJXZWJTb2NrZXRzXCIsXG4gICAgICBcIlNlcnZlclNlbnRFdmVudHNcIixcbiAgICAgIFwiTG9uZ1BvbGxpbmdcIixcbiAgICAgIFwiTm9uZVwiLFxuICAgIF0pLFxuICAgIHNpZ25hbFJMb2dMZXZlbDogei5lbnVtKFtcbiAgICAgIFwiQ3JpdGljYWxcIixcbiAgICAgIFwiRGVidWdcIixcbiAgICAgIFwiRXJyb3JcIixcbiAgICAgIFwiSW5mb3JtYXRpb25cIixcbiAgICAgIFwiTm9uZVwiLFxuICAgICAgXCJUcmFjZVwiLFxuICAgICAgXCJXYXJuaW5nXCIsXG4gICAgXSksXG4gICAgc2lnbmFsUlNlcnZlclRpbWVvdXRJbk1pbGxpc2Vjb25kczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB9KVxuICAucmVmaW5lKChkYXRhKSA9PiAhIWRhdGEucmVzdEVuZHBvaW50IHx8ICEhZGF0YS53ZWJzb2NrZXRFbmRwb2ludCwge1xuICAgIG1lc3NhZ2U6XG4gICAgICBcIkJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnB1dCgpIHByb3RvY29sICgnUkVTVCcgb3IgJ1dFQlNPQ0tFVCcpIHRvIHRoZSBDaGF0IENvbXBvbmVudCwgZWl0aGVyICdyZXN0RW5kcG9pbnQnIG9yICd3ZWJzb2NrZXRFbmRwb2ludCcgcHJvcGVydHkgc2hvdWxkIGJlIHByb3ZpZGVkIGluIHRoZSAnZ2xvYmFsU2V0dGluZ3MnIG9mIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UuXCIsXG4gIH0pO1xuLy8gRGVmaW5lIHRoZSBDb25uZWN0aW9uU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgdHlwZSBDb25uZWN0aW9uU2V0dGluZ3MgPSB6LmluZmVyPHR5cGVvZiBjb25uZWN0aW9uU2V0dGluZ3NTY2hlbWE+O1xuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHNlcnZpY2VTZXR0aW5ncyBvYmplY3RcbmNvbnN0IHNlcnZpY2VTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgc2VydmljZV9pZDogei5zdHJpbmcoKSxcbiAgbW9kZWxfaWQ6IHouc3RyaW5nKCksXG4gIHRlbXBlcmF0dXJlOiB6Lm51bWJlcigpLFxuICB0b3BfcDogei5udW1iZXIoKSxcbiAgbWF4X3Rva2Vuczogei5udW1iZXIoKSxcbn0pO1xuLy8gRGVmaW5lIHRoZSBTZXJ2aWNlU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VTZXR0aW5nc1xuICBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHNlcnZpY2VTZXR0aW5nc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBhZGRpdGlvbmFsU2VydmljZVNldHRpbmdzIG9iamVjdFxuY29uc3QgYWRkaXRpb25hbFNlcnZpY2VTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHt9KTtcbi8vIERlZmluZSB0aGUgQWRkaXRpb25hbFNlcnZpY2VTZXR0aW5ncyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQWRkaXRpb25hbFNlcnZpY2VTZXR0aW5nc1xuICBleHRlbmRzIHouaW5mZXI8dHlwZW9mIGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllcyBvYmplY3RcbmNvbnN0IGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXNTY2hlbWEgPSB6Lm9iamVjdCh7fSk7XG4vLyBEZWZpbmUgdGhlIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXMgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXNcbiAgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHVpU2V0dGluZ3Mgb2JqZWN0XG5jb25zdCB1aVNldHRpbmdzU2NoZW1hID0gei5vYmplY3Qoe1xuICBkaXNwbGF5OiB6LmJvb2xlYW4oKSxcbiAgc2VydmljZXNNb2RlbHM6IHouYm9vbGVhbigpLFxuICBmdW5jdGlvbnM6IHouYm9vbGVhbigpLFxuICB0ZW1wZXJhdHVyZTogei5ib29sZWFuKCksXG4gIHRvcF9wOiB6LmJvb2xlYW4oKSxcbiAgbWF4X3Rva2Vuczogei5ib29sZWFuKCksXG4gIGRlYnVnOiB6LmJvb2xlYW4oKSxcbiAgZGlzcGxheVN5c3RlbVByb21wdDogei5ib29sZWFuKCksXG4gIGRpc3BsYXlVc2VyUHJvbXB0OiB6LmJvb2xlYW4oKSxcbn0pO1xuLy8gRGVmaW5lIHRoZSBVaVNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBVaVNldHRpbmdzIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgdWlTZXR0aW5nc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdFxuY29uc3QgZGVmYXVsdFZhbHVlc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgc2VydmljZV9pZDogei5zdHJpbmcoKSxcbiAgbW9kZWxfaWQ6IHouc3RyaW5nKCksXG4gIGZ1bmN0aW9uczogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgZW5hYmxlZDogei5ib29sZWFuKCksXG4gICAgfSlcbiAgKSxcbiAgdGVtcGVyYXR1cmU6IHoubnVtYmVyKCksXG4gIHRvcF9wOiB6Lm51bWJlcigpLFxuICBtYXhfdG9rZW5zOiB6Lm51bWJlcigpLFxuICBkZWJ1Zzogei5ib29sZWFuKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKSxcbiAgdXNlclByb21wdDogei5zdHJpbmcoKSxcbn0pO1xuLy8gRGVmaW5lIHRoZSBEZWZhdWx0VmFsdWVzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0VmFsdWVzIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgZGVmYXVsdFZhbHVlc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBhY3Rpb24gb2JqZWN0XG5jb25zdCBhY3Rpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGZvcmNlZFdvcmtmbG93OiB6LnN0cmluZygpLCAvLyBmb3JjZWRXb3JrZmxvdyBtdXN0IGJlIGEgc3RyaW5nXG4gIGZvcmNlZFdvcmtmbG93UHJvcGVydGllczogei5yZWNvcmQoei51bmtub3duKCkpLm9wdGlvbmFsKCksIC8vIGZvcmNlZFdvcmtmbG93UHJvcGVydGllcyBtdXN0IGJlIGFuIG9iamVjdCAoTWFwIGVxdWl2YWxlbnQpXG59KTtcblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtb2RlU2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBpbml0aWFsaXphdGlvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZXZlbnQ6IHouZW51bShbXCJRdWVyeVwiLCBcIlByb21wdFwiXSksXG4gICAgZm9yY2VkV29ya2Zsb3c6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmb3JjZWRGdW5jdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRpc3BsYXlVc2VyUXVlcnk6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC8vIOKdjCBSdWxlIDE6IENhbm5vdCBoYXZlIGJvdGggZm9yY2VkV29ya2Zsb3cgYW5kIGZvcmNlZEZ1bmN0aW9uXG4gIC5yZWZpbmUoXG4gICAgKGRhdGEpID0+XG4gICAgICBkYXRhLmV2ZW50ICE9PSBcIlF1ZXJ5XCIgfHwgIShkYXRhLmZvcmNlZFdvcmtmbG93ICYmIGRhdGEuZm9yY2VkRnVuY3Rpb24pLFxuICAgIHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIFwiQm90aCAnZm9yY2VkRnVuY3Rpb24nIGFuZCAnZm9yY2VkV29ya2Zsb3cnIHByb3BlcnRpZXMgYXJlIHNldCwgYnV0IHRoZXkgc2hvdWxkIG5vdC5cIixcbiAgICB9XG4gIClcbiAgLy8g4p2MIFJ1bGUgMjogTXVzdCBoYXZlIG9uZSBvZiBmb3JjZWRXb3JrZmxvdyBvciBmb3JjZWRGdW5jdGlvbiB3aGVuIGV2ZW50IGlzICdRdWVyeSdcbiAgLnJlZmluZShcbiAgICAoZGF0YSkgPT5cbiAgICAgIGRhdGEuZXZlbnQgIT09IFwiUXVlcnlcIiB8fCAhIWRhdGEuZm9yY2VkV29ya2Zsb3cgfHwgISFkYXRhLmZvcmNlZEZ1bmN0aW9uLFxuICAgIHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIFwiT25lIG9mICdmb3JjZWRXb3JrZmxvdycgb3IgJ2ZvcmNlZEZ1bmN0aW9uJyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdGhlIGluaXRpYWxpemF0aW9uJ3MgZXZlbnQgaXMgJ1F1ZXJ5Jy5cIixcbiAgICB9XG4gIClcbiAgLy8g4p2MIFJ1bGUgMzogTXVzdCBoYXZlIGRpc3BsYXlVc2VyUXVlcnkgc2V0IHdoZW4gZXZlbnQgaXMgJ1F1ZXJ5J1xuICAucmVmaW5lKFxuICAgIChkYXRhKSA9PlxuICAgICAgZGF0YS5ldmVudCAhPT0gXCJRdWVyeVwiIHx8XG4gICAgICAoZGF0YS5kaXNwbGF5VXNlclF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgZGF0YS5kaXNwbGF5VXNlclF1ZXJ5ICE9PSBudWxsKSxcbiAgICB7XG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIidkaXNwbGF5VXNlclF1ZXJ5JyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdGhlIGluaXRpYWxpemF0aW9uJ3MgZXZlbnQgaXMgJ1F1ZXJ5Jy5cIixcbiAgICB9XG4gICk7XG5cbmNvbnN0IG1vZGVTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5hYmxlZFVzZXJJbnB1dDogei5ib29sZWFuKCksXG4gIGRpc3BsYXlVc2VyUHJvbXB0OiB6LmJvb2xlYW4oKSxcbiAgc2VuZFVzZXJQcm9tcHQ6IHouYm9vbGVhbigpLFxuICBpbml0aWFsaXphdGlvbjogaW5pdGlhbGl6YXRpb25TY2hlbWEsXG4gIGFjdGlvbnM6IHoucmVjb3JkKGFjdGlvblNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuLy8gRGVmaW5lIHRoZSBNb2RlU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVTZXR0aW5ncyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIG1vZGVTZXR0aW5nc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBzYXZlZENoYXRTZXR0aW5ncyBvYmplY3RcbmNvbnN0IHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hID0gei5vYmplY3Qoe1xuICBlbmFibGVkOiB6LmJvb2xlYW4oKSxcbiAgZGlzcGxheTogei5ib29sZWFuKCksXG59KTtcbi8vIERlZmluZSB0aGUgU2F2ZWRDaGF0U2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdFNldHRpbmdzXG4gIGV4dGVuZHMgei5pbmZlcjx0eXBlb2Ygc2F2ZWRDaGF0U2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZ2xvYmFsU2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBnbG9iYWxTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgc2VhcmNoV2FybmluZ01lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGRpc2NsYWltZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZ2VuZXJpY0NoYXRFcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheVVzZXJRdW90YUNvbnN1bXB0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5Q2hhdFRva2Vuc0NvbnN1bXB0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYXVkaXRTZXR0aW5ncyBvYmplY3RcbmNvbnN0IGF1ZGl0U2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlzc3VlVHlwZXM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgbG9nQ29udGVudDogei5ib29sZWFuKCksXG59KTtcbi8vIERlZmluZSB0aGUgU2F2ZWRDaGF0U2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdFNldHRpbmdzXG4gIGV4dGVuZHMgei5pbmZlcjx0eXBlb2Ygc2F2ZWRDaGF0U2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZW50aXJlIENoYXRDb25maWcgb2JqZWN0XG5leHBvcnQgY29uc3QgY2hhdENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29ubmVjdGlvblNldHRpbmdzOiBjb25uZWN0aW9uU2V0dGluZ3NTY2hlbWEsXG4gIGRlZmF1bHRWYWx1ZXM6IGRlZmF1bHRWYWx1ZXNTY2hlbWEsXG4gIG1vZGVTZXR0aW5nczogbW9kZVNldHRpbmdzU2NoZW1hLFxuICB1aVNldHRpbmdzOiB1aVNldHRpbmdzU2NoZW1hLFxuICBzYXZlZENoYXRTZXR0aW5nczogc2F2ZWRDaGF0U2V0dGluZ3NTY2hlbWEsXG4gIGdsb2JhbFNldHRpbmdzOiBnbG9iYWxTZXR0aW5nc1NjaGVtYSxcbiAgYXVkaXRTZXR0aW5nczogYXVkaXRTZXR0aW5nc1NjaGVtYSxcbiAgYWRkaXRpb25hbFNlcnZpY2VTZXR0aW5nczogYWRkaXRpb25hbFNlcnZpY2VTZXR0aW5nc1NjaGVtYSxcbiAgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllczogYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllc1NjaGVtYSxcbn0pO1xuLy8gRGVmaW5lIHRoZSBDaGF0Q29uZmlnIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29uZmlnIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgY2hhdENvbmZpZ1NjaGVtYT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0UGF5bG9hZCB7XG4gIGRlYnVnOiBib29sZWFuO1xuICBmdW5jdGlvbnM6IHN0cmluZ1tdO1xuICBoaXN0b3J5OiBDaGF0TWVzc2FnZVtdO1xuICBzZXJ2aWNlU2V0dGluZ3M6IFNlcnZpY2VTZXR0aW5ncztcbiAgYXBwUXVlcnk6IHtcbiAgICBhcHA6IHN0cmluZztcbiAgICBxdWVyeTogUXVlcnkgfCB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0VXJsPzogc3RyaW5nO1xuICAgIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICB9O1xuICBpbnN0YW5jZUlkPzogc3RyaW5nO1xuICBzYXZlZENoYXRJZD86IHN0cmluZztcbiAgZ2VuZXJpY0NoYXRFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbk1lc3NhZ2UgPSB7XG4gIGd1aWQ6IHN0cmluZztcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGRpc3BsYXlWYWx1ZT86IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dENodW5rc09wdGlvbnMge1xuICBleHRlbmRNb2RlPzogXCJOb25lXCIgfCBcIlNlbnRlbmNlXCIgfCBcIkNoYXJzXCI7XG4gIGV4dGVuZFNjb3BlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhIHtcbiAgbGFzdFJlcXVlc3Q6IHN0cmluZztcbiAgcHJvbXB0VG9rZW5Db3VudDogbnVtYmVyO1xuICBjb21wbGV0aW9uVG9rZW5Db3VudDogbnVtYmVyO1xuICBwZXJpb2RUb2tlbnM6IG51bWJlcjtcbiAgcmVzZXRIb3VyczogbnVtYmVyO1xuICB0b2tlbkNvdW50OiBudW1iZXI7XG4gIG5leHRSZXNldDogc3RyaW5nO1xuICBsYXN0UmVzZXRVVEM6IHN0cmluZztcbiAgbmV4dFJlc2V0VVRDOiBzdHJpbmc7XG4gIG1heFF1b3RhUmVhY2hlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0ZWRBY3Rpb24ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0Q2hhdCB7XG4gIG1lc3NhZ2VzOiBSYXdNZXNzYWdlW107XG59XG5cbi8qKlxuICogTGlzdCBvZiBldmVudHMgZGF0YSB0aGF0IGNhbiBiZSBlbWl0dGVkIGJ5IHRoZSB3ZWJzb2NrZXQgY2hhdCBlbmRwb2ludFxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRBY3Rpb25zRXZlbnQgPSB7IHN1Z2dlc3RlZEFjdGlvbnM6IFN1Z2dlc3RlZEFjdGlvbltdIH07XG5leHBvcnQgdHlwZSBRdW90YUV2ZW50ID0geyBxdW90YTogUXVvdGEgfTtcbmV4cG9ydCB0eXBlIE1lc3NhZ2VFdmVudCA9IHsgZGVsdGE6IHN0cmluZzsgbWVzc2FnZUlkOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIENvbnRleHRNZXNzYWdlRXZlbnQgPSB7IGNvbnRlbnQ6IHN0cmluZzsgYWRkaXRpb25hbFByb3BlcnRpZXM6IENoYXRDb250ZXh0QXR0YWNobWVudCB9O1xuZXhwb3J0IHR5cGUgRXJyb3JFdmVudCA9IHN0cmluZztcbmV4cG9ydCB0eXBlIEFjdGlvblN0YXJ0RXZlbnQgPSB7IGd1aWQ6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgQWN0aW9uUmVzdWx0RXZlbnQgPSB7IGd1aWQ6IHN0cmluZzsgZGlzcGxheVZhbHVlOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIEFjdGlvblN0b3BFdmVudCA9IHsgZ3VpZDogc3RyaW5nOyBleGVjdXRpb25UaW1lOiBudW1iZXIgfTtcbmV4cG9ydCB0eXBlIEhpc3RvcnlFdmVudCA9IHsgaGlzdG9yeTogUmF3TWVzc2FnZVtdOyBleGVjdXRpb25UaW1lOiBzdHJpbmc7IGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM/OiBudW1iZXIgfTtcbmV4cG9ydCB0eXBlIERlYnVnTWVzc2FnZUV2ZW50ID0gRGVidWdNZXNzYWdlO1xuXG4vKipcbiAqIERhdGEgZW1pdHRlZCBieSB0aGUgaHR0cCBjaGF0IGVuZHBvaW50XG4gKi9cbmV4cG9ydCB0eXBlIEh0dHBDaGF0UmVzcG9uc2UgPSB7XG4gIHF1b3RhOiBRdW90YTtcbiAgc3VnZ2VzdGVkQWN0aW9uczogU3VnZ2VzdGVkQWN0aW9uW107XG4gIGRlYnVnOiBhbnk7XG4gIGNvbnRleHQ6IHsgY29udGVudDogc3RyaW5nOyBhZGRpdGlvbmFsUHJvcGVydGllczogQ2hhdENvbnRleHRBdHRhY2htZW50IH1bXTtcbiAgYWN0aW9uczogQWN0aW9uTWVzc2FnZVtdO1xuICBoaXN0b3J5OiBSYXdNZXNzYWdlW107XG4gIGV4ZWN1dGlvblRpbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kczogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlbkNvbnN1bXB0aW9uIHtcbiAgcGVyY2VudGFnZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUb2tlbkNvbnN1bXB0aW9uIGV4dGVuZHMgVG9rZW5Db25zdW1wdGlvbiB7XG4gIG5leHRSZXNldERhdGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0VXNhZ2VNZXRyaWNzIHtcbiAgdG90YWxUb2tlbkNvdW50OiBudW1iZXI7XG4gIHByb21wdFRva2VuQ291bnQ6IG51bWJlcjtcbiAgY29tcGxldGlvblRva2VuQ291bnQ6IG51bWJlcjtcbiAgdG9rZW5pemVyVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEt2T2JqZWN0IHtcbiAgZGF0YToge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7IC8vIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgfTtcbiAgdHlwZTogXCJLVlwiO1xuICBpc0Vycm9yOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RPYmplY3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwiTElTVFwiO1xuICBpc0Vycm9yOiBib29sZWFuO1xuICBpdGVtczogKEt2T2JqZWN0IHwgTGlzdE9iamVjdClbXTtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERlYnVnTWVzc2FnZSA9IEt2T2JqZWN0IHwgTGlzdE9iamVjdDtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXI8VD4gPSB7XG4gIGhhbmRsZXI6IChkYXRhOiBUKSA9PiB2b2lkO1xuICBpc0dsb2JhbEhhbmRsZXI6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIERhdGEgZW1pdHRlZCBieSB0aGUgc2F2ZWQgY2hhdCBlbmRwb2ludHNcbiAqL1xuZXhwb3J0IHR5cGUgRGVsZXRlU2F2ZWRDaGF0UmVzcG9uc2UgPSB7XG4gIGRlbGV0ZUNvdW50OiBudW1iZXI7XG4gIGV4ZWN1dGlvblRpbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kczogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFNhdmVkQ2hhdFJlc3BvbnNlID0ge1xuICBzYXZlZENoYXQ6IFNhdmVkQ2hhdDtcbiAgZXhlY3V0aW9uVGltZTogc3RyaW5nO1xuICBleGVjdXRpb25UaW1lTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59O1xuIl19
@@ -0,0 +1,57 @@
1
+ import { CONTINUE, visit } from "unist-util-visit";
2
+ export const EMBEDDED_IMAGE_NAME = "embedded-image-reference";
3
+ const EMBEDDED_IMAGE_REGEX = /\[(Img-(\d+(?:\.\d+)+))((?:\:\d{1,4}){4})?\]/g;
4
+ export default function embeddedImageReferencePlugin(tree) {
5
+ visit(tree, "text", (node, index, parent) => {
6
+ const refs = Array.from(node.value.matchAll(EMBEDDED_IMAGE_REGEX));
7
+ if (refs.length === 0)
8
+ return CONTINUE;
9
+ const nodes = getContentNodes(node, refs);
10
+ if (nodes.length === 0)
11
+ return CONTINUE;
12
+ parent.children.splice(index, 1, ...nodes);
13
+ return index + nodes.length;
14
+ });
15
+ return tree;
16
+ }
17
+ /** Transform node text content into a set of node */
18
+ function getContentNodes(node, refs) {
19
+ let nodes = refs.reduce((acc, ref) => {
20
+ handleLeadingText(acc, node, ref);
21
+ acc.push({
22
+ type: EMBEDDED_IMAGE_NAME,
23
+ value: ref[2],
24
+ boundingBox: ref[3],
25
+ end: ref.index + ref[0].length,
26
+ });
27
+ return acc;
28
+ }, []);
29
+ handleTrailingText(node, refs, nodes);
30
+ return nodes;
31
+ }
32
+ /** Compute last block ending for leading text */
33
+ function handleLeadingText(acc, node, ref) {
34
+ const lastEnd = acc.at(-1)?.end ?? 0;
35
+ const leadingText = node.value.substring(lastEnd, ref.index);
36
+ if (leadingText !== "") {
37
+ acc.push({
38
+ type: "text",
39
+ value: leadingText,
40
+ end: ref.index,
41
+ });
42
+ }
43
+ return acc;
44
+ }
45
+ /** Compute last block ending for trailing text */
46
+ function handleTrailingText(node, refs, nodes) {
47
+ const lastEnd = refs.at(-1)?.index ?? 0;
48
+ const trailingText = node.value.substring(lastEnd + (refs.at(-1)?.[0].length ?? 0));
49
+ if (trailingText !== "") {
50
+ nodes.push({
51
+ type: "text",
52
+ value: trailingText,
53
+ end: node.value.length,
54
+ });
55
+ }
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3VuaWZpZWQtcGx1Z2lucy9lbWJlZGRlZC1pbWFnZS1yZWZlcmVuY2UucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMEJBQTBCLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRywrQ0FBK0MsQ0FBQztBQUU3RSxNQUFNLENBQUMsT0FBTyxVQUFVLDRCQUE0QixDQUFDLElBQVU7SUFDN0QsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUUzQyxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELFNBQVMsZUFBZSxDQUFDLElBQVUsRUFBRSxJQUF1QjtJQUMxRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25DLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxtQkFBbUI7WUFDekIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuQixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNLLENBQUMsQ0FBQztRQUV2QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFtQyxDQUFjLENBQUM7SUFFckQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV0QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxpQkFBaUIsQ0FDeEIsR0FBa0MsRUFDbEMsSUFBVSxFQUNWLEdBQW9CO0lBRXBCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0QsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFdBQVc7WUFDbEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1NBQ2MsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxrREFBa0Q7QUFDbEQsU0FBUyxrQkFBa0IsQ0FDekIsSUFBVSxFQUNWLElBQXVCLEVBQ3ZCLEtBQWdCO0lBRWhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUN2QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQ3pDLENBQUM7SUFFRixJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsWUFBWTtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQ00sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudCwgUGFyZW50LCBUZXh0IH0gZnJvbSBcIm1kYXN0XCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcInVuaXN0XCI7XG5pbXBvcnQgeyBDT05USU5VRSwgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiO1xuXG5leHBvcnQgY29uc3QgRU1CRURERURfSU1BR0VfTkFNRSA9IFwiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlXCI7XG5jb25zdCBFTUJFRERFRF9JTUFHRV9SRUdFWCA9IC9cXFsoSW1nLShcXGQrKD86XFwuXFxkKykrKSkoKD86XFw6XFxkezEsNH0pezR9KT9cXF0vZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1iZWRkZWRJbWFnZVJlZmVyZW5jZVBsdWdpbih0cmVlOiBOb2RlKSB7XG4gIHZpc2l0KHRyZWUsIFwidGV4dFwiLCAobm9kZTogVGV4dCwgaW5kZXg6IG51bWJlciwgcGFyZW50OiBQYXJlbnQpID0+IHtcbiAgICBjb25zdCByZWZzID0gQXJyYXkuZnJvbShub2RlLnZhbHVlLm1hdGNoQWxsKEVNQkVEREVEX0lNQUdFX1JFR0VYKSk7XG5cbiAgICBpZiAocmVmcy5sZW5ndGggPT09IDApIHJldHVybiBDT05USU5VRTtcblxuICAgIGNvbnN0IG5vZGVzID0gZ2V0Q29udGVudE5vZGVzKG5vZGUsIHJlZnMpO1xuXG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIENPTlRJTlVFO1xuXG4gICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4ubm9kZXMpO1xuXG4gICAgcmV0dXJuIGluZGV4ICsgbm9kZXMubGVuZ3RoO1xuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn1cblxuLyoqIFRyYW5zZm9ybSBub2RlIHRleHQgY29udGVudCBpbnRvIGEgc2V0IG9mIG5vZGUgKi8gXG5mdW5jdGlvbiBnZXRDb250ZW50Tm9kZXMobm9kZTogVGV4dCwgcmVmczogUmVnRXhwRXhlY0FycmF5W10pOiBDb250ZW50W10ge1xuICBsZXQgbm9kZXMgPSByZWZzLnJlZHVjZSgoYWNjLCByZWYpID0+IHtcbiAgICBoYW5kbGVMZWFkaW5nVGV4dChhY2MsIG5vZGUsIHJlZik7XG5cbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBFTUJFRERFRF9JTUFHRV9OQU1FLFxuICAgICAgdmFsdWU6IHJlZlsyXSxcbiAgICAgIGJvdW5kaW5nQm94OiByZWZbM10sXG4gICAgICBlbmQ6IHJlZi5pbmRleCArIHJlZlswXS5sZW5ndGgsXG4gICAgfSBhcyBhbnkgYXMgQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSk7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSkgYXMgQ29udGVudFtdO1xuXG4gIGhhbmRsZVRyYWlsaW5nVGV4dChub2RlLCByZWZzLCBub2Rlcyk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vKiogQ29tcHV0ZSBsYXN0IGJsb2NrIGVuZGluZyBmb3IgbGVhZGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVMZWFkaW5nVGV4dChcbiAgYWNjOiAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSxcbiAgbm9kZTogVGV4dCxcbiAgcmVmOiBSZWdFeHBFeGVjQXJyYXlcbik6IENvbnRlbnRbXSB7XG4gIGNvbnN0IGxhc3RFbmQgPSBhY2MuYXQoLTEpPy5lbmQgPz8gMDtcbiAgY29uc3QgbGVhZGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhsYXN0RW5kLCByZWYuaW5kZXgpO1xuXG4gIGlmIChsZWFkaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgdmFsdWU6IGxlYWRpbmdUZXh0LFxuICAgICAgZW5kOiByZWYuaW5kZXgsXG4gICAgfSBhcyBDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KTtcbiAgfVxuXG4gIHJldHVybiBhY2M7XG59XG5cbi8qKiBDb21wdXRlIGxhc3QgYmxvY2sgZW5kaW5nIGZvciB0cmFpbGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVUcmFpbGluZ1RleHQoXG4gIG5vZGU6IFRleHQsXG4gIHJlZnM6IFJlZ0V4cEV4ZWNBcnJheVtdLFxuICBub2RlczogQ29udGVudFtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbGFzdEVuZCA9IHJlZnMuYXQoLTEpPy5pbmRleCA/PyAwO1xuICBjb25zdCB0cmFpbGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhcbiAgICBsYXN0RW5kICsgKHJlZnMuYXQoLTEpPy5bMF0ubGVuZ3RoID8/IDApXG4gICk7XG5cbiAgaWYgKHRyYWlsaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIG5vZGVzLnB1c2goe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICB2YWx1ZTogdHJhaWxpbmdUZXh0LFxuICAgICAgZW5kOiBub2RlLnZhbHVlLmxlbmd0aCxcbiAgICB9IGFzIENvbnRlbnQgJiB7IGVuZDogbnVtYmVyIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,57 @@
1
+ import { CONTINUE, visit } from "unist-util-visit";
2
+ export const EMBEDDED_PAGE_NAME = "embedded-page-reference";
3
+ const EMBEDDED_PAGE_REGEX = /\[(Page-(\d+\.\d+))\]/g;
4
+ export default function embeddedPageReferencePlugin(tree) {
5
+ visit(tree, "text", (node, index, parent) => {
6
+ const refs = Array.from(node.value.matchAll(EMBEDDED_PAGE_REGEX));
7
+ if (refs.length === 0)
8
+ return CONTINUE;
9
+ const nodes = getContentNodes(node, refs);
10
+ if (nodes.length === 0)
11
+ return CONTINUE;
12
+ parent.children.splice(index, 1, ...nodes);
13
+ return index + nodes.length;
14
+ });
15
+ return tree;
16
+ }
17
+ /** Transform node text content into a set of node */
18
+ function getContentNodes(node, refs) {
19
+ let nodes = refs.reduce((acc, ref) => {
20
+ handleLeadingText(acc, node, ref);
21
+ acc.push({
22
+ type: EMBEDDED_PAGE_NAME,
23
+ value: ref[2],
24
+ boundingBox: ref[3],
25
+ end: ref.index + ref[0].length,
26
+ });
27
+ return acc;
28
+ }, []);
29
+ handleTrailingText(node, refs, nodes);
30
+ return nodes;
31
+ }
32
+ /** Compute last block ending for leading text */
33
+ function handleLeadingText(acc, node, ref) {
34
+ const lastEnd = acc.at(-1)?.end ?? 0;
35
+ const leadingText = node.value.substring(lastEnd, ref.index);
36
+ if (leadingText !== "") {
37
+ acc.push({
38
+ type: "text",
39
+ value: leadingText,
40
+ end: ref.index,
41
+ });
42
+ }
43
+ return acc;
44
+ }
45
+ /** Compute last block ending for trailing text */
46
+ function handleTrailingText(node, refs, nodes) {
47
+ const lastEnd = refs.at(-1)?.index ?? 0;
48
+ const trailingText = node.value.substring(lastEnd + (refs.at(-1)?.[0].length ?? 0));
49
+ if (trailingText !== "") {
50
+ nodes.push({
51
+ type: "text",
52
+ value: trailingText,
53
+ end: node.value.length,
54
+ });
55
+ }
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtcGFnZS1yZWZlcmVuY2UucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvdW5pZmllZC1wbHVnaW5zL2VtYmVkZGVkLXBhZ2UtcmVmZXJlbmNlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQzVELE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFFckQsTUFBTSxDQUFDLE9BQU8sVUFBVSwyQkFBMkIsQ0FBQyxJQUFVO0lBQzVELEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUNoRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUVsRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXZDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUV4QyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFM0MsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxTQUFTLGVBQWUsQ0FBQyxJQUFVLEVBQUUsSUFBdUI7SUFDMUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNuQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2IsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07U0FDSyxDQUFDLENBQUM7UUFFdkMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBbUMsQ0FBYyxDQUFDO0lBRXJELGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFdEMsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsaURBQWlEO0FBQ2pELFNBQVMsaUJBQWlCLENBQ3hCLEdBQWtDLEVBQ2xDLElBQVUsRUFDVixHQUFvQjtJQUVwQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdELElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxXQUFXO1lBQ2xCLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSztTQUNjLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsa0RBQWtEO0FBQ2xELFNBQVMsa0JBQWtCLENBQ3pCLElBQVUsRUFDVixJQUF1QixFQUN2QixLQUFnQjtJQUVoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUN6QyxDQUFDO0lBRUYsSUFBSSxZQUFZLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFlBQVk7WUFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtTQUNNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnQsIFBhcmVudCwgVGV4dCB9IGZyb20gXCJtZGFzdFwiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCJ1bmlzdFwiO1xuaW1wb3J0IHsgQ09OVElOVUUsIHZpc2l0IH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIjtcblxuZXhwb3J0IGNvbnN0IEVNQkVEREVEX1BBR0VfTkFNRSA9IFwiZW1iZWRkZWQtcGFnZS1yZWZlcmVuY2VcIjtcbmNvbnN0IEVNQkVEREVEX1BBR0VfUkVHRVggPSAvXFxbKFBhZ2UtKFxcZCtcXC5cXGQrKSlcXF0vZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1iZWRkZWRQYWdlUmVmZXJlbmNlUGx1Z2luKHRyZWU6IE5vZGUpIHtcbiAgdmlzaXQodHJlZSwgXCJ0ZXh0XCIsIChub2RlOiBUZXh0LCBpbmRleDogbnVtYmVyLCBwYXJlbnQ6IFBhcmVudCkgPT4ge1xuICAgIGNvbnN0IHJlZnMgPSBBcnJheS5mcm9tKG5vZGUudmFsdWUubWF0Y2hBbGwoRU1CRURERURfUEFHRV9SRUdFWCkpO1xuXG4gICAgaWYgKHJlZnMubGVuZ3RoID09PSAwKSByZXR1cm4gQ09OVElOVUU7XG5cbiAgICBjb25zdCBub2RlcyA9IGdldENvbnRlbnROb2Rlcyhub2RlLCByZWZzKTtcblxuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHJldHVybiBDT05USU5VRTtcblxuICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEsIC4uLm5vZGVzKTtcblxuICAgIHJldHVybiBpbmRleCArIG5vZGVzLmxlbmd0aDtcbiAgfSk7XG5cbiAgcmV0dXJuIHRyZWU7XG59XG5cbi8qKiBUcmFuc2Zvcm0gbm9kZSB0ZXh0IGNvbnRlbnQgaW50byBhIHNldCBvZiBub2RlICovIFxuZnVuY3Rpb24gZ2V0Q29udGVudE5vZGVzKG5vZGU6IFRleHQsIHJlZnM6IFJlZ0V4cEV4ZWNBcnJheVtdKTogQ29udGVudFtdIHtcbiAgbGV0IG5vZGVzID0gcmVmcy5yZWR1Y2UoKGFjYywgcmVmKSA9PiB7XG4gICAgaGFuZGxlTGVhZGluZ1RleHQoYWNjLCBub2RlLCByZWYpO1xuXG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogRU1CRURERURfUEFHRV9OQU1FLFxuICAgICAgdmFsdWU6IHJlZlsyXSxcbiAgICAgIGJvdW5kaW5nQm94OiByZWZbM10sXG4gICAgICBlbmQ6IHJlZi5pbmRleCArIHJlZlswXS5sZW5ndGgsXG4gICAgfSBhcyBhbnkgYXMgQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSk7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSkgYXMgQ29udGVudFtdO1xuXG4gIGhhbmRsZVRyYWlsaW5nVGV4dChub2RlLCByZWZzLCBub2Rlcyk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vKiogQ29tcHV0ZSBsYXN0IGJsb2NrIGVuZGluZyBmb3IgbGVhZGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVMZWFkaW5nVGV4dChcbiAgYWNjOiAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSxcbiAgbm9kZTogVGV4dCxcbiAgcmVmOiBSZWdFeHBFeGVjQXJyYXlcbik6IENvbnRlbnRbXSB7XG4gIGNvbnN0IGxhc3RFbmQgPSBhY2MuYXQoLTEpPy5lbmQgPz8gMDtcbiAgY29uc3QgbGVhZGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhsYXN0RW5kLCByZWYuaW5kZXgpO1xuXG4gIGlmIChsZWFkaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgdmFsdWU6IGxlYWRpbmdUZXh0LFxuICAgICAgZW5kOiByZWYuaW5kZXgsXG4gICAgfSBhcyBDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KTtcbiAgfVxuXG4gIHJldHVybiBhY2M7XG59XG5cbi8qKiBDb21wdXRlIGxhc3QgYmxvY2sgZW5kaW5nIGZvciB0cmFpbGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVUcmFpbGluZ1RleHQoXG4gIG5vZGU6IFRleHQsXG4gIHJlZnM6IFJlZ0V4cEV4ZWNBcnJheVtdLFxuICBub2RlczogQ29udGVudFtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbGFzdEVuZCA9IHJlZnMuYXQoLTEpPy5pbmRleCA/PyAwO1xuICBjb25zdCB0cmFpbGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhcbiAgICBsYXN0RW5kICsgKHJlZnMuYXQoLTEpPy5bMF0ubGVuZ3RoID8/IDApXG4gICk7XG5cbiAgaWYgKHRyYWlsaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIG5vZGVzLnB1c2goe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICB2YWx1ZTogdHJhaWxpbmdUZXh0LFxuICAgICAgZW5kOiBub2RlLnZhbHVlLmxlbmd0aCxcbiAgICB9IGFzIENvbnRlbnQgJiB7IGVuZDogbnVtYmVyIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ export function getAssistantJsonFromCCApp(ccApp, configId) {
2
+ const customJSONs = ccApp?.customJSONs;
3
+ if (!!customJSONs) {
4
+ const assistantsJson = ccApp.customJSONs.find((json) => json.name === "assistants");
5
+ // try to fetch from sideJson
6
+ if (!!assistantsJson)
7
+ return assistantsJson?.data?.[configId];
8
+ }
9
+ // fallback to the main json
10
+ return ccApp?.data?.assistants?.[configId];
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0YW50LWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC91dGlscy9hc3Npc3RhbnQtanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUseUJBQXlCLENBQUMsS0FBWSxFQUFFLFFBQWdCO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxXQUFXLENBQUM7SUFFdkMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzNDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FDckMsQ0FBQztRQUVGLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsQ0FBQyxjQUFjO1lBQUUsT0FBTyxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENDQXBwIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXNzaXN0YW50SnNvbkZyb21DQ0FwcChjY0FwcDogQ0NBcHAsIGNvbmZpZ0lkOiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjdXN0b21KU09OcyA9IGNjQXBwPy5jdXN0b21KU09OcztcblxuICBpZiAoISFjdXN0b21KU09Ocykge1xuICAgIGNvbnN0IGFzc2lzdGFudHNKc29uID0gY2NBcHAuY3VzdG9tSlNPTnMuZmluZChcbiAgICAgIChqc29uKSA9PiBqc29uLm5hbWUgPT09IFwiYXNzaXN0YW50c1wiXG4gICAgKTtcblxuICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIHNpZGVKc29uXG4gICAgaWYgKCEhYXNzaXN0YW50c0pzb24pIHJldHVybiBhc3Npc3RhbnRzSnNvbj8uZGF0YT8uW2NvbmZpZ0lkXTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBtYWluIGpzb25cbiAgcmV0dXJuIGNjQXBwPy5kYXRhPy5hc3Npc3RhbnRzPy5bY29uZmlnSWRdO1xufVxuIl19