@onetype/framework 2.0.21 → 2.0.24
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/addons/core/assets/back/functions/import.js +24 -0
- package/addons/render/pages/front/events/click.js +1 -1
- package/addons/render/pages/front/functions/change.js +1 -1
- package/docs/architecture.md +58 -10
- package/docs/frontend.md +29 -12
- package/lib/items/elements/form/button/button.js +106 -0
- package/lib/items/elements/form/button/styles/base.css +176 -0
- package/lib/items/elements/form/button/styles/sizes.css +78 -0
- package/lib/items/elements/form/button/styles/variants.css +421 -0
- package/lib/items/elements/form/checkbox/checkbox.js +58 -0
- package/lib/items/elements/form/checkbox/styles/base.css +52 -0
- package/lib/items/elements/form/checkbox/styles/sizes.css +39 -0
- package/lib/items/elements/form/checkbox/styles/variants.css +121 -0
- package/lib/items/elements/form/field/field.css +96 -0
- package/lib/items/elements/form/field/field.js +40 -0
- package/lib/items/elements/form/input/input.css +111 -0
- package/lib/items/elements/form/input/input.js +79 -0
- package/lib/items/elements/form/input/styles/base.css +26 -0
- package/lib/items/elements/form/input/styles/sizes.css +15 -0
- package/lib/items/elements/form/input/styles/variants.css +98 -0
- package/lib/items/elements/form/radio/radio.js +58 -0
- package/lib/items/elements/form/radio/styles/base.css +48 -0
- package/lib/items/elements/form/radio/styles/sizes.css +36 -0
- package/lib/items/elements/form/radio/styles/variants.css +121 -0
- package/lib/items/elements/form/rating/rating.css +95 -0
- package/lib/items/elements/form/rating/rating.js +89 -0
- package/lib/items/elements/form/section/section.css +129 -0
- package/lib/items/elements/form/section/section.js +40 -0
- package/lib/items/elements/form/slider/slider.css +244 -0
- package/lib/items/elements/form/slider/slider.js +70 -0
- package/lib/items/elements/form/textarea/textarea.css +117 -0
- package/lib/items/elements/form/textarea/textarea.js +70 -0
- package/lib/items/elements/global/card/card.css +57 -0
- package/lib/items/elements/global/card/card.js +48 -0
- package/lib/items/elements/global/code/code.css +66 -0
- package/lib/items/elements/global/code/code.js +40 -0
- package/lib/items/elements/global/faq/faq.css +76 -0
- package/lib/items/elements/global/faq/faq.js +44 -0
- package/lib/items/elements/global/heading/heading.css +106 -0
- package/lib/items/elements/global/heading/heading.js +52 -0
- package/lib/items/elements/global/markdown/markdown.css +248 -0
- package/lib/items/elements/global/markdown/markdown.js +23 -0
- package/lib/items/elements/global/notice/notice.css +91 -0
- package/lib/items/elements/global/notice/notice.js +35 -0
- package/lib/items/elements/global/parameters/params.css +69 -0
- package/lib/items/elements/global/parameters/params.js +32 -0
- package/lib/items/elements/global/tabs/tabs.css +47 -0
- package/lib/items/elements/global/tabs/tabs.js +32 -0
- package/lib/items/elements/global/tags/tags.css +42 -0
- package/lib/items/elements/global/tags/tags.js +46 -0
- package/lib/items/elements/sections/footer/footer.css +205 -0
- package/lib/items/elements/sections/footer/footer.js +109 -0
- package/lib/items/elements/sections/hero/hero.css +100 -0
- package/lib/items/elements/sections/hero/hero.js +54 -0
- package/lib/items/elements/sections/navbar/navbar.css +80 -0
- package/lib/items/elements/sections/navbar/navbar.js +42 -0
- package/lib/items/elements/sections/stats/stats.css +34 -0
- package/lib/items/elements/sections/stats/stats.js +74 -0
- package/lib/items/elements/status/code/code.css +48 -0
- package/lib/items/elements/status/code/code.js +44 -0
- package/lib/items/elements/status/empty/empty.css +59 -0
- package/lib/items/elements/status/empty/empty.js +43 -0
- package/lib/items/elements/status/error/error.css +55 -0
- package/lib/items/elements/status/error/error.js +55 -0
- package/lib/items/elements/status/loading/loading.css +62 -0
- package/lib/items/elements/status/loading/loading.js +31 -0
- package/lib/load.js +83 -5
- package/lib/src/classes/addon/class.js +1 -1
- package/lib/src/classes/addon/mixins/store.js +8 -8
- package/lib/src/mixins/assets.js +65 -0
- package/lib/src/mixins/data.js +7 -2
- package/lib/src/onetype.js +4 -0
- package/lib/styles/classes/layout.css +36 -0
- package/lib/styles/classes/spacing.css +96 -0
- package/lib/styles/queries.css +6 -0
- package/lib/styles/reset.css +169 -0
- package/lib/styles/variables.css +71 -0
- package/package.json +3 -3
- package/addons/core/clients/LICENSE.txt +0 -40
- package/addons/core/clients/README.md +0 -123
- package/addons/core/database/README.md +0 -276
- package/addons/render/assets/back/README.md +0 -1
- package/addons/render/assets/back/functions/import.js +0 -45
- package/addons/render/items/js/#register/addon.js +0 -14
- package/addons/render/items/js/functions/count.js +0 -9
- package/addons/render/items/js/functions/get.js +0 -34
- package/addons/render/items/js/functions/groups.js +0 -16
- package/addons/render/items/js/functions/render.js +0 -44
- package/addons/render/items/js/item/catch/add.js +0 -18
- package/test/front/test.js +0 -56
- package/test.js +0 -55
- /package/addons/{render → core}/assets/back/addon.js +0 -0
- /package/addons/{render → core}/assets/back/functions/css.js +0 -0
- /package/addons/{render → core}/assets/back/functions/js.js +0 -0
- /package/addons/{render → core}/assets/back/functions/scan/directories.js +0 -0
- /package/addons/{render → core}/assets/back/functions/scan/files.js +0 -0
- /package/addons/{render → core}/assets/back/functions/utils/read.js +0 -0
- /package/addons/{render → core}/assets/back/functions/utils/transform.js +0 -0
- /package/addons/{render → core}/assets/back/items/commands/css.js +0 -0
- /package/addons/{render → core}/assets/back/items/commands/js.js +0 -0
- /package/addons/{render → core}/assets/back/items/html/css.js +0 -0
- /package/addons/{render → core}/assets/back/items/html/js.js +0 -0
- /package/addons/{render → core}/assets/back/load.js +0 -0
- /package/addons/core/database/front/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/modals/front/js/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/overlays/front/js/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/popups/js/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/toasts/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/tooltips/{#register/addon.js → addon.js} +0 -0
- /package/addons/render/transforms/{front/js/#register/addon.js → addon.js} +0 -0
- /package/addons/render/transforms/{front/js/functions → functions}/load/assets.js +0 -0
- /package/addons/render/transforms/{front/js/items → items}/directives/transform.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/accordion}/accordion.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/area.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bar.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bubble.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/doughnut.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/line.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/pie.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/radar.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/scatter.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/codeflask}/codeflask.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/codemirror}/codemirror.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/comparison}/comparison.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/heatmap}/heatmap.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/interact}/interact.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/particles}/particles.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/sparkline}/sparkline.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/swiper}/swiper.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/tabs}/tabs.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/typed}/typed.js +0 -0
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
# Database Service
|
|
2
|
-
|
|
3
|
-
A comprehensive database abstraction layer built on top of Knex.js providing a powerful query builder, CRUD operations, and relationship management for PostgreSQL databases.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Advanced Query Builder** - Fluent API for complex queries with filtering, sorting, pagination
|
|
8
|
-
- **CRUD Operations** - Create, read, update, delete with automatic timestamp management
|
|
9
|
-
- **Relationship Management** - One-to-one and one-to-many relationship handling
|
|
10
|
-
- **Transaction Support** - Database transaction wrapper for atomic operations
|
|
11
|
-
- **Validation** - Built-in field and parameter validation
|
|
12
|
-
- **Connection Management** - Automatic PostgreSQL connection pooling via Knex.js
|
|
13
|
-
- **Middleware Integration** - Seamless integration with framework middleware system
|
|
14
|
-
|
|
15
|
-
## Installation
|
|
16
|
-
|
|
17
|
-
```javascript
|
|
18
|
-
import database from '#database/load.js';
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Configuration
|
|
22
|
-
|
|
23
|
-
Create a database connection item:
|
|
24
|
-
|
|
25
|
-
```javascript
|
|
26
|
-
const dbConnection = database.ItemAdd({
|
|
27
|
-
hostname: 'localhost',
|
|
28
|
-
port: 5432,
|
|
29
|
-
username: 'postgres',
|
|
30
|
-
password: 'password',
|
|
31
|
-
database: 'myapp'
|
|
32
|
-
});
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Framework Integration
|
|
36
|
-
|
|
37
|
-
The database service integrates seamlessly with the framework's middleware system. Each addon automatically gets `Find()` method, and each item gets `Create()`, `Update()`, `Delete()` methods that call middleware interceptors.
|
|
38
|
-
|
|
39
|
-
### Addon Methods
|
|
40
|
-
|
|
41
|
-
```javascript
|
|
42
|
-
// Every addon has a Find() method
|
|
43
|
-
const users = await userAddon.Find()
|
|
44
|
-
.filter('status', 'active')
|
|
45
|
-
.many();
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Item Methods
|
|
49
|
-
|
|
50
|
-
```javascript
|
|
51
|
-
// Every item has CRUD methods
|
|
52
|
-
await userItem.Create('primary'); // Creates new record
|
|
53
|
-
await userItem.Update('primary'); // Updates existing record
|
|
54
|
-
await userItem.Delete('primary'); // Deletes record
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
These methods work by calling middleware interceptors:
|
|
58
|
-
|
|
59
|
-
```javascript
|
|
60
|
-
// How item methods work internally
|
|
61
|
-
const AddonItemCrud = {
|
|
62
|
-
async Create(connection = 'primary') {
|
|
63
|
-
const value = {item: this, table: this.addon.TableGet(), response: null, connection};
|
|
64
|
-
await this.addon.onetype.Middleware('item.crud.create', value);
|
|
65
|
-
return value.response;
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
async Update(connection = 'primary') {
|
|
69
|
-
const value = {item: this, table: this.addon.TableGet(), response: null, connection};
|
|
70
|
-
await this.addon.onetype.Middleware('item.crud.update', value);
|
|
71
|
-
return value.response;
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
async Delete(connection = 'primary') {
|
|
75
|
-
const value = {item: this, table: this.addon.TableGet(), response: null, connection};
|
|
76
|
-
await this.addon.onetype.Middleware('item.crud.delete', value);
|
|
77
|
-
return value.response;
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
The database service intercepts these middleware calls:
|
|
83
|
-
- `item.crud.create` → `database.Fn('create')`
|
|
84
|
-
- `item.crud.update` → `database.Fn('update')`
|
|
85
|
-
- `item.crud.delete` → `database.Fn('delete')`
|
|
86
|
-
- `addon.items.find` → `database.Fn('find')`
|
|
87
|
-
|
|
88
|
-
## Basic Usage
|
|
89
|
-
|
|
90
|
-
### Finding Records
|
|
91
|
-
|
|
92
|
-
```javascript
|
|
93
|
-
// Simple find
|
|
94
|
-
const users = await database.Fn('find', connection, table, addon)
|
|
95
|
-
.filter('status', 'active')
|
|
96
|
-
.many();
|
|
97
|
-
|
|
98
|
-
// Complex filtering
|
|
99
|
-
const results = await database.Fn('find', connection, table, addon)
|
|
100
|
-
.filter('age', 18, 'GREATER EQUALS')
|
|
101
|
-
.filter('name', 'John%', 'LIKE')
|
|
102
|
-
.sort('created_at', 'desc')
|
|
103
|
-
.limit(10)
|
|
104
|
-
.page(2)
|
|
105
|
-
.many();
|
|
106
|
-
|
|
107
|
-
// Grouped conditions
|
|
108
|
-
const users = await database.Fn('find', connection, table, addon)
|
|
109
|
-
.group('OR')
|
|
110
|
-
.filter('status', 'premium')
|
|
111
|
-
.filter('trial_expires', new Date(), 'GREATER')
|
|
112
|
-
.end()
|
|
113
|
-
.filter('active', true)
|
|
114
|
-
.many();
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### CRUD Operations
|
|
118
|
-
|
|
119
|
-
```javascript
|
|
120
|
-
// Framework integration - automatic methods on items
|
|
121
|
-
await userItem.Create('primary');
|
|
122
|
-
await userItem.Update('primary');
|
|
123
|
-
await userItem.Delete('primary');
|
|
124
|
-
|
|
125
|
-
// Direct database service usage
|
|
126
|
-
await database.Fn('create', connection, table, item);
|
|
127
|
-
await database.Fn('update', connection, table, item);
|
|
128
|
-
await database.Fn('delete', connection, table, item);
|
|
129
|
-
|
|
130
|
-
// Item-level functions (bypassing middleware)
|
|
131
|
-
await item.save();
|
|
132
|
-
await item.create(addon);
|
|
133
|
-
await item.update();
|
|
134
|
-
await item.delete();
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Framework vs Direct Usage
|
|
138
|
-
|
|
139
|
-
```javascript
|
|
140
|
-
// Framework way (goes through middleware)
|
|
141
|
-
const user = userAddon.ItemAdd({name: 'John', email: 'john@example.com'});
|
|
142
|
-
await user.Create('primary');
|
|
143
|
-
|
|
144
|
-
// Direct way (bypasses middleware)
|
|
145
|
-
const user = userAddon.ItemAdd({name: 'John', email: 'john@example.com'});
|
|
146
|
-
await user.save();
|
|
147
|
-
|
|
148
|
-
// Both achieve the same result, framework way allows middleware interception
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Item-Level Operations
|
|
152
|
-
|
|
153
|
-
```javascript
|
|
154
|
-
// Direct item operations
|
|
155
|
-
await item.create(addon);
|
|
156
|
-
await item.update();
|
|
157
|
-
await item.delete();
|
|
158
|
-
await item.save();
|
|
159
|
-
|
|
160
|
-
// Find related items
|
|
161
|
-
const user = await item.relation('user_id', userAddon);
|
|
162
|
-
const comments = await item.relations('post_id', commentAddon);
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
## Query Methods
|
|
166
|
-
|
|
167
|
-
### Filters
|
|
168
|
-
|
|
169
|
-
| Operator | Description | Example |
|
|
170
|
-
|----------|-------------|---------|
|
|
171
|
-
| `EQUALS` | Exact match (default) | `.filter('status', 'active')` |
|
|
172
|
-
| `NOT EQUALS` | Not equal | `.filter('status', 'inactive', 'NOT EQUALS')` |
|
|
173
|
-
| `GREATER` | Greater than | `.filter('age', 18, 'GREATER')` |
|
|
174
|
-
| `LESS` | Less than | `.filter('price', 100, 'LESS')` |
|
|
175
|
-
| `LIKE` | Pattern matching | `.filter('name', 'John%', 'LIKE')` |
|
|
176
|
-
| `IN` | Value in list | `.filter('status', ['active', 'pending'], 'IN')` |
|
|
177
|
-
| `BETWEEN` | Between values | `.filter('age', [18, 65], 'BETWEEN')` |
|
|
178
|
-
| `NULL` | Is null | `.filter('deleted_at', null, 'NULL')` |
|
|
179
|
-
|
|
180
|
-
### Query Builder Methods
|
|
181
|
-
|
|
182
|
-
```javascript
|
|
183
|
-
const query = database.Fn('find', connection, table, addon);
|
|
184
|
-
|
|
185
|
-
// Filtering
|
|
186
|
-
query.filter(field, value, operator)
|
|
187
|
-
query.orFilter(field, value, operator)
|
|
188
|
-
|
|
189
|
-
// Grouping
|
|
190
|
-
query.group('AND|OR')
|
|
191
|
-
.filter(...)
|
|
192
|
-
.filter(...)
|
|
193
|
-
.end()
|
|
194
|
-
|
|
195
|
-
// Sorting & Pagination
|
|
196
|
-
query.sort(field, 'asc|desc')
|
|
197
|
-
query.limit(count)
|
|
198
|
-
query.page(number)
|
|
199
|
-
|
|
200
|
-
// Selection
|
|
201
|
-
query.select(['field1', 'field2'])
|
|
202
|
-
query.distinct()
|
|
203
|
-
|
|
204
|
-
// Execution
|
|
205
|
-
await query.many() // Get multiple records
|
|
206
|
-
await query.one() // Get single record
|
|
207
|
-
await query.count() // Get count
|
|
208
|
-
await query.exists() // Check if exists
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## Transactions
|
|
212
|
-
|
|
213
|
-
```javascript
|
|
214
|
-
await item.transaction(async (trx) => {
|
|
215
|
-
await database.Fn('create', trx, table1, item1);
|
|
216
|
-
await database.Fn('update', trx, table2, item2);
|
|
217
|
-
// Auto-commit on success, auto-rollback on error
|
|
218
|
-
});
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
## Relationships
|
|
222
|
-
|
|
223
|
-
```javascript
|
|
224
|
-
// One-to-one relationship
|
|
225
|
-
const user = await post.relation('user_id', userAddon);
|
|
226
|
-
|
|
227
|
-
// One-to-many relationship
|
|
228
|
-
const comments = await post.relations('post_id', commentAddon);
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
## Validation
|
|
232
|
-
|
|
233
|
-
The service includes automatic validation for:
|
|
234
|
-
- Field names (alphanumeric + underscore + dot, max 64 chars)
|
|
235
|
-
- Operators (must be from supported list)
|
|
236
|
-
- Values (string, number, boolean, or null)
|
|
237
|
-
- Pagination parameters (positive integers)
|
|
238
|
-
- Sort directions ('asc' or 'desc')
|
|
239
|
-
|
|
240
|
-
## Error Handling
|
|
241
|
-
|
|
242
|
-
All operations include comprehensive error handling with descriptive messages:
|
|
243
|
-
|
|
244
|
-
```javascript
|
|
245
|
-
try {
|
|
246
|
-
const results = await query.filter('invalid-field!', 'value').many();
|
|
247
|
-
} catch (error) {
|
|
248
|
-
// Error: Invalid field name format: 'invalid-field!'...
|
|
249
|
-
}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
## Architecture
|
|
253
|
-
|
|
254
|
-
The service uses a layered architecture:
|
|
255
|
-
|
|
256
|
-
1. **Item Functions** - Core database operations
|
|
257
|
-
2. **Main Functions** - Thin wrappers calling item functions
|
|
258
|
-
3. **Middleware** - Framework integration layer
|
|
259
|
-
4. **Query Builder** - Fluent API for complex queries
|
|
260
|
-
|
|
261
|
-
This design ensures code reuse and maintains consistency across all access patterns.
|
|
262
|
-
|
|
263
|
-
## Connection Management
|
|
264
|
-
|
|
265
|
-
Connections are automatically managed with:
|
|
266
|
-
- Connection pooling (0-25 connections)
|
|
267
|
-
- 1-second timeouts for acquisition and idle
|
|
268
|
-
- Automatic cleanup and error handling
|
|
269
|
-
|
|
270
|
-
## Data Schemas
|
|
271
|
-
|
|
272
|
-
The service defines validation schemas for:
|
|
273
|
-
- `filter` - Query filter structure
|
|
274
|
-
- `query` - Complete query parameters
|
|
275
|
-
|
|
276
|
-
These ensure type safety and parameter validation throughout the system.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# assets
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import assets from '../addon.js';
|
|
2
|
-
|
|
3
|
-
import { dirname, resolve } from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
|
|
6
|
-
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', '..', '..');
|
|
7
|
-
|
|
8
|
-
const map =
|
|
9
|
-
{
|
|
10
|
-
framework: { js: 'lib', ignore: ['lib/load.js'] },
|
|
11
|
-
commands: { js: 'addons/core/commands', ignore: ['addons/core/commands/back'] },
|
|
12
|
-
database: { js: 'addons/core/database/front' },
|
|
13
|
-
actions: { js: 'addons/modules/actions/front' },
|
|
14
|
-
variables: { js: 'addons/modules/variables' },
|
|
15
|
-
bugs: { js: 'addons/modules/bugs/front' },
|
|
16
|
-
events: { js: 'addons/modules/events/front' },
|
|
17
|
-
schedules: { js: 'addons/modules/schedules/front' },
|
|
18
|
-
shortcuts: { js: 'addons/modules/shortcuts/front' },
|
|
19
|
-
sources: { js: 'addons/modules/sources/front' },
|
|
20
|
-
directives: { js: 'addons/render/directives/front' },
|
|
21
|
-
transforms: { js: 'addons/render/transforms/front' },
|
|
22
|
-
pages: { js: 'addons/render/pages', css: 'addons/render/pages/front' },
|
|
23
|
-
elements: { js: 'addons/render/elements/front', css: 'addons/render/elements/front' },
|
|
24
|
-
float: { js: 'addons/float', css: 'addons/float' }
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
assets.Fn('import', function(modules)
|
|
28
|
-
{
|
|
29
|
-
for (let i = 0; i < modules.length; i++)
|
|
30
|
-
{
|
|
31
|
-
const config = map[modules[i]];
|
|
32
|
-
|
|
33
|
-
if (!config) continue;
|
|
34
|
-
|
|
35
|
-
if (config.js)
|
|
36
|
-
{
|
|
37
|
-
assets.Item({ type: 'js', order: i, path: resolve(root, config.js), ignore: config.ignore || [] });
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (config.css)
|
|
41
|
-
{
|
|
42
|
-
assets.Item({ type: 'css', order: i, path: resolve(root, config.css) });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
const items = onetype.Addon('items', (addon) =>
|
|
2
|
-
{
|
|
3
|
-
addon.Field('id', ['string|number']);
|
|
4
|
-
|
|
5
|
-
addon.Field('group', ['string']);
|
|
6
|
-
addon.Field('order', ['number', 0]);
|
|
7
|
-
|
|
8
|
-
addon.Field('before', ['string|number']);
|
|
9
|
-
addon.Field('after', ['string|number']);
|
|
10
|
-
|
|
11
|
-
addon.Field('data', ['object', {}]);
|
|
12
|
-
addon.Field('render', ['function']);
|
|
13
|
-
addon.Field('condition', ['function']);
|
|
14
|
-
});
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
items.Fn('get', function(group, options = {})
|
|
2
|
-
{
|
|
3
|
-
const {
|
|
4
|
-
order = true,
|
|
5
|
-
data = true,
|
|
6
|
-
condition = true
|
|
7
|
-
} = options;
|
|
8
|
-
|
|
9
|
-
let result = Object.values(this.Items()).filter(item => item.Get('group') === group);
|
|
10
|
-
|
|
11
|
-
// Apply condition filter if enabled
|
|
12
|
-
if(condition)
|
|
13
|
-
{
|
|
14
|
-
result = result.filter(item =>
|
|
15
|
-
{
|
|
16
|
-
const cond = item.Get('condition');
|
|
17
|
-
return !cond || cond(item);
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Sort by order if enabled
|
|
22
|
-
if(order)
|
|
23
|
-
{
|
|
24
|
-
result = result.sort((a, b) => a.Get('order') - b.Get('order'));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Return only data if enabled, otherwise return items
|
|
28
|
-
if(data)
|
|
29
|
-
{
|
|
30
|
-
result = result.map(item => item.Get('data'));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return result;
|
|
34
|
-
});
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
items.Fn('renderGroup', function(group, options = {})
|
|
2
|
-
{
|
|
3
|
-
const {
|
|
4
|
-
order = true,
|
|
5
|
-
condition = true,
|
|
6
|
-
wrapper = null
|
|
7
|
-
} = options;
|
|
8
|
-
|
|
9
|
-
let result = Object.values(this.Items())
|
|
10
|
-
.filter(item => item.Get('group') === group && item.Get('render'));
|
|
11
|
-
|
|
12
|
-
// Apply condition filter if enabled
|
|
13
|
-
if(condition)
|
|
14
|
-
{
|
|
15
|
-
result = result.filter(item =>
|
|
16
|
-
{
|
|
17
|
-
const cond = item.Get('condition');
|
|
18
|
-
return !cond || cond(item);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Sort by order if enabled
|
|
23
|
-
if(order)
|
|
24
|
-
{
|
|
25
|
-
result = result.sort((a, b) => a.Get('order') - b.Get('order'));
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Render all items
|
|
29
|
-
const rendered = result.map(item =>
|
|
30
|
-
{
|
|
31
|
-
const render = this.Render(item.Get('id'));
|
|
32
|
-
return render ? render.Element : null;
|
|
33
|
-
}).filter(el => el !== null);
|
|
34
|
-
|
|
35
|
-
// Wrap in container if specified
|
|
36
|
-
if(wrapper)
|
|
37
|
-
{
|
|
38
|
-
const container = document.createElement(wrapper);
|
|
39
|
-
rendered.forEach(el => container.appendChild(el));
|
|
40
|
-
return container;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return rendered;
|
|
44
|
-
});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
items.ItemOn('add', (item) =>
|
|
2
|
-
{
|
|
3
|
-
if(item.Get('render'))
|
|
4
|
-
{
|
|
5
|
-
items.RenderAdd(item.Get('id'), function()
|
|
6
|
-
{
|
|
7
|
-
const data = item.Get('data');
|
|
8
|
-
|
|
9
|
-
// Merge data into render context
|
|
10
|
-
for(const key in data)
|
|
11
|
-
{
|
|
12
|
-
this.Data[key] = data[key];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return item.Get('render').call(this);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
});
|
package/test/front/test.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
pages.Item({
|
|
2
|
-
id: 'home',
|
|
3
|
-
route: '/',
|
|
4
|
-
title: 'ot-command test',
|
|
5
|
-
grid: {
|
|
6
|
-
template: '"content"',
|
|
7
|
-
columns: '1fr',
|
|
8
|
-
rows: '1fr'
|
|
9
|
-
},
|
|
10
|
-
areas: {
|
|
11
|
-
content: function()
|
|
12
|
-
{
|
|
13
|
-
return `
|
|
14
|
-
1
|
|
15
|
-
{{ state.user }}
|
|
16
|
-
|
|
17
|
-
<h1>ot-command test</h1>
|
|
18
|
-
<ot-command-submit command="test" :api="true" bind="test" :data='{"name": "dejan"}'>
|
|
19
|
-
<input name="name" placeholder="Name"/>
|
|
20
|
-
<button type="submit">Send</button>
|
|
21
|
-
<p ot-if="test.loading">Loading...</p>
|
|
22
|
-
<p ot-if="test.error">Error: {{test.error}}</p>
|
|
23
|
-
<div ot-if="test.response">dsas<ot-page route="/2"></ot-page></div>
|
|
24
|
-
</ot-command-submit>
|
|
25
|
-
`;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
pages.Item({
|
|
32
|
-
id: 'hom2e',
|
|
33
|
-
route: '/2',
|
|
34
|
-
title: 'ot-command test',
|
|
35
|
-
grid: {
|
|
36
|
-
template: '"content"',
|
|
37
|
-
columns: '1fr',
|
|
38
|
-
rows: '1fr'
|
|
39
|
-
},
|
|
40
|
-
areas: {
|
|
41
|
-
content: function()
|
|
42
|
-
{
|
|
43
|
-
return `
|
|
44
|
-
2
|
|
45
|
-
<h1>ot-command test</h1>
|
|
46
|
-
<ot-command-submit command="test" :api="true" bind="test" :data='{"name": "dejan"}'>
|
|
47
|
-
<input name="name" placeholder="Name"/>
|
|
48
|
-
<button type="submit">Send</button>
|
|
49
|
-
<p ot-if="test.loading">Loading...</p>
|
|
50
|
-
<p ot-if="test.error">Error: {{test.error}}</p>
|
|
51
|
-
<div ot-if="test.response">dsas<ot-page route="/"></ot-page></div>
|
|
52
|
-
</ot-command-submit>
|
|
53
|
-
`;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
});
|
package/test.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { dirname, resolve } from 'path';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
|
|
4
|
-
const root = resolve(dirname(fileURLToPath(import.meta.url)));
|
|
5
|
-
|
|
6
|
-
import assets from './addons/render/assets/back/load.js';
|
|
7
|
-
import commands from './addons/core/commands/core/load.js';
|
|
8
|
-
import pages from './addons/render/pages/core/load.js';
|
|
9
|
-
import html from './addons/render/html/load.js';
|
|
10
|
-
import variables from './addons/modules/variables/core/load.js';
|
|
11
|
-
|
|
12
|
-
assets.Fn('import', ['framework', 'variables', 'directives', 'commands', 'pages']);
|
|
13
|
-
assets.Item({ type: 'js', order: 10, path: resolve(root, 'test/front') });
|
|
14
|
-
assets.Item({ type: 'css', order: 10, path: resolve(root, 'test/front') });
|
|
15
|
-
|
|
16
|
-
commands.Item({
|
|
17
|
-
id: 'html',
|
|
18
|
-
exposed: true,
|
|
19
|
-
method: 'GET',
|
|
20
|
-
endpoint: '*',
|
|
21
|
-
type: 'HTML',
|
|
22
|
-
callback: async function(properties, resolve)
|
|
23
|
-
{
|
|
24
|
-
resolve(html.Fn('render'));
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
console.log($ot.var('test'));
|
|
29
|
-
|
|
30
|
-
commands.Item({
|
|
31
|
-
id: 'test',
|
|
32
|
-
exposed: true,
|
|
33
|
-
method: 'POST',
|
|
34
|
-
endpoint: '/api/test',
|
|
35
|
-
type: 'JSON',
|
|
36
|
-
in: {
|
|
37
|
-
name: ['string', 'World']
|
|
38
|
-
},
|
|
39
|
-
out: {
|
|
40
|
-
message: ['string']
|
|
41
|
-
},
|
|
42
|
-
callback: async function(properties, resolve)
|
|
43
|
-
{
|
|
44
|
-
resolve({ message: 'Hello, ' + properties.name + '!' });
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
commands.Fn('expose', 'commands:run', '/api/commands/run');
|
|
49
|
-
|
|
50
|
-
await commands.Fn('http.server', 3000, {
|
|
51
|
-
onStart: () =>
|
|
52
|
-
{
|
|
53
|
-
console.log('test server running on http://localhost:3000');
|
|
54
|
-
}
|
|
55
|
-
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/area.js
RENAMED
|
File without changes
|
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bubble.js
RENAMED
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/doughnut.js
RENAMED
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/line.js
RENAMED
|
File without changes
|
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/radar.js
RENAMED
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/scatter.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms/heatmap}/heatmap.js
RENAMED
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms/interact}/interact.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{addons/render/transforms/front/js/items/self → lib/items/transforms/swiper}/swiper.js
RENAMED
|
File without changes
|