@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.
Files changed (131) hide show
  1. package/addons/core/assets/back/functions/import.js +24 -0
  2. package/addons/render/pages/front/events/click.js +1 -1
  3. package/addons/render/pages/front/functions/change.js +1 -1
  4. package/docs/architecture.md +58 -10
  5. package/docs/frontend.md +29 -12
  6. package/lib/items/elements/form/button/button.js +106 -0
  7. package/lib/items/elements/form/button/styles/base.css +176 -0
  8. package/lib/items/elements/form/button/styles/sizes.css +78 -0
  9. package/lib/items/elements/form/button/styles/variants.css +421 -0
  10. package/lib/items/elements/form/checkbox/checkbox.js +58 -0
  11. package/lib/items/elements/form/checkbox/styles/base.css +52 -0
  12. package/lib/items/elements/form/checkbox/styles/sizes.css +39 -0
  13. package/lib/items/elements/form/checkbox/styles/variants.css +121 -0
  14. package/lib/items/elements/form/field/field.css +96 -0
  15. package/lib/items/elements/form/field/field.js +40 -0
  16. package/lib/items/elements/form/input/input.css +111 -0
  17. package/lib/items/elements/form/input/input.js +79 -0
  18. package/lib/items/elements/form/input/styles/base.css +26 -0
  19. package/lib/items/elements/form/input/styles/sizes.css +15 -0
  20. package/lib/items/elements/form/input/styles/variants.css +98 -0
  21. package/lib/items/elements/form/radio/radio.js +58 -0
  22. package/lib/items/elements/form/radio/styles/base.css +48 -0
  23. package/lib/items/elements/form/radio/styles/sizes.css +36 -0
  24. package/lib/items/elements/form/radio/styles/variants.css +121 -0
  25. package/lib/items/elements/form/rating/rating.css +95 -0
  26. package/lib/items/elements/form/rating/rating.js +89 -0
  27. package/lib/items/elements/form/section/section.css +129 -0
  28. package/lib/items/elements/form/section/section.js +40 -0
  29. package/lib/items/elements/form/slider/slider.css +244 -0
  30. package/lib/items/elements/form/slider/slider.js +70 -0
  31. package/lib/items/elements/form/textarea/textarea.css +117 -0
  32. package/lib/items/elements/form/textarea/textarea.js +70 -0
  33. package/lib/items/elements/global/card/card.css +57 -0
  34. package/lib/items/elements/global/card/card.js +48 -0
  35. package/lib/items/elements/global/code/code.css +66 -0
  36. package/lib/items/elements/global/code/code.js +40 -0
  37. package/lib/items/elements/global/faq/faq.css +76 -0
  38. package/lib/items/elements/global/faq/faq.js +44 -0
  39. package/lib/items/elements/global/heading/heading.css +106 -0
  40. package/lib/items/elements/global/heading/heading.js +52 -0
  41. package/lib/items/elements/global/markdown/markdown.css +248 -0
  42. package/lib/items/elements/global/markdown/markdown.js +23 -0
  43. package/lib/items/elements/global/notice/notice.css +91 -0
  44. package/lib/items/elements/global/notice/notice.js +35 -0
  45. package/lib/items/elements/global/parameters/params.css +69 -0
  46. package/lib/items/elements/global/parameters/params.js +32 -0
  47. package/lib/items/elements/global/tabs/tabs.css +47 -0
  48. package/lib/items/elements/global/tabs/tabs.js +32 -0
  49. package/lib/items/elements/global/tags/tags.css +42 -0
  50. package/lib/items/elements/global/tags/tags.js +46 -0
  51. package/lib/items/elements/sections/footer/footer.css +205 -0
  52. package/lib/items/elements/sections/footer/footer.js +109 -0
  53. package/lib/items/elements/sections/hero/hero.css +100 -0
  54. package/lib/items/elements/sections/hero/hero.js +54 -0
  55. package/lib/items/elements/sections/navbar/navbar.css +80 -0
  56. package/lib/items/elements/sections/navbar/navbar.js +42 -0
  57. package/lib/items/elements/sections/stats/stats.css +34 -0
  58. package/lib/items/elements/sections/stats/stats.js +74 -0
  59. package/lib/items/elements/status/code/code.css +48 -0
  60. package/lib/items/elements/status/code/code.js +44 -0
  61. package/lib/items/elements/status/empty/empty.css +59 -0
  62. package/lib/items/elements/status/empty/empty.js +43 -0
  63. package/lib/items/elements/status/error/error.css +55 -0
  64. package/lib/items/elements/status/error/error.js +55 -0
  65. package/lib/items/elements/status/loading/loading.css +62 -0
  66. package/lib/items/elements/status/loading/loading.js +31 -0
  67. package/lib/load.js +83 -5
  68. package/lib/src/classes/addon/class.js +1 -1
  69. package/lib/src/classes/addon/mixins/store.js +8 -8
  70. package/lib/src/mixins/assets.js +65 -0
  71. package/lib/src/mixins/data.js +7 -2
  72. package/lib/src/onetype.js +4 -0
  73. package/lib/styles/classes/layout.css +36 -0
  74. package/lib/styles/classes/spacing.css +96 -0
  75. package/lib/styles/queries.css +6 -0
  76. package/lib/styles/reset.css +169 -0
  77. package/lib/styles/variables.css +71 -0
  78. package/package.json +3 -3
  79. package/addons/core/clients/LICENSE.txt +0 -40
  80. package/addons/core/clients/README.md +0 -123
  81. package/addons/core/database/README.md +0 -276
  82. package/addons/render/assets/back/README.md +0 -1
  83. package/addons/render/assets/back/functions/import.js +0 -45
  84. package/addons/render/items/js/#register/addon.js +0 -14
  85. package/addons/render/items/js/functions/count.js +0 -9
  86. package/addons/render/items/js/functions/get.js +0 -34
  87. package/addons/render/items/js/functions/groups.js +0 -16
  88. package/addons/render/items/js/functions/render.js +0 -44
  89. package/addons/render/items/js/item/catch/add.js +0 -18
  90. package/test/front/test.js +0 -56
  91. package/test.js +0 -55
  92. /package/addons/{render → core}/assets/back/addon.js +0 -0
  93. /package/addons/{render → core}/assets/back/functions/css.js +0 -0
  94. /package/addons/{render → core}/assets/back/functions/js.js +0 -0
  95. /package/addons/{render → core}/assets/back/functions/scan/directories.js +0 -0
  96. /package/addons/{render → core}/assets/back/functions/scan/files.js +0 -0
  97. /package/addons/{render → core}/assets/back/functions/utils/read.js +0 -0
  98. /package/addons/{render → core}/assets/back/functions/utils/transform.js +0 -0
  99. /package/addons/{render → core}/assets/back/items/commands/css.js +0 -0
  100. /package/addons/{render → core}/assets/back/items/commands/js.js +0 -0
  101. /package/addons/{render → core}/assets/back/items/html/css.js +0 -0
  102. /package/addons/{render → core}/assets/back/items/html/js.js +0 -0
  103. /package/addons/{render → core}/assets/back/load.js +0 -0
  104. /package/addons/core/database/front/{#register/addon.js → addon.js} +0 -0
  105. /package/addons/float/modals/front/js/{#register/addon.js → addon.js} +0 -0
  106. /package/addons/float/overlays/front/js/{#register/addon.js → addon.js} +0 -0
  107. /package/addons/float/popups/js/{#register/addon.js → addon.js} +0 -0
  108. /package/addons/float/toasts/{#register/addon.js → addon.js} +0 -0
  109. /package/addons/float/tooltips/{#register/addon.js → addon.js} +0 -0
  110. /package/addons/render/transforms/{front/js/#register/addon.js → addon.js} +0 -0
  111. /package/addons/render/transforms/{front/js/functions → functions}/load/assets.js +0 -0
  112. /package/addons/render/transforms/{front/js/items → items}/directives/transform.js +0 -0
  113. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/accordion}/accordion.js +0 -0
  114. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/area.js +0 -0
  115. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bar.js +0 -0
  116. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bubble.js +0 -0
  117. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/doughnut.js +0 -0
  118. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/line.js +0 -0
  119. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/pie.js +0 -0
  120. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/radar.js +0 -0
  121. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/scatter.js +0 -0
  122. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/codeflask}/codeflask.js +0 -0
  123. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/codemirror}/codemirror.js +0 -0
  124. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/comparison}/comparison.js +0 -0
  125. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/heatmap}/heatmap.js +0 -0
  126. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/interact}/interact.js +0 -0
  127. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/particles}/particles.js +0 -0
  128. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/sparkline}/sparkline.js +0 -0
  129. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/swiper}/swiper.js +0 -0
  130. /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/tabs}/tabs.js +0 -0
  131. /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,9 +0,0 @@
1
- items.Fn('count', function(group = null)
2
- {
3
- if(!group)
4
- {
5
- return Object.keys(this.Items()).length;
6
- }
7
-
8
- return Object.values(this.Items()).filter(item => item.Get('group') === group).length;
9
- });
@@ -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,16 +0,0 @@
1
- items.Fn('groups', function()
2
- {
3
- const groups = new Set();
4
-
5
- Object.values(this.Items()).forEach(item =>
6
- {
7
- const group = item.Get('group');
8
-
9
- if(group)
10
- {
11
- groups.add(group);
12
- }
13
- });
14
-
15
- return Array.from(groups).sort();
16
- });
@@ -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
- });
@@ -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