@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.
- 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 @@
|
|
|
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
|