@se-studio/project-build 1.0.52 → 1.0.53

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 (48) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/management/check-target.d.ts +2 -0
  3. package/dist/management/check-target.d.ts.map +1 -0
  4. package/dist/management/check-target.js +40 -0
  5. package/dist/management/check-target.js.map +1 -0
  6. package/dist/management/count-brightline.d.ts +2 -0
  7. package/dist/management/count-brightline.d.ts.map +1 -0
  8. package/dist/management/count-brightline.js +37 -0
  9. package/dist/management/count-brightline.js.map +1 -0
  10. package/dist/management/cross-check-migration.d.ts +2 -0
  11. package/dist/management/cross-check-migration.d.ts.map +1 -0
  12. package/dist/management/cross-check-migration.js +212 -0
  13. package/dist/management/cross-check-migration.js.map +1 -0
  14. package/dist/management/discovery-brightlife.d.ts +2 -0
  15. package/dist/management/discovery-brightlife.d.ts.map +1 -0
  16. package/dist/management/discovery-brightlife.js +78 -0
  17. package/dist/management/discovery-brightlife.js.map +1 -0
  18. package/dist/management/discovery-brightline.d.ts +2 -0
  19. package/dist/management/discovery-brightline.d.ts.map +1 -0
  20. package/dist/management/discovery-brightline.js +68 -0
  21. package/dist/management/discovery-brightline.js.map +1 -0
  22. package/dist/management/inspect-target.d.ts +2 -0
  23. package/dist/management/inspect-target.d.ts.map +1 -0
  24. package/dist/management/inspect-target.js +48 -0
  25. package/dist/management/inspect-target.js.map +1 -0
  26. package/dist/management/migrate-brightlife.d.ts +2 -0
  27. package/dist/management/migrate-brightlife.d.ts.map +1 -0
  28. package/dist/management/migrate-brightlife.js +475 -0
  29. package/dist/management/migrate-brightlife.js.map +1 -0
  30. package/dist/management/migrate-brightline.d.ts +2 -0
  31. package/dist/management/migrate-brightline.d.ts.map +1 -0
  32. package/dist/management/migrate-brightline.js +1085 -0
  33. package/dist/management/migrate-brightline.js.map +1 -0
  34. package/dist/management/sync-skills.d.ts +2 -0
  35. package/dist/management/sync-skills.d.ts.map +1 -0
  36. package/dist/management/sync-skills.js +46 -0
  37. package/dist/management/sync-skills.js.map +1 -0
  38. package/dist/seskills.d.ts +9 -0
  39. package/dist/seskills.d.ts.map +1 -0
  40. package/dist/seskills.js +25 -0
  41. package/dist/seskills.js.map +1 -0
  42. package/package.json +7 -6
  43. package/skills/se-marketing-sites/create-collection/SKILL.md +283 -0
  44. package/skills/se-marketing-sites/create-component/SKILL.md +245 -0
  45. package/skills/se-marketing-sites/create-page/SKILL.md +134 -0
  46. package/skills/se-marketing-sites/handling-media/SKILL.md +118 -0
  47. package/skills/se-marketing-sites/register-cms-features/SKILL.md +95 -0
  48. package/skills/se-marketing-sites/styling-system/SKILL.md +118 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @se-studio/project-build
2
2
 
3
+ ## 1.0.53
4
+
5
+ ### Patch Changes
6
+
7
+ - Bulk version bump: patch for all packages
8
+
3
9
  ## 1.0.52
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-target.d.ts","sourceRoot":"","sources":["../../src/management/check-target.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import * as contentful from 'contentful';
2
+ import dotenv from 'dotenv';
3
+ // Load environment variables from .env file in project root or current package
4
+ dotenv.config();
5
+ const SPACE_ID = 'c27ds9epot4n';
6
+ const ENV_ID = 'production-2026';
7
+ async function checkTargetTypes() {
8
+ console.log(`Checking types in: ${SPACE_ID} / ${ENV_ID}`);
9
+ const accessToken = process.env.CONTENTFUL_ACCESS_TOKEN ||
10
+ process.env.CONTENTFUL_DELIVERY_TOKEN ||
11
+ process.env.CONTENTFUL_MANAGEMENT_TOKEN;
12
+ // Create client with whatever token we have (CDA preferred for read-only if we had one, but we have CMA)
13
+ // Actually, 'contentful' package is for CDA. 'contentful-management' is for CMA.
14
+ // We want to check content types existence. CMA is fine.
15
+ const client = contentful.createClient({
16
+ space: SPACE_ID,
17
+ environment: ENV_ID,
18
+ accessToken: accessToken || 'dummy', // contentful client needs a token
19
+ });
20
+ try {
21
+ const contentTypes = await client.getContentTypes();
22
+ console.log(`Found ${contentTypes.items.length} content types in TARGET.`);
23
+ const requiredTypes = ['Component', 'Collection', 'Page', 'Article', 'Link'];
24
+ const foundTypes = contentTypes.items.map((ct) => ct.sys.id);
25
+ console.log('Available Types:', foundTypes);
26
+ requiredTypes.forEach((req) => {
27
+ if (!foundTypes.includes(req)) {
28
+ console.error(`MISSING TYPE: ${req}`);
29
+ }
30
+ else {
31
+ console.log(`OK: ${req}`);
32
+ }
33
+ });
34
+ }
35
+ catch (error) {
36
+ console.error('Error fetching types (might be auth issue or env not found):', error);
37
+ }
38
+ }
39
+ checkTargetTypes();
40
+ //# sourceMappingURL=check-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-target.js","sourceRoot":"","sources":["../../src/management/check-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEjC,KAAK,UAAU,gBAAgB;IAC7B,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC;IAE1D,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACnC,OAAO,CAAC,GAAG,CAAC,yBAAyB;QACrC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAE1C,yGAAyG;IACzG,iFAAiF;IACjF,yDAAyD;IAEzD,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;QACrC,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,WAAW,IAAI,OAAO,EAAE,kCAAkC;KACxE,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,MAAM,2BAA2B,CAAC,CAAC;QAE3E,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAE5C,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=count-brightline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count-brightline.d.ts","sourceRoot":"","sources":["../../src/management/count-brightline.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import * as contentful from 'contentful';
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+ const SPACE_ID = '96gdpqkm7elu';
5
+ const ENV_ID = 'cleanup';
6
+ async function countEntries() {
7
+ console.log(`Counting entries in: ${SPACE_ID} / ${ENV_ID}`);
8
+ const accessToken = process.env.CONTENTFUL_ACCESS_TOKEN || process.env.CONTENTFUL_DELIVERY_TOKEN;
9
+ if (!accessToken) {
10
+ console.error('Error: CONTENTFUL_ACCESS_TOKEN is not set.');
11
+ process.exit(1);
12
+ }
13
+ const client = contentful.createClient({
14
+ space: SPACE_ID,
15
+ environment: ENV_ID,
16
+ accessToken: accessToken,
17
+ });
18
+ try {
19
+ const typesToCount = [
20
+ 'contentPage', 'blogPost', 'resourcePost', 'ctaCard', 'hero',
21
+ 'videoModule', 'quote', 'textSection', 'genericModule', 'iconAndCopy',
22
+ 'statisticWithSource', 'form', 'cards', 'carousel', 'itemGrid',
23
+ 'featuredPostSection', 'teamMemberGrid', 'teamMember', 'author',
24
+ 'therapist', 'imageAndAltText', 'button'
25
+ ];
26
+ console.log('--- Entry Counts ---');
27
+ for (const type of typesToCount) {
28
+ const entries = await client.getEntries({ content_type: type, limit: 0 });
29
+ console.log(`${type}: ${entries.total}`);
30
+ }
31
+ }
32
+ catch (error) {
33
+ console.error('Error occurred:', error);
34
+ }
35
+ }
36
+ countEntries();
37
+ //# sourceMappingURL=count-brightline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count-brightline.js","sourceRoot":"","sources":["../../src/management/count-brightline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,MAAM,GAAG,SAAS,CAAC;AAEzB,KAAK,UAAU,YAAY;IACzB,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAEjG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;QACrC,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,YAAY,GAAG;YACjB,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;YAC5D,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa;YACrE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU;YAC9D,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ;YAC/D,WAAW,EAAE,iBAAiB,EAAE,QAAQ;SAC3C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,YAAY,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cross-check-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-check-migration.d.ts","sourceRoot":"","sources":["../../src/management/cross-check-migration.ts"],"names":[],"mappings":""}
@@ -0,0 +1,212 @@
1
+ import path from 'node:path';
2
+ import contentfulManagement from 'contentful-management';
3
+ import dotenv from 'dotenv';
4
+ // Load environment variables
5
+ dotenv.config({ path: path.resolve(process.cwd(), 'apps/example-brightline/.env.local') });
6
+ const SPACE_ID = '96gdpqkm7elu';
7
+ const SOURCE_ENV_ID = 'cleanup';
8
+ // --- Mapping Definitions (Source Content Type -> Array of Mapped Source Field IDs) ---
9
+ // Derived from packages/project-build/src/management/migrate-brightline.ts
10
+ const MAPPED_SOURCE_FIELDS = {
11
+ contentPage: [
12
+ 'title',
13
+ 'path',
14
+ 'slug',
15
+ 'description',
16
+ 'adminLabel',
17
+ 'socialImage',
18
+ 'contents',
19
+ 'indexed',
20
+ ],
21
+ page: [
22
+ 'title',
23
+ 'path',
24
+ 'slug',
25
+ 'description',
26
+ 'adminLabel',
27
+ 'socialImage',
28
+ 'contents',
29
+ 'indexed',
30
+ ],
31
+ blogPost: [
32
+ 'title',
33
+ 'teaserTitle',
34
+ 'slug',
35
+ 'publishDate',
36
+ 'author',
37
+ 'image',
38
+ 'thumbnail',
39
+ 'body',
40
+ 'metaContent',
41
+ 'featuredImage',
42
+ ],
43
+ resourcePost: [
44
+ 'title',
45
+ 'teaserTitle',
46
+ 'slug',
47
+ 'publishDate',
48
+ 'author',
49
+ 'image',
50
+ 'thumbnail',
51
+ 'body',
52
+ 'metaContent',
53
+ 'featuredImage',
54
+ ],
55
+ ctaCard: [
56
+ 'cardType',
57
+ 'title',
58
+ 'eyebrow',
59
+ 'subtitle',
60
+ 'copy',
61
+ 'adminLabel',
62
+ 'media',
63
+ 'image',
64
+ 'buttons',
65
+ 'anchor',
66
+ 'backgroundColour',
67
+ 'textColour',
68
+ ],
69
+ hero: ['title', 'adminLabel', 'heroImage'], // Identified as incomplete in analysis
70
+ videoModule: ['title', 'adminTitle', 'videoUrl', 'videoWidth', 'videoAsset', 'copy'],
71
+ quote: [
72
+ 'copy',
73
+ 'adminLabel',
74
+ 'authorName',
75
+ 'authorTitle',
76
+ 'backgroundColour',
77
+ 'textColour',
78
+ 'image',
79
+ ],
80
+ textSection: ['copy', 'adminLabel'],
81
+ imageAndAltText: ['adminLabel', 'image'],
82
+ cards: [
83
+ 'type',
84
+ 'adminLabel',
85
+ 'title',
86
+ 'cards',
87
+ 'links',
88
+ 'backgroundColour',
89
+ 'copy',
90
+ 'eyebrow',
91
+ 'subtitle',
92
+ 'footnote',
93
+ ],
94
+ carousel: ['type', 'adminLabel', 'title', 'items', 'links', 'media', 'backgroundColour'],
95
+ itemGrid: ['type', 'adminLabel', 'title', 'items', 'links', 'footnote', 'backgroundColour'],
96
+ teamMemberGrid: ['type', 'adminLabel', 'title', 'teamMembers', 'links', 'backgroundColour'],
97
+ featuredPostSection: ['type', 'adminLabel', 'title', 'posts', 'links', 'backgroundColour'],
98
+ teamMember: ['name', 'role', 'bio', 'photo', 'bylines', 'portraitImage'],
99
+ author: ['name', 'bio', 'image'],
100
+ therapist: ['name', 'qualifications', 'bio', 'portrait'],
101
+ button: ['label', 'adminLabel', 'internalDestination', 'externalDestination'],
102
+ form: ['name', 'adminLabel', 'formName'],
103
+ genericModule: ['codeId', 'adminLabel'],
104
+ };
105
+ // Target Type Descriptions for reporting context
106
+ const TARGET_TYPE_DESCRIPTIONS = {
107
+ contentPage: 'Page',
108
+ page: 'Page',
109
+ blogPost: 'Article (Blog)',
110
+ resourcePost: 'Article (Resource)',
111
+ ctaCard: 'Component: CtaCard',
112
+ hero: 'Component: Hero',
113
+ videoModule: 'Component: Video',
114
+ quote: 'Component: Quote',
115
+ textSection: 'Component: Text',
116
+ imageAndAltText: 'Media',
117
+ cards: 'Collection: Cards',
118
+ carousel: 'Collection: Carousel',
119
+ itemGrid: 'Collection: Grid',
120
+ teamMemberGrid: 'Collection: Team Grid',
121
+ featuredPostSection: 'Collection: Featured Posts',
122
+ teamMember: 'Person: Team Member',
123
+ author: 'Person: Author',
124
+ therapist: 'Person: Therapist',
125
+ button: 'Link',
126
+ form: 'ExternalComponent: Form',
127
+ genericModule: 'ExternalComponent: Generic',
128
+ };
129
+ async function run() {
130
+ console.log('--- Cross-Check Migration Script ---');
131
+ const accessToken = process.env.CONTENTFUL_MANAGEMENT_TOKEN || process.env.CONTENTFUL_ACCESS_TOKEN;
132
+ if (!accessToken) {
133
+ console.error('Error: CONTENTFUL_MANAGEMENT_TOKEN or CONTENTFUL_ACCESS_TOKEN not found.');
134
+ console.log('Make sure you are running from the workspace root and apps/example-brightline/.env.local exists.');
135
+ process.exit(1);
136
+ }
137
+ const client = contentfulManagement.createClient({ accessToken });
138
+ console.log(`Connecting to Space: ${SPACE_ID}, Environment: ${SOURCE_ENV_ID}`);
139
+ const space = await client.getSpace(SPACE_ID);
140
+ const environment = await space.getEnvironment(SOURCE_ENV_ID);
141
+ // 1. Fetch all published entries
142
+ console.log('Fetching all published entries...');
143
+ let allEntries = [];
144
+ let skip = 0;
145
+ const limit = 1000;
146
+ while (true) {
147
+ const response = await environment.getPublishedEntries({ limit, skip });
148
+ allEntries = allEntries.concat(response.items);
149
+ skip += limit;
150
+ console.log(`Fetched ${allEntries.length} entries...`);
151
+ if (response.items.length < limit)
152
+ break;
153
+ }
154
+ console.log(`Total entries: ${allEntries.length}`);
155
+ // 2. Analyze usage
156
+ // Map: SourceContentType -> FieldName -> Count
157
+ const usageMap = {};
158
+ for (const entry of allEntries) {
159
+ const contentTypeId = entry.sys.contentType.sys.id;
160
+ // Initialize map for this content type if needed
161
+ if (!usageMap[contentTypeId]) {
162
+ usageMap[contentTypeId] = {};
163
+ }
164
+ // Check fields
165
+ for (const fieldId of Object.keys(entry.fields)) {
166
+ // Check if field has value for 'en-US' or any locale
167
+ const fieldVal = entry.fields[fieldId];
168
+ // Simply check if it's truthy (has data)
169
+ const hasValue = Object.keys(fieldVal).length > 0;
170
+ if (hasValue) {
171
+ usageMap[contentTypeId][fieldId] = (usageMap[contentTypeId][fieldId] || 0) + 1;
172
+ }
173
+ }
174
+ }
175
+ // 3. Generate Report
176
+ console.log('\n=== FIELD USAGE & MIGRATION CHECK ===\n');
177
+ const sortedContentTypes = Object.keys(usageMap).sort();
178
+ for (const contentTypeId of sortedContentTypes) {
179
+ // Only report on types that are in our mapping list (or warn if unknown)
180
+ const targetDesc = TARGET_TYPE_DESCRIPTIONS[contentTypeId];
181
+ const mappedFields = MAPPED_SOURCE_FIELDS[contentTypeId];
182
+ if (!mappedFields) {
183
+ continue;
184
+ }
185
+ console.log(`SOURCE: ${contentTypeId} --> TARGET: ${targetDesc}`);
186
+ console.log('---------------------------------------------------------');
187
+ const usedFields = usageMap[contentTypeId];
188
+ const sortedUsedFields = Object.keys(usedFields).sort();
189
+ let hasMissing = false;
190
+ for (const fieldId of sortedUsedFields) {
191
+ const count = usedFields[fieldId];
192
+ const isMapped = mappedFields.includes(fieldId);
193
+ let status = '[OK] Mapped';
194
+ if (!isMapped) {
195
+ status = '❌ MISSING IN MIGRATION';
196
+ hasMissing = true;
197
+ }
198
+ console.log(`${isMapped ? ' ' : '! '}${fieldId.padEnd(25)} : ${count.toString().padEnd(5)} uses ${status}`);
199
+ }
200
+ if (hasMissing) {
201
+ console.log('Has missing\n');
202
+ }
203
+ // Also list mapped fields that ARE NOT used? (Optional, but good for cleanup)
204
+ const unusedMapped = mappedFields.filter((f) => !usedFields[f]);
205
+ if (unusedMapped.length > 0) {
206
+ console.log(` [Info] Mapped but unused: ${unusedMapped.join(', ')}`);
207
+ }
208
+ console.log('\n');
209
+ }
210
+ }
211
+ run().catch(console.error);
212
+ //# sourceMappingURL=cross-check-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-check-migration.js","sourceRoot":"","sources":["../../src/management/cross-check-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=discovery-brightlife.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-brightlife.d.ts","sourceRoot":"","sources":["../../src/management/discovery-brightlife.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import * as contentful from 'contentful';
2
+ import dotenv from 'dotenv';
3
+ // Load environment variables from .env file in project root or current package
4
+ dotenv.config();
5
+ const SPACE_ID = 'c27ds9epot4n';
6
+ const ENV_ID = 'master';
7
+ // These IDs are guesses based on user input, we will also list all to confirm
8
+ const TARGET_IDS = ['contentPage', 'blogPost', 'ctaCard', 'cards', 'page', 'article', 'component', 'collection'];
9
+ async function runDiscovery() {
10
+ console.log(`Connecting to Space: ${SPACE_ID}, Environment: ${ENV_ID} (using CDA)`);
11
+ // Try to find the token
12
+ const accessToken = process.env.CONTENTFUL_ACCESS_TOKEN || process.env.CONTENTFUL_DELIVERY_TOKEN;
13
+ if (!accessToken) {
14
+ console.error('Error: CONTENTFUL_ACCESS_TOKEN is not set in environment variables.');
15
+ console.error('Please export CONTENTFUL_ACCESS_TOKEN=... before running this script.');
16
+ process.exit(1);
17
+ }
18
+ const client = contentful.createClient({
19
+ space: SPACE_ID,
20
+ environment: ENV_ID,
21
+ accessToken: accessToken,
22
+ });
23
+ try {
24
+ console.log('Fetching content types...');
25
+ const contentTypes = await client.getContentTypes();
26
+ console.log(`Found ${contentTypes.items.length} content types.`);
27
+ console.log('\n--- ALL CONTENT TYPES ---');
28
+ contentTypes.items.forEach((ct) => {
29
+ console.log(`- ${ct.name} (id: ${ct.sys.id})`);
30
+ });
31
+ console.log('\n--- DETAILED SCHEMA ANALYSIS ---');
32
+ // Filter for relevant types (loose match on ID or Name)
33
+ const relevantTypes = contentTypes.items.filter(ct => {
34
+ const lowerId = ct.sys.id.toLowerCase();
35
+ const lowerName = ct.name.toLowerCase();
36
+ return TARGET_IDS.some(target => lowerId.includes(target.toLowerCase()) || lowerName.includes(target.toLowerCase()));
37
+ });
38
+ for (const ct of relevantTypes) {
39
+ console.log(`\n=== ${ct.name} (${ct.sys.id}) ===`);
40
+ console.log(`Description: ${ct.description || 'N/A'}`);
41
+ console.log('Fields:');
42
+ ct.fields.forEach(field => {
43
+ let details = ` - ${field.id} (${field.type})`;
44
+ if (field.required)
45
+ details += ' [Required]';
46
+ if (field.localized)
47
+ details += ' [Localized]';
48
+ if (field.linkType)
49
+ details += ` -> ${field.linkType}`;
50
+ if (field.type === 'Array' && field.items) {
51
+ details += ` of ${field.items.type}`;
52
+ if (field.items.linkType)
53
+ details += ` -> ${field.items.linkType}`;
54
+ if (field.items.validations) {
55
+ const linkContentTypeValidation = field.items.validations.find((v) => v.linkContentType);
56
+ if (linkContentTypeValidation && linkContentTypeValidation.linkContentType) {
57
+ details += ` (Allowed: ${linkContentTypeValidation.linkContentType.join(', ')})`;
58
+ }
59
+ }
60
+ }
61
+ // Check for validations on the field itself
62
+ if (field.validations) {
63
+ const linkContentTypeValidation = field.validations.find((v) => v.linkContentType);
64
+ if (linkContentTypeValidation && linkContentTypeValidation.linkContentType) {
65
+ details += ` (Allowed: ${linkContentTypeValidation.linkContentType.join(', ')})`;
66
+ }
67
+ }
68
+ console.log(details);
69
+ });
70
+ }
71
+ }
72
+ catch (error) {
73
+ console.error('Error occurred:', error);
74
+ }
75
+ }
76
+ // Execute
77
+ runDiscovery().catch(console.error);
78
+ //# sourceMappingURL=discovery-brightlife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-brightlife.js","sourceRoot":"","sources":["../../src/management/discovery-brightlife.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=discovery-brightline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-brightline.d.ts","sourceRoot":"","sources":["../../src/management/discovery-brightline.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import * as contentful from 'contentful';
2
+ import dotenv from 'dotenv';
3
+ // Load environment variables from .env file in project root or current package
4
+ dotenv.config();
5
+ const SPACE_ID = '96gdpqkm7elu';
6
+ const ENV_ID = 'master';
7
+ async function runDiscovery() {
8
+ console.log(`Connecting to Space: ${SPACE_ID}, Environment: ${ENV_ID}`);
9
+ const accessToken = process.env.CONTENTFUL_ACCESS_TOKEN || process.env.CONTENTFUL_DELIVERY_TOKEN;
10
+ if (!accessToken) {
11
+ console.error('Error: CONTENTFUL_ACCESS_TOKEN is not set in environment variables.');
12
+ process.exit(1);
13
+ }
14
+ const client = contentful.createClient({
15
+ space: SPACE_ID,
16
+ environment: ENV_ID,
17
+ accessToken: accessToken,
18
+ });
19
+ try {
20
+ console.log('Fetching content types...');
21
+ const contentTypes = await client.getContentTypes();
22
+ console.log(`Found ${contentTypes.items.length} content types.`);
23
+ console.log('\n--- ALL CONTENT TYPES ---');
24
+ contentTypes.items.forEach((ct) => {
25
+ console.log(`- ${ct.name} (id: ${ct.sys.id})`);
26
+ });
27
+ console.log('\n--- DETAILED SCHEMA ANALYSIS ---');
28
+ for (const ct of contentTypes.items) {
29
+ console.log(`\n=== ${ct.name} (${ct.sys.id}) ===`);
30
+ console.log(`Description: ${ct.description || 'N/A'}`);
31
+ console.log('Fields:');
32
+ ct.fields.forEach(field => {
33
+ let details = ` - ${field.id} (${field.type})`;
34
+ if (field.required)
35
+ details += ' [Required]';
36
+ if (field.localized)
37
+ details += ' [Localized]';
38
+ if (field.linkType)
39
+ details += ` -> ${field.linkType}`;
40
+ if (field.type === 'Array' && field.items) {
41
+ details += ` of ${field.items.type}`;
42
+ if (field.items.linkType)
43
+ details += ` -> ${field.items.linkType}`;
44
+ if (field.items.validations) {
45
+ const linkContentTypeValidation = field.items.validations.find((v) => v.linkContentType);
46
+ if (linkContentTypeValidation && linkContentTypeValidation.linkContentType) {
47
+ details += ` (Allowed: ${linkContentTypeValidation.linkContentType.join(', ')})`;
48
+ }
49
+ }
50
+ }
51
+ // Check for validations on the field itself
52
+ if (field.validations) {
53
+ const linkContentTypeValidation = field.validations.find((v) => v.linkContentType);
54
+ if (linkContentTypeValidation && linkContentTypeValidation.linkContentType) {
55
+ details += ` (Allowed: ${linkContentTypeValidation.linkContentType.join(', ')})`;
56
+ }
57
+ }
58
+ console.log(details);
59
+ });
60
+ }
61
+ }
62
+ catch (error) {
63
+ console.error('Error occurred:', error);
64
+ }
65
+ }
66
+ // Execute
67
+ runDiscovery().catch(console.error);
68
+ //# sourceMappingURL=discovery-brightline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-brightline.js","sourceRoot":"","sources":["../../src/management/discovery-brightline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inspect-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-target.d.ts","sourceRoot":"","sources":["../../src/management/inspect-target.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import * as contentful from 'contentful';
2
+ import dotenv from 'dotenv';
3
+ // Load environment variables from .env file in project root or current package
4
+ dotenv.config();
5
+ const SPACE_ID = '96gdpqkm7elu';
6
+ const ENV_ID = 'production-2026';
7
+ const TARGET_TYPES = ['page', 'article', 'component', 'collection', 'link', 'media', 'person'];
8
+ async function inspectTargetSchema() {
9
+ console.log(`Inspecting schema in: ${SPACE_ID} / ${ENV_ID}`);
10
+ const accessToken = process.env.CONTENTFUL_ACCESS_TOKEN || process.env.CONTENTFUL_DELIVERY_TOKEN || process.env.CONTENTFUL_MANAGEMENT_TOKEN;
11
+ const client = contentful.createClient({
12
+ space: SPACE_ID,
13
+ environment: ENV_ID,
14
+ accessToken: accessToken || 'dummy'
15
+ });
16
+ try {
17
+ const contentTypes = await client.getContentTypes();
18
+ console.log('\n--- TARGET SCHEMA FIELDS ---');
19
+ for (const ct of contentTypes.items) {
20
+ if (TARGET_TYPES.includes(ct.sys.id)) {
21
+ console.log(`\n=== ${ct.name} (${ct.sys.id}) ===`);
22
+ console.log('Fields:');
23
+ ct.fields.forEach(field => {
24
+ let details = ` - ${field.id} (${field.type})`;
25
+ if (field.required)
26
+ details += ' [Required]';
27
+ if (field.localized)
28
+ details += ' [Localized]';
29
+ if (field.type === 'Link') {
30
+ details += ` [linkType: ${field.linkType}]`;
31
+ }
32
+ if (field.validations) {
33
+ const linkContentType = field.validations.find((v) => v.linkContentType);
34
+ if (linkContentType && linkContentType.linkContentType) {
35
+ details += ` [validTypes: ${linkContentType.linkContentType.join(', ')}]`;
36
+ }
37
+ }
38
+ console.log(details);
39
+ });
40
+ }
41
+ }
42
+ }
43
+ catch (error) {
44
+ console.error('Error:', error);
45
+ }
46
+ }
47
+ inspectTargetSchema();
48
+ //# sourceMappingURL=inspect-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-target.js","sourceRoot":"","sources":["../../src/management/inspect-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEjC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE/F,KAAK,UAAU,mBAAmB;IAChC,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAE5I,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;QACrC,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,WAAW,IAAI,OAAO;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QAEpD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAE9C,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,IAAI,OAAO,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC;oBAChD,IAAI,KAAK,CAAC,QAAQ;wBAAE,OAAO,IAAI,aAAa,CAAC;oBAC7C,IAAI,KAAK,CAAC,SAAS;wBAAE,OAAO,IAAI,cAAc,CAAC;oBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACxB,OAAO,IAAI,eAAe,KAAK,CAAC,QAAQ,GAAG,CAAC;oBAChD,CAAC;oBACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACrB,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;wBAC9E,IAAI,eAAe,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC;4BACrD,OAAO,IAAI,iBAAiB,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC9E,CAAC;oBACJ,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migrate-brightlife.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-brightlife.d.ts","sourceRoot":"","sources":["../../src/management/migrate-brightlife.ts"],"names":[],"mappings":""}