webstudio 0.0.0-4f7bf18 → 0.0.0-5558cd0
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/lib/cli.js +49 -77
- package/package.json +17 -17
- package/templates/defaults/package.json +8 -8
- package/templates/react-router/package.json +34 -0
- package/templates/react-router-docker/Dockerfile +6 -11
- package/templates/react-router-docker/package.json +4 -32
- package/templates/react-router-netlify/app/constants.mjs +29 -0
- package/templates/react-router-netlify/netlify.toml +6 -0
- package/templates/react-router-netlify/package.json +10 -0
- package/templates/react-router-netlify/vite.config.ts +7 -0
- package/templates/react-router-vercel/app/constants.mjs +25 -0
- package/templates/react-router-vercel/package.json +9 -0
- package/templates/react-router-vercel/vercel.json +11 -0
- package/templates/ssg/package.json +7 -7
- /package/templates/{react-router-docker → react-router}/app/extension.ts +0 -0
- /package/templates/{react-router-docker → react-router}/app/root.tsx +0 -0
- /package/templates/{react-router-docker → react-router}/app/route-templates/default-sitemap.tsx +0 -0
- /package/templates/{react-router-docker → react-router}/app/route-templates/html.tsx +0 -0
- /package/templates/{react-router-docker → react-router}/app/route-templates/redirect.tsx +0 -0
- /package/templates/{react-router-docker → react-router}/app/route-templates/xml.tsx +0 -0
- /package/templates/{react-router-docker → react-router}/app/routes/[robots.txt].tsx +0 -0
- /package/templates/{react-router-docker → react-router}/app/routes.ts +0 -0
- /package/templates/{react-router-docker → react-router}/public/favicon.ico +0 -0
- /package/templates/{react-router-docker → react-router}/tsconfig.json +0 -0
- /package/templates/{react-router-docker → react-router}/vite.config.ts +0 -0
package/lib/cli.js
CHANGED
|
@@ -28,7 +28,6 @@ import { kebabCase, camelCase } from "change-case";
|
|
|
28
28
|
import "nanoid";
|
|
29
29
|
import { parseExpressionAt } from "acorn";
|
|
30
30
|
import { simple } from "acorn-walk";
|
|
31
|
-
import warnOnce from "warn-once";
|
|
32
31
|
import reservedIdentifiers from "reserved-identifiers";
|
|
33
32
|
import hash from "@emotion/hash";
|
|
34
33
|
import { x } from "tinyexec";
|
|
@@ -77,18 +76,40 @@ const PROJECT_TEMPLATES = [
|
|
|
77
76
|
label: "Vanilla",
|
|
78
77
|
expand: ["defaults"]
|
|
79
78
|
},
|
|
80
|
-
{
|
|
79
|
+
{
|
|
80
|
+
value: "docker",
|
|
81
|
+
label: "Docker",
|
|
82
|
+
expand: ["react-router", "react-router-docker"]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
value: "vercel",
|
|
86
|
+
label: "Vercel",
|
|
87
|
+
expand: ["react-router", "react-router-vercel"]
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
value: "vercel-legacy",
|
|
91
|
+
label: "Vercel (legacy)",
|
|
92
|
+
expand: ["defaults", "vercel"]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
value: "netlify",
|
|
96
|
+
label: "Netlify",
|
|
97
|
+
expand: ["react-router", "react-router-netlify"]
|
|
98
|
+
},
|
|
81
99
|
{
|
|
82
100
|
value: "netlify-functions",
|
|
83
|
-
label: "Netlify Functions",
|
|
101
|
+
label: "Netlify Functions (legacy)",
|
|
84
102
|
expand: ["defaults", "netlify-functions"]
|
|
85
103
|
},
|
|
86
104
|
{
|
|
87
105
|
value: "netlify-edge-functions",
|
|
88
|
-
label: "Netlify Edge Functions",
|
|
106
|
+
label: "Netlify Edge Functions (legacy)",
|
|
89
107
|
expand: ["defaults", "netlify-edge-functions"]
|
|
90
108
|
},
|
|
91
|
-
{
|
|
109
|
+
{
|
|
110
|
+
value: "ssg",
|
|
111
|
+
label: "Static Site Generation (SSG)"
|
|
112
|
+
},
|
|
92
113
|
{
|
|
93
114
|
value: "ssg-netlify",
|
|
94
115
|
label: "Static Site Generation (SSG) Netlify",
|
|
@@ -105,11 +126,6 @@ const INTERNAL_TEMPLATES = [
|
|
|
105
126
|
value: "cloudflare",
|
|
106
127
|
label: "Cloudflare",
|
|
107
128
|
expand: ["defaults", "cloudflare"]
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
value: "react-router-docker",
|
|
111
|
-
label: "Dokcer",
|
|
112
|
-
expand: ["react-router-docker"]
|
|
113
129
|
}
|
|
114
130
|
];
|
|
115
131
|
const isFileExists = async (filePath) => {
|
|
@@ -735,19 +751,13 @@ const prefixStyles = (styleMap) => {
|
|
|
735
751
|
if (property === "backdrop-filter") {
|
|
736
752
|
newStyleMap.set("-webkit-backdrop-filter", value);
|
|
737
753
|
}
|
|
754
|
+
if (property === "view-timeline-name" || property === "scroll-timeline-name") {
|
|
755
|
+
newStyleMap.set(`--${property}`, value);
|
|
756
|
+
}
|
|
738
757
|
newStyleMap.set(property, value);
|
|
739
758
|
}
|
|
740
759
|
return newStyleMap;
|
|
741
760
|
};
|
|
742
|
-
const captureError = (error, value) => {
|
|
743
|
-
if (process.env.NODE_ENV === "development") {
|
|
744
|
-
throw error;
|
|
745
|
-
}
|
|
746
|
-
setTimeout(() => {
|
|
747
|
-
throw error;
|
|
748
|
-
});
|
|
749
|
-
return value;
|
|
750
|
-
};
|
|
751
761
|
const fallbackTransform = (styleValue) => {
|
|
752
762
|
var _a;
|
|
753
763
|
if (styleValue.type !== "fontFamily") {
|
|
@@ -839,7 +849,7 @@ const toValue = (styleValue, transformValue) => {
|
|
|
839
849
|
if (value.type === "guaranteedInvalid") {
|
|
840
850
|
return "";
|
|
841
851
|
}
|
|
842
|
-
return
|
|
852
|
+
return "";
|
|
843
853
|
};
|
|
844
854
|
const Unit = z.string();
|
|
845
855
|
const UnitValue = z.object({
|
|
@@ -2490,6 +2500,7 @@ const generateExpression = ({
|
|
|
2490
2500
|
usedDataSources == null ? void 0 : usedDataSources.set(dep.id, dep);
|
|
2491
2501
|
return scope.getName(dep.id, dep.name);
|
|
2492
2502
|
}
|
|
2503
|
+
return "undefined";
|
|
2493
2504
|
}
|
|
2494
2505
|
});
|
|
2495
2506
|
};
|
|
@@ -3439,7 +3450,7 @@ ${prop.name}={${propValue}}`;
|
|
|
3439
3450
|
return "";
|
|
3440
3451
|
}
|
|
3441
3452
|
const indexVariable = scope.getName(`${instance.id}-index`, "index");
|
|
3442
|
-
generatedElement += `{${collectionDataValue}?.map((${collectionItemValue}: any, ${indexVariable}: number) =>
|
|
3453
|
+
generatedElement += `{${collectionDataValue}?.map?.((${collectionItemValue}: any, ${indexVariable}: number) =>
|
|
3443
3454
|
`;
|
|
3444
3455
|
generatedElement += `<Fragment key={${indexVariable}}>
|
|
3445
3456
|
`;
|
|
@@ -3637,47 +3648,6 @@ const generateWebstudioComponent = ({
|
|
|
3637
3648
|
`;
|
|
3638
3649
|
return generatedComponent;
|
|
3639
3650
|
};
|
|
3640
|
-
const imageSizes = [16, 32, 48, 64, 96, 128, 256, 384];
|
|
3641
|
-
const deviceSizes = [640, 750, 828, 1080, 1200, 1920, 2048, 3840];
|
|
3642
|
-
const allSizes = [...imageSizes, ...deviceSizes];
|
|
3643
|
-
const NON_EXISTING_DOMAIN = "https://a3cbcbec-cdb1-4ea4-ad60-43c795308ddc.ddc";
|
|
3644
|
-
const joinPath = (...segments) => {
|
|
3645
|
-
return segments.filter((segment) => segment !== "").map((segment) => segment.replace(/(^\/+|\/+$)/g, "")).join("/");
|
|
3646
|
-
};
|
|
3647
|
-
const encodePathFragment = (fragment) => {
|
|
3648
|
-
return encodeURIComponent(fragment).replace(/%2F/g, "/");
|
|
3649
|
-
};
|
|
3650
|
-
const wsImageLoader = (props2) => {
|
|
3651
|
-
const width = props2.format === "raw" ? 16 : props2.width;
|
|
3652
|
-
const quality = props2.format === "raw" ? 100 : props2.quality;
|
|
3653
|
-
if (process.env.NODE_ENV !== "production") {
|
|
3654
|
-
warnOnce(
|
|
3655
|
-
allSizes.includes(width) === false,
|
|
3656
|
-
"Width must be only from allowed values"
|
|
3657
|
-
);
|
|
3658
|
-
}
|
|
3659
|
-
let src = props2.src;
|
|
3660
|
-
if (src.startsWith("/cgi/asset")) {
|
|
3661
|
-
src = src.slice("/cgi/asset".length);
|
|
3662
|
-
}
|
|
3663
|
-
const resultUrl = new URL("/cgi/image/", NON_EXISTING_DOMAIN);
|
|
3664
|
-
if (props2.format !== "raw") {
|
|
3665
|
-
resultUrl.searchParams.set("width", width.toString());
|
|
3666
|
-
resultUrl.searchParams.set("quality", quality.toString());
|
|
3667
|
-
if (props2.height != null) {
|
|
3668
|
-
resultUrl.searchParams.set("height", props2.height.toString());
|
|
3669
|
-
}
|
|
3670
|
-
if (props2.fit != null) {
|
|
3671
|
-
resultUrl.searchParams.set("fit", props2.fit);
|
|
3672
|
-
}
|
|
3673
|
-
}
|
|
3674
|
-
resultUrl.searchParams.set("format", props2.format ?? "auto");
|
|
3675
|
-
resultUrl.pathname = joinPath(resultUrl.pathname, encodePathFragment(src));
|
|
3676
|
-
if (resultUrl.href.startsWith(NON_EXISTING_DOMAIN)) {
|
|
3677
|
-
return `${resultUrl.pathname}?${resultUrl.searchParams.toString()}`;
|
|
3678
|
-
}
|
|
3679
|
-
return resultUrl.href;
|
|
3680
|
-
};
|
|
3681
3651
|
const BOOLEAN_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
3682
3652
|
"async",
|
|
3683
3653
|
"autofocus",
|
|
@@ -5871,6 +5841,11 @@ const copyTemplates = async (template) => {
|
|
|
5871
5841
|
const importFrom = (importee, importer) => {
|
|
5872
5842
|
return relative(dirname(importer), importee).replaceAll("\\", "/");
|
|
5873
5843
|
};
|
|
5844
|
+
const npmrc = `force=true
|
|
5845
|
+
loglevel=error
|
|
5846
|
+
audit=false
|
|
5847
|
+
fund=false
|
|
5848
|
+
`;
|
|
5874
5849
|
const prebuild = async (options) => {
|
|
5875
5850
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
5876
5851
|
if (options.template.length === 0) {
|
|
@@ -5898,14 +5873,14 @@ Please check webstudio --help for more details`
|
|
|
5898
5873
|
await rm(generatedDir, { recursive: true, force: true });
|
|
5899
5874
|
const routesDir = join(appRoot, "routes");
|
|
5900
5875
|
await rm(routesDir, { recursive: true, force: true });
|
|
5901
|
-
await writeFile(join(cwd(), ".npmrc"),
|
|
5876
|
+
await writeFile(join(cwd(), ".npmrc"), npmrc);
|
|
5902
5877
|
for (const template of options.template) {
|
|
5903
5878
|
await copyTemplates(template);
|
|
5904
5879
|
}
|
|
5905
5880
|
let framework;
|
|
5906
5881
|
if (options.template.includes("ssg")) {
|
|
5907
5882
|
framework = await createFramework();
|
|
5908
|
-
} else if (options.template.includes("react-router
|
|
5883
|
+
} else if (options.template.includes("react-router")) {
|
|
5909
5884
|
framework = await createFramework$1();
|
|
5910
5885
|
} else {
|
|
5911
5886
|
framework = await createFramework$2();
|
|
@@ -6021,14 +5996,10 @@ Please check webstudio --help for more details`
|
|
|
6021
5996
|
const assetOrigin = siteData.origin;
|
|
6022
5997
|
for (const asset of siteData.assets) {
|
|
6023
5998
|
if (asset.type === "image") {
|
|
6024
|
-
const imagePath = wsImageLoader({
|
|
6025
|
-
src: asset.name,
|
|
6026
|
-
format: "raw"
|
|
6027
|
-
});
|
|
6028
5999
|
assetsToDownload.push(
|
|
6029
6000
|
limit(
|
|
6030
6001
|
() => downloadAsset(
|
|
6031
|
-
`${assetOrigin}
|
|
6002
|
+
`${assetOrigin}/cgi/image/${asset.name}?format=raw`,
|
|
6032
6003
|
asset.name,
|
|
6033
6004
|
assetBaseUrl
|
|
6034
6005
|
)
|
|
@@ -6445,6 +6416,7 @@ const getDeploymentInstructions = (deployTarget) => {
|
|
|
6445
6416
|
switch (deployTarget) {
|
|
6446
6417
|
case "vercel":
|
|
6447
6418
|
return `Run ${pc.dim("npx vercel")} to publish on Vercel.`;
|
|
6419
|
+
case "netlify":
|
|
6448
6420
|
case "netlify-functions":
|
|
6449
6421
|
case "netlify-edge-functions":
|
|
6450
6422
|
return [
|
|
@@ -6459,7 +6431,7 @@ const getDeploymentInstructions = (deployTarget) => {
|
|
|
6459
6431
|
}
|
|
6460
6432
|
};
|
|
6461
6433
|
const name = "webstudio";
|
|
6462
|
-
const version = "0.0.0-
|
|
6434
|
+
const version = "0.0.0-5558cd0";
|
|
6463
6435
|
const description = "Webstudio CLI";
|
|
6464
6436
|
const author = "Webstudio <github@webstudio.is>";
|
|
6465
6437
|
const homepage = "https://webstudio.is";
|
|
@@ -6501,18 +6473,17 @@ const dependencies = {
|
|
|
6501
6473
|
"p-limit": "^6.2.0",
|
|
6502
6474
|
parse5: "7.2.1",
|
|
6503
6475
|
picocolors: "^1.1.1",
|
|
6504
|
-
react: "18.3.0-canary-14898b6a9-20240318",
|
|
6505
6476
|
"reserved-identifiers": "^1.0.0",
|
|
6506
6477
|
tinyexec: "^0.3.2",
|
|
6507
|
-
"warn-once": "^0.1.1",
|
|
6508
6478
|
yargs: "^17.7.2",
|
|
6509
6479
|
zod: "^3.22.4"
|
|
6510
6480
|
};
|
|
6511
6481
|
const devDependencies = {
|
|
6512
6482
|
"@netlify/remix-adapter": "^2.5.1",
|
|
6513
6483
|
"@netlify/remix-edge-adapter": "3.4.2",
|
|
6514
|
-
"@react-router
|
|
6515
|
-
"@react-router/
|
|
6484
|
+
"@netlify/vite-plugin-react-router": "^1.0.0",
|
|
6485
|
+
"@react-router/dev": "^7.1.5",
|
|
6486
|
+
"@react-router/fs-routes": "^7.1.5",
|
|
6516
6487
|
"@remix-run/cloudflare": "^2.15.2",
|
|
6517
6488
|
"@remix-run/cloudflare-pages": "^2.15.2",
|
|
6518
6489
|
"@remix-run/dev": "^2.15.2",
|
|
@@ -6536,12 +6507,13 @@ const devDependencies = {
|
|
|
6536
6507
|
h3: "^1.14.0",
|
|
6537
6508
|
ipx: "^3.0.1",
|
|
6538
6509
|
prettier: "3.4.2",
|
|
6510
|
+
react: "18.3.0-canary-14898b6a9-20240318",
|
|
6539
6511
|
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
6540
|
-
"react-router": "^7.1.
|
|
6512
|
+
"react-router": "^7.1.5",
|
|
6541
6513
|
"ts-expect": "^1.3.0",
|
|
6542
|
-
vike: "^0.4.
|
|
6514
|
+
vike: "^0.4.220",
|
|
6543
6515
|
vite: "^5.4.11",
|
|
6544
|
-
vitest: "^3.0.
|
|
6516
|
+
vitest: "^3.0.4",
|
|
6545
6517
|
wrangler: "^3.63.2"
|
|
6546
6518
|
};
|
|
6547
6519
|
const packageJson = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webstudio",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-5558cd0",
|
|
4
4
|
"description": "Webstudio CLI",
|
|
5
5
|
"author": "Webstudio <github@webstudio.is>",
|
|
6
6
|
"homepage": "https://webstudio.is",
|
|
@@ -37,18 +37,17 @@
|
|
|
37
37
|
"p-limit": "^6.2.0",
|
|
38
38
|
"parse5": "7.2.1",
|
|
39
39
|
"picocolors": "^1.1.1",
|
|
40
|
-
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
41
40
|
"reserved-identifiers": "^1.0.0",
|
|
42
41
|
"tinyexec": "^0.3.2",
|
|
43
|
-
"warn-once": "^0.1.1",
|
|
44
42
|
"yargs": "^17.7.2",
|
|
45
43
|
"zod": "^3.22.4"
|
|
46
44
|
},
|
|
47
45
|
"devDependencies": {
|
|
48
46
|
"@netlify/remix-adapter": "^2.5.1",
|
|
49
47
|
"@netlify/remix-edge-adapter": "3.4.2",
|
|
50
|
-
"@react-router
|
|
51
|
-
"@react-router/
|
|
48
|
+
"@netlify/vite-plugin-react-router": "^1.0.0",
|
|
49
|
+
"@react-router/dev": "^7.1.5",
|
|
50
|
+
"@react-router/fs-routes": "^7.1.5",
|
|
52
51
|
"@remix-run/cloudflare": "^2.15.2",
|
|
53
52
|
"@remix-run/cloudflare-pages": "^2.15.2",
|
|
54
53
|
"@remix-run/dev": "^2.15.2",
|
|
@@ -62,22 +61,23 @@
|
|
|
62
61
|
"h3": "^1.14.0",
|
|
63
62
|
"ipx": "^3.0.1",
|
|
64
63
|
"prettier": "3.4.2",
|
|
64
|
+
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
65
65
|
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
66
|
-
"react-router": "^7.1.
|
|
66
|
+
"react-router": "^7.1.5",
|
|
67
67
|
"ts-expect": "^1.3.0",
|
|
68
|
-
"vike": "^0.4.
|
|
68
|
+
"vike": "^0.4.220",
|
|
69
69
|
"vite": "^5.4.11",
|
|
70
|
-
"vitest": "^3.0.
|
|
70
|
+
"vitest": "^3.0.4",
|
|
71
71
|
"wrangler": "^3.63.2",
|
|
72
|
-
"@webstudio-is/http-client": "0.0.0-
|
|
73
|
-
"@webstudio-is/image": "0.0.0-
|
|
74
|
-
"@webstudio-is/react-sdk": "0.0.0-
|
|
75
|
-
"@webstudio-is/sdk": "0.0.0-
|
|
76
|
-
"@webstudio-is/sdk-components-animation": "0.0.0-
|
|
77
|
-
"@webstudio-is/sdk-components-react": "0.0.0-
|
|
78
|
-
"@webstudio-is/sdk-components-react-
|
|
79
|
-
"@webstudio-is/sdk-components-react-
|
|
80
|
-
"@webstudio-is/sdk-components-react-router": "0.0.0-
|
|
72
|
+
"@webstudio-is/http-client": "0.0.0-5558cd0",
|
|
73
|
+
"@webstudio-is/image": "0.0.0-5558cd0",
|
|
74
|
+
"@webstudio-is/react-sdk": "0.0.0-5558cd0",
|
|
75
|
+
"@webstudio-is/sdk": "0.0.0-5558cd0",
|
|
76
|
+
"@webstudio-is/sdk-components-animation": "0.0.0-5558cd0",
|
|
77
|
+
"@webstudio-is/sdk-components-react": "0.0.0-5558cd0",
|
|
78
|
+
"@webstudio-is/sdk-components-react-remix": "0.0.0-5558cd0",
|
|
79
|
+
"@webstudio-is/sdk-components-react-radix": "0.0.0-5558cd0",
|
|
80
|
+
"@webstudio-is/sdk-components-react-router": "0.0.0-5558cd0",
|
|
81
81
|
"@webstudio-is/tsconfig": "1.0.7"
|
|
82
82
|
},
|
|
83
83
|
"scripts": {
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
"@remix-run/node": "2.15.2",
|
|
12
12
|
"@remix-run/react": "2.15.2",
|
|
13
13
|
"@remix-run/server-runtime": "2.15.2",
|
|
14
|
-
"@webstudio-is/image": "0.0.0-
|
|
15
|
-
"@webstudio-is/react-sdk": "0.0.0-
|
|
16
|
-
"@webstudio-is/sdk": "0.0.0-
|
|
17
|
-
"@webstudio-is/sdk-components-react": "0.0.0-
|
|
18
|
-
"@webstudio-is/sdk-components-animation": "0.0.0-
|
|
19
|
-
"@webstudio-is/sdk-components-react-radix": "0.0.0-
|
|
20
|
-
"@webstudio-is/sdk-components-react-remix": "0.0.0-
|
|
21
|
-
"isbot": "^5.1.
|
|
14
|
+
"@webstudio-is/image": "0.0.0-5558cd0",
|
|
15
|
+
"@webstudio-is/react-sdk": "0.0.0-5558cd0",
|
|
16
|
+
"@webstudio-is/sdk": "0.0.0-5558cd0",
|
|
17
|
+
"@webstudio-is/sdk-components-react": "0.0.0-5558cd0",
|
|
18
|
+
"@webstudio-is/sdk-components-animation": "0.0.0-5558cd0",
|
|
19
|
+
"@webstudio-is/sdk-components-react-radix": "0.0.0-5558cd0",
|
|
20
|
+
"@webstudio-is/sdk-components-react-remix": "0.0.0-5558cd0",
|
|
21
|
+
"isbot": "^5.1.22",
|
|
22
22
|
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
23
23
|
"react-dom": "18.3.0-canary-14898b6a9-20240318"
|
|
24
24
|
},
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "module",
|
|
3
|
+
"private": true,
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "react-router build",
|
|
7
|
+
"dev": "react-router dev",
|
|
8
|
+
"typecheck": "tsc"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@react-router/dev": "^7.1.5",
|
|
12
|
+
"@react-router/fs-routes": "^7.1.5",
|
|
13
|
+
"@webstudio-is/image": "0.0.0-5558cd0",
|
|
14
|
+
"@webstudio-is/react-sdk": "0.0.0-5558cd0",
|
|
15
|
+
"@webstudio-is/sdk": "0.0.0-5558cd0",
|
|
16
|
+
"@webstudio-is/sdk-components-animation": "0.0.0-5558cd0",
|
|
17
|
+
"@webstudio-is/sdk-components-react-radix": "0.0.0-5558cd0",
|
|
18
|
+
"@webstudio-is/sdk-components-react-router": "0.0.0-5558cd0",
|
|
19
|
+
"@webstudio-is/sdk-components-react": "0.0.0-5558cd0",
|
|
20
|
+
"isbot": "^5.1.22",
|
|
21
|
+
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
22
|
+
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
23
|
+
"react-router": "^7.1.5",
|
|
24
|
+
"vite": "^5.4.11"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/react": "^18.2.70",
|
|
28
|
+
"@types/react-dom": "^18.2.25",
|
|
29
|
+
"typescript": "5.7.3"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20.0.0"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
FROM node:22-alpine AS
|
|
2
|
-
COPY . /app
|
|
3
|
-
WORKDIR /app
|
|
4
|
-
RUN npm install
|
|
5
|
-
|
|
6
|
-
FROM node:22-alpine AS production-dependencies-env
|
|
7
|
-
COPY .npmrc ./package.json /app/
|
|
1
|
+
FROM node:22-alpine AS dependencies-env
|
|
2
|
+
COPY .npmrc package.json /app/
|
|
8
3
|
WORKDIR /app
|
|
9
4
|
RUN npm install --omit=dev
|
|
10
5
|
|
|
11
|
-
FROM
|
|
6
|
+
FROM dependencies-env AS build-env
|
|
12
7
|
COPY . /app/
|
|
13
|
-
COPY --from=development-dependencies-env /app/node_modules /app/node_modules
|
|
14
8
|
WORKDIR /app
|
|
9
|
+
RUN npm install
|
|
15
10
|
RUN npm run build
|
|
16
11
|
|
|
17
12
|
FROM node:22-alpine
|
|
18
|
-
COPY .npmrc
|
|
19
|
-
COPY --from=
|
|
13
|
+
COPY .npmrc package.json /app/
|
|
14
|
+
COPY --from=dependencies-env /app/node_modules /app/node_modules
|
|
20
15
|
COPY --from=build-env /app/build /app/build
|
|
21
16
|
COPY --from=build-env /app/public /app/public
|
|
22
17
|
WORKDIR /app
|
|
@@ -1,39 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"type": "module",
|
|
3
|
-
"private": true,
|
|
4
|
-
"sideEffects": false,
|
|
5
2
|
"scripts": {
|
|
6
|
-
"
|
|
7
|
-
"dev": "react-router dev",
|
|
8
|
-
"start": "react-router-serve ./build/server/index.js",
|
|
9
|
-
"typecheck": "tsc"
|
|
3
|
+
"start": "react-router-serve ./build/server/index.js"
|
|
10
4
|
},
|
|
11
5
|
"dependencies": {
|
|
12
|
-
"@react-router/
|
|
13
|
-
"@react-router/
|
|
14
|
-
"@react-router/node": "^7.1.3",
|
|
15
|
-
"@react-router/serve": "^7.1.3",
|
|
16
|
-
"@webstudio-is/image": "0.0.0-4f7bf18",
|
|
17
|
-
"@webstudio-is/react-sdk": "0.0.0-4f7bf18",
|
|
18
|
-
"@webstudio-is/sdk": "0.0.0-4f7bf18",
|
|
19
|
-
"@webstudio-is/sdk-components-animation": "0.0.0-4f7bf18",
|
|
20
|
-
"@webstudio-is/sdk-components-react-radix": "0.0.0-4f7bf18",
|
|
21
|
-
"@webstudio-is/sdk-components-react-router": "0.0.0-4f7bf18",
|
|
22
|
-
"@webstudio-is/sdk-components-react": "0.0.0-4f7bf18",
|
|
6
|
+
"@react-router/node": "^7.1.5",
|
|
7
|
+
"@react-router/serve": "^7.1.5",
|
|
23
8
|
"h3": "^1.14.0",
|
|
24
|
-
"ipx": "^3.0.1"
|
|
25
|
-
"isbot": "^5.1.19",
|
|
26
|
-
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
27
|
-
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
28
|
-
"react-router": "^7.1.3",
|
|
29
|
-
"vite": "^5.4.11"
|
|
30
|
-
},
|
|
31
|
-
"devDependencies": {
|
|
32
|
-
"@types/react": "^18.2.70",
|
|
33
|
-
"@types/react-dom": "^18.2.25",
|
|
34
|
-
"typescript": "5.7.3"
|
|
35
|
-
},
|
|
36
|
-
"engines": {
|
|
37
|
-
"node": ">=20.0.0"
|
|
9
|
+
"ipx": "^3.0.1"
|
|
38
10
|
}
|
|
39
11
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* We use mjs extension as constants in this file is shared with the build script
|
|
3
|
+
* and we use `node --eval` to extract the constants.
|
|
4
|
+
*/
|
|
5
|
+
export const assetBaseUrl = "/assets/";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @type {import("@webstudio-is/image").ImageLoader}
|
|
9
|
+
*/
|
|
10
|
+
export const imageLoader = (props) => {
|
|
11
|
+
if (import.meta.env.DEV) {
|
|
12
|
+
return props.src;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (props.format === "raw") {
|
|
16
|
+
return props.src;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// https://docs.netlify.com/image-cdn/overview/
|
|
20
|
+
const searchParams = new URLSearchParams();
|
|
21
|
+
searchParams.set("url", props.src);
|
|
22
|
+
searchParams.set("w", props.width.toString());
|
|
23
|
+
if (props.height) {
|
|
24
|
+
searchParams.set("h", props.height.toString());
|
|
25
|
+
}
|
|
26
|
+
searchParams.set("q", props.quality.toString());
|
|
27
|
+
// fit=contain by default
|
|
28
|
+
return `/.netlify/images?${searchParams}`;
|
|
29
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* We use mjs extension as constants in this file is shared with the build script
|
|
3
|
+
* and we use `node --eval` to extract the constants.
|
|
4
|
+
*/
|
|
5
|
+
export const assetBaseUrl = "/assets/";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @type {import("@webstudio-is/image").ImageLoader}
|
|
9
|
+
*/
|
|
10
|
+
export const imageLoader = (props) => {
|
|
11
|
+
if (process.env.NODE_ENV !== "production") {
|
|
12
|
+
return props.src;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (props.format === "raw") {
|
|
16
|
+
return props.src;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// https://vercel.com/blog/build-your-own-web-framework#automatic-image-optimization
|
|
20
|
+
const searchParams = new URLSearchParams();
|
|
21
|
+
searchParams.set("url", props.src);
|
|
22
|
+
searchParams.set("w", props.width.toString());
|
|
23
|
+
searchParams.set("q", props.quality.toString());
|
|
24
|
+
return `/_vercel/image?${searchParams}`;
|
|
25
|
+
};
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
"typecheck": "tsc"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@webstudio-is/image": "0.0.0-
|
|
12
|
-
"@webstudio-is/react-sdk": "0.0.0-
|
|
13
|
-
"@webstudio-is/sdk": "0.0.0-
|
|
14
|
-
"@webstudio-is/sdk-components-react": "0.0.0-
|
|
15
|
-
"@webstudio-is/sdk-components-animation": "0.0.0-
|
|
16
|
-
"@webstudio-is/sdk-components-react-radix": "0.0.0-
|
|
11
|
+
"@webstudio-is/image": "0.0.0-5558cd0",
|
|
12
|
+
"@webstudio-is/react-sdk": "0.0.0-5558cd0",
|
|
13
|
+
"@webstudio-is/sdk": "0.0.0-5558cd0",
|
|
14
|
+
"@webstudio-is/sdk-components-react": "0.0.0-5558cd0",
|
|
15
|
+
"@webstudio-is/sdk-components-animation": "0.0.0-5558cd0",
|
|
16
|
+
"@webstudio-is/sdk-components-react-radix": "0.0.0-5558cd0",
|
|
17
17
|
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
18
18
|
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
19
|
-
"vike": "^0.4.
|
|
19
|
+
"vike": "^0.4.220"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/react": "^18.2.70",
|
|
File without changes
|
|
File without changes
|
/package/templates/{react-router-docker → react-router}/app/route-templates/default-sitemap.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|