emdash-emit 0.1.25 → 0.1.31

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 (212) hide show
  1. package/CHANGELOG.md +154 -4
  2. package/dist/cli/commands/conflicts.d.ts.map +1 -1
  3. package/dist/cli/commands/conflicts.js +2 -22
  4. package/dist/cli/commands/conflicts.js.map +1 -1
  5. package/dist/cli/commands/delete.d.ts.map +1 -1
  6. package/dist/cli/commands/delete.js +1 -13
  7. package/dist/cli/commands/delete.js.map +1 -1
  8. package/dist/cli/commands/doctor.d.ts.map +1 -1
  9. package/dist/cli/commands/doctor.js +1 -13
  10. package/dist/cli/commands/doctor.js.map +1 -1
  11. package/dist/cli/commands/media.d.ts.map +1 -1
  12. package/dist/cli/commands/media.js +1 -13
  13. package/dist/cli/commands/media.js.map +1 -1
  14. package/dist/cli/commands/new.d.ts.map +1 -1
  15. package/dist/cli/commands/new.js +1 -13
  16. package/dist/cli/commands/new.js.map +1 -1
  17. package/dist/cli/commands/pull.d.ts +3 -3
  18. package/dist/cli/commands/pull.d.ts.map +1 -1
  19. package/dist/cli/commands/pull.js +142 -88
  20. package/dist/cli/commands/pull.js.map +1 -1
  21. package/dist/cli/commands/push.d.ts +1 -1
  22. package/dist/cli/commands/push.d.ts.map +1 -1
  23. package/dist/cli/commands/push.js +32 -90
  24. package/dist/cli/commands/push.js.map +1 -1
  25. package/dist/cli/context.d.ts +12 -0
  26. package/dist/cli/context.d.ts.map +1 -1
  27. package/dist/cli/context.js +27 -1
  28. package/dist/cli/context.js.map +1 -1
  29. package/dist/cli/report-failure.d.ts +6 -0
  30. package/dist/cli/report-failure.d.ts.map +1 -0
  31. package/dist/cli/report-failure.js +71 -0
  32. package/dist/cli/report-failure.js.map +1 -0
  33. package/dist/client/api.d.ts.map +1 -1
  34. package/dist/client/api.js +1 -1
  35. package/dist/client/api.js.map +1 -1
  36. package/dist/client/lock.js.map +1 -1
  37. package/dist/client/mapper.js.map +1 -1
  38. package/dist/client/media.d.ts.map +1 -1
  39. package/dist/client/media.js.map +1 -1
  40. package/dist/db/baseline.d.ts +16 -1
  41. package/dist/db/baseline.d.ts.map +1 -1
  42. package/dist/db/baseline.js +25 -0
  43. package/dist/db/baseline.js.map +1 -1
  44. package/dist/db/cache.d.ts +2 -3
  45. package/dist/db/cache.d.ts.map +1 -1
  46. package/dist/db/cache.js +3 -295
  47. package/dist/db/cache.js.map +1 -1
  48. package/dist/db/migrations.d.ts +7 -0
  49. package/dist/db/migrations.d.ts.map +1 -0
  50. package/dist/db/migrations.js +320 -0
  51. package/dist/db/migrations.js.map +1 -0
  52. package/dist/mcp/heartbeat.d.ts +1 -34
  53. package/dist/mcp/heartbeat.d.ts.map +1 -1
  54. package/dist/mcp/heartbeat.js +1 -113
  55. package/dist/mcp/heartbeat.js.map +1 -1
  56. package/dist/mcp/tool-errors.d.ts +12 -1
  57. package/dist/mcp/tool-errors.d.ts.map +1 -1
  58. package/dist/mcp/tool-errors.js +29 -0
  59. package/dist/mcp/tool-errors.js.map +1 -1
  60. package/dist/mcp/tools/sync-conflicts.d.ts.map +1 -1
  61. package/dist/mcp/tools/sync-conflicts.js +46 -58
  62. package/dist/mcp/tools/sync-conflicts.js.map +1 -1
  63. package/dist/mcp/tools/sync-delete.d.ts.map +1 -1
  64. package/dist/mcp/tools/sync-delete.js +18 -30
  65. package/dist/mcp/tools/sync-delete.js.map +1 -1
  66. package/dist/mcp/tools/sync-diff.d.ts.map +1 -1
  67. package/dist/mcp/tools/sync-diff.js +10 -31
  68. package/dist/mcp/tools/sync-diff.js.map +1 -1
  69. package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
  70. package/dist/mcp/tools/sync-doctor.js +18 -30
  71. package/dist/mcp/tools/sync-doctor.js.map +1 -1
  72. package/dist/mcp/tools/sync-media-search.d.ts.map +1 -1
  73. package/dist/mcp/tools/sync-media-search.js +40 -52
  74. package/dist/mcp/tools/sync-media-search.js.map +1 -1
  75. package/dist/mcp/tools/sync-new.d.ts.map +1 -1
  76. package/dist/mcp/tools/sync-new.js +34 -55
  77. package/dist/mcp/tools/sync-new.js.map +1 -1
  78. package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
  79. package/dist/mcp/tools/sync-pull.js +202 -222
  80. package/dist/mcp/tools/sync-pull.js.map +1 -1
  81. package/dist/mcp/tools/sync-push.d.ts.map +1 -1
  82. package/dist/mcp/tools/sync-push.js +64 -84
  83. package/dist/mcp/tools/sync-push.js.map +1 -1
  84. package/dist/mcp/tools/sync-status.d.ts.map +1 -1
  85. package/dist/mcp/tools/sync-status.js +3 -13
  86. package/dist/mcp/tools/sync-status.js.map +1 -1
  87. package/dist/presentation/article_report.d.ts +5 -0
  88. package/dist/presentation/article_report.d.ts.map +1 -1
  89. package/dist/presentation/article_report.js +17 -0
  90. package/dist/presentation/article_report.js.map +1 -1
  91. package/dist/sync/baseline-reconstruction.d.ts +43 -0
  92. package/dist/sync/baseline-reconstruction.d.ts.map +1 -0
  93. package/dist/sync/baseline-reconstruction.js +103 -0
  94. package/dist/sync/baseline-reconstruction.js.map +1 -0
  95. package/dist/sync/bylines.d.ts +5 -0
  96. package/dist/sync/bylines.d.ts.map +1 -1
  97. package/dist/sync/bylines.js +29 -0
  98. package/dist/sync/bylines.js.map +1 -1
  99. package/dist/sync/conflicts.d.ts.map +1 -1
  100. package/dist/sync/conflicts.js +21 -4
  101. package/dist/sync/conflicts.js.map +1 -1
  102. package/dist/sync/delete.d.ts.map +1 -1
  103. package/dist/sync/delete.js +12 -1
  104. package/dist/sync/delete.js.map +1 -1
  105. package/dist/sync/diff.d.ts.map +1 -1
  106. package/dist/sync/diff.js +58 -27
  107. package/dist/sync/diff.js.map +1 -1
  108. package/dist/sync/doctor.d.ts.map +1 -1
  109. package/dist/sync/doctor.js +13 -3
  110. package/dist/sync/doctor.js.map +1 -1
  111. package/dist/sync/guards.d.ts +1 -1
  112. package/dist/sync/guards.d.ts.map +1 -1
  113. package/dist/sync/guards.js +2 -1
  114. package/dist/sync/guards.js.map +1 -1
  115. package/dist/sync/media/companions.d.ts.map +1 -1
  116. package/dist/sync/media/companions.js.map +1 -1
  117. package/dist/sync/media/naming_mirror.d.ts.map +1 -1
  118. package/dist/sync/media/naming_mirror.js +11 -2
  119. package/dist/sync/media/naming_mirror.js.map +1 -1
  120. package/dist/sync/media/pull_article.d.ts +2 -0
  121. package/dist/sync/media/pull_article.d.ts.map +1 -1
  122. package/dist/sync/media/pull_article.js +74 -25
  123. package/dist/sync/media/pull_article.js.map +1 -1
  124. package/dist/sync/media/pull_library.d.ts.map +1 -1
  125. package/dist/sync/media/pull_library.js +34 -61
  126. package/dist/sync/media/pull_library.js.map +1 -1
  127. package/dist/sync/media/remote_index.d.ts +16 -1
  128. package/dist/sync/media/remote_index.d.ts.map +1 -1
  129. package/dist/sync/media/remote_index.js +2 -2
  130. package/dist/sync/media/remote_index.js.map +1 -1
  131. package/dist/sync/merge.d.ts.map +1 -1
  132. package/dist/sync/merge.js +5 -5
  133. package/dist/sync/merge.js.map +1 -1
  134. package/dist/sync/new.d.ts.map +1 -1
  135. package/dist/sync/new.js +5 -4
  136. package/dist/sync/new.js.map +1 -1
  137. package/dist/sync/orchestrator.d.ts +39 -0
  138. package/dist/sync/orchestrator.d.ts.map +1 -1
  139. package/dist/sync/orchestrator.js +93 -80
  140. package/dist/sync/orchestrator.js.map +1 -1
  141. package/dist/sync/preflight/image_probe.d.ts +28 -0
  142. package/dist/sync/preflight/image_probe.d.ts.map +1 -0
  143. package/dist/sync/preflight/image_probe.js +70 -0
  144. package/dist/sync/preflight/image_probe.js.map +1 -0
  145. package/dist/sync/preflight.d.ts.map +1 -1
  146. package/dist/sync/preflight.js +48 -45
  147. package/dist/sync/preflight.js.map +1 -1
  148. package/dist/sync/pull/fast_path.d.ts +9 -0
  149. package/dist/sync/pull/fast_path.d.ts.map +1 -0
  150. package/dist/sync/pull/fast_path.js +383 -0
  151. package/dist/sync/pull/fast_path.js.map +1 -0
  152. package/dist/sync/pull/index.d.ts +15 -0
  153. package/dist/sync/pull/index.d.ts.map +1 -0
  154. package/dist/sync/pull/index.js +372 -0
  155. package/dist/sync/pull/index.js.map +1 -0
  156. package/dist/sync/pull/list.d.ts +22 -0
  157. package/dist/sync/pull/list.d.ts.map +1 -0
  158. package/dist/sync/pull/list.js +175 -0
  159. package/dist/sync/pull/list.js.map +1 -0
  160. package/dist/sync/pull/media_stage.d.ts +67 -0
  161. package/dist/sync/pull/media_stage.d.ts.map +1 -0
  162. package/dist/sync/pull/media_stage.js +599 -0
  163. package/dist/sync/pull/media_stage.js.map +1 -0
  164. package/dist/sync/pull/quarantine.d.ts +22 -0
  165. package/dist/sync/pull/quarantine.d.ts.map +1 -0
  166. package/dist/sync/pull/quarantine.js +174 -0
  167. package/dist/sync/pull/quarantine.js.map +1 -0
  168. package/dist/sync/pull/types.d.ts +135 -0
  169. package/dist/sync/pull/types.d.ts.map +1 -0
  170. package/dist/sync/pull/types.js +23 -0
  171. package/dist/sync/pull/types.js.map +1 -0
  172. package/dist/sync/pull.d.ts +1 -114
  173. package/dist/sync/pull.d.ts.map +1 -1
  174. package/dist/sync/pull.js +1 -861
  175. package/dist/sync/pull.js.map +1 -1
  176. package/dist/sync/push/commit.d.ts.map +1 -1
  177. package/dist/sync/push/commit.js +1 -2
  178. package/dist/sync/push/commit.js.map +1 -1
  179. package/dist/sync/push/index.d.ts.map +1 -1
  180. package/dist/sync/push/index.js +4 -3
  181. package/dist/sync/push/index.js.map +1 -1
  182. package/dist/sync/push/merge_stage.js +1 -1
  183. package/dist/sync/push/merge_stage.js.map +1 -1
  184. package/dist/sync/push/taxonomy_plan.d.ts +4 -0
  185. package/dist/sync/push/taxonomy_plan.d.ts.map +1 -1
  186. package/dist/sync/push/taxonomy_plan.js +22 -10
  187. package/dist/sync/push/taxonomy_plan.js.map +1 -1
  188. package/dist/sync/push/transport.d.ts +1 -1
  189. package/dist/sync/push/transport.d.ts.map +1 -1
  190. package/dist/sync/push/transport.js +1 -1
  191. package/dist/sync/push/transport.js.map +1 -1
  192. package/dist/sync/status.d.ts.map +1 -1
  193. package/dist/sync/status.js +11 -57
  194. package/dist/sync/status.js.map +1 -1
  195. package/dist/sync/taxonomies.d.ts +45 -0
  196. package/dist/sync/taxonomies.d.ts.map +1 -1
  197. package/dist/sync/taxonomies.js +258 -119
  198. package/dist/sync/taxonomies.js.map +1 -1
  199. package/dist/utils/frontmatter.d.ts.map +1 -1
  200. package/dist/utils/frontmatter.js.map +1 -1
  201. package/dist/utils/mcp-heartbeat.d.ts +36 -0
  202. package/dist/utils/mcp-heartbeat.d.ts.map +1 -0
  203. package/dist/utils/mcp-heartbeat.js +126 -0
  204. package/dist/utils/mcp-heartbeat.js.map +1 -0
  205. package/dist/utils/media-body-refs.d.ts.map +1 -1
  206. package/dist/utils/media-body-refs.js +2 -2
  207. package/dist/utils/media-body-refs.js.map +1 -1
  208. package/dist/utils/taxonomy-key.d.ts +44 -0
  209. package/dist/utils/taxonomy-key.d.ts.map +1 -0
  210. package/dist/utils/taxonomy-key.js +63 -0
  211. package/dist/utils/taxonomy-key.js.map +1 -0
  212. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
1
  import { type TaxonomyCandidates } from '../utils/frontmatter.js';
2
+ import { type PrunedTaxonomiesDetail, type TaxonomyLookupMaps } from '../utils/taxonomy-key.js';
3
+ export type { PrunedTaxonomiesDetail, TaxonomyLookupMaps };
2
4
  export interface TaxonomyTerm {
3
5
  id: string;
4
6
  name?: string;
@@ -37,7 +39,14 @@ export interface PullTaxonomiesResult {
37
39
  export declare function pullTaxonomies(options: PullTaxonomiesOptions): Promise<PullTaxonomiesResult>;
38
40
  export interface LocalTaxonomyItem {
39
41
  id: string;
42
+ /** Human-readable decoded slug for disk and prompts (e.g. 'ローカルガイド' or 'camera') */
40
43
  slug: string;
44
+ /**
45
+ * Raw server canonical slug for Layer A transport/hashes (e.g. '%e3%83...' or 'camera').
46
+ * Optional in interface to preserve compatibility with hand-authored fixtures,
47
+ * but guaranteed to be populated by readTaxonomyDir() (defaults to slug when omitted).
48
+ */
49
+ canonicalSlug?: string;
41
50
  name: string;
42
51
  parentId?: string | null;
43
52
  count?: number;
@@ -57,6 +66,18 @@ export declare const DEFAULT_MAX_CATEGORIES = 50;
57
66
  * Single source of truth for reading local category and tag YAML files.
58
67
  */
59
68
  export declare function readTaxonomyDir(dir: string): LocalTaxonomyItem[];
69
+ /**
70
+ * Deterministic collision winner ordering: highest count first, ties broken by newest ULID (descending).
71
+ * Shared between Layer A (`loadLocalTaxonomyMaps`) and Layer B (`getLocalTaxonomiesSummary`)
72
+ * so duplicate canonical/decoded slugs always resolve to the identical winner term ID.
73
+ */
74
+ export declare function compareTaxonomyTermDeterministically(a: {
75
+ id: string;
76
+ count?: number;
77
+ }, b: {
78
+ id: string;
79
+ count?: number;
80
+ }): number;
60
81
  /**
61
82
  * Loads local taxonomy mapping between term ULID and slug from categories/ and tags/ directories.
62
83
  */
@@ -75,6 +96,12 @@ export declare function loadLocalTaxonomyMaps(workspaceRoot: string): {
75
96
  * Single source of truth for taxonomy candidate resolution across pull, push, and diff.
76
97
  */
77
98
  export declare function loadLocalTaxonomyCandidates(workspaceRoot: string): TaxonomyCandidates;
99
+ /**
100
+ * Sorts taxonomy terms deterministically and deduplicates by slug, keeping the winner term.
101
+ * Mode 'slug-grouped' orders by slug ASC first (used for categories display).
102
+ * Mode 'frequency' orders by highest count first, newest ULID break (used for tags display).
103
+ */
104
+ export declare function dedupeTermsBySlug(items: LocalTaxonomyItem[], mode?: 'slug-grouped' | 'frequency'): LocalTaxonomyItem[];
78
105
  /**
79
106
  * Reads local categories/ and tags/ YAML definitions and returns structured summary.
80
107
  * Tags are sorted by count descending (most used first), then by ULID descending (newest first).
@@ -97,4 +124,22 @@ export declare function levenshteinDistance(a: string, b: string): number;
97
124
  * Returns formatted suggestions (e.g. `未分類 -> "%e6%9c%aa%e5%88%86%e9%a1%9e"` or `"diary"`).
98
125
  */
99
126
  export declare function findClosestTaxonomySuggestions(input: string, items: LocalTaxonomyItem[], maxSuggestions?: number): string[];
127
+ /**
128
+ * Checks whether frontmatter contains taxonomy terms that no longer exist in local definitions.
129
+ */
130
+ export declare function carriesPrunedTaxonomies(taxonomies: Record<string, string[]> | undefined, maps: TaxonomyLookupMaps): boolean;
131
+ /**
132
+ * Filters out pruned taxonomy terms, preserving valid terms.
133
+ * If all terms in a taxonomy are pruned, keeps an explicit empty array [] so remote cleanup can execute.
134
+ */
135
+ export declare function pruneNonexistentTaxonomies(taxonomies: Record<string, string[]> | undefined, maps: TaxonomyLookupMaps): {
136
+ prunedTaxonomies: Record<string, string[]>;
137
+ removedTerms: PrunedTaxonomiesDetail;
138
+ };
139
+ /**
140
+ * Normalizes taxonomies for Layer A (base_snapshots.frontmatter_yaml).
141
+ * CRITICAL: Preserves ULID inputs verbatim (protecting loser terms in slug collisions),
142
+ * and resolves slug/name inputs to canonical slugs.
143
+ */
144
+ export declare function canonicalizeTaxonomiesForBaseline(taxonomies: Record<string, string[]>, maps: TaxonomyLookupMaps): Record<string, string[]>;
100
145
  //# sourceMappingURL=taxonomies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomies.d.ts","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taxonomies.d.ts","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ import fs from 'node:fs';
23
23
  import path from 'node:path';
24
24
  import yaml from 'js-yaml';
25
25
  import { formatYamlScalar, sanitizeTitleForFilename, tryDecodeTaxonomyTerm, } from '../utils/frontmatter.js';
26
+ import { aliasesOf, canonicalSlugOf, isKnownTaxonomyTerm, } from '../utils/taxonomy-key.js';
26
27
  /**
27
28
  * Recursively flattens hierarchical taxonomy terms (parent terms with nested children)
28
29
  * preserving parentId for each child.
@@ -53,6 +54,64 @@ import { ApiError } from '../client/error.js';
53
54
  import { createAuthedFetch } from '../client/http.js';
54
55
  import { unwrapEnvelope } from '../client/api.js';
55
56
  import { taxonomiesTermsEndpoint } from '../client/endpoints.js';
57
+ /**
58
+ * Serializes a category or tag definition to YAML.
59
+ * Emits decoded slug on disk and keeps raw percent-encoded slug as canonicalSlug when they differ.
60
+ * Uses formatYamlScalar to prevent type coercion of reserved words or numeric strings,
61
+ * and ensures 1-line scalar output to prevent js-yaml folded blocks (> -).
62
+ */
63
+ function serializeTaxonomyYaml(doc) {
64
+ const lines = [
65
+ `id: ${formatYamlScalar(doc.id)}`,
66
+ `name: ${formatYamlScalar(doc.name)}`,
67
+ `slug: ${formatYamlScalar(doc.slug)}`,
68
+ ];
69
+ if (doc.canonicalSlug && doc.canonicalSlug !== doc.slug) {
70
+ lines.push(`canonicalSlug: ${formatYamlScalar(doc.canonicalSlug)}`);
71
+ }
72
+ lines.push(`taxonomy: ${formatYamlScalar(doc.taxonomy)}`);
73
+ lines.push(`parentId: ${doc.parentId ? formatYamlScalar(doc.parentId) : 'null'}`);
74
+ lines.push(`count: ${doc.count}`);
75
+ return lines.join('\n') + '\n';
76
+ }
77
+ function writeAndPruneTaxonomyDir(params) {
78
+ fs.mkdirSync(params.dir, { recursive: true });
79
+ const activeFileNames = new Set();
80
+ for (const item of params.items) {
81
+ const label = item.label || item.slug;
82
+ const sanitized = sanitizeTitleForFilename(label);
83
+ const fileName = `${item.id}-${sanitized}.yaml`;
84
+ activeFileNames.add(fileName);
85
+ const filePath = path.join(params.dir, fileName);
86
+ const rawSlug = item.slug;
87
+ const decodedSlug = tryDecodeTaxonomyTerm(rawSlug);
88
+ const doc = {
89
+ id: item.id,
90
+ name: label,
91
+ slug: decodedSlug,
92
+ ...(decodedSlug !== rawSlug ? { canonicalSlug: rawSlug } : {}),
93
+ taxonomy: params.taxonomy,
94
+ parentId: item.parentId || null,
95
+ count: item.count ?? 0,
96
+ };
97
+ fs.writeFileSync(filePath, serializeTaxonomyYaml(doc), 'utf8');
98
+ }
99
+ let deletedCount = 0;
100
+ if (fs.existsSync(params.dir)) {
101
+ for (const file of fs.readdirSync(params.dir)) {
102
+ if (file.endsWith('.yaml') && !activeFileNames.has(file)) {
103
+ try {
104
+ fs.unlinkSync(path.join(params.dir, file));
105
+ deletedCount++;
106
+ }
107
+ catch {
108
+ // Ignore unlink errors
109
+ }
110
+ }
111
+ }
112
+ }
113
+ return { count: params.items.length, deletedCount };
114
+ }
56
115
  /**
57
116
  * Pulls categories and tags from EmDash API and saves them to local YAML files:
58
117
  * categories/<id>-<sanitizedLabel>.yaml
@@ -95,77 +154,25 @@ export async function pullTaxonomies(options) {
95
154
  let deletedCategoriesCount = 0;
96
155
  // Save categories and prune deleted ones (only if fetch succeeded; preserve on failure)
97
156
  if (categories !== null) {
98
- fs.mkdirSync(categoriesDir, { recursive: true });
99
- categoriesCount = categories.length;
100
- const activeCategoryFileNames = new Set();
101
- for (const cat of categories) {
102
- const label = cat.label || cat.slug;
103
- const sanitized = sanitizeTitleForFilename(label);
104
- const fileName = `${cat.id}-${sanitized}.yaml`;
105
- activeCategoryFileNames.add(fileName);
106
- const filePath = path.join(categoriesDir, fileName);
107
- const doc = {
108
- id: cat.id,
109
- name: label,
110
- slug: cat.slug,
111
- taxonomy: 'category',
112
- parentId: cat.parentId || null,
113
- count: cat.count ?? 0,
114
- };
115
- fs.writeFileSync(filePath, yaml.dump(doc, { indent: 2, quotingType: '"', forceQuotes: false }), 'utf8');
116
- }
117
- // Prune local category YAMLs not present on remote
118
- if (fs.existsSync(categoriesDir)) {
119
- for (const file of fs.readdirSync(categoriesDir)) {
120
- if (file.endsWith('.yaml') && !activeCategoryFileNames.has(file)) {
121
- try {
122
- fs.unlinkSync(path.join(categoriesDir, file));
123
- deletedCategoriesCount++;
124
- }
125
- catch {
126
- // Ignore unlink errors
127
- }
128
- }
129
- }
130
- }
157
+ const res = writeAndPruneTaxonomyDir({
158
+ dir: categoriesDir,
159
+ items: categories,
160
+ taxonomy: 'category',
161
+ });
162
+ categoriesCount = res.count;
163
+ deletedCategoriesCount = res.deletedCount;
131
164
  }
132
165
  let tagsCount = 0;
133
166
  let deletedTagsCount = 0;
134
167
  // Save tags and prune deleted ones (only if fetch succeeded; preserve on failure)
135
168
  if (tags !== null) {
136
- fs.mkdirSync(tagsDir, { recursive: true });
137
- tagsCount = tags.length;
138
- const activeTagFileNames = new Set();
139
- for (const tag of tags) {
140
- const label = tag.label || tag.slug;
141
- const sanitized = sanitizeTitleForFilename(label);
142
- const fileName = `${tag.id}-${sanitized}.yaml`;
143
- activeTagFileNames.add(fileName);
144
- const filePath = path.join(tagsDir, fileName);
145
- const doc = {
146
- id: tag.id,
147
- name: label,
148
- slug: tag.slug,
149
- taxonomy: 'tag',
150
- parentId: tag.parentId || null,
151
- count: tag.count ?? 0,
152
- };
153
- fs.writeFileSync(filePath, yaml.dump(doc, { indent: 2, quotingType: '"', forceQuotes: false }), 'utf8');
154
- }
155
- // Prune local tag YAMLs not present on remote
156
- if (fs.existsSync(tagsDir)) {
157
- for (const file of fs.readdirSync(tagsDir)) {
158
- if (file.endsWith('.yaml') && !activeTagFileNames.has(file)) {
159
- try {
160
- fs.unlinkSync(path.join(tagsDir, file));
161
- deletedTagsCount++;
162
- }
163
- catch {
164
- // Ignore unlink errors
165
- }
166
- }
167
- }
168
- }
169
+ const res = writeAndPruneTaxonomyDir({
170
+ dir: tagsDir,
171
+ items: tags,
172
+ taxonomy: 'tag',
173
+ });
174
+ tagsCount = res.count;
175
+ deletedTagsCount = res.deletedCount;
169
176
  }
170
177
  return {
171
178
  categoriesCount,
@@ -193,10 +200,35 @@ export function readTaxonomyDir(dir) {
193
200
  const content = fs.readFileSync(path.join(dir, file), 'utf8');
194
201
  const data = yaml.load(content);
195
202
  if (data && typeof data.id === 'string' && typeof data.slug === 'string') {
203
+ const rawSlug = String(data.slug).trim();
204
+ if (!rawSlug)
205
+ continue;
206
+ const rawCanonical = typeof data.canonicalSlug === 'string' && data.canonicalSlug.trim()
207
+ ? data.canonicalSlug.trim()
208
+ : undefined;
209
+ let slug;
210
+ let canonicalSlug;
211
+ if (rawCanonical && rawSlug) {
212
+ // New format (v0.1.26): canonicalSlug is explicit
213
+ slug = rawSlug;
214
+ canonicalSlug = rawCanonical;
215
+ }
216
+ else if (rawSlug.includes('%')) {
217
+ // Legacy format (v0.1.25): slug is percent-encoded
218
+ const decoded = tryDecodeTaxonomyTerm(rawSlug);
219
+ slug = decoded;
220
+ canonicalSlug = rawSlug;
221
+ }
222
+ else {
223
+ // Standard ASCII slug
224
+ slug = rawSlug;
225
+ canonicalSlug = rawSlug;
226
+ }
196
227
  items.push({
197
228
  id: data.id,
198
- slug: data.slug,
199
- name: typeof data.name === 'string' ? data.name : data.slug,
229
+ slug,
230
+ canonicalSlug,
231
+ name: typeof data.name === 'string' ? data.name : slug,
200
232
  parentId: typeof data.parentId === 'string' ? data.parentId : null,
201
233
  count: typeof data.count === 'number' ? data.count : undefined,
202
234
  });
@@ -212,33 +244,38 @@ export function readTaxonomyDir(dir) {
212
244
  return [];
213
245
  }
214
246
  }
247
+ /**
248
+ * Deterministic collision winner ordering: highest count first, ties broken by newest ULID (descending).
249
+ * Shared between Layer A (`loadLocalTaxonomyMaps`) and Layer B (`getLocalTaxonomiesSummary`)
250
+ * so duplicate canonical/decoded slugs always resolve to the identical winner term ID.
251
+ */
252
+ export function compareTaxonomyTermDeterministically(a, b) {
253
+ const countDiff = (b.count ?? 0) - (a.count ?? 0);
254
+ if (countDiff !== 0)
255
+ return countDiff;
256
+ return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
257
+ }
215
258
  /**
216
259
  * Loads local taxonomy mapping between term ULID and slug from categories/ and tags/ directories.
217
260
  */
218
261
  export function loadLocalTaxonomyMaps(workspaceRoot) {
219
262
  const catItems = readTaxonomyDir(path.join(workspaceRoot, 'categories'));
220
263
  const tagItems = readTaxonomyDir(path.join(workspaceRoot, 'tags'));
221
- // Sort items deterministically: highest count first, ties broken by newest ULID (descending).
222
- // Ensures the chosen mapping for duplicate slugs matches getLocalTaxonomiesSummary.
223
- const sortDeterministically = (items) => [...items].sort((a, b) => {
224
- const countDiff = (b.count ?? 0) - (a.count ?? 0);
225
- if (countDiff !== 0)
226
- return countDiff;
227
- return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
228
- });
264
+ const sortDeterministically = (items) => [...items].sort(compareTaxonomyTermDeterministically);
229
265
  const toMaps = (items) => {
230
266
  const slugToId = {};
231
267
  const idToSlug = {};
232
268
  const sorted = sortDeterministically(items);
233
- // 1. Register canonical slugs first
269
+ // Phase 1: Register canonical slugs first (Track 1 / Layer A truth)
234
270
  for (const item of sorted) {
235
- idToSlug[item.id] = item.slug;
236
- if (!slugToId[item.slug]) {
237
- slugToId[item.slug] = item.id;
271
+ const canonical = canonicalSlugOf(item);
272
+ idToSlug[item.id] = canonical;
273
+ if (!slugToId[canonical]) {
274
+ slugToId[canonical] = item.id;
238
275
  }
239
276
  }
240
- // 2. Collect candidate aliases (decoded percent-encoded slug and human-readable name)
241
- // Only register an alias if it does not collide with any canonical slug and maps uniquely to 1 term ID.
277
+ // Phase 2: Collect candidate aliases (decoded slug and human-readable name)
278
+ // Only register an alias if it does not collide with ANY canonical slug and maps uniquely to 1 term ID.
242
279
  const aliasToIds = new Map();
243
280
  const recordAliasCandidate = (alias, id) => {
244
281
  if (!alias || !alias.trim())
@@ -253,14 +290,10 @@ export function loadLocalTaxonomyMaps(workspaceRoot) {
253
290
  };
254
291
  for (const item of sorted) {
255
292
  recordAliasCandidate(item.name, item.id);
256
- if (item.slug.includes('%')) {
257
- try {
258
- const decoded = decodeURIComponent(item.slug);
259
- recordAliasCandidate(decoded, item.id);
260
- }
261
- catch {
262
- // Ignore malformed percent-encoding (URIError)
263
- }
293
+ const canonical = canonicalSlugOf(item);
294
+ const isCanonicalOwner = slugToId[canonical] === item.id;
295
+ if (isCanonicalOwner && item.slug && item.slug !== canonical) {
296
+ recordAliasCandidate(item.slug, item.id);
264
297
  }
265
298
  }
266
299
  for (const [alias, ids] of aliasToIds.entries()) {
@@ -299,6 +332,9 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
299
332
  if (decoded !== c.slug) {
300
333
  catMap[decoded] = c.name;
301
334
  }
335
+ if (c.canonicalSlug && c.canonicalSlug !== c.slug) {
336
+ catMap[c.canonicalSlug] = c.name;
337
+ }
302
338
  }
303
339
  }
304
340
  const tagMap = {};
@@ -309,11 +345,14 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
309
345
  if (decoded !== t.slug) {
310
346
  tagMap[decoded] = t.name;
311
347
  }
348
+ if (t.canonicalSlug && t.canonicalSlug !== t.slug) {
349
+ tagMap[t.canonicalSlug] = t.name;
350
+ }
312
351
  }
313
352
  }
314
353
  return {
315
- categories: Array.from(new Set(summary.categories.map((c) => c.slug))),
316
- tags: Array.from(new Set(summary.tags.map((t) => t.slug))),
354
+ categories: Array.from(new Set(summary.categories.flatMap((c) => aliasesOf(c)))),
355
+ tags: Array.from(new Set(summary.tags.flatMap((t) => aliasesOf(t)))),
317
356
  slugToName: {
318
357
  category: catMap,
319
358
  tag: tagMap,
@@ -328,6 +367,31 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
328
367
  };
329
368
  }
330
369
  }
370
+ /**
371
+ * Sorts taxonomy terms deterministically and deduplicates by slug, keeping the winner term.
372
+ * Mode 'slug-grouped' orders by slug ASC first (used for categories display).
373
+ * Mode 'frequency' orders by highest count first, newest ULID break (used for tags display).
374
+ */
375
+ export function dedupeTermsBySlug(items, mode = 'frequency') {
376
+ const sorted = [...items].sort((a, b) => {
377
+ if (mode === 'slug-grouped') {
378
+ if (a.slug < b.slug)
379
+ return -1;
380
+ if (a.slug > b.slug)
381
+ return 1;
382
+ }
383
+ return compareTaxonomyTermDeterministically(a, b);
384
+ });
385
+ const seen = new Set();
386
+ const result = [];
387
+ for (const item of sorted) {
388
+ if (!seen.has(item.slug)) {
389
+ seen.add(item.slug);
390
+ result.push(item);
391
+ }
392
+ }
393
+ return result;
394
+ }
331
395
  /**
332
396
  * Reads local categories/ and tags/ YAML definitions and returns structured summary.
333
397
  * Tags are sorted by count descending (most used first), then by ULID descending (newest first).
@@ -337,34 +401,12 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
337
401
  export function getLocalTaxonomiesSummary(workspaceRoot) {
338
402
  const categoriesDir = path.join(workspaceRoot, 'categories');
339
403
  const tagsDir = path.join(workspaceRoot, 'tags');
340
- const dedupeBySlug = (items) => {
341
- const seen = new Set();
342
- const result = [];
343
- for (const item of items) {
344
- if (!seen.has(item.slug)) {
345
- seen.add(item.slug);
346
- result.push(item);
347
- }
348
- }
349
- return result;
350
- };
351
- const categories = dedupeBySlug(readTaxonomyDir(categoriesDir).sort((a, b) => {
352
- if (a.slug < b.slug)
353
- return -1;
354
- if (a.slug > b.slug)
355
- return 1;
356
- const countDiff = (b.count ?? 0) - (a.count ?? 0);
357
- if (countDiff !== 0)
358
- return countDiff;
359
- return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
360
- }));
404
+ // Primary sort key `slug` asc orders distinct categories for display; within identical `slug` groups
405
+ // (`a.slug === b.slug`), `compareTaxonomyTermDeterministically` decides the winner kept by `dedupeTermsBySlug`,
406
+ // guaranteeing 100% winner parity with `loadLocalTaxonomyMaps`.
407
+ const categories = dedupeTermsBySlug(readTaxonomyDir(categoriesDir), 'slug-grouped');
361
408
  // Sort tags: highest count (usage frequency) first; ties broken by newest ULID (descending)
362
- const tags = dedupeBySlug(readTaxonomyDir(tagsDir).sort((a, b) => {
363
- const countDiff = (b.count ?? 0) - (a.count ?? 0);
364
- if (countDiff !== 0)
365
- return countDiff;
366
- return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
367
- }));
409
+ const tags = dedupeTermsBySlug(readTaxonomyDir(tagsDir), 'frequency');
368
410
  return { categories, tags };
369
411
  }
370
412
  /**
@@ -471,4 +513,101 @@ export function findClosestTaxonomySuggestions(input, items, maxSuggestions = 3)
471
513
  }
472
514
  return uniqueDisplays;
473
515
  }
516
+ /**
517
+ * Checks whether frontmatter contains taxonomy terms that no longer exist in local definitions.
518
+ */
519
+ export function carriesPrunedTaxonomies(taxonomies, maps) {
520
+ if (!taxonomies)
521
+ return false;
522
+ for (const [taxName, terms] of Object.entries(taxonomies)) {
523
+ if (taxName !== 'category' &&
524
+ taxName !== 'tag' &&
525
+ taxName !== 'categories' &&
526
+ taxName !== 'tags') {
527
+ continue;
528
+ }
529
+ const kind = taxName === 'categories' || taxName === 'category' ? 'category' : 'tag';
530
+ if (!Array.isArray(terms))
531
+ continue;
532
+ for (const term of terms) {
533
+ if (!isKnownTaxonomyTerm(term, kind, maps)) {
534
+ return true;
535
+ }
536
+ }
537
+ }
538
+ return false;
539
+ }
540
+ /**
541
+ * Filters out pruned taxonomy terms, preserving valid terms.
542
+ * If all terms in a taxonomy are pruned, keeps an explicit empty array [] so remote cleanup can execute.
543
+ */
544
+ export function pruneNonexistentTaxonomies(taxonomies, maps) {
545
+ const prunedTaxonomies = {};
546
+ const removedTerms = {};
547
+ if (!taxonomies)
548
+ return { prunedTaxonomies, removedTerms };
549
+ for (const [key, terms] of Object.entries(taxonomies)) {
550
+ if (!Array.isArray(terms))
551
+ continue;
552
+ const kind = key === 'categories' || key === 'category'
553
+ ? 'category'
554
+ : key === 'tags' || key === 'tag'
555
+ ? 'tag'
556
+ : null;
557
+ if (!kind) {
558
+ prunedTaxonomies[key] = [...terms];
559
+ continue;
560
+ }
561
+ const retained = [];
562
+ const removed = [];
563
+ for (const term of terms) {
564
+ if (isKnownTaxonomyTerm(term, kind, maps)) {
565
+ retained.push(term);
566
+ }
567
+ else {
568
+ removed.push(term);
569
+ }
570
+ }
571
+ prunedTaxonomies[key] = retained;
572
+ if (removed.length > 0) {
573
+ if (kind === 'category') {
574
+ removedTerms.categories = [...(removedTerms.categories ?? []), ...removed];
575
+ }
576
+ else {
577
+ removedTerms.tags = [...(removedTerms.tags ?? []), ...removed];
578
+ }
579
+ }
580
+ }
581
+ return { prunedTaxonomies, removedTerms };
582
+ }
583
+ /**
584
+ * Normalizes taxonomies for Layer A (base_snapshots.frontmatter_yaml).
585
+ * CRITICAL: Preserves ULID inputs verbatim (protecting loser terms in slug collisions),
586
+ * and resolves slug/name inputs to canonical slugs.
587
+ */
588
+ export function canonicalizeTaxonomiesForBaseline(taxonomies, maps) {
589
+ const canon = {};
590
+ for (const [key, terms] of Object.entries(taxonomies)) {
591
+ const kind = key === 'categories' || key === 'category'
592
+ ? 'category'
593
+ : key === 'tags' || key === 'tag'
594
+ ? 'tag'
595
+ : null;
596
+ if (!kind) {
597
+ canon[key] = [...terms];
598
+ continue;
599
+ }
600
+ canon[key] = terms.map((term) => {
601
+ // If already a valid ULID, keep ULID verbatim (prevents silent replacement of loser term)
602
+ if (maps.idToSlug[kind]?.[term])
603
+ return term;
604
+ const id = maps.slugToId[kind]?.[term];
605
+ if (id && maps.idToSlug[kind]?.[id]) {
606
+ return maps.idToSlug[kind][id];
607
+ }
608
+ return term;
609
+ });
610
+ }
611
+ return canon;
612
+ }
474
613
  //# sourceMappingURL=taxonomies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomies.js","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AAajC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAwB,EACxB,iBAAiB,GAAkB,IAAI,EACvC,OAAO,GAAgB,IAAI,GAAG,EAAU,EACxC,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,SAAS;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,iBAAiB,IAAI,IAAI,CAAC;QAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,IAAI;YACP,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAmBjE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,KAAK,EAAE,OAA2B,EAA2B,EAAE;QAChF,MAAM,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;gBACxC,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,mBAAmB,OAAO,WAAW,GAAG,CAAC,UAAU,EAAE;gBAC9D,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG;gBACb,UAAU,EAAE,mEAAmE;aAChF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,cAAc,CAA0B,IAAI,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,CACf,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACvD,CAAC;QACpB,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACxC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,UAAU,KAAK,IAAI,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEzD,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAE/B,wFAAwF;IACxF,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;QACpC,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;YACpC,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,SAAS,OAAO,CAAC;YAC/C,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAEpD,MAAM,GAAG,GAAG;gBACV,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;gBAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;aACtB,CAAC;YACF,EAAE,CAAC,aAAa,CACd,QAAQ,EACR,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EACnE,MAAM,CACP,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjE,IAAI,CAAC;wBACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;wBAC9C,sBAAsB,EAAE,CAAC;oBAC3B,CAAC;oBAAC,MAAM,CAAC;wBACP,uBAAuB;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,kFAAkF;IAClF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;YACpC,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,SAAS,OAAO,CAAC;YAC/C,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE9C,MAAM,GAAG,GAAG;gBACV,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;gBAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;aACtB,CAAC;YACF,EAAE,CAAC,aAAa,CACd,QAAQ,EACR,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EACnE,MAAM,CACP,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC;wBACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;wBACxC,gBAAgB,EAAE,CAAC;oBACrB,CAAC;oBAAC,MAAM,CAAC;wBACP,uBAAuB;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,eAAe;QACf,SAAS;QACT,sBAAsB;QACtB,gBAAgB;QAChB,gBAAgB;QAChB,UAAU;KACX,CAAC;AACJ,CAAC;AAoBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAA4B,CAAC;gBAC3D,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACzE,KAAK,CAAC,IAAI,CAAC;wBACT,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;wBAC3D,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;wBAClE,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;qBAC/D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IAIzD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnE,8FAA8F;IAC9F,oFAAoF;IACpF,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAE,EAAE,CAC3D,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,CAAC,KAA0B,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAE5C,oCAAoC;QACpC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAED,sFAAsF;QACtF,wGAAwG;QACxG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,MAAM,oBAAoB,GAAG,CAAC,KAAyB,EAAE,EAAU,EAAE,EAAE;YACrE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAAE,OAAO;YACpC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;gBACxB,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACd,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9C,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,+CAA+C;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;gBACvB,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhC,OAAO;QACL,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,EAAE,MAAM,CAAC,QAAQ;SACrB;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,EAAE,MAAM,CAAC,QAAQ;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,aAAqB;IAC/D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACxB,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACxB,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,UAAU,EAAE;gBACV,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,MAAM;aACZ;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;SACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,aAAqB;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,CAAC,KAA0B,EAAuB,EAAE;QACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,YAAY,CAC7B,eAAe,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CACH,CAAC;IACF,4FAA4F;IAC5F,MAAM,IAAI,GAAG,YAAY,CACvB,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA+B,EAC/B,OAAqC;IAErC,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,sBAAsB,CAAC;IACvE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,gBAAgB,CAAC;IAErD,MAAM,UAAU,GAAG,CAAC,IAAuB,EAAU,EAAE;QACrD,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACpD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACxE,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,GAAG,aAAa,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GACZ,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,aAAa;YACvC,CAAC,CAAC,cAAc,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,aAAa,sBAAsB;YAC/E,CAAC,CAAC,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,0BAA0B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,QAAQ,GACZ,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,QAAQ,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACtD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtB,IAAI,OAAO,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,OAAO,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACnB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY;YAChC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW;YAC3B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CACtB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,OAAO,GAAG,OAAO,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,KAAa,EACb,KAA0B,EAC1B,cAAc,GAAG,CAAC;IAElB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CACrB,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,EAC1C,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAClE,CAAC;QAEF,qCAAqC;QACrC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,QAAQ,IAAI,GAAG,CAAC;QAClB,CAAC;QAED,IAAI,OAAe,CAAC;QACpB,IAAI,OAAO,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,GAAG,GAAG,OAAO,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvC,qDAAqD;IACrD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACpB,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,cAAc,CAAC,MAAM,IAAI,cAAc;gBAAE,MAAM;QACrD,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"taxonomies.js","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"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"}