@bendyline/docblocks 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/README.md +76 -11
  2. package/dist/chunk-2D7Y4IR3.js +1293 -0
  3. package/dist/chunk-2D7Y4IR3.js.map +1 -0
  4. package/dist/chunk-5MYAICRE.js +957 -0
  5. package/dist/chunk-5MYAICRE.js.map +1 -0
  6. package/dist/chunk-75UUF6C4.js +802 -0
  7. package/dist/chunk-75UUF6C4.js.map +1 -0
  8. package/dist/chunk-AEHCVWU5.js +25 -0
  9. package/dist/chunk-AEHCVWU5.js.map +1 -0
  10. package/dist/chunk-AYZ4HN5M.js +20 -0
  11. package/dist/chunk-AYZ4HN5M.js.map +1 -0
  12. package/dist/chunk-EGNDADXB.js +111 -0
  13. package/dist/chunk-EGNDADXB.js.map +1 -0
  14. package/dist/chunk-EZKJZUNJ.js +13 -0
  15. package/dist/chunk-EZKJZUNJ.js.map +1 -0
  16. package/dist/chunk-FNW556FN.js +75 -0
  17. package/dist/chunk-FNW556FN.js.map +1 -0
  18. package/dist/chunk-GCPBEMMH.js +563 -0
  19. package/dist/chunk-GCPBEMMH.js.map +1 -0
  20. package/dist/chunk-J32GU3F3.js +1664 -0
  21. package/dist/chunk-J32GU3F3.js.map +1 -0
  22. package/dist/chunk-PGR7LK6D.js +1062 -0
  23. package/dist/chunk-PGR7LK6D.js.map +1 -0
  24. package/dist/chunk-RQJRQF46.js +787 -0
  25. package/dist/chunk-RQJRQF46.js.map +1 -0
  26. package/dist/{chunk-ME76RUMR.js → chunk-RVQHY3XU.js} +15 -1
  27. package/dist/chunk-RVQHY3XU.js.map +1 -0
  28. package/dist/chunk-SI2LU2RP.js +224 -0
  29. package/dist/chunk-SI2LU2RP.js.map +1 -0
  30. package/dist/chunk-W5UUUII5.js +142 -0
  31. package/dist/chunk-W5UUUII5.js.map +1 -0
  32. package/dist/document/document-session.d.ts +127 -0
  33. package/dist/document/document-session.d.ts.map +1 -0
  34. package/dist/document/document-session.js +749 -0
  35. package/dist/document/document-session.js.map +1 -0
  36. package/dist/document/filesystem-target.d.ts +17 -0
  37. package/dist/document/filesystem-target.d.ts.map +1 -0
  38. package/dist/document/filesystem-target.js +70 -0
  39. package/dist/document/filesystem-target.js.map +1 -0
  40. package/dist/document/index.d.ts +6 -0
  41. package/dist/document/index.d.ts.map +1 -0
  42. package/dist/document/index.js +4 -0
  43. package/dist/document/index.js.map +1 -0
  44. package/dist/document/recovery-journal.d.ts +125 -0
  45. package/dist/document/recovery-journal.d.ts.map +1 -0
  46. package/dist/document/recovery-journal.js +385 -0
  47. package/dist/document/recovery-journal.js.map +1 -0
  48. package/dist/document/types.d.ts +89 -0
  49. package/dist/document/types.d.ts.map +1 -0
  50. package/dist/document/types.js +9 -0
  51. package/dist/document/types.js.map +1 -0
  52. package/dist/filesystem/commit-lock.d.ts +3 -0
  53. package/dist/filesystem/commit-lock.d.ts.map +1 -0
  54. package/dist/filesystem/commit-lock.js +20 -0
  55. package/dist/filesystem/commit-lock.js.map +1 -0
  56. package/dist/filesystem/dbk-workspace.d.ts +34 -0
  57. package/dist/filesystem/dbk-workspace.d.ts.map +1 -0
  58. package/dist/filesystem/dbk-workspace.js +85 -0
  59. package/dist/filesystem/dbk-workspace.js.map +1 -0
  60. package/dist/filesystem/electron-provider-v2.d.ts +36 -0
  61. package/dist/filesystem/electron-provider-v2.d.ts.map +1 -0
  62. package/dist/filesystem/electron-provider-v2.js +503 -0
  63. package/dist/filesystem/electron-provider-v2.js.map +1 -0
  64. package/dist/filesystem/electron-provider.d.ts +6 -3
  65. package/dist/filesystem/electron-provider.d.ts.map +1 -1
  66. package/dist/filesystem/electron-provider.js +18 -13
  67. package/dist/filesystem/electron-provider.js.map +1 -1
  68. package/dist/filesystem/electron.d.ts +4 -0
  69. package/dist/filesystem/electron.d.ts.map +1 -0
  70. package/dist/filesystem/electron.js +4 -0
  71. package/dist/filesystem/electron.js.map +1 -0
  72. package/dist/filesystem/filesystem-content-container.d.ts +1 -1
  73. package/dist/filesystem/filesystem-content-container.d.ts.map +1 -1
  74. package/dist/filesystem/filesystem-content-container.js +50 -13
  75. package/dist/filesystem/filesystem-content-container.js.map +1 -1
  76. package/dist/filesystem/fs-error.d.ts +46 -0
  77. package/dist/filesystem/fs-error.d.ts.map +1 -0
  78. package/dist/filesystem/fs-error.js +170 -0
  79. package/dist/filesystem/fs-error.js.map +1 -0
  80. package/dist/filesystem/index.d.ts +15 -1
  81. package/dist/filesystem/index.d.ts.map +1 -1
  82. package/dist/filesystem/index.js +13 -0
  83. package/dist/filesystem/index.js.map +1 -1
  84. package/dist/filesystem/indexeddb-content-container.d.ts +3 -1
  85. package/dist/filesystem/indexeddb-content-container.d.ts.map +1 -1
  86. package/dist/filesystem/indexeddb-content-container.js +18 -11
  87. package/dist/filesystem/indexeddb-content-container.js.map +1 -1
  88. package/dist/filesystem/indexeddb-provider-v2.d.ts +96 -0
  89. package/dist/filesystem/indexeddb-provider-v2.d.ts.map +1 -0
  90. package/dist/filesystem/indexeddb-provider-v2.js +1241 -0
  91. package/dist/filesystem/indexeddb-provider-v2.js.map +1 -0
  92. package/dist/filesystem/indexeddb-provider.d.ts +21 -14
  93. package/dist/filesystem/indexeddb-provider.d.ts.map +1 -1
  94. package/dist/filesystem/indexeddb-provider.js +111 -261
  95. package/dist/filesystem/indexeddb-provider.js.map +1 -1
  96. package/dist/filesystem/indexeddb-store.d.ts +34 -0
  97. package/dist/filesystem/indexeddb-store.d.ts.map +1 -0
  98. package/dist/filesystem/indexeddb-store.js +165 -0
  99. package/dist/filesystem/indexeddb-store.js.map +1 -0
  100. package/dist/filesystem/indexeddb.d.ts +5 -0
  101. package/dist/filesystem/indexeddb.d.ts.map +1 -0
  102. package/dist/filesystem/indexeddb.js +5 -0
  103. package/dist/filesystem/indexeddb.js.map +1 -0
  104. package/dist/filesystem/legacy-v2-adapter.d.ts +62 -0
  105. package/dist/filesystem/legacy-v2-adapter.d.ts.map +1 -0
  106. package/dist/filesystem/legacy-v2-adapter.js +499 -0
  107. package/dist/filesystem/legacy-v2-adapter.js.map +1 -0
  108. package/dist/filesystem/memory-provider-v2.d.ts +92 -0
  109. package/dist/filesystem/memory-provider-v2.d.ts.map +1 -0
  110. package/dist/filesystem/memory-provider-v2.js +615 -0
  111. package/dist/filesystem/memory-provider-v2.js.map +1 -0
  112. package/dist/filesystem/memory-provider.d.ts +54 -0
  113. package/dist/filesystem/memory-provider.d.ts.map +1 -0
  114. package/dist/filesystem/memory-provider.js +132 -0
  115. package/dist/filesystem/memory-provider.js.map +1 -0
  116. package/dist/filesystem/memory.d.ts +4 -0
  117. package/dist/filesystem/memory.d.ts.map +1 -0
  118. package/dist/filesystem/memory.js +4 -0
  119. package/dist/filesystem/memory.js.map +1 -0
  120. package/dist/filesystem/move-entry.d.ts +9 -0
  121. package/dist/filesystem/move-entry.d.ts.map +1 -0
  122. package/dist/filesystem/move-entry.js +103 -0
  123. package/dist/filesystem/move-entry.js.map +1 -0
  124. package/dist/filesystem/move-error.d.ts +53 -0
  125. package/dist/filesystem/move-error.d.ts.map +1 -0
  126. package/dist/filesystem/move-error.js +99 -0
  127. package/dist/filesystem/move-error.js.map +1 -0
  128. package/dist/filesystem/native-provider-v2.d.ts +75 -0
  129. package/dist/filesystem/native-provider-v2.d.ts.map +1 -0
  130. package/dist/filesystem/native-provider-v2.js +849 -0
  131. package/dist/filesystem/native-provider-v2.js.map +1 -0
  132. package/dist/filesystem/native-provider.d.ts +9 -1
  133. package/dist/filesystem/native-provider.d.ts.map +1 -1
  134. package/dist/filesystem/native-provider.js +172 -37
  135. package/dist/filesystem/native-provider.js.map +1 -1
  136. package/dist/filesystem/native.d.ts +4 -0
  137. package/dist/filesystem/native.d.ts.map +1 -0
  138. package/dist/filesystem/native.js +4 -0
  139. package/dist/filesystem/native.js.map +1 -0
  140. package/dist/filesystem/types.d.ts +37 -4
  141. package/dist/filesystem/types.d.ts.map +1 -1
  142. package/dist/filesystem/types.js +11 -3
  143. package/dist/filesystem/types.js.map +1 -1
  144. package/dist/filesystem/v2.d.ts +172 -0
  145. package/dist/filesystem/v2.d.ts.map +1 -0
  146. package/dist/filesystem/v2.js +16 -0
  147. package/dist/filesystem/v2.js.map +1 -0
  148. package/dist/filesystem/workspace-path.d.ts +21 -0
  149. package/dist/filesystem/workspace-path.d.ts.map +1 -0
  150. package/dist/filesystem/workspace-path.js +80 -0
  151. package/dist/filesystem/workspace-path.js.map +1 -0
  152. package/dist/host/filesystem-v2.d.ts +45 -0
  153. package/dist/host/filesystem-v2.d.ts.map +1 -0
  154. package/dist/host/filesystem-v2.js +13 -0
  155. package/dist/host/filesystem-v2.js.map +1 -0
  156. package/dist/host/git.d.ts +200 -0
  157. package/dist/host/git.d.ts.map +1 -0
  158. package/dist/host/git.js +15 -0
  159. package/dist/host/git.js.map +1 -0
  160. package/dist/host/index.d.ts +4 -1
  161. package/dist/host/index.d.ts.map +1 -1
  162. package/dist/host/index.js +2 -0
  163. package/dist/host/index.js.map +1 -1
  164. package/dist/host/types.d.ts +114 -31
  165. package/dist/host/types.d.ts.map +1 -1
  166. package/dist/host/wire-policy.d.ts +22 -0
  167. package/dist/host/wire-policy.d.ts.map +1 -0
  168. package/dist/host/wire-policy.js +92 -0
  169. package/dist/host/wire-policy.js.map +1 -0
  170. package/dist/index.d.ts +2 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +2 -1
  173. package/dist/index.js.map +1 -1
  174. package/dist/mcp/index.d.ts +4 -0
  175. package/dist/mcp/index.d.ts.map +1 -0
  176. package/dist/mcp/index.js +4 -0
  177. package/dist/mcp/index.js.map +1 -0
  178. package/dist/mcp/types.d.ts +466 -0
  179. package/dist/mcp/types.d.ts.map +1 -0
  180. package/dist/mcp/types.js +25 -0
  181. package/dist/mcp/types.js.map +1 -0
  182. package/dist/mcp/wire.d.ts +29 -0
  183. package/dist/mcp/wire.d.ts.map +1 -0
  184. package/dist/mcp/wire.js +1046 -0
  185. package/dist/mcp/wire.js.map +1 -0
  186. package/dist/mcp/zod.d.ts +5763 -0
  187. package/dist/mcp/zod.d.ts.map +1 -0
  188. package/dist/mcp/zod.js +908 -0
  189. package/dist/mcp/zod.js.map +1 -0
  190. package/dist/types-CX893hgH.d.ts +468 -0
  191. package/dist/types-CsX6EN2t.d.ts +301 -0
  192. package/dist/types-eOlt9J7n.d.ts +478 -0
  193. package/dist/vscode/index.d.ts +3 -0
  194. package/dist/vscode/index.d.ts.map +1 -0
  195. package/dist/vscode/index.js +3 -0
  196. package/dist/vscode/index.js.map +1 -0
  197. package/dist/vscode/messages.d.ts +204 -0
  198. package/dist/vscode/messages.d.ts.map +1 -0
  199. package/dist/vscode/messages.js +494 -0
  200. package/dist/vscode/messages.js.map +1 -0
  201. package/dist/workspace/index.d.ts +3 -2
  202. package/dist/workspace/index.d.ts.map +1 -1
  203. package/dist/workspace/index.js +2 -1
  204. package/dist/workspace/index.js.map +1 -1
  205. package/dist/workspace/reconcile-electron.d.ts +19 -0
  206. package/dist/workspace/reconcile-electron.d.ts.map +1 -0
  207. package/dist/workspace/reconcile-electron.js +42 -0
  208. package/dist/workspace/reconcile-electron.js.map +1 -0
  209. package/dist/workspace/types.d.ts +41 -1
  210. package/dist/workspace/types.d.ts.map +1 -1
  211. package/dist/workspace/types.js +0 -4
  212. package/dist/workspace/types.js.map +1 -1
  213. package/dist/workspace/workspace-manager.d.ts +17 -5
  214. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  215. package/dist/workspace/workspace-manager.js +55 -11
  216. package/dist/workspace/workspace-manager.js.map +1 -1
  217. package/dist/workspace-path-CWVrcuPL.d.ts +21 -0
  218. package/package.json +43 -2
  219. package/src/document/document-session.ts +834 -0
  220. package/src/document/filesystem-target.ts +109 -0
  221. package/src/document/index.ts +41 -0
  222. package/src/document/recovery-journal.ts +536 -0
  223. package/src/document/types.ts +116 -0
  224. package/src/filesystem/commit-lock.ts +29 -0
  225. package/src/filesystem/dbk-workspace.ts +135 -0
  226. package/src/filesystem/electron-provider-v2.ts +630 -0
  227. package/src/filesystem/electron-provider.ts +25 -14
  228. package/src/filesystem/electron.ts +3 -0
  229. package/src/filesystem/filesystem-content-container.ts +53 -15
  230. package/src/filesystem/fs-error.ts +234 -0
  231. package/src/filesystem/index.ts +119 -0
  232. package/src/filesystem/indexeddb-content-container.ts +20 -12
  233. package/src/filesystem/indexeddb-provider-v2.ts +1740 -0
  234. package/src/filesystem/indexeddb-provider.ts +126 -300
  235. package/src/filesystem/indexeddb-store.ts +207 -0
  236. package/src/filesystem/indexeddb.ts +12 -0
  237. package/src/filesystem/legacy-v2-adapter.ts +779 -0
  238. package/src/filesystem/memory-provider-v2.ts +896 -0
  239. package/src/filesystem/memory-provider.ts +180 -0
  240. package/src/filesystem/memory.ts +15 -0
  241. package/src/filesystem/move-entry.ts +142 -0
  242. package/src/filesystem/move-error.ts +159 -0
  243. package/src/filesystem/native-provider-v2.ts +1165 -0
  244. package/src/filesystem/native-provider.ts +194 -41
  245. package/src/filesystem/native.ts +16 -0
  246. package/src/filesystem/types.ts +49 -4
  247. package/src/filesystem/v2.ts +231 -0
  248. package/src/filesystem/workspace-path.ts +92 -0
  249. package/src/host/filesystem-v2.ts +104 -0
  250. package/src/host/git.ts +246 -0
  251. package/src/host/index.ts +46 -0
  252. package/src/host/types.ts +155 -34
  253. package/src/host/wire-policy.ts +103 -0
  254. package/src/index.ts +2 -1
  255. package/src/mcp/index.ts +3 -0
  256. package/src/mcp/types.ts +594 -0
  257. package/src/mcp/wire.ts +1280 -0
  258. package/src/mcp/zod.ts +1000 -0
  259. package/src/vscode/index.ts +2 -0
  260. package/src/vscode/messages.ts +704 -0
  261. package/src/workspace/index.ts +8 -1
  262. package/src/workspace/reconcile-electron.ts +65 -0
  263. package/src/workspace/types.ts +39 -1
  264. package/src/workspace/workspace-manager.ts +71 -10
  265. package/dist/chunk-GUNM43XZ.js +0 -63
  266. package/dist/chunk-GUNM43XZ.js.map +0 -1
  267. package/dist/chunk-IM7LCQJ6.js +0 -850
  268. package/dist/chunk-IM7LCQJ6.js.map +0 -1
  269. package/dist/chunk-ME76RUMR.js.map +0 -1
  270. package/dist/index-pgBHBQ9G.d.ts +0 -213
@@ -0,0 +1,494 @@
1
+ /**
2
+ * Typed message protocol between the extension host and webview.
3
+ */
4
+ import { HOST_WIRE_LIMITS, isBoundedString } from '../host/wire-policy.js';
5
+ const MAX_REQUEST_ID = 2147483647;
6
+ export const DOCBLOCKS_ACCENT_COLORS = [
7
+ 'brown',
8
+ 'green',
9
+ 'blue',
10
+ 'purple',
11
+ 'maroon',
12
+ 'orange',
13
+ 'gray',
14
+ ];
15
+ /**
16
+ * The webview boundary is untrusted at runtime. Keep malformed or stale
17
+ * messages out of the document session instead of relying on a TypeScript
18
+ * assertion in the extension host.
19
+ */
20
+ export function parseWebviewToExtensionMessage(value) {
21
+ if (!isRecord(value) || typeof value.type !== 'string')
22
+ return null;
23
+ switch (value.type) {
24
+ case 'ready':
25
+ return hasOnlyKeys(value, ['type']) ? { type: 'ready' } : null;
26
+ case 'setAutoSave':
27
+ return hasOnlyKeys(value, ['type', 'enabled']) && typeof value.enabled === 'boolean'
28
+ ? { type: 'setAutoSave', enabled: value.enabled }
29
+ : null;
30
+ case 'setAccentColor':
31
+ return hasOnlyKeys(value, ['type', 'accentColor']) &&
32
+ isDocBlocksAccentColor(value.accentColor)
33
+ ? { type: 'setAccentColor', accentColor: value.accentColor }
34
+ : null;
35
+ case 'edit':
36
+ return hasOnlyKeys(value, [
37
+ 'type',
38
+ 'content',
39
+ 'sessionId',
40
+ 'clientRevision',
41
+ 'baseDocumentVersion',
42
+ ]) &&
43
+ hasBoundedString(value, 'content', HOST_WIRE_LIMITS.documentCharacters) &&
44
+ isSessionEnvelope(value)
45
+ ? {
46
+ type: 'edit',
47
+ content: value.content,
48
+ sessionId: value.sessionId,
49
+ clientRevision: value.clientRevision,
50
+ baseDocumentVersion: value.baseDocumentVersion,
51
+ }
52
+ : null;
53
+ case 'save':
54
+ return hasOnlyKeys(value, [
55
+ 'type',
56
+ 'sessionId',
57
+ 'requestId',
58
+ 'clientRevision',
59
+ 'baseDocumentVersion',
60
+ ]) &&
61
+ isSessionEnvelope(value) &&
62
+ hasRequestId(value)
63
+ ? {
64
+ type: 'save',
65
+ sessionId: value.sessionId,
66
+ requestId: value.requestId,
67
+ clientRevision: value.clientRevision,
68
+ baseDocumentVersion: value.baseDocumentVersion,
69
+ }
70
+ : null;
71
+ case 'resolveConflict':
72
+ return hasOnlyKeys(value, ['type', 'sessionId', 'choice']) &&
73
+ hasBoundedString(value, 'sessionId', HOST_WIRE_LIMITS.identifierCharacters, 1) &&
74
+ (value.choice === 'use-local' || value.choice === 'use-external')
75
+ ? { type: 'resolveConflict', sessionId: value.sessionId, choice: value.choice }
76
+ : null;
77
+ case 'resolveMedia':
78
+ return hasOnlyKeys(value, ['type', 'requestId', 'ref']) &&
79
+ hasRequestId(value) &&
80
+ hasBoundedString(value, 'ref', HOST_WIRE_LIMITS.pathCharacters, 1)
81
+ ? { type: 'resolveMedia', requestId: value.requestId, ref: value.ref }
82
+ : null;
83
+ case 'listMedia':
84
+ return hasOnlyKeys(value, ['type', 'requestId']) && hasRequestId(value)
85
+ ? { type: 'listMedia', requestId: value.requestId }
86
+ : null;
87
+ case 'addMedia':
88
+ return hasOnlyKeys(value, ['type', 'requestId', 'name', 'dataBase64', 'mimeType']) &&
89
+ hasRequestId(value) &&
90
+ hasBoundedString(value, 'name', HOST_WIRE_LIMITS.pathCharacters, 1) &&
91
+ hasBoundedString(value, 'dataBase64', HOST_WIRE_LIMITS.base64Characters) &&
92
+ hasMimeType(value, 'mimeType')
93
+ ? {
94
+ type: 'addMedia',
95
+ requestId: value.requestId,
96
+ name: value.name,
97
+ dataBase64: value.dataBase64,
98
+ mimeType: value.mimeType,
99
+ }
100
+ : null;
101
+ case 'removeMedia':
102
+ return hasOnlyKeys(value, ['type', 'requestId', 'ref']) &&
103
+ hasRequestId(value) &&
104
+ hasBoundedString(value, 'ref', HOST_WIRE_LIMITS.pathCharacters, 1)
105
+ ? { type: 'removeMedia', requestId: value.requestId, ref: value.ref }
106
+ : null;
107
+ case 'saveExport':
108
+ return hasOnlyKeys(value, [
109
+ 'type',
110
+ 'requestId',
111
+ 'filename',
112
+ 'dataBase64',
113
+ 'mimeType',
114
+ 'grantId',
115
+ ]) &&
116
+ hasRequestId(value) &&
117
+ hasSafeFilename(value, 'filename') &&
118
+ hasBoundedString(value, 'dataBase64', HOST_WIRE_LIMITS.base64Characters) &&
119
+ hasMimeType(value, 'mimeType') &&
120
+ hasNullableBoundedString(value, 'grantId', HOST_WIRE_LIMITS.identifierCharacters, 1)
121
+ ? {
122
+ type: 'saveExport',
123
+ requestId: value.requestId,
124
+ filename: value.filename,
125
+ dataBase64: value.dataBase64,
126
+ mimeType: value.mimeType,
127
+ grantId: value.grantId,
128
+ }
129
+ : null;
130
+ case 'resolveExportTarget':
131
+ return hasOnlyKeys(value, ['type', 'requestId', 'filename']) &&
132
+ hasRequestId(value) &&
133
+ hasSafeFilename(value, 'filename')
134
+ ? { type: 'resolveExportTarget', requestId: value.requestId, filename: value.filename }
135
+ : null;
136
+ case 'pickExportTarget':
137
+ return hasOnlyKeys(value, ['type', 'requestId', 'filename', 'currentGrantId']) &&
138
+ hasRequestId(value) &&
139
+ hasSafeFilename(value, 'filename') &&
140
+ hasNullableBoundedString(value, 'currentGrantId', HOST_WIRE_LIMITS.identifierCharacters, 1)
141
+ ? {
142
+ type: 'pickExportTarget',
143
+ requestId: value.requestId,
144
+ filename: value.filename,
145
+ currentGrantId: value.currentGrantId,
146
+ }
147
+ : null;
148
+ case 'readWorkspaceFile':
149
+ return hasOnlyKeys(value, ['type', 'requestId', 'path']) &&
150
+ hasRequestId(value) &&
151
+ hasBoundedString(value, 'path', HOST_WIRE_LIMITS.pathCharacters, 1)
152
+ ? { type: 'readWorkspaceFile', requestId: value.requestId, path: value.path }
153
+ : null;
154
+ default:
155
+ return null;
156
+ }
157
+ }
158
+ /**
159
+ * Validate host responses before they influence webview state. This protects
160
+ * the browser side from protocol drift and from messages injected by another
161
+ * script in the webview document; a TypeScript MessageEvent annotation is not
162
+ * runtime validation.
163
+ */
164
+ export function parseExtensionToWebviewMessage(value) {
165
+ if (!isRecord(value) || typeof value.type !== 'string')
166
+ return null;
167
+ switch (value.type) {
168
+ case 'setContent':
169
+ return hasOnlyKeys(value, [
170
+ 'type',
171
+ 'content',
172
+ 'documentVersion',
173
+ 'fileName',
174
+ 'sessionId',
175
+ 'sessionRevision',
176
+ 'acknowledgedClientRevision',
177
+ ]) &&
178
+ hasBoundedString(value, 'content', HOST_WIRE_LIMITS.documentCharacters) &&
179
+ hasNonNegativeInteger(value, 'documentVersion') &&
180
+ hasBoundedString(value, 'fileName', HOST_WIRE_LIMITS.pathCharacters, 1) &&
181
+ hasBoundedString(value, 'sessionId', HOST_WIRE_LIMITS.identifierCharacters, 1) &&
182
+ hasNonNegativeInteger(value, 'sessionRevision') &&
183
+ hasNonNegativeInteger(value, 'acknowledgedClientRevision')
184
+ ? {
185
+ type: 'setContent',
186
+ content: value.content,
187
+ documentVersion: value.documentVersion,
188
+ fileName: value.fileName,
189
+ sessionId: value.sessionId,
190
+ sessionRevision: value.sessionRevision,
191
+ acknowledgedClientRevision: value.acknowledgedClientRevision,
192
+ }
193
+ : null;
194
+ case 'editAcknowledged':
195
+ return hasOnlyKeys(value, [
196
+ 'type',
197
+ 'sessionId',
198
+ 'clientRevision',
199
+ 'sessionRevision',
200
+ 'accepted',
201
+ 'message',
202
+ ]) &&
203
+ hasBoundedString(value, 'sessionId', HOST_WIRE_LIMITS.identifierCharacters, 1) &&
204
+ hasNonNegativeInteger(value, 'clientRevision') &&
205
+ hasNonNegativeInteger(value, 'sessionRevision') &&
206
+ typeof value.accepted === 'boolean' &&
207
+ hasNullableBoundedString(value, 'message', HOST_WIRE_LIMITS.messageCharacters)
208
+ ? {
209
+ type: 'editAcknowledged',
210
+ sessionId: value.sessionId,
211
+ clientRevision: value.clientRevision,
212
+ sessionRevision: value.sessionRevision,
213
+ accepted: value.accepted,
214
+ message: value.message,
215
+ }
216
+ : null;
217
+ case 'sessionState': {
218
+ if (!hasOnlyKeys(value, [
219
+ 'type',
220
+ 'sessionId',
221
+ 'status',
222
+ 'revision',
223
+ 'persistedRevision',
224
+ 'acknowledgedClientRevision',
225
+ 'documentVersion',
226
+ 'error',
227
+ 'conflict',
228
+ ]) ||
229
+ !hasBoundedString(value, 'sessionId', HOST_WIRE_LIMITS.identifierCharacters, 1) ||
230
+ !isDocumentSessionMessageStatus(value.status) ||
231
+ !hasNonNegativeInteger(value, 'revision') ||
232
+ !hasNonNegativeInteger(value, 'persistedRevision') ||
233
+ value.persistedRevision > value.revision ||
234
+ !hasNonNegativeInteger(value, 'acknowledgedClientRevision') ||
235
+ !hasNonNegativeInteger(value, 'documentVersion') ||
236
+ !hasNullableBoundedString(value, 'error', HOST_WIRE_LIMITS.messageCharacters)) {
237
+ return null;
238
+ }
239
+ const conflict = parseDocumentConflictDetails(value.conflict);
240
+ if (conflict === undefined ||
241
+ (value.status === 'conflict' && conflict === null) ||
242
+ (value.status !== 'conflict' && conflict !== null)) {
243
+ return null;
244
+ }
245
+ return {
246
+ type: 'sessionState',
247
+ sessionId: value.sessionId,
248
+ status: value.status,
249
+ revision: value.revision,
250
+ persistedRevision: value.persistedRevision,
251
+ acknowledgedClientRevision: value.acknowledgedClientRevision,
252
+ documentVersion: value.documentVersion,
253
+ error: value.error,
254
+ conflict,
255
+ };
256
+ }
257
+ case 'saveResult':
258
+ return hasOnlyKeys(value, [
259
+ 'type',
260
+ 'sessionId',
261
+ 'requestId',
262
+ 'ok',
263
+ 'revision',
264
+ 'persistedRevision',
265
+ 'documentVersion',
266
+ 'message',
267
+ ]) &&
268
+ hasBoundedString(value, 'sessionId', HOST_WIRE_LIMITS.identifierCharacters, 1) &&
269
+ hasRequestId(value) &&
270
+ typeof value.ok === 'boolean' &&
271
+ hasNonNegativeInteger(value, 'revision') &&
272
+ hasNonNegativeInteger(value, 'persistedRevision') &&
273
+ value.persistedRevision <= value.revision &&
274
+ hasNonNegativeInteger(value, 'documentVersion') &&
275
+ hasNullableBoundedString(value, 'message', HOST_WIRE_LIMITS.messageCharacters)
276
+ ? {
277
+ type: 'saveResult',
278
+ sessionId: value.sessionId,
279
+ requestId: value.requestId,
280
+ ok: value.ok,
281
+ revision: value.revision,
282
+ persistedRevision: value.persistedRevision,
283
+ documentVersion: value.documentVersion,
284
+ message: value.message,
285
+ }
286
+ : null;
287
+ case 'themeChange':
288
+ return hasOnlyKeys(value, ['type', 'theme']) &&
289
+ (value.theme === 'light' || value.theme === 'dark')
290
+ ? { type: 'themeChange', theme: value.theme }
291
+ : null;
292
+ case 'editorSettings': {
293
+ if (!hasOnlyKeys(value, ['type', 'settings']))
294
+ return null;
295
+ const settings = parseVscodeEditorSettings(value.settings);
296
+ return settings ? { type: 'editorSettings', settings } : null;
297
+ }
298
+ case 'mediaResolved':
299
+ return hasOnlyKeys(value, ['type', 'requestId', 'url']) &&
300
+ hasRequestId(value) &&
301
+ isBoundedMediaDataUrl(value.url)
302
+ ? { type: 'mediaResolved', requestId: value.requestId, url: value.url }
303
+ : null;
304
+ case 'mediaListed': {
305
+ if (!hasOnlyKeys(value, ['type', 'requestId', 'entries']) || !hasRequestId(value)) {
306
+ return null;
307
+ }
308
+ const entries = parseMediaEntries(value.entries);
309
+ return entries ? { type: 'mediaListed', requestId: value.requestId, entries } : null;
310
+ }
311
+ case 'mediaAdded':
312
+ return hasOnlyKeys(value, ['type', 'requestId', 'path']) &&
313
+ hasRequestId(value) &&
314
+ hasBoundedString(value, 'path', HOST_WIRE_LIMITS.pathCharacters, 1)
315
+ ? { type: 'mediaAdded', requestId: value.requestId, path: value.path }
316
+ : null;
317
+ case 'mediaRemoved':
318
+ return hasOnlyKeys(value, ['type', 'requestId']) && hasRequestId(value)
319
+ ? { type: 'mediaRemoved', requestId: value.requestId }
320
+ : null;
321
+ case 'mediaError':
322
+ case 'exportError':
323
+ case 'workspaceFileError':
324
+ return hasOnlyKeys(value, ['type', 'requestId', 'message']) &&
325
+ hasRequestId(value) &&
326
+ hasBoundedString(value, 'message', HOST_WIRE_LIMITS.messageCharacters, 1)
327
+ ? { type: value.type, requestId: value.requestId, message: value.message }
328
+ : null;
329
+ case 'exportSaved':
330
+ case 'exportTargetResolved':
331
+ case 'exportTargetPicked': {
332
+ if (!hasOnlyKeys(value, ['type', 'requestId', 'target']) || !hasRequestId(value)) {
333
+ return null;
334
+ }
335
+ const target = parseExportTargetGrant(value.target);
336
+ return target !== undefined ? { type: value.type, requestId: value.requestId, target } : null;
337
+ }
338
+ case 'workspaceFileRead':
339
+ return hasOnlyKeys(value, ['type', 'requestId', 'dataBase64']) &&
340
+ hasRequestId(value) &&
341
+ hasNullableBoundedString(value, 'dataBase64', HOST_WIRE_LIMITS.base64Characters)
342
+ ? { type: 'workspaceFileRead', requestId: value.requestId, dataBase64: value.dataBase64 }
343
+ : null;
344
+ default:
345
+ return null;
346
+ }
347
+ }
348
+ function parseExportTargetGrant(value) {
349
+ if (value === null)
350
+ return null;
351
+ if (!isRecord(value) ||
352
+ !hasOnlyKeys(value, ['grantId', 'displayLabel']) ||
353
+ !hasBoundedString(value, 'grantId', HOST_WIRE_LIMITS.identifierCharacters, 1) ||
354
+ !hasBoundedString(value, 'displayLabel', HOST_WIRE_LIMITS.pathCharacters, 1)) {
355
+ return undefined;
356
+ }
357
+ return { grantId: value.grantId, displayLabel: value.displayLabel };
358
+ }
359
+ function parseDocumentConflictDetails(value) {
360
+ if (value === null)
361
+ return null;
362
+ if (!isRecord(value) ||
363
+ !hasOnlyKeys(value, [
364
+ 'localBaseDocumentVersion',
365
+ 'externalDocumentVersion',
366
+ 'localBytes',
367
+ 'externalBytes',
368
+ 'localEditedAt',
369
+ 'externalObservedAt',
370
+ 'externalIsDirty',
371
+ ]) ||
372
+ !hasNonNegativeInteger(value, 'localBaseDocumentVersion') ||
373
+ !hasNonNegativeInteger(value, 'externalDocumentVersion') ||
374
+ !hasNonNegativeInteger(value, 'localBytes') ||
375
+ !isNullableNonNegativeInteger(value.externalBytes) ||
376
+ !isNullableNonNegativeInteger(value.localEditedAt) ||
377
+ !isNullableNonNegativeInteger(value.externalObservedAt) ||
378
+ (value.externalIsDirty !== null && typeof value.externalIsDirty !== 'boolean')) {
379
+ return undefined;
380
+ }
381
+ return {
382
+ localBaseDocumentVersion: value.localBaseDocumentVersion,
383
+ externalDocumentVersion: value.externalDocumentVersion,
384
+ localBytes: value.localBytes,
385
+ externalBytes: value.externalBytes,
386
+ localEditedAt: value.localEditedAt,
387
+ externalObservedAt: value.externalObservedAt,
388
+ externalIsDirty: value.externalIsDirty,
389
+ };
390
+ }
391
+ function parseVscodeEditorSettings(value) {
392
+ if (!isRecord(value) ||
393
+ !hasOnlyKeys(value, ['autoSave', 'accentColor']) ||
394
+ typeof value.autoSave !== 'boolean' ||
395
+ !isDocBlocksAccentColor(value.accentColor)) {
396
+ return null;
397
+ }
398
+ return { autoSave: value.autoSave, accentColor: value.accentColor };
399
+ }
400
+ export function isDocBlocksAccentColor(value) {
401
+ return DOCBLOCKS_ACCENT_COLORS.some((color) => color === value);
402
+ }
403
+ function parseMediaEntries(value) {
404
+ if (!Array.isArray(value) || value.length > HOST_WIRE_LIMITS.arrayEntries)
405
+ return null;
406
+ const entries = [];
407
+ for (const entry of value) {
408
+ if (!isRecord(entry) ||
409
+ !hasOnlyKeys(entry, ['name', 'mimeType', 'size']) ||
410
+ !hasBoundedString(entry, 'name', HOST_WIRE_LIMITS.pathCharacters, 1) ||
411
+ !hasMimeType(entry, 'mimeType') ||
412
+ !hasNonNegativeInteger(entry, 'size') ||
413
+ entry.size > HOST_WIRE_LIMITS.binaryBytes) {
414
+ return null;
415
+ }
416
+ entries.push({ name: entry.name, mimeType: entry.mimeType, size: entry.size });
417
+ }
418
+ return entries;
419
+ }
420
+ function isBoundedMediaDataUrl(value) {
421
+ if (!isBoundedString(value, HOST_WIRE_LIMITS.base64Characters + 512, 1))
422
+ return false;
423
+ if (!value.startsWith('data:'))
424
+ return false;
425
+ const separator = value.indexOf(';base64,');
426
+ return separator > 5 && separator <= HOST_WIRE_LIMITS.identifierCharacters;
427
+ }
428
+ function isDocumentSessionMessageStatus(value) {
429
+ return (value === 'idle' ||
430
+ value === 'saved' ||
431
+ value === 'dirty' ||
432
+ value === 'saving' ||
433
+ value === 'error' ||
434
+ value === 'conflict' ||
435
+ value === 'closed');
436
+ }
437
+ function isSessionEnvelope(value) {
438
+ return (hasBoundedString(value, 'sessionId', HOST_WIRE_LIMITS.identifierCharacters, 1) &&
439
+ hasNonNegativeInteger(value, 'clientRevision') &&
440
+ hasNonNegativeInteger(value, 'baseDocumentVersion'));
441
+ }
442
+ function hasRequestId(value) {
443
+ return hasNonNegativeInteger(value, 'requestId') && value.requestId <= MAX_REQUEST_ID;
444
+ }
445
+ function hasBoundedString(value, key, maximumCharacters, minimumCharacters = 0) {
446
+ return isBoundedString(value[key], maximumCharacters, minimumCharacters);
447
+ }
448
+ function hasNullableBoundedString(value, key, maximumCharacters, minimumCharacters = 0) {
449
+ return value[key] === null || isBoundedString(value[key], maximumCharacters, minimumCharacters);
450
+ }
451
+ function hasNonNegativeInteger(value, key) {
452
+ const entry = value[key];
453
+ return typeof entry === 'number' && Number.isSafeInteger(entry) && entry >= 0;
454
+ }
455
+ function isNullableNonNegativeInteger(value) {
456
+ return value === null || (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0);
457
+ }
458
+ function isRecord(value) {
459
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
460
+ }
461
+ function hasOnlyKeys(value, keys) {
462
+ const expected = new Set(keys);
463
+ const actual = Object.keys(value);
464
+ return actual.length === expected.size && actual.every((key) => expected.has(key));
465
+ }
466
+ function hasSafeFilename(value, key) {
467
+ return isSafeExportFilename(value[key]);
468
+ }
469
+ export function isSafeExportFilename(value) {
470
+ return (isBoundedString(value, 255, 1) &&
471
+ value.trim() === value &&
472
+ !/[\\/:*?"<>|]/.test(value) &&
473
+ !hasControlCharacter(value) &&
474
+ value !== '.' &&
475
+ value !== '..' &&
476
+ !value.endsWith('.') &&
477
+ !value.endsWith(' '));
478
+ }
479
+ function hasControlCharacter(value) {
480
+ for (let index = 0; index < value.length; index += 1) {
481
+ const code = value.charCodeAt(index);
482
+ if (code <= 0x1f || code === 0x7f)
483
+ return true;
484
+ }
485
+ return false;
486
+ }
487
+ function hasMimeType(value, key) {
488
+ return isSafeMimeType(value[key]);
489
+ }
490
+ export function isSafeMimeType(value) {
491
+ return (isBoundedString(value, HOST_WIRE_LIMITS.identifierCharacters, 1) &&
492
+ /^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+(?:\s*;\s*[A-Za-z0-9!#$&^_.+-]+=[^;\r\n]+)*$/.test(value));
493
+ }
494
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/vscode/messages.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- export type { WorkspaceDescriptor } from './types.js';
2
- export { listWorkspaces, getWorkspace, saveWorkspace, removeWorkspace, touchWorkspace, ensureDefaultWorkspace, } from './workspace-manager.js';
1
+ export type { WorkspaceDescriptor, TransientOrigin } from './types.js';
2
+ export { listWorkspaces, getWorkspace, saveWorkspace, removeWorkspace, touchWorkspace, ensureDefaultWorkspace, registerTransientWorkspace, getTransientWorkspace, unregisterTransientWorkspace, } from './workspace-manager.js';
3
+ export { reconcileElectronWorkspaceDescriptors, type ElectronWorkspaceReconciliation, } from './reconcile-electron.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qCAAqC,EACrC,KAAK,+BAA+B,GACrC,MAAM,yBAAyB,CAAC"}
@@ -1,2 +1,3 @@
1
- export { listWorkspaces, getWorkspace, saveWorkspace, removeWorkspace, touchWorkspace, ensureDefaultWorkspace, } from './workspace-manager.js';
1
+ export { listWorkspaces, getWorkspace, saveWorkspace, removeWorkspace, touchWorkspace, ensureDefaultWorkspace, registerTransientWorkspace, getTransientWorkspace, unregisterTransientWorkspace, } from './workspace-manager.js';
2
+ export { reconcileElectronWorkspaceDescriptors, } from './reconcile-electron.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qCAAqC,GAEtC,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ElectronWorkspaceInfo, HostEnvironment } from '../host/types.js';
2
+ import type { WorkspaceDescriptor } from './types.js';
3
+ export interface ElectronWorkspaceReconciliation {
4
+ /** Obsolete renderer descriptors to remove before attempting restoration. */
5
+ readonly removeIds: readonly string[];
6
+ /** Canonical main-authorized descriptors to insert or replace. */
7
+ readonly upsert: readonly WorkspaceDescriptor[];
8
+ /** Safe navigation migration for a local descriptor matched by root. */
9
+ readonly idRemap: Readonly<Record<string, string>>;
10
+ }
11
+ /**
12
+ * Reconcile renderer IndexedDB metadata with the main process authority list.
13
+ * `hostWorkspaces` is authoritative: local Electron descriptors absent from
14
+ * it cannot be opened safely and are removed. Root-path matching carries user
15
+ * metadata across an id migration without treating that display path as
16
+ * authority.
17
+ */
18
+ export declare function reconcileElectronWorkspaceDescriptors(local: readonly WorkspaceDescriptor[], hostWorkspaces: readonly ElectronWorkspaceInfo[], platform: HostEnvironment['platform'], now: string): ElectronWorkspaceReconciliation;
19
+ //# sourceMappingURL=reconcile-electron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-electron.d.ts","sourceRoot":"","sources":["../../src/workspace/reconcile-electron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,+BAA+B;IAC9C,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAOD;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,SAAS,mBAAmB,EAAE,EACrC,cAAc,EAAE,SAAS,qBAAqB,EAAE,EAChD,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,EACrC,GAAG,EAAE,MAAM,GACV,+BAA+B,CAmCjC"}
@@ -0,0 +1,42 @@
1
+ function comparableRoot(rootPath, platform) {
2
+ const normalized = rootPath.replace(/\\/gu, '/').replace(/\/+$/gu, '');
3
+ return platform === 'win32' ? normalized.toLowerCase() : normalized;
4
+ }
5
+ /**
6
+ * Reconcile renderer IndexedDB metadata with the main process authority list.
7
+ * `hostWorkspaces` is authoritative: local Electron descriptors absent from
8
+ * it cannot be opened safely and are removed. Root-path matching carries user
9
+ * metadata across an id migration without treating that display path as
10
+ * authority.
11
+ */
12
+ export function reconcileElectronWorkspaceDescriptors(local, hostWorkspaces, platform, now) {
13
+ const electron = local.filter((workspace) => workspace.type === 'electron-native');
14
+ const matchedLocalIds = new Set();
15
+ const idRemap = {};
16
+ const upsert = hostWorkspaces.map((hostWorkspace) => {
17
+ const root = comparableRoot(hostWorkspace.rootPath, platform);
18
+ const candidates = electron.filter((workspace) => workspace.rootPath && comparableRoot(workspace.rootPath, platform) === root);
19
+ const matching = candidates.sort((left, right) => right.lastOpened.localeCompare(left.lastOpened))[0];
20
+ if (matching) {
21
+ matchedLocalIds.add(matching.id);
22
+ if (matching.id !== hostWorkspace.id)
23
+ idRemap[matching.id] = hostWorkspace.id;
24
+ }
25
+ return {
26
+ id: hostWorkspace.id,
27
+ name: matching?.name ?? hostWorkspace.name,
28
+ type: 'electron-native',
29
+ rootPath: hostWorkspace.rootPath,
30
+ lastOpened: matching?.lastOpened ?? now,
31
+ ...(matching?.versioningOverride ? { versioningOverride: matching.versioningOverride } : {}),
32
+ };
33
+ });
34
+ const canonicalIds = new Set(hostWorkspaces.map((workspace) => workspace.id));
35
+ const removeIds = electron
36
+ .filter((workspace) => !canonicalIds.has(workspace.id) ||
37
+ (matchedLocalIds.has(workspace.id) &&
38
+ !upsert.some((candidate) => candidate.id === workspace.id)))
39
+ .map((workspace) => workspace.id);
40
+ return { removeIds, upsert, idRemap };
41
+ }
42
+ //# sourceMappingURL=reconcile-electron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-electron.js","sourceRoot":"","sources":["../../src/workspace/reconcile-electron.ts"],"names":[],"mappings":"AAYA,SAAS,cAAc,CAAC,QAAgB,EAAE,QAAqC;IAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qCAAqC,CACnD,KAAqC,EACrC,cAAgD,EAChD,QAAqC,EACrC,GAAW;IAEX,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IACnF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAuB,EAAE;QACvE,MAAM,IAAI,GAAG,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,CAC3F,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC/C,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAChD,CAAC,CAAC,CAAC,CAAC;QACL,IAAI,QAAQ,EAAE,CAAC;YACb,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,QAAQ,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE;gBAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;QAChF,CAAC;QACD,OAAO;YACL,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC,IAAI;YAC1C,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG;YACvC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,QAAQ;SACvB,MAAM,CACL,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAChE;SACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC"}