@translation-cms/sync 1.2.1 → 1.2.4

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 (161) hide show
  1. package/dist/bin.d.ts +25 -0
  2. package/dist/bin.d.ts.map +1 -0
  3. package/dist/bin.js +173 -0
  4. package/dist/bin.js.map +1 -0
  5. package/dist/commands/init.d.ts +2 -0
  6. package/dist/commands/init.d.ts.map +1 -0
  7. package/dist/commands/init.js +68 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/commands/pull.d.ts +3 -0
  10. package/dist/commands/pull.d.ts.map +1 -0
  11. package/dist/commands/pull.js +22 -0
  12. package/dist/commands/pull.js.map +1 -0
  13. package/dist/commands/status.d.ts +3 -0
  14. package/dist/commands/status.d.ts.map +1 -0
  15. package/dist/commands/status.js +46 -0
  16. package/dist/commands/status.js.map +1 -0
  17. package/dist/commands/sync.d.ts +10 -0
  18. package/dist/commands/sync.d.ts.map +1 -0
  19. package/dist/commands/sync.js +20 -0
  20. package/dist/commands/sync.js.map +1 -0
  21. package/dist/commands/watch.d.ts +4 -0
  22. package/dist/commands/watch.d.ts.map +1 -0
  23. package/dist/commands/watch.js +51 -0
  24. package/dist/commands/watch.js.map +1 -0
  25. package/dist/{load-config.d.ts → config/resolve-config.d.ts} +13 -10
  26. package/dist/config/resolve-config.d.ts.map +1 -0
  27. package/dist/{resolve-config.js → config/resolve-config.js} +21 -0
  28. package/dist/config/resolve-config.js.map +1 -0
  29. package/dist/core/api-internals/helpers.d.ts +9 -0
  30. package/dist/core/api-internals/helpers.d.ts.map +1 -0
  31. package/dist/core/api-internals/helpers.js +14 -0
  32. package/dist/core/api-internals/helpers.js.map +1 -0
  33. package/dist/core/api-internals/pull.d.ts +11 -0
  34. package/dist/core/api-internals/pull.d.ts.map +1 -0
  35. package/dist/core/api-internals/pull.js +124 -0
  36. package/dist/core/api-internals/pull.js.map +1 -0
  37. package/dist/core/api-internals/route-config.d.ts +13 -0
  38. package/dist/core/api-internals/route-config.d.ts.map +1 -0
  39. package/dist/core/api-internals/route-config.js +34 -0
  40. package/dist/core/api-internals/route-config.js.map +1 -0
  41. package/dist/core/api-internals/sync.d.ts +12 -0
  42. package/dist/core/api-internals/sync.d.ts.map +1 -0
  43. package/dist/core/api-internals/sync.js +95 -0
  44. package/dist/core/api-internals/sync.js.map +1 -0
  45. package/dist/core/api-internals/types.d.ts +25 -0
  46. package/dist/core/api-internals/types.d.ts.map +1 -0
  47. package/dist/core/api-internals/types.js +5 -0
  48. package/dist/core/api-internals/types.js.map +1 -0
  49. package/dist/core/api.d.ts +11 -0
  50. package/dist/core/api.d.ts.map +1 -0
  51. package/dist/core/api.js +11 -0
  52. package/dist/core/api.js.map +1 -0
  53. package/dist/{sync.d.ts → core/cache.d.ts} +5 -33
  54. package/dist/core/cache.d.ts.map +1 -0
  55. package/dist/core/cache.js +143 -0
  56. package/dist/core/cache.js.map +1 -0
  57. package/dist/core/scanner-internals/ast.d.ts +22 -0
  58. package/dist/core/scanner-internals/ast.d.ts.map +1 -0
  59. package/dist/core/scanner-internals/ast.js +80 -0
  60. package/dist/core/scanner-internals/ast.js.map +1 -0
  61. package/dist/core/scanner-internals/file-walker.d.ts +9 -0
  62. package/dist/core/scanner-internals/file-walker.d.ts.map +1 -0
  63. package/dist/core/scanner-internals/file-walker.js +25 -0
  64. package/dist/core/scanner-internals/file-walker.js.map +1 -0
  65. package/dist/core/scanner-internals/import-resolver.d.ts +13 -0
  66. package/dist/core/scanner-internals/import-resolver.d.ts.map +1 -0
  67. package/dist/core/scanner-internals/import-resolver.js +124 -0
  68. package/dist/core/scanner-internals/import-resolver.js.map +1 -0
  69. package/dist/core/scanner-internals/key-extractor.d.ts +16 -0
  70. package/dist/core/scanner-internals/key-extractor.d.ts.map +1 -0
  71. package/dist/core/scanner-internals/key-extractor.js +172 -0
  72. package/dist/core/scanner-internals/key-extractor.js.map +1 -0
  73. package/dist/core/scanner-internals/route-detector.d.ts +19 -0
  74. package/dist/core/scanner-internals/route-detector.d.ts.map +1 -0
  75. package/dist/core/scanner-internals/route-detector.js +74 -0
  76. package/dist/core/scanner-internals/route-detector.js.map +1 -0
  77. package/dist/core/scanner-internals/types.d.ts +53 -0
  78. package/dist/core/scanner-internals/types.d.ts.map +1 -0
  79. package/dist/core/scanner-internals/types.js +29 -0
  80. package/dist/core/scanner-internals/types.js.map +1 -0
  81. package/dist/core/scanner.d.ts +20 -0
  82. package/dist/core/scanner.d.ts.map +1 -0
  83. package/dist/core/scanner.js +113 -0
  84. package/dist/core/scanner.js.map +1 -0
  85. package/dist/index.d.ts +2 -2
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -2
  88. package/dist/index.js.map +1 -1
  89. package/dist/preview/index.d.ts +38 -0
  90. package/dist/preview/index.d.ts.map +1 -0
  91. package/dist/preview/index.js +114 -0
  92. package/dist/preview/index.js.map +1 -0
  93. package/dist/preview/internals/highlight.d.ts +22 -0
  94. package/dist/preview/internals/highlight.d.ts.map +1 -0
  95. package/dist/preview/internals/highlight.js +153 -0
  96. package/dist/preview/internals/highlight.js.map +1 -0
  97. package/dist/preview/internals/interactions.d.ts +15 -0
  98. package/dist/preview/internals/interactions.d.ts.map +1 -0
  99. package/dist/preview/internals/interactions.js +38 -0
  100. package/dist/preview/internals/interactions.js.map +1 -0
  101. package/dist/preview/internals/locales.d.ts +9 -0
  102. package/dist/preview/internals/locales.d.ts.map +1 -0
  103. package/dist/preview/internals/locales.js +24 -0
  104. package/dist/preview/internals/locales.js.map +1 -0
  105. package/dist/preview/internals/state.d.ts +35 -0
  106. package/dist/preview/internals/state.d.ts.map +1 -0
  107. package/dist/preview/internals/state.js +65 -0
  108. package/dist/preview/internals/state.js.map +1 -0
  109. package/dist/preview/internals/styles.d.ts +8 -0
  110. package/dist/preview/internals/styles.d.ts.map +1 -0
  111. package/dist/preview/internals/styles.js +28 -0
  112. package/dist/preview/internals/styles.js.map +1 -0
  113. package/dist/preview/internals/types.d.ts +49 -0
  114. package/dist/preview/internals/types.d.ts.map +1 -0
  115. package/dist/preview/internals/types.js +5 -0
  116. package/dist/preview/internals/types.js.map +1 -0
  117. package/dist/scaffold/index.d.ts +3 -0
  118. package/dist/scaffold/index.d.ts.map +1 -0
  119. package/dist/scaffold/index.js +3 -0
  120. package/dist/scaffold/index.js.map +1 -0
  121. package/dist/scaffold/intenrals/scaffold.d.ts +7 -0
  122. package/dist/scaffold/intenrals/scaffold.d.ts.map +1 -0
  123. package/dist/scaffold/intenrals/scaffold.js +34 -0
  124. package/dist/scaffold/intenrals/scaffold.js.map +1 -0
  125. package/dist/scaffold/intenrals/templates.d.ts +10 -0
  126. package/dist/scaffold/intenrals/templates.d.ts.map +1 -0
  127. package/dist/{scaffold.js → scaffold/intenrals/templates.js} +10 -38
  128. package/dist/scaffold/intenrals/templates.js.map +1 -0
  129. package/dist/{scaffold.d.ts → scaffold/intenrals/types.d.ts} +4 -2
  130. package/dist/scaffold/intenrals/types.d.ts.map +1 -0
  131. package/dist/scaffold/intenrals/types.js +5 -0
  132. package/dist/scaffold/intenrals/types.js.map +1 -0
  133. package/package.json +7 -7
  134. package/schema.json +64 -0
  135. package/dist/cli-entry.d.ts +0 -3
  136. package/dist/cli-entry.d.ts.map +0 -1
  137. package/dist/cli-entry.js +0 -390
  138. package/dist/cli-entry.js.map +0 -1
  139. package/dist/cli.d.ts +0 -16
  140. package/dist/cli.d.ts.map +0 -1
  141. package/dist/cli.js +0 -16
  142. package/dist/cli.js.map +0 -1
  143. package/dist/load-config.d.ts.map +0 -1
  144. package/dist/load-config.js +0 -24
  145. package/dist/load-config.js.map +0 -1
  146. package/dist/preview.d.ts +0 -88
  147. package/dist/preview.d.ts.map +0 -1
  148. package/dist/preview.js +0 -461
  149. package/dist/preview.js.map +0 -1
  150. package/dist/resolve-config.d.ts +0 -15
  151. package/dist/resolve-config.d.ts.map +0 -1
  152. package/dist/resolve-config.js.map +0 -1
  153. package/dist/scaffold.d.ts.map +0 -1
  154. package/dist/scaffold.js.map +0 -1
  155. package/dist/scanner.d.ts +0 -77
  156. package/dist/scanner.d.ts.map +0 -1
  157. package/dist/scanner.js +0 -555
  158. package/dist/scanner.js.map +0 -1
  159. package/dist/sync.d.ts.map +0 -1
  160. package/dist/sync.js +0 -383
  161. package/dist/sync.js.map +0 -1
package/dist/scanner.js DELETED
@@ -1,555 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- // ---------------------------------------------------------------------------
4
- // Defaults (overridable via ScanOptions)
5
- // ---------------------------------------------------------------------------
6
- export const DEFAULT_EXCLUDED_DIRS = new Set([
7
- 'node_modules',
8
- '.next',
9
- 'dist',
10
- '.git',
11
- 'out',
12
- '.turbo',
13
- 'scripts',
14
- 'packages',
15
- '.storybook',
16
- 'coverage',
17
- ]);
18
- export const DEFAULT_SOURCE_EXTENSIONS = new Set([
19
- '.ts',
20
- '.tsx',
21
- '.js',
22
- '.jsx',
23
- ]);
24
- export const DEFAULT_RESERVED_CSS_NAMESPACES = new Set([
25
- 'hover',
26
- 'focus',
27
- 'active',
28
- 'group',
29
- 'supports',
30
- 'peer',
31
- 'lg',
32
- 'md',
33
- 'sm',
34
- 'xl',
35
- '2xl',
36
- 'dark',
37
- 'localhost',
38
- 'http',
39
- 'https',
40
- 'ftp',
41
- 'blob',
42
- 'file',
43
- 'data',
44
- 'mailto',
45
- 'tel',
46
- 'vscode',
47
- 'slack',
48
- 'urn',
49
- 'ws',
50
- 'wss',
51
- ]);
52
- /** Return the route string key used for deduplication. */
53
- export function routeKey(r) {
54
- return typeof r === 'string' ? r : r.route;
55
- }
56
- // ---------------------------------------------------------------------------
57
- // Regexes
58
- // ---------------------------------------------------------------------------
59
- const GET_TRANSLATIONS_RE = /(?:const|let|var)\s+(\w+)\s*=\s*await\s+\w+\.(?:getTranslations(?:WithFallback)?|getT)\s*\([^,]+,\s*['"`]([a-zA-Z0-9_-]+)['"`]/g;
60
- const GET_TRANSLATIONS_ARRAY_RE = /(?:const|let|var)\s+(\w+)\s*=\s*await\s+\w+\.(?:getTranslations(?:WithFallback)?|getT)\s*\([^,]+,\s*(\[[\s\S]*?\])\s*\)/g;
61
- function buildFunctionCallRE(varName) {
62
- return new RegExp(`\\b${varName}\\(['"\`]([a-zA-Z0-9_./-]+)['"\`]\\)`, 'g');
63
- }
64
- function buildBracketAccessRE(varName) {
65
- return new RegExp(`\\b${varName}\\[['"\`]([a-zA-Z0-9_./-]+)['"\`]\\]`, 'g');
66
- }
67
- const USE_TRANSLATION_RE = /(?:useTranslation|getTranslation)\(\s*['"`]([a-zA-Z0-9_-]+)['"`]/g;
68
- /** t('namespace:key') — react-i18next */
69
- const T_WITH_NAMESPACE_RE = /\bt\(\s*['"`]([a-zA-Z][a-zA-Z0-9_]*:[a-zA-Z0-9_./-]+)['"`]/g;
70
- /** t('key') — react-i18next (bare, deprecated) */
71
- const T_WITHOUT_NAMESPACE_RE = /\bt\(\s*['"`]([a-zA-Z0-9_./-]+)['"`]/g;
72
- /** dot-notation standalone keys — legacy, triggers warning */
73
- const STANDALONE_TRANSLATION_KEYS_RE = /(?::\s*|=\s*|\[\s*)['"`]([a-z0-9_]*_[a-z0-9_./-]*(?:\.[a-z0-9_.-]+)+)['"`]/g;
74
- /** namespace:key standalone keys */
75
- const STANDALONE_NAMESPACED_KEYS_RE = /(?::\s*|=\s*|\[\s*)['"` ]([a-zA-Z][a-zA-Z0-9_]*:[a-zA-Z0-9_./-]+)['"`]/g;
76
- /**
77
- * <Trans i18nKey="namespace:key"> and <Trans i18nKey={'namespace:key'}>
78
- * Works across multiple lines (non-greedy, [^>] matches newlines).
79
- */
80
- const TRANS_I18N_KEY_RE = /\bTrans\b[^>]*?\bi18nKey\s*=\s*(?:\{?\s*['"`])([a-zA-Z][a-zA-Z0-9_]*:[a-zA-Z0-9_./-]+)['"`]/g;
81
- // ---------------------------------------------------------------------------
82
- // Comment stripping
83
- // ---------------------------------------------------------------------------
84
- function removeComments(content) {
85
- let result = '';
86
- let i = 0;
87
- while (i < content.length) {
88
- const char = content[i];
89
- const next = content[i + 1];
90
- if (char === '"' || char === "'" || char === '`') {
91
- const q = char;
92
- result += char;
93
- i++;
94
- while (i < content.length) {
95
- if (content[i] === q && content[i - 1] !== '\\') {
96
- result += content[i++];
97
- break;
98
- }
99
- result += content[i++];
100
- }
101
- continue;
102
- }
103
- if (char === '/' && next === '/') {
104
- while (i < content.length && content[i] !== '\n')
105
- i++;
106
- result += '\n';
107
- i++;
108
- continue;
109
- }
110
- if (char === '/' && next === '*') {
111
- i += 2;
112
- while (i < content.length) {
113
- if (content[i] === '*' && content[i + 1] === '/') {
114
- i += 2;
115
- break;
116
- }
117
- result += content[i] === '\n' ? '\n' : ' ';
118
- i++;
119
- }
120
- continue;
121
- }
122
- result += char;
123
- i++;
124
- }
125
- return result;
126
- }
127
- // ---------------------------------------------------------------------------
128
- // File walking
129
- // ---------------------------------------------------------------------------
130
- export function* walkFiles(dir, excludedDirs, sourceExtensions) {
131
- const entries = fs.readdirSync(dir, { withFileTypes: true });
132
- for (const entry of entries) {
133
- if (entry.isDirectory()) {
134
- if (excludedDirs.has(entry.name))
135
- continue;
136
- yield* walkFiles(path.join(dir, entry.name), excludedDirs, sourceExtensions);
137
- }
138
- else if (entry.isFile()) {
139
- if (sourceExtensions.has(path.extname(entry.name))) {
140
- yield path.join(dir, entry.name);
141
- }
142
- }
143
- }
144
- }
145
- // ---------------------------------------------------------------------------
146
- // Route detection
147
- // ---------------------------------------------------------------------------
148
- /**
149
- * Returns true when a page file only calls redirect() without rendering any JSX.
150
- * Such pages are skipped from the preview route list because they have no UI to preview.
151
- */
152
- export function isRedirectOnlyPage(filePath) {
153
- let content;
154
- try {
155
- content = fs.readFileSync(filePath, 'utf-8');
156
- }
157
- catch {
158
- return false;
159
- }
160
- const cleaned = removeComments(content);
161
- // Must call redirect(
162
- if (!/\bredirect\(/.test(cleaned))
163
- return false;
164
- // If there is a JSX return (e.g. `return (<Foo` or `return <Foo`) it renders UI
165
- if (/return\s*\(\s*</.test(cleaned) || /return\s+<[A-Za-z]/.test(cleaned)) {
166
- return false;
167
- }
168
- return true;
169
- }
170
- /**
171
- * Maps a source file path to Next.js route string(s).
172
- * - page.tsx → the route template it represents (e.g. /blog/[slug], /[locale]/about)
173
- * - layout.tsx → the route template of its directory
174
- * - Dynamic segments are kept as-is — resolved at preview time via project preview_params
175
- * - Redirect-only pages (no JSX, just redirect()) → []
176
- * - All other files (components, hooks, …) → []
177
- */
178
- export function filePathToRoute(root, filePath) {
179
- const base = path.basename(filePath, path.extname(filePath));
180
- if (base !== 'page')
181
- return [];
182
- // Skip pages that only redirect — no UI to preview
183
- if (isRedirectOnlyPage(filePath))
184
- return [];
185
- const rel = path.relative(root, filePath).replace(/\\/g, '/');
186
- const appMatch = rel.match(/^(?:src\/)?app\/(.*?)page\.[jt]sx?$/);
187
- if (!appMatch)
188
- return [];
189
- let routePath = appMatch[1] ?? '';
190
- routePath = routePath.replace(/\([^)]+\)\//g, ''); // strip route groups
191
- routePath = routePath.replace(/\/$/, ''); // strip trailing slash
192
- return ['/' + routePath];
193
- }
194
- // ---------------------------------------------------------------------------
195
- // Key extraction
196
- // ---------------------------------------------------------------------------
197
- function addKey(map, namespace, key, routes) {
198
- // Skip keys that look like URL paths or are suspiciously short/numeric
199
- if (key.startsWith('/') || key.startsWith('.') || /^\d+$/.test(key))
200
- return;
201
- if (!map[namespace])
202
- map[namespace] = new Map();
203
- const existing = map[namespace].get(key) ?? [];
204
- if (routes.length > 0) {
205
- // Add each route if it doesn't already exist
206
- const merged = new Set(existing);
207
- for (const route of routes) {
208
- merged.add(route);
209
- }
210
- map[namespace].set(key, Array.from(merged));
211
- }
212
- else if (existing.length === 0) {
213
- map[namespace].set(key, []);
214
- }
215
- }
216
- export function extractKeysFromFile(filePath, routes, result, additionalReservedCssNamespaces) {
217
- const fileContent = fs.readFileSync(filePath, 'utf-8');
218
- const content = removeComments(fileContent);
219
- const reservedNs = additionalReservedCssNamespaces?.length
220
- ? new Set([
221
- ...DEFAULT_RESERVED_CSS_NAMESPACES,
222
- ...additionalReservedCssNamespaces,
223
- ])
224
- : DEFAULT_RESERVED_CSS_NAMESPACES;
225
- // --- Pattern 1: CMS client style ---
226
- // const t = await client.getTranslations(locale, "ns") → t("key")
227
- // const t = await client.getTranslations(locale, ["ns1","ns2"]) → t("key")
228
- const varToNamespace = new Map();
229
- const varToNamespaces = new Map();
230
- for (const m of content.matchAll(GET_TRANSLATIONS_RE)) {
231
- if (m[1] && m[2])
232
- varToNamespace.set(m[1], m[2]);
233
- }
234
- for (const m of content.matchAll(GET_TRANSLATIONS_ARRAY_RE)) {
235
- if (m[1] && m[2]) {
236
- const namespaces = [];
237
- for (const ns of m[2].matchAll(/['"`]([a-zA-Z0-9_-]+)['"`]/g)) {
238
- if (ns[1])
239
- namespaces.push(ns[1]);
240
- }
241
- if (namespaces.length)
242
- varToNamespaces.set(m[1], namespaces);
243
- }
244
- }
245
- for (const [varName, namespace] of varToNamespace) {
246
- for (const m of content.matchAll(buildFunctionCallRE(varName))) {
247
- if (m[1]) {
248
- addKey(result, namespace, m[1], routes);
249
- }
250
- }
251
- for (const m of content.matchAll(buildBracketAccessRE(varName))) {
252
- if (m[1]) {
253
- addKey(result, namespace, m[1], routes);
254
- }
255
- }
256
- }
257
- for (const [varName, namespaces] of varToNamespaces) {
258
- for (const m of content.matchAll(buildFunctionCallRE(varName))) {
259
- if (m[1]) {
260
- for (const ns of namespaces) {
261
- addKey(result, ns, m[1], routes);
262
- }
263
- }
264
- }
265
- for (const m of content.matchAll(buildBracketAccessRE(varName))) {
266
- if (m[1]) {
267
- for (const ns of namespaces) {
268
- addKey(result, ns, m[1], routes);
269
- }
270
- }
271
- }
272
- }
273
- // --- Pattern 2: react-i18next useTranslation + t() ---
274
- // Only allow keys for namespaces that are used with useTranslation in this file
275
- const fileNamespaces = [];
276
- for (const m of content.matchAll(USE_TRANSLATION_RE)) {
277
- if (m[1])
278
- fileNamespaces.push(m[1]);
279
- }
280
- // Collect all namespaced keys found in the file
281
- const namespacedKeys = new Set([...content.matchAll(T_WITH_NAMESPACE_RE)]
282
- .map(m => m[1])
283
- .filter((k) => !!k));
284
- // Always register namespaced keys — namespace is explicit in the key
285
- for (const m of content.matchAll(T_WITH_NAMESPACE_RE)) {
286
- if (!m[1])
287
- continue;
288
- const colon = m[1].indexOf(':');
289
- const ns = m[1].slice(0, colon);
290
- if (!reservedNs.has(ns)) {
291
- addKey(result, ns, m[1].slice(colon + 1), routes);
292
- }
293
- }
294
- for (const m of content.matchAll(T_WITHOUT_NAMESPACE_RE)) {
295
- const raw = m[1];
296
- if (!raw || namespacedKeys.has(raw) || raw.includes(':'))
297
- continue;
298
- console.warn(`[WARN] Bare key in ${path.relative(process.cwd(), filePath)}: t('${raw}') — use t('namespace:${raw}') instead`);
299
- }
300
- // --- Pattern 3: <Trans i18nKey="namespace:key"> ---
301
- for (const m of content.matchAll(TRANS_I18N_KEY_RE)) {
302
- if (!m[1])
303
- continue;
304
- const colon = m[1].indexOf(':');
305
- const ns = m[1].slice(0, colon);
306
- if (!reservedNs.has(ns)) {
307
- addKey(result, ns, m[1].slice(colon + 1), routes);
308
- }
309
- }
310
- // --- Pattern 4: standalone "namespace:key" string literals ---
311
- for (const m of content.matchAll(STANDALONE_NAMESPACED_KEYS_RE)) {
312
- const raw = m[1];
313
- if (!raw || namespacedKeys.has(raw))
314
- continue;
315
- const colon = raw.indexOf(':');
316
- const ns = raw.slice(0, colon);
317
- if (!reservedNs.has(ns)) {
318
- addKey(result, ns, raw.slice(colon + 1), routes);
319
- }
320
- }
321
- // Warn on deprecated dot-notation standalone keys
322
- for (const m of content.matchAll(STANDALONE_TRANSLATION_KEYS_RE)) {
323
- const raw = m[1];
324
- if (!raw || !raw.includes('.'))
325
- continue;
326
- if (namespacedKeys.has(raw) ||
327
- namespacedKeys.has(raw.replace(/\./g, ':')))
328
- continue;
329
- console.warn(`[WARN] Standalone key in ${path.relative(process.cwd(), filePath)}: "${raw}" — use "namespace:key" format instead`);
330
- }
331
- }
332
- // ---------------------------------------------------------------------------
333
- // Import resolution
334
- // ---------------------------------------------------------------------------
335
- const RELATIVE_IMPORT_RE = /from\s+['"](\.[./][^'"]+)['"]/g;
336
- const ALIASED_IMPORT_RE = /from\s+['"]([a-zA-Z_@][^'"]*)['"]/g;
337
- /**
338
- * Resolve an aliased import path (e.g., @/components/button) to an absolute file path.
339
- * Uses tsconfig path mappings if provided.
340
- */
341
- function resolveAliasedImport(importPath, root, sourceExtensions, pathMappings) {
342
- if (!pathMappings)
343
- return null;
344
- // Find matching alias pattern
345
- for (const [alias, targets] of Object.entries(pathMappings)) {
346
- // Convert alias pattern (e.g., "@/*") to regex
347
- const pattern = alias.replace(/\*/g, '(.*)');
348
- const regex = new RegExp(`^${pattern}$`);
349
- const match = importPath.match(regex);
350
- if (match) {
351
- const captured = match[1] ?? '';
352
- // Replace * in target with captured part
353
- for (const target of targets) {
354
- const resolved = target.replace(/\*/g, captured);
355
- const fullPath = path.join(root, resolved);
356
- // Try with and without extensions
357
- if (sourceExtensions.has(path.extname(fullPath))) {
358
- if (fs.existsSync(fullPath))
359
- return fullPath;
360
- }
361
- else {
362
- for (const ext of sourceExtensions) {
363
- const candidate = fullPath + ext;
364
- if (fs.existsSync(candidate))
365
- return candidate;
366
- }
367
- // Try index file
368
- for (const ext of sourceExtensions) {
369
- const candidate = path.join(fullPath, 'index' + ext);
370
- if (fs.existsSync(candidate))
371
- return candidate;
372
- }
373
- }
374
- }
375
- }
376
- }
377
- return null;
378
- }
379
- /**
380
- * Resolve a relative import path to an absolute file path.
381
- * Tries each candidate extension in order until a file is found.
382
- */
383
- function resolveLocalImport(fromDir, importPath, sourceExtensions) {
384
- const joined = path.join(fromDir, importPath);
385
- // Already has an extension
386
- if (sourceExtensions.has(path.extname(joined))) {
387
- return fs.existsSync(joined) ? joined : null;
388
- }
389
- // Try adding each source extension
390
- for (const ext of sourceExtensions) {
391
- const candidate = joined + ext;
392
- if (fs.existsSync(candidate))
393
- return candidate;
394
- }
395
- // Try index file inside a directory
396
- for (const ext of sourceExtensions) {
397
- const candidate = path.join(joined, 'index' + ext);
398
- if (fs.existsSync(candidate))
399
- return candidate;
400
- }
401
- return null;
402
- }
403
- /**
404
- * Extract all local imports (relative and aliased) from a source file.
405
- */
406
- function extractLocalImports(filePath, sourceExtensions, root, pathMappings) {
407
- const content = fs.readFileSync(filePath, 'utf-8');
408
- const fromDir = path.dirname(filePath);
409
- const results = [];
410
- // Extract relative imports (e.g., ./components, ../lib)
411
- for (const m of content.matchAll(RELATIVE_IMPORT_RE)) {
412
- if (!m[1])
413
- continue;
414
- const resolved = resolveLocalImport(fromDir, m[1], sourceExtensions);
415
- if (resolved)
416
- results.push(resolved);
417
- }
418
- // Extract aliased imports (e.g., @/components) if pathMappings provided
419
- if (root && pathMappings) {
420
- for (const m of content.matchAll(ALIASED_IMPORT_RE)) {
421
- if (!m[1])
422
- continue;
423
- // Skip already-matched relative imports
424
- if (m[1].startsWith('.'))
425
- continue;
426
- const resolved = resolveAliasedImport(m[1], root, sourceExtensions, pathMappings);
427
- if (resolved && !results.includes(resolved)) {
428
- results.push(resolved);
429
- }
430
- }
431
- }
432
- return results;
433
- }
434
- /**
435
- * For a given page file, find all wrapping layout files up to the app root.
436
- * Returns layout paths in order from deepest to root (e.g. /nested/layout.tsx, /layout.tsx).
437
- */
438
- function getLayoutChain(root, pageFile, sourceExtensions) {
439
- const layouts = [];
440
- let dir = path.dirname(pageFile);
441
- while (dir.startsWith(root)) {
442
- for (const ext of sourceExtensions) {
443
- const candidate = path.join(dir, `layout${ext}`);
444
- if (fs.existsSync(candidate)) {
445
- layouts.push(candidate);
446
- }
447
- }
448
- dir = path.dirname(dir);
449
- }
450
- return layouts;
451
- }
452
- // ---------------------------------------------------------------------------
453
- // Project scan
454
- // ---------------------------------------------------------------------------
455
- /**
456
- * Scans the project for translation keys and optionally merges external preview routes.
457
- *
458
- * Pass 1: Scan all files, extracting keys and associating them with page/layout routes.
459
- * Pass 2: For each page/layout, walk its import tree to assign keys in deeply-nested
460
- * components to the correct preview route.
461
- * Pass 3: Merge external preview routes from database or config.
462
- */
463
- export function scanProject(root, opts) {
464
- const excludedDirs = new Set([
465
- ...DEFAULT_EXCLUDED_DIRS,
466
- ...(opts?.excludedDirs ?? []),
467
- ]);
468
- const sourceExtensions = opts?.sourceExtensions
469
- ? new Set(opts.sourceExtensions)
470
- : DEFAULT_SOURCE_EXTENSIONS;
471
- const routeParams = opts?.routeParams;
472
- const pathMappings = opts?.pathMappings;
473
- const projectRoot = opts?.projectRoot ?? root;
474
- const result = {};
475
- let fileCount = 0;
476
- // Pass 1: scan all files normally
477
- const routeByFile = new Map();
478
- for (const file of walkFiles(root, excludedDirs, sourceExtensions)) {
479
- const routes = filePathToRoute(root, file);
480
- routeByFile.set(file, routes);
481
- extractKeysFromFile(file, routes, result, opts?.reservedCssNamespaces);
482
- fileCount++;
483
- }
484
- // Pass 2: for each page/layout file, transitively walk its import tree and
485
- // re-scan every non-page/layout component with the same routes. This ensures
486
- // keys used in deeply-nested components (e.g. layout → Nav → NavItem) are
487
- // associated with the correct preview routes.
488
- const scannedWithRoute = new Set(); // "file::route" pairs already done
489
- for (const [file, routes] of routeByFile) {
490
- if (routes.length === 0)
491
- continue;
492
- // For page files, include the layout chain in the queue
493
- // so that layout components also get keyed with the page's route
494
- const isPage = path.basename(file).startsWith('page.');
495
- const layoutChain = isPage
496
- ? getLayoutChain(root, file, sourceExtensions)
497
- : [];
498
- // Re-scan layout files themselves with this page's routes.
499
- // They have no route of their own (filePathToRoute returns [] for layouts),
500
- // so Pass 1 registered their keys without any route. Fix that here.
501
- for (const layout of layoutChain) {
502
- const layoutKey = `${layout}::${routes.join('|')}`;
503
- if (!scannedWithRoute.has(layoutKey)) {
504
- scannedWithRoute.add(layoutKey);
505
- extractKeysFromFile(layout, routes, result, opts?.reservedCssNamespaces);
506
- }
507
- }
508
- const queue = [file, ...layoutChain];
509
- while (queue.length > 0) {
510
- const current = queue.shift();
511
- const imports = extractLocalImports(current, sourceExtensions, projectRoot, pathMappings);
512
- if (imports.length > 0) {
513
- console.log(`[Pass 2] ${path.relative(root, current)} (${routes.join(', ')}) imports: ${imports.map(i => path.relative(root, i)).join(', ')}`);
514
- }
515
- for (const imported of imports) {
516
- // Use routes.join('|') as key for deduplication
517
- const key = `${imported}::${routes.join('|')}`;
518
- if (scannedWithRoute.has(key))
519
- continue;
520
- scannedWithRoute.add(key);
521
- // Skip files not in the walk result (outside root / excluded dirs)
522
- if (!routeByFile.has(imported)) {
523
- console.log(`[Pass 2] Skipping ${path.relative(root, imported)} — not in walk result`);
524
- continue;
525
- }
526
- // Skip other page/layout files — they have their own routes
527
- if (routeByFile.get(imported).length > 0)
528
- continue;
529
- console.log(`[Pass 2] Re-scanning ${path.relative(root, imported)} with routes: ${routes.join(', ')}`);
530
- extractKeysFromFile(imported, routes, result, opts?.reservedCssNamespaces);
531
- // Continue walking this component's own imports
532
- queue.push(imported);
533
- }
534
- }
535
- }
536
- // Pass 3: upgrade plain dynamic routes to { route, params } objects using routeParams
537
- if (routeParams) {
538
- for (const [, keyMap] of Object.entries(result)) {
539
- for (const [key, routes] of keyMap.entries()) {
540
- const upgraded = routes.map(r => {
541
- const rk = routeKey(r);
542
- const params = routeParams[rk];
543
- if (params && typeof r === 'string') {
544
- return { route: rk, params };
545
- }
546
- return r;
547
- });
548
- keyMap.set(key, upgraded);
549
- }
550
- }
551
- }
552
- console.log(`Scanned ${fileCount} files.`);
553
- return result;
554
- }
555
- //# sourceMappingURL=scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACzC,cAAc;IACd,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,SAAS;IACT,UAAU;IACV,YAAY;IACZ,UAAU;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC7C,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAC;IACnD,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,UAAU;IACV,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,MAAM;IACN,WAAW;IACX,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,KAAK;IACL,IAAI;IACJ,KAAK;CACR,CAAC,CAAC;AAsDH,0DAA0D;AAC1D,MAAM,UAAU,QAAQ,CAAC,CAAe;IACpC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/C,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,mBAAmB,GACrB,iIAAiI,CAAC;AAEtI,MAAM,yBAAyB,GAC3B,0HAA0H,CAAC;AAE/H,SAAS,mBAAmB,CAAC,OAAe;IACxC,OAAO,IAAI,MAAM,CAAC,MAAM,OAAO,sCAAsC,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IACzC,OAAO,IAAI,MAAM,CAAC,MAAM,OAAO,sCAAsC,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,kBAAkB,GACpB,mEAAmE,CAAC;AAExE,yCAAyC;AACzC,MAAM,mBAAmB,GACrB,6DAA6D,CAAC;AAElE,kDAAkD;AAClD,MAAM,sBAAsB,GAAG,uCAAuC,CAAC;AAEvE,8DAA8D;AAC9D,MAAM,8BAA8B,GAChC,6EAA6E,CAAC;AAElF,oCAAoC;AACpC,MAAM,6BAA6B,GAC/B,yEAAyE,CAAC;AAE9E;;;GAGG;AACH,MAAM,iBAAiB,GACnB,8FAA8F,CAAC;AAEnG,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,SAAS,cAAc,CAAC,OAAe;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAI,CAAC;YACf,MAAM,IAAI,IAAI,CAAC;YACf,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC9C,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvB,MAAM;gBACV,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,SAAS;QACb,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,IAAI,CAAC;YACf,CAAC,EAAE,CAAC;YACJ,SAAS;QACb,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/B,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC/C,CAAC,IAAI,CAAC,CAAC;oBACP,MAAM;gBACV,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3C,CAAC,EAAE,CAAC;YACR,CAAC;YACD,SAAS;QACb,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;QACf,CAAC,EAAE,CAAC;IACR,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,SAAS,CAAC,CAAC,SAAS,CACtB,GAAW,EACX,YAAyB,EACzB,gBAA6B;IAE7B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3C,KAAK,CAAC,CAAC,SAAS,CACZ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAC1B,YAAY,EACZ,gBAAgB,CACnB,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAC/C,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAExC,sBAAsB;IACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhD,gFAAgF;IAChF,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAE/B,mDAAmD;IACnD,IAAI,kBAAkB,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB;IACxE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB;IAEjE,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,MAAM,CACX,GAAiB,EACjB,SAAiB,EACjB,GAAW,EACX,MAAgB;IAEhB,uEAAuE;IACvE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO;IAC5E,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAE/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,QAAgB,EAChB,MAAgB,EAChB,MAAoB,EACpB,+BAA0C;IAE1C,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,+BAA+B,EAAE,MAAM;QACtD,CAAC,CAAC,IAAI,GAAG,CAAC;YACJ,GAAG,+BAA+B;YAClC,GAAG,+BAA+B;SACrC,CAAC;QACJ,CAAC,CAAC,+BAA+B,CAAC;IAEtC,sCAAsC;IACtC,mEAAmE;IACnE,2EAA2E;IAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEpD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,KAAK,MAAM,EAAE,IAAK,CAAC,CAAC,CAAC,CAAY,CAAC,QAAQ,CACtC,6BAA6B,CAChC,EAAE,CAAC;gBACA,IAAI,EAAE,CAAC,CAAC,CAAC;oBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,UAAU,CAAC,MAAM;gBAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,eAAe,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;oBAC1B,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;QACL,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;oBAC1B,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,gFAAgF;IAChF,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,gDAAgD;IAChD,MAAM,cAAc,GAAG,IAAI,GAAG,CAC1B,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACd,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;IAEF,qEAAqE;IACrE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACnE,OAAO,CAAC,IAAI,CACR,sBAAsB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,yBAAyB,GAAG,YAAY,CAClH,CAAC;IACN,CAAC;IAED,qDAAqD;IACrD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,kDAAkD;IAClD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACzC,IACI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YACvB,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAE3C,SAAS;QACb,OAAO,CAAC,IAAI,CACR,4BAA4B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,wCAAwC,CACtH,CAAC;IACN,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,iBAAiB,GAAG,oCAAoC,CAAC;AAE/D;;;GAGG;AACH,SAAS,oBAAoB,CACzB,UAAkB,EAClB,IAAY,EACZ,gBAA6B,EAC7B,YAAuC;IAEvC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,8BAA8B;IAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,+CAA+C;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,yCAAyC;YACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAE3C,kCAAkC;gBAClC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,OAAO,QAAQ,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACJ,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;wBACjC,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,CAAC;wBACjC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;4BAAE,OAAO,SAAS,CAAC;oBACnD,CAAC;oBACD,iBAAiB;oBACjB,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;wBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;wBACrD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;4BAAE,OAAO,SAAS,CAAC;oBACnD,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACvB,OAAe,EACf,UAAkB,EAClB,gBAA6B;IAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE9C,2BAA2B;IAC3B,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,mCAAmC;IACnC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,GAAG,GAAG,CAAC;QAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACnD,CAAC;IAED,oCAAoC;IACpC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CACxB,QAAgB,EAChB,gBAA6B,EAC7B,IAAa,EACb,YAAuC;IAEvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,wDAAwD;IACxD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACpB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACrE,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,wEAAwE;IACxE,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;YACpB,wCAAwC;YACxC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,oBAAoB,CACjC,CAAC,CAAC,CAAC,CAAC,EACJ,IAAI,EACJ,gBAAgB,EAChB,YAAY,CACf,CAAC;YACF,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACnB,IAAY,EACZ,QAAgB,EAChB,gBAA6B;IAE7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAkB;IACxD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;QACzB,GAAG,qBAAqB;QACxB,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,IAAI,EAAE,gBAAgB;QAC3C,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAChC,CAAC,CAAC,yBAAyB,CAAC;IAEhC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC;IAE9C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,kCAAkC;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;QACvE,SAAS,EAAE,CAAC;IAChB,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,0EAA0E;IAC1E,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,mCAAmC;IAC/E,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAElC,wDAAwD;QACxD,iEAAiE;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM;YACtB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QAET,2DAA2D;QAC3D,4EAA4E;QAC5E,oEAAoE;QACpE,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,GAAG,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAChC,mBAAmB,CACf,MAAM,EACN,MAAM,EACN,MAAM,EACN,IAAI,EAAE,qBAAqB,CAC9B,CAAC;YACN,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAa,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC;QAE/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC/B,MAAM,OAAO,GAAG,mBAAmB,CAC/B,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,YAAY,CACf,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CACP,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpI,CAAC;YACN,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC7B,gDAAgD;gBAChD,MAAM,GAAG,GAAG,GAAG,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACxC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1B,mEAAmE;gBACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CACP,qBAAqB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,uBAAuB,CAC5E,CAAC;oBACF,SAAS;gBACb,CAAC;gBACD,4DAA4D;gBAC5D,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS;gBACpD,OAAO,CAAC,GAAG,CACP,wBAAwB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5F,CAAC;gBACF,mBAAmB,CACf,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,EAAE,qBAAqB,CAC9B,CAAC;gBACF,gDAAgD;gBAChD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IAED,sFAAsF;IACtF,IAAI,WAAW,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC/B,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAClC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;oBACjC,CAAC;oBACD,OAAO,CAAC,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,SAAS,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}