@onetype/framework 2.0.49 → 2.0.51

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 (104) hide show
  1. package/addons/core/commands/front/directives/run.js +1 -1
  2. package/addons/core/commands/front/directives/submit.js +1 -1
  3. package/addons/core/commands/front/functions/api.js +1 -1
  4. package/addons/core/database/back/addon.js +14 -0
  5. package/addons/core/database/back/events/addon.init.js +42 -0
  6. package/addons/core/database/back/events/addon.item.init.js +24 -0
  7. package/addons/core/database/back/functions/item/create.js +92 -0
  8. package/addons/core/database/back/functions/item/delete.js +34 -0
  9. package/addons/core/database/back/functions/item/save.js +13 -0
  10. package/addons/core/database/back/functions/item/update.js +90 -0
  11. package/addons/core/database/back/functions/items/builder.js +160 -0
  12. package/addons/core/database/back/functions/items/filter.js +32 -0
  13. package/addons/core/database/back/functions/items/filters.js +7 -0
  14. package/addons/core/database/back/functions/items/find.js +28 -0
  15. package/addons/core/database/back/functions/items/methods/aggregate.js +15 -0
  16. package/addons/core/database/back/functions/items/methods/count.js +12 -0
  17. package/addons/core/database/back/functions/items/methods/exists.js +8 -0
  18. package/addons/core/database/back/functions/items/methods/many.js +13 -0
  19. package/addons/core/database/back/functions/items/methods/one.js +8 -0
  20. package/addons/core/database/back/functions/items/methods/plain.js +29 -0
  21. package/addons/core/database/back/functions/items/methods/query.js +33 -0
  22. package/addons/core/database/back/functions/items/methods.js +142 -0
  23. package/addons/core/database/back/functions/items/transform/join.js +63 -0
  24. package/addons/core/database/back/functions/items/transform/translate.js +57 -0
  25. package/addons/core/database/back/functions/items/validation.js +125 -0
  26. package/addons/core/database/back/item/catch/add.js +1 -1
  27. package/addons/core/database/back/items/commands/create.js +54 -0
  28. package/addons/core/database/back/items/commands/delete.js +62 -0
  29. package/addons/core/database/back/items/commands/find.js +118 -0
  30. package/addons/core/database/back/items/commands/update.js +70 -0
  31. package/addons/core/database/back/load.js +27 -26
  32. package/addons/core/database/front/events/addon.init.js +42 -0
  33. package/addons/core/database/front/functions/create.js +11 -0
  34. package/addons/core/database/front/functions/delete.js +10 -0
  35. package/addons/core/database/front/functions/find.js +96 -142
  36. package/addons/core/database/front/functions/update.js +12 -0
  37. package/addons/float/popup/css/popup.css +141 -18
  38. package/addons/float/popup/js/addon.js +5 -0
  39. package/addons/float/popup/js/functions/confirm.js +100 -0
  40. package/addons/float/popup/js/functions/toast.js +1 -1
  41. package/addons/float/popup/js/items/directives/tooltip.js +5 -1
  42. package/addons/render/directives/front/addon.js +5 -0
  43. package/addons/render/directives/front/functions/process/data.js +19 -1
  44. package/addons/render/directives/front/functions/process/locale.js +46 -0
  45. package/addons/render/directives/front/functions/process.js +4 -1
  46. package/addons/render/directives/front/items/self/660-form.js +74 -163
  47. package/addons/render/directives/front/items/self/750-html.js +1 -1
  48. package/addons/render/elements/front/items/self/form/button/button.css +9 -0
  49. package/addons/render/elements/front/items/self/form/button/button.js +1 -1
  50. package/addons/render/elements/front/items/self/form/color/color.css +1 -1
  51. package/addons/render/elements/front/items/self/form/color/color.js +25 -10
  52. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.css +410 -0
  53. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.js +191 -0
  54. package/addons/render/elements/front/items/self/form/field/field.css +18 -4
  55. package/addons/render/elements/front/items/self/form/field/field.js +6 -1
  56. package/addons/render/elements/front/items/self/form/section/section.js +3 -1
  57. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +8 -3
  58. package/addons/render/pages/core/addon.js +1 -1
  59. package/addons/render/pages/front/items/directives/change.js +1 -1
  60. package/addons/render/pages/front/styles/page.css +0 -7
  61. package/addons/render/transforms/js/functions/data.js +21 -2
  62. package/lib/src/classes/addon/class.js +0 -16
  63. package/lib/src/classes/addon/classes/item/class.js +0 -2
  64. package/lib/src/classes/addon/classes/item/mixins/get.js +0 -1
  65. package/lib/src/classes/addon/classes/render/mixins/compile.js +3 -2
  66. package/lib/src/classes/addon/mixins/items.js +2 -0
  67. package/lib/src/mixins/addons.js +2 -0
  68. package/lib/src/mixins/data.js +10 -9
  69. package/lib/src/mixins/emitter.js +5 -1
  70. package/lib/src/mixins/form.js +4 -0
  71. package/lib/src/mixins/function.js +6 -1
  72. package/lib/src/mixins/language.js +55 -0
  73. package/lib/src/mixins/locale.js +49 -0
  74. package/lib/src/onetype.js +6 -11
  75. package/package.json +1 -1
  76. package/addons/core/database/back/events/addon.add.js +0 -18
  77. package/addons/core/database/back/events/middleware/addon.items.find.js +0 -24
  78. package/addons/core/database/back/events/middleware/item.crud.create.js +0 -24
  79. package/addons/core/database/back/events/middleware/item.crud.delete.js +0 -24
  80. package/addons/core/database/back/events/middleware/item.crud.update.js +0 -24
  81. package/addons/core/database/back/functions/create.js +0 -6
  82. package/addons/core/database/back/functions/delete.js +0 -6
  83. package/addons/core/database/back/functions/find/builder.js +0 -160
  84. package/addons/core/database/back/functions/find/count.js +0 -12
  85. package/addons/core/database/back/functions/find/filter.js +0 -37
  86. package/addons/core/database/back/functions/find/filters.js +0 -7
  87. package/addons/core/database/back/functions/find/many.js +0 -93
  88. package/addons/core/database/back/functions/find/methods.js +0 -235
  89. package/addons/core/database/back/functions/find/plain.js +0 -25
  90. package/addons/core/database/back/functions/find/validation.js +0 -214
  91. package/addons/core/database/back/functions/find.js +0 -25
  92. package/addons/core/database/back/functions/update.js +0 -6
  93. package/addons/core/database/back/item/functions/create.js +0 -94
  94. package/addons/core/database/back/item/functions/delete.js +0 -25
  95. package/addons/core/database/back/item/functions/find.js +0 -19
  96. package/addons/core/database/back/item/functions/save.js +0 -15
  97. package/addons/core/database/back/item/functions/transaction.js +0 -17
  98. package/addons/core/database/back/item/functions/update.js +0 -76
  99. package/addons/core/database/back/items/commands/expose.js +0 -321
  100. package/addons/core/database/front/events/addon.add.js +0 -13
  101. package/lib/src/classes/addon/classes/item/mixins/crud.js +0 -28
  102. package/lib/src/classes/addon/mixins/find.js +0 -12
  103. package/lib/src/classes/addon/mixins/table.js +0 -35
  104. package/lib/src/mixins/dependencies.js +0 -104
@@ -1,321 +0,0 @@
1
- import onetype from '#framework/load.js';
2
-
3
- onetype.AddonReady('commands', (commands) =>
4
- {
5
- commands.Item({
6
- id: 'database:query',
7
- exposed: true,
8
- method: 'POST',
9
- endpoint: '/api/database',
10
- in: {
11
- addon: ['string', null, true],
12
- filters: {
13
- type: 'array',
14
- each: {
15
- type: 'object',
16
- config: 'filter'
17
- }
18
- },
19
- joins: {
20
- type: 'array',
21
- each: {
22
- type: 'object',
23
- config: 'join'
24
- }
25
- },
26
- sort_field: ['string'],
27
- sort_direction: ['string', 'asc'],
28
- select: {
29
- type: 'array',
30
- each: {
31
- type: 'string'
32
- }
33
- },
34
- page: ['number', 1],
35
- limit: ['number', 50]
36
- },
37
- out: {
38
- items: {
39
- type: 'array',
40
- each: {
41
- type: 'object'
42
- }
43
- },
44
- total: ['number'],
45
- page: ['number'],
46
- limit: ['number']
47
- },
48
- callback: async function(properties, resolve)
49
- {
50
- this.validate = () =>
51
- {
52
- const addon = onetype.Addon(properties.addon);
53
-
54
- if(!addon)
55
- {
56
- return { error: 'Addon not found.', code: 404 };
57
- }
58
-
59
- if(!addon.expose)
60
- {
61
- return { error: 'Addon is not exposed.', code: 403 };
62
- }
63
-
64
- return { addon, expose: addon.expose };
65
- };
66
-
67
- this.filter = (query, expose) =>
68
- {
69
- for(const filter of properties.filters)
70
- {
71
- if(!expose.filter.includes(filter.field))
72
- {
73
- return { error: 'Filter field "' + filter.field + '" is not allowed.', code: 400 };
74
- }
75
-
76
- query = query.filter(filter.field, filter.value, filter.operator || 'EQUALS');
77
- }
78
-
79
- return { query };
80
- };
81
-
82
- this.sort = (query, expose) =>
83
- {
84
- if(!expose.sort.includes(properties.sort_field))
85
- {
86
- return { error: 'Sort field "' + properties.sort_field + '" is not allowed.', code: 400 };
87
- }
88
-
89
- return { query: query.sort(properties.sort_field, properties.sort_direction || 'asc') };
90
- };
91
-
92
- this.join = (query, expose) =>
93
- {
94
- for(const join of properties.joins)
95
- {
96
- if(!expose.join || !expose.join.includes(join.addon))
97
- {
98
- return { error: 'Join addon "' + join.addon + '" is not allowed.', code: 400 };
99
- }
100
-
101
- query = query.join(join.addon, join.field, join.output || join.field);
102
- }
103
-
104
- return { query };
105
- };
106
-
107
- this.serialize = (items, expose) =>
108
- {
109
- return items.map(item =>
110
- {
111
- const data = item.Get(expose.select);
112
-
113
- if(properties.joins)
114
- {
115
- for(const join of properties.joins)
116
- {
117
- const output = join.output || join.field;
118
- const value = item.Get(output);
119
-
120
- if(!value)
121
- {
122
- data[output] = null;
123
- continue;
124
- }
125
-
126
- const target = onetype.AddonGet(join.addon);
127
- const allowed = target?.expose?.select || Object.keys(target.Fields().data);
128
- const selected = join.select?.length
129
- ? join.select.filter(field => allowed.includes(field))
130
- : allowed;
131
-
132
- const extract = (item) =>
133
- {
134
- if(item.Get) return item.Get(selected);
135
-
136
- const object = {};
137
- for(const field of selected) object[field] = item[field];
138
- return object;
139
- };
140
-
141
- data[output] = Array.isArray(value)
142
- ? value.map(item => extract(item))
143
- : extract(value);
144
- }
145
- }
146
-
147
- return data;
148
- });
149
- };
150
-
151
- this.deep = async (items, name, depth = 0) =>
152
- {
153
- if(depth > 5 || !items.length)
154
- {
155
- return;
156
- }
157
-
158
- const addon = onetype.AddonGet(name);
159
- const config = addon?.expose?.resolve;
160
-
161
- if(!config)
162
- {
163
- return;
164
- }
165
-
166
- for(const [field, target] of Object.entries(config))
167
- {
168
- const targetName = typeof target === 'string' ? target : target.addon;
169
- const targetAddon = onetype.AddonGet(targetName);
170
-
171
- if(!targetAddon)
172
- {
173
- continue;
174
- }
175
-
176
- const fields = targetAddon?.expose?.select || Object.keys(targetAddon.Fields().data);
177
- const ids = [];
178
-
179
- for(const item of items)
180
- {
181
- const value = item[field];
182
-
183
- if(Array.isArray(value))
184
- {
185
- value.forEach(id =>
186
- {
187
- if(id && typeof id !== 'object' && !ids.includes(id))
188
- {
189
- ids.push(id);
190
- }
191
- });
192
- }
193
- else if(value && typeof value !== 'object' && !ids.includes(value))
194
- {
195
- ids.push(value);
196
- }
197
- }
198
-
199
- if(!ids.length)
200
- {
201
- continue;
202
- }
203
-
204
- const fetched = await targetAddon.Find().filter('id', ids, 'IN').limit(ids.length).many();
205
- const map = {};
206
-
207
- fetched.forEach(item =>
208
- {
209
- map[String(item.Get('id'))] = item.Get(fields);
210
- });
211
-
212
- for(const item of items)
213
- {
214
- const value = item[field];
215
-
216
- if(Array.isArray(value))
217
- {
218
- item[field] = value.map(id => typeof id === 'object' ? id : (map[String(id)] || null)).filter(Boolean);
219
- }
220
- else if(value && typeof value !== 'object')
221
- {
222
- item[field] = map[String(value)] || null;
223
- }
224
- }
225
-
226
- const nested = items.flatMap(item =>
227
- {
228
- const val = item[field];
229
- return Array.isArray(val) ? val : (val && typeof val === 'object' ? [val] : []);
230
- });
231
-
232
- if(nested.length)
233
- {
234
- await this.deep(nested, targetName, depth + 1);
235
- }
236
- }
237
- };
238
-
239
- const { addon, expose, error, code } = this.validate();
240
-
241
- if(error)
242
- {
243
- return resolve(null, error, code);
244
- }
245
-
246
- const select = properties.select?.length
247
- ? properties.select.filter(field => expose.select.includes(field))
248
- : expose.select;
249
-
250
- let query = addon.Find();
251
-
252
- if(expose.callback)
253
- {
254
- expose.callback.call({http: this.http, properties}, query);
255
- }
256
-
257
- if(properties.filters)
258
- {
259
- const result = this.filter(query, expose);
260
-
261
- if(result.error)
262
- {
263
- return resolve(null, result.error, result.code);
264
- }
265
-
266
- query = result.query;
267
- }
268
-
269
- if(properties.sort_field)
270
- {
271
- const result = this.sort(query, expose);
272
-
273
- if(result.error)
274
- {
275
- return resolve(null, result.error, result.code);
276
- }
277
-
278
- query = result.query;
279
- }
280
-
281
- const limit = Math.min(properties.limit || 50, 500);
282
- const page = properties.page || 1;
283
- const total = await query.count();
284
-
285
- if(properties.joins)
286
- {
287
- const result = this.join(query, expose);
288
-
289
- if(result.error)
290
- {
291
- return resolve(null, result.error, result.code);
292
- }
293
-
294
- query = result.query;
295
- }
296
-
297
- const items = await query.page(page).limit(limit).many();
298
- const serialized = this.serialize(items, { ...expose, select });
299
-
300
- if(properties.joins)
301
- {
302
- for(const join of properties.joins)
303
- {
304
- const output = join.output || join.field;
305
- const nested = serialized.flatMap(item =>
306
- {
307
- const val = item[output];
308
- return Array.isArray(val) ? val : (val && typeof val === 'object' ? [val] : []);
309
- });
310
-
311
- if(nested.length)
312
- {
313
- await this.deep(nested, join.addon);
314
- }
315
- }
316
- }
317
-
318
- resolve({ items: serialized, total, page, limit });
319
- }
320
- });
321
- });
@@ -1,13 +0,0 @@
1
- onetype.EmitOn('@addon.add', (addon) =>
2
- {
3
- /* Silent Errors */
4
- addon.Expose = function()
5
- {
6
-
7
- };
8
-
9
- addon.Find = function()
10
- {
11
- return database.Fn('find', addon);
12
- };
13
- });
@@ -1,28 +0,0 @@
1
- const AddonItemCrud =
2
- {
3
- async Create(connection = 'primary')
4
- {
5
- const value = {item: this, table: this.addon.TableGet(), response: null, connection};
6
- await this.addon.onetype.Middleware('item.crud.create', value);
7
-
8
- return value.response;
9
- },
10
-
11
- async Update(connection = 'primary')
12
- {
13
- const value = {item: this, table: this.addon.TableGet(), response: null, connection};
14
- await this.addon.onetype.Middleware('item.crud.update', value);
15
-
16
- return value.response;
17
- },
18
-
19
- async Delete(connection = 'primary')
20
- {
21
- const value = {item: this, table: this.addon.TableGet(), response: null, connection};
22
- await this.addon.onetype.Middleware('item.crud.delete', value);
23
-
24
- return value.response;
25
- }
26
- };
27
-
28
- export default AddonItemCrud;
@@ -1,12 +0,0 @@
1
- const AddonFind =
2
- {
3
- Find(connection = 'primary')
4
- {
5
- const value = {addon: this, table: this.TableGet(), response: null, connection};
6
- this.onetype.Middleware('addon.items.find', value);
7
-
8
- return value.response;
9
- }
10
- };
11
-
12
- export default AddonFind;
@@ -1,35 +0,0 @@
1
- const AddonTable =
2
- {
3
- Table(name = null, prefix = null)
4
- {
5
- if(name === null)
6
- {
7
- return this.TableGet();
8
- }
9
- else
10
- {
11
- return this.TableSet(name, prefix);
12
- }
13
- },
14
-
15
- TableSet(name, prefix = null)
16
- {
17
- this.table.name = name;
18
- this.table.prefix = prefix;
19
- },
20
-
21
- TableGet()
22
- {
23
- return this.table;
24
- },
25
-
26
- TableOn(type, callback)
27
- {
28
- if(type in this.table.callbacks)
29
- {
30
- this.table.callbacks[type].push(callback);
31
- }
32
- }
33
- };
34
-
35
- export default AddonTable;
@@ -1,104 +0,0 @@
1
- const OneTypeDependencies =
2
- {
3
- Dependency(name, value = null)
4
- {
5
- if(value === null)
6
- {
7
- return this.DependencyGet(name, false);
8
- }
9
-
10
- return this.DependencyAdd(name, value);
11
- },
12
-
13
- Dependencies()
14
- {
15
- return this.dependencies.items;
16
- },
17
-
18
- DependencyGet(name, object = true)
19
- {
20
- if(this.DependencyHas(name))
21
- {
22
- if(object)
23
- {
24
- return this.dependencies.items[name];
25
- }
26
-
27
- return this.dependencies.items[name].value;
28
- }
29
-
30
- return null;
31
- },
32
-
33
- DependencyAdd(name, value, callback = true)
34
- {
35
- const dependency = this.dependencies.items[name] = {name, value};
36
-
37
- if(callback)
38
- {
39
- this.dependencies.callbacks.add.forEach(callback =>
40
- {
41
- try
42
- {
43
- callback(dependency);
44
- }
45
- catch(error)
46
- {
47
- this.Error(500, 'Error while performing dependency add callback.', {name});
48
- }
49
- });
50
-
51
- this.Emit('@dependency.add', dependency);
52
- }
53
-
54
- return this;
55
- },
56
-
57
- DependencyHas(name)
58
- {
59
- return name in this.dependencies.items;
60
- },
61
-
62
- DependencyRemove(name, callback = true)
63
- {
64
- const dependency = this.DependencyGet(name);
65
-
66
- if(!dependency)
67
- {
68
- return;
69
- }
70
-
71
- if(callback)
72
- {
73
- this.dependencies.callbacks.remove.forEach(callback =>
74
- {
75
- try
76
- {
77
- callback(dependency);
78
- }
79
- catch(error)
80
- {
81
- this.Error(500, 'Error while performing dependency remove callback.', {name});
82
- }
83
- });
84
-
85
- this.Emit('@dependency.remove', dependency);
86
- }
87
-
88
- delete this.dependencies.items[name];
89
- return this;
90
- },
91
-
92
- DependencyOn(type, callback)
93
- {
94
- if(!(type in this.dependencies.callbacks))
95
- {
96
- this.Error(400, 'Dependency catcher not found.', {type});
97
- return this;
98
- }
99
-
100
- this.dependencies.callbacks[type].push(callback);
101
- }
102
- };
103
-
104
- export default OneTypeDependencies;