@base44/vite-plugin 1.0.31 → 1.0.33
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -9
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +12 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +37 -9
- package/src/utils.ts +13 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAiB/C,eAAO,MAAM,uBAAuB,UAWnC,CAAC;AAeF,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,iBA4OP"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { loadEnv } from "vite";
|
|
2
3
|
import { errorOverlayPlugin } from "./error-overlay-plugin.js";
|
|
3
4
|
import { visualEditPlugin } from "./visual-edit-plugin.js";
|
|
@@ -5,6 +6,25 @@ import { filterPackagesInProject } from "./utils.js";
|
|
|
5
6
|
import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
|
|
6
7
|
import { buildStatusPlugin } from "./build-status-plugin.js";
|
|
7
8
|
const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
|
|
9
|
+
// Every entry Vite must pre-bundle before the browser loads the app. Deep
|
|
10
|
+
// entries are listed explicitly: to the optimizer `react/jsx-dev-runtime` and
|
|
11
|
+
// `react-dom/client` are separate entries, NOT covered by `react`/`react-dom`.
|
|
12
|
+
// Leaving one out means Vite discovers it mid-load, re-runs the optimizer and
|
|
13
|
+
// mints a new browserHash — so the same page ends up holding `react.js?v=A`
|
|
14
|
+
// and `react.js?v=B`, two React instances, and dies on its first hook with
|
|
15
|
+
// "Cannot read properties of null (reading 'useState')".
|
|
16
|
+
export const PREBUNDLED_SANDBOX_DEPS = [
|
|
17
|
+
"react",
|
|
18
|
+
"react/jsx-runtime",
|
|
19
|
+
"react/jsx-dev-runtime",
|
|
20
|
+
"react-dom",
|
|
21
|
+
"react-dom/client",
|
|
22
|
+
"react-router-dom",
|
|
23
|
+
"framer-motion",
|
|
24
|
+
"lodash",
|
|
25
|
+
"moment",
|
|
26
|
+
"react-quill",
|
|
27
|
+
];
|
|
8
28
|
const ENV_UNSET_GUIDANCE = [
|
|
9
29
|
"[base44] No Base44 backend configured — VITE_BASE44_APP_BASE_URL is not set, so /api requests have nowhere to go.",
|
|
10
30
|
"[base44] Run the app through the Base44 CLI instead:",
|
|
@@ -21,7 +41,8 @@ export default function vitePlugin(opts = {}) {
|
|
|
21
41
|
return [
|
|
22
42
|
{
|
|
23
43
|
name: "base44",
|
|
24
|
-
config: (
|
|
44
|
+
config: (config, { command }) => {
|
|
45
|
+
const { mode, root = process.cwd() } = config;
|
|
25
46
|
const env = loadEnv(mode ?? "development", root, "");
|
|
26
47
|
if (!isRunningInSandbox && command === "build" && !env.VITE_BASE44_APP_ID) {
|
|
27
48
|
console.log(BUILD_WITHOUT_APP_ID_WARNING);
|
|
@@ -50,6 +71,19 @@ export default function vitePlugin(opts = {}) {
|
|
|
50
71
|
strictPort: true,
|
|
51
72
|
// Allow all hosts - essential for Modal tunnel URLs
|
|
52
73
|
allowedHosts: true,
|
|
74
|
+
fs: {
|
|
75
|
+
strict: true,
|
|
76
|
+
// Vite replaces its default deny list when one is provided, so preserve those defaults here.
|
|
77
|
+
deny: [
|
|
78
|
+
".env",
|
|
79
|
+
".env.*",
|
|
80
|
+
"*.{crt,pem}",
|
|
81
|
+
"**/.git/**",
|
|
82
|
+
// base44/ contains backend code and the Base44 manifest — never serve it from the dev server.
|
|
83
|
+
// Root-anchored on purpose: some apps have a stray src/base44/ that IS frontend code.
|
|
84
|
+
path.resolve(root, "base44").replace(/\\/g, "/") + "/**",
|
|
85
|
+
],
|
|
86
|
+
},
|
|
53
87
|
// Route the HMR WebSocket through the preview proxy instead of
|
|
54
88
|
// the sandbox origin. When BASE44_HMR_HOST is unset (e.g. before
|
|
55
89
|
// the proxy is deployed), fall back to Vite's default behavior
|
|
@@ -104,14 +138,7 @@ export default function vitePlugin(opts = {}) {
|
|
|
104
138
|
optimizeDeps: {
|
|
105
139
|
...(isRunningInSandbox
|
|
106
140
|
? {
|
|
107
|
-
include: filterPackagesInProject(
|
|
108
|
-
"react",
|
|
109
|
-
"react-dom",
|
|
110
|
-
"framer-motion",
|
|
111
|
-
"lodash",
|
|
112
|
-
"moment",
|
|
113
|
-
"react-quill",
|
|
114
|
-
], root),
|
|
141
|
+
include: filterPackagesInProject(PREBUNDLED_SANDBOX_DEPS, root),
|
|
115
142
|
}
|
|
116
143
|
: {}),
|
|
117
144
|
esbuildOptions: {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAeA,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAmBV"}
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
|
+
/**
|
|
4
|
+
* The package that owns an optimizeDeps entry. Deep entries like
|
|
5
|
+
* `react-dom/client` are separate entries to Vite's optimizer but are declared
|
|
6
|
+
* in package.json only under their owning package.
|
|
7
|
+
*/
|
|
8
|
+
function owningPackage(entry) {
|
|
9
|
+
const segments = entry.split("/");
|
|
10
|
+
return entry.startsWith("@")
|
|
11
|
+
? segments.slice(0, 2).join("/")
|
|
12
|
+
: segments[0] ?? entry;
|
|
13
|
+
}
|
|
3
14
|
export function filterPackagesInProject(packages, root) {
|
|
4
15
|
try {
|
|
5
16
|
const packageJsonPath = join(root, "package.json");
|
|
@@ -12,7 +23,7 @@ export function filterPackagesInProject(packages, root) {
|
|
|
12
23
|
...packageJson.devDependencies,
|
|
13
24
|
...packageJson.peerDependencies,
|
|
14
25
|
};
|
|
15
|
-
return packages.filter((pkg) => pkg in allDeps);
|
|
26
|
+
return packages.filter((pkg) => owningPackage(pkg) in allDeps);
|
|
16
27
|
}
|
|
17
28
|
catch (error) {
|
|
18
29
|
console.warn("Failed to read project package.json:", error);
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,uBAAuB,CACrC,QAAkB,EAClB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG;YACd,GAAG,WAAW,CAAC,YAAY;YAC3B,GAAG,WAAW,CAAC,eAAe;YAC9B,GAAG,WAAW,CAAC,gBAAgB;SAChC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAkB,EAClB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG;YACd,GAAG,WAAW,CAAC,YAAY;YAC3B,GAAG,WAAW,CAAC,eAAe;YAC9B,GAAG,WAAW,CAAC,gBAAgB;SAChC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import type { Plugin, UserConfig } from "vite";
|
|
2
3
|
import { loadEnv } from "vite";
|
|
3
4
|
import { errorOverlayPlugin } from "./error-overlay-plugin.js";
|
|
@@ -8,6 +9,26 @@ import { buildStatusPlugin } from "./build-status-plugin.js";
|
|
|
8
9
|
|
|
9
10
|
const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
|
|
10
11
|
|
|
12
|
+
// Every entry Vite must pre-bundle before the browser loads the app. Deep
|
|
13
|
+
// entries are listed explicitly: to the optimizer `react/jsx-dev-runtime` and
|
|
14
|
+
// `react-dom/client` are separate entries, NOT covered by `react`/`react-dom`.
|
|
15
|
+
// Leaving one out means Vite discovers it mid-load, re-runs the optimizer and
|
|
16
|
+
// mints a new browserHash — so the same page ends up holding `react.js?v=A`
|
|
17
|
+
// and `react.js?v=B`, two React instances, and dies on its first hook with
|
|
18
|
+
// "Cannot read properties of null (reading 'useState')".
|
|
19
|
+
export const PREBUNDLED_SANDBOX_DEPS = [
|
|
20
|
+
"react",
|
|
21
|
+
"react/jsx-runtime",
|
|
22
|
+
"react/jsx-dev-runtime",
|
|
23
|
+
"react-dom",
|
|
24
|
+
"react-dom/client",
|
|
25
|
+
"react-router-dom",
|
|
26
|
+
"framer-motion",
|
|
27
|
+
"lodash",
|
|
28
|
+
"moment",
|
|
29
|
+
"react-quill",
|
|
30
|
+
];
|
|
31
|
+
|
|
11
32
|
const ENV_UNSET_GUIDANCE = [
|
|
12
33
|
"[base44] No Base44 backend configured — VITE_BASE44_APP_BASE_URL is not set, so /api requests have nowhere to go.",
|
|
13
34
|
"[base44] Run the app through the Base44 CLI instead:",
|
|
@@ -41,7 +62,8 @@ export default function vitePlugin(
|
|
|
41
62
|
return [
|
|
42
63
|
{
|
|
43
64
|
name: "base44",
|
|
44
|
-
config: (
|
|
65
|
+
config: (config, { command }) => {
|
|
66
|
+
const { mode, root = process.cwd() } = config;
|
|
45
67
|
const env = loadEnv(mode ?? "development", root, "");
|
|
46
68
|
|
|
47
69
|
if (!isRunningInSandbox && command === "build" && !env.VITE_BASE44_APP_ID) {
|
|
@@ -76,6 +98,19 @@ export default function vitePlugin(
|
|
|
76
98
|
strictPort: true,
|
|
77
99
|
// Allow all hosts - essential for Modal tunnel URLs
|
|
78
100
|
allowedHosts: true,
|
|
101
|
+
fs: {
|
|
102
|
+
strict: true,
|
|
103
|
+
// Vite replaces its default deny list when one is provided, so preserve those defaults here.
|
|
104
|
+
deny: [
|
|
105
|
+
".env",
|
|
106
|
+
".env.*",
|
|
107
|
+
"*.{crt,pem}",
|
|
108
|
+
"**/.git/**",
|
|
109
|
+
// base44/ contains backend code and the Base44 manifest — never serve it from the dev server.
|
|
110
|
+
// Root-anchored on purpose: some apps have a stray src/base44/ that IS frontend code.
|
|
111
|
+
path.resolve(root, "base44").replace(/\\/g, "/") + "/**",
|
|
112
|
+
],
|
|
113
|
+
},
|
|
79
114
|
// Route the HMR WebSocket through the preview proxy instead of
|
|
80
115
|
// the sandbox origin. When BASE44_HMR_HOST is unset (e.g. before
|
|
81
116
|
// the proxy is deployed), fall back to Vite's default behavior
|
|
@@ -137,14 +172,7 @@ export default function vitePlugin(
|
|
|
137
172
|
...(isRunningInSandbox
|
|
138
173
|
? {
|
|
139
174
|
include: filterPackagesInProject(
|
|
140
|
-
|
|
141
|
-
"react",
|
|
142
|
-
"react-dom",
|
|
143
|
-
"framer-motion",
|
|
144
|
-
"lodash",
|
|
145
|
-
"moment",
|
|
146
|
-
"react-quill",
|
|
147
|
-
],
|
|
175
|
+
PREBUNDLED_SANDBOX_DEPS,
|
|
148
176
|
root
|
|
149
177
|
),
|
|
150
178
|
}
|
package/src/utils.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* The package that owns an optimizeDeps entry. Deep entries like
|
|
6
|
+
* `react-dom/client` are separate entries to Vite's optimizer but are declared
|
|
7
|
+
* in package.json only under their owning package.
|
|
8
|
+
*/
|
|
9
|
+
function owningPackage(entry: string): string {
|
|
10
|
+
const segments = entry.split("/");
|
|
11
|
+
return entry.startsWith("@")
|
|
12
|
+
? segments.slice(0, 2).join("/")
|
|
13
|
+
: segments[0] ?? entry;
|
|
14
|
+
}
|
|
15
|
+
|
|
4
16
|
export function filterPackagesInProject(
|
|
5
17
|
packages: string[],
|
|
6
18
|
root: string
|
|
@@ -18,7 +30,7 @@ export function filterPackagesInProject(
|
|
|
18
30
|
...packageJson.peerDependencies,
|
|
19
31
|
};
|
|
20
32
|
|
|
21
|
-
return packages.filter((pkg) => pkg in allDeps);
|
|
33
|
+
return packages.filter((pkg) => owningPackage(pkg) in allDeps);
|
|
22
34
|
} catch (error) {
|
|
23
35
|
console.warn("Failed to read project package.json:", error);
|
|
24
36
|
return [];
|