@powerhousedao/codegen 6.2.2-dev.37 → 6.2.2-dev.38
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/dist/index.mjs +91 -88
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -201,7 +201,7 @@ async function generateAll(project) {
|
|
|
201
201
|
//#endregion
|
|
202
202
|
//#region src/codegen/get-version.ts
|
|
203
203
|
function getCodegenVersion() {
|
|
204
|
-
return "6.2.2-dev.
|
|
204
|
+
return "6.2.2-dev.38";
|
|
205
205
|
}
|
|
206
206
|
//#endregion
|
|
207
207
|
//#region src/codegen/kysely.ts
|
|
@@ -254,7 +254,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
254
254
|
"manifest": {
|
|
255
255
|
"name": "@powerhousedao/connect",
|
|
256
256
|
"productName": "Powerhouse-Connect",
|
|
257
|
-
"version": "6.2.2-dev.
|
|
257
|
+
"version": "6.2.2-dev.38",
|
|
258
258
|
"description": "Powerhouse Connect",
|
|
259
259
|
"main": "dist/index.html",
|
|
260
260
|
"type": "module",
|
|
@@ -380,7 +380,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
380
380
|
"manifest": {
|
|
381
381
|
"name": "@powerhousedao/switchboard",
|
|
382
382
|
"type": "module",
|
|
383
|
-
"version": "6.2.2-dev.
|
|
383
|
+
"version": "6.2.2-dev.38",
|
|
384
384
|
"main": "dist/index.mjs",
|
|
385
385
|
"exports": {
|
|
386
386
|
".": {
|
|
@@ -480,7 +480,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
480
480
|
"dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
|
|
481
481
|
"manifest": {
|
|
482
482
|
"name": "@powerhousedao/ph-cli",
|
|
483
|
-
"version": "6.2.2-dev.
|
|
483
|
+
"version": "6.2.2-dev.38",
|
|
484
484
|
"description": "",
|
|
485
485
|
"license": "AGPL-3.0-only",
|
|
486
486
|
"type": "module",
|
|
@@ -548,7 +548,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
548
548
|
"dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
|
|
549
549
|
"manifest": {
|
|
550
550
|
"name": "ph-cmd",
|
|
551
|
-
"version": "6.2.2-dev.
|
|
551
|
+
"version": "6.2.2-dev.38",
|
|
552
552
|
"description": "Powerhouse CLI — create Vetra projects, generate document models and editors, run local dev environments, and publish packages.",
|
|
553
553
|
"license": "AGPL-3.0-only",
|
|
554
554
|
"type": "module",
|
|
@@ -606,7 +606,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
606
606
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
|
|
607
607
|
"manifest": {
|
|
608
608
|
"name": "@powerhousedao/analytics-engine-browser",
|
|
609
|
-
"version": "6.2.2-dev.
|
|
609
|
+
"version": "6.2.2-dev.38",
|
|
610
610
|
"license": "AGPL-3.0-only",
|
|
611
611
|
"repository": {
|
|
612
612
|
"type": "git",
|
|
@@ -666,7 +666,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
666
666
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
|
|
667
667
|
"manifest": {
|
|
668
668
|
"name": "@powerhousedao/analytics-engine-core",
|
|
669
|
-
"version": "6.2.2-dev.
|
|
669
|
+
"version": "6.2.2-dev.38",
|
|
670
670
|
"license": "AGPL-3.0-only",
|
|
671
671
|
"repository": {
|
|
672
672
|
"type": "git",
|
|
@@ -713,7 +713,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
713
713
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
|
|
714
714
|
"manifest": {
|
|
715
715
|
"name": "@powerhousedao/analytics-engine-graphql",
|
|
716
|
-
"version": "6.2.2-dev.
|
|
716
|
+
"version": "6.2.2-dev.38",
|
|
717
717
|
"license": "AGPL-3.0-only",
|
|
718
718
|
"repository": {
|
|
719
719
|
"type": "git",
|
|
@@ -747,7 +747,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
747
747
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
|
|
748
748
|
"manifest": {
|
|
749
749
|
"name": "@powerhousedao/analytics-engine-knex",
|
|
750
|
-
"version": "6.2.2-dev.
|
|
750
|
+
"version": "6.2.2-dev.38",
|
|
751
751
|
"license": "AGPL-3.0-only",
|
|
752
752
|
"repository": {
|
|
753
753
|
"type": "git",
|
|
@@ -785,7 +785,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
785
785
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
|
|
786
786
|
"manifest": {
|
|
787
787
|
"name": "@powerhousedao/analytics-engine-pg",
|
|
788
|
-
"version": "6.2.2-dev.
|
|
788
|
+
"version": "6.2.2-dev.38",
|
|
789
789
|
"license": "AGPL-3.0-only",
|
|
790
790
|
"repository": {
|
|
791
791
|
"type": "git",
|
|
@@ -824,7 +824,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
824
824
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
|
|
825
825
|
"manifest": {
|
|
826
826
|
"name": "@powerhousedao/builder-tools",
|
|
827
|
-
"version": "6.2.2-dev.
|
|
827
|
+
"version": "6.2.2-dev.38",
|
|
828
828
|
"type": "module",
|
|
829
829
|
"license": "AGPL-3.0-only",
|
|
830
830
|
"publishConfig": { "access": "public" },
|
|
@@ -899,7 +899,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
899
899
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
|
|
900
900
|
"manifest": {
|
|
901
901
|
"name": "@powerhousedao/codegen",
|
|
902
|
-
"version": "6.2.2-dev.
|
|
902
|
+
"version": "6.2.2-dev.38",
|
|
903
903
|
"license": "AGPL-3.0-only",
|
|
904
904
|
"private": false,
|
|
905
905
|
"type": "module",
|
|
@@ -989,7 +989,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
989
989
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
|
|
990
990
|
"manifest": {
|
|
991
991
|
"name": "@powerhousedao/common",
|
|
992
|
-
"version": "6.2.2-dev.
|
|
992
|
+
"version": "6.2.2-dev.38",
|
|
993
993
|
"license": "AGPL-3.0-only",
|
|
994
994
|
"type": "module",
|
|
995
995
|
"files": ["/dist"],
|
|
@@ -1056,7 +1056,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1056
1056
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
|
|
1057
1057
|
"manifest": {
|
|
1058
1058
|
"name": "@powerhousedao/config",
|
|
1059
|
-
"version": "6.2.2-dev.
|
|
1059
|
+
"version": "6.2.2-dev.38",
|
|
1060
1060
|
"description": "",
|
|
1061
1061
|
"license": "AGPL-3.0-only",
|
|
1062
1062
|
"private": false,
|
|
@@ -1094,7 +1094,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1094
1094
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
|
|
1095
1095
|
"manifest": {
|
|
1096
1096
|
"name": "@powerhousedao/design-system",
|
|
1097
|
-
"version": "6.2.2-dev.
|
|
1097
|
+
"version": "6.2.2-dev.38",
|
|
1098
1098
|
"description": "Powerhouse document-engineering design system — GraphQL scalar UI components for building consistent Powerhouse editors.",
|
|
1099
1099
|
"files": ["dist", "theme.css"],
|
|
1100
1100
|
"type": "module",
|
|
@@ -1264,7 +1264,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1264
1264
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
|
|
1265
1265
|
"manifest": {
|
|
1266
1266
|
"name": "document-model",
|
|
1267
|
-
"version": "6.2.2-dev.
|
|
1267
|
+
"version": "6.2.2-dev.38",
|
|
1268
1268
|
"license": "AGPL-3.0-only",
|
|
1269
1269
|
"private": false,
|
|
1270
1270
|
"files": ["dist"],
|
|
@@ -1339,7 +1339,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1339
1339
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
|
|
1340
1340
|
"manifest": {
|
|
1341
1341
|
"name": "@powerhousedao/opentelemetry-instrumentation-reactor",
|
|
1342
|
-
"version": "6.2.2-dev.
|
|
1342
|
+
"version": "6.2.2-dev.38",
|
|
1343
1343
|
"description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
|
|
1344
1344
|
"type": "module",
|
|
1345
1345
|
"sideEffects": false,
|
|
@@ -1377,7 +1377,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1377
1377
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
|
|
1378
1378
|
"manifest": {
|
|
1379
1379
|
"name": "@powerhousedao/pglite-fs",
|
|
1380
|
-
"version": "6.2.2-dev.
|
|
1380
|
+
"version": "6.2.2-dev.38",
|
|
1381
1381
|
"license": "AGPL-3.0-only",
|
|
1382
1382
|
"type": "module",
|
|
1383
1383
|
"repository": {
|
|
@@ -1412,7 +1412,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1412
1412
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
|
|
1413
1413
|
"manifest": {
|
|
1414
1414
|
"name": "@powerhousedao/powerhouse-vetra-packages",
|
|
1415
|
-
"version": "6.2.2-dev.
|
|
1415
|
+
"version": "6.2.2-dev.38",
|
|
1416
1416
|
"description": "",
|
|
1417
1417
|
"keywords": [],
|
|
1418
1418
|
"author": "",
|
|
@@ -1535,7 +1535,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1535
1535
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
|
|
1536
1536
|
"manifest": {
|
|
1537
1537
|
"name": "@powerhousedao/reactor",
|
|
1538
|
-
"version": "6.2.2-dev.
|
|
1538
|
+
"version": "6.2.2-dev.38",
|
|
1539
1539
|
"description": "Core Powerhouse reactor — stores documents, resolves conflicts, and reprocesses operation histories. Supports local, cloud, and decentralized storage backends.",
|
|
1540
1540
|
"repository": {
|
|
1541
1541
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -1562,6 +1562,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1562
1562
|
"claude": "pnpm build && pnpm test && pnpm exec prettier --write \"**/*.ts\" && pnpm lint",
|
|
1563
1563
|
"migrate": "tsx src/storage/migrations/run-migrations.ts",
|
|
1564
1564
|
"migrate:status": "tsx src/storage/migrations/run-migrations.ts status",
|
|
1565
|
+
"preflight:auth": "tsx src/admin/run-stream-order-check.ts",
|
|
1565
1566
|
"docker:up": "docker compose up -d",
|
|
1566
1567
|
"docker:down": "docker compose down"
|
|
1567
1568
|
},
|
|
@@ -1607,7 +1608,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1607
1608
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
|
|
1608
1609
|
"manifest": {
|
|
1609
1610
|
"name": "@powerhousedao/reactor-api",
|
|
1610
|
-
"version": "6.2.2-dev.
|
|
1611
|
+
"version": "6.2.2-dev.38",
|
|
1611
1612
|
"description": "GraphQL API layer for the Powerhouse reactor — auto-generated subgraphs per document model plus the core reactor subgraph for drive and document management.",
|
|
1612
1613
|
"type": "module",
|
|
1613
1614
|
"repository": {
|
|
@@ -1754,7 +1755,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1754
1755
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
|
|
1755
1756
|
"manifest": {
|
|
1756
1757
|
"name": "@powerhousedao/reactor-attachments",
|
|
1757
|
-
"version": "6.2.2-dev.
|
|
1758
|
+
"version": "6.2.2-dev.38",
|
|
1758
1759
|
"license": "AGPL-3.0-only",
|
|
1759
1760
|
"type": "module",
|
|
1760
1761
|
"repository": {
|
|
@@ -1821,7 +1822,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1821
1822
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
|
|
1822
1823
|
"manifest": {
|
|
1823
1824
|
"name": "@powerhousedao/reactor-browser",
|
|
1824
|
-
"version": "6.2.2-dev.
|
|
1825
|
+
"version": "6.2.2-dev.38",
|
|
1825
1826
|
"license": "AGPL-3.0-only",
|
|
1826
1827
|
"type": "module",
|
|
1827
1828
|
"repository": {
|
|
@@ -1961,7 +1962,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
1961
1962
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
|
|
1962
1963
|
"manifest": {
|
|
1963
1964
|
"name": "@powerhousedao/reactor-drive",
|
|
1964
|
-
"version": "6.2.2-dev.
|
|
1965
|
+
"version": "6.2.2-dev.38",
|
|
1965
1966
|
"license": "AGPL-3.0-only",
|
|
1966
1967
|
"type": "module",
|
|
1967
1968
|
"repository": {
|
|
@@ -2016,7 +2017,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
2016
2017
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
|
|
2017
2018
|
"manifest": {
|
|
2018
2019
|
"name": "@powerhousedao/reactor-hypercore",
|
|
2019
|
-
"version": "6.2.2-dev.
|
|
2020
|
+
"version": "6.2.2-dev.38",
|
|
2020
2021
|
"description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
|
|
2021
2022
|
"repository": {
|
|
2022
2023
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -2059,7 +2060,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
2059
2060
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
|
|
2060
2061
|
"manifest": {
|
|
2061
2062
|
"name": "@powerhousedao/reactor-mcp",
|
|
2062
|
-
"version": "6.2.2-dev.
|
|
2063
|
+
"version": "6.2.2-dev.38",
|
|
2063
2064
|
"description": "MCP server for the Powerhouse reactor — exposes document model operations and drive management to AI coding assistants via the Model Context Protocol.",
|
|
2064
2065
|
"type": "module",
|
|
2065
2066
|
"repository": {
|
|
@@ -2126,7 +2127,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
2126
2127
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
|
|
2127
2128
|
"manifest": {
|
|
2128
2129
|
"name": "@powerhousedao/registry",
|
|
2129
|
-
"version": "6.2.2-dev.
|
|
2130
|
+
"version": "6.2.2-dev.38",
|
|
2130
2131
|
"description": "Powerhouse package registry — resolves and manages document model package dependencies within the Powerhouse ecosystem.",
|
|
2131
2132
|
"type": "module",
|
|
2132
2133
|
"repository": {
|
|
@@ -2188,7 +2189,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
2188
2189
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
|
|
2189
2190
|
"manifest": {
|
|
2190
2191
|
"name": "@renown/sdk",
|
|
2191
|
-
"version": "6.2.2-dev.
|
|
2192
|
+
"version": "6.2.2-dev.38",
|
|
2192
2193
|
"description": "Renown SDK — wallet-based authentication and user identity management for Powerhouse React applications.",
|
|
2193
2194
|
"license": "AGPL-3.0-only",
|
|
2194
2195
|
"private": false,
|
|
@@ -2325,7 +2326,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
2325
2326
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
|
|
2326
2327
|
"manifest": {
|
|
2327
2328
|
"name": "@powerhousedao/shared",
|
|
2328
|
-
"version": "6.2.2-dev.
|
|
2329
|
+
"version": "6.2.2-dev.38",
|
|
2329
2330
|
"type": "module",
|
|
2330
2331
|
"sideEffects": false,
|
|
2331
2332
|
"publishConfig": { "access": "public" },
|
|
@@ -2488,7 +2489,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
2488
2489
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
|
|
2489
2490
|
"manifest": {
|
|
2490
2491
|
"name": "@powerhousedao/vetra",
|
|
2491
|
-
"version": "6.2.2-dev.
|
|
2492
|
+
"version": "6.2.2-dev.38",
|
|
2492
2493
|
"license": "AGPL-3.0-only",
|
|
2493
2494
|
"type": "module",
|
|
2494
2495
|
"sideEffects": false,
|
|
@@ -3040,7 +3041,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3040
3041
|
"manifest": {
|
|
3041
3042
|
"name": "@powerhousedao/connect",
|
|
3042
3043
|
"productName": "Powerhouse-Connect",
|
|
3043
|
-
"version": "6.2.2-dev.
|
|
3044
|
+
"version": "6.2.2-dev.38",
|
|
3044
3045
|
"description": "Powerhouse Connect",
|
|
3045
3046
|
"main": "dist/index.html",
|
|
3046
3047
|
"type": "module",
|
|
@@ -3166,7 +3167,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3166
3167
|
"manifest": {
|
|
3167
3168
|
"name": "@powerhousedao/switchboard",
|
|
3168
3169
|
"type": "module",
|
|
3169
|
-
"version": "6.2.2-dev.
|
|
3170
|
+
"version": "6.2.2-dev.38",
|
|
3170
3171
|
"main": "dist/index.mjs",
|
|
3171
3172
|
"exports": {
|
|
3172
3173
|
".": {
|
|
@@ -3266,7 +3267,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3266
3267
|
"dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
|
|
3267
3268
|
"manifest": {
|
|
3268
3269
|
"name": "@powerhousedao/ph-cli",
|
|
3269
|
-
"version": "6.2.2-dev.
|
|
3270
|
+
"version": "6.2.2-dev.38",
|
|
3270
3271
|
"description": "",
|
|
3271
3272
|
"license": "AGPL-3.0-only",
|
|
3272
3273
|
"type": "module",
|
|
@@ -3334,7 +3335,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3334
3335
|
"dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
|
|
3335
3336
|
"manifest": {
|
|
3336
3337
|
"name": "ph-cmd",
|
|
3337
|
-
"version": "6.2.2-dev.
|
|
3338
|
+
"version": "6.2.2-dev.38",
|
|
3338
3339
|
"description": "Powerhouse CLI — create Vetra projects, generate document models and editors, run local dev environments, and publish packages.",
|
|
3339
3340
|
"license": "AGPL-3.0-only",
|
|
3340
3341
|
"type": "module",
|
|
@@ -3392,7 +3393,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3392
3393
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
|
|
3393
3394
|
"manifest": {
|
|
3394
3395
|
"name": "@powerhousedao/analytics-engine-browser",
|
|
3395
|
-
"version": "6.2.2-dev.
|
|
3396
|
+
"version": "6.2.2-dev.38",
|
|
3396
3397
|
"license": "AGPL-3.0-only",
|
|
3397
3398
|
"repository": {
|
|
3398
3399
|
"type": "git",
|
|
@@ -3452,7 +3453,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3452
3453
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
|
|
3453
3454
|
"manifest": {
|
|
3454
3455
|
"name": "@powerhousedao/analytics-engine-core",
|
|
3455
|
-
"version": "6.2.2-dev.
|
|
3456
|
+
"version": "6.2.2-dev.38",
|
|
3456
3457
|
"license": "AGPL-3.0-only",
|
|
3457
3458
|
"repository": {
|
|
3458
3459
|
"type": "git",
|
|
@@ -3499,7 +3500,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3499
3500
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
|
|
3500
3501
|
"manifest": {
|
|
3501
3502
|
"name": "@powerhousedao/analytics-engine-graphql",
|
|
3502
|
-
"version": "6.2.2-dev.
|
|
3503
|
+
"version": "6.2.2-dev.38",
|
|
3503
3504
|
"license": "AGPL-3.0-only",
|
|
3504
3505
|
"repository": {
|
|
3505
3506
|
"type": "git",
|
|
@@ -3533,7 +3534,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3533
3534
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
|
|
3534
3535
|
"manifest": {
|
|
3535
3536
|
"name": "@powerhousedao/analytics-engine-knex",
|
|
3536
|
-
"version": "6.2.2-dev.
|
|
3537
|
+
"version": "6.2.2-dev.38",
|
|
3537
3538
|
"license": "AGPL-3.0-only",
|
|
3538
3539
|
"repository": {
|
|
3539
3540
|
"type": "git",
|
|
@@ -3571,7 +3572,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3571
3572
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
|
|
3572
3573
|
"manifest": {
|
|
3573
3574
|
"name": "@powerhousedao/analytics-engine-pg",
|
|
3574
|
-
"version": "6.2.2-dev.
|
|
3575
|
+
"version": "6.2.2-dev.38",
|
|
3575
3576
|
"license": "AGPL-3.0-only",
|
|
3576
3577
|
"repository": {
|
|
3577
3578
|
"type": "git",
|
|
@@ -3610,7 +3611,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3610
3611
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
|
|
3611
3612
|
"manifest": {
|
|
3612
3613
|
"name": "@powerhousedao/builder-tools",
|
|
3613
|
-
"version": "6.2.2-dev.
|
|
3614
|
+
"version": "6.2.2-dev.38",
|
|
3614
3615
|
"type": "module",
|
|
3615
3616
|
"license": "AGPL-3.0-only",
|
|
3616
3617
|
"publishConfig": { "access": "public" },
|
|
@@ -3685,7 +3686,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3685
3686
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
|
|
3686
3687
|
"manifest": {
|
|
3687
3688
|
"name": "@powerhousedao/codegen",
|
|
3688
|
-
"version": "6.2.2-dev.
|
|
3689
|
+
"version": "6.2.2-dev.38",
|
|
3689
3690
|
"license": "AGPL-3.0-only",
|
|
3690
3691
|
"private": false,
|
|
3691
3692
|
"type": "module",
|
|
@@ -3775,7 +3776,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3775
3776
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
|
|
3776
3777
|
"manifest": {
|
|
3777
3778
|
"name": "@powerhousedao/common",
|
|
3778
|
-
"version": "6.2.2-dev.
|
|
3779
|
+
"version": "6.2.2-dev.38",
|
|
3779
3780
|
"license": "AGPL-3.0-only",
|
|
3780
3781
|
"type": "module",
|
|
3781
3782
|
"files": ["/dist"],
|
|
@@ -3842,7 +3843,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3842
3843
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
|
|
3843
3844
|
"manifest": {
|
|
3844
3845
|
"name": "@powerhousedao/config",
|
|
3845
|
-
"version": "6.2.2-dev.
|
|
3846
|
+
"version": "6.2.2-dev.38",
|
|
3846
3847
|
"description": "",
|
|
3847
3848
|
"license": "AGPL-3.0-only",
|
|
3848
3849
|
"private": false,
|
|
@@ -3880,7 +3881,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
3880
3881
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
|
|
3881
3882
|
"manifest": {
|
|
3882
3883
|
"name": "@powerhousedao/design-system",
|
|
3883
|
-
"version": "6.2.2-dev.
|
|
3884
|
+
"version": "6.2.2-dev.38",
|
|
3884
3885
|
"description": "Powerhouse document-engineering design system — GraphQL scalar UI components for building consistent Powerhouse editors.",
|
|
3885
3886
|
"files": ["dist", "theme.css"],
|
|
3886
3887
|
"type": "module",
|
|
@@ -4050,7 +4051,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4050
4051
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
|
|
4051
4052
|
"manifest": {
|
|
4052
4053
|
"name": "document-model",
|
|
4053
|
-
"version": "6.2.2-dev.
|
|
4054
|
+
"version": "6.2.2-dev.38",
|
|
4054
4055
|
"license": "AGPL-3.0-only",
|
|
4055
4056
|
"private": false,
|
|
4056
4057
|
"files": ["dist"],
|
|
@@ -4125,7 +4126,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4125
4126
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
|
|
4126
4127
|
"manifest": {
|
|
4127
4128
|
"name": "@powerhousedao/opentelemetry-instrumentation-reactor",
|
|
4128
|
-
"version": "6.2.2-dev.
|
|
4129
|
+
"version": "6.2.2-dev.38",
|
|
4129
4130
|
"description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
|
|
4130
4131
|
"type": "module",
|
|
4131
4132
|
"sideEffects": false,
|
|
@@ -4163,7 +4164,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4163
4164
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
|
|
4164
4165
|
"manifest": {
|
|
4165
4166
|
"name": "@powerhousedao/pglite-fs",
|
|
4166
|
-
"version": "6.2.2-dev.
|
|
4167
|
+
"version": "6.2.2-dev.38",
|
|
4167
4168
|
"license": "AGPL-3.0-only",
|
|
4168
4169
|
"type": "module",
|
|
4169
4170
|
"repository": {
|
|
@@ -4198,7 +4199,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4198
4199
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
|
|
4199
4200
|
"manifest": {
|
|
4200
4201
|
"name": "@powerhousedao/powerhouse-vetra-packages",
|
|
4201
|
-
"version": "6.2.2-dev.
|
|
4202
|
+
"version": "6.2.2-dev.38",
|
|
4202
4203
|
"description": "",
|
|
4203
4204
|
"keywords": [],
|
|
4204
4205
|
"author": "",
|
|
@@ -4321,7 +4322,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4321
4322
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
|
|
4322
4323
|
"manifest": {
|
|
4323
4324
|
"name": "@powerhousedao/reactor",
|
|
4324
|
-
"version": "6.2.2-dev.
|
|
4325
|
+
"version": "6.2.2-dev.38",
|
|
4325
4326
|
"description": "Core Powerhouse reactor — stores documents, resolves conflicts, and reprocesses operation histories. Supports local, cloud, and decentralized storage backends.",
|
|
4326
4327
|
"repository": {
|
|
4327
4328
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -4348,6 +4349,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4348
4349
|
"claude": "pnpm build && pnpm test && pnpm exec prettier --write \"**/*.ts\" && pnpm lint",
|
|
4349
4350
|
"migrate": "tsx src/storage/migrations/run-migrations.ts",
|
|
4350
4351
|
"migrate:status": "tsx src/storage/migrations/run-migrations.ts status",
|
|
4352
|
+
"preflight:auth": "tsx src/admin/run-stream-order-check.ts",
|
|
4351
4353
|
"docker:up": "docker compose up -d",
|
|
4352
4354
|
"docker:down": "docker compose down"
|
|
4353
4355
|
},
|
|
@@ -4393,7 +4395,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4393
4395
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
|
|
4394
4396
|
"manifest": {
|
|
4395
4397
|
"name": "@powerhousedao/reactor-api",
|
|
4396
|
-
"version": "6.2.2-dev.
|
|
4398
|
+
"version": "6.2.2-dev.38",
|
|
4397
4399
|
"description": "GraphQL API layer for the Powerhouse reactor — auto-generated subgraphs per document model plus the core reactor subgraph for drive and document management.",
|
|
4398
4400
|
"type": "module",
|
|
4399
4401
|
"repository": {
|
|
@@ -4540,7 +4542,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4540
4542
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
|
|
4541
4543
|
"manifest": {
|
|
4542
4544
|
"name": "@powerhousedao/reactor-attachments",
|
|
4543
|
-
"version": "6.2.2-dev.
|
|
4545
|
+
"version": "6.2.2-dev.38",
|
|
4544
4546
|
"license": "AGPL-3.0-only",
|
|
4545
4547
|
"type": "module",
|
|
4546
4548
|
"repository": {
|
|
@@ -4607,7 +4609,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4607
4609
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
|
|
4608
4610
|
"manifest": {
|
|
4609
4611
|
"name": "@powerhousedao/reactor-browser",
|
|
4610
|
-
"version": "6.2.2-dev.
|
|
4612
|
+
"version": "6.2.2-dev.38",
|
|
4611
4613
|
"license": "AGPL-3.0-only",
|
|
4612
4614
|
"type": "module",
|
|
4613
4615
|
"repository": {
|
|
@@ -4747,7 +4749,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4747
4749
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
|
|
4748
4750
|
"manifest": {
|
|
4749
4751
|
"name": "@powerhousedao/reactor-drive",
|
|
4750
|
-
"version": "6.2.2-dev.
|
|
4752
|
+
"version": "6.2.2-dev.38",
|
|
4751
4753
|
"license": "AGPL-3.0-only",
|
|
4752
4754
|
"type": "module",
|
|
4753
4755
|
"repository": {
|
|
@@ -4802,7 +4804,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4802
4804
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
|
|
4803
4805
|
"manifest": {
|
|
4804
4806
|
"name": "@powerhousedao/reactor-hypercore",
|
|
4805
|
-
"version": "6.2.2-dev.
|
|
4807
|
+
"version": "6.2.2-dev.38",
|
|
4806
4808
|
"description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
|
|
4807
4809
|
"repository": {
|
|
4808
4810
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -4845,7 +4847,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4845
4847
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
|
|
4846
4848
|
"manifest": {
|
|
4847
4849
|
"name": "@powerhousedao/reactor-mcp",
|
|
4848
|
-
"version": "6.2.2-dev.
|
|
4850
|
+
"version": "6.2.2-dev.38",
|
|
4849
4851
|
"description": "MCP server for the Powerhouse reactor — exposes document model operations and drive management to AI coding assistants via the Model Context Protocol.",
|
|
4850
4852
|
"type": "module",
|
|
4851
4853
|
"repository": {
|
|
@@ -4912,7 +4914,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4912
4914
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
|
|
4913
4915
|
"manifest": {
|
|
4914
4916
|
"name": "@powerhousedao/registry",
|
|
4915
|
-
"version": "6.2.2-dev.
|
|
4917
|
+
"version": "6.2.2-dev.38",
|
|
4916
4918
|
"description": "Powerhouse package registry — resolves and manages document model package dependencies within the Powerhouse ecosystem.",
|
|
4917
4919
|
"type": "module",
|
|
4918
4920
|
"repository": {
|
|
@@ -4974,7 +4976,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
4974
4976
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
|
|
4975
4977
|
"manifest": {
|
|
4976
4978
|
"name": "@renown/sdk",
|
|
4977
|
-
"version": "6.2.2-dev.
|
|
4979
|
+
"version": "6.2.2-dev.38",
|
|
4978
4980
|
"description": "Renown SDK — wallet-based authentication and user identity management for Powerhouse React applications.",
|
|
4979
4981
|
"license": "AGPL-3.0-only",
|
|
4980
4982
|
"private": false,
|
|
@@ -5111,7 +5113,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
5111
5113
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
|
|
5112
5114
|
"manifest": {
|
|
5113
5115
|
"name": "@powerhousedao/shared",
|
|
5114
|
-
"version": "6.2.2-dev.
|
|
5116
|
+
"version": "6.2.2-dev.38",
|
|
5115
5117
|
"type": "module",
|
|
5116
5118
|
"sideEffects": false,
|
|
5117
5119
|
"publishConfig": { "access": "public" },
|
|
@@ -5274,7 +5276,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
|
|
|
5274
5276
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
|
|
5275
5277
|
"manifest": {
|
|
5276
5278
|
"name": "@powerhousedao/vetra",
|
|
5277
|
-
"version": "6.2.2-dev.
|
|
5279
|
+
"version": "6.2.2-dev.38",
|
|
5278
5280
|
"license": "AGPL-3.0-only",
|
|
5279
5281
|
"type": "module",
|
|
5280
5282
|
"sideEffects": false,
|
|
@@ -5870,7 +5872,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
5870
5872
|
"manifest": {
|
|
5871
5873
|
"name": "@powerhousedao/connect",
|
|
5872
5874
|
"productName": "Powerhouse-Connect",
|
|
5873
|
-
"version": "6.2.2-dev.
|
|
5875
|
+
"version": "6.2.2-dev.38",
|
|
5874
5876
|
"description": "Powerhouse Connect",
|
|
5875
5877
|
"main": "dist/index.html",
|
|
5876
5878
|
"type": "module",
|
|
@@ -5996,7 +5998,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
5996
5998
|
"manifest": {
|
|
5997
5999
|
"name": "@powerhousedao/switchboard",
|
|
5998
6000
|
"type": "module",
|
|
5999
|
-
"version": "6.2.2-dev.
|
|
6001
|
+
"version": "6.2.2-dev.38",
|
|
6000
6002
|
"main": "dist/index.mjs",
|
|
6001
6003
|
"exports": {
|
|
6002
6004
|
".": {
|
|
@@ -6096,7 +6098,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6096
6098
|
"dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
|
|
6097
6099
|
"manifest": {
|
|
6098
6100
|
"name": "@powerhousedao/ph-cli",
|
|
6099
|
-
"version": "6.2.2-dev.
|
|
6101
|
+
"version": "6.2.2-dev.38",
|
|
6100
6102
|
"description": "",
|
|
6101
6103
|
"license": "AGPL-3.0-only",
|
|
6102
6104
|
"type": "module",
|
|
@@ -6164,7 +6166,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6164
6166
|
"dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
|
|
6165
6167
|
"manifest": {
|
|
6166
6168
|
"name": "ph-cmd",
|
|
6167
|
-
"version": "6.2.2-dev.
|
|
6169
|
+
"version": "6.2.2-dev.38",
|
|
6168
6170
|
"description": "Powerhouse CLI — create Vetra projects, generate document models and editors, run local dev environments, and publish packages.",
|
|
6169
6171
|
"license": "AGPL-3.0-only",
|
|
6170
6172
|
"type": "module",
|
|
@@ -6222,7 +6224,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6222
6224
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
|
|
6223
6225
|
"manifest": {
|
|
6224
6226
|
"name": "@powerhousedao/analytics-engine-browser",
|
|
6225
|
-
"version": "6.2.2-dev.
|
|
6227
|
+
"version": "6.2.2-dev.38",
|
|
6226
6228
|
"license": "AGPL-3.0-only",
|
|
6227
6229
|
"repository": {
|
|
6228
6230
|
"type": "git",
|
|
@@ -6282,7 +6284,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6282
6284
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
|
|
6283
6285
|
"manifest": {
|
|
6284
6286
|
"name": "@powerhousedao/analytics-engine-core",
|
|
6285
|
-
"version": "6.2.2-dev.
|
|
6287
|
+
"version": "6.2.2-dev.38",
|
|
6286
6288
|
"license": "AGPL-3.0-only",
|
|
6287
6289
|
"repository": {
|
|
6288
6290
|
"type": "git",
|
|
@@ -6329,7 +6331,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6329
6331
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
|
|
6330
6332
|
"manifest": {
|
|
6331
6333
|
"name": "@powerhousedao/analytics-engine-graphql",
|
|
6332
|
-
"version": "6.2.2-dev.
|
|
6334
|
+
"version": "6.2.2-dev.38",
|
|
6333
6335
|
"license": "AGPL-3.0-only",
|
|
6334
6336
|
"repository": {
|
|
6335
6337
|
"type": "git",
|
|
@@ -6363,7 +6365,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6363
6365
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
|
|
6364
6366
|
"manifest": {
|
|
6365
6367
|
"name": "@powerhousedao/analytics-engine-knex",
|
|
6366
|
-
"version": "6.2.2-dev.
|
|
6368
|
+
"version": "6.2.2-dev.38",
|
|
6367
6369
|
"license": "AGPL-3.0-only",
|
|
6368
6370
|
"repository": {
|
|
6369
6371
|
"type": "git",
|
|
@@ -6401,7 +6403,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6401
6403
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
|
|
6402
6404
|
"manifest": {
|
|
6403
6405
|
"name": "@powerhousedao/analytics-engine-pg",
|
|
6404
|
-
"version": "6.2.2-dev.
|
|
6406
|
+
"version": "6.2.2-dev.38",
|
|
6405
6407
|
"license": "AGPL-3.0-only",
|
|
6406
6408
|
"repository": {
|
|
6407
6409
|
"type": "git",
|
|
@@ -6440,7 +6442,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6440
6442
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
|
|
6441
6443
|
"manifest": {
|
|
6442
6444
|
"name": "@powerhousedao/builder-tools",
|
|
6443
|
-
"version": "6.2.2-dev.
|
|
6445
|
+
"version": "6.2.2-dev.38",
|
|
6444
6446
|
"type": "module",
|
|
6445
6447
|
"license": "AGPL-3.0-only",
|
|
6446
6448
|
"publishConfig": { "access": "public" },
|
|
@@ -6515,7 +6517,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6515
6517
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
|
|
6516
6518
|
"manifest": {
|
|
6517
6519
|
"name": "@powerhousedao/codegen",
|
|
6518
|
-
"version": "6.2.2-dev.
|
|
6520
|
+
"version": "6.2.2-dev.38",
|
|
6519
6521
|
"license": "AGPL-3.0-only",
|
|
6520
6522
|
"private": false,
|
|
6521
6523
|
"type": "module",
|
|
@@ -6605,7 +6607,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6605
6607
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
|
|
6606
6608
|
"manifest": {
|
|
6607
6609
|
"name": "@powerhousedao/common",
|
|
6608
|
-
"version": "6.2.2-dev.
|
|
6610
|
+
"version": "6.2.2-dev.38",
|
|
6609
6611
|
"license": "AGPL-3.0-only",
|
|
6610
6612
|
"type": "module",
|
|
6611
6613
|
"files": ["/dist"],
|
|
@@ -6672,7 +6674,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6672
6674
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
|
|
6673
6675
|
"manifest": {
|
|
6674
6676
|
"name": "@powerhousedao/config",
|
|
6675
|
-
"version": "6.2.2-dev.
|
|
6677
|
+
"version": "6.2.2-dev.38",
|
|
6676
6678
|
"description": "",
|
|
6677
6679
|
"license": "AGPL-3.0-only",
|
|
6678
6680
|
"private": false,
|
|
@@ -6710,7 +6712,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6710
6712
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
|
|
6711
6713
|
"manifest": {
|
|
6712
6714
|
"name": "@powerhousedao/design-system",
|
|
6713
|
-
"version": "6.2.2-dev.
|
|
6715
|
+
"version": "6.2.2-dev.38",
|
|
6714
6716
|
"description": "Powerhouse document-engineering design system — GraphQL scalar UI components for building consistent Powerhouse editors.",
|
|
6715
6717
|
"files": ["dist", "theme.css"],
|
|
6716
6718
|
"type": "module",
|
|
@@ -6880,7 +6882,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6880
6882
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
|
|
6881
6883
|
"manifest": {
|
|
6882
6884
|
"name": "document-model",
|
|
6883
|
-
"version": "6.2.2-dev.
|
|
6885
|
+
"version": "6.2.2-dev.38",
|
|
6884
6886
|
"license": "AGPL-3.0-only",
|
|
6885
6887
|
"private": false,
|
|
6886
6888
|
"files": ["dist"],
|
|
@@ -6955,7 +6957,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6955
6957
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
|
|
6956
6958
|
"manifest": {
|
|
6957
6959
|
"name": "@powerhousedao/opentelemetry-instrumentation-reactor",
|
|
6958
|
-
"version": "6.2.2-dev.
|
|
6960
|
+
"version": "6.2.2-dev.38",
|
|
6959
6961
|
"description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
|
|
6960
6962
|
"type": "module",
|
|
6961
6963
|
"sideEffects": false,
|
|
@@ -6993,7 +6995,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
6993
6995
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
|
|
6994
6996
|
"manifest": {
|
|
6995
6997
|
"name": "@powerhousedao/pglite-fs",
|
|
6996
|
-
"version": "6.2.2-dev.
|
|
6998
|
+
"version": "6.2.2-dev.38",
|
|
6997
6999
|
"license": "AGPL-3.0-only",
|
|
6998
7000
|
"type": "module",
|
|
6999
7001
|
"repository": {
|
|
@@ -7028,7 +7030,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7028
7030
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
|
|
7029
7031
|
"manifest": {
|
|
7030
7032
|
"name": "@powerhousedao/powerhouse-vetra-packages",
|
|
7031
|
-
"version": "6.2.2-dev.
|
|
7033
|
+
"version": "6.2.2-dev.38",
|
|
7032
7034
|
"description": "",
|
|
7033
7035
|
"keywords": [],
|
|
7034
7036
|
"author": "",
|
|
@@ -7151,7 +7153,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7151
7153
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
|
|
7152
7154
|
"manifest": {
|
|
7153
7155
|
"name": "@powerhousedao/reactor",
|
|
7154
|
-
"version": "6.2.2-dev.
|
|
7156
|
+
"version": "6.2.2-dev.38",
|
|
7155
7157
|
"description": "Core Powerhouse reactor — stores documents, resolves conflicts, and reprocesses operation histories. Supports local, cloud, and decentralized storage backends.",
|
|
7156
7158
|
"repository": {
|
|
7157
7159
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -7178,6 +7180,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7178
7180
|
"claude": "pnpm build && pnpm test && pnpm exec prettier --write \"**/*.ts\" && pnpm lint",
|
|
7179
7181
|
"migrate": "tsx src/storage/migrations/run-migrations.ts",
|
|
7180
7182
|
"migrate:status": "tsx src/storage/migrations/run-migrations.ts status",
|
|
7183
|
+
"preflight:auth": "tsx src/admin/run-stream-order-check.ts",
|
|
7181
7184
|
"docker:up": "docker compose up -d",
|
|
7182
7185
|
"docker:down": "docker compose down"
|
|
7183
7186
|
},
|
|
@@ -7223,7 +7226,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7223
7226
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
|
|
7224
7227
|
"manifest": {
|
|
7225
7228
|
"name": "@powerhousedao/reactor-api",
|
|
7226
|
-
"version": "6.2.2-dev.
|
|
7229
|
+
"version": "6.2.2-dev.38",
|
|
7227
7230
|
"description": "GraphQL API layer for the Powerhouse reactor — auto-generated subgraphs per document model plus the core reactor subgraph for drive and document management.",
|
|
7228
7231
|
"type": "module",
|
|
7229
7232
|
"repository": {
|
|
@@ -7370,7 +7373,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7370
7373
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
|
|
7371
7374
|
"manifest": {
|
|
7372
7375
|
"name": "@powerhousedao/reactor-attachments",
|
|
7373
|
-
"version": "6.2.2-dev.
|
|
7376
|
+
"version": "6.2.2-dev.38",
|
|
7374
7377
|
"license": "AGPL-3.0-only",
|
|
7375
7378
|
"type": "module",
|
|
7376
7379
|
"repository": {
|
|
@@ -7437,7 +7440,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7437
7440
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
|
|
7438
7441
|
"manifest": {
|
|
7439
7442
|
"name": "@powerhousedao/reactor-browser",
|
|
7440
|
-
"version": "6.2.2-dev.
|
|
7443
|
+
"version": "6.2.2-dev.38",
|
|
7441
7444
|
"license": "AGPL-3.0-only",
|
|
7442
7445
|
"type": "module",
|
|
7443
7446
|
"repository": {
|
|
@@ -7577,7 +7580,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7577
7580
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
|
|
7578
7581
|
"manifest": {
|
|
7579
7582
|
"name": "@powerhousedao/reactor-drive",
|
|
7580
|
-
"version": "6.2.2-dev.
|
|
7583
|
+
"version": "6.2.2-dev.38",
|
|
7581
7584
|
"license": "AGPL-3.0-only",
|
|
7582
7585
|
"type": "module",
|
|
7583
7586
|
"repository": {
|
|
@@ -7632,7 +7635,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7632
7635
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
|
|
7633
7636
|
"manifest": {
|
|
7634
7637
|
"name": "@powerhousedao/reactor-hypercore",
|
|
7635
|
-
"version": "6.2.2-dev.
|
|
7638
|
+
"version": "6.2.2-dev.38",
|
|
7636
7639
|
"description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
|
|
7637
7640
|
"repository": {
|
|
7638
7641
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -7675,7 +7678,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7675
7678
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
|
|
7676
7679
|
"manifest": {
|
|
7677
7680
|
"name": "@powerhousedao/reactor-mcp",
|
|
7678
|
-
"version": "6.2.2-dev.
|
|
7681
|
+
"version": "6.2.2-dev.38",
|
|
7679
7682
|
"description": "MCP server for the Powerhouse reactor — exposes document model operations and drive management to AI coding assistants via the Model Context Protocol.",
|
|
7680
7683
|
"type": "module",
|
|
7681
7684
|
"repository": {
|
|
@@ -7742,7 +7745,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7742
7745
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
|
|
7743
7746
|
"manifest": {
|
|
7744
7747
|
"name": "@powerhousedao/registry",
|
|
7745
|
-
"version": "6.2.2-dev.
|
|
7748
|
+
"version": "6.2.2-dev.38",
|
|
7746
7749
|
"description": "Powerhouse package registry — resolves and manages document model package dependencies within the Powerhouse ecosystem.",
|
|
7747
7750
|
"type": "module",
|
|
7748
7751
|
"repository": {
|
|
@@ -7804,7 +7807,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7804
7807
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
|
|
7805
7808
|
"manifest": {
|
|
7806
7809
|
"name": "@renown/sdk",
|
|
7807
|
-
"version": "6.2.2-dev.
|
|
7810
|
+
"version": "6.2.2-dev.38",
|
|
7808
7811
|
"description": "Renown SDK — wallet-based authentication and user identity management for Powerhouse React applications.",
|
|
7809
7812
|
"license": "AGPL-3.0-only",
|
|
7810
7813
|
"private": false,
|
|
@@ -7941,7 +7944,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
7941
7944
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
|
|
7942
7945
|
"manifest": {
|
|
7943
7946
|
"name": "@powerhousedao/shared",
|
|
7944
|
-
"version": "6.2.2-dev.
|
|
7947
|
+
"version": "6.2.2-dev.38",
|
|
7945
7948
|
"type": "module",
|
|
7946
7949
|
"sideEffects": false,
|
|
7947
7950
|
"publishConfig": { "access": "public" },
|
|
@@ -8104,7 +8107,7 @@ async function migrate(version, projectDir = process.cwd()) {
|
|
|
8104
8107
|
"dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
|
|
8105
8108
|
"manifest": {
|
|
8106
8109
|
"name": "@powerhousedao/vetra",
|
|
8107
|
-
"version": "6.2.2-dev.
|
|
8110
|
+
"version": "6.2.2-dev.38",
|
|
8108
8111
|
"license": "AGPL-3.0-only",
|
|
8109
8112
|
"type": "module",
|
|
8110
8113
|
"sideEffects": false,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["readdirSync","join","path","fs","fs","fs"],"sources":["../src/codegen/utils.ts","../src/codegen/features.ts","../src/codegen/generate.ts","../src/codegen/get-version.ts","../src/codegen/kysely.ts","../src/codegen/migrate.ts","../src/create-lib/checkout-project.ts","../src/create-lib/create-project.ts","../src/ts-morph-generator/core/FileGenerator.ts","../src/ts-morph-generator/core/ReducerGenerator.ts","../src/ts-morph-generator/utilities/DeclarationManager.ts","../src/ts-morph-generator/utilities/DirectoryManager.ts","../src/ts-morph-generator/utilities/ImportManager.ts","../src/ts-morph-generator/core/TSMorphCodeGenerator.ts"],"sourcesContent":["import type {\n DocumentModelDocument,\n DocumentModelGlobalState,\n} from \"@powerhousedao/shared/document-model\";\nimport { documentModelReducer } from \"@powerhousedao/shared/document-model\";\nimport { baseLoadFromFile } from \"document-model/node\";\nimport { readFile } from \"node:fs/promises\";\n\nexport function sortByKey<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).sort(([a], [b]) => a.localeCompare(b)),\n ) as T;\n}\n\nexport async function loadDocumentModel(\n path: string,\n): Promise<DocumentModelGlobalState> {\n let documentModel: DocumentModelGlobalState;\n try {\n if (!path) {\n throw new Error(\"Document model file not specified\");\n } else if (path.endsWith(\".zip\") || path.endsWith(\".phd\")) {\n const file = await baseLoadFromFile(path, documentModelReducer);\n documentModel = file.state.global;\n } else if (path.endsWith(\".json\")) {\n const data = await readFile(path, \"utf-8\");\n const parsedData = JSON.parse(data) as DocumentModelDocument;\n if (\"state\" in parsedData) {\n documentModel = parsedData.state.global;\n } else {\n documentModel = parsedData;\n }\n } else {\n throw new Error(\"File type not supported. Must be zip, phd, or json.\");\n }\n return documentModel;\n } catch (error) {\n throw (error as { code?: string }).code === \"MODULE_NOT_FOUND\"\n ? new Error(`Document model not found.`)\n : error;\n }\n}\n","import {\n ANALYTICS_ENGINE_CORE_PACKAGE,\n FEATURE_DEPENDENCIES,\n} from \"@powerhousedao/shared/clis\";\nimport { readdirSync, readFileSync, statSync } from \"fs\";\nimport { join } from \"path\";\nimport { type PackageJson, readPackage } from \"read-pkg\";\nimport { writePackage } from \"write-package\";\nimport { sortByKey } from \"./utils.js\";\n\nexport type Feature = keyof typeof FEATURE_DEPENDENCIES;\n\nfunction hasAnalyticsProcessor(processorsDir: string): boolean {\n const entries = readdirSync(processorsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const dir = join(processorsDir, entry.name);\n // processor.ts is the current shape; index.ts is the pre-migrate fallback.\n for (const filename of [\"processor.ts\", \"index.ts\"]) {\n try {\n const contents = readFileSync(join(dir, filename), \"utf-8\");\n if (contents.includes(ANALYTICS_ENGINE_CORE_PACKAGE)) return true;\n } catch {\n // file missing — try next candidate\n }\n }\n }\n return false;\n}\n\nexport function detectFeatures(projectDir: string): Feature[] {\n const features: Feature[] = [];\n const processorsDir = join(projectDir, \"processors\");\n const processorsStat = statSync(processorsDir, { throwIfNoEntry: false });\n if (processorsStat?.isDirectory() && hasAnalyticsProcessor(processorsDir)) {\n features.push(\"analyticsProcessor\");\n }\n return features;\n}\n\n// Idempotently adds the peer + dev deps required by `features` to the\n// project's package.json. Reuses the existing `document-model` pin as the\n// version anchor for new workspace peers so generated entries stay in sync\n// with whatever migrate last wrote. No-op if the entries are already present.\nexport async function syncFeatureDependencies(\n features: readonly Feature[],\n projectDir: string,\n): Promise<void> {\n if (features.length === 0) return;\n\n const packageJson = await readPackage({ cwd: projectDir, normalize: false });\n\n const pinVersion =\n packageJson.peerDependencies?.[\"document-model\"] ??\n packageJson.devDependencies?.[\"document-model\"];\n if (!pinVersion) {\n throw new Error(\n \"Cannot sync feature dependencies: project is missing `document-model` in peer/devDependencies. Run `ph migrate` first.\",\n );\n }\n\n const peerDependencies = {\n ...(packageJson.peerDependencies ?? {}),\n } as Record<string, string>;\n const devDependencies = {\n ...(packageJson.devDependencies ?? {}),\n } as Record<string, string>;\n\n const added: string[] = [];\n for (const feature of features) {\n const spec = FEATURE_DEPENDENCIES[feature];\n for (const pkg of spec.peerVersioned) {\n if (peerDependencies[pkg] === undefined) {\n peerDependencies[pkg] = pinVersion;\n added.push(pkg);\n }\n if (devDependencies[pkg] === undefined) {\n devDependencies[pkg] = pinVersion;\n }\n }\n const peerExternal = spec.peerExternal as Record<\n string,\n { peer: string; dev: string }\n >;\n for (const [pkg, versionSpec] of Object.entries(peerExternal)) {\n if (peerDependencies[pkg] === undefined) {\n peerDependencies[pkg] = versionSpec.peer;\n added.push(pkg);\n }\n if (devDependencies[pkg] === undefined) {\n devDependencies[pkg] = versionSpec.dev;\n }\n }\n }\n\n if (added.length === 0) return;\n\n const updated = {\n ...packageJson,\n peerDependencies: sortByKey(peerDependencies),\n devDependencies: sortByKey(devDependencies),\n } as PackageJson;\n await writePackage(projectDir, updated);\n console.log(`Added peer/dev dependencies: ${added.join(\", \")}`);\n}\n","import { type DocumentModelGlobalState } from \"@powerhousedao/shared/document-model\";\nimport type { ProcessorApps } from \"@powerhousedao/shared/processors\";\nimport { kebabCase } from \"change-case\";\nimport {\n pruneManifestSection,\n tsMorphGenerateApp,\n tsMorphGenerateDocumentEditor,\n tsMorphGenerateDocumentModel,\n tsMorphGenerateProcessor,\n tsMorphGenerateSubgraph,\n} from \"file-builders\";\nimport { readdirSync } from \"node:fs\";\nimport {\n filter,\n isDefined,\n isIncludedIn,\n isTruthy,\n map,\n pipe,\n prop,\n unique,\n} from \"remeda\";\nimport type { Project } from \"ts-morph\";\nimport {\n getAppMetadata,\n getEditorMetadata,\n getOrCreateDirectory,\n getProcessorMetadata,\n getSubgraphMetadata,\n loadDocumentModelInDir,\n} from \"utils\";\nimport { loadDocumentModel } from \"./utils.js\";\n\nexport async function generateDocumentModel(\n documentModelState: DocumentModelGlobalState,\n project: Project,\n) {\n await tsMorphGenerateDocumentModel(documentModelState, project);\n}\n\n/* Runs generate for each document model json file found in the project's `document-models` directory */\nexport async function generateAllDocumentModels(project: Project) {\n const { directory: documentModelsDir } = getOrCreateDirectory(\n project,\n \"document-models\",\n );\n const documentModelsDirPath = documentModelsDir.getPath();\n const projectDir = documentModelsDir.getParentOrThrow().getPath();\n const documentModelStateFiles = pipe(\n readdirSync(documentModelsDirPath, { withFileTypes: true }),\n map(loadDocumentModelInDir),\n filter(isDefined),\n );\n\n for (const documentModelState of documentModelStateFiles) {\n await generateDocumentModel(documentModelState, project);\n }\n\n await pruneManifestSection(\n projectDir,\n \"documentModels\",\n documentModelStateFiles.map((s) => s.id),\n );\n}\nexport async function generateFromFile(filePath: string, project: Project) {\n // load document model spec from file\n const documentModelState = await loadDocumentModel(filePath);\n\n // delegate to shared generation function\n await generateDocumentModel(documentModelState, project);\n}\n\ntype GenerateEditorArgs = {\n editorName: string;\n documentTypes: string[];\n editorId?: string;\n editorDirName?: string;\n};\nexport async function generateEditor(\n args: GenerateEditorArgs,\n project: Project,\n) {\n const {\n editorName,\n documentTypes,\n editorId: editorIdArg,\n editorDirName,\n } = args;\n\n if (documentTypes.length > 1) {\n throw new Error(\"Multiple document types are not supported yet\");\n }\n\n const documentModelId = documentTypes[0];\n const editorId = editorIdArg || kebabCase(editorName);\n const editorDir = editorDirName || kebabCase(editorName);\n\n await tsMorphGenerateDocumentEditor({\n project,\n editorDir,\n documentModelId,\n editorName,\n editorId,\n });\n}\n\n/* Runs generate for all editors found in the project's `editors` directory.\n * Note: we intentionally filter out editors with the document type \"powerhouse/document-drive\".\n * These are handled separately by the `generateAllApps` function.\n */\nexport async function generateAllEditors(project: Project) {\n const { directory: editorsDir } = getOrCreateDirectory(project, \"editors\");\n const projectDir = editorsDir.getParentOrThrow().getPath();\n\n /* An editor's `id`, `name`, and `documentTypes` args can be found in the `module.ts` file */\n const editorsToAdd = pipe(\n editorsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getEditorMetadata(project, dirName)),\n filter(isTruthy),\n filter(\n ({ documentTypes }) =>\n !isIncludedIn(\"powerhouse/document-drive\", documentTypes),\n ),\n );\n\n for (const editorToAdd of editorsToAdd) {\n const {\n name: editorName,\n id: editorId,\n dirName: editorDirName,\n documentTypes,\n } = editorToAdd;\n\n await generateEditor(\n {\n editorName,\n editorId,\n editorDirName,\n documentTypes,\n },\n project,\n );\n }\n\n await pruneManifestSection(\n projectDir,\n \"editors\",\n editorsToAdd.map((e) => e.id),\n );\n}\n\ntype GenerateAppArgs = {\n appName: string;\n appId?: string;\n allowedDocumentTypes?: string[];\n isDragAndDropEnabled?: boolean;\n appDirName?: string;\n};\nexport async function generateApp(args: GenerateAppArgs, project: Project) {\n const {\n appName,\n appId,\n allowedDocumentTypes,\n isDragAndDropEnabled,\n appDirName,\n } = args;\n\n await tsMorphGenerateApp({\n project,\n editorDir: appDirName || kebabCase(appName),\n editorName: appName,\n editorId: appId ?? kebabCase(appName),\n allowedDocumentModelIds: allowedDocumentTypes ?? [],\n isDragAndDropEnabled: isDragAndDropEnabled ?? true,\n });\n}\n\n/* Runs generate for all apps found in the project's `editors` directory.\n * Note: we intentionally filter out editors which do not have the document type \"powerhouse/document-drive\".\n * These are handled separately by the `generateAllEditors` function.\n */\nexport async function generateAllApps(project: Project) {\n const { directory: editorsDir } = getOrCreateDirectory(project, \"editors\");\n const projectDir = editorsDir.getParentOrThrow().getPath();\n\n /* An editor's `id`, `name`, and `documentTypes` args can be found in the `module.ts` file */\n const appsToAdd = pipe(\n editorsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getAppMetadata(project, dirName)),\n filter(isTruthy),\n );\n\n for (const appToAdd of appsToAdd) {\n const {\n name: appName,\n id: appId,\n dirName: appDirName,\n allowedDocumentTypes,\n isDragAndDropEnabled,\n } = appToAdd;\n await generateApp(\n {\n appName,\n appDirName,\n appId,\n allowedDocumentTypes,\n isDragAndDropEnabled,\n },\n project,\n );\n }\n\n await pruneManifestSection(\n projectDir,\n \"apps\",\n appsToAdd.map((a) => a.id),\n );\n}\nexport async function generateSubgraph(subgraphName: string, project: Project) {\n await tsMorphGenerateSubgraph({ subgraphName, project });\n}\n\n/* Runs generate for each directory found in the project's `subgraphs` directory */\nexport async function generateAllSubgraphs(project: Project) {\n const { directory: subgraphsDir } = getOrCreateDirectory(\n project,\n \"subgraphs\",\n );\n const projectDir = subgraphsDir.getParentOrThrow().getPath();\n /* The subgraph's name is found in the `index.ts` file */\n const subgraphNames = pipe(\n subgraphsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getSubgraphMetadata(project, dirName)),\n map(prop(\"subgraphName\")),\n filter(isDefined),\n unique(),\n );\n for (const subgraphName of subgraphNames) {\n await generateSubgraph(subgraphName, project);\n }\n\n await pruneManifestSection(\n projectDir,\n \"subgraphs\",\n subgraphNames.map((name) => kebabCase(name)),\n );\n}\n\nexport async function generateProcessor(\n args: {\n processorName: string;\n processorType: \"analytics\" | \"relationalDb\";\n processorApps: ProcessorApps;\n documentTypes: string[];\n },\n project: Project,\n) {\n return await tsMorphGenerateProcessor({\n project,\n ...args,\n });\n}\n\n/* Runs generate for each directory found in the project's `processors` directory */\nexport async function generateAllProcessors(project: Project) {\n const { directory: processorsDir } = getOrCreateDirectory(\n project,\n \"processors\",\n );\n const projectDir = processorsDir.getParentOrThrow().getPath();\n const processorsToGenerate = pipe(\n processorsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getProcessorMetadata(project, dirName)),\n );\n\n for (const processorArgs of processorsToGenerate) {\n await generateProcessor(processorArgs, project);\n }\n\n await pruneManifestSection(\n projectDir,\n \"processors\",\n processorsToGenerate.map((p) => kebabCase(p.processorName)),\n );\n}\n\n/* Runs each module type's generateAll{moduleType} function for the current project */\nexport async function generateAll(project: Project) {\n await generateAllDocumentModels(project);\n await generateAllEditors(project);\n await generateAllApps(project);\n await generateAllSubgraphs(project);\n await generateAllProcessors(project);\n}\n","declare const CODEGEN_VERSION: string | undefined;\n\nexport function getCodegenVersion(): string {\n if (typeof CODEGEN_VERSION !== \"undefined\") return CODEGEN_VERSION;\n return (\n process.env.WORKSPACE_VERSION ||\n process.env.npm_package_version ||\n \"unknown\"\n );\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join, resolve } from \"node:path\";\n\nfunction getKyselyPgLiteBin(): string {\n const require = createRequire(import.meta.url);\n\n const paths = require.resolve.paths(\"kysely-pglite\");\n if (paths) {\n for (const basePath of paths) {\n const pkgRoot = join(basePath, \"kysely-pglite\");\n const binPath = join(pkgRoot, \"bin/run.js\");\n\n if (existsSync(binPath)) {\n return binPath;\n }\n }\n }\n\n throw new Error(\"Could not find kysely-pglite/bin/run.js\");\n}\n\nexport interface IOptions {\n migrationFile: string;\n schemaFile?: string;\n}\n\nfunction runCommand(\n command: string,\n args: string[],\n cwd?: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: \"inherit\",\n shell: true,\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on(\"error\", (error) => {\n reject(error);\n });\n });\n}\n\nexport async function generateDBSchema({\n migrationFile,\n schemaFile,\n}: IOptions) {\n const outFile = schemaFile ?? resolve(migrationFile, \"../schema.ts\");\n\n try {\n const kyselyBinPath = getKyselyPgLiteBin();\n // Use kysely-pglite CLI to handle TypeScript compilation and module resolution\n await runCommand(\n \"node\",\n [kyselyBinPath, migrationFile, \"--outFile\", outFile],\n process.cwd(),\n );\n\n console.log(`Schema types generated at ${outFile}`);\n } catch (error) {\n console.error(\"Error running migration:\", error);\n }\n}\n","import {\n externalDevDependencies,\n FEATURE_DEPENDENCIES,\n getPackageManagerAtPowerhouseProjectDirPath,\n getPowerhouseProjectInstallCommand,\n LEGACY_LINT_FORMAT_DEPENDENCIES,\n LEGACY_LINT_FORMAT_FILES,\n packageJsonExports,\n packageScripts,\n PEER_EXTERNAL_DEPENDENCIES,\n runCmd,\n VERSIONED_DEV_DEPENDENCIES,\n VERSIONED_PEER_DEPENDENCIES,\n} from \"@powerhousedao/shared/clis\";\nimport console from \"console\";\nimport { writeAllGeneratedProjectFiles } from \"file-builders\";\nimport { cpSync, mkdirSync, readdirSync, rmSync, statSync } from \"fs\";\nimport npmFetch from \"npm-registry-fetch\";\nimport { join } from \"path\";\nimport { type PackageJson, readPackage } from \"read-pkg\";\nimport {\n filter,\n fromKeys,\n isTruthy,\n keys,\n map,\n mapValues,\n merge,\n omit,\n pipe,\n prop,\n} from \"remeda\";\nimport type { Project } from \"ts-morph\";\nimport { buildTsMorphProject } from \"utils\";\nimport { writePackage } from \"write-package\";\nimport { detectFeatures } from \"./features.js\";\nimport { generateAll } from \"./generate.js\";\nimport { sortByKey } from \"./utils.js\";\n\n// Anchor dist-tag resolution to ph-cli. Releases publish in topological order\n// (releaseGraph), so ph-cli — a top-level consumer — is published *after* its\n// workspace dependencies, and a dist-tag only moves once that package is\n// published. Resolving the tag against ph-cli therefore yields a version whose\n// entire workspace dependency closure is already on the registry. Anchoring to\n// an arbitrary `WORKSPACE_PACKAGES[0]` (e.g. codegen) instead races during the\n// publish window: codegen@dev.N can be tagged before ph-cli@dev.N exists, so\n// pinning every workspace dep to that version makes `pnpm i` fail with\n// ERR_PNPM_NO_MATCHING_VERSION. This matches the anchor the ph-cli migrate\n// command already uses (clis/ph-cli/src/services/migrate.ts).\nconst VERSION_ANCHOR_PACKAGE = \"@powerhousedao/ph-cli\";\n\n/* Uses the npm cli's fetch function to get the version for a specified tag */\nexport async function getFullyQualifiedWorkspacePackageVersion(\n versionOrTag: string,\n) {\n const isTag =\n versionOrTag === \"latest\" ||\n versionOrTag === \"staging\" ||\n versionOrTag === \"dev\";\n\n if (!isTag) return versionOrTag;\n const anchorPackageName =\n WORKSPACE_PACKAGES.find(\n (pkg) => pkg.manifest.name === VERSION_ANCHOR_PACKAGE,\n )?.manifest.name ?? WORKSPACE_PACKAGES[0].manifest.name!;\n const result = (await npmFetch.json(anchorPackageName)) as {\n \"dist-tags\": Record<\"latest\" | \"staging\" | \"dev\", string>;\n };\n return result[\"dist-tags\"][versionOrTag];\n}\n\nexport function fixLegacyImportPaths(\n project: Project,\n packageName: string | undefined,\n) {\n if (!packageName) {\n console.error(\"No package name found in package.json.\");\n return;\n }\n const sourceFiles = project.getSourceFiles();\n for (const sourceFile of sourceFiles) {\n const importStatements = sourceFile.getImportDeclarations();\n for (const importStatement of importStatements) {\n const namedImports = map(\n importStatement.getNamedImports(),\n (importSpecifier) => importSpecifier.getText(),\n );\n const moduleSpecifier = importStatement.getModuleSpecifier();\n const moduleSpecifierText = moduleSpecifier.getLiteralText();\n // remove usage of the old `package-name/` style paths\n if (moduleSpecifierText.includes(packageName)) {\n moduleSpecifier.setLiteralValue(\n moduleSpecifierText.replace(`${packageName}/`, \"\"),\n );\n }\n // I saw this invalid import enough that it seemed worthwhile to fix it here\n if (namedImports.includes(\"generateMock\")) {\n moduleSpecifier.setLiteralValue(\"document-model\");\n }\n // attempt to fix absolute import paths for document models like `../../../document-models/model/something/something.js`\n // these don't work anymore with the versioned document models, since the absolute file paths are different\n const match = moduleSpecifierText.match(\n /^(\\.\\.\\/)+document-models\\/([^/]+)(?!\\/v\\d+(?:\\/|$))(?:\\/.*)?$/,\n );\n\n if (match) {\n moduleSpecifier.setLiteralValue(`document-models/${match[2]}`);\n }\n }\n }\n}\n\nfunction isProtectedVersionSpec(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n (value.startsWith(\"workspace:\") || value.startsWith(\"catalog:\"))\n );\n}\n\n// Keeps user-declared `workspace:*` / `catalog:` refs intact when the caller\n// would otherwise replace them with a hard pin during migration.\nfunction preserveProtected(\n newValues: Record<string, string>,\n existingSources: ReadonlyArray<\n Partial<Record<string, string | undefined>> | undefined\n >,\n): Record<string, string> {\n const result: Record<string, string> = { ...newValues };\n for (const key of Object.keys(newValues)) {\n for (const source of existingSources) {\n const existing = source?.[key];\n if (isProtectedVersionSpec(existing)) {\n result[key] = existing;\n break;\n }\n }\n }\n return result;\n}\n\nexport async function migrate(version: string, projectDir = process.cwd()) {\n const fullyQualifiedVersion =\n await getFullyQualifiedWorkspacePackageVersion(version);\n\n const packageJson = await readPackage({\n cwd: projectDir,\n normalize: false,\n });\n const exports = packageJsonExports;\n const scripts = merge(packageJson.scripts, packageScripts);\n const workspacePackageNames = filter(\n map(WORKSPACE_PACKAGES, prop(\"manifest\", \"name\")),\n isTruthy,\n );\n\n const features = detectFeatures(projectDir);\n const featurePeerVersioned = features.flatMap(\n (f) => FEATURE_DEPENDENCIES[f].peerVersioned as readonly string[],\n );\n const featurePeerExternal = features.reduce<\n Record<string, { peer: string; dev: string }>\n >((acc, f) => ({ ...acc, ...FEATURE_DEPENDENCIES[f].peerExternal }), {});\n\n const managedPeerVersioned = [\n ...VERSIONED_PEER_DEPENDENCIES,\n ...featurePeerVersioned,\n ];\n const managedPeerNames = [\n ...managedPeerVersioned,\n ...keys(PEER_EXTERNAL_DEPENDENCIES),\n ...keys(featurePeerExternal),\n ];\n const managedDevVersioned = [\n ...VERSIONED_DEV_DEPENDENCIES,\n ...managedPeerVersioned,\n ];\n const managedDevNames = [\n ...managedDevVersioned,\n ...keys(externalDevDependencies),\n ...keys(featurePeerExternal),\n ];\n\n const peerExternals = {\n ...mapValues(PEER_EXTERNAL_DEPENDENCIES, (v) => v.peer),\n ...mapValues(featurePeerExternal, (v) => v.peer),\n };\n const peerDevPins = {\n ...mapValues(PEER_EXTERNAL_DEPENDENCIES, (v) => v.dev),\n ...mapValues(featurePeerExternal, (v) => v.dev),\n };\n\n const existingDepSources = [\n packageJson.dependencies,\n packageJson.devDependencies,\n packageJson.peerDependencies,\n ];\n\n const peerDependencies = pipe(\n packageJson.peerDependencies ?? {},\n omit([...managedDevNames, ...LEGACY_LINT_FORMAT_DEPENDENCIES]),\n merge(\n preserveProtected(\n {\n ...fromKeys(managedPeerVersioned, () => fullyQualifiedVersion),\n ...peerExternals,\n },\n existingDepSources,\n ),\n ),\n mapValues((value, key) =>\n isProtectedVersionSpec(value)\n ? value\n : workspacePackageNames.includes(key)\n ? fullyQualifiedVersion\n : value,\n ),\n sortByKey,\n );\n\n const devDependencies = pipe(\n merge(packageJson.dependencies ?? {}, packageJson.devDependencies ?? {}),\n omit([...managedPeerNames, ...LEGACY_LINT_FORMAT_DEPENDENCIES]),\n merge(\n preserveProtected(\n {\n ...fromKeys(managedDevVersioned, () => fullyQualifiedVersion),\n ...externalDevDependencies,\n ...peerDevPins,\n },\n existingDepSources,\n ),\n ),\n mapValues((value, key) =>\n isProtectedVersionSpec(value)\n ? value\n : workspacePackageNames.includes(key)\n ? fullyQualifiedVersion\n : value,\n ),\n sortByKey,\n );\n\n console.log(\"Updating package.json...\");\n const updatedPackageJson: PackageJson = {\n ...packageJson,\n type: packageJson.type ?? \"module\",\n sideEffects: packageJson.sideEffects ?? false,\n files: packageJson.files ?? [\"/dist\"],\n exports,\n scripts,\n peerDependencies,\n devDependencies,\n } as PackageJson;\n // Runtime `dependencies` block is no longer emitted — the bundled dist\n // self-contains everything except the declared peers.\n delete (updatedPackageJson as { dependencies?: unknown }).dependencies;\n await writePackage(projectDir, updatedPackageJson);\n\n console.log(\"Removing legacy lint/format config files...\");\n removeLegacyLintFormatFiles(projectDir);\n console.log(\"Overwriting project root files...\");\n await writeAllGeneratedProjectFiles(projectDir);\n console.log(\"Moving unversioned document models...\");\n moveLegacyDocumentModels(projectDir);\n const project = buildTsMorphProject(projectDir);\n console.log(\"Fixing legacy import paths...\");\n fixLegacyImportPaths(project, packageJson.name);\n console.log(\"Installing dependencies...\");\n await installProjectDependencies(projectDir);\n console.log(\"Re-generating code...\");\n await generateAll(project);\n await project.save();\n}\n\nfunction removeLegacyLintFormatFiles(projectDir: string) {\n for (const name of LEGACY_LINT_FORMAT_FILES) {\n rmSync(join(projectDir, name), { force: true });\n }\n}\n\nasync function installProjectDependencies(projectDir: string) {\n const agent = await getPackageManagerAtPowerhouseProjectDirPath(projectDir);\n if (!agent) {\n throw new Error(\n \"Failed to detect your package manager. Run install manually.\",\n );\n }\n const installCommand = await getPowerhouseProjectInstallCommand(agent);\n console.log(`Installing dependencies with \\`${agent}\\``);\n runCmd(installCommand, { cwd: projectDir });\n}\n\nfunction moveLegacyDocumentModels(projectDir: string) {\n const fileNamesToDelete = [\n \"actions.ts\",\n \"hooks.ts\",\n \"module.ts\",\n \"index.ts\",\n \"utils.ts\",\n \"schema.graphql\",\n ];\n const dirNamesToCopy = [\"src\", \"gen\"];\n const dirs = pipe(\n readdirSync(join(projectDir, \"document-models\"), { withFileTypes: true }),\n filter((entry) => entry.isDirectory()),\n filter(\n (dir) =>\n statSync(join(dir.parentPath, dir.name, `${dir.name}.json`), {\n throwIfNoEntry: false,\n })?.isFile() ?? false,\n ),\n map((dir) => join(dir.parentPath, dir.name)),\n );\n\n for (const dirPath of dirs) {\n for (const name of fileNamesToDelete) {\n const filePath = join(dirPath, name);\n rmSync(filePath, { force: true });\n }\n const versionDirPath = join(dirPath, \"v1\");\n const versionDirExists =\n statSync(versionDirPath, { throwIfNoEntry: false })?.isDirectory() ??\n false;\n if (!versionDirExists) {\n mkdirSync(versionDirPath);\n }\n for (const dirName of dirNamesToCopy) {\n const srcDirPath = join(dirPath, dirName);\n const srcDirExists =\n statSync(srcDirPath, { throwIfNoEntry: false })?.isDirectory() ?? false;\n if (!srcDirExists) continue;\n const destDirPath = join(versionDirPath, dirName);\n cpSync(srcDirPath, destDirPath, {\n recursive: true,\n force: false,\n errorOnExist: false,\n });\n rmSync(srcDirPath, {\n force: true,\n recursive: true,\n });\n }\n }\n}\n","import path from \"node:path\";\nimport { runCmd } from \"@powerhousedao/shared/clis\";\n/**\n * Clones a git repository and returns the path to the cloned project.\n * @param repositoryUrl - The URL of the git repository to clone\n * @returns The absolute path to the cloned project directory\n */\nexport function cloneRepository(repositoryUrl: string): string {\n try {\n console.log(\n \"\\x1b[33m\",\n `Cloning repository from ${repositoryUrl}...`,\n \"\\x1b[0m\",\n );\n runCmd(`git clone ${repositoryUrl}`);\n\n // Extract project name from repository URL\n // e.g., https://github.com/org/repo.git -> repo\n const repoName = repositoryUrl\n .split(\"/\")\n .pop()\n ?.replace(/\\.git$/, \"\");\n\n if (!repoName) {\n throw new Error(\"Could not determine project name from repository URL\");\n }\n\n const projectPath = path.join(process.cwd(), repoName);\n return projectPath;\n } catch (error) {\n console.log(error);\n throw error;\n }\n}\n\n/**\n * Installs dependencies in a project directory using the specified package manager.\n * @param projectPath - The absolute path to the project directory\n * @param packageManager - The package manager to use (npm, pnpm, yarn, bun)\n */\nexport function installDependencies(\n projectPath: string,\n packageManager: string,\n): void {\n try {\n process.chdir(projectPath);\n\n console.log(\n \"\\x1b[34m\",\n `Installing dependencies with ${packageManager}...`,\n \"\\x1b[0m\",\n );\n const extra =\n packageManager === \"pnpm\" ? \" --config.minimum-release-age=0\" : \"\";\n runCmd(`${packageManager} install --loglevel error${extra}`);\n\n console.log(\"\\x1b[32m\", \"Dependencies installed successfully!\", \"\\x1b[0m\");\n console.log();\n } catch (error) {\n console.log(error);\n throw error;\n }\n}\n","import { runCmd, writeFileEnsuringDir } from \"@powerhousedao/shared/clis\";\nimport chalk from \"chalk\";\nimport fs from \"node:fs\";\nimport path from \"path\";\nimport { gitIgnoreTemplate } from \"templates\";\nimport { runOxfmt } from \"utils\";\nimport {\n applyProjectCustomizations,\n writeAllGeneratedProjectFiles,\n writeProjectRootFiles,\n} from \"file-builders\";\n\n// Install recipes for `--clone`. Only managers with a cache-miss-fails\n// offline mode are listed; yarn needs an opt-in offline mirror and bun has\n// no real offline mode (https://github.com/oven-sh/bun/issues/7956).\ntype CloneRecipe = { lockfile: string; install: string };\nconst CLONE_RECIPES: Record<string, CloneRecipe | undefined> = {\n pnpm: {\n lockfile: \"pnpm-lock.yaml\",\n install: \"pnpm install --frozen-lockfile --offline\",\n },\n npm: {\n lockfile: \"package-lock.json\",\n install: \"npm ci --offline\",\n },\n};\n\ntype CreateProjectArgs = {\n name: string;\n packageManager: string;\n tag?: string;\n version?: string;\n remoteDrive?: string;\n skipGitInit?: boolean;\n skipInstall?: boolean;\n /**\n * Path to an existing scaffolded project to clone instead of generating +\n * resolving deps from scratch. The clone's source + pnpm-lock.yaml are\n * copied (node_modules is not — it's rebuilt from the lockfile via the warm\n * pnpm store with `pnpm install --frozen-lockfile --offline`). Requires\n * packageManager === \"pnpm\".\n */\n clone?: string;\n};\nexport async function createProject({\n name,\n packageManager,\n tag,\n version,\n remoteDrive,\n skipGitInit,\n skipInstall,\n clone,\n}: CreateProjectArgs) {\n const appPath = path.join(process.cwd(), name);\n\n if (fs.existsSync(appPath)) {\n throw new Error(\n `⛔ The folder \"${name}\" already exists in the current directory, please give it another name.`,\n );\n }\n\n if (clone) {\n await createProjectFromClone({\n name,\n appPath,\n clone,\n packageManager,\n skipGitInit,\n skipInstall,\n remoteDrive,\n });\n return;\n }\n\n // Create a new directory for the project\n console.log(chalk.blue(`▶️ Creating directory for project \"${name}\"...\\n`));\n fs.mkdirSync(appPath);\n process.chdir(appPath);\n console.log(chalk.green(`✅ Project directory created\\n`));\n\n await writeFileEnsuringDir(\".gitignore\", gitIgnoreTemplate);\n if (!skipGitInit) {\n // Create a .gitignore file, then initialize the git repository\n console.log(chalk.blue(`▶️ Initializing git repository...\\n`));\n runCmd(`git init`);\n console.log(chalk.green(`\\n✅ Git repository initialized\\n`));\n }\n\n // Write the boilerplate files for the project\n console.log(chalk.blue(`▶️ Creating project boilerplate files...\\n`));\n await writeProjectRootFiles({\n name,\n tag,\n version,\n remoteDrive,\n packageManager,\n });\n await writeAllGeneratedProjectFiles();\n console.log(chalk.green(`✅ Project boilerplate files created\\n`));\n\n if (!skipInstall) {\n // Install the project dependencies with the specified package manager\n console.log(\n chalk.blue(\n `▶️ Installing project dependencies with ${packageManager}...\\n`,\n ),\n );\n const extra =\n packageManager === \"pnpm\" ? \" --config.minimum-release-age=0\" : \"\";\n runCmd(`${packageManager} install${extra}`);\n console.log(chalk.green(`\\n✅ Project dependencies installed\\n`));\n }\n\n // Use the installed version of `oxfmt` to format the generated code\n console.log(chalk.blue(`▶️ Formatting boilerplate project files...\\n`));\n await runOxfmt();\n console.log(chalk.green(`✅ Boilerplate files formatted\\n`));\n\n // Project creation complete\n console.log(chalk.bold(`🎉 Successfully created project \"${name}\" 🎉\\n`));\n}\n\n/**\n * Fast path for `ph init --clone <path>`: copy an already-scaffolded project's\n * source + lockfile (NOT node_modules), re-apply the per-project\n * customizations, then rebuild node_modules with\n * `pnpm install --frozen-lockfile --offline`. pnpm materializes the tree from\n * the warm store via clone/hardlink — far faster and ~0 extra disk vs a fresh\n * resolve+install, and the lockfile guarantees an identical dependency set.\n * Requires the cloned project's packages to be present in the local pnpm\n * store (which is the case in an image where the source was scaffolded at\n * build).\n */\nasync function createProjectFromClone(args: {\n name: string;\n appPath: string;\n clone: string;\n packageManager: string;\n skipGitInit?: boolean;\n skipInstall?: boolean;\n remoteDrive?: string;\n}) {\n const {\n name,\n appPath,\n clone,\n packageManager,\n skipGitInit,\n skipInstall,\n remoteDrive,\n } = args;\n // --clone needs a package manager with a hard-offline install mode that\n // refuses to hit the network on a cache miss. pnpm and npm qualify; yarn\n // and bun do not (bun has no offline flag at all — cache misses silently\n // re-fetch).\n const recipe = CLONE_RECIPES[packageManager];\n if (!recipe) {\n throw new Error(\n `⛔ --clone is only compatible with --pnpm or --npm (got \"${packageManager}\").`,\n );\n }\n const clonePath = path.resolve(process.cwd(), clone);\n if (!fs.existsSync(clonePath) || !fs.statSync(clonePath).isDirectory()) {\n throw new Error(\n `⛔ Clone source \"${clone}\" not found (resolved to \"${clonePath}\"). Pass a path to an existing scaffolded project.`,\n );\n }\n if (!fs.existsSync(path.join(clonePath, recipe.lockfile))) {\n throw new Error(\n `⛔ Clone source \"${clone}\" has no ${recipe.lockfile}. --clone with --${packageManager} requires a committed lockfile.`,\n );\n }\n\n // Copy source + lockfile only; node_modules is rebuilt from the store below,\n // and the source's .git is irrelevant (we re-init fresh).\n console.log(chalk.blue(`▶️ Cloning project from \"${clone}\"...\\n`));\n fs.cpSync(clonePath, appPath, {\n recursive: true,\n filter: (src) => {\n const base = path.basename(src);\n // Skip deps (rebuilt from the lockfile), git history (re-init'd), and\n // build artifacts (regenerated) so the new project starts clean.\n return (\n base !== \"node_modules\" &&\n base !== \".git\" &&\n base !== \"dist\" &&\n !base.endsWith(\".tsbuildinfo\")\n );\n },\n });\n console.log(chalk.green(`✅ Project files cloned\\n`));\n\n if (!skipGitInit) {\n console.log(chalk.blue(`▶️ Initializing git repository...\\n`));\n runCmd(`git init`, { cwd: appPath });\n console.log(chalk.green(`\\n✅ Git repository initialized\\n`));\n }\n\n console.log(chalk.blue(`▶️ Applying project customizations...\\n`));\n await applyProjectCustomizations({ name, projectDir: appPath, remoteDrive });\n console.log(chalk.green(`✅ Project customizations applied\\n`));\n\n if (!skipInstall) {\n // Rebuild node_modules from the lockfile, offline, via the warm cache.\n console.log(\n chalk.blue(`▶️ Installing dependencies from lockfile (offline)...\\n`),\n );\n runCmd(recipe.install, { cwd: appPath });\n console.log(chalk.green(`\\n✅ Dependencies installed from lockfile\\n`));\n }\n\n console.log(\n chalk.bold(`🎉 Successfully cloned project \"${name}\" from \"${clone}\" 🎉\\n`),\n );\n}\n","import type { DeclarationManager } from \"../utilities/DeclarationManager.js\";\nimport type { DirectoryManager } from \"../utilities/DirectoryManager.js\";\nimport type { ImportManager } from \"../utilities/ImportManager.js\";\nimport type { GenerationContext } from \"./GenerationContext.js\";\n\nexport abstract class FileGenerator {\n constructor(\n protected importManager: ImportManager,\n protected directoryManager: DirectoryManager,\n protected declarationManager: DeclarationManager,\n ) {}\n\n abstract generate(context: GenerationContext): Promise<void>;\n}\n","import { camelCase, kebabCase, pascalCase } from \"change-case\";\nimport type { OperationErrorSpecification } from \"@powerhousedao/shared/document-model\";\nimport type {\n MethodDeclaration,\n ObjectLiteralExpression,\n SourceFile,\n} from \"ts-morph\";\nimport { SyntaxKind, VariableDeclarationKind } from \"ts-morph\";\nimport { FileGenerator } from \"./FileGenerator.js\";\nimport type {\n CodegenOperation,\n GenerationContext,\n} from \"./GenerationContext.js\";\n\nexport class ReducerGenerator extends FileGenerator {\n async generate(context: GenerationContext): Promise<void> {\n // Skip if no actions to generate\n if (context.operations.length === 0) return;\n\n const filePath = this.getOutputPath(context);\n const sourceFile = await this.directoryManager.createSourceFile(\n context.project,\n filePath,\n );\n\n const packageName = context.packageName;\n // Reducer-specific import logic\n const typeImportName = `${pascalCase(context.docModel.name)}${pascalCase(context.module.name)}Operations`;\n const typeImportPath = `${packageName}/document-models/${kebabCase(context.docModel.name)}`;\n\n // Import management (shared utility)\n this.importManager.replaceImportByName(\n sourceFile,\n typeImportName,\n typeImportPath,\n true,\n );\n\n // AST logic (specific to reducers)\n this.createReducerObject(sourceFile, typeImportName, context);\n\n // Detect and import error classes used in the actual reducer code (after generation)\n this.addErrorImports(sourceFile, context);\n\n await sourceFile.save();\n }\n\n private static getDefaultReducerCode(methodName: string): string[] {\n return [\n `// TODO: Implement \"${methodName}\" reducer`,\n `throw new Error('Reducer \"${methodName}\" not yet implemented');`,\n ];\n }\n\n private addErrorImports(\n sourceFile: SourceFile,\n context: GenerationContext,\n ): void {\n // Collect all errors from all operations\n const allErrors: OperationErrorSpecification[] = [];\n\n context.operations.forEach((operation) => {\n if (Array.isArray(operation.errors)) {\n operation.errors\n .filter((error) => error.name)\n .forEach((error) => {\n // Deduplicate errors by name\n if (!allErrors.find((e) => e.name === error.name)) {\n allErrors.push(error);\n }\n });\n }\n });\n\n if (allErrors.length === 0) return;\n\n // Analyze the actual source file content to find which errors are used\n const sourceFileContent = sourceFile.getFullText();\n const usedErrors = new Set<string>();\n\n allErrors.forEach((error) => {\n // Check if error class name is mentioned anywhere in the source file\n // Look for patterns like \"new ErrorName\" or \"throw ErrorName\" or \"ErrorName(\"\n const errorPattern = new RegExp(`\\\\b${error.name}\\\\b`, \"g\");\n if (errorPattern.test(sourceFileContent)) {\n usedErrors.add(error.name!);\n }\n });\n\n // Add imports for used errors (only if they're not already imported)\n if (usedErrors.size > 0) {\n const errorImportPath = `../../gen/${kebabCase(context.module.name)}/error.js`;\n const errorClassNames = Array.from(usedErrors);\n\n // Check if imports already exist to avoid duplicates\n const existingImports = sourceFile.getImportDeclarations();\n const existingErrorImport = existingImports.find(\n (importDecl) =>\n importDecl.getModuleSpecifierValue() === errorImportPath,\n );\n\n if (existingErrorImport) {\n // Get already imported error names\n const existingNamedImports = existingErrorImport\n .getNamedImports()\n .map((namedImport) => namedImport.getName());\n\n // Only import errors that aren't already imported\n const newErrorsToImport = errorClassNames.filter(\n (errorName) => !existingNamedImports.includes(errorName),\n );\n\n if (newErrorsToImport.length > 0) {\n // Add new named imports to existing import declaration\n existingErrorImport.addNamedImports(newErrorsToImport);\n }\n } else {\n // Create new import declaration\n this.importManager.addNamedImports(\n sourceFile,\n errorClassNames,\n errorImportPath,\n );\n }\n }\n }\n\n private getOutputPath(context: GenerationContext): string {\n return this.directoryManager.getReducerPath(\n context.rootDir,\n context.docModel.name,\n context.module.name,\n );\n }\n\n private createReducerObject(\n sourceFile: SourceFile,\n typeName: string,\n context: GenerationContext,\n ): void {\n const { operations, forceUpdate } = context;\n const operationHandlersObjectName = `${camelCase(context.docModel.name)}${pascalCase(context.module.name)}Operations`;\n const legacyReducerVar = sourceFile.getVariableDeclaration(\"reducer\");\n if (legacyReducerVar) {\n this.declarationManager.renameVariable(\n sourceFile,\n \"reducer\",\n operationHandlersObjectName,\n );\n }\n let reducerVar = sourceFile.getVariableDeclaration(\n operationHandlersObjectName,\n );\n if (!reducerVar) {\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: operationHandlersObjectName,\n type: typeName,\n initializer: \"{}\",\n },\n ],\n });\n reducerVar = sourceFile.getVariableDeclarationOrThrow(\n operationHandlersObjectName,\n );\n } else {\n // Ensure correct type\n const typeNode = reducerVar.getTypeNode();\n if (!typeNode || typeNode.getText() !== typeName) {\n reducerVar.setType(typeName);\n }\n }\n\n const initializer = reducerVar.getInitializerIfKindOrThrow(\n SyntaxKind.ObjectLiteralExpression,\n );\n\n for (const operation of operations) {\n this.addReducerMethod(initializer, operation, forceUpdate);\n }\n }\n\n private addReducerMethod(\n objectLiteral: ObjectLiteralExpression,\n operation: CodegenOperation,\n forceUpdate = false,\n ): void {\n const actionName = camelCase(operation.name ?? \"\");\n if (!actionName) return;\n\n const methodName = `${actionName}Operation`;\n\n const reducerCode = operation.reducer?.trim();\n\n const existingReducer = objectLiteral\n .getProperty(methodName)\n ?.asKind(SyntaxKind.MethodDeclaration);\n\n // if reducer already exists but forceUpdate is true, update it\n if (existingReducer) {\n if (forceUpdate && reducerCode) {\n existingReducer.setBodyText(\"\");\n this.setReducerMethodCode(existingReducer, reducerCode);\n }\n return;\n }\n\n // if reducer doesn't exist, create it and set the code with the default code if no code is provided\n const method = objectLiteral.addMethod({\n name: methodName,\n parameters: [{ name: \"state\" }, { name: \"action\" }],\n });\n this.setReducerMethodCode(method, reducerCode);\n }\n\n private setReducerMethodCode(reducer: MethodDeclaration, code?: string) {\n reducer.addStatements(\n code ? [code] : ReducerGenerator.getDefaultReducerCode(reducer.getName()),\n );\n }\n}\n","import type { SourceFile } from \"ts-morph\";\n\nexport class DeclarationManager {\n renameVariable(\n sourceFile: SourceFile,\n oldName: string,\n newName: string,\n ): void {\n const variable = sourceFile.getVariableDeclaration(oldName);\n\n if (variable) {\n variable.getNameNode().replaceWithText(newName);\n sourceFile.saveSync();\n }\n }\n}\n","import type { PHProjectDirectories } from \"@powerhousedao/codegen\";\nimport { kebabCase, pascalCase } from \"change-case\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport type { Project, SourceFile } from \"ts-morph\";\n\nexport class DirectoryManager {\n private directories: Required<PHProjectDirectories> = {\n documentModelDir: \"document-model\",\n editorsDir: \"editors\",\n processorsDir: \"processors\",\n subgraphsDir: \"subgraphs\",\n };\n\n constructor(directories: PHProjectDirectories = {}) {\n this.directories = {\n ...this.directories,\n ...directories,\n };\n }\n async ensureExists(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (err) {\n console.error(`Failed to create directory: ${dirPath}`, err);\n throw err;\n }\n }\n\n // Path builders for different file types\n getReducerPath(\n rootDir: string,\n docModelName: string,\n moduleName: string,\n ): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"reducers\",\n `${kebabCase(moduleName)}.ts`,\n );\n }\n\n getActionsPath(\n rootDir: string,\n docModelName: string,\n moduleName: string,\n ): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"actions\",\n `${kebabCase(moduleName)}.ts`,\n );\n }\n\n getComponentPath(\n rootDir: string,\n docModelName: string,\n componentName: string,\n ): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"components\",\n `${pascalCase(componentName)}.tsx`,\n );\n }\n\n getTypesPath(rootDir: string, docModelName: string): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"types.ts\",\n );\n }\n\n async createSourceFile(\n project: Project,\n filePath: string,\n ): Promise<SourceFile> {\n await this.ensureExists(path.dirname(filePath));\n return (\n project.addSourceFileAtPathIfExists(filePath) ??\n project.createSourceFile(filePath, \"\", { overwrite: false })\n );\n }\n}\n","import type { ImportDeclaration, SourceFile } from \"ts-morph\";\n\nexport interface ImportSpec {\n moduleSpecifier: string;\n namedImports?: string[];\n defaultImport?: string;\n isTypeOnly?: boolean;\n}\n\nexport class ImportManager {\n addImport(sourceFile: SourceFile, spec: ImportSpec): void {\n // Check if import already exists\n const existing = sourceFile.getImportDeclaration(\n (imp) => imp.getFullText() === spec.moduleSpecifier,\n );\n if (existing) {\n this.mergeImports(existing, spec);\n } else {\n sourceFile.addImportDeclaration(spec);\n }\n }\n\n addTypeImport(sourceFile: SourceFile, typeName: string, path: string): void {\n this.addImport(sourceFile, {\n moduleSpecifier: path,\n namedImports: [typeName],\n isTypeOnly: true,\n });\n }\n\n addNamedImports(\n sourceFile: SourceFile,\n imports: string[],\n path: string,\n ): void {\n this.addImport(sourceFile, {\n moduleSpecifier: path,\n namedImports: imports,\n });\n }\n\n private mergeImports(\n existingImport: ImportDeclaration,\n newSpec: ImportSpec,\n ): void {\n // Logic to merge named imports if they don't already exist\n if (newSpec.namedImports) {\n const existingNames = existingImport\n .getNamedImports()\n .map((ni) => ni.getName());\n const newNames = newSpec.namedImports.filter(\n (name) => !existingNames.includes(name),\n );\n\n if (newNames.length > 0) {\n existingImport.addNamedImports(newNames);\n }\n }\n }\n\n replaceImportByName(\n sourceFile: SourceFile,\n name: string,\n path: string,\n isTypeOnly = false,\n ): void {\n const existing = sourceFile\n .getImportDeclarations()\n .filter((imp) =>\n imp.getNamedImports().find((ni) => ni.getName() === name),\n );\n existing.forEach((imp) => imp.remove());\n sourceFile.addImportDeclaration({\n moduleSpecifier: path,\n namedImports: [name],\n isTypeOnly,\n });\n sourceFile.saveSync();\n }\n}\n","import type {\n DocumentModelGlobalState,\n ModuleSpecification,\n} from \"@powerhousedao/shared/document-model\";\nimport fs from \"fs/promises\";\nimport { Project } from \"ts-morph\";\nimport { DeclarationManager } from \"../utilities/DeclarationManager.js\";\nimport { DirectoryManager } from \"../utilities/DirectoryManager.js\";\nimport { ImportManager } from \"../utilities/ImportManager.js\";\nimport type { FileGenerator } from \"./FileGenerator.js\";\nimport type {\n CodeGeneratorOptions,\n CodegenOperation,\n GenerationContext,\n PHProjectDirectories,\n} from \"./GenerationContext.js\";\nimport { ReducerGenerator } from \"./ReducerGenerator.js\";\n\nexport class TSMorphCodeGenerator {\n private project = new Project();\n private generators = new Map<string, FileGenerator>();\n private directories: PHProjectDirectories = {\n documentModelDir: \"document-model\",\n editorsDir: \"editors\",\n processorsDir: \"processors\",\n subgraphsDir: \"subgraphs\",\n };\n private forceUpdate = false;\n\n constructor(\n private rootDir: string,\n private docModels: DocumentModelGlobalState[],\n private packageName: string,\n options: CodeGeneratorOptions = { directories: {}, forceUpdate: false },\n ) {\n this.directories = {\n ...this.directories,\n ...options.directories,\n };\n this.packageName = packageName;\n this.forceUpdate = options.forceUpdate ?? false;\n\n this.setupGenerators();\n }\n\n private setupGenerators(): void {\n const importManager = new ImportManager();\n const directoryManager = new DirectoryManager(this.directories);\n const declarationManager = new DeclarationManager();\n // Register all generators\n this.generators.set(\n \"reducers\",\n new ReducerGenerator(importManager, directoryManager, declarationManager),\n );\n }\n\n // Generate specific file types\n async generateReducers(): Promise<void> {\n await this.generateFileType(\"reducers\");\n }\n\n // Generate everything\n async generateAll(): Promise<void> {\n for (const [type] of this.generators) {\n await this.generateFileType(type);\n }\n }\n\n private async generateFileType(type: string): Promise<void> {\n const generator = this.generators.get(type);\n if (!generator) {\n throw new Error(`No generator registered for type: ${type}`);\n }\n\n await this.setupProject();\n\n for (const docModel of this.docModels) {\n const latestSpec =\n docModel.specifications[docModel.specifications.length - 1];\n\n for (const module of latestSpec.modules) {\n const context = this.createGenerationContext(\n docModel,\n module,\n this.forceUpdate,\n );\n\n await generator.generate(context);\n }\n }\n }\n\n private async setupProject(): Promise<void> {\n // Only load files from configured directories\n const sourcePaths: string[] = [];\n\n if (this.directories.documentModelDir) {\n const dirPath = `${this.rootDir}/${this.directories.documentModelDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n if (this.directories.editorsDir) {\n const dirPath = `${this.rootDir}/${this.directories.editorsDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n if (this.directories.processorsDir) {\n const dirPath = `${this.rootDir}/${this.directories.processorsDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n if (this.directories.subgraphsDir) {\n const dirPath = `${this.rootDir}/${this.directories.subgraphsDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n\n // Exclude node_modules from all paths\n sourcePaths.push(`!${this.rootDir}/**/node_modules/**`);\n\n if (sourcePaths.length > 0) {\n this.project.addSourceFilesAtPaths(sourcePaths);\n }\n }\n\n private createGenerationContext(\n docModel: DocumentModelGlobalState,\n module: ModuleSpecification,\n forceUpdate = false,\n ): GenerationContext {\n const operations: CodegenOperation[] = module.operations.map((op) => ({\n ...op,\n hasInput: op.schema !== null,\n scope: op.scope || \"global\",\n state: op.scope === \"global\" ? \"\" : op.scope,\n }));\n\n return {\n rootDir: this.rootDir,\n packageName: this.packageName,\n docModel,\n module,\n project: this.project,\n operations,\n forceUpdate,\n };\n }\n\n private async ensureDirectoryExists(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (err) {\n console.error(`Failed to create directory: ${dirPath}`, err);\n throw err;\n }\n }\n}\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACe,MAChB,QAAQ,IAAI,SAAS,SAAS,uBAChC,EAAE,SAAS,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["readdirSync","join","path","fs","fs","fs"],"sources":["../src/codegen/utils.ts","../src/codegen/features.ts","../src/codegen/generate.ts","../src/codegen/get-version.ts","../src/codegen/kysely.ts","../src/codegen/migrate.ts","../src/create-lib/checkout-project.ts","../src/create-lib/create-project.ts","../src/ts-morph-generator/core/FileGenerator.ts","../src/ts-morph-generator/core/ReducerGenerator.ts","../src/ts-morph-generator/utilities/DeclarationManager.ts","../src/ts-morph-generator/utilities/DirectoryManager.ts","../src/ts-morph-generator/utilities/ImportManager.ts","../src/ts-morph-generator/core/TSMorphCodeGenerator.ts"],"sourcesContent":["import type {\n DocumentModelDocument,\n DocumentModelGlobalState,\n} from \"@powerhousedao/shared/document-model\";\nimport { documentModelReducer } from \"@powerhousedao/shared/document-model\";\nimport { baseLoadFromFile } from \"document-model/node\";\nimport { readFile } from \"node:fs/promises\";\n\nexport function sortByKey<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).sort(([a], [b]) => a.localeCompare(b)),\n ) as T;\n}\n\nexport async function loadDocumentModel(\n path: string,\n): Promise<DocumentModelGlobalState> {\n let documentModel: DocumentModelGlobalState;\n try {\n if (!path) {\n throw new Error(\"Document model file not specified\");\n } else if (path.endsWith(\".zip\") || path.endsWith(\".phd\")) {\n const file = await baseLoadFromFile(path, documentModelReducer);\n documentModel = file.state.global;\n } else if (path.endsWith(\".json\")) {\n const data = await readFile(path, \"utf-8\");\n const parsedData = JSON.parse(data) as DocumentModelDocument;\n if (\"state\" in parsedData) {\n documentModel = parsedData.state.global;\n } else {\n documentModel = parsedData;\n }\n } else {\n throw new Error(\"File type not supported. Must be zip, phd, or json.\");\n }\n return documentModel;\n } catch (error) {\n throw (error as { code?: string }).code === \"MODULE_NOT_FOUND\"\n ? new Error(`Document model not found.`)\n : error;\n }\n}\n","import {\n ANALYTICS_ENGINE_CORE_PACKAGE,\n FEATURE_DEPENDENCIES,\n} from \"@powerhousedao/shared/clis\";\nimport { readdirSync, readFileSync, statSync } from \"fs\";\nimport { join } from \"path\";\nimport { type PackageJson, readPackage } from \"read-pkg\";\nimport { writePackage } from \"write-package\";\nimport { sortByKey } from \"./utils.js\";\n\nexport type Feature = keyof typeof FEATURE_DEPENDENCIES;\n\nfunction hasAnalyticsProcessor(processorsDir: string): boolean {\n const entries = readdirSync(processorsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const dir = join(processorsDir, entry.name);\n // processor.ts is the current shape; index.ts is the pre-migrate fallback.\n for (const filename of [\"processor.ts\", \"index.ts\"]) {\n try {\n const contents = readFileSync(join(dir, filename), \"utf-8\");\n if (contents.includes(ANALYTICS_ENGINE_CORE_PACKAGE)) return true;\n } catch {\n // file missing — try next candidate\n }\n }\n }\n return false;\n}\n\nexport function detectFeatures(projectDir: string): Feature[] {\n const features: Feature[] = [];\n const processorsDir = join(projectDir, \"processors\");\n const processorsStat = statSync(processorsDir, { throwIfNoEntry: false });\n if (processorsStat?.isDirectory() && hasAnalyticsProcessor(processorsDir)) {\n features.push(\"analyticsProcessor\");\n }\n return features;\n}\n\n// Idempotently adds the peer + dev deps required by `features` to the\n// project's package.json. Reuses the existing `document-model` pin as the\n// version anchor for new workspace peers so generated entries stay in sync\n// with whatever migrate last wrote. No-op if the entries are already present.\nexport async function syncFeatureDependencies(\n features: readonly Feature[],\n projectDir: string,\n): Promise<void> {\n if (features.length === 0) return;\n\n const packageJson = await readPackage({ cwd: projectDir, normalize: false });\n\n const pinVersion =\n packageJson.peerDependencies?.[\"document-model\"] ??\n packageJson.devDependencies?.[\"document-model\"];\n if (!pinVersion) {\n throw new Error(\n \"Cannot sync feature dependencies: project is missing `document-model` in peer/devDependencies. Run `ph migrate` first.\",\n );\n }\n\n const peerDependencies = {\n ...(packageJson.peerDependencies ?? {}),\n } as Record<string, string>;\n const devDependencies = {\n ...(packageJson.devDependencies ?? {}),\n } as Record<string, string>;\n\n const added: string[] = [];\n for (const feature of features) {\n const spec = FEATURE_DEPENDENCIES[feature];\n for (const pkg of spec.peerVersioned) {\n if (peerDependencies[pkg] === undefined) {\n peerDependencies[pkg] = pinVersion;\n added.push(pkg);\n }\n if (devDependencies[pkg] === undefined) {\n devDependencies[pkg] = pinVersion;\n }\n }\n const peerExternal = spec.peerExternal as Record<\n string,\n { peer: string; dev: string }\n >;\n for (const [pkg, versionSpec] of Object.entries(peerExternal)) {\n if (peerDependencies[pkg] === undefined) {\n peerDependencies[pkg] = versionSpec.peer;\n added.push(pkg);\n }\n if (devDependencies[pkg] === undefined) {\n devDependencies[pkg] = versionSpec.dev;\n }\n }\n }\n\n if (added.length === 0) return;\n\n const updated = {\n ...packageJson,\n peerDependencies: sortByKey(peerDependencies),\n devDependencies: sortByKey(devDependencies),\n } as PackageJson;\n await writePackage(projectDir, updated);\n console.log(`Added peer/dev dependencies: ${added.join(\", \")}`);\n}\n","import { type DocumentModelGlobalState } from \"@powerhousedao/shared/document-model\";\nimport type { ProcessorApps } from \"@powerhousedao/shared/processors\";\nimport { kebabCase } from \"change-case\";\nimport {\n pruneManifestSection,\n tsMorphGenerateApp,\n tsMorphGenerateDocumentEditor,\n tsMorphGenerateDocumentModel,\n tsMorphGenerateProcessor,\n tsMorphGenerateSubgraph,\n} from \"file-builders\";\nimport { readdirSync } from \"node:fs\";\nimport {\n filter,\n isDefined,\n isIncludedIn,\n isTruthy,\n map,\n pipe,\n prop,\n unique,\n} from \"remeda\";\nimport type { Project } from \"ts-morph\";\nimport {\n getAppMetadata,\n getEditorMetadata,\n getOrCreateDirectory,\n getProcessorMetadata,\n getSubgraphMetadata,\n loadDocumentModelInDir,\n} from \"utils\";\nimport { loadDocumentModel } from \"./utils.js\";\n\nexport async function generateDocumentModel(\n documentModelState: DocumentModelGlobalState,\n project: Project,\n) {\n await tsMorphGenerateDocumentModel(documentModelState, project);\n}\n\n/* Runs generate for each document model json file found in the project's `document-models` directory */\nexport async function generateAllDocumentModels(project: Project) {\n const { directory: documentModelsDir } = getOrCreateDirectory(\n project,\n \"document-models\",\n );\n const documentModelsDirPath = documentModelsDir.getPath();\n const projectDir = documentModelsDir.getParentOrThrow().getPath();\n const documentModelStateFiles = pipe(\n readdirSync(documentModelsDirPath, { withFileTypes: true }),\n map(loadDocumentModelInDir),\n filter(isDefined),\n );\n\n for (const documentModelState of documentModelStateFiles) {\n await generateDocumentModel(documentModelState, project);\n }\n\n await pruneManifestSection(\n projectDir,\n \"documentModels\",\n documentModelStateFiles.map((s) => s.id),\n );\n}\nexport async function generateFromFile(filePath: string, project: Project) {\n // load document model spec from file\n const documentModelState = await loadDocumentModel(filePath);\n\n // delegate to shared generation function\n await generateDocumentModel(documentModelState, project);\n}\n\ntype GenerateEditorArgs = {\n editorName: string;\n documentTypes: string[];\n editorId?: string;\n editorDirName?: string;\n};\nexport async function generateEditor(\n args: GenerateEditorArgs,\n project: Project,\n) {\n const {\n editorName,\n documentTypes,\n editorId: editorIdArg,\n editorDirName,\n } = args;\n\n if (documentTypes.length > 1) {\n throw new Error(\"Multiple document types are not supported yet\");\n }\n\n const documentModelId = documentTypes[0];\n const editorId = editorIdArg || kebabCase(editorName);\n const editorDir = editorDirName || kebabCase(editorName);\n\n await tsMorphGenerateDocumentEditor({\n project,\n editorDir,\n documentModelId,\n editorName,\n editorId,\n });\n}\n\n/* Runs generate for all editors found in the project's `editors` directory.\n * Note: we intentionally filter out editors with the document type \"powerhouse/document-drive\".\n * These are handled separately by the `generateAllApps` function.\n */\nexport async function generateAllEditors(project: Project) {\n const { directory: editorsDir } = getOrCreateDirectory(project, \"editors\");\n const projectDir = editorsDir.getParentOrThrow().getPath();\n\n /* An editor's `id`, `name`, and `documentTypes` args can be found in the `module.ts` file */\n const editorsToAdd = pipe(\n editorsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getEditorMetadata(project, dirName)),\n filter(isTruthy),\n filter(\n ({ documentTypes }) =>\n !isIncludedIn(\"powerhouse/document-drive\", documentTypes),\n ),\n );\n\n for (const editorToAdd of editorsToAdd) {\n const {\n name: editorName,\n id: editorId,\n dirName: editorDirName,\n documentTypes,\n } = editorToAdd;\n\n await generateEditor(\n {\n editorName,\n editorId,\n editorDirName,\n documentTypes,\n },\n project,\n );\n }\n\n await pruneManifestSection(\n projectDir,\n \"editors\",\n editorsToAdd.map((e) => e.id),\n );\n}\n\ntype GenerateAppArgs = {\n appName: string;\n appId?: string;\n allowedDocumentTypes?: string[];\n isDragAndDropEnabled?: boolean;\n appDirName?: string;\n};\nexport async function generateApp(args: GenerateAppArgs, project: Project) {\n const {\n appName,\n appId,\n allowedDocumentTypes,\n isDragAndDropEnabled,\n appDirName,\n } = args;\n\n await tsMorphGenerateApp({\n project,\n editorDir: appDirName || kebabCase(appName),\n editorName: appName,\n editorId: appId ?? kebabCase(appName),\n allowedDocumentModelIds: allowedDocumentTypes ?? [],\n isDragAndDropEnabled: isDragAndDropEnabled ?? true,\n });\n}\n\n/* Runs generate for all apps found in the project's `editors` directory.\n * Note: we intentionally filter out editors which do not have the document type \"powerhouse/document-drive\".\n * These are handled separately by the `generateAllEditors` function.\n */\nexport async function generateAllApps(project: Project) {\n const { directory: editorsDir } = getOrCreateDirectory(project, \"editors\");\n const projectDir = editorsDir.getParentOrThrow().getPath();\n\n /* An editor's `id`, `name`, and `documentTypes` args can be found in the `module.ts` file */\n const appsToAdd = pipe(\n editorsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getAppMetadata(project, dirName)),\n filter(isTruthy),\n );\n\n for (const appToAdd of appsToAdd) {\n const {\n name: appName,\n id: appId,\n dirName: appDirName,\n allowedDocumentTypes,\n isDragAndDropEnabled,\n } = appToAdd;\n await generateApp(\n {\n appName,\n appDirName,\n appId,\n allowedDocumentTypes,\n isDragAndDropEnabled,\n },\n project,\n );\n }\n\n await pruneManifestSection(\n projectDir,\n \"apps\",\n appsToAdd.map((a) => a.id),\n );\n}\nexport async function generateSubgraph(subgraphName: string, project: Project) {\n await tsMorphGenerateSubgraph({ subgraphName, project });\n}\n\n/* Runs generate for each directory found in the project's `subgraphs` directory */\nexport async function generateAllSubgraphs(project: Project) {\n const { directory: subgraphsDir } = getOrCreateDirectory(\n project,\n \"subgraphs\",\n );\n const projectDir = subgraphsDir.getParentOrThrow().getPath();\n /* The subgraph's name is found in the `index.ts` file */\n const subgraphNames = pipe(\n subgraphsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getSubgraphMetadata(project, dirName)),\n map(prop(\"subgraphName\")),\n filter(isDefined),\n unique(),\n );\n for (const subgraphName of subgraphNames) {\n await generateSubgraph(subgraphName, project);\n }\n\n await pruneManifestSection(\n projectDir,\n \"subgraphs\",\n subgraphNames.map((name) => kebabCase(name)),\n );\n}\n\nexport async function generateProcessor(\n args: {\n processorName: string;\n processorType: \"analytics\" | \"relationalDb\";\n processorApps: ProcessorApps;\n documentTypes: string[];\n },\n project: Project,\n) {\n return await tsMorphGenerateProcessor({\n project,\n ...args,\n });\n}\n\n/* Runs generate for each directory found in the project's `processors` directory */\nexport async function generateAllProcessors(project: Project) {\n const { directory: processorsDir } = getOrCreateDirectory(\n project,\n \"processors\",\n );\n const projectDir = processorsDir.getParentOrThrow().getPath();\n const processorsToGenerate = pipe(\n processorsDir.getDirectories(),\n map((dir) => dir.getBaseName()),\n map((dirName) => getProcessorMetadata(project, dirName)),\n );\n\n for (const processorArgs of processorsToGenerate) {\n await generateProcessor(processorArgs, project);\n }\n\n await pruneManifestSection(\n projectDir,\n \"processors\",\n processorsToGenerate.map((p) => kebabCase(p.processorName)),\n );\n}\n\n/* Runs each module type's generateAll{moduleType} function for the current project */\nexport async function generateAll(project: Project) {\n await generateAllDocumentModels(project);\n await generateAllEditors(project);\n await generateAllApps(project);\n await generateAllSubgraphs(project);\n await generateAllProcessors(project);\n}\n","declare const CODEGEN_VERSION: string | undefined;\n\nexport function getCodegenVersion(): string {\n if (typeof CODEGEN_VERSION !== \"undefined\") return CODEGEN_VERSION;\n return (\n process.env.WORKSPACE_VERSION ||\n process.env.npm_package_version ||\n \"unknown\"\n );\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join, resolve } from \"node:path\";\n\nfunction getKyselyPgLiteBin(): string {\n const require = createRequire(import.meta.url);\n\n const paths = require.resolve.paths(\"kysely-pglite\");\n if (paths) {\n for (const basePath of paths) {\n const pkgRoot = join(basePath, \"kysely-pglite\");\n const binPath = join(pkgRoot, \"bin/run.js\");\n\n if (existsSync(binPath)) {\n return binPath;\n }\n }\n }\n\n throw new Error(\"Could not find kysely-pglite/bin/run.js\");\n}\n\nexport interface IOptions {\n migrationFile: string;\n schemaFile?: string;\n}\n\nfunction runCommand(\n command: string,\n args: string[],\n cwd?: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: \"inherit\",\n shell: true,\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on(\"error\", (error) => {\n reject(error);\n });\n });\n}\n\nexport async function generateDBSchema({\n migrationFile,\n schemaFile,\n}: IOptions) {\n const outFile = schemaFile ?? resolve(migrationFile, \"../schema.ts\");\n\n try {\n const kyselyBinPath = getKyselyPgLiteBin();\n // Use kysely-pglite CLI to handle TypeScript compilation and module resolution\n await runCommand(\n \"node\",\n [kyselyBinPath, migrationFile, \"--outFile\", outFile],\n process.cwd(),\n );\n\n console.log(`Schema types generated at ${outFile}`);\n } catch (error) {\n console.error(\"Error running migration:\", error);\n }\n}\n","import {\n externalDevDependencies,\n FEATURE_DEPENDENCIES,\n getPackageManagerAtPowerhouseProjectDirPath,\n getPowerhouseProjectInstallCommand,\n LEGACY_LINT_FORMAT_DEPENDENCIES,\n LEGACY_LINT_FORMAT_FILES,\n packageJsonExports,\n packageScripts,\n PEER_EXTERNAL_DEPENDENCIES,\n runCmd,\n VERSIONED_DEV_DEPENDENCIES,\n VERSIONED_PEER_DEPENDENCIES,\n} from \"@powerhousedao/shared/clis\";\nimport console from \"console\";\nimport { writeAllGeneratedProjectFiles } from \"file-builders\";\nimport { cpSync, mkdirSync, readdirSync, rmSync, statSync } from \"fs\";\nimport npmFetch from \"npm-registry-fetch\";\nimport { join } from \"path\";\nimport { type PackageJson, readPackage } from \"read-pkg\";\nimport {\n filter,\n fromKeys,\n isTruthy,\n keys,\n map,\n mapValues,\n merge,\n omit,\n pipe,\n prop,\n} from \"remeda\";\nimport type { Project } from \"ts-morph\";\nimport { buildTsMorphProject } from \"utils\";\nimport { writePackage } from \"write-package\";\nimport { detectFeatures } from \"./features.js\";\nimport { generateAll } from \"./generate.js\";\nimport { sortByKey } from \"./utils.js\";\n\n// Anchor dist-tag resolution to ph-cli. Releases publish in topological order\n// (releaseGraph), so ph-cli — a top-level consumer — is published *after* its\n// workspace dependencies, and a dist-tag only moves once that package is\n// published. Resolving the tag against ph-cli therefore yields a version whose\n// entire workspace dependency closure is already on the registry. Anchoring to\n// an arbitrary `WORKSPACE_PACKAGES[0]` (e.g. codegen) instead races during the\n// publish window: codegen@dev.N can be tagged before ph-cli@dev.N exists, so\n// pinning every workspace dep to that version makes `pnpm i` fail with\n// ERR_PNPM_NO_MATCHING_VERSION. This matches the anchor the ph-cli migrate\n// command already uses (clis/ph-cli/src/services/migrate.ts).\nconst VERSION_ANCHOR_PACKAGE = \"@powerhousedao/ph-cli\";\n\n/* Uses the npm cli's fetch function to get the version for a specified tag */\nexport async function getFullyQualifiedWorkspacePackageVersion(\n versionOrTag: string,\n) {\n const isTag =\n versionOrTag === \"latest\" ||\n versionOrTag === \"staging\" ||\n versionOrTag === \"dev\";\n\n if (!isTag) return versionOrTag;\n const anchorPackageName =\n WORKSPACE_PACKAGES.find(\n (pkg) => pkg.manifest.name === VERSION_ANCHOR_PACKAGE,\n )?.manifest.name ?? WORKSPACE_PACKAGES[0].manifest.name!;\n const result = (await npmFetch.json(anchorPackageName)) as {\n \"dist-tags\": Record<\"latest\" | \"staging\" | \"dev\", string>;\n };\n return result[\"dist-tags\"][versionOrTag];\n}\n\nexport function fixLegacyImportPaths(\n project: Project,\n packageName: string | undefined,\n) {\n if (!packageName) {\n console.error(\"No package name found in package.json.\");\n return;\n }\n const sourceFiles = project.getSourceFiles();\n for (const sourceFile of sourceFiles) {\n const importStatements = sourceFile.getImportDeclarations();\n for (const importStatement of importStatements) {\n const namedImports = map(\n importStatement.getNamedImports(),\n (importSpecifier) => importSpecifier.getText(),\n );\n const moduleSpecifier = importStatement.getModuleSpecifier();\n const moduleSpecifierText = moduleSpecifier.getLiteralText();\n // remove usage of the old `package-name/` style paths\n if (moduleSpecifierText.includes(packageName)) {\n moduleSpecifier.setLiteralValue(\n moduleSpecifierText.replace(`${packageName}/`, \"\"),\n );\n }\n // I saw this invalid import enough that it seemed worthwhile to fix it here\n if (namedImports.includes(\"generateMock\")) {\n moduleSpecifier.setLiteralValue(\"document-model\");\n }\n // attempt to fix absolute import paths for document models like `../../../document-models/model/something/something.js`\n // these don't work anymore with the versioned document models, since the absolute file paths are different\n const match = moduleSpecifierText.match(\n /^(\\.\\.\\/)+document-models\\/([^/]+)(?!\\/v\\d+(?:\\/|$))(?:\\/.*)?$/,\n );\n\n if (match) {\n moduleSpecifier.setLiteralValue(`document-models/${match[2]}`);\n }\n }\n }\n}\n\nfunction isProtectedVersionSpec(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n (value.startsWith(\"workspace:\") || value.startsWith(\"catalog:\"))\n );\n}\n\n// Keeps user-declared `workspace:*` / `catalog:` refs intact when the caller\n// would otherwise replace them with a hard pin during migration.\nfunction preserveProtected(\n newValues: Record<string, string>,\n existingSources: ReadonlyArray<\n Partial<Record<string, string | undefined>> | undefined\n >,\n): Record<string, string> {\n const result: Record<string, string> = { ...newValues };\n for (const key of Object.keys(newValues)) {\n for (const source of existingSources) {\n const existing = source?.[key];\n if (isProtectedVersionSpec(existing)) {\n result[key] = existing;\n break;\n }\n }\n }\n return result;\n}\n\nexport async function migrate(version: string, projectDir = process.cwd()) {\n const fullyQualifiedVersion =\n await getFullyQualifiedWorkspacePackageVersion(version);\n\n const packageJson = await readPackage({\n cwd: projectDir,\n normalize: false,\n });\n const exports = packageJsonExports;\n const scripts = merge(packageJson.scripts, packageScripts);\n const workspacePackageNames = filter(\n map(WORKSPACE_PACKAGES, prop(\"manifest\", \"name\")),\n isTruthy,\n );\n\n const features = detectFeatures(projectDir);\n const featurePeerVersioned = features.flatMap(\n (f) => FEATURE_DEPENDENCIES[f].peerVersioned as readonly string[],\n );\n const featurePeerExternal = features.reduce<\n Record<string, { peer: string; dev: string }>\n >((acc, f) => ({ ...acc, ...FEATURE_DEPENDENCIES[f].peerExternal }), {});\n\n const managedPeerVersioned = [\n ...VERSIONED_PEER_DEPENDENCIES,\n ...featurePeerVersioned,\n ];\n const managedPeerNames = [\n ...managedPeerVersioned,\n ...keys(PEER_EXTERNAL_DEPENDENCIES),\n ...keys(featurePeerExternal),\n ];\n const managedDevVersioned = [\n ...VERSIONED_DEV_DEPENDENCIES,\n ...managedPeerVersioned,\n ];\n const managedDevNames = [\n ...managedDevVersioned,\n ...keys(externalDevDependencies),\n ...keys(featurePeerExternal),\n ];\n\n const peerExternals = {\n ...mapValues(PEER_EXTERNAL_DEPENDENCIES, (v) => v.peer),\n ...mapValues(featurePeerExternal, (v) => v.peer),\n };\n const peerDevPins = {\n ...mapValues(PEER_EXTERNAL_DEPENDENCIES, (v) => v.dev),\n ...mapValues(featurePeerExternal, (v) => v.dev),\n };\n\n const existingDepSources = [\n packageJson.dependencies,\n packageJson.devDependencies,\n packageJson.peerDependencies,\n ];\n\n const peerDependencies = pipe(\n packageJson.peerDependencies ?? {},\n omit([...managedDevNames, ...LEGACY_LINT_FORMAT_DEPENDENCIES]),\n merge(\n preserveProtected(\n {\n ...fromKeys(managedPeerVersioned, () => fullyQualifiedVersion),\n ...peerExternals,\n },\n existingDepSources,\n ),\n ),\n mapValues((value, key) =>\n isProtectedVersionSpec(value)\n ? value\n : workspacePackageNames.includes(key)\n ? fullyQualifiedVersion\n : value,\n ),\n sortByKey,\n );\n\n const devDependencies = pipe(\n merge(packageJson.dependencies ?? {}, packageJson.devDependencies ?? {}),\n omit([...managedPeerNames, ...LEGACY_LINT_FORMAT_DEPENDENCIES]),\n merge(\n preserveProtected(\n {\n ...fromKeys(managedDevVersioned, () => fullyQualifiedVersion),\n ...externalDevDependencies,\n ...peerDevPins,\n },\n existingDepSources,\n ),\n ),\n mapValues((value, key) =>\n isProtectedVersionSpec(value)\n ? value\n : workspacePackageNames.includes(key)\n ? fullyQualifiedVersion\n : value,\n ),\n sortByKey,\n );\n\n console.log(\"Updating package.json...\");\n const updatedPackageJson: PackageJson = {\n ...packageJson,\n type: packageJson.type ?? \"module\",\n sideEffects: packageJson.sideEffects ?? false,\n files: packageJson.files ?? [\"/dist\"],\n exports,\n scripts,\n peerDependencies,\n devDependencies,\n } as PackageJson;\n // Runtime `dependencies` block is no longer emitted — the bundled dist\n // self-contains everything except the declared peers.\n delete (updatedPackageJson as { dependencies?: unknown }).dependencies;\n await writePackage(projectDir, updatedPackageJson);\n\n console.log(\"Removing legacy lint/format config files...\");\n removeLegacyLintFormatFiles(projectDir);\n console.log(\"Overwriting project root files...\");\n await writeAllGeneratedProjectFiles(projectDir);\n console.log(\"Moving unversioned document models...\");\n moveLegacyDocumentModels(projectDir);\n const project = buildTsMorphProject(projectDir);\n console.log(\"Fixing legacy import paths...\");\n fixLegacyImportPaths(project, packageJson.name);\n console.log(\"Installing dependencies...\");\n await installProjectDependencies(projectDir);\n console.log(\"Re-generating code...\");\n await generateAll(project);\n await project.save();\n}\n\nfunction removeLegacyLintFormatFiles(projectDir: string) {\n for (const name of LEGACY_LINT_FORMAT_FILES) {\n rmSync(join(projectDir, name), { force: true });\n }\n}\n\nasync function installProjectDependencies(projectDir: string) {\n const agent = await getPackageManagerAtPowerhouseProjectDirPath(projectDir);\n if (!agent) {\n throw new Error(\n \"Failed to detect your package manager. Run install manually.\",\n );\n }\n const installCommand = await getPowerhouseProjectInstallCommand(agent);\n console.log(`Installing dependencies with \\`${agent}\\``);\n runCmd(installCommand, { cwd: projectDir });\n}\n\nfunction moveLegacyDocumentModels(projectDir: string) {\n const fileNamesToDelete = [\n \"actions.ts\",\n \"hooks.ts\",\n \"module.ts\",\n \"index.ts\",\n \"utils.ts\",\n \"schema.graphql\",\n ];\n const dirNamesToCopy = [\"src\", \"gen\"];\n const dirs = pipe(\n readdirSync(join(projectDir, \"document-models\"), { withFileTypes: true }),\n filter((entry) => entry.isDirectory()),\n filter(\n (dir) =>\n statSync(join(dir.parentPath, dir.name, `${dir.name}.json`), {\n throwIfNoEntry: false,\n })?.isFile() ?? false,\n ),\n map((dir) => join(dir.parentPath, dir.name)),\n );\n\n for (const dirPath of dirs) {\n for (const name of fileNamesToDelete) {\n const filePath = join(dirPath, name);\n rmSync(filePath, { force: true });\n }\n const versionDirPath = join(dirPath, \"v1\");\n const versionDirExists =\n statSync(versionDirPath, { throwIfNoEntry: false })?.isDirectory() ??\n false;\n if (!versionDirExists) {\n mkdirSync(versionDirPath);\n }\n for (const dirName of dirNamesToCopy) {\n const srcDirPath = join(dirPath, dirName);\n const srcDirExists =\n statSync(srcDirPath, { throwIfNoEntry: false })?.isDirectory() ?? false;\n if (!srcDirExists) continue;\n const destDirPath = join(versionDirPath, dirName);\n cpSync(srcDirPath, destDirPath, {\n recursive: true,\n force: false,\n errorOnExist: false,\n });\n rmSync(srcDirPath, {\n force: true,\n recursive: true,\n });\n }\n }\n}\n","import path from \"node:path\";\nimport { runCmd } from \"@powerhousedao/shared/clis\";\n/**\n * Clones a git repository and returns the path to the cloned project.\n * @param repositoryUrl - The URL of the git repository to clone\n * @returns The absolute path to the cloned project directory\n */\nexport function cloneRepository(repositoryUrl: string): string {\n try {\n console.log(\n \"\\x1b[33m\",\n `Cloning repository from ${repositoryUrl}...`,\n \"\\x1b[0m\",\n );\n runCmd(`git clone ${repositoryUrl}`);\n\n // Extract project name from repository URL\n // e.g., https://github.com/org/repo.git -> repo\n const repoName = repositoryUrl\n .split(\"/\")\n .pop()\n ?.replace(/\\.git$/, \"\");\n\n if (!repoName) {\n throw new Error(\"Could not determine project name from repository URL\");\n }\n\n const projectPath = path.join(process.cwd(), repoName);\n return projectPath;\n } catch (error) {\n console.log(error);\n throw error;\n }\n}\n\n/**\n * Installs dependencies in a project directory using the specified package manager.\n * @param projectPath - The absolute path to the project directory\n * @param packageManager - The package manager to use (npm, pnpm, yarn, bun)\n */\nexport function installDependencies(\n projectPath: string,\n packageManager: string,\n): void {\n try {\n process.chdir(projectPath);\n\n console.log(\n \"\\x1b[34m\",\n `Installing dependencies with ${packageManager}...`,\n \"\\x1b[0m\",\n );\n const extra =\n packageManager === \"pnpm\" ? \" --config.minimum-release-age=0\" : \"\";\n runCmd(`${packageManager} install --loglevel error${extra}`);\n\n console.log(\"\\x1b[32m\", \"Dependencies installed successfully!\", \"\\x1b[0m\");\n console.log();\n } catch (error) {\n console.log(error);\n throw error;\n }\n}\n","import { runCmd, writeFileEnsuringDir } from \"@powerhousedao/shared/clis\";\nimport chalk from \"chalk\";\nimport fs from \"node:fs\";\nimport path from \"path\";\nimport { gitIgnoreTemplate } from \"templates\";\nimport { runOxfmt } from \"utils\";\nimport {\n applyProjectCustomizations,\n writeAllGeneratedProjectFiles,\n writeProjectRootFiles,\n} from \"file-builders\";\n\n// Install recipes for `--clone`. Only managers with a cache-miss-fails\n// offline mode are listed; yarn needs an opt-in offline mirror and bun has\n// no real offline mode (https://github.com/oven-sh/bun/issues/7956).\ntype CloneRecipe = { lockfile: string; install: string };\nconst CLONE_RECIPES: Record<string, CloneRecipe | undefined> = {\n pnpm: {\n lockfile: \"pnpm-lock.yaml\",\n install: \"pnpm install --frozen-lockfile --offline\",\n },\n npm: {\n lockfile: \"package-lock.json\",\n install: \"npm ci --offline\",\n },\n};\n\ntype CreateProjectArgs = {\n name: string;\n packageManager: string;\n tag?: string;\n version?: string;\n remoteDrive?: string;\n skipGitInit?: boolean;\n skipInstall?: boolean;\n /**\n * Path to an existing scaffolded project to clone instead of generating +\n * resolving deps from scratch. The clone's source + pnpm-lock.yaml are\n * copied (node_modules is not — it's rebuilt from the lockfile via the warm\n * pnpm store with `pnpm install --frozen-lockfile --offline`). Requires\n * packageManager === \"pnpm\".\n */\n clone?: string;\n};\nexport async function createProject({\n name,\n packageManager,\n tag,\n version,\n remoteDrive,\n skipGitInit,\n skipInstall,\n clone,\n}: CreateProjectArgs) {\n const appPath = path.join(process.cwd(), name);\n\n if (fs.existsSync(appPath)) {\n throw new Error(\n `⛔ The folder \"${name}\" already exists in the current directory, please give it another name.`,\n );\n }\n\n if (clone) {\n await createProjectFromClone({\n name,\n appPath,\n clone,\n packageManager,\n skipGitInit,\n skipInstall,\n remoteDrive,\n });\n return;\n }\n\n // Create a new directory for the project\n console.log(chalk.blue(`▶️ Creating directory for project \"${name}\"...\\n`));\n fs.mkdirSync(appPath);\n process.chdir(appPath);\n console.log(chalk.green(`✅ Project directory created\\n`));\n\n await writeFileEnsuringDir(\".gitignore\", gitIgnoreTemplate);\n if (!skipGitInit) {\n // Create a .gitignore file, then initialize the git repository\n console.log(chalk.blue(`▶️ Initializing git repository...\\n`));\n runCmd(`git init`);\n console.log(chalk.green(`\\n✅ Git repository initialized\\n`));\n }\n\n // Write the boilerplate files for the project\n console.log(chalk.blue(`▶️ Creating project boilerplate files...\\n`));\n await writeProjectRootFiles({\n name,\n tag,\n version,\n remoteDrive,\n packageManager,\n });\n await writeAllGeneratedProjectFiles();\n console.log(chalk.green(`✅ Project boilerplate files created\\n`));\n\n if (!skipInstall) {\n // Install the project dependencies with the specified package manager\n console.log(\n chalk.blue(\n `▶️ Installing project dependencies with ${packageManager}...\\n`,\n ),\n );\n const extra =\n packageManager === \"pnpm\" ? \" --config.minimum-release-age=0\" : \"\";\n runCmd(`${packageManager} install${extra}`);\n console.log(chalk.green(`\\n✅ Project dependencies installed\\n`));\n }\n\n // Use the installed version of `oxfmt` to format the generated code\n console.log(chalk.blue(`▶️ Formatting boilerplate project files...\\n`));\n await runOxfmt();\n console.log(chalk.green(`✅ Boilerplate files formatted\\n`));\n\n // Project creation complete\n console.log(chalk.bold(`🎉 Successfully created project \"${name}\" 🎉\\n`));\n}\n\n/**\n * Fast path for `ph init --clone <path>`: copy an already-scaffolded project's\n * source + lockfile (NOT node_modules), re-apply the per-project\n * customizations, then rebuild node_modules with\n * `pnpm install --frozen-lockfile --offline`. pnpm materializes the tree from\n * the warm store via clone/hardlink — far faster and ~0 extra disk vs a fresh\n * resolve+install, and the lockfile guarantees an identical dependency set.\n * Requires the cloned project's packages to be present in the local pnpm\n * store (which is the case in an image where the source was scaffolded at\n * build).\n */\nasync function createProjectFromClone(args: {\n name: string;\n appPath: string;\n clone: string;\n packageManager: string;\n skipGitInit?: boolean;\n skipInstall?: boolean;\n remoteDrive?: string;\n}) {\n const {\n name,\n appPath,\n clone,\n packageManager,\n skipGitInit,\n skipInstall,\n remoteDrive,\n } = args;\n // --clone needs a package manager with a hard-offline install mode that\n // refuses to hit the network on a cache miss. pnpm and npm qualify; yarn\n // and bun do not (bun has no offline flag at all — cache misses silently\n // re-fetch).\n const recipe = CLONE_RECIPES[packageManager];\n if (!recipe) {\n throw new Error(\n `⛔ --clone is only compatible with --pnpm or --npm (got \"${packageManager}\").`,\n );\n }\n const clonePath = path.resolve(process.cwd(), clone);\n if (!fs.existsSync(clonePath) || !fs.statSync(clonePath).isDirectory()) {\n throw new Error(\n `⛔ Clone source \"${clone}\" not found (resolved to \"${clonePath}\"). Pass a path to an existing scaffolded project.`,\n );\n }\n if (!fs.existsSync(path.join(clonePath, recipe.lockfile))) {\n throw new Error(\n `⛔ Clone source \"${clone}\" has no ${recipe.lockfile}. --clone with --${packageManager} requires a committed lockfile.`,\n );\n }\n\n // Copy source + lockfile only; node_modules is rebuilt from the store below,\n // and the source's .git is irrelevant (we re-init fresh).\n console.log(chalk.blue(`▶️ Cloning project from \"${clone}\"...\\n`));\n fs.cpSync(clonePath, appPath, {\n recursive: true,\n filter: (src) => {\n const base = path.basename(src);\n // Skip deps (rebuilt from the lockfile), git history (re-init'd), and\n // build artifacts (regenerated) so the new project starts clean.\n return (\n base !== \"node_modules\" &&\n base !== \".git\" &&\n base !== \"dist\" &&\n !base.endsWith(\".tsbuildinfo\")\n );\n },\n });\n console.log(chalk.green(`✅ Project files cloned\\n`));\n\n if (!skipGitInit) {\n console.log(chalk.blue(`▶️ Initializing git repository...\\n`));\n runCmd(`git init`, { cwd: appPath });\n console.log(chalk.green(`\\n✅ Git repository initialized\\n`));\n }\n\n console.log(chalk.blue(`▶️ Applying project customizations...\\n`));\n await applyProjectCustomizations({ name, projectDir: appPath, remoteDrive });\n console.log(chalk.green(`✅ Project customizations applied\\n`));\n\n if (!skipInstall) {\n // Rebuild node_modules from the lockfile, offline, via the warm cache.\n console.log(\n chalk.blue(`▶️ Installing dependencies from lockfile (offline)...\\n`),\n );\n runCmd(recipe.install, { cwd: appPath });\n console.log(chalk.green(`\\n✅ Dependencies installed from lockfile\\n`));\n }\n\n console.log(\n chalk.bold(`🎉 Successfully cloned project \"${name}\" from \"${clone}\" 🎉\\n`),\n );\n}\n","import type { DeclarationManager } from \"../utilities/DeclarationManager.js\";\nimport type { DirectoryManager } from \"../utilities/DirectoryManager.js\";\nimport type { ImportManager } from \"../utilities/ImportManager.js\";\nimport type { GenerationContext } from \"./GenerationContext.js\";\n\nexport abstract class FileGenerator {\n constructor(\n protected importManager: ImportManager,\n protected directoryManager: DirectoryManager,\n protected declarationManager: DeclarationManager,\n ) {}\n\n abstract generate(context: GenerationContext): Promise<void>;\n}\n","import { camelCase, kebabCase, pascalCase } from \"change-case\";\nimport type { OperationErrorSpecification } from \"@powerhousedao/shared/document-model\";\nimport type {\n MethodDeclaration,\n ObjectLiteralExpression,\n SourceFile,\n} from \"ts-morph\";\nimport { SyntaxKind, VariableDeclarationKind } from \"ts-morph\";\nimport { FileGenerator } from \"./FileGenerator.js\";\nimport type {\n CodegenOperation,\n GenerationContext,\n} from \"./GenerationContext.js\";\n\nexport class ReducerGenerator extends FileGenerator {\n async generate(context: GenerationContext): Promise<void> {\n // Skip if no actions to generate\n if (context.operations.length === 0) return;\n\n const filePath = this.getOutputPath(context);\n const sourceFile = await this.directoryManager.createSourceFile(\n context.project,\n filePath,\n );\n\n const packageName = context.packageName;\n // Reducer-specific import logic\n const typeImportName = `${pascalCase(context.docModel.name)}${pascalCase(context.module.name)}Operations`;\n const typeImportPath = `${packageName}/document-models/${kebabCase(context.docModel.name)}`;\n\n // Import management (shared utility)\n this.importManager.replaceImportByName(\n sourceFile,\n typeImportName,\n typeImportPath,\n true,\n );\n\n // AST logic (specific to reducers)\n this.createReducerObject(sourceFile, typeImportName, context);\n\n // Detect and import error classes used in the actual reducer code (after generation)\n this.addErrorImports(sourceFile, context);\n\n await sourceFile.save();\n }\n\n private static getDefaultReducerCode(methodName: string): string[] {\n return [\n `// TODO: Implement \"${methodName}\" reducer`,\n `throw new Error('Reducer \"${methodName}\" not yet implemented');`,\n ];\n }\n\n private addErrorImports(\n sourceFile: SourceFile,\n context: GenerationContext,\n ): void {\n // Collect all errors from all operations\n const allErrors: OperationErrorSpecification[] = [];\n\n context.operations.forEach((operation) => {\n if (Array.isArray(operation.errors)) {\n operation.errors\n .filter((error) => error.name)\n .forEach((error) => {\n // Deduplicate errors by name\n if (!allErrors.find((e) => e.name === error.name)) {\n allErrors.push(error);\n }\n });\n }\n });\n\n if (allErrors.length === 0) return;\n\n // Analyze the actual source file content to find which errors are used\n const sourceFileContent = sourceFile.getFullText();\n const usedErrors = new Set<string>();\n\n allErrors.forEach((error) => {\n // Check if error class name is mentioned anywhere in the source file\n // Look for patterns like \"new ErrorName\" or \"throw ErrorName\" or \"ErrorName(\"\n const errorPattern = new RegExp(`\\\\b${error.name}\\\\b`, \"g\");\n if (errorPattern.test(sourceFileContent)) {\n usedErrors.add(error.name!);\n }\n });\n\n // Add imports for used errors (only if they're not already imported)\n if (usedErrors.size > 0) {\n const errorImportPath = `../../gen/${kebabCase(context.module.name)}/error.js`;\n const errorClassNames = Array.from(usedErrors);\n\n // Check if imports already exist to avoid duplicates\n const existingImports = sourceFile.getImportDeclarations();\n const existingErrorImport = existingImports.find(\n (importDecl) =>\n importDecl.getModuleSpecifierValue() === errorImportPath,\n );\n\n if (existingErrorImport) {\n // Get already imported error names\n const existingNamedImports = existingErrorImport\n .getNamedImports()\n .map((namedImport) => namedImport.getName());\n\n // Only import errors that aren't already imported\n const newErrorsToImport = errorClassNames.filter(\n (errorName) => !existingNamedImports.includes(errorName),\n );\n\n if (newErrorsToImport.length > 0) {\n // Add new named imports to existing import declaration\n existingErrorImport.addNamedImports(newErrorsToImport);\n }\n } else {\n // Create new import declaration\n this.importManager.addNamedImports(\n sourceFile,\n errorClassNames,\n errorImportPath,\n );\n }\n }\n }\n\n private getOutputPath(context: GenerationContext): string {\n return this.directoryManager.getReducerPath(\n context.rootDir,\n context.docModel.name,\n context.module.name,\n );\n }\n\n private createReducerObject(\n sourceFile: SourceFile,\n typeName: string,\n context: GenerationContext,\n ): void {\n const { operations, forceUpdate } = context;\n const operationHandlersObjectName = `${camelCase(context.docModel.name)}${pascalCase(context.module.name)}Operations`;\n const legacyReducerVar = sourceFile.getVariableDeclaration(\"reducer\");\n if (legacyReducerVar) {\n this.declarationManager.renameVariable(\n sourceFile,\n \"reducer\",\n operationHandlersObjectName,\n );\n }\n let reducerVar = sourceFile.getVariableDeclaration(\n operationHandlersObjectName,\n );\n if (!reducerVar) {\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: operationHandlersObjectName,\n type: typeName,\n initializer: \"{}\",\n },\n ],\n });\n reducerVar = sourceFile.getVariableDeclarationOrThrow(\n operationHandlersObjectName,\n );\n } else {\n // Ensure correct type\n const typeNode = reducerVar.getTypeNode();\n if (!typeNode || typeNode.getText() !== typeName) {\n reducerVar.setType(typeName);\n }\n }\n\n const initializer = reducerVar.getInitializerIfKindOrThrow(\n SyntaxKind.ObjectLiteralExpression,\n );\n\n for (const operation of operations) {\n this.addReducerMethod(initializer, operation, forceUpdate);\n }\n }\n\n private addReducerMethod(\n objectLiteral: ObjectLiteralExpression,\n operation: CodegenOperation,\n forceUpdate = false,\n ): void {\n const actionName = camelCase(operation.name ?? \"\");\n if (!actionName) return;\n\n const methodName = `${actionName}Operation`;\n\n const reducerCode = operation.reducer?.trim();\n\n const existingReducer = objectLiteral\n .getProperty(methodName)\n ?.asKind(SyntaxKind.MethodDeclaration);\n\n // if reducer already exists but forceUpdate is true, update it\n if (existingReducer) {\n if (forceUpdate && reducerCode) {\n existingReducer.setBodyText(\"\");\n this.setReducerMethodCode(existingReducer, reducerCode);\n }\n return;\n }\n\n // if reducer doesn't exist, create it and set the code with the default code if no code is provided\n const method = objectLiteral.addMethod({\n name: methodName,\n parameters: [{ name: \"state\" }, { name: \"action\" }],\n });\n this.setReducerMethodCode(method, reducerCode);\n }\n\n private setReducerMethodCode(reducer: MethodDeclaration, code?: string) {\n reducer.addStatements(\n code ? [code] : ReducerGenerator.getDefaultReducerCode(reducer.getName()),\n );\n }\n}\n","import type { SourceFile } from \"ts-morph\";\n\nexport class DeclarationManager {\n renameVariable(\n sourceFile: SourceFile,\n oldName: string,\n newName: string,\n ): void {\n const variable = sourceFile.getVariableDeclaration(oldName);\n\n if (variable) {\n variable.getNameNode().replaceWithText(newName);\n sourceFile.saveSync();\n }\n }\n}\n","import type { PHProjectDirectories } from \"@powerhousedao/codegen\";\nimport { kebabCase, pascalCase } from \"change-case\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport type { Project, SourceFile } from \"ts-morph\";\n\nexport class DirectoryManager {\n private directories: Required<PHProjectDirectories> = {\n documentModelDir: \"document-model\",\n editorsDir: \"editors\",\n processorsDir: \"processors\",\n subgraphsDir: \"subgraphs\",\n };\n\n constructor(directories: PHProjectDirectories = {}) {\n this.directories = {\n ...this.directories,\n ...directories,\n };\n }\n async ensureExists(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (err) {\n console.error(`Failed to create directory: ${dirPath}`, err);\n throw err;\n }\n }\n\n // Path builders for different file types\n getReducerPath(\n rootDir: string,\n docModelName: string,\n moduleName: string,\n ): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"reducers\",\n `${kebabCase(moduleName)}.ts`,\n );\n }\n\n getActionsPath(\n rootDir: string,\n docModelName: string,\n moduleName: string,\n ): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"actions\",\n `${kebabCase(moduleName)}.ts`,\n );\n }\n\n getComponentPath(\n rootDir: string,\n docModelName: string,\n componentName: string,\n ): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"components\",\n `${pascalCase(componentName)}.tsx`,\n );\n }\n\n getTypesPath(rootDir: string, docModelName: string): string {\n return path.join(\n rootDir,\n this.directories.documentModelDir,\n kebabCase(docModelName),\n \"src\",\n \"types.ts\",\n );\n }\n\n async createSourceFile(\n project: Project,\n filePath: string,\n ): Promise<SourceFile> {\n await this.ensureExists(path.dirname(filePath));\n return (\n project.addSourceFileAtPathIfExists(filePath) ??\n project.createSourceFile(filePath, \"\", { overwrite: false })\n );\n }\n}\n","import type { ImportDeclaration, SourceFile } from \"ts-morph\";\n\nexport interface ImportSpec {\n moduleSpecifier: string;\n namedImports?: string[];\n defaultImport?: string;\n isTypeOnly?: boolean;\n}\n\nexport class ImportManager {\n addImport(sourceFile: SourceFile, spec: ImportSpec): void {\n // Check if import already exists\n const existing = sourceFile.getImportDeclaration(\n (imp) => imp.getFullText() === spec.moduleSpecifier,\n );\n if (existing) {\n this.mergeImports(existing, spec);\n } else {\n sourceFile.addImportDeclaration(spec);\n }\n }\n\n addTypeImport(sourceFile: SourceFile, typeName: string, path: string): void {\n this.addImport(sourceFile, {\n moduleSpecifier: path,\n namedImports: [typeName],\n isTypeOnly: true,\n });\n }\n\n addNamedImports(\n sourceFile: SourceFile,\n imports: string[],\n path: string,\n ): void {\n this.addImport(sourceFile, {\n moduleSpecifier: path,\n namedImports: imports,\n });\n }\n\n private mergeImports(\n existingImport: ImportDeclaration,\n newSpec: ImportSpec,\n ): void {\n // Logic to merge named imports if they don't already exist\n if (newSpec.namedImports) {\n const existingNames = existingImport\n .getNamedImports()\n .map((ni) => ni.getName());\n const newNames = newSpec.namedImports.filter(\n (name) => !existingNames.includes(name),\n );\n\n if (newNames.length > 0) {\n existingImport.addNamedImports(newNames);\n }\n }\n }\n\n replaceImportByName(\n sourceFile: SourceFile,\n name: string,\n path: string,\n isTypeOnly = false,\n ): void {\n const existing = sourceFile\n .getImportDeclarations()\n .filter((imp) =>\n imp.getNamedImports().find((ni) => ni.getName() === name),\n );\n existing.forEach((imp) => imp.remove());\n sourceFile.addImportDeclaration({\n moduleSpecifier: path,\n namedImports: [name],\n isTypeOnly,\n });\n sourceFile.saveSync();\n }\n}\n","import type {\n DocumentModelGlobalState,\n ModuleSpecification,\n} from \"@powerhousedao/shared/document-model\";\nimport fs from \"fs/promises\";\nimport { Project } from \"ts-morph\";\nimport { DeclarationManager } from \"../utilities/DeclarationManager.js\";\nimport { DirectoryManager } from \"../utilities/DirectoryManager.js\";\nimport { ImportManager } from \"../utilities/ImportManager.js\";\nimport type { FileGenerator } from \"./FileGenerator.js\";\nimport type {\n CodeGeneratorOptions,\n CodegenOperation,\n GenerationContext,\n PHProjectDirectories,\n} from \"./GenerationContext.js\";\nimport { ReducerGenerator } from \"./ReducerGenerator.js\";\n\nexport class TSMorphCodeGenerator {\n private project = new Project();\n private generators = new Map<string, FileGenerator>();\n private directories: PHProjectDirectories = {\n documentModelDir: \"document-model\",\n editorsDir: \"editors\",\n processorsDir: \"processors\",\n subgraphsDir: \"subgraphs\",\n };\n private forceUpdate = false;\n\n constructor(\n private rootDir: string,\n private docModels: DocumentModelGlobalState[],\n private packageName: string,\n options: CodeGeneratorOptions = { directories: {}, forceUpdate: false },\n ) {\n this.directories = {\n ...this.directories,\n ...options.directories,\n };\n this.packageName = packageName;\n this.forceUpdate = options.forceUpdate ?? false;\n\n this.setupGenerators();\n }\n\n private setupGenerators(): void {\n const importManager = new ImportManager();\n const directoryManager = new DirectoryManager(this.directories);\n const declarationManager = new DeclarationManager();\n // Register all generators\n this.generators.set(\n \"reducers\",\n new ReducerGenerator(importManager, directoryManager, declarationManager),\n );\n }\n\n // Generate specific file types\n async generateReducers(): Promise<void> {\n await this.generateFileType(\"reducers\");\n }\n\n // Generate everything\n async generateAll(): Promise<void> {\n for (const [type] of this.generators) {\n await this.generateFileType(type);\n }\n }\n\n private async generateFileType(type: string): Promise<void> {\n const generator = this.generators.get(type);\n if (!generator) {\n throw new Error(`No generator registered for type: ${type}`);\n }\n\n await this.setupProject();\n\n for (const docModel of this.docModels) {\n const latestSpec =\n docModel.specifications[docModel.specifications.length - 1];\n\n for (const module of latestSpec.modules) {\n const context = this.createGenerationContext(\n docModel,\n module,\n this.forceUpdate,\n );\n\n await generator.generate(context);\n }\n }\n }\n\n private async setupProject(): Promise<void> {\n // Only load files from configured directories\n const sourcePaths: string[] = [];\n\n if (this.directories.documentModelDir) {\n const dirPath = `${this.rootDir}/${this.directories.documentModelDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n if (this.directories.editorsDir) {\n const dirPath = `${this.rootDir}/${this.directories.editorsDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n if (this.directories.processorsDir) {\n const dirPath = `${this.rootDir}/${this.directories.processorsDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n if (this.directories.subgraphsDir) {\n const dirPath = `${this.rootDir}/${this.directories.subgraphsDir}`;\n await this.ensureDirectoryExists(dirPath);\n sourcePaths.push(`${dirPath}/**/*.ts`);\n }\n\n // Exclude node_modules from all paths\n sourcePaths.push(`!${this.rootDir}/**/node_modules/**`);\n\n if (sourcePaths.length > 0) {\n this.project.addSourceFilesAtPaths(sourcePaths);\n }\n }\n\n private createGenerationContext(\n docModel: DocumentModelGlobalState,\n module: ModuleSpecification,\n forceUpdate = false,\n ): GenerationContext {\n const operations: CodegenOperation[] = module.operations.map((op) => ({\n ...op,\n hasInput: op.schema !== null,\n scope: op.scope || \"global\",\n state: op.scope === \"global\" ? \"\" : op.scope,\n }));\n\n return {\n rootDir: this.rootDir,\n packageName: this.packageName,\n docModel,\n module,\n project: this.project,\n operations,\n forceUpdate,\n };\n }\n\n private async ensureDirectoryExists(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (err) {\n console.error(`Failed to create directory: ${dirPath}`, err);\n throw err;\n }\n }\n}\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACe,MAChB,QAAQ,IAAI,SAAS,SAAS,uBAChC,EAAE,SAAS,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/codegen",
|
|
3
|
-
"version": "6.2.2-dev.
|
|
3
|
+
"version": "6.2.2-dev.38",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"write-json-file": "^7.0.0",
|
|
55
55
|
"write-package": "7.2.0",
|
|
56
56
|
"zod": "4.3.6",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
57
|
+
"@powerhousedao/shared": "6.2.2-dev.38",
|
|
58
|
+
"document-model": "6.2.2-dev.38"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@pnpm/find-workspace-dir": "^1000.1.5",
|