@oaysus/cli 0.1.13 → 0.1.14

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 (84) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +151 -85
  3. package/dist/cli.js.map +1 -1
  4. package/dist/components/App.d.ts +26 -10
  5. package/dist/components/App.d.ts.map +1 -1
  6. package/dist/components/App.js +23 -8
  7. package/dist/components/App.js.map +1 -1
  8. package/dist/components/SlashCommands.js +1 -1
  9. package/dist/lib/push.d.ts.map +1 -1
  10. package/dist/lib/push.js +29 -1
  11. package/dist/lib/push.js.map +1 -1
  12. package/dist/lib/shared/commands.d.ts +11 -1
  13. package/dist/lib/shared/commands.d.ts.map +1 -1
  14. package/dist/lib/shared/commands.js +55 -13
  15. package/dist/lib/shared/commands.js.map +1 -1
  16. package/dist/lib/shared/uploader.d.ts +1 -0
  17. package/dist/lib/shared/uploader.d.ts.map +1 -1
  18. package/dist/lib/shared/uploader.js +4 -2
  19. package/dist/lib/shared/uploader.js.map +1 -1
  20. package/dist/lib/site/asset-puller.d.ts +93 -0
  21. package/dist/lib/site/asset-puller.d.ts.map +1 -0
  22. package/dist/lib/site/asset-puller.js +376 -0
  23. package/dist/lib/site/asset-puller.js.map +1 -0
  24. package/dist/lib/site/asset-resolver.d.ts +44 -0
  25. package/dist/lib/site/asset-resolver.d.ts.map +1 -0
  26. package/dist/lib/site/asset-resolver.js +225 -0
  27. package/dist/lib/site/asset-resolver.js.map +1 -0
  28. package/dist/lib/site/asset-uploader.d.ts +58 -0
  29. package/dist/lib/site/asset-uploader.d.ts.map +1 -0
  30. package/dist/lib/site/asset-uploader.js +261 -0
  31. package/dist/lib/site/asset-uploader.js.map +1 -0
  32. package/dist/lib/site/index.d.ts +14 -0
  33. package/dist/lib/site/index.d.ts.map +1 -0
  34. package/dist/lib/site/index.js +15 -0
  35. package/dist/lib/site/index.js.map +1 -0
  36. package/dist/lib/site/metadata.d.ts +99 -0
  37. package/dist/lib/site/metadata.d.ts.map +1 -0
  38. package/dist/lib/site/metadata.js +470 -0
  39. package/dist/lib/site/metadata.js.map +1 -0
  40. package/dist/lib/site/page-publisher.d.ts +51 -0
  41. package/dist/lib/site/page-publisher.d.ts.map +1 -0
  42. package/dist/lib/site/page-publisher.js +460 -0
  43. package/dist/lib/site/page-publisher.js.map +1 -0
  44. package/dist/lib/site/page-puller.d.ts +93 -0
  45. package/dist/lib/site/page-puller.d.ts.map +1 -0
  46. package/dist/lib/site/page-puller.js +346 -0
  47. package/dist/lib/site/page-puller.js.map +1 -0
  48. package/dist/lib/site/page-validator.d.ts +29 -0
  49. package/dist/lib/site/page-validator.d.ts.map +1 -0
  50. package/dist/lib/site/page-validator.js +282 -0
  51. package/dist/lib/site/page-validator.js.map +1 -0
  52. package/dist/lib/site/project-loader.d.ts +45 -0
  53. package/dist/lib/site/project-loader.d.ts.map +1 -0
  54. package/dist/lib/site/project-loader.js +276 -0
  55. package/dist/lib/site/project-loader.js.map +1 -0
  56. package/dist/lib/site/shared-component-resolver.d.ts +89 -0
  57. package/dist/lib/site/shared-component-resolver.d.ts.map +1 -0
  58. package/dist/lib/site/shared-component-resolver.js +222 -0
  59. package/dist/lib/site/shared-component-resolver.js.map +1 -0
  60. package/dist/screens/WelcomeScreen.d.ts +26 -10
  61. package/dist/screens/WelcomeScreen.d.ts.map +1 -1
  62. package/dist/screens/WelcomeScreen.js +44 -21
  63. package/dist/screens/WelcomeScreen.js.map +1 -1
  64. package/dist/screens/site/SiteInitScreen.d.ts +12 -0
  65. package/dist/screens/site/SiteInitScreen.d.ts.map +1 -0
  66. package/dist/screens/site/SiteInitScreen.js +282 -0
  67. package/dist/screens/site/SiteInitScreen.js.map +1 -0
  68. package/dist/screens/site/SitePublishScreen.d.ts +15 -0
  69. package/dist/screens/site/SitePublishScreen.d.ts.map +1 -0
  70. package/dist/screens/site/SitePublishScreen.js +330 -0
  71. package/dist/screens/site/SitePublishScreen.js.map +1 -0
  72. package/dist/screens/site/SitePullScreen.d.ts +14 -0
  73. package/dist/screens/site/SitePullScreen.d.ts.map +1 -0
  74. package/dist/screens/site/SitePullScreen.js +455 -0
  75. package/dist/screens/site/SitePullScreen.js.map +1 -0
  76. package/dist/screens/site/SiteValidateScreen.d.ts +12 -0
  77. package/dist/screens/site/SiteValidateScreen.d.ts.map +1 -0
  78. package/dist/screens/site/SiteValidateScreen.js +201 -0
  79. package/dist/screens/site/SiteValidateScreen.js.map +1 -0
  80. package/dist/types/site.d.ts +348 -0
  81. package/dist/types/site.d.ts.map +1 -0
  82. package/dist/types/site.js +6 -0
  83. package/dist/types/site.js.map +1 -0
  84. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-validator.js","sourceRoot":"","sources":["../../../src/lib/site/page-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Website Project Loader
3
+ * Loads project config and pages/*.json files
4
+ * Supports both new .oaysus/ metadata and legacy oaysus.website.json
5
+ */
6
+ import type { WebsiteConfig, PageDefinition, LoadedProject } from '../../types/site.js';
7
+ /**
8
+ * Find the website project root by looking for .oaysus/ or oaysus.website.json
9
+ * Uses the metadata module's findProjectRoot which handles both cases
10
+ */
11
+ export declare function findProjectRoot(startPath?: string): Promise<string | null>;
12
+ /**
13
+ * Load and validate the website configuration
14
+ * Checks .oaysus/config.json first, falls back to legacy oaysus.website.json
15
+ */
16
+ export declare function loadWebsiteConfig(projectPath: string): Promise<{
17
+ config: WebsiteConfig | null;
18
+ error: string | null;
19
+ }>;
20
+ /**
21
+ * Load and validate a single page definition
22
+ */
23
+ export declare function loadPageDefinition(filePath: string): Promise<{
24
+ definition: PageDefinition | null;
25
+ error: string | null;
26
+ }>;
27
+ /**
28
+ * Discover all page files in the pages directory
29
+ */
30
+ export declare function discoverPageFiles(projectPath: string): Promise<string[]>;
31
+ /**
32
+ * Load an entire website project
33
+ */
34
+ export declare function loadProject(projectPath?: string): Promise<LoadedProject>;
35
+ /**
36
+ * Load a single page by file path or slug
37
+ */
38
+ export declare function loadSinglePage(projectPath: string, identifier: string): Promise<{
39
+ page: {
40
+ file: string;
41
+ definition: PageDefinition;
42
+ } | null;
43
+ error: string | null;
44
+ }>;
45
+ //# sourceMappingURL=project-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/site/project-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAwE7B;;;GAGG;AACH,wBAAsB,eAAe,CAAC,SAAS,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE/F;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC,CAqDD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC,CAuBD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAa9E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2E9E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IACT,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC,CA0CD"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Website Project Loader
3
+ * Loads project config and pages/*.json files
4
+ * Supports both new .oaysus/ metadata and legacy oaysus.website.json
5
+ */
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { glob } from 'glob';
9
+ import { z } from 'zod';
10
+ import { loadConfig as loadOaysusConfig, findProjectRoot as findOaysusProjectRoot, getWebsiteId, } from './metadata.js';
11
+ // Zod Schemas for validation
12
+ const ComponentInstanceSchema = z.object({
13
+ type: z.string().min(1, 'Component type is required'),
14
+ id: z.string().optional(),
15
+ props: z.record(z.string(), z.unknown()).default({}),
16
+ settings: z.record(z.string(), z.unknown()).optional(),
17
+ // Shared component fields
18
+ shared: z.boolean().optional(),
19
+ sharedName: z.string().optional(),
20
+ globalId: z.string().optional(),
21
+ isGlobal: z.boolean().optional(),
22
+ });
23
+ const SEOSettingsSchema = z.object({
24
+ metaTitle: z.string().optional(),
25
+ metaDescription: z.string().optional(),
26
+ ogTitle: z.string().optional(),
27
+ ogDescription: z.string().optional(),
28
+ ogImage: z.string().optional(),
29
+ noIndex: z.boolean().optional(),
30
+ noFollow: z.boolean().optional(),
31
+ });
32
+ const LayoutSettingsSchema = z.object({
33
+ maxWidth: z.enum(['full', 'container', 'narrow']).optional(),
34
+ padding: z.enum(['none', 'small', 'medium', 'large']).optional(),
35
+ });
36
+ const ScriptSettingsSchema = z.object({
37
+ headScripts: z.array(z.string()).optional(),
38
+ bodyScripts: z.array(z.string()).optional(),
39
+ });
40
+ const PageSettingsSchema = z.object({
41
+ seo: SEOSettingsSchema.optional(),
42
+ layout: LayoutSettingsSchema.optional(),
43
+ scripts: ScriptSettingsSchema.optional(),
44
+ });
45
+ const PageDefinitionSchema = z.object({
46
+ slug: z.string().regex(/^\//, 'Slug must start with /'),
47
+ title: z.string().min(1, 'Title is required'),
48
+ description: z.string().optional(),
49
+ isHomePage: z.boolean().optional(),
50
+ components: z.array(ComponentInstanceSchema).default([]),
51
+ settings: PageSettingsSchema.optional(),
52
+ });
53
+ const WebsiteConfigSchema = z.object({
54
+ websiteId: z.string().optional(),
55
+ themePacks: z.array(z.string()).optional(),
56
+ });
57
+ /**
58
+ * Check if a file exists
59
+ */
60
+ async function fileExists(filePath) {
61
+ try {
62
+ await fs.access(filePath);
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ /**
70
+ * Find the website project root by looking for .oaysus/ or oaysus.website.json
71
+ * Uses the metadata module's findProjectRoot which handles both cases
72
+ */
73
+ export async function findProjectRoot(startPath = process.cwd()) {
74
+ return findOaysusProjectRoot(startPath);
75
+ }
76
+ /**
77
+ * Load and validate the website configuration
78
+ * Checks .oaysus/config.json first, falls back to legacy oaysus.website.json
79
+ */
80
+ export async function loadWebsiteConfig(projectPath) {
81
+ // Try new .oaysus/config.json first
82
+ const oaysusConfig = await loadOaysusConfig(projectPath);
83
+ if (oaysusConfig) {
84
+ return {
85
+ config: {
86
+ websiteId: oaysusConfig.websiteId,
87
+ },
88
+ error: null,
89
+ };
90
+ }
91
+ // Fall back to legacy oaysus.website.json
92
+ const legacyPath = path.join(projectPath, 'oaysus.website.json');
93
+ if (!await fileExists(legacyPath)) {
94
+ // Check if we can get websiteId from credentials
95
+ const websiteId = await getWebsiteId(projectPath);
96
+ if (websiteId) {
97
+ return {
98
+ config: { websiteId },
99
+ error: null,
100
+ };
101
+ }
102
+ return {
103
+ config: null,
104
+ error: 'No project configuration found. Run "oaysus site init" to set up this project.',
105
+ };
106
+ }
107
+ try {
108
+ const content = await fs.readFile(legacyPath, 'utf-8');
109
+ const parsed = JSON.parse(content);
110
+ const validation = WebsiteConfigSchema.safeParse(parsed);
111
+ if (!validation.success) {
112
+ const issues = validation.error.issues
113
+ .map(i => `${i.path.join('.')}: ${i.message}`)
114
+ .join(', ');
115
+ return {
116
+ config: null,
117
+ error: `Invalid oaysus.website.json: ${issues}`,
118
+ };
119
+ }
120
+ return { config: validation.data, error: null };
121
+ }
122
+ catch (err) {
123
+ return {
124
+ config: null,
125
+ error: `Failed to parse oaysus.website.json: ${err instanceof Error ? err.message : 'Unknown error'}`,
126
+ };
127
+ }
128
+ }
129
+ /**
130
+ * Load and validate a single page definition
131
+ */
132
+ export async function loadPageDefinition(filePath) {
133
+ try {
134
+ const content = await fs.readFile(filePath, 'utf-8');
135
+ const parsed = JSON.parse(content);
136
+ const validation = PageDefinitionSchema.safeParse(parsed);
137
+ if (!validation.success) {
138
+ const issues = validation.error.issues
139
+ .map(i => `${i.path.join('.')}: ${i.message}`)
140
+ .join(', ');
141
+ return {
142
+ definition: null,
143
+ error: `Invalid page definition: ${issues}`,
144
+ };
145
+ }
146
+ return { definition: validation.data, error: null };
147
+ }
148
+ catch (err) {
149
+ return {
150
+ definition: null,
151
+ error: `Failed to parse page file: ${err instanceof Error ? err.message : 'Unknown error'}`,
152
+ };
153
+ }
154
+ }
155
+ /**
156
+ * Discover all page files in the pages directory
157
+ */
158
+ export async function discoverPageFiles(projectPath) {
159
+ const pagesDir = path.join(projectPath, 'pages');
160
+ if (!await fileExists(pagesDir)) {
161
+ return [];
162
+ }
163
+ const pageFiles = await glob('**/*.json', {
164
+ cwd: pagesDir,
165
+ ignore: ['node_modules/**'],
166
+ });
167
+ return pageFiles.map(f => path.join(pagesDir, f));
168
+ }
169
+ /**
170
+ * Load an entire website project
171
+ */
172
+ export async function loadProject(projectPath) {
173
+ const errors = [];
174
+ const pages = [];
175
+ // Find project root if not specified
176
+ const resolvedPath = projectPath
177
+ ? path.resolve(projectPath)
178
+ : await findProjectRoot();
179
+ if (!resolvedPath) {
180
+ return {
181
+ projectPath: projectPath || process.cwd(),
182
+ config: {},
183
+ pages: [],
184
+ errors: ['Could not find oaysus.website.json. Run "oaysus site init" to create a website project.'],
185
+ };
186
+ }
187
+ // Load website config
188
+ const { config, error: configError } = await loadWebsiteConfig(resolvedPath);
189
+ if (configError) {
190
+ errors.push(configError);
191
+ }
192
+ // Discover and load pages
193
+ const pageFiles = await discoverPageFiles(resolvedPath);
194
+ if (pageFiles.length === 0) {
195
+ errors.push('No page files found in pages/ directory');
196
+ }
197
+ for (const pageFile of pageFiles) {
198
+ const { definition, error: pageError } = await loadPageDefinition(pageFile);
199
+ if (pageError) {
200
+ errors.push(`${path.relative(resolvedPath, pageFile)}: ${pageError}`);
201
+ continue;
202
+ }
203
+ if (definition) {
204
+ pages.push({
205
+ file: path.relative(resolvedPath, pageFile),
206
+ definition,
207
+ });
208
+ }
209
+ }
210
+ // Check for duplicate slugs
211
+ const slugs = new Map();
212
+ for (const page of pages) {
213
+ const slug = page.definition.slug;
214
+ if (!slugs.has(slug)) {
215
+ slugs.set(slug, []);
216
+ }
217
+ slugs.get(slug).push(page.file);
218
+ }
219
+ for (const [slug, files] of slugs) {
220
+ if (files.length > 1) {
221
+ errors.push(`Duplicate slug "${slug}" found in: ${files.join(', ')}`);
222
+ }
223
+ }
224
+ // Check for multiple home pages
225
+ const homePages = pages.filter(p => p.definition.isHomePage);
226
+ if (homePages.length > 1) {
227
+ errors.push(`Multiple home pages found: ${homePages.map(p => p.file).join(', ')}`);
228
+ }
229
+ return {
230
+ projectPath: resolvedPath,
231
+ config: config || {},
232
+ pages,
233
+ errors,
234
+ };
235
+ }
236
+ /**
237
+ * Load a single page by file path or slug
238
+ */
239
+ export async function loadSinglePage(projectPath, identifier) {
240
+ // Check if identifier is a file path
241
+ if (identifier.endsWith('.json')) {
242
+ const filePath = path.isAbsolute(identifier)
243
+ ? identifier
244
+ : path.join(projectPath, identifier);
245
+ if (!await fileExists(filePath)) {
246
+ return { page: null, error: `Page file not found: ${identifier}` };
247
+ }
248
+ const { definition, error } = await loadPageDefinition(filePath);
249
+ if (error) {
250
+ return { page: null, error };
251
+ }
252
+ return {
253
+ page: {
254
+ file: path.relative(projectPath, filePath),
255
+ definition: definition,
256
+ },
257
+ error: null,
258
+ };
259
+ }
260
+ // Otherwise, treat as a slug and search for matching page
261
+ const pageFiles = await discoverPageFiles(projectPath);
262
+ for (const pageFile of pageFiles) {
263
+ const { definition } = await loadPageDefinition(pageFile);
264
+ if (definition && definition.slug === identifier) {
265
+ return {
266
+ page: {
267
+ file: path.relative(projectPath, pageFile),
268
+ definition,
269
+ },
270
+ error: null,
271
+ };
272
+ }
273
+ }
274
+ return { page: null, error: `No page found with slug: ${identifier}` };
275
+ }
276
+ //# sourceMappingURL=project-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-loader.js","sourceRoot":"","sources":["../../../src/lib/site/project-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Shared Component Resolver
3
+ * Handles resolution of shared/global components during CLI publish workflow.
4
+ *
5
+ * Components can be marked as shared in two ways:
6
+ * 1. Explicit `shared: true` in the page JSON component definition
7
+ * 2. `defaultShared: true` in the component schema (auto-shared)
8
+ *
9
+ * This module:
10
+ * - Determines if components should be shared
11
+ * - Extracts shared components from pages
12
+ * - Calls the API to ensure global components exist
13
+ * - Transforms pages to use global references
14
+ */
15
+ import type { ComponentInstance, PageDefinition, ComponentCatalog } from '../../types/site.js';
16
+ /**
17
+ * Shared component info extracted from pages
18
+ */
19
+ export interface SharedComponentInfo {
20
+ /** Component type */
21
+ type: string;
22
+ /** Props from first occurrence */
23
+ props: Record<string, unknown>;
24
+ /** Optional name for the shared component */
25
+ name?: string;
26
+ }
27
+ /**
28
+ * Result of ensuring global components exist
29
+ */
30
+ export interface EnsureGlobalResult {
31
+ /** Whether the operation succeeded */
32
+ success: boolean;
33
+ /** Map of component type to globalId */
34
+ typeToGlobalId: Map<string, string>;
35
+ /** Components that were created (not existing) */
36
+ created: string[];
37
+ /** Components that already existed */
38
+ existing: string[];
39
+ /** Error message if failed */
40
+ error?: string;
41
+ }
42
+ /**
43
+ * Determine if a component should be shared.
44
+ *
45
+ * Priority:
46
+ * 1. Explicit `shared: true` in component → shared
47
+ * 2. Explicit `shared: false` in component → not shared
48
+ * 3. `defaultShared: true` in catalog/schema → shared
49
+ * 4. Otherwise → not shared
50
+ */
51
+ export declare function shouldBeShared(component: ComponentInstance, catalog: ComponentCatalog | null): boolean;
52
+ /**
53
+ * Extract all shared components from pages.
54
+ * Returns unique types with props from first occurrence.
55
+ */
56
+ export declare function extractSharedComponents(pages: PageDefinition[], catalog: ComponentCatalog | null): Map<string, SharedComponentInfo>;
57
+ /**
58
+ * Call API to ensure global components exist.
59
+ * Creates new globals or returns existing ones.
60
+ */
61
+ export declare function ensureGlobalComponents(websiteId: string, components: Map<string, SharedComponentInfo>, jwt: string): Promise<EnsureGlobalResult>;
62
+ /**
63
+ * Transform a page to use global references for shared components.
64
+ * Replaces inline component definitions with global references.
65
+ */
66
+ export declare function applyGlobalReferences(page: PageDefinition, typeToGlobalId: Map<string, string>, catalog: ComponentCatalog | null): PageDefinition;
67
+ /**
68
+ * Process all pages for shared components.
69
+ * Main entry point for the publish workflow.
70
+ */
71
+ export declare function resolveSharedComponents(options: {
72
+ pages: Array<{
73
+ file: string;
74
+ definition: PageDefinition;
75
+ }>;
76
+ websiteId: string;
77
+ jwt: string;
78
+ catalog: ComponentCatalog | null;
79
+ }): Promise<{
80
+ success: boolean;
81
+ pages: Array<{
82
+ file: string;
83
+ definition: PageDefinition;
84
+ }>;
85
+ created: string[];
86
+ existing: string[];
87
+ error?: string;
88
+ }>;
89
+ //# sourceMappingURL=shared-component-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-component-resolver.d.ts","sourceRoot":"","sources":["../../../src/lib/site/shared-component-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI/F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kDAAkD;IAClD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,OAAO,CAWT;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAkClC;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC5C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,kBAAkB,CAAC,CAqF7B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,cAAc,CAyBhB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAClC,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA8CD"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Shared Component Resolver
3
+ * Handles resolution of shared/global components during CLI publish workflow.
4
+ *
5
+ * Components can be marked as shared in two ways:
6
+ * 1. Explicit `shared: true` in the page JSON component definition
7
+ * 2. `defaultShared: true` in the component schema (auto-shared)
8
+ *
9
+ * This module:
10
+ * - Determines if components should be shared
11
+ * - Extracts shared components from pages
12
+ * - Calls the API to ensure global components exist
13
+ * - Transforms pages to use global references
14
+ */
15
+ import axios from 'axios';
16
+ import { isDefaultShared } from './metadata.js';
17
+ import { SSO_BASE_URL, debug } from '../shared/config.js';
18
+ /**
19
+ * Determine if a component should be shared.
20
+ *
21
+ * Priority:
22
+ * 1. Explicit `shared: true` in component → shared
23
+ * 2. Explicit `shared: false` in component → not shared
24
+ * 3. `defaultShared: true` in catalog/schema → shared
25
+ * 4. Otherwise → not shared
26
+ */
27
+ export function shouldBeShared(component, catalog) {
28
+ // Explicit shared flag takes precedence
29
+ if (component.shared === true)
30
+ return true;
31
+ if (component.shared === false)
32
+ return false;
33
+ // Fall back to catalog defaultShared
34
+ if (catalog) {
35
+ return isDefaultShared(catalog, component.type);
36
+ }
37
+ return false;
38
+ }
39
+ /**
40
+ * Extract all shared components from pages.
41
+ * Returns unique types with props from first occurrence.
42
+ */
43
+ export function extractSharedComponents(pages, catalog) {
44
+ const sharedComponents = new Map();
45
+ const conflictingProps = new Map();
46
+ for (const page of pages) {
47
+ for (const component of page.components) {
48
+ if (!shouldBeShared(component, catalog)) {
49
+ continue;
50
+ }
51
+ const type = component.type;
52
+ if (sharedComponents.has(type)) {
53
+ // Check for conflicting props (for warning)
54
+ const existing = sharedComponents.get(type);
55
+ const existingPropsJson = JSON.stringify(existing.props);
56
+ const currentPropsJson = JSON.stringify(component.props);
57
+ if (existingPropsJson !== currentPropsJson && !conflictingProps.has(type)) {
58
+ conflictingProps.set(type, true);
59
+ debug(`[SharedResolver] Warning: Conflicting props for shared component "${type}". Using props from first occurrence.`);
60
+ }
61
+ }
62
+ else {
63
+ // First occurrence - use these props
64
+ sharedComponents.set(type, {
65
+ type,
66
+ props: component.props,
67
+ name: component.sharedName,
68
+ });
69
+ }
70
+ }
71
+ }
72
+ return sharedComponents;
73
+ }
74
+ /**
75
+ * Call API to ensure global components exist.
76
+ * Creates new globals or returns existing ones.
77
+ */
78
+ export async function ensureGlobalComponents(websiteId, components, jwt) {
79
+ if (components.size === 0) {
80
+ return {
81
+ success: true,
82
+ typeToGlobalId: new Map(),
83
+ created: [],
84
+ existing: [],
85
+ };
86
+ }
87
+ debug(`[SharedResolver] Ensuring ${components.size} global components exist`);
88
+ try {
89
+ const requestBody = {
90
+ websiteId,
91
+ components: Array.from(components.values()).map(comp => ({
92
+ componentType: comp.type,
93
+ props: comp.props,
94
+ name: comp.name || comp.type,
95
+ })),
96
+ };
97
+ const response = await axios.post(`${SSO_BASE_URL}/hosting/page-builder/globals/ensure-batch`, requestBody, {
98
+ headers: { Authorization: `Bearer ${jwt}` },
99
+ });
100
+ if (!response.data.success) {
101
+ return {
102
+ success: false,
103
+ typeToGlobalId: new Map(),
104
+ created: [],
105
+ existing: [],
106
+ error: response.data.error || 'Failed to ensure global components',
107
+ };
108
+ }
109
+ // Build result maps
110
+ const typeToGlobalId = new Map();
111
+ const created = [];
112
+ const existing = [];
113
+ for (const [type, result] of Object.entries(response.data.results)) {
114
+ const resultData = result;
115
+ typeToGlobalId.set(type, resultData.globalId);
116
+ if (resultData.created) {
117
+ created.push(type);
118
+ debug(`[SharedResolver] Created global component: ${type} → ${resultData.globalId}`);
119
+ }
120
+ else {
121
+ existing.push(type);
122
+ debug(`[SharedResolver] Using existing global: ${type} → ${resultData.globalId}`);
123
+ }
124
+ }
125
+ return {
126
+ success: true,
127
+ typeToGlobalId,
128
+ created,
129
+ existing,
130
+ };
131
+ }
132
+ catch (error) {
133
+ let errorMessage = 'Failed to ensure global components';
134
+ if (axios.isAxiosError(error)) {
135
+ if (error.response?.status === 401) {
136
+ errorMessage = 'Authentication failed. Please run "oaysus login"';
137
+ }
138
+ else {
139
+ errorMessage = error.response?.data?.error || error.message;
140
+ }
141
+ }
142
+ else if (error instanceof Error) {
143
+ errorMessage = error.message;
144
+ }
145
+ return {
146
+ success: false,
147
+ typeToGlobalId: new Map(),
148
+ created: [],
149
+ existing: [],
150
+ error: errorMessage,
151
+ };
152
+ }
153
+ }
154
+ /**
155
+ * Transform a page to use global references for shared components.
156
+ * Replaces inline component definitions with global references.
157
+ */
158
+ export function applyGlobalReferences(page, typeToGlobalId, catalog) {
159
+ const transformedComponents = page.components.map(component => {
160
+ // Check if this component should be shared and has a global reference
161
+ if (!shouldBeShared(component, catalog)) {
162
+ return component;
163
+ }
164
+ const globalId = typeToGlobalId.get(component.type);
165
+ if (!globalId) {
166
+ return component;
167
+ }
168
+ // Transform to use global reference
169
+ return {
170
+ ...component,
171
+ globalId,
172
+ isGlobal: true,
173
+ // Keep props for local override capability (server will use global props)
174
+ };
175
+ });
176
+ return {
177
+ ...page,
178
+ components: transformedComponents,
179
+ };
180
+ }
181
+ /**
182
+ * Process all pages for shared components.
183
+ * Main entry point for the publish workflow.
184
+ */
185
+ export async function resolveSharedComponents(options) {
186
+ const { pages, websiteId, jwt, catalog } = options;
187
+ // Extract shared components from all pages
188
+ const sharedComponents = extractSharedComponents(pages.map(p => p.definition), catalog);
189
+ if (sharedComponents.size === 0) {
190
+ debug('[SharedResolver] No shared components to resolve');
191
+ return {
192
+ success: true,
193
+ pages,
194
+ created: [],
195
+ existing: [],
196
+ };
197
+ }
198
+ debug(`[SharedResolver] Found ${sharedComponents.size} shared component types`);
199
+ // Ensure global components exist on server
200
+ const ensureResult = await ensureGlobalComponents(websiteId, sharedComponents, jwt);
201
+ if (!ensureResult.success) {
202
+ return {
203
+ success: false,
204
+ pages,
205
+ created: [],
206
+ existing: [],
207
+ error: ensureResult.error,
208
+ };
209
+ }
210
+ // Transform pages to use global references
211
+ const transformedPages = pages.map(page => ({
212
+ file: page.file,
213
+ definition: applyGlobalReferences(page.definition, ensureResult.typeToGlobalId, catalog),
214
+ }));
215
+ return {
216
+ success: true,
217
+ pages: transformedPages,
218
+ created: ensureResult.created,
219
+ existing: ensureResult.existing,
220
+ };
221
+ }
222
+ //# sourceMappingURL=shared-component-resolver.js.map