@actuate-media/cms-core 0.7.0 → 0.9.0

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 (82) hide show
  1. package/dist/api/handlers.d.ts.map +1 -1
  2. package/dist/api/handlers.js +530 -0
  3. package/dist/api/handlers.js.map +1 -1
  4. package/dist/config/types.d.ts +3 -0
  5. package/dist/config/types.d.ts.map +1 -1
  6. package/dist/config/types.js +0 -1
  7. package/dist/config/types.js.map +1 -1
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/page-builder/__tests__/a11y-fix.test.d.ts +2 -0
  13. package/dist/page-builder/__tests__/a11y-fix.test.d.ts.map +1 -0
  14. package/dist/page-builder/__tests__/a11y-fix.test.js +246 -0
  15. package/dist/page-builder/__tests__/a11y-fix.test.js.map +1 -0
  16. package/dist/page-builder/__tests__/blocks.test.d.ts +2 -0
  17. package/dist/page-builder/__tests__/blocks.test.d.ts.map +1 -0
  18. package/dist/page-builder/__tests__/blocks.test.js +87 -0
  19. package/dist/page-builder/__tests__/blocks.test.js.map +1 -0
  20. package/dist/page-builder/__tests__/design-scorer.test.d.ts +2 -0
  21. package/dist/page-builder/__tests__/design-scorer.test.d.ts.map +1 -0
  22. package/dist/page-builder/__tests__/design-scorer.test.js +268 -0
  23. package/dist/page-builder/__tests__/design-scorer.test.js.map +1 -0
  24. package/dist/page-builder/__tests__/schema.test.d.ts +2 -0
  25. package/dist/page-builder/__tests__/schema.test.d.ts.map +1 -0
  26. package/dist/page-builder/__tests__/schema.test.js +191 -0
  27. package/dist/page-builder/__tests__/schema.test.js.map +1 -0
  28. package/dist/page-builder/__tests__/seo-analyzer.test.d.ts +2 -0
  29. package/dist/page-builder/__tests__/seo-analyzer.test.d.ts.map +1 -0
  30. package/dist/page-builder/__tests__/seo-analyzer.test.js +332 -0
  31. package/dist/page-builder/__tests__/seo-analyzer.test.js.map +1 -0
  32. package/dist/page-builder/__tests__/tree.test.d.ts +2 -0
  33. package/dist/page-builder/__tests__/tree.test.d.ts.map +1 -0
  34. package/dist/page-builder/__tests__/tree.test.js +257 -0
  35. package/dist/page-builder/__tests__/tree.test.js.map +1 -0
  36. package/dist/page-builder/a11y-fix.d.ts +20 -0
  37. package/dist/page-builder/a11y-fix.d.ts.map +1 -0
  38. package/dist/page-builder/a11y-fix.js +182 -0
  39. package/dist/page-builder/a11y-fix.js.map +1 -0
  40. package/dist/page-builder/ai-pipeline.d.ts +43 -0
  41. package/dist/page-builder/ai-pipeline.d.ts.map +1 -0
  42. package/dist/page-builder/ai-pipeline.js +167 -0
  43. package/dist/page-builder/ai-pipeline.js.map +1 -0
  44. package/dist/page-builder/blocks.d.ts +10 -0
  45. package/dist/page-builder/blocks.d.ts.map +1 -0
  46. package/dist/page-builder/blocks.js +252 -0
  47. package/dist/page-builder/blocks.js.map +1 -0
  48. package/dist/page-builder/design-scorer.d.ts +27 -0
  49. package/dist/page-builder/design-scorer.d.ts.map +1 -0
  50. package/dist/page-builder/design-scorer.js +404 -0
  51. package/dist/page-builder/design-scorer.js.map +1 -0
  52. package/dist/page-builder/index.d.ts +18 -0
  53. package/dist/page-builder/index.d.ts.map +1 -0
  54. package/dist/page-builder/index.js +20 -0
  55. package/dist/page-builder/index.js.map +1 -0
  56. package/dist/page-builder/schema.d.ts +107 -0
  57. package/dist/page-builder/schema.d.ts.map +1 -0
  58. package/dist/page-builder/schema.js +90 -0
  59. package/dist/page-builder/schema.js.map +1 -0
  60. package/dist/page-builder/seo-analyzer.d.ts +61 -0
  61. package/dist/page-builder/seo-analyzer.d.ts.map +1 -0
  62. package/dist/page-builder/seo-analyzer.js +582 -0
  63. package/dist/page-builder/seo-analyzer.js.map +1 -0
  64. package/dist/page-builder/templates.d.ts +9 -0
  65. package/dist/page-builder/templates.d.ts.map +1 -0
  66. package/dist/page-builder/templates.js +401 -0
  67. package/dist/page-builder/templates.js.map +1 -0
  68. package/dist/page-builder/tree.d.ts +17 -0
  69. package/dist/page-builder/tree.d.ts.map +1 -0
  70. package/dist/page-builder/tree.js +160 -0
  71. package/dist/page-builder/tree.js.map +1 -0
  72. package/dist/page-builder/types.d.ts +112 -0
  73. package/dist/page-builder/types.d.ts.map +1 -0
  74. package/dist/page-builder/types.js +4 -0
  75. package/dist/page-builder/types.js.map +1 -0
  76. package/dist/page-builder/validate.d.ts +6 -0
  77. package/dist/page-builder/validate.d.ts.map +1 -0
  78. package/dist/page-builder/validate.js +87 -0
  79. package/dist/page-builder/validate.js.map +1 -0
  80. package/package.json +6 -1
  81. package/prisma/migrations/0006_page_builder/migration.sql +38 -0
  82. package/prisma/schema.prisma +31 -0
@@ -0,0 +1,112 @@
1
+ import type { FieldDefinition } from '../config/types.js';
2
+ export interface SectionSettings {
3
+ background?: string;
4
+ backgroundImage?: string;
5
+ backgroundGradient?: string;
6
+ paddingTop?: string;
7
+ paddingBottom?: string;
8
+ marginTop?: string;
9
+ marginBottom?: string;
10
+ visibility?: 'visible' | 'hidden';
11
+ htmlId?: string;
12
+ htmlClass?: string;
13
+ }
14
+ export interface ContainerSettings {
15
+ maxWidth?: string;
16
+ alignment?: 'left' | 'center' | 'right';
17
+ padding?: string;
18
+ }
19
+ export interface RowSettings {
20
+ gap?: string;
21
+ verticalAlign?: 'top' | 'center' | 'bottom' | 'stretch';
22
+ reverseOnMobile?: boolean;
23
+ wrapOnMobile?: boolean;
24
+ }
25
+ export interface ColumnSettings {
26
+ width: number;
27
+ verticalAlign?: 'top' | 'center' | 'bottom';
28
+ padding?: string;
29
+ background?: string;
30
+ }
31
+ export interface BlockSettings {
32
+ blockType: string;
33
+ variant?: string;
34
+ }
35
+ export interface SavedSectionRefSettings {
36
+ refId: string;
37
+ }
38
+ export interface ResponsiveOverrides {
39
+ mobile?: Record<string, unknown>;
40
+ tablet?: Record<string, unknown>;
41
+ }
42
+ interface BaseNode {
43
+ id: string;
44
+ responsive?: ResponsiveOverrides;
45
+ }
46
+ export interface PageNode extends BaseNode {
47
+ type: 'page';
48
+ children: (SectionNode | SavedSectionRefNode)[];
49
+ }
50
+ export interface SectionNode extends BaseNode {
51
+ type: 'section';
52
+ settings: SectionSettings;
53
+ children: (ContainerNode | RowNode)[];
54
+ }
55
+ export interface ContainerNode extends BaseNode {
56
+ type: 'container';
57
+ settings: ContainerSettings;
58
+ children: RowNode[];
59
+ }
60
+ export interface RowNode extends BaseNode {
61
+ type: 'row';
62
+ settings: RowSettings;
63
+ children: ColumnNode[];
64
+ }
65
+ export interface ColumnNode extends BaseNode {
66
+ type: 'column';
67
+ settings: ColumnSettings;
68
+ children: (BlockNode | ContainerNode)[];
69
+ }
70
+ export interface BlockNode extends BaseNode {
71
+ type: 'block';
72
+ settings: BlockSettings;
73
+ data: Record<string, unknown>;
74
+ }
75
+ export interface SavedSectionRefNode extends BaseNode {
76
+ type: 'savedSectionRef';
77
+ settings: SavedSectionRefSettings;
78
+ }
79
+ export type BuilderNode = PageNode | SectionNode | ContainerNode | RowNode | ColumnNode | BlockNode | SavedSectionRefNode;
80
+ export type NodeType = BuilderNode['type'];
81
+ export interface VariantDefinition {
82
+ name: string;
83
+ label: string;
84
+ description: string;
85
+ thumbnail?: string;
86
+ defaultSettings?: Record<string, unknown>;
87
+ defaultData?: Record<string, unknown>;
88
+ }
89
+ export interface BlockTypeDefinition {
90
+ type: string;
91
+ label: string;
92
+ icon: string;
93
+ description?: string;
94
+ variants: VariantDefinition[];
95
+ fields: Record<string, FieldDefinition>;
96
+ defaultData?: Record<string, unknown>;
97
+ }
98
+ export interface PreviewTheme {
99
+ fontFamily?: string;
100
+ headingFontFamily?: string;
101
+ primaryColor?: string;
102
+ secondaryColor?: string;
103
+ borderRadius?: string;
104
+ }
105
+ export interface PageBuilderConfig {
106
+ blocks?: BlockTypeDefinition[];
107
+ previewTheme?: PreviewTheme;
108
+ }
109
+ export type ParentNode = PageNode | SectionNode | ContainerNode | RowNode | ColumnNode;
110
+ export declare function hasChildren(node: BuilderNode): node is ParentNode;
111
+ export {};
112
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/page-builder/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export function hasChildren(node) {
2
+ return node.type !== 'block' && node.type !== 'savedSectionRef';
3
+ }
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/page-builder/types.ts"],"names":[],"mappings":"AAuJA,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAA;AACjE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface TreeValidationResult {
2
+ valid: boolean;
3
+ errors: string[];
4
+ }
5
+ export declare function validateTree(tree: unknown): TreeValidationResult;
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/page-builder/validate.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CA8BhE"}
@@ -0,0 +1,87 @@
1
+ import { pageNodeSchema } from './schema.js';
2
+ const MAX_DEPTH = 9;
3
+ export function validateTree(tree) {
4
+ const errors = [];
5
+ if (tree === null ||
6
+ tree === undefined ||
7
+ typeof tree !== 'object' ||
8
+ !('type' in tree) ||
9
+ tree.type !== 'page') {
10
+ errors.push('Root node must be of type "page"');
11
+ return { valid: false, errors };
12
+ }
13
+ const result = pageNodeSchema.safeParse(tree);
14
+ if (!result.success) {
15
+ for (const issue of result.error.issues) {
16
+ const path = issue.path.length > 0 ? ` at ${issue.path.join('.')}` : '';
17
+ errors.push(`${issue.message}${path}`);
18
+ }
19
+ return { valid: false, errors };
20
+ }
21
+ const pageNode = tree;
22
+ checkColumnWidths(pageNode, errors);
23
+ checkDepth(pageNode, 1, errors);
24
+ checkBlockNoChildren(pageNode, errors);
25
+ checkNestingRules(pageNode, errors);
26
+ return { valid: errors.length === 0, errors };
27
+ }
28
+ function checkColumnWidths(node, errors) {
29
+ if (!node || typeof node !== 'object')
30
+ return;
31
+ const n = node;
32
+ if (n.type === 'row' && Array.isArray(n.children)) {
33
+ const columns = n.children;
34
+ const sum = columns.reduce((acc, col) => acc + (col.settings?.width ?? 0), 0);
35
+ if (sum !== 12) {
36
+ errors.push(`Row "${n.id}" columns sum to ${sum}, expected 12`);
37
+ }
38
+ }
39
+ if ('children' in n && Array.isArray(n.children)) {
40
+ for (const child of n.children) {
41
+ checkColumnWidths(child, errors);
42
+ }
43
+ }
44
+ }
45
+ function checkDepth(node, depth, errors) {
46
+ if (!node || typeof node !== 'object')
47
+ return;
48
+ const n = node;
49
+ if (depth > MAX_DEPTH) {
50
+ errors.push(`Maximum nesting depth of ${MAX_DEPTH} exceeded at node "${n.id}"`);
51
+ return;
52
+ }
53
+ if ('children' in n && Array.isArray(n.children)) {
54
+ for (const child of n.children) {
55
+ checkDepth(child, depth + 1, errors);
56
+ }
57
+ }
58
+ }
59
+ function checkBlockNoChildren(node, errors) {
60
+ if (!node || typeof node !== 'object')
61
+ return;
62
+ const n = node;
63
+ if (n.type === 'block' &&
64
+ 'children' in n &&
65
+ Array.isArray(n.children) &&
66
+ n.children.length > 0) {
67
+ errors.push(`Block node "${n.id}" must not have children`);
68
+ }
69
+ if ('children' in n && Array.isArray(n.children)) {
70
+ for (const child of n.children) {
71
+ checkBlockNoChildren(child, errors);
72
+ }
73
+ }
74
+ }
75
+ function checkNestingRules(node, errors) {
76
+ if (!node || typeof node !== 'object')
77
+ return;
78
+ const n = node;
79
+ if (n.type === 'page' && Array.isArray(n.children)) {
80
+ for (const child of n.children) {
81
+ if (child.type !== 'section' && child.type !== 'savedSectionRef') {
82
+ errors.push(`Page node can only contain section or savedSectionRef children, found "${child.type}" ("${child.id}")`);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/page-builder/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-core",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -49,6 +49,11 @@
49
49
  "import": "./dist/api/index.js",
50
50
  "default": "./dist/api/index.js"
51
51
  },
52
+ "./page-builder": {
53
+ "types": "./dist/page-builder/index.d.ts",
54
+ "import": "./dist/page-builder/index.js",
55
+ "default": "./dist/page-builder/index.js"
56
+ },
52
57
  "./generated/client": {
53
58
  "types": "./generated/client.d.ts",
54
59
  "import": "./generated/client.js",
@@ -0,0 +1,38 @@
1
+ -- CreateTable
2
+ CREATE TABLE "actuate_page_templates" (
3
+ "id" TEXT NOT NULL,
4
+ "name" TEXT NOT NULL,
5
+ "description" TEXT,
6
+ "category" TEXT NOT NULL DEFAULT 'content',
7
+ "tree" JSONB NOT NULL,
8
+ "thumbnail" TEXT,
9
+ "builtIn" BOOLEAN NOT NULL DEFAULT false,
10
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
11
+ "updatedAt" TIMESTAMP(3) NOT NULL,
12
+
13
+ CONSTRAINT "actuate_page_templates_pkey" PRIMARY KEY ("id")
14
+ );
15
+
16
+ -- CreateTable
17
+ CREATE TABLE "actuate_saved_sections" (
18
+ "id" TEXT NOT NULL,
19
+ "name" TEXT NOT NULL,
20
+ "description" TEXT,
21
+ "category" TEXT NOT NULL DEFAULT 'content',
22
+ "tree" JSONB NOT NULL,
23
+ "thumbnail" TEXT,
24
+ "usageCount" INTEGER NOT NULL DEFAULT 0,
25
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
26
+ "updatedAt" TIMESTAMP(3) NOT NULL,
27
+
28
+ CONSTRAINT "actuate_saved_sections_pkey" PRIMARY KEY ("id")
29
+ );
30
+
31
+ -- CreateIndex
32
+ CREATE INDEX "actuate_page_templates_category_idx" ON "actuate_page_templates"("category");
33
+
34
+ -- CreateIndex
35
+ CREATE INDEX "actuate_page_templates_builtIn_idx" ON "actuate_page_templates"("builtIn");
36
+
37
+ -- CreateIndex
38
+ CREATE INDEX "actuate_saved_sections_category_idx" ON "actuate_saved_sections"("category");
@@ -516,3 +516,34 @@ model ScriptTag {
516
516
  @@index([placement])
517
517
  @@map("actuate_script_tags")
518
518
  }
519
+
520
+ model PageTemplate {
521
+ id String @id @default(cuid())
522
+ name String
523
+ description String?
524
+ category String @default("content")
525
+ tree Json
526
+ thumbnail String?
527
+ builtIn Boolean @default(false)
528
+ createdAt DateTime @default(now())
529
+ updatedAt DateTime @updatedAt
530
+
531
+ @@index([category])
532
+ @@index([builtIn])
533
+ @@map("actuate_page_templates")
534
+ }
535
+
536
+ model SavedSection {
537
+ id String @id @default(cuid())
538
+ name String
539
+ description String?
540
+ category String @default("content")
541
+ tree Json
542
+ thumbnail String?
543
+ usageCount Int @default(0)
544
+ createdAt DateTime @default(now())
545
+ updatedAt DateTime @updatedAt
546
+
547
+ @@index([category])
548
+ @@map("actuate_saved_sections")
549
+ }