webstudio 0.264.0 → 0.265.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 +450 -131
- package/package.json +12 -11
- package/templates/defaults/package.json +7 -7
- package/templates/react-router/package.json +7 -7
- package/templates/ssg/package.json +6 -6
package/lib/cli.js
CHANGED
|
@@ -15,8 +15,9 @@ import { hideBin } from "yargs/helpers";
|
|
|
15
15
|
import { join, dirname, normalize, basename, relative } from "node:path";
|
|
16
16
|
import envPaths from "env-paths";
|
|
17
17
|
import { z } from "zod";
|
|
18
|
-
import { access, constants, writeFile, mkdir, readFile, rm, readdir, cp
|
|
18
|
+
import { access, constants, writeFile, mkdir, readFile, rm, rename, readdir, cp } from "node:fs/promises";
|
|
19
19
|
import { text, isCancel, cancel, log, spinner, confirm, select as select$2 } from "@clack/prompts";
|
|
20
|
+
import { createTRPCUntypedClient, httpBatchLink } from "@trpc/client";
|
|
20
21
|
import pc from "picocolors";
|
|
21
22
|
import { existsSync, createWriteStream } from "node:fs";
|
|
22
23
|
import { pipeline } from "node:stream/promises";
|
|
@@ -145,48 +146,30 @@ const loadJSONFile = async (filePath) => {
|
|
|
145
146
|
return null;
|
|
146
147
|
}
|
|
147
148
|
};
|
|
148
|
-
var getLatestBuildUsingProjectId = async (params) => {
|
|
149
|
-
const { origin, projectId, authToken } = params;
|
|
150
|
-
const { sourceOrigin } = parseBuilderUrl(origin);
|
|
151
|
-
const url = new URL(sourceOrigin);
|
|
152
|
-
url.pathname = `/rest/buildId/${projectId}`;
|
|
153
|
-
const headers = new Headers();
|
|
154
|
-
headers.set("x-auth-token", authToken);
|
|
155
|
-
const response = await fetch(url.href, { headers });
|
|
156
|
-
if (response.ok) {
|
|
157
|
-
return await response.json();
|
|
158
|
-
}
|
|
159
|
-
const message = await response.text();
|
|
160
|
-
throw new Error(message.slice(0, 1e3));
|
|
161
|
-
};
|
|
162
149
|
var loadProjectDataByBuildId = async (params) => {
|
|
163
|
-
const {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
150
|
+
const headers = "seviceToken" in params ? { Authorization: params.seviceToken } : { "x-auth-token": params.authToken };
|
|
151
|
+
return await createTrpcClient(params.origin, headers).query(
|
|
152
|
+
"build.loadProjectDataByBuildId",
|
|
153
|
+
{ buildId: params.buildId }
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
var createTrpcClient = (origin, headers) => {
|
|
157
|
+
const { sourceOrigin } = parseBuilderUrl(origin);
|
|
158
|
+
const url = new URL("/trpc", sourceOrigin);
|
|
159
|
+
return createTRPCUntypedClient({
|
|
160
|
+
links: [
|
|
161
|
+
httpBatchLink({
|
|
162
|
+
url: url.href,
|
|
163
|
+
headers
|
|
164
|
+
})
|
|
165
|
+
]
|
|
174
166
|
});
|
|
175
|
-
if (response.ok) {
|
|
176
|
-
return await response.json();
|
|
177
|
-
}
|
|
178
|
-
const message = await response.text();
|
|
179
|
-
throw new Error(message.slice(0, 1e3));
|
|
180
167
|
};
|
|
181
168
|
var loadProjectDataByProjectId = async (params) => {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
return await loadProjectDataByBuildId({
|
|
187
|
-
buildId: result.buildId,
|
|
188
|
-
origin: params.origin,
|
|
189
|
-
authToken: params.authToken
|
|
169
|
+
return await createTrpcClient(params.origin, {
|
|
170
|
+
"x-auth-token": params.authToken
|
|
171
|
+
}).query("build.loadProjectDataByProjectId", {
|
|
172
|
+
projectId: params.projectId
|
|
190
173
|
});
|
|
191
174
|
};
|
|
192
175
|
var buildProjectDomainPrefix = "p-";
|
|
@@ -220,6 +203,36 @@ var parseBuilderUrl = (urlStr) => {
|
|
|
220
203
|
sourceOrigin: sourceUrl.origin
|
|
221
204
|
};
|
|
222
205
|
};
|
|
206
|
+
const wait = (duration) => new Promise((resolve) => setTimeout(resolve, duration));
|
|
207
|
+
const withConfigLock = async (callback) => {
|
|
208
|
+
const lockPath = `${GLOBAL_CONFIG_FILE}.lock`;
|
|
209
|
+
const start = Date.now();
|
|
210
|
+
while (true) {
|
|
211
|
+
try {
|
|
212
|
+
await mkdir(lockPath);
|
|
213
|
+
break;
|
|
214
|
+
} catch (error) {
|
|
215
|
+
const code2 = error.code;
|
|
216
|
+
if (code2 !== "EEXIST") {
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
if (Date.now() - start > 1e4) {
|
|
220
|
+
throw new Error(`Timed out waiting for config lock ${lockPath}`);
|
|
221
|
+
}
|
|
222
|
+
await wait(50);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
return await callback();
|
|
227
|
+
} finally {
|
|
228
|
+
await rm(lockPath, { recursive: true, force: true });
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
const writeConfigFile = async (content) => {
|
|
232
|
+
const temporaryFile = `${GLOBAL_CONFIG_FILE}.${process.pid}.tmp`;
|
|
233
|
+
await writeFile(temporaryFile, content, "utf8");
|
|
234
|
+
await rename(temporaryFile, GLOBAL_CONFIG_FILE);
|
|
235
|
+
};
|
|
223
236
|
const parseShareLink = (value) => {
|
|
224
237
|
const url = new URL(value.replaceAll("'", ""));
|
|
225
238
|
const token = url.searchParams.get("authToken");
|
|
@@ -273,16 +286,18 @@ const link = async (options) => {
|
|
|
273
286
|
}
|
|
274
287
|
}
|
|
275
288
|
const { origin, projectId, token } = parseShareLink(shareLink);
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
289
|
+
await withConfigLock(async () => {
|
|
290
|
+
const currentConfig = await readFile(GLOBAL_CONFIG_FILE, "utf-8");
|
|
291
|
+
const currentConfigJson = jsonToGlobalConfig(JSON.parse(currentConfig));
|
|
292
|
+
const newConfig = {
|
|
293
|
+
...currentConfigJson,
|
|
294
|
+
[projectId]: {
|
|
295
|
+
origin,
|
|
296
|
+
token
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
await writeConfigFile(JSON.stringify(newConfig, null, 2));
|
|
300
|
+
});
|
|
286
301
|
log.info(`Saved credentials for project ${projectId}.
|
|
287
302
|
You can find your config at ${GLOBAL_CONFIG_FILE}`);
|
|
288
303
|
const localConfig = {
|
|
@@ -2644,7 +2659,7 @@ var toValue = (styleValue, transformValue) => {
|
|
|
2644
2659
|
case "oklch":
|
|
2645
2660
|
return `oklch(${c1} ${c2} ${c3} / ${alpha})`;
|
|
2646
2661
|
// Fall back to color() function for less common color spaces.
|
|
2647
|
-
//
|
|
2662
|
+
// colorjs uses internal short names that differ from CSS predefined color space identifiers.
|
|
2648
2663
|
case "p3":
|
|
2649
2664
|
return `color(display-p3 ${c1} ${c2} ${c3} / ${alpha})`;
|
|
2650
2665
|
case "a98rgb":
|
|
@@ -3687,10 +3702,6 @@ var commonPageFields = {
|
|
|
3687
3702
|
)
|
|
3688
3703
|
};
|
|
3689
3704
|
var HomePagePath = z.string().refine((path) => path === "", "Home page path must be empty");
|
|
3690
|
-
var HomePage = z.object({
|
|
3691
|
-
...commonPageFields,
|
|
3692
|
-
path: HomePagePath
|
|
3693
|
-
});
|
|
3694
3705
|
var DefaultPagePage = z.string().refine((path) => path !== "", "Can't be empty").refine((path) => path !== "/", "Can't be just a /").refine((path) => path.endsWith("/") === false, "Can't end with a /").refine((path) => path.includes("//") === false, "Can't contain repeating /").refine(
|
|
3695
3706
|
(path) => /^[-_a-z0-9*:?\\/.]*$/.test(path),
|
|
3696
3707
|
"Only a-z, 0-9, -, _, /, :, ?, . and * are allowed"
|
|
@@ -3723,7 +3734,7 @@ var PagePath = DefaultPagePage.refine(
|
|
|
3723
3734
|
);
|
|
3724
3735
|
var Page = z.object({
|
|
3725
3736
|
...commonPageFields,
|
|
3726
|
-
path: PagePath
|
|
3737
|
+
path: z.union([HomePagePath, PagePath])
|
|
3727
3738
|
});
|
|
3728
3739
|
var ProjectMeta = z.object({
|
|
3729
3740
|
// All fields are optional to ensure consistency and allow for the addition of new fields without requiring migration
|
|
@@ -3753,9 +3764,123 @@ z.object({
|
|
|
3753
3764
|
meta: ProjectMeta.optional(),
|
|
3754
3765
|
compiler: CompilerSettings.optional(),
|
|
3755
3766
|
redirects: z.array(PageRedirect).optional(),
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3767
|
+
homePageId: PageId,
|
|
3768
|
+
rootFolderId: FolderId,
|
|
3769
|
+
pages: z.map(PageId, Page),
|
|
3770
|
+
folders: z.map(FolderId, Folder).refine((folders) => folders.size > 0, "Folders can't be empty")
|
|
3771
|
+
}).superRefine((pages, context) => {
|
|
3772
|
+
const homePage = pages.pages.get(pages.homePageId);
|
|
3773
|
+
const rootFolder = pages.folders.get(pages.rootFolderId);
|
|
3774
|
+
if (homePage === void 0) {
|
|
3775
|
+
context.addIssue({
|
|
3776
|
+
code: z.ZodIssueCode.custom,
|
|
3777
|
+
path: ["homePageId"],
|
|
3778
|
+
message: "Home page must reference an existing page"
|
|
3779
|
+
});
|
|
3780
|
+
}
|
|
3781
|
+
if (rootFolder === void 0) {
|
|
3782
|
+
context.addIssue({
|
|
3783
|
+
code: z.ZodIssueCode.custom,
|
|
3784
|
+
path: ["rootFolderId"],
|
|
3785
|
+
message: "Root folder must reference an existing folder"
|
|
3786
|
+
});
|
|
3787
|
+
}
|
|
3788
|
+
if (homePage !== void 0 && homePage.path !== "") {
|
|
3789
|
+
context.addIssue({
|
|
3790
|
+
code: z.ZodIssueCode.custom,
|
|
3791
|
+
path: ["pages", pages.homePageId, "path"],
|
|
3792
|
+
message: "Home page path must be empty"
|
|
3793
|
+
});
|
|
3794
|
+
}
|
|
3795
|
+
for (const [pageId, page] of pages.pages) {
|
|
3796
|
+
if (page.id !== pageId) {
|
|
3797
|
+
context.addIssue({
|
|
3798
|
+
code: z.ZodIssueCode.custom,
|
|
3799
|
+
path: ["pages", pageId, "id"],
|
|
3800
|
+
message: "Page id must match its record key"
|
|
3801
|
+
});
|
|
3802
|
+
}
|
|
3803
|
+
if (pageId !== pages.homePageId && page.path === "") {
|
|
3804
|
+
context.addIssue({
|
|
3805
|
+
code: z.ZodIssueCode.custom,
|
|
3806
|
+
path: ["pages", pageId, "path"],
|
|
3807
|
+
message: "Page path can't be empty"
|
|
3808
|
+
});
|
|
3809
|
+
}
|
|
3810
|
+
}
|
|
3811
|
+
for (const [folderId, folder] of pages.folders) {
|
|
3812
|
+
if (folder.id !== folderId) {
|
|
3813
|
+
context.addIssue({
|
|
3814
|
+
code: z.ZodIssueCode.custom,
|
|
3815
|
+
path: ["folders", folderId, "id"],
|
|
3816
|
+
message: "Folder id must match its record key"
|
|
3817
|
+
});
|
|
3818
|
+
}
|
|
3819
|
+
for (const [index, childId] of folder.children.entries()) {
|
|
3820
|
+
if (pages.pages.has(childId) === false && pages.folders.has(childId) === false) {
|
|
3821
|
+
context.addIssue({
|
|
3822
|
+
code: z.ZodIssueCode.custom,
|
|
3823
|
+
path: ["folders", folderId, "children", index],
|
|
3824
|
+
message: "Folder child must reference an existing page or folder"
|
|
3825
|
+
});
|
|
3826
|
+
}
|
|
3827
|
+
if (childId === pages.rootFolderId) {
|
|
3828
|
+
context.addIssue({
|
|
3829
|
+
code: z.ZodIssueCode.custom,
|
|
3830
|
+
path: ["folders", folderId, "children", index],
|
|
3831
|
+
message: "Root folder can't be nested"
|
|
3832
|
+
});
|
|
3833
|
+
}
|
|
3834
|
+
}
|
|
3835
|
+
}
|
|
3836
|
+
if (rootFolder !== void 0 && rootFolder.children[0] !== pages.homePageId) {
|
|
3837
|
+
context.addIssue({
|
|
3838
|
+
code: z.ZodIssueCode.custom,
|
|
3839
|
+
path: ["folders", pages.rootFolderId, "children"],
|
|
3840
|
+
message: "Root folder must start with the home page"
|
|
3841
|
+
});
|
|
3842
|
+
}
|
|
3843
|
+
const childParents = /* @__PURE__ */ new Map();
|
|
3844
|
+
for (const [folderId, folder] of pages.folders) {
|
|
3845
|
+
for (const [index, childId] of folder.children.entries()) {
|
|
3846
|
+
const parentId = childParents.get(childId);
|
|
3847
|
+
if (parentId !== void 0) {
|
|
3848
|
+
context.addIssue({
|
|
3849
|
+
code: z.ZodIssueCode.custom,
|
|
3850
|
+
path: ["folders", folderId, "children", index],
|
|
3851
|
+
message: `Child is already registered in folder "${parentId}"`
|
|
3852
|
+
});
|
|
3853
|
+
continue;
|
|
3854
|
+
}
|
|
3855
|
+
childParents.set(childId, folderId);
|
|
3856
|
+
}
|
|
3857
|
+
}
|
|
3858
|
+
const hasFolderCycle = (folderId, path = /* @__PURE__ */ new Set()) => {
|
|
3859
|
+
if (path.has(folderId)) {
|
|
3860
|
+
return true;
|
|
3861
|
+
}
|
|
3862
|
+
const folder = pages.folders.get(folderId);
|
|
3863
|
+
if (folder === void 0) {
|
|
3864
|
+
return false;
|
|
3865
|
+
}
|
|
3866
|
+
path.add(folderId);
|
|
3867
|
+
for (const childId of folder.children) {
|
|
3868
|
+
if (pages.folders.has(childId) && hasFolderCycle(childId, path)) {
|
|
3869
|
+
return true;
|
|
3870
|
+
}
|
|
3871
|
+
}
|
|
3872
|
+
path.delete(folderId);
|
|
3873
|
+
return false;
|
|
3874
|
+
};
|
|
3875
|
+
for (const folderId of pages.folders.keys()) {
|
|
3876
|
+
if (hasFolderCycle(folderId)) {
|
|
3877
|
+
context.addIssue({
|
|
3878
|
+
code: z.ZodIssueCode.custom,
|
|
3879
|
+
path: ["folders", folderId, "children"],
|
|
3880
|
+
message: "Folders can't contain cycles"
|
|
3881
|
+
});
|
|
3882
|
+
}
|
|
3883
|
+
}
|
|
3759
3884
|
});
|
|
3760
3885
|
var TextChild = z.object({
|
|
3761
3886
|
type: z.literal("text"),
|
|
@@ -4241,7 +4366,8 @@ z.object({
|
|
|
4241
4366
|
var common = {
|
|
4242
4367
|
label: z.string().optional(),
|
|
4243
4368
|
description: z.string().optional(),
|
|
4244
|
-
required: z.boolean()
|
|
4369
|
+
required: z.boolean(),
|
|
4370
|
+
contentMode: z.boolean().optional()
|
|
4245
4371
|
};
|
|
4246
4372
|
var Tag = z.object({
|
|
4247
4373
|
...common,
|
|
@@ -5461,18 +5587,36 @@ var executeExpression = (expression) => {
|
|
|
5461
5587
|
};
|
|
5462
5588
|
var tokenRegex = new RegExp(":(?<name>\\w+)(?<modifier>[?*]?)|(?<wildcard>(?<!:\\w+)\\*)");
|
|
5463
5589
|
var isPathnamePattern = (pathname) => tokenRegex.test(pathname);
|
|
5590
|
+
var ROOT_FOLDER_ID = "root";
|
|
5591
|
+
var isRootFolder = ({ id }) => id === ROOT_FOLDER_ID;
|
|
5592
|
+
var getPageById = (pages, pageId) => {
|
|
5593
|
+
return pages.pages.get(pageId);
|
|
5594
|
+
};
|
|
5595
|
+
var getAllPages = (pages) => {
|
|
5596
|
+
return Array.from(pages.pages.values());
|
|
5597
|
+
};
|
|
5598
|
+
var getAllFolders = (pages) => {
|
|
5599
|
+
return Array.from(pages.folders.values());
|
|
5600
|
+
};
|
|
5601
|
+
var getHomePage = (pages) => {
|
|
5602
|
+
const homePage = getPageById(pages, pages.homePageId);
|
|
5603
|
+
if (homePage === void 0) {
|
|
5604
|
+
throw new Error(`Home page "${pages.homePageId}" was not found.`);
|
|
5605
|
+
}
|
|
5606
|
+
return homePage;
|
|
5607
|
+
};
|
|
5464
5608
|
var findPageByIdOrPath = (idOrPath, pages) => {
|
|
5465
|
-
if (idOrPath === "" || idOrPath === "/" || idOrPath === pages.
|
|
5466
|
-
return pages
|
|
5609
|
+
if (idOrPath === "" || idOrPath === "/" || idOrPath === pages.homePageId) {
|
|
5610
|
+
return getHomePage(pages);
|
|
5467
5611
|
}
|
|
5468
|
-
return pages.
|
|
5612
|
+
return getAllPages(pages).find(
|
|
5469
5613
|
(page) => page.id === idOrPath || getPagePath(page.id, pages) === idOrPath
|
|
5470
5614
|
);
|
|
5471
5615
|
};
|
|
5472
5616
|
var getPagePath = (id, pages) => {
|
|
5473
5617
|
const foldersMap = /* @__PURE__ */ new Map();
|
|
5474
5618
|
const childParentMap = /* @__PURE__ */ new Map();
|
|
5475
|
-
for (const folder of pages
|
|
5619
|
+
for (const folder of getAllFolders(pages)) {
|
|
5476
5620
|
foldersMap.set(folder.id, folder);
|
|
5477
5621
|
for (const childId of folder.children) {
|
|
5478
5622
|
childParentMap.set(childId, folder.id);
|
|
@@ -5480,7 +5624,7 @@ var getPagePath = (id, pages) => {
|
|
|
5480
5624
|
}
|
|
5481
5625
|
const paths = [];
|
|
5482
5626
|
let currentId = id;
|
|
5483
|
-
const allPages =
|
|
5627
|
+
const allPages = getAllPages(pages);
|
|
5484
5628
|
for (const page of allPages) {
|
|
5485
5629
|
if (page.id === id) {
|
|
5486
5630
|
paths.push(page.path);
|
|
@@ -5499,7 +5643,7 @@ var getPagePath = (id, pages) => {
|
|
|
5499
5643
|
return paths.reverse().join("/").replace(/\/+/g, "/");
|
|
5500
5644
|
};
|
|
5501
5645
|
var getStaticSiteMapXml = (pages, updatedAt) => {
|
|
5502
|
-
const allPages =
|
|
5646
|
+
const allPages = getAllPages(pages);
|
|
5503
5647
|
return allPages.filter((page) => (page.meta.documentType ?? "html") === "html").filter(
|
|
5504
5648
|
(page) => executeExpression(page.meta.excludePageFromSearch) !== true
|
|
5505
5649
|
).filter((page) => false === isPathnamePattern(page.path)).map((page) => ({
|
|
@@ -5507,6 +5651,104 @@ var getStaticSiteMapXml = (pages, updatedAt) => {
|
|
|
5507
5651
|
lastModified: updatedAt.split("T")[0]
|
|
5508
5652
|
}));
|
|
5509
5653
|
};
|
|
5654
|
+
var toMap = (items, normalizeItem = (item) => item) => {
|
|
5655
|
+
if (items instanceof Map) {
|
|
5656
|
+
return new Map(
|
|
5657
|
+
Array.from(items, ([id, item]) => [id, normalizeItem(item)])
|
|
5658
|
+
);
|
|
5659
|
+
}
|
|
5660
|
+
const list = Array.isArray(items) ? items : Object.values(items);
|
|
5661
|
+
return new Map(list.map((item) => [item.id, normalizeItem(item)]));
|
|
5662
|
+
};
|
|
5663
|
+
var normalizePage = (page) => ({
|
|
5664
|
+
...page,
|
|
5665
|
+
meta: page.meta ?? {}
|
|
5666
|
+
});
|
|
5667
|
+
var isLegacyPages = (pages) => {
|
|
5668
|
+
if (typeof pages !== "object" || pages === null) {
|
|
5669
|
+
return false;
|
|
5670
|
+
}
|
|
5671
|
+
return "homePage" in pages && Array.isArray(pages.pages);
|
|
5672
|
+
};
|
|
5673
|
+
var isSerializedPages = (pages) => {
|
|
5674
|
+
if (typeof pages !== "object" || pages === null) {
|
|
5675
|
+
return false;
|
|
5676
|
+
}
|
|
5677
|
+
const candidate = pages;
|
|
5678
|
+
return typeof candidate.homePageId === "string" && typeof candidate.rootFolderId === "string" && candidate.pages !== void 0 && candidate.folders !== void 0;
|
|
5679
|
+
};
|
|
5680
|
+
var migratePages = (pages) => {
|
|
5681
|
+
var _a2;
|
|
5682
|
+
if (isSerializedPages(pages) && pages.pages instanceof Map && pages.folders instanceof Map) {
|
|
5683
|
+
return pages;
|
|
5684
|
+
}
|
|
5685
|
+
if (isSerializedPages(pages)) {
|
|
5686
|
+
return {
|
|
5687
|
+
meta: pages.meta,
|
|
5688
|
+
compiler: pages.compiler,
|
|
5689
|
+
redirects: pages.redirects,
|
|
5690
|
+
homePageId: pages.homePageId,
|
|
5691
|
+
rootFolderId: pages.rootFolderId,
|
|
5692
|
+
pages: toMap(pages.pages, normalizePage),
|
|
5693
|
+
folders: toMap(pages.folders)
|
|
5694
|
+
};
|
|
5695
|
+
}
|
|
5696
|
+
if (isLegacyPages(pages) === false) {
|
|
5697
|
+
throw new Error("Pages data has unsupported shape.");
|
|
5698
|
+
}
|
|
5699
|
+
const homePage = {
|
|
5700
|
+
...normalizePage(pages.homePage),
|
|
5701
|
+
path: ""
|
|
5702
|
+
};
|
|
5703
|
+
const nextPages = /* @__PURE__ */ new Map([[homePage.id, homePage]]);
|
|
5704
|
+
for (const page of pages.pages) {
|
|
5705
|
+
if (page.id === homePage.id) {
|
|
5706
|
+
continue;
|
|
5707
|
+
}
|
|
5708
|
+
nextPages.set(page.id, normalizePage(page));
|
|
5709
|
+
}
|
|
5710
|
+
const nextFolders = /* @__PURE__ */ new Map();
|
|
5711
|
+
for (const folder of pages.folders ?? []) {
|
|
5712
|
+
nextFolders.set(folder.id, { ...folder, children: [...folder.children] });
|
|
5713
|
+
}
|
|
5714
|
+
const rootFolder = Array.from(nextFolders.values()).find(isRootFolder) ?? ((_a2 = pages.folders) == null ? void 0 : _a2[0]) ?? {
|
|
5715
|
+
id: ROOT_FOLDER_ID,
|
|
5716
|
+
name: "Root",
|
|
5717
|
+
slug: "",
|
|
5718
|
+
children: []
|
|
5719
|
+
};
|
|
5720
|
+
if (nextFolders.has(rootFolder.id) === false) {
|
|
5721
|
+
nextFolders.set(rootFolder.id, { ...rootFolder, children: [] });
|
|
5722
|
+
}
|
|
5723
|
+
const nextRootFolder = nextFolders.get(rootFolder.id);
|
|
5724
|
+
if (nextRootFolder === void 0) {
|
|
5725
|
+
throw new Error("Pages must include a root folder.");
|
|
5726
|
+
}
|
|
5727
|
+
for (const folder of nextFolders.values()) {
|
|
5728
|
+
folder.children = folder.children.filter(
|
|
5729
|
+
(childId) => childId !== homePage.id
|
|
5730
|
+
);
|
|
5731
|
+
}
|
|
5732
|
+
nextRootFolder.children.unshift(homePage.id);
|
|
5733
|
+
const referencedIds = new Set(
|
|
5734
|
+
Array.from(nextFolders.values()).flatMap((folder) => folder.children)
|
|
5735
|
+
);
|
|
5736
|
+
for (const page of pages.pages) {
|
|
5737
|
+
if (page.id !== homePage.id && referencedIds.has(page.id) === false) {
|
|
5738
|
+
nextRootFolder.children.push(page.id);
|
|
5739
|
+
referencedIds.add(page.id);
|
|
5740
|
+
}
|
|
5741
|
+
}
|
|
5742
|
+
return {
|
|
5743
|
+
meta: pages.meta,
|
|
5744
|
+
compiler: pages.compiler,
|
|
5745
|
+
redirects: pages.redirects,
|
|
5746
|
+
homePageId: homePage.id,
|
|
5747
|
+
rootFolderId: rootFolder.id,
|
|
5748
|
+
pages: nextPages,
|
|
5749
|
+
folders: nextFolders
|
|
5750
|
+
};
|
|
5751
|
+
};
|
|
5510
5752
|
var identifiers = reservedIdentifiers({ includeGlobalProperties: true });
|
|
5511
5753
|
var isReserved = (identifier) => identifiers.has(identifier);
|
|
5512
5754
|
var normalizeJsName = (name2) => {
|
|
@@ -6892,7 +7134,7 @@ const htmlToJsx = (html2) => {
|
|
|
6892
7134
|
}
|
|
6893
7135
|
return result;
|
|
6894
7136
|
};
|
|
6895
|
-
const o$
|
|
7137
|
+
const o$G = {
|
|
6896
7138
|
category: "general",
|
|
6897
7139
|
description: "Slot is a container for content that you want to reference across the project. Changes made to a Slot's children will be reflected in all other instances of that Slot.",
|
|
6898
7140
|
icon: SlotComponentIcon,
|
|
@@ -6984,7 +7226,8 @@ const a$5 = {
|
|
|
6984
7226
|
required: true,
|
|
6985
7227
|
control: "code",
|
|
6986
7228
|
language: "markdown",
|
|
6987
|
-
type: "string"
|
|
7229
|
+
type: "string",
|
|
7230
|
+
contentMode: true
|
|
6988
7231
|
}
|
|
6989
7232
|
}
|
|
6990
7233
|
};
|
|
@@ -7190,11 +7433,11 @@ var button = [
|
|
|
7190
7433
|
{ property: "text-transform", value: { type: "keyword", value: "none" } }
|
|
7191
7434
|
];
|
|
7192
7435
|
var select = button;
|
|
7193
|
-
const o$
|
|
7436
|
+
const o$F = {};
|
|
7194
7437
|
const i$9 = {
|
|
7195
7438
|
presetStyle: { body },
|
|
7196
7439
|
initialProps: ["id", "class"],
|
|
7197
|
-
props: o$
|
|
7440
|
+
props: o$F
|
|
7198
7441
|
};
|
|
7199
7442
|
const t$g = {
|
|
7200
7443
|
tag: { required: false, control: "text", type: "string" }
|
|
@@ -7283,11 +7526,11 @@ const m$8 = {
|
|
|
7283
7526
|
}
|
|
7284
7527
|
}
|
|
7285
7528
|
};
|
|
7286
|
-
const o$
|
|
7529
|
+
const o$E = {};
|
|
7287
7530
|
const i$8 = {
|
|
7288
7531
|
presetStyle: { p: p$8 },
|
|
7289
7532
|
initialProps: ["id", "class"],
|
|
7290
|
-
props: o$
|
|
7533
|
+
props: o$E
|
|
7291
7534
|
};
|
|
7292
7535
|
const e$t = {
|
|
7293
7536
|
download: {
|
|
@@ -7330,54 +7573,55 @@ const t$d = {
|
|
|
7330
7573
|
href: {
|
|
7331
7574
|
type: "string",
|
|
7332
7575
|
control: "url",
|
|
7333
|
-
required: false
|
|
7576
|
+
required: false,
|
|
7577
|
+
contentMode: true
|
|
7334
7578
|
}
|
|
7335
7579
|
}
|
|
7336
7580
|
};
|
|
7337
7581
|
const a$3 = p$7;
|
|
7338
|
-
const o$
|
|
7582
|
+
const o$D = {};
|
|
7339
7583
|
const e$s = {
|
|
7340
7584
|
label: "Text",
|
|
7341
7585
|
icon: PaintBrushIcon,
|
|
7342
7586
|
presetStyle: { span },
|
|
7343
7587
|
initialProps: ["id", "class"],
|
|
7344
|
-
props: o$
|
|
7588
|
+
props: o$D
|
|
7345
7589
|
};
|
|
7346
|
-
const o$
|
|
7590
|
+
const o$C = {};
|
|
7347
7591
|
const p$6 = {
|
|
7348
7592
|
label: "Bold Text",
|
|
7349
7593
|
presetStyle: { b: b$4 },
|
|
7350
7594
|
initialProps: ["id", "class"],
|
|
7351
|
-
props: o$
|
|
7595
|
+
props: o$C
|
|
7352
7596
|
};
|
|
7353
|
-
const o$
|
|
7597
|
+
const o$B = {};
|
|
7354
7598
|
const e$r = {
|
|
7355
7599
|
label: "Italic Text",
|
|
7356
7600
|
presetStyle: { i: i$a },
|
|
7357
7601
|
initialProps: ["id", "class"],
|
|
7358
|
-
props: o$
|
|
7602
|
+
props: o$B
|
|
7359
7603
|
};
|
|
7360
|
-
const o$
|
|
7361
|
-
const o$
|
|
7604
|
+
const o$A = {};
|
|
7605
|
+
const o$z = {
|
|
7362
7606
|
label: "Superscript Text",
|
|
7363
7607
|
presetStyle: { sup },
|
|
7364
7608
|
initialProps: ["id", "class"],
|
|
7365
|
-
props: o$
|
|
7609
|
+
props: o$A
|
|
7366
7610
|
};
|
|
7367
|
-
const o$
|
|
7368
|
-
const s$
|
|
7611
|
+
const o$y = {};
|
|
7612
|
+
const s$3 = {
|
|
7369
7613
|
label: "Subscript Text",
|
|
7370
7614
|
presetStyle: { sub },
|
|
7371
7615
|
initialProps: ["id", "class"],
|
|
7372
|
-
props: o$
|
|
7616
|
+
props: o$y
|
|
7373
7617
|
};
|
|
7374
|
-
const o$
|
|
7618
|
+
const o$x = {};
|
|
7375
7619
|
const e$q = {
|
|
7376
7620
|
presetStyle: { button },
|
|
7377
7621
|
initialProps: ["id", "class", "type", "aria-label"],
|
|
7378
|
-
props: o$
|
|
7622
|
+
props: o$x
|
|
7379
7623
|
};
|
|
7380
|
-
const o$
|
|
7624
|
+
const o$w = {};
|
|
7381
7625
|
const p$5 = {
|
|
7382
7626
|
input: [
|
|
7383
7627
|
...input,
|
|
@@ -7386,7 +7630,7 @@ const p$5 = {
|
|
|
7386
7630
|
value: { type: "keyword", value: "block" }
|
|
7387
7631
|
}
|
|
7388
7632
|
]
|
|
7389
|
-
}, l$
|
|
7633
|
+
}, l$6 = {
|
|
7390
7634
|
label: "Text Input",
|
|
7391
7635
|
presetStyle: p$5,
|
|
7392
7636
|
initialProps: [
|
|
@@ -7399,7 +7643,7 @@ const p$5 = {
|
|
|
7399
7643
|
"required",
|
|
7400
7644
|
"autofocus"
|
|
7401
7645
|
],
|
|
7402
|
-
props: o$
|
|
7646
|
+
props: o$w
|
|
7403
7647
|
};
|
|
7404
7648
|
const e$p = {
|
|
7405
7649
|
state: {
|
|
@@ -7432,17 +7676,17 @@ const c$4 = {
|
|
|
7432
7676
|
}
|
|
7433
7677
|
}
|
|
7434
7678
|
};
|
|
7435
|
-
const o$
|
|
7436
|
-
const r$
|
|
7679
|
+
const o$v = {};
|
|
7680
|
+
const r$d = {
|
|
7437
7681
|
form: [
|
|
7438
7682
|
...form,
|
|
7439
7683
|
{ property: "min-height", value: { type: "unit", unit: "px", value: 20 } }
|
|
7440
7684
|
]
|
|
7441
7685
|
}, p$4 = {
|
|
7442
7686
|
label: "Form",
|
|
7443
|
-
presetStyle: r$
|
|
7687
|
+
presetStyle: r$d,
|
|
7444
7688
|
initialProps: ["id", "class", "action"],
|
|
7445
|
-
props: o$
|
|
7689
|
+
props: o$v
|
|
7446
7690
|
};
|
|
7447
7691
|
const e$o = {
|
|
7448
7692
|
optimize: {
|
|
@@ -7454,7 +7698,7 @@ const e$o = {
|
|
|
7454
7698
|
},
|
|
7455
7699
|
quality: { required: false, control: "number", type: "number" }
|
|
7456
7700
|
};
|
|
7457
|
-
const
|
|
7701
|
+
const r$c = {
|
|
7458
7702
|
img: [
|
|
7459
7703
|
...img,
|
|
7460
7704
|
// Otherwise on new image insert onto canvas it can overfit screen size multiple times
|
|
@@ -7479,7 +7723,7 @@ const o$v = {
|
|
|
7479
7723
|
}, i$7 = {
|
|
7480
7724
|
category: "media",
|
|
7481
7725
|
description: "Add an image asset to the page. Webstudio automatically converts images to WebP or AVIF format and makes them responsive for best performance.",
|
|
7482
|
-
presetStyle:
|
|
7726
|
+
presetStyle: r$c,
|
|
7483
7727
|
order: 0,
|
|
7484
7728
|
initialProps: [
|
|
7485
7729
|
"id",
|
|
@@ -7499,7 +7743,26 @@ const o$v = {
|
|
|
7499
7743
|
control: "file",
|
|
7500
7744
|
label: "Source",
|
|
7501
7745
|
required: false,
|
|
7502
|
-
accept: "image/*"
|
|
7746
|
+
accept: "image/*",
|
|
7747
|
+
contentMode: true
|
|
7748
|
+
},
|
|
7749
|
+
width: {
|
|
7750
|
+
type: "number",
|
|
7751
|
+
control: "number",
|
|
7752
|
+
required: false,
|
|
7753
|
+
contentMode: true
|
|
7754
|
+
},
|
|
7755
|
+
height: {
|
|
7756
|
+
type: "number",
|
|
7757
|
+
control: "number",
|
|
7758
|
+
required: false,
|
|
7759
|
+
contentMode: true
|
|
7760
|
+
},
|
|
7761
|
+
alt: {
|
|
7762
|
+
type: "string",
|
|
7763
|
+
control: "text",
|
|
7764
|
+
required: false,
|
|
7765
|
+
contentMode: true
|
|
7503
7766
|
}
|
|
7504
7767
|
}
|
|
7505
7768
|
};
|
|
@@ -7596,7 +7859,7 @@ const t$c = {
|
|
|
7596
7859
|
value: { type: "keyword", value: "40px" }
|
|
7597
7860
|
}
|
|
7598
7861
|
]
|
|
7599
|
-
}, l$
|
|
7862
|
+
}, l$5 = {
|
|
7600
7863
|
presetStyle: t$c,
|
|
7601
7864
|
initialProps: ["id", "class", "ordered", "start", "reversed"],
|
|
7602
7865
|
props: e$m
|
|
@@ -7712,7 +7975,7 @@ const t$a = {
|
|
|
7712
7975
|
value: { type: "keyword", value: "block" }
|
|
7713
7976
|
}
|
|
7714
7977
|
]
|
|
7715
|
-
}, l$
|
|
7978
|
+
}, l$4 = {
|
|
7716
7979
|
label: "Text Area",
|
|
7717
7980
|
presetStyle: t$a,
|
|
7718
7981
|
contentModel: {
|
|
@@ -7960,7 +8223,7 @@ const i$6 = [
|
|
|
7960
8223
|
"showControls",
|
|
7961
8224
|
"controlsColor",
|
|
7962
8225
|
"playsinline"
|
|
7963
|
-
], s$
|
|
8226
|
+
], s$2 = {
|
|
7964
8227
|
icon: VimeoIcon,
|
|
7965
8228
|
contentModel: {
|
|
7966
8229
|
category: "instance",
|
|
@@ -7969,7 +8232,13 @@ const i$6 = [
|
|
|
7969
8232
|
},
|
|
7970
8233
|
presetStyle: { div },
|
|
7971
8234
|
initialProps: i$6,
|
|
7972
|
-
props:
|
|
8235
|
+
props: {
|
|
8236
|
+
...e$i,
|
|
8237
|
+
url: {
|
|
8238
|
+
...e$i.url,
|
|
8239
|
+
contentMode: true
|
|
8240
|
+
}
|
|
8241
|
+
}
|
|
7973
8242
|
};
|
|
7974
8243
|
const e$h = {
|
|
7975
8244
|
allowFullscreen: {
|
|
@@ -8136,7 +8405,7 @@ https://support.google.com/youtube/answer/171780?hl=en#zippy=%2Cturn-on-privacy-
|
|
|
8136
8405
|
type: "string"
|
|
8137
8406
|
}
|
|
8138
8407
|
};
|
|
8139
|
-
const
|
|
8408
|
+
const i$5 = [
|
|
8140
8409
|
"id",
|
|
8141
8410
|
"className",
|
|
8142
8411
|
"url",
|
|
@@ -8164,7 +8433,7 @@ const n$5 = [
|
|
|
8164
8433
|
"language",
|
|
8165
8434
|
"color",
|
|
8166
8435
|
"playlist"
|
|
8167
|
-
],
|
|
8436
|
+
], l$3 = {
|
|
8168
8437
|
icon: YoutubeIcon,
|
|
8169
8438
|
contentModel: {
|
|
8170
8439
|
category: "instance",
|
|
@@ -8172,8 +8441,14 @@ const n$5 = [
|
|
|
8172
8441
|
descendants: ["VimeoSpinner", "VimeoPlayButton", "VimeoPreviewImage"]
|
|
8173
8442
|
},
|
|
8174
8443
|
presetStyle: { div },
|
|
8175
|
-
initialProps:
|
|
8176
|
-
props:
|
|
8444
|
+
initialProps: i$5,
|
|
8445
|
+
props: {
|
|
8446
|
+
...e$h,
|
|
8447
|
+
url: {
|
|
8448
|
+
...e$h.url,
|
|
8449
|
+
contentMode: true
|
|
8450
|
+
}
|
|
8451
|
+
}
|
|
8177
8452
|
};
|
|
8178
8453
|
const e$g = {
|
|
8179
8454
|
optimize: {
|
|
@@ -8184,7 +8459,7 @@ const e$g = {
|
|
|
8184
8459
|
},
|
|
8185
8460
|
quality: { required: false, control: "number", type: "number" }
|
|
8186
8461
|
};
|
|
8187
|
-
const i$
|
|
8462
|
+
const i$4 = {
|
|
8188
8463
|
...i$7,
|
|
8189
8464
|
category: "hidden",
|
|
8190
8465
|
label: "Preview Image",
|
|
@@ -8200,7 +8475,8 @@ const i$5 = {
|
|
|
8200
8475
|
type: "string",
|
|
8201
8476
|
control: "file",
|
|
8202
8477
|
label: "Source",
|
|
8203
|
-
required: false
|
|
8478
|
+
required: false,
|
|
8479
|
+
contentMode: true
|
|
8204
8480
|
}
|
|
8205
8481
|
}
|
|
8206
8482
|
};
|
|
@@ -8620,7 +8896,35 @@ const r$9 = {
|
|
|
8620
8896
|
"timeStyle",
|
|
8621
8897
|
"format"
|
|
8622
8898
|
],
|
|
8623
|
-
props:
|
|
8899
|
+
props: {
|
|
8900
|
+
...e$d,
|
|
8901
|
+
datetime: {
|
|
8902
|
+
type: "string",
|
|
8903
|
+
control: "text",
|
|
8904
|
+
required: false,
|
|
8905
|
+
contentMode: true
|
|
8906
|
+
},
|
|
8907
|
+
language: {
|
|
8908
|
+
...e$d.language,
|
|
8909
|
+
contentMode: true
|
|
8910
|
+
},
|
|
8911
|
+
country: {
|
|
8912
|
+
...e$d.country,
|
|
8913
|
+
contentMode: true
|
|
8914
|
+
},
|
|
8915
|
+
dateStyle: {
|
|
8916
|
+
...e$d.dateStyle,
|
|
8917
|
+
contentMode: true
|
|
8918
|
+
},
|
|
8919
|
+
timeStyle: {
|
|
8920
|
+
...e$d.timeStyle,
|
|
8921
|
+
contentMode: true
|
|
8922
|
+
},
|
|
8923
|
+
format: {
|
|
8924
|
+
...e$d.format,
|
|
8925
|
+
contentMode: true
|
|
8926
|
+
}
|
|
8927
|
+
}
|
|
8624
8928
|
};
|
|
8625
8929
|
const o$k = {};
|
|
8626
8930
|
const o$j = {
|
|
@@ -8716,7 +9020,7 @@ const r$7 = {
|
|
|
8716
9020
|
props: o$e
|
|
8717
9021
|
};
|
|
8718
9022
|
const o$d = {};
|
|
8719
|
-
const
|
|
9023
|
+
const n$5 = {
|
|
8720
9024
|
icon: VideoIcon,
|
|
8721
9025
|
contentModel: {
|
|
8722
9026
|
category: "instance",
|
|
@@ -8751,7 +9055,20 @@ const i$4 = {
|
|
|
8751
9055
|
control: "file",
|
|
8752
9056
|
label: "Source",
|
|
8753
9057
|
required: false,
|
|
8754
|
-
accept: ".mp4,.webm,.mpg,.mpeg,.mov"
|
|
9058
|
+
accept: ".mp4,.webm,.mpg,.mpeg,.mov",
|
|
9059
|
+
contentMode: true
|
|
9060
|
+
},
|
|
9061
|
+
width: {
|
|
9062
|
+
type: "number",
|
|
9063
|
+
control: "number",
|
|
9064
|
+
required: false,
|
|
9065
|
+
contentMode: true
|
|
9066
|
+
},
|
|
9067
|
+
height: {
|
|
9068
|
+
type: "number",
|
|
9069
|
+
control: "number",
|
|
9070
|
+
required: false,
|
|
9071
|
+
contentMode: true
|
|
8755
9072
|
}
|
|
8756
9073
|
}
|
|
8757
9074
|
};
|
|
@@ -8773,11 +9090,11 @@ const baseComponentMetas = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.
|
|
|
8773
9090
|
Heading: m$8,
|
|
8774
9091
|
HtmlEmbed: a$6,
|
|
8775
9092
|
Image: i$7,
|
|
8776
|
-
Input: l$
|
|
9093
|
+
Input: l$6,
|
|
8777
9094
|
Italic: e$r,
|
|
8778
9095
|
Label: t$b,
|
|
8779
9096
|
Link: p$7,
|
|
8780
|
-
List: l$
|
|
9097
|
+
List: l$5,
|
|
8781
9098
|
ListItem: p$3,
|
|
8782
9099
|
MarkdownEmbed: a$5,
|
|
8783
9100
|
Option: a$1,
|
|
@@ -8787,21 +9104,21 @@ const baseComponentMetas = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.
|
|
|
8787
9104
|
RichTextLink: a$3,
|
|
8788
9105
|
Select: p$2,
|
|
8789
9106
|
Separator: y$2,
|
|
8790
|
-
Slot: o$
|
|
9107
|
+
Slot: o$G,
|
|
8791
9108
|
Span: e$s,
|
|
8792
|
-
Subscript: s$
|
|
8793
|
-
Superscript: o$
|
|
9109
|
+
Subscript: s$3,
|
|
9110
|
+
Superscript: o$z,
|
|
8794
9111
|
Text: n$6,
|
|
8795
|
-
Textarea: l$
|
|
9112
|
+
Textarea: l$4,
|
|
8796
9113
|
Time: r$9,
|
|
8797
|
-
Video:
|
|
8798
|
-
Vimeo: s$
|
|
9114
|
+
Video: n$5,
|
|
9115
|
+
Vimeo: s$2,
|
|
8799
9116
|
VimeoPlayButton: c$2,
|
|
8800
|
-
VimeoPreviewImage: i$
|
|
9117
|
+
VimeoPreviewImage: i$4,
|
|
8801
9118
|
VimeoSpinner: c$1,
|
|
8802
9119
|
XmlNode: m$5,
|
|
8803
9120
|
XmlTime: a$2,
|
|
8804
|
-
YouTube:
|
|
9121
|
+
YouTube: l$3
|
|
8805
9122
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
8806
9123
|
//! SPDX-License-Identifier: LicenseRef-Webstudio,Inc-Proprietary
|
|
8807
9124
|
const l$1 = (n2) => new Proxy({}, { get(w2, t2) {
|
|
@@ -10381,7 +10698,7 @@ audit=false
|
|
|
10381
10698
|
fund=false
|
|
10382
10699
|
`;
|
|
10383
10700
|
const prebuild = async (options) => {
|
|
10384
|
-
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j
|
|
10701
|
+
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j;
|
|
10385
10702
|
if (options.template.length === 0) {
|
|
10386
10703
|
log.error(
|
|
10387
10704
|
`Template is not provided
|
|
@@ -10430,6 +10747,8 @@ Please check webstudio --help for more details`
|
|
|
10430
10747
|
const usedMetas = new Map(
|
|
10431
10748
|
Object.entries(coreMetas)
|
|
10432
10749
|
);
|
|
10750
|
+
const pages = migratePages(siteData.build.pages);
|
|
10751
|
+
const allPages = getAllPages(pages);
|
|
10433
10752
|
const siteDataByPage = {};
|
|
10434
10753
|
const fontAssetsByPage = {};
|
|
10435
10754
|
const backgroundImageAssetsByPage = {};
|
|
@@ -10438,10 +10757,10 @@ Please check webstudio --help for more details`
|
|
|
10438
10757
|
assetBaseUrl,
|
|
10439
10758
|
assets: new Map(siteData.assets.map((asset) => [asset.id, asset])),
|
|
10440
10759
|
uploadingImageAssets: [],
|
|
10441
|
-
pages
|
|
10760
|
+
pages,
|
|
10442
10761
|
source: "prebuild"
|
|
10443
10762
|
});
|
|
10444
|
-
for (const page of
|
|
10763
|
+
for (const page of allPages) {
|
|
10445
10764
|
const instanceMap = new Map(siteData.build.instances);
|
|
10446
10765
|
const pageInstanceSet = findTreeInstanceIds(
|
|
10447
10766
|
instanceMap,
|
|
@@ -10490,7 +10809,7 @@ Please check webstudio --help for more details`
|
|
|
10490
10809
|
dataSources,
|
|
10491
10810
|
resources
|
|
10492
10811
|
},
|
|
10493
|
-
pages:
|
|
10812
|
+
pages: allPages,
|
|
10494
10813
|
page,
|
|
10495
10814
|
assets: siteData.assets
|
|
10496
10815
|
};
|
|
@@ -10547,10 +10866,10 @@ Please check webstudio --help for more details`
|
|
|
10547
10866
|
// pass only used metas to not generate unused preset styles
|
|
10548
10867
|
componentMetas: usedMetas,
|
|
10549
10868
|
assetBaseUrl,
|
|
10550
|
-
atomic: ((_g2 =
|
|
10869
|
+
atomic: ((_g2 = pages.compiler) == null ? void 0 : _g2.atomicStyles) ?? true
|
|
10551
10870
|
});
|
|
10552
10871
|
await createFileIfNotExists(join(generatedDir, "index.css"), cssText);
|
|
10553
|
-
for (const page of
|
|
10872
|
+
for (const page of allPages) {
|
|
10554
10873
|
const scope = createScope([
|
|
10555
10874
|
// manually maintained list of occupied identifiers
|
|
10556
10875
|
"useState",
|
|
@@ -10644,13 +10963,13 @@ Please check webstudio --help for more details`
|
|
|
10644
10963
|
metas: usedMetas,
|
|
10645
10964
|
tagsOverrides: framework.tags
|
|
10646
10965
|
});
|
|
10647
|
-
const projectMeta =
|
|
10966
|
+
const projectMeta = pages.meta;
|
|
10648
10967
|
const contactEmail = (
|
|
10649
10968
|
// fallback to user email when contact email is empty string
|
|
10650
10969
|
(projectMeta == null ? void 0 : projectMeta.contactEmail) || ((_i2 = siteData.user) == null ? void 0 : _i2.email) || void 0
|
|
10651
10970
|
);
|
|
10652
10971
|
const favIconAsset = (_j = assets.get((projectMeta == null ? void 0 : projectMeta.faviconAssetId) ?? "")) == null ? void 0 : _j.name;
|
|
10653
|
-
const pagePath = getPagePath(page.id,
|
|
10972
|
+
const pagePath = getPagePath(page.id, pages);
|
|
10654
10973
|
const breakpoints = siteData.build.breakpoints.map(([_, value]) => ({
|
|
10655
10974
|
id: value.id,
|
|
10656
10975
|
minWidth: value.minWidth,
|
|
@@ -10770,7 +11089,7 @@ Please check webstudio --help for more details`
|
|
|
10770
11089
|
join(generatedDir, "$resources.sitemap.xml.ts"),
|
|
10771
11090
|
`
|
|
10772
11091
|
export const sitemap = ${JSON.stringify(
|
|
10773
|
-
getStaticSiteMapXml(
|
|
11092
|
+
getStaticSiteMapXml(pages, siteData.build.updatedAt),
|
|
10774
11093
|
null,
|
|
10775
11094
|
2
|
|
10776
11095
|
)};
|
|
@@ -10788,7 +11107,7 @@ Please check webstudio --help for more details`
|
|
|
10788
11107
|
export const assets = ${JSON.stringify(assetsById, null, 2)};
|
|
10789
11108
|
`
|
|
10790
11109
|
);
|
|
10791
|
-
const redirects =
|
|
11110
|
+
const redirects = pages.redirects;
|
|
10792
11111
|
if (redirects !== void 0 && redirects.length > 0) {
|
|
10793
11112
|
for (const redirect of redirects) {
|
|
10794
11113
|
const generatedBasename = generateRemixRoute(redirect.old);
|
|
@@ -10963,7 +11282,7 @@ const getDeploymentInstructions = (deployTarget) => {
|
|
|
10963
11282
|
}
|
|
10964
11283
|
};
|
|
10965
11284
|
const name = "webstudio";
|
|
10966
|
-
const version = "0.
|
|
11285
|
+
const version = "0.265.0";
|
|
10967
11286
|
const description = "Webstudio CLI";
|
|
10968
11287
|
const author = "Webstudio <github@webstudio.is>";
|
|
10969
11288
|
const homepage = "https://webstudio.is";
|
|
@@ -10974,7 +11293,7 @@ const files = ["lib/*", "templates/*", "bin.js", "!*.{test,stories}.*"];
|
|
|
10974
11293
|
const scripts = { "typecheck": "tsgo --noEmit", "build": "rm -rf lib && vite build", "test": "vitest run" };
|
|
10975
11294
|
const license = "AGPL-3.0-or-later";
|
|
10976
11295
|
const engines = { "node": ">=22" };
|
|
10977
|
-
const dependencies = { "@clack/prompts": "^0.10.0", "@emotion/hash": "^0.9.2", "acorn": "^8.14.1", "acorn-walk": "^8.3.4", "change-case": "^5.4.4", "deepmerge": "^4.3.1", "env-paths": "^3.0.0", "nanoid": "^5.1.5", "p-limit": "^6.2.0", "parse5": "7.3.0", "picocolors": "^1.1.1", "reserved-identifiers": "^1.0.0", "tinyexec": "^0.3.2", "warn-once": "^0.1.1", "yargs": "^17.7.2", "zod": "^3.24.2" };
|
|
11296
|
+
const dependencies = { "@clack/prompts": "^0.10.0", "@emotion/hash": "^0.9.2", "@trpc/client": "^10.45.2", "acorn": "^8.14.1", "acorn-walk": "^8.3.4", "change-case": "^5.4.4", "deepmerge": "^4.3.1", "env-paths": "^3.0.0", "nanoid": "^5.1.5", "p-limit": "^6.2.0", "parse5": "7.3.0", "picocolors": "^1.1.1", "reserved-identifiers": "^1.0.0", "tinyexec": "^0.3.2", "warn-once": "^0.1.1", "yargs": "^17.7.2", "zod": "^3.24.2" };
|
|
10978
11297
|
const devDependencies = { "@cloudflare/vite-plugin": "^1.1.0", "@netlify/vite-plugin-react-router": "^1.0.1", "@react-router/dev": "^7.5.3", "@react-router/fs-routes": "^7.5.3", "@remix-run/cloudflare": "^2.16.5", "@remix-run/cloudflare-pages": "^2.16.5", "@remix-run/dev": "^2.16.5", "@remix-run/node": "^2.16.5", "@remix-run/react": "^2.16.5", "@remix-run/server-runtime": "^2.16.5", "@types/react": "^18.2.70", "@types/react-dom": "^18.2.25", "@types/yargs": "^17.0.33", "@vercel/react-router": "^1.1.0", "@vitejs/plugin-react": "^4.4.1", "@webstudio-is/css-engine": "workspace:*", "@webstudio-is/http-client": "workspace:*", "@webstudio-is/image": "workspace:*", "@webstudio-is/react-sdk": "workspace:*", "@webstudio-is/sdk": "workspace:*", "@webstudio-is/sdk-components-animation": "workspace:*", "@webstudio-is/sdk-components-react": "workspace:*", "@webstudio-is/sdk-components-react-radix": "workspace:*", "@webstudio-is/sdk-components-react-remix": "workspace:*", "@webstudio-is/sdk-components-react-router": "workspace:*", "@webstudio-is/tsconfig": "workspace:*", "h3": "^1.15.1", "ipx": "^3.0.3", "isbot": "^5.1.25", "prettier": "3.5.3", "react": "18.3.0-canary-14898b6a9-20240318", "react-dom": "18.3.0-canary-14898b6a9-20240318", "react-router": "^7.5.3", "ts-expect": "^1.3.0", "vike": "^0.4.229", "vite": "^6.3.4", "vitest": "^3.1.2", "wrangler": "^3.63.2" };
|
|
10979
11298
|
const packageJson = {
|
|
10980
11299
|
name,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webstudio",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.265.0",
|
|
4
4
|
"description": "Webstudio CLI",
|
|
5
5
|
"author": "Webstudio <github@webstudio.is>",
|
|
6
6
|
"homepage": "https://webstudio.is",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@clack/prompts": "^0.10.0",
|
|
30
30
|
"@emotion/hash": "^0.9.2",
|
|
31
|
+
"@trpc/client": "^10.45.2",
|
|
31
32
|
"acorn": "^8.14.1",
|
|
32
33
|
"acorn-walk": "^8.3.4",
|
|
33
34
|
"change-case": "^5.4.4",
|
|
@@ -71,16 +72,16 @@
|
|
|
71
72
|
"vite": "^6.3.4",
|
|
72
73
|
"vitest": "^3.1.2",
|
|
73
74
|
"wrangler": "^3.63.2",
|
|
74
|
-
"@webstudio-is/css-engine": "0.
|
|
75
|
-
"@webstudio-is/
|
|
76
|
-
"@webstudio-is/
|
|
77
|
-
"@webstudio-is/sdk": "0.
|
|
78
|
-
"@webstudio-is/
|
|
79
|
-
"@webstudio-is/sdk-components-
|
|
80
|
-
"@webstudio-is/sdk-components-react": "0.
|
|
81
|
-
"@webstudio-is/sdk-components-react-
|
|
82
|
-
"@webstudio-is/
|
|
83
|
-
"@webstudio-is/sdk-components-react-router": "0.
|
|
75
|
+
"@webstudio-is/css-engine": "0.265.0",
|
|
76
|
+
"@webstudio-is/react-sdk": "0.265.0",
|
|
77
|
+
"@webstudio-is/image": "0.265.0",
|
|
78
|
+
"@webstudio-is/sdk": "0.265.0",
|
|
79
|
+
"@webstudio-is/sdk-components-animation": "0.265.0",
|
|
80
|
+
"@webstudio-is/sdk-components-react": "0.265.0",
|
|
81
|
+
"@webstudio-is/sdk-components-react-radix": "0.265.0",
|
|
82
|
+
"@webstudio-is/sdk-components-react-remix": "0.265.0",
|
|
83
|
+
"@webstudio-is/http-client": "0.265.0",
|
|
84
|
+
"@webstudio-is/sdk-components-react-router": "0.265.0",
|
|
84
85
|
"@webstudio-is/tsconfig": "1.0.7"
|
|
85
86
|
},
|
|
86
87
|
"scripts": {
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"@remix-run/node": "2.16.5",
|
|
12
12
|
"@remix-run/react": "2.16.5",
|
|
13
13
|
"@remix-run/server-runtime": "2.16.5",
|
|
14
|
-
"@webstudio-is/image": "0.
|
|
15
|
-
"@webstudio-is/react-sdk": "0.
|
|
16
|
-
"@webstudio-is/sdk": "0.
|
|
17
|
-
"@webstudio-is/sdk-components-react": "0.
|
|
18
|
-
"@webstudio-is/sdk-components-animation": "0.
|
|
19
|
-
"@webstudio-is/sdk-components-react-radix": "0.
|
|
20
|
-
"@webstudio-is/sdk-components-react-remix": "0.
|
|
14
|
+
"@webstudio-is/image": "0.265.0",
|
|
15
|
+
"@webstudio-is/react-sdk": "0.265.0",
|
|
16
|
+
"@webstudio-is/sdk": "0.265.0",
|
|
17
|
+
"@webstudio-is/sdk-components-react": "0.265.0",
|
|
18
|
+
"@webstudio-is/sdk-components-animation": "0.265.0",
|
|
19
|
+
"@webstudio-is/sdk-components-react-radix": "0.265.0",
|
|
20
|
+
"@webstudio-is/sdk-components-react-remix": "0.265.0",
|
|
21
21
|
"isbot": "^5.1.25",
|
|
22
22
|
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
23
23
|
"react-dom": "18.3.0-canary-14898b6a9-20240318"
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@react-router/dev": "^7.5.3",
|
|
12
12
|
"@react-router/fs-routes": "^7.5.3",
|
|
13
|
-
"@webstudio-is/image": "0.
|
|
14
|
-
"@webstudio-is/react-sdk": "0.
|
|
15
|
-
"@webstudio-is/sdk": "0.
|
|
16
|
-
"@webstudio-is/sdk-components-animation": "0.
|
|
17
|
-
"@webstudio-is/sdk-components-react-radix": "0.
|
|
18
|
-
"@webstudio-is/sdk-components-react-router": "0.
|
|
19
|
-
"@webstudio-is/sdk-components-react": "0.
|
|
13
|
+
"@webstudio-is/image": "0.265.0",
|
|
14
|
+
"@webstudio-is/react-sdk": "0.265.0",
|
|
15
|
+
"@webstudio-is/sdk": "0.265.0",
|
|
16
|
+
"@webstudio-is/sdk-components-animation": "0.265.0",
|
|
17
|
+
"@webstudio-is/sdk-components-react-radix": "0.265.0",
|
|
18
|
+
"@webstudio-is/sdk-components-react-router": "0.265.0",
|
|
19
|
+
"@webstudio-is/sdk-components-react": "0.265.0",
|
|
20
20
|
"isbot": "^5.1.25",
|
|
21
21
|
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
22
22
|
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
"typecheck": "tsgo --noEmit"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@webstudio-is/image": "0.
|
|
12
|
-
"@webstudio-is/react-sdk": "0.
|
|
13
|
-
"@webstudio-is/sdk": "0.
|
|
14
|
-
"@webstudio-is/sdk-components-react": "0.
|
|
15
|
-
"@webstudio-is/sdk-components-animation": "0.
|
|
16
|
-
"@webstudio-is/sdk-components-react-radix": "0.
|
|
11
|
+
"@webstudio-is/image": "0.265.0",
|
|
12
|
+
"@webstudio-is/react-sdk": "0.265.0",
|
|
13
|
+
"@webstudio-is/sdk": "0.265.0",
|
|
14
|
+
"@webstudio-is/sdk-components-react": "0.265.0",
|
|
15
|
+
"@webstudio-is/sdk-components-animation": "0.265.0",
|
|
16
|
+
"@webstudio-is/sdk-components-react-radix": "0.265.0",
|
|
17
17
|
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
18
18
|
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
19
19
|
"vike": "^0.4.229"
|