@adminforge/core 0.3.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 (86) hide show
  1. package/.turbo/turbo-build.log +56 -0
  2. package/CHANGELOG.md +32 -0
  3. package/LICENSE +21 -0
  4. package/bin/adminforge.js +317 -0
  5. package/dist/auth-client.cjs +45 -0
  6. package/dist/auth-client.cjs.map +1 -0
  7. package/dist/auth-client.d.cts +17 -0
  8. package/dist/auth-client.d.ts +17 -0
  9. package/dist/auth-client.js +20 -0
  10. package/dist/auth-client.js.map +1 -0
  11. package/dist/auth.cjs +65 -0
  12. package/dist/auth.cjs.map +1 -0
  13. package/dist/auth.d.cts +21 -0
  14. package/dist/auth.d.ts +21 -0
  15. package/dist/auth.js +36 -0
  16. package/dist/auth.js.map +1 -0
  17. package/dist/client-D0cjJVsn.d.ts +20 -0
  18. package/dist/client-sRnmZ-Y9.d.cts +20 -0
  19. package/dist/index-CyzxaE7n.d.cts +124 -0
  20. package/dist/index-CyzxaE7n.d.ts +124 -0
  21. package/dist/index.cjs +453 -0
  22. package/dist/index.cjs.map +1 -0
  23. package/dist/index.d.cts +65 -0
  24. package/dist/index.d.ts +65 -0
  25. package/dist/index.js +410 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/next.cjs +839 -0
  28. package/dist/next.cjs.map +1 -0
  29. package/dist/next.d.cts +84 -0
  30. package/dist/next.d.ts +84 -0
  31. package/dist/next.js +800 -0
  32. package/dist/next.js.map +1 -0
  33. package/dist/styles.css +763 -0
  34. package/dist/styles.css.map +1 -0
  35. package/dist/styles.d.cts +2 -0
  36. package/dist/styles.d.ts +2 -0
  37. package/dist/ui.cjs +2500 -0
  38. package/dist/ui.cjs.map +1 -0
  39. package/dist/ui.d.cts +119 -0
  40. package/dist/ui.d.ts +119 -0
  41. package/dist/ui.js +2448 -0
  42. package/dist/ui.js.map +1 -0
  43. package/eslint.config.js +35 -0
  44. package/package.json +99 -0
  45. package/src/api/controller.ts +234 -0
  46. package/src/api/index.ts +4 -0
  47. package/src/api/next.ts +281 -0
  48. package/src/api/security/agent-auth.ts +134 -0
  49. package/src/auth/config.ts +20 -0
  50. package/src/auth/index.ts +3 -0
  51. package/src/auth/middleware.ts +15 -0
  52. package/src/auth/provider.tsx +28 -0
  53. package/src/core/fields/index.ts +119 -0
  54. package/src/core/hooks/index.ts +60 -0
  55. package/src/core/index.ts +43 -0
  56. package/src/core/registry/index.ts +22 -0
  57. package/src/core/schema/collection.ts +12 -0
  58. package/src/core/schema/config.ts +11 -0
  59. package/src/core/schema/normalize.ts +32 -0
  60. package/src/core/types/index.ts +114 -0
  61. package/src/db/client.ts +146 -0
  62. package/src/db/index.ts +3 -0
  63. package/src/db/schema-generator.ts +104 -0
  64. package/src/fields/index.ts +1 -0
  65. package/src/index.ts +4 -0
  66. package/src/next.ts +3 -0
  67. package/src/styles/adminforge.css +840 -0
  68. package/src/ui/AdminDashboard.tsx +176 -0
  69. package/src/ui/AdminForgeContext.tsx +64 -0
  70. package/src/ui/components/AdminLayout.tsx +107 -0
  71. package/src/ui/form-engine/FormEngine.tsx +250 -0
  72. package/src/ui/form-engine/ImageUpload.tsx +68 -0
  73. package/src/ui/form-engine/RelationInput.tsx +215 -0
  74. package/src/ui/form-engine/RichTextEditor.tsx +708 -0
  75. package/src/ui/index.ts +18 -0
  76. package/src/ui/screens/AdminPage.tsx +162 -0
  77. package/src/ui/screens/AgentTokenPage.tsx +232 -0
  78. package/src/ui/screens/CollectionFormPage.tsx +135 -0
  79. package/src/ui/screens/CollectionListPage.tsx +170 -0
  80. package/src/ui/screens/CollectionSchemaPage.tsx +180 -0
  81. package/src/ui/screens/RoleDetailPage.tsx +147 -0
  82. package/src/ui/screens/RolesListPage.tsx +57 -0
  83. package/src/ui/table-engine/TableEngine.tsx +157 -0
  84. package/src/ui.ts +3 -0
  85. package/tsconfig.json +10 -0
  86. package/tsup.config.ts +54 -0
package/dist/auth.js ADDED
@@ -0,0 +1,36 @@
1
+ // src/auth/config.ts
2
+ function createAuthConfig(options) {
3
+ return {
4
+ ...options,
5
+ providers: ["credentials"]
6
+ };
7
+ }
8
+ var auth = {
9
+ providers: {
10
+ credentials: {
11
+ id: "credentials",
12
+ name: "Credentials"
13
+ }
14
+ }
15
+ };
16
+
17
+ // src/auth/middleware.ts
18
+ function adminMiddleware(handler) {
19
+ return async (request) => {
20
+ const sessionCookie = request.headers.get("cookie") ?? "";
21
+ const hasSession = sessionCookie.includes("next-auth.session-token");
22
+ if (!hasSession) {
23
+ return new Response(JSON.stringify({ error: "Unauthorized" }), {
24
+ status: 401,
25
+ headers: { "Content-Type": "application/json" }
26
+ });
27
+ }
28
+ return handler(request);
29
+ };
30
+ }
31
+ export {
32
+ adminMiddleware,
33
+ auth,
34
+ createAuthConfig
35
+ };
36
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/config.ts","../src/auth/middleware.ts"],"sourcesContent":["interface AuthConfigOptions {\n enabled: boolean;\n secret?: string;\n}\n\nexport function createAuthConfig(options: AuthConfigOptions) {\n return {\n ...options,\n providers: [\"credentials\"] as const,\n };\n}\n\nexport const auth = {\n providers: {\n credentials: {\n id: \"credentials\",\n name: \"Credentials\",\n },\n },\n} as const;\n","export function adminMiddleware(handler: (request: Request) => Promise<Response>) {\n return async (request: Request): Promise<Response> => {\n const sessionCookie = request.headers.get(\"cookie\") ?? \"\";\n const hasSession = sessionCookie.includes(\"next-auth.session-token\");\n\n if (!hasSession) {\n return new Response(JSON.stringify({ error: \"Unauthorized\" }), {\n status: 401,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n return handler(request);\n };\n}\n"],"mappings":";AAKO,SAAS,iBAAiB,SAA4B;AAC3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,CAAC,aAAa;AAAA,EAC3B;AACF;AAEO,IAAM,OAAO;AAAA,EAClB,WAAW;AAAA,IACT,aAAa;AAAA,MACX,IAAI;AAAA,MACJ,MAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACnBO,SAAS,gBAAgB,SAAkD;AAChF,SAAO,OAAO,YAAwC;AACpD,UAAM,gBAAgB,QAAQ,QAAQ,IAAI,QAAQ,KAAK;AACvD,UAAM,aAAa,cAAc,SAAS,yBAAyB;AAEnE,QAAI,CAAC,YAAY;AACf,aAAO,IAAI,SAAS,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,GAAG;AAAA,QAC7D,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAChD,CAAC;AAAA,IACH;AAEA,WAAO,QAAQ,OAAO;AAAA,EACxB;AACF;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { A as AdminForgeConfig } from './index-CyzxaE7n.js';
2
+
3
+ interface DbClient {
4
+ create(collection: string, data: Record<string, unknown>): Promise<unknown>;
5
+ findMany(collection: string, args?: {
6
+ where?: Record<string, unknown>;
7
+ orderBy?: Record<string, string>;
8
+ skip?: number;
9
+ take?: number;
10
+ }): Promise<unknown[]>;
11
+ findUnique(collection: string, id: string): Promise<unknown | null>;
12
+ update(collection: string, id: string, data: Record<string, unknown>): Promise<unknown>;
13
+ delete(collection: string, id: string): Promise<unknown>;
14
+ count(collection: string, args?: {
15
+ where?: Record<string, unknown>;
16
+ }): Promise<number>;
17
+ }
18
+ declare function createDbClient(config: AdminForgeConfig, existingPrisma?: any): DbClient;
19
+
20
+ export { type DbClient as D, createDbClient as c };
@@ -0,0 +1,20 @@
1
+ import { A as AdminForgeConfig } from './index-CyzxaE7n.cjs';
2
+
3
+ interface DbClient {
4
+ create(collection: string, data: Record<string, unknown>): Promise<unknown>;
5
+ findMany(collection: string, args?: {
6
+ where?: Record<string, unknown>;
7
+ orderBy?: Record<string, string>;
8
+ skip?: number;
9
+ take?: number;
10
+ }): Promise<unknown[]>;
11
+ findUnique(collection: string, id: string): Promise<unknown | null>;
12
+ update(collection: string, id: string, data: Record<string, unknown>): Promise<unknown>;
13
+ delete(collection: string, id: string): Promise<unknown>;
14
+ count(collection: string, args?: {
15
+ where?: Record<string, unknown>;
16
+ }): Promise<number>;
17
+ }
18
+ declare function createDbClient(config: AdminForgeConfig, existingPrisma?: any): DbClient;
19
+
20
+ export { type DbClient as D, createDbClient as c };
@@ -0,0 +1,124 @@
1
+ import { ZodSchema } from 'zod';
2
+
3
+ type RelationType = "many-to-one" | "one-to-many" | "many-to-many";
4
+ interface FieldDBMapping {
5
+ type: string;
6
+ nullable?: boolean;
7
+ unique?: boolean;
8
+ default?: unknown;
9
+ references?: {
10
+ model: string;
11
+ field: string;
12
+ };
13
+ relationType?: RelationType;
14
+ }
15
+ interface FieldUI {
16
+ component: string;
17
+ props?: Record<string, unknown>;
18
+ }
19
+ interface FieldHooks {
20
+ beforeValidate?: (value: unknown) => unknown;
21
+ beforeSave?: (value: unknown) => unknown;
22
+ }
23
+ interface FieldDefinition {
24
+ type: string;
25
+ db: FieldDBMapping;
26
+ ui: FieldUI;
27
+ validation: ZodSchema;
28
+ meta?: FieldMeta;
29
+ hooks?: FieldHooks;
30
+ access?: AccessConfig;
31
+ }
32
+ interface FieldOptions {
33
+ required?: boolean;
34
+ default?: unknown;
35
+ unique?: boolean;
36
+ label?: string;
37
+ hidden?: boolean;
38
+ readOnly?: boolean;
39
+ description?: string;
40
+ access?: AccessConfig;
41
+ }
42
+ interface FieldMeta {
43
+ required: boolean;
44
+ unique: boolean;
45
+ default?: unknown;
46
+ label?: string;
47
+ hidden?: boolean;
48
+ readOnly?: boolean;
49
+ description?: string;
50
+ }
51
+ interface TextOptions extends FieldOptions {
52
+ }
53
+ interface BooleanOptions extends FieldOptions {
54
+ }
55
+ interface RichTextOptions extends FieldOptions {
56
+ }
57
+ interface SlugOptions extends FieldOptions {
58
+ from: string;
59
+ }
60
+ interface RelationOptions extends FieldOptions {
61
+ to: string;
62
+ type: RelationType;
63
+ }
64
+ interface DateOptions extends FieldOptions {
65
+ autoCreate?: boolean;
66
+ autoUpdate?: boolean;
67
+ }
68
+ interface ImageOptions extends FieldOptions {
69
+ }
70
+ interface AccessConfig {
71
+ read?: string[];
72
+ create?: string[];
73
+ update?: string[];
74
+ delete?: string[];
75
+ }
76
+ interface CollectionHooks {
77
+ beforeCreate?: (ctx: {
78
+ data: Record<string, unknown>;
79
+ }) => Record<string, unknown> | Promise<Record<string, unknown>>;
80
+ afterCreate?: (ctx: {
81
+ data: Record<string, unknown>;
82
+ id: string;
83
+ }) => void | Promise<void>;
84
+ beforeUpdate?: (ctx: {
85
+ data: Record<string, unknown>;
86
+ id: string;
87
+ }) => Record<string, unknown> | Promise<Record<string, unknown>>;
88
+ afterUpdate?: (ctx: {
89
+ data: Record<string, unknown>;
90
+ id: string;
91
+ }) => void | Promise<void>;
92
+ beforeDelete?: (ctx: {
93
+ id: string;
94
+ }) => void | Promise<void>;
95
+ afterDelete?: (ctx: {
96
+ id: string;
97
+ }) => void | Promise<void>;
98
+ }
99
+ interface CollectionDefinition {
100
+ name: string;
101
+ label: string;
102
+ icon?: string;
103
+ fields: Record<string, FieldDefinition>;
104
+ hooks?: CollectionHooks;
105
+ access?: AccessConfig;
106
+ }
107
+ interface AuthConfig {
108
+ enabled: boolean;
109
+ provider?: "credentials";
110
+ roles?: Record<string, {
111
+ label?: string;
112
+ parent?: string;
113
+ }>;
114
+ }
115
+ interface AdminForgeConfig {
116
+ collections: CollectionDefinition[];
117
+ auth?: AuthConfig;
118
+ }
119
+ type CollectionInput = Omit<CollectionDefinition, "fields"> & {
120
+ fields: Record<string, FieldDefinition>;
121
+ hooks?: CollectionHooks;
122
+ };
123
+
124
+ export type { AdminForgeConfig as A, BooleanOptions as B, CollectionDefinition as C, DateOptions as D, FieldDefinition as F, ImageOptions as I, RichTextOptions as R, SlugOptions as S, TextOptions as T, AuthConfig as a, CollectionInput as b, RelationOptions as c, CollectionHooks as d, AccessConfig as e, FieldDBMapping as f, FieldHooks as g, FieldMeta as h, FieldUI as i, RelationType as j };
@@ -0,0 +1,124 @@
1
+ import { ZodSchema } from 'zod';
2
+
3
+ type RelationType = "many-to-one" | "one-to-many" | "many-to-many";
4
+ interface FieldDBMapping {
5
+ type: string;
6
+ nullable?: boolean;
7
+ unique?: boolean;
8
+ default?: unknown;
9
+ references?: {
10
+ model: string;
11
+ field: string;
12
+ };
13
+ relationType?: RelationType;
14
+ }
15
+ interface FieldUI {
16
+ component: string;
17
+ props?: Record<string, unknown>;
18
+ }
19
+ interface FieldHooks {
20
+ beforeValidate?: (value: unknown) => unknown;
21
+ beforeSave?: (value: unknown) => unknown;
22
+ }
23
+ interface FieldDefinition {
24
+ type: string;
25
+ db: FieldDBMapping;
26
+ ui: FieldUI;
27
+ validation: ZodSchema;
28
+ meta?: FieldMeta;
29
+ hooks?: FieldHooks;
30
+ access?: AccessConfig;
31
+ }
32
+ interface FieldOptions {
33
+ required?: boolean;
34
+ default?: unknown;
35
+ unique?: boolean;
36
+ label?: string;
37
+ hidden?: boolean;
38
+ readOnly?: boolean;
39
+ description?: string;
40
+ access?: AccessConfig;
41
+ }
42
+ interface FieldMeta {
43
+ required: boolean;
44
+ unique: boolean;
45
+ default?: unknown;
46
+ label?: string;
47
+ hidden?: boolean;
48
+ readOnly?: boolean;
49
+ description?: string;
50
+ }
51
+ interface TextOptions extends FieldOptions {
52
+ }
53
+ interface BooleanOptions extends FieldOptions {
54
+ }
55
+ interface RichTextOptions extends FieldOptions {
56
+ }
57
+ interface SlugOptions extends FieldOptions {
58
+ from: string;
59
+ }
60
+ interface RelationOptions extends FieldOptions {
61
+ to: string;
62
+ type: RelationType;
63
+ }
64
+ interface DateOptions extends FieldOptions {
65
+ autoCreate?: boolean;
66
+ autoUpdate?: boolean;
67
+ }
68
+ interface ImageOptions extends FieldOptions {
69
+ }
70
+ interface AccessConfig {
71
+ read?: string[];
72
+ create?: string[];
73
+ update?: string[];
74
+ delete?: string[];
75
+ }
76
+ interface CollectionHooks {
77
+ beforeCreate?: (ctx: {
78
+ data: Record<string, unknown>;
79
+ }) => Record<string, unknown> | Promise<Record<string, unknown>>;
80
+ afterCreate?: (ctx: {
81
+ data: Record<string, unknown>;
82
+ id: string;
83
+ }) => void | Promise<void>;
84
+ beforeUpdate?: (ctx: {
85
+ data: Record<string, unknown>;
86
+ id: string;
87
+ }) => Record<string, unknown> | Promise<Record<string, unknown>>;
88
+ afterUpdate?: (ctx: {
89
+ data: Record<string, unknown>;
90
+ id: string;
91
+ }) => void | Promise<void>;
92
+ beforeDelete?: (ctx: {
93
+ id: string;
94
+ }) => void | Promise<void>;
95
+ afterDelete?: (ctx: {
96
+ id: string;
97
+ }) => void | Promise<void>;
98
+ }
99
+ interface CollectionDefinition {
100
+ name: string;
101
+ label: string;
102
+ icon?: string;
103
+ fields: Record<string, FieldDefinition>;
104
+ hooks?: CollectionHooks;
105
+ access?: AccessConfig;
106
+ }
107
+ interface AuthConfig {
108
+ enabled: boolean;
109
+ provider?: "credentials";
110
+ roles?: Record<string, {
111
+ label?: string;
112
+ parent?: string;
113
+ }>;
114
+ }
115
+ interface AdminForgeConfig {
116
+ collections: CollectionDefinition[];
117
+ auth?: AuthConfig;
118
+ }
119
+ type CollectionInput = Omit<CollectionDefinition, "fields"> & {
120
+ fields: Record<string, FieldDefinition>;
121
+ hooks?: CollectionHooks;
122
+ };
123
+
124
+ export type { AdminForgeConfig as A, BooleanOptions as B, CollectionDefinition as C, DateOptions as D, FieldDefinition as F, ImageOptions as I, RichTextOptions as R, SlugOptions as S, TextOptions as T, AuthConfig as a, CollectionInput as b, RelationOptions as c, CollectionHooks as d, AccessConfig as e, FieldDBMapping as f, FieldHooks as g, FieldMeta as h, FieldUI as i, RelationType as j };