@dimina-kit/devtools 0.3.2-dev.20260525152421 → 0.3.2-dev.20260601115343

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 (160) hide show
  1. package/README.md +20 -7
  2. package/dist/main/api.d.ts +1 -1
  3. package/dist/main/app/app.js +17 -0
  4. package/dist/main/index.bundle.js +1006 -584
  5. package/dist/main/ipc/project-fs.d.ts +57 -0
  6. package/dist/main/ipc/project-fs.js +448 -0
  7. package/dist/main/ipc/simulator-module.js +2 -0
  8. package/dist/main/ipc/views.d.ts +19 -0
  9. package/dist/main/ipc/views.js +27 -0
  10. package/dist/main/services/layout/index.d.ts +1 -1
  11. package/dist/main/services/layout/index.js +3 -3
  12. package/dist/main/services/simulator-temp-files/fs-channels.js +1 -1
  13. package/dist/main/services/simulator-temp-files/request-handler.js +1 -1
  14. package/dist/main/services/toolbar/toolbar-store.d.ts +3 -3
  15. package/dist/main/services/toolbar/toolbar-store.js +18 -1
  16. package/dist/main/services/update/update-manager.d.ts +10 -0
  17. package/dist/main/services/update/update-manager.js +16 -3
  18. package/dist/main/services/views/view-manager.d.ts +17 -4
  19. package/dist/main/services/views/view-manager.js +71 -14
  20. package/dist/main/services/workbench-context.d.ts +6 -1
  21. package/dist/main/services/workspace/workspace-service.d.ts +8 -0
  22. package/dist/main/services/workspace/workspace-service.js +22 -4
  23. package/dist/main/utils/ipc-registry.d.ts +10 -1
  24. package/dist/main/utils/ipc-registry.js +43 -0
  25. package/dist/preload/shared/expose.js +2 -2
  26. package/dist/preload/windows/main.cjs +4 -0
  27. package/dist/preload/windows/main.cjs.map +2 -2
  28. package/dist/preload/windows/simulator.js +2 -2
  29. package/dist/renderer/assets/abap-DiwvWnMr.js +2 -0
  30. package/dist/renderer/assets/apex-CmtZjKlf.js +2 -0
  31. package/dist/renderer/assets/azcli-DL2My_i-.js +2 -0
  32. package/dist/renderer/assets/bat-B-nC98wG.js +2 -0
  33. package/dist/renderer/assets/bicep-Ju5MwOgh.js +3 -0
  34. package/dist/renderer/assets/cameligo-8Eu1TyBr.js +2 -0
  35. package/dist/renderer/assets/chunk-DPI0Y_ll.js +1 -0
  36. package/dist/renderer/assets/clojure-u-RpMkH3.js +2 -0
  37. package/dist/renderer/assets/codicon-ngg6Pgfi.ttf +0 -0
  38. package/dist/renderer/assets/coffee-CdA7bbTe.js +2 -0
  39. package/dist/renderer/assets/constants-CLAQX6VZ.js +2 -0
  40. package/dist/renderer/assets/cpp-CzNFP8ks.js +2 -0
  41. package/dist/renderer/assets/csharp-j1LThmcE.js +2 -0
  42. package/dist/renderer/assets/csp-CLRC61y6.js +2 -0
  43. package/dist/renderer/assets/css-r6rC_7P2.js +4 -0
  44. package/dist/renderer/assets/css.worker-DyDu5ynT.js +90 -0
  45. package/dist/renderer/assets/cssMode-BCBgxrnA.js +2 -0
  46. package/dist/renderer/assets/cypher-CW08XVUh.js +2 -0
  47. package/dist/renderer/assets/dart-Cs9aL5T_.js +2 -0
  48. package/dist/renderer/assets/dockerfile-BWM0M184.js +2 -0
  49. package/dist/renderer/assets/ecl-MJJuer5P.js +2 -0
  50. package/dist/renderer/assets/editor-CWI9TnMM.css +1 -0
  51. package/dist/renderer/assets/editor.api2-BTaYmRq7.js +873 -0
  52. package/dist/renderer/assets/editor.worker-Dpt_xPrs.js +27 -0
  53. package/dist/renderer/assets/elixir-D2AIuXqn.js +2 -0
  54. package/dist/renderer/assets/flow9-B2H24giC.js +2 -0
  55. package/dist/renderer/assets/freemarker2-DGDGzimW.js +4 -0
  56. package/dist/renderer/assets/fsharp-CMk2OIJN.js +2 -0
  57. package/dist/renderer/assets/go-BrMkuJg0.js +2 -0
  58. package/dist/renderer/assets/graphql-PSR1UKGv.js +2 -0
  59. package/dist/renderer/assets/handlebars-bOHhw3EG.js +2 -0
  60. package/dist/renderer/assets/hcl-DAQrbDOW.js +2 -0
  61. package/dist/renderer/assets/html-BMyuX0_c.js +2 -0
  62. package/dist/renderer/assets/html.worker-IWNXhnIC.js +503 -0
  63. package/dist/renderer/assets/htmlMode-DR4kXJ7l.js +2 -0
  64. package/dist/renderer/assets/index-BDMxXUfn.js +50 -0
  65. package/dist/renderer/assets/ini-0TG5BxW0.js +2 -0
  66. package/dist/renderer/assets/input-CCYS8Ave.js +2 -0
  67. package/dist/renderer/assets/{ipc-transport-BzPzxPwf.js → ipc-transport-Bn4KXvhu.js} +5 -5
  68. package/dist/renderer/assets/ipc-transport-Cu7tubyg.css +1 -0
  69. package/dist/renderer/assets/java-rgorz17v.js +2 -0
  70. package/dist/renderer/assets/javascript-Bu-tl1P7.js +2 -0
  71. package/dist/renderer/assets/json.worker-c4h5s80L.js +59 -0
  72. package/dist/renderer/assets/jsonMode-MQV_ffLR.js +8 -0
  73. package/dist/renderer/assets/julia-C8VMdHm8.js +2 -0
  74. package/dist/renderer/assets/kotlin-AhhC4Qhm.js +2 -0
  75. package/dist/renderer/assets/less-Cgca25AP.js +3 -0
  76. package/dist/renderer/assets/lexon-D0GHdBaw.js +2 -0
  77. package/dist/renderer/assets/liquid-ClkfOvhB.js +2 -0
  78. package/dist/renderer/assets/lspLanguageFeatures-Bke_4Ie9.js +5 -0
  79. package/dist/renderer/assets/lua-DmRsNG-P.js +2 -0
  80. package/dist/renderer/assets/m3-BgL5dNKT.js +2 -0
  81. package/dist/renderer/assets/markdown-BuJfycGS.js +2 -0
  82. package/dist/renderer/assets/mdx-RZdUskPu.js +2 -0
  83. package/dist/renderer/assets/mips-C9m_93PR.js +2 -0
  84. package/dist/renderer/assets/monaco.contribution-B7rUMaEv.js +3 -0
  85. package/dist/renderer/assets/msdax-CpFHC9OI.js +2 -0
  86. package/dist/renderer/assets/mysql-qFvltsqN.js +2 -0
  87. package/dist/renderer/assets/objective-c-Bnmr858J.js +2 -0
  88. package/dist/renderer/assets/pascal-WP0_D5AO.js +2 -0
  89. package/dist/renderer/assets/pascaligo-Blom4Rij.js +2 -0
  90. package/dist/renderer/assets/perl-B-vk8g64.js +2 -0
  91. package/dist/renderer/assets/pgsql-Cgvz6v67.js +2 -0
  92. package/dist/renderer/assets/php-8a3Lrw9m.js +2 -0
  93. package/dist/renderer/assets/pla-DuFqEZ8V.js +2 -0
  94. package/dist/renderer/assets/popover-CH4rwpdt.js +2 -0
  95. package/dist/renderer/assets/postiats-DkLtSgkp.js +2 -0
  96. package/dist/renderer/assets/powerquery-BJ1aNepW.js +2 -0
  97. package/dist/renderer/assets/powershell-rE98k687.js +2 -0
  98. package/dist/renderer/assets/protobuf-CUheFacr.js +3 -0
  99. package/dist/renderer/assets/pug-LDcAMD8w.js +2 -0
  100. package/dist/renderer/assets/python-Cobrm_-8.js +2 -0
  101. package/dist/renderer/assets/qsharp-DUKSQoR1.js +2 -0
  102. package/dist/renderer/assets/r-D-QApv87.js +2 -0
  103. package/dist/renderer/assets/razor-BEUIQFNJ.js +2 -0
  104. package/dist/renderer/assets/redis-SXdDyWR9.js +2 -0
  105. package/dist/renderer/assets/redshift-Y6lsCryn.js +2 -0
  106. package/dist/renderer/assets/restructuredtext-edObr9a8.js +2 -0
  107. package/dist/renderer/assets/ruby-CNnUfF-8.js +2 -0
  108. package/dist/renderer/assets/rust-IHUZWzBr.js +2 -0
  109. package/dist/renderer/assets/sb-DrUvY44N.js +2 -0
  110. package/dist/renderer/assets/scala-B4hbXGLM.js +2 -0
  111. package/dist/renderer/assets/scheme-BGrd12j3.js +2 -0
  112. package/dist/renderer/assets/scss-x5G1ES4U.js +4 -0
  113. package/dist/renderer/assets/select-Ct4-sijm.js +2 -0
  114. package/dist/renderer/assets/settings-CMTB-t0x.js +2 -0
  115. package/dist/renderer/assets/{settings-api-BXCw9vOZ.js → settings-api-Csdngf9Z.js} +2 -2
  116. package/dist/renderer/assets/shell-DOehe2Y8.js +2 -0
  117. package/dist/renderer/assets/solidity-BeRvcwWV.js +2 -0
  118. package/dist/renderer/assets/sophia-DZbkUNjy.js +2 -0
  119. package/dist/renderer/assets/sparql-B7_oi5-h.js +2 -0
  120. package/dist/renderer/assets/sql-CTlsFWVE.js +2 -0
  121. package/dist/renderer/assets/st-DJVEJdPE.js +2 -0
  122. package/dist/renderer/assets/swift-CwhT3fYa.js +2 -0
  123. package/dist/renderer/assets/systemverilog-BQN63pkN.js +2 -0
  124. package/dist/renderer/assets/tcl-DqwfpskA.js +2 -0
  125. package/dist/renderer/assets/ts.worker-BwM5Ha3L.js +67720 -0
  126. package/dist/renderer/assets/tsMode-BHa7dl9v.js +12 -0
  127. package/dist/renderer/assets/twig-BiyenUgc.js +2 -0
  128. package/dist/renderer/assets/typescript-15aT0Yj8.js +2 -0
  129. package/dist/renderer/assets/typespec-CWOJribt.js +2 -0
  130. package/dist/renderer/assets/vb-Cq5F87m3.js +2 -0
  131. package/dist/renderer/assets/wgsl-BAvW2lVr.js +299 -0
  132. package/dist/renderer/assets/workbenchSettings-CODFCzOg.js +8 -0
  133. package/dist/renderer/assets/workers-CRBS0W-v.js +2 -0
  134. package/dist/renderer/assets/xml-bR2Zh-HV.js +2 -0
  135. package/dist/renderer/assets/yaml-Bdk54Qrb.js +2 -0
  136. package/dist/renderer/entries/main/index.html +29 -6
  137. package/dist/renderer/entries/popover/index.html +7 -6
  138. package/dist/renderer/entries/settings/index.html +6 -5
  139. package/dist/renderer/entries/workbench-settings/index.html +6 -5
  140. package/dist/shared/constants.d.ts +0 -4
  141. package/dist/shared/constants.js +0 -4
  142. package/dist/shared/ipc-channels.d.ts +24 -0
  143. package/dist/shared/ipc-channels.js +37 -0
  144. package/dist/shared/ipc-schemas.d.ts +6 -0
  145. package/dist/shared/ipc-schemas.js +15 -0
  146. package/dist/shared/types.d.ts +37 -0
  147. package/dist/shared/vpath.d.ts +42 -0
  148. package/dist/shared/vpath.js +105 -0
  149. package/dist/simulator/assets/simulator-B4e3c6_O.js +9 -0
  150. package/dist/simulator/simulator.html +1 -1
  151. package/package.json +3 -2
  152. package/dist/renderer/assets/constants-DI382mTP.js +0 -2
  153. package/dist/renderer/assets/index-4lkyF644.js +0 -46
  154. package/dist/renderer/assets/input-D4byFOLS.js +0 -2
  155. package/dist/renderer/assets/ipc-transport-DqbRdZNO.css +0 -1
  156. package/dist/renderer/assets/popover-cxKrg_os.js +0 -2
  157. package/dist/renderer/assets/select-BgSkkdHW.js +0 -2
  158. package/dist/renderer/assets/settings-oD2K1jdT.js +0 -2
  159. package/dist/renderer/assets/workbenchSettings-CTNBpTft.js +0 -8
  160. package/dist/simulator/assets/simulator-CVOFTpSj.js +0 -9
@@ -1,3 +1,20 @@
1
+ function toPublicAction(action) {
2
+ const projected = {
3
+ id: action.id,
4
+ label: action.label,
5
+ };
6
+ if (action.kind)
7
+ projected.kind = action.kind;
8
+ if (action.placement)
9
+ projected.placement = action.placement;
10
+ if (action.icon)
11
+ projected.icon = action.icon;
12
+ if (action.displayInitial)
13
+ projected.displayInitial = action.displayInitial;
14
+ if (action.avatarUrl)
15
+ projected.avatarUrl = action.avatarUrl;
16
+ return projected;
17
+ }
1
18
  export function createToolbarStore() {
2
19
  let actions = [];
3
20
  return {
@@ -13,7 +30,7 @@ export function createToolbarStore() {
13
30
  actions = next.slice();
14
31
  },
15
32
  list() {
16
- return actions.map(({ id, label }) => ({ id, label }));
33
+ return actions.map(toPublicAction);
17
34
  },
18
35
  getHandler(id) {
19
36
  return actions.find((a) => a.id === id)?.handler;
@@ -24,6 +24,16 @@ export declare class UpdateManager {
24
24
  private getCurrentVersion;
25
25
  private latestUpdate;
26
26
  private downloadedPath;
27
+ /**
28
+ * Whether this instance has already emitted `Available` once. The periodic
29
+ * check fires forever (interval default 1h), and downstream UI (qdmp shell
30
+ * renders a native toast / Notification) is not idempotent — every event
31
+ * stacks. We dedupe at the source: at most one Available per instance
32
+ * lifetime, regardless of how the upstream `info.version` shifts. The user
33
+ * already knows "an update exists"; tracking minor version bumps mid-
34
+ * session is not worth duplicating the toast.
35
+ */
36
+ private hasNotified;
27
37
  private timer;
28
38
  private initialTimer;
29
39
  private ipc;
@@ -7,6 +7,16 @@ export class UpdateManager {
7
7
  getCurrentVersion;
8
8
  latestUpdate = null;
9
9
  downloadedPath = null;
10
+ /**
11
+ * Whether this instance has already emitted `Available` once. The periodic
12
+ * check fires forever (interval default 1h), and downstream UI (qdmp shell
13
+ * renders a native toast / Notification) is not idempotent — every event
14
+ * stacks. We dedupe at the source: at most one Available per instance
15
+ * lifetime, regardless of how the upstream `info.version` shifts. The user
16
+ * already knows "an update exists"; tracking minor version bumps mid-
17
+ * session is not worth duplicating the toast.
18
+ */
19
+ hasNotified = false;
10
20
  timer = null;
11
21
  initialTimer = null;
12
22
  ipc;
@@ -85,9 +95,12 @@ export class UpdateManager {
85
95
  }
86
96
  async checkAndNotify() {
87
97
  const result = await this.check();
88
- if (result.hasUpdate && result.info) {
89
- this.mainWindow.webContents.send(UpdateChannel.Available, result.info);
90
- }
98
+ if (!result.hasUpdate || !result.info)
99
+ return;
100
+ if (this.hasNotified)
101
+ return;
102
+ this.hasNotified = true;
103
+ this.mainWindow.webContents.send(UpdateChannel.Available, result.info);
91
104
  }
92
105
  }
93
106
  //# sourceMappingURL=update-manager.js.map
@@ -20,13 +20,14 @@ export interface ViewManagerContext {
20
20
  * Unified lifecycle manager for Electron WebContentsView overlays.
21
21
  *
22
22
  * Owns creation / attachment / detachment / positioning / destruction of
23
- * every overlay view hung off the main window's contentView (simulator,
24
- * settings, popover). All `new WebContentsView`, `addChildView`,
23
+ * every overlay view hung off the main window's contentView (simulator
24
+ * DevTools, settings, popover). All `new WebContentsView`, `addChildView`,
25
25
  * `removeChildView`, `webContents.destroy()` and overlay `setBounds` calls
26
26
  * should live here — IPC handlers just call into the manager.
27
27
  *
28
- * The main window's own renderer (added in `windows/main-window/create.ts`)
29
- * is the main content root and is not an overlay, so it is not managed here.
28
+ * The code editor is NOT an overlay: it renders as an in-renderer
29
+ * `<MonacoEditor/>` React component inside the main window. The main
30
+ * window's own renderer is the content root and is not managed here.
30
31
  */
31
32
  export interface ViewManager {
32
33
  /**
@@ -78,6 +79,18 @@ export interface ViewManager {
78
79
  resize(simWidth: number): void;
79
80
  /** Show or hide the simulator overlay based on visibility flag. */
80
81
  setVisible(visible: boolean, simWidth: number): void;
82
+ /**
83
+ * Apply a renderer-measured rectangle to the simulator's Chromium
84
+ * DevTools overlay view. `{ width: 0, height: 0 }` is treated as "hide" —
85
+ * the view is removed from the contentView but its WebContents is kept
86
+ * alive so re-showing it doesn't re-pay the DevTools bootstrap.
87
+ */
88
+ setSimulatorDevtoolsBounds(bounds: {
89
+ x: number;
90
+ y: number;
91
+ width: number;
92
+ height: number;
93
+ }): void;
81
94
  }
82
95
  /**
83
96
  * Build a ViewManager bound to the given context. The returned object is the
@@ -23,6 +23,11 @@ export function createViewManager(ctx) {
23
23
  let popoverView = null;
24
24
  let lastSimWidth = 375;
25
25
  let simulatorWebContentsId = null;
26
+ // Renderer-driven overlay bounds for the simulator DevTools view. When
27
+ // non-null this takes precedence over the legacy layout computed from the
28
+ // window content size. A zero-area rectangle means "hide" — the overlay is
29
+ // removed from the contentView but its WebContents stays alive.
30
+ let simulatorBoundsOverride = null;
26
31
  // ── Internal helpers ────────────────────────────────────────────────────
27
32
  function destroyViewInternal(view) {
28
33
  if (!view)
@@ -43,9 +48,42 @@ export function createViewManager(ctx) {
43
48
  function applySimulatorBounds(simWidth) {
44
49
  if (!simulatorView || ctx.windows.mainWindow.isDestroyed())
45
50
  return;
51
+ if (simulatorBoundsOverride) {
52
+ simulatorView.setBounds(simulatorBoundsOverride);
53
+ return;
54
+ }
46
55
  const [w = 0, h = 0] = ctx.windows.mainWindow.getContentSize();
47
56
  simulatorView.setBounds(layout.computeSimulatorBounds(w, h, simWidth, headerHeight));
48
57
  }
58
+ // Renderer publishes width/height = 0 to mean "hide overlay" — the
59
+ // surrounding React panel is unmounted/collapsed. We keep the cached
60
+ // value (so future republishes win over legacy layout) but remove the
61
+ // child view from the contentView until a non-empty rect arrives.
62
+ function isHidden(b) {
63
+ return b.width <= 0 || b.height <= 0;
64
+ }
65
+ function setSimulatorDevtoolsBounds(bounds) {
66
+ simulatorBoundsOverride = bounds;
67
+ if (!simulatorView || simulatorView.webContents.isDestroyed())
68
+ return;
69
+ if (ctx.windows.mainWindow.isDestroyed())
70
+ return;
71
+ if (isHidden(bounds)) {
72
+ if (simulatorViewAdded) {
73
+ try {
74
+ ctx.windows.mainWindow.contentView.removeChildView(simulatorView);
75
+ }
76
+ catch { /* already removed */ }
77
+ simulatorViewAdded = false;
78
+ }
79
+ return;
80
+ }
81
+ if (!simulatorViewAdded) {
82
+ ctx.windows.mainWindow.contentView.addChildView(simulatorView);
83
+ simulatorViewAdded = true;
84
+ }
85
+ simulatorView.setBounds(bounds);
86
+ }
49
87
  function applySettingsBounds() {
50
88
  if (!settingsView || ctx.windows.mainWindow.isDestroyed())
51
89
  return;
@@ -82,9 +120,13 @@ export function createViewManager(ctx) {
82
120
  sim.setDevToolsWebContents(simulatorView.webContents);
83
121
  sim.openDevTools();
84
122
  // Default DevTools to Console panel (Chrome DevTools defaults to Elements).
85
- // The DevTools UI renders inside simulatorView.webContents; we click the
86
- // Console tab once its header is laid out, and persist the choice via
87
- // localStorage so subsequent reloads honor it.
123
+ // The DevTools UI lives inside closed shadow roots, so a light-DOM
124
+ // querySelector('[role="tab"]') cannot reach the tab bar to click it.
125
+ // Instead drive the front-end's own view manager: the bundled DevTools
126
+ // exposes `UI.ViewManager.instance().showView(id)` on `globalThis.UI`
127
+ // once the front-end has finished bootstrapping. We poll for it and
128
+ // request the `console` view, and also persist the choice via the
129
+ // `panel-selectedTab` localStorage key so subsequent reloads honor it.
88
130
  const devtoolsWc = simulatorView.webContents;
89
131
  devtoolsWc.once('dom-ready', () => {
90
132
  devtoolsWc.executeJavaScript(`
@@ -93,24 +135,35 @@ export function createViewManager(ctx) {
93
135
  let tries = 0
94
136
  const timer = setInterval(() => {
95
137
  tries++
96
- const tabs = document.querySelectorAll('[role="tab"], .tabbed-pane-header-tab')
97
- for (const tab of tabs) {
98
- const label = (tab.getAttribute('aria-label') || tab.textContent || '').trim().toLowerCase()
99
- if (label === 'console' || label.startsWith('console')) {
100
- tab.click()
138
+ try {
139
+ const UI = globalThis.UI
140
+ const vm = UI && UI.ViewManager && typeof UI.ViewManager.instance === 'function'
141
+ ? UI.ViewManager.instance()
142
+ : null
143
+ if (vm && typeof vm.showView === 'function') {
144
+ vm.showView('console')
101
145
  clearInterval(timer)
102
146
  return
103
147
  }
104
- }
105
- if (tries > 40) clearInterval(timer)
106
- }, 100)
148
+ } catch {}
149
+ if (tries > 80) clearInterval(timer)
150
+ }, 50)
107
151
  })()
108
152
  `).catch(() => { });
109
153
  });
110
154
  if (getDefaultTab(ctx) === 'simulator') {
111
- ctx.windows.mainWindow.contentView.addChildView(simulatorView);
112
- simulatorViewAdded = true;
113
- applySimulatorBounds(simWidth);
155
+ if (simulatorBoundsOverride) {
156
+ if (!isHidden(simulatorBoundsOverride)) {
157
+ ctx.windows.mainWindow.contentView.addChildView(simulatorView);
158
+ simulatorViewAdded = true;
159
+ simulatorView.setBounds(simulatorBoundsOverride);
160
+ }
161
+ }
162
+ else {
163
+ ctx.windows.mainWindow.contentView.addChildView(simulatorView);
164
+ simulatorViewAdded = true;
165
+ applySimulatorBounds(simWidth);
166
+ }
114
167
  }
115
168
  }
116
169
  function detachSimulator() {
@@ -123,6 +176,9 @@ export function createViewManager(ctx) {
123
176
  simulatorView = null;
124
177
  simulatorViewAdded = false;
125
178
  simulatorWebContentsId = null;
179
+ // Drop the renderer-published rect so a stale "hidden" override doesn't
180
+ // suppress the next view before its renderer republishes.
181
+ simulatorBoundsOverride = null;
126
182
  }
127
183
  function showSimulator(simWidth) {
128
184
  lastSimWidth = simWidth;
@@ -276,6 +332,7 @@ export function createViewManager(ctx) {
276
332
  },
277
333
  resize,
278
334
  setVisible,
335
+ setSimulatorDevtoolsBounds,
279
336
  };
280
337
  }
281
338
  //# sourceMappingURL=view-manager.js.map
@@ -10,7 +10,7 @@ import { type SimulatorApiRegistry } from './simulator/custom-apis.js';
10
10
  import { type ToolbarStore } from './toolbar/toolbar-store.js';
11
11
  import { sanitizeTemplates } from './projects/templates.js';
12
12
  import type { ProjectsProvider, ProjectTemplate } from './projects/types.js';
13
- import type { CustomCreateProjectDialogResult } from '../../shared/types.js';
13
+ import type { BeforeOpenProjectResult, CustomCreateProjectDialogResult } from '../../shared/types.js';
14
14
  /**
15
15
  * Shared mutable state for the workbench application.
16
16
  * Passed to each IPC module so they can read/write shared state without closures.
@@ -67,6 +67,11 @@ export interface WorkbenchContext {
67
67
  parentWindow: BrowserWindow;
68
68
  templates: ProjectTemplate[];
69
69
  }) => Promise<CustomCreateProjectDialogResult>;
70
+ /**
71
+ * Optional host gate for opening projects. Runs after basic directory
72
+ * validation and before the current project session is closed.
73
+ */
74
+ beforeOpenProject?: (projectPath: string) => BeforeOpenProjectResult | Promise<BeforeOpenProjectResult>;
70
75
  /**
71
76
  * Trust predicate consulted by `IpcRegistry` for every incoming IPC.
72
77
  * Resolves the currently-trusted senders (main renderer + overlays)
@@ -38,6 +38,14 @@ export interface WorkspaceService {
38
38
  appInfo: unknown;
39
39
  } | null;
40
40
  getProjectPath(): string;
41
+ /**
42
+ * The project path most recently torn down by `closeProject`, or '' if none
43
+ * since the last `openProject`. Lets the project-fs sandbox accept an
44
+ * in-flight write (debounced/teardown flush) that targets the just-closed
45
+ * project even though `getProjectPath()` has already been cleared. Reset to
46
+ * '' on the next `openProject` so it never accumulates stale roots.
47
+ */
48
+ getLastClosedProjectPath(): string;
41
49
  hasActiveSession(): boolean;
42
50
  captureThumbnail(projectPath: string): Promise<string | null>;
43
51
  getThumbnail(projectPath: string): Promise<string | null>;
@@ -6,6 +6,10 @@ import { loadWorkbenchSettings } from '../settings/index.js';
6
6
  export function createWorkspaceService(ctx) {
7
7
  let currentSession = null;
8
8
  let currentProjectPath = '';
9
+ // The last project path cleared by `closeProject`; consumed by project-fs to
10
+ // accept an in-flight write that targets the just-closed project. Reset at
11
+ // the start of every `openProject` so it never accumulates a stale root.
12
+ let lastClosedProjectPath = '';
9
13
  function sendStatus(status, message, hotReload) {
10
14
  ctx.notify.projectStatus(hotReload ? { status, message, hotReload: true } : { status, message });
11
15
  }
@@ -58,9 +62,6 @@ export function createWorkspaceService(ctx) {
58
62
  ? provider.validateProjectDir(dirPath)
59
63
  : null,
60
64
  async openProject(projectPath) {
61
- clearSimulatorServicewechatReferer();
62
- await disposeSession();
63
- currentProjectPath = '';
64
65
  // Reject obviously broken projects up front so we never spin up a
65
66
  // compile/server that the simulator will then fetch asset-by-asset.
66
67
  // Without this guard, deleted recent-list entries and typo'd CLI paths
@@ -75,6 +76,18 @@ export function createWorkspaceService(ctx) {
75
76
  sendStatus('error', dirError);
76
77
  return { success: false, error: dirError };
77
78
  }
79
+ const gate = ctx.beforeOpenProject ? await ctx.beforeOpenProject(projectPath) : undefined;
80
+ if (gate && !gate.allow) {
81
+ const message = gate.userMessage ?? gate.reason;
82
+ sendStatus('error', message);
83
+ return { success: false, error: message };
84
+ }
85
+ clearSimulatorServicewechatReferer();
86
+ await disposeSession();
87
+ currentProjectPath = '';
88
+ // A fresh open starts a clean sandbox window — drop any previously
89
+ // recorded last-closed root so it can't accept writes after this point.
90
+ lastClosedProjectPath = '';
78
91
  sendStatus('compiling', '正在编译...');
79
92
  const { compile } = loadWorkbenchSettings();
80
93
  let session;
@@ -98,7 +111,7 @@ export function createWorkspaceService(ctx) {
98
111
  if (provider.updateLastOpened)
99
112
  provider.updateLastOpened(projectPath);
100
113
  });
101
- bestEffort('sendStatus', () => sendStatus('ready', '编译完成'));
114
+ bestEffort('sendStatus', () => sendStatus('ready', gate?.statusMessage ?? '编译完成'));
102
115
  bestEffort('applyReferer', () => applyRefererFromSession(session));
103
116
  return {
104
117
  success: true,
@@ -109,11 +122,16 @@ export function createWorkspaceService(ctx) {
109
122
  async closeProject() {
110
123
  clearSimulatorServicewechatReferer();
111
124
  await disposeSession();
125
+ // Record the root being torn down BEFORE clearing it, so a teardown/
126
+ // debounced write already in flight can still be accepted against it.
127
+ if (currentProjectPath !== '')
128
+ lastClosedProjectPath = currentProjectPath;
112
129
  currentProjectPath = '';
113
130
  ctx.views.disposeAll();
114
131
  },
115
132
  getSession: () => currentSession,
116
133
  getProjectPath: () => currentProjectPath,
134
+ getLastClosedProjectPath: () => lastClosedProjectPath,
117
135
  hasActiveSession: () => currentSession !== null,
118
136
  async captureThumbnail(projectPath) {
119
137
  const wc = ctx.views.getSimulatorWebContents();
@@ -1,4 +1,4 @@
1
- import type { WebContents } from 'electron';
1
+ import type { IpcMainEvent, WebContents } from 'electron';
2
2
  import { ipcMain } from 'electron';
3
3
  import { type Disposable } from './disposable.js';
4
4
  type HandleFn = Parameters<typeof ipcMain.handle>[1];
@@ -32,6 +32,15 @@ export declare class IpcRegistry implements Disposable {
32
32
  private registry;
33
33
  constructor(policy?: SenderPolicy | undefined);
34
34
  handle(channel: string, fn: HandleFn): this;
35
+ /**
36
+ * Register a SYNCHRONOUS `ipcRenderer.sendSync` handler. Unlike {@link on}
37
+ * (fire-and-forget), the renderer is blocked until we set `event.returnValue`,
38
+ * so `fn` MUST be synchronous and return the value to hand back. The sender
39
+ * policy gates it like {@link handle}; a rejected sender or a thrown error
40
+ * yields a structured `{ ok: false, code, message }` returnValue instead of
41
+ * the silent drop `on` uses, so the blocked renderer always gets an answer.
42
+ */
43
+ handleSync(channel: string, fn: (event: IpcMainEvent, ...args: unknown[]) => unknown): this;
35
44
  on(channel: string, fn: ListenerFn): this;
36
45
  dispose(): Promise<void>;
37
46
  }
@@ -73,6 +73,49 @@ export class IpcRegistry {
73
73
  this.registry.add(() => ipcMain.removeHandler(channel));
74
74
  return this;
75
75
  }
76
+ /**
77
+ * Register a SYNCHRONOUS `ipcRenderer.sendSync` handler. Unlike {@link on}
78
+ * (fire-and-forget), the renderer is blocked until we set `event.returnValue`,
79
+ * so `fn` MUST be synchronous and return the value to hand back. The sender
80
+ * policy gates it like {@link handle}; a rejected sender or a thrown error
81
+ * yields a structured `{ ok: false, code, message }` returnValue instead of
82
+ * the silent drop `on` uses, so the blocked renderer always gets an answer.
83
+ */
84
+ handleSync(channel, fn) {
85
+ const policy = this.policy;
86
+ const listener = (event, ...args) => {
87
+ // Everything — including the policy check — runs inside the try so EVERY
88
+ // path sets `event.returnValue`. sendSync blocks the renderer until it is
89
+ // set, so an unset value (e.g. a throwing policy fn) would hang the
90
+ // renderer forever; the catch guarantees a sentinel instead.
91
+ try {
92
+ if (policy && !policy(event.sender)) {
93
+ console.warn(`[ipc] sender rejected for channel '${channel}' (${summarizeSender(event.sender)})`);
94
+ event.returnValue = {
95
+ ok: false,
96
+ code: 'EREJECTED',
97
+ message: `IPC sender rejected for channel ${channel}`,
98
+ };
99
+ return;
100
+ }
101
+ event.returnValue = fn(event, ...args);
102
+ }
103
+ catch (err) {
104
+ reportListenerError(channel, err);
105
+ const code = err?.code;
106
+ event.returnValue = {
107
+ ok: false,
108
+ code: typeof code === 'string' ? code : 'EUNKNOWN',
109
+ message: err instanceof Error ? err.message : String(err),
110
+ };
111
+ }
112
+ };
113
+ ipcMain.on(channel, listener);
114
+ this.registry.add(() => {
115
+ ipcMain.removeListener(channel, listener);
116
+ });
117
+ return this;
118
+ }
76
119
  on(channel, fn) {
77
120
  const policy = this.policy;
78
121
  const raw = fn;
@@ -17,8 +17,8 @@ export function exposeOnMainWorld(key, value) {
17
17
  try {
18
18
  contextBridge.exposeInMainWorld(key, value);
19
19
  }
20
- catch {
21
- ;
20
+ catch (err) {
21
+ console.warn('[devtools/expose] contextBridge.exposeInMainWorld failed, falling back to direct window assignment:', err);
22
22
  window[key] = value;
23
23
  fellBack = true;
24
24
  }
@@ -20,6 +20,10 @@ var import_electron = require("electron");
20
20
  var api = {
21
21
  ipc: {
22
22
  invoke: (channel, ...args) => import_electron.ipcRenderer.invoke(channel, ...args),
23
+ // Synchronous round-trip. Blocks the renderer until the main process sets
24
+ // `event.returnValue` — used only for the editor's beforeunload flush, where
25
+ // the write MUST land before the page is torn down (an async invoke can't).
26
+ sendSync: (channel, ...args) => import_electron.ipcRenderer.sendSync(channel, ...args),
23
27
  send: (channel, ...args) => {
24
28
  import_electron.ipcRenderer.send(channel, ...args);
25
29
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/preload/windows/main.ts"],
4
- "sourcesContent": ["/**\n * Preload bridge for the main window, settings window, settings overlay\n * view, and popover overlay view. Exposes a minimal, typed `window.devtools`\n * surface so the renderer never has to call `window.require('electron')`.\n *\n * This file is bundled by esbuild to CJS at `dist/preload/windows/main.js`\n * (see package.json `build:preload`). It must remain a leaf module \u2014 do\n * NOT import other preload files via `.js` ESM specifiers; everything goes\n * through the Electron `contextBridge` / `ipcRenderer` runtime.\n *\n * Channel governance lives in the main process: `sender-policy.ts` plus the\n * per-handler zod schemas decide what's accepted. The preload layer is a\n * thin pass-through \u2014 a renderer inventing channel names will just hit a\n * main-side rejection, so duplicating an allowlist here added no real\n * defense for a devtool that loads user-trusted mini-programs.\n */\nimport { contextBridge, ipcRenderer, type IpcRendererEvent } from 'electron'\n\nconst api = {\n ipc: {\n invoke: (channel: string, ...args: unknown[]) => ipcRenderer.invoke(channel, ...args),\n send: (channel: string, ...args: unknown[]) => {\n ipcRenderer.send(channel, ...args)\n },\n on: (\n channel: string,\n listener: (event: IpcRendererEvent, ...args: unknown[]) => void,\n ) => {\n ipcRenderer.on(channel, listener)\n return () => ipcRenderer.removeListener(channel, listener)\n },\n once: (\n channel: string,\n listener: (event: IpcRendererEvent, ...args: unknown[]) => void,\n ) => {\n ipcRenderer.once(channel, listener)\n },\n removeListener: (\n channel: string,\n listener: (...args: unknown[]) => void,\n ) => {\n ipcRenderer.removeListener(channel, listener)\n },\n },\n}\n\n// All host windows that load this preload run with `contextIsolation: true`\n// (main / settings / view-manager), so `contextBridge` is the path that\n// reaches the renderer's `window`. The simulator <webview> uses a separate\n// preload (`simulator.ts`).\ncontextBridge.exposeInMainWorld('devtools', api)\n\n// Test-only hatch: e2e helpers emit synthetic IPC events on the renderer's\n// ipcRenderer instance to trigger handlers registered via `devtools.ipc.on`\n// without round-tripping through the main process. Gated on NODE_ENV so\n// production builds never expose it.\nif (process.env.NODE_ENV === 'test') {\n contextBridge.exposeInMainWorld('__testIpc', {\n emit: (channel: string, ...args: unknown[]) => {\n ;(ipcRenderer as unknown as { emit: (c: string, ...a: unknown[]) => void }).emit(channel, ...args)\n },\n })\n}\n\nexport type DevtoolsApi = typeof api\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAgBA,sBAAkE;AAElE,IAAM,MAAM;AAAA,EACV,KAAK;AAAA,IACH,QAAQ,CAAC,YAAoB,SAAoB,4BAAY,OAAO,SAAS,GAAG,IAAI;AAAA,IACpF,MAAM,CAAC,YAAoB,SAAoB;AAC7C,kCAAY,KAAK,SAAS,GAAG,IAAI;AAAA,IACnC;AAAA,IACA,IAAI,CACF,SACA,aACG;AACH,kCAAY,GAAG,SAAS,QAAQ;AAChC,aAAO,MAAM,4BAAY,eAAe,SAAS,QAAQ;AAAA,IAC3D;AAAA,IACA,MAAM,CACJ,SACA,aACG;AACH,kCAAY,KAAK,SAAS,QAAQ;AAAA,IACpC;AAAA,IACA,gBAAgB,CACd,SACA,aACG;AACH,kCAAY,eAAe,SAAS,QAAQ;AAAA,IAC9C;AAAA,EACF;AACF;AAMA,8BAAc,kBAAkB,YAAY,GAAG;AAM/C,IAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,gCAAc,kBAAkB,aAAa;AAAA,IAC3C,MAAM,CAAC,YAAoB,SAAoB;AAC7C;AAAC,MAAC,4BAA0E,KAAK,SAAS,GAAG,IAAI;AAAA,IACnG;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["/**\n * Preload bridge for the main window, settings window, settings overlay\n * view, and popover overlay view. Exposes a minimal, typed `window.devtools`\n * surface so the renderer never has to call `window.require('electron')`.\n *\n * This file is bundled by esbuild to CJS at `dist/preload/windows/main.js`\n * (see package.json `build:preload`). It must remain a leaf module \u2014 do\n * NOT import other preload files via `.js` ESM specifiers; everything goes\n * through the Electron `contextBridge` / `ipcRenderer` runtime.\n *\n * Channel governance lives in the main process: `sender-policy.ts` plus the\n * per-handler zod schemas decide what's accepted. The preload layer is a\n * thin pass-through \u2014 a renderer inventing channel names will just hit a\n * main-side rejection, so duplicating an allowlist here added no real\n * defense for a devtool that loads user-trusted mini-programs.\n */\nimport { contextBridge, ipcRenderer, type IpcRendererEvent } from 'electron'\n\nconst api = {\n ipc: {\n invoke: (channel: string, ...args: unknown[]) => ipcRenderer.invoke(channel, ...args),\n // Synchronous round-trip. Blocks the renderer until the main process sets\n // `event.returnValue` \u2014 used only for the editor's beforeunload flush, where\n // the write MUST land before the page is torn down (an async invoke can't).\n sendSync: (channel: string, ...args: unknown[]) => ipcRenderer.sendSync(channel, ...args),\n send: (channel: string, ...args: unknown[]) => {\n ipcRenderer.send(channel, ...args)\n },\n on: (\n channel: string,\n listener: (event: IpcRendererEvent, ...args: unknown[]) => void,\n ) => {\n ipcRenderer.on(channel, listener)\n return () => ipcRenderer.removeListener(channel, listener)\n },\n once: (\n channel: string,\n listener: (event: IpcRendererEvent, ...args: unknown[]) => void,\n ) => {\n ipcRenderer.once(channel, listener)\n },\n removeListener: (\n channel: string,\n listener: (...args: unknown[]) => void,\n ) => {\n ipcRenderer.removeListener(channel, listener)\n },\n },\n}\n\n// All host windows that load this preload run with `contextIsolation: true`\n// (main / settings / view-manager), so `contextBridge` is the path that\n// reaches the renderer's `window`. The simulator <webview> uses a separate\n// preload (`simulator.ts`).\ncontextBridge.exposeInMainWorld('devtools', api)\n\n// Test-only hatch: e2e helpers emit synthetic IPC events on the renderer's\n// ipcRenderer instance to trigger handlers registered via `devtools.ipc.on`\n// without round-tripping through the main process. Gated on NODE_ENV so\n// production builds never expose it.\nif (process.env.NODE_ENV === 'test') {\n contextBridge.exposeInMainWorld('__testIpc', {\n emit: (channel: string, ...args: unknown[]) => {\n ;(ipcRenderer as unknown as { emit: (c: string, ...a: unknown[]) => void }).emit(channel, ...args)\n },\n })\n}\n\nexport type DevtoolsApi = typeof api\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAgBA,sBAAkE;AAElE,IAAM,MAAM;AAAA,EACV,KAAK;AAAA,IACH,QAAQ,CAAC,YAAoB,SAAoB,4BAAY,OAAO,SAAS,GAAG,IAAI;AAAA;AAAA;AAAA;AAAA,IAIpF,UAAU,CAAC,YAAoB,SAAoB,4BAAY,SAAS,SAAS,GAAG,IAAI;AAAA,IACxF,MAAM,CAAC,YAAoB,SAAoB;AAC7C,kCAAY,KAAK,SAAS,GAAG,IAAI;AAAA,IACnC;AAAA,IACA,IAAI,CACF,SACA,aACG;AACH,kCAAY,GAAG,SAAS,QAAQ;AAChC,aAAO,MAAM,4BAAY,eAAe,SAAS,QAAQ;AAAA,IAC3D;AAAA,IACA,MAAM,CACJ,SACA,aACG;AACH,kCAAY,KAAK,SAAS,QAAQ;AAAA,IACpC;AAAA,IACA,gBAAgB,CACd,SACA,aACG;AACH,kCAAY,eAAe,SAAS,QAAQ;AAAA,IAC9C;AAAA,EACF;AACF;AAMA,8BAAc,kBAAkB,YAAY,GAAG;AAM/C,IAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,gCAAc,kBAAkB,aAAa;AAAA,IAC3C,MAAM,CAAC,YAAoB,SAAoB;AAC7C;AAAC,MAAC,4BAA0E,KAAK,SAAS,GAAG,IAAI;AAAA,IACnG;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -6,8 +6,8 @@ function exposeOnMainWorld(key, value) {
6
6
  let fellBack = false;
7
7
  try {
8
8
  import_electron.contextBridge.exposeInMainWorld(key, value);
9
- } catch {
10
- ;
9
+ } catch (err) {
10
+ console.warn("[devtools/expose] contextBridge.exposeInMainWorld failed, falling back to direct window assignment:", err);
11
11
  window[key] = value;
12
12
  fellBack = true;
13
13
  }
@@ -0,0 +1,2 @@
1
+ var e={comments:{lineComment:`*`},brackets:[[`[`,`]`],[`(`,`)`]]},t={defaultToken:`invalid`,ignoreCase:!0,tokenPostfix:`.abap`,keywords:`abap-source.abbreviated.abstract.accept.accepting.according.activation.actual.add.add-corresponding.adjacent.after.alias.aliases.align.all.allocate.alpha.analysis.analyzer.and.append.appendage.appending.application.archive.area.arithmetic.as.ascending.aspect.assert.assign.assigned.assigning.association.asynchronous.at.attributes.authority.authority-check.avg.back.background.backup.backward.badi.base.before.begin.between.big.binary.bintohex.bit.black.blank.blanks.blob.block.blocks.blue.bound.boundaries.bounds.boxed.break-point.buffer.by.bypassing.byte.byte-order.call.calling.case.cast.casting.catch.center.centered.chain.chain-input.chain-request.change.changing.channels.character.char-to-hex.check.checkbox.ci_.circular.class.class-coding.class-data.class-events.class-methods.class-pool.cleanup.clear.client.clob.clock.close.coalesce.code.coding.col_background.col_group.col_heading.col_key.col_negative.col_normal.col_positive.col_total.collect.color.column.columns.comment.comments.commit.common.communication.comparing.component.components.compression.compute.concat.concat_with_space.concatenate.cond.condense.condition.connect.connection.constants.context.contexts.continue.control.controls.conv.conversion.convert.copies.copy.corresponding.country.cover.cpi.create.creating.critical.currency.currency_conversion.current.cursor.cursor-selection.customer.customer-function.dangerous.data.database.datainfo.dataset.date.dats_add_days.dats_add_months.dats_days_between.dats_is_valid.daylight.dd/mm/yy.dd/mm/yyyy.ddmmyy.deallocate.decimal_shift.decimals.declarations.deep.default.deferred.define.defining.definition.delete.deleting.demand.department.descending.describe.destination.detail.dialog.directory.disconnect.display.display-mode.distinct.divide.divide-corresponding.division.do.dummy.duplicate.duplicates.duration.during.dynamic.dynpro.edit.editor-call.else.elseif.empty.enabled.enabling.encoding.end.endat.endcase.endcatch.endchain.endclass.enddo.endenhancement.end-enhancement-section.endexec.endform.endfunction.endian.endif.ending.endinterface.end-lines.endloop.endmethod.endmodule.end-of-definition.end-of-editing.end-of-file.end-of-page.end-of-selection.endon.endprovide.endselect.end-test-injection.end-test-seam.endtry.endwhile.endwith.engineering.enhancement.enhancement-point.enhancements.enhancement-section.entries.entry.enum.environment.equiv.errormessage.errors.escaping.event.events.exact.except.exception.exceptions.exception-table.exclude.excluding.exec.execute.exists.exit.exit-command.expand.expanding.expiration.explicit.exponent.export.exporting.extend.extended.extension.extract.fail.fetch.field.field-groups.fields.field-symbol.field-symbols.file.filter.filters.filter-table.final.find.first.first-line.fixed-point.fkeq.fkge.flush.font.for.form.format.forward.found.frame.frames.free.friends.from.function.functionality.function-pool.further.gaps.generate.get.giving.gkeq.gkge.global.grant.green.group.groups.handle.handler.harmless.hashed.having.hdb.header.headers.heading.head-lines.help-id.help-request.hextobin.hide.high.hint.hold.hotspot.icon.id.identification.identifier.ids.if.ignore.ignoring.immediately.implementation.implementations.implemented.implicit.import.importing.in.inactive.incl.include.includes.including.increment.index.index-line.infotypes.inheriting.init.initial.initialization.inner.inout.input.insert.instance.instances.instr.intensified.interface.interface-pool.interfaces.internal.intervals.into.inverse.inverted-date.is.iso.job.join.keep.keeping.kernel.key.keys.keywords.kind.language.last.late.layout.leading.leave.left.left-justified.leftplus.leftspace.legacy.length.let.level.levels.like.line.lines.line-count.linefeed.line-selection.line-size.list.listbox.list-processing.little.llang.load.load-of-program.lob.local.locale.locator.logfile.logical.log-point.long.loop.low.lower.lpad.lpi.ltrim.mail.main.major-id.mapping.margin.mark.mask.match.matchcode.max.maximum.medium.members.memory.mesh.message.message-id.messages.messaging.method.methods.min.minimum.minor-id.mm/dd/yy.mm/dd/yyyy.mmddyy.mode.modif.modifier.modify.module.move.move-corresponding.multiply.multiply-corresponding.name.nametab.native.nested.nesting.new.new-line.new-page.new-section.next.no.no-display.no-extension.no-gap.no-gaps.no-grouping.no-heading.no-scrolling.no-sign.no-title.no-topofpage.no-zero.node.nodes.non-unicode.non-unique.not.null.number.object.objects.obligatory.occurrence.occurrences.occurs.of.off.offset.ole.on.only.open.option.optional.options.or.order.other.others.out.outer.output.output-length.overflow.overlay.pack.package.pad.padding.page.pages.parameter.parameters.parameter-table.part.partially.pattern.percentage.perform.performing.person.pf1.pf10.pf11.pf12.pf13.pf14.pf15.pf2.pf3.pf4.pf5.pf6.pf7.pf8.pf9.pf-status.pink.places.pool.pos_high.pos_low.position.pragmas.precompiled.preferred.preserving.primary.print.print-control.priority.private.procedure.process.program.property.protected.provide.public.push.pushbutton.put.queue-only.quickinfo.radiobutton.raise.raising.range.ranges.read.reader.read-only.receive.received.receiver.receiving.red.redefinition.reduce.reduced.ref.reference.refresh.regex.reject.remote.renaming.replace.replacement.replacing.report.request.requested.reserve.reset.resolution.respecting.responsible.result.results.resumable.resume.retry.return.returncode.returning.returns.right.right-justified.rightplus.rightspace.risk.rmc_communication_failure.rmc_invalid_status.rmc_system_failure.role.rollback.rows.rpad.rtrim.run.sap.sap-spool.saving.scale_preserving.scale_preserving_scientific.scan.scientific.scientific_with_leading_zero.scroll.scroll-boundary.scrolling.search.secondary.seconds.section.select.selection.selections.selection-screen.selection-set.selection-sets.selection-table.select-options.send.separate.separated.set.shared.shift.short.shortdump-id.sign_as_postfix.single.size.skip.skipping.smart.some.sort.sortable.sorted.source.specified.split.spool.spots.sql.sqlscript.stable.stamp.standard.starting.start-of-editing.start-of-selection.state.statement.statements.static.statics.statusinfo.step-loop.stop.structure.structures.style.subkey.submatches.submit.subroutine.subscreen.subtract.subtract-corresponding.suffix.sum.summary.summing.supplied.supply.suppress.switch.switchstates.symbol.syncpoints.syntax.syntax-check.syntax-trace.system-call.system-exceptions.system-exit.tab.tabbed.table.tables.tableview.tabstrip.target.task.tasks.test.testing.test-injection.test-seam.text.textpool.then.throw.time.times.timestamp.timezone.tims_is_valid.title.titlebar.title-lines.to.tokenization.tokens.top-lines.top-of-page.trace-file.trace-table.trailing.transaction.transfer.transformation.translate.transporting.trmac.truncate.truncation.try.tstmp_add_seconds.tstmp_current_utctimestamp.tstmp_is_valid.tstmp_seconds_between.type.type-pool.type-pools.types.uline.unassign.under.unicode.union.unique.unit_conversion.unix.unpack.until.unwind.up.update.upper.user.user-command.using.utf-8.valid.value.value-request.values.vary.varying.verification-message.version.via.view.visible.wait.warning.when.whenever.where.while.width.window.windows.with.with-heading.without.with-title.word.work.write.writer.xml.xsd.yellow.yes.yymmdd.zero.zone.abap_system_timezone.abap_user_timezone.access.action.adabas.adjust_numbers.allow_precision_loss.allowed.amdp.applicationuser.as_geo_json.as400.associations.balance.behavior.breakup.bulk.cds.cds_client.check_before_save.child.clients.corr.corr_spearman.cross.cycles.datn_add_days.datn_add_months.datn_days_between.dats_from_datn.dats_tims_to_tstmp.dats_to_datn.db2.db6.ddl.dense_rank.depth.deterministic.discarding.entities.entity.error.failed.finalize.first_value.fltp_to_dec.following.fractional.full.graph.grouping.hierarchy.hierarchy_ancestors.hierarchy_ancestors_aggregate.hierarchy_descendants.hierarchy_descendants_aggregate.hierarchy_siblings.incremental.indicators.lag.last_value.lead.leaves.like_regexpr.link.locale_sap.lock.locks.many.mapped.matched.measures.median.mssqlnt.multiple.nodetype.ntile.nulls.occurrences_regexpr.one.operations.oracle.orphans.over.parent.parents.partition.pcre.period.pfcg_mapping.preceding.privileged.product.projection.rank.redirected.replace_regexpr.reported.response.responses.root.row.row_number.sap_system_date.save.schema.session.sets.shortdump.siblings.spantree.start.stddev.string_agg.subtotal.sybase.tims_from_timn.tims_to_timn.to_blob.to_clob.total.trace-entry.tstmp_to_dats.tstmp_to_dst.tstmp_to_tims.tstmpl_from_utcl.tstmpl_to_utcl.unbounded.utcl_add_seconds.utcl_current.utcl_seconds_between.uuid.var.verbatim`.split(`.`),builtinFunctions:`abs.acos.asin.atan.bit-set.boolc.boolx.ceil.char_off.charlen.cmax.cmin.concat_lines_of.contains.contains_any_not_of.contains_any_of.cos.cosh.count.count_any_not_of.count_any_of.dbmaxlen.distance.escape.exp.find_any_not_of.find_any_of.find_end.floor.frac.from_mixed.ipow.line_exists.line_index.log.log10.matches.nmax.nmin.numofchar.repeat.rescale.reverse.round.segment.shift_left.shift_right.sign.sin.sinh.sqrt.strlen.substring.substring_after.substring_before.substring_from.substring_to.tan.tanh.to_lower.to_mixed.to_upper.trunc.utclong_add.utclong_current.utclong_diff.xsdbool.xstrlen`.split(`.`),typeKeywords:`b.c.d.decfloat16.decfloat34.f.i.int8.n.p.s.string.t.utclong.x.xstring.any.clike.csequence.decfloat.numeric.simple.xsequence.accp.char.clnt.cuky.curr.datn.dats.d16d.d16n.d16r.d34d.d34n.d34r.dec.df16_dec.df16_raw.df34_dec.df34_raw.fltp.geom_ewkb.int1.int2.int4.lang.lchr.lraw.numc.quan.raw.rawstring.sstring.timn.tims.unit.utcl.df16_scl.df34_scl.prec.varc.abap_bool.abap_false.abap_true.abap_undefined.me.screen.space.super.sy.syst.table_line.*sys*`.split(`.`),builtinMethods:[`class_constructor`,`constructor`],derivedTypes:[`%CID`,`%CID_REF`,`%CONTROL`,`%DATA`,`%ELEMENT`,`%FAIL`,`%KEY`,`%MSG`,`%PARAM`,`%PID`,`%PID_ASSOC`,`%PID_PARENT`,`%_HINTS`],cdsLanguage:[`@AbapAnnotation`,`@AbapCatalog`,`@AccessControl`,`@API`,`@ClientDependent`,`@ClientHandling`,`@CompatibilityContract`,`@DataAging`,`@EndUserText`,`@Environment`,`@LanguageDependency`,`@MappingRole`,`@Metadata`,`@MetadataExtension`,`@ObjectModel`,`@Scope`,`@Semantics`,`$EXTENSION`,`$SELF`],selectors:[`->`,`->*`,`=>`,`~`,`~*`],operators:` +. -./.*.**.div.mod.=.#.@.+=.-=.*=./=.**=.&&=.?=.&.&&.bit-and.bit-not.bit-or.bit-xor.m.o.z.<. >.<=.>=.<>.><.=<.=>.bt.byte-ca.byte-cn.byte-co.byte-cs.byte-na.byte-ns.ca.cn.co.cp.cs.eq.ge.gt.le.lt.na.nb.ne.np.ns.*/.*:.--./*.//`.split(`.`),symbols:/[=><!~?&+\-*\/\^%#@]+/,tokenizer:{root:[[/[a-z_\/$%@]([\w\/$%]|-(?!>))*/,{cases:{"@typeKeywords":`type`,"@keywords":`keyword`,"@cdsLanguage":`annotation`,"@derivedTypes":`type`,"@builtinFunctions":`type`,"@builtinMethods":`type`,"@operators":`key`,"@default":`identifier`}}],[/<[\w]+>/,`identifier`],[/##[\w|_]+/,`comment`],{include:`@whitespace`},[/[:,.]/,`delimiter`],[/[{}()\[\]]/,`@brackets`],[/@symbols/,{cases:{"@selectors":`tag`,"@operators":`key`,"@default":``}}],[/'/,{token:`string`,bracket:`@open`,next:`@stringquote`}],[/`/,{token:`string`,bracket:`@open`,next:`@stringping`}],[/\|/,{token:`string`,bracket:`@open`,next:`@stringtemplate`}],[/\d+/,`number`]],stringtemplate:[[/[^\\\|]+/,`string`],[/\\\|/,`string`],[/\|/,{token:`string`,bracket:`@close`,next:`@pop`}]],stringping:[[/[^\\`]+/,`string`],[/`/,{token:`string`,bracket:`@close`,next:`@pop`}]],stringquote:[[/[^\\']+/,`string`],[/'/,{token:`string`,bracket:`@close`,next:`@pop`}]],whitespace:[[/[ \t\r\n]+/,``],[/^\*.*$/,`comment`],[/\".*$/,`comment`]]}};export{e as conf,t as language};
2
+ //# sourceMappingURL=abap-DiwvWnMr.js.map
@@ -0,0 +1,2 @@
1
+ var e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`<`,close:`>`}],folding:{markers:{start:RegExp(`^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))`),end:RegExp(`^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))`)}}},t=`abstract.activate.and.any.array.as.asc.assert.autonomous.begin.bigdecimal.blob.boolean.break.bulk.by.case.cast.catch.char.class.collect.commit.const.continue.convertcurrency.decimal.default.delete.desc.do.double.else.end.enum.exception.exit.export.extends.false.final.finally.float.for.from.future.get.global.goto.group.having.hint.if.implements.import.in.inner.insert.instanceof.int.interface.into.join.last_90_days.last_month.last_n_days.last_week.like.limit.list.long.loop.map.merge.native.new.next_90_days.next_month.next_n_days.next_week.not.null.nulls.number.object.of.on.or.outer.override.package.parallel.pragma.private.protected.public.retrieve.return.returning.rollback.savepoint.search.select.set.short.sort.stat.static.strictfp.super.switch.synchronized.system.testmethod.then.this.this_month.this_week.throw.throws.today.tolabel.tomorrow.transaction.transient.trigger.true.try.type.undelete.update.upsert.using.virtual.void.volatile.webservice.when.where.while.yesterday`.split(`.`),n=e=>e.charAt(0).toUpperCase()+e.substr(1),r=[];t.forEach(e=>{r.push(e),r.push(e.toUpperCase()),r.push(n(e))});var i={defaultToken:``,tokenPostfix:`.apex`,keywords:r,operators:`=.>.<.!.~.?.:.==.<=.>=.!=.&&.||.++.--.+.-.*./.&.|.^.%.<<.>>.>>>.+=.-=.*=./=.&=.|=.^=.%=.<<=.>>=.>>>=`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,tokenizer:{root:[[/[a-z_$][\w$]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`identifier`}}],[/[A-Z][\w\$]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`type.identifier`}}],{include:`@whitespace`},[/[{}()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/@\s*[a-zA-Z_\$][\w\$]*/,`annotation`],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,`number.float`],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,`number.float`],[/(@digits)[fFdD]/,`number.float`],[/(@digits)[lL]?/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string."`],[/'/,`string`,`@string.'`],[/'[^\\']'/,`string`],[/(')(@escapes)(')/,[`string`,`string.escape`,`string`]],[/'/,`string.invalid`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*\*(?!\/)/,`comment.doc`,`@apexdoc`],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],apexdoc:[[/[^\/*]+/,`comment.doc`],[/\*\//,`comment.doc`,`@pop`],[/[\/*]/,`comment.doc`]],string:[[/[^\\"']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/["']/,{cases:{"$#==$S2":{token:`string`,next:`@pop`},"@default":`string`}}]]}};export{e as conf,i as language};
2
+ //# sourceMappingURL=apex-CmtZjKlf.js.map
@@ -0,0 +1,2 @@
1
+ var e={comments:{lineComment:`#`}},t={defaultToken:`keyword`,ignoreCase:!0,tokenPostfix:`.azcli`,str:/[^#\s]/,tokenizer:{root:[{include:`@comment`},[/\s-+@str*\s*/,{cases:{"@eos":{token:`key.identifier`,next:`@popall`},"@default":{token:`key.identifier`,next:`@type`}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:`key.identifier`,next:`@popall`},"@default":{token:`key.identifier`,next:`@type`}}}]],type:[{include:`@comment`},[/-+@str*\s*/,{cases:{"@eos":{token:`key.identifier`,next:`@popall`},"@default":`key.identifier`}}],[/@str+\s*/,{cases:{"@eos":{token:`string`,next:`@popall`},"@default":`string`}}]],comment:[[/#.*$/,{cases:{"@eos":{token:`comment`,next:`@popall`}}}]]}};export{e as conf,t as language};
2
+ //# sourceMappingURL=azcli-DL2My_i-.js.map
@@ -0,0 +1,2 @@
1
+ var e={comments:{lineComment:`REM`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`}],surroundingPairs:[{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`}],folding:{markers:{start:RegExp(`^\\s*(::\\s*|REM\\s+)#region`),end:RegExp(`^\\s*(::\\s*|REM\\s+)#endregion`)}}},t={defaultToken:``,ignoreCase:!0,tokenPostfix:`.bat`,brackets:[{token:`delimiter.bracket`,open:`{`,close:`}`},{token:`delimiter.parenthesis`,open:`(`,close:`)`},{token:`delimiter.square`,open:`[`,close:`]`}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=><!~?&|+\-*\/\^;\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)(rem(?:\s.*|))$/,[``,`comment`]],[/(\@?)(@keywords)(?!\w)/,[{token:`keyword`},{token:`keyword.$2`}]],[/[ \t\r\n]+/,``],[/setlocal(?!\w)/,`keyword.tag-setlocal`],[/endlocal(?!\w)/,`keyword.tag-setlocal`],[/[a-zA-Z_]\w*/,``],[/:\w*/,`metatag`],[/%[^%]+%/,`variable`],[/%%[\w]+(?!\w)/,`variable`],[/[{}()\[\]]/,`@brackets`],[/@symbols/,`delimiter`],[/\d*\.\d+([eE][\-+]?\d+)?/,`number.float`],[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/,`number.hex`],[/\d+/,`number`],[/[;,.]/,`delimiter`],[/"/,`string`,`@string."`],[/'/,`string`,`@string.'`]],string:[[/[^\\"'%]+/,{cases:{"@eos":{token:`string`,next:`@popall`},"@default":`string`}}],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/%[\w ]+%/,`variable`],[/%%[\w]+(?!\w)/,`variable`],[/["']/,{cases:{"$#==$S2":{token:`string`,next:`@pop`},"@default":`string`}}],[/$/,`string`,`@popall`]]}};export{e as conf,t as language};
2
+ //# sourceMappingURL=bat-B-nC98wG.js.map
@@ -0,0 +1,3 @@
1
+ var e=(e=>`\\b${e}\\b`)(`[_a-zA-Z][_a-zA-Z0-9]*`),t=[`targetScope`,`resource`,`module`,`param`,`var`,`output`,`for`,`in`,`if`,`existing`],n=[`true`,`false`,`null`],r=`[ \\t\\r\\n]`,i=`[0-9]+`,a={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`},{open:`'''`,close:`'''`}],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:`'''`,close:`'''`,notIn:[`string`,`comment`]}],autoCloseBefore:`:.,=}])'
2
+ `,indentationRules:{increaseIndentPattern:RegExp(`^((?!\\/\\/).)*(\\{[^}"'\`]*|\\([^)"'\`]*|\\[[^\\]"'\`]*)$`),decreaseIndentPattern:RegExp(`^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$`)}},o={defaultToken:``,tokenPostfix:`.bicep`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],symbols:/[=><!~?:&|+\-*/^%]+/,keywords:t,namedLiterals:n,escapes:"\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\|'|\\${)",tokenizer:{root:[{include:`@expression`},{include:`@whitespace`}],stringVerbatim:[{regex:`(|'|'')[^']`,action:{token:`string`}},{regex:`'''`,action:{token:`string.quote`,next:`@pop`}}],stringLiteral:[{regex:"\\${",action:{token:`delimiter.bracket`,next:`@bracketCounting`}},{regex:`[^\\\\'$]+`,action:{token:`string`}},{regex:`@escapes`,action:{token:`string.escape`}},{regex:`\\\\.`,action:{token:`string.escape.invalid`}},{regex:`'`,action:{token:`string`,next:`@pop`}}],bracketCounting:[{regex:`{`,action:{token:`delimiter.bracket`,next:`@bracketCounting`}},{regex:`}`,action:{token:`delimiter.bracket`,next:`@pop`}},{include:`expression`}],comment:[{regex:`[^\\*]+`,action:{token:`comment`}},{regex:`\\*\\/`,action:{token:`comment`,next:`@pop`}},{regex:`[\\/*]`,action:{token:`comment`}}],whitespace:[{regex:r},{regex:`\\/\\*`,action:{token:`comment`,next:`@comment`}},{regex:`\\/\\/.*$`,action:{token:`comment`}}],expression:[{regex:`'''`,action:{token:`string.quote`,next:`@stringVerbatim`}},{regex:`'`,action:{token:`string.quote`,next:`@stringLiteral`}},{regex:i,action:{token:`number`}},{regex:e,action:{cases:{"@keywords":{token:`keyword`},"@namedLiterals":{token:`keyword`},"@default":{token:`identifier`}}}}]}};export{a as conf,o as language};
3
+ //# sourceMappingURL=bicep-Ju5MwOgh.js.map
@@ -0,0 +1,2 @@
1
+ var e={comments:{lineComment:`//`,blockComment:[`(*`,`*)`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`],[`<`,`>`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`},{open:`(*`,close:`*)`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`},{open:`(*`,close:`*)`}]},t={defaultToken:``,tokenPostfix:`.cameligo`,ignoreCase:!0,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],keywords:`abs.assert.block.Bytes.case.Crypto.Current.else.failwith.false.for.fun.if.in.let.let%entry.let%init.List.list.Map.map.match.match%nat.mod.not.operation.Operation.of.record.Set.set.sender.skip.source.String.then.to.true.type.with`.split(`.`),typeKeywords:[`int`,`unit`,`string`,`tz`,`nat`,`bool`],operators:[`=`,`>`,`<`,`<=`,`>=`,`<>`,`:`,`:=`,`and`,`mod`,`or`,`+`,`-`,`*`,`/`,`@`,`&`,`^`,`%`,`->`,`<-`,`&&`,`||`],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`identifier`}}],{include:`@whitespace`},[/[{}()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/\d*\.\d+([eE][\-+]?\d+)?/,`number.float`],[/\$[0-9a-fA-F]{1,16}/,`number.hex`],[/\d+/,`number`],[/[;,.]/,`delimiter`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/'/,`string`,`@string`],[/'[^\\']'/,`string`],[/'/,`string.invalid`],[/\#\d+/,`string`]],comment:[[/[^\(\*]+/,`comment`],[/\*\)/,`comment`,`@pop`],[/\(\*/,`comment`]],string:[[/[^\\']+/,`string`],[/\\./,`string.escape.invalid`],[/'/,{token:`string.quote`,bracket:`@close`,next:`@pop`}]],whitespace:[[/[ \t\r\n]+/,`white`],[/\(\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]]}};export{e as conf,t as language};
2
+ //# sourceMappingURL=cameligo-8Eu1TyBr.js.map
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{s as n,l as r,o as t};
@@ -0,0 +1,2 @@
1
+ var e={comments:{lineComment:`;;`},brackets:[[`[`,`]`],[`(`,`)`],[`{`,`}`]],autoClosingPairs:[{open:`[`,close:`]`},{open:`"`,close:`"`},{open:`(`,close:`)`},{open:`{`,close:`}`}],surroundingPairs:[{open:`[`,close:`]`},{open:`"`,close:`"`},{open:`(`,close:`)`},{open:`{`,close:`}`}]},t={defaultToken:``,ignoreCase:!0,tokenPostfix:`.clj`,brackets:[{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`{`,close:`}`,token:`delimiter.curly`}],constants:[`true`,`false`,`nil`],numbers:/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,characters:/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,escapes:/^\\(?:["'\\bfnrt]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,qualifiedSymbols:/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/,specialForms:[`.`,`catch`,`def`,`do`,`if`,`monitor-enter`,`monitor-exit`,`new`,`quote`,`recur`,`set!`,`throw`,`try`,`var`],coreSymbols:`*,*',*1,*2,*3,*agent*,*allow-unresolved-vars*,*assert*,*clojure-version*,*command-line-args*,*compile-files*,*compile-path*,*compiler-options*,*data-readers*,*default-data-reader-fn*,*e,*err*,*file*,*flush-on-newline*,*fn-loader*,*in*,*math-context*,*ns*,*out*,*print-dup*,*print-length*,*print-level*,*print-meta*,*print-namespace-maps*,*print-readably*,*read-eval*,*reader-resolver*,*source-path*,*suppress-read*,*unchecked-math*,*use-context-classloader*,*verbose-defrecords*,*warn-on-reflection*,+,+',-,-',->,->>,->ArrayChunk,->Eduction,->Vec,->VecNode,->VecSeq,-cache-protocol-fn,-reset-methods,..,/,<,<=,=,==,>,>=,EMPTY-NODE,Inst,StackTraceElement->vec,Throwable->map,accessor,aclone,add-classpath,add-watch,agent,agent-error,agent-errors,aget,alength,alias,all-ns,alter,alter-meta!,alter-var-root,amap,ancestors,and,any?,apply,areduce,array-map,as->,aset,aset-boolean,aset-byte,aset-char,aset-double,aset-float,aset-int,aset-long,aset-short,assert,assoc,assoc!,assoc-in,associative?,atom,await,await-for,await1,bases,bean,bigdec,bigint,biginteger,binding,bit-and,bit-and-not,bit-clear,bit-flip,bit-not,bit-or,bit-set,bit-shift-left,bit-shift-right,bit-test,bit-xor,boolean,boolean-array,boolean?,booleans,bound-fn,bound-fn*,bound?,bounded-count,butlast,byte,byte-array,bytes,bytes?,case,cast,cat,char,char-array,char-escape-string,char-name-string,char?,chars,chunk,chunk-append,chunk-buffer,chunk-cons,chunk-first,chunk-next,chunk-rest,chunked-seq?,class,class?,clear-agent-errors,clojure-version,coll?,comment,commute,comp,comparator,compare,compare-and-set!,compile,complement,completing,concat,cond,cond->,cond->>,condp,conj,conj!,cons,constantly,construct-proxy,contains?,count,counted?,create-ns,create-struct,cycle,dec,dec',decimal?,declare,dedupe,default-data-readers,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftype,delay,delay?,deliver,denominator,deref,derive,descendants,destructure,disj,disj!,dissoc,dissoc!,distinct,distinct?,doall,dorun,doseq,dosync,dotimes,doto,double,double-array,double?,doubles,drop,drop-last,drop-while,eduction,empty,empty?,ensure,ensure-reduced,enumeration-seq,error-handler,error-mode,eval,even?,every-pred,every?,ex-data,ex-info,extend,extend-protocol,extend-type,extenders,extends?,false?,ffirst,file-seq,filter,filterv,find,find-keyword,find-ns,find-protocol-impl,find-protocol-method,find-var,first,flatten,float,float-array,float?,floats,flush,fn,fn?,fnext,fnil,for,force,format,frequencies,future,future-call,future-cancel,future-cancelled?,future-done?,future?,gen-class,gen-interface,gensym,get,get-in,get-method,get-proxy-class,get-thread-bindings,get-validator,group-by,halt-when,hash,hash-combine,hash-map,hash-ordered-coll,hash-set,hash-unordered-coll,ident?,identical?,identity,if-let,if-not,if-some,ifn?,import,in-ns,inc,inc',indexed?,init-proxy,inst-ms,inst-ms*,inst?,instance?,int,int-array,int?,integer?,interleave,intern,interpose,into,into-array,ints,io!,isa?,iterate,iterator-seq,juxt,keep,keep-indexed,key,keys,keyword,keyword?,last,lazy-cat,lazy-seq,let,letfn,line-seq,list,list*,list?,load,load-file,load-reader,load-string,loaded-libs,locking,long,long-array,longs,loop,macroexpand,macroexpand-1,make-array,make-hierarchy,map,map-entry?,map-indexed,map?,mapcat,mapv,max,max-key,memfn,memoize,merge,merge-with,meta,method-sig,methods,min,min-key,mix-collection-hash,mod,munge,name,namespace,namespace-munge,nat-int?,neg-int?,neg?,newline,next,nfirst,nil?,nnext,not,not-any?,not-empty,not-every?,not=,ns,ns-aliases,ns-imports,ns-interns,ns-map,ns-name,ns-publics,ns-refers,ns-resolve,ns-unalias,ns-unmap,nth,nthnext,nthrest,num,number?,numerator,object-array,odd?,or,parents,partial,partition,partition-all,partition-by,pcalls,peek,persistent!,pmap,pop,pop!,pop-thread-bindings,pos-int?,pos?,pr,pr-str,prefer-method,prefers,primitives-classnames,print,print-ctor,print-dup,print-method,print-simple,print-str,printf,println,println-str,prn,prn-str,promise,proxy,proxy-call-with-super,proxy-mappings,proxy-name,proxy-super,push-thread-bindings,pvalues,qualified-ident?,qualified-keyword?,qualified-symbol?,quot,rand,rand-int,rand-nth,random-sample,range,ratio?,rational?,rationalize,re-find,re-groups,re-matcher,re-matches,re-pattern,re-seq,read,read-line,read-string,reader-conditional,reader-conditional?,realized?,record?,reduce,reduce-kv,reduced,reduced?,reductions,ref,ref-history-count,ref-max-history,ref-min-history,ref-set,refer,refer-clojure,reify,release-pending-sends,rem,remove,remove-all-methods,remove-method,remove-ns,remove-watch,repeat,repeatedly,replace,replicate,require,reset!,reset-meta!,reset-vals!,resolve,rest,restart-agent,resultset-seq,reverse,reversible?,rseq,rsubseq,run!,satisfies?,second,select-keys,send,send-off,send-via,seq,seq?,seqable?,seque,sequence,sequential?,set,set-agent-send-executor!,set-agent-send-off-executor!,set-error-handler!,set-error-mode!,set-validator!,set?,short,short-array,shorts,shuffle,shutdown-agents,simple-ident?,simple-keyword?,simple-symbol?,slurp,some,some->,some->>,some-fn,some?,sort,sort-by,sorted-map,sorted-map-by,sorted-set,sorted-set-by,sorted?,special-symbol?,spit,split-at,split-with,str,string?,struct,struct-map,subs,subseq,subvec,supers,swap!,swap-vals!,symbol,symbol?,sync,tagged-literal,tagged-literal?,take,take-last,take-nth,take-while,test,the-ns,thread-bound?,time,to-array,to-array-2d,trampoline,transduce,transient,tree-seq,true?,type,unchecked-add,unchecked-add-int,unchecked-byte,unchecked-char,unchecked-dec,unchecked-dec-int,unchecked-divide-int,unchecked-double,unchecked-float,unchecked-inc,unchecked-inc-int,unchecked-int,unchecked-long,unchecked-multiply,unchecked-multiply-int,unchecked-negate,unchecked-negate-int,unchecked-remainder-int,unchecked-short,unchecked-subtract,unchecked-subtract-int,underive,unquote,unquote-splicing,unreduced,unsigned-bit-shift-right,update,update-in,update-proxy,uri?,use,uuid?,val,vals,var-get,var-set,var?,vary-meta,vec,vector,vector-of,vector?,volatile!,volatile?,vreset!,vswap!,when,when-first,when-let,when-not,when-some,while,with-bindings,with-bindings*,with-in-str,with-loading-context,with-local-vars,with-meta,with-open,with-out-str,with-precision,with-redefs,with-redefs-fn,xml-seq,zero?,zipmap`.split(`,`),tokenizer:{root:[{include:`@whitespace`},[/@numbers/,`number`],[/@characters/,`string`],{include:`@string`},[/[()\[\]{}]/,`@brackets`],[/\/#"(?:\.|(?:")|[^"\n])*"\/g/,`regexp`],[/[#'@^`~]/,`meta`],[/@qualifiedSymbols/,{cases:{"^:.+$":`constant`,"@specialForms":`keyword`,"@coreSymbols":`keyword`,"@constants":`constant`,"@default":`identifier`}}]],whitespace:[[/[\s,]+/,`white`],[/;.*$/,`comment`],[/\(comment\b/,`comment`,`@comment`]],comment:[[/\(/,`comment`,`@push`],[/\)/,`comment`,`@pop`],[/[^()]/,`comment`]],string:[[/"/,`string`,`@multiLineString`]],multiLineString:[[/"/,`string`,`@popall`],[/@escapes/,`string.escape`],[/./,`string`]]}};export{e as conf,t as language};
2
+ //# sourceMappingURL=clojure-u-RpMkH3.js.map
@@ -0,0 +1,2 @@
1
+ var e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:[`###`,`###`],lineComment:`#`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{markers:{start:RegExp(`^\\s*#region\\b`),end:RegExp(`^\\s*#endregion\\b`)}}},t={defaultToken:``,ignoreCase:!0,tokenPostfix:`.coffee`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:`and.or.is.isnt.not.on.yes.@.no.off.true.false.null.this.new.delete.typeof.in.instanceof.return.throw.break.continue.debugger.if.else.switch.for.while.do.try.catch.finally.class.extends.super.undefined.then.unless.until.loop.of.by.when`.split(`.`),symbols:/[=><!~?&%|+\-*\/\^\.,\:]+/,escapes:/\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\@[a-zA-Z_]\w*/,`variable.predefined`],[/[a-zA-Z_]\w*/,{cases:{this:`variable.predefined`,"@keywords":{token:`keyword.$0`},"@default":``}}],[/[ \t\r\n]+/,``],[/###/,`comment`,`@comment`],[/#.*$/,`comment`],[`///`,{token:`regexp`,next:`@hereregexp`}],[/^(\s*)(@regEx)/,[``,`regexp`]],[/(\()(\s*)(@regEx)/,[`@brackets`,``,`regexp`]],[/(\,)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\=)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\:)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\[)(\s*)(@regEx)/,[`@brackets`,``,`regexp`]],[/(\!)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\&)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\|)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\?)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\{)(\s*)(@regEx)/,[`@brackets`,``,`regexp`]],[/(\;)(\s*)(@regEx)/,[``,``,`regexp`]],[/}/,{cases:{"$S2==interpolatedstring":{token:`string`,next:`@pop`},"@default":`@brackets`}}],[/[{}()\[\]]/,`@brackets`],[/@symbols/,`delimiter`],[/\d+[eE]([\-+]?\d+)?/,`number.float`],[/\d+\.\d+([eE][\-+]?\d+)?/,`number.float`],[/0[xX][0-9a-fA-F]+/,`number.hex`],[/0[0-7]+(?!\d)/,`number.octal`],[/\d+/,`number`],[/[,.]/,`delimiter`],[/"""/,`string`,`@herestring."""`],[/'''/,`string`,`@herestring.'''`],[/"/,{cases:{"@eos":`string`,"@default":{token:`string`,next:`@string."`}}}],[/'/,{cases:{"@eos":`string`,"@default":{token:`string`,next:`@string.'`}}}]],string:[[/[^"'\#\\]+/,`string`],[/@escapes/,`string.escape`],[/\./,`string.escape.invalid`],[/\./,`string.escape.invalid`],[/#{/,{cases:{'$S2=="':{token:`string`,next:`root.interpolatedstring`},"@default":`string`}}],[/["']/,{cases:{"$#==$S2":{token:`string`,next:`@pop`},"@default":`string`}}],[/#/,`string`]],herestring:[[/("""|''')/,{cases:{"$1==$S2":{token:`string`,next:`@pop`},"@default":`string`}}],[/[^#\\'"]+/,`string`],[/['"]+/,`string`],[/@escapes/,`string.escape`],[/\./,`string.escape.invalid`],[/#{/,{token:`string.quote`,next:`root.interpolatedstring`}],[/#/,`string`]],comment:[[/[^#]+/,`comment`],[/###/,`comment`,`@pop`],[/#/,`comment`]],hereregexp:[[/[^\\\/#]+/,`regexp`],[/\\./,`regexp`],[/#.*$/,`comment`],[`///[igm]*`,{token:`regexp`,next:`@pop`}],[/\//,`regexp`]]}};export{e as conf,t as language};
2
+ //# sourceMappingURL=coffee-CdA7bbTe.js.map
@@ -0,0 +1,2 @@
1
+ var e=9222,t=1001;export{t as n,e as t};
2
+ //# sourceMappingURL=constants-CLAQX6VZ.js.map