@bonsae/nrg 0.18.4 → 0.18.5

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 CHANGED
@@ -13,41 +13,25 @@
13
13
 
14
14
  Build Node-RED nodes with Vue 3, TypeScript, JSON Schema validations, Vite and Vitest.
15
15
 
16
- ## Package Exports
17
-
18
- | Export | Description |
19
- | --- | --- |
20
- | `@bonsae/nrg` | Root entry — `defineRuntimeSettings` |
21
- | `@bonsae/nrg/server` | Server node classes, schema utilities, validation (`IONode`, `ConfigNode`, `defineIONode`, `defineConfigNode`, `defineModule`, `SchemaType`, `defineSchema`, `Infer`) |
22
- | `@bonsae/nrg/client` | Client-side registration (`registerTypes`, `defineNode`, `useFormNode`, `Infer`) |
23
- | `@bonsae/nrg/vite` | Vite plugin for building and developing Node-RED packages |
24
- | `@bonsae/nrg/test/server/unit` | Server unit test helpers (`createNode`, `createRED`, `MockRED`) |
25
- | `@bonsae/nrg/test/server/unit/config` | Server unit test default vitest config (`defaultConfig`) |
26
- | `@bonsae/nrg/test/client/unit` | Client unit test mocks (`createRED`, `createJQuery`, `useFormNode`) |
27
- | `@bonsae/nrg/test/client/unit/config` | Client unit test default vitest config (`defaultConfig`) |
28
- | `@bonsae/nrg/test/client/unit/setup` | Setup file that installs `RED` and `$` mocks on `window` |
29
- | `@bonsae/nrg/test/client/component` | Client component test helpers (`createNode`, `createRED`, `createJQuery`, `useFormNode`) |
30
- | `@bonsae/nrg/test/client/component/config` | Client component test default vitest config (`defaultConfig`) |
31
- | `@bonsae/nrg/test/client/component/setup` | Setup file that installs `RED` and `$` mocks on `window` with Vue i18n |
32
- | `@bonsae/nrg/test/client/e2e` | Browser E2E test helpers (`NodeRedEditor`, `NodeRedField`, `setup`, `teardown`) |
33
- | `@bonsae/nrg/tsconfig/base.json` | Base TypeScript configuration |
34
- | `@bonsae/nrg/tsconfig/core/server.json` | Core server source tsconfig |
35
- | `@bonsae/nrg/tsconfig/core/client.json` | Core client source tsconfig |
36
- | `@bonsae/nrg/tsconfig/test/server/unit.json` | Server unit test tsconfig |
37
- | `@bonsae/nrg/tsconfig/test/client/unit.json` | Client unit test tsconfig |
38
- | `@bonsae/nrg/tsconfig/test/client/component.json` | Client component test tsconfig |
39
- | `@bonsae/nrg/tsconfig/test/client/e2e.json` | Client E2E test tsconfig |
40
-
41
16
  ## Quick Start
42
17
 
43
18
  ```bash
44
- # In your Node-RED package project
45
19
  pnpm add @bonsae/nrg
46
- pnpm add -D vite vue
20
+ pnpm add -D vite vue node-red
47
21
  ```
48
22
 
49
23
  > `vite` and `vue` are dev dependencies because they are only needed at build time. Vue is included as a dependency of nrg and served automatically at runtime.
50
24
 
25
+ ### Node-RED Resolution
26
+
27
+ The vite plugin needs a Node-RED instance for the dev server. It resolves it in this order:
28
+
29
+ 1. **`runtime.version`** — if specified in the plugin config, downloads that exact version via `npx` (overrides any locally installed version)
30
+ 2. **Local `node_modules`** — if `node-red` is installed as a dependency, it is used directly (fastest)
31
+ 3. **Fallback** — downloads the latest `node-red` via `npx`
32
+
33
+ Installing `node-red` as a dev dependency is recommended for fast, reliable dev server startup across all platforms (especially Windows). If you need a specific version (e.g., a beta), set `runtime.version` in the plugin config instead.
34
+
51
35
  **vite.config.ts**
52
36
 
53
37
  ```typescript
@@ -153,13 +137,13 @@ pnpm add -D vitest
153
137
 
154
138
  Optional peer dependencies:
155
139
 
156
- | Package | When to install |
157
- | --- | --- |
158
- | `@vitest/browser-playwright` | Component tests (Playwright browser provider for Vitest) |
159
- | `playwright` | Component tests or E2E tests (direct `import` in test files) |
160
- | `vitest-browser-vue` | Component tests (`render` helper for Vue components) |
161
- | `@vitest/coverage-v8` | Coverage with `--coverage` (V8 provider) |
162
- | `@vitest/coverage-istanbul` | Coverage with `--coverage` (Istanbul provider) |
140
+ | Package | When to install |
141
+ | ---------------------------- | ------------------------------------------------------------ |
142
+ | `@vitest/browser-playwright` | Component tests (Playwright browser provider for Vitest) |
143
+ | `playwright` | Component tests or E2E tests (direct `import` in test files) |
144
+ | `vitest-browser-vue` | Component tests (`render` helper for Vue components) |
145
+ | `@vitest/coverage-v8` | Coverage with `--coverage` (V8 provider) |
146
+ | `@vitest/coverage-istanbul` | Coverage with `--coverage` (Istanbul provider) |
163
147
 
164
148
  - `@bonsae/nrg/test/server/unit` — server-side unit tests
165
149
  - `@bonsae/nrg/test/client/unit` — client-side unit tests (TypeScript logic)
@@ -195,11 +179,14 @@ Test client-side TypeScript logic (validation, utilities) with mocked `RED` and
195
179
  import { defineConfig, mergeConfig } from "vitest/config";
196
180
  import { defaultConfig } from "@bonsae/nrg/test/client/unit/config";
197
181
 
198
- export default mergeConfig(defaultConfig, defineConfig({
199
- test: {
200
- include: ["tests/client/unit/**/*.test.ts"],
201
- },
202
- }));
182
+ export default mergeConfig(
183
+ defaultConfig,
184
+ defineConfig({
185
+ test: {
186
+ include: ["tests/client/unit/**/*.test.ts"],
187
+ },
188
+ }),
189
+ );
203
190
  ```
204
191
 
205
192
  ```typescript
@@ -223,11 +210,14 @@ Test your Vue editor components with mocked Node-RED globals. Components that us
223
210
  import { defineConfig, mergeConfig } from "vitest/config";
224
211
  import { defaultConfig } from "@bonsae/nrg/test/client/component/config";
225
212
 
226
- export default mergeConfig(defaultConfig, defineConfig({
227
- test: {
228
- include: ["tests/client/component/**/*.test.ts"],
229
- },
230
- }));
213
+ export default mergeConfig(
214
+ defaultConfig,
215
+ defineConfig({
216
+ test: {
217
+ include: ["tests/client/component/**/*.test.ts"],
218
+ },
219
+ }),
220
+ );
231
221
  ```
232
222
 
233
223
  ```typescript
@@ -239,7 +229,10 @@ import MyForm from "../src/client/components/my-form.vue";
239
229
 
240
230
  describe("MyForm", () => {
241
231
  test("renders fields from injected node", async () => {
242
- const { provide } = createNode({ name: "test", url: "https://example.com" });
232
+ const { provide } = createNode({
233
+ name: "test",
234
+ url: "https://example.com",
235
+ });
243
236
  const screen = render(MyForm, {
244
237
  global: { provide },
245
238
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonsae/nrg",
3
- "version": "0.18.4",
3
+ "version": "0.18.5",
4
4
  "description": "NRG framework — build Node-RED nodes with Vue 3, TypeScript, and JSON Schema",
5
5
  "author": "Allan Oricil <allanoricil@duck.com>",
6
6
  "license": "MIT",
package/server/index.cjs CHANGED
@@ -280,6 +280,8 @@ var Node = class _Node {
280
280
  throw error;
281
281
  }
282
282
  );
283
+ createdPromise.catch(() => {
284
+ });
283
285
  node[WIRE_HANDLERS](this, createdPromise);
284
286
  },
285
287
  {
@@ -288,7 +290,14 @@ var Node = class _Node {
288
290
  }
289
291
  );
290
292
  NodeClass.validateSettings(RED);
291
- await Promise.resolve(NodeClass.registered?.(RED));
293
+ try {
294
+ await Promise.resolve(NodeClass.registered?.(RED));
295
+ } catch (error) {
296
+ const message = error instanceof Error ? error.message : String(error);
297
+ RED.log.error(
298
+ `Error during registered hook for ${NodeClass.type}: ${message}`
299
+ );
300
+ }
292
301
  }
293
302
  RED;
294
303
  node;