@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.
- package/chat/charts/chart/chart.component.d.ts +13 -13
- package/chat/chat-message/chat-message.component.d.ts +85 -81
- package/chat/chat-message/i18n/en.json +11 -0
- package/chat/chat-message/i18n/fr.json +11 -0
- package/chat/chat-reference/chat-reference.component.d.ts +14 -14
- package/chat/chat-reference/i18n/en.json +4 -0
- package/chat/chat-reference/i18n/fr.json +4 -0
- package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
- package/chat/chat-settings-v3/i18n/en.json +14 -0
- package/chat/chat-settings-v3/i18n/fr.json +14 -0
- package/chat/chat.component.d.ts +388 -1405
- package/chat/chat.service.d.ts +247 -228
- package/chat/debug-message/debug-message.component.d.ts +17 -17
- package/chat/debug-message/i18n/en.json +3 -0
- package/chat/debug-message/i18n/fr.json +3 -0
- package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
- package/chat/dialogs/i18n/en.json +19 -0
- package/chat/dialogs/i18n/fr.json +19 -0
- package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
- package/chat/dialogs/updates.component.d.ts +15 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
- package/chat/documents-upload/documents-upload.model.d.ts +66 -66
- package/chat/documents-upload/documents-upload.service.d.ts +170 -174
- package/chat/documents-upload/i18n/en.json +24 -0
- package/chat/documents-upload/i18n/fr.json +24 -0
- package/chat/format-icon/format-icon.component.d.ts +10 -10
- package/chat/format-icon/icons.d.ts +5 -5
- package/chat/i18n/en.json +42 -0
- package/chat/i18n/fr.json +42 -0
- package/chat/index.d.ts +5 -5
- package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
- package/chat/instance-manager.service.d.ts +28 -28
- package/chat/pipes/message-content.pipe.d.ts +16 -0
- package/chat/prompt.component.d.ts +25 -21
- package/chat/public-api.d.ts +17 -17
- package/chat/references/i18n/en.json +6 -0
- package/chat/references/i18n/fr.json +6 -0
- package/chat/references/inline-image-reference.d.ts +21 -0
- package/chat/references/inline-page-reference.d.ts +21 -0
- package/chat/rest-chat.service.d.ts +31 -33
- package/chat/saved-chats/i18n/en.json +4 -0
- package/chat/saved-chats/i18n/fr.json +4 -0
- package/chat/saved-chats/saved-chats.component.d.ts +30 -36
- package/chat/services/app.service.d.ts +8 -0
- package/chat/services/dialog.service.d.ts +12 -0
- package/chat/services/notification.service.d.ts +10 -0
- package/chat/services/principal.service.d.ts +7 -0
- package/chat/services/search.service.d.ts +7 -0
- package/chat/services/signalR.web.service.d.ts +45 -0
- package/chat/services/ui.service.d.ts +13 -0
- package/chat/services/user-settings.service.d.ts +7 -0
- package/chat/token-progress-bar/i18n/en.json +4 -0
- package/chat/token-progress-bar/i18n/fr.json +4 -0
- package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
- package/chat/tooltip/tooltip.component.d.ts +12 -0
- package/chat/tooltip/tooltip.directive.d.ts +81 -0
- package/chat/types/message-content.types.d.ts +54 -0
- package/chat/types/message-reference.types.d.ts +11 -0
- package/chat/types.d.ts +913 -873
- package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
- package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
- package/chat/utils/assistant-json.d.ts +2 -0
- package/chat/websocket-chat.service.d.ts +102 -103
- package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
- package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
- package/esm2022/chat/chat.component.mjs +1090 -0
- package/esm2022/chat/chat.service.mjs +417 -0
- package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
- package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
- package/esm2022/chat/dialogs/updates.component.mjs +61 -0
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
- package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
- package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
- package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
- package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
- package/esm2022/chat/instance-manager.service.mjs +46 -0
- package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
- package/esm2022/chat/prompt.component.mjs +88 -0
- package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
- package/esm2022/chat/references/inline-image-reference.mjs +110 -0
- package/esm2022/chat/references/inline-page-reference.mjs +110 -0
- package/esm2022/chat/rest-chat.service.mjs +296 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
- package/esm2022/chat/services/app.service.mjs +19 -0
- package/esm2022/chat/services/dialog.service.mjs +40 -0
- package/esm2022/chat/services/notification.service.mjs +25 -0
- package/esm2022/chat/services/principal.service.mjs +16 -0
- package/esm2022/chat/services/search.service.mjs +13 -0
- package/esm2022/chat/services/signalR.web.service.mjs +79 -0
- package/esm2022/chat/services/ui.service.mjs +61 -0
- package/esm2022/chat/services/user-settings.service.mjs +22 -0
- package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
- package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
- package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
- package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
- package/esm2022/chat/types/message-content.types.mjs +2 -0
- package/esm2022/chat/types/message-reference.types.mjs +2 -0
- package/esm2022/chat/types.mjs +130 -0
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
- package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
- package/esm2022/chat/utils/assistant-json.mjs +12 -0
- package/esm2022/chat/websocket-chat.service.mjs +654 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
- package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
- package/index.d.ts +5 -5
- package/package.json +52 -25
- package/public-api.d.ts +1 -1
- package/chat/messages/de.d.ts +0 -4
- package/chat/messages/en.d.ts +0 -4
- package/chat/messages/fr.d.ts +0 -4
- package/chat/messages/index.d.ts +0 -4
- package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
- package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
- package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
- package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
- package/esm2020/chat/chat.component.mjs +0 -1069
- package/esm2020/chat/chat.service.mjs +0 -333
- package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
- package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
- package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
- package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
- package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
- package/esm2020/chat/instance-manager.service.mjs +0 -46
- package/esm2020/chat/messages/de.mjs +0 -4
- package/esm2020/chat/messages/en.mjs +0 -4
- package/esm2020/chat/messages/fr.mjs +0 -4
- package/esm2020/chat/messages/index.mjs +0 -9
- package/esm2020/chat/prompt.component.mjs +0 -88
- package/esm2020/chat/rest-chat.service.mjs +0 -241
- package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
- package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
- package/esm2020/chat/types.mjs +0 -112
- package/esm2020/chat/websocket-chat.service.mjs +0 -641
- package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
- package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
- package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant.mjs +0 -9
- package/fesm2020/sinequa-assistant.mjs.map +0 -1
- /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
|