@bonsae/nrg 0.2.0 → 0.3.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/build/index.js ADDED
@@ -0,0 +1,7 @@
1
+ // src/utils.ts
2
+ function defineRuntimeSettings(settings) {
3
+ return settings;
4
+ }
5
+ export {
6
+ defineRuntimeSettings
7
+ };
@@ -111,9 +111,6 @@ function mergeOptions(defaults, overrides) {
111
111
  }
112
112
  return result;
113
113
  }
114
- function defineRuntimeSettings(settings) {
115
- return settings;
116
- }
117
114
 
118
115
  // src/vite/node-red-launcher.ts
119
116
  import { spawn } from "child_process";
@@ -1917,6 +1914,5 @@ function nodeRed(options = {}) {
1917
1914
  ];
1918
1915
  }
1919
1916
  export {
1920
- defineRuntimeSettings,
1921
1917
  nodeRed
1922
1918
  };
@@ -48,13 +48,9 @@ function mergeOptions(defaults, overrides) {
48
48
  }
49
49
  return result;
50
50
  }
51
- function defineRuntimeSettings(settings) {
52
- return settings;
53
- }
54
51
  export {
55
52
  cleanDir,
56
53
  copyFiles,
57
- defineRuntimeSettings,
58
54
  getPackageName,
59
55
  mergeOptions
60
56
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonsae/nrg",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
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",
@@ -33,6 +33,10 @@
33
33
  "build/"
34
34
  ],
35
35
  "exports": {
36
+ ".": {
37
+ "types": "./src/index.ts",
38
+ "default": "./build/index.js"
39
+ },
36
40
  "./server": {
37
41
  "types": "./src/core/server/index.ts",
38
42
  "require": "./build/server/index.cjs",
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { defineRuntimeSettings } from "./utils";
2
+ export type { NodeRedRuntimeSettings } from "./types";
package/src/types.ts ADDED
@@ -0,0 +1,189 @@
1
+ import type { Http2ServerRequest } from "http2";
2
+
3
+ export interface NodeRedRuntimeSettings {
4
+ userDir?: string;
5
+ nodesDir?: string | string[];
6
+ flowFile?: string;
7
+ flowFilePretty?: boolean;
8
+ credentialSecret?: string | false;
9
+ requireHttps?: boolean;
10
+ https?:
11
+ | { key: string; cert: string }
12
+ | (() =>
13
+ | Promise<{ key: string; cert: string }>
14
+ | { key: string; cert: string });
15
+ httpsRefreshInterval?: number;
16
+ httpAdminRoot?: string;
17
+ httpNodeRoot?: string;
18
+ httpNodeCors?: { origin: string; methods: string };
19
+ httpStatic?: string | { path: string; root: string }[];
20
+ httpStaticRoot?: string;
21
+ httpAdminMiddleware?: (req: unknown, res: unknown, next: () => void) => void;
22
+ httpNodeMiddleware?: (req: unknown, res: unknown, next: () => void) => void;
23
+ httpServerOptions?: Record<string, unknown>;
24
+ adminAuth?: {
25
+ type?: "credentials" | "strategy";
26
+ users?: {
27
+ username: string;
28
+ password: string;
29
+ permissions?: string | string[];
30
+ }[];
31
+ default?: {
32
+ permissions?: string | string[];
33
+ };
34
+ tokens?: (
35
+ token: string,
36
+ ) => Promise<{ user: string; permissions: string | string[] } | null>;
37
+ tokenHeader: "string";
38
+ sessionExpiryTime?: number;
39
+ [key: string]: unknown;
40
+ };
41
+ httpNodeAuth?: {
42
+ user?: string;
43
+ pass?: string;
44
+ };
45
+ httpStaticAuth?: {
46
+ user?: string;
47
+ pass?: string;
48
+ };
49
+ lang?:
50
+ | "en-US"
51
+ | "de"
52
+ | "es-ES"
53
+ | "fr"
54
+ | "ko"
55
+ | "pt-BR"
56
+ | "ru"
57
+ | "ja"
58
+ | "zh-CN"
59
+ | "zh-TW";
60
+ diagnostics?: {
61
+ enabled?: boolean;
62
+ ui?: boolean;
63
+ };
64
+ runtimeState?: {
65
+ enabled?: boolean;
66
+ ui?: boolean;
67
+ };
68
+ disableEditor?: boolean;
69
+ editorTheme?: {
70
+ page?: {
71
+ title?: string;
72
+ favicon?: string;
73
+ css?: string | string[];
74
+ scripts?: string | string[];
75
+ };
76
+ header?: {
77
+ title?: string;
78
+ image?: string;
79
+ url?: string;
80
+ };
81
+ deployButton?: {
82
+ type?: "simple" | "default";
83
+ label?: string;
84
+ icon?: string;
85
+ };
86
+ menu?: {
87
+ "menu-item-import-library"?: boolean;
88
+ "menu-item-export-library"?: boolean;
89
+ "menu-item-keyboard-shortcuts"?: boolean;
90
+ "menu-item-help"?: {
91
+ label?: string;
92
+ url?: string;
93
+ };
94
+ [menuItem: string]:
95
+ | boolean
96
+ | { label?: string; url?: string }
97
+ | undefined;
98
+ };
99
+ userMenu?: boolean;
100
+ login?: {
101
+ image?: string;
102
+ };
103
+ logout?: {
104
+ redirect?: string;
105
+ };
106
+ palette?: {
107
+ catalogues?: string[];
108
+ categories?: string[];
109
+ theme?: { category: string; type: string; color: string }[];
110
+ };
111
+ projects?: {
112
+ enabled?: boolean;
113
+ workflow?: {
114
+ mode: "manual" | "auto";
115
+ };
116
+ };
117
+ codeEditor?: {
118
+ lib?: "monaco" | "ace";
119
+ options?: Record<string, unknown>;
120
+ };
121
+ mermaid?: {
122
+ theme?: string;
123
+ };
124
+ tours?: boolean;
125
+ theme?: string;
126
+ [key: string]: unknown;
127
+ };
128
+ contextStorage?: {
129
+ default?: {
130
+ module?: "memory" | "localfilesystem" | object;
131
+ config?: Record<string, unknown>;
132
+ };
133
+ [store: string]:
134
+ | {
135
+ module?: "memory" | "localfilesystem" | object;
136
+ config?: Record<string, unknown>;
137
+ }
138
+ | undefined;
139
+ };
140
+ exportGlobalContextKeys?: boolean;
141
+ logging?: {
142
+ console?: {
143
+ level?: "fatal" | "error" | "warn" | "info" | "debug" | "trace" | "off";
144
+ metrics?: boolean;
145
+ audit?: boolean;
146
+ };
147
+ };
148
+ fileWorkingDirectory?: string;
149
+ functionExternalModules?: boolean;
150
+ functionGlobalContext?: Record<string, unknown>;
151
+ nodeMessageBufferMaxLength?: number;
152
+ functionTimeout?: number;
153
+ externalModules?: {
154
+ autoInstall?: boolean;
155
+ autoInstallRetry?: number;
156
+ palette?: {
157
+ allowInstall?: boolean;
158
+ allowUpdate?: boolean;
159
+ allowUpload?: boolean;
160
+ allowList?: string[];
161
+ denyList?: string[];
162
+ allowUpdateList?: string[];
163
+ denyUpdateList?: string[];
164
+ };
165
+ modules?: {
166
+ allowInstall?: boolean;
167
+ allowList?: string[];
168
+ denyList?: string[];
169
+ };
170
+ };
171
+ execMaxBufferSize?: number;
172
+ debugMaxLength?: number;
173
+ debugUseColors?: boolean;
174
+ httpRequestTimeout?: number;
175
+ mqttReconnectTime?: number;
176
+ serialReconnectTime?: number;
177
+ socketReconnectTime?: number;
178
+ socketTimeout?: number;
179
+ tcpMsgQueueSize?: number;
180
+ inboundWebSocketTimeout?: number;
181
+ tlsConfigDisableLocalFiles?: boolean;
182
+ webSocketNodeVerifyClient?: (info: {
183
+ origin: string;
184
+ req: Http2ServerRequest;
185
+ secure: boolean;
186
+ }) => boolean;
187
+ apiMaxLength?: string;
188
+ [key: string]: unknown;
189
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,20 @@
1
+ import type { NodeRedRuntimeSettings } from "./types";
2
+
3
+ /**
4
+ * Type-safe helper for defining Node-RED runtime settings.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { defineRuntimeSettings } from "@bonsae/nrg";
9
+ *
10
+ * export default defineRuntimeSettings({
11
+ * flowFile: "flows.json",
12
+ * flowFilePretty: true,
13
+ * });
14
+ * ```
15
+ */
16
+ export function defineRuntimeSettings(
17
+ settings: NodeRedRuntimeSettings,
18
+ ): NodeRedRuntimeSettings {
19
+ return settings;
20
+ }
package/src/vite/index.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export { nodeRed } from "./plugin";
2
- export { defineRuntimeSettings } from "./utils";
3
- export type { NodeRedPluginOptions, NodeRedRuntimeSettings } from "./types";
2
+ export type { NodeRedPluginOptions } from "./types";
package/src/vite/types.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { Plugin } from "vite";
2
2
  import type { NodeRedLauncher } from "./node-red-launcher";
3
- import type { Http2ServerRequest } from "http2";
4
3
 
5
4
  interface BuildContext {
6
5
  outDir: string;
@@ -105,199 +104,6 @@ interface NodeRedPluginOptions {
105
104
  extraFilesCopyTargets?: CopyTarget[];
106
105
  }
107
106
 
108
- interface NodeRedRuntimeSettings {
109
- // NOTE: commented out because the preferred port must be set using NodeRedLauncherOptions.runtime.port
110
- // uiPort?: number;
111
- // NOTE: commented out because the plugin set it to 127.0.0.1
112
- // uiHost?: string;
113
- userDir?: string;
114
- nodesDir?: string | string[];
115
- flowFile?: string;
116
- flowFilePretty?: boolean;
117
- credentialSecret?: string | false;
118
- requireHttps?: boolean;
119
- https?:
120
- | { key: string; cert: string }
121
- | (() =>
122
- | Promise<{ key: string; cert: string }>
123
- | { key: string; cert: string });
124
- httpsRefreshInterval?: number;
125
- httpAdminRoot?: string;
126
- httpNodeRoot?: string;
127
- httpNodeCors?: { origin: string; methods: string };
128
- httpStatic?: string | { path: string; root: string }[];
129
- httpStaticRoot?: string;
130
- httpAdminMiddleware?: (req: unknown, res: unknown, next: () => void) => void;
131
- httpNodeMiddleware?: (req: unknown, res: unknown, next: () => void) => void;
132
- httpServerOptions?: Record<string, unknown>;
133
- adminAuth?: {
134
- type?: "credentials" | "strategy";
135
- users?: {
136
- username: string;
137
- password: string;
138
- permissions?: string | string[];
139
- }[];
140
- default?: {
141
- permissions?: string | string[];
142
- };
143
- tokens?: (
144
- token: string,
145
- ) => Promise<{ user: string; permissions: string | string[] } | null>;
146
- tokenHeader: "string";
147
- sessionExpiryTime?: number;
148
- [key: string]: unknown;
149
- };
150
- httpNodeAuth?: {
151
- user?: string;
152
- pass?: string;
153
- };
154
- httpStaticAuth?: {
155
- user?: string;
156
- pass?: string;
157
- };
158
- lang?:
159
- | "en-US"
160
- | "de"
161
- | "es-ES"
162
- | "fr"
163
- | "ko"
164
- | "pt-BR"
165
- | "ru"
166
- | "ja"
167
- | "zh-CN"
168
- | "zh-TW";
169
- diagnostics?: {
170
- enabled?: boolean;
171
- ui?: boolean;
172
- };
173
- runtimeState?: {
174
- enabled?: boolean;
175
- ui?: boolean;
176
- };
177
- disableEditor?: boolean;
178
- editorTheme?: {
179
- page?: {
180
- title?: string;
181
- favicon?: string;
182
- css?: string | string[];
183
- scripts?: string | string[];
184
- };
185
- header?: {
186
- title?: string;
187
- image?: string;
188
- url?: string;
189
- };
190
- deployButton?: {
191
- type?: "simple" | "default";
192
- label?: string;
193
- icon?: string;
194
- };
195
- menu?: {
196
- "menu-item-import-library"?: boolean;
197
- "menu-item-export-library"?: boolean;
198
- "menu-item-keyboard-shortcuts"?: boolean;
199
- "menu-item-help"?: {
200
- label?: string;
201
- url?: string;
202
- };
203
- [menuItem: string]:
204
- | boolean
205
- | { label?: string; url?: string }
206
- | undefined;
207
- };
208
- userMenu?: boolean;
209
- login?: {
210
- image?: string;
211
- };
212
- logout?: {
213
- redirect?: string;
214
- };
215
- palette?: {
216
- catalogues?: string[];
217
- categories?: string[];
218
- theme?: { category: string; type: string; color: string }[];
219
- };
220
- projects?: {
221
- enabled?: boolean;
222
- workflow?: {
223
- mode: "manual" | "auto";
224
- };
225
- };
226
- codeEditor?: {
227
- lib?: "monaco" | "ace";
228
- // TODO: add monaco option types
229
- options?: Record<string, unknown>;
230
- };
231
- mermaid?: {
232
- theme?: string;
233
- };
234
- tours?: boolean;
235
- theme?: string;
236
- [key: string]: unknown;
237
- };
238
- contextStorage?: {
239
- default?: {
240
- module?: "memory" | "localfilesystem" | object;
241
- config?: Record<string, unknown>;
242
- };
243
- [store: string]:
244
- | {
245
- module?: "memory" | "localfilesystem" | object;
246
- config?: Record<string, unknown>;
247
- }
248
- | undefined;
249
- };
250
- exportGlobalContextKeys?: boolean;
251
- logging?: {
252
- console?: {
253
- level?: "fatal" | "error" | "warn" | "info" | "debug" | "trace" | "off";
254
- metrics?: boolean;
255
- audit?: boolean;
256
- };
257
- };
258
- fileWorkingDirectory?: string;
259
- functionExternalModules?: boolean;
260
- functionGlobalContext?: Record<string, unknown>;
261
- nodeMessageBufferMaxLength?: number;
262
- functionTimeout?: number;
263
- externalModules?: {
264
- autoInstall?: boolean;
265
- autoInstallRetry?: number;
266
- palette?: {
267
- allowInstall?: boolean;
268
- allowUpdate?: boolean;
269
- allowUpload?: boolean;
270
- allowList?: string[];
271
- denyList?: string[];
272
- allowUpdateList?: string[];
273
- denyUpdateList?: string[];
274
- };
275
- modules?: {
276
- allowInstall?: boolean;
277
- allowList?: string[];
278
- denyList?: string[];
279
- };
280
- };
281
- execMaxBufferSize?: number;
282
- debugMaxLength?: number;
283
- debugUseColors?: boolean;
284
- httpRequestTimeout?: number;
285
- mqttReconnectTime?: number;
286
- serialReconnectTime?: number;
287
- socketReconnectTime?: number;
288
- socketTimeout?: number;
289
- tcpMsgQueueSize?: number;
290
- inboundWebSocketTimeout?: number;
291
- tlsConfigDisableLocalFiles?: boolean;
292
- webSocketNodeVerifyClient?: (info: {
293
- origin: string;
294
- req: Http2ServerRequest;
295
- secure: boolean;
296
- }) => boolean;
297
- apiMaxLength?: string;
298
- [key: string]: unknown;
299
- }
300
-
301
107
  interface PackageJson {
302
108
  name: string;
303
109
  version: string;
@@ -362,7 +168,6 @@ export {
362
168
  LoggerOptions,
363
169
  NodeRedLauncherOptions,
364
170
  NodeRedPluginOptions,
365
- NodeRedRuntimeSettings,
366
171
  PackageJson,
367
172
  ServerBuildOptions,
368
173
  ServerPluginOptions,
package/src/vite/utils.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import type { NodeRedRuntimeSettings, PackageJson } from "./types";
3
+ import type { PackageJson } from "./types";
4
4
 
5
5
  function cleanDir(dir: string) {
6
6
  if (fs.existsSync(dir)) {
@@ -69,35 +69,4 @@ function mergeOptions<T extends Record<string, unknown>>(
69
69
  return result;
70
70
  }
71
71
 
72
- /**
73
- * Define Node-RED runtime settings with full type support.
74
- *
75
- * Note: All paths should be absolute. Use `import.meta.dirname` or `__dirname` to resolve relative paths.
76
- *
77
- * @example
78
- * ```typescript
79
- * import { defineRuntimeSettings } from "./vite/utils";
80
- * import path from "path";
81
- *
82
- * const __dirname = import.meta.dirname;
83
- *
84
- * export default defineRuntimeSettings({
85
- * userDir: path.resolve(__dirname, ".node-red"),
86
- * flowFile: "flows.json",
87
- * httpStatic: path.resolve(__dirname, "public"),
88
- * });
89
- * ```
90
- */
91
- function defineRuntimeSettings(
92
- settings: NodeRedRuntimeSettings,
93
- ): NodeRedRuntimeSettings {
94
- return settings;
95
- }
96
-
97
- export {
98
- cleanDir,
99
- copyFiles,
100
- defineRuntimeSettings,
101
- getPackageName,
102
- mergeOptions,
103
- };
72
+ export { cleanDir, copyFiles, getPackageName, mergeOptions };