@package-broker/ui 0.19.8 → 2.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE +661 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/api-types.d.ts +9987 -0
  4. package/dist/api-types.d.ts.map +1 -0
  5. package/dist/api-types.js +6 -0
  6. package/dist/api-types.js.map +1 -0
  7. package/dist/api.d.ts +88 -0
  8. package/dist/api.d.ts.map +1 -0
  9. package/dist/api.js +185 -0
  10. package/dist/api.js.map +1 -0
  11. package/dist/app.d.ts +76 -0
  12. package/dist/app.d.ts.map +1 -0
  13. package/dist/app.js +239 -0
  14. package/dist/app.js.map +1 -0
  15. package/dist/assets/app.b2abf3c46f6e.js +15 -0
  16. package/dist/assets/app.e8cea8b32d3a.css +2 -0
  17. package/dist/assets/index.html +13 -0
  18. package/dist/assets/manifest.json +26 -0
  19. package/dist/assets/setup.98343039898f.js +1 -0
  20. package/dist/assets/setup.html +14 -0
  21. package/dist/auth.d.ts +170 -0
  22. package/dist/auth.d.ts.map +1 -0
  23. package/dist/auth.js +551 -0
  24. package/dist/auth.js.map +1 -0
  25. package/dist/components/ui/alert.d.ts +10 -0
  26. package/dist/components/ui/alert.d.ts.map +1 -0
  27. package/dist/components/ui/alert.js +22 -0
  28. package/dist/components/ui/alert.js.map +1 -0
  29. package/dist/components/ui/badge.d.ts +8 -0
  30. package/dist/components/ui/badge.d.ts.map +1 -0
  31. package/dist/components/ui/badge.js +18 -0
  32. package/dist/components/ui/badge.js.map +1 -0
  33. package/dist/components/ui/button.d.ts +13 -0
  34. package/dist/components/ui/button.d.ts.map +1 -0
  35. package/dist/components/ui/button.js +27 -0
  36. package/dist/components/ui/button.js.map +1 -0
  37. package/dist/components/ui/card.d.ts +10 -0
  38. package/dist/components/ui/card.d.ts.map +1 -0
  39. package/dist/components/ui/card.js +21 -0
  40. package/dist/components/ui/card.js.map +1 -0
  41. package/dist/components/ui/confirm-action.d.ts +12 -0
  42. package/dist/components/ui/confirm-action.d.ts.map +1 -0
  43. package/dist/components/ui/confirm-action.js +19 -0
  44. package/dist/components/ui/confirm-action.js.map +1 -0
  45. package/dist/components/ui/dialog.d.ts +17 -0
  46. package/dist/components/ui/dialog.d.ts.map +1 -0
  47. package/dist/components/ui/dialog.js +180 -0
  48. package/dist/components/ui/dialog.js.map +1 -0
  49. package/dist/components/ui/dropdown-menu.d.ts +8 -0
  50. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  51. package/dist/components/ui/dropdown-menu.js +71 -0
  52. package/dist/components/ui/dropdown-menu.js.map +1 -0
  53. package/dist/components/ui/id-text.d.ts +11 -0
  54. package/dist/components/ui/id-text.d.ts.map +1 -0
  55. package/dist/components/ui/id-text.js +23 -0
  56. package/dist/components/ui/id-text.js.map +1 -0
  57. package/dist/components/ui/input.d.ts +5 -0
  58. package/dist/components/ui/input.d.ts.map +1 -0
  59. package/dist/components/ui/input.js +6 -0
  60. package/dist/components/ui/input.js.map +1 -0
  61. package/dist/components/ui/label.d.ts +4 -0
  62. package/dist/components/ui/label.d.ts.map +1 -0
  63. package/dist/components/ui/label.js +7 -0
  64. package/dist/components/ui/label.js.map +1 -0
  65. package/dist/components/ui/list-state.d.ts +7 -0
  66. package/dist/components/ui/list-state.d.ts.map +1 -0
  67. package/dist/components/ui/list-state.js +5 -0
  68. package/dist/components/ui/list-state.js.map +1 -0
  69. package/dist/components/ui/overlay-host.d.ts +6 -0
  70. package/dist/components/ui/overlay-host.d.ts.map +1 -0
  71. package/dist/components/ui/overlay-host.js +36 -0
  72. package/dist/components/ui/overlay-host.js.map +1 -0
  73. package/dist/components/ui/row-actions.d.ts +17 -0
  74. package/dist/components/ui/row-actions.d.ts.map +1 -0
  75. package/dist/components/ui/row-actions.js +21 -0
  76. package/dist/components/ui/row-actions.js.map +1 -0
  77. package/dist/components/ui/select.d.ts +3 -0
  78. package/dist/components/ui/select.d.ts.map +1 -0
  79. package/dist/components/ui/select.js +6 -0
  80. package/dist/components/ui/select.js.map +1 -0
  81. package/dist/components/ui/status-badge.d.ts +28 -0
  82. package/dist/components/ui/status-badge.d.ts.map +1 -0
  83. package/dist/components/ui/status-badge.js +50 -0
  84. package/dist/components/ui/status-badge.js.map +1 -0
  85. package/dist/components/ui/table.d.ts +27 -0
  86. package/dist/components/ui/table.d.ts.map +1 -0
  87. package/dist/components/ui/table.js +81 -0
  88. package/dist/components/ui/table.js.map +1 -0
  89. package/dist/components/ui/tabs.d.ts +7 -0
  90. package/dist/components/ui/tabs.d.ts.map +1 -0
  91. package/dist/components/ui/tabs.js +14 -0
  92. package/dist/components/ui/tabs.js.map +1 -0
  93. package/dist/components/ui/textarea.d.ts +3 -0
  94. package/dist/components/ui/textarea.d.ts.map +1 -0
  95. package/dist/components/ui/textarea.js +14 -0
  96. package/dist/components/ui/textarea.js.map +1 -0
  97. package/dist/components/ui/time.d.ts +5 -0
  98. package/dist/components/ui/time.d.ts.map +1 -0
  99. package/dist/components/ui/time.js +14 -0
  100. package/dist/components/ui/time.js.map +1 -0
  101. package/dist/components/ui/toolbar.d.ts +20 -0
  102. package/dist/components/ui/toolbar.d.ts.map +1 -0
  103. package/dist/components/ui/toolbar.js +42 -0
  104. package/dist/components/ui/toolbar.js.map +1 -0
  105. package/dist/components/vulnerability-status.d.ts +8 -0
  106. package/dist/components/vulnerability-status.d.ts.map +1 -0
  107. package/dist/components/vulnerability-status.js +49 -0
  108. package/dist/components/vulnerability-status.js.map +1 -0
  109. package/dist/index.d.ts +2 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +2 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/lib/use-merged-refs.d.ts +3 -0
  114. package/dist/lib/use-merged-refs.d.ts.map +1 -0
  115. package/dist/lib/use-merged-refs.js +22 -0
  116. package/dist/lib/use-merged-refs.js.map +1 -0
  117. package/dist/lib/utils.d.ts +4 -0
  118. package/dist/lib/utils.d.ts.map +1 -0
  119. package/dist/lib/utils.js +11 -0
  120. package/dist/lib/utils.js.map +1 -0
  121. package/dist/main.d.ts +2 -0
  122. package/dist/main.d.ts.map +1 -0
  123. package/dist/main.js +9 -0
  124. package/dist/main.js.map +1 -0
  125. package/dist/manifest.d.ts +8 -0
  126. package/dist/manifest.d.ts.map +1 -0
  127. package/dist/manifest.js +21 -0
  128. package/dist/manifest.js.map +1 -0
  129. package/dist/page-hash.d.ts +23 -0
  130. package/dist/page-hash.d.ts.map +1 -0
  131. package/dist/page-hash.js +45 -0
  132. package/dist/page-hash.js.map +1 -0
  133. package/dist/pages/access.d.ts +69 -0
  134. package/dist/pages/access.d.ts.map +1 -0
  135. package/dist/pages/access.js +391 -0
  136. package/dist/pages/access.js.map +1 -0
  137. package/dist/pages/audit.d.ts +63 -0
  138. package/dist/pages/audit.d.ts.map +1 -0
  139. package/dist/pages/audit.js +182 -0
  140. package/dist/pages/audit.js.map +1 -0
  141. package/dist/pages/import.d.ts +41 -0
  142. package/dist/pages/import.d.ts.map +1 -0
  143. package/dist/pages/import.js +274 -0
  144. package/dist/pages/import.js.map +1 -0
  145. package/dist/pages/management.d.ts +47 -0
  146. package/dist/pages/management.d.ts.map +1 -0
  147. package/dist/pages/management.js +141 -0
  148. package/dist/pages/management.js.map +1 -0
  149. package/dist/pages/packages.d.ts +74 -0
  150. package/dist/pages/packages.d.ts.map +1 -0
  151. package/dist/pages/packages.js +505 -0
  152. package/dist/pages/packages.js.map +1 -0
  153. package/dist/pages/projects.d.ts +58 -0
  154. package/dist/pages/projects.d.ts.map +1 -0
  155. package/dist/pages/projects.js +357 -0
  156. package/dist/pages/projects.js.map +1 -0
  157. package/dist/pages/sources/add-package-dialog.d.ts +10 -0
  158. package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
  159. package/dist/pages/sources/add-package-dialog.js +19 -0
  160. package/dist/pages/sources/add-package-dialog.js.map +1 -0
  161. package/dist/pages/sources/proxy-message.d.ts +2 -0
  162. package/dist/pages/sources/proxy-message.d.ts.map +1 -0
  163. package/dist/pages/sources/proxy-message.js +2 -0
  164. package/dist/pages/sources/proxy-message.js.map +1 -0
  165. package/dist/pages/sources/source-form.d.ts +29 -0
  166. package/dist/pages/sources/source-form.d.ts.map +1 -0
  167. package/dist/pages/sources/source-form.js +463 -0
  168. package/dist/pages/sources/source-form.js.map +1 -0
  169. package/dist/pages/sources/sync-poll.d.ts +20 -0
  170. package/dist/pages/sources/sync-poll.d.ts.map +1 -0
  171. package/dist/pages/sources/sync-poll.js +71 -0
  172. package/dist/pages/sources/sync-poll.js.map +1 -0
  173. package/dist/pages/sources.d.ts +325 -0
  174. package/dist/pages/sources.d.ts.map +1 -0
  175. package/dist/pages/sources.js +1137 -0
  176. package/dist/pages/sources.js.map +1 -0
  177. package/dist/pages/tokens/client-config.d.ts +5 -0
  178. package/dist/pages/tokens/client-config.d.ts.map +1 -0
  179. package/dist/pages/tokens/client-config.js +9 -0
  180. package/dist/pages/tokens/client-config.js.map +1 -0
  181. package/dist/pages/tokens.d.ts +127 -0
  182. package/dist/pages/tokens.d.ts.map +1 -0
  183. package/dist/pages/tokens.js +744 -0
  184. package/dist/pages/tokens.js.map +1 -0
  185. package/dist/pending.d.ts +33 -0
  186. package/dist/pending.d.ts.map +1 -0
  187. package/dist/pending.js +156 -0
  188. package/dist/pending.js.map +1 -0
  189. package/dist/qr.d.ts +14 -0
  190. package/dist/qr.d.ts.map +1 -0
  191. package/dist/qr.js +322 -0
  192. package/dist/qr.js.map +1 -0
  193. package/dist/setup.d.ts +49 -0
  194. package/dist/setup.d.ts.map +1 -0
  195. package/dist/setup.js +390 -0
  196. package/dist/setup.js.map +1 -0
  197. package/dist/test-fixtures/api-types.d.ts +228 -0
  198. package/dist/test-fixtures/api-types.d.ts.map +1 -0
  199. package/dist/test-fixtures/api-types.js +6 -0
  200. package/dist/test-fixtures/api-types.js.map +1 -0
  201. package/package.json +37 -40
  202. package/public/index.html +11 -0
  203. package/README.md +0 -11
  204. package/dist/assets/main-3NLwl1eV.js +0 -111
  205. package/dist/assets/main-CsTEYyDl.css +0 -1
  206. package/dist/config.js +0 -3
  207. package/dist/index.html +0 -22
@@ -0,0 +1,463 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Textarea } from '../../components/ui/textarea.js';
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { Button } from '../../components/ui/button.js';
5
+ import { Input } from '../../components/ui/input.js';
6
+ import { Label } from '../../components/ui/label.js';
7
+ import { Select } from '../../components/ui/select.js';
8
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog.js';
9
+ import { displayUrl } from '../sources.js';
10
+ import { IdText } from '../../components/ui/id-text.js';
11
+ const VCS_PROVIDER_LABELS = {
12
+ github: 'GitHub',
13
+ git: 'Git over HTTP(S)',
14
+ ssh: 'Git over SSH',
15
+ };
16
+ const DEFAULT_VCS_PROVIDERS = ['github'];
17
+ /** The provider choices in display order, limited to those the broker reports it serves. */
18
+ export function vcsProviderOptions(reported) {
19
+ return Object.keys(VCS_PROVIDER_LABELS)
20
+ .filter((provider) => reported.includes(provider))
21
+ .map((provider) => [provider, VCS_PROVIDER_LABELS[provider]]);
22
+ }
23
+ export const SOURCE_TYPES = {
24
+ composer: ['packagist_proxy', 'composer_repository', 'vcs'],
25
+ npm: ['npmjs_proxy', 'npm_registry'],
26
+ };
27
+ const DEFAULT_URL = {
28
+ packagist_proxy: 'https://repo.packagist.org',
29
+ npmjs_proxy: 'https://registry.npmjs.org',
30
+ };
31
+ export const SOURCE_TYPE_LABELS = {
32
+ packagist_proxy: 'Packagist proxy',
33
+ composer_repository: 'Composer repository',
34
+ vcs: 'Git repository',
35
+ npmjs_proxy: 'npmjs proxy',
36
+ npm_registry: 'Private npm registry',
37
+ hosted: 'Hosted repository',
38
+ };
39
+ const TYPE_DESCRIPTIONS = {
40
+ packagist_proxy: 'Fetch public Composer packages on demand.',
41
+ composer_repository: 'Import selected packages from Satis, Private Packagist, or another Composer repository.',
42
+ vcs: 'Import a Composer package from GitHub or another Git repository.',
43
+ npmjs_proxy: 'Fetch public npm packages on demand.',
44
+ npm_registry: 'Fetch packages in selected scopes from another npm registry.',
45
+ };
46
+ const FIELD_LABELS = {
47
+ name: 'Source name',
48
+ ecosystem: 'Ecosystem',
49
+ type: 'Source type',
50
+ url: 'Repository URL',
51
+ userAgent: 'User-Agent override',
52
+ pollIntervalSeconds: 'Sync interval (seconds)',
53
+ removalPolicy: 'When a package disappears upstream',
54
+ defaultVisibleToNewProjects: 'Visible to new projects',
55
+ retentionDaysOverride: 'Archive retention (days)',
56
+ 'config/provider': 'Repository provider',
57
+ 'config/repository': 'GitHub repository',
58
+ 'config/installationId': 'GitHub App installation ID',
59
+ githubAuthentication: 'GitHub authentication',
60
+ 'config/packageName': 'Composer package name override',
61
+ 'config/refs/branches': 'Branches to import',
62
+ 'config/refs/tags': 'Import tags',
63
+ 'config/selection/packages': 'Package names (one per line)',
64
+ 'config/selection/patterns': 'Package patterns (one per line)',
65
+ 'config/selection/expandPatterns': 'Expand patterns',
66
+ 'config/distHosts': 'Additional archive hosts',
67
+ 'config/mirrorsFallback': 'Try repository mirrors if an archive download fails',
68
+ 'config/scopes': 'Package scopes (one per line)',
69
+ 'config/githubToken': 'Use GitHub token',
70
+ };
71
+ const FIELD_MESSAGES = {
72
+ name: 'Enter a source name.',
73
+ ecosystem: 'Choose an ecosystem.',
74
+ type: 'Choose a source type.',
75
+ url: 'Enter a valid HTTP or HTTPS URL without credentials, a query, or a fragment.',
76
+ userAgent: 'Enter a valid User-Agent header without line breaks.',
77
+ pollIntervalSeconds: 'Enter a whole number of seconds greater than 0.',
78
+ removalPolicy: 'Choose what happens when a package disappears upstream.',
79
+ defaultVisibleToNewProjects: 'Choose whether this source is visible to new projects.',
80
+ retentionDaysOverride: 'Enter a whole number of days that does not shorten organization retention.',
81
+ 'config/provider': 'Choose a repository provider this broker supports.',
82
+ 'config/repository': 'Enter a valid repository for the selected provider: owner/repository for GitHub, or a clone URL for Git.',
83
+ 'config/installationId': 'Enter a positive whole-number installation ID.',
84
+ githubAuthentication: 'Choose GitHub App or Personal access token.',
85
+ 'config/packageName': 'Enter a Composer package name, such as acme/payments.',
86
+ 'config/refs/branches': 'Enter valid branch names, one per line, without duplicates.',
87
+ 'config/refs/tags': 'Choose whether to import tags.',
88
+ 'config/selection/packages': 'Enter valid Composer package names, one per line, without duplicates.',
89
+ 'config/selection/patterns': 'Enter valid package patterns, such as acme/*, without duplicates.',
90
+ 'config/selection/expandPatterns': 'Choose whether to expand patterns.',
91
+ 'config/distHosts': 'Enter hostnames only, one per line, without schemes, paths, or duplicates.',
92
+ 'config/mirrorsFallback': 'Choose whether to try repository mirrors.',
93
+ 'config/scopes': 'Enter at least one scope, such as @acme, one per line without duplicates.',
94
+ 'config/githubToken': 'Save a bearer credential before enabling the GitHub token option.',
95
+ };
96
+ const HELP = {
97
+ pollIntervalSeconds: 'How often to check for upstream changes. 300 seconds = 5 minutes.',
98
+ retentionDaysOverride: 'Leave blank to use the organization setting. An override can only lengthen retention.',
99
+ 'config/distHosts': 'One hostname per line. Archive downloads may come from these hosts; the source credential is also sent to them.',
100
+ 'config/selection/packages': 'Packages matching either list are selected. Empty lists select no packages.',
101
+ 'config/scopes': 'One scope per line, including @. Only these scopes use this registry. Register @scope/* for each scope before enabling the source.',
102
+ 'config/packageName': 'Leave blank to use the name in composer.json.',
103
+ 'config/refs/branches': 'One branch name per line. Leave blank to import no branches.',
104
+ 'config/installationId': 'Enter the numeric installation ID for the account that owns this repository.',
105
+ };
106
+ const PLACEHOLDERS = {
107
+ userAgent: 'Use broker default',
108
+ retentionDaysOverride: 'Use organization default',
109
+ 'config/selection/packages': 'acme/payments',
110
+ 'config/selection/patterns': 'acme/*',
111
+ 'config/scopes': '@acme',
112
+ 'config/distHosts': 'downloads.example.com',
113
+ 'config/packageName': 'acme/payments',
114
+ 'config/refs/branches': 'main',
115
+ 'config/installationId': '12345678',
116
+ };
117
+ export function sourceFieldErrors(details) {
118
+ const errors = {};
119
+ for (const detail of details) {
120
+ const path = detail.path.replace(/^\/body\//, '').replace(/^\//, '');
121
+ const field = Object.keys(FIELD_LABELS).find((key) => path === key || path.startsWith(`${key}/`));
122
+ if (field)
123
+ errors[field] = FIELD_MESSAGES[field] ?? 'Review this setting.';
124
+ }
125
+ return errors;
126
+ }
127
+ export function validateSourceForm(data, type, editing, original = null, baseline = original ? sourceFormData(original) : null) {
128
+ const errors = {};
129
+ const value = (name) => String(data.get(name) ?? '').trim();
130
+ const whole = (name, minimum) => {
131
+ const number = Number(value(name));
132
+ if (!value(name) || !Number.isSafeInteger(number) || number < minimum)
133
+ errors[name] = FIELD_MESSAGES[name] ?? 'Review this setting.';
134
+ };
135
+ if (!editing && !value('name'))
136
+ errors.name = FIELD_MESSAGES['name'];
137
+ if ((type === 'composer_repository' || type === 'npm_registry') &&
138
+ (!editing || value('url') !== String(baseline?.get('url') ?? '')) &&
139
+ !value('url'))
140
+ errors.url = FIELD_MESSAGES['url'];
141
+ whole('pollIntervalSeconds', 1);
142
+ if (value('retentionDaysOverride'))
143
+ whole('retentionDaysOverride', 0);
144
+ const configChanged = !baseline ||
145
+ Object.keys(FIELD_LABELS).some((name) => (name.startsWith('config/') || (type === 'vcs' && name === 'githubAuthentication')) &&
146
+ String(data.get(name) ?? '') !== String(baseline.get(name) ?? ''));
147
+ if (configReplacementAllowed(original, data) &&
148
+ (configChanged || data.has('replaceConfig')) &&
149
+ (data.has('config/provider') ||
150
+ data.has('config/scopes') ||
151
+ data.has('config/selection/packages') ||
152
+ !editing)) {
153
+ if (type === 'composer_repository' &&
154
+ !value('config/selection/packages') &&
155
+ !value('config/selection/patterns'))
156
+ errors['config/selection/packages'] = 'Add at least one package name or pattern';
157
+ if (type === 'npm_registry' && !value('config/scopes'))
158
+ errors['config/scopes'] = FIELD_MESSAGES['config/scopes'];
159
+ if (type === 'vcs' && !value('config/repository'))
160
+ errors['config/repository'] = FIELD_MESSAGES['config/repository'];
161
+ if (type === 'vcs' &&
162
+ value('config/provider') === 'github' &&
163
+ value('githubAuthentication') !== 'token')
164
+ whole('config/installationId', 1);
165
+ }
166
+ return errors;
167
+ }
168
+ function integer(value, minimum) {
169
+ const number = Number(value);
170
+ if (!value.trim() || !Number.isSafeInteger(number) || number < minimum)
171
+ throw new Error('Enter valid whole numbers for the numeric fields.');
172
+ return number;
173
+ }
174
+ function sourceChanges(data, type, editing, includeConfig = true) {
175
+ const value = (name) => String(data.get(name) ?? '');
176
+ const checked = (name) => data.has(name);
177
+ const list = (name) => value(name)
178
+ .split(/\r?\n/)
179
+ .map((entry) => entry.trim())
180
+ .filter(Boolean);
181
+ const changes = {
182
+ pollIntervalSeconds: integer(value('pollIntervalSeconds'), 1),
183
+ removalPolicy: value('removalPolicy'),
184
+ };
185
+ changes.defaultVisibleToNewProjects = checked('defaultVisibleToNewProjects');
186
+ changes.retentionDaysOverride =
187
+ value('retentionDaysOverride').trim() === ''
188
+ ? null
189
+ : integer(value('retentionDaysOverride'), 0);
190
+ changes.userAgent = value('userAgent') || null;
191
+ if (type !== 'vcs')
192
+ changes.url = value('url') || null;
193
+ if (includeConfig &&
194
+ (!editing ||
195
+ data.has('config/provider') ||
196
+ data.has('config/scopes') ||
197
+ data.has('config/selection/packages') ||
198
+ type === 'packagist_proxy' ||
199
+ type === 'npmjs_proxy')) {
200
+ switch (type) {
201
+ case 'vcs':
202
+ changes.config = {
203
+ provider: value('config/provider'),
204
+ repository: value('config/repository'),
205
+ ...(value('config/provider') === 'github' && value('githubAuthentication') !== 'token'
206
+ ? { installationId: integer(value('config/installationId'), 1) }
207
+ : {}),
208
+ ...(value('config/packageName') ? { packageName: value('config/packageName') } : {}),
209
+ refs: { branches: list('config/refs/branches'), tags: checked('config/refs/tags') },
210
+ };
211
+ break;
212
+ case 'composer_repository':
213
+ changes.config = {
214
+ selection: {
215
+ packages: list('config/selection/packages'),
216
+ patterns: list('config/selection/patterns'),
217
+ expandPatterns: checked('config/selection/expandPatterns'),
218
+ },
219
+ distHosts: list('config/distHosts'),
220
+ mirrorsFallback: checked('config/mirrorsFallback'),
221
+ };
222
+ break;
223
+ case 'npm_registry':
224
+ changes.config = { scopes: list('config/scopes'), distHosts: list('config/distHosts') };
225
+ break;
226
+ case 'packagist_proxy':
227
+ changes.config = { githubToken: editing && checked('config/githubToken') };
228
+ break;
229
+ case 'npmjs_proxy':
230
+ changes.config = {};
231
+ break;
232
+ }
233
+ }
234
+ return changes;
235
+ }
236
+ function configReplacementAllowed(source, data) {
237
+ return (source === null ||
238
+ (source.config !== undefined && source.configComplete !== false) ||
239
+ data.has('replaceConfig'));
240
+ }
241
+ export function sourceSubmission(data, ecosystem, type, original, initialData = original ? sourceFormData(original) : null) {
242
+ const changes = sourceChanges(data, type, original !== null, configReplacementAllowed(original, data));
243
+ if (!original)
244
+ return { name: String(data.get('name') ?? ''), ecosystem, type, ...changes };
245
+ const baseline = sourceChanges(initialData ?? sourceFormData(original), type, true, original.config !== undefined && original.configComplete !== false);
246
+ return Object.fromEntries(Object.entries(changes).filter(([key, value]) => JSON.stringify(value) !== JSON.stringify(baseline[key])));
247
+ }
248
+ function sourceConfigValue(source, path) {
249
+ let value = source?.config;
250
+ for (const key of path.split('/')) {
251
+ if (typeof value !== 'object' || value === null)
252
+ return undefined;
253
+ value = value[key];
254
+ }
255
+ return value;
256
+ }
257
+ export function sourceFormData(source) {
258
+ const data = new FormData();
259
+ for (const name of Object.keys(FIELD_LABELS)) {
260
+ const value = name.startsWith('config/')
261
+ ? sourceConfigValue(source, name.slice(7))
262
+ : source[name];
263
+ if (typeof value === 'boolean') {
264
+ if (value)
265
+ data.set(name, 'on');
266
+ }
267
+ else if (Array.isArray(value))
268
+ data.set(name, value.join('\n'));
269
+ else if (value != null)
270
+ data.set(name, String(value));
271
+ }
272
+ if (source.type === 'packagist_proxy' || source.type === 'npmjs_proxy')
273
+ data.set('url', DEFAULT_URL[source.type]);
274
+ data.set('pollIntervalSeconds', String(source.pollIntervalSeconds));
275
+ data.set('removalPolicy', source.removalPolicy);
276
+ data.set('githubAuthentication', source.githubAuthentication ?? (sourceConfigValue(source, 'installationId') ? 'app' : 'token'));
277
+ return data;
278
+ }
279
+ export function scopeNamePatterns(scopes) {
280
+ return [
281
+ ...new Set(scopes
282
+ .split(/\r?\n/)
283
+ .map((scope) => scope.trim())
284
+ .filter((scope) => /^@[a-z0-9][a-z0-9._~-]*$/.test(scope))),
285
+ ].map((scope) => `${scope}/*`);
286
+ }
287
+ export function focusSourceError(form, errors) {
288
+ if (!form)
289
+ return;
290
+ const control = Array.from(form.elements).find((element) => (element.getAttribute('name') ?? '') in errors);
291
+ if (!control)
292
+ return;
293
+ const details = control.closest('details');
294
+ if (details)
295
+ details.open = true;
296
+ control.focus();
297
+ }
298
+ export function SourceForm({ source, busy, errors: serverErrors, alert, onSubmit, onClose, vcsProviders = DEFAULT_VCS_PROVIDERS, }) {
299
+ const [ecosystem, setEcosystem] = useState(source?.ecosystem ?? 'composer');
300
+ const [type, setType] = useState(source?.type ?? 'packagist_proxy');
301
+ const providerOptions = vcsProviderOptions(vcsProviders);
302
+ const firstProvider = providerOptions[0]?.[0] ?? 'github';
303
+ const [provider, setProvider] = useState(sourceConfigValue(source, 'provider') ?? firstProvider);
304
+ const providerOffered = providerOptions.some(([value]) => value === provider);
305
+ const vcsUnserved = type === 'vcs' && (providerOptions.length === 0 || !providerOffered);
306
+ useEffect(() => {
307
+ if (!source && !providerOffered && providerOptions.length > 0)
308
+ setProvider(firstProvider);
309
+ }, [source, providerOffered, providerOptions.length, firstProvider]);
310
+ const [githubAuthentication, setGithubAuthentication] = useState(source?.githubAuthentication ??
311
+ (source ? (sourceConfigValue(source, 'installationId') ? 'app' : 'token') : 'app'));
312
+ const [scopes, setScopes] = useState('');
313
+ const initialData = source ? sourceFormData(source) : null;
314
+ const incompleteConfig = source !== null && (source.configComplete === false || source.config === undefined);
315
+ const [replaceConfig, setReplaceConfig] = useState(false);
316
+ const [localErrors, setLocalErrors] = useState({});
317
+ const formRef = useRef(null);
318
+ const errors = { ...serverErrors, ...localErrors };
319
+ const editing = source !== null;
320
+ const proxy = type === 'packagist_proxy' || type === 'npmjs_proxy';
321
+ const configEnabled = !vcsUnserved && (!incompleteConfig || replaceConfig);
322
+ useEffect(() => {
323
+ focusSourceError(formRef.current, serverErrors);
324
+ }, [serverErrors]);
325
+ function describedBy(name) {
326
+ return ([HELP[name] && `source-${name}-help`, errors[name] && `source-${name}-error`]
327
+ .filter(Boolean)
328
+ .join(' ') || undefined);
329
+ }
330
+ function feedback(name) {
331
+ return (_jsxs(_Fragment, { children: [HELP[name] ? (_jsx("p", { id: `source-${name}-help`, className: "text-sm text-neutral-600", children: HELP[name] })) : null, errors[name] ? (_jsx("p", { id: `source-${name}-error`, className: "text-sm text-red-700", children: errors[name] })) : null] }));
332
+ }
333
+ function field(name, control, label = FIELD_LABELS[name]) {
334
+ return (_jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: `source-${name}`, children: label }), control, feedback(name)] }, name));
335
+ }
336
+ function input(name, options = {}) {
337
+ const props = {
338
+ id: `source-${name}`,
339
+ name,
340
+ required: options.required,
341
+ defaultValue: options.value ?? initialData?.get(name)?.toString(),
342
+ onChange: name === 'config/scopes'
343
+ ? (event) => setScopes(event.currentTarget.value)
344
+ : undefined,
345
+ placeholder: options.placeholder ?? PLACEHOLDERS[name],
346
+ 'aria-invalid': !!errors[name],
347
+ 'aria-describedby': describedBy(name),
348
+ };
349
+ return field(name, options.multiline ? (_jsx(Textarea, { ...props, rows: 3, className: "w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-base sm:text-sm" })) : (_jsx(Input, { ...props, className: "h-11 text-base sm:text-sm", type: options.number ? 'number' : 'text', inputMode: options.number ? 'numeric' : undefined, min: options.minimum, max: options.number ? Number.MAX_SAFE_INTEGER : undefined, step: options.number ? 1 : undefined, maxLength: name === 'url' ? 2048 : undefined })), `${options.label ?? FIELD_LABELS[name]}${options.required ? ' (required)' : ''}`);
350
+ }
351
+ function check(name, label = FIELD_LABELS[name], onChange, defaultChecked) {
352
+ return (_jsxs("div", { className: "grid gap-1", children: [_jsxs(Label, { className: "flex min-h-11 items-center gap-2", htmlFor: `source-${name}`, children: [_jsx("input", { type: "checkbox", id: `source-${name}`, name: name, defaultChecked: source ? initialData?.has(name) : defaultChecked, onChange: onChange ? (event) => onChange(event.currentTarget.checked) : undefined, "aria-invalid": !!errors[name], "aria-describedby": describedBy(name) }), label] }), feedback(name)] }, name));
353
+ }
354
+ function radios(name, value, choices, onChange, horizontal = false) {
355
+ return (_jsxs("fieldset", { className: "grid gap-1", "aria-describedby": describedBy(name), "aria-invalid": !!errors[name], children: [_jsx("legend", { className: "text-sm font-medium", children: FIELD_LABELS[name] }), _jsx("div", { className: horizontal ? 'flex gap-4' : 'grid gap-1', children: choices.map(([key, label, description]) => (_jsxs("label", { className: "flex min-h-11 cursor-pointer items-center gap-2 py-1", children: [_jsx("input", { type: "radio", name: name, value: key, checked: value === key, onChange: () => onChange(key), "aria-invalid": !!errors[name], "aria-describedby": describedBy(name) }), _jsxs("span", { children: [_jsx("span", { className: "text-sm font-medium", children: label }), description ? (_jsx("span", { className: "block text-sm text-neutral-600", children: description })) : null] })] }, key))) }), feedback(name)] }));
356
+ }
357
+ const namePlaceholder = {
358
+ packagist_proxy: 'Packagist',
359
+ npmjs_proxy: 'npmjs',
360
+ composer_repository: 'Acme Composer',
361
+ npm_registry: 'Acme npm',
362
+ vcs: 'Acme payments',
363
+ hosted: '',
364
+ }[type];
365
+ return (_jsx(Dialog, { open: true, onOpenChange: (open) => {
366
+ if (!open && !busy)
367
+ onClose();
368
+ }, children: _jsxs(DialogContent, { variant: "source", onCancel: (event) => {
369
+ if (busy)
370
+ event.preventDefault();
371
+ }, children: [_jsxs(DialogHeader, { className: "shrink-0 p-6 pr-16", children: [_jsx(DialogTitle, { children: editing ? 'Edit source' : 'Add source' }), _jsx(DialogDescription, { children: editing
372
+ ? `${source.name} · ${ecosystem === 'composer' ? 'Composer' : 'npm'} · ${SOURCE_TYPE_LABELS[type]}. Name, ecosystem and source type cannot be changed.`
373
+ : 'Add an upstream source for this organization or project.' })] }), _jsxs("form", { noValidate: true, ref: formRef, className: "flex min-h-0 min-w-0 flex-1 flex-col", onSubmit: (event) => {
374
+ event.preventDefault();
375
+ if (busy)
376
+ return;
377
+ const data = new FormData(event.currentTarget);
378
+ const next = validateSourceForm(data, type, editing, source, initialData);
379
+ setLocalErrors(next);
380
+ if (Object.keys(next).length) {
381
+ focusSourceError(formRef.current, next);
382
+ return;
383
+ }
384
+ onSubmit(sourceSubmission(data, ecosystem, type, source, initialData));
385
+ }, onInvalidCapture: (event) => {
386
+ const control = event.target;
387
+ const details = control.closest('details');
388
+ if (details)
389
+ details.open = true;
390
+ }, children: [_jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 pb-6", children: [alert || Object.keys(errors).length ? (_jsx("p", { role: "alert", className: "mb-4 text-sm text-red-700", children: Object.keys(errors).length ? 'Review the highlighted fields.' : alert })) : null, source ? (_jsxs("dl", { className: "detail-list mb-4", "aria-label": "Source identity", children: [_jsx("dt", { children: "Source ID" }), _jsx("dd", { children: _jsx(IdText, { value: source.id, label: "source ID" }) }), _jsx("dt", { children: "Source URL" }), _jsx("dd", { className: "break-all", children: displayUrl(source.url) ?? 'No displayable URL' }), _jsx("dt", { children: "Credential" }), _jsx("dd", { children: source.hasCredential ? 'credential set · write-only' : 'No credential set' }), 'attached' in source ? (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Attached to this project" }), _jsx("dd", { children: source.attached ? 'Yes' : 'No' })] })) : null] })) : null, _jsxs("fieldset", { disabled: busy, className: "grid min-w-0 gap-4", children: [!editing ? (_jsxs(_Fragment, { children: [radios('ecosystem', ecosystem, [
391
+ ['composer', 'Composer'],
392
+ ['npm', 'npm'],
393
+ ], (value) => {
394
+ const next = value;
395
+ setEcosystem(next);
396
+ setType(SOURCE_TYPES[next][0]);
397
+ setScopes('');
398
+ setLocalErrors({});
399
+ }, true), radios('type', type, SOURCE_TYPES[ecosystem]
400
+ .filter((value) => value !== 'vcs' || providerOptions.length > 0)
401
+ .map((value) => [value, SOURCE_TYPE_LABELS[value], TYPE_DESCRIPTIONS[value]]), (value) => {
402
+ setType(value);
403
+ setScopes('');
404
+ setProvider(firstProvider);
405
+ setGithubAuthentication('app');
406
+ setLocalErrors({});
407
+ }), input('name', { required: true, placeholder: namePlaceholder })] })) : (_jsx(_Fragment, { children: vcsUnserved ? (_jsx("p", { className: "text-sm", children: `Source type: ${SOURCE_TYPE_LABELS[type]}. This broker cannot change its repository settings.` })) : null })), proxy ? (_jsxs("p", { className: "break-words text-sm", children: ["Upstream URL: ", DEFAULT_URL[type]] })) : null, proxy ? (_jsx("input", { type: "hidden", name: "url", value: DEFAULT_URL[type] })) : null, !proxy && type !== 'vcs' ? (_jsx("div", { children: input('url', {
408
+ required: !editing || source.url !== null,
409
+ value: source?.url ?? '',
410
+ label: type === 'npm_registry' ? 'Registry URL' : 'Repository URL',
411
+ placeholder: type === 'npm_registry'
412
+ ? 'https://npm.example.com'
413
+ : 'https://composer.example.com',
414
+ }) }, `network:${type}`)) : null, incompleteConfig && !vcsUnserved ? (_jsxs("div", { className: "grid gap-1", children: [_jsx("p", { className: "text-sm text-neutral-600", children: "Some saved settings cannot be displayed. Replace the configuration only if you intend to overwrite all saved type-specific settings." }), check('replaceConfig', 'Replace type-specific configuration', setReplaceConfig)] })) : null, configEnabled ? (_jsxs("div", { className: "grid gap-4", children: [type === 'vcs' ? (_jsxs(_Fragment, { children: [field('config/provider', _jsx(Select, { id: "source-config/provider", name: "config/provider", value: provider, className: "h-11 text-base sm:text-sm", "aria-invalid": !!errors['config/provider'], "aria-describedby": describedBy('config/provider'), onChange: (event) => setProvider(event.currentTarget.value), children: providerOptions.map(([value, label]) => (_jsx("option", { value: value, children: label }, value))) })), _jsx("div", { children: input('config/repository', {
415
+ required: true,
416
+ label: provider === 'github'
417
+ ? 'GitHub repository'
418
+ : provider === 'git'
419
+ ? 'Git repository URL'
420
+ : 'SSH repository',
421
+ placeholder: provider === 'github'
422
+ ? 'acme/payments'
423
+ : provider === 'git'
424
+ ? 'https://git.example.com/acme/payments.git'
425
+ : 'git@git.example.com:acme/payments.git',
426
+ }) }, provider), provider === 'github' ? (_jsxs(_Fragment, { children: [editing ? (_jsxs(_Fragment, { children: [field('githubAuthentication', _jsx(Input, { id: "source-githubAuthentication", name: "githubAuthenticationDisplay", className: "h-11 text-base sm:text-sm", value: githubAuthentication === 'app'
427
+ ? 'GitHub App'
428
+ : 'Personal access token', readOnly: true })), _jsx("input", { type: "hidden", name: "githubAuthentication", value: githubAuthentication })] })) : (radios('githubAuthentication', githubAuthentication, [
429
+ [
430
+ 'app',
431
+ 'GitHub App',
432
+ 'Use an app installation with access to this repository.',
433
+ ],
434
+ [
435
+ 'token',
436
+ 'Personal access token',
437
+ 'Add your token after creating the source.',
438
+ ],
439
+ ], (value) => setGithubAuthentication(value))), githubAuthentication === 'app'
440
+ ? input('config/installationId', {
441
+ required: true,
442
+ number: true,
443
+ minimum: 1,
444
+ })
445
+ : null] })) : null] })) : null, type === 'composer_repository' ? (_jsxs(_Fragment, { children: [input('config/selection/packages', { multiline: true }), input('config/selection/patterns', { multiline: true })] })) : null, type === 'npm_registry' ? (_jsxs(_Fragment, { children: [input('config/scopes', { multiline: true }), !editing
446
+ ? field('registeredPatterns', _jsx("textarea", { id: "source-registeredPatterns", name: "registeredPatterns", rows: 3, readOnly: true, value: scopeNamePatterns(scopes).join('\n') }), 'Names to register after adding this source')
447
+ : null] })) : null] }, `primary:${type}`)) : null, !editing ? (_jsx("p", { className: "text-sm text-neutral-600", children: proxy
448
+ ? 'No credentials are needed to add this proxy.'
449
+ : type === 'vcs' && provider === 'github'
450
+ ? githubAuthentication === 'app'
451
+ ? 'After adding this source, save the GitHub App credentials.'
452
+ : 'After adding this source, save your GitHub personal access token as a bearer credential.'
453
+ : type === 'vcs' && provider === 'ssh'
454
+ ? 'After adding this source, save an SSH private key and known hosts.'
455
+ : 'After adding this source, save its credentials to finish setup.' })) : null, _jsxs("details", { className: "min-w-0", children: [_jsx("summary", { className: "min-h-11 cursor-pointer py-3 text-sm font-medium", children: "Advanced settings" }), _jsxs("div", { className: "grid gap-4 pt-2", children: [_jsx("p", { className: "text-sm text-neutral-600", children: "Optional sync, visibility, retention, and connection settings." }), configEnabled ? (_jsxs("div", { className: "grid gap-4", children: [type === 'composer_repository' || type === 'npm_registry'
456
+ ? input('config/distHosts', { multiline: true })
457
+ : null, type === 'composer_repository' ? (_jsxs(_Fragment, { children: [check('config/mirrorsFallback'), editing ? check('config/selection/expandPatterns') : null] })) : null, type === 'vcs' ? (_jsxs(_Fragment, { children: [input('config/packageName'), input('config/refs/branches', { multiline: true }), check('config/refs/tags', undefined, undefined, true)] })) : null, type === 'packagist_proxy' && editing ? check('config/githubToken') : null] }, `advanced:${type}`)) : null, type === 'packagist_proxy' && editing ? (_jsx("p", { className: "text-sm text-neutral-600", children: "To enable Use GitHub token, save a bearer credential with your GitHub token, then select Use GitHub token and save the source." })) : null, input('pollIntervalSeconds', {
458
+ number: true,
459
+ minimum: 1,
460
+ value: source?.pollIntervalSeconds ?? 300,
461
+ }), field('removalPolicy', _jsxs(Select, { id: "source-removalPolicy", name: "removalPolicy", className: "h-11 text-base sm:text-sm", "aria-invalid": !!errors.removalPolicy, "aria-describedby": describedBy('removalPolicy'), defaultValue: source?.removalPolicy ?? 'flag', children: [_jsx("option", { value: "flag", children: "Keep available and mark removed" }), _jsx("option", { value: "exclude", children: "Exclude from package resolution" })] })), check('defaultVisibleToNewProjects'), input('retentionDaysOverride', { number: true, minimum: 0 }), input('userAgent')] })] })] })] }), _jsxs(DialogFooter, { className: "shrink-0 border-t border-neutral-200 bg-white px-6 pt-4 pb-[max(1rem,env(safe-area-inset-bottom))]", children: [_jsx(Button, { className: "min-h-11", type: "button", variant: "outline", disabled: busy, onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", className: "min-h-11", disabled: busy, children: editing ? 'Save source' : 'Add source' })] })] })] }) }));
462
+ }
463
+ //# sourceMappingURL=source-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-form.js","sourceRoot":"","sources":["../../../src/pages/sources/source-form.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAGpE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAQxD,MAAM,mBAAmB,GAAgC;IACvD,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,cAAc;CACpB,CAAC;AACF,MAAM,qBAAqB,GAA2B,CAAC,QAAQ,CAAC,CAAC;AAEjE,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAChC,QAA2B;IAE3B,OAAQ,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAmB;SACvD,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACjD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAU,CAAC,CAAC;AAC3E,CAAC;AACD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,KAAK,CAAC;IAC3D,GAAG,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;CAC5B,CAAC;AACX,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,4BAA4B;IAC7C,WAAW,EAAE,4BAA4B;CAC1C,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,GAAG,EAAE,gBAAgB;IACrB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,sBAAsB;IACpC,MAAM,EAAE,mBAAmB;CAC5B,CAAC;AACF,MAAM,iBAAiB,GAAkD;IACvE,eAAe,EAAE,2CAA2C;IAC5D,mBAAmB,EACjB,yFAAyF;IAC3F,GAAG,EAAE,kEAAkE;IACvE,WAAW,EAAE,sCAAsC;IACnD,YAAY,EAAE,8DAA8D;CAC7E,CAAC;AACF,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,gBAAgB;IACrB,SAAS,EAAE,qBAAqB;IAChC,mBAAmB,EAAE,yBAAyB;IAC9C,aAAa,EAAE,oCAAoC;IACnD,2BAA2B,EAAE,yBAAyB;IACtD,qBAAqB,EAAE,0BAA0B;IACjD,iBAAiB,EAAE,qBAAqB;IACxC,mBAAmB,EAAE,mBAAmB;IACxC,uBAAuB,EAAE,4BAA4B;IACrD,oBAAoB,EAAE,uBAAuB;IAC7C,oBAAoB,EAAE,gCAAgC;IACtD,sBAAsB,EAAE,oBAAoB;IAC5C,kBAAkB,EAAE,aAAa;IACjC,2BAA2B,EAAE,8BAA8B;IAC3D,2BAA2B,EAAE,iCAAiC;IAC9D,iCAAiC,EAAE,iBAAiB;IACpD,kBAAkB,EAAE,0BAA0B;IAC9C,wBAAwB,EAAE,qDAAqD;IAC/E,eAAe,EAAE,+BAA+B;IAChD,oBAAoB,EAAE,kBAAkB;CACzC,CAAC;AACF,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,SAAS,EAAE,sBAAsB;IACjC,IAAI,EAAE,uBAAuB;IAC7B,GAAG,EAAE,8EAA8E;IACnF,SAAS,EAAE,sDAAsD;IACjE,mBAAmB,EAAE,iDAAiD;IACtE,aAAa,EAAE,yDAAyD;IACxE,2BAA2B,EAAE,wDAAwD;IACrF,qBAAqB,EACnB,4EAA4E;IAC9E,iBAAiB,EAAE,oDAAoD;IACvE,mBAAmB,EACjB,0GAA0G;IAC5G,uBAAuB,EAAE,gDAAgD;IACzE,oBAAoB,EAAE,6CAA6C;IACnE,oBAAoB,EAAE,uDAAuD;IAC7E,sBAAsB,EAAE,6DAA6D;IACrF,kBAAkB,EAAE,gCAAgC;IACpD,2BAA2B,EACzB,uEAAuE;IACzE,2BAA2B,EAAE,mEAAmE;IAChG,iCAAiC,EAAE,oCAAoC;IACvE,kBAAkB,EAAE,4EAA4E;IAChG,wBAAwB,EAAE,2CAA2C;IACrE,eAAe,EAAE,2EAA2E;IAC5F,oBAAoB,EAAE,mEAAmE;CAC1F,CAAC;AACF,MAAM,IAAI,GAA2B;IACnC,mBAAmB,EAAE,mEAAmE;IACxF,qBAAqB,EACnB,uFAAuF;IACzF,kBAAkB,EAChB,iHAAiH;IACnH,2BAA2B,EACzB,6EAA6E;IAC/E,eAAe,EACb,oIAAoI;IACtI,oBAAoB,EAAE,+CAA+C;IACrE,sBAAsB,EAAE,8DAA8D;IACtF,uBAAuB,EACrB,8EAA8E;CACjF,CAAC;AACF,MAAM,YAAY,GAA2B;IAC3C,SAAS,EAAE,oBAAoB;IAC/B,qBAAqB,EAAE,0BAA0B;IACjD,2BAA2B,EAAE,eAAe;IAC5C,2BAA2B,EAAE,QAAQ;IACrC,eAAe,EAAE,OAAO;IACxB,kBAAkB,EAAE,uBAAuB;IAC3C,oBAAoB,EAAE,eAAe;IACrC,sBAAsB,EAAE,MAAM;IAC9B,uBAAuB,EAAE,UAAU;CACpC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,OAAyB;IACzD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CACpD,CAAC;QACF,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,sBAAsB,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,IAA0B,EAC1B,OAAgB,EAChB,WAA0B,IAAI,EAC9B,WAA4B,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;IAEtE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,OAAO;YACnE,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC;IAClE,CAAC,CAAC;IACF,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,CAAE,CAAC;IACtE,IACE,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,KAAK,cAAc,CAAC;QAC3D,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC,KAAK,CAAC,KAAK,CAAC;QAEb,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,CAAE,CAAC;IACtC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,uBAAuB,CAAC;QAAE,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,aAAa,GACjB,CAAC,QAAQ;QACT,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAC5B,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,sBAAsB,CAAC,CAAC;YACnF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CACpE,CAAC;IACJ,IACE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;QACxC,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACrC,CAAC,OAAO,CAAC,EACX,CAAC;QACD,IACE,IAAI,KAAK,qBAAqB;YAC9B,CAAC,KAAK,CAAC,2BAA2B,CAAC;YACnC,CAAC,KAAK,CAAC,2BAA2B,CAAC;YAEnC,MAAM,CAAC,2BAA2B,CAAC,GAAG,0CAA0C,CAAC;QACnF,IAAI,IAAI,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;YACpD,MAAM,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,eAAe,CAAE,CAAC;QAC7D,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAC/C,MAAM,CAAC,mBAAmB,CAAC,GAAG,cAAc,CAAC,mBAAmB,CAAE,CAAC;QACrE,IACE,IAAI,KAAK,KAAK;YACd,KAAK,CAAC,iBAAiB,CAAC,KAAK,QAAQ;YACrC,KAAK,CAAC,sBAAsB,CAAC,KAAK,OAAO;YAEzC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,OAAe;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,OAAO;QACpE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,IAAc,EACd,IAA0B,EAC1B,OAAgB,EAChB,aAAa,GAAG,IAAI;IAEpB,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5B,KAAK,CAAC,IAAI,CAAC;SACR,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,OAAO,GAAkB;QAC7B,mBAAmB,EAAE,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC7D,aAAa,EAAE,KAAK,CAAC,eAAe,CAA4B;KACjE,CAAC;IACF,OAAO,CAAC,2BAA2B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC7E,OAAO,CAAC,qBAAqB;QAC3B,KAAK,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAC1C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IAC/C,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACvD,IACE,aAAa;QACb,CAAC,CAAC,OAAO;YACP,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACrC,IAAI,KAAK,iBAAiB;YAC1B,IAAI,KAAK,aAAa,CAAC,EACzB,CAAC;QACD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK;gBACR,OAAO,CAAC,MAAM,GAAG;oBACf,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAA6B;oBAC9D,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC;oBACtC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,sBAAsB,CAAC,KAAK,OAAO;wBACpF,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,EAAE;wBAChE,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpF,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;iBACpF,CAAC;gBACF,MAAM;YACR,KAAK,qBAAqB;gBACxB,OAAO,CAAC,MAAM,GAAG;oBACf,SAAS,EAAE;wBACT,QAAQ,EAAE,IAAI,CAAC,2BAA2B,CAAC;wBAC3C,QAAQ,EAAE,IAAI,CAAC,2BAA2B,CAAC;wBAC3C,cAAc,EAAE,OAAO,CAAC,iCAAiC,CAAC;qBAC3D;oBACD,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC;oBACnC,eAAe,EAAE,OAAO,CAAC,wBAAwB,CAAC;iBACnD,CAAC;gBACF,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACxF,MAAM;YACR,KAAK,iBAAiB;gBACpB,OAAO,CAAC,MAAM,GAAG,EAAE,WAAW,EAAE,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC3E,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;gBACpB,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAqB,EAAE,IAAc;IACrE,OAAO,CACL,MAAM,KAAK,IAAI;QACf,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC;QAChE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAc,EACd,SAAoC,EACpC,IAA0B,EAC1B,QAAuB,EACvB,cAA+B,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;IAEzE,MAAM,OAAO,GAAG,aAAa,CAC3B,IAAI,EACJ,IAAI,EACJ,QAAQ,KAAK,IAAI,EACjB,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,CACzC,CAAC;IACF,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5F,MAAM,QAAQ,GAAG,aAAa,CAC5B,WAAW,IAAI,cAAc,CAAC,QAAQ,CAAC,EACvC,IAAI,EACJ,IAAI,EACJ,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,KAAK,KAAK,CACnE,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAC5B,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAA0B,CAAC,CAAC,CACjF,CACe,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAqB,EAAE,IAAY;IAC5D,IAAI,KAAK,GAAY,MAAM,EAAE,MAAM,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAClE,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACtC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7D,IAAI,KAAK,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;QACpE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CACN,sBAAsB,EACtB,MAAM,CAAC,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAC/F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO;QACL,GAAG,IAAI,GAAG,CACR,MAAM;aACH,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7D;KACF,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAA4B,EAAE,MAA8B;IAC3F,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC5C,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CACjC,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,OAAO;QAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,YAAY,GAAG,qBAAqB,GASrC;IACC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CACxC,MAAM,EAAE,SAAS,IAAI,UAAU,CAChC,CAAC;IACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAuB,MAAM,EAAE,IAAI,IAAI,iBAAiB,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC1D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACrC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAA6B,IAAI,aAAa,CACpF,CAAC;IACF,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAG,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC5F,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAC9D,MAAM,EAAE,oBAAoB;QAC1B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CACrF,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,MAAM,gBAAgB,GACpB,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACtF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,aAAa,CAAC;IACnE,MAAM,aAAa,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,gBAAgB,IAAI,aAAa,CAAC,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,SAAS,WAAW,CAAC,IAAY;QAC/B,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,QAAQ,CAAC;aAC1E,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAC1B,CAAC;IACJ,CAAC;IACD,SAAS,QAAQ,CAAC,IAAY;QAC5B,OAAO,CACL,8BACG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACZ,YAAG,EAAE,EAAE,UAAU,IAAI,OAAO,EAAE,SAAS,EAAC,0BAA0B,YAC/D,IAAI,CAAC,IAAI,CAAC,GACT,CACL,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACd,YAAG,EAAE,EAAE,UAAU,IAAI,QAAQ,EAAE,SAAS,EAAC,sBAAsB,YAC5D,MAAM,CAAC,IAAI,CAAC,GACX,CACL,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;IACJ,CAAC;IACD,SAAS,KAAK,CAAC,IAAY,EAAE,OAAkB,EAAE,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC;QACzE,OAAO,CACL,eAAK,SAAS,EAAC,YAAY,aACzB,KAAC,KAAK,IAAC,OAAO,EAAE,UAAU,IAAI,EAAE,YAAG,KAAK,GAAS,EAChD,OAAO,EACP,QAAQ,CAAC,IAAI,CAAC,KAHgB,IAAI,CAI/B,CACP,CAAC;IACJ,CAAC;IACD,SAAS,KAAK,CACZ,IAAY,EACZ,UAQI,EAAE;QAEN,MAAM,KAAK,GAAG;YACZ,EAAE,EAAE,UAAU,IAAI,EAAE;YACpB,IAAI;YACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;YACjE,QAAQ,EACN,IAAI,KAAK,eAAe;gBACtB,CAAC,CAAC,CAAC,KAA2C,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;gBACvF,CAAC,CAAC,SAAS;YACf,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,IAAI,CAAC;YACtD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YAC9B,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC;SACtC,CAAC;QACF,OAAO,KAAK,CACV,IAAI,EACJ,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAClB,KAAC,QAAQ,OACH,KAAK,EACT,IAAI,EAAE,CAAC,EACP,SAAS,EAAC,qFAAqF,GAC/F,CACH,CAAC,CAAC,CAAC,CACF,KAAC,KAAK,OACA,KAAK,EACT,SAAS,EAAC,2BAA2B,EACrC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EACxC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACjD,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EACzD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACpC,SAAS,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAC5C,CACH,EACD,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CACjF,CAAC;IACJ,CAAC;IACD,SAAS,KAAK,CACZ,IAAY,EACZ,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,EAC1B,QAAqC,EACrC,cAAwB;QAExB,OAAO,CACL,eAAK,SAAS,EAAC,YAAY,aACzB,MAAC,KAAK,IAAC,SAAS,EAAC,kCAAkC,EAAC,OAAO,EAAE,UAAU,IAAI,EAAE,aAC3E,gBACE,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,UAAU,IAAI,EAAE,EACpB,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAChE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,kBACnE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,sBACV,WAAW,CAAC,IAAI,CAAC,GACnC,EACD,KAAK,IACA,EACP,QAAQ,CAAC,IAAI,CAAC,KAbgB,IAAI,CAc/B,CACP,CAAC;IACJ,CAAC;IACD,SAAS,MAAM,CACb,IAAY,EACZ,KAAa,EACb,OAAsE,EACtE,QAAiC,EACjC,UAAU,GAAG,KAAK;QAElB,OAAO,CACL,oBACE,SAAS,EAAC,YAAY,sBACJ,WAAW,CAAC,IAAI,CAAC,kBACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAE5B,iBAAQ,SAAS,EAAC,qBAAqB,YAAE,YAAY,CAAC,IAAI,CAAC,GAAU,EACrE,cAAK,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,YACrD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAC1C,iBAAiB,SAAS,EAAC,sDAAsD,aAC/E,gBACE,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,KAAK,KAAK,GAAG,EACtB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,kBACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,sBACV,WAAW,CAAC,IAAI,CAAC,GACnC,EACF,2BACE,eAAM,SAAS,EAAC,qBAAqB,YAAE,KAAK,GAAQ,EACnD,WAAW,CAAC,CAAC,CAAC,CACb,eAAM,SAAS,EAAC,gCAAgC,YAAE,WAAW,GAAQ,CACtE,CAAC,CAAC,CAAC,IAAI,IACH,KAfG,GAAG,CAgBP,CACT,CAAC,GACE,EACL,QAAQ,CAAC,IAAI,CAAC,IACN,CACZ,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG;QACtB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,OAAO;QACpB,mBAAmB,EAAE,eAAe;QACpC,YAAY,EAAE,UAAU;QACxB,GAAG,EAAE,eAAe;QACpB,MAAM,EAAE,EAAE;KACX,CAAC,IAAI,CAAC,CAAC;IACR,OAAO,CACL,KAAC,MAAM,IACL,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;QAChC,CAAC,YAED,MAAC,aAAa,IACZ,OAAO,EAAC,QAAQ,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,IAAI;oBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACnC,CAAC,aAED,MAAC,YAAY,IAAC,SAAS,EAAC,oBAAoB,aAC1C,KAAC,WAAW,cAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,GAAe,EACnE,KAAC,iBAAiB,cACf,OAAO;gCACN,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,MAAM,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,kBAAkB,CAAC,IAAI,CAAC,sDAAsD;gCACvJ,CAAC,CAAC,0DAA0D,GAC5C,IACP,EACf,gBACE,UAAU,QACV,GAAG,EAAE,OAAO,EACZ,SAAS,EAAC,sCAAsC,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,IAAI;4BAAE,OAAO;wBACjB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;wBAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;wBAC1E,cAAc,CAAC,IAAI,CAAC,CAAC;wBACrB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;4BAC7B,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;4BACxC,OAAO;wBACT,CAAC;wBACD,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;oBACzE,CAAC,EACD,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;wBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,MAA0B,CAAC;wBACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBAC3C,IAAI,OAAO;4BAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;oBACnC,CAAC,aAED,eAAK,SAAS,EAAC,0CAA0C,aACtD,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CACrC,YAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,2BAA2B,YAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,KAAK,GACpE,CACL,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,CAAC,CAAC,CAAC,CACR,cAAI,SAAS,EAAC,kBAAkB,gBAAY,iBAAiB,aAC3D,qCAAkB,EAClB,uBACE,KAAC,MAAM,IAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAC,WAAW,GAAG,GAC3C,EACL,sCAAmB,EACnB,aAAI,SAAS,EAAC,WAAW,YAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,oBAAoB,GAAM,EAC/E,sCAAmB,EACnB,uBACG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,GACxE,EACJ,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,CACtB,8BACE,oDAAiC,EACjC,uBAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAM,IACxC,CACJ,CAAC,CAAC,CAAC,IAAI,IACL,CACN,CAAC,CAAC,CAAC,IAAI,EACR,oBAAU,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,oBAAoB,aACrD,CAAC,OAAO,CAAC,CAAC,CAAC,CACV,8BACG,MAAM,CACL,WAAW,EACX,SAAS,EACT;oDACE,CAAC,UAAU,EAAE,UAAU,CAAC;oDACxB,CAAC,KAAK,EAAE,KAAK,CAAC;iDACf,EACD,CAAC,KAAK,EAAE,EAAE;oDACR,MAAM,IAAI,GAAG,KAAkC,CAAC;oDAChD,YAAY,CAAC,IAAI,CAAC,CAAC;oDACnB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oDAC/B,SAAS,CAAC,EAAE,CAAC,CAAC;oDACd,cAAc,CAAC,EAAE,CAAC,CAAC;gDACrB,CAAC,EACD,IAAI,CACL,EACA,MAAM,CACL,MAAM,EACN,IAAI,EACJ,YAAY,CAAC,SAAS,CAAC;qDACpB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;qDAChE,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAU,CACxE,EACH,CAAC,KAAK,EAAE,EAAE;oDACR,OAAO,CAAC,KAA6B,CAAC,CAAC;oDACvC,SAAS,CAAC,EAAE,CAAC,CAAC;oDACd,WAAW,CAAC,aAAa,CAAC,CAAC;oDAC3B,uBAAuB,CAAC,KAAK,CAAC,CAAC;oDAC/B,cAAc,CAAC,EAAE,CAAC,CAAC;gDACrB,CAAC,CACF,EACA,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,IAC/D,CACJ,CAAC,CAAC,CAAC,CACF,4BACG,WAAW,CAAC,CAAC,CAAC,CACb,YAAG,SAAS,EAAC,SAAS,YACnB,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,sDAAsD,GAC7F,CACL,CAAC,CAAC,CAAC,IAAI,GACP,CACJ,EACA,KAAK,CAAC,CAAC,CAAC,CACP,aAAG,SAAS,EAAC,qBAAqB,+BACjB,WAAW,CAAC,IAAgC,CAAC,IAC1D,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,CACP,gBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,EACV,KAAK,EAAE,WAAW,CAAC,IAAgC,CAAC,GACpD,CACH,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAC1B,wBACG,KAAK,CAAC,KAAK,EAAE;gDACZ,QAAQ,EAAE,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI;gDACzC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;gDACxB,KAAK,EAAE,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB;gDAClE,WAAW,EACT,IAAI,KAAK,cAAc;oDACrB,CAAC,CAAC,yBAAyB;oDAC3B,CAAC,CAAC,8BAA8B;6CACrC,CAAC,IATM,WAAW,IAAI,EAAE,CAUrB,CACP,CAAC,CAAC,CAAC,IAAI,EACP,gBAAgB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClC,eAAK,SAAS,EAAC,YAAY,aACzB,YAAG,SAAS,EAAC,0BAA0B,qJAGnC,EACH,KAAK,CAAC,eAAe,EAAE,qCAAqC,EAAE,gBAAgB,CAAC,IAC5E,CACP,CAAC,CAAC,CAAC,IAAI,EACP,aAAa,CAAC,CAAC,CAAC,CACf,eAAK,SAAS,EAAC,YAAY,aACxB,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAChB,8BACG,KAAK,CACJ,iBAAiB,EACjB,KAAC,MAAM,IACL,EAAE,EAAC,wBAAwB,EAC3B,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAC,2BAA2B,kBACvB,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBACvB,WAAW,CAAC,iBAAiB,CAAC,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,KAAwB,CAAC,YAG1D,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACvC,iBAAoB,KAAK,EAAE,KAAK,YAC7B,KAAK,IADK,KAAK,CAET,CACV,CAAC,GACK,CACV,EACD,wBACG,KAAK,CAAC,mBAAmB,EAAE;gEAC1B,QAAQ,EAAE,IAAI;gEACd,KAAK,EACH,QAAQ,KAAK,QAAQ;oEACnB,CAAC,CAAC,mBAAmB;oEACrB,CAAC,CAAC,QAAQ,KAAK,KAAK;wEAClB,CAAC,CAAC,oBAAoB;wEACtB,CAAC,CAAC,gBAAgB;gEACxB,WAAW,EACT,QAAQ,KAAK,QAAQ;oEACnB,CAAC,CAAC,eAAe;oEACjB,CAAC,CAAC,QAAQ,KAAK,KAAK;wEAClB,CAAC,CAAC,2CAA2C;wEAC7C,CAAC,CAAC,uCAAuC;6DAChD,CAAC,IAfM,QAAQ,CAgBZ,EACL,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CACvB,8BACG,OAAO,CAAC,CAAC,CAAC,CACT,8BACG,KAAK,CACJ,sBAAsB,EACtB,KAAC,KAAK,IACJ,EAAE,EAAC,6BAA6B,EAChC,IAAI,EAAC,6BAA6B,EAClC,SAAS,EAAC,2BAA2B,EACrC,KAAK,EACH,oBAAoB,KAAK,KAAK;gFAC5B,CAAC,CAAC,YAAY;gFACd,CAAC,CAAC,uBAAuB,EAE7B,QAAQ,SACR,CACH,EACD,gBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,sBAAsB,EAC3B,KAAK,EAAE,oBAAoB,GAC3B,IACD,CACJ,CAAC,CAAC,CAAC,CACF,MAAM,CACJ,sBAAsB,EACtB,oBAAoB,EACpB;oEACE;wEACE,KAAK;wEACL,YAAY;wEACZ,yDAAyD;qEAC1D;oEACD;wEACE,OAAO;wEACP,uBAAuB;wEACvB,2CAA2C;qEAC5C;iEACF,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAwB,CAAC,CAC7D,CACF,EACA,oBAAoB,KAAK,KAAK;oEAC7B,CAAC,CAAC,KAAK,CAAC,uBAAuB,EAAE;wEAC7B,QAAQ,EAAE,IAAI;wEACd,MAAM,EAAE,IAAI;wEACZ,OAAO,EAAE,CAAC;qEACX,CAAC;oEACJ,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAChC,8BACG,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EACvD,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IACvD,CACJ,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CACzB,8BACG,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAC3C,CAAC,OAAO;4DACP,CAAC,CAAC,KAAK,CACH,oBAAoB,EACpB,mBACE,EAAE,EAAC,2BAA2B,EAC9B,IAAI,EAAC,oBAAoB,EACzB,IAAI,EAAE,CAAC,EACP,QAAQ,QACR,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAC3C,EACF,4CAA4C,CAC7C;4DACH,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,IAAI,KArHuB,WAAW,IAAI,EAAE,CAsH5C,CACP,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,OAAO,CAAC,CAAC,CAAC,CACV,YAAG,SAAS,EAAC,0BAA0B,YACpC,KAAK;gDACJ,CAAC,CAAC,8CAA8C;gDAChD,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,QAAQ;oDACvC,CAAC,CAAC,oBAAoB,KAAK,KAAK;wDAC9B,CAAC,CAAC,4DAA4D;wDAC9D,CAAC,CAAC,0FAA0F;oDAC9F,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;wDACpC,CAAC,CAAC,oEAAoE;wDACtE,CAAC,CAAC,iEAAiE,GACvE,CACL,CAAC,CAAC,CAAC,IAAI,EACR,mBAAS,SAAS,EAAC,SAAS,aAC1B,kBAAS,SAAS,EAAC,kDAAkD,kCAE3D,EACV,eAAK,SAAS,EAAC,iBAAiB,aAC9B,YAAG,SAAS,EAAC,0BAA0B,+EAEnC,EACH,aAAa,CAAC,CAAC,CAAC,CACf,eAAK,SAAS,EAAC,YAAY,aACxB,IAAI,KAAK,qBAAqB,IAAI,IAAI,KAAK,cAAc;oEACxD,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oEAChD,CAAC,CAAC,IAAI,EACP,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAChC,8BACG,KAAK,CAAC,wBAAwB,CAAC,EAC/B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,IAAI,IACzD,CACJ,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAChB,8BACG,KAAK,CAAC,oBAAoB,CAAC,EAC3B,KAAK,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAClD,KAAK,CAAC,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IACrD,CACJ,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,KAjB5C,YAAY,IAAI,EAAE,CAkB7C,CACP,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,CAAC,CAAC,CACvC,YAAG,SAAS,EAAC,0BAA0B,+IAGnC,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,qBAAqB,EAAE;4DAC5B,MAAM,EAAE,IAAI;4DACZ,OAAO,EAAE,CAAC;4DACV,KAAK,EAAE,MAAM,EAAE,mBAAmB,IAAI,GAAG;yDAC1C,CAAC,EACD,KAAK,CACJ,eAAe,EACf,MAAC,MAAM,IACL,EAAE,EAAC,sBAAsB,EACzB,IAAI,EAAC,eAAe,EACpB,SAAS,EAAC,2BAA2B,kBACvB,CAAC,CAAC,MAAM,CAAC,aAAa,sBAClB,WAAW,CAAC,eAAe,CAAC,EAC9C,YAAY,EAAE,MAAM,EAAE,aAAa,IAAI,MAAM,aAE7C,iBAAQ,KAAK,EAAC,MAAM,gDAAyC,EAC7D,iBAAQ,KAAK,EAAC,SAAS,gDAAyC,IACzD,CACV,EACA,KAAK,CAAC,6BAA6B,CAAC,EACpC,KAAK,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC5D,KAAK,CAAC,WAAW,CAAC,IACf,IACE,IACD,IACP,EACN,MAAC,YAAY,IAAC,SAAS,EAAC,oGAAoG,aAC1H,KAAC,MAAM,IACL,SAAS,EAAC,UAAU,EACpB,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,OAAO,uBAGT,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,QAAQ,EAAE,IAAI,YACtD,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,GAChC,IACI,IACV,IACO,GACT,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const SYNC_POLL_INTERVAL_MS = 2000;
2
+ export declare const SYNC_POLL_ATTEMPTS = 15;
3
+ type SyncStatus = {
4
+ sync?: {
5
+ generation: string;
6
+ listing: boolean;
7
+ queued: number;
8
+ running: number;
9
+ retrying?: number;
10
+ };
11
+ status: string;
12
+ lastPolledAt: string | null;
13
+ lastSuccessAt: string | null;
14
+ lastError: string | null;
15
+ };
16
+ export declare function syncStatusChanged(before: SyncStatus, after: SyncStatus): boolean;
17
+ export declare function syncPollResult(before: SyncStatus, after: SyncStatus): boolean | 'pending';
18
+ export declare function pollSync(refresh: () => Promise<boolean | 'pending'>, visibility?: Pick<Document, 'hidden' | 'addEventListener' | 'removeEventListener'> | undefined): () => void;
19
+ export {};
20
+ //# sourceMappingURL=sync-poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-poll.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/sync-poll.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAC3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAIrC,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,WAQtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAOzF;AAED,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,EAC3C,UAAU,GACN,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,GAAG,qBAAqB,CAAC,GACrE,SAAkE,cAmDvE"}
@@ -0,0 +1,71 @@
1
+ export const SYNC_POLL_INTERVAL_MS = 2_000;
2
+ export const SYNC_POLL_ATTEMPTS = 15;
3
+ const PENDING_POLL_MAX_MS = 600_000;
4
+ const PENDING_POLL_MAX_INTERVAL_MS = 30_000;
5
+ export function syncStatusChanged(before, after) {
6
+ return (before.sync?.generation !== after.sync?.generation ||
7
+ before.status !== after.status ||
8
+ before.lastPolledAt !== after.lastPolledAt ||
9
+ before.lastSuccessAt !== after.lastSuccessAt ||
10
+ before.lastError !== after.lastError);
11
+ }
12
+ export function syncPollResult(before, after) {
13
+ if (after.sync &&
14
+ (after.sync.listing || after.sync.queued + after.sync.running + (after.sync.retrying ?? 0) > 0))
15
+ return 'pending';
16
+ return syncStatusChanged(before, after);
17
+ }
18
+ export function pollSync(refresh, visibility = typeof document === 'undefined' ? undefined : document) {
19
+ const expiresAt = Date.now() + PENDING_POLL_MAX_MS;
20
+ let stopped = false;
21
+ let attempts = 0;
22
+ let pending = false;
23
+ let interval = SYNC_POLL_INTERVAL_MS;
24
+ let timer;
25
+ const deadline = setTimeout(() => stop(), PENDING_POLL_MAX_MS);
26
+ const stop = () => {
27
+ stopped = true;
28
+ clearTimeout(timer);
29
+ clearTimeout(deadline);
30
+ visibility?.removeEventListener('visibilitychange', changed);
31
+ };
32
+ const changed = () => {
33
+ if (visibility?.hidden)
34
+ stop();
35
+ };
36
+ const schedule = () => {
37
+ if (stopped ||
38
+ visibility?.hidden ||
39
+ Date.now() >= expiresAt ||
40
+ (!pending && attempts >= SYNC_POLL_ATTEMPTS)) {
41
+ stop();
42
+ return;
43
+ }
44
+ timer = setTimeout(() => {
45
+ if (stopped || visibility?.hidden || Date.now() >= expiresAt) {
46
+ stop();
47
+ return;
48
+ }
49
+ attempts++;
50
+ void refresh().then((complete) => {
51
+ if (complete === 'pending') {
52
+ attempts = 0;
53
+ pending = true;
54
+ interval = Math.min(interval * 2, PENDING_POLL_MAX_INTERVAL_MS);
55
+ }
56
+ else {
57
+ pending = false;
58
+ interval = SYNC_POLL_INTERVAL_MS;
59
+ }
60
+ if (complete === true)
61
+ stop();
62
+ else
63
+ schedule();
64
+ }, stop);
65
+ }, interval);
66
+ };
67
+ visibility?.addEventListener('visibilitychange', changed);
68
+ schedule();
69
+ return stop;
70
+ }
71
+ //# sourceMappingURL=sync-poll.js.map