@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.
- package/README.md +130 -0
- package/build/server/index.cjs +910 -0
- package/build/server/resources/nrg-client.js +6530 -0
- package/build/server/resources/vue.esm-browser.prod.js +13 -0
- package/build/vite/index.js +1893 -0
- package/build/vite/utils.js +60 -0
- package/package.json +110 -0
- package/src/core/client/api/index.ts +17 -0
- package/src/core/client/app.vue +201 -0
- package/src/core/client/components/node-red-config-input.vue +57 -0
- package/src/core/client/components/node-red-editor-input.vue +283 -0
- package/src/core/client/components/node-red-input.vue +71 -0
- package/src/core/client/components/node-red-json-schema-form.vue +369 -0
- package/src/core/client/components/node-red-select-input.vue +86 -0
- package/src/core/client/components/node-red-typed-input.vue +130 -0
- package/src/core/client/components.d.ts +18 -0
- package/src/core/client/globals.d.ts +17 -0
- package/src/core/client/index.ts +504 -0
- package/src/core/client/shims-vue.d.ts +5 -0
- package/src/core/client/tsconfig.json +18 -0
- package/src/core/client/virtual.d.ts +5 -0
- package/src/core/constants.ts +18 -0
- package/src/core/server/index.ts +209 -0
- package/src/core/server/nodes/config-node.ts +67 -0
- package/src/core/server/nodes/index.ts +4 -0
- package/src/core/server/nodes/io-node.ts +178 -0
- package/src/core/server/nodes/node.ts +255 -0
- package/src/core/server/nodes/types/config-node.ts +28 -0
- package/src/core/server/nodes/types/index.ts +3 -0
- package/src/core/server/nodes/types/io-node.ts +37 -0
- package/src/core/server/nodes/types/node.ts +41 -0
- package/src/core/server/nodes/utils.ts +83 -0
- package/src/core/server/schemas/base.ts +66 -0
- package/src/core/server/schemas/index.ts +3 -0
- package/src/core/server/schemas/type.ts +95 -0
- package/src/core/server/schemas/types/index.ts +73 -0
- package/src/core/server/tsconfig.json +17 -0
- package/src/core/server/types/index.ts +73 -0
- package/src/core/server/utils.ts +56 -0
- package/src/core/server/validator.ts +32 -0
- package/src/core/validator.ts +222 -0
- package/src/tsconfig/base.json +23 -0
- package/src/tsconfig/client.json +11 -0
- package/src/tsconfig/server.json +6 -0
- package/src/vite/async-utils.ts +61 -0
- package/src/vite/client/build.ts +223 -0
- package/src/vite/client/index.ts +1 -0
- package/src/vite/client/plugins/html-generator.ts +75 -0
- package/src/vite/client/plugins/index.ts +5 -0
- package/src/vite/client/plugins/locales-generator.ts +126 -0
- package/src/vite/client/plugins/minifier.ts +22 -0
- package/src/vite/client/plugins/node-definitions-inliner.ts +224 -0
- package/src/vite/client/plugins/static-copy.ts +43 -0
- package/src/vite/defaults.ts +77 -0
- package/src/vite/errors.ts +37 -0
- package/src/vite/index.ts +3 -0
- package/src/vite/logger.ts +94 -0
- package/src/vite/node-red-launcher.ts +344 -0
- package/src/vite/plugin.ts +61 -0
- package/src/vite/plugins/build.ts +73 -0
- package/src/vite/plugins/index.ts +2 -0
- package/src/vite/plugins/server.ts +267 -0
- package/src/vite/server/build.ts +124 -0
- package/src/vite/server/index.ts +1 -0
- package/src/vite/server/plugins/index.ts +3 -0
- package/src/vite/server/plugins/output-wrapper.ts +109 -0
- package/src/vite/server/plugins/package-json-generator.ts +203 -0
- package/src/vite/server/plugins/type-generator.ts +285 -0
- package/src/vite/types.ts +369 -0
- 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
|