@react-router/dev 7.0.0-pre.2 → 7.0.0-pre.3

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 (67) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cli/index.d.ts +2 -1
  3. package/dist/cli/index.js +1352 -8
  4. package/dist/routes.d.ts +4 -2
  5. package/dist/routes.js +181 -11
  6. package/dist/typescript/plugin.d.ts +5 -2
  7. package/dist/typescript/plugin.js +479 -31
  8. package/dist/vite/cloudflare.d.ts +1 -1
  9. package/dist/vite/cloudflare.js +171 -5
  10. package/dist/vite.d.ts +2 -2
  11. package/dist/vite.js +2394 -5
  12. package/package.json +28 -7
  13. package/dist/cli/commands.d.ts +0 -13
  14. package/dist/cli/commands.js +0 -179
  15. package/dist/cli/detectPackageManager.d.ts +0 -10
  16. package/dist/cli/detectPackageManager.js +0 -39
  17. package/dist/cli/run.d.ts +0 -5
  18. package/dist/cli/run.js +0 -188
  19. package/dist/cli/useJavascript.d.ts +0 -4
  20. package/dist/cli/useJavascript.js +0 -66
  21. package/dist/colors.d.ts +0 -17
  22. package/dist/colors.js +0 -49
  23. package/dist/config/format.d.ts +0 -5
  24. package/dist/config/format.js +0 -68
  25. package/dist/config/routes.d.ts +0 -129
  26. package/dist/config/routes.js +0 -253
  27. package/dist/config/serverModes.d.ts +0 -9
  28. package/dist/invariant.d.ts +0 -2
  29. package/dist/invariant.js +0 -20
  30. package/dist/manifest.d.ts +0 -28
  31. package/dist/typescript/typegen.d.ts +0 -10
  32. package/dist/typescript/typegen.js +0 -190
  33. package/dist/vite/babel.d.ts +0 -20
  34. package/dist/vite/babel.js +0 -49
  35. package/dist/vite/build.d.ts +0 -15
  36. package/dist/vite/build.js +0 -249
  37. package/dist/vite/cloudflare-dev-proxy.d.ts +0 -21
  38. package/dist/vite/cloudflare-dev-proxy.js +0 -89
  39. package/dist/vite/combine-urls-test.d.ts +0 -1
  40. package/dist/vite/combine-urls.d.ts +0 -1
  41. package/dist/vite/combine-urls.js +0 -20
  42. package/dist/vite/config.d.ts +0 -234
  43. package/dist/vite/config.js +0 -282
  44. package/dist/vite/dev.d.ts +0 -15
  45. package/dist/vite/dev.js +0 -81
  46. package/dist/vite/import-vite-esm-sync.d.ts +0 -4
  47. package/dist/vite/import-vite-esm-sync.js +0 -28
  48. package/dist/vite/node-adapter.d.ts +0 -6
  49. package/dist/vite/node-adapter.js +0 -90
  50. package/dist/vite/plugin.d.ts +0 -75
  51. package/dist/vite/plugin.js +0 -1301
  52. package/dist/vite/profiler.d.ts +0 -5
  53. package/dist/vite/profiler.js +0 -55
  54. package/dist/vite/remove-exports-test.d.ts +0 -1
  55. package/dist/vite/remove-exports.d.ts +0 -2
  56. package/dist/vite/remove-exports.js +0 -148
  57. package/dist/vite/resolve-file-url.d.ts +0 -3
  58. package/dist/vite/resolve-file-url.js +0 -53
  59. package/dist/vite/styles.d.ts +0 -14
  60. package/dist/vite/styles.js +0 -199
  61. package/dist/vite/vite-node.d.ts +0 -9
  62. package/dist/vite/vite-node.js +0 -57
  63. package/dist/vite/vmod.d.ts +0 -3
  64. package/dist/vite/vmod.js +0 -21
  65. package/dist/vite/with-props.d.ts +0 -4
  66. package/dist/vite/with-props.js +0 -151
  67. /package/dist/{vite/static → static}/refresh-utils.cjs +0 -0
@@ -1,190 +0,0 @@
1
- /**
2
- * @react-router/dev v7.0.0-pre.2
3
- *
4
- * Copyright (c) Remix Software Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var fs = require('node:fs');
16
- var Chokidar = require('chokidar');
17
- var dedent = require('dedent');
18
- var Path = require('pathe');
19
- var Pathe = require('pathe/utils');
20
- var routes = require('../config/routes.js');
21
- var viteNode = require('../vite/vite-node.js');
22
- var config = require('../vite/config.js');
23
- var plugin = require('../vite/plugin.js');
24
-
25
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
-
27
- function _interopNamespace(e) {
28
- if (e && e.__esModule) return e;
29
- var n = Object.create(null);
30
- if (e) {
31
- Object.keys(e).forEach(function (k) {
32
- if (k !== 'default') {
33
- var d = Object.getOwnPropertyDescriptor(e, k);
34
- Object.defineProperty(n, k, d.get ? d : {
35
- enumerable: true,
36
- get: function () { return e[k]; }
37
- });
38
- }
39
- });
40
- }
41
- n["default"] = e;
42
- return Object.freeze(n);
43
- }
44
-
45
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
46
- var Chokidar__default = /*#__PURE__*/_interopDefaultLegacy(Chokidar);
47
- var dedent__default = /*#__PURE__*/_interopDefaultLegacy(dedent);
48
- var Path__namespace = /*#__PURE__*/_interopNamespace(Path);
49
- var Pathe__namespace = /*#__PURE__*/_interopNamespace(Pathe);
50
-
51
- function getDirectory(ctx) {
52
- return Path__namespace.join(ctx.rootDirectory, ".react-router/types");
53
- }
54
- function getPath(ctx, route) {
55
- return Path__namespace.join(getDirectory(ctx), "app", Path__namespace.dirname(route.file), "+types." + Pathe__namespace.filename(route.file) + ".d.ts");
56
- }
57
- async function watch(rootDirectory) {
58
- const vitePluginCtx = await plugin.loadPluginContext({
59
- root: rootDirectory
60
- });
61
- const routesTsPath = Path__namespace.join(vitePluginCtx.reactRouterConfig.appDirectory, "routes.ts");
62
- const routesViteNodeContext = await viteNode.createContext({
63
- root: rootDirectory
64
- });
65
- async function getRoutes() {
66
- const routes$1 = {};
67
- const rootRouteFile = config.findEntry(vitePluginCtx.reactRouterConfig.appDirectory, "root");
68
- if (rootRouteFile) {
69
- routes$1.root = {
70
- path: "",
71
- id: "root",
72
- file: rootRouteFile
73
- };
74
- }
75
- routesViteNodeContext.devServer.moduleGraph.invalidateAll();
76
- routesViteNodeContext.runner.moduleCache.clear();
77
- const routeConfig = (await routesViteNodeContext.runner.executeFile(routesTsPath)).routes;
78
- return {
79
- ...routes$1,
80
- ...routes.configRoutesToRouteManifest(await routeConfig)
81
- };
82
- }
83
- const ctx = {
84
- rootDirectory,
85
- appDirectory: vitePluginCtx.reactRouterConfig.appDirectory,
86
- routes: await getRoutes()
87
- };
88
- await writeAll(ctx);
89
- const watcher = Chokidar__default["default"].watch(ctx.appDirectory, {
90
- ignoreInitial: true
91
- });
92
- watcher.on("all", async (event, path) => {
93
- path = Path__namespace.normalize(path);
94
- ctx.routes = await getRoutes();
95
- const routeConfigChanged = Boolean(routesViteNodeContext.devServer.moduleGraph.getModuleById(path));
96
- if (routeConfigChanged) {
97
- await writeAll(ctx);
98
- return;
99
- }
100
- const isRoute = Object.values(ctx.routes).find(route => path === Path__namespace.join(ctx.appDirectory, route.file));
101
- if (isRoute && (event === "add" || event === "unlink")) {
102
- await writeAll(ctx);
103
- return;
104
- }
105
- });
106
- }
107
- async function writeAll(ctx) {
108
- fs__default["default"].rmSync(getDirectory(ctx), {
109
- recursive: true,
110
- force: true
111
- });
112
- Object.values(ctx.routes).forEach(route => {
113
- if (!fs__default["default"].existsSync(Path__namespace.join(ctx.appDirectory, route.file))) return;
114
- const typesPath = getPath(ctx, route);
115
- const content = getModule(ctx.routes, route);
116
- fs__default["default"].mkdirSync(Path__namespace.dirname(typesPath), {
117
- recursive: true
118
- });
119
- fs__default["default"].writeFileSync(typesPath, content);
120
- });
121
- }
122
- function getModule(routes, route) {
123
- return dedent__default["default"]`
124
- // React Router generated types for route:
125
- // ${route.file}
126
-
127
- import * as T from "react-router/types"
128
-
129
- export type Params = {${formattedParamsProperties(routes, route)}}
130
-
131
- type Route = typeof import("./${Pathe__namespace.filename(route.file)}")
132
-
133
- export type LoaderData = T.CreateLoaderData<Route>
134
- export type ActionData = T.CreateActionData<Route>
135
-
136
- export type LoaderArgs = T.CreateServerLoaderArgs<Params>
137
- export type ClientLoaderArgs = T.CreateClientLoaderArgs<Params, Route>
138
- export type ActionArgs = T.CreateServerActionArgs<Params>
139
- export type ClientActionArgs = T.CreateClientActionArgs<Params, Route>
140
-
141
- export type HydrateFallbackProps = T.CreateHydrateFallbackProps<Params>
142
- export type ComponentProps = T.CreateComponentProps<Params, LoaderData, ActionData>
143
- export type ErrorBoundaryProps = T.CreateErrorBoundaryProps<Params, LoaderData, ActionData>
144
- `;
145
- }
146
- function formattedParamsProperties(routes, route) {
147
- const urlpath = routeLineage(routes, route).map(route => route.path).join("/");
148
- const params = parseParams(urlpath);
149
- const indent = " ".repeat(3);
150
- const properties = Object.entries(params).map(([name, values]) => {
151
- if (values.length === 1) {
152
- const isOptional = values[0];
153
- return indent + (isOptional ? `${name}?: string` : `${name}: string`);
154
- }
155
- const items = values.map(isOptional => isOptional ? "string | undefined" : "string");
156
- return indent + `${name}: [${items.join(", ")}]`;
157
- });
158
- // prettier-ignore
159
- const body = properties.length === 0 ? "" : "\n" + properties.join("\n") + "\n";
160
- return body;
161
- }
162
- function routeLineage(routes, route) {
163
- const result = [];
164
- while (route) {
165
- result.push(route);
166
- if (!route.parentId) break;
167
- route = routes[route.parentId];
168
- }
169
- result.reverse();
170
- return result;
171
- }
172
- function parseParams(urlpath) {
173
- const result = {};
174
- let segments = urlpath.split("/");
175
- segments.filter(s => s.startsWith(":")).forEach(param => {
176
- param = param.slice(1); // omit leading `:`
177
- let isOptional = param.endsWith("?");
178
- if (isOptional) {
179
- param = param.slice(0, -1); // omit trailing `?`
180
- }
181
- result[param] ??= [];
182
- result[param].push(isOptional);
183
- return;
184
- });
185
- return result;
186
- }
187
-
188
- exports.getPath = getPath;
189
- exports.watch = watch;
190
- exports.writeAll = writeAll;
@@ -1,20 +0,0 @@
1
- import type { NodePath } from "@babel/traverse";
2
- import type { types as Babel } from "@babel/core";
3
- import { parse, type ParseResult } from "@babel/parser";
4
- import * as t from "@babel/types";
5
- declare const traverse: {
6
- <S>(parent: Babel.Node, opts: import("@babel/traverse").TraverseOptions<S>, scope: import("@babel/traverse").Scope | undefined, state: S, parentPath?: NodePath<Babel.Node> | undefined): void;
7
- (parent: Babel.Node, opts?: import("@babel/traverse").TraverseOptions<Babel.Node> | undefined, scope?: import("@babel/traverse").Scope | undefined, state?: any, parentPath?: NodePath<Babel.Node> | undefined): void;
8
- visitors: typeof import("@babel/traverse").visitors;
9
- verify: typeof import("@babel/traverse").visitors.verify;
10
- explode: typeof import("@babel/traverse").visitors.explode;
11
- cheap: (node: Babel.Node, enter: (node: Babel.Node) => void) => void;
12
- node: (node: Babel.Node, opts: import("@babel/traverse").TraverseOptions<Babel.Node>, scope?: import("@babel/traverse").Scope | undefined, state?: any, path?: NodePath<Babel.Node> | undefined, skipKeys?: Record<string, boolean> | undefined) => void;
13
- clearNode: (node: Babel.Node, opts?: Babel.RemovePropertiesOptions | undefined) => void;
14
- removeProperties: (tree: Babel.Node, opts?: Babel.RemovePropertiesOptions | undefined) => Babel.Node;
15
- hasType: (tree: Babel.Node, type: "ArrayPattern" | "ObjectPattern" | "Identifier" | "RestElement" | "AssignmentPattern" | "TSAsExpression" | "TSSatisfiesExpression" | "TSTypeAssertion" | "TSNonNullExpression" | "MemberExpression" | "TSParameterProperty" | "ObjectProperty" | "ArrayExpression" | "AssignmentExpression" | "BinaryExpression" | "CallExpression" | "ConditionalExpression" | "FunctionExpression" | "StringLiteral" | "NumericLiteral" | "NullLiteral" | "BooleanLiteral" | "RegExpLiteral" | "LogicalExpression" | "NewExpression" | "ObjectExpression" | "SequenceExpression" | "ParenthesizedExpression" | "ThisExpression" | "UnaryExpression" | "UpdateExpression" | "ArrowFunctionExpression" | "ClassExpression" | "ImportExpression" | "MetaProperty" | "Super" | "TaggedTemplateExpression" | "TemplateLiteral" | "YieldExpression" | "AwaitExpression" | "Import" | "BigIntLiteral" | "OptionalMemberExpression" | "OptionalCallExpression" | "TypeCastExpression" | "JSXElement" | "JSXFragment" | "BindExpression" | "DoExpression" | "RecordExpression" | "TupleExpression" | "DecimalLiteral" | "ModuleExpression" | "TopicReference" | "PipelineTopicExpression" | "PipelineBareFunction" | "PipelinePrimaryTopicReference" | "TSInstantiationExpression" | "PrivateName" | "File" | "AnyTypeAnnotation" | "ArgumentPlaceholder" | "ArrayTypeAnnotation" | "BlockStatement" | "BooleanLiteralTypeAnnotation" | "BooleanTypeAnnotation" | "BreakStatement" | "CatchClause" | "ClassAccessorProperty" | "ClassBody" | "ClassDeclaration" | "ClassImplements" | "ClassMethod" | "ClassPrivateMethod" | "ClassPrivateProperty" | "ClassProperty" | "ContinueStatement" | "DebuggerStatement" | "DeclareClass" | "DeclareExportAllDeclaration" | "DeclareExportDeclaration" | "DeclareFunction" | "DeclareInterface" | "DeclareModule" | "DeclareModuleExports" | "DeclareOpaqueType" | "DeclareTypeAlias" | "DeclareVariable" | "DeclaredPredicate" | "Decorator" | "Directive" | "DirectiveLiteral" | "DoWhileStatement" | "EmptyStatement" | "EmptyTypeAnnotation" | "EnumBooleanBody" | "EnumBooleanMember" | "EnumDeclaration" | "EnumDefaultedMember" | "EnumNumberBody" | "EnumNumberMember" | "EnumStringBody" | "EnumStringMember" | "EnumSymbolBody" | "ExistsTypeAnnotation" | "ExportAllDeclaration" | "ExportDefaultDeclaration" | "ExportDefaultSpecifier" | "ExportNamedDeclaration" | "ExportNamespaceSpecifier" | "ExportSpecifier" | "ExpressionStatement" | "ForInStatement" | "ForOfStatement" | "ForStatement" | "FunctionDeclaration" | "FunctionTypeAnnotation" | "FunctionTypeParam" | "GenericTypeAnnotation" | "IfStatement" | "ImportAttribute" | "ImportDeclaration" | "ImportDefaultSpecifier" | "ImportNamespaceSpecifier" | "ImportSpecifier" | "IndexedAccessType" | "InferredPredicate" | "InterfaceDeclaration" | "InterfaceExtends" | "InterfaceTypeAnnotation" | "InterpreterDirective" | "IntersectionTypeAnnotation" | "JSXAttribute" | "JSXClosingElement" | "JSXClosingFragment" | "JSXEmptyExpression" | "JSXExpressionContainer" | "JSXIdentifier" | "JSXMemberExpression" | "JSXNamespacedName" | "JSXOpeningElement" | "JSXOpeningFragment" | "JSXSpreadAttribute" | "JSXSpreadChild" | "JSXText" | "LabeledStatement" | "MixedTypeAnnotation" | "Noop" | "NullLiteralTypeAnnotation" | "NullableTypeAnnotation" | "NumberLiteral" | "NumberLiteralTypeAnnotation" | "NumberTypeAnnotation" | "ObjectMethod" | "ObjectTypeAnnotation" | "ObjectTypeCallProperty" | "ObjectTypeIndexer" | "ObjectTypeInternalSlot" | "ObjectTypeProperty" | "ObjectTypeSpreadProperty" | "OpaqueType" | "OptionalIndexedAccessType" | "Placeholder" | "Program" | "QualifiedTypeIdentifier" | "RegexLiteral" | "RestProperty" | "ReturnStatement" | "SpreadElement" | "SpreadProperty" | "StaticBlock" | "StringLiteralTypeAnnotation" | "StringTypeAnnotation" | "SwitchCase" | "SwitchStatement" | "SymbolTypeAnnotation" | "TSAnyKeyword" | "TSArrayType" | "TSBigIntKeyword" | "TSBooleanKeyword" | "TSCallSignatureDeclaration" | "TSConditionalType" | "TSConstructSignatureDeclaration" | "TSConstructorType" | "TSDeclareFunction" | "TSDeclareMethod" | "TSEnumDeclaration" | "TSEnumMember" | "TSExportAssignment" | "TSExpressionWithTypeArguments" | "TSExternalModuleReference" | "TSFunctionType" | "TSImportEqualsDeclaration" | "TSImportType" | "TSIndexSignature" | "TSIndexedAccessType" | "TSInferType" | "TSInterfaceBody" | "TSInterfaceDeclaration" | "TSIntersectionType" | "TSIntrinsicKeyword" | "TSLiteralType" | "TSMappedType" | "TSMethodSignature" | "TSModuleBlock" | "TSModuleDeclaration" | "TSNamedTupleMember" | "TSNamespaceExportDeclaration" | "TSNeverKeyword" | "TSNullKeyword" | "TSNumberKeyword" | "TSObjectKeyword" | "TSOptionalType" | "TSParenthesizedType" | "TSPropertySignature" | "TSQualifiedName" | "TSRestType" | "TSStringKeyword" | "TSSymbolKeyword" | "TSThisType" | "TSTupleType" | "TSTypeAliasDeclaration" | "TSTypeAnnotation" | "TSTypeLiteral" | "TSTypeOperator" | "TSTypeParameter" | "TSTypeParameterDeclaration" | "TSTypeParameterInstantiation" | "TSTypePredicate" | "TSTypeQuery" | "TSTypeReference" | "TSUndefinedKeyword" | "TSUnionType" | "TSUnknownKeyword" | "TSVoidKeyword" | "TemplateElement" | "ThisTypeAnnotation" | "ThrowStatement" | "TryStatement" | "TupleTypeAnnotation" | "TypeAlias" | "TypeAnnotation" | "TypeParameter" | "TypeParameterDeclaration" | "TypeParameterInstantiation" | "TypeofTypeAnnotation" | "UnionTypeAnnotation" | "V8IntrinsicIdentifier" | "VariableDeclaration" | "VariableDeclarator" | "Variance" | "VoidTypeAnnotation" | "WhileStatement" | "WithStatement", denylistTypes?: string[] | undefined) => boolean;
16
- cache: typeof import("@babel/traverse").cache;
17
- };
18
- declare const generate: typeof import("@babel/generator").default;
19
- export { traverse, generate, parse, t };
20
- export type { Babel, NodePath, ParseResult };
@@ -1,49 +0,0 @@
1
- /**
2
- * @react-router/dev v7.0.0-pre.2
3
- *
4
- * Copyright (c) Remix Software Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var parser = require('@babel/parser');
16
- var t = require('@babel/types');
17
-
18
- function _interopNamespace(e) {
19
- if (e && e.__esModule) return e;
20
- var n = Object.create(null);
21
- if (e) {
22
- Object.keys(e).forEach(function (k) {
23
- if (k !== 'default') {
24
- var d = Object.getOwnPropertyDescriptor(e, k);
25
- Object.defineProperty(n, k, d.get ? d : {
26
- enumerable: true,
27
- get: function () { return e[k]; }
28
- });
29
- }
30
- });
31
- }
32
- n["default"] = e;
33
- return Object.freeze(n);
34
- }
35
-
36
- var t__namespace = /*#__PURE__*/_interopNamespace(t);
37
-
38
- // These `require`s were needed to support building within vite-ecosystem-ci,
39
- // otherwise we get errors that `traverse` and `generate` are not functions.
40
- const traverse = require("@babel/traverse").default;
41
- const generate = require("@babel/generator").default;
42
-
43
- Object.defineProperty(exports, 'parse', {
44
- enumerable: true,
45
- get: function () { return parser.parse; }
46
- });
47
- exports.t = t__namespace;
48
- exports.generate = generate;
49
- exports.traverse = traverse;
@@ -1,15 +0,0 @@
1
- import type * as Vite from "vite";
2
- export interface ViteBuildOptions {
3
- assetsInlineLimit?: number;
4
- clearScreen?: boolean;
5
- config?: string;
6
- emptyOutDir?: boolean;
7
- force?: boolean;
8
- logLevel?: Vite.LogLevel;
9
- minify?: Vite.BuildOptions["minify"];
10
- mode?: string;
11
- profile?: boolean;
12
- sourcemapClient?: boolean | "inline" | "hidden";
13
- sourcemapServer?: boolean | "inline" | "hidden";
14
- }
15
- export declare function build(root: string, { assetsInlineLimit, clearScreen, config: configFile, emptyOutDir, force, logLevel, minify, mode, sourcemapClient, sourcemapServer, }: ViteBuildOptions): Promise<void>;
@@ -1,249 +0,0 @@
1
- /**
2
- * @react-router/dev v7.0.0-pre.2
3
- *
4
- * Copyright (c) Remix Software Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var path = require('node:path');
16
- var fse = require('fs-extra');
17
- var colors = require('picocolors');
18
- var plugin = require('./plugin.js');
19
- var config = require('./config.js');
20
- var invariant = require('../invariant.js');
21
- var importViteEsmSync = require('./import-vite-esm-sync.js');
22
-
23
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
-
25
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
26
- var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
27
- var colors__default = /*#__PURE__*/_interopDefaultLegacy(colors);
28
-
29
- function getAddressableRoutes(routes) {
30
- let nonAddressableIds = new Set();
31
- for (let id in routes) {
32
- let route = routes[id];
33
- // We omit the parent route of index routes since the index route takes ownership of its parent's path
34
- if (route.index) {
35
- invariant(route.parentId, `Expected index route "${route.id}" to have "parentId" set`);
36
- nonAddressableIds.add(route.parentId);
37
- }
38
- // We omit pathless routes since they can only be addressed via descendant routes
39
- if (typeof route.path !== "string" && !route.index) {
40
- nonAddressableIds.add(id);
41
- }
42
- }
43
- return Object.values(routes).filter(route => !nonAddressableIds.has(route.id));
44
- }
45
- function getRouteBranch(routes, routeId) {
46
- let branch = [];
47
- let currentRouteId = routeId;
48
- while (currentRouteId) {
49
- let route = routes[currentRouteId];
50
- invariant(route, `Missing route for ${currentRouteId}`);
51
- branch.push(route);
52
- currentRouteId = route.parentId;
53
- }
54
- return branch.reverse();
55
- }
56
- async function getServerBuilds(ctx) {
57
- let {
58
- rootDirectory
59
- } = ctx;
60
- const {
61
- routes,
62
- serverBuildFile,
63
- serverBundles,
64
- appDirectory
65
- } = ctx.reactRouterConfig;
66
- let serverBuildDirectory = plugin.getServerBuildDirectory(ctx);
67
- if (!serverBundles) {
68
- return {
69
- serverBuilds: [{
70
- ssr: true
71
- }],
72
- buildManifest: {
73
- routes
74
- }
75
- };
76
- }
77
- let {
78
- normalizePath
79
- } = await import('vite');
80
- let resolvedAppDirectory = path__default["default"].resolve(rootDirectory, appDirectory);
81
- let rootRelativeRoutes = Object.fromEntries(Object.entries(routes).map(([id, route]) => {
82
- let filePath = path__default["default"].join(resolvedAppDirectory, route.file);
83
- let rootRelativeFilePath = normalizePath(path__default["default"].relative(rootDirectory, filePath));
84
- return [id, {
85
- ...route,
86
- file: rootRelativeFilePath
87
- }];
88
- }));
89
- let buildManifest = {
90
- serverBundles: {},
91
- routeIdToServerBundleId: {},
92
- routes: rootRelativeRoutes
93
- };
94
- let serverBundleBuildConfigById = new Map();
95
- await Promise.all(getAddressableRoutes(routes).map(async route => {
96
- let branch = getRouteBranch(routes, route.id);
97
- let serverBundleId = await serverBundles({
98
- branch: branch.map(route => config.configRouteToBranchRoute({
99
- ...route,
100
- // Ensure absolute paths are passed to the serverBundles function
101
- file: path__default["default"].join(resolvedAppDirectory, route.file)
102
- }))
103
- });
104
- if (typeof serverBundleId !== "string") {
105
- throw new Error(`The "serverBundles" function must return a string`);
106
- }
107
- if (!/^[a-zA-Z0-9-_]+$/.test(serverBundleId)) {
108
- throw new Error(`The "serverBundles" function must only return strings containing alphanumeric characters, hyphens and underscores.`);
109
- }
110
- buildManifest.routeIdToServerBundleId[route.id] = serverBundleId;
111
- let relativeServerBundleDirectory = path__default["default"].relative(rootDirectory, path__default["default"].join(serverBuildDirectory, serverBundleId));
112
- let serverBuildConfig = serverBundleBuildConfigById.get(serverBundleId);
113
- if (!serverBuildConfig) {
114
- buildManifest.serverBundles[serverBundleId] = {
115
- id: serverBundleId,
116
- file: normalizePath(path__default["default"].join(relativeServerBundleDirectory, serverBuildFile))
117
- };
118
- serverBuildConfig = {
119
- routes: {},
120
- serverBundleId
121
- };
122
- serverBundleBuildConfigById.set(serverBundleId, serverBuildConfig);
123
- }
124
- for (let route of branch) {
125
- serverBuildConfig.routes[route.id] = route;
126
- }
127
- }));
128
- let serverBuilds = Array.from(serverBundleBuildConfigById.values()).map(serverBundleBuildConfig => {
129
- let serverBuild = {
130
- ssr: true,
131
- serverBundleBuildConfig
132
- };
133
- return serverBuild;
134
- });
135
- return {
136
- serverBuilds,
137
- buildManifest
138
- };
139
- }
140
- async function cleanBuildDirectory(viteConfig, ctx) {
141
- let buildDirectory = ctx.reactRouterConfig.buildDirectory;
142
- let isWithinRoot = () => {
143
- let relativePath = path__default["default"].relative(ctx.rootDirectory, buildDirectory);
144
- return !relativePath.startsWith("..") && !path__default["default"].isAbsolute(relativePath);
145
- };
146
- if (viteConfig.build.emptyOutDir ?? isWithinRoot()) {
147
- await fse__default["default"].remove(buildDirectory);
148
- }
149
- }
150
- function getViteManifestPaths(ctx, serverBuilds) {
151
- let buildRelative = pathname => path__default["default"].resolve(ctx.reactRouterConfig.buildDirectory, pathname);
152
- let viteManifestPaths = ["client/.vite/manifest.json", ...serverBuilds.map(({
153
- serverBundleBuildConfig
154
- }) => {
155
- let serverBundleId = serverBundleBuildConfig === null || serverBundleBuildConfig === void 0 ? void 0 : serverBundleBuildConfig.serverBundleId;
156
- let serverBundlePath = serverBundleId ? serverBundleId + "/" : "";
157
- return `server/${serverBundlePath}.vite/manifest.json`;
158
- })].map(srcPath => buildRelative(srcPath));
159
- return viteManifestPaths;
160
- }
161
- async function build(root, {
162
- assetsInlineLimit,
163
- clearScreen,
164
- config: configFile,
165
- emptyOutDir,
166
- force,
167
- logLevel,
168
- minify,
169
- mode,
170
- sourcemapClient,
171
- sourcemapServer
172
- }) {
173
- var _reactRouterConfig$bu;
174
- // Ensure Vite's ESM build is preloaded at the start of the process
175
- // so it can be accessed synchronously via `importViteEsmSync`
176
- await importViteEsmSync.preloadViteEsm();
177
- let viteConfig = await plugin.resolveViteConfig({
178
- configFile,
179
- mode,
180
- root
181
- });
182
- const ctx = await plugin.extractPluginContext(viteConfig);
183
- if (!ctx) {
184
- console.error(colors__default["default"].red("React Router Vite plugin not found in Vite config"));
185
- process.exit(1);
186
- }
187
- let {
188
- reactRouterConfig
189
- } = ctx;
190
- let vite = await import('vite');
191
- async function viteBuild({
192
- ssr,
193
- serverBundleBuildConfig
194
- }) {
195
- await vite.build({
196
- root,
197
- mode,
198
- configFile,
199
- build: {
200
- assetsInlineLimit,
201
- emptyOutDir,
202
- minify,
203
- ssr,
204
- sourcemap: ssr ? sourcemapServer : sourcemapClient
205
- },
206
- optimizeDeps: {
207
- force
208
- },
209
- clearScreen,
210
- logLevel,
211
- ...(serverBundleBuildConfig ? {
212
- __reactRouterServerBundleBuildConfig: serverBundleBuildConfig
213
- } : {})
214
- });
215
- }
216
- await cleanBuildDirectory(viteConfig, ctx);
217
- // Run the Vite client build first
218
- await viteBuild({
219
- ssr: false
220
- });
221
- // Then run Vite SSR builds in parallel
222
- let {
223
- serverBuilds,
224
- buildManifest
225
- } = await getServerBuilds(ctx);
226
- await Promise.all(serverBuilds.map(viteBuild));
227
- let viteManifestPaths = getViteManifestPaths(ctx, serverBuilds);
228
- await Promise.all(viteManifestPaths.map(async viteManifestPath => {
229
- let manifestExists = await fse__default["default"].pathExists(viteManifestPath);
230
- if (!manifestExists) return;
231
- // Delete original Vite manifest file if consumer doesn't want it
232
- if (!ctx.viteManifestEnabled) {
233
- await fse__default["default"].remove(viteManifestPath);
234
- }
235
- // Remove .vite dir if it's now empty
236
- let viteDir = path__default["default"].dirname(viteManifestPath);
237
- let viteDirFiles = await fse__default["default"].readdir(viteDir);
238
- if (viteDirFiles.length === 0) {
239
- await fse__default["default"].remove(viteDir);
240
- }
241
- }));
242
- await ((_reactRouterConfig$bu = reactRouterConfig.buildEnd) === null || _reactRouterConfig$bu === void 0 ? void 0 : _reactRouterConfig$bu.call(reactRouterConfig, {
243
- buildManifest,
244
- reactRouterConfig,
245
- viteConfig
246
- }));
247
- }
248
-
249
- exports.build = build;
@@ -1,21 +0,0 @@
1
- import { type AppLoadContext } from "react-router";
2
- import { type Plugin } from "vite";
3
- import { type GetPlatformProxyOptions, type PlatformProxy } from "wrangler";
4
- type CfProperties = Record<string, unknown>;
5
- type LoadContext<Env, Cf extends CfProperties> = {
6
- cloudflare: Omit<PlatformProxy<Env, Cf>, "dispose">;
7
- };
8
- type GetLoadContext<Env, Cf extends CfProperties> = (args: {
9
- request: Request;
10
- context: LoadContext<Env, Cf>;
11
- }) => AppLoadContext | Promise<AppLoadContext>;
12
- /**
13
- * Vite plugin that provides [Node proxies to local workerd
14
- * bindings](https://developers.cloudflare.com/workers/wrangler/api/#getplatformproxy)
15
- * to `context.cloudflare` in your server loaders and server actions during
16
- * development.
17
- */
18
- export declare const cloudflareDevProxyVitePlugin: <Env, Cf extends CfProperties>(options?: {
19
- getLoadContext?: GetLoadContext<Env, Cf>;
20
- } & GetPlatformProxyOptions) => Plugin;
21
- export {};
@@ -1,89 +0,0 @@
1
- /**
2
- * @react-router/dev v7.0.0-pre.2
3
- *
4
- * Copyright (c) Remix Software Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var reactRouter = require('react-router');
16
- var nodeAdapter = require('./node-adapter.js');
17
-
18
- let serverBuildId = "virtual:react-router/server-build";
19
- function importWrangler() {
20
- try {
21
- return import('wrangler');
22
- } catch (_) {
23
- throw Error("Could not import `wrangler`. Do you have it installed?");
24
- }
25
- }
26
- const PLUGIN_NAME = "react-router-cloudflare-vite-dev-proxy";
27
- /**
28
- * Vite plugin that provides [Node proxies to local workerd
29
- * bindings](https://developers.cloudflare.com/workers/wrangler/api/#getplatformproxy)
30
- * to `context.cloudflare` in your server loaders and server actions during
31
- * development.
32
- */
33
- const cloudflareDevProxyVitePlugin = (options = {}) => {
34
- let {
35
- getLoadContext,
36
- ...restOptions
37
- } = options;
38
- return {
39
- name: PLUGIN_NAME,
40
- config: () => ({
41
- ssr: {
42
- resolve: {
43
- externalConditions: ["workerd", "worker"]
44
- }
45
- }
46
- }),
47
- configResolved: viteConfig => {
48
- let pluginIndex = name => viteConfig.plugins.findIndex(plugin => plugin.name === name);
49
- let reactRouterPluginIndex = pluginIndex("react-router");
50
- if (reactRouterPluginIndex >= 0 && reactRouterPluginIndex < pluginIndex(PLUGIN_NAME)) {
51
- throw new Error(`The "${PLUGIN_NAME}" plugin should be placed before the React Router plugin in your Vite config file`);
52
- }
53
- },
54
- configureServer: async viteDevServer => {
55
- let {
56
- getPlatformProxy
57
- } = await importWrangler();
58
- // Do not include `dispose` in Cloudflare context
59
- let {
60
- dispose,
61
- ...cloudflare
62
- } = await getPlatformProxy(restOptions);
63
- let context = {
64
- cloudflare
65
- };
66
- return () => {
67
- if (!viteDevServer.config.server.middlewareMode) {
68
- viteDevServer.middlewares.use(async (nodeReq, nodeRes, next) => {
69
- try {
70
- let build = await viteDevServer.ssrLoadModule(serverBuildId);
71
- let handler = reactRouter.createRequestHandler(build, "development");
72
- let req = nodeAdapter.fromNodeRequest(nodeReq, nodeRes);
73
- let loadContext = getLoadContext ? await getLoadContext({
74
- request: req,
75
- context
76
- }) : context;
77
- let res = await handler(req, loadContext);
78
- await nodeAdapter.toNodeRequest(res, nodeRes);
79
- } catch (error) {
80
- next(error);
81
- }
82
- });
83
- }
84
- };
85
- }
86
- };
87
- };
88
-
89
- exports.cloudflareDevProxyVitePlugin = cloudflareDevProxyVitePlugin;
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export declare function combineURLs(baseURL: string, relativeURL: string): string;
@@ -1,20 +0,0 @@
1
- /**
2
- * @react-router/dev v7.0.0-pre.2
3
- *
4
- * Copyright (c) Remix Software Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- // Borrowed from axios: https://github.com/axios/axios/blob/0e4f9fa29077ebee4499facea6be1492b42e8a26/lib/helpers/combineURLs.js#L11-L15
16
- function combineURLs(baseURL, relativeURL) {
17
- return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
18
- }
19
-
20
- exports.combineURLs = combineURLs;