gazetta 0.0.1

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 (108) hide show
  1. package/admin-dist/assets/index-CWxPBgs-.css +1 -0
  2. package/admin-dist/assets/index-o6Ikobnh.js +1938 -0
  3. package/admin-dist/index.html +14 -0
  4. package/dist/admin-api/index.d.ts +13 -0
  5. package/dist/admin-api/index.d.ts.map +1 -0
  6. package/dist/admin-api/index.js +27 -0
  7. package/dist/admin-api/index.js.map +1 -0
  8. package/dist/admin-api/middleware/auth.d.ts +2 -0
  9. package/dist/admin-api/middleware/auth.d.ts.map +1 -0
  10. package/dist/admin-api/middleware/auth.js +14 -0
  11. package/dist/admin-api/middleware/auth.js.map +1 -0
  12. package/dist/admin-api/routes/components.d.ts +4 -0
  13. package/dist/admin-api/routes/components.d.ts.map +1 -0
  14. package/dist/admin-api/routes/components.js +49 -0
  15. package/dist/admin-api/routes/components.js.map +1 -0
  16. package/dist/admin-api/routes/fragments.d.ts +4 -0
  17. package/dist/admin-api/routes/fragments.d.ts.map +1 -0
  18. package/dist/admin-api/routes/fragments.js +71 -0
  19. package/dist/admin-api/routes/fragments.js.map +1 -0
  20. package/dist/admin-api/routes/pages.d.ts +4 -0
  21. package/dist/admin-api/routes/pages.d.ts.map +1 -0
  22. package/dist/admin-api/routes/pages.js +83 -0
  23. package/dist/admin-api/routes/pages.js.map +1 -0
  24. package/dist/admin-api/routes/preview.d.ts +4 -0
  25. package/dist/admin-api/routes/preview.d.ts.map +1 -0
  26. package/dist/admin-api/routes/preview.js +59 -0
  27. package/dist/admin-api/routes/preview.js.map +1 -0
  28. package/dist/admin-api/routes/publish.d.ts +4 -0
  29. package/dist/admin-api/routes/publish.d.ts.map +1 -0
  30. package/dist/admin-api/routes/publish.js +119 -0
  31. package/dist/admin-api/routes/publish.js.map +1 -0
  32. package/dist/admin-api/routes/site.d.ts +4 -0
  33. package/dist/admin-api/routes/site.d.ts.map +1 -0
  34. package/dist/admin-api/routes/site.js +11 -0
  35. package/dist/admin-api/routes/site.js.map +1 -0
  36. package/dist/admin-api/routes/templates.d.ts +4 -0
  37. package/dist/admin-api/routes/templates.d.ts.map +1 -0
  38. package/dist/admin-api/routes/templates.js +29 -0
  39. package/dist/admin-api/routes/templates.js.map +1 -0
  40. package/dist/app.d.ts +4 -0
  41. package/dist/app.d.ts.map +1 -0
  42. package/dist/app.js +17 -0
  43. package/dist/app.js.map +1 -0
  44. package/dist/cli/index.d.ts +3 -0
  45. package/dist/cli/index.d.ts.map +1 -0
  46. package/dist/cli/index.js +404 -0
  47. package/dist/cli/index.js.map +1 -0
  48. package/dist/editor/mount.d.ts +3 -0
  49. package/dist/editor/mount.d.ts.map +1 -0
  50. package/dist/editor/mount.js +74 -0
  51. package/dist/editor/mount.js.map +1 -0
  52. package/dist/index.d.ts +18 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +19 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/manifest.d.ts +6 -0
  57. package/dist/manifest.d.ts.map +1 -0
  58. package/dist/manifest.js +64 -0
  59. package/dist/manifest.js.map +1 -0
  60. package/dist/providers/azure-blob.d.ts +9 -0
  61. package/dist/providers/azure-blob.d.ts.map +1 -0
  62. package/dist/providers/azure-blob.js +91 -0
  63. package/dist/providers/azure-blob.js.map +1 -0
  64. package/dist/providers/filesystem.d.ts +3 -0
  65. package/dist/providers/filesystem.d.ts.map +1 -0
  66. package/dist/providers/filesystem.js +71 -0
  67. package/dist/providers/filesystem.js.map +1 -0
  68. package/dist/providers/s3.d.ts +13 -0
  69. package/dist/providers/s3.d.ts.map +1 -0
  70. package/dist/providers/s3.js +101 -0
  71. package/dist/providers/s3.js.map +1 -0
  72. package/dist/publish-rendered.d.ts +43 -0
  73. package/dist/publish-rendered.d.ts.map +1 -0
  74. package/dist/publish-rendered.js +161 -0
  75. package/dist/publish-rendered.js.map +1 -0
  76. package/dist/publish.d.ts +26 -0
  77. package/dist/publish.d.ts.map +1 -0
  78. package/dist/publish.js +115 -0
  79. package/dist/publish.js.map +1 -0
  80. package/dist/renderer.d.ts +4 -0
  81. package/dist/renderer.d.ts.map +1 -0
  82. package/dist/renderer.js +47 -0
  83. package/dist/renderer.js.map +1 -0
  84. package/dist/resolver.d.ts +12 -0
  85. package/dist/resolver.d.ts.map +1 -0
  86. package/dist/resolver.js +67 -0
  87. package/dist/resolver.js.map +1 -0
  88. package/dist/scope.d.ts +13 -0
  89. package/dist/scope.d.ts.map +1 -0
  90. package/dist/scope.js +31 -0
  91. package/dist/scope.js.map +1 -0
  92. package/dist/site-loader.d.ts +14 -0
  93. package/dist/site-loader.d.ts.map +1 -0
  94. package/dist/site-loader.js +67 -0
  95. package/dist/site-loader.js.map +1 -0
  96. package/dist/targets.d.ts +4 -0
  97. package/dist/targets.d.ts.map +1 -0
  98. package/dist/targets.js +68 -0
  99. package/dist/targets.js.map +1 -0
  100. package/dist/template-loader.d.ts +11 -0
  101. package/dist/template-loader.d.ts.map +1 -0
  102. package/dist/template-loader.js +51 -0
  103. package/dist/template-loader.js.map +1 -0
  104. package/dist/types.d.ts +99 -0
  105. package/dist/types.d.ts.map +1 -0
  106. package/dist/types.js +2 -0
  107. package/dist/types.js.map +1 -0
  108. package/package.json +83 -0
@@ -0,0 +1,29 @@
1
+ import { Hono } from 'hono';
2
+ import { join } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { loadTemplate } from '../../template-loader.js';
5
+ export function templateRoutes(siteDir, storage) {
6
+ const app = new Hono();
7
+ app.get('/api/templates', async (c) => {
8
+ const templatesDir = join(siteDir, 'templates');
9
+ if (!await storage.exists(templatesDir))
10
+ return c.json([]);
11
+ const entries = await storage.readDir(templatesDir);
12
+ const templates = entries.filter(e => e.isDirectory).map(e => ({ name: e.name }));
13
+ return c.json(templates);
14
+ });
15
+ app.get('/api/templates/:name/schema', async (c) => {
16
+ const name = c.req.param('name');
17
+ const templatesDir = join(siteDir, 'templates');
18
+ try {
19
+ const loaded = await loadTemplate(storage, templatesDir, name);
20
+ const jsonSchema = z.toJSONSchema(loaded.schema);
21
+ return c.json(jsonSchema);
22
+ }
23
+ catch (err) {
24
+ return c.json({ error: `Failed to load schema for template "${name}": ${err.message}` }, 500);
25
+ }
26
+ });
27
+ return app;
28
+ }
29
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/admin-api/routes/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAwB;IACtE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IAEtB,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAC/C,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAE1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACjF,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAE/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;YAC9D,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAmB,CAAC,CAAA;YAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uCAAuC,IAAI,MAAO,GAAa,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAC1G,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
package/dist/app.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { StorageProvider } from './types.js';
3
+ export declare function createApp(siteDir: string, storage: StorageProvider): Promise<Hono>;
4
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAKjD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAaxF"}
package/dist/app.js ADDED
@@ -0,0 +1,17 @@
1
+ import { Hono } from 'hono';
2
+ import { loadSite } from './site-loader.js';
3
+ import { resolvePage } from './resolver.js';
4
+ import { renderPage } from './renderer.js';
5
+ export async function createApp(siteDir, storage) {
6
+ const app = new Hono();
7
+ const site = await loadSite(siteDir, storage);
8
+ for (const [pageName, page] of site.pages) {
9
+ app.get(page.route, async (c) => {
10
+ const resolved = await resolvePage(pageName, site);
11
+ const html = await renderPage(resolved, page.metadata, c.req.param());
12
+ return c.html(html);
13
+ });
14
+ }
15
+ return app;
16
+ }
17
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,OAAwB;IACvE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAE7C,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;YACrE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,404 @@
1
+ #!/usr/bin/env node
2
+ import { resolve, join } from 'node:path';
3
+ import { watch, existsSync, readFileSync } from 'node:fs';
4
+ import { spawn } from 'node:child_process';
5
+ import { serve } from '@hono/node-server';
6
+ import { serveStatic } from '@hono/node-server/serve-static';
7
+ import { Hono } from 'hono';
8
+ import { streamSSE } from 'hono/streaming';
9
+ import yaml from 'js-yaml';
10
+ import { loadSite } from '../site-loader.js';
11
+ import { resolvePage } from '../resolver.js';
12
+ import { renderPage } from '../renderer.js';
13
+ import { createFilesystemProvider } from '../providers/filesystem.js';
14
+ import { invalidateTemplate, invalidateAllTemplates } from '../template-loader.js';
15
+ import { createAdminApp } from '../admin-api/index.js';
16
+ const args = process.argv.slice(2);
17
+ const command = args[0];
18
+ function printHelp() {
19
+ console.log(`
20
+ gazetta - Stateless CMS for composable websites
21
+
22
+ Usage:
23
+ gazetta init [dir] Create a new site
24
+ gazetta dev [site-dir] Start dev server + CMS at /admin
25
+ gazetta help Show this help message
26
+
27
+ Options:
28
+ --port, -p <port> Server port (default: 3000)
29
+
30
+ Examples:
31
+ gazetta init my-site # scaffold a new site
32
+ gazetta dev # dev server + CMS
33
+ gazetta dev ./my-site # specific site directory
34
+ gazetta dev --port 8080 # custom port
35
+ `);
36
+ }
37
+ function parseArgs(input) {
38
+ let siteDir = '.';
39
+ let port;
40
+ for (let i = 0; i < input.length; i++) {
41
+ if (input[i] === '--port' || input[i] === '-p') {
42
+ port = parseInt(input[++i], 10);
43
+ }
44
+ else if (!input[i].startsWith('-')) {
45
+ siteDir = input[i];
46
+ }
47
+ }
48
+ return { siteDir: resolve(siteDir), port };
49
+ }
50
+ async function runInit(dir) {
51
+ const { writeFile, mkdir } = await import('node:fs/promises');
52
+ const target = resolve(dir);
53
+ if (existsSync(join(target, 'site.yaml'))) {
54
+ console.error(`\n Error: site.yaml already exists in ${target}\n`);
55
+ process.exit(1);
56
+ }
57
+ const name = target.split('/').pop() ?? 'my-site';
58
+ const files = {
59
+ 'site.yaml': `name: ${name}\nversion: 1.0.0\n`,
60
+ 'templates/page-layout/index.ts': `import { z } from 'zod'
61
+ import type { TemplateFunction } from 'gazetta'
62
+
63
+ export const schema = z.object({})
64
+
65
+ const template: TemplateFunction = ({ children = [] }) => ({
66
+ html: \`<main>\${children.map(c => c.html).join('\\n')}</main>\`,
67
+ css: \`main { max-width: 800px; margin: 0 auto; padding: 2rem; font-family: system-ui, sans-serif; }
68
+ \${children.map(c => c.css).join('\\n')}\`,
69
+ js: children.map(c => c.js).filter(Boolean).join('\\n'),
70
+ })
71
+
72
+ export default template
73
+ `,
74
+ 'templates/hero/index.ts': `import { z } from 'zod'
75
+ import type { TemplateFunction } from 'gazetta'
76
+
77
+ export const schema = z.object({
78
+ title: z.string().describe('Page title'),
79
+ subtitle: z.string().optional().describe('Subtitle text'),
80
+ })
81
+
82
+ const template: TemplateFunction = ({ content = {} }) => ({
83
+ html: \`<section class="hero">
84
+ <h1>\${content.title ?? ''}</h1>
85
+ <p>\${content.subtitle ?? ''}</p>
86
+ </section>\`,
87
+ css: \`.hero { text-align: center; padding: 4rem 0; }
88
+ .hero h1 { font-size: 2.5rem; margin-bottom: 0.5rem; }
89
+ .hero p { color: #666; font-size: 1.25rem; }\`,
90
+ js: '',
91
+ })
92
+
93
+ export default template
94
+ `,
95
+ 'templates/text-block/index.ts': `import { z } from 'zod'
96
+ import type { TemplateFunction } from 'gazetta'
97
+
98
+ export const schema = z.object({
99
+ body: z.string().describe('Text content (HTML allowed)'),
100
+ })
101
+
102
+ const template: TemplateFunction = ({ content = {} }) => ({
103
+ html: \`<div class="text-block">\${content.body ?? ''}</div>\`,
104
+ css: \`.text-block { line-height: 1.6; margin: 2rem 0; }\`,
105
+ js: '',
106
+ })
107
+
108
+ export default template
109
+ `,
110
+ 'pages/home/page.yaml': `route: /
111
+ template: page-layout
112
+ metadata:
113
+ title: ${name}
114
+ components:
115
+ - hero
116
+ - intro
117
+ `,
118
+ 'pages/home/hero/component.yaml': `template: hero
119
+ content:
120
+ title: Welcome to ${name}
121
+ subtitle: A site built with Gazetta
122
+ `,
123
+ 'pages/home/intro/component.yaml': `template: text-block
124
+ content:
125
+ body: "<p>Edit this content in the CMS at <a href='/admin'>/admin</a>.</p>"
126
+ `,
127
+ 'fragments/.gitkeep': '',
128
+ 'package.json': JSON.stringify({
129
+ name,
130
+ private: true,
131
+ type: 'module',
132
+ scripts: { dev: 'gazetta dev .' },
133
+ dependencies: { gazetta: '*' },
134
+ devDependencies: { tsx: '^4.21.0', zod: '^4.3.6' },
135
+ }, null, 2) + '\n',
136
+ };
137
+ for (const [path, content] of Object.entries(files)) {
138
+ const fullPath = join(target, path);
139
+ await mkdir(join(fullPath, '..'), { recursive: true });
140
+ await writeFile(fullPath, content);
141
+ }
142
+ console.log(`\n Created site in ${target}\n`);
143
+ console.log(` Next steps:`);
144
+ if (dir !== '.')
145
+ console.log(` cd ${dir}`);
146
+ console.log(` npm install`);
147
+ console.log(` npx gazetta dev`);
148
+ console.log();
149
+ }
150
+ async function runDev(siteDir, port) {
151
+ const storage = createFilesystemProvider();
152
+ console.log(`\n Loading site from ${siteDir}...`);
153
+ const site = await loadSite(siteDir, storage);
154
+ const app = new Hono();
155
+ // ---- Live reload (SSE) ----
156
+ let reloadId = 0;
157
+ const reloadListeners = new Set();
158
+ function notifyReload() { reloadId++; for (const l of reloadListeners)
159
+ l(); }
160
+ const RELOAD_SCRIPT = `<script>new EventSource('/__reload').onmessage = () => location.reload()</script>`;
161
+ app.get('/__reload', (c) => {
162
+ return streamSSE(c, async (stream) => {
163
+ let lastId = reloadId;
164
+ const check = async () => {
165
+ if (reloadId !== lastId) {
166
+ lastId = reloadId;
167
+ await stream.writeSSE({ data: 'reload', event: 'message' });
168
+ }
169
+ };
170
+ reloadListeners.add(check);
171
+ stream.onAbort(() => { reloadListeners.delete(check); });
172
+ while (true) {
173
+ await stream.sleep(500);
174
+ await check();
175
+ }
176
+ });
177
+ });
178
+ // ---- Site page routes ----
179
+ for (const [pageName, page] of site.pages) {
180
+ app.get(page.route, async (c) => {
181
+ try {
182
+ const freshSite = await loadSite(siteDir, storage);
183
+ const resolved = await resolvePage(pageName, freshSite);
184
+ const html = await renderPage(resolved, page.metadata, c.req.param());
185
+ return c.html(html.replace('</body>', `${RELOAD_SCRIPT}\n</body>`));
186
+ }
187
+ catch (err) {
188
+ return c.html(`<pre style="color:red;padding:2rem">${err.message}</pre>`, 500);
189
+ }
190
+ });
191
+ }
192
+ // ---- Detect mode: dev (monorepo with apps/admin-ui source) vs production (pre-built) ----
193
+ const cmsWebDir = findCmsDir();
194
+ const cmsStaticDir = findCmsStaticDir();
195
+ const isDevMode = cmsWebDir !== null;
196
+ if (isDevMode) {
197
+ // Dev mode: proxy API to subprocess, Vite middleware for HMR
198
+ await setupDevMode(app, siteDir, port, cmsWebDir);
199
+ }
200
+ else if (cmsStaticDir) {
201
+ // Production mode: inline CMS API + static files
202
+ await setupProductionMode(app, siteDir, storage, cmsStaticDir);
203
+ }
204
+ // ---- 404 ----
205
+ app.notFound((c) => {
206
+ const routes = [...site.pages.entries()].map(([n, p]) => ` ${p.route} → ${n}`).join('\n');
207
+ return c.html(`<pre style="padding:2rem">Page not found: ${c.req.path}\n\nAvailable:\n${routes}\n /admin → CMS editor</pre>`, 404);
208
+ });
209
+ // ---- Start server ----
210
+ let apiProc = null;
211
+ if (isDevMode) {
212
+ const apiPort = port + 100;
213
+ apiProc = spawn('npx', ['tsx', join(cmsWebDir, 'src/server/dev.ts'), siteDir], {
214
+ env: { ...process.env, API_PORT: String(apiPort) },
215
+ stdio: 'pipe',
216
+ });
217
+ apiProc.stderr?.on('data', (d) => {
218
+ const msg = d.toString().trim();
219
+ if (msg)
220
+ console.error(` [admin-api] ${msg}`);
221
+ });
222
+ }
223
+ const nodeServer = serve({ fetch: app.fetch, port }, async () => {
224
+ console.log(`\n Gazetta running at http://localhost:${port}\n`);
225
+ console.log(` Site: ${site.manifest.name}`);
226
+ console.log(` Pages:`);
227
+ for (const [name, page] of site.pages)
228
+ console.log(` ${page.route} → ${name}`);
229
+ console.log(` Fragments: ${[...site.fragments.keys()].join(', ') || '(none)'}`);
230
+ if (isDevMode && cmsWebDir) {
231
+ try {
232
+ const { createServer: createViteServer } = await import('vite');
233
+ const vite = await createViteServer({
234
+ configFile: join(cmsWebDir, 'vite.config.ts'),
235
+ root: cmsWebDir,
236
+ base: '/admin/',
237
+ server: {
238
+ middlewareMode: true,
239
+ hmr: { server: nodeServer },
240
+ },
241
+ });
242
+ const httpServer = nodeServer;
243
+ const originalListeners = httpServer.listeners('request').slice();
244
+ httpServer.removeAllListeners('request');
245
+ const honoHandler = (req, res) => {
246
+ for (const listener of originalListeners) {
247
+ listener(req, res);
248
+ }
249
+ };
250
+ httpServer.on('request', (req, res) => {
251
+ const url = req.url ?? '';
252
+ if (url.startsWith('/admin/api') || url.startsWith('/admin/preview')) {
253
+ honoHandler(req, res);
254
+ }
255
+ else if (url.startsWith('/admin') || url.startsWith('/@')) {
256
+ vite.middlewares(req, res, () => honoHandler(req, res));
257
+ }
258
+ else {
259
+ honoHandler(req, res);
260
+ }
261
+ });
262
+ console.log(` CMS: http://localhost:${port}/admin (dev mode + HMR)`);
263
+ }
264
+ catch (err) {
265
+ console.warn(` Warning: CMS UI failed to start: ${err.message}`);
266
+ }
267
+ }
268
+ else if (cmsStaticDir) {
269
+ console.log(` CMS: http://localhost:${port}/admin`);
270
+ }
271
+ console.log();
272
+ });
273
+ // ---- Cleanup ----
274
+ process.on('SIGINT', () => {
275
+ apiProc?.kill();
276
+ process.exit(0);
277
+ });
278
+ // ---- File watching ----
279
+ watch(siteDir, { recursive: true }, (_event, filename) => {
280
+ if (!filename)
281
+ return;
282
+ if (filename.endsWith('.ts') && filename.includes('templates/')) {
283
+ const parts = filename.split('/');
284
+ const idx = parts.indexOf('templates');
285
+ if (idx >= 0 && idx + 1 < parts.length) {
286
+ console.log(` Template changed: ${parts[idx + 1]}`);
287
+ invalidateTemplate(parts[idx + 1]);
288
+ }
289
+ }
290
+ else if (filename.endsWith('.yaml')) {
291
+ console.log(` Manifest changed: ${filename}`);
292
+ invalidateAllTemplates();
293
+ }
294
+ else
295
+ return;
296
+ notifyReload();
297
+ });
298
+ }
299
+ // ---- Dev mode: proxy /admin/api/* and /admin/preview/* to CMS API subprocess ----
300
+ async function setupDevMode(app, _siteDir, port, _cmsWebDir) {
301
+ const apiPort = port + 100;
302
+ for (const prefix of ['/admin/api', '/admin/preview']) {
303
+ app.all(`${prefix}/*`, async (c) => {
304
+ try {
305
+ const url = new URL(c.req.url);
306
+ const path = url.pathname.replace('/admin', '');
307
+ const targetUrl = `http://localhost:${apiPort}${path}${url.search}`;
308
+ const res = await fetch(targetUrl, {
309
+ method: c.req.method,
310
+ headers: c.req.raw.headers,
311
+ body: c.req.method !== 'GET' && c.req.method !== 'HEAD' ? c.req.raw.body : undefined,
312
+ // @ts-expect-error duplex needed for streaming body
313
+ duplex: 'half',
314
+ });
315
+ return new Response(res.body, { status: res.status, headers: res.headers });
316
+ }
317
+ catch {
318
+ return c.json({ error: 'CMS API not ready' }, 502);
319
+ }
320
+ });
321
+ }
322
+ }
323
+ // ---- Production mode: inline CMS API + static files from admin-dist/ ----
324
+ async function setupProductionMode(app, siteDir, storage, cmsStaticDir) {
325
+ // Read target configs from site.yaml — targets are initialized lazily on first publish/fetch
326
+ const siteYamlPath = join(siteDir, 'site.yaml');
327
+ let targetConfigs;
328
+ if (existsSync(siteYamlPath)) {
329
+ const siteYaml = yaml.load(readFileSync(siteYamlPath, 'utf-8'));
330
+ targetConfigs = siteYaml.targets;
331
+ }
332
+ // Mount CMS API inline at /admin
333
+ const cmsApp = createAdminApp({ siteDir, storage, targetConfigs });
334
+ app.route('/admin', cmsApp);
335
+ // Serve pre-built CMS static files
336
+ app.use('/admin/*', serveStatic({
337
+ root: cmsStaticDir,
338
+ rewriteRequestPath: (path) => path.replace(/^\/admin/, ''),
339
+ }));
340
+ // SPA fallback: serve index.html for unmatched /admin routes
341
+ app.get('/admin/*', (c) => {
342
+ const indexPath = join(cmsStaticDir, 'index.html');
343
+ if (existsSync(indexPath)) {
344
+ return c.html(readFileSync(indexPath, 'utf-8'));
345
+ }
346
+ return c.text('CMS admin UI not found', 404);
347
+ });
348
+ app.get('/admin', (c) => {
349
+ const indexPath = join(cmsStaticDir, 'index.html');
350
+ if (existsSync(indexPath)) {
351
+ return c.html(readFileSync(indexPath, 'utf-8'));
352
+ }
353
+ return c.text('CMS admin UI not found', 404);
354
+ });
355
+ }
356
+ /** Find apps/admin-ui source dir (monorepo dev mode) */
357
+ function findCmsDir() {
358
+ const candidates = [
359
+ resolve('apps/admin-ui'),
360
+ resolve(import.meta.dirname, '../../../../apps/admin-ui'),
361
+ resolve(import.meta.dirname, '../../../apps/admin-ui'),
362
+ ];
363
+ for (const dir of candidates) {
364
+ if (existsSync(join(dir, 'src/server/dev.ts')))
365
+ return dir;
366
+ }
367
+ return null;
368
+ }
369
+ /** Find pre-built CMS static files (production mode) */
370
+ function findCmsStaticDir() {
371
+ const candidates = [
372
+ resolve(import.meta.dirname, '../../admin-dist'),
373
+ resolve(import.meta.dirname, '../../../admin-dist'),
374
+ ];
375
+ for (const dir of candidates) {
376
+ if (existsSync(join(dir, 'index.html')))
377
+ return dir;
378
+ }
379
+ return null;
380
+ }
381
+ async function main() {
382
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
383
+ printHelp();
384
+ process.exit(0);
385
+ }
386
+ const parsed = parseArgs(args.slice(1));
387
+ switch (command) {
388
+ case 'init':
389
+ await runInit(args[1] ?? '.');
390
+ break;
391
+ case 'dev':
392
+ await runDev(parsed.siteDir, parsed.port ?? 3000);
393
+ break;
394
+ default:
395
+ console.error(` Unknown command: ${command}\n`);
396
+ printHelp();
397
+ process.exit(1);
398
+ }
399
+ }
400
+ main().catch((err) => {
401
+ console.error(`\n Error: ${err.message}\n`);
402
+ process.exit(1);
403
+ });
404
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { EditorMount } from '../types.js';
2
+ export declare function createEditorMount(jsonSchema: object): EditorMount;
3
+ //# sourceMappingURL=mount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../src/editor/mount.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA8C9C,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAgDjE"}
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { createRoot } from 'react-dom/client';
4
+ import Form from '@rjsf/core';
5
+ import validator from '@rjsf/validator-ajv8';
6
+ const roots = new WeakMap();
7
+ const STYLES = `
8
+ .gz-editor { font-family: system-ui, -apple-system, sans-serif; font-size: 0.875rem; }
9
+ .gz-editor .form-group { margin-bottom: 1rem; }
10
+ .gz-editor label { display: block; font-weight: 600; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.03em; color: #a0a0a0; margin-bottom: 0.25rem; }
11
+ .gz-editor .field-description { font-size: 0.75rem; color: #888; margin-bottom: 0.375rem; }
12
+ .gz-editor input[type="text"], .gz-editor input[type="number"], .gz-editor input[type="url"],
13
+ .gz-editor textarea, .gz-editor select {
14
+ width: 100%; padding: 0.5rem 0.625rem; font-size: 0.875rem; font-family: inherit;
15
+ background: #1e1e2e; color: #e0e0e0; border: 1px solid #3a3a4a; border-radius: 6px;
16
+ outline: none; transition: border-color 0.15s;
17
+ }
18
+ .gz-editor input:focus, .gz-editor textarea:focus, .gz-editor select:focus {
19
+ border-color: #667eea;
20
+ }
21
+ .gz-editor textarea { min-height: 5rem; resize: vertical; }
22
+ .gz-editor .btn { display: none; }
23
+ .gz-editor .error-detail, .gz-editor .text-danger { color: #f87171; font-size: 0.75rem; }
24
+ .gz-editor .array-item { padding: 0.5rem; border: 1px solid #2a2a3a; border-radius: 6px; margin-bottom: 0.5rem; }
25
+ .gz-editor .array-item-toolbox { display: flex; gap: 0.25rem; margin-top: 0.375rem; }
26
+ .gz-editor .array-item-toolbox .btn { display: inline-flex; padding: 0.25rem 0.5rem; font-size: 0.75rem; background: #2a2a3a; color: #ccc; border: none; border-radius: 4px; cursor: pointer; }
27
+ .gz-editor .array-item-toolbox .btn:hover { background: #3a3a4a; }
28
+ `;
29
+ function buildUiSchema(schema) {
30
+ const uiSchema = { 'ui:submitButtonOptions': { norender: true } };
31
+ const properties = schema.properties;
32
+ if (!properties)
33
+ return uiSchema;
34
+ for (const [key, prop] of Object.entries(properties)) {
35
+ if (prop.type === 'string') {
36
+ const desc = prop.description ?? '';
37
+ const isLong = desc.toLowerCase().includes('body') || desc.toLowerCase().includes('text') ||
38
+ desc.toLowerCase().includes('description') || desc.toLowerCase().includes('content') ||
39
+ key === 'body' || key === 'description' || key === 'text' || key === 'content';
40
+ if (isLong)
41
+ uiSchema[key] = { 'ui:widget': 'textarea' };
42
+ }
43
+ }
44
+ return uiSchema;
45
+ }
46
+ export function createEditorMount(jsonSchema) {
47
+ const uiSchema = buildUiSchema(jsonSchema);
48
+ return {
49
+ mount(el, { content, onChange }) {
50
+ const existing = roots.get(el);
51
+ if (existing)
52
+ existing.unmount();
53
+ const root = createRoot(el);
54
+ roots.set(el, root);
55
+ function EditorForm() {
56
+ const [formData, setFormData] = React.useState(content);
57
+ const handleChange = (e) => {
58
+ setFormData(e.formData);
59
+ onChange(e.formData);
60
+ };
61
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: STYLES }), _jsx("div", { className: "gz-editor", children: _jsx(Form, { schema: jsonSchema, uiSchema: uiSchema, formData: formData, onChange: handleChange, validator: validator, liveValidate: true, omitExtraData: true }) })] }));
62
+ }
63
+ root.render(_jsx(EditorForm, {}));
64
+ },
65
+ unmount(el) {
66
+ const root = roots.get(el);
67
+ if (root) {
68
+ root.unmount();
69
+ roots.delete(el);
70
+ }
71
+ },
72
+ };
73
+ }
74
+ //# sourceMappingURL=mount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.js","sourceRoot":"","sources":["../../src/editor/mount.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type { RenderOutput, TemplateFunction, EditorMount, TemplateModule, ComponentManifest, FragmentManifest, PageManifest, SiteManifest, ResolvedComponent, TargetConfig, DirEntry, StorageProvider, PublishedPageManifest, PublishedComponent, PurgeStrategy, } from './types.js';
2
+ export { renderComponent, renderPage } from './renderer.js';
3
+ export { resolvePage, resolveComponent } from './resolver.js';
4
+ export { loadSite } from './site-loader.js';
5
+ export type { Site } from './site-loader.js';
6
+ export { loadTemplate, invalidateTemplate, invalidateAllTemplates } from './template-loader.js';
7
+ export { scopeHtml, scopeCss, generateScopeId, resetScopeCounter } from './scope.js';
8
+ export { createApp } from './app.js';
9
+ export { createFilesystemProvider } from './providers/filesystem.js';
10
+ export { createAzureBlobProvider } from './providers/azure-blob.js';
11
+ export type { AzureBlobProviderOptions } from './providers/azure-blob.js';
12
+ export { createS3Provider } from './providers/s3.js';
13
+ export type { S3ProviderOptions } from './providers/s3.js';
14
+ export { createTargetProvider, createTargetRegistry } from './targets.js';
15
+ export { publishItems, resolveDependencies } from './publish.js';
16
+ export { publishPageRendered, publishFragmentRendered, publishSiteManifest, publishFragmentIndex, publishFragmentWithPurge, publishPageWithPurge, createWorkerPurge } from './publish-rendered.js';
17
+ export { createEditorMount } from './editor/mount.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,GACd,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGzE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAGlM,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ // Renderer
2
+ export { renderComponent, renderPage } from './renderer.js';
3
+ export { resolvePage, resolveComponent } from './resolver.js';
4
+ export { loadSite } from './site-loader.js';
5
+ export { loadTemplate, invalidateTemplate, invalidateAllTemplates } from './template-loader.js';
6
+ export { scopeHtml, scopeCss, generateScopeId, resetScopeCounter } from './scope.js';
7
+ export { createApp } from './app.js';
8
+ // Storage providers
9
+ export { createFilesystemProvider } from './providers/filesystem.js';
10
+ export { createAzureBlobProvider } from './providers/azure-blob.js';
11
+ export { createS3Provider } from './providers/s3.js';
12
+ // Targets
13
+ export { createTargetProvider, createTargetRegistry } from './targets.js';
14
+ // Publish
15
+ export { publishItems, resolveDependencies } from './publish.js';
16
+ export { publishPageRendered, publishFragmentRendered, publishSiteManifest, publishFragmentIndex, publishFragmentWithPurge, publishPageWithPurge, createWorkerPurge } from './publish-rendered.js';
17
+ // Editor
18
+ export { createEditorMount } from './editor/mount.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,oBAAoB;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGpD,UAAU;AACV,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEzE,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAElM,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { ComponentManifest, FragmentManifest, PageManifest, SiteManifest, StorageProvider } from './types.js';
2
+ export declare function parseSiteManifest(storage: StorageProvider, filePath: string): Promise<SiteManifest>;
3
+ export declare function parsePageManifest(storage: StorageProvider, filePath: string): Promise<PageManifest>;
4
+ export declare function parseFragmentManifest(storage: StorageProvider, filePath: string): Promise<FragmentManifest>;
5
+ export declare function parseComponentManifest(storage: StorageProvider, filePath: string): Promise<ComponentManifest>;
6
+ //# sourceMappingURL=manifest.d.ts.map