@oaysus/cli 0.1.13 → 0.1.15
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/README.md +35 -12
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +151 -85
- package/dist/cli.js.map +1 -1
- package/dist/components/App.d.ts +26 -10
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +23 -8
- package/dist/components/App.js.map +1 -1
- package/dist/components/SlashCommands.js +1 -1
- package/dist/lib/push.d.ts.map +1 -1
- package/dist/lib/push.js +29 -1
- package/dist/lib/push.js.map +1 -1
- package/dist/lib/shared/commands.d.ts +11 -1
- package/dist/lib/shared/commands.d.ts.map +1 -1
- package/dist/lib/shared/commands.js +55 -13
- package/dist/lib/shared/commands.js.map +1 -1
- package/dist/lib/shared/uploader.d.ts +1 -0
- package/dist/lib/shared/uploader.d.ts.map +1 -1
- package/dist/lib/shared/uploader.js +4 -2
- package/dist/lib/shared/uploader.js.map +1 -1
- package/dist/lib/site/asset-puller.d.ts +93 -0
- package/dist/lib/site/asset-puller.d.ts.map +1 -0
- package/dist/lib/site/asset-puller.js +376 -0
- package/dist/lib/site/asset-puller.js.map +1 -0
- package/dist/lib/site/asset-resolver.d.ts +44 -0
- package/dist/lib/site/asset-resolver.d.ts.map +1 -0
- package/dist/lib/site/asset-resolver.js +225 -0
- package/dist/lib/site/asset-resolver.js.map +1 -0
- package/dist/lib/site/asset-uploader.d.ts +58 -0
- package/dist/lib/site/asset-uploader.d.ts.map +1 -0
- package/dist/lib/site/asset-uploader.js +261 -0
- package/dist/lib/site/asset-uploader.js.map +1 -0
- package/dist/lib/site/index.d.ts +14 -0
- package/dist/lib/site/index.d.ts.map +1 -0
- package/dist/lib/site/index.js +15 -0
- package/dist/lib/site/index.js.map +1 -0
- package/dist/lib/site/metadata.d.ts +99 -0
- package/dist/lib/site/metadata.d.ts.map +1 -0
- package/dist/lib/site/metadata.js +470 -0
- package/dist/lib/site/metadata.js.map +1 -0
- package/dist/lib/site/page-publisher.d.ts +51 -0
- package/dist/lib/site/page-publisher.d.ts.map +1 -0
- package/dist/lib/site/page-publisher.js +460 -0
- package/dist/lib/site/page-publisher.js.map +1 -0
- package/dist/lib/site/page-puller.d.ts +93 -0
- package/dist/lib/site/page-puller.d.ts.map +1 -0
- package/dist/lib/site/page-puller.js +346 -0
- package/dist/lib/site/page-puller.js.map +1 -0
- package/dist/lib/site/page-validator.d.ts +29 -0
- package/dist/lib/site/page-validator.d.ts.map +1 -0
- package/dist/lib/site/page-validator.js +282 -0
- package/dist/lib/site/page-validator.js.map +1 -0
- package/dist/lib/site/project-loader.d.ts +45 -0
- package/dist/lib/site/project-loader.d.ts.map +1 -0
- package/dist/lib/site/project-loader.js +276 -0
- package/dist/lib/site/project-loader.js.map +1 -0
- package/dist/lib/site/shared-component-resolver.d.ts +89 -0
- package/dist/lib/site/shared-component-resolver.d.ts.map +1 -0
- package/dist/lib/site/shared-component-resolver.js +222 -0
- package/dist/lib/site/shared-component-resolver.js.map +1 -0
- package/dist/screens/WelcomeScreen.d.ts +26 -10
- package/dist/screens/WelcomeScreen.d.ts.map +1 -1
- package/dist/screens/WelcomeScreen.js +44 -21
- package/dist/screens/WelcomeScreen.js.map +1 -1
- package/dist/screens/site/SiteInitScreen.d.ts +12 -0
- package/dist/screens/site/SiteInitScreen.d.ts.map +1 -0
- package/dist/screens/site/SiteInitScreen.js +282 -0
- package/dist/screens/site/SiteInitScreen.js.map +1 -0
- package/dist/screens/site/SitePublishScreen.d.ts +15 -0
- package/dist/screens/site/SitePublishScreen.d.ts.map +1 -0
- package/dist/screens/site/SitePublishScreen.js +330 -0
- package/dist/screens/site/SitePublishScreen.js.map +1 -0
- package/dist/screens/site/SitePullScreen.d.ts +14 -0
- package/dist/screens/site/SitePullScreen.d.ts.map +1 -0
- package/dist/screens/site/SitePullScreen.js +455 -0
- package/dist/screens/site/SitePullScreen.js.map +1 -0
- package/dist/screens/site/SiteValidateScreen.d.ts +12 -0
- package/dist/screens/site/SiteValidateScreen.d.ts.map +1 -0
- package/dist/screens/site/SiteValidateScreen.js +201 -0
- package/dist/screens/site/SiteValidateScreen.js.map +1 -0
- package/dist/types/site.d.ts +348 -0
- package/dist/types/site.d.ts.map +1 -0
- package/dist/types/site.js +6 -0
- package/dist/types/site.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Publisher
|
|
3
|
+
* Publishes pages to the Oaysus platform via API
|
|
4
|
+
*/
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
import { loadCredentials } from '../shared/auth.js';
|
|
7
|
+
import { SSO_BASE_URL, debug } from '../shared/config.js';
|
|
8
|
+
import { findAllAssets, replaceAssetPaths } from './asset-resolver.js';
|
|
9
|
+
import { uploadAssets } from './asset-uploader.js';
|
|
10
|
+
import { validateProject } from './page-validator.js';
|
|
11
|
+
import { loadComponentCatalog } from './metadata.js';
|
|
12
|
+
import { resolveSharedComponents } from './shared-component-resolver.js';
|
|
13
|
+
/**
|
|
14
|
+
* Check if a page exists by slug
|
|
15
|
+
*/
|
|
16
|
+
async function getPageBySlug(websiteId, slug, jwt) {
|
|
17
|
+
const url = `${SSO_BASE_URL}/hosting/page-builder/pages/by-slug`;
|
|
18
|
+
try {
|
|
19
|
+
const response = await axios.get(url, {
|
|
20
|
+
params: { websiteId, slug },
|
|
21
|
+
headers: {
|
|
22
|
+
Authorization: `Bearer ${jwt}`,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
if (response.data.success && response.data.page) {
|
|
26
|
+
return { id: response.data.page.id, exists: true };
|
|
27
|
+
}
|
|
28
|
+
return { id: '', exists: false };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
|
32
|
+
return { id: '', exists: false };
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check which pages from a project already exist on the server
|
|
39
|
+
* Returns list of slugs that will be overwritten
|
|
40
|
+
*/
|
|
41
|
+
export async function checkExistingPages(project, options = {}) {
|
|
42
|
+
// Get credentials if not provided
|
|
43
|
+
let websiteId = options.websiteId;
|
|
44
|
+
let jwt = options.jwt;
|
|
45
|
+
if (!websiteId || !jwt) {
|
|
46
|
+
const credentials = await loadCredentials();
|
|
47
|
+
if (!credentials) {
|
|
48
|
+
return { existingPages: [], newPages: [] };
|
|
49
|
+
}
|
|
50
|
+
websiteId = websiteId || credentials.websiteId;
|
|
51
|
+
jwt = jwt || credentials.jwt;
|
|
52
|
+
}
|
|
53
|
+
if (!websiteId) {
|
|
54
|
+
return { existingPages: [], newPages: [] };
|
|
55
|
+
}
|
|
56
|
+
const existingPages = [];
|
|
57
|
+
const newPages = [];
|
|
58
|
+
for (const page of project.pages) {
|
|
59
|
+
const existing = await getPageBySlug(websiteId, page.definition.slug, jwt);
|
|
60
|
+
if (existing.exists) {
|
|
61
|
+
existingPages.push(page.definition.slug);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
newPages.push(page.definition.slug);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { existingPages, newPages };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a new page and publish it
|
|
71
|
+
*/
|
|
72
|
+
async function createPage(websiteId, page, jwt) {
|
|
73
|
+
const createUrl = `${SSO_BASE_URL}/hosting/page-builder/pages`;
|
|
74
|
+
debug('Creating page:', page.slug);
|
|
75
|
+
try {
|
|
76
|
+
// First create the page (creates as DRAFT)
|
|
77
|
+
const response = await axios.post(createUrl, {
|
|
78
|
+
websiteId,
|
|
79
|
+
title: page.title,
|
|
80
|
+
slug: page.slug,
|
|
81
|
+
description: page.description,
|
|
82
|
+
isHomePage: page.isHomePage || false,
|
|
83
|
+
components: page.components,
|
|
84
|
+
settings: page.settings || {},
|
|
85
|
+
}, {
|
|
86
|
+
headers: {
|
|
87
|
+
Authorization: `Bearer ${jwt}`,
|
|
88
|
+
'Content-Type': 'application/json',
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
if (!response.data.success || !response.data.page) {
|
|
92
|
+
return { id: '', success: false, error: response.data.error };
|
|
93
|
+
}
|
|
94
|
+
const pageId = response.data.page.id;
|
|
95
|
+
// Now publish the page by setting status to PUBLISHED
|
|
96
|
+
// This triggers SSR + R2 upload in the FastAPI endpoint
|
|
97
|
+
const publishUrl = `${SSO_BASE_URL}/hosting/page-builder/pages/${pageId}`;
|
|
98
|
+
const publishResponse = await axios.put(publishUrl, {
|
|
99
|
+
status: 'PUBLISHED',
|
|
100
|
+
}, {
|
|
101
|
+
headers: {
|
|
102
|
+
Authorization: `Bearer ${jwt}`,
|
|
103
|
+
'Content-Type': 'application/json',
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
if (publishResponse.data.success) {
|
|
107
|
+
return { id: pageId, success: true };
|
|
108
|
+
}
|
|
109
|
+
// Page was created but publish failed - still return the page ID
|
|
110
|
+
return { id: pageId, success: false, error: publishResponse.data.error || 'Failed to publish after creation' };
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
let errorMessage = 'Failed to create page';
|
|
114
|
+
if (axios.isAxiosError(error)) {
|
|
115
|
+
errorMessage = error.response?.data?.error ||
|
|
116
|
+
error.response?.data?.detail?.error ||
|
|
117
|
+
error.message;
|
|
118
|
+
}
|
|
119
|
+
else if (error instanceof Error) {
|
|
120
|
+
errorMessage = error.message;
|
|
121
|
+
}
|
|
122
|
+
return { id: '', success: false, error: errorMessage };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Update an existing page and publish it
|
|
127
|
+
*/
|
|
128
|
+
async function updatePage(pageId, page, jwt) {
|
|
129
|
+
const url = `${SSO_BASE_URL}/hosting/page-builder/pages/${pageId}`;
|
|
130
|
+
debug('Updating page:', page.slug);
|
|
131
|
+
try {
|
|
132
|
+
const response = await axios.put(url, {
|
|
133
|
+
title: page.title,
|
|
134
|
+
slug: page.slug,
|
|
135
|
+
description: page.description,
|
|
136
|
+
isHomePage: page.isHomePage,
|
|
137
|
+
components: page.components,
|
|
138
|
+
settings: page.settings || {},
|
|
139
|
+
// Set status to PUBLISHED to trigger SSR + R2 upload
|
|
140
|
+
status: 'PUBLISHED',
|
|
141
|
+
}, {
|
|
142
|
+
headers: {
|
|
143
|
+
Authorization: `Bearer ${jwt}`,
|
|
144
|
+
'Content-Type': 'application/json',
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
if (response.data.success) {
|
|
148
|
+
return { success: true };
|
|
149
|
+
}
|
|
150
|
+
return { success: false, error: response.data.error };
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
let errorMessage = 'Failed to update page';
|
|
154
|
+
if (axios.isAxiosError(error)) {
|
|
155
|
+
errorMessage = error.response?.data?.error ||
|
|
156
|
+
error.response?.data?.detail?.error ||
|
|
157
|
+
error.message;
|
|
158
|
+
}
|
|
159
|
+
else if (error instanceof Error) {
|
|
160
|
+
errorMessage = error.message;
|
|
161
|
+
}
|
|
162
|
+
return { success: false, error: errorMessage };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Publish a single page (create or update)
|
|
167
|
+
*/
|
|
168
|
+
export async function publishPage(page, options) {
|
|
169
|
+
const { websiteId, jwt, assetMap } = options;
|
|
170
|
+
// Replace asset paths if we have a map
|
|
171
|
+
const processedPage = assetMap
|
|
172
|
+
? replaceAssetPaths(page, assetMap)
|
|
173
|
+
: page;
|
|
174
|
+
try {
|
|
175
|
+
// Check if page exists
|
|
176
|
+
const existing = await getPageBySlug(websiteId, page.slug, jwt);
|
|
177
|
+
if (existing.exists) {
|
|
178
|
+
// Update existing page
|
|
179
|
+
const result = await updatePage(existing.id, processedPage, jwt);
|
|
180
|
+
if (result.success) {
|
|
181
|
+
return {
|
|
182
|
+
slug: page.slug,
|
|
183
|
+
action: 'updated',
|
|
184
|
+
pageId: existing.id,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
slug: page.slug,
|
|
189
|
+
action: 'failed',
|
|
190
|
+
error: result.error,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Create new page
|
|
194
|
+
const result = await createPage(websiteId, processedPage, jwt);
|
|
195
|
+
if (result.success) {
|
|
196
|
+
return {
|
|
197
|
+
slug: page.slug,
|
|
198
|
+
action: 'created',
|
|
199
|
+
pageId: result.id,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
slug: page.slug,
|
|
204
|
+
action: 'failed',
|
|
205
|
+
error: result.error,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
return {
|
|
210
|
+
slug: page.slug,
|
|
211
|
+
action: 'failed',
|
|
212
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Publish an entire project
|
|
218
|
+
*/
|
|
219
|
+
export async function publishProject(project, options = {}) {
|
|
220
|
+
// Get credentials if not provided
|
|
221
|
+
let websiteId = options.websiteId;
|
|
222
|
+
let jwt = options.jwt;
|
|
223
|
+
if (!websiteId || !jwt) {
|
|
224
|
+
const credentials = await loadCredentials();
|
|
225
|
+
if (!credentials) {
|
|
226
|
+
return {
|
|
227
|
+
success: false,
|
|
228
|
+
pages: [],
|
|
229
|
+
assetsUploaded: 0,
|
|
230
|
+
created: 0,
|
|
231
|
+
updated: 0,
|
|
232
|
+
errors: 1,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
websiteId = websiteId || project.config.websiteId || credentials.websiteId;
|
|
236
|
+
jwt = jwt || credentials.jwt;
|
|
237
|
+
}
|
|
238
|
+
if (!websiteId) {
|
|
239
|
+
return {
|
|
240
|
+
success: false,
|
|
241
|
+
pages: [{
|
|
242
|
+
slug: '',
|
|
243
|
+
action: 'failed',
|
|
244
|
+
error: 'No website ID found. Set websiteId in oaysus.website.json or run "oaysus login"',
|
|
245
|
+
}],
|
|
246
|
+
assetsUploaded: 0,
|
|
247
|
+
created: 0,
|
|
248
|
+
updated: 0,
|
|
249
|
+
errors: 1,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
// Validate if not skipped
|
|
253
|
+
if (!options.skipValidation) {
|
|
254
|
+
if (options.onProgress) {
|
|
255
|
+
options.onProgress('validating', 0, 1);
|
|
256
|
+
}
|
|
257
|
+
const validation = await validateProject(project, { websiteId, jwt });
|
|
258
|
+
if (!validation.valid) {
|
|
259
|
+
return {
|
|
260
|
+
success: false,
|
|
261
|
+
pages: validation.pages.map(p => ({
|
|
262
|
+
slug: p.slug,
|
|
263
|
+
action: 'failed',
|
|
264
|
+
error: p.errors.join('; '),
|
|
265
|
+
})),
|
|
266
|
+
assetsUploaded: 0,
|
|
267
|
+
created: 0,
|
|
268
|
+
updated: 0,
|
|
269
|
+
errors: validation.totalErrors,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Resolve shared components (creates/links global components)
|
|
274
|
+
let pagesForPublishing = project.pages;
|
|
275
|
+
let sharedComponentsCreated = 0;
|
|
276
|
+
let sharedComponentsExisting = 0;
|
|
277
|
+
if (!options.dryRun) {
|
|
278
|
+
if (options.onProgress) {
|
|
279
|
+
options.onProgress('resolving-shared', 0, 1, 'Loading component catalog...');
|
|
280
|
+
}
|
|
281
|
+
// Load component catalog for defaultShared detection
|
|
282
|
+
const catalog = await loadComponentCatalog(project.projectPath);
|
|
283
|
+
if (options.onProgress) {
|
|
284
|
+
options.onProgress('resolving-shared', 0, 1, 'Resolving shared components...');
|
|
285
|
+
}
|
|
286
|
+
const sharedResult = await resolveSharedComponents({
|
|
287
|
+
pages: project.pages,
|
|
288
|
+
websiteId: websiteId,
|
|
289
|
+
jwt: jwt,
|
|
290
|
+
catalog,
|
|
291
|
+
});
|
|
292
|
+
if (!sharedResult.success) {
|
|
293
|
+
return {
|
|
294
|
+
success: false,
|
|
295
|
+
pages: [{
|
|
296
|
+
slug: '',
|
|
297
|
+
action: 'failed',
|
|
298
|
+
error: sharedResult.error || 'Failed to resolve shared components',
|
|
299
|
+
}],
|
|
300
|
+
assetsUploaded: 0,
|
|
301
|
+
created: 0,
|
|
302
|
+
updated: 0,
|
|
303
|
+
errors: 1,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
pagesForPublishing = sharedResult.pages;
|
|
307
|
+
sharedComponentsCreated = sharedResult.created.length;
|
|
308
|
+
sharedComponentsExisting = sharedResult.existing.length;
|
|
309
|
+
if (sharedComponentsCreated > 0 || sharedComponentsExisting > 0) {
|
|
310
|
+
debug(`[Publish] Shared components: ${sharedComponentsCreated} created, ${sharedComponentsExisting} existing`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Find and upload assets - use pagesForPublishing which has resolved shared components
|
|
314
|
+
const projectWithResolvedPages = {
|
|
315
|
+
...project,
|
|
316
|
+
pages: pagesForPublishing,
|
|
317
|
+
};
|
|
318
|
+
const allAssets = findAllAssets(projectWithResolvedPages);
|
|
319
|
+
let assetMap = new Map();
|
|
320
|
+
let assetsUploaded = 0;
|
|
321
|
+
if (allAssets.length > 0 && !options.dryRun) {
|
|
322
|
+
if (options.onProgress) {
|
|
323
|
+
options.onProgress('uploading-assets', 0, allAssets.length);
|
|
324
|
+
}
|
|
325
|
+
const uploadResult = await uploadAssets(allAssets, project.projectPath, {
|
|
326
|
+
websiteId,
|
|
327
|
+
jwt,
|
|
328
|
+
onProgress: (current, total) => {
|
|
329
|
+
if (options.onProgress) {
|
|
330
|
+
options.onProgress('uploading-assets', current, total);
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
assetMap = uploadResult.assetMap;
|
|
335
|
+
assetsUploaded = uploadResult.successCount;
|
|
336
|
+
if (uploadResult.errorCount > 0) {
|
|
337
|
+
// Continue with publishing but note the errors
|
|
338
|
+
debug(`Asset upload had ${uploadResult.errorCount} errors`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Publish pages (using pagesForPublishing which has resolved shared components)
|
|
342
|
+
const pageResults = [];
|
|
343
|
+
let created = 0;
|
|
344
|
+
let updated = 0;
|
|
345
|
+
let errors = 0;
|
|
346
|
+
for (let i = 0; i < pagesForPublishing.length; i++) {
|
|
347
|
+
const page = pagesForPublishing[i];
|
|
348
|
+
if (options.onProgress) {
|
|
349
|
+
options.onProgress('publishing-pages', i + 1, pagesForPublishing.length, page.definition.slug);
|
|
350
|
+
}
|
|
351
|
+
if (options.dryRun) {
|
|
352
|
+
// In dry run, check if page exists but don't actually publish
|
|
353
|
+
const existing = await getPageBySlug(websiteId, page.definition.slug, jwt);
|
|
354
|
+
pageResults.push({
|
|
355
|
+
slug: page.definition.slug,
|
|
356
|
+
action: existing.exists ? 'updated' : 'created',
|
|
357
|
+
pageId: existing.id || undefined,
|
|
358
|
+
});
|
|
359
|
+
if (existing.exists) {
|
|
360
|
+
updated++;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
created++;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
// Actually publish
|
|
368
|
+
const result = await publishPage(page.definition, {
|
|
369
|
+
websiteId: websiteId,
|
|
370
|
+
jwt: jwt,
|
|
371
|
+
assetMap,
|
|
372
|
+
});
|
|
373
|
+
pageResults.push(result);
|
|
374
|
+
if (result.action === 'created') {
|
|
375
|
+
created++;
|
|
376
|
+
}
|
|
377
|
+
else if (result.action === 'updated') {
|
|
378
|
+
updated++;
|
|
379
|
+
}
|
|
380
|
+
else if (result.action === 'failed') {
|
|
381
|
+
errors++;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return {
|
|
386
|
+
success: errors === 0,
|
|
387
|
+
pages: pageResults,
|
|
388
|
+
assetsUploaded,
|
|
389
|
+
created,
|
|
390
|
+
updated,
|
|
391
|
+
errors,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Publish a single page file from a project
|
|
396
|
+
*/
|
|
397
|
+
export async function publishSinglePage(project, pageIdentifier, options = {}) {
|
|
398
|
+
// Find the page
|
|
399
|
+
const targetPage = project.pages.find(p => p.file === pageIdentifier ||
|
|
400
|
+
p.definition.slug === pageIdentifier);
|
|
401
|
+
if (!targetPage) {
|
|
402
|
+
return {
|
|
403
|
+
success: false,
|
|
404
|
+
pages: [{
|
|
405
|
+
slug: pageIdentifier,
|
|
406
|
+
action: 'failed',
|
|
407
|
+
error: `Page not found: ${pageIdentifier}`,
|
|
408
|
+
}],
|
|
409
|
+
assetsUploaded: 0,
|
|
410
|
+
created: 0,
|
|
411
|
+
updated: 0,
|
|
412
|
+
errors: 1,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
// Create a mini project with just this page
|
|
416
|
+
const singlePageProject = {
|
|
417
|
+
...project,
|
|
418
|
+
pages: [targetPage],
|
|
419
|
+
};
|
|
420
|
+
return publishProject(singlePageProject, options);
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Format publish results for display
|
|
424
|
+
*/
|
|
425
|
+
export function formatPublishResults(result) {
|
|
426
|
+
const lines = [];
|
|
427
|
+
if (result.success) {
|
|
428
|
+
lines.push('✓ Publishing complete');
|
|
429
|
+
lines.push('');
|
|
430
|
+
if (result.assetsUploaded > 0) {
|
|
431
|
+
lines.push(` Assets uploaded: ${result.assetsUploaded}`);
|
|
432
|
+
}
|
|
433
|
+
if (result.created > 0) {
|
|
434
|
+
lines.push(` Pages created: ${result.created}`);
|
|
435
|
+
}
|
|
436
|
+
if (result.updated > 0) {
|
|
437
|
+
lines.push(` Pages updated: ${result.updated}`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
lines.push('✗ Publishing failed');
|
|
442
|
+
lines.push('');
|
|
443
|
+
for (const page of result.pages) {
|
|
444
|
+
if (page.action === 'failed') {
|
|
445
|
+
lines.push(` ✗ ${page.slug}: ${page.error}`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// List all pages with their status
|
|
450
|
+
lines.push('');
|
|
451
|
+
lines.push('Pages:');
|
|
452
|
+
for (const page of result.pages) {
|
|
453
|
+
const icon = page.action === 'failed' ? '✗' :
|
|
454
|
+
page.action === 'created' ? '+' :
|
|
455
|
+
page.action === 'updated' ? '~' : '-';
|
|
456
|
+
lines.push(` ${icon} ${page.slug}`);
|
|
457
|
+
}
|
|
458
|
+
return lines;
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=page-publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-publisher.js","sourceRoot":"","sources":["../../../src/lib/site/page-publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Puller
|
|
3
|
+
* Pulls pages from the Oaysus platform to local JSON files
|
|
4
|
+
*/
|
|
5
|
+
import type { WebsiteConfig } from '../../types/site.js';
|
|
6
|
+
/**
|
|
7
|
+
* Result of pulling a single page
|
|
8
|
+
*/
|
|
9
|
+
export interface PullPageResult {
|
|
10
|
+
/** Page slug */
|
|
11
|
+
slug: string;
|
|
12
|
+
/** Local file path written */
|
|
13
|
+
file: string;
|
|
14
|
+
/** Action taken */
|
|
15
|
+
action: 'created' | 'updated' | 'skipped';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Result of entire pull operation
|
|
19
|
+
*/
|
|
20
|
+
export interface PullResult {
|
|
21
|
+
/** Overall success */
|
|
22
|
+
success: boolean;
|
|
23
|
+
/** Results per page */
|
|
24
|
+
pages: PullPageResult[];
|
|
25
|
+
/** Number of pages fetched from server */
|
|
26
|
+
fetched: number;
|
|
27
|
+
/** Number of files written */
|
|
28
|
+
written: number;
|
|
29
|
+
/** Number of files skipped */
|
|
30
|
+
skipped: number;
|
|
31
|
+
/** Errors encountered */
|
|
32
|
+
errors: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Pull progress callback
|
|
36
|
+
*/
|
|
37
|
+
export type PullProgressCallback = (stage: 'fetching' | 'writing', current: number, total: number, detail?: string) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Convert a slug to a local filename
|
|
40
|
+
* / -> home.json (matches site init convention)
|
|
41
|
+
* /about -> about.json
|
|
42
|
+
* /services/training -> services-training.json
|
|
43
|
+
*/
|
|
44
|
+
export declare function slugToFilename(slug: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Preview info for a page to be pulled
|
|
47
|
+
*/
|
|
48
|
+
export interface PullPreviewPage {
|
|
49
|
+
slug: string;
|
|
50
|
+
title: string;
|
|
51
|
+
file: string;
|
|
52
|
+
existsLocally: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Result of previewing what pages will be pulled
|
|
56
|
+
*/
|
|
57
|
+
export interface PullPreviewResult {
|
|
58
|
+
success: boolean;
|
|
59
|
+
error?: string;
|
|
60
|
+
/** All pages available on server */
|
|
61
|
+
pages: PullPreviewPage[];
|
|
62
|
+
/** Pages that will create new files */
|
|
63
|
+
newPages: PullPreviewPage[];
|
|
64
|
+
/** Pages that will overwrite existing files */
|
|
65
|
+
existingPages: PullPreviewPage[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Preview what pages would be pulled without actually pulling them
|
|
69
|
+
* Use this to show the user what will happen before confirming
|
|
70
|
+
*/
|
|
71
|
+
export declare function previewPull(options: {
|
|
72
|
+
projectPath: string;
|
|
73
|
+
config: WebsiteConfig;
|
|
74
|
+
websiteId?: string;
|
|
75
|
+
jwt?: string;
|
|
76
|
+
}): Promise<PullPreviewResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Pull all pages from the server to local files
|
|
79
|
+
*/
|
|
80
|
+
export declare function pullPages(options: {
|
|
81
|
+
projectPath: string;
|
|
82
|
+
config: WebsiteConfig;
|
|
83
|
+
websiteId?: string;
|
|
84
|
+
jwt?: string;
|
|
85
|
+
force?: boolean;
|
|
86
|
+
dryRun?: boolean;
|
|
87
|
+
onProgress?: PullProgressCallback;
|
|
88
|
+
}): Promise<PullResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Format pull results for display
|
|
91
|
+
*/
|
|
92
|
+
export declare function formatPullResults(result: PullResult): string[];
|
|
93
|
+
//# sourceMappingURL=page-puller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-puller.d.ts","sourceRoot":"","sources":["../../../src/lib/site/page-puller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAkCD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;AAEV;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD;AAgGD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,uCAAuC;IACvC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,EAAE,eAAe,EAAE,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiF7B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,GAAG,OAAO,CAAC,UAAU,CAAC,CAwItB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAgD9D"}
|