@bonsae/nrg 0.1.0

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 (70) hide show
  1. package/README.md +130 -0
  2. package/build/server/index.cjs +910 -0
  3. package/build/server/resources/nrg-client.js +6530 -0
  4. package/build/server/resources/vue.esm-browser.prod.js +13 -0
  5. package/build/vite/index.js +1893 -0
  6. package/build/vite/utils.js +60 -0
  7. package/package.json +110 -0
  8. package/src/core/client/api/index.ts +17 -0
  9. package/src/core/client/app.vue +201 -0
  10. package/src/core/client/components/node-red-config-input.vue +57 -0
  11. package/src/core/client/components/node-red-editor-input.vue +283 -0
  12. package/src/core/client/components/node-red-input.vue +71 -0
  13. package/src/core/client/components/node-red-json-schema-form.vue +369 -0
  14. package/src/core/client/components/node-red-select-input.vue +86 -0
  15. package/src/core/client/components/node-red-typed-input.vue +130 -0
  16. package/src/core/client/components.d.ts +18 -0
  17. package/src/core/client/globals.d.ts +17 -0
  18. package/src/core/client/index.ts +504 -0
  19. package/src/core/client/shims-vue.d.ts +5 -0
  20. package/src/core/client/tsconfig.json +18 -0
  21. package/src/core/client/virtual.d.ts +5 -0
  22. package/src/core/constants.ts +18 -0
  23. package/src/core/server/index.ts +209 -0
  24. package/src/core/server/nodes/config-node.ts +67 -0
  25. package/src/core/server/nodes/index.ts +4 -0
  26. package/src/core/server/nodes/io-node.ts +178 -0
  27. package/src/core/server/nodes/node.ts +255 -0
  28. package/src/core/server/nodes/types/config-node.ts +28 -0
  29. package/src/core/server/nodes/types/index.ts +3 -0
  30. package/src/core/server/nodes/types/io-node.ts +37 -0
  31. package/src/core/server/nodes/types/node.ts +41 -0
  32. package/src/core/server/nodes/utils.ts +83 -0
  33. package/src/core/server/schemas/base.ts +66 -0
  34. package/src/core/server/schemas/index.ts +3 -0
  35. package/src/core/server/schemas/type.ts +95 -0
  36. package/src/core/server/schemas/types/index.ts +73 -0
  37. package/src/core/server/tsconfig.json +17 -0
  38. package/src/core/server/types/index.ts +73 -0
  39. package/src/core/server/utils.ts +56 -0
  40. package/src/core/server/validator.ts +32 -0
  41. package/src/core/validator.ts +222 -0
  42. package/src/tsconfig/base.json +23 -0
  43. package/src/tsconfig/client.json +11 -0
  44. package/src/tsconfig/server.json +6 -0
  45. package/src/vite/async-utils.ts +61 -0
  46. package/src/vite/client/build.ts +223 -0
  47. package/src/vite/client/index.ts +1 -0
  48. package/src/vite/client/plugins/html-generator.ts +75 -0
  49. package/src/vite/client/plugins/index.ts +5 -0
  50. package/src/vite/client/plugins/locales-generator.ts +126 -0
  51. package/src/vite/client/plugins/minifier.ts +22 -0
  52. package/src/vite/client/plugins/node-definitions-inliner.ts +224 -0
  53. package/src/vite/client/plugins/static-copy.ts +43 -0
  54. package/src/vite/defaults.ts +77 -0
  55. package/src/vite/errors.ts +37 -0
  56. package/src/vite/index.ts +3 -0
  57. package/src/vite/logger.ts +94 -0
  58. package/src/vite/node-red-launcher.ts +344 -0
  59. package/src/vite/plugin.ts +61 -0
  60. package/src/vite/plugins/build.ts +73 -0
  61. package/src/vite/plugins/index.ts +2 -0
  62. package/src/vite/plugins/server.ts +267 -0
  63. package/src/vite/server/build.ts +124 -0
  64. package/src/vite/server/index.ts +1 -0
  65. package/src/vite/server/plugins/index.ts +3 -0
  66. package/src/vite/server/plugins/output-wrapper.ts +109 -0
  67. package/src/vite/server/plugins/package-json-generator.ts +203 -0
  68. package/src/vite/server/plugins/type-generator.ts +285 -0
  69. package/src/vite/types.ts +369 -0
  70. package/src/vite/utils.ts +103 -0
package/README.md ADDED
@@ -0,0 +1,130 @@
1
+ <p align="center">
2
+ <img alt="nrg-icon" src="https://gist.githubusercontent.com/AllanOricil/84412df273de46b28c5d6945b391afd4/raw/0c9cdb994c40ab3d7b7ad06dcee162145d77d531/nrg-icon.svg" style="width: 200px"/>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <a href="https://www.npmjs.com/package/@bonsae/nrg"><img src="https://img.shields.io/npm/v/@bonsae/nrg.svg" alt="npm package"></a>
7
+ <a href="https://github.com/bonsaedev/nrg/actions/workflows/ci.yaml"><img src="https://github.com/bonsaedev/nrg/actions/workflows/ci.yaml/badge.svg?branch=main" alt="build status"></a>
8
+ </p>
9
+
10
+ # nrg
11
+
12
+ Build Node-RED nodes with Vue 3, TypeScript, and JSON Schema validation.
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ pnpm add @bonsae/nrg @sinclair/typebox vue
18
+ pnpm add -D vite
19
+ ```
20
+
21
+ ## Package Exports
22
+
23
+ | Export | Description |
24
+ | --- | --- |
25
+ | `@bonsae/nrg/server` | Server node classes (`Node`, `IONode`, `ConfigNode`), schema utilities, validation |
26
+ | `@bonsae/nrg/client` | Vue 3 form components, client-side registration |
27
+ | `@bonsae/nrg/schemas` | TypeBox schema types (`Schema`, `Infer`, `SchemaType`) |
28
+ | `@bonsae/nrg/vite` | Vite plugin for building and developing Node-RED packages |
29
+ | `@bonsae/nrg/tsconfig/*` | Shared TypeScript configurations for consumers |
30
+
31
+ ## Quick Start
32
+
33
+ ```bash
34
+ # In your Node-RED package project
35
+ pnpm add @bonsae/nrg @sinclair/typebox vue
36
+ pnpm add -D vite
37
+ ```
38
+
39
+ **vite.config.ts**
40
+
41
+ ```typescript
42
+ import { defineConfig } from "vite";
43
+ import { nodeRed } from "@bonsae/nrg/vite";
44
+
45
+ export default defineConfig({
46
+ plugins: [nodeRed()],
47
+ });
48
+ ```
49
+
50
+ **src/server/index.ts**
51
+
52
+ ```typescript
53
+ import MyNode from "./nodes/my-node";
54
+
55
+ export default {
56
+ nodes: [MyNode],
57
+ };
58
+ ```
59
+
60
+ **src/server/nodes/my-node.ts**
61
+
62
+ ```typescript
63
+ import { IONode, type Schema, type Infer } from "@bonsae/nrg/server";
64
+ import { ConfigsSchema } from "../schemas/my-node";
65
+
66
+ export type Config = Infer<typeof ConfigsSchema>;
67
+
68
+ export default class MyNode extends IONode<Config> {
69
+ static readonly type = "my-node";
70
+ static readonly category = "function";
71
+ static readonly color: `#${string}` = "#ffffff";
72
+ static readonly inputs = 1;
73
+ static readonly outputs = 1;
74
+ static readonly configSchema: Schema = ConfigsSchema;
75
+
76
+ async input(msg: any) {
77
+ this.send(msg);
78
+ }
79
+ }
80
+ ```
81
+
82
+ See the [consumer template](https://github.com/AllanOricil/node-red-vue-template) for a complete example.
83
+
84
+ ## Project Structure
85
+
86
+ ```
87
+ src/
88
+ ├── core/ # Runtime framework
89
+ │ ├── client/ # Vue 3 editor components
90
+ │ │ ├── app.vue # Root form wrapper (validation, toggles)
91
+ │ │ ├── components/ # Reusable form inputs
92
+ │ │ │ ├── node-red-input.vue
93
+ │ │ │ ├── node-red-typed-input.vue
94
+ │ │ │ ├── node-red-config-input.vue
95
+ │ │ │ ├── node-red-select-input.vue
96
+ │ │ │ ├── node-red-editor-input.vue
97
+ │ │ │ └── node-red-json-schema-form.vue
98
+ │ │ └── index.ts # registerType, defineNode
99
+ │ ├── server/ # Node.js server runtime
100
+ │ │ ├── nodes/ # Node, IONode, ConfigNode classes
101
+ │ │ ├── schemas/ # TypeBox schema system
102
+ │ │ ├── types/ # RED, context store types
103
+ │ │ └── index.ts # registerTypes, exports
104
+ │ ├── constants.ts
105
+ │ └── validator.ts # AJV-based validation
106
+ ├── vite/ # Build tooling
107
+ │ ├── plugin.ts # Vite plugin factory
108
+ │ ├── plugins/ # Dev server, build orchestration
109
+ │ ├── server/ # Server build (CJS/ESM + bridge)
110
+ │ ├── client/ # Client build (Vue + auto-wiring)
111
+ │ └── index.ts # nodeRed(), defineRuntimeSettings()
112
+ └── tsconfig/ # Shared configs for consumers
113
+ ├── base.json
114
+ ├── client.json
115
+ └── server.json
116
+ ```
117
+
118
+ ## Development
119
+
120
+ ```bash
121
+ pnpm install
122
+ pnpm build # build all (server CJS, client ESM, vite plugin)
123
+ pnpm typecheck # type-check server and client
124
+ pnpm lint # eslint
125
+ pnpm format # prettier
126
+ ```
127
+
128
+ ## License
129
+
130
+ MIT