multisite-cms-mcp 1.0.7 → 1.0.9
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-conversion-guide.d.ts","sourceRoot":"","sources":["../../src/tools/get-conversion-guide.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"get-conversion-guide.d.ts","sourceRoot":"","sources":["../../src/tools/get-conversion-guide.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAgoB1H;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD1E"}
|
|
@@ -61,10 +61,10 @@ Do NOT change it to \`/blog\`.
|
|
|
61
61
|
Use the manifest's path configuration to maintain original URLs.`,
|
|
62
62
|
structure: `# Package Structure
|
|
63
63
|
|
|
64
|
-
Create a
|
|
64
|
+
Create a package with this structure (can be at repo root OR in a subfolder like cms_package/):
|
|
65
65
|
|
|
66
66
|
\`\`\`
|
|
67
|
-
website-package
|
|
67
|
+
website-package/ # Can be at root or in a subfolder
|
|
68
68
|
├── manifest.json # Required: Defines pages and CMS templates
|
|
69
69
|
├── public/ # Static assets (CSS, JS, images, fonts)
|
|
70
70
|
│ ├── css/
|
|
@@ -84,6 +84,26 @@ website-package.zip
|
|
|
84
84
|
└── downloads.html
|
|
85
85
|
\`\`\`
|
|
86
86
|
|
|
87
|
+
**SUPPORTED REPO STRUCTURES:**
|
|
88
|
+
\`\`\`
|
|
89
|
+
Option 1: CMS files at root
|
|
90
|
+
repo/
|
|
91
|
+
├── manifest.json
|
|
92
|
+
├── pages/
|
|
93
|
+
├── public/
|
|
94
|
+
└── templates/
|
|
95
|
+
|
|
96
|
+
Option 2: CMS files in subfolder (e.g. for Next.js projects)
|
|
97
|
+
repo/
|
|
98
|
+
├── app/ # Next.js app (ignored)
|
|
99
|
+
├── cms_package/ # CMS files here
|
|
100
|
+
│ ├── manifest.json
|
|
101
|
+
│ ├── pages/
|
|
102
|
+
│ ├── public/
|
|
103
|
+
│ └── templates/
|
|
104
|
+
└── package.json
|
|
105
|
+
\`\`\`
|
|
106
|
+
|
|
87
107
|
## Folder Rules
|
|
88
108
|
|
|
89
109
|
### public/
|
|
@@ -122,7 +142,10 @@ website-package.zip
|
|
|
122
142
|
"team": "templates/team.html",
|
|
123
143
|
"teamPath": "/team",
|
|
124
144
|
"downloads": "templates/downloads.html",
|
|
125
|
-
"downloadsPath": "/downloads"
|
|
145
|
+
"downloadsPath": "/downloads",
|
|
146
|
+
"authorsIndex": "templates/authors_index.html",
|
|
147
|
+
"authorDetail": "templates/author_detail.html",
|
|
148
|
+
"authorsIndexPath": "/authors"
|
|
126
149
|
},
|
|
127
150
|
"defaultHeadHtml": "<!-- fonts, meta tags -->"
|
|
128
151
|
}
|
|
@@ -144,6 +167,7 @@ Each page needs:
|
|
|
144
167
|
- \`blogPostPath: "/resources"\` → Posts at /resources/post-slug
|
|
145
168
|
- \`teamPath: "/about/team"\` → Team at /about/team
|
|
146
169
|
- \`downloadsPath: "/library"\` → Downloads at /library
|
|
170
|
+
- \`authorsIndexPath: "/contributors"\` → Authors at /contributors, detail at /contributors/slug
|
|
147
171
|
|
|
148
172
|
**IMPORTANT:** Match paths to the original site's URLs!
|
|
149
173
|
|
|
@@ -169,7 +193,7 @@ For dynamic collections beyond the built-ins:
|
|
|
169
193
|
2. **Detail Templates** - Single item pages (blog_post.html)
|
|
170
194
|
3. **Static Pages** - Fixed content with data-edit-key
|
|
171
195
|
|
|
172
|
-
## Index Template Pattern
|
|
196
|
+
## Index Template Pattern (Blog List)
|
|
173
197
|
|
|
174
198
|
\`\`\`html
|
|
175
199
|
<main class="blog-page">
|
|
@@ -192,7 +216,15 @@ For dynamic collections beyond the built-ins:
|
|
|
192
216
|
</main>
|
|
193
217
|
\`\`\`
|
|
194
218
|
|
|
195
|
-
|
|
219
|
+
**CRITICAL FIELD NAMES for blogs:**
|
|
220
|
+
- \`{{name}}\` = Post title (NOT {{title}})
|
|
221
|
+
- \`{{mainImage}}\` = Hero image (NOT {{coverImageUrl}})
|
|
222
|
+
- \`{{thumbnailImage}}\` = Preview image
|
|
223
|
+
- \`{{postSummary}}\` = Excerpt (NOT {{excerpt}})
|
|
224
|
+
- \`{{{postBody}}}\` = Content (NOT {{bodyHtml}}, uses TRIPLE braces)
|
|
225
|
+
- \`{{url}}\` = Generated link to detail page
|
|
226
|
+
|
|
227
|
+
## Detail Template Pattern (Blog Post)
|
|
196
228
|
|
|
197
229
|
\`\`\`html
|
|
198
230
|
<article class="blog-post">
|
|
@@ -208,12 +240,101 @@ For dynamic collections beyond the built-ins:
|
|
|
208
240
|
</div>
|
|
209
241
|
{{/if}}
|
|
210
242
|
|
|
243
|
+
{{#if publishedAt}}
|
|
244
|
+
<time>{{publishedAt}}</time>
|
|
245
|
+
{{/if}}
|
|
246
|
+
|
|
211
247
|
<div class="content">
|
|
212
248
|
{{{postBody}}}
|
|
213
249
|
</div>
|
|
214
250
|
</article>
|
|
215
251
|
\`\`\`
|
|
216
252
|
|
|
253
|
+
## Team Template Pattern
|
|
254
|
+
|
|
255
|
+
\`\`\`html
|
|
256
|
+
<div class="team-grid">
|
|
257
|
+
{{#each team sort="order" order="asc"}}
|
|
258
|
+
<div class="team-member">
|
|
259
|
+
{{#if photo}}
|
|
260
|
+
<img src="{{photo}}" alt="{{name}}">
|
|
261
|
+
{{/if}}
|
|
262
|
+
<h3>{{name}}</h3>
|
|
263
|
+
{{#if role}}
|
|
264
|
+
<p class="role">{{role}}</p>
|
|
265
|
+
{{/if}}
|
|
266
|
+
{{#if bio}}
|
|
267
|
+
<div class="bio">{{{bio}}}</div>
|
|
268
|
+
{{/if}}
|
|
269
|
+
</div>
|
|
270
|
+
{{/each}}
|
|
271
|
+
</div>
|
|
272
|
+
\`\`\`
|
|
273
|
+
|
|
274
|
+
**CRITICAL FIELD NAMES for team:**
|
|
275
|
+
- \`{{name}}\` = Team member name
|
|
276
|
+
- \`{{role}}\` = Job title
|
|
277
|
+
- \`{{photo}}\` = Headshot (NOT {{picture}})
|
|
278
|
+
- \`{{{bio}}}\` = Biography (TRIPLE braces for HTML)
|
|
279
|
+
- \`{{order}}\` = Display order
|
|
280
|
+
|
|
281
|
+
## Author Index Template Pattern
|
|
282
|
+
|
|
283
|
+
\`\`\`html
|
|
284
|
+
<div class="authors-grid">
|
|
285
|
+
{{#each authors}}
|
|
286
|
+
<div class="author-card">
|
|
287
|
+
{{#if picture}}
|
|
288
|
+
<img src="{{picture}}" alt="{{name}}">
|
|
289
|
+
{{/if}}
|
|
290
|
+
<h3><a href="{{url}}">{{name}}</a></h3>
|
|
291
|
+
{{#if bio}}
|
|
292
|
+
<div class="bio-excerpt">{{{bio}}}</div>
|
|
293
|
+
{{/if}}
|
|
294
|
+
</div>
|
|
295
|
+
{{/each}}
|
|
296
|
+
</div>
|
|
297
|
+
\`\`\`
|
|
298
|
+
|
|
299
|
+
## Author Detail Template Pattern
|
|
300
|
+
|
|
301
|
+
\`\`\`html
|
|
302
|
+
<article class="author-profile">
|
|
303
|
+
{{#if picture}}
|
|
304
|
+
<img src="{{picture}}" alt="{{name}}" class="author-photo">
|
|
305
|
+
{{/if}}
|
|
306
|
+
|
|
307
|
+
<h1>{{name}}</h1>
|
|
308
|
+
|
|
309
|
+
{{#if bio}}
|
|
310
|
+
<div class="bio">{{{bio}}}</div>
|
|
311
|
+
{{/if}}
|
|
312
|
+
|
|
313
|
+
{{#if email}}
|
|
314
|
+
<a href="mailto:{{email}}">{{email}}</a>
|
|
315
|
+
{{/if}}
|
|
316
|
+
|
|
317
|
+
<!-- Posts by this author -->
|
|
318
|
+
<h2>Posts by {{name}}</h2>
|
|
319
|
+
{{#each blogs}}
|
|
320
|
+
{{#if (eq author.name ../name)}}
|
|
321
|
+
<article>
|
|
322
|
+
<h3><a href="{{url}}">{{name}}</a></h3>
|
|
323
|
+
<p>{{postSummary}}</p>
|
|
324
|
+
</article>
|
|
325
|
+
{{/if}}
|
|
326
|
+
{{/each}}
|
|
327
|
+
</article>
|
|
328
|
+
\`\`\`
|
|
329
|
+
|
|
330
|
+
**CRITICAL FIELD NAMES for authors:**
|
|
331
|
+
- \`{{name}}\` = Author name
|
|
332
|
+
- \`{{picture}}\` = Author photo (NOT {{photo}})
|
|
333
|
+
- \`{{{bio}}}\` = Biography (TRIPLE braces for HTML)
|
|
334
|
+
- \`{{email}}\` = Email address
|
|
335
|
+
- \`{{url}}\` = Link to author detail page
|
|
336
|
+
- Use \`{{#if (eq author.name ../name)}}\` to filter posts by current author
|
|
337
|
+
|
|
217
338
|
## Static Page Pattern
|
|
218
339
|
|
|
219
340
|
\`\`\`html
|
|
@@ -68,7 +68,7 @@ When your site uses different URLs than the defaults:
|
|
|
68
68
|
"downloadsPath": "/resources",
|
|
69
69
|
"authorsIndex": "templates/contributors.html",
|
|
70
70
|
"authorDetail": "templates/contributor.html",
|
|
71
|
-
"
|
|
71
|
+
"authorsIndexPath": "/contributors"
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
\`\`\`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-manifest.d.ts","sourceRoot":"","sources":["../../src/tools/validate-manifest.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"validate-manifest.d.ts","sourceRoot":"","sources":["../../src/tools/validate-manifest.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoI5E"}
|
|
@@ -19,7 +19,7 @@ const cmsTemplatesSchema = zod_1.z.object({
|
|
|
19
19
|
downloadsPath: zod_1.z.string().startsWith('/').optional(),
|
|
20
20
|
authorsIndex: zod_1.z.string().optional(),
|
|
21
21
|
authorDetail: zod_1.z.string().optional(),
|
|
22
|
-
|
|
22
|
+
authorsIndexPath: zod_1.z.string().startsWith('/').optional(),
|
|
23
23
|
collectionPaths: zod_1.z.record(zod_1.z.string().startsWith('/')).optional(),
|
|
24
24
|
}).optional();
|
|
25
25
|
const manifestSchema = zod_1.z.object({
|
|
@@ -109,6 +109,17 @@ The manifest.json file is not valid JSON. Check for:
|
|
|
109
109
|
if (templates.blogIndexPath !== templates.blogPostPath && templates.blogIndexPath && templates.blogPostPath) {
|
|
110
110
|
warnings.push(`- blogIndexPath (${templates.blogIndexPath}) differs from blogPostPath (${templates.blogPostPath}) - usually these should match`);
|
|
111
111
|
}
|
|
112
|
+
// Check for common author path mistake
|
|
113
|
+
if (templates.authorsPath && !templates.authorsIndexPath) {
|
|
114
|
+
warnings.push('- Found "authorsPath" but expected "authorsIndexPath" - rename to authorsIndexPath');
|
|
115
|
+
}
|
|
116
|
+
// Check author template consistency
|
|
117
|
+
if (templates.authorsIndex && !templates.authorsIndexPath) {
|
|
118
|
+
warnings.push('- authorsIndex template defined but no authorsIndexPath - will default to /authors');
|
|
119
|
+
}
|
|
120
|
+
if (templates.authorDetail && !templates.authorsIndex) {
|
|
121
|
+
warnings.push('- authorDetail template defined but no authorsIndex - authors need both templates');
|
|
122
|
+
}
|
|
112
123
|
}
|
|
113
124
|
// Build result
|
|
114
125
|
let output = '';
|
package/package.json
CHANGED