@theotherwillembotha/node-red-plugincore 0.1.0 → 0.2.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 (134) hide show
  1. package/README.md +616 -220
  2. package/build/GenerateNodes.js +3 -6
  3. package/build/Nodes.html +3 -1504
  4. package/build/Nodes.js +5 -15
  5. package/build/Plugins.html +227 -0
  6. package/build/Plugins.js +18 -8
  7. package/build/core/NodeConstructor.d.ts +9 -16
  8. package/build/core/NodeConstructor.d.ts.map +1 -1
  9. package/build/core/NodeConstructor.js +109 -146
  10. package/build/core/NodeGenerator.d.ts.map +1 -1
  11. package/build/core/NodeGenerator.js +79 -28
  12. package/build/core/NodeManagerRuntime.d.ts +44 -0
  13. package/build/core/NodeManagerRuntime.d.ts.map +1 -0
  14. package/build/core/NodeManagerRuntime.js +140 -0
  15. package/build/core/Utils.d.ts.map +1 -1
  16. package/build/core/logger/service/LoggerService.d.ts +6 -5
  17. package/build/core/logger/service/LoggerService.d.ts.map +1 -1
  18. package/build/core/logger/service/LoggerService.js +51 -20
  19. package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
  20. package/build/core/metrics/MetricsDecorator.d.ts +1 -2
  21. package/build/core/metrics/MetricsDecorator.d.ts.map +1 -1
  22. package/build/core/metrics/MetricsDecorator.js +89 -116
  23. package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -1
  24. package/build/core/metrics/node/CounterMetricConfigNode.js +4 -5
  25. package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -1
  26. package/build/core/metrics/node/GaugeMetricConfigNode.js +5 -6
  27. package/build/core/metrics/node/MetricsConfigNode.d.ts +19 -9
  28. package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -1
  29. package/build/core/metrics/node/MetricsConfigNode.js +14 -45
  30. package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -1
  31. package/build/core/metrics/node/TimerMetricConfigNode.js +11 -17
  32. package/build/core/metrics/service/MetricsService.d.ts +110 -114
  33. package/build/core/metrics/service/MetricsService.d.ts.map +1 -1
  34. package/build/core/metrics/service/MetricsService.js +122 -339
  35. package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -1
  36. package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -1
  37. package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -1
  38. package/build/core/metrics/template/MetricsTemplate.js +1 -2
  39. package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -1
  40. package/build/core/other/node/DelegatedConfigReferenceNode.d.ts +1 -1
  41. package/build/core/other/node/DelegatedConfigReferenceNode.d.ts.map +1 -1
  42. package/build/core/other/node/DelegatedConfigReferenceNode.js +1 -1
  43. package/build/core/other/service/InputService.d.ts.map +1 -1
  44. package/build/core/other/service/SettingsService.d.ts +1 -2
  45. package/build/core/other/service/SettingsService.d.ts.map +1 -1
  46. package/build/core/other/service/SettingsService.js +19 -5
  47. package/build/core/other/template/BasicTemplate.d.ts.map +1 -1
  48. package/build/core/other/template/SettingsTemplate.d.ts.map +1 -1
  49. package/build/core/state/node/InternalStateConfigNode.d.ts +16 -0
  50. package/build/core/state/node/InternalStateConfigNode.d.ts.map +1 -0
  51. package/build/core/state/node/InternalStateConfigNode.js +89 -0
  52. package/build/core/state/node/StateConfigNode.d.ts +24 -0
  53. package/build/core/state/node/StateConfigNode.d.ts.map +1 -0
  54. package/build/core/state/node/StateConfigNode.js +22 -0
  55. package/build/core/state/service/StateService.d.ts +34 -0
  56. package/build/core/state/service/StateService.d.ts.map +1 -0
  57. package/build/core/state/service/StateService.js +201 -0
  58. package/build/core/state/template/StateTemplate.d.ts +8 -0
  59. package/build/core/state/template/StateTemplate.d.ts.map +1 -0
  60. package/build/core/state/template/StateTemplate.js +11 -0
  61. package/build/core/tagging/ServiceDescriptionDecorator.d.ts +10 -0
  62. package/build/core/tagging/ServiceDescriptionDecorator.d.ts.map +1 -0
  63. package/build/core/tagging/ServiceDescriptionDecorator.js +10 -0
  64. package/build/core/tagging/service/NodeTypeService.d.ts +1 -2
  65. package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -1
  66. package/build/core/tagging/service/NodeTypeService.js +19 -5
  67. package/build/core/ui/template/ScriptEditorTemplate.d.ts.map +1 -1
  68. package/build/core/ui/template/UIHelperTemplate.d.ts.map +1 -1
  69. package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -1
  70. package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
  71. package/build/core/webhook/service/WebhookServerService.d.ts +3 -4
  72. package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
  73. package/build/core/webhook/service/WebhookServerService.js +48 -18
  74. package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
  75. package/build/index.d.ts +5 -2
  76. package/build/index.d.ts.map +1 -1
  77. package/build/index.js +6 -2
  78. package/build/runtime/NodeManagerRuntime.js +140 -0
  79. package/documentation/CounterMetricConfigNode.png +0 -0
  80. package/documentation/GaugeMetricConfigNode.png +0 -0
  81. package/documentation/LoggerTemplate.png +0 -0
  82. package/documentation/MetricsTemplate.png +0 -0
  83. package/documentation/StateTemplate.png +0 -0
  84. package/documentation/TimerMetricConfigNode_histogram.png +0 -0
  85. package/documentation/TimerMetricConfigNode_summary.png +0 -0
  86. package/documentation/WebhookServerConfigNode.png +0 -0
  87. package/documentation/WebhookTemplate.png +0 -0
  88. package/package.json +4 -10
  89. package/src/GenerateNodes.ts +7 -11
  90. package/src/core/NodeConstructor.ts +130 -186
  91. package/src/core/NodeGenerator.ts +88 -33
  92. package/src/core/NodeManagerRuntime.ts +179 -0
  93. package/src/core/logger/service/LoggerService.ts +39 -26
  94. package/src/core/logger/template/LoggerTemplate.html +11 -6
  95. package/src/core/metrics/MetricsDecorator.ts +140 -168
  96. package/src/core/metrics/node/CounterMetricConfigNode.ts +20 -20
  97. package/src/core/metrics/node/GaugeMetricConfigNode.ts +24 -25
  98. package/src/core/metrics/node/MetricsConfigNode.ts +29 -48
  99. package/src/core/metrics/node/TimerMetricConfigNode.ts +50 -59
  100. package/src/core/metrics/service/MetricsService.ts +214 -489
  101. package/src/core/metrics/template/CounterMetricTemplate.html +0 -1
  102. package/src/core/metrics/template/GaugeMetricTemplate.html +1 -1
  103. package/src/core/metrics/template/MetricsTemplate.html +132 -13
  104. package/src/core/metrics/template/MetricsTemplate.ts +3 -4
  105. package/src/core/other/node/DelegatedConfigReferenceNode.ts +1 -1
  106. package/src/core/other/service/SettingsService.ts +6 -10
  107. package/src/core/other/template/BasicTemplate.html +1 -1
  108. package/src/core/state/node/InternalStateConfigNode.html +77 -0
  109. package/src/core/state/node/InternalStateConfigNode.ts +102 -0
  110. package/src/core/state/node/StateConfigNode.ts +29 -0
  111. package/src/core/state/service/StateService.ts +180 -0
  112. package/src/core/state/template/StateTemplate.html +244 -0
  113. package/src/core/state/template/StateTemplate.ts +17 -0
  114. package/src/core/tagging/ServiceDescriptionDecorator.ts +23 -0
  115. package/src/core/tagging/service/NodeTypeService.ts +6 -11
  116. package/src/core/ui/template/UIHelperTemplate.html +41 -26
  117. package/src/core/webhook/service/WebhookServerService.ts +39 -23
  118. package/src/core/webhook/template/WebhookTemplate.html +28 -35
  119. package/src/index.ts +7 -2
  120. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +0 -20
  121. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +0 -1
  122. package/build/core/logger/node/ConsoleLoggerConfigNode.js +0 -62
  123. package/build/core/logger/node/RestLoggerConfigNode.d.ts +0 -40
  124. package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +0 -1
  125. package/build/core/logger/node/RestLoggerConfigNode.js +0 -128
  126. package/documentation/ConsoleLoggerConfigNode.png +0 -0
  127. package/documentation/MetricsConfigNode.png +0 -0
  128. package/documentation/RestLoggerConfigNode.png +0 -0
  129. package/documentation/TimerMetricConfigNode.png +0 -0
  130. package/documentation/WebhookNode.png +0 -0
  131. package/src/core/logger/node/ConsoleLoggerConfigNode.html +0 -90
  132. package/src/core/logger/node/ConsoleLoggerConfigNode.ts +0 -71
  133. package/src/core/logger/node/RestLoggerConfigNode.html +0 -183
  134. package/src/core/logger/node/RestLoggerConfigNode.ts +0 -170
package/build/Nodes.js CHANGED
@@ -8,25 +8,15 @@
8
8
 
9
9
  */
10
10
  "use strict";
11
- const NodeManager = require("@theotherwillembotha/node-red-plugincore").NodeManager;
11
+ const { NodeManager } = require("./runtime/NodeManagerRuntime");
12
12
  const DelegatedConfigReferenceNode = require("@theotherwillembotha/node-red-plugincore").DelegatedConfigReferenceNode;
13
- const ConsoleLoggerConfigNode = require("@theotherwillembotha/node-red-plugincore").ConsoleLoggerConfigNode;
14
- const RestLoggerConfigNode = require("@theotherwillembotha/node-red-plugincore").RestLoggerConfigNode;
15
- const MetricsConfigNode = require("@theotherwillembotha/node-red-plugincore").MetricsConfigNode;
16
- const CounterMetricConfigNode = require("@theotherwillembotha/node-red-plugincore").CounterMetricConfigNode;
17
- const GaugeMetricConfigNode = require("@theotherwillembotha/node-red-plugincore").GaugeMetricConfigNode;
18
- const TimerMetricConfigNode = require("@theotherwillembotha/node-red-plugincore").TimerMetricConfigNode;
19
13
  const WebhookServerConfigNode = require("@theotherwillembotha/node-red-plugincore").WebhookServerConfigNode;
14
+ const InternalStateConfigNode = require("@theotherwillembotha/node-red-plugincore").InternalStateConfigNode;
20
15
  module.exports = (RED) => {
21
16
  let manager = new NodeManager(RED);
22
17
  manager.registerNodeType("DelegatedConfigReferenceNode", DelegatedConfigReferenceNode);
23
- manager.registerNodeType("ConsoleLoggerConfigNode", ConsoleLoggerConfigNode);
24
- manager.registerNodeType("RestLoggerConfigNode", RestLoggerConfigNode);
25
- manager.registerNodeType("MetricsConfigNode", MetricsConfigNode);
26
- manager.registerNodeType("CounterMetricConfigNode", CounterMetricConfigNode);
27
- manager.registerNodeType("GaugeMetricConfigNode", GaugeMetricConfigNode);
28
- manager.registerNodeType("TimerMetricConfigNode", TimerMetricConfigNode);
29
18
  manager.registerNodeType("WebhookServerConfigNode", WebhookServerConfigNode);
30
- }
31
-
19
+ manager.registerNodeType("InternalStateConfigNode", InternalStateConfigNode);
20
+ }
21
+
32
22
 
@@ -0,0 +1,227 @@
1
+
2
+ <!--
3
+
4
+ This file was automatically generated using the NODERED Core utility.
5
+ Any modifications to his file will be overwritten the next time the code is regenerated.
6
+
7
+ You have been warned.
8
+
9
+ -->
10
+ <!-- WebhookServerConfigNode -->
11
+
12
+
13
+
14
+ <script type="text/javascript">
15
+ (function() {
16
+ RED.events.on('registry:node-set-added', function(ns) {
17
+ if (ns.types && ns.types.indexOf('DelegatedConfigReferenceNode') !== -1) {
18
+ RED.nodes.registerType('DelegatedConfigReferenceNode', {
19
+ category: 'config',
20
+ defaults: {},
21
+ oneditprepare: function() {},
22
+ oneditsave: function() {},
23
+ oneditcancel: function() {},
24
+ oneditdelete: function() {},
25
+ });
26
+ }
27
+ });
28
+ }());
29
+
30
+ </script>
31
+
32
+
33
+ <script type="text/html" data-template-name='DelegatedConfigReferenceNode'>
34
+
35
+ </script>
36
+
37
+ <script type="text/markdown" data-help-name='DelegatedConfigReferenceNode'>
38
+
39
+ </script>
40
+
41
+ <script type="text/javascript">
42
+ (function() {
43
+ RED.events.on('registry:node-set-added', function(ns) {
44
+ if (ns.types && ns.types.indexOf('WebhookServerConfigNode') !== -1) {
45
+ RED.nodes.registerType('WebhookServerConfigNode', {
46
+ category: 'config',
47
+ label: function() {
48
+ return this.name
49
+ },
50
+ paletteLabel: 'Webhook',
51
+ defaults: {
52
+ name: {
53
+ value: 'Example Test Node',
54
+ required: true
55
+ },
56
+ port: {
57
+ value: 6644,
58
+ required: true
59
+ },
60
+ externalHost: {
61
+ value: 'localhost',
62
+ required: true
63
+ },
64
+ externalPort: {
65
+ value: 6644,
66
+ required: true
67
+ },
68
+ },
69
+ oneditprepare: function() {},
70
+ oneditsave: function() {},
71
+ oneditcancel: function() {},
72
+ oneditdelete: function() {},
73
+ });
74
+ }
75
+ });
76
+ }());
77
+
78
+ </script>
79
+
80
+
81
+ <script type="text/html" data-template-name='WebhookServerConfigNode'>
82
+ <div id='section_WebhookServerConfigNode'>
83
+ <div id="WebhookServerConfig">
84
+ <div class="form-row">
85
+ <label class="towb_editorlabel" for="node-config-input-name"><i class="fa fa-font"></i> Name</label>
86
+ <input type="text" id="node-config-input-name" />
87
+ </div>
88
+
89
+ <div class="form-row">
90
+ <label class="towb_editorlabel" for="node-config-input-port"><i class="fa fa-plug"></i> Port</label>
91
+ <input type="number" id="node-config-input-port" />
92
+ </div>
93
+
94
+ <div class="form-row">
95
+ <label class="towb_editorlabel" for="node-config-input-externalHost"><i class="fa fa-globe"></i> External Host</label>
96
+ <input type="text" id="node-config-input-externalHost" />
97
+ </div>
98
+
99
+ <div class="form-row">
100
+ <label class="towb_editorlabel" for="node-config-input-externalPort"><i class="fa fa-plug"></i> External Port</label>
101
+ <input type="number" id="node-config-input-externalPort" />
102
+ </div>
103
+ <!-- add a button here to autmatically find an open port -->
104
+ </div>
105
+
106
+
107
+ </div>
108
+ </script>
109
+
110
+ <script type="text/markdown" data-help-name='WebhookServerConfigNode'>
111
+ Configuration node for an Express HTTP server that webhook nodes attach to. A single server instance is shared by all webhook nodes that reference it. The server is started when the flow is first deployed and stopped when it is torn down.
112
+
113
+ ### Inputs
114
+ : *name* (string) : A descriptive name for this webhook server.
115
+ : *port* (number) : The local port the HTTP server will listen on. Defaults to `6644`. Each server instance must use a unique port.
116
+
117
+ ### Reverse Proxy
118
+ When this server sits behind a reverse proxy, configure the following fields so that webhook nodes know the externally-visible address. This is used when registering endpoints with a reverse proxy service.
119
+
120
+ : *external host* (string) : The public hostname or IP of the reverse proxy (e.g. `myserver.example.com`).
121
+ : *external port* (number) : The public port exposed by the reverse proxy.
122
+ </script>
123
+
124
+ <script type="text/javascript">
125
+ (function() {
126
+ RED.events.on('registry:node-set-added', function(ns) {
127
+ if (ns.types && ns.types.indexOf('InternalStateConfigNode') !== -1) {
128
+ RED.nodes.registerType('InternalStateConfigNode', {
129
+ category: 'config',
130
+ label: function() {
131
+ return this.name || "Internal State";
132
+ },
133
+ paletteLabel: 'Internal State',
134
+ defaults: {
135
+ name: {
136
+ value: 'Internal State',
137
+ required: true
138
+ },
139
+ survivesRedeploy: {
140
+ value: false,
141
+ required: false
142
+ },
143
+ survivesRestart: {
144
+ value: false,
145
+ required: false
146
+ },
147
+ },
148
+ oneditprepare: function() {
149
+ // **** InternalStateConfigNode **** //
150
+ {
151
+ // Auto-populate the name from the consumer node's context when this is a fresh node.
152
+ let nameInput = $("#node-config-input-name");
153
+ let ctx = window.__stateTemplateContext || {};
154
+ if (ctx.defaultName && (!nameInput.val() || nameInput.val() === "Internal State")) {
155
+ nameInput.val(ctx.defaultName);
156
+ }
157
+ window.__stateTemplateContext = null;
158
+ // When "survives restart" is checked, "survives redeploy" must also be checked.
159
+ let survivesRestart = $("#node-config-input-survivesRestart");
160
+ let survivesRedeploy = $("#node-config-input-survivesRedeploy");
161
+ survivesRestart.on("change", function() {
162
+ if (survivesRestart.prop("checked")) {
163
+ survivesRedeploy.prop("checked", true).prop("disabled", true);
164
+ } else {
165
+ survivesRedeploy.prop("disabled", false);
166
+ }
167
+ });
168
+ survivesRestart.trigger("change");
169
+ }
170
+ },
171
+ oneditsave: function() {
172
+ // **** InternalStateConfigNode **** //
173
+ {}
174
+ },
175
+ oneditcancel: function() {},
176
+ oneditdelete: function() {},
177
+ });
178
+ }
179
+ });
180
+ }());
181
+
182
+ </script>
183
+
184
+
185
+ <script type="text/html" data-template-name='InternalStateConfigNode'>
186
+ <div id='section_InternalStateConfigNode'>
187
+ <div class="form-row">
188
+ <span style="display:inline-block; padding: 4px 0; color:#888;">
189
+ <i class="fa fa-database" style="margin-right:6px;"></i>Internal State Provider
190
+ </span>
191
+ </div>
192
+
193
+ <!-- Name is stored but not shown - auto-set from the consumer node's name + suffix. -->
194
+ <input type="hidden" id="node-config-input-name" />
195
+
196
+ <div class="form-row editorsectionheading" style="margin-top:8px;">
197
+ <i class="w-16 fa fa-database"></i> <span>Persistence</span>
198
+ </div>
199
+ <div class="editorgroupborder">
200
+ <div class="form-row nomargin">
201
+ <input type="checkbox" id="node-config-input-survivesRedeploy" style="margin: 8px 0 10px 130px; width:20px;" />
202
+ <label style="width:auto;" for="node-config-input-survivesRedeploy">Survives redeploy</label>
203
+ </div>
204
+ <div class="form-row nomargin">
205
+ <input type="checkbox" id="node-config-input-survivesRestart" style="margin: 8px 0 10px 130px; width:20px;" />
206
+ <label style="width:auto;" for="node-config-input-survivesRestart">Survives restart <span style="color:#aaa; font-size:0.85em;">(also writes to disk)</span></label>
207
+ </div>
208
+ </div>
209
+
210
+ </div>
211
+ </script>
212
+
213
+ <script type="text/markdown" data-help-name='InternalStateConfigNode'>
214
+ Stores a named state value in memory, optionally persisted across redeployments or process restarts.
215
+
216
+ ### Properties
217
+
218
+ : *survives redeploy* (boolean) : When checked, the current state value is preserved across Node-RED flow redeployments. When unchecked (default), state resets on each deploy.
219
+ : *survives restart* (boolean) : When checked, the current state is written to disk and restored after a process restart. Automatically implies "survives redeploy".
220
+
221
+ ### Details
222
+
223
+ The initial (default) state value is provided by the node that owns this config - for example, a Circuit Breaker Config Node sets the state to its configured **Default State** if no value has been stored yet.
224
+
225
+ When **Survives Restart** is enabled, state is persisted to `<userDir>/internalstate/<nodeId>.json` and automatically restored on the next startup.
226
+ </script>
227
+
package/build/Plugins.js CHANGED
@@ -14,11 +14,12 @@ const MetricsService = require("@theotherwillembotha/node-red-plugincore").Metri
14
14
  const SettingsService = require("@theotherwillembotha/node-red-plugincore").SettingsService;
15
15
  const WebhookServerService = require("@theotherwillembotha/node-red-plugincore").WebhookServerService;
16
16
  const NodeTypeService = require("@theotherwillembotha/node-red-plugincore").NodeTypeService;
17
+ const StateService = require("@theotherwillembotha/node-red-plugincore").StateService;
17
18
 
18
19
  module.exports = function (RED) {
19
20
 
20
21
  // 1. make a list of all the plugins that need to be installed.
21
- let pluginList = [LoggerService, MetricsService, SettingsService, WebhookServerService, NodeTypeService]
22
+ let pluginList = [LoggerService, MetricsService, SettingsService, WebhookServerService, NodeTypeService, StateService]
22
23
  .map(service => service.getServiceDescriptor())
23
24
  .filter(plugin => !RED.plugins.get(plugin.id()));
24
25
 
@@ -31,29 +32,38 @@ module.exports = function (RED) {
31
32
 
32
33
  if(addedPlugin && plugin.instantiate && !plugin.instance){
33
34
  plugin.instance = new plugin.class();
34
-
35
+
35
36
  // instantiate the plugin.
36
37
  await plugin.instance.init(RED);
37
38
 
39
+ // Eagerly call onDeploy with any pre-existing saved flows so that
40
+ // service registries (MetricsService, WebhookServerService, etc.) are
41
+ // populated before config nodes are constructed during flow startup.
42
+ // Without this, MetricsConfigNode._metrics is undefined on first boot.
43
+ const existingFlows = await runtime.flows.getFlows({});
44
+ const hasExistingFlows = existingFlows && existingFlows.flows && existingFlows.flows.length > 0;
45
+ if (hasExistingFlows) {
46
+ await plugin.instance.onDeploy(existingFlows);
47
+ }
48
+
38
49
  // publish an event that it has ben deployed.
39
50
  RED.events.emit("plugin.instantiated", pluginID);
40
-
51
+
41
52
  pluginList.splice(pluginList.findIndex(current => current.id() === addedPlugin.id()), 1);
42
53
 
43
54
  // register a flow deployment listener.
44
- let startupDeployment = true;
55
+ // startupDeployment is only needed for a truly fresh Node-RED with no saved flows.
56
+ let startupDeployment = !hasExistingFlows;
45
57
  RED.events.on('runtime-event', async (event) => {
46
- // startup deployment.
58
+ // startup deployment (fresh Node-RED with no pre-existing flows).
47
59
  if ("runtime-deploy" === event?.id && startupDeployment) {
48
- //console.log("STARTUP DEPLOYMENT");
49
60
  startupDeployment = false;
50
61
  const flows = await runtime.flows.getFlows({});
51
62
  await plugin.instance.onDeploy(flows);
52
63
  }
53
-
64
+
54
65
  // stopping flows on redeployment.
55
66
  if ("runtime-state" === event?.id && event?.payload?.state === "stop" && event?.payload?.deploy) {
56
- //console.log("REDEPLOY!");
57
67
  const flows = await runtime.flows.getFlows({});
58
68
  await plugin.instance.onDeploy(flows);
59
69
  }
@@ -1,11 +1,8 @@
1
1
  import { Node, NodeAPI, NodeAPISettingsWithData } from "node-red";
2
2
  import { INamedType, INodeClass, ITemplateClass } from "./NodeGenerator";
3
3
  import "reflect-metadata";
4
- export interface BaseNodeConfig {
5
- id: string;
6
- name: string;
7
- type: string;
8
- }
4
+ import { NODEMANAGER_API_VERSION, POST_CONSTRUCT_KEY, BaseNodeConfig, runPostConstructInitializers, NodeManager } from "./NodeManagerRuntime";
5
+ export { NODEMANAGER_API_VERSION, POST_CONSTRUCT_KEY, BaseNodeConfig, runPostConstructInitializers, NodeManager };
9
6
  export declare abstract class BaseNode<Config extends BaseNodeConfig> {
10
7
  private _node;
11
8
  node(): Node<{}>;
@@ -102,16 +99,6 @@ declare class PostConstructDecoratorBuilder<TMetadata = any> {
102
99
  build(): any;
103
100
  }
104
101
  export declare function createPostConstructDecorator<TMetadata = any>(decoratorName: string): PostConstructDecoratorBuilder<TMetadata>;
105
- export declare class NodeManager {
106
- private static PLUGINID;
107
- private static _RED;
108
- private nodeTypeService;
109
- private typeBacklog;
110
- constructor(RED: NodeAPI<NodeAPISettingsWithData>);
111
- static get RED(): NodeAPI<NodeAPISettingsWithData>;
112
- registerService(type: IServiceClass): NodeManager;
113
- registerNodeType(typeName: string, type: INodeClass): NodeManager;
114
- }
115
102
  export type FlowDeployment = {
116
103
  rev: string;
117
104
  flows: [FlowElement];
@@ -177,6 +164,11 @@ export declare class NodeBuilder {
177
164
  addIncludeEditDelete(source: string, script: string): NodeBuilder;
178
165
  addIncludeEditForm(source: string, script: string): NodeBuilder;
179
166
  addIncludeDocumentation(source: string, script: string): NodeBuilder;
167
+ buildOnceHtml(): {
168
+ source: string;
169
+ html: string;
170
+ }[];
171
+ buildDeferredType(): string;
180
172
  private serializeProperty;
181
173
  private serializeHTML;
182
174
  private serializeJavaScript;
@@ -187,6 +179,7 @@ export declare class NodeBuilder {
187
179
  buildHtml(): string;
188
180
  buildDocumentation(): string;
189
181
  }
182
+ declare let buildNodeBuilder: (node: INodeClass) => NodeBuilder;
190
183
  declare let buildNode: (node: INodeClass) => string;
191
- export { buildNode };
184
+ export { buildNode, buildNodeBuilder };
192
185
  //# sourceMappingURL=NodeConstructor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeConstructor.d.ts","sourceRoot":"","sources":["../../src/core/NodeConstructor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NodeConstructor.d.ts","sourceRoot":"","sources":["../../src/core/NodeConstructor.ts"],"names":[],"mappings":"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"}