Skip to content

Commit 595eaed

Browse files
feat(Wind): Finalize Tauri IPC substrate and regenerate workbench bridges
Completed the migration from Electron to Tauri by establishing the full workbench communication substrate. Added 24 routed IPC channels and 14 stub channels to `TauriMainProcessService.ts` to handle core services (filesystem, storage, configuration, extensions, lifecycle) without crashing on missing handlers. Introduced 5 streaming subscriptions for live renderer feeds (VFS, configuration, terminal, lifecycle) to avoid round-tripping invokes. Regenerated all workbridge shapes, command catalogs, and service schemas via the codegen pipeline, updating versions to 2026-05-03. Implemented concrete Effect-TS live layers for UserSettings, WorkbenchActivity, Clipboard, Command, ContextKey, Dialog, Editor, Extension, Host, Keybinding, Layout, Lifecycle, Notification, Product, Progress, Storage, Theme, and Workspace services. All services now resolve bridges from `globalThis.__CEL_SERVICES__` injected by the preload script. Refactored build configuration to standardize ESBuild targets and environment constants. Removed 1,076 lines of legacy Electron polyfills now superseded by Mountain-routed channels. Updated telemetry event namespaces to `land:*` and enforced development-only gating for capture functions to ensure production builds contain no telemetry payloads.
1 parent 67e98ec commit 595eaed

96 files changed

Lines changed: 1314 additions & 887 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 81 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,78 @@
11
# Changelog - Wind
22

3-
Wind is our UI service layer - the Effect-TS-driven re-implementation
4-
of VS Code's workbench services that bridges the renderer to Mountain
5-
through Tauri IPC. This file records what we built in our voice,
6-
version by version. Format adapted from
7-
[Keep a Changelog](https://keepachangelog.com/).
3+
Wind is our UI service layer - the Effect-TS-driven re-implementation of VS
4+
Code's workbench services that bridges the renderer to Mountain through Tauri
5+
IPC. This file records what we built in our voice, version by version. Format
6+
adapted from [Keep a Changelog](https://keepachangelog.com/).
87

98
## [v2.1] - Full Workbench Lift, Tauri IPC Bridge
109

11-
We finalised the substrate that lets the workbench talk to Mountain
12-
through our Tauri IPC instead of Electron's. By the end of this cycle
13-
we had 24 channel routes wired, 5 streaming subscriptions, and a clean
14-
preload + bootstrap that brings the editor up against a live Cocoon.
10+
We finalised the substrate that lets the workbench talk to Mountain through our
11+
Tauri IPC instead of Electron's. By the end of this cycle we had 24 channel
12+
routes wired, 5 streaming subscriptions, and a clean preload + bootstrap that
13+
brings the editor up against a live Cocoon.
1514

1615
### Added
1716

1817
- **Five streaming `listen()` subscriptions** for the renderer:
19-
`sky://vfs/fileChange`, `sky://configuration/changed`,
20-
`sky://terminal/data`, `sky://lifecycle/willShutdown`,
21-
`sky://lifecycle/phaseChanged`. Each gives the workbench a live
22-
feed without round-tripping invokes.
23-
- **`Source/Service/TauriMainProcessService.ts`** (~232 lines) - our
24-
IPC routing surface with **24 routed channels** and **14 stub
25-
channels**:
26-
- **Routed**: `localFilesystem`, `storage`, `configuration`,
27-
`textFile`, `extensions`, `commands`, `terminal`, `output`,
28-
`notification`, `progress`, `quickInput`, `workspaces`,
29-
`themes`, `search`, `environment`, `decorations`,
30-
`workingCopy`, `keybinding`, `lifecycle`, `label`, `model`,
31-
`nativeHost`, `localPty`, `url`, `menubar`, `encryption`,
32-
`extensionHostStarter`, `extensionhostdebugservice`.
33-
- **Stubbed**: `update`, `sign`, `policy`, `userDataProfiles`,
34-
`keyboardLayout`, `sharedProcess`, `utilityProcessWorker`,
35-
`meteredConnection`, `webContentExtractor`, `browserElements`,
36-
`NativeMcpDiscoveryHelper`, `sandboxHelper`, `mcpGateway`,
37-
`browserViewGroup`, `externalTerminal`. Each stub returns the
38-
shape the workbench expects (mostly empty arrays / no-op
39-
disposables) so the bootstrap doesn't crash on a missing
40-
handler.
41-
- **MessageChannel for extension-host IPC** in `Preload.ts`
42-
(~+58 lines): init data → Initialized byte (`[1]`) → Ready byte
43-
(`[2]`) after 50 ms.
44-
- **Extension-host protocol message forwarding to Mountain**
45-
(~+85 lines).
46-
- **`ResolveConfiguration`**: ~+111 lines covering
47-
`INativeWindowConfiguration`, profiles, `colorScheme`,
48-
`accessibilitySupport`; ~+94 lines for Mountain path resolution
49-
via RPC.
50-
- **`Source/Function/DevLog.ts`** (~72 lines) - fire-and-forget dev
51-
logging with short-mode formatting, mirrored to Mountain so
52-
renderer-side logs land in the same trace stream.
18+
`sky://vfs/fileChange`, `sky://configuration/changed`, `sky://terminal/data`,
19+
`sky://lifecycle/willShutdown`, `sky://lifecycle/phaseChanged`. Each gives the
20+
workbench a live feed without round-tripping invokes.
21+
- **`Source/Service/TauriMainProcessService.ts`** (~232 lines) - our IPC routing
22+
surface with **24 routed channels** and **14 stub channels**:
23+
- **Routed**: `localFilesystem`, `storage`, `configuration`, `textFile`,
24+
`extensions`, `commands`, `terminal`, `output`, `notification`,
25+
`progress`, `quickInput`, `workspaces`, `themes`, `search`, `environment`,
26+
`decorations`, `workingCopy`, `keybinding`, `lifecycle`, `label`, `model`,
27+
`nativeHost`, `localPty`, `url`, `menubar`, `encryption`,
28+
`extensionHostStarter`, `extensionhostdebugservice`.
29+
- **Stubbed**: `update`, `sign`, `policy`, `userDataProfiles`,
30+
`keyboardLayout`, `sharedProcess`, `utilityProcessWorker`,
31+
`meteredConnection`, `webContentExtractor`, `browserElements`,
32+
`NativeMcpDiscoveryHelper`, `sandboxHelper`, `mcpGateway`,
33+
`browserViewGroup`, `externalTerminal`. Each stub returns the shape the
34+
workbench expects (mostly empty arrays / no-op disposables) so the
35+
bootstrap doesn't crash on a missing handler.
36+
- **MessageChannel for extension-host IPC** in `Preload.ts` (~+58 lines): init
37+
data → Initialized byte (`[1]`) → Ready byte (`[2]`) after 50 ms.
38+
- **Extension-host protocol message forwarding to Mountain** (~+85 lines).
39+
- **`ResolveConfiguration`**: ~+111 lines covering `INativeWindowConfiguration`,
40+
profiles, `colorScheme`, `accessibilitySupport`; ~+94 lines for Mountain path
41+
resolution via RPC.
42+
- **`Source/Function/DevLog.ts`** (~72 lines) - fire-and-forget dev logging with
43+
short-mode formatting, mirrored to Mountain so renderer-side logs land in the
44+
same trace stream.
5345

5446
### Changed
5547

5648
- **`Preload.ts` grew** from ~99 lines to 190+ lines with debugging
57-
instrumentation. We use it as the single bridge that mounts our
58-
Tauri IPC under the names the workbench expects (`window.vscode`,
59-
the channel proxy, etc.) before the workbench loads.
60-
- **IPC naming convention**: `ipcMain``IPC` for our PascalCase
61-
rule.
62-
- **Effect.either refactor** in the bootstrap path so fiber-level
63-
failures surface as proper `Either` results instead of getting
64-
buried.
49+
instrumentation. We use it as the single bridge that mounts our Tauri IPC
50+
under the names the workbench expects (`window.vscode`, the channel proxy,
51+
etc.) before the workbench loads.
52+
- **IPC naming convention**: `ipcMain``IPC` for our PascalCase rule.
53+
- **Effect.either refactor** in the bootstrap path so fiber-level failures
54+
surface as proper `Either` results instead of getting buried.
6555

6656
### Removed
6757

6858
- **1,076 lines of legacy polyfills** deleted in one pass:
6959
`ChildProcessPolyfill.ts` (77), `FileProtocolShim.ts` (58),
7060
`FileSystemPolyfill.ts` (44), `NativeModulePolyfill.ts` (62),
71-
`ProcessPolyfill.ts` (36), `SharedProcessProxy.ts` (68). All
72-
superseded by Mountain-routed channels.
61+
`ProcessPolyfill.ts` (36), `SharedProcessProxy.ts` (68). All superseded by
62+
Mountain-routed channels.
7363

7464
## [v2.0] - Editor Launch (Bootstrap + Preload Foundation)
7565

7666
We built the renderer-side shape the bundled workbench needs to boot.
7767

7868
### Added
7969

80-
- **`Source/Preload.ts`** (99 lines) - the Tauri/Electron bridge
81-
the workbench imports first.
70+
- **`Source/Preload.ts`** (99 lines) - the Tauri/Electron bridge the workbench
71+
imports first.
8272
- **`Source/Bootstrap/Types/`** - 30+ VS Code type mirror files:
83-
`BootstrapTypes.ts`, the `Type/` subtree
84-
(`BootstrapConfig`, `EnvironmentData`, `Mode`, `Platform`,
85-
`StageResult`, …), and `VSCode/` mirrors
86-
(`VSCodeConfigurationType`, `VSCodeLoggerType`,
73+
`BootstrapTypes.ts`, the `Type/` subtree (`BootstrapConfig`,
74+
`EnvironmentData`, `Mode`, `Platform`, `StageResult`, …), and `VSCode/`
75+
mirrors (`VSCodeConfigurationType`, `VSCodeLoggerType`,
8776
`VSCodeWorkbenchOptionsType`).
8877

8978
### Changed
@@ -93,84 +82,79 @@ We built the renderer-side shape the bundled workbench needs to boot.
9382
## [v1.3] - Dependency Maintenance
9483

9584
Effect 3.18.0 → 3.19.14, `@effect/platform` 0.92.0 → 0.94.1,
96-
`@effect/language-service` 0.60.x → 0.63.2. No major
97-
`Application/` restructures; module count stable.
85+
`@effect/language-service` 0.60.x → 0.63.2. No major `Application/`
86+
restructures; module count stable.
9887

9988
## [v1.2] - Full-Stack Integration (Application Layer)
10089

101-
We grew Wind from a UI shell into a 100+ module Effect-TS service
102-
layer following our Define / Implement / Problem pattern.
90+
We grew Wind from a UI shell into a 100+ module Effect-TS service layer
91+
following our Define / Implement / Problem pattern.
10392

10493
### Added
10594

10695
- **100+ application service modules**, each shaped as
107-
`Source/Application/{Service}/{Define.ts, Implement.ts,
108-
Problem.ts}` (interface, Effect-TS implementation, error types).
109-
Coverage spans Command, Configuration, Dialog, Editor, EditorGroup,
110-
File, FileSystem, Host, IPC, LanguageFeature, Logger, Marker,
111-
Notification, Policy, UntitledTextEditor - and more.
112-
- **300+ file infrastructure commit** to scaffold the template
113-
consistently across the surface.
96+
`Source/Application/{Service}/{Define.ts, Implement.ts, Problem.ts}`
97+
(interface, Effect-TS implementation, error types). Coverage spans Command,
98+
Configuration, Dialog, Editor, EditorGroup, File, FileSystem, Host, IPC,
99+
LanguageFeature, Logger, Marker, Notification, Policy, UntitledTextEditor -
100+
and more.
101+
- **300+ file infrastructure commit** to scaffold the template consistently
102+
across the surface.
114103

115104
### Changed
116105

117106
- Effect-TS 3.17.x → 3.18.x. SolidJS 1.9.x stable. `@types/node` 24.x.
118107

119108
## [v1.1] - Architecture Buildout (Effect-TS Pivot)
120109

121-
The pivot quarter. We adopted Effect-TS as our service composition
122-
runtime and stood up the `Application/` layer that v1.2 would build
123-
out.
110+
The pivot quarter. We adopted Effect-TS as our service composition runtime and
111+
stood up the `Application/` layer that v1.2 would build out.
124112

125113
### Added
126114

127115
- **`Source/Effect/`** directory - Effect-TS service composition.
128-
- **`Source/Application/`** directory - 50+ initial service modules
129-
(Dialog, FileDialog, …) with Effect-TS-driven patterns.
116+
- **`Source/Application/`** directory - 50+ initial service modules (Dialog,
117+
FileDialog, …) with Effect-TS-driven patterns.
130118
- **`Source/Configuration/ESBuild/`** - build-config restructure.
131-
- **Effect-TS dep set**: `effect`, `@effect/platform`,
132-
`@effect/experimental`, `@effect/language-service`.
119+
- **Effect-TS dep set**: `effect`, `@effect/platform`, `@effect/experimental`,
120+
`@effect/language-service`.
133121

134122
### Removed
135123

136124
- `Source/Element/Preview.scss`.
137-
- We concluded the SolidJS evaluation in this window - the bones we
138-
kept landed under `Source/Context/` and `Source/Element/`; the
139-
rest came out.
125+
- We concluded the SolidJS evaluation in this window - the bones we kept landed
126+
under `Source/Context/` and `Source/Element/`; the rest came out.
140127

141128
## [v1.0] - Integration Phase
142129

143130
`deepmerge-ts` 7.1.4 → 7.1.5. SolidJS 1.9.4 → 1.9.5. Refreshed
144-
`CODE_OF_CONDUCT.md` and `CONTRIBUTING.md`. Routine `Target/`
145-
gen/delete cycles for CI integration tests.
131+
`CODE_OF_CONDUCT.md` and `CONTRIBUTING.md`. Routine `Target/` gen/delete cycles
132+
for CI integration tests.
146133

147134
## [v0.2] - Architecture Solidification
148135

149-
We shipped the first generated `Target/` artefacts: 88 files across
150-
`Context/*`, `Element/*`, `Function/*`, `Interface/*`,
151-
`Script/Monaco/Theme/*.json`, `Stylesheet/*`. Monaco themes
152-
`Active4D.json` (154 lines) and `Amoled.json` (219 lines) landed,
153-
plus `Stylesheet/Tippy/{Dark.scss,Light.scss}`. SolidJS devtools
154-
0.31.2 → 0.31.7. We adopted the CSS action-form convention
155-
(`--Mute`, not `--Muted`).
136+
We shipped the first generated `Target/` artefacts: 88 files across `Context/*`,
137+
`Element/*`, `Function/*`, `Interface/*`, `Script/Monaco/Theme/*.json`,
138+
`Stylesheet/*`. Monaco themes `Active4D.json` (154 lines) and `Amoled.json` (219
139+
lines) landed, plus `Stylesheet/Tippy/{Dark.scss,Light.scss}`. SolidJS devtools
140+
0.31.2 → 0.31.7. We adopted the CSS action-form convention (`--Mute`, not
141+
`--Muted`).
156142

157143
## [v0.1] - Rapid Development
158144

159-
`Editor.scss` cleanup (42-line reduction); border/spacing mixins
160-
refactored. SolidJS 1.8.19 → 1.9.1. `monaco-editor` 0.51.0-rc2 →
161-
0.52.0. `@playform/build` 0.1.2 → 0.1.7. No new architectural
162-
folders - refinement only.
145+
`Editor.scss` cleanup (42-line reduction); border/spacing mixins refactored.
146+
SolidJS 1.8.19 → 1.9.1. `monaco-editor` 0.51.0-rc2 → 0.52.0. `@playform/build`
147+
0.1.2 → 0.1.7. No new architectural folders - refinement only.
163148

164149
## [v0.0] - Project Inception
165150

166151
We laid the SolidJS-era bones:
167152

168153
- **`Source/Context/`** - React-style context primitives (`Action`,
169154
`Connection`, `Environment`, `Session`, `Store`).
170-
- **`Source/Element/`** - SolidJS components (`Editor.tsx`,
171-
`Button`, `Anchor`, `Tip`, `Footer`).
172-
- **`Source/Library/`** - helpers (`Create`, `Pad`, `Persist`,
173-
`Environment`).
155+
- **`Source/Element/`** - SolidJS components (`Editor.tsx`, `Button`, `Anchor`,
156+
`Tip`, `Footer`).
157+
- **`Source/Library/`** - helpers (`Create`, `Pad`, `Persist`, `Environment`).
174158
- **`Source/Function/`** - utilities (`Merge`).
175159
- **`Source/Stylesheet/`** - SCSS (`Element/*`, `Mixin/*`).
176160
- **`Source/Variable/`** - ESBuild config + `StringURL` constant.
Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,42 @@
1-
import*as e from"../Constant/EnvironmentConstant.js";var r={color:!0,format:"esm",logLevel:"debug",metafile:!0,minify:!e.On,outdir:"Configuration",platform:"node",target:"esnext",tsconfig:"tsconfig.json",write:!0,legalComments:e.On?"inline":"none",bundle:e.Bundle,assetNames:"Asset/[name]-[hash]",sourcemap:e.On,drop:e.On?[]:["debugger"],ignoreAnnotations:!e.On,keepNames:e.On,plugins:[{name:"Target",setup({onStart:t,initialOptions:{outdir:n}}){!0===(e.Clean===!0)&&t(async()=>{try{n&&await(await import("node:fs/promises")).rm(n,{recursive:!0})}catch(o){console.log(o)}})}}],outbase:"Source/Configuration",loader:{".json":"copy",".sh":"copy"}};export{r as default};
1+
import * as e from "../Constant/EnvironmentConstant.js";
2+
3+
var r = {
4+
color: !0,
5+
format: "esm",
6+
logLevel: "debug",
7+
metafile: !0,
8+
minify: !e.On,
9+
outdir: "Configuration",
10+
platform: "node",
11+
target: "esnext",
12+
tsconfig: "tsconfig.json",
13+
write: !0,
14+
legalComments: e.On ? "inline" : "none",
15+
bundle: e.Bundle,
16+
assetNames: "Asset/[name]-[hash]",
17+
sourcemap: e.On,
18+
drop: e.On ? [] : ["debugger"],
19+
ignoreAnnotations: !e.On,
20+
keepNames: e.On,
21+
plugins: [
22+
{
23+
name: "Target",
24+
setup({ onStart: t, initialOptions: { outdir: n } }) {
25+
!0 === (e.Clean === !0) &&
26+
t(async () => {
27+
try {
28+
n &&
29+
(await (
30+
await import("node:fs/promises")
31+
).rm(n, { recursive: !0 }));
32+
} catch (o) {
33+
console.log(o);
34+
}
35+
});
36+
},
37+
},
38+
],
39+
outbase: "Source/Configuration",
40+
loader: { ".json": "copy", ".sh": "copy" },
41+
};
42+
export { r as default };
Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,12 @@
1-
import t from"./TargetConfig.js";const i=(await import("deepmerge-ts")).deepmergeCustom({mergeArrays:!1});var r=async e=>i(await t(e),{bundle:!0,outbase:"Target",tsconfig:"Configuration/tsconfig/Target/Compile.json",plugins:[],allowOverwrite:!0});export{r as default};
1+
import t from "./TargetConfig.js";
2+
3+
const i = (await import("deepmerge-ts")).deepmergeCustom({ mergeArrays: !1 });
4+
var r = async (e) =>
5+
i(await t(e), {
6+
bundle: !0,
7+
outbase: "Target",
8+
tsconfig: "Configuration/tsconfig/Target/Compile.json",
9+
plugins: [],
10+
allowOverwrite: !0,
11+
});
12+
export { r as default };
Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,56 @@
1-
import{deepmerge as n}from"deepmerge-ts";import*as e from"../Constant/EnvironmentConstant.js";import p from"./BaseConfig.js";const a={"import.meta.env.Authorize":JSON.stringify(process.env.Authorize??""),"import.meta.env.Beam":JSON.stringify(process.env.Beam??"https://eu.i.posthog.com"),"import.meta.env.Report":JSON.stringify(process.env.Report??"true"),"import.meta.env.Replay":JSON.stringify(process.env.Replay??"false"),"import.meta.env.Ask":JSON.stringify(process.env.Ask??"false"),"import.meta.env.Brand":JSON.stringify(process.env.Brand??"")};async function m(o){return n(p,{outdir:"Target",drop:e.On?[]:["debugger","console"],define:{__DEV__:e.On?"true":"false",__INCREMENT__:`"${`${e.On?"DEVELOPMENT":"PRODUCTION"}-${(await import("ulid")).ulid()}`}"`,...a},treeShaking:!e.On,entryPoints:(await import("@playform/build/Target/Function/Entry.js")).default(o,["Source/Configuration/*"]),platform:"browser",outbase:"Source",plugins:e.Compile?n(o.plugins||[],[{name:"Compile",setup({onEnd:r}){r(async({metafile:s})=>{const i=s?.outputs;for(const t in i)Object.prototype.hasOwnProperty.call(i,t)&&t.endsWith(".js")&&(await import("@playform/build/Target/Function/Exec.js")).default(`Build '${t}' --ESBuild Configuration/ESBuild/Target/Compile.js --TypeScript Configuration/tsconfig/Target/Compile.json`)})}}]):[]})}export{m as default};
1+
import { deepmerge as n } from "deepmerge-ts";
2+
3+
import * as e from "../Constant/EnvironmentConstant.js";
4+
import p from "./BaseConfig.js";
5+
6+
const a = {
7+
"import.meta.env.Authorize": JSON.stringify(process.env.Authorize ?? ""),
8+
"import.meta.env.Beam": JSON.stringify(
9+
process.env.Beam ?? "https://eu.i.posthog.com",
10+
),
11+
"import.meta.env.Report": JSON.stringify(process.env.Report ?? "true"),
12+
"import.meta.env.Replay": JSON.stringify(process.env.Replay ?? "false"),
13+
"import.meta.env.Ask": JSON.stringify(process.env.Ask ?? "false"),
14+
"import.meta.env.Brand": JSON.stringify(process.env.Brand ?? ""),
15+
};
16+
async function m(o) {
17+
return n(p, {
18+
outdir: "Target",
19+
drop: e.On ? [] : ["debugger", "console"],
20+
define: {
21+
__DEV__: e.On ? "true" : "false",
22+
__INCREMENT__: `"${`${e.On ? "DEVELOPMENT" : "PRODUCTION"}-${(await import("ulid")).ulid()}`}"`,
23+
...a,
24+
},
25+
treeShaking: !e.On,
26+
entryPoints: (
27+
await import("@playform/build/Target/Function/Entry.js")
28+
).default(o, ["Source/Configuration/*"]),
29+
platform: "browser",
30+
outbase: "Source",
31+
plugins: e.Compile
32+
? n(o.plugins || [], [
33+
{
34+
name: "Compile",
35+
setup({ onEnd: r }) {
36+
r(async ({ metafile: s }) => {
37+
const i = s?.outputs;
38+
for (const t in i)
39+
Object.prototype.hasOwnProperty.call(
40+
i,
41+
t,
42+
) &&
43+
t.endsWith(".js") &&
44+
(
45+
await import("@playform/build/Target/Function/Exec.js")
46+
).default(
47+
`Build '${t}' --ESBuild Configuration/ESBuild/Target/Compile.js --TypeScript Configuration/tsconfig/Target/Compile.json`,
48+
);
49+
});
50+
},
51+
},
52+
])
53+
: [],
54+
});
55+
}
56+
export { m as default };
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
const{sep:o,posix:p}=await import("node:path");export{p as posix,o as sep};
1+
const { sep: o, posix: p } = await import("node:path");
2+
export { p as posix, o as sep };
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1-
const e=process.env.NODE_ENV==="development"||process.env.TAURI_ENV_DEBUG==="true",o=process.env.Clean==="true",n=process.env.Bundle==="true",s=process.env.Compile==="true";export{n as Bundle,o as Clean,s as Compile,e as On};
1+
const e =
2+
process.env.NODE_ENV === "development" ||
3+
process.env.TAURI_ENV_DEBUG === "true",
4+
o = process.env.Clean === "true",
5+
n = process.env.Bundle === "true",
6+
s = process.env.Compile === "true";
7+
export { n as Bundle, o as Clean, s as Compile, e as On };
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
const{sep:o,posix:p}=await import("node:path");export{p as posix,o as sep};
1+
const { sep: o, posix: p } = await import("node:path");
2+
export { p as posix, o as sep };

0 commit comments

Comments
 (0)