@pattern-stack/codegen 0.17.1 → 0.18.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 (111) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +106 -2
  3. package/dist/{chunk-SFQRETXJ.js → chunk-2VGVSL2D.js} +6 -6
  4. package/dist/{chunk-VNBC3VXM.js → chunk-3A34R6CI.js} +7 -7
  5. package/dist/{chunk-FVNAU7VO.js → chunk-7MMS36AN.js} +6 -6
  6. package/dist/{chunk-FWRL7BZ5.js → chunk-C5E7H553.js} +25 -15
  7. package/dist/chunk-C5E7H553.js.map +1 -0
  8. package/dist/{chunk-IOQMMH6C.js → chunk-CFFTPWHM.js} +79 -4
  9. package/dist/chunk-CFFTPWHM.js.map +1 -0
  10. package/dist/{chunk-HOIRY5XP.js → chunk-EWYI5GGJ.js} +10 -10
  11. package/dist/{chunk-BHZP6LOV.js → chunk-IN3EWFB4.js} +4 -4
  12. package/dist/{chunk-CZQUOIDY.js → chunk-J7JMVS2B.js} +4 -4
  13. package/dist/{chunk-KSTZIULO.js → chunk-K2I6XIK5.js} +4 -4
  14. package/dist/{chunk-T6SCOJF4.js → chunk-NXHL5YII.js} +4 -4
  15. package/dist/{chunk-JA7GJDNI.js → chunk-PKDS6QIJ.js} +4 -4
  16. package/dist/{chunk-MYQIQ27N.js → chunk-Q6LRJ4VI.js} +51 -2
  17. package/dist/chunk-Q6LRJ4VI.js.map +1 -0
  18. package/dist/{chunk-EJBK7I4F.js → chunk-R4BPUUB5.js} +3 -3
  19. package/dist/{chunk-4PFF3ED4.js → chunk-RKNW56RU.js} +5 -5
  20. package/dist/{chunk-SGSWVNNB.js → chunk-TBGTMALE.js} +4 -4
  21. package/dist/{chunk-GM3RMJIJ.js → chunk-VHAR2BGH.js} +4 -4
  22. package/dist/{chunk-DUMI2J5M.js → chunk-VQOAATIG.js} +4 -4
  23. package/dist/{chunk-HPS554L4.js → chunk-X6BP6LI5.js} +6 -6
  24. package/dist/{chunk-PSDVGPQR.js → chunk-YZLBU6O2.js} +9 -9
  25. package/dist/runtime/shared/openapi/index.js +3 -3
  26. package/dist/runtime/subsystems/analytics/analytics.module.js +2 -2
  27. package/dist/runtime/subsystems/analytics/index.js +4 -4
  28. package/dist/runtime/subsystems/auth/auth.module.js +3 -3
  29. package/dist/runtime/subsystems/auth/index.js +10 -10
  30. package/dist/runtime/subsystems/bridge/bridge-delivery-handler.js +2 -2
  31. package/dist/runtime/subsystems/bridge/bridge-delivery.drizzle-backend.js +2 -2
  32. package/dist/runtime/subsystems/bridge/bridge-outbox-drain-hook.js +6 -6
  33. package/dist/runtime/subsystems/bridge/bridge.module.js +17 -17
  34. package/dist/runtime/subsystems/bridge/index.js +24 -24
  35. package/dist/runtime/subsystems/cache/cache.module.js +1 -1
  36. package/dist/runtime/subsystems/cache/index.js +3 -3
  37. package/dist/runtime/subsystems/events/event-bus.drizzle-backend.js +3 -3
  38. package/dist/runtime/subsystems/events/events.module.js +6 -6
  39. package/dist/runtime/subsystems/events/generated/bus.js +2 -2
  40. package/dist/runtime/subsystems/events/generated/index.js +2 -2
  41. package/dist/runtime/subsystems/events/index.js +10 -10
  42. package/dist/runtime/subsystems/index.js +64 -64
  43. package/dist/runtime/subsystems/integration/index.js +10 -10
  44. package/dist/runtime/subsystems/integration/integration.module.js +2 -2
  45. package/dist/runtime/subsystems/jobs/index.js +21 -21
  46. package/dist/runtime/subsystems/jobs/job-orchestrator.bullmq-backend.js +5 -5
  47. package/dist/runtime/subsystems/jobs/job-orchestrator.drizzle-backend.js +3 -3
  48. package/dist/runtime/subsystems/jobs/job-orchestrator.memory-backend.js +2 -2
  49. package/dist/runtime/subsystems/jobs/job-run-service.drizzle-backend.js +3 -3
  50. package/dist/runtime/subsystems/jobs/job-run-service.memory-backend.js +2 -2
  51. package/dist/runtime/subsystems/jobs/job-worker.d.ts +8 -0
  52. package/dist/runtime/subsystems/jobs/job-worker.js +3 -3
  53. package/dist/runtime/subsystems/jobs/job-worker.module.js +11 -11
  54. package/dist/runtime/subsystems/jobs/jobs-domain.module.js +9 -9
  55. package/dist/runtime/subsystems/jobs/pg-notify.d.ts +25 -1
  56. package/dist/runtime/subsystems/jobs/pg-notify.js +1 -1
  57. package/dist/src/cli/index.js +1408 -245
  58. package/dist/src/cli/index.js.map +1 -1
  59. package/dist/src/index.d.ts +18 -0
  60. package/dist/src/index.js +5 -5
  61. package/package.json +1 -1
  62. package/runtime/subsystems/jobs/job-worker.ts +29 -11
  63. package/runtime/subsystems/jobs/pg-notify.ts +63 -3
  64. package/src/config/locations.mjs +0 -6
  65. package/src/config/paths.mjs +0 -13
  66. package/templates/entity/new/prompt.js +12 -88
  67. package/dist/chunk-FWRL7BZ5.js.map +0 -1
  68. package/dist/chunk-IOQMMH6C.js.map +0 -1
  69. package/dist/chunk-MYQIQ27N.js.map +0 -1
  70. package/templates/entity/new/frontend/_inject-entities-entry.ejs.t +0 -7
  71. package/templates/entity/new/frontend/_inject-entities-import.ejs.t +0 -7
  72. package/templates/entity/new/frontend/collections/_ensure-anchor-collections.ejs.t +0 -10
  73. package/templates/entity/new/frontend/collections/_inject-index.ejs.t +0 -9
  74. package/templates/entity/new/frontend/collections/_inject-schema-import.ejs.t +0 -9
  75. package/templates/entity/new/frontend/collections/collection.ejs.t +0 -86
  76. package/templates/entity/new/frontend/collections/collections-base.ejs.t +0 -35
  77. package/templates/entity/new/frontend/entity/collection.ejs.t +0 -173
  78. package/templates/entity/new/frontend/entity/combined.ejs.t +0 -505
  79. package/templates/entity/new/frontend/entity/fields.ejs.t +0 -105
  80. package/templates/entity/new/frontend/entity/hooks.ejs.t +0 -74
  81. package/templates/entity/new/frontend/entity/index.ejs.t +0 -22
  82. package/templates/entity/new/frontend/entity/mutation-hooks.ejs.t +0 -85
  83. package/templates/entity/new/frontend/entity/mutations.ejs.t +0 -39
  84. package/templates/entity/new/frontend/entity/types.ejs.t +0 -60
  85. package/templates/entity/new/frontend/generated/_inject-index-export.ejs.t +0 -7
  86. package/templates/entity/new/frontend/generated/_inject-index-import.ejs.t +0 -7
  87. package/templates/entity/new/frontend/generated/_inject-index-registry.ejs.t +0 -7
  88. package/templates/entity/new/frontend/store/_inject-collection-import.ejs.t +0 -9
  89. package/templates/entity/new/frontend/store/_inject-collections.ejs.t +0 -9
  90. package/templates/entity/new/frontend/store/_inject-entity.ejs.t +0 -9
  91. package/templates/entity/new/frontend/store/_inject-import.ejs.t +0 -9
  92. package/templates/entity/new/frontend/store/_inject-lookups.ejs.t +0 -9
  93. package/templates/entity/new/frontend/store/_inject-resolve.ejs.t +0 -10
  94. package/templates/entity/new/frontend/store/hooks.ejs.t +0 -73
  95. package/templates/entity/new/frontend/unified-entity.ejs.t +0 -29
  96. /package/dist/{chunk-SFQRETXJ.js.map → chunk-2VGVSL2D.js.map} +0 -0
  97. /package/dist/{chunk-VNBC3VXM.js.map → chunk-3A34R6CI.js.map} +0 -0
  98. /package/dist/{chunk-FVNAU7VO.js.map → chunk-7MMS36AN.js.map} +0 -0
  99. /package/dist/{chunk-HOIRY5XP.js.map → chunk-EWYI5GGJ.js.map} +0 -0
  100. /package/dist/{chunk-BHZP6LOV.js.map → chunk-IN3EWFB4.js.map} +0 -0
  101. /package/dist/{chunk-CZQUOIDY.js.map → chunk-J7JMVS2B.js.map} +0 -0
  102. /package/dist/{chunk-KSTZIULO.js.map → chunk-K2I6XIK5.js.map} +0 -0
  103. /package/dist/{chunk-T6SCOJF4.js.map → chunk-NXHL5YII.js.map} +0 -0
  104. /package/dist/{chunk-JA7GJDNI.js.map → chunk-PKDS6QIJ.js.map} +0 -0
  105. /package/dist/{chunk-EJBK7I4F.js.map → chunk-R4BPUUB5.js.map} +0 -0
  106. /package/dist/{chunk-4PFF3ED4.js.map → chunk-RKNW56RU.js.map} +0 -0
  107. /package/dist/{chunk-SGSWVNNB.js.map → chunk-TBGTMALE.js.map} +0 -0
  108. /package/dist/{chunk-GM3RMJIJ.js.map → chunk-VHAR2BGH.js.map} +0 -0
  109. /package/dist/{chunk-DUMI2J5M.js.map → chunk-VQOAATIG.js.map} +0 -0
  110. /package/dist/{chunk-HPS554L4.js.map → chunk-X6BP6LI5.js.map} +0 -0
  111. /package/dist/{chunk-PSDVGPQR.js.map → chunk-YZLBU6O2.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DrizzleJobOrchestrator
3
- } from "../../../chunk-FVNAU7VO.js";
3
+ } from "../../../chunk-7MMS36AN.js";
4
4
  import "../../../chunk-T4BIIU5E.js";
5
5
  import {
6
6
  BULLMQ_CONNECTION,
@@ -8,15 +8,15 @@ import {
8
8
  resolvePoolQueueName
9
9
  } from "../../../chunk-I6MVCB5A.js";
10
10
  import "../../../chunk-RHVN6NA7.js";
11
- import {
12
- JOBS_MULTI_TENANT
13
- } from "../../../chunk-ZPL74UQN.js";
14
11
  import "../../../chunk-7P5ODGLA.js";
15
12
  import {
16
13
  jobRuns,
17
14
  jobs
18
15
  } from "../../../chunk-OKXZ63IA.js";
19
- import "../../../chunk-MYQIQ27N.js";
16
+ import {
17
+ JOBS_MULTI_TENANT
18
+ } from "../../../chunk-ZPL74UQN.js";
19
+ import "../../../chunk-Q6LRJ4VI.js";
20
20
  import "../../../chunk-GYGNEQSC.js";
21
21
  import {
22
22
  DRIZZLE
@@ -2,12 +2,12 @@ import {
2
2
  DrizzleJobOrchestrator,
3
3
  TERMINAL_STATUSES,
4
4
  evaluateKeyTemplate
5
- } from "../../../chunk-FVNAU7VO.js";
5
+ } from "../../../chunk-7MMS36AN.js";
6
6
  import "../../../chunk-T4BIIU5E.js";
7
- import "../../../chunk-ZPL74UQN.js";
8
7
  import "../../../chunk-7P5ODGLA.js";
9
8
  import "../../../chunk-OKXZ63IA.js";
10
- import "../../../chunk-MYQIQ27N.js";
9
+ import "../../../chunk-ZPL74UQN.js";
10
+ import "../../../chunk-Q6LRJ4VI.js";
11
11
  import "../../../chunk-GYGNEQSC.js";
12
12
  import "../../../chunk-U64T4YZE.js";
13
13
  import "../../../chunk-2E224ZSN.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  MemoryJobOrchestrator
3
- } from "../../../chunk-DUMI2J5M.js";
3
+ } from "../../../chunk-VQOAATIG.js";
4
4
  import "../../../chunk-PNZSGAB2.js";
5
5
  import "../../../chunk-SNQ3TOWP.js";
6
6
  import "../../../chunk-T4BIIU5E.js";
7
- import "../../../chunk-ZPL74UQN.js";
8
7
  import "../../../chunk-7P5ODGLA.js";
8
+ import "../../../chunk-ZPL74UQN.js";
9
9
  import "../../../chunk-GYGNEQSC.js";
10
10
  import "../../../chunk-2E224ZSN.js";
11
11
  export {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  DrizzleJobRunService
3
- } from "../../../chunk-VNBC3VXM.js";
4
- import "../../../chunk-T4BIIU5E.js";
3
+ } from "../../../chunk-3A34R6CI.js";
5
4
  import "../../../chunk-L3LZWWSX.js";
6
- import "../../../chunk-ZPL74UQN.js";
5
+ import "../../../chunk-T4BIIU5E.js";
7
6
  import "../../../chunk-OKXZ63IA.js";
7
+ import "../../../chunk-ZPL74UQN.js";
8
8
  import "../../../chunk-GYGNEQSC.js";
9
9
  import "../../../chunk-U64T4YZE.js";
10
10
  import "../../../chunk-2E224ZSN.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MemoryJobRunService
3
- } from "../../../chunk-BHZP6LOV.js";
3
+ } from "../../../chunk-IN3EWFB4.js";
4
4
  import "../../../chunk-SNQ3TOWP.js";
5
- import "../../../chunk-T4BIIU5E.js";
6
5
  import "../../../chunk-L3LZWWSX.js";
6
+ import "../../../chunk-T4BIIU5E.js";
7
7
  import "../../../chunk-ZPL74UQN.js";
8
8
  import "../../../chunk-GYGNEQSC.js";
9
9
  import "../../../chunk-2E224ZSN.js";
@@ -186,6 +186,14 @@ declare class JobWorker implements OnModuleInit, OnModuleDestroy {
186
186
  private drainOnWake;
187
187
  onModuleDestroy(): Promise<void>;
188
188
  private drainInFlight;
189
+ /**
190
+ * LISTEN-NOTIFY-2 — stop + drop the wake listener. Idempotent: a second call
191
+ * (SIGTERM + Nest destroy) finds `notifyListener` already null and no-ops.
192
+ * `PgNotifyListener.stop()` is itself race-safe against an in-flight
193
+ * `connect()`, so even a destroy that arrives microseconds after `start()`
194
+ * releases the listener socket rather than leaking it.
195
+ */
196
+ private stopNotifyListener;
189
197
  pollAndProcess(): Promise<void>;
190
198
  /**
191
199
  * Claim the next runnable row from the pool. Transaction ensures the
@@ -6,11 +6,11 @@ import {
6
6
  buildStaleSweepQuery,
7
7
  classifyError,
8
8
  computeBackoff
9
- } from "../../../chunk-FWRL7BZ5.js";
10
- import "../../../chunk-ZPL74UQN.js";
9
+ } from "../../../chunk-C5E7H553.js";
11
10
  import "../../../chunk-7P5ODGLA.js";
12
11
  import "../../../chunk-OKXZ63IA.js";
13
- import "../../../chunk-MYQIQ27N.js";
12
+ import "../../../chunk-ZPL74UQN.js";
13
+ import "../../../chunk-Q6LRJ4VI.js";
14
14
  import "../../../chunk-GYGNEQSC.js";
15
15
  import "../../../chunk-U64T4YZE.js";
16
16
  import "../../../chunk-2E224ZSN.js";
@@ -2,24 +2,24 @@ import {
2
2
  JOB_WORKER_MODULE_OPTIONS,
3
3
  JobWorkerModule,
4
4
  JobWorkerOrchestrator
5
- } from "../../../chunk-HPS554L4.js";
6
- import "../../../chunk-FWRL7BZ5.js";
7
- import "../../../chunk-HOIRY5XP.js";
8
- import "../../../chunk-DV4RV2DC.js";
9
- import "../../../chunk-FVNAU7VO.js";
10
- import "../../../chunk-DUMI2J5M.js";
5
+ } from "../../../chunk-X6BP6LI5.js";
6
+ import "../../../chunk-C5E7H553.js";
7
+ import "../../../chunk-EWYI5GGJ.js";
8
+ import "../../../chunk-VQOAATIG.js";
11
9
  import "../../../chunk-PNZSGAB2.js";
12
- import "../../../chunk-VNBC3VXM.js";
13
- import "../../../chunk-BHZP6LOV.js";
10
+ import "../../../chunk-3A34R6CI.js";
11
+ import "../../../chunk-IN3EWFB4.js";
14
12
  import "../../../chunk-SNQ3TOWP.js";
15
- import "../../../chunk-T4BIIU5E.js";
16
13
  import "../../../chunk-L3LZWWSX.js";
14
+ import "../../../chunk-DV4RV2DC.js";
15
+ import "../../../chunk-7MMS36AN.js";
16
+ import "../../../chunk-T4BIIU5E.js";
17
17
  import "../../../chunk-I6MVCB5A.js";
18
18
  import "../../../chunk-RHVN6NA7.js";
19
- import "../../../chunk-ZPL74UQN.js";
20
19
  import "../../../chunk-7P5ODGLA.js";
21
20
  import "../../../chunk-OKXZ63IA.js";
22
- import "../../../chunk-MYQIQ27N.js";
21
+ import "../../../chunk-ZPL74UQN.js";
22
+ import "../../../chunk-Q6LRJ4VI.js";
23
23
  import "../../../chunk-GYGNEQSC.js";
24
24
  import "../../../chunk-U64T4YZE.js";
25
25
  import "../../../chunk-2E224ZSN.js";
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  JobsDomainModule
3
- } from "../../../chunk-HOIRY5XP.js";
4
- import "../../../chunk-DV4RV2DC.js";
5
- import "../../../chunk-FVNAU7VO.js";
6
- import "../../../chunk-DUMI2J5M.js";
3
+ } from "../../../chunk-EWYI5GGJ.js";
4
+ import "../../../chunk-VQOAATIG.js";
7
5
  import "../../../chunk-PNZSGAB2.js";
8
- import "../../../chunk-VNBC3VXM.js";
9
- import "../../../chunk-BHZP6LOV.js";
6
+ import "../../../chunk-3A34R6CI.js";
7
+ import "../../../chunk-IN3EWFB4.js";
10
8
  import "../../../chunk-SNQ3TOWP.js";
11
- import "../../../chunk-T4BIIU5E.js";
12
9
  import "../../../chunk-L3LZWWSX.js";
10
+ import "../../../chunk-DV4RV2DC.js";
11
+ import "../../../chunk-7MMS36AN.js";
12
+ import "../../../chunk-T4BIIU5E.js";
13
13
  import "../../../chunk-I6MVCB5A.js";
14
14
  import "../../../chunk-RHVN6NA7.js";
15
- import "../../../chunk-ZPL74UQN.js";
16
15
  import "../../../chunk-7P5ODGLA.js";
17
16
  import "../../../chunk-OKXZ63IA.js";
18
- import "../../../chunk-MYQIQ27N.js";
17
+ import "../../../chunk-ZPL74UQN.js";
18
+ import "../../../chunk-Q6LRJ4VI.js";
19
19
  import "../../../chunk-GYGNEQSC.js";
20
20
  import "../../../chunk-U64T4YZE.js";
21
21
  import "../../../chunk-2E224ZSN.js";
@@ -68,18 +68,42 @@ declare class PgNotifyListener {
68
68
  private readonly backoffMaxMs;
69
69
  /** WARN-once gate so a flapping listener doesn't spam the log. */
70
70
  private warnedDown;
71
+ /**
72
+ * LISTEN-NOTIFY-2 — the in-flight `connect()` promise, set while a checkout is
73
+ * mid-`await`. `stop()` awaits it so a `stop()` that races a still-resolving
74
+ * `connect()` can't return before the connect either assigns `this.client`
75
+ * (then released by `releaseClient`) or self-releases the checked-out client.
76
+ * Without this, a `stop()` arriving during `pool.connect()`'s await saw
77
+ * `this.client === null` (nothing to release), then `connect()` resumed,
78
+ * assigned the client, and issued `LISTEN` — leaking an ESTABLISHED socket
79
+ * holding `LISTEN <channel>` forever past `app.close()`.
80
+ */
81
+ private connecting;
71
82
  constructor(opts: PgNotifyListenerOptions);
72
83
  /** Begin listening. Idempotent-ish: a second call while connected is a no-op. */
73
84
  start(): Promise<void>;
74
- /** Stop listening + release the connection. Safe to call repeatedly. */
85
+ /**
86
+ * Stop listening + release the connection. Safe to call repeatedly and
87
+ * race-safe against an in-flight `connect()` (LISTEN-NOTIFY-2): it sets
88
+ * `stopped` first (so a resuming `connect()` self-releases its checkout),
89
+ * then awaits any in-flight connect, then releases whatever client landed.
90
+ */
75
91
  stop(): Promise<void>;
76
92
  private connect;
93
+ private doConnect;
77
94
  /** Connection dropped after being established → reconnect. */
78
95
  private handleDrop;
79
96
  /** Initial / reconnect `connect()` threw. */
80
97
  private handleConnectFailure;
81
98
  private scheduleReconnect;
82
99
  private releaseClient;
100
+ /**
101
+ * Tear down a raw checked-out client (LISTEN-NOTIFY-2). Used both by the
102
+ * normal `releaseClient()` path and by the connect-vs-stop race bail-outs,
103
+ * where the client was checked out but never assigned to `this.client`.
104
+ * Destroys (`release(true)`) so a half-listening socket is never reused.
105
+ */
106
+ private releaseRawClient;
83
107
  }
84
108
 
85
109
  export { EVENTS_WAKE_CHANNEL, JOBS_WAKE_CHANNEL, PgNotifyListener, type PgNotifyListenerOptions, pgNotify };
@@ -3,7 +3,7 @@ import {
3
3
  JOBS_WAKE_CHANNEL,
4
4
  PgNotifyListener,
5
5
  pgNotify
6
- } from "../../../chunk-MYQIQ27N.js";
6
+ } from "../../../chunk-Q6LRJ4VI.js";
7
7
  import "../../../chunk-2E224ZSN.js";
8
8
  export {
9
9
  EVENTS_WAKE_CHANNEL,