@uniflowed/vite 0.10.0 → 0.11.1
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/driver.js +7 -6
- package/index.js +6 -8
- package/internal/devtools.js +1 -1
- package/internal/diagnostics.js +1 -1
- package/internal/flight.js +5 -5
- package/internal/flow-keywords.js +1 -1
- package/internal/frontmatter.js +6 -1
- package/internal/http.js +1 -1
- package/internal/markdown.js +33 -0
- package/internal/refresh-runtime.js +1 -1
- package/internal/routes.js +8 -7
- package/internal/rsc.js +5 -5
- package/internal/serve.js +2 -2
- package/internal/server-components.js +1 -1
- package/package.json +10 -10
package/driver.js
CHANGED
|
@@ -43,6 +43,7 @@ import { randomUUID } from "node:crypto";
|
|
|
43
43
|
import { createServer as createHttpServer } from "node:http";
|
|
44
44
|
import { builtinModules, register } from "node:module";
|
|
45
45
|
import { esmExternalRequirePlugin } from "rolldown/plugins";
|
|
46
|
+
import "@ox-content/napi";
|
|
46
47
|
import { installFlowHooks } from "@uniflowed/host/internal/sync-hooks.js";
|
|
47
48
|
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
48
49
|
import path from "node:path";
|
|
@@ -118,8 +119,8 @@ process.env.UF_PROJECT_ROOT = root;
|
|
|
118
119
|
// Deno has no `register` either, and it gets its hooks *here* rather than from
|
|
119
120
|
// a preload, for a reason that is about order. While a Deno `load` hook is
|
|
120
121
|
// registered, `require()` of a native addon fails — and Vite requires one,
|
|
121
|
-
// Rolldown's binding. The static imports
|
|
122
|
-
//
|
|
122
|
+
// Rolldown's binding and ox-content's Markdown parser. The static imports
|
|
123
|
+
// above load both native bindings before hooks, so hooks now see only what is
|
|
123
124
|
// imported after them: the config, and the `@uniflowed/*` modules this driver
|
|
124
125
|
// reaches dynamically. They are the in-thread hooks a new enough Node takes
|
|
125
126
|
// through `@uniflowed/host/register` too; see
|
|
@@ -785,7 +786,7 @@ async function build() {
|
|
|
785
786
|
// every build and read by nothing unless a project turned a durable cache on
|
|
786
787
|
// — at which point it is the thing that stops a deploy answering the new
|
|
787
788
|
// build's URLs with the previous build's documents. See
|
|
788
|
-
// `
|
|
789
|
+
// `npm/server/internal/cache-key.js`, which argues the whole of it, and
|
|
789
790
|
// `internal/serve.js`'s `buildIdentity`, which is what reads this.
|
|
790
791
|
writeFileSync(path.join(serverDir, BUILD_ID_FILE), `${buildId}\n`);
|
|
791
792
|
|
|
@@ -1401,7 +1402,7 @@ const ADAPTERS = {
|
|
|
1401
1402
|
// The same two files as `node`, with `@uniflowed/server/bun` in place of
|
|
1402
1403
|
// `@uniflowed/server/node`. That module is `./internal/static.js` for every
|
|
1403
1404
|
// decision and `Bun.file` for the bytes, which is where the measured win is
|
|
1404
|
-
// — see ubugeeei-prod/uf#391 and the header of `
|
|
1405
|
+
// — see ubugeeei-prod/uf#391 and the header of `npm/server/bun.js`.
|
|
1405
1406
|
//
|
|
1406
1407
|
// No `conditions` of its own, unlike `edge`. Bun honours a `bun` export
|
|
1407
1408
|
// condition and this deliberately does not ask for it: the measured win is
|
|
@@ -1475,7 +1476,7 @@ const ADAPTERS = {
|
|
|
1475
1476
|
worker: workerEntrySource("./handler.js", schedules),
|
|
1476
1477
|
}),
|
|
1477
1478
|
// Workers KV, through the same module seam a project's own provider goes
|
|
1478
|
-
// through. `
|
|
1479
|
+
// through. `npm/server/cache-kv.js` argues KV over the Cache API: the
|
|
1479
1480
|
// seam has to find every entry under a tag, and the Cache API cannot list
|
|
1480
1481
|
// what it holds.
|
|
1481
1482
|
regenerationStore: "@uniflowed/server/cache/kv",
|
|
@@ -1872,7 +1873,7 @@ async function deploy() {
|
|
|
1872
1873
|
* at all rather than something read at boot: the build id is a fact about the
|
|
1873
1874
|
* artefact being written, known here and nowhere later. `internal/serve.js`'s
|
|
1874
1875
|
* `buildIdentity` is where it came from and
|
|
1875
|
-
* `
|
|
1876
|
+
* `npm/server/internal/cache-key.js` is why it exists.
|
|
1876
1877
|
*/
|
|
1877
1878
|
function handlerEntrySource(document, cache, capabilities, build, regeneration, images, partial) {
|
|
1878
1879
|
const route = cache?.route === true;
|
package/index.js
CHANGED
|
@@ -24,10 +24,8 @@
|
|
|
24
24
|
// `internal/rsc.js` reads the RSC analysis and leaves out the
|
|
25
25
|
// page of every route no client boundary reaches, so that
|
|
26
26
|
// route's modules never enter the browser bundle.
|
|
27
|
-
// * `uf:mdx` —
|
|
28
|
-
//
|
|
29
|
-
// highlighting, so `.mdx` works with
|
|
30
|
-
// no configuration.
|
|
27
|
+
// * `uf:mdx` — ox-content's native Markdown/MDX parser, with React codegen,
|
|
28
|
+
// front matter, heading ids and build-time syntax highlighting.
|
|
31
29
|
// * `uf:barrel-imports` — a named import from `@uniflowed/ui` becomes an import
|
|
32
30
|
// from the file that defines the name, in every environment,
|
|
33
31
|
// so a page using one component loads that component's module
|
|
@@ -68,7 +66,7 @@ import { emit, reportRenderError, errorEvent } from "./internal/events.js";
|
|
|
68
66
|
import remarkFrontmatterExport from "./internal/frontmatter.js";
|
|
69
67
|
import { highlightPlugin } from "./internal/highlight.js";
|
|
70
68
|
import { moduleId } from "./internal/module-graph.js";
|
|
71
|
-
import
|
|
69
|
+
import remarkOxContent from "./internal/markdown.js";
|
|
72
70
|
import remarkGfm from "remark-gfm";
|
|
73
71
|
|
|
74
72
|
import {
|
|
@@ -1346,7 +1344,7 @@ function mdxPlugin(markdown) {
|
|
|
1346
1344
|
// key's old default, which has no runtime in it — where the config is
|
|
1347
1345
|
// read, so it never arrives here.
|
|
1348
1346
|
jsxImportSource: mdxConfig.jsxImportSource ?? "react",
|
|
1349
|
-
remarkPlugins: [remarkGfm,
|
|
1347
|
+
remarkPlugins: [remarkGfm, remarkOxContent, remarkFrontmatterExport],
|
|
1350
1348
|
rehypePlugins,
|
|
1351
1349
|
}),
|
|
1352
1350
|
name: "uf:mdx",
|
|
@@ -1465,7 +1463,7 @@ const ALL_DIAGNOSTICS = "UF_REACT_COMPILER_DIAGNOSTICS";
|
|
|
1465
1463
|
*
|
|
1466
1464
|
* The position is real too, and is the expression the compiler objected to
|
|
1467
1465
|
* rather than the function containing it, so the two halves of the line say
|
|
1468
|
-
* different things — `
|
|
1466
|
+
* different things — `npm/hooks/dom.js:195:7: This value cannot be
|
|
1469
1467
|
* modified (in useLongPress)` locates the write and names the hook to look in.
|
|
1470
1468
|
*
|
|
1471
1469
|
* A dependency's findings are held back. A React Compiler bailout inside
|
|
@@ -1578,7 +1576,7 @@ function packageOf(file) {
|
|
|
1578
1576
|
// No `node_modules` in the path: a workspace link, resolved to a checkout.
|
|
1579
1577
|
// The directory the module hangs off is the closest thing to a package name
|
|
1580
1578
|
// that is true without reading its `package.json` from a warning path.
|
|
1581
|
-
const up = parts.lastIndexOf("
|
|
1579
|
+
const up = parts.lastIndexOf("npm");
|
|
1582
1580
|
return up === -1 ? parts.slice(0, -1).join("/") || file : parts.slice(up, up + 2).join("/");
|
|
1583
1581
|
}
|
|
1584
1582
|
|
package/internal/devtools.js
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
// edit away from being lost:
|
|
33
33
|
//
|
|
34
34
|
// 1. **The hook, before the renderer.** This module, injected by
|
|
35
|
-
// `
|
|
35
|
+
// `npm/vite/index.js`'s `transformIndexHtml` as a *classic* script at
|
|
36
36
|
// the top of the head — see [`devtoolsPreamble`] for why classic.
|
|
37
37
|
// 2. **One copy of the renderer.** `resolve.dedupe: ["react", "react-dom"]`
|
|
38
38
|
// in that same file. Two copies of `react-dom` register two renderers, and
|
package/internal/diagnostics.js
CHANGED
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
// `@uniflowed/router`'s `internal/diagnostics.js` are the same two strings, and
|
|
58
58
|
// they are the contract. They cannot be *imported* here: this module is loaded
|
|
59
59
|
// by Vite before any Flow transform exists, and both of those are Flow. So they
|
|
60
|
-
// are written out, and `
|
|
60
|
+
// are written out, and `npm/vite/dev-channel.test.js` asserts that all
|
|
61
61
|
// four spellings agree — a duplicated constant with a test on it is honest, and
|
|
62
62
|
// one without is how the browser ends up posting to a path nothing serves.
|
|
63
63
|
//
|
package/internal/flight.js
CHANGED
|
@@ -120,9 +120,9 @@ export const DEV_RSC_HOOK = "uf.dev.rsc";
|
|
|
120
120
|
/**
|
|
121
121
|
* The last segment of a route's payload URL.
|
|
122
122
|
*
|
|
123
|
-
* A third spelling, beside `
|
|
124
|
-
* `
|
|
125
|
-
* that Vite imports before any Flow transform exists. `
|
|
123
|
+
* A third spelling, beside `npm/router/internal/flight.js` and
|
|
124
|
+
* `npm/server/internal/flight.js`, because this file is plain JavaScript
|
|
125
|
+
* that Vite imports before any Flow transform exists. `npm/server/flight.test.js`
|
|
126
126
|
* holds all three to one answer.
|
|
127
127
|
*/
|
|
128
128
|
export const FLIGHT_SEGMENT = "__uf.flight";
|
|
@@ -687,8 +687,8 @@ function serverBundleAlreadyImportsClientReference(file) {
|
|
|
687
687
|
const ROUTER_CLIENT_REFERENCES_IN_SERVER = Object.freeze([
|
|
688
688
|
"/@uniflowed/router/internal/boundaries.js",
|
|
689
689
|
"/@uniflowed/router/internal/error-view.js",
|
|
690
|
-
"/
|
|
691
|
-
"/
|
|
690
|
+
"/npm/router/internal/boundaries.js",
|
|
691
|
+
"/npm/router/internal/error-view.js",
|
|
692
692
|
]);
|
|
693
693
|
|
|
694
694
|
/**
|
|
@@ -435,7 +435,7 @@ export function markLines(lines) {
|
|
|
435
435
|
*
|
|
436
436
|
* Exported because it is where the decision is visible without starting Shiki:
|
|
437
437
|
* give it the token split a grammar would produce and it says which words it
|
|
438
|
-
* marked. `
|
|
438
|
+
* marked. `npm/vite/highlight.test.js` uses exactly that, and the splits
|
|
439
439
|
* in it are the ones that had bugs.
|
|
440
440
|
*/
|
|
441
441
|
export function markLine(line) {
|
package/internal/frontmatter.js
CHANGED
|
@@ -25,7 +25,12 @@ import { parse } from "yaml";
|
|
|
25
25
|
export default function remarkFrontmatterExport() {
|
|
26
26
|
return (tree, file) => {
|
|
27
27
|
const node = tree.children.find((child) => child.type === "yaml");
|
|
28
|
-
const data =
|
|
28
|
+
const data =
|
|
29
|
+
file.data != null && Object.hasOwn(file.data, "ufFrontmatter")
|
|
30
|
+
? file.data.ufFrontmatter
|
|
31
|
+
: node == null
|
|
32
|
+
? undefined
|
|
33
|
+
: parse(node.value);
|
|
29
34
|
define(tree, file, {
|
|
30
35
|
frontmatter: valueToEstree(data, { preserveReferences: true }),
|
|
31
36
|
});
|
package/internal/http.js
CHANGED
|
@@ -84,7 +84,7 @@ export function toAddressRequest(incoming) {
|
|
|
84
84
|
*
|
|
85
85
|
* The same function as `requestUrl` in `@uniflowed/server/node`, which has the
|
|
86
86
|
* argument for why; spelled twice because this file runs before any Flow
|
|
87
|
-
* transform and cannot import that one. `
|
|
87
|
+
* transform and cannot import that one. `npm/server/serve.test.js` holds
|
|
88
88
|
* both to one answer.
|
|
89
89
|
*
|
|
90
90
|
* @param {string} protocol
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// @noflow
|
|
2
|
+
// ox-content parses plain Markdown and frontmatter. MDX keeps the official
|
|
3
|
+
// compiler's JavaScript/JSX grammar, including lowercase tags and nested Markdown.
|
|
4
|
+
// uf owns the page shell and theme in both cases.
|
|
5
|
+
import { parseFrontmatter, transformMdast } from "@ox-content/napi";
|
|
6
|
+
|
|
7
|
+
/** Native Markdown/frontmatter with the official MDX parser for JSX documents. */
|
|
8
|
+
export default function remarkOxContent() {
|
|
9
|
+
const mdxParser = this.parser;
|
|
10
|
+
this.parser = (source, file) => {
|
|
11
|
+
const hasFrontmatter = /^---\r?\n/.test(source);
|
|
12
|
+
if (!file.path?.endsWith(".md")) {
|
|
13
|
+
const result = parseFrontmatter(source);
|
|
14
|
+
file.data.ufFrontmatter = hasFrontmatter ? result.frontmatter : undefined;
|
|
15
|
+
// Retain the original line numbers for MDX errors and source maps.
|
|
16
|
+
const prefix = source.slice(0, source.length - result.content.length);
|
|
17
|
+
return mdxParser(prefix.replace(/[^\r\n]/g, "") + result.content, file);
|
|
18
|
+
}
|
|
19
|
+
const result = transformMdast(source, { gfm: true, mdx: false, frontmatter: true });
|
|
20
|
+
if (result.errors.length !== 0) file.fail(result.errors.join("; "));
|
|
21
|
+
file.data.ufFrontmatter = hasFrontmatter ? JSON.parse(result.frontmatter) : undefined;
|
|
22
|
+
const tree = JSON.parse(result.astJson);
|
|
23
|
+
escapeHtml(tree);
|
|
24
|
+
return tree;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Plain Markdown does not execute JSX or raw HTML. Render HTML as literal text,
|
|
29
|
+
// as uf doc does, so the React compiler never receives unsupported HAST raw nodes.
|
|
30
|
+
function escapeHtml(node) {
|
|
31
|
+
if (node.type === "html") node.type = "text";
|
|
32
|
+
for (const child of node.children ?? []) escapeHtml(child);
|
|
33
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
/*! Copyright (c) Meta Platforms, Inc. and affiliates. **/
|
|
7
7
|
/**
|
|
8
|
-
* This is simplified pure-js version of https://github.com/facebook/react/blob/main/
|
|
8
|
+
* This is simplified pure-js version of https://github.com/facebook/react/blob/main/npm/react-refresh/src/ReactFreshRuntime.js
|
|
9
9
|
* without IE11 compatibility and verbose isDev checks.
|
|
10
10
|
* Some utils are appended at the bottom for HMR integration.
|
|
11
11
|
*/
|
package/internal/routes.js
CHANGED
|
@@ -112,7 +112,8 @@ const UNSUPPORTED_SLOT_BOUNDARY_FILES = Object.freeze({
|
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
/** Extensions a page or layout may use; `.mdx` is a page written as content. */
|
|
115
|
-
const PAGE_EXTENSIONS = [".js", ".jsx", ".mdx"];
|
|
115
|
+
const PAGE_EXTENSIONS = [".js", ".jsx", ".mdx", ".md"];
|
|
116
|
+
const isMarkdown = (file) => file.endsWith(".mdx") || file.endsWith(".md");
|
|
116
117
|
const MODULE_EXTENSIONS = [".js", ".jsx"];
|
|
117
118
|
|
|
118
119
|
/** Application targets the route scanner knows how to select files for. */
|
|
@@ -479,7 +480,7 @@ export function scanRoutes(appRoot, options = {}) {
|
|
|
479
480
|
loading: nextLoading,
|
|
480
481
|
templates: nextTemplates,
|
|
481
482
|
slots: nextSlots,
|
|
482
|
-
mdx: page
|
|
483
|
+
mdx: isMarkdown(page),
|
|
483
484
|
});
|
|
484
485
|
}
|
|
485
486
|
// A handler answers the request itself, so it takes no layouts and is not
|
|
@@ -501,7 +502,7 @@ export function scanRoutes(appRoot, options = {}) {
|
|
|
501
502
|
path: routeFromSegments(segments).path,
|
|
502
503
|
page: ownNotFound,
|
|
503
504
|
layouts: nextLayouts,
|
|
504
|
-
mdx: ownNotFound
|
|
505
|
+
mdx: isMarkdown(ownNotFound),
|
|
505
506
|
});
|
|
506
507
|
}
|
|
507
508
|
|
|
@@ -890,7 +891,7 @@ function scanSlot(parent, directoryName, name, segments, ownLayout, above, targe
|
|
|
890
891
|
templates: nextTemplates,
|
|
891
892
|
errorBoundary: nextErrorBoundary,
|
|
892
893
|
slots: nestedSlots,
|
|
893
|
-
mdx: page
|
|
894
|
+
mdx: isMarkdown(page),
|
|
894
895
|
});
|
|
895
896
|
}
|
|
896
897
|
|
|
@@ -948,7 +949,7 @@ function scanSlot(parent, directoryName, name, segments, ownLayout, above, targe
|
|
|
948
949
|
name,
|
|
949
950
|
above,
|
|
950
951
|
defaultPage,
|
|
951
|
-
defaultMdx: defaultPage != null && defaultPage
|
|
952
|
+
defaultMdx: defaultPage != null && isMarkdown(defaultPage),
|
|
952
953
|
defaultErrorBoundary: defaultError == null ? null : { above: 0, module: defaultError },
|
|
953
954
|
routes,
|
|
954
955
|
intercepts,
|
|
@@ -1746,11 +1747,11 @@ ${clientInstrumentationSource(options.instrumentation)}${mount}({ App, routes, n
|
|
|
1746
1747
|
* with no actions pays one `headers.get` per request and nothing else.
|
|
1747
1748
|
*
|
|
1748
1749
|
* `internal/serve.js` and `driver.js` call them in that order, and
|
|
1749
|
-
* `
|
|
1750
|
+
* `npm/vite/index.js` does the same for a project driving Vite itself.
|
|
1750
1751
|
*
|
|
1751
1752
|
* `render` and `prerender` are two exports rather than one with a flag, because
|
|
1752
1753
|
* a host is one or the other: a server streams, a build writes files. See the
|
|
1753
|
-
* header of `
|
|
1754
|
+
* header of `npm/router/server.js` for why React needs both told apart.
|
|
1754
1755
|
*
|
|
1755
1756
|
* `shellDocument` is the third and is neither: it renders no route, because a
|
|
1756
1757
|
* `["csr"]` build has none to render at build time. It is re-exported straight
|
package/internal/rsc.js
CHANGED
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
// Dropping a single Server Component from the client bundle is what Next.js
|
|
19
19
|
// does, and it works there because the browser is handed a Flight payload
|
|
20
20
|
// describing the tree the server rendered. uf's payload
|
|
21
|
-
// (`
|
|
21
|
+
// (`npm/router/internal/payload.js`) carries the route's *data* and not
|
|
22
22
|
// its tree — that half needs a second React module graph, see
|
|
23
|
-
// ubugeeei-prod/uf#519 — so `
|
|
23
|
+
// ubugeeei-prod/uf#519 — so `npm/router/client.js` still hydrates by
|
|
24
24
|
// re-rendering the matched tree from the same modules the server rendered it
|
|
25
25
|
// from, and a module missing from the client bundle is a module React cannot
|
|
26
26
|
// hydrate. What *can* be dropped is a
|
|
@@ -106,7 +106,7 @@ function clientModules(manifest) {
|
|
|
106
106
|
/**
|
|
107
107
|
* Whether `boundary`'s route path covers `route`'s.
|
|
108
108
|
*
|
|
109
|
-
* Deliberately "covers" and not "is nearest to". `
|
|
109
|
+
* Deliberately "covers" and not "is nearest to". `npm/router` picks the
|
|
110
110
|
* nearest not-found and error boundary above a path at render time; asking the
|
|
111
111
|
* same question here would be a second implementation of that rule, and the
|
|
112
112
|
* two would disagree the first time either moved. Every boundary that could
|
|
@@ -252,14 +252,14 @@ function slotPredicate(needed) {
|
|
|
252
252
|
//
|
|
253
253
|
// Both are keyed on the id and nothing else. No request-derived value ever
|
|
254
254
|
// becomes a path, a specifier or an export name here or downstream; see the
|
|
255
|
-
// header of `
|
|
255
|
+
// header of `npm/router/internal/action-endpoint.js`.
|
|
256
256
|
// ---------------------------------------------------------------------------
|
|
257
257
|
|
|
258
258
|
/**
|
|
259
259
|
* The request header carrying an action id, lowercased as Node delivers it.
|
|
260
260
|
*
|
|
261
261
|
* A second spelling of `ACTION_HEADER` in
|
|
262
|
-
* `
|
|
262
|
+
* `npm/router/internal/action-wire.js`, and it has to be one: this module
|
|
263
263
|
* is plain JavaScript the Vite host imports before any transform, and that one
|
|
264
264
|
* is Flow, which Node cannot import at all. `RSC_MANIFEST_ENV` above is the
|
|
265
265
|
* same situation with `crates/uf_rsc/src/manifest.rs`. What keeps a second
|
package/internal/serve.js
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
// module is the part that is genuinely Vite's: finding the build on disk and
|
|
33
33
|
// reading the manifest a Vite build wrote.
|
|
34
34
|
//
|
|
35
|
-
// It moved because of `uf build --adapter`. `
|
|
35
|
+
// It moved because of `uf build --adapter`. `npm/server/serve.test.js` said
|
|
36
36
|
// what was wrong with the old arrangement while it was still the only one:
|
|
37
37
|
// "`internal/serve.js` is the seam a deploy adapter will need, and naming it
|
|
38
38
|
// in `exports` before one exists would be promising an interface nothing has
|
|
@@ -380,7 +380,7 @@ export const BUILD_ID_FILE = "uf-build-id";
|
|
|
380
380
|
* Only a durable cache reads it, and only a durable cache needs it: an entry
|
|
381
381
|
* that cannot outlive the process cannot outlive the build either, so every
|
|
382
382
|
* command that keeps its cache in memory is entitled to `null` here and never
|
|
383
|
-
* looks. `
|
|
383
|
+
* looks. `npm/server/internal/cache-key.js` argues the rest.
|
|
384
384
|
*
|
|
385
385
|
* `UF_BUILD_ID` first, then the file `uf build` wrote. The environment wins for
|
|
386
386
|
* the reason it wins in `crates/uf_rsc`'s `BuildId::from_env_or_generate`,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// project has and what to change.
|
|
17
17
|
//
|
|
18
18
|
// The router's own Server Components entries refuse the same React at run time
|
|
19
|
-
// (`
|
|
19
|
+
// (`npm/router/internal/react-version.js`). This is the earlier half of the
|
|
20
20
|
// same rule, for a project that builds with uf.
|
|
21
21
|
|
|
22
22
|
import fs from "node:fs";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uniflowed/vite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "Vite, driven by uf.config.js: every Flow module through `uf transform`, MDX, the file-system router and static rendering as Vite plugins.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/ubugeeei-prod/uf.git",
|
|
11
|
-
"directory": "
|
|
11
|
+
"directory": "npm/vite"
|
|
12
12
|
},
|
|
13
13
|
"uf": {
|
|
14
14
|
"builder": {
|
|
@@ -34,21 +34,21 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@babel/core": "^7.29.7",
|
|
36
36
|
"@mdx-js/rollup": "^3.1.1",
|
|
37
|
+
"@ox-content/napi": "3.2.11",
|
|
37
38
|
"@shikijs/rehype": "^3.23.0",
|
|
38
|
-
"@uniflowed/host": "0.
|
|
39
|
-
"@uniflowed/router": "0.
|
|
40
|
-
"@uniflowed/server": "0.
|
|
41
|
-
"@uniflowed/validator": "0.
|
|
39
|
+
"@uniflowed/host": "0.11.1",
|
|
40
|
+
"@uniflowed/router": "0.11.1",
|
|
41
|
+
"@uniflowed/server": "0.11.1",
|
|
42
|
+
"@uniflowed/validator": "0.11.1",
|
|
42
43
|
"babel-plugin-relay": "^21.0.1",
|
|
43
44
|
"estree-util-value-to-estree": "^3.5.0",
|
|
44
|
-
"rehype-slug": "^6.0.0",
|
|
45
|
-
"remark-frontmatter": "^5.0.0",
|
|
46
45
|
"remark-gfm": "^4.0.1",
|
|
46
|
+
"rehype-slug": "^6.0.0",
|
|
47
|
+
"rolldown": "^1.2.7",
|
|
47
48
|
"shiki": "^3.23.0",
|
|
48
49
|
"unist-util-mdx-define": "^1.1.2",
|
|
49
50
|
"vite": "^8.2.2",
|
|
50
|
-
"yaml": "^2.9.1"
|
|
51
|
-
"rolldown": "^1.2.7"
|
|
51
|
+
"yaml": "^2.9.1"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"axe-core": ">=4",
|