@se-studio/project-build 1.0.91 → 1.0.93

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @se-studio/project-build
2
2
 
3
+ ## 1.0.93
4
+
5
+ ### Patch Changes
6
+
7
+ - Bulk version bump: patch for all packages
8
+
9
+ ## 1.0.92
10
+
11
+ ### Patch Changes
12
+
13
+ - Bulk version bump: patch for all packages
14
+
3
15
  ## 1.0.91
4
16
 
5
17
  ### Patch Changes
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ /** biome-ignore-all lint/suspicious/noConsole: Console is ok */
3
+ export {};
4
+ //# sourceMappingURL=generate-showcase-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-showcase-data.d.ts","sourceRoot":"","sources":["../src/generate-showcase-data.ts"],"names":[],"mappings":";AACA,gEAAgE"}
@@ -0,0 +1,423 @@
1
+ #!/usr/bin/env node
2
+ /** biome-ignore-all lint/suspicious/noConsole: Console is ok */
3
+ import * as fs from 'node:fs';
4
+ import * as path from 'node:path';
5
+ import dotenv from 'dotenv';
6
+ // Load env from the app directory where the command is run
7
+ dotenv.config({ path: path.join(process.cwd(), '.env.local') });
8
+ function isCdaLink(value) {
9
+ return (value !== null &&
10
+ typeof value === 'object' &&
11
+ 'sys' in value &&
12
+ typeof value.sys?.id === 'string' &&
13
+ (value.sys?.linkType === 'Entry' || value.sys?.linkType === 'Asset'));
14
+ }
15
+ // ============================================================================
16
+ // Lookup maps (built per CDA page from includes)
17
+ // ============================================================================
18
+ function buildLookupMaps(response) {
19
+ const entryMap = new Map();
20
+ const assetMap = new Map();
21
+ for (const entry of response.includes?.Entry ?? []) {
22
+ entryMap.set(entry.sys.id, entry);
23
+ }
24
+ for (const asset of response.includes?.Asset ?? []) {
25
+ assetMap.set(asset.sys.id, asset);
26
+ }
27
+ return { entryMap, assetMap };
28
+ }
29
+ // ============================================================================
30
+ // Field extraction helpers
31
+ // ============================================================================
32
+ function extractString(fields, key) {
33
+ const val = fields[key];
34
+ return typeof val === 'string' && val.trim() ? val.trim() : undefined;
35
+ }
36
+ function extractRichText(fields, key) {
37
+ const val = fields[key];
38
+ if (val && typeof val === 'object' && 'nodeType' in val) {
39
+ return { json: val };
40
+ }
41
+ return undefined;
42
+ }
43
+ /** Resolves visual dimensions and URL from a media entry link → media entry → asset chain.
44
+ * Also handles Lottie animations stored as application/json assets. */
45
+ function extractVisual(fields, entryMap, assetMap) {
46
+ const visualLink = fields['visual'];
47
+ if (!isCdaLink(visualLink) || visualLink.sys.linkType !== 'Entry')
48
+ return undefined;
49
+ const mediaEntry = entryMap.get(visualLink.sys.id);
50
+ if (!mediaEntry)
51
+ return undefined;
52
+ const assetLink = mediaEntry.fields['asset'];
53
+ if (!isCdaLink(assetLink) || assetLink.sys.linkType !== 'Asset')
54
+ return undefined;
55
+ const asset = assetMap.get(assetLink.sys.id);
56
+ const file = asset?.fields?.file;
57
+ if (!file)
58
+ return undefined;
59
+ // CDA returns protocol-relative URLs (e.g. "//images.ctfassets.net/..."); normalise to https.
60
+ const rawUrl = file.url;
61
+ const url = rawUrl ? (rawUrl.startsWith('//') ? `https:${rawUrl}` : rawUrl) : undefined;
62
+ // Lottie animations are stored as application/json assets (no image dimensions).
63
+ if (file.contentType === 'application/json' && url) {
64
+ return { width: 0, height: 0, lottieUrl: url };
65
+ }
66
+ const dims = file.details?.image;
67
+ if (!dims)
68
+ return undefined;
69
+ return { width: dims.width, height: dims.height, ...(url && { url }) };
70
+ }
71
+ /** Maps a Contentful content-type id to an InternalType label. */
72
+ function toInternalType(contentTypeId) {
73
+ switch (contentTypeId) {
74
+ case 'article':
75
+ return 'Article';
76
+ case 'articleType':
77
+ return 'ArticleType';
78
+ case 'person':
79
+ return 'Person';
80
+ case 'tag':
81
+ return 'Tag';
82
+ default:
83
+ return 'Page';
84
+ }
85
+ }
86
+ /**
87
+ * Extracts serializable link data from a component/collection's `links` field.
88
+ * Resolves link text, href, variant, and colours from the linked `link` content-type entries.
89
+ */
90
+ function extractLinks(fields, entryMap) {
91
+ const linksField = fields['links'];
92
+ if (!Array.isArray(linksField))
93
+ return [];
94
+ const result = [];
95
+ for (const linkRef of linksField) {
96
+ if (!isCdaLink(linkRef) || linkRef.sys.linkType !== 'Entry')
97
+ continue;
98
+ const linkEntry = entryMap.get(linkRef.sys.id);
99
+ if (!linkEntry || linkEntry.sys.contentType.sys.id !== 'link')
100
+ continue;
101
+ const lf = linkEntry.fields;
102
+ const id = linkEntry.sys.id;
103
+ const name = extractString(lf, 'name') ?? id;
104
+ const useName = lf['useName'] === true;
105
+ const linkText = extractString(lf, 'linkText');
106
+ const text = (useName ? name : (linkText ?? name)) ?? null;
107
+ const variant = extractString(lf, 'variant');
108
+ const backgroundColour = extractString(lf, 'backgroundColour');
109
+ const textColour = extractString(lf, 'textColour');
110
+ const externalUrl = extractString(lf, 'external');
111
+ const internalRef = lf['internal'];
112
+ const extras = {
113
+ ...(variant && { variant }),
114
+ ...(backgroundColour && { backgroundColour }),
115
+ ...(textColour && { textColour }),
116
+ };
117
+ if (externalUrl) {
118
+ result.push({ id, name, text, type: 'External link', href: externalUrl, ...extras });
119
+ }
120
+ else if (isCdaLink(internalRef) && internalRef.sys.linkType === 'Entry') {
121
+ const targetEntry = entryMap.get(internalRef.sys.id);
122
+ const slug = targetEntry ? (extractString(targetEntry.fields, 'slug') ?? '') : '';
123
+ const internalType = targetEntry
124
+ ? toInternalType(targetEntry.sys.contentType.sys.id)
125
+ : 'Page';
126
+ result.push({
127
+ id,
128
+ name,
129
+ text,
130
+ type: 'Internal link',
131
+ href: slug ? `/${slug}` : '/',
132
+ slug,
133
+ internalType,
134
+ internalId: internalRef.sys.id,
135
+ ...extras,
136
+ });
137
+ }
138
+ else {
139
+ result.push({ id, name, text, type: 'Blank link', href: '#', ...extras });
140
+ }
141
+ }
142
+ return result;
143
+ }
144
+ /** Extracts text labels from linked link entries (used only for completeness scoring). */
145
+ function extractLinkTexts(fields, entryMap) {
146
+ const links = fields['links'];
147
+ if (!Array.isArray(links))
148
+ return [];
149
+ return links
150
+ .filter((l) => isCdaLink(l) && l.sys.linkType === 'Entry')
151
+ .map((l) => {
152
+ const linkEntry = entryMap.get(l.sys.id);
153
+ if (!linkEntry)
154
+ return null;
155
+ const text = extractString(linkEntry.fields, 'linkText') ?? extractString(linkEntry.fields, 'name');
156
+ return text ?? null;
157
+ })
158
+ .filter((t) => t !== null);
159
+ }
160
+ function scoreCompleteness(mock, linkTexts) {
161
+ let score = 0;
162
+ if (mock.heading)
163
+ score++;
164
+ if (mock.preHeading)
165
+ score++;
166
+ if (mock.postHeading)
167
+ score++;
168
+ if (mock.body)
169
+ score++;
170
+ if (mock.additionalCopy)
171
+ score++;
172
+ if (mock.visual)
173
+ score++;
174
+ if (mock.visual?.url)
175
+ score++; // bonus for having a real image URL
176
+ if (mock.backgroundColour)
177
+ score++;
178
+ if (mock.textColour)
179
+ score++;
180
+ if ((mock.links?.length ?? linkTexts.length) > 0)
181
+ score++;
182
+ return score;
183
+ }
184
+ // ============================================================================
185
+ // Entry extraction
186
+ // ============================================================================
187
+ function extractMock(fields, entryMap, assetMap) {
188
+ const mock = {};
189
+ const heading = extractString(fields, 'heading');
190
+ if (heading)
191
+ mock.heading = heading;
192
+ const preHeading = extractString(fields, 'preHeading');
193
+ if (preHeading)
194
+ mock.preHeading = preHeading;
195
+ const postHeading = extractString(fields, 'postHeading');
196
+ if (postHeading)
197
+ mock.postHeading = postHeading;
198
+ const body = extractRichText(fields, 'body');
199
+ if (body)
200
+ mock.body = body;
201
+ const additionalCopy = extractRichText(fields, 'additionalCopy');
202
+ if (additionalCopy)
203
+ mock.additionalCopy = additionalCopy;
204
+ const visual = extractVisual(fields, entryMap, assetMap);
205
+ if (visual)
206
+ mock.visual = visual;
207
+ const backgroundColour = extractString(fields, 'backgroundColour');
208
+ if (backgroundColour)
209
+ mock.backgroundColour = backgroundColour;
210
+ const textColour = extractString(fields, 'textColour');
211
+ if (textColour)
212
+ mock.textColour = textColour;
213
+ const links = extractLinks(fields, entryMap);
214
+ if (links.length > 0)
215
+ mock.links = links;
216
+ return mock;
217
+ }
218
+ function extractCardFromEntry(entry, entryMap, assetMap) {
219
+ return extractMock(entry.fields, entryMap, assetMap);
220
+ }
221
+ /** Extracts visual dimensions from a person entry's direct `media` asset link. */
222
+ function extractPersonVisual(fields, assetMap) {
223
+ const mediaLink = fields['media'];
224
+ if (!isCdaLink(mediaLink) || mediaLink.sys.linkType !== 'Asset')
225
+ return undefined;
226
+ const asset = assetMap.get(mediaLink.sys.id);
227
+ const file = asset?.fields?.file;
228
+ if (!file)
229
+ return undefined;
230
+ const rawUrl = file.url;
231
+ const url = rawUrl ? (rawUrl.startsWith('//') ? `https:${rawUrl}` : rawUrl) : undefined;
232
+ const dims = file.details?.image;
233
+ if (!dims)
234
+ return undefined;
235
+ return { width: dims.width, height: dims.height, ...(url && { url }) };
236
+ }
237
+ /** Extracts a mock card from a person content-type entry.
238
+ * Maps: name → heading, bio → body, jobTitle → preHeading, media (asset) → visual. */
239
+ function extractPersonCard(entry, assetMap) {
240
+ const fields = entry.fields;
241
+ const card = {};
242
+ const name = extractString(fields, 'name');
243
+ if (name)
244
+ card.heading = name;
245
+ const jobTitle = extractString(fields, 'jobTitle');
246
+ if (jobTitle)
247
+ card.preHeading = jobTitle;
248
+ const bio = extractRichText(fields, 'bio');
249
+ if (bio)
250
+ card.body = bio;
251
+ const visual = extractPersonVisual(fields, assetMap);
252
+ if (visual)
253
+ card.visual = visual;
254
+ return card;
255
+ }
256
+ function extractComponentExample(entry, entryMap, assetMap) {
257
+ const mock = extractMock(entry.fields, entryMap, assetMap);
258
+ const linkTexts = extractLinkTexts(entry.fields, entryMap);
259
+ return {
260
+ entryId: entry.sys.id,
261
+ cmsLabel: extractString(entry.fields, 'cmsLabel') ?? entry.sys.id,
262
+ fieldCompleteness: scoreCompleteness(mock, linkTexts),
263
+ mock,
264
+ linkTexts,
265
+ };
266
+ }
267
+ function extractCollectionExample(entry, entryMap, assetMap) {
268
+ const mock = extractMock(entry.fields, entryMap, assetMap);
269
+ const linkTexts = extractLinkTexts(entry.fields, entryMap);
270
+ // Extract card data from collection contents
271
+ const contents = entry.fields['contents'];
272
+ const cards = [];
273
+ if (Array.isArray(contents)) {
274
+ for (const item of contents) {
275
+ if (!isCdaLink(item) || item.sys.linkType !== 'Entry')
276
+ continue;
277
+ const cardEntry = entryMap.get(item.sys.id);
278
+ if (!cardEntry)
279
+ continue;
280
+ // Extract component entries as standard cards; person entries as person cards.
281
+ // Skip nested collections, page links, and other non-card content types.
282
+ const contentTypeId = cardEntry.sys.contentType.sys.id;
283
+ if (contentTypeId === 'component') {
284
+ cards.push(extractCardFromEntry(cardEntry, entryMap, assetMap));
285
+ }
286
+ else if (contentTypeId === 'person') {
287
+ cards.push(extractPersonCard(cardEntry, assetMap));
288
+ }
289
+ }
290
+ }
291
+ return {
292
+ entryId: entry.sys.id,
293
+ cmsLabel: extractString(entry.fields, 'cmsLabel') ?? entry.sys.id,
294
+ fieldCompleteness: scoreCompleteness(mock, linkTexts),
295
+ mock,
296
+ cards,
297
+ };
298
+ }
299
+ // ============================================================================
300
+ // Contentful CDA fetch with pagination
301
+ // ============================================================================
302
+ async function fetchAllEntries(spaceId, environmentId, accessToken, contentType) {
303
+ const pages = [];
304
+ const limit = 100;
305
+ let skip = 0;
306
+ let total = Number.POSITIVE_INFINITY;
307
+ while (skip < total) {
308
+ const url = new URL(`https://cdn.contentful.com/spaces/${spaceId}/environments/${environmentId}/entries`);
309
+ url.searchParams.set('access_token', accessToken);
310
+ url.searchParams.set('content_type', contentType);
311
+ url.searchParams.set('include', '3');
312
+ url.searchParams.set('limit', String(limit));
313
+ url.searchParams.set('skip', String(skip));
314
+ console.log(`Fetching ${contentType} entries (skip=${skip})...`);
315
+ const response = await fetch(url.toString());
316
+ if (!response.ok) {
317
+ throw new Error(`Contentful CDA error: ${response.status} ${response.statusText} for content_type=${contentType}`);
318
+ }
319
+ const data = (await response.json());
320
+ total = data.total;
321
+ pages.push({
322
+ items: data.items,
323
+ includes: {
324
+ Entry: data.includes?.Entry ?? [],
325
+ Asset: data.includes?.Asset ?? [],
326
+ },
327
+ });
328
+ skip += data.items.length;
329
+ // Guard against empty page (shouldn't happen but prevents infinite loop)
330
+ if (data.items.length === 0)
331
+ break;
332
+ }
333
+ return pages;
334
+ }
335
+ // ============================================================================
336
+ // Main
337
+ // ============================================================================
338
+ async function main() {
339
+ const spaceId = process.env['CONTENTFUL_SPACE_ID'];
340
+ const accessToken = process.env['CONTENTFUL_ACCESS_TOKEN'];
341
+ const environmentId = process.env['CONTENTFUL_ENVIRONMENT_NAME'] ?? 'master';
342
+ if (!spaceId || !accessToken) {
343
+ console.error('Missing required environment variables: CONTENTFUL_SPACE_ID, CONTENTFUL_ACCESS_TOKEN');
344
+ process.exit(1);
345
+ }
346
+ const output = {
347
+ generatedAt: new Date().toISOString(),
348
+ space: spaceId,
349
+ environment: environmentId,
350
+ components: {},
351
+ collections: {},
352
+ };
353
+ // --- Components ---
354
+ console.log('\nFetching components...');
355
+ const componentPages = await fetchAllEntries(spaceId, environmentId, accessToken, 'component');
356
+ let componentCount = 0;
357
+ for (const page of componentPages) {
358
+ const { entryMap, assetMap } = buildLookupMaps({
359
+ total: 0,
360
+ skip: 0,
361
+ limit: 0,
362
+ items: [],
363
+ includes: page.includes,
364
+ });
365
+ for (const entry of page.items) {
366
+ const componentType = extractString(entry.fields, 'componentType');
367
+ if (!componentType)
368
+ continue;
369
+ const example = extractComponentExample(entry, entryMap, assetMap);
370
+ if (!output.components[componentType]) {
371
+ output.components[componentType] = [];
372
+ }
373
+ output.components[componentType].push(example);
374
+ componentCount++;
375
+ }
376
+ }
377
+ console.log(`Extracted ${componentCount} component entries across ${Object.keys(output.components).length} types.`);
378
+ // --- Collections ---
379
+ console.log('\nFetching collections...');
380
+ const collectionPages = await fetchAllEntries(spaceId, environmentId, accessToken, 'collection');
381
+ let collectionCount = 0;
382
+ for (const page of collectionPages) {
383
+ const { entryMap, assetMap } = buildLookupMaps({
384
+ total: 0,
385
+ skip: 0,
386
+ limit: 0,
387
+ items: [],
388
+ includes: page.includes,
389
+ });
390
+ for (const entry of page.items) {
391
+ const collectionType = extractString(entry.fields, 'collectionType');
392
+ if (!collectionType)
393
+ continue;
394
+ const example = extractCollectionExample(entry, entryMap, assetMap);
395
+ if (!output.collections[collectionType]) {
396
+ output.collections[collectionType] = [];
397
+ }
398
+ output.collections[collectionType].push(example);
399
+ collectionCount++;
400
+ }
401
+ }
402
+ console.log(`Extracted ${collectionCount} collection entries across ${Object.keys(output.collections).length} types.`);
403
+ // Sort examples within each type by fieldCompleteness descending so the best examples come first
404
+ for (const examples of Object.values(output.components)) {
405
+ examples.sort((a, b) => b.fieldCompleteness - a.fieldCompleteness);
406
+ }
407
+ for (const examples of Object.values(output.collections)) {
408
+ examples.sort((a, b) => b.fieldCompleteness - a.fieldCompleteness);
409
+ }
410
+ // Write output
411
+ const outputDir = path.join(process.cwd(), 'src', 'generated');
412
+ fs.mkdirSync(outputDir, { recursive: true });
413
+ const outputPath = path.join(outputDir, 'showcase-examples.json');
414
+ fs.writeFileSync(outputPath, JSON.stringify(output, null, 2), 'utf-8');
415
+ console.log(`\nWrote showcase examples to ${outputPath}`);
416
+ console.log(`Component types: ${Object.keys(output.components).join(', ') || '(none)'}`);
417
+ console.log(`Collection types: ${Object.keys(output.collections).join(', ') || '(none)'}`);
418
+ }
419
+ main().catch((err) => {
420
+ console.error(err);
421
+ process.exit(1);
422
+ });
423
+ //# sourceMappingURL=generate-showcase-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-showcase-data.js","sourceRoot":"","sources":["../src/generate-showcase-data.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/project-build",
3
- "version": "1.0.91",
3
+ "version": "1.0.93",
4
4
  "description": "Build tools and management scripts for SE Studio projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,7 +28,8 @@
28
28
  "bin": {
29
29
  "setailwind": "./dist/setailwind.js",
30
30
  "setup-colours": "./dist/management/setupColours.js",
31
- "seskills": "./dist/seskills.js"
31
+ "seskills": "./dist/seskills.js",
32
+ "generate-showcase-data": "./dist/generate-showcase-data.js"
32
33
  },
33
34
  "files": [
34
35
  "dist",
@@ -53,12 +54,12 @@
53
54
  "url": "https://github.com/Something-Else-Studio/se-core-product/issues"
54
55
  },
55
56
  "dependencies": {
56
- "@biomejs/biome": "^2.4.4",
57
+ "@biomejs/biome": "^2.4.5",
57
58
  "@biomejs/js-api": "^4.0.0",
58
- "@biomejs/wasm-nodejs": "^2.4.4",
59
+ "@biomejs/wasm-nodejs": "^2.4.5",
59
60
  "change-case": "^5.4.4",
60
61
  "chroma-js": "^3.2.0",
61
- "contentful-management": "^11.73.0",
62
+ "contentful-management": "^11.73.1",
62
63
  "dotenv": "^17.3.1"
63
64
  },
64
65
  "devDependencies": {