nvent 0.4.0 → 0.4.1

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 (68) hide show
  1. package/dist/module.mjs +55 -13
  2. package/dist/runtime/app/assets/vueflow.css +1 -0
  3. package/dist/runtime/app/plugins/vueflow.client.d.ts +0 -4
  4. package/dist/runtime/app/plugins/vueflow.client.js +0 -4
  5. package/dist/runtime/server/api/_flows/ws.js +4 -2
  6. package/dist/runtime/server/api/_queues/ws.js +4 -2
  7. package/dist/runtime/server/plugins/00.event-store.js +1 -1
  8. package/dist/runtime/server/plugins/00.ws-lifecycle.js +9 -6
  9. package/dist/runtime/server/plugins/queue-management.js +2 -2
  10. package/dist/runtime/server/plugins/state-cleanup.js +1 -1
  11. package/dist/runtime/server/plugins/worker-management.js +1 -1
  12. package/dist/runtime/{server → server-utils}/events/eventBus.d.ts +1 -1
  13. package/dist/runtime/{server → server-utils}/events/types.d.ts +1 -1
  14. package/dist/runtime/{server → server-utils}/events/wiring/flowWiring.d.ts +1 -1
  15. package/dist/runtime/{server → server-utils}/utils/useEventManager.d.ts +1 -1
  16. package/dist/runtime/{server → server-utils}/utils/useEventStore.d.ts +1 -1
  17. package/dist/runtime/server-utils/utils/wsPeerManager.d.ts +44 -0
  18. package/dist/runtime/server-utils/utils/wsPeerManager.js +32 -0
  19. package/package.json +1 -1
  20. package/dist/runtime/server/utils/wsPeerManager.d.ts +0 -34
  21. package/dist/runtime/server/utils/wsPeerManager.js +0 -23
  22. /package/dist/runtime/{server → server-utils}/events/adapters/fileAdapter.d.ts +0 -0
  23. /package/dist/runtime/{server → server-utils}/events/adapters/fileAdapter.js +0 -0
  24. /package/dist/runtime/{server → server-utils}/events/adapters/memoryAdapter.d.ts +0 -0
  25. /package/dist/runtime/{server → server-utils}/events/adapters/memoryAdapter.js +0 -0
  26. /package/dist/runtime/{server → server-utils}/events/adapters/redis/redisAdapter.d.ts +0 -0
  27. /package/dist/runtime/{server → server-utils}/events/adapters/redis/redisAdapter.js +0 -0
  28. /package/dist/runtime/{server → server-utils}/events/adapters/redis/redisPubSubGateway.d.ts +0 -0
  29. /package/dist/runtime/{server → server-utils}/events/adapters/redis/redisPubSubGateway.js +0 -0
  30. /package/dist/runtime/{server → server-utils}/events/eventBus.js +0 -0
  31. /package/dist/runtime/{server → server-utils}/events/eventStoreFactory.d.ts +0 -0
  32. /package/dist/runtime/{server → server-utils}/events/eventStoreFactory.js +0 -0
  33. /package/dist/runtime/{server → server-utils}/events/streamNames.d.ts +0 -0
  34. /package/dist/runtime/{server → server-utils}/events/streamNames.js +0 -0
  35. /package/dist/runtime/{server → server-utils}/events/types.js +0 -0
  36. /package/dist/runtime/{server → server-utils}/events/wiring/flowWiring.js +0 -0
  37. /package/dist/runtime/{server → server-utils}/events/wiring/registry.d.ts +0 -0
  38. /package/dist/runtime/{server → server-utils}/events/wiring/registry.js +0 -0
  39. /package/dist/runtime/{server → server-utils}/queue/adapters/bullmq.d.ts +0 -0
  40. /package/dist/runtime/{server → server-utils}/queue/adapters/bullmq.js +0 -0
  41. /package/dist/runtime/{server → server-utils}/queue/queueFactory.d.ts +0 -0
  42. /package/dist/runtime/{server → server-utils}/queue/queueFactory.js +0 -0
  43. /package/dist/runtime/{server → server-utils}/queue/types.d.ts +0 -0
  44. /package/dist/runtime/{server → server-utils}/queue/types.js +0 -0
  45. /package/dist/runtime/{server → server-utils}/state/adapters/redis.d.ts +0 -0
  46. /package/dist/runtime/{server → server-utils}/state/adapters/redis.js +0 -0
  47. /package/dist/runtime/{server → server-utils}/state/stateFactory.d.ts +0 -0
  48. /package/dist/runtime/{server → server-utils}/state/stateFactory.js +0 -0
  49. /package/dist/runtime/{server → server-utils}/state/types.d.ts +0 -0
  50. /package/dist/runtime/{server → server-utils}/state/types.js +0 -0
  51. /package/dist/runtime/{server → server-utils}/utils/defineQueueConfig.d.ts +0 -0
  52. /package/dist/runtime/{server → server-utils}/utils/defineQueueConfig.js +0 -0
  53. /package/dist/runtime/{server → server-utils}/utils/defineQueueWorker.d.ts +0 -0
  54. /package/dist/runtime/{server → server-utils}/utils/defineQueueWorker.js +0 -0
  55. /package/dist/runtime/{server → server-utils}/utils/useEventManager.js +0 -0
  56. /package/dist/runtime/{server → server-utils}/utils/useEventStore.js +0 -0
  57. /package/dist/runtime/{server → server-utils}/utils/useFlowEngine.d.ts +0 -0
  58. /package/dist/runtime/{server → server-utils}/utils/useFlowEngine.js +0 -0
  59. /package/dist/runtime/{server → server-utils}/utils/useLogs.d.ts +0 -0
  60. /package/dist/runtime/{server → server-utils}/utils/useLogs.js +0 -0
  61. /package/dist/runtime/{server → server-utils}/utils/useQueue.d.ts +0 -0
  62. /package/dist/runtime/{server → server-utils}/utils/useQueue.js +0 -0
  63. /package/dist/runtime/{server → server-utils}/utils/useServerLogger.d.ts +0 -0
  64. /package/dist/runtime/{server → server-utils}/utils/useServerLogger.js +0 -0
  65. /package/dist/runtime/{server → server-utils}/worker/adapter.d.ts +0 -0
  66. /package/dist/runtime/{server → server-utils}/worker/adapter.js +0 -0
  67. /package/dist/runtime/{server → server-utils}/worker/runner/node.d.ts +0 -0
  68. /package/dist/runtime/{server → server-utils}/worker/runner/node.js +0 -0
package/dist/module.mjs CHANGED
@@ -837,6 +837,8 @@ const module = defineNuxtModule({
837
837
  addImportsDir(resolve("./runtime/shared/utils"));
838
838
  addImportsDir(resolve("./runtime/app/composables"));
839
839
  if (config.ui) {
840
+ nuxt.options.css = nuxt.options.css || [];
841
+ nuxt.options.css.push(resolve("./runtime/app/assets/vueflow.css"));
840
842
  addPlugin({
841
843
  src: resolve("./runtime/app/plugins/vueflow.client.ts"),
842
844
  mode: "client"
@@ -917,19 +919,59 @@ const module = defineNuxtModule({
917
919
  write: true,
918
920
  getContents: () => generateAnalyzedFlowsTemplate(lastCompiledRegistry)
919
921
  });
920
- addServerImports([{
921
- name: "useQueueRegistry",
922
- as: "$useQueueRegistry",
923
- from: resolve(nuxt.options.buildDir, "queue-registry")
924
- }, {
925
- name: "useWorkerHandlers",
926
- as: "$useWorkerHandlers",
927
- from: resolve(nuxt.options.buildDir, "worker-handlers")
928
- }, {
929
- name: "useAnalyzedFlows",
930
- as: "$useAnalyzedFlows",
931
- from: resolve(nuxt.options.buildDir, "analyzed-flows")
932
- }]);
922
+ addServerImports([
923
+ // Generated templates
924
+ {
925
+ name: "useQueueRegistry",
926
+ as: "$useQueueRegistry",
927
+ from: resolve(nuxt.options.buildDir, "queue-registry")
928
+ },
929
+ {
930
+ name: "useWorkerHandlers",
931
+ as: "$useWorkerHandlers",
932
+ from: resolve(nuxt.options.buildDir, "worker-handlers")
933
+ },
934
+ {
935
+ name: "useAnalyzedFlows",
936
+ as: "$useAnalyzedFlows",
937
+ from: resolve(nuxt.options.buildDir, "analyzed-flows")
938
+ },
939
+ // Core utilities for user code (moved to server-utils to avoid bundling issues)
940
+ {
941
+ name: "defineQueueConfig",
942
+ from: resolve("./runtime/server-utils/utils/defineQueueConfig")
943
+ },
944
+ {
945
+ name: "defineQueueWorker",
946
+ from: resolve("./runtime/server-utils/utils/defineQueueWorker")
947
+ },
948
+ // Composables users may need in server code
949
+ {
950
+ name: "useQueue",
951
+ from: resolve("./runtime/server-utils/utils/useQueue")
952
+ },
953
+ {
954
+ name: "useFlowEngine",
955
+ from: resolve("./runtime/server-utils/utils/useFlowEngine")
956
+ },
957
+ {
958
+ name: "useEventStore",
959
+ from: resolve("./runtime/server-utils/utils/useEventStore")
960
+ },
961
+ {
962
+ name: "useServerLogger",
963
+ from: resolve("./runtime/server-utils/utils/useServerLogger")
964
+ },
965
+ {
966
+ name: "useLogs",
967
+ from: resolve("./runtime/server-utils/utils/useLogs")
968
+ },
969
+ {
970
+ name: "useEventManager",
971
+ from: resolve("./runtime/server-utils/utils/useEventManager")
972
+ },
973
+ { name: "usePeerManager", from: resolve("./runtime/server-utils/utils/wsPeerManager") }
974
+ ]);
933
975
  const refreshRegistry = async (reason, changedPath) => {
934
976
  const queuesRel = config.dir || "queues";
935
977
  const updatedRegistry = await compileRegistryFromServerWorkers(layerInfos, queuesRel, defaultConfigs);
@@ -0,0 +1 @@
1
+ @import "@vue-flow/core/dist/style.css";@import "@vue-flow/core/dist/theme-default.css";@import "@vue-flow/controls/dist/style.css";@import "@vue-flow/minimap/dist/style.css";
@@ -1,6 +1,2 @@
1
- import '@vue-flow/core/dist/style.css';
2
- import '@vue-flow/core/dist/theme-default.css';
3
- import '@vue-flow/controls/dist/style.css';
4
- import '@vue-flow/minimap/dist/style.css';
5
1
  declare const _default: import("#app").Plugin<Record<string, unknown>> & import("#app").ObjectPlugin<Record<string, unknown>>;
6
2
  export default _default;
@@ -3,10 +3,6 @@ import { VueFlow } from "@vue-flow/core";
3
3
  import { Controls } from "@vue-flow/controls";
4
4
  import { MiniMap } from "@vue-flow/minimap";
5
5
  import { Background } from "@vue-flow/background";
6
- import "@vue-flow/core/dist/style.css";
7
- import "@vue-flow/core/dist/theme-default.css";
8
- import "@vue-flow/controls/dist/style.css";
9
- import "@vue-flow/minimap/dist/style.css";
10
6
  export default defineNuxtPlugin((nuxtApp) => {
11
7
  nuxtApp.vueApp.component("VueFlow", VueFlow);
12
8
  nuxtApp.vueApp.component("Controls", Controls);
@@ -1,8 +1,7 @@
1
1
  import {
2
2
  defineWebSocketHandler,
3
3
  useEventStore,
4
- registerWsPeer,
5
- unregisterWsPeer,
4
+ usePeerManager,
6
5
  useServerLogger
7
6
  } from "#imports";
8
7
  const logger = useServerLogger("api-flows-ws");
@@ -18,6 +17,7 @@ function safeSend(peer, data) {
18
17
  export default defineWebSocketHandler({
19
18
  open(peer) {
20
19
  logger.info("[ws] client connected:", { peerId: peer.id });
20
+ const { registerWsPeer } = usePeerManager();
21
21
  registerWsPeer(peer);
22
22
  peerContexts.set(peer, {
23
23
  subscriptions: /* @__PURE__ */ new Map()
@@ -148,6 +148,7 @@ export default defineWebSocketHandler({
148
148
  if (!isNormalClosure) {
149
149
  logger.info("[ws] client disconnected:", { peerId: peer.id, code: event?.code, reason: event?.reason });
150
150
  }
151
+ const { unregisterWsPeer } = usePeerManager();
151
152
  unregisterWsPeer(peer);
152
153
  const context = peerContexts.get(peer);
153
154
  if (context) {
@@ -166,6 +167,7 @@ export default defineWebSocketHandler({
166
167
  },
167
168
  error(peer, error) {
168
169
  logger.error("[ws] error for peer:", { peerId: peer.id, error });
170
+ const { unregisterWsPeer } = usePeerManager();
169
171
  unregisterWsPeer(peer);
170
172
  const context = peerContexts.get(peer);
171
173
  if (context) {
@@ -1,8 +1,7 @@
1
1
  import {
2
2
  defineWebSocketHandler,
3
3
  useQueue,
4
- registerWsPeer,
5
- unregisterWsPeer,
4
+ usePeerManager,
6
5
  useServerLogger
7
6
  } from "#imports";
8
7
  const peerContexts = /* @__PURE__ */ new WeakMap();
@@ -18,6 +17,7 @@ function safeSend(peer, data) {
18
17
  export default defineWebSocketHandler({
19
18
  open(peer) {
20
19
  logger.info("[ws:queues] client connected:", peer.id);
20
+ const { registerWsPeer } = usePeerManager();
21
21
  registerWsPeer(peer);
22
22
  peerContexts.set(peer, {
23
23
  subscriptions: /* @__PURE__ */ new Map()
@@ -162,6 +162,7 @@ export default defineWebSocketHandler({
162
162
  reason: event?.reason
163
163
  });
164
164
  }
165
+ const { unregisterWsPeer } = usePeerManager();
165
166
  unregisterWsPeer(peer);
166
167
  const context = peerContexts.get(peer);
167
168
  if (context) {
@@ -183,6 +184,7 @@ export default defineWebSocketHandler({
183
184
  peerId: peer.id,
184
185
  error
185
186
  });
187
+ const { unregisterWsPeer } = usePeerManager();
186
188
  unregisterWsPeer(peer);
187
189
  const context = peerContexts.get(peer);
188
190
  if (context) {
@@ -1,5 +1,5 @@
1
1
  import { defineNitroPlugin } from "#imports";
2
- import { getEventStoreFactory } from "../events/eventStoreFactory.js";
2
+ import { getEventStoreFactory } from "../../server-utils/events/eventStoreFactory.js";
3
3
  export default defineNitroPlugin(() => {
4
4
  const factory = getEventStoreFactory();
5
5
  factory.start();
@@ -1,15 +1,18 @@
1
1
  import {
2
2
  defineNitroPlugin,
3
- getActivePeerCount,
4
- getActivePeers,
5
- setShuttingDown,
6
- clearAllPeers,
7
- isServerShuttingDown,
8
- useServerLogger
3
+ useServerLogger,
4
+ usePeerManager
9
5
  } from "#imports";
10
6
  const logger = useServerLogger("plugin-ws-lifecycle");
11
7
  export default defineNitroPlugin((nitroApp) => {
12
8
  logger.info("[ws-lifecycle] WebSocket lifecycle plugin initialized");
9
+ const {
10
+ getActivePeers,
11
+ isServerShuttingDown,
12
+ setShuttingDown,
13
+ clearAllPeers,
14
+ getActivePeerCount
15
+ } = usePeerManager();
13
16
  const originalUnhandledRejection = process.listeners("unhandledRejection");
14
17
  nitroApp.hooks.hook("close", async () => {
15
18
  setShuttingDown(true);
@@ -1,6 +1,6 @@
1
1
  import { defineNitroPlugin, useServerLogger } from "#imports";
2
- import { BullMQProvider } from "../queue/adapters/bullmq.js";
3
- import { setQueueProvider, getQueueProvider } from "../queue/queueFactory.js";
2
+ import { BullMQProvider } from "../../server-utils/queue/adapters/bullmq.js";
3
+ import { setQueueProvider, getQueueProvider } from "../../server-utils/queue/queueFactory.js";
4
4
  const logger = useServerLogger("plugin-queue-management");
5
5
  export default defineNitroPlugin(async (nitroApp) => {
6
6
  try {
@@ -1,5 +1,5 @@
1
1
  import { useServerLogger, defineNitroPlugin, useEventManager, useRuntimeConfig } from "#imports";
2
- import { getStateProvider } from "../state/stateFactory.js";
2
+ import { getStateProvider } from "../../server-utils/state/stateFactory.js";
3
3
  const logger = useServerLogger("plugin-state-cleanup");
4
4
  export default defineNitroPlugin(() => {
5
5
  const rc = useRuntimeConfig();
@@ -1,5 +1,5 @@
1
1
  import { defineNitroPlugin, $useWorkerHandlers, $useQueueRegistry } from "#imports";
2
- import { registerTsWorker, closeAllWorkers } from "../worker/adapter.js";
2
+ import { registerTsWorker, closeAllWorkers } from "../../server-utils/worker/adapter.js";
3
3
  export default defineNitroPlugin(async (nitroApp) => {
4
4
  nitroApp.hooks.hook("close", async () => {
5
5
  await closeAllWorkers();
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'node:events';
2
- import type { EventRecord } from '../../types.js';
2
+ import type { EventRecord } from '../types.js';
3
3
  type Handler = (e: EventRecord) => void;
4
4
  declare global {
5
5
  var __nq_bus_emitter: EventEmitter | undefined;
@@ -1,4 +1,4 @@
1
- import type { EventRecord } from '../../types.js';
1
+ import type { EventRecord } from '../types.js';
2
2
  export interface PublishContext {
3
3
  queue?: string;
4
4
  jobId?: string;
@@ -1,5 +1,5 @@
1
1
  import type { EventStoreAdapter } from '../types.js';
2
- import type { EventRecord } from '../../../types.js';
2
+ import type { EventRecord } from '../../types.js';
3
3
  export interface FlowWiringDeps {
4
4
  adapter: EventStoreAdapter;
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { getEventBus } from '../events/eventBus.js';
2
- import type { EventRecord } from '../../types.js';
2
+ import type { EventRecord } from '../types.js';
3
3
  export interface EventManager {
4
4
  /**
5
5
  * Publish an event directly to the in-proc bus.
@@ -1,5 +1,5 @@
1
1
  import type { EventReadOptions } from '../events/types.js';
2
- import type { EventRecord } from '../../types.js';
2
+ import type { EventRecord } from '../types.js';
3
3
  export declare function useEventStore(): {
4
4
  names: () => import("../events/streamNames.js").StreamNames;
5
5
  read: (stream: string, opts?: EventReadOptions) => Promise<EventRecord[]>;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WebSocket Peer Manager
3
+ *
4
+ * Tracks active WebSocket connections for graceful shutdown during HMR.
5
+ * Auto-imported in Nitro server context.
6
+ */
7
+ /**
8
+ * Register a peer to be tracked for graceful shutdown
9
+ */
10
+ declare function registerWsPeer(peer: any): void;
11
+ /**
12
+ * Unregister a peer (called when connection closes normally)
13
+ */
14
+ declare function unregisterWsPeer(peer: any): void;
15
+ /**
16
+ * Get all currently active WebSocket peers
17
+ */
18
+ declare function getActivePeers(): any[];
19
+ /**
20
+ * Check if server is currently shutting down
21
+ */
22
+ declare function isServerShuttingDown(): boolean;
23
+ /**
24
+ * Set the shutdown state
25
+ */
26
+ declare function setShuttingDown(state: boolean): void;
27
+ /**
28
+ * Clear all tracked peers
29
+ */
30
+ declare function clearAllPeers(): void;
31
+ /**
32
+ * Get the count of active peers
33
+ */
34
+ declare function getActivePeerCount(): number;
35
+ export declare const usePeerManager: () => {
36
+ registerWsPeer: typeof registerWsPeer;
37
+ unregisterWsPeer: typeof unregisterWsPeer;
38
+ getActivePeers: typeof getActivePeers;
39
+ isServerShuttingDown: typeof isServerShuttingDown;
40
+ setShuttingDown: typeof setShuttingDown;
41
+ clearAllPeers: typeof clearAllPeers;
42
+ getActivePeerCount: typeof getActivePeerCount;
43
+ };
44
+ export {};
@@ -0,0 +1,32 @@
1
+ const activePeers = /* @__PURE__ */ new Set();
2
+ let isShuttingDown = false;
3
+ function registerWsPeer(peer) {
4
+ activePeers.add(peer);
5
+ }
6
+ function unregisterWsPeer(peer) {
7
+ activePeers.delete(peer);
8
+ }
9
+ function getActivePeers() {
10
+ return Array.from(activePeers);
11
+ }
12
+ function isServerShuttingDown() {
13
+ return isShuttingDown;
14
+ }
15
+ function setShuttingDown(state) {
16
+ isShuttingDown = state;
17
+ }
18
+ function clearAllPeers() {
19
+ activePeers.clear();
20
+ }
21
+ function getActivePeerCount() {
22
+ return activePeers.size;
23
+ }
24
+ export const usePeerManager = () => ({
25
+ registerWsPeer,
26
+ unregisterWsPeer,
27
+ getActivePeers,
28
+ isServerShuttingDown,
29
+ setShuttingDown,
30
+ clearAllPeers,
31
+ getActivePeerCount
32
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nvent",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Nuxt queue service based on Bullmq",
5
5
  "repository": "DevJoghurt/nuxt-queue",
6
6
  "license": "MIT",
@@ -1,34 +0,0 @@
1
- /**
2
- * WebSocket Peer Manager
3
- *
4
- * Tracks active WebSocket connections for graceful shutdown during HMR.
5
- * Auto-imported in Nitro server context.
6
- */
7
- /**
8
- * Register a peer to be tracked for graceful shutdown
9
- */
10
- export declare function registerWsPeer(peer: any): void;
11
- /**
12
- * Unregister a peer (called when connection closes normally)
13
- */
14
- export declare function unregisterWsPeer(peer: any): void;
15
- /**
16
- * Get all currently active WebSocket peers
17
- */
18
- export declare function getActivePeers(): any[];
19
- /**
20
- * Check if server is currently shutting down
21
- */
22
- export declare function isServerShuttingDown(): boolean;
23
- /**
24
- * Set the shutdown state
25
- */
26
- export declare function setShuttingDown(state: boolean): void;
27
- /**
28
- * Clear all tracked peers
29
- */
30
- export declare function clearAllPeers(): void;
31
- /**
32
- * Get the count of active peers
33
- */
34
- export declare function getActivePeerCount(): number;
@@ -1,23 +0,0 @@
1
- const activePeers = /* @__PURE__ */ new Set();
2
- let isShuttingDown = false;
3
- export function registerWsPeer(peer) {
4
- activePeers.add(peer);
5
- }
6
- export function unregisterWsPeer(peer) {
7
- activePeers.delete(peer);
8
- }
9
- export function getActivePeers() {
10
- return Array.from(activePeers);
11
- }
12
- export function isServerShuttingDown() {
13
- return isShuttingDown;
14
- }
15
- export function setShuttingDown(state) {
16
- isShuttingDown = state;
17
- }
18
- export function clearAllPeers() {
19
- activePeers.clear();
20
- }
21
- export function getActivePeerCount() {
22
- return activePeers.size;
23
- }