@objectstack/spec 0.1.0 → 0.1.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.
- package/README.md +66 -125
- package/dist/ai/agent.zod.d.ts +164 -0
- package/dist/ai/agent.zod.d.ts.map +1 -0
- package/dist/ai/agent.zod.js +51 -0
- package/dist/data/dataset.zod.d.ts +60 -0
- package/dist/data/dataset.zod.d.ts.map +1 -0
- package/dist/data/dataset.zod.js +54 -0
- package/dist/data/field.zod.d.ts +170 -0
- package/dist/data/field.zod.d.ts.map +1 -0
- package/dist/data/field.zod.js +81 -0
- package/dist/data/flow.zod.d.ts +242 -0
- package/dist/data/flow.zod.d.ts.map +1 -0
- package/dist/data/flow.zod.js +77 -0
- package/dist/data/mapping.zod.d.ts +257 -0
- package/dist/data/mapping.zod.d.ts.map +1 -0
- package/dist/data/mapping.zod.js +65 -0
- package/dist/data/object.zod.d.ts +364 -0
- package/dist/data/object.zod.d.ts.map +1 -0
- package/dist/data/object.zod.js +54 -0
- package/dist/data/permission.zod.d.ts +163 -0
- package/dist/data/permission.zod.d.ts.map +1 -0
- package/dist/data/permission.zod.js +62 -0
- package/dist/data/query.zod.d.ts +89 -0
- package/dist/data/query.zod.d.ts.map +1 -0
- package/dist/data/query.zod.js +71 -0
- package/dist/data/sharing.zod.d.ts +63 -0
- package/dist/data/sharing.zod.d.ts.map +1 -0
- package/dist/data/sharing.zod.js +57 -0
- package/dist/data/validation.zod.d.ts +236 -0
- package/dist/data/validation.zod.d.ts.map +1 -0
- package/dist/data/validation.zod.js +59 -0
- package/dist/data/workflow.zod.d.ts +195 -0
- package/dist/data/workflow.zod.d.ts.map +1 -0
- package/dist/data/workflow.zod.js +64 -0
- package/dist/index.d.ts +33 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -5
- package/dist/system/api.zod.d.ts +168 -0
- package/dist/system/api.zod.d.ts.map +1 -0
- package/dist/system/api.zod.js +53 -0
- package/dist/system/constants/index.d.ts +11 -0
- package/dist/system/constants/index.d.ts.map +1 -0
- package/dist/system/constants/index.js +26 -0
- package/dist/system/constants/paths.d.ts +71 -0
- package/dist/system/constants/paths.d.ts.map +1 -0
- package/dist/system/constants/paths.js +65 -0
- package/dist/system/datasource.zod.d.ts +127 -0
- package/dist/system/datasource.zod.d.ts.map +1 -0
- package/dist/system/datasource.zod.js +62 -0
- package/dist/system/identity.zod.d.ts +204 -0
- package/dist/system/identity.zod.d.ts.map +1 -0
- package/dist/system/identity.zod.js +68 -0
- package/dist/system/license.zod.d.ts +110 -0
- package/dist/system/license.zod.d.ts.map +1 -0
- package/dist/system/license.zod.js +63 -0
- package/dist/system/manifest.zod.d.ts +126 -0
- package/dist/system/manifest.zod.d.ts.map +1 -0
- package/dist/system/manifest.zod.js +68 -0
- package/dist/system/policy.zod.d.ts +209 -0
- package/dist/system/policy.zod.d.ts.map +1 -0
- package/dist/system/policy.zod.js +54 -0
- package/dist/system/role.zod.d.ts +34 -0
- package/dist/system/role.zod.d.ts.map +1 -0
- package/dist/system/role.zod.js +25 -0
- package/dist/system/territory.zod.d.ts +91 -0
- package/dist/system/territory.zod.d.ts.map +1 -0
- package/dist/system/territory.zod.js +64 -0
- package/dist/system/translation.zod.d.ts +171 -0
- package/dist/system/translation.zod.d.ts.map +1 -0
- package/dist/system/translation.zod.js +34 -0
- package/dist/system/types/index.d.ts +7 -0
- package/dist/system/types/index.d.ts.map +1 -0
- package/dist/system/types/index.js +22 -0
- package/dist/system/types/plugin.d.ts +113 -0
- package/dist/system/types/plugin.d.ts.map +1 -0
- package/dist/system/types/plugin.js +6 -0
- package/dist/system/webhook.zod.d.ts +106 -0
- package/dist/system/webhook.zod.d.ts.map +1 -0
- package/dist/system/webhook.zod.js +56 -0
- package/dist/ui/action.zod.d.ts +148 -0
- package/dist/ui/action.zod.d.ts.map +1 -0
- package/dist/ui/action.zod.js +48 -0
- package/dist/ui/app.zod.d.ts +299 -0
- package/dist/ui/app.zod.d.ts.map +1 -0
- package/dist/ui/app.zod.js +127 -0
- package/dist/ui/dashboard.zod.d.ts +207 -0
- package/dist/ui/dashboard.zod.d.ts.map +1 -0
- package/dist/ui/dashboard.zod.js +66 -0
- package/dist/ui/page.zod.d.ts +187 -0
- package/dist/ui/page.zod.d.ts.map +1 -0
- package/dist/ui/page.zod.js +48 -0
- package/dist/ui/report.zod.d.ts +224 -0
- package/dist/ui/report.zod.d.ts.map +1 -0
- package/dist/ui/report.zod.js +68 -0
- package/dist/ui/view.zod.d.ts +887 -0
- package/dist/ui/view.zod.d.ts.map +1 -0
- package/dist/ui/view.zod.js +83 -0
- package/json-schema/AIKnowledge.json +30 -0
- package/json-schema/AIModelConfig.json +41 -0
- package/json-schema/AITool.json +33 -0
- package/json-schema/Action.json +156 -0
- package/json-schema/ActionParam.json +76 -0
- package/json-schema/Agent.json +140 -0
- package/json-schema/ApiEndpoint.json +162 -0
- package/json-schema/ApiMapping.json +28 -0
- package/json-schema/App.json +286 -0
- package/json-schema/AppBranding.json +24 -0
- package/json-schema/AuditPolicy.json +31 -0
- package/json-schema/AuthProtocol.json +17 -0
- package/json-schema/AuthProvider.json +171 -0
- package/json-schema/CalendarConfig.json +28 -0
- package/json-schema/ChartType.json +19 -0
- package/json-schema/Dashboard.json +117 -0
- package/json-schema/DashboardNavItem.json +42 -0
- package/json-schema/DashboardWidget.json +89 -0
- package/json-schema/Dataset.json +63 -0
- package/json-schema/DatasetMode.json +16 -0
- package/json-schema/Datasource.json +93 -0
- package/json-schema/DatasourceCapabilities.json +36 -0
- package/json-schema/DriverType.json +27 -0
- package/json-schema/EmailAlertAction.json +37 -0
- package/json-schema/Feature.json +51 -0
- package/json-schema/Field.json +219 -0
- package/json-schema/FieldMapping.json +83 -0
- package/json-schema/FieldNode.json +32 -0
- package/json-schema/FieldPermission.json +22 -0
- package/json-schema/FieldType.json +36 -0
- package/json-schema/FieldUpdateAction.json +32 -0
- package/json-schema/FilterNode.json +52 -0
- package/json-schema/FilterOperator.json +26 -0
- package/json-schema/Flow.json +186 -0
- package/json-schema/FlowEdge.json +37 -0
- package/json-schema/FlowNode.json +65 -0
- package/json-schema/FlowNodeAction.json +24 -0
- package/json-schema/FlowVariable.json +34 -0
- package/json-schema/FormSection.json +42 -0
- package/json-schema/FormView.json +99 -0
- package/json-schema/FormatValidation.json +59 -0
- package/json-schema/GanttConfig.json +32 -0
- package/json-schema/GroupNavItem.json +42 -0
- package/json-schema/HttpMethod.json +16 -0
- package/json-schema/Index.json +30 -0
- package/json-schema/KanbanConfig.json +31 -0
- package/json-schema/LDAPConfig.json +39 -0
- package/json-schema/License.json +57 -0
- package/json-schema/ListView.json +153 -0
- package/json-schema/Locale.json +10 -0
- package/json-schema/LogicOperator.json +14 -0
- package/json-schema/Manifest.json +90 -0
- package/json-schema/Mapping.json +270 -0
- package/json-schema/MenuItem.json +28 -0
- package/json-schema/MetricType.json +14 -0
- package/json-schema/NavigationItem.json +214 -0
- package/json-schema/NetworkPolicy.json +31 -0
- package/json-schema/OIDCConfig.json +46 -0
- package/json-schema/OWDModel.json +14 -0
- package/json-schema/Object.json +331 -0
- package/json-schema/ObjectCapabilities.json +36 -0
- package/json-schema/ObjectNavItem.json +46 -0
- package/json-schema/ObjectPermission.json +42 -0
- package/json-schema/Page.json +117 -0
- package/json-schema/PageComponent.json +36 -0
- package/json-schema/PageNavItem.json +47 -0
- package/json-schema/PageRegion.json +63 -0
- package/json-schema/PasswordPolicy.json +41 -0
- package/json-schema/PermissionSet.json +96 -0
- package/json-schema/Plan.json +53 -0
- package/json-schema/Policy.json +138 -0
- package/json-schema/Query.json +128 -0
- package/json-schema/RateLimit.json +26 -0
- package/json-schema/Report.json +219 -0
- package/json-schema/ReportChart.json +45 -0
- package/json-schema/ReportColumn.json +35 -0
- package/json-schema/ReportGrouping.json +38 -0
- package/json-schema/ReportType.json +15 -0
- package/json-schema/Role.json +32 -0
- package/json-schema/SAMLConfig.json +44 -0
- package/json-schema/ScriptValidation.json +48 -0
- package/json-schema/SelectOption.json +32 -0
- package/json-schema/SessionPolicy.json +27 -0
- package/json-schema/SharingLevel.json +13 -0
- package/json-schema/SharingRule.json +58 -0
- package/json-schema/SharingRuleType.json +15 -0
- package/json-schema/SortNode.json +26 -0
- package/json-schema/StateMachineValidation.json +59 -0
- package/json-schema/Territory.json +77 -0
- package/json-schema/TerritoryModel.json +34 -0
- package/json-schema/TerritoryType.json +15 -0
- package/json-schema/TransformType.json +18 -0
- package/json-schema/TranslationBundle.json +78 -0
- package/json-schema/TranslationData.json +75 -0
- package/json-schema/UniquenessValidation.json +59 -0
- package/json-schema/UrlNavItem.json +51 -0
- package/json-schema/ValidationRule.json +211 -0
- package/json-schema/View.json +500 -0
- package/json-schema/Webhook.json +88 -0
- package/json-schema/WebhookReceiver.json +66 -0
- package/json-schema/WebhookTriggerType.json +16 -0
- package/json-schema/WorkflowAction.json +84 -0
- package/json-schema/WorkflowRule.json +128 -0
- package/json-schema/WorkflowTriggerType.json +16 -0
- package/package.json +28 -19
- package/dist/examples.d.ts +0 -28
- package/dist/examples.d.ts.map +0 -1
- package/dist/examples.js +0 -250
- package/dist/types/index.d.ts +0 -9
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -8
- package/dist/types/meta/field-type.d.ts +0 -54
- package/dist/types/meta/field-type.d.ts.map +0 -1
- package/dist/types/meta/field-type.js +0 -42
- package/dist/types/meta/index.d.ts +0 -13
- package/dist/types/meta/index.d.ts.map +0 -1
- package/dist/types/meta/index.js +0 -12
- package/dist/types/meta/object-entity.d.ts +0 -246
- package/dist/types/meta/object-entity.d.ts.map +0 -1
- package/dist/types/meta/object-entity.js +0 -9
- package/dist/types/meta/object-field.d.ts +0 -199
- package/dist/types/meta/object-field.d.ts.map +0 -1
- package/dist/types/meta/object-field.js +0 -9
- package/dist/types/meta/object-view.d.ts +0 -430
- package/dist/types/meta/object-view.d.ts.map +0 -1
- package/dist/types/meta/object-view.js +0 -9
- package/src/examples.ts +0 -257
- package/src/index.ts +0 -10
- package/src/types/index.ts +0 -9
- package/src/types/meta/field-type.ts +0 -91
- package/src/types/meta/index.ts +0 -13
- package/src/types/meta/object-entity.ts +0 -265
- package/src/types/meta/object-field.ts +0 -218
- package/src/types/meta/object-view.ts +0 -475
package/src/examples.ts
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example Usage of ObjectStack Metamodel
|
|
3
|
-
*
|
|
4
|
-
* This file demonstrates how to use the metamodel interfaces
|
|
5
|
-
* to define entities and views.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { ObjectEntity, ObjectView } from './types/meta';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Example: User Entity Definition
|
|
12
|
-
*/
|
|
13
|
-
export const UserEntity: ObjectEntity = {
|
|
14
|
-
name: 'User',
|
|
15
|
-
label: 'User',
|
|
16
|
-
pluralLabel: 'Users',
|
|
17
|
-
description: 'System user account',
|
|
18
|
-
fields: [
|
|
19
|
-
{
|
|
20
|
-
name: 'id',
|
|
21
|
-
label: 'ID',
|
|
22
|
-
type: 'text',
|
|
23
|
-
required: true,
|
|
24
|
-
readonly: true,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
name: 'email',
|
|
28
|
-
label: 'Email Address',
|
|
29
|
-
type: 'email',
|
|
30
|
-
required: true,
|
|
31
|
-
unique: true,
|
|
32
|
-
maxLength: 255,
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
name: 'name',
|
|
36
|
-
label: 'Full Name',
|
|
37
|
-
type: 'text',
|
|
38
|
-
required: true,
|
|
39
|
-
maxLength: 100,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: 'role',
|
|
43
|
-
label: 'Role',
|
|
44
|
-
type: 'select',
|
|
45
|
-
required: true,
|
|
46
|
-
options: [
|
|
47
|
-
{ value: 'admin', label: 'Administrator' },
|
|
48
|
-
{ value: 'editor', label: 'Editor' },
|
|
49
|
-
{ value: 'viewer', label: 'Viewer' },
|
|
50
|
-
],
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: 'status',
|
|
54
|
-
label: 'Status',
|
|
55
|
-
type: 'select',
|
|
56
|
-
required: true,
|
|
57
|
-
defaultValue: 'active',
|
|
58
|
-
options: [
|
|
59
|
-
{ value: 'active', label: 'Active' },
|
|
60
|
-
{ value: 'inactive', label: 'Inactive' },
|
|
61
|
-
{ value: 'suspended', label: 'Suspended' },
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
name: 'createdAt',
|
|
66
|
-
label: 'Created At',
|
|
67
|
-
type: 'datetime',
|
|
68
|
-
readonly: true,
|
|
69
|
-
},
|
|
70
|
-
],
|
|
71
|
-
primaryKey: 'id',
|
|
72
|
-
displayField: 'name',
|
|
73
|
-
icon: 'user',
|
|
74
|
-
auditable: true,
|
|
75
|
-
searchable: true,
|
|
76
|
-
searchableFields: ['name', 'email'],
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Example: All Users List View
|
|
81
|
-
*/
|
|
82
|
-
export const AllUsersView: ObjectView = {
|
|
83
|
-
name: 'all_users',
|
|
84
|
-
label: 'All Users',
|
|
85
|
-
entityName: 'User',
|
|
86
|
-
type: 'list',
|
|
87
|
-
description: 'View all users in the system',
|
|
88
|
-
columns: [
|
|
89
|
-
{
|
|
90
|
-
field: 'name',
|
|
91
|
-
label: 'Name',
|
|
92
|
-
width: '25%',
|
|
93
|
-
sortable: true,
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
field: 'email',
|
|
97
|
-
label: 'Email',
|
|
98
|
-
width: '30%',
|
|
99
|
-
sortable: true,
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
field: 'role',
|
|
103
|
-
label: 'Role',
|
|
104
|
-
width: '15%',
|
|
105
|
-
sortable: true,
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
field: 'status',
|
|
109
|
-
label: 'Status',
|
|
110
|
-
width: '15%',
|
|
111
|
-
sortable: true,
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
field: 'createdAt',
|
|
115
|
-
label: 'Created',
|
|
116
|
-
width: '15%',
|
|
117
|
-
sortable: true,
|
|
118
|
-
format: 'date:MM/DD/YYYY',
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
sort: [
|
|
122
|
-
{
|
|
123
|
-
field: 'name',
|
|
124
|
-
direction: 'asc',
|
|
125
|
-
},
|
|
126
|
-
],
|
|
127
|
-
pageSize: 25,
|
|
128
|
-
default: true,
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Example: Active Users View (with filter)
|
|
133
|
-
*/
|
|
134
|
-
export const ActiveUsersView: ObjectView = {
|
|
135
|
-
name: 'active_users',
|
|
136
|
-
label: 'Active Users',
|
|
137
|
-
entityName: 'User',
|
|
138
|
-
type: 'list',
|
|
139
|
-
description: 'View only active users',
|
|
140
|
-
columns: [
|
|
141
|
-
{
|
|
142
|
-
field: 'name',
|
|
143
|
-
width: '30%',
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
field: 'email',
|
|
147
|
-
width: '40%',
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
field: 'role',
|
|
151
|
-
width: '30%',
|
|
152
|
-
},
|
|
153
|
-
],
|
|
154
|
-
filters: [
|
|
155
|
-
{
|
|
156
|
-
field: 'status',
|
|
157
|
-
operator: 'equals',
|
|
158
|
-
value: 'active',
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
sort: [
|
|
162
|
-
{
|
|
163
|
-
field: 'name',
|
|
164
|
-
direction: 'asc',
|
|
165
|
-
},
|
|
166
|
-
],
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Example: User Form View
|
|
171
|
-
*/
|
|
172
|
-
export const UserFormView: ObjectView = {
|
|
173
|
-
name: 'user_form',
|
|
174
|
-
label: 'User Form',
|
|
175
|
-
entityName: 'User',
|
|
176
|
-
type: 'form',
|
|
177
|
-
description: 'Form for creating and editing users',
|
|
178
|
-
fields: ['name', 'email', 'role', 'status'],
|
|
179
|
-
layout: {
|
|
180
|
-
type: 'sections',
|
|
181
|
-
sections: [
|
|
182
|
-
{
|
|
183
|
-
id: 'basic',
|
|
184
|
-
title: 'Basic Information',
|
|
185
|
-
fields: ['name', 'email'],
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
id: 'settings',
|
|
189
|
-
title: 'Settings',
|
|
190
|
-
fields: ['role', 'status'],
|
|
191
|
-
},
|
|
192
|
-
],
|
|
193
|
-
},
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Example: Product Entity with Lookup
|
|
198
|
-
*/
|
|
199
|
-
export const ProductEntity: ObjectEntity = {
|
|
200
|
-
name: 'Product',
|
|
201
|
-
label: 'Product',
|
|
202
|
-
pluralLabel: 'Products',
|
|
203
|
-
description: 'Product catalog',
|
|
204
|
-
fields: [
|
|
205
|
-
{
|
|
206
|
-
name: 'id',
|
|
207
|
-
label: 'ID',
|
|
208
|
-
type: 'text',
|
|
209
|
-
required: true,
|
|
210
|
-
readonly: true,
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
name: 'name',
|
|
214
|
-
label: 'Product Name',
|
|
215
|
-
type: 'text',
|
|
216
|
-
required: true,
|
|
217
|
-
maxLength: 200,
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
name: 'description',
|
|
221
|
-
label: 'Description',
|
|
222
|
-
type: 'textarea',
|
|
223
|
-
maxLength: 1000,
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
name: 'price',
|
|
227
|
-
label: 'Price',
|
|
228
|
-
type: 'currency',
|
|
229
|
-
required: true,
|
|
230
|
-
min: 0,
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
name: 'category',
|
|
234
|
-
label: 'Category',
|
|
235
|
-
type: 'lookup',
|
|
236
|
-
required: true,
|
|
237
|
-
lookupEntity: 'Category',
|
|
238
|
-
lookupDisplayField: 'name',
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
name: 'inStock',
|
|
242
|
-
label: 'In Stock',
|
|
243
|
-
type: 'boolean',
|
|
244
|
-
defaultValue: true,
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
name: 'image',
|
|
248
|
-
label: 'Product Image',
|
|
249
|
-
type: 'image',
|
|
250
|
-
},
|
|
251
|
-
],
|
|
252
|
-
primaryKey: 'id',
|
|
253
|
-
displayField: 'name',
|
|
254
|
-
icon: 'package',
|
|
255
|
-
searchable: true,
|
|
256
|
-
searchableFields: ['name', 'description'],
|
|
257
|
-
};
|
package/src/index.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ObjectStack Specification
|
|
3
|
-
*
|
|
4
|
-
* This module provides the core type definitions and interfaces for the ObjectStack ecosystem.
|
|
5
|
-
* It defines the contract between backend (ObjectQL) parsers and frontend (ObjectUI) renderers.
|
|
6
|
-
*
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
export * from './types';
|
package/src/types/index.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Field Type Definitions
|
|
3
|
-
*
|
|
4
|
-
* Defines the available field types in the ObjectStack metamodel.
|
|
5
|
-
* These types determine how fields are stored, validated, and rendered.
|
|
6
|
-
*
|
|
7
|
-
* @module types/meta/field-type
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Available field types in the ObjectStack metamodel.
|
|
12
|
-
*
|
|
13
|
-
* @remarks
|
|
14
|
-
* Each field type corresponds to specific storage, validation, and rendering behavior:
|
|
15
|
-
*
|
|
16
|
-
* - `text`: Short text strings (single line)
|
|
17
|
-
* - `textarea`: Long text content (multi-line)
|
|
18
|
-
* - `number`: Numeric values (integer or decimal)
|
|
19
|
-
* - `boolean`: True/false values (checkbox)
|
|
20
|
-
* - `date`: Date values (without time)
|
|
21
|
-
* - `datetime`: Date and time values
|
|
22
|
-
* - `email`: Email address with validation
|
|
23
|
-
* - `url`: URL with validation
|
|
24
|
-
* - `lookup`: Reference to another entity (foreign key)
|
|
25
|
-
* - `select`: Single selection from predefined options
|
|
26
|
-
* - `multiselect`: Multiple selections from predefined options
|
|
27
|
-
* - `json`: Arbitrary JSON data structure
|
|
28
|
-
* - `file`: File attachment reference
|
|
29
|
-
* - `image`: Image file reference with preview
|
|
30
|
-
* - `currency`: Monetary values with precision
|
|
31
|
-
* - `percentage`: Percentage values (0-100)
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```typescript
|
|
35
|
-
* const nameField: FieldType = 'text';
|
|
36
|
-
* const priceField: FieldType = 'currency';
|
|
37
|
-
* const ownerField: FieldType = 'lookup';
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export type FieldType =
|
|
41
|
-
| 'text'
|
|
42
|
-
| 'textarea'
|
|
43
|
-
| 'number'
|
|
44
|
-
| 'boolean'
|
|
45
|
-
| 'date'
|
|
46
|
-
| 'datetime'
|
|
47
|
-
| 'email'
|
|
48
|
-
| 'url'
|
|
49
|
-
| 'lookup'
|
|
50
|
-
| 'select'
|
|
51
|
-
| 'multiselect'
|
|
52
|
-
| 'json'
|
|
53
|
-
| 'file'
|
|
54
|
-
| 'image'
|
|
55
|
-
| 'currency'
|
|
56
|
-
| 'percentage';
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Type guard to check if a string is a valid FieldType
|
|
60
|
-
*
|
|
61
|
-
* @param value - The value to check
|
|
62
|
-
* @returns True if the value is a valid FieldType
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* if (isFieldType('text')) {
|
|
67
|
-
* // value is a valid FieldType
|
|
68
|
-
* }
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
export function isFieldType(value: unknown): value is FieldType {
|
|
72
|
-
const validTypes: FieldType[] = [
|
|
73
|
-
'text',
|
|
74
|
-
'textarea',
|
|
75
|
-
'number',
|
|
76
|
-
'boolean',
|
|
77
|
-
'date',
|
|
78
|
-
'datetime',
|
|
79
|
-
'email',
|
|
80
|
-
'url',
|
|
81
|
-
'lookup',
|
|
82
|
-
'select',
|
|
83
|
-
'multiselect',
|
|
84
|
-
'json',
|
|
85
|
-
'file',
|
|
86
|
-
'image',
|
|
87
|
-
'currency',
|
|
88
|
-
'percentage',
|
|
89
|
-
];
|
|
90
|
-
return typeof value === 'string' && validTypes.includes(value as FieldType);
|
|
91
|
-
}
|
package/src/types/meta/index.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metamodel Type Definitions
|
|
3
|
-
*
|
|
4
|
-
* This module defines the core metamodel interfaces that form the contract
|
|
5
|
-
* between the backend (ObjectQL) parser and the frontend (ObjectUI) renderer.
|
|
6
|
-
*
|
|
7
|
-
* @module types/meta
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
export * from './field-type';
|
|
11
|
-
export * from './object-field';
|
|
12
|
-
export * from './object-entity';
|
|
13
|
-
export * from './object-view';
|
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Object Entity Interface
|
|
3
|
-
*
|
|
4
|
-
* Defines the structure of an entity in the ObjectStack metamodel.
|
|
5
|
-
* Entities represent data models/tables with their fields and relationships.
|
|
6
|
-
*
|
|
7
|
-
* @module types/meta/object-entity
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { ObjectField } from './object-field';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Represents an entity definition in the ObjectStack metamodel
|
|
14
|
-
*
|
|
15
|
-
* @remarks
|
|
16
|
-
* ObjectEntity is the core data model definition. It describes a logical
|
|
17
|
-
* entity (like User, Account, Product) with its fields, constraints,
|
|
18
|
-
* and metadata. This interface is used by:
|
|
19
|
-
*
|
|
20
|
-
* - ObjectQL parser: To validate and process schema definitions
|
|
21
|
-
* - ObjectUI renderer: To generate forms, tables, and views
|
|
22
|
-
* - Database drivers: To create tables and migrations
|
|
23
|
-
* - API generators: To expose REST/GraphQL endpoints
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const userEntity: ObjectEntity = {
|
|
28
|
-
* name: 'User',
|
|
29
|
-
* label: 'User',
|
|
30
|
-
* pluralLabel: 'Users',
|
|
31
|
-
* description: 'System user account',
|
|
32
|
-
* fields: [
|
|
33
|
-
* {
|
|
34
|
-
* name: 'id',
|
|
35
|
-
* label: 'ID',
|
|
36
|
-
* type: 'text',
|
|
37
|
-
* required: true,
|
|
38
|
-
* readonly: true
|
|
39
|
-
* },
|
|
40
|
-
* {
|
|
41
|
-
* name: 'email',
|
|
42
|
-
* label: 'Email',
|
|
43
|
-
* type: 'email',
|
|
44
|
-
* required: true,
|
|
45
|
-
* unique: true
|
|
46
|
-
* },
|
|
47
|
-
* {
|
|
48
|
-
* name: 'name',
|
|
49
|
-
* label: 'Full Name',
|
|
50
|
-
* type: 'text',
|
|
51
|
-
* required: true
|
|
52
|
-
* }
|
|
53
|
-
* ],
|
|
54
|
-
* primaryKey: 'id',
|
|
55
|
-
* displayField: 'name'
|
|
56
|
-
* };
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export interface ObjectEntity {
|
|
60
|
-
/**
|
|
61
|
-
* Technical name of the entity
|
|
62
|
-
*
|
|
63
|
-
* @remarks
|
|
64
|
-
* Used in code, APIs, and database table names.
|
|
65
|
-
* Should be in PascalCase for entities.
|
|
66
|
-
* Must be unique across the system.
|
|
67
|
-
*
|
|
68
|
-
* @example 'User', 'Account', 'SalesOrder'
|
|
69
|
-
*/
|
|
70
|
-
name: string;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Human-readable singular label for the entity
|
|
74
|
-
*
|
|
75
|
-
* @remarks
|
|
76
|
-
* Used in UI headers, forms, and documentation.
|
|
77
|
-
*
|
|
78
|
-
* @example 'User', 'Sales Order', 'Product Category'
|
|
79
|
-
*/
|
|
80
|
-
label: string;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Human-readable plural label for the entity
|
|
84
|
-
*
|
|
85
|
-
* @remarks
|
|
86
|
-
* Used in UI when displaying lists or collections.
|
|
87
|
-
*
|
|
88
|
-
* @example 'Users', 'Sales Orders', 'Product Categories'
|
|
89
|
-
*/
|
|
90
|
-
pluralLabel: string;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Detailed description of the entity's purpose
|
|
94
|
-
*
|
|
95
|
-
* @remarks
|
|
96
|
-
* Used for documentation and context-sensitive help
|
|
97
|
-
*/
|
|
98
|
-
description?: string;
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Array of field definitions that make up this entity
|
|
102
|
-
*
|
|
103
|
-
* @remarks
|
|
104
|
-
* Each field represents a column/attribute in the entity.
|
|
105
|
-
* Field names must be unique within the entity.
|
|
106
|
-
*
|
|
107
|
-
* @see ObjectField
|
|
108
|
-
*/
|
|
109
|
-
fields: ObjectField[];
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Name of the field that serves as the primary key
|
|
113
|
-
*
|
|
114
|
-
* @remarks
|
|
115
|
-
* The primary key uniquely identifies each record.
|
|
116
|
-
* Must be one of the field names in the fields array.
|
|
117
|
-
*
|
|
118
|
-
* @defaultValue 'id'
|
|
119
|
-
*
|
|
120
|
-
* @example 'id', 'uuid', 'userId'
|
|
121
|
-
*/
|
|
122
|
-
primaryKey?: string;
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Name of the field to use as the display/title field
|
|
126
|
-
*
|
|
127
|
-
* @remarks
|
|
128
|
-
* Used when showing a record reference in lookups, breadcrumbs, etc.
|
|
129
|
-
* Should be a field that uniquely and meaningfully identifies a record.
|
|
130
|
-
*
|
|
131
|
-
* @defaultValue 'name'
|
|
132
|
-
*
|
|
133
|
-
* @example 'name', 'title', 'email', 'code'
|
|
134
|
-
*/
|
|
135
|
-
displayField?: string;
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Icon identifier for the entity
|
|
139
|
-
*
|
|
140
|
-
* @remarks
|
|
141
|
-
* Used in navigation menus, headers, and lists.
|
|
142
|
-
* Can be an icon library reference (e.g., 'user', 'building', 'package')
|
|
143
|
-
* or a URL to a custom icon.
|
|
144
|
-
*
|
|
145
|
-
* @example 'user', 'briefcase', 'https://example.com/icon.svg'
|
|
146
|
-
*/
|
|
147
|
-
icon?: string;
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Color theme for the entity
|
|
151
|
-
*
|
|
152
|
-
* @remarks
|
|
153
|
-
* Used for visual distinction in UI elements.
|
|
154
|
-
* Can be a CSS color name, hex code, or theme variable.
|
|
155
|
-
*
|
|
156
|
-
* @example 'blue', '#3B82F6', 'primary'
|
|
157
|
-
*/
|
|
158
|
-
color?: string;
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Whether this entity should be audited
|
|
162
|
-
*
|
|
163
|
-
* @remarks
|
|
164
|
-
* When enabled, tracks create/update/delete operations with user and timestamp.
|
|
165
|
-
* Typically adds fields like: createdBy, createdAt, updatedBy, updatedAt
|
|
166
|
-
*
|
|
167
|
-
* @defaultValue false
|
|
168
|
-
*/
|
|
169
|
-
auditable?: boolean;
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Whether this entity supports soft deletion
|
|
173
|
-
*
|
|
174
|
-
* @remarks
|
|
175
|
-
* When enabled, records are marked as deleted rather than physically removed.
|
|
176
|
-
* Typically adds a 'deletedAt' timestamp field.
|
|
177
|
-
*
|
|
178
|
-
* @defaultValue false
|
|
179
|
-
*/
|
|
180
|
-
softDelete?: boolean;
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Whether this entity can be searched via full-text search
|
|
184
|
-
*
|
|
185
|
-
* @remarks
|
|
186
|
-
* When enabled, the entity is indexed for full-text search operations
|
|
187
|
-
*
|
|
188
|
-
* @defaultValue false
|
|
189
|
-
*/
|
|
190
|
-
searchable?: boolean;
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Names of fields to include in full-text search
|
|
194
|
-
*
|
|
195
|
-
* @remarks
|
|
196
|
-
* Only relevant when searchable is true.
|
|
197
|
-
* If not specified, all text fields are included.
|
|
198
|
-
*
|
|
199
|
-
* @example ['name', 'description', 'email']
|
|
200
|
-
*/
|
|
201
|
-
searchableFields?: string[];
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Permission scope identifier
|
|
205
|
-
*
|
|
206
|
-
* @remarks
|
|
207
|
-
* Defines the permission namespace for this entity.
|
|
208
|
-
* Used to generate permission strings like: '{scope}.read', '{scope}.write'
|
|
209
|
-
*
|
|
210
|
-
* @example 'user', 'sales.order', 'product.category'
|
|
211
|
-
*/
|
|
212
|
-
permissionScope?: string;
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Custom validation rules
|
|
216
|
-
*
|
|
217
|
-
* @remarks
|
|
218
|
-
* Array of validation rule identifiers that apply to the entire entity.
|
|
219
|
-
* Can reference built-in validators or custom validation functions.
|
|
220
|
-
*
|
|
221
|
-
* @example ['uniqueTogether:email,domain', 'requiredIf:field1,field2']
|
|
222
|
-
*/
|
|
223
|
-
validationRules?: string[];
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Database table name override
|
|
227
|
-
*
|
|
228
|
-
* @remarks
|
|
229
|
-
* By default, table name is derived from entity name.
|
|
230
|
-
* Use this to specify a custom table name.
|
|
231
|
-
*
|
|
232
|
-
* @example 'tbl_users', 'legacy_accounts'
|
|
233
|
-
*/
|
|
234
|
-
tableName?: string;
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Entity version for schema migration tracking
|
|
238
|
-
*
|
|
239
|
-
* @remarks
|
|
240
|
-
* Incremented when breaking changes are made to the entity structure.
|
|
241
|
-
* Used for migration management and compatibility checking.
|
|
242
|
-
*
|
|
243
|
-
* @defaultValue 1
|
|
244
|
-
*/
|
|
245
|
-
version?: number;
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Tags for categorization and filtering
|
|
249
|
-
*
|
|
250
|
-
* @remarks
|
|
251
|
-
* Used to organize entities into logical groups.
|
|
252
|
-
*
|
|
253
|
-
* @example ['core', 'sales', 'internal']
|
|
254
|
-
*/
|
|
255
|
-
tags?: string[];
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Custom metadata for extensions and plugins
|
|
259
|
-
*
|
|
260
|
-
* @remarks
|
|
261
|
-
* Allows third-party code to attach arbitrary metadata to entities
|
|
262
|
-
* without modifying the core interface
|
|
263
|
-
*/
|
|
264
|
-
metadata?: Record<string, unknown>;
|
|
265
|
-
}
|