webstudio 0.133.0 → 0.135.0

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 CHANGED
@@ -419,6 +419,8 @@ var prebuild = async (options) => {
419
419
  const projectMetas = /* @__PURE__ */ new Map();
420
420
  const componentsByPage = {};
421
421
  const siteDataByPage = {};
422
+ const fontAssetsByPage = {};
423
+ const backgroundImageAssetsByPage = {};
422
424
  for (const page of Object.values(siteData.pages)) {
423
425
  const instanceMap = new Map(siteData.build.instances);
424
426
  const pageInstanceSet = findTreeInstanceIds(
@@ -476,9 +478,31 @@ var prebuild = async (options) => {
476
478
  projectMetas.set(instance.component, meta);
477
479
  }
478
480
  }
481
+ const styleSourceSelections = siteData.build?.styleSourceSelections ?? [];
482
+ const pageStyleSourceIds = new Set(
483
+ styleSourceSelections.filter(([, { instanceId }]) => pageInstanceSet.has(instanceId)).map(([, { values }]) => values).flat()
484
+ );
485
+ const pageStyles = siteData.build?.styles?.filter(
486
+ ([, { styleSourceId }]) => pageStyleSourceIds.has(styleSourceId)
487
+ );
488
+ const pageFontFamilySet = new Set(
489
+ pageStyles.filter(([, { property }]) => property === "fontFamily").map(
490
+ ([, { value }]) => value.type === "fontFamily" ? value.value : void 0
491
+ ).flat().filter((value) => value !== void 0)
492
+ );
493
+ const pageFontAssets = siteData.assets.filter((asset) => asset.type === "font").filter((fontAsset) => pageFontFamilySet.has(fontAsset.meta.family));
494
+ fontAssetsByPage[page.id] = pageFontAssets;
495
+ const backgroundImageAssetIdSet = new Set(
496
+ pageStyles.filter(([, { property }]) => property === "backgroundImage").map(
497
+ ([, { value }]) => value.type === "layers" ? value.value.map(
498
+ (layer) => layer.type === "image" ? layer.value.type === "asset" ? layer.value.value : void 0 : void 0
499
+ ) : void 0
500
+ ).flat().filter((value) => value !== void 0)
501
+ );
502
+ const backgroundImageAssets = siteData.assets.filter((asset) => asset.type === "image").filter((imageAsset) => backgroundImageAssetIdSet.has(imageAsset.id));
503
+ backgroundImageAssetsByPage[page.id] = backgroundImageAssets;
479
504
  }
480
505
  const assetsToDownload = [];
481
- const fontAssets = [];
482
506
  const imageAssets = [];
483
507
  for (const asset of siteData.assets) {
484
508
  if (asset.type === "image") {
@@ -511,7 +535,6 @@ var prebuild = async (options) => {
511
535
  )
512
536
  )
513
537
  );
514
- fontAssets.push(asset);
515
538
  }
516
539
  }
517
540
  }
@@ -586,6 +609,8 @@ var prebuild = async (options) => {
586
609
  `;
587
610
  }
588
611
  const pageData = siteDataByPage[pageId];
612
+ const pageFontAssets = fontAssetsByPage[pageId];
613
+ const pageBackgroundImageAssets = backgroundImageAssetsByPage[pageId];
589
614
  const renderedPageData = {
590
615
  project: siteData.build.pages.meta
591
616
  };
@@ -598,25 +623,25 @@ var prebuild = async (options) => {
598
623
  pages: siteData.build.pages,
599
624
  props
600
625
  });
601
- const pathVariableId = pageData.page.pathVariableId ?? "pathVariableId";
602
- if (pageData.page.pathVariableId === void 0) {
603
- dataSources.set(pathVariableId, {
604
- id: pathVariableId,
605
- name: "Page Params",
626
+ const pathParamsDataSourceId = pageData.page.pathParamsDataSourceId ?? "pathParamsDataSourceId";
627
+ if (pageData.page.pathParamsDataSourceId === void 0) {
628
+ dataSources.set(pathParamsDataSourceId, {
629
+ id: pathParamsDataSourceId,
630
+ name: "Path Params",
606
631
  type: "parameter"
607
632
  });
608
633
  }
609
634
  const pageComponent = generateWebstudioComponent({
610
635
  scope,
611
636
  name: "Page",
612
- rootInstanceId: pageData.page.rootInstanceId,
637
+ rootInstanceId,
613
638
  parameters: [
614
639
  {
615
640
  id: `params`,
616
641
  instanceId: "",
617
642
  name: "params",
618
643
  type: "parameter",
619
- value: pathVariableId
644
+ value: pathParamsDataSourceId
620
645
  }
621
646
  ],
622
647
  instances,
@@ -633,13 +658,20 @@ var prebuild = async (options) => {
633
658
  /* This is a auto generated file for building the project */
634
659
 
635
660
  import { Fragment, useState } from "react";
636
- import type { Asset, ImageAsset, ProjectMeta } from "@webstudio-is/sdk";
661
+ import type { Asset, FontAsset, ImageAsset, ProjectMeta } from "@webstudio-is/sdk";
637
662
  import { useResource } from "@webstudio-is/react-sdk";
638
663
  import type { PageMeta } from "@webstudio-is/react-sdk";
639
664
  ${componentImports}
640
665
  import type { PageData } from "~/routes/_index";
641
- export const fontAssets: Asset[] = ${JSON.stringify(fontAssets)}
642
666
  export const imageAssets: ImageAsset[] = ${JSON.stringify(imageAssets)}
667
+
668
+ // Font assets on current page (can be preloaded)
669
+ export const pageFontAssets: FontAsset[] = ${JSON.stringify(pageFontAssets)}
670
+
671
+ export const pageBackgroundImageAssets: ImageAsset[] = ${JSON.stringify(
672
+ pageBackgroundImageAssets
673
+ )}
674
+
643
675
  export const pageData: PageData = ${JSON.stringify(renderedPageData)};
644
676
  export const user: { email: string | null } | undefined = ${JSON.stringify(
645
677
  siteData.user
@@ -656,8 +688,8 @@ ${generateRemixParams(pageData.page.path)}
656
688
 
657
689
  ${utilsExport}
658
690
  `;
659
- const path = getPagePath(pageData.page.id, siteData.build.pages);
660
- const remixRoute = generateRemixRoute(path);
691
+ const pagePath = getPagePath(pageData.page.id, siteData.build.pages);
692
+ const remixRoute = generateRemixRoute(pagePath);
661
693
  const fileName = `${remixRoute}.tsx`;
662
694
  const routeFileContent = routeFileTemplate.replace(
663
695
  /".*\/__generated__\/_index"/,
@@ -695,6 +727,19 @@ ${utilsExport}
695
727
  )};
696
728
  `
697
729
  );
730
+ const redirects = siteData.build.pages?.redirects;
731
+ if (redirects !== void 0 && redirects.length > 0) {
732
+ spinner.text = "Generating redirects";
733
+ for (const redirect of redirects) {
734
+ const redirectPagePath = generateRemixRoute(redirect.old);
735
+ const redirectFileName = `${redirectPagePath}.ts`;
736
+ const content = `export const loader = () => {
737
+ return Response.redirect("${redirect.new}", ${redirect.status ?? 301});
738
+ };
739
+ `;
740
+ await ensureFileInPath(join4(routesDir, redirectFileName), content);
741
+ }
742
+ }
698
743
  spinner.text = "Downloading fonts and images";
699
744
  await Promise.all(assetsToDownload);
700
745
  spinner.succeed("Build finished");
@@ -868,7 +913,7 @@ import makeCLI from "yargs";
868
913
  // package.json
869
914
  var package_default = {
870
915
  name: "webstudio",
871
- version: "0.133.0",
916
+ version: "0.135.0",
872
917
  description: "Webstudio CLI",
873
918
  author: "Webstudio <github@webstudio.is>",
874
919
  homepage: "https://webstudio.is",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webstudio",
3
- "version": "0.133.0",
3
+ "version": "0.135.0",
4
4
  "description": "Webstudio CLI",
5
5
  "author": "Webstudio <github@webstudio.is>",
6
6
  "homepage": "https://webstudio.is",
@@ -28,20 +28,20 @@
28
28
  "title-case": "^4.1.0",
29
29
  "yargs": "^17.7.2",
30
30
  "zod": "^3.21.4",
31
- "@webstudio-is/http-client": "0.133.0",
32
- "@webstudio-is/image": "0.133.0",
33
- "@webstudio-is/react-sdk": "0.133.0",
34
- "@webstudio-is/sdk-components-react": "0.133.0",
35
- "@webstudio-is/sdk-components-react-radix": "0.133.0",
36
- "@webstudio-is/sdk-components-react-remix": "0.133.0",
37
- "@webstudio-is/sdk": "0.133.0"
31
+ "@webstudio-is/http-client": "0.135.0",
32
+ "@webstudio-is/react-sdk": "0.135.0",
33
+ "@webstudio-is/sdk": "0.135.0",
34
+ "@webstudio-is/sdk-components-react-radix": "0.135.0",
35
+ "@webstudio-is/sdk-components-react-remix": "0.135.0",
36
+ "@webstudio-is/sdk-components-react": "0.135.0",
37
+ "@webstudio-is/image": "0.135.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^18.17.1",
41
41
  "@types/prompts": "^2.4.5",
42
42
  "tsx": "^3.12.8",
43
43
  "typescript": "5.2.2",
44
- "@webstudio-is/form-handlers": "0.133.0",
44
+ "@webstudio-is/form-handlers": "0.135.0",
45
45
  "@webstudio-is/tsconfig": "1.0.7"
46
46
  },
47
47
  "scripts": {
@@ -6,14 +6,12 @@ import {
6
6
  type ActionArgs,
7
7
  type LoaderArgs,
8
8
  json,
9
- redirect,
10
9
  } from "@remix-run/server-runtime";
11
10
  import { useLoaderData } from "@remix-run/react";
12
11
  import type { ProjectMeta } from "@webstudio-is/sdk";
13
12
  import { ReactSdkContext } from "@webstudio-is/react-sdk";
14
13
  import { n8nHandler, getFormId } from "@webstudio-is/form-handlers";
15
14
  import {
16
- fontAssets,
17
15
  pageData,
18
16
  user,
19
17
  projectId,
@@ -23,6 +21,8 @@ import {
23
21
  imageAssets,
24
22
  getRemixParams,
25
23
  getPageMeta,
24
+ pageFontAssets,
25
+ pageBackgroundImageAssets,
26
26
  } from "../../../__generated__/_index";
27
27
  import { loadResources } from "../../../__generated__/_index.server";
28
28
  import css from "../__generated__/index.css";
@@ -42,7 +42,7 @@ export const loader = async (arg: LoaderArgs) => {
42
42
  pageMeta.status === 301 || pageMeta.status === 302
43
43
  ? pageMeta.status
44
44
  : 302;
45
- return redirect(pageMeta.redirect, status);
45
+ return Response.redirect(pageMeta.redirect, status);
46
46
  }
47
47
 
48
48
  const host =
@@ -210,17 +210,21 @@ export const links: LinksFunction = () => {
210
210
  });
211
211
  }
212
212
 
213
- for (const asset of fontAssets) {
214
- if (asset.type === "font") {
215
- result.push({
216
- rel: "preload",
217
- href: assetBaseUrl + asset.name,
218
- as: "font",
219
- crossOrigin: "anonymous",
220
- // @todo add mimeType
221
- // type: asset.mimeType,
222
- });
223
- }
213
+ for (const asset of pageFontAssets) {
214
+ result.push({
215
+ rel: "preload",
216
+ href: `${assetBaseUrl}${asset.name}`,
217
+ as: "font",
218
+ crossOrigin: "anonymous",
219
+ });
220
+ }
221
+
222
+ for (const backgroundImageAsset of pageBackgroundImageAssets) {
223
+ result.push({
224
+ rel: "preload",
225
+ href: `${assetBaseUrl}${backgroundImageAsset.name}`,
226
+ as: "image",
227
+ });
224
228
  }
225
229
 
226
230
  return result;
@@ -10,13 +10,13 @@
10
10
  "@remix-run/react": "^1.19.2",
11
11
  "@remix-run/server-runtime": "^1.19.2",
12
12
  "@remix-run/node": "^1.19.2",
13
- "@webstudio-is/react-sdk": "0.133.0",
14
- "@webstudio-is/sdk-components-react-radix": "0.133.0",
15
- "@webstudio-is/sdk-components-react-remix": "0.133.0",
16
- "@webstudio-is/sdk-components-react": "0.133.0",
17
- "@webstudio-is/form-handlers": "0.133.0",
18
- "@webstudio-is/image": "0.133.0",
19
- "@webstudio-is/sdk": "0.133.0",
13
+ "@webstudio-is/react-sdk": "0.135.0",
14
+ "@webstudio-is/sdk-components-react-radix": "0.135.0",
15
+ "@webstudio-is/sdk-components-react-remix": "0.135.0",
16
+ "@webstudio-is/sdk-components-react": "0.135.0",
17
+ "@webstudio-is/form-handlers": "0.135.0",
18
+ "@webstudio-is/image": "0.135.0",
19
+ "@webstudio-is/sdk": "0.135.0",
20
20
  "isbot": "^3.6.8",
21
21
  "react": "^18.2.0",
22
22
  "react-dom": "^18.2.0"