@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.
Files changed (85) hide show
  1. package/README.md +35 -12
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +151 -85
  4. package/dist/cli.js.map +1 -1
  5. package/dist/components/App.d.ts +26 -10
  6. package/dist/components/App.d.ts.map +1 -1
  7. package/dist/components/App.js +23 -8
  8. package/dist/components/App.js.map +1 -1
  9. package/dist/components/SlashCommands.js +1 -1
  10. package/dist/lib/push.d.ts.map +1 -1
  11. package/dist/lib/push.js +29 -1
  12. package/dist/lib/push.js.map +1 -1
  13. package/dist/lib/shared/commands.d.ts +11 -1
  14. package/dist/lib/shared/commands.d.ts.map +1 -1
  15. package/dist/lib/shared/commands.js +55 -13
  16. package/dist/lib/shared/commands.js.map +1 -1
  17. package/dist/lib/shared/uploader.d.ts +1 -0
  18. package/dist/lib/shared/uploader.d.ts.map +1 -1
  19. package/dist/lib/shared/uploader.js +4 -2
  20. package/dist/lib/shared/uploader.js.map +1 -1
  21. package/dist/lib/site/asset-puller.d.ts +93 -0
  22. package/dist/lib/site/asset-puller.d.ts.map +1 -0
  23. package/dist/lib/site/asset-puller.js +376 -0
  24. package/dist/lib/site/asset-puller.js.map +1 -0
  25. package/dist/lib/site/asset-resolver.d.ts +44 -0
  26. package/dist/lib/site/asset-resolver.d.ts.map +1 -0
  27. package/dist/lib/site/asset-resolver.js +225 -0
  28. package/dist/lib/site/asset-resolver.js.map +1 -0
  29. package/dist/lib/site/asset-uploader.d.ts +58 -0
  30. package/dist/lib/site/asset-uploader.d.ts.map +1 -0
  31. package/dist/lib/site/asset-uploader.js +261 -0
  32. package/dist/lib/site/asset-uploader.js.map +1 -0
  33. package/dist/lib/site/index.d.ts +14 -0
  34. package/dist/lib/site/index.d.ts.map +1 -0
  35. package/dist/lib/site/index.js +15 -0
  36. package/dist/lib/site/index.js.map +1 -0
  37. package/dist/lib/site/metadata.d.ts +99 -0
  38. package/dist/lib/site/metadata.d.ts.map +1 -0
  39. package/dist/lib/site/metadata.js +470 -0
  40. package/dist/lib/site/metadata.js.map +1 -0
  41. package/dist/lib/site/page-publisher.d.ts +51 -0
  42. package/dist/lib/site/page-publisher.d.ts.map +1 -0
  43. package/dist/lib/site/page-publisher.js +460 -0
  44. package/dist/lib/site/page-publisher.js.map +1 -0
  45. package/dist/lib/site/page-puller.d.ts +93 -0
  46. package/dist/lib/site/page-puller.d.ts.map +1 -0
  47. package/dist/lib/site/page-puller.js +346 -0
  48. package/dist/lib/site/page-puller.js.map +1 -0
  49. package/dist/lib/site/page-validator.d.ts +29 -0
  50. package/dist/lib/site/page-validator.d.ts.map +1 -0
  51. package/dist/lib/site/page-validator.js +282 -0
  52. package/dist/lib/site/page-validator.js.map +1 -0
  53. package/dist/lib/site/project-loader.d.ts +45 -0
  54. package/dist/lib/site/project-loader.d.ts.map +1 -0
  55. package/dist/lib/site/project-loader.js +276 -0
  56. package/dist/lib/site/project-loader.js.map +1 -0
  57. package/dist/lib/site/shared-component-resolver.d.ts +89 -0
  58. package/dist/lib/site/shared-component-resolver.d.ts.map +1 -0
  59. package/dist/lib/site/shared-component-resolver.js +222 -0
  60. package/dist/lib/site/shared-component-resolver.js.map +1 -0
  61. package/dist/screens/WelcomeScreen.d.ts +26 -10
  62. package/dist/screens/WelcomeScreen.d.ts.map +1 -1
  63. package/dist/screens/WelcomeScreen.js +44 -21
  64. package/dist/screens/WelcomeScreen.js.map +1 -1
  65. package/dist/screens/site/SiteInitScreen.d.ts +12 -0
  66. package/dist/screens/site/SiteInitScreen.d.ts.map +1 -0
  67. package/dist/screens/site/SiteInitScreen.js +282 -0
  68. package/dist/screens/site/SiteInitScreen.js.map +1 -0
  69. package/dist/screens/site/SitePublishScreen.d.ts +15 -0
  70. package/dist/screens/site/SitePublishScreen.d.ts.map +1 -0
  71. package/dist/screens/site/SitePublishScreen.js +330 -0
  72. package/dist/screens/site/SitePublishScreen.js.map +1 -0
  73. package/dist/screens/site/SitePullScreen.d.ts +14 -0
  74. package/dist/screens/site/SitePullScreen.d.ts.map +1 -0
  75. package/dist/screens/site/SitePullScreen.js +455 -0
  76. package/dist/screens/site/SitePullScreen.js.map +1 -0
  77. package/dist/screens/site/SiteValidateScreen.d.ts +12 -0
  78. package/dist/screens/site/SiteValidateScreen.d.ts.map +1 -0
  79. package/dist/screens/site/SiteValidateScreen.js +201 -0
  80. package/dist/screens/site/SiteValidateScreen.js.map +1 -0
  81. package/dist/types/site.d.ts +348 -0
  82. package/dist/types/site.d.ts.map +1 -0
  83. package/dist/types/site.js +6 -0
  84. package/dist/types/site.js.map +1 -0
  85. 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"}