@lepid-labs/weft 0.1.0 → 0.1.2
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.
- package/dist/commands/serve.js +65 -7
- package/dist/commands/serve.js.map +1 -1
- package/dist/styles.js +50 -0
- package/dist/styles.js.map +1 -0
- package/dist/styles.test.js +48 -0
- package/dist/styles.test.js.map +1 -0
- package/dist/ui-server.js +90 -6
- package/dist/ui-server.js.map +1 -1
- package/dist/ui-server.test.js +105 -2
- package/dist/ui-server.test.js.map +1 -1
- package/package.json +4 -4
package/dist/commands/serve.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { WeftService, fetchRepo, loadConfig, resolveFetchedRepos } from "@lepid-labs/weft-core";
|
|
2
2
|
import { command } from "cleye";
|
|
3
3
|
import { openBrowser } from "../open-browser.js";
|
|
4
|
-
import {
|
|
4
|
+
import { UnknownStyleError, assertServableStyle, loadStyleRoster, parseStyleFlag, } from "../styles.js";
|
|
5
|
+
import { browserHost, chooseUiMode, isPortInUse, selfCheck, startBuiltServer, startDevServer, statusTag, } from "../ui-server.js";
|
|
5
6
|
export const serveCommand = command({
|
|
6
7
|
name: "serve",
|
|
7
8
|
help: {
|
|
@@ -14,6 +15,11 @@ export const serveCommand = command({
|
|
|
14
15
|
description: "Port to serve on",
|
|
15
16
|
default: 7777,
|
|
16
17
|
},
|
|
18
|
+
host: {
|
|
19
|
+
type: String,
|
|
20
|
+
description: "Interface to listen on (0.0.0.0 or :: to expose it on every interface)",
|
|
21
|
+
default: "127.0.0.1",
|
|
22
|
+
},
|
|
17
23
|
open: {
|
|
18
24
|
type: Boolean,
|
|
19
25
|
description: "Open the browser once the server is up",
|
|
@@ -41,6 +47,14 @@ export const serveCommand = command({
|
|
|
41
47
|
description: "Re-resolve fetched refs even when the cached resolution is fresh",
|
|
42
48
|
default: false,
|
|
43
49
|
},
|
|
50
|
+
style: {
|
|
51
|
+
type: String,
|
|
52
|
+
description: "ui-std-lib style: one theme name, or a dark/light pair (e.g. luminous-precision/summer-cloud); overrides the config",
|
|
53
|
+
},
|
|
54
|
+
styleUrl: {
|
|
55
|
+
type: String,
|
|
56
|
+
description: "Base URL serving ui-std-lib theme CSS and manifest.json, for a style newer than the bundled set",
|
|
57
|
+
},
|
|
44
58
|
},
|
|
45
59
|
}, async (argv) => {
|
|
46
60
|
const port = argv.flags.port;
|
|
@@ -52,6 +66,7 @@ export const serveCommand = command({
|
|
|
52
66
|
// drive letter on Windows (`/C:/...`), which resolve() then mangles.
|
|
53
67
|
const require = createRequire(import.meta.url);
|
|
54
68
|
const uiRoot = dirname(require.resolve("@lepid-labs/weft-ui/package.json"));
|
|
69
|
+
const { version } = require("../../package.json");
|
|
55
70
|
if (argv.flags.repo && argv.flags.gh && argv.flags.repo !== argv.flags.gh) {
|
|
56
71
|
console.error("serve: --repo and --gh name different repos; pass one of them");
|
|
57
72
|
process.exit(1);
|
|
@@ -61,6 +76,15 @@ export const serveCommand = command({
|
|
|
61
76
|
console.error("serve: pass either a root directory or --repo, not both");
|
|
62
77
|
process.exit(1);
|
|
63
78
|
}
|
|
79
|
+
// A malformed --style fails before anything is fetched or indexed.
|
|
80
|
+
let styleFlag;
|
|
81
|
+
try {
|
|
82
|
+
styleFlag = argv.flags.style === undefined ? undefined : parseStyleFlag(argv.flags.style);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.error(err instanceof Error ? err.message : err);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
64
88
|
try {
|
|
65
89
|
// Decide how the UI is served before fetching anything, so a missing
|
|
66
90
|
// build fails fast rather than after a clone.
|
|
@@ -86,17 +110,42 @@ export const serveCommand = command({
|
|
|
86
110
|
// local checkout wins, everything else is fetched at its HEAD.
|
|
87
111
|
config = await resolveFetchedRepos(config, { refresh: argv.flags.refresh });
|
|
88
112
|
}
|
|
113
|
+
// Flags outrank both config files: the committed one and the local
|
|
114
|
+
// override. With --repo the local file would live inside the fetch
|
|
115
|
+
// cache, so the flag is the only per-run override there.
|
|
116
|
+
if (styleFlag)
|
|
117
|
+
config = { ...config, style: styleFlag };
|
|
118
|
+
if (argv.flags.styleUrl)
|
|
119
|
+
config = { ...config, styleUrl: argv.flags.styleUrl };
|
|
120
|
+
// A name nothing can serve fails here, not in the browser — the UI
|
|
121
|
+
// runs the same check, but only once a page is requested.
|
|
122
|
+
assertServableStyle(config.style, config.styleUrl, loadStyleRoster(uiRoot));
|
|
89
123
|
const service = new WeftService(config);
|
|
90
|
-
await service.rebuild();
|
|
124
|
+
const manifest = await service.rebuild();
|
|
91
125
|
await service.writeManifest();
|
|
126
|
+
console.log(`Indexed ${manifest.nodes.length} docs, ${manifest.edges.length} edges in ${rootDir}`);
|
|
92
127
|
// SvelteKit's server loads read the manifest file from this path — SSR
|
|
93
128
|
// cannot reach the /api handler through SvelteKit's internal fetch.
|
|
94
129
|
process.env.WEFT_MANIFEST_PATH = service.manifestPath;
|
|
130
|
+
const host = argv.flags.host;
|
|
95
131
|
const server = mode === "built"
|
|
96
|
-
? await startBuiltServer(service, uiRoot, port)
|
|
97
|
-
: await startDevServer(service, uiRoot, port);
|
|
98
|
-
const url = `http
|
|
99
|
-
console.log(`Weft
|
|
132
|
+
? await startBuiltServer(service, uiRoot, port, host)
|
|
133
|
+
: await startDevServer(service, uiRoot, port, host);
|
|
134
|
+
const url = `http://${browserHost(host)}:${port}`;
|
|
135
|
+
console.log(`Weft ${version} on Node ${process.version}, listening on ${server.address}`);
|
|
136
|
+
// Prove the url works from here before announcing it or sending a
|
|
137
|
+
// browser to it, so a browser that still cannot connect is known to be
|
|
138
|
+
// blocked on its side.
|
|
139
|
+
const check = await selfCheck(url);
|
|
140
|
+
const running = `Weft server running at ${url}${mode === "dev" ? " (vite dev)" : ""}`;
|
|
141
|
+
if (check.ok) {
|
|
142
|
+
console.log(`${statusTag(true)} ${running}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.error(`${statusTag(false)} ${running}`);
|
|
146
|
+
console.error(`Self-check failed (${check.reason}): the server is listening on ${server.address} ` +
|
|
147
|
+
`but ${url} does not answer from this process. Try another --port, or another --host.`);
|
|
148
|
+
}
|
|
100
149
|
if (argv.flags.open)
|
|
101
150
|
openBrowser(url);
|
|
102
151
|
// Watch for doc changes
|
|
@@ -114,7 +163,16 @@ export const serveCommand = command({
|
|
|
114
163
|
process.on("SIGTERM", shutdown);
|
|
115
164
|
}
|
|
116
165
|
catch (err) {
|
|
117
|
-
|
|
166
|
+
if (err instanceof UnknownStyleError) {
|
|
167
|
+
console.error(`serve: ${err.message}`);
|
|
168
|
+
}
|
|
169
|
+
else if (isPortInUse(err)) {
|
|
170
|
+
const where = `${argv.flags.host}:${port}`;
|
|
171
|
+
console.error(`${where} is already in use — another Weft, or something else. Pass --port to pick another.`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.error("Failed to start server:", err);
|
|
175
|
+
}
|
|
118
176
|
process.exit(1);
|
|
119
177
|
}
|
|
120
178
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { validateStyle } from "@lepid-labs/weft-core";
|
|
4
|
+
/**
|
|
5
|
+
* `--style <name>` picks one theme; `--style <dark>/<light>` a pair the
|
|
6
|
+
* light/dark toggle switches between. Same shapes `style` takes in
|
|
7
|
+
* weft.config.yaml, and the same shape check.
|
|
8
|
+
*/
|
|
9
|
+
export function parseStyleFlag(value) {
|
|
10
|
+
const parts = value.split("/");
|
|
11
|
+
const style = parts.length === 2 ? { dark: parts[0], light: parts[1] } : value;
|
|
12
|
+
if (parts.length > 2 || parts.some((p) => p.length === 0)) {
|
|
13
|
+
throw new Error(`serve: --style takes a style name, or a dark/light pair such as luminous-precision/summer-cloud (got "${value}")`);
|
|
14
|
+
}
|
|
15
|
+
validateStyle(style, "--style");
|
|
16
|
+
return style;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Read the ui-std-lib manifest the UI was built against. The CLI does not
|
|
20
|
+
* depend on @nazuraki/styles itself — it is the UI's dependency — so resolve
|
|
21
|
+
* it from the UI package's directory, which works under both pnpm's nested
|
|
22
|
+
* layout and npm's hoisted one.
|
|
23
|
+
*/
|
|
24
|
+
export function loadStyleRoster(uiRoot) {
|
|
25
|
+
const require = createRequire(resolve(uiRoot, "package.json"));
|
|
26
|
+
const manifest = require("@nazuraki/styles/manifest");
|
|
27
|
+
return manifest.themes;
|
|
28
|
+
}
|
|
29
|
+
/** A style the bundled roster lacks, with no `styleUrl` to fetch it from. */
|
|
30
|
+
export class UnknownStyleError extends Error {
|
|
31
|
+
constructor(name, roster) {
|
|
32
|
+
super(`unknown style "${name}" — bundled styles are ${Object.keys(roster).join(", ")}; pass --style-url to load a newer one`);
|
|
33
|
+
this.name = "UnknownStyleError";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reject a style nothing can serve: a name the bundled roster lacks with no
|
|
38
|
+
* `styleUrl` to fetch it from. Mirrors the UI's own check, but runs before the
|
|
39
|
+
* server starts, so a typo fails here rather than in the browser.
|
|
40
|
+
*/
|
|
41
|
+
export function assertServableStyle(style, styleUrl, roster) {
|
|
42
|
+
if (!style || styleUrl)
|
|
43
|
+
return;
|
|
44
|
+
const names = typeof style === "string" ? [style] : [style.dark, style.light];
|
|
45
|
+
for (const name of names) {
|
|
46
|
+
if (!(name in roster))
|
|
47
|
+
throw new UnknownStyleError(name, roster);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAY,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACd,yGAAyG,KAAK,IAAI,CAClH,CAAC;IACH,CAAC;IACD,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC;AACd,CAAC;AAKD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,2BAA2B,CAA4B,CAAC;IACjF,OAAO,QAAQ,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,6EAA6E;AAC7E,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC3C,YAAY,IAAY,EAAE,MAAmB;QAC5C,KAAK,CACJ,kBAAkB,IAAI,0BAA0B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CACtH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACjC,CAAC;CACD;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAClC,KAA8B,EAC9B,QAA4B,EAC5B,MAAmB;IAEnB,IAAI,CAAC,KAAK,IAAI,QAAQ;QAAE,OAAO;IAC/B,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;YAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { assertServableStyle, loadStyleRoster, parseStyleFlag } from "./styles.js";
|
|
5
|
+
const ROSTER = {
|
|
6
|
+
"luminous-precision": { scheme: "dark" },
|
|
7
|
+
"summer-cloud": { scheme: "light" },
|
|
8
|
+
};
|
|
9
|
+
describe("parseStyleFlag", () => {
|
|
10
|
+
it("takes a single name", () => {
|
|
11
|
+
expect(parseStyleFlag("summer-cloud")).toBe("summer-cloud");
|
|
12
|
+
});
|
|
13
|
+
it("takes a dark/light pair", () => {
|
|
14
|
+
expect(parseStyleFlag("luminous-precision/summer-cloud")).toEqual({
|
|
15
|
+
dark: "luminous-precision",
|
|
16
|
+
light: "summer-cloud",
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it.each(["", "/", "a/", "/b", "a/b/c"])("rejects %j", (value) => {
|
|
20
|
+
expect(() => parseStyleFlag(value)).toThrow(/--style/);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe("assertServableStyle", () => {
|
|
24
|
+
it("accepts bundled names, single or paired", () => {
|
|
25
|
+
expect(() => assertServableStyle("summer-cloud", undefined, ROSTER)).not.toThrow();
|
|
26
|
+
expect(() => assertServableStyle({ dark: "luminous-precision", light: "summer-cloud" }, undefined, ROSTER)).not.toThrow();
|
|
27
|
+
});
|
|
28
|
+
it("accepts no style at all", () => {
|
|
29
|
+
expect(() => assertServableStyle(undefined, undefined, ROSTER)).not.toThrow();
|
|
30
|
+
});
|
|
31
|
+
it("names the unknown style and the roster", () => {
|
|
32
|
+
expect(() => assertServableStyle("neon-typo", undefined, ROSTER)).toThrow(/unknown style "neon-typo" — bundled styles are luminous-precision, summer-cloud/);
|
|
33
|
+
expect(() => assertServableStyle({ dark: "nope", light: "summer-cloud" }, undefined, ROSTER)).toThrow(/unknown style "nope"/);
|
|
34
|
+
});
|
|
35
|
+
it("defers to styleUrl for names the roster lacks", () => {
|
|
36
|
+
expect(() => assertServableStyle("some-future-theme", "https://cdn.example/styles", ROSTER)).not.toThrow();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("loadStyleRoster", () => {
|
|
40
|
+
it("reads the manifest the UI package depends on", () => {
|
|
41
|
+
const require = createRequire(import.meta.url);
|
|
42
|
+
const uiRoot = dirname(require.resolve("@lepid-labs/weft-ui/package.json"));
|
|
43
|
+
const roster = loadStyleRoster(uiRoot);
|
|
44
|
+
expect(roster["luminous-precision"]?.scheme).toBe("dark");
|
|
45
|
+
expect(roster["summer-cloud"]?.scheme).toBe("light");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=styles.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.test.js","sourceRoot":"","sources":["../src/styles.test.ts"],"names":[],"mappings":"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"}
|
package/dist/ui-server.js
CHANGED
|
@@ -53,22 +53,101 @@ export function routeRequest(service, ui) {
|
|
|
53
53
|
});
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
+
/** Render `server.address()` for a log line. */
|
|
57
|
+
export function describeAddress(address) {
|
|
58
|
+
if (!address)
|
|
59
|
+
return "(not listening)";
|
|
60
|
+
if (typeof address === "string")
|
|
61
|
+
return address;
|
|
62
|
+
const host = address.family === "IPv6" ? `[${address.address}]` : address.address;
|
|
63
|
+
return `${host}:${address.port}`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The host to put in the url the browser is sent to. A wildcard bind (or
|
|
67
|
+
* none, which binds every interface) is reached as `localhost`; an explicit
|
|
68
|
+
* host is used as given, bracketed if it is an IPv6 literal.
|
|
69
|
+
*
|
|
70
|
+
* The serve command defaults `--host` to `127.0.0.1` rather than binding
|
|
71
|
+
* every interface: a wildcard bind is allowed to share its port with a
|
|
72
|
+
* process bound to a specific address, so it starts without complaint and
|
|
73
|
+
* the printed url reaches the other process. A loopback bind collides
|
|
74
|
+
* loudly instead.
|
|
75
|
+
*/
|
|
76
|
+
export function browserHost(host) {
|
|
77
|
+
if (host === undefined || host === "0.0.0.0" || host === "::")
|
|
78
|
+
return "localhost";
|
|
79
|
+
return host.includes(":") ? `[${host}]` : host;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* True for the error a listen raises when the port is taken: Node's
|
|
83
|
+
* `EADDRINUSE`, or Vite's plain-message rejection under `strictPort`.
|
|
84
|
+
*/
|
|
85
|
+
export function isPortInUse(err) {
|
|
86
|
+
if (!(err instanceof Error))
|
|
87
|
+
return false;
|
|
88
|
+
if (err.code === "EADDRINUSE")
|
|
89
|
+
return true;
|
|
90
|
+
return /already in use/i.test(err.message);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* `[OK]` or `[FAIL]` for a log line, coloured when stdout is a terminal that
|
|
94
|
+
* has not asked for plain output (`NO_COLOR`, https://no-color.org).
|
|
95
|
+
*/
|
|
96
|
+
export function statusTag(ok, stream = process.stdout) {
|
|
97
|
+
const label = ok ? "OK" : "FAIL";
|
|
98
|
+
const colour = !!stream.isTTY && !process.env.NO_COLOR;
|
|
99
|
+
return colour ? `[\x1b[${ok ? 32 : 31}m${label}\x1b[0m]` : `[${label}]`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Request the UI and the API from inside the process, before the browser is
|
|
103
|
+
* asked to. A pass proves the server answers at the url that was printed, so
|
|
104
|
+
* a browser that still cannot reach it is being kept away by something on
|
|
105
|
+
* its own side (a proxy that does not bypass localhost, a policy, a firewall);
|
|
106
|
+
* a failure names the first path that broke and the socket-level reason.
|
|
107
|
+
*/
|
|
108
|
+
export async function selfCheck(url, timeoutMs = 5000) {
|
|
109
|
+
for (const path of ["/api/manifest", "/"]) {
|
|
110
|
+
try {
|
|
111
|
+
const res = await fetch(url + path, { signal: AbortSignal.timeout(timeoutMs) });
|
|
112
|
+
if (!res.ok) {
|
|
113
|
+
return {
|
|
114
|
+
ok: false,
|
|
115
|
+
reason: `GET ${path} → HTTP ${res.status} (is something else answering on that port?)`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
await res.arrayBuffer(); // drain, so the connection is released
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
return { ok: false, reason: `GET ${path}: ${describeError(err)}` };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { ok: true };
|
|
125
|
+
}
|
|
126
|
+
function describeError(err) {
|
|
127
|
+
// undici reports the socket error as `fetch failed` with the real one as `cause`.
|
|
128
|
+
const cause = err?.cause;
|
|
129
|
+
const e = cause instanceof Error ? cause : err instanceof Error ? err : undefined;
|
|
130
|
+
if (!e)
|
|
131
|
+
return String(err);
|
|
132
|
+
const code = e.code;
|
|
133
|
+
return code ? `${code}: ${e.message}` : e.message;
|
|
134
|
+
}
|
|
56
135
|
/** Serve the adapter-node build over plain `node:http`, the API in front of it. */
|
|
57
|
-
export async function startBuiltServer(service, uiRoot, port) {
|
|
136
|
+
export async function startBuiltServer(service, uiRoot, port, host) {
|
|
58
137
|
const entry = pathToFileURL(join(uiRoot, BUILT_HANDLER)).href;
|
|
59
138
|
const { handler } = (await import(entry));
|
|
60
139
|
const server = createServer(routeRequest(service, handler));
|
|
61
140
|
await new Promise((resolve, reject) => {
|
|
62
141
|
server.once("error", reject);
|
|
63
|
-
server.listen(port, () => {
|
|
142
|
+
server.listen(port, host, () => {
|
|
64
143
|
server.off("error", reject);
|
|
65
144
|
resolve();
|
|
66
145
|
});
|
|
67
146
|
});
|
|
68
|
-
return { close: () => void server.close() };
|
|
147
|
+
return { close: () => void server.close(), address: describeAddress(server.address()) };
|
|
69
148
|
}
|
|
70
149
|
/** Serve the UI source through Vite's dev server, with the API as a plugin. */
|
|
71
|
-
export async function startDevServer(service, uiRoot, port) {
|
|
150
|
+
export async function startDevServer(service, uiRoot, port, host) {
|
|
72
151
|
let createViteServer;
|
|
73
152
|
try {
|
|
74
153
|
({ createServer: createViteServer } = await import("vite"));
|
|
@@ -82,10 +161,15 @@ export async function startDevServer(service, uiRoot, port) {
|
|
|
82
161
|
process.chdir(uiRoot);
|
|
83
162
|
const server = await createViteServer({
|
|
84
163
|
root: uiRoot,
|
|
85
|
-
|
|
164
|
+
// strictPort: Vite would otherwise move to the next free port on its own,
|
|
165
|
+
// and the url the command prints would name a port nothing listens on.
|
|
166
|
+
server: { port, host, strictPort: true },
|
|
86
167
|
plugins: [weftApiPlugin(service)],
|
|
87
168
|
});
|
|
88
169
|
await server.listen();
|
|
89
|
-
return {
|
|
170
|
+
return {
|
|
171
|
+
close: () => void server.close(),
|
|
172
|
+
address: describeAddress(server.httpServer?.address()),
|
|
173
|
+
};
|
|
90
174
|
}
|
|
91
175
|
//# sourceMappingURL=ui-server.js.map
|
package/dist/ui-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-server.js","sourceRoot":"","sources":["../src/ui-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAA6C,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-server.js","sourceRoot":"","sources":["../src/ui-server.ts"],"names":[],"mappings":"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"}
|
package/dist/ui-server.test.js
CHANGED
|
@@ -4,8 +4,8 @@ import { tmpdir } from "node:os";
|
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { WeftService } from "@lepid-labs/weft-core";
|
|
7
|
-
import { afterAll, afterEach, beforeAll, describe, expect, it } from "vitest";
|
|
8
|
-
import { BUILT_HANDLER, chooseUiMode, routeRequest } from "./ui-server.js";
|
|
7
|
+
import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from "vitest";
|
|
8
|
+
import { BUILT_HANDLER, browserHost, chooseUiMode, describeAddress, isPortInUse, routeRequest, selfCheck, startBuiltServer, statusTag, } from "./ui-server.js";
|
|
9
9
|
const __dirname = resolve(fileURLToPath(import.meta.url), "..");
|
|
10
10
|
const FIXTURES_DIR = resolve(__dirname, "__fixtures__");
|
|
11
11
|
describe("chooseUiMode", () => {
|
|
@@ -101,5 +101,108 @@ describe("routeRequest", () => {
|
|
|
101
101
|
const res = await fetch(`${base}/apiary`);
|
|
102
102
|
expect(await res.text()).toBe("ui:/apiary");
|
|
103
103
|
});
|
|
104
|
+
it("passes the self-check when both the API and the UI answer", async () => {
|
|
105
|
+
expect(await selfCheck(base)).toEqual({ ok: true });
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe("selfCheck", () => {
|
|
109
|
+
it("names the socket error when nothing is listening", async () => {
|
|
110
|
+
// Bind to learn a free port, then release it so the check hits a closed one.
|
|
111
|
+
const probe = createServer();
|
|
112
|
+
await new Promise((done) => probe.listen(0, "127.0.0.1", done));
|
|
113
|
+
const { port } = probe.address();
|
|
114
|
+
await new Promise((done) => probe.close(() => done()));
|
|
115
|
+
const result = await selfCheck(`http://127.0.0.1:${port}`);
|
|
116
|
+
expect(result.ok).toBe(false);
|
|
117
|
+
if (result.ok)
|
|
118
|
+
return;
|
|
119
|
+
expect(result.reason).toMatch(/^GET \/api\/manifest: ECONNREFUSED/);
|
|
120
|
+
});
|
|
121
|
+
it("reports the first path that does not answer 2xx", async () => {
|
|
122
|
+
const server = createServer((req, res) => {
|
|
123
|
+
res.statusCode = req.url === "/" ? 500 : 200;
|
|
124
|
+
res.end("{}");
|
|
125
|
+
});
|
|
126
|
+
await new Promise((done) => server.listen(0, "127.0.0.1", done));
|
|
127
|
+
const { port } = server.address();
|
|
128
|
+
try {
|
|
129
|
+
expect(await selfCheck(`http://127.0.0.1:${port}`)).toEqual({
|
|
130
|
+
ok: false,
|
|
131
|
+
reason: "GET / → HTTP 500 (is something else answering on that port?)",
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
server.close();
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe("describeAddress", () => {
|
|
140
|
+
it("renders IPv4 and IPv6 socket addresses", () => {
|
|
141
|
+
expect(describeAddress({ address: "127.0.0.1", family: "IPv4", port: 7777 })).toBe("127.0.0.1:7777");
|
|
142
|
+
expect(describeAddress({ address: "::", family: "IPv6", port: 7777 })).toBe("[::]:7777");
|
|
143
|
+
});
|
|
144
|
+
it("passes a pipe path through and names a server that is not listening", () => {
|
|
145
|
+
expect(describeAddress("/tmp/weft.sock")).toBe("/tmp/weft.sock");
|
|
146
|
+
expect(describeAddress(null)).toBe("(not listening)");
|
|
147
|
+
expect(describeAddress(undefined)).toBe("(not listening)");
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe("browserHost", () => {
|
|
151
|
+
it("sends the browser to localhost for the default and wildcard binds", () => {
|
|
152
|
+
expect(browserHost(undefined)).toBe("localhost");
|
|
153
|
+
expect(browserHost("0.0.0.0")).toBe("localhost");
|
|
154
|
+
expect(browserHost("::")).toBe("localhost");
|
|
155
|
+
});
|
|
156
|
+
it("uses an explicit host as given, bracketing IPv6 literals", () => {
|
|
157
|
+
expect(browserHost("127.0.0.1")).toBe("127.0.0.1");
|
|
158
|
+
expect(browserHost("::1")).toBe("[::1]");
|
|
159
|
+
expect(browserHost("docs.local")).toBe("docs.local");
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe("isPortInUse", () => {
|
|
163
|
+
it("recognises Node's EADDRINUSE and Vite's strictPort rejection", () => {
|
|
164
|
+
expect(isPortInUse(Object.assign(new Error("listen EADDRINUSE"), { code: "EADDRINUSE" }))).toBe(true);
|
|
165
|
+
expect(isPortInUse(new Error("Port 7777 is already in use"))).toBe(true);
|
|
166
|
+
});
|
|
167
|
+
it("leaves every other failure alone", () => {
|
|
168
|
+
expect(isPortInUse(new Error("ENOENT: no such file"))).toBe(false);
|
|
169
|
+
expect(isPortInUse("EADDRINUSE")).toBe(false);
|
|
170
|
+
expect(isPortInUse(undefined)).toBe(false);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe("startBuiltServer", () => {
|
|
174
|
+
it("fails with a port-in-use error rather than sharing a taken port", async () => {
|
|
175
|
+
// __fixtures__/ui-stub holds a stand-in for the adapter-node build.
|
|
176
|
+
const uiRoot = join(FIXTURES_DIR, "ui-stub");
|
|
177
|
+
const service = new WeftService({
|
|
178
|
+
rootDir: FIXTURES_DIR,
|
|
179
|
+
docsDir: "docs",
|
|
180
|
+
entryPoint: "docs/README.md",
|
|
181
|
+
ignore: [],
|
|
182
|
+
});
|
|
183
|
+
const occupant = createServer((_req, res) => res.end("not weft"));
|
|
184
|
+
await new Promise((done) => occupant.listen(0, "127.0.0.1", done));
|
|
185
|
+
const { port } = occupant.address();
|
|
186
|
+
try {
|
|
187
|
+
await expect(startBuiltServer(service, uiRoot, port, "127.0.0.1")).rejects.toSatisfy(isPortInUse);
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
occupant.close();
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe("statusTag", () => {
|
|
195
|
+
afterEach(() => vi.unstubAllEnvs());
|
|
196
|
+
it("colours the label green or red on a terminal", () => {
|
|
197
|
+
vi.stubEnv("NO_COLOR", undefined);
|
|
198
|
+
expect(statusTag(true, { isTTY: true })).toBe("[\x1b[32mOK\x1b[0m]");
|
|
199
|
+
expect(statusTag(false, { isTTY: true })).toBe("[\x1b[31mFAIL\x1b[0m]");
|
|
200
|
+
});
|
|
201
|
+
it("stays plain when piped or when NO_COLOR is set", () => {
|
|
202
|
+
vi.stubEnv("NO_COLOR", undefined);
|
|
203
|
+
expect(statusTag(true, { isTTY: false })).toBe("[OK]");
|
|
204
|
+
vi.stubEnv("NO_COLOR", "1");
|
|
205
|
+
expect(statusTag(true, { isTTY: true })).toBe("[OK]");
|
|
206
|
+
});
|
|
104
207
|
});
|
|
105
208
|
//# sourceMappingURL=ui-server.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-server.test.js","sourceRoot":"","sources":["../src/ui-server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAA0D,YAAY,EAAE,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE3E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAExD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,SAAS,MAAM,CAAC,IAA2C;QAC1D,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,IAAI,CAAC,MAAM;YAAE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,SAAS,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,IAAI,MAAc,CAAC;IACnB,IAAI,IAAY,CAAC;IACjB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,SAAS,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;YAC/B,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,gBAAgB;YAC5B,MAAM,EAAE,EAAE;SACV,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,0EAA0E;QAC1E,+DAA+D;QAC/D,MAAM,EAAE,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACxD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,OAAO,CAAO,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAElC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,4BAA4B,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACzF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ui-server.test.js","sourceRoot":"","sources":["../src/ui-server.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lepid-labs/weft",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Weft CLI: serve, index and check a documentation graph, from a checkout or straight from GitHub",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"weft": "bin/weft.js"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"
|
|
22
|
-
"@lepid-labs/weft-
|
|
23
|
-
"
|
|
21
|
+
"@lepid-labs/weft-core": "0.1.2",
|
|
22
|
+
"@lepid-labs/weft-ui": "0.1.2",
|
|
23
|
+
"cleye": "^1.3.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "^22.0.0",
|