@jxsuite/studio 2.2.1 → 2.3.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 (182) hide show
  1. package/data/css-meta.json +1487 -0
  2. package/data/elements-meta.json +370 -0
  3. package/data/html-meta.json +366 -0
  4. package/data/stylebook-meta.json +200 -0
  5. package/data/webdata.json +1621 -0
  6. package/dist/chunks/{Overlay.dev-ymy3et3y.js → Overlay.dev-d2ajy6sj.js} +7 -7
  7. package/dist/chunks/{content-source-r2n7v682.js → content-source-56xpvx83.js} +13 -12
  8. package/dist/chunks/{convert-to-repeater-cnpyvj74.js → convert-to-repeater-0xh9wwek.js} +12 -11
  9. package/dist/chunks/{extension-sections-vpcm4jvx.js → extension-sections-g34239vm.js} +17 -16
  10. package/dist/chunks/{files-zeg88k2d.js → files-gkz202dp.js} +18 -19
  11. package/dist/chunks/{format-host-taymsw55.js → format-host-pej3srnw.js} +2 -2
  12. package/dist/chunks/{git-panel-qp4rrwr9.js → git-panel-4j6xbh8g.js} +12 -11
  13. package/dist/chunks/{layers-panel-kj93w2zg.js → layers-panel-8mvn8sgd.js} +15 -14
  14. package/dist/chunks/{monaco-setup-xy3bs05d.js → monaco-setup-a5wkmbgh.js} +6 -3
  15. package/dist/chunks/{publish-panel-6qz6kp41.js → publish-panel-ptddc3kg.js} +6 -6
  16. package/dist/chunks/{quick-search-9wwa09hh.js → quick-search-j88azfs2.js} +19 -18
  17. package/dist/chunks/right-panel-egkaxy89.js +38 -0
  18. package/dist/chunks/{sp-overlay.dev-h6kdx076.js → sp-overlay.dev-s18hymn9.js} +8 -8
  19. package/dist/chunks/sp-progress-circle.dev-0zxcyz3r.js +15 -0
  20. package/dist/chunks/sp-tooltip.dev-5c6d1kjz.js +15 -0
  21. package/dist/chunks/{studio-753znj4c.js → studio-0e4h32g6.js} +5 -5
  22. package/dist/chunks/{studio-yz9s88s0.js → studio-10s469da.js} +25 -9
  23. package/dist/chunks/{studio-6f0am8f2.js → studio-2w11grav.js} +2 -2
  24. package/dist/chunks/{studio-zqv3w24n.js → studio-3q65xvzv.js} +5 -5
  25. package/dist/chunks/{studio-qhh8r5fz.js → studio-4058pg09.js} +4 -4
  26. package/dist/chunks/{studio-hekaagev.js → studio-4enps87v.js} +17 -17
  27. package/dist/chunks/{studio-tqemhphj.js → studio-50eed4c9.js} +4 -4
  28. package/dist/chunks/studio-53n8bp04.js +16 -0
  29. package/dist/chunks/{studio-nqq8jk8f.js → studio-5amdrjm4.js} +14 -14
  30. package/dist/chunks/{studio-6zzbyx17.js → studio-5ne8mdx9.js} +2 -2
  31. package/dist/chunks/{studio-3z8jjm2p.js → studio-7ejemhej.js} +3 -3
  32. package/dist/chunks/{studio-1kgfcv7s.js → studio-a11d3a1b.js} +12 -11
  33. package/dist/chunks/{studio-rgwcpast.js → studio-ay8wcr2b.js} +2 -2
  34. package/dist/chunks/{studio-fys6z73y.js → studio-bak2cyjr.js} +7 -7
  35. package/dist/chunks/{studio-xmvbhg31.js → studio-c31yb4t6.js} +2 -2
  36. package/dist/chunks/{studio-8sdyjfd6.js → studio-cf4rk7kv.js} +2 -2
  37. package/dist/chunks/{studio-yphy4z9m.js → studio-cv606rs1.js} +5 -5
  38. package/dist/chunks/{studio-5kt960pk.js → studio-hk523hby.js} +133 -147
  39. package/dist/chunks/{studio-x0et2z9g.js → studio-hs8x23fv.js} +15 -15
  40. package/dist/chunks/{studio-p471gg5n.js → studio-kvfx9z2c.js} +7 -3
  41. package/dist/chunks/{studio-22xr4q8q.js → studio-ncnet0ba.js} +18 -29
  42. package/dist/chunks/{studio-ckwz4d3x.js → studio-twsafr1e.js} +2 -2
  43. package/dist/chunks/{studio-qrsfh1w7.js → studio-tzx3xmvx.js} +5 -5
  44. package/dist/chunks/{studio-g8t7g0gp.js → studio-vdpcpada.js} +3 -3
  45. package/dist/chunks/{studio-6a0h7sne.js → studio-vhk5fmfv.js} +2 -2
  46. package/dist/chunks/{studio-hrajjyt2.js → studio-wdt9y92a.js} +2 -2
  47. package/dist/chunks/{studio-r8vx7bkz.js → studio-x3etxs0s.js} +14 -13
  48. package/dist/chunks/{studio-pv8m0h4a.js → studio-yxzgjq8q.js} +28 -23
  49. package/dist/chunks/{studio-300zsz1k.js → studio-zdkgwhkv.js} +6 -6
  50. package/dist/codicon.ttf +0 -0
  51. package/dist/iframe-entry.js +8 -1
  52. package/dist/manifest.json +82 -0
  53. package/dist/studio.js +232 -103
  54. package/index.html +0 -50
  55. package/package.json +12 -5
  56. package/src/canvas/iframe-entry.ts +5 -0
  57. package/src/canvas/iframe-host.ts +45 -4
  58. package/src/content/entry-editor.ts +2 -1
  59. package/src/editor/context-menu.ts +13 -2
  60. package/src/editor/slash-menu.ts +26 -11
  61. package/src/files/files.ts +11 -23
  62. package/src/grid/grid-panel.ts +27 -6
  63. package/src/hosting/document.ts +109 -0
  64. package/src/hosting/layout.ts +211 -0
  65. package/src/hosting/stage.ts +166 -0
  66. package/src/hosting/tsconfig.json +18 -0
  67. package/src/panels/ai-chat/chat-view.ts +25 -14
  68. package/src/panels/git-panel.ts +17 -14
  69. package/src/panels/head-panel.ts +32 -14
  70. package/src/panels/imports-panel.ts +32 -13
  71. package/src/panels/layers-panel.ts +9 -1
  72. package/src/panels/panel-registry.ts +0 -1
  73. package/src/panels/properties-panel.ts +3 -3
  74. package/src/panels/settings-pane.ts +1 -1
  75. package/src/panels/style-panel.ts +3 -3
  76. package/src/panels/stylebook-panel.ts +10 -1
  77. package/src/panels/toolbar.ts +1 -1
  78. package/src/services/bundle-base.ts +69 -0
  79. package/src/services/monaco-setup.ts +19 -13
  80. package/src/shell/tree.ts +155 -0
  81. package/src/shell.ts +0 -2
  82. package/src/studio.ts +22 -2
  83. package/src/types.ts +15 -0
  84. package/src/ui/regions.ts +10 -45
  85. package/styles/overlays.css +35 -0
  86. package/dist/chunks/2020-xp8vnwma.js.map +0 -24
  87. package/dist/chunks/Overlay.dev-ymy3et3y.js.map +0 -9
  88. package/dist/chunks/adapter-jkcyhgtr.js.map +0 -9
  89. package/dist/chunks/cf-settings-g5fbf2zp.js.map +0 -9
  90. package/dist/chunks/components-z6cnkyy1.js.map +0 -9
  91. package/dist/chunks/content-source-r2n7v682.js.map +0 -9
  92. package/dist/chunks/convert-to-repeater-cnpyvj74.js.map +0 -10
  93. package/dist/chunks/editor-cptq5jp1.js.map +0 -9
  94. package/dist/chunks/extension-sections-vpcm4jvx.js.map +0 -11
  95. package/dist/chunks/files-zeg88k2d.js.map +0 -9
  96. package/dist/chunks/flow-qbfgrpeh.js.map +0 -12
  97. package/dist/chunks/focus-trap.esm-ggawf1hy.js.map +0 -11
  98. package/dist/chunks/focus-visible-6eg70z18.js.map +0 -10
  99. package/dist/chunks/format-host-taymsw55.js.map +0 -9
  100. package/dist/chunks/git-panel-qp4rrwr9.js.map +0 -9
  101. package/dist/chunks/index-nj44jpzj.js.map +0 -14
  102. package/dist/chunks/index-zqxmqxmh.js.map +0 -9
  103. package/dist/chunks/javascript-q8kpmfah.js.map +0 -11
  104. package/dist/chunks/jsonMode-dkr040ga.js.map +0 -18
  105. package/dist/chunks/jx-validate-jj9rnt4n.js.map +0 -9
  106. package/dist/chunks/layers-panel-kj93w2zg.js.map +0 -9
  107. package/dist/chunks/monaco-binding-rj6xpx9y.js.map +0 -10
  108. package/dist/chunks/monaco-setup-xy3bs05d.js.map +0 -15
  109. package/dist/chunks/publish-panel-6qz6kp41.js.map +0 -9
  110. package/dist/chunks/quick-search-9wwa09hh.js.map +0 -9
  111. package/dist/chunks/right-panel-faf816ch.js +0 -37
  112. package/dist/chunks/right-panel-faf816ch.js.map +0 -9
  113. package/dist/chunks/section-registry-sx1ykvkw.js.map +0 -9
  114. package/dist/chunks/sp-overlay.dev-h6kdx076.js.map +0 -9
  115. package/dist/chunks/sp-popover.dev-dj9x7e7a.js.map +0 -9
  116. package/dist/chunks/sp-progress-circle.dev-0fpvhm52.js +0 -15
  117. package/dist/chunks/sp-progress-circle.dev-0fpvhm52.js.map +0 -9
  118. package/dist/chunks/sp-tooltip.dev-rvepkw4r.js +0 -15
  119. package/dist/chunks/sp-tooltip.dev-rvepkw4r.js.map +0 -9
  120. package/dist/chunks/sp-tray.dev-64v4pxw8.js.map +0 -12
  121. package/dist/chunks/studio-0a5qrh01.js.map +0 -9
  122. package/dist/chunks/studio-0rqqhrdy.js.map +0 -12
  123. package/dist/chunks/studio-18j3bmcz.js.map +0 -10
  124. package/dist/chunks/studio-1kgfcv7s.js.map +0 -13
  125. package/dist/chunks/studio-22xr4q8q.js.map +0 -13
  126. package/dist/chunks/studio-300zsz1k.js.map +0 -39
  127. package/dist/chunks/studio-3fk1ac9z.js.map +0 -12
  128. package/dist/chunks/studio-3n4ndrzh.js.map +0 -41
  129. package/dist/chunks/studio-3z8jjm2p.js.map +0 -13
  130. package/dist/chunks/studio-4mqb9a0j.js.map +0 -14
  131. package/dist/chunks/studio-4q0wznzf.js.map +0 -73
  132. package/dist/chunks/studio-5ehhackm.js.map +0 -10
  133. package/dist/chunks/studio-5kt960pk.js.map +0 -38
  134. package/dist/chunks/studio-5x5774ak.js.map +0 -10
  135. package/dist/chunks/studio-685s0ytq.js.map +0 -76
  136. package/dist/chunks/studio-6a0h7sne.js.map +0 -15
  137. package/dist/chunks/studio-6f0am8f2.js.map +0 -10
  138. package/dist/chunks/studio-6kv3apa9.js.map +0 -10
  139. package/dist/chunks/studio-6zzbyx17.js.map +0 -12
  140. package/dist/chunks/studio-753znj4c.js.map +0 -16
  141. package/dist/chunks/studio-7afd21nw.js.map +0 -10
  142. package/dist/chunks/studio-8jpzqk5s.js.map +0 -10
  143. package/dist/chunks/studio-8q517dfr.js.map +0 -10
  144. package/dist/chunks/studio-8sdyjfd6.js.map +0 -10
  145. package/dist/chunks/studio-a0tswy0w.js.map +0 -9
  146. package/dist/chunks/studio-a7pzveq1.js.map +0 -11
  147. package/dist/chunks/studio-ahnzd9rg.js.map +0 -10
  148. package/dist/chunks/studio-b9b6t1dg.js.map +0 -651
  149. package/dist/chunks/studio-bw5dz6km.js.map +0 -21
  150. package/dist/chunks/studio-cjm7fdjf.js.map +0 -14
  151. package/dist/chunks/studio-ckwz4d3x.js.map +0 -12
  152. package/dist/chunks/studio-d1ks410h.js.map +0 -10
  153. package/dist/chunks/studio-dg7zyt5x.js.map +0 -10
  154. package/dist/chunks/studio-fys6z73y.js.map +0 -10
  155. package/dist/chunks/studio-g1wdche0.js.map +0 -56
  156. package/dist/chunks/studio-g8t7g0gp.js.map +0 -10
  157. package/dist/chunks/studio-h4rxscfc.js.map +0 -10
  158. package/dist/chunks/studio-hekaagev.js.map +0 -18
  159. package/dist/chunks/studio-hrajjyt2.js.map +0 -10
  160. package/dist/chunks/studio-nqq8jk8f.js.map +0 -14
  161. package/dist/chunks/studio-p471gg5n.js.map +0 -14
  162. package/dist/chunks/studio-pv8m0h4a.js.map +0 -98
  163. package/dist/chunks/studio-qhh8r5fz.js.map +0 -13
  164. package/dist/chunks/studio-qrsfh1w7.js.map +0 -41
  165. package/dist/chunks/studio-r8vx7bkz.js.map +0 -235
  166. package/dist/chunks/studio-rgwcpast.js.map +0 -12
  167. package/dist/chunks/studio-s519zc99.js.map +0 -10
  168. package/dist/chunks/studio-sas7mt3k.js.map +0 -10
  169. package/dist/chunks/studio-t5wqwzdh.js.map +0 -10
  170. package/dist/chunks/studio-tqemhphj.js.map +0 -11
  171. package/dist/chunks/studio-tr20m8g8.js.map +0 -9
  172. package/dist/chunks/studio-tvgyw9xw.js.map +0 -14
  173. package/dist/chunks/studio-x0et2z9g.js.map +0 -32
  174. package/dist/chunks/studio-xm3dbxvn.js.map +0 -19
  175. package/dist/chunks/studio-xmvbhg31.js.map +0 -10
  176. package/dist/chunks/studio-ynxwkrzd.js.map +0 -246
  177. package/dist/chunks/studio-yphy4z9m.js.map +0 -10
  178. package/dist/chunks/studio-yz9s88s0.js.map +0 -54
  179. package/dist/chunks/studio-z6nw2ek2.js.map +0 -10
  180. package/dist/chunks/studio-zqv3w24n.js.map +0 -11
  181. package/dist/chunks/tsMode-76kr53q0.js.map +0 -13
  182. package/dist/chunks/ws-client-6shc5rze.js.map +0 -12
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../node_modules/@spectrum-web-components/shared/src/first-focusable-in.dev.js"],
4
- "sourcesContent": [
5
- "\"use strict\";\nimport { userFocusableSelector } from \"./focusable-selectors.dev.js\";\nexport const firstFocusableIn = (root) => {\n const firstFocusable = root.querySelector(\n userFocusableSelector\n );\n return firstFocusable;\n};\nexport const firstFocusableSlottedIn = (root) => {\n const firstFocusable = root.assignedElements().find(\n (element) => element.matches(userFocusableSelector)\n );\n return firstFocusable;\n};\n//# sourceMappingURL=first-focusable-in.dev.js.map\n"
6
- ],
7
- "mappings": ";;;;;AAEO,IAAM,mBAAmB,CAAC,SAAS;AAAA,EACxC,MAAM,iBAAiB,KAAK,cAC1B,qBACF;AAAA,EACA,OAAO;AAAA;AAEF,IAAM,0BAA0B,CAAC,SAAS;AAAA,EAC/C,MAAM,iBAAiB,KAAK,iBAAiB,EAAE,KAC7C,CAAC,YAAY,QAAQ,QAAQ,qBAAqB,CACpD;AAAA,EACA,OAAO;AAAA;",
8
- "debugId": "E8E36975D588AAE064756E2164756E21",
9
- "names": []
10
- }
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/panels/activity-panel.ts", "../src/ui/progress-modal.ts"],
4
- "sourcesContent": [
5
- "/// <reference lib=\"dom\" />\n/**\n * Activity — where a long operation lives while it runs, and what it leaves behind (plan §7.3).\n *\n * What this replaces: `ui/progress-modal.ts` was **the only surface in Studio with a real error\n * view** — a red headline, the captured log in a `<pre>`, an explicit Close — and it had four call\n * sites, all package operations. It blocked the whole app, offered no cancel, and vanished\n * completely on success, so a `bun install` that hung had no exit and one that failed had a log you\n * could read exactly once. Every OTHER long operation — git clone, publish, media upload, site\n * import, project open — got a three-second grey line or nothing at all.\n *\n * An activity is a **record**, like a notification and a command:\n *\n * - It is **persistent** — a finished operation stays on the list, with its log, until the list is\n * cleared, so \"what did the import actually do?\" is answerable after the fact;\n * - It is **inspectable** — the log is the same captured output the modal used to show, and it is\n * attached to the entry rather than to a modal that is about to close;\n * - It can be **cancelled** — an operation that hands over a `cancel` callback gets a Cancel button\n * on its row, which is the affordance a hung install has never had;\n * - And it **fails into Problems** — {@link ActivityHandle.fail} raises a `notify.error` carrying the\n * log as its `detail`, so the failure outlives the run and carries a Retry command. That is\n * §7.3's \"the progress modal's error view is promoted into Problems\", in one function.\n *\n * **Nothing here blocks.** `showProgressModal` still exists for the four dependency-install sites\n * §7.3 keeps blocking, and it is now a thin front end over {@link beginActivity} — so even the\n * blocking case leaves an inspectable entry behind, and closing the modal no longer loses it.\n *\n * `services/idle.ts` reads {@link activityIdleBlockers}: an open operation means the app is not\n * settled, which is the §13.6 S4 obligation every phase's checklist carries.\n */\n\nimport { html, nothing } from \"lit-html\";\nimport { renderDeployChecklist } from \"../publish/deploy-checklist\";\nimport { repeat } from \"lit-html/directives/repeat.js\";\nimport { reactive } from \"../reactivity\";\nimport { now } from \"../services/clock\";\nimport { notify } from \"../services/notify\";\nimport { registerPanel } from \"./panel-registry\";\nimport { renderEmptyState } from \"./empty-state\";\nimport type { PanelBody } from \"./panel-registry\";\nimport type { TemplateResult } from \"lit-html\";\n\n/** How an operation ended, or that it has not. */\nexport const ACTIVITY_STATES = [\"running\", \"done\", \"failed\", \"cancelled\"] as const;\n\nexport type ActivityState = (typeof ACTIVITY_STATES)[number];\n\n/** One named phase of an operation — \"Install dependencies\", \"Sync with the remote\". */\nexport interface ActivityStep {\n label: string;\n state: \"pending\" | \"running\" | \"done\" | \"failed\";\n}\n\n/**\n * One operation, as recorded.\n *\n * Mutable and reactive on purpose: an activity is the one record in the app that CHANGES while you\n * watch it, which is the whole difference between it and a\n * {@link import(\"../services/notify\") .Notification}. A host repaints by reading it.\n */\nexport interface ActivityEntry {\n readonly id: string;\n readonly title: string;\n /** The line under the title — what the operation is doing right now. */\n status: string;\n state: ActivityState;\n /** The captured output, one entry per chunk. Rendered in the expanded row. */\n log: string[];\n steps: ActivityStep[];\n /** Epoch ms from {@link now}, so a pinned clock pins the duration a row prints. */\n readonly startedAt: number;\n endedAt: number | null;\n /** Who is running it: \"Packages\", \"Source Control\", \"Publish\". Printed beside the title. */\n readonly source?: string;\n /** Whether a `cancel` callback was handed over — the row draws Cancel iff this is true. */\n cancellable: boolean;\n /** Whether this row's log is unfolded. A view flag, on the record, so a repaint keeps it. */\n expanded: boolean;\n}\n\n/**\n * Every operation this session, oldest first — running and finished alike.\n *\n * Exported as the array rather than behind a getter for the same reason `notify`'s stores are: that\n * is what makes it trackable, so a lit render effect that reads it re-runs when an operation\n * starts, logs a line or ends, with no subscription to remember to release.\n */\nexport const activities: ActivityEntry[] = reactive([]);\n\n/**\n * How many FINISHED entries are kept. Running ones are never retired — an operation the app is\n * still doing is not history, and dropping it would take its Cancel button with it.\n */\nexport const MAX_FINISHED_ACTIVITIES = 20;\n\n/**\n * Entry id → the callback that stops it.\n *\n * Held beside the record rather than on it: a closure inside a reactive proxy is a value effects\n * would track and nothing would ever compare, and the record is otherwise plain data. The record\n * carries `cancellable` so a renderer never needs this map.\n */\nconst _cancels = new Map<string, () => void>();\n\nlet _seq = 0;\n\n/** Monotonic within a page load, and stable enough to be a lit `repeat` key. */\nfunction nextId(): string {\n _seq += 1;\n return `a${_seq}`;\n}\n\n/** Whether an entry has stopped. */\nexport function isFinished(entry: ActivityEntry): boolean {\n return entry.state !== \"running\";\n}\n\n/** Drop the oldest finished entries once there are more than {@link MAX_FINISHED_ACTIVITIES}. */\nfunction retireOldest(): void {\n let excess = activities.filter((entry) => isFinished(entry)).length - MAX_FINISHED_ACTIVITIES;\n while (excess > 0) {\n const at = activities.findIndex((entry) => isFinished(entry));\n if (at === -1) {\n return;\n }\n _cancels.delete(activities[at]!.id);\n activities.splice(at, 1);\n excess -= 1;\n }\n}\n\n/** What {@link beginActivity} is told about an operation up front. */\nexport interface ActivityOptions {\n /** What the operation IS — \"Open project\", \"Update dependencies\". Never changes. */\n title: string;\n /** What it is doing right now. Changes as it goes. */\n status?: string;\n /** Who is running it — \"Packages\", \"Source Control\". Groups nothing yet; printed on the row. */\n source?: string;\n /** The plan, declared up front so the row shows how far along it is. */\n steps?: readonly string[];\n /**\n * Stop the operation.\n *\n * Its presence is what draws the Cancel button, so an operation that cannot honestly be stopped\n * must not pass one — a Cancel that does nothing is the failure §7 exists to end, restated as a\n * button.\n */\n cancel?: () => void;\n}\n\n/** The live handle an operation drives its own entry through. */\nexport interface ActivityHandle {\n readonly id: string;\n /** The record itself, for a caller that wants to read its own log back. */\n readonly entry: ActivityEntry;\n /** Replace the line under the title. */\n setStatus: (text: string) => void;\n /** Append captured output. Blank chunks are dropped, so a trailing newline is not a log line. */\n log: (chunk: string) => void;\n /** Mark `label` as the running step; every step before it is done. Appends an unplanned one. */\n step: (label: string) => void;\n /** Finish successfully. */\n done: (status?: string) => void;\n /**\n * Finish with a failure — and raise the Problem that outlives it.\n *\n * The log goes into the notification's `detail`, so the persistent, inspectable error view §7.3\n * asks for is the Problems row, not a modal that has to stay open to be read.\n */\n fail: (message: string, opts?: { action?: string; path?: string }) => void;\n}\n\n/**\n * Start recording an operation.\n *\n * @param {ActivityOptions} options\n * @returns {ActivityHandle}\n */\nexport function beginActivity(options: ActivityOptions): ActivityHandle {\n const entry: ActivityEntry = {\n cancellable: options.cancel !== undefined,\n endedAt: null,\n expanded: false,\n id: nextId(),\n log: [],\n startedAt: now(),\n state: \"running\",\n status: options.status ?? \"\",\n steps: (options.steps ?? []).map((label) => ({ label, state: \"pending\" as const })),\n title: options.title,\n ...(options.source === undefined ? {} : { source: options.source }),\n };\n if (options.cancel) {\n _cancels.set(entry.id, options.cancel);\n }\n activities.push(entry);\n // The PROXY, not the literal: writing through the raw object a `reactive()` array was handed\n // Skips every effect depending on it, which is the one bug that would make a running operation\n // Look frozen. Read back before anything is retired, so the reference is unambiguous.\n const live = activities.at(-1) as ActivityEntry;\n retireOldest();\n\n const finish = (state: ActivityState, status?: string) => {\n if (isFinished(live)) {\n return;\n }\n live.state = state;\n live.endedAt = now();\n if (status !== undefined) {\n live.status = status;\n }\n for (const step of live.steps) {\n step.state = step.state === \"done\" ? \"done\" : state === \"done\" ? \"done\" : \"failed\";\n }\n live.cancellable = false;\n _cancels.delete(live.id);\n retireOldest();\n };\n\n return {\n done(status?: string) {\n finish(\"done\", status);\n },\n entry: live,\n fail(message: string, opts: { action?: string; path?: string } = {}) {\n // An operation that has already ended does not get to raise a Problem: the first outcome is\n // The one that happened, and a late `fail()` after a successful `done()` would put a failure\n // On a list whose whole promise is that everything on it still needs fixing.\n if (isFinished(live)) {\n return;\n }\n const detail = live.log.join(\"\\n\");\n finish(\"failed\", message);\n notify.error(message, {\n source: live.source ?? live.title,\n ...(detail === \"\" ? {} : { detail }),\n ...(opts.action === undefined ? {} : { action: opts.action }),\n ...(opts.path === undefined ? {} : { path: opts.path }),\n });\n },\n id: live.id,\n log(chunk: string) {\n const text = chunk.replace(/\\s+$/, \"\");\n if (text !== \"\") {\n live.log.push(text);\n }\n },\n setStatus(text: string) {\n if (!isFinished(live)) {\n live.status = text;\n }\n },\n step(label: string) {\n let at = live.steps.findIndex((step) => step.label === label);\n if (at === -1) {\n live.steps.push({ label, state: \"pending\" });\n at = live.steps.length - 1;\n }\n for (const [index, step] of live.steps.entries()) {\n step.state = index < at ? \"done\" : index === at ? \"running\" : step.state;\n }\n live.status = label;\n },\n };\n}\n\n/** One entry by id, or `undefined`. */\nexport function activityById(id: string): ActivityEntry | undefined {\n return activities.find((entry) => entry.id === id);\n}\n\n/** Everything still running, oldest first — what the badge counts and idle waits on. */\nexport function runningActivities(): ActivityEntry[] {\n return activities.filter((entry) => !isFinished(entry));\n}\n\n/**\n * Stop an operation: run its callback, mark it cancelled. Returns whether anything was stopped.\n *\n * The callback runs BEFORE the state changes, so an implementation that throws leaves the entry\n * honestly still running rather than claiming a cancellation that did not happen.\n */\nexport function cancelActivity(id: string): boolean {\n const entry = activityById(id);\n const stop = _cancels.get(id);\n if (!entry || !stop || isFinished(entry)) {\n return false;\n }\n stop();\n _cancels.delete(id);\n entry.state = \"cancelled\";\n entry.endedAt = now();\n entry.cancellable = false;\n entry.status = \"Cancelled\";\n return true;\n}\n\n/** Drop every finished entry. Returns how many went. Running operations are kept. */\nexport function clearFinishedActivities(): number {\n const kept = activities.filter((entry) => !isFinished(entry));\n const removed = activities.length - kept.length;\n activities.splice(0, activities.length, ...kept);\n return removed;\n}\n\n/** Clear the whole list — tests, and the \"close project\" path. */\nexport function resetActivities(): void {\n activities.splice(0);\n _cancels.clear();\n}\n\n/**\n * What is still running, as `services/idle.ts` phrases it.\n *\n * §13.6 S4 puts this on every phase's checklist: an app with an operation in flight has not\n * finished reacting, so a screenshot taken now photographs a half-done import. A FINISHED entry is\n * not a blocker — the list stays on screen forever and waiting for it to empty would never settle.\n */\nexport function activityIdleBlockers(): readonly string[] {\n return runningActivities().map(\n (entry) => `activity: ${entry.title} — ${entry.status || \"running\"}`,\n );\n}\n\n// ─── Rendering ────────────────────────────────────────────────────────────────\n\n/** The state glyphs. One character each: the row's job is a line of text, not an illustration. */\nconst STATE_ICON: Readonly<Record<ActivityState, string>> = {\n cancelled: \"⊘\",\n done: \"✓\",\n failed: \"✕\",\n running: \"⋯\",\n};\n\nconst STEP_ICON: Readonly<Record<ActivityStep[\"state\"], string>> = {\n done: \"✓\",\n failed: \"✕\",\n pending: \"·\",\n running: \"⋯\",\n};\n\n/** How long it took, in the coarsest unit that is still true. */\nexport function activityDuration(entry: ActivityEntry, at: number = now()): string {\n const ms = Math.max(0, (entry.endedAt ?? at) - entry.startedAt);\n if (ms < 1000) {\n return `${ms}ms`;\n }\n const seconds = Math.round(ms / 1000);\n return seconds < 60 ? `${seconds}s` : `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n}\n\nfunction stepsTpl(entry: ActivityEntry): TemplateResult | typeof nothing {\n if (entry.steps.length === 0) {\n return nothing;\n }\n return html`<ol class=\"activity-steps\">\n ${entry.steps.map(\n (step) => html`<li class=\"activity-step activity-step--${step.state}\">\n <span class=\"activity-step-icon\" aria-hidden=\"true\">${STEP_ICON[step.state]}</span>\n ${step.label}\n </li>`,\n )}\n </ol>`;\n}\n\nfunction logTpl(entry: ActivityEntry): TemplateResult | typeof nothing {\n if (entry.log.length === 0) {\n return nothing;\n }\n return html`<button\n class=\"activity-log-toggle\"\n aria-expanded=${entry.expanded ? \"true\" : \"false\"}\n @click=${() => {\n entry.expanded = !entry.expanded;\n }}\n >\n ${entry.expanded ? \"Hide log\" : `Show log (${entry.log.length} line(s))`}\n </button>\n ${entry.expanded ? html`<pre class=\"activity-log\">${entry.log.join(\"\\n\")}</pre>` : nothing}`;\n}\n\n/** One operation. */\nfunction activityTpl(entry: ActivityEntry): TemplateResult {\n return html`\n <li class=\"activity-row activity-row--${entry.state}\">\n <span class=\"activity-icon\" aria-hidden=\"true\">${STATE_ICON[entry.state]}</span>\n <div class=\"activity-body\">\n <div class=\"activity-head\">\n <span class=\"activity-title\">${entry.title}</span>\n ${entry.source ? html`<span class=\"activity-source\">${entry.source}</span>` : nothing}\n <span class=\"activity-duration\">${activityDuration(entry)}</span>\n </div>\n ${entry.status ? html`<div class=\"activity-status\">${entry.status}</div>` : nothing}\n ${stepsTpl(entry)} ${logTpl(entry)}\n </div>\n ${\n entry.cancellable\n ? html`<button\n class=\"activity-cancel\"\n title=\"Stop this operation\"\n @click=${() => {\n cancelActivity(entry.id);\n }}\n >\n Cancel\n </button>`\n : nothing\n }\n </li>\n `;\n}\n\n/**\n * The Activity tab's body.\n *\n * Newest LAST, like a log and unlike a menu: an operation that starts while you are reading one\n * that is already running must not push it off the top.\n */\nexport function renderActivityList(): PanelBody {\n // The Deploy checklist lives here because a deploy IS a long operation with a log — which is why\n // P4 folded Deploy into Activity rather than giving it a fifth dock tab. It renders above the\n // Run log and before any operation has started, because its whole job is to say what is missing\n // BEFORE you begin.\n const checklist = renderDeployChecklist();\n if (activities.length === 0) {\n return html`${checklist}${renderEmptyState({\n detail: \"Installs, clones, publishes and imports report here while they run.\",\n message: \"Long operations show their progress, their log and their Cancel button here.\",\n })}`;\n }\n const finished = activities.filter((entry) => isFinished(entry)).length;\n return html`\n ${checklist}\n <div class=\"activity-panel\">\n ${\n finished > 0\n ? html`<div class=\"activity-actions\">\n <button\n class=\"activity-clear\"\n @click=${() => {\n clearFinishedActivities();\n }}\n >\n Clear ${finished} finished\n </button>\n </div>`\n : nothing\n }\n <ul class=\"activity-list\">\n ${repeat(\n activities,\n (entry) => entry.id,\n (entry) => activityTpl(entry),\n )}\n </ul>\n </div>\n `;\n}\n\n/**\n * Define the Activity panel. Called by `panels/bottom-dock.ts`, beside the state it writes.\n *\n * `level: \"project\"` because an operation is a thing done TO a project — an install, a clone, a\n * publish — and the list must not empty itself when the last document closes, which is the same\n * rule that hoisted source control off `TabUi`.\n */\nexport function registerActivityPanel(): void {\n registerPanel({\n id: \"activity\",\n title: \"Activity\",\n level: \"project\",\n dock: \"bottom\",\n icon: \"sp-icon-data\",\n // No rail button: the Bottom dock's tabs are reached by ⌘J and `view.setBottomTab`, and a\n // Fifth rail slot for a surface with no steady state would spend chrome §2 principle 9 caps.\n rail: false,\n badge: () => (runningActivities().length > 0 ? runningActivities().length : null),\n render: () => renderActivityList(),\n });\n}\n",
6
- "/// <reference lib=\"dom\" />\n/**\n * The one surface in Studio that still BLOCKS while it works — and now the only one (plan §7.3).\n *\n * What changed. This modal used to be four things at once: the running state, the error view, the\n * log and the operation's entire memory. It blocked the whole app, offered no way out, and took all\n * four with it when it closed — so a failed `bun install` could be read exactly once, and a hung\n * one could not be escaped at all. §7.3 splits those apart:\n *\n * - The **record** moves to `panels/activity-panel.ts`, which keeps the entry, its steps and its log\n * after the modal is gone;\n * - The **error view** is promoted into Problems — {@link ProgressModalHandle.fail} raises a\n * `notify.error` carrying the captured log as its `detail`, so the failure persists, is grouped\n * by source, and carries a Retry built from a command record;\n * - And the **exit** arrives twice: `Run in the background` hands the app back while the operation\n * keeps going in Activity, and an operation that passed a `cancel` gets a real Cancel button.\n *\n * What did NOT change is which operations block. §7.3 keeps blocking for dependency install and\n * nothing else, and this module's four call sites are exactly that — `packages/ensure-deps.ts`,\n * `packages/pull-package-sync.ts`, `packages/jxsuite-update.ts` and\n * `settings/dependencies-editor.ts`. Every other long operation calls `beginActivity` directly and\n * blocks nobody.\n */\n\nimport { html } from \"lit-html\";\nimport { beginActivity } from \"../panels/activity-panel\";\nimport { setBottomTab } from \"../shell\";\nimport { openModal } from \"./layers\";\nimport type { ActivityHandle } from \"../panels/activity-panel\";\nimport type { TemplateResult } from \"lit-html\";\n\nexport interface ProgressModalHandle {\n /** Update the status line shown under the title. Also the Activity entry's status. */\n setStatus: (text: string) => void;\n /** Append captured output. It is the Activity entry's log and a failure's `detail`. */\n log: (chunk: string) => void;\n /** Record the failure as a Problem (message + captured log) and close the modal. */\n fail: (message: string) => void;\n /** Close the modal and mark the operation done (success path). */\n done: () => void;\n /** The Activity entry this operation is recorded in, which outlives the modal. */\n activity: ActivityHandle;\n}\n\nexport interface ProgressModalOptions {\n title: string;\n status?: string;\n /** Who is running it — \"Packages\" for all four of today's call sites. */\n source?: string;\n /**\n * Stop the operation. Draws Cancel, here and on the Activity row.\n *\n * Absent means the operation genuinely cannot be stopped, and no button claims otherwise — but\n * `Run in the background` is offered regardless, because \"let me use the app\" is a promise this\n * module can always keep.\n */\n cancel?: () => void;\n}\n\nfunction card(body: TemplateResult): TemplateResult {\n return html`\n <sp-underlay open></sp-underlay>\n <div class=\"progress-modal\" aria-live=\"polite\">${body}</div>\n `;\n}\n\n/**\n * The running view: the spinner, the status line, and the two ways out.\n *\n * `Run in the background` is not a cancel and does not pretend to be — it dismisses the BLOCKING\n * part and leaves the operation running where it can be watched, which is the affordance a modal\n * with no exit never had.\n */\nfunction runningView(\n title: string,\n status: string,\n actions: { background: () => void; cancel?: (() => void) | undefined },\n): TemplateResult {\n return card(html`\n <div class=\"progress-head\">\n <sp-progress-circle indeterminate size=\"m\" aria-label=${title}></sp-progress-circle>\n <div class=\"progress-lines\">\n <strong class=\"progress-title\">${title}</strong>\n ${status ? html`<span class=\"progress-status\">${status}</span>` : \"\"}\n </div>\n </div>\n <div class=\"progress-actions\">\n <sp-button size=\"s\" variant=\"secondary\" treatment=\"outline\" @click=${actions.background}>\n Run in the background\n </sp-button>\n ${\n actions.cancel\n ? html`<sp-button size=\"s\" variant=\"negative\" @click=${actions.cancel}>Cancel</sp-button>`\n : \"\"\n }\n </div>\n `);\n}\n\n/**\n * Show a blocking progress modal, and record the operation in Activity either way.\n *\n * @param {ProgressModalOptions} opts\n * @returns {ProgressModalHandle}\n */\nexport function showProgressModal(opts: ProgressModalOptions): ProgressModalHandle {\n let closed = false;\n\n const activity = beginActivity({\n title: opts.title,\n ...(opts.status === undefined ? {} : { status: opts.status }),\n ...(opts.source === undefined ? {} : { source: opts.source }),\n ...(opts.cancel === undefined ? {} : { cancel: opts.cancel }),\n });\n\n const close = () => {\n if (closed) {\n return;\n }\n closed = true;\n modal.close();\n };\n\n /** Hand the app back and put the operation where it can be watched. */\n const background = () => {\n close();\n setBottomTab(\"activity\");\n };\n\n const cancel = opts.cancel\n ? () => {\n close();\n opts.cancel?.();\n }\n : undefined;\n\n const view = (status: string) => runningView(opts.title, status, { background, cancel });\n\n const modal = openModal(view(opts.status ?? \"\"), {\n label: opts.title,\n // Escape means the same thing the button does: stop BLOCKING, not stop working. The operation\n // Owned the modal outright before, and swallowing Escape was the only honest thing a surface\n // With nowhere to put a running operation could do.\n onDismiss: background,\n });\n\n return {\n activity,\n done() {\n activity.done();\n close();\n },\n fail(message: string) {\n // The error view is not rendered here any more: it is the Problems row, with the log as its\n // `detail`, and it is still on screen tomorrow. Three of the four call sites hand over a\n // CAPTURED LOG as their message — `result.log ?? \"bun install failed\"` — so a multi-line one\n // Is split the way the old view split it: \"<title> failed\" as the headline, the whole text\n // As the detail. A Problems list whose first row is 400 lines of `bun` output is not a list.\n const text = (message ?? \"\").trim();\n if (text === \"\" || text.includes(\"\\n\")) {\n activity.log(text);\n activity.fail(`${opts.title} failed`);\n } else {\n activity.fail(text);\n }\n close();\n },\n log(chunk: string) {\n activity.log(chunk);\n },\n setStatus(text: string) {\n activity.setStatus(text);\n if (!closed) {\n modal.update(view(text));\n }\n },\n };\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "E5DF930C7E1AD2C064756E2164756E21",
10
- "names": []
11
- }
@@ -1,13 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../node_modules/monaco-editor/esm/vs/languages/features/typescript/workerManager.js", "../../../node_modules/monaco-editor/esm/vs/languages/features/typescript/lib/lib.index.js", "../../../node_modules/monaco-editor/esm/vs/languages/features/typescript/languageFeatures.js", "../../../node_modules/monaco-editor/esm/vs/languages/features/typescript/tsMode.js"],
4
- "sourcesContent": [
5
- "import { editor } from '../../../editor/editor.api.js';\nimport { createWebWorker } from '../../../internal/common/workers.js';\n\nclass WorkerManager {\n constructor(_modeId, _defaults) {\n this._modeId = _modeId;\n this._defaults = _defaults;\n this._worker = null;\n this._client = null;\n this._configChangeListener = this._defaults.onDidChange(() => this._stopWorker());\n this._updateExtraLibsToken = 0;\n this._extraLibsChangeListener = this._defaults.onDidExtraLibsChange(\n () => this._updateExtraLibs()\n );\n }\n dispose() {\n this._configChangeListener.dispose();\n this._extraLibsChangeListener.dispose();\n this._stopWorker();\n }\n _stopWorker() {\n if (this._worker) {\n this._worker.dispose();\n this._worker = null;\n }\n this._client = null;\n }\n async _updateExtraLibs() {\n if (!this._worker) {\n return;\n }\n const myToken = ++this._updateExtraLibsToken;\n const proxy = await this._worker.getProxy();\n if (this._updateExtraLibsToken !== myToken) {\n return;\n }\n proxy.updateExtraLibs(this._defaults.getExtraLibs());\n }\n _getClient() {\n if (!this._client) {\n this._client = (async () => {\n this._worker = createWebWorker({\n // module that exports the create() method and returns a `TypeScriptWorker` instance\n moduleId: \"vs/language/typescript/tsWorker\",\n createWorker: () => new Worker(new URL('ts.worker.js', import.meta.url), { type: \"module\" }),\n label: this._modeId,\n keepIdleModels: true,\n // passed in to the create() method\n createData: {\n compilerOptions: this._defaults.getCompilerOptions(),\n extraLibs: this._defaults.getExtraLibs(),\n customWorkerPath: this._defaults.workerOptions.customWorkerPath,\n inlayHintsOptions: this._defaults.inlayHintsOptions\n }\n });\n if (this._defaults.getEagerModelSync()) {\n return await this._worker.withSyncedResources(\n editor.getModels().filter((model) => model.getLanguageId() === this._modeId).map((model) => model.uri)\n );\n }\n return await this._worker.getProxy();\n })();\n }\n return this._client;\n }\n async getLanguageServiceWorker(...resources) {\n const client = await this._getClient();\n if (this._worker) {\n await this._worker.withSyncedResources(resources);\n }\n return client;\n }\n}\n\nexport { WorkerManager };\n",
6
- "const libFileSet = {};\nlibFileSet[\"lib.d.ts\"] = true;\nlibFileSet[\"lib.decorators.d.ts\"] = true;\nlibFileSet[\"lib.decorators.legacy.d.ts\"] = true;\nlibFileSet[\"lib.dom.asynciterable.d.ts\"] = true;\nlibFileSet[\"lib.dom.d.ts\"] = true;\nlibFileSet[\"lib.dom.iterable.d.ts\"] = true;\nlibFileSet[\"lib.es2015.collection.d.ts\"] = true;\nlibFileSet[\"lib.es2015.core.d.ts\"] = true;\nlibFileSet[\"lib.es2015.d.ts\"] = true;\nlibFileSet[\"lib.es2015.generator.d.ts\"] = true;\nlibFileSet[\"lib.es2015.iterable.d.ts\"] = true;\nlibFileSet[\"lib.es2015.promise.d.ts\"] = true;\nlibFileSet[\"lib.es2015.proxy.d.ts\"] = true;\nlibFileSet[\"lib.es2015.reflect.d.ts\"] = true;\nlibFileSet[\"lib.es2015.symbol.d.ts\"] = true;\nlibFileSet[\"lib.es2015.symbol.wellknown.d.ts\"] = true;\nlibFileSet[\"lib.es2016.array.include.d.ts\"] = true;\nlibFileSet[\"lib.es2016.d.ts\"] = true;\nlibFileSet[\"lib.es2016.full.d.ts\"] = true;\nlibFileSet[\"lib.es2016.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2017.arraybuffer.d.ts\"] = true;\nlibFileSet[\"lib.es2017.d.ts\"] = true;\nlibFileSet[\"lib.es2017.date.d.ts\"] = true;\nlibFileSet[\"lib.es2017.full.d.ts\"] = true;\nlibFileSet[\"lib.es2017.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2017.object.d.ts\"] = true;\nlibFileSet[\"lib.es2017.sharedmemory.d.ts\"] = true;\nlibFileSet[\"lib.es2017.string.d.ts\"] = true;\nlibFileSet[\"lib.es2017.typedarrays.d.ts\"] = true;\nlibFileSet[\"lib.es2018.asyncgenerator.d.ts\"] = true;\nlibFileSet[\"lib.es2018.asynciterable.d.ts\"] = true;\nlibFileSet[\"lib.es2018.d.ts\"] = true;\nlibFileSet[\"lib.es2018.full.d.ts\"] = true;\nlibFileSet[\"lib.es2018.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2018.promise.d.ts\"] = true;\nlibFileSet[\"lib.es2018.regexp.d.ts\"] = true;\nlibFileSet[\"lib.es2019.array.d.ts\"] = true;\nlibFileSet[\"lib.es2019.d.ts\"] = true;\nlibFileSet[\"lib.es2019.full.d.ts\"] = true;\nlibFileSet[\"lib.es2019.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2019.object.d.ts\"] = true;\nlibFileSet[\"lib.es2019.string.d.ts\"] = true;\nlibFileSet[\"lib.es2019.symbol.d.ts\"] = true;\nlibFileSet[\"lib.es2020.bigint.d.ts\"] = true;\nlibFileSet[\"lib.es2020.d.ts\"] = true;\nlibFileSet[\"lib.es2020.date.d.ts\"] = true;\nlibFileSet[\"lib.es2020.full.d.ts\"] = true;\nlibFileSet[\"lib.es2020.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2020.number.d.ts\"] = true;\nlibFileSet[\"lib.es2020.promise.d.ts\"] = true;\nlibFileSet[\"lib.es2020.sharedmemory.d.ts\"] = true;\nlibFileSet[\"lib.es2020.string.d.ts\"] = true;\nlibFileSet[\"lib.es2020.symbol.wellknown.d.ts\"] = true;\nlibFileSet[\"lib.es2021.d.ts\"] = true;\nlibFileSet[\"lib.es2021.full.d.ts\"] = true;\nlibFileSet[\"lib.es2021.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2021.promise.d.ts\"] = true;\nlibFileSet[\"lib.es2021.string.d.ts\"] = true;\nlibFileSet[\"lib.es2021.weakref.d.ts\"] = true;\nlibFileSet[\"lib.es2022.array.d.ts\"] = true;\nlibFileSet[\"lib.es2022.d.ts\"] = true;\nlibFileSet[\"lib.es2022.error.d.ts\"] = true;\nlibFileSet[\"lib.es2022.full.d.ts\"] = true;\nlibFileSet[\"lib.es2022.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2022.object.d.ts\"] = true;\nlibFileSet[\"lib.es2022.regexp.d.ts\"] = true;\nlibFileSet[\"lib.es2022.string.d.ts\"] = true;\nlibFileSet[\"lib.es2023.array.d.ts\"] = true;\nlibFileSet[\"lib.es2023.collection.d.ts\"] = true;\nlibFileSet[\"lib.es2023.d.ts\"] = true;\nlibFileSet[\"lib.es2023.full.d.ts\"] = true;\nlibFileSet[\"lib.es2023.intl.d.ts\"] = true;\nlibFileSet[\"lib.es2024.arraybuffer.d.ts\"] = true;\nlibFileSet[\"lib.es2024.collection.d.ts\"] = true;\nlibFileSet[\"lib.es2024.d.ts\"] = true;\nlibFileSet[\"lib.es2024.full.d.ts\"] = true;\nlibFileSet[\"lib.es2024.object.d.ts\"] = true;\nlibFileSet[\"lib.es2024.promise.d.ts\"] = true;\nlibFileSet[\"lib.es2024.regexp.d.ts\"] = true;\nlibFileSet[\"lib.es2024.sharedmemory.d.ts\"] = true;\nlibFileSet[\"lib.es2024.string.d.ts\"] = true;\nlibFileSet[\"lib.es5.d.ts\"] = true;\nlibFileSet[\"lib.es6.d.ts\"] = true;\nlibFileSet[\"lib.esnext.array.d.ts\"] = true;\nlibFileSet[\"lib.esnext.collection.d.ts\"] = true;\nlibFileSet[\"lib.esnext.d.ts\"] = true;\nlibFileSet[\"lib.esnext.decorators.d.ts\"] = true;\nlibFileSet[\"lib.esnext.disposable.d.ts\"] = true;\nlibFileSet[\"lib.esnext.error.d.ts\"] = true;\nlibFileSet[\"lib.esnext.float16.d.ts\"] = true;\nlibFileSet[\"lib.esnext.full.d.ts\"] = true;\nlibFileSet[\"lib.esnext.intl.d.ts\"] = true;\nlibFileSet[\"lib.esnext.iterator.d.ts\"] = true;\nlibFileSet[\"lib.esnext.promise.d.ts\"] = true;\nlibFileSet[\"lib.esnext.sharedmemory.d.ts\"] = true;\nlibFileSet[\"lib.scripthost.d.ts\"] = true;\nlibFileSet[\"lib.webworker.asynciterable.d.ts\"] = true;\nlibFileSet[\"lib.webworker.d.ts\"] = true;\nlibFileSet[\"lib.webworker.importscripts.d.ts\"] = true;\nlibFileSet[\"lib.webworker.iterable.d.ts\"] = true;\n\nexport { libFileSet };\n",
7
- "import { typescriptDefaults } from './register.js';\nimport { libFileSet } from './lib/lib.index.js';\nimport { Uri, editor, MarkerTag, MarkerSeverity, Range, languages } from '../../../editor/editor.api.js';\n\nfunction flattenDiagnosticMessageText(diag, newLine, indent = 0) {\n if (typeof diag === \"string\") {\n return diag;\n } else if (diag === void 0) {\n return \"\";\n }\n let result = \"\";\n if (indent) {\n result += newLine;\n for (let i = 0; i < indent; i++) {\n result += \" \";\n }\n }\n result += diag.messageText;\n indent++;\n if (diag.next) {\n for (const kid of diag.next) {\n result += flattenDiagnosticMessageText(kid, newLine, indent);\n }\n }\n return result;\n}\nfunction displayPartsToString(displayParts) {\n if (displayParts) {\n return displayParts.map((displayPart) => displayPart.text).join(\"\");\n }\n return \"\";\n}\nclass Adapter {\n constructor(_worker) {\n this._worker = _worker;\n }\n // protected _positionToOffset(model: editor.ITextModel, position: monaco.IPosition): number {\n // \treturn model.getOffsetAt(position);\n // }\n // protected _offsetToPosition(model: editor.ITextModel, offset: number): monaco.IPosition {\n // \treturn model.getPositionAt(offset);\n // }\n _textSpanToRange(model, span) {\n let p1 = model.getPositionAt(span.start);\n let p2 = model.getPositionAt(span.start + span.length);\n let { lineNumber: startLineNumber, column: startColumn } = p1;\n let { lineNumber: endLineNumber, column: endColumn } = p2;\n return { startLineNumber, startColumn, endLineNumber, endColumn };\n }\n}\nclass LibFiles {\n constructor(_worker) {\n this._worker = _worker;\n this._libFiles = {};\n this._hasFetchedLibFiles = false;\n this._fetchLibFilesPromise = null;\n }\n isLibFile(uri) {\n if (!uri) {\n return false;\n }\n if (uri.path.indexOf(\"/lib.\") === 0) {\n return !!libFileSet[uri.path.slice(1)];\n }\n return false;\n }\n getOrCreateModel(fileName) {\n const uri = Uri.parse(fileName);\n const model = editor.getModel(uri);\n if (model) {\n return model;\n }\n if (this.isLibFile(uri) && this._hasFetchedLibFiles) {\n return editor.createModel(this._libFiles[uri.path.slice(1)], \"typescript\", uri);\n }\n const matchedLibFile = typescriptDefaults.getExtraLibs()[fileName];\n if (matchedLibFile) {\n return editor.createModel(matchedLibFile.content, \"typescript\", uri);\n }\n return null;\n }\n _containsLibFile(uris) {\n for (let uri of uris) {\n if (this.isLibFile(uri)) {\n return true;\n }\n }\n return false;\n }\n async fetchLibFilesIfNecessary(uris) {\n if (!this._containsLibFile(uris)) {\n return;\n }\n await this._fetchLibFiles();\n }\n _fetchLibFiles() {\n if (!this._fetchLibFilesPromise) {\n this._fetchLibFilesPromise = this._worker().then((w) => w.getLibFiles()).then((libFiles) => {\n this._hasFetchedLibFiles = true;\n this._libFiles = libFiles;\n });\n }\n return this._fetchLibFilesPromise;\n }\n}\nclass DiagnosticsAdapter extends Adapter {\n constructor(_libFiles, _defaults, _selector, worker) {\n super(worker);\n this._libFiles = _libFiles;\n this._defaults = _defaults;\n this._selector = _selector;\n this._disposables = [];\n this._listener = /* @__PURE__ */ Object.create(null);\n const onModelAdd = (model) => {\n if (model.getLanguageId() !== _selector) {\n return;\n }\n const maybeValidate = () => {\n const { onlyVisible } = this._defaults.getDiagnosticsOptions();\n if (onlyVisible) {\n if (model.isAttachedToEditor()) {\n this._doValidate(model);\n }\n } else {\n this._doValidate(model);\n }\n };\n let handle;\n const changeSubscription = model.onDidChangeContent(() => {\n clearTimeout(handle);\n handle = window.setTimeout(maybeValidate, 500);\n });\n const visibleSubscription = model.onDidChangeAttached(() => {\n const { onlyVisible } = this._defaults.getDiagnosticsOptions();\n if (onlyVisible) {\n if (model.isAttachedToEditor()) {\n maybeValidate();\n } else {\n editor.setModelMarkers(model, this._selector, []);\n }\n }\n });\n this._listener[model.uri.toString()] = {\n dispose() {\n changeSubscription.dispose();\n visibleSubscription.dispose();\n clearTimeout(handle);\n }\n };\n maybeValidate();\n };\n const onModelRemoved = (model) => {\n editor.setModelMarkers(model, this._selector, []);\n const key = model.uri.toString();\n if (this._listener[key]) {\n this._listener[key].dispose();\n delete this._listener[key];\n }\n };\n this._disposables.push(\n editor.onDidCreateModel((model) => onModelAdd(model))\n );\n this._disposables.push(editor.onWillDisposeModel(onModelRemoved));\n this._disposables.push(\n editor.onDidChangeModelLanguage((event) => {\n onModelRemoved(event.model);\n onModelAdd(event.model);\n })\n );\n this._disposables.push({\n dispose() {\n for (const model of editor.getModels()) {\n onModelRemoved(model);\n }\n }\n });\n const recomputeDiagostics = () => {\n for (const model of editor.getModels()) {\n onModelRemoved(model);\n onModelAdd(model);\n }\n };\n this._disposables.push(this._defaults.onDidChange(recomputeDiagostics));\n this._disposables.push(this._defaults.onDidExtraLibsChange(recomputeDiagostics));\n editor.getModels().forEach((model) => onModelAdd(model));\n }\n dispose() {\n this._disposables.forEach((d) => d && d.dispose());\n this._disposables = [];\n }\n async _doValidate(model) {\n const worker = await this._worker(model.uri);\n if (model.isDisposed()) {\n return;\n }\n const promises = [];\n const { noSyntaxValidation, noSemanticValidation, noSuggestionDiagnostics } = this._defaults.getDiagnosticsOptions();\n if (!noSyntaxValidation) {\n promises.push(worker.getSyntacticDiagnostics(model.uri.toString()));\n }\n if (!noSemanticValidation) {\n promises.push(worker.getSemanticDiagnostics(model.uri.toString()));\n }\n if (!noSuggestionDiagnostics) {\n promises.push(worker.getSuggestionDiagnostics(model.uri.toString()));\n }\n const allDiagnostics = await Promise.all(promises);\n if (!allDiagnostics || model.isDisposed()) {\n return;\n }\n const diagnostics = allDiagnostics.reduce((p, c) => c.concat(p), []).filter(\n (d) => (this._defaults.getDiagnosticsOptions().diagnosticCodesToIgnore || []).indexOf(d.code) === -1\n );\n const relatedUris = diagnostics.map((d) => d.relatedInformation || []).reduce((p, c) => c.concat(p), []).map(\n (relatedInformation) => relatedInformation.file ? Uri.parse(relatedInformation.file.fileName) : null\n );\n await this._libFiles.fetchLibFilesIfNecessary(relatedUris);\n if (model.isDisposed()) {\n return;\n }\n editor.setModelMarkers(\n model,\n this._selector,\n diagnostics.map((d) => this._convertDiagnostics(model, d))\n );\n }\n _convertDiagnostics(model, diag) {\n const diagStart = diag.start || 0;\n const diagLength = diag.length || 1;\n const { lineNumber: startLineNumber, column: startColumn } = model.getPositionAt(diagStart);\n const { lineNumber: endLineNumber, column: endColumn } = model.getPositionAt(\n diagStart + diagLength\n );\n const tags = [];\n if (diag.reportsUnnecessary) {\n tags.push(MarkerTag.Unnecessary);\n }\n if (diag.reportsDeprecated) {\n tags.push(MarkerTag.Deprecated);\n }\n return {\n severity: this._tsDiagnosticCategoryToMarkerSeverity(diag.category),\n startLineNumber,\n startColumn,\n endLineNumber,\n endColumn,\n message: flattenDiagnosticMessageText(diag.messageText, \"\\n\"),\n code: diag.code.toString(),\n tags,\n relatedInformation: this._convertRelatedInformation(model, diag.relatedInformation)\n };\n }\n _convertRelatedInformation(model, relatedInformation) {\n if (!relatedInformation) {\n return [];\n }\n const result = [];\n relatedInformation.forEach((info) => {\n let relatedResource = model;\n if (info.file) {\n relatedResource = this._libFiles.getOrCreateModel(info.file.fileName);\n }\n if (!relatedResource) {\n return;\n }\n const infoStart = info.start || 0;\n const infoLength = info.length || 1;\n const { lineNumber: startLineNumber, column: startColumn } = relatedResource.getPositionAt(infoStart);\n const { lineNumber: endLineNumber, column: endColumn } = relatedResource.getPositionAt(\n infoStart + infoLength\n );\n result.push({\n resource: relatedResource.uri,\n startLineNumber,\n startColumn,\n endLineNumber,\n endColumn,\n message: flattenDiagnosticMessageText(info.messageText, \"\\n\")\n });\n });\n return result;\n }\n _tsDiagnosticCategoryToMarkerSeverity(category) {\n switch (category) {\n case 1 /* Error */:\n return MarkerSeverity.Error;\n case 3 /* Message */:\n return MarkerSeverity.Info;\n case 0 /* Warning */:\n return MarkerSeverity.Warning;\n case 2 /* Suggestion */:\n return MarkerSeverity.Hint;\n }\n return MarkerSeverity.Info;\n }\n}\nclass SuggestAdapter extends Adapter {\n get triggerCharacters() {\n return [\".\"];\n }\n async provideCompletionItems(model, position, _context, token) {\n const wordInfo = model.getWordUntilPosition(position);\n const wordRange = new Range(\n position.lineNumber,\n wordInfo.startColumn,\n position.lineNumber,\n wordInfo.endColumn\n );\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const info = await worker.getCompletionsAtPosition(resource.toString(), offset);\n if (!info || model.isDisposed()) {\n return;\n }\n const suggestions = info.entries.map((entry) => {\n let range = wordRange;\n if (entry.replacementSpan) {\n const p1 = model.getPositionAt(entry.replacementSpan.start);\n const p2 = model.getPositionAt(entry.replacementSpan.start + entry.replacementSpan.length);\n range = new Range(p1.lineNumber, p1.column, p2.lineNumber, p2.column);\n }\n const tags = [];\n if (entry.kindModifiers !== void 0 && entry.kindModifiers.indexOf(\"deprecated\") !== -1) {\n tags.push(languages.CompletionItemTag.Deprecated);\n }\n return {\n uri: resource,\n position,\n offset,\n range,\n label: entry.name,\n insertText: entry.name,\n sortText: entry.sortText,\n kind: SuggestAdapter.convertKind(entry.kind),\n tags\n };\n });\n return {\n suggestions\n };\n }\n async resolveCompletionItem(item, token) {\n const myItem = item;\n const resource = myItem.uri;\n const position = myItem.position;\n const offset = myItem.offset;\n const worker = await this._worker(resource);\n const details = await worker.getCompletionEntryDetails(\n resource.toString(),\n offset,\n myItem.label\n );\n if (!details) {\n return myItem;\n }\n return {\n uri: resource,\n position,\n label: details.name,\n kind: SuggestAdapter.convertKind(details.kind),\n detail: displayPartsToString(details.displayParts),\n documentation: {\n value: SuggestAdapter.createDocumentationString(details)\n }\n };\n }\n static convertKind(kind) {\n switch (kind) {\n case Kind.primitiveType:\n case Kind.keyword:\n return languages.CompletionItemKind.Keyword;\n case Kind.variable:\n case Kind.localVariable:\n return languages.CompletionItemKind.Variable;\n case Kind.memberVariable:\n case Kind.memberGetAccessor:\n case Kind.memberSetAccessor:\n return languages.CompletionItemKind.Field;\n case Kind.function:\n case Kind.memberFunction:\n case Kind.constructSignature:\n case Kind.callSignature:\n case Kind.indexSignature:\n return languages.CompletionItemKind.Function;\n case Kind.enum:\n return languages.CompletionItemKind.Enum;\n case Kind.module:\n return languages.CompletionItemKind.Module;\n case Kind.class:\n return languages.CompletionItemKind.Class;\n case Kind.interface:\n return languages.CompletionItemKind.Interface;\n case Kind.warning:\n return languages.CompletionItemKind.File;\n }\n return languages.CompletionItemKind.Property;\n }\n static createDocumentationString(details) {\n let documentationString = displayPartsToString(details.documentation);\n if (details.tags) {\n for (const tag of details.tags) {\n documentationString += `\n\n${tagToString(tag)}`;\n }\n }\n return documentationString;\n }\n}\nfunction tagToString(tag) {\n let tagLabel = `*@${tag.name}*`;\n if (tag.name === \"param\" && tag.text) {\n const [paramName, ...rest] = tag.text;\n tagLabel += `\\`${paramName.text}\\``;\n if (rest.length > 0) tagLabel += ` \\u2014 ${rest.map((r) => r.text).join(\" \")}`;\n } else if (Array.isArray(tag.text)) {\n tagLabel += ` \\u2014 ${tag.text.map((r) => r.text).join(\" \")}`;\n } else if (tag.text) {\n tagLabel += ` \\u2014 ${tag.text}`;\n }\n return tagLabel;\n}\nclass SignatureHelpAdapter extends Adapter {\n constructor() {\n super(...arguments);\n this.signatureHelpTriggerCharacters = [\"(\", \",\"];\n }\n static _toSignatureHelpTriggerReason(context) {\n switch (context.triggerKind) {\n case languages.SignatureHelpTriggerKind.TriggerCharacter:\n if (context.triggerCharacter) {\n if (context.isRetrigger) {\n return { kind: \"retrigger\", triggerCharacter: context.triggerCharacter };\n } else {\n return { kind: \"characterTyped\", triggerCharacter: context.triggerCharacter };\n }\n } else {\n return { kind: \"invoked\" };\n }\n case languages.SignatureHelpTriggerKind.ContentChange:\n return context.isRetrigger ? { kind: \"retrigger\" } : { kind: \"invoked\" };\n case languages.SignatureHelpTriggerKind.Invoke:\n default:\n return { kind: \"invoked\" };\n }\n }\n async provideSignatureHelp(model, position, token, context) {\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const info = await worker.getSignatureHelpItems(resource.toString(), offset, {\n triggerReason: SignatureHelpAdapter._toSignatureHelpTriggerReason(context)\n });\n if (!info || model.isDisposed()) {\n return;\n }\n const ret = {\n activeSignature: info.selectedItemIndex,\n activeParameter: info.argumentIndex,\n signatures: []\n };\n info.items.forEach((item) => {\n const signature = {\n label: \"\",\n parameters: []\n };\n signature.documentation = {\n value: displayPartsToString(item.documentation)\n };\n signature.label += displayPartsToString(item.prefixDisplayParts);\n item.parameters.forEach((p, i, a) => {\n const label = displayPartsToString(p.displayParts);\n const parameter = {\n label,\n documentation: {\n value: displayPartsToString(p.documentation)\n }\n };\n signature.label += label;\n signature.parameters.push(parameter);\n if (i < a.length - 1) {\n signature.label += displayPartsToString(item.separatorDisplayParts);\n }\n });\n signature.label += displayPartsToString(item.suffixDisplayParts);\n ret.signatures.push(signature);\n });\n return {\n value: ret,\n dispose() {\n }\n };\n }\n}\nclass QuickInfoAdapter extends Adapter {\n async provideHover(model, position, token) {\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const info = await worker.getQuickInfoAtPosition(resource.toString(), offset);\n if (!info || model.isDisposed()) {\n return;\n }\n const documentation = displayPartsToString(info.documentation);\n const tags = info.tags ? info.tags.map((tag) => tagToString(tag)).join(\" \\n\\n\") : \"\";\n const contents = displayPartsToString(info.displayParts);\n return {\n range: this._textSpanToRange(model, info.textSpan),\n contents: [\n {\n value: \"```typescript\\n\" + contents + \"\\n```\\n\"\n },\n {\n value: documentation + (tags ? \"\\n\\n\" + tags : \"\")\n }\n ]\n };\n }\n}\nclass DocumentHighlightAdapter extends Adapter {\n async provideDocumentHighlights(model, position, token) {\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const entries = await worker.getDocumentHighlights(resource.toString(), offset, [\n resource.toString()\n ]);\n if (!entries || model.isDisposed()) {\n return;\n }\n return entries.flatMap((entry) => {\n return entry.highlightSpans.map((highlightSpans) => {\n return {\n range: this._textSpanToRange(model, highlightSpans.textSpan),\n kind: highlightSpans.kind === \"writtenReference\" ? languages.DocumentHighlightKind.Write : languages.DocumentHighlightKind.Text\n };\n });\n });\n }\n}\nclass DefinitionAdapter extends Adapter {\n constructor(_libFiles, worker) {\n super(worker);\n this._libFiles = _libFiles;\n }\n async provideDefinition(model, position, token) {\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const entries = await worker.getDefinitionAtPosition(resource.toString(), offset);\n if (!entries || model.isDisposed()) {\n return;\n }\n await this._libFiles.fetchLibFilesIfNecessary(\n entries.map((entry) => Uri.parse(entry.fileName))\n );\n if (model.isDisposed()) {\n return;\n }\n const result = [];\n for (let entry of entries) {\n const refModel = this._libFiles.getOrCreateModel(entry.fileName);\n if (refModel) {\n result.push({\n uri: refModel.uri,\n range: this._textSpanToRange(refModel, entry.textSpan)\n });\n }\n }\n return result;\n }\n}\nclass ReferenceAdapter extends Adapter {\n constructor(_libFiles, worker) {\n super(worker);\n this._libFiles = _libFiles;\n }\n async provideReferences(model, position, context, token) {\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const entries = await worker.getReferencesAtPosition(resource.toString(), offset);\n if (!entries || model.isDisposed()) {\n return;\n }\n await this._libFiles.fetchLibFilesIfNecessary(\n entries.map((entry) => Uri.parse(entry.fileName))\n );\n if (model.isDisposed()) {\n return;\n }\n const result = [];\n for (let entry of entries) {\n const refModel = this._libFiles.getOrCreateModel(entry.fileName);\n if (refModel) {\n result.push({\n uri: refModel.uri,\n range: this._textSpanToRange(refModel, entry.textSpan)\n });\n }\n }\n return result;\n }\n}\nclass OutlineAdapter extends Adapter {\n async provideDocumentSymbols(model, token) {\n const resource = model.uri;\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const root = await worker.getNavigationTree(resource.toString());\n if (!root || model.isDisposed()) {\n return;\n }\n const convert = (item, containerLabel) => {\n const result2 = {\n name: item.text,\n detail: \"\",\n kind: outlineTypeTable[item.kind] || languages.SymbolKind.Variable,\n range: this._textSpanToRange(model, item.spans[0]),\n selectionRange: this._textSpanToRange(model, item.spans[0]),\n tags: [],\n children: item.childItems?.map((child) => convert(child, item.text)),\n containerName: containerLabel\n };\n return result2;\n };\n const result = root.childItems ? root.childItems.map((item) => convert(item)) : [];\n return result;\n }\n}\nclass Kind {\n}\nKind.unknown = \"\";\nKind.keyword = \"keyword\";\nKind.script = \"script\";\nKind.module = \"module\";\nKind.class = \"class\";\nKind.interface = \"interface\";\nKind.type = \"type\";\nKind.enum = \"enum\";\nKind.variable = \"var\";\nKind.localVariable = \"local var\";\nKind.function = \"function\";\nKind.localFunction = \"local function\";\nKind.memberFunction = \"method\";\nKind.memberGetAccessor = \"getter\";\nKind.memberSetAccessor = \"setter\";\nKind.memberVariable = \"property\";\nKind.constructorImplementation = \"constructor\";\nKind.callSignature = \"call\";\nKind.indexSignature = \"index\";\nKind.constructSignature = \"construct\";\nKind.parameter = \"parameter\";\nKind.typeParameter = \"type parameter\";\nKind.primitiveType = \"primitive type\";\nKind.label = \"label\";\nKind.alias = \"alias\";\nKind.const = \"const\";\nKind.let = \"let\";\nKind.warning = \"warning\";\nlet outlineTypeTable = /* @__PURE__ */ Object.create(null);\noutlineTypeTable[Kind.module] = languages.SymbolKind.Module;\noutlineTypeTable[Kind.class] = languages.SymbolKind.Class;\noutlineTypeTable[Kind.enum] = languages.SymbolKind.Enum;\noutlineTypeTable[Kind.interface] = languages.SymbolKind.Interface;\noutlineTypeTable[Kind.memberFunction] = languages.SymbolKind.Method;\noutlineTypeTable[Kind.memberVariable] = languages.SymbolKind.Property;\noutlineTypeTable[Kind.memberGetAccessor] = languages.SymbolKind.Property;\noutlineTypeTable[Kind.memberSetAccessor] = languages.SymbolKind.Property;\noutlineTypeTable[Kind.variable] = languages.SymbolKind.Variable;\noutlineTypeTable[Kind.const] = languages.SymbolKind.Variable;\noutlineTypeTable[Kind.localVariable] = languages.SymbolKind.Variable;\noutlineTypeTable[Kind.variable] = languages.SymbolKind.Variable;\noutlineTypeTable[Kind.function] = languages.SymbolKind.Function;\noutlineTypeTable[Kind.localFunction] = languages.SymbolKind.Function;\nclass FormatHelper extends Adapter {\n static _convertOptions(options) {\n return {\n ConvertTabsToSpaces: options.insertSpaces,\n TabSize: options.tabSize,\n IndentSize: options.tabSize,\n IndentStyle: 2 /* Smart */,\n NewLineCharacter: \"\\n\",\n InsertSpaceAfterCommaDelimiter: true,\n InsertSpaceAfterSemicolonInForStatements: true,\n InsertSpaceBeforeAndAfterBinaryOperators: true,\n InsertSpaceAfterKeywordsInControlFlowStatements: true,\n InsertSpaceAfterFunctionKeywordForAnonymousFunctions: true,\n InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,\n InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,\n InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,\n PlaceOpenBraceOnNewLineForControlBlocks: false,\n PlaceOpenBraceOnNewLineForFunctions: false\n };\n }\n _convertTextChanges(model, change) {\n return {\n text: change.newText,\n range: this._textSpanToRange(model, change.span)\n };\n }\n}\nclass FormatAdapter extends FormatHelper {\n constructor() {\n super(...arguments);\n this.canFormatMultipleRanges = false;\n }\n async provideDocumentRangeFormattingEdits(model, range, options, token) {\n const resource = model.uri;\n const startOffset = model.getOffsetAt({\n lineNumber: range.startLineNumber,\n column: range.startColumn\n });\n const endOffset = model.getOffsetAt({\n lineNumber: range.endLineNumber,\n column: range.endColumn\n });\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const edits = await worker.getFormattingEditsForRange(\n resource.toString(),\n startOffset,\n endOffset,\n FormatHelper._convertOptions(options)\n );\n if (!edits || model.isDisposed()) {\n return;\n }\n return edits.map((edit) => this._convertTextChanges(model, edit));\n }\n}\nclass FormatOnTypeAdapter extends FormatHelper {\n get autoFormatTriggerCharacters() {\n return [\";\", \"}\", \"\\n\"];\n }\n async provideOnTypeFormattingEdits(model, position, ch, options, token) {\n const resource = model.uri;\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const edits = await worker.getFormattingEditsAfterKeystroke(\n resource.toString(),\n offset,\n ch,\n FormatHelper._convertOptions(options)\n );\n if (!edits || model.isDisposed()) {\n return;\n }\n return edits.map((edit) => this._convertTextChanges(model, edit));\n }\n}\nclass CodeActionAdaptor extends FormatHelper {\n async provideCodeActions(model, range, context, token) {\n const resource = model.uri;\n const start = model.getOffsetAt({\n lineNumber: range.startLineNumber,\n column: range.startColumn\n });\n const end = model.getOffsetAt({\n lineNumber: range.endLineNumber,\n column: range.endColumn\n });\n const formatOptions = FormatHelper._convertOptions(model.getOptions());\n const errorCodes = context.markers.filter((m) => m.code).map((m) => m.code).map(Number);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const codeFixes = await worker.getCodeFixesAtPosition(\n resource.toString(),\n start,\n end,\n errorCodes,\n formatOptions\n );\n if (!codeFixes || model.isDisposed()) {\n return { actions: [], dispose: () => {\n } };\n }\n const actions = codeFixes.filter((fix) => {\n return fix.changes.filter((change) => change.isNewFile).length === 0;\n }).map((fix) => {\n return this._tsCodeFixActionToMonacoCodeAction(model, context, fix);\n });\n return {\n actions,\n dispose: () => {\n }\n };\n }\n _tsCodeFixActionToMonacoCodeAction(model, context, codeFix) {\n const edits = [];\n for (const change of codeFix.changes) {\n for (const textChange of change.textChanges) {\n edits.push({\n resource: model.uri,\n versionId: void 0,\n textEdit: {\n range: this._textSpanToRange(model, textChange.span),\n text: textChange.newText\n }\n });\n }\n }\n const action = {\n title: codeFix.description,\n edit: { edits },\n diagnostics: context.markers,\n kind: \"quickfix\"\n };\n return action;\n }\n}\nclass RenameAdapter extends Adapter {\n constructor(_libFiles, worker) {\n super(worker);\n this._libFiles = _libFiles;\n }\n async provideRenameEdits(model, position, newName, token) {\n const resource = model.uri;\n const fileName = resource.toString();\n const offset = model.getOffsetAt(position);\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return;\n }\n const renameInfo = await worker.getRenameInfo(fileName, offset, {\n allowRenameOfImportPath: false\n });\n if (renameInfo.canRename === false) {\n return {\n edits: [],\n rejectReason: renameInfo.localizedErrorMessage\n };\n }\n if (renameInfo.fileToRename !== void 0) {\n throw new Error(\"Renaming files is not supported.\");\n }\n const renameLocations = await worker.findRenameLocations(\n fileName,\n offset,\n /*strings*/\n false,\n /*comments*/\n false,\n /*prefixAndSuffix*/\n false\n );\n if (!renameLocations || model.isDisposed()) {\n return;\n }\n const edits = [];\n for (const renameLocation of renameLocations) {\n const model2 = this._libFiles.getOrCreateModel(renameLocation.fileName);\n if (model2) {\n edits.push({\n resource: model2.uri,\n versionId: void 0,\n textEdit: {\n range: this._textSpanToRange(model2, renameLocation.textSpan),\n text: newName\n }\n });\n } else {\n throw new Error(`Unknown file ${renameLocation.fileName}.`);\n }\n }\n return { edits };\n }\n}\nclass InlayHintsAdapter extends Adapter {\n async provideInlayHints(model, range, token) {\n const resource = model.uri;\n const fileName = resource.toString();\n const start = model.getOffsetAt({\n lineNumber: range.startLineNumber,\n column: range.startColumn\n });\n const end = model.getOffsetAt({\n lineNumber: range.endLineNumber,\n column: range.endColumn\n });\n const worker = await this._worker(resource);\n if (model.isDisposed()) {\n return null;\n }\n const tsHints = await worker.provideInlayHints(fileName, start, end);\n const hints = tsHints.map((hint) => {\n return {\n ...hint,\n label: hint.text,\n position: model.getPositionAt(hint.position),\n kind: this._convertHintKind(hint.kind)\n };\n });\n return { hints, dispose: () => {\n } };\n }\n _convertHintKind(kind) {\n switch (kind) {\n case \"Parameter\":\n return languages.InlayHintKind.Parameter;\n case \"Type\":\n return languages.InlayHintKind.Type;\n default:\n return languages.InlayHintKind.Type;\n }\n }\n}\n\nexport { Adapter, CodeActionAdaptor, DefinitionAdapter, DiagnosticsAdapter, DocumentHighlightAdapter, FormatAdapter, FormatHelper, FormatOnTypeAdapter, InlayHintsAdapter, Kind, LibFiles, OutlineAdapter, QuickInfoAdapter, ReferenceAdapter, RenameAdapter, SignatureHelpAdapter, SuggestAdapter, flattenDiagnosticMessageText };\n",
8
- "import { WorkerManager } from './workerManager.js';\nimport { SuggestAdapter, SignatureHelpAdapter, QuickInfoAdapter, DocumentHighlightAdapter, DefinitionAdapter, LibFiles, ReferenceAdapter, OutlineAdapter, RenameAdapter, FormatAdapter, FormatOnTypeAdapter, CodeActionAdaptor, InlayHintsAdapter, DiagnosticsAdapter } from './languageFeatures.js';\nexport { Adapter, FormatHelper, Kind, flattenDiagnosticMessageText } from './languageFeatures.js';\nimport { languages } from '../../../editor/editor.api.js';\n\nlet javaScriptWorker;\nlet typeScriptWorker;\nfunction setupTypeScript(defaults) {\n typeScriptWorker = setupMode(defaults, \"typescript\");\n}\nfunction setupJavaScript(defaults) {\n javaScriptWorker = setupMode(defaults, \"javascript\");\n}\nfunction getJavaScriptWorker() {\n return new Promise((resolve, reject) => {\n if (!javaScriptWorker) {\n return reject(\"JavaScript not registered!\");\n }\n resolve(javaScriptWorker);\n });\n}\nfunction getTypeScriptWorker() {\n return new Promise((resolve, reject) => {\n if (!typeScriptWorker) {\n return reject(\"TypeScript not registered!\");\n }\n resolve(typeScriptWorker);\n });\n}\nfunction setupMode(defaults, modeId) {\n const providers = [];\n const client = new WorkerManager(modeId, defaults);\n const worker = (...uris) => {\n return client.getLanguageServiceWorker(...uris);\n };\n const libFiles = new LibFiles(worker);\n function registerProviders() {\n const { modeConfiguration } = defaults;\n disposeAll(providers);\n if (modeConfiguration.completionItems) {\n providers.push(\n languages.registerCompletionItemProvider(\n modeId,\n new SuggestAdapter(worker)\n )\n );\n }\n if (modeConfiguration.signatureHelp) {\n providers.push(\n languages.registerSignatureHelpProvider(\n modeId,\n new SignatureHelpAdapter(worker)\n )\n );\n }\n if (modeConfiguration.hovers) {\n providers.push(\n languages.registerHoverProvider(modeId, new QuickInfoAdapter(worker))\n );\n }\n if (modeConfiguration.documentHighlights) {\n providers.push(\n languages.registerDocumentHighlightProvider(\n modeId,\n new DocumentHighlightAdapter(worker)\n )\n );\n }\n if (modeConfiguration.definitions) {\n providers.push(\n languages.registerDefinitionProvider(\n modeId,\n new DefinitionAdapter(libFiles, worker)\n )\n );\n }\n if (modeConfiguration.references) {\n providers.push(\n languages.registerReferenceProvider(\n modeId,\n new ReferenceAdapter(libFiles, worker)\n )\n );\n }\n if (modeConfiguration.documentSymbols) {\n providers.push(\n languages.registerDocumentSymbolProvider(\n modeId,\n new OutlineAdapter(worker)\n )\n );\n }\n if (modeConfiguration.rename) {\n providers.push(\n languages.registerRenameProvider(\n modeId,\n new RenameAdapter(libFiles, worker)\n )\n );\n }\n if (modeConfiguration.documentRangeFormattingEdits) {\n providers.push(\n languages.registerDocumentRangeFormattingEditProvider(\n modeId,\n new FormatAdapter(worker)\n )\n );\n }\n if (modeConfiguration.onTypeFormattingEdits) {\n providers.push(\n languages.registerOnTypeFormattingEditProvider(\n modeId,\n new FormatOnTypeAdapter(worker)\n )\n );\n }\n if (modeConfiguration.codeActions) {\n providers.push(\n languages.registerCodeActionProvider(modeId, new CodeActionAdaptor(worker))\n );\n }\n if (modeConfiguration.inlayHints) {\n providers.push(\n languages.registerInlayHintsProvider(modeId, new InlayHintsAdapter(worker))\n );\n }\n if (modeConfiguration.diagnostics) {\n providers.push(new DiagnosticsAdapter(libFiles, defaults, modeId, worker));\n }\n }\n registerProviders();\n return worker;\n}\nfunction disposeAll(disposables) {\n while (disposables.length) {\n disposables.pop().dispose();\n }\n}\n\nexport { CodeActionAdaptor, DefinitionAdapter, DiagnosticsAdapter, DocumentHighlightAdapter, FormatAdapter, FormatOnTypeAdapter, InlayHintsAdapter, LibFiles, OutlineAdapter, QuickInfoAdapter, ReferenceAdapter, RenameAdapter, SignatureHelpAdapter, SuggestAdapter, WorkerManager, getJavaScriptWorker, getTypeScriptWorker, setupJavaScript, setupTypeScript };\n"
9
- ],
10
- "mappings": "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",
11
- "debugId": "A4D4D708202E45DB64756E2164756E21",
12
- "names": []
13
- }
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../node_modules/y-protocols/awareness.js", "../../../node_modules/y-protocols/sync.js", "../../collab/src/ws-client.ts"],
4
- "sourcesContent": [
5
- "/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable<string>}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map<number, Object<string, any>>}\n */\n this.states = new Map()\n /**\n * @type {Map<number, MetaClientState>}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array<number>}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object<string,any>|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object<string,any>|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map<number,Object<string,any>>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array<number>} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array<number>} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n",
6
- "/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map<number, number>} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server should only reply to requests, and not initiate them.\n * Therefore it is necessary that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n * @param {(error:Error)=>any} [errorHandler]\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin, errorHandler) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n if (errorHandler != null) errorHandler(/** @type {Error} */ (error))\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n * @param {(error:Error)=>any} [errorHandler]\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Does not need to be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n * @param {(error:Error)=>any} [errorHandler] Optional error handler that catches errors when reading Yjs messages.\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin, errorHandler) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin, errorHandler)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin, errorHandler)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n",
7
- "/**\n * The browser half of the wire envelope: one WebSocket per project, multiplexing every open\n * document. `createWsCollabConnection` owns the socket (exponential-backoff reconnect, re-open of\n * live docs on reconnect), the shared project-level Awareness, and per-doc sync state;\n * `openDoc(path)` hands out {@link CollabHandle}s for `StudioPlatform.collab`.\n */\n\nimport * as Y from \"yjs\";\nimport * as decoding from \"lib0/decoding\";\nimport * as encoding from \"lib0/encoding\";\nimport {\n applyAwarenessUpdate,\n Awareness,\n encodeAwarenessUpdate,\n removeAwarenessStates,\n} from \"y-protocols/awareness\";\nimport * as syncProtocol from \"y-protocols/sync\";\nimport { decodeFrame, encodeFrame } from \"./envelope.ts\";\nimport type { CollabFrame, ControlMessage } from \"./envelope.ts\";\nimport type { CollabHandle, CollabIdentity, CollabStatus } from \"./provider.ts\";\n\n/** The subset of the WebSocket API the connection uses (injectable for tests). */\nexport interface WsLike {\n binaryType: string;\n readyState: number;\n send: (data: Uint8Array) => void;\n close: () => void;\n onopen: (() => void) | null;\n onclose: (() => void) | null;\n onerror: (() => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n}\n\nexport interface WsCollabConnectionOptions {\n /** The ws(s):// endpoint for this project's collab socket. */\n url: string;\n /**\n * Subprotocols to offer (`Sec-WebSocket-Protocol`), normally `negotiateCollab`'s `offer`.\n *\n * Left empty or undefined deliberately when the server advertised none: RFC 6455 §4.1 makes a\n * client that offers a subprotocol and receives no echo fail the connection, so an unconditional\n * offer would break collab against every server built before negotiation shipped. The caller\n * decides, from the capability probe, and `negotiate.ts` holds the reasoning.\n */\n protocols?: string[];\n /** WebSocket constructor override (tests, non-browser runtimes). */\n webSocketImpl?: new (url: string, protocols?: string[]) => WsLike;\n /**\n * Called when the server refuses a doc with content-not-loaded: hydrate the file over HTTP (which\n * caches it server-side) so the retry can seed. One retry per open.\n */\n hydratePath?: (path: string) => Promise<void>;\n /** Give up on an openDoc after this long (falls back to solo editing). */\n openTimeoutMs?: number;\n /** Initial reconnect backoff (doubles to 30s). */\n reconnectDelayMs?: number;\n}\n\nexport interface WsCollabConnection {\n openDoc: (path: string) => Promise<CollabHandle | null>;\n status: () => CollabStatus;\n destroy: () => void;\n}\n\nconst WS_OPEN = 1;\n\ninterface DocEntry {\n doc: Y.Doc;\n epoch: number;\n opened: boolean;\n synced: boolean;\n hydrated: boolean;\n resolveOpen: ((ok: boolean) => void) | null;\n resolveSynced: () => void;\n whenSynced: Promise<void>;\n resetCbs: Set<() => void>;\n pendingFlush: Set<() => void>;\n handleDestroyed: boolean;\n /** Latest room-level dirty state from the server (survives reconnect on the same entry). */\n dirty: boolean;\n dirtyCbs: Set<(dirty: boolean) => void>;\n}\n\nexport function createWsCollabConnection(options: WsCollabConnectionOptions): WsCollabConnection {\n const WebSocketCtor =\n options.webSocketImpl ??\n (globalThis.WebSocket as unknown as new (url: string, protocols?: string[]) => WsLike);\n const openTimeoutMs = options.openTimeoutMs ?? 10_000;\n const docs = new Map<string, DocEntry>();\n const statusCbs = new Set<(status: CollabStatus) => void>();\n const awarenessDoc = new Y.Doc();\n const awareness = new Awareness(awarenessDoc);\n /* Clear the constructor's implicit {} state: it sits at clock 0, which applyAwarenessUpdate on\n the receiving side can never apply (currClock 0 < clock 0 is false) — publishing it would\n poison the server's controlled-id tracking. Real state arrives via setLocalState (clock ≥ 2). */\n awareness.setLocalState(null);\n\n let socket: WsLike | null = null;\n let identity: CollabIdentity | null = null;\n let status: CollabStatus = \"connecting\";\n let destroyed = false;\n let retryMs = options.reconnectDelayMs ?? 1000;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n\n const setStatus = (next: CollabStatus) => {\n if (status === next) {\n return;\n }\n status = next;\n for (const cb of statusCbs) {\n cb(next);\n }\n };\n\n const sendFrame = (frame: CollabFrame) => {\n if (socket && socket.readyState === WS_OPEN) {\n try {\n socket.send(encodeFrame(frame));\n } catch {\n // The close handler owns recovery.\n }\n }\n };\n\n const sendOpen = (path: string) => {\n sendFrame({ message: { path, type: \"open\" }, type: \"control\" });\n };\n\n // Local awareness changes always go to the wire (queued sends drop; awareness self-heals on\n // Reconnect via the full-state re-publish below).\n awareness.on(\n \"update\",\n (changes: { added: number[]; updated: number[]; removed: number[] }, origin: unknown) => {\n if (origin === \"remote\") {\n return;\n }\n const changed = [...changes.added, ...changes.updated, ...changes.removed];\n sendFrame({ body: encodeAwarenessUpdate(awareness, changed), type: \"awareness\" });\n },\n );\n\n const handleControl = (message: ControlMessage) => {\n switch (message.type) {\n case \"hello\": {\n identity = {\n color: message.color,\n login: message.login,\n permission: message.permission,\n ...(message.name === undefined ? {} : { name: message.name }),\n ...(message.avatarUrl === undefined ? {} : { avatarUrl: message.avatarUrl }),\n };\n return;\n }\n case \"opened\": {\n const entry = docs.get(message.path);\n if (!entry) {\n return;\n }\n if (entry.opened && entry.epoch !== message.epoch) {\n // The doc's history moved while we were away: this handle is dead.\n fireReset(message.path, entry);\n return;\n }\n entry.epoch = message.epoch;\n entry.opened = true;\n entry.resolveOpen?.(true);\n entry.resolveOpen = null;\n // Client-initiated step1 (mirrors y-websocket): fetch the server's state.\n const body = encoding.createEncoder();\n syncProtocol.writeSyncStep1(body, entry.doc);\n sendFrame({\n body: encoding.toUint8Array(body),\n epoch: entry.epoch,\n path: message.path,\n type: \"doc-sync\",\n });\n return;\n }\n case \"doc-reset\": {\n const entry = docs.get(message.path);\n if (entry) {\n fireReset(message.path, entry);\n }\n return;\n }\n case \"flush-ack\": {\n const entry = docs.get(message.path);\n if (entry) {\n for (const resolve of entry.pendingFlush) {\n resolve();\n }\n entry.pendingFlush.clear();\n }\n return;\n }\n case \"doc-dirty\": {\n const entry = docs.get(message.path);\n if (entry) {\n entry.dirty = message.dirty;\n for (const cb of entry.dirtyCbs) {\n cb(message.dirty);\n }\n }\n return;\n }\n case \"error\": {\n if (!message.path) {\n return;\n }\n const entry = docs.get(message.path);\n if (!entry) {\n return;\n }\n if (message.code === \"content-not-loaded\" && options.hydratePath && !entry.hydrated) {\n entry.hydrated = true;\n void options.hydratePath(message.path).then(\n () => sendOpen(message.path!),\n () => {\n entry.resolveOpen?.(false);\n entry.resolveOpen = null;\n },\n );\n return;\n }\n if (!entry.opened) {\n // Fatal refusal (binary-file, too-large, unresolved hydration): fall back to solo.\n entry.resolveOpen?.(false);\n entry.resolveOpen = null;\n }\n break;\n }\n default: {\n break;\n }\n }\n };\n\n const handleDocSync = (path: string, epoch: number, body: Uint8Array) => {\n const entry = docs.get(path);\n if (!entry || !entry.opened || entry.epoch !== epoch) {\n return;\n }\n const decoder = decoding.createDecoder(body);\n const reply = encoding.createEncoder();\n const messageType = syncProtocol.readSyncMessage(decoder, reply, entry.doc, \"remote\");\n if (encoding.length(reply) > 0) {\n sendFrame({ body: encoding.toUint8Array(reply), epoch, path, type: \"doc-sync\" });\n }\n if (messageType === syncProtocol.messageYjsSyncStep2 && !entry.synced) {\n entry.synced = true;\n entry.resolveSynced();\n }\n };\n\n const fireReset = (path: string, entry: DocEntry) => {\n docs.delete(path);\n entry.resolveOpen?.(false);\n entry.resolveOpen = null;\n for (const cb of entry.resetCbs) {\n cb();\n }\n entry.doc.destroy();\n };\n\n const connect = () => {\n if (destroyed) {\n return;\n }\n setStatus(\"connecting\");\n /* Re-offered on every reconnect: a socket that comes back after the server was restarted must\n negotiate again, and the offer is a property of this client's envelope, not of one socket. */\n const offer = options.protocols;\n const ws =\n offer === undefined || offer.length === 0\n ? new WebSocketCtor(options.url)\n : new WebSocketCtor(options.url, offer);\n socket = ws;\n ws.binaryType = \"arraybuffer\";\n /* Each connect() builds a FRESH socket; single-assignment handlers are the point (and keep\n the injectable WsLike test surface minimal). */\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onopen = () => {\n retryMs = options.reconnectDelayMs ?? 1000;\n setStatus(\"connected\");\n // Re-open every live doc and re-publish our awareness state.\n for (const path of docs.keys()) {\n sendOpen(path);\n }\n const local = awareness.getLocalState();\n if (local !== null) {\n sendFrame({\n body: encodeAwarenessUpdate(awareness, [awareness.clientID]),\n type: \"awareness\",\n });\n }\n };\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onmessage = (event) => {\n const raw = event.data;\n const data =\n raw instanceof ArrayBuffer ? new Uint8Array(raw) : raw instanceof Uint8Array ? raw : null;\n if (!data) {\n return;\n }\n let frame: CollabFrame;\n try {\n frame = decodeFrame(data);\n } catch {\n return;\n }\n switch (frame.type) {\n case \"control\": {\n handleControl(frame.message);\n return;\n }\n case \"doc-sync\": {\n handleDocSync(frame.path, frame.epoch, frame.body);\n return;\n }\n case \"awareness\": {\n applyAwarenessUpdate(awareness, frame.body, \"remote\");\n break;\n }\n default: {\n break;\n }\n }\n };\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onclose = () => {\n if (destroyed) {\n return;\n }\n setStatus(\"offline\");\n for (const entry of docs.values()) {\n entry.opened = false;\n }\n retryTimer = setTimeout(connect, retryMs);\n retryMs = Math.min(retryMs * 2, 30_000);\n };\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onerror = () => {\n // The close handler follows and owns retry.\n };\n };\n connect();\n\n return {\n destroy() {\n if (destroyed) {\n return;\n }\n destroyed = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n }\n removeAwarenessStates(awareness, [awareness.clientID], \"destroy\");\n awareness.destroy();\n awarenessDoc.destroy();\n for (const [path, entry] of docs) {\n entry.resolveOpen?.(false);\n entry.doc.destroy();\n docs.delete(path);\n }\n socket?.close();\n },\n\n async openDoc(path: string): Promise<CollabHandle | null> {\n if (destroyed) {\n return null;\n }\n const existing = docs.get(path);\n if (existing && !existing.handleDestroyed) {\n return null;\n }\n let resolveSynced: () => void = () => {};\n const whenSynced = new Promise<void>((resolve) => {\n resolveSynced = resolve;\n });\n const entry: DocEntry = {\n dirty: false,\n dirtyCbs: new Set(),\n doc: new Y.Doc(),\n epoch: 0,\n handleDestroyed: false,\n hydrated: false,\n opened: false,\n pendingFlush: new Set(),\n resetCbs: new Set(),\n resolveOpen: null,\n resolveSynced,\n synced: false,\n whenSynced,\n };\n docs.set(path, entry);\n\n // Local doc updates go to the wire (unless they came FROM the wire).\n entry.doc.on(\"update\", (update: Uint8Array, origin: unknown) => {\n if (origin === \"remote\" || !entry.opened) {\n return;\n }\n const body = encoding.createEncoder();\n syncProtocol.writeUpdate(body, update);\n sendFrame({\n body: encoding.toUint8Array(body),\n epoch: entry.epoch,\n path,\n type: \"doc-sync\",\n });\n });\n\n const openedOk = await new Promise<boolean>((resolve) => {\n entry.resolveOpen = resolve;\n const timer = setTimeout(() => {\n entry.resolveOpen = null;\n resolve(false);\n }, openTimeoutMs);\n entry.resolveOpen = (ok) => {\n clearTimeout(timer);\n resolve(ok);\n };\n sendOpen(path);\n });\n if (!openedOk) {\n if (docs.get(path) === entry) {\n docs.delete(path);\n }\n entry.doc.destroy();\n return null;\n }\n\n const handle: CollabHandle = {\n awareness,\n destroy: () => {\n if (entry.handleDestroyed) {\n return;\n }\n entry.handleDestroyed = true;\n if (docs.get(path) === entry) {\n docs.delete(path);\n sendFrame({ path, type: \"doc-close\" });\n }\n entry.doc.destroy();\n },\n doc: entry.doc,\n flush: () =>\n new Promise<void>((resolve) => {\n entry.pendingFlush.add(resolve);\n sendFrame({ message: { path, type: \"flush\" }, type: \"control\" });\n }),\n identity: () => identity,\n onDirty: (cb) => {\n entry.dirtyCbs.add(cb);\n // Deliver current state synchronously: the server's open-handshake `doc-dirty` may have\n // Already landed before the caller subscribes, and it must not miss the initial value.\n cb(entry.dirty);\n return () => entry.dirtyCbs.delete(cb);\n },\n onReset: (cb) => {\n entry.resetCbs.add(cb);\n return () => entry.resetCbs.delete(cb);\n },\n onStatus: (cb) => {\n statusCbs.add(cb);\n return () => statusCbs.delete(cb);\n },\n whenSynced: entry.whenSynced,\n };\n return handle;\n },\n\n status: () => status,\n };\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "64A956C2D9E018CD64756E2164756E21",
11
- "names": []
12
- }