@onetype/framework 2.0.42 → 2.0.43
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/ai/addon.js +78 -0
- package/addons/ai/addons/agents/item/functions/describe.js +28 -0
- package/addons/ai/addons/agents/item/functions/execute.js +41 -0
- package/addons/ai/addons/agents/item/functions/messages.js +38 -0
- package/addons/ai/addons/agents/item/functions/run.js +49 -0
- package/addons/ai/addons/agents/item/functions/schema.js +45 -0
- package/addons/ai/addons/agents/load.js +9 -0
- package/addons/ai/addons/orchestrators/item/functions/agents/execute.js +14 -0
- package/addons/ai/addons/orchestrators/item/functions/agents/steps.js +23 -0
- package/addons/ai/addons/orchestrators/item/functions/modes/action.js +131 -0
- package/addons/ai/addons/orchestrators/item/functions/run.js +28 -0
- package/addons/ai/addons/orchestrators/item/functions/utils/emit.js +11 -0
- package/addons/ai/addons/orchestrators/item/functions/utils/history.js +8 -0
- package/addons/ai/addons/orchestrators/item/functions/utils/state.js +29 -0
- package/addons/ai/addons/orchestrators/load.js +15 -0
- package/addons/ai/addons/pipelines/functions/execute.js +56 -0
- package/addons/ai/addons/pipelines/functions/run.js +72 -0
- package/addons/ai/addons/pipelines/load.js +6 -0
- package/addons/ai/addons/providers/functions/default.js +8 -0
- package/addons/ai/addons/providers/item/functions/request.js +108 -0
- package/addons/ai/addons/providers/items/nue.js +69 -0
- package/addons/ai/addons/providers/items/ollama.js +79 -0
- package/addons/ai/addons/providers/load.js +8 -0
- package/addons/ai/items/agents/steps.js +159 -0
- package/addons/ai/items/agents/summary.js +29 -0
- package/addons/ai/items/orchestrators/general.js +7 -0
- package/addons/ai/load.js +13 -0
- package/addons/ai/test/agents.js +149 -0
- package/addons/ai/test/index.js +63 -0
- package/addons/core/assets/back/functions/utils/transform.js +21 -23
- package/addons/core/assets/back/items/html/css.js +2 -2
- package/addons/core/assets/back/items/html/js.js +2 -2
- package/addons/core/clients/back/http/item/functions/gRPC/create.js +3 -3
- package/addons/core/clients/back/http/item/functions/http/create.js +3 -3
- package/addons/core/commands/back/functions/grpc/client.js +3 -3
- package/addons/core/commands/back/functions/grpc/server.js +2 -2
- package/addons/core/commands/core/addon.js +4 -1
- package/addons/core/commands/core/functions/run.js +1 -1
- package/addons/core/commands/core/item/functions/run.js +1 -1
- package/addons/core/commands/core/load.js +27 -9
- package/addons/core/database/back/events/addon.add.js +1 -1
- package/addons/core/database/back/events/middleware/addon.items.find.js +2 -2
- package/addons/core/database/back/events/middleware/item.crud.create.js +2 -2
- package/addons/core/database/back/events/middleware/item.crud.delete.js +2 -2
- package/addons/core/database/back/events/middleware/item.crud.update.js +2 -2
- package/addons/core/database/back/item/functions/create.js +4 -3
- package/addons/core/database/back/item/functions/delete.js +1 -1
- package/addons/core/database/back/item/functions/find.js +1 -1
- package/addons/core/database/back/item/functions/update.js +3 -3
- package/addons/core/database/front/events/addon.add.js +1 -1
- package/addons/core/servers/back/grpc/item/functions/start.js +1 -1
- package/addons/core/servers/back/http/item/functions/start.js +6 -6
- package/addons/float/overlays/css/overlay.css +35 -0
- package/addons/float/overlays/js/addon.js +18 -0
- package/addons/float/overlays/js/events/click.js +27 -0
- package/addons/float/overlays/js/events/escape.js +18 -0
- package/addons/float/overlays/js/functions/flip.js +51 -0
- package/addons/float/overlays/js/functions/index.js +17 -0
- package/addons/float/overlays/js/functions/position.js +62 -0
- package/addons/float/overlays/js/functions/reposition.js +29 -0
- package/addons/float/overlays/js/item/catch/add.js +123 -0
- package/addons/float/overlays/js/item/catch/remove.js +29 -0
- package/addons/float/popup/css/popup.css +93 -0
- package/addons/float/popup/js/addon.js +34 -0
- package/addons/float/popup/js/functions/close.js +25 -0
- package/addons/float/popup/js/functions/modal.js +31 -0
- package/addons/float/popup/js/functions/popup.js +21 -0
- package/addons/float/popup/js/functions/toast.js +55 -0
- package/addons/float/popup/js/functions/tooltip.js +34 -0
- package/addons/float/popup/js/items/directives/popup.js +58 -0
- package/addons/float/popup/js/items/directives/tooltip.js +72 -0
- package/addons/render/directives/front/{js/#register/addon.js → addon.js} +8 -8
- package/addons/render/directives/front/{js/functions → functions}/process/attributes.js +7 -2
- package/addons/render/directives/front/{js/functions → functions}/process/match.js +8 -8
- package/addons/render/directives/front/functions/process.js +88 -0
- package/{lib/items/directives → addons/render/directives/front/items/self}/1000-render.js +1 -0
- package/{lib/items/directives → addons/render/directives/front/items/self}/110-show.js +3 -5
- package/{lib/items/directives → addons/render/directives/front/items/self}/160-slot.js +1 -0
- package/{lib/items/directives → addons/render/directives/front/items/self}/200-for.js +3 -3
- package/addons/render/directives/front/items/self/500-click-outside.js +45 -0
- package/addons/render/directives/front/items/self/500-events.js +68 -0
- package/addons/render/directives/front/items/self/500-mouse-enter.js +62 -0
- package/addons/render/directives/front/items/self/500-mouse-leave.js +62 -0
- package/{lib/items/directives → addons/render/directives/front/items/self}/650-fetch.js +2 -3
- package/{lib/items/directives → addons/render/directives/front/items/self}/660-form.js +5 -6
- package/addons/render/{elements/front/items/directives → directives/front/items/self}/element.js +7 -1
- package/addons/render/directives/front/items/self/node.js +43 -0
- package/{lib/items/elements → addons/render/elements/front/items/self}/cards/pricing/pricing.js +2 -2
- package/addons/render/elements/front/items/self/core/builder/builder.css +180 -0
- package/addons/render/elements/front/items/self/core/builder/builder.js +257 -0
- package/addons/render/elements/front/items/self/core/repeater/repeater.css +197 -0
- package/addons/render/elements/front/items/self/core/repeater/repeater.js +224 -0
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/button/button.js +2 -2
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/checkbox/checkbox.js +21 -8
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/color/color.css +28 -0
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/color/color.js +35 -13
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/date/date.js +3 -4
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/input/input.js +40 -4
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/radio/radio.js +24 -6
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/rating/rating.js +2 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/select/select.js +3 -7
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/slider/slider.js +89 -74
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/tags/tags.js +5 -5
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/textarea/textarea.js +41 -6
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/toggle/toggle.css +4 -0
- package/{lib/items/elements → addons/render/elements/front/items/self}/form/toggle/toggle.js +7 -8
- package/{lib/items/elements → addons/render/elements/front/items/self}/global/code/code.js +3 -4
- package/{lib/items/elements → addons/render/elements/front/items/self}/global/faq/faq.js +2 -2
- package/{lib/items/elements → addons/render/elements/front/items/self}/global/heading/heading.js +6 -17
- package/addons/render/elements/front/items/self/global/markdown/markdown.js +26 -0
- package/{lib/items/elements → addons/render/elements/front/items/self}/global/menu/menu.js +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/global/tags/tags.js +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/navigation/navbar/navbar.js +5 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/navigation/sidebar/sidebar.js +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/navigation/tabs/tabs.js +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/status/code/code.css +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/status/empty/empty.css +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/status/empty/empty.js +4 -0
- package/{lib/items/elements → addons/render/elements/front/items/self}/status/error/error.css +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/status/error/error.js +1 -1
- package/{lib/items/elements → addons/render/elements/front/items/self}/status/loading/loading.css +8 -1
- package/addons/render/pages/core/load.js +1 -1
- package/addons/render/pages/front/events/click.js +1 -1
- package/addons/render/pages/front/events/load.js +6 -16
- package/addons/render/pages/front/functions/change.js +21 -110
- package/addons/render/pages/front/functions/match.js +2 -3
- package/addons/render/pages/front/functions/open.js +3 -35
- package/addons/render/pages/front/functions/resolve.js +30 -0
- package/addons/render/pages/front/item/catch/add.js +12 -10
- package/addons/render/pages/front/item/catch/remove.js +5 -7
- package/addons/render/pages/front/item/functions/enter.js +15 -28
- package/addons/render/pages/front/item/functions/leave.js +6 -8
- package/addons/render/pages/front/items/commands/change.js +60 -0
- package/addons/render/pages/front/items/commands/list.js +38 -0
- package/addons/render/pages/front/items/directives/change.js +1 -1
- package/addons/render/transforms/css/transforms.css +4 -0
- package/addons/render/transforms/{addon.js → js/addon.js} +7 -0
- package/addons/render/transforms/js/item/functions/run.js +87 -0
- package/addons/services/cloudflare/images/back/addon.js +23 -0
- package/addons/services/cloudflare/images/back/expose.js +22 -0
- package/addons/services/cloudflare/images/back/functions/api.js +47 -0
- package/addons/services/cloudflare/images/back/functions/meta/detect.js +28 -0
- package/addons/services/cloudflare/images/back/functions/meta/dimensions/gif.js +11 -0
- package/addons/services/cloudflare/images/back/functions/meta/dimensions/jpeg.js +31 -0
- package/addons/services/cloudflare/images/back/functions/meta/dimensions/png.js +11 -0
- package/addons/services/cloudflare/images/back/functions/meta/dimensions/webp.js +36 -0
- package/addons/services/cloudflare/images/back/functions/meta.js +16 -0
- package/addons/services/cloudflare/images/back/items/commands/delete.js +38 -0
- package/addons/services/cloudflare/images/back/items/commands/get.js +56 -0
- package/addons/services/cloudflare/images/back/items/commands/list.js +49 -0
- package/addons/services/cloudflare/images/back/items/commands/upload.js +79 -0
- package/addons/services/cloudflare/images/back/load.js +21 -0
- package/addons/services/cloudflare/images/front/items/elements/browse/browse.css +235 -0
- package/addons/services/cloudflare/images/front/items/elements/browse/browse.js +193 -0
- package/addons/services/cloudflare/images/front/items/elements/input/input.css +154 -0
- package/addons/services/cloudflare/images/front/items/elements/input/input.js +147 -0
- package/addons/services/cloudflare/images/sql.txt +43 -0
- package/lib/events.js +12 -12
- package/lib/load.js +11 -49
- package/lib/src/classes/addon/class.js +1 -2
- package/lib/src/classes/addon/classes/item/mixins/get.js +3 -3
- package/lib/src/classes/addon/classes/item/mixins/set.js +3 -5
- package/lib/src/classes/addon/classes/item/mixins/store.js +1 -1
- package/lib/src/classes/addon/classes/render/class.js +8 -22
- package/lib/src/classes/addon/classes/render/mixins/compile.js +6 -4
- package/lib/src/classes/addon/classes/render/mixins/dom.js +3 -1
- package/lib/src/classes/addon/classes/render/mixins/events.js +30 -43
- package/lib/src/classes/addon/classes/render/mixins/get.js +0 -5
- package/lib/src/classes/addon/classes/render/mixins/methods.js +105 -40
- package/lib/src/classes/addon/classes/render/mixins/process.js +7 -3
- package/lib/src/classes/addon/classes/render/mixins/set.js +3 -1
- package/lib/src/classes/addon/mixins/fields.js +4 -6
- package/lib/src/classes/addon/mixins/functions.js +11 -11
- package/lib/src/classes/addon/mixins/items.js +17 -9
- package/lib/src/classes/addon/mixins/render.js +1 -1
- package/lib/src/classes/addon/mixins/table.js +1 -1
- package/lib/src/classes/error/class.js +10 -0
- package/lib/src/mixins/addons.js +7 -20
- package/lib/src/mixins/assets.js +1 -1
- package/lib/src/mixins/data.js +14 -14
- package/lib/src/mixins/dependencies.js +5 -5
- package/lib/src/mixins/dom.js +204 -201
- package/lib/src/mixins/emitter.js +13 -14
- package/lib/src/mixins/error.js +14 -1
- package/lib/src/mixins/function.js +1 -0
- package/lib/src/mixins/generate.js +1 -1
- package/lib/src/mixins/helper.js +3 -31
- package/lib/{items/elements/global/markdown → src/mixins}/markdown.js +90 -139
- package/lib/src/mixins/middleware.js +2 -2
- package/lib/src/mixins/observer.js +337 -0
- package/lib/src/mixins/request.js +2 -2
- package/lib/src/mixins/route.js +11 -2
- package/lib/src/mixins/state.js +17 -3
- package/lib/src/onetype.js +11 -18
- package/lib/styles/classes/layout.css +1 -3
- package/lib/styles/variables.css +2 -1
- package/package.json +5 -7
- package/README.md +0 -86
- package/addons/ai/agents/addon.js +0 -23
- package/addons/ai/agents/functions/parse.js +0 -129
- package/addons/ai/agents/item/functions/run.js +0 -218
- package/addons/ai/agents/load.js +0 -8
- package/addons/ai/orchestrator/addon.js +0 -25
- package/addons/ai/orchestrator/item/functions/run.js +0 -277
- package/addons/ai/orchestrator/item/functions/state/agent.js +0 -41
- package/addons/ai/orchestrator/item/functions/state/conclusion.js +0 -27
- package/addons/ai/orchestrator/item/functions/state/done.js +0 -40
- package/addons/ai/orchestrator/item/functions/state/execute.js +0 -16
- package/addons/ai/orchestrator/item/functions/state/goal.js +0 -34
- package/addons/ai/orchestrator/item/functions/state/input.js +0 -55
- package/addons/ai/orchestrator/item/functions/state/summary.js +0 -26
- package/addons/ai/orchestrator/items/agents/achievable.js +0 -37
- package/addons/ai/orchestrator/items/agents/agent.js +0 -46
- package/addons/ai/orchestrator/items/agents/conclusion.js +0 -41
- package/addons/ai/orchestrator/items/agents/done.js +0 -40
- package/addons/ai/orchestrator/items/agents/goal.js +0 -58
- package/addons/ai/orchestrator/items/agents/input.js +0 -34
- package/addons/ai/orchestrator/items/agents/planner.js +0 -30
- package/addons/ai/orchestrator/items/agents/summary.js +0 -29
- package/addons/ai/orchestrator/items/chat.js +0 -10
- package/addons/ai/orchestrator/load.js +0 -25
- package/addons/ai/providers/addon.js +0 -16
- package/addons/ai/providers/functions/default.js +0 -14
- package/addons/ai/providers/item/functions/request.js +0 -62
- package/addons/ai/providers/items/nue.js +0 -98
- package/addons/ai/providers/load.js +0 -10
- package/addons/core/queue/index.js +0 -66
- package/addons/float/modals/front/css/modals.css +0 -26
- package/addons/float/modals/front/js/addon.js +0 -10
- package/addons/float/modals/front/js/item/catch/add.js +0 -48
- package/addons/float/modals/front/js/item/catch/remove.js +0 -9
- package/addons/float/overlays/front/css/overlays.css +0 -29
- package/addons/float/overlays/front/js/addon.js +0 -17
- package/addons/float/overlays/front/js/events/click.js +0 -27
- package/addons/float/overlays/front/js/events/escape.js +0 -18
- package/addons/float/overlays/front/js/functions/flip.js +0 -74
- package/addons/float/overlays/front/js/functions/index.js +0 -17
- package/addons/float/overlays/front/js/functions/position.js +0 -63
- package/addons/float/overlays/front/js/item/catch/add.js +0 -121
- package/addons/float/overlays/front/js/item/catch/remove.js +0 -16
- package/addons/float/popups/css/popups.css +0 -4
- package/addons/float/popups/js/addon.js +0 -18
- package/addons/float/popups/js/item/catch/add.js +0 -7
- package/addons/float/popups/js/item/catch/remove.js +0 -7
- package/addons/float/popups/js/item/catch/set.js +0 -73
- package/addons/float/popups/js/items/directives/popup.js +0 -54
- package/addons/float/toasts/addon.js +0 -17
- package/addons/float/toasts/item/catch/add.js +0 -7
- package/addons/float/toasts/item/catch/remove.js +0 -7
- package/addons/float/toasts/item/catch/set.js +0 -86
- package/addons/float/toasts/items/elements/toast/toast.css +0 -84
- package/addons/float/toasts/items/elements/toast/toast.js +0 -61
- package/addons/float/tooltips/addon.js +0 -15
- package/addons/float/tooltips/item/catch/add.js +0 -7
- package/addons/float/tooltips/item/catch/remove.js +0 -26
- package/addons/float/tooltips/item/catch/set.js +0 -65
- package/addons/float/tooltips/items/directives/tooltip.js +0 -74
- package/addons/float/tooltips/items/elements/tooltip.css +0 -64
- package/addons/float/tooltips/items/elements/tooltip.js +0 -42
- package/addons/render/directives/front/js/functions/process.js +0 -57
- package/addons/render/transforms/item/functions/run.js +0 -18
- package/docs/addons.md +0 -281
- package/docs/architecture.md +0 -238
- package/docs/commands.md +0 -308
- package/docs/database.md +0 -171
- package/docs/frontend.md +0 -396
- package/docs/servers.md +0 -187
- package/examples/basic-api/README.md +0 -34
- package/examples/basic-api/addons/tasks/addon.js +0 -10
- package/examples/basic-api/addons/tasks/items/commands/create.js +0 -22
- package/examples/basic-api/addons/tasks/items/commands/delete.js +0 -26
- package/examples/basic-api/addons/tasks/items/commands/list.js +0 -17
- package/examples/basic-api/addons/tasks/items/commands/toggle.js +0 -26
- package/examples/basic-api/addons/tasks/load.js +0 -8
- package/examples/basic-api/index.js +0 -15
- package/examples/basic-api/package.json +0 -7
- package/examples/basic-front/back/assets.js +0 -12
- package/examples/basic-front/back/index.js +0 -13
- package/examples/basic-front/back/items/commands/html.js +0 -14
- package/examples/basic-front/back/items/commands/test.js +0 -19
- package/examples/basic-front/back/items/html/fonts.js +0 -12
- package/examples/basic-front/front/pages/home.js +0 -16
- package/examples/basic-front/front/styles/main.css +0 -31
- package/examples/basic-front/front/test.js +0 -7
- package/examples/basic-front/package.json +0 -7
- package/lib/items/directives/500-blur.js +0 -46
- package/lib/items/directives/500-change.js +0 -53
- package/lib/items/directives/500-click-outside.js +0 -50
- package/lib/items/directives/500-click.js +0 -52
- package/lib/items/directives/500-double-click.js +0 -52
- package/lib/items/directives/500-focus.js +0 -46
- package/lib/items/directives/500-input.js +0 -46
- package/lib/items/directives/500-keydown.js +0 -53
- package/lib/items/directives/500-keyup.js +0 -53
- package/lib/items/directives/500-mouse-enter.js +0 -61
- package/lib/items/directives/500-mouse-leave.js +0 -61
- package/lib/items/directives/500-mouse-move.js +0 -45
- package/lib/items/directives/500-scroll.js +0 -45
- package/lib/items/directives/500-submit.js +0 -52
- package/lib/items/elements/ai/chat/chat.css +0 -710
- package/lib/items/elements/ai/chat/chat.js +0 -429
- package/lib/src/mixins/logger.js +0 -83
- package/lib/styles/queries.css +0 -6
- package/lists.md +0 -586
- package/orchestrator.md +0 -288
- /package/addons/modules/shortcuts/front/{#register/addon.js → addon.js} +0 -0
- /package/addons/render/directives/front/{js/functions → functions}/process/data.js +0 -0
- /package/{lib/items/directives → addons/render/directives/front/items/self}/100-if.js +0 -0
- /package/{lib/items/directives → addons/render/directives/front/items/self}/700-text.js +0 -0
- /package/{lib/items/directives → addons/render/directives/front/items/self}/750-html.js +0 -0
- /package/addons/render/elements/front/{#register/addon.js → addon.js} +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/cards/pricing/pricing.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/button/button.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/checkbox/checkbox.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/date/date.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/field/field.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/field/field.js +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/input/input.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/radio/radio.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/rating/rating.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/section/section.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/section/section.js +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/select/select.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/slider/slider.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/tags/tags.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/form/textarea/textarea.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/code/code.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/faq/faq.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/heading/heading.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/markdown/markdown.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/menu/menu.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/notice/notice.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/notice/notice.js +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/parameters/parameters.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/parameters/parameters.js +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/global/tags/tags.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/navigation/navbar/navbar.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/navigation/sidebar/sidebar.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/navigation/tabs/tabs.css +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/status/code/code.js +0 -0
- /package/{lib/items/elements → addons/render/elements/front/items/self}/status/loading/loading.js +0 -0
- /package/addons/render/transforms/{functions → js/functions}/data.js +0 -0
- /package/addons/render/transforms/{functions → js/functions}/run.js +0 -0
- /package/addons/render/transforms/{functions → js/functions}/runtime.js +0 -0
- /package/addons/render/transforms/{item → js/item}/functions/load.js +0 -0
- /package/addons/render/transforms/{items/directives → js/items/self}/transform.js +0 -0
package/docs/frontend.md
DELETED
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
# Frontend
|
|
2
|
-
|
|
3
|
-
Proxy-based reactivity with DOM diffing, Vue-like directives, SPA page routing, and convention-based asset bundling.
|
|
4
|
-
|
|
5
|
-
## Pages
|
|
6
|
-
|
|
7
|
-
Pages define routes with async data loading, CSS Grid layouts, and template areas.
|
|
8
|
-
|
|
9
|
-
```js
|
|
10
|
-
pages.ItemAdd({
|
|
11
|
-
id: 'home',
|
|
12
|
-
route: '/',
|
|
13
|
-
title: 'Home',
|
|
14
|
-
grid: {
|
|
15
|
-
template: '"content"',
|
|
16
|
-
columns: '1fr',
|
|
17
|
-
rows: '1fr'
|
|
18
|
-
},
|
|
19
|
-
areas: {
|
|
20
|
-
content: function() {
|
|
21
|
-
return `
|
|
22
|
-
<div class="page-home">
|
|
23
|
-
<c-navbar></c-navbar>
|
|
24
|
-
<c-hero title="Welcome"></c-hero>
|
|
25
|
-
<c-footer></c-footer>
|
|
26
|
-
</div>
|
|
27
|
-
`;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Route params
|
|
34
|
-
|
|
35
|
-
```js
|
|
36
|
-
pages.ItemAdd({
|
|
37
|
-
id: 'offer',
|
|
38
|
-
route: '/ponuda/:id/:type/:location/:name',
|
|
39
|
-
// ...
|
|
40
|
-
});
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Params are available in `this.parameters`:
|
|
44
|
-
|
|
45
|
-
```js
|
|
46
|
-
areas: {
|
|
47
|
-
content: function() {
|
|
48
|
-
const id = this.parameters.id;
|
|
49
|
-
// ...
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Multiple routes
|
|
55
|
-
|
|
56
|
-
```js
|
|
57
|
-
route: ['/offers', '/offers/:type/:value']
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Async data loading
|
|
61
|
-
|
|
62
|
-
The `data` function runs before render:
|
|
63
|
-
|
|
64
|
-
```js
|
|
65
|
-
pages.ItemAdd({
|
|
66
|
-
id: 'offer',
|
|
67
|
-
route: '/ponuda/:id/:type/:location/:name',
|
|
68
|
-
|
|
69
|
-
title: function(parameters, data) {
|
|
70
|
-
return data?.offer?.name || 'Offer';
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
data: async function(parameters) {
|
|
74
|
-
const offer = await offers.Find()
|
|
75
|
-
.filter('id', parameters.id)
|
|
76
|
-
.join('files', 'cover_id', 'cover')
|
|
77
|
-
.join('countries', 'countries', 'countries')
|
|
78
|
-
.join('cities', 'cities', 'cities')
|
|
79
|
-
.one();
|
|
80
|
-
|
|
81
|
-
return { offer: offer ? offer.data : null };
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
areas: {
|
|
85
|
-
content: function() {
|
|
86
|
-
this.offer = this.data.offer || {};
|
|
87
|
-
|
|
88
|
-
return `
|
|
89
|
-
<div>
|
|
90
|
-
<h1>{{ offer.name }}</h1>
|
|
91
|
-
<span ot-if="offer.stars">{{ offer.stars }} stars</span>
|
|
92
|
-
</div>
|
|
93
|
-
`;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Interactive pages
|
|
100
|
-
|
|
101
|
-
Pages can have local state and methods:
|
|
102
|
-
|
|
103
|
-
```js
|
|
104
|
-
areas: {
|
|
105
|
-
content: function() {
|
|
106
|
-
this.items = [];
|
|
107
|
-
this.page = 1;
|
|
108
|
-
this.total = 0;
|
|
109
|
-
|
|
110
|
-
this.fetch = async () => {
|
|
111
|
-
const result = await offers.Find()
|
|
112
|
-
.filter('status', 'Aktivna')
|
|
113
|
-
.sort('score', 'desc')
|
|
114
|
-
.page(this.page)
|
|
115
|
-
.limit(12)
|
|
116
|
-
.plain();
|
|
117
|
-
|
|
118
|
-
this.items = result.items;
|
|
119
|
-
this.total = result.total;
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
this.handlePageChange = (newPage) => {
|
|
123
|
-
this.page = newPage;
|
|
124
|
-
this.fetch();
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
this.fetch();
|
|
128
|
-
|
|
129
|
-
return `
|
|
130
|
-
<div>
|
|
131
|
-
<span>{{ total }} results</span>
|
|
132
|
-
|
|
133
|
-
<div ot-if="items.length > 0" class="grid">
|
|
134
|
-
<a ot-for="offer in items" :href="'/offer/' + offer.id">
|
|
135
|
-
<c-offer-card :offer="offer"></c-offer-card>
|
|
136
|
-
</a>
|
|
137
|
-
</div>
|
|
138
|
-
|
|
139
|
-
<c-pagination
|
|
140
|
-
:page="page"
|
|
141
|
-
:pages="Math.ceil(total / 12)"
|
|
142
|
-
:_change="handlePageChange"
|
|
143
|
-
></c-pagination>
|
|
144
|
-
</div>
|
|
145
|
-
`;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Setting `this.items`, `this.page`, or `this.total` triggers a 16ms debounced re-render with DOM diffing.
|
|
151
|
-
|
|
152
|
-
## Components
|
|
153
|
-
|
|
154
|
-
Reusable UI elements with typed config and template rendering.
|
|
155
|
-
|
|
156
|
-
```js
|
|
157
|
-
components.ItemAdd({
|
|
158
|
-
id: 'hero',
|
|
159
|
-
config: {
|
|
160
|
-
title: { type: 'string', value: 'Page Title' },
|
|
161
|
-
subtitle: { type: 'string', value: '' },
|
|
162
|
-
image: { type: 'string', value: '' },
|
|
163
|
-
variant: { type: 'array', value: [], options: ['compact', 'tall'] }
|
|
164
|
-
},
|
|
165
|
-
render: function() {
|
|
166
|
-
return `
|
|
167
|
-
<section class="holder" :style="'background-image: url(' + image + ')'">
|
|
168
|
-
<div class="overlay"></div>
|
|
169
|
-
<div class="content">
|
|
170
|
-
<slot name="top"></slot>
|
|
171
|
-
<h1>{{ title }}</h1>
|
|
172
|
-
<p ot-if="subtitle">{{ subtitle }}</p>
|
|
173
|
-
</div>
|
|
174
|
-
</section>
|
|
175
|
-
`;
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Using components
|
|
181
|
-
|
|
182
|
-
Components become custom elements prefixed with `c-`:
|
|
183
|
-
|
|
184
|
-
```html
|
|
185
|
-
<c-hero title="Our Offers" subtitle="Find your trip" image="/hero.jpg">
|
|
186
|
-
<div slot="top">
|
|
187
|
-
<c-breadcrumb :items="[{label: 'Home', href: '/'}, {label: 'Offers'}]"></c-breadcrumb>
|
|
188
|
-
</div>
|
|
189
|
-
</c-hero>
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### Config types
|
|
193
|
-
|
|
194
|
-
```js
|
|
195
|
-
config: {
|
|
196
|
-
title: { type: 'string', value: 'Default' },
|
|
197
|
-
count: { type: 'number', value: 0 },
|
|
198
|
-
active: { type: 'boolean', value: true },
|
|
199
|
-
items: { type: 'array', value: [] },
|
|
200
|
-
data: { type: 'object', value: {} },
|
|
201
|
-
variant: { type: 'array', value: [], options: ['size-s', 'size-m', 'size-l'] },
|
|
202
|
-
_click: { type: 'function' }, // callback (prefixed with _)
|
|
203
|
-
_change: { type: 'function' }
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Component with logic
|
|
208
|
-
|
|
209
|
-
```js
|
|
210
|
-
components.ItemAdd({
|
|
211
|
-
id: 'pagination',
|
|
212
|
-
config: {
|
|
213
|
-
page: { type: 'number', value: 1 },
|
|
214
|
-
pages: { type: 'number', value: 1 },
|
|
215
|
-
_change: { type: 'function' }
|
|
216
|
-
},
|
|
217
|
-
render: function() {
|
|
218
|
-
this.goToPage = (num) => {
|
|
219
|
-
if (num >= 1 && num <= this.pages) {
|
|
220
|
-
this.page = num;
|
|
221
|
-
if (this._change) this._change(num);
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
return `
|
|
226
|
-
<div class="pagination">
|
|
227
|
-
<button ot-click="() => goToPage(page - 1)" :disabled="page === 1">Prev</button>
|
|
228
|
-
<span>{{ page }} / {{ pages }}</span>
|
|
229
|
-
<button ot-click="() => goToPage(page + 1)" :disabled="page === pages">Next</button>
|
|
230
|
-
</div>
|
|
231
|
-
`;
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## Directives
|
|
237
|
-
|
|
238
|
-
Vue-like syntax, processed during compile with priority ordering.
|
|
239
|
-
|
|
240
|
-
### Conditional rendering
|
|
241
|
-
|
|
242
|
-
```html
|
|
243
|
-
<div ot-if="items.length > 0">Has items</div>
|
|
244
|
-
<div ot-if="!loading">Content loaded</div>
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### List rendering
|
|
248
|
-
|
|
249
|
-
```html
|
|
250
|
-
<a ot-for="offer in items" :href="'/offer/' + offer.id">
|
|
251
|
-
{{ offer.name }}
|
|
252
|
-
</a>
|
|
253
|
-
|
|
254
|
-
<!-- With index -->
|
|
255
|
-
<div ot-for="item, index in items">
|
|
256
|
-
{{ index }}: {{ item.name }}
|
|
257
|
-
</div>
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### Event handlers
|
|
261
|
-
|
|
262
|
-
```html
|
|
263
|
-
<button ot-click="submit">Send</button>
|
|
264
|
-
<button ot-click="() => goToPage(3)">Page 3</button>
|
|
265
|
-
<input :_input="(e) => form.name = e.target.value">
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### Dynamic attributes
|
|
269
|
-
|
|
270
|
-
```html
|
|
271
|
-
<img :src="getImage()" :alt="name" loading="lazy">
|
|
272
|
-
<div :class="'card ' + (active ? 'active' : '')">
|
|
273
|
-
<div :style="'background-image: url(' + image + ')'">
|
|
274
|
-
<button :disabled="page === 1">
|
|
275
|
-
<article :variant="variant.join(' ')">
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Text interpolation
|
|
279
|
-
|
|
280
|
-
```html
|
|
281
|
-
<span>{{ total }} results</span>
|
|
282
|
-
<h1>{{ offer.name }}</h1>
|
|
283
|
-
<span>{{ getStars() }}</span>
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
### All directives
|
|
287
|
-
|
|
288
|
-
`ot-if`, `ot-show`, `ot-for`, `ot-click`, `ot-text`, `ot-html`, `ot-fetch`, `ot-render`, `ot-form`, and all DOM event handlers.
|
|
289
|
-
|
|
290
|
-
## Reactivity
|
|
291
|
-
|
|
292
|
-
Setting any property on a render context triggers a re-render:
|
|
293
|
-
|
|
294
|
-
```js
|
|
295
|
-
this.count = 0;
|
|
296
|
-
this.increment = () => this.count++; // triggers DOM update
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
Updates are batched with a 16ms debounce. The framework diffs the new DOM against the current DOM and patches only what changed. No virtual DOM — direct DOM diffing.
|
|
300
|
-
|
|
301
|
-
Lifecycle: `init → render → compile → ready → mount → update → unmount → destroy`.
|
|
302
|
-
|
|
303
|
-
## Slots
|
|
304
|
-
|
|
305
|
-
Components can define named slots:
|
|
306
|
-
|
|
307
|
-
```js
|
|
308
|
-
render: function() {
|
|
309
|
-
return `
|
|
310
|
-
<div>
|
|
311
|
-
<slot name="top"></slot>
|
|
312
|
-
<div class="content">
|
|
313
|
-
<slot></slot>
|
|
314
|
-
</div>
|
|
315
|
-
</div>
|
|
316
|
-
`;
|
|
317
|
-
}
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
Usage:
|
|
321
|
-
|
|
322
|
-
```html
|
|
323
|
-
<c-layout>
|
|
324
|
-
<div slot="top">Header content</div>
|
|
325
|
-
<p>Default slot content</p>
|
|
326
|
-
</c-layout>
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
## Asset bundling
|
|
330
|
-
|
|
331
|
-
Convention-based bundler that scans directories, strips ES module syntax, concatenates, and minifies.
|
|
332
|
-
|
|
333
|
-
### Asset registry
|
|
334
|
-
|
|
335
|
-
All asset paths are registered centrally in `lib/load.js` via `onetype.Assets()`. The import function resolves IDs to paths from this registry.
|
|
336
|
-
|
|
337
|
-
```js
|
|
338
|
-
// In application back/index.js — import by ID
|
|
339
|
-
assets.Fn('import', ['framework', 'styles', 'commands', 'elements/input', 'transforms/swiper']);
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
Available asset IDs:
|
|
343
|
-
|
|
344
|
-
| ID | Type | Description |
|
|
345
|
-
|---|---|---|
|
|
346
|
-
| `framework` | js | Core framework library |
|
|
347
|
-
| `styles` | css | Shared CSS (variables, reset, queries, utilities) |
|
|
348
|
-
| `commands` | js | Command system (front-end) |
|
|
349
|
-
| `database` | js | Database (front-end) |
|
|
350
|
-
| `directives` | js | Directives addon |
|
|
351
|
-
| `transforms` | js | Transforms addon |
|
|
352
|
-
| `pages` | js+css | Page router addon |
|
|
353
|
-
| `elements` | js+css | Elements addon |
|
|
354
|
-
| `float` | js+css | Float system (modals, toasts, tooltips, popups, overlays) |
|
|
355
|
-
| `elements/form/input` | js+css | Granular element import |
|
|
356
|
-
| `transforms/swiper` | js | Granular transform import |
|
|
357
|
-
|
|
358
|
-
Granular imports use `elements/<group>/<name>` and `transforms/<name>` format. Element groups: `form`, `global`, `sections`, `status`.
|
|
359
|
-
|
|
360
|
-
### Manual asset items
|
|
361
|
-
|
|
362
|
-
```js
|
|
363
|
-
// Scan a custom directory
|
|
364
|
-
assets.Item({ type: 'js', order: 2, path: resolve(root, 'front') });
|
|
365
|
-
assets.Item({ type: 'css', order: 2, path: resolve(root, 'front') });
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Dynamic content injection
|
|
369
|
-
|
|
370
|
-
Inject server-side data into the frontend bundle:
|
|
371
|
-
|
|
372
|
-
```js
|
|
373
|
-
assets.Item({
|
|
374
|
-
type: 'js',
|
|
375
|
-
order: 4,
|
|
376
|
-
content: function() {
|
|
377
|
-
const items = Object.values(settings.Items())
|
|
378
|
-
.filter(item => item.Get('organization_id') === 9)
|
|
379
|
-
.map(item => item.data);
|
|
380
|
-
|
|
381
|
-
return `settings.ItemsAdd(${JSON.stringify(items)}, null, false);`;
|
|
382
|
-
}
|
|
383
|
-
});
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
This runs at bundle time — server-side data becomes available client-side without an API call.
|
|
387
|
-
|
|
388
|
-
### How it works
|
|
389
|
-
|
|
390
|
-
1. Scans directories recursively for `.js` or `.css` files
|
|
391
|
-
2. Prioritizes `addon.js` files (loaded first)
|
|
392
|
-
3. Strips `import`/`export` statements
|
|
393
|
-
4. Concatenates by `order` value
|
|
394
|
-
5. Minifies via terser
|
|
395
|
-
|
|
396
|
-
No webpack, no build step, no configuration files.
|
package/docs/servers.md
DELETED
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
# Servers
|
|
2
|
-
|
|
3
|
-
HTTP and gRPC servers, both configured through the commands addon.
|
|
4
|
-
|
|
5
|
-
## HTTP server
|
|
6
|
-
|
|
7
|
-
```js
|
|
8
|
-
import commands from '#commands/load.js';
|
|
9
|
-
|
|
10
|
-
commands.Fn('http.server', 3000, {
|
|
11
|
-
onStart: (server) => {
|
|
12
|
-
console.log('HTTP server started on port 3000');
|
|
13
|
-
},
|
|
14
|
-
onResponse: (http) => {
|
|
15
|
-
// Called after each response
|
|
16
|
-
},
|
|
17
|
-
onError: (error) => {
|
|
18
|
-
console.log('HTTP server error:', error.message);
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## HTTP object
|
|
24
|
-
|
|
25
|
-
Every request creates an `http` object passed to `onRequest` and command callbacks (via `this.http`):
|
|
26
|
-
|
|
27
|
-
| Property | Type | Description |
|
|
28
|
-
|---|---|---|
|
|
29
|
-
| `request` | IncomingMessage | Node.js request (headers, method, url) |
|
|
30
|
-
| `response` | ServerResponse | Node.js response (writeHead, setHeader, end) |
|
|
31
|
-
| `data` | object | Parsed request data (query params + body) |
|
|
32
|
-
| `url` | URL | Parsed request URL |
|
|
33
|
-
| `user` | object | `{ ip, agent, forwarded, referrer }` |
|
|
34
|
-
| `respond` | object | `{ type, data, message, code }` — response payload |
|
|
35
|
-
| `prevent` | boolean | Set `true` to skip automatic response |
|
|
36
|
-
|
|
37
|
-
## Cookies
|
|
38
|
-
|
|
39
|
-
Built-in cookie support via `onetype.Cookie*` methods. Works on both front (browser) and back (server) — detected via `onetype.environment`.
|
|
40
|
-
|
|
41
|
-
### Back (server)
|
|
42
|
-
|
|
43
|
-
```js
|
|
44
|
-
// Read from request
|
|
45
|
-
const token = onetype.CookieGet('token', this.http.request);
|
|
46
|
-
|
|
47
|
-
// Set on response (HttpOnly + Secure by default)
|
|
48
|
-
onetype.CookieSet('token', value, {
|
|
49
|
-
path: '/',
|
|
50
|
-
maxAge: 86400,
|
|
51
|
-
sameSite: 'Strict'
|
|
52
|
-
}, this.http.response);
|
|
53
|
-
|
|
54
|
-
// Clear
|
|
55
|
-
onetype.CookieClear('token', { path: '/' }, this.http.response);
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Front (browser)
|
|
59
|
-
|
|
60
|
-
```js
|
|
61
|
-
onetype.CookieSet('theme', 'dark', { path: '/', maxAge: 86400 });
|
|
62
|
-
const theme = onetype.CookieGet('theme');
|
|
63
|
-
onetype.CookieClear('theme');
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Options
|
|
67
|
-
|
|
68
|
-
| Option | Back default | Front default | Description |
|
|
69
|
-
|---|---|---|---|
|
|
70
|
-
| `path` | — | — | Cookie path |
|
|
71
|
-
| `maxAge` | — | — | Lifetime in seconds |
|
|
72
|
-
| `domain` | — | — | Cookie domain |
|
|
73
|
-
| `httpOnly` | `true` | N/A | JS can't read the cookie |
|
|
74
|
-
| `secure` | `true` | `false` | HTTPS only |
|
|
75
|
-
| `sameSite` | — | — | `Strict`, `Lax`, or `None` |
|
|
76
|
-
|
|
77
|
-
## gRPC server
|
|
78
|
-
|
|
79
|
-
Bidirectional streaming with automatic reconnection and binary data transport.
|
|
80
|
-
|
|
81
|
-
```js
|
|
82
|
-
commands.Fn('grpc.server', 50000, {
|
|
83
|
-
onStart: function() {
|
|
84
|
-
console.log('gRPC server started on port 50000');
|
|
85
|
-
},
|
|
86
|
-
onStreamConnect: async function(stream) {
|
|
87
|
-
// Authenticate via metadata
|
|
88
|
-
const node = await nodes.Fn('find', stream.metadata.get('token')[0]);
|
|
89
|
-
|
|
90
|
-
// Track the connection as an item
|
|
91
|
-
const connection = streams.Item({
|
|
92
|
-
gateway_id: gateway.Get('id'),
|
|
93
|
-
node_id: node.Get('id')
|
|
94
|
-
});
|
|
95
|
-
await connection.Create();
|
|
96
|
-
|
|
97
|
-
// Attach runtime state via Store
|
|
98
|
-
connection.StoreSet('gateway', gateway);
|
|
99
|
-
connection.StoreSet('node', node);
|
|
100
|
-
connection.StoreSet('stream', stream);
|
|
101
|
-
|
|
102
|
-
stream.connection = connection;
|
|
103
|
-
|
|
104
|
-
console.log('Connection established:', node.Get('name'));
|
|
105
|
-
},
|
|
106
|
-
onStreamEnd: function(stream) {
|
|
107
|
-
if (stream.connection) {
|
|
108
|
-
const node = stream.connection.StoreGet('node');
|
|
109
|
-
console.log('Disconnected:', node.Get('name'));
|
|
110
|
-
|
|
111
|
-
stream.connection.Delete();
|
|
112
|
-
stream.connection.Remove();
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
onStreamError: function(stream) {
|
|
116
|
-
console.log('Stream error');
|
|
117
|
-
},
|
|
118
|
-
onError: function(message) {
|
|
119
|
-
console.log('Server error:', message);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## Binary transport
|
|
125
|
-
|
|
126
|
-
gRPC messages are JSON strings. Binary data (Buffers) is automatically extracted into a separate `map<string, bytes>` field before sending and re-injected on receive.
|
|
127
|
-
|
|
128
|
-
```js
|
|
129
|
-
// Extract binaries from a data object
|
|
130
|
-
const extracted = onetype.BinariesExtract(data);
|
|
131
|
-
// extracted.data → JSON-safe object (Buffers replaced with keys)
|
|
132
|
-
// extracted.binaries → map of key → Buffer
|
|
133
|
-
|
|
134
|
-
// Re-inject binaries
|
|
135
|
-
const restored = onetype.BinariesInject(extracted.data, extracted.binaries);
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
This enables transparent file transfers over the same gRPC stream without base64 encoding.
|
|
139
|
-
|
|
140
|
-
## Store API
|
|
141
|
-
|
|
142
|
-
Per-item in-memory key-value storage — useful for attaching runtime state (like gRPC streams) to items:
|
|
143
|
-
|
|
144
|
-
```js
|
|
145
|
-
// Set
|
|
146
|
-
connection.StoreSet('node', nodeItem);
|
|
147
|
-
connection.StoreSet('stream', streamObject);
|
|
148
|
-
|
|
149
|
-
// Get
|
|
150
|
-
const node = connection.StoreGet('node');
|
|
151
|
-
const stream = connection.StoreGet('stream');
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Store data is never persisted to the database. It exists only in memory for the lifetime of the item.
|
|
155
|
-
|
|
156
|
-
## Requesting over gRPC
|
|
157
|
-
|
|
158
|
-
Send a request to a connected node and await the response:
|
|
159
|
-
|
|
160
|
-
```js
|
|
161
|
-
const response = await stream.request('tool-slug', inputProperties, (chunk) => {
|
|
162
|
-
// Optional: handle streaming chunks
|
|
163
|
-
resolve(chunk.data, chunk.message, chunk.code, false);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
// response.data, response.message, response.code, response.time
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Graceful shutdown
|
|
170
|
-
|
|
171
|
-
The framework handles process signals through middleware:
|
|
172
|
-
|
|
173
|
-
```js
|
|
174
|
-
process.on('SIGINT', async () => {
|
|
175
|
-
await onetype.Middleware('sigint');
|
|
176
|
-
await onetype.Middleware('shutdown');
|
|
177
|
-
process.exit(0);
|
|
178
|
-
});
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
Register shutdown handlers:
|
|
182
|
-
|
|
183
|
-
```js
|
|
184
|
-
onetype.MiddlewareAdd('shutdown', async () => {
|
|
185
|
-
// Close connections, flush data, etc.
|
|
186
|
-
});
|
|
187
|
-
```
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Basic API
|
|
2
|
-
|
|
3
|
-
In-memory task CRUD API using the commands addon.
|
|
4
|
-
|
|
5
|
-
## Run
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
node index.js
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Endpoints
|
|
12
|
-
|
|
13
|
-
| Method | Endpoint | Description |
|
|
14
|
-
|--------|----------|-------------|
|
|
15
|
-
| GET | /api/tasks | List all tasks |
|
|
16
|
-
| POST | /api/tasks | Create a task |
|
|
17
|
-
| PUT | /api/tasks/:id | Toggle task done |
|
|
18
|
-
| DELETE | /api/tasks/:id | Delete a task |
|
|
19
|
-
|
|
20
|
-
## Example
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
# Create
|
|
24
|
-
curl -X POST http://localhost:3000/api/tasks -d '{"title":"Buy milk"}'
|
|
25
|
-
|
|
26
|
-
# List
|
|
27
|
-
curl http://localhost:3000/api/tasks
|
|
28
|
-
|
|
29
|
-
# Toggle
|
|
30
|
-
curl -X PUT http://localhost:3000/api/tasks/1234
|
|
31
|
-
|
|
32
|
-
# Delete
|
|
33
|
-
curl -X DELETE http://localhost:3000/api/tasks/1234
|
|
34
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import commands from 'onetype/commands';
|
|
2
|
-
import tasks from '../../addon.js';
|
|
3
|
-
|
|
4
|
-
commands.Item({
|
|
5
|
-
id: 'tasks:create',
|
|
6
|
-
method: 'POST',
|
|
7
|
-
endpoint: '/api/tasks',
|
|
8
|
-
exposed: true,
|
|
9
|
-
in: {
|
|
10
|
-
title: ['string', null, true]
|
|
11
|
-
},
|
|
12
|
-
callback: async function(properties, resolve)
|
|
13
|
-
{
|
|
14
|
-
const task = tasks.Item({
|
|
15
|
-
id: Date.now(),
|
|
16
|
-
title: properties.title,
|
|
17
|
-
done: false
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
resolve({ task: task.Get(['id', 'title', 'done']) });
|
|
21
|
-
}
|
|
22
|
-
});
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import commands from 'onetype/commands';
|
|
2
|
-
import tasks from '../../addon.js';
|
|
3
|
-
|
|
4
|
-
commands.Item({
|
|
5
|
-
id: 'tasks:delete',
|
|
6
|
-
method: 'DELETE',
|
|
7
|
-
endpoint: '/api/tasks/:id',
|
|
8
|
-
exposed: true,
|
|
9
|
-
in: {
|
|
10
|
-
id: ['number', null, true]
|
|
11
|
-
},
|
|
12
|
-
callback: async function(properties, resolve)
|
|
13
|
-
{
|
|
14
|
-
const items = Object.values(tasks.Items());
|
|
15
|
-
const task = items.find(item => item.Get('id') === properties.id);
|
|
16
|
-
|
|
17
|
-
if(!task)
|
|
18
|
-
{
|
|
19
|
-
return resolve(null, 'Task not found', 404);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
task.Remove();
|
|
23
|
-
|
|
24
|
-
resolve({ success: true });
|
|
25
|
-
}
|
|
26
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import commands from 'onetype/commands';
|
|
2
|
-
import tasks from '../../addon.js';
|
|
3
|
-
|
|
4
|
-
commands.Item({
|
|
5
|
-
id: 'tasks:list',
|
|
6
|
-
method: 'GET',
|
|
7
|
-
endpoint: '/api/tasks',
|
|
8
|
-
exposed: true,
|
|
9
|
-
callback: async function(properties, resolve)
|
|
10
|
-
{
|
|
11
|
-
const items = Object.values(tasks.Items());
|
|
12
|
-
|
|
13
|
-
resolve({
|
|
14
|
-
tasks: items.map(item => item.Get(['id', 'title', 'done']))
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
});
|