@powerhousedao/codegen 6.1.0-dev.14 → 6.1.0-dev.15

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 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.1.0-dev.14";
204
+ return "6.1.0-dev.15";
205
205
  }
206
206
  //#endregion
207
207
  //#region src/codegen/kysely.ts
@@ -252,7 +252,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
252
252
  "dir": "/home/runner/work/powerhouse/powerhouse/apps/academy",
253
253
  "manifest": {
254
254
  "name": "@powerhousedao/academy",
255
- "version": "6.1.0-dev.14",
255
+ "version": "6.1.0-dev.15",
256
256
  "homepage": "https://powerhouse.academy",
257
257
  "packageManager": "pnpm@10.9.0",
258
258
  "repository": {
@@ -319,7 +319,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
319
319
  "manifest": {
320
320
  "name": "@powerhousedao/connect",
321
321
  "productName": "Powerhouse-Connect",
322
- "version": "6.1.0-dev.14",
322
+ "version": "6.1.0-dev.15",
323
323
  "description": "Powerhouse Connect",
324
324
  "main": "dist/index.html",
325
325
  "type": "module",
@@ -438,7 +438,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
438
438
  "manifest": {
439
439
  "name": "@powerhousedao/switchboard",
440
440
  "type": "module",
441
- "version": "6.1.0-dev.14",
441
+ "version": "6.1.0-dev.15",
442
442
  "main": "dist/index.mjs",
443
443
  "exports": {
444
444
  ".": {
@@ -537,7 +537,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
537
537
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
538
538
  "manifest": {
539
539
  "name": "@powerhousedao/ph-cli",
540
- "version": "6.1.0-dev.14",
540
+ "version": "6.1.0-dev.15",
541
541
  "description": "",
542
542
  "license": "AGPL-3.0-only",
543
543
  "type": "module",
@@ -603,7 +603,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
603
603
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
604
604
  "manifest": {
605
605
  "name": "ph-cmd",
606
- "version": "6.1.0-dev.14",
606
+ "version": "6.1.0-dev.15",
607
607
  "description": "",
608
608
  "license": "AGPL-3.0-only",
609
609
  "type": "module",
@@ -649,7 +649,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
649
649
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
650
650
  "manifest": {
651
651
  "name": "@powerhousedao/analytics-engine-browser",
652
- "version": "6.1.0-dev.14",
652
+ "version": "6.1.0-dev.15",
653
653
  "license": "AGPL-3.0-only",
654
654
  "repository": {
655
655
  "type": "git",
@@ -695,7 +695,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
695
695
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
696
696
  "manifest": {
697
697
  "name": "@powerhousedao/analytics-engine-core",
698
- "version": "6.1.0-dev.14",
698
+ "version": "6.1.0-dev.15",
699
699
  "license": "AGPL-3.0-only",
700
700
  "repository": {
701
701
  "type": "git",
@@ -729,7 +729,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
729
729
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
730
730
  "manifest": {
731
731
  "name": "@powerhousedao/analytics-engine-graphql",
732
- "version": "6.1.0-dev.14",
732
+ "version": "6.1.0-dev.15",
733
733
  "license": "AGPL-3.0-only",
734
734
  "repository": {
735
735
  "type": "git",
@@ -763,7 +763,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
763
763
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
764
764
  "manifest": {
765
765
  "name": "@powerhousedao/analytics-engine-knex",
766
- "version": "6.1.0-dev.14",
766
+ "version": "6.1.0-dev.15",
767
767
  "license": "AGPL-3.0-only",
768
768
  "repository": {
769
769
  "type": "git",
@@ -801,7 +801,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
801
801
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
802
802
  "manifest": {
803
803
  "name": "@powerhousedao/analytics-engine-pg",
804
- "version": "6.1.0-dev.14",
804
+ "version": "6.1.0-dev.15",
805
805
  "license": "AGPL-3.0-only",
806
806
  "repository": {
807
807
  "type": "git",
@@ -840,7 +840,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
840
840
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
841
841
  "manifest": {
842
842
  "name": "@powerhousedao/builder-tools",
843
- "version": "6.1.0-dev.14",
843
+ "version": "6.1.0-dev.15",
844
844
  "type": "module",
845
845
  "license": "AGPL-3.0-only",
846
846
  "publishConfig": { "access": "public" },
@@ -883,7 +883,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
883
883
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
884
884
  "manifest": {
885
885
  "name": "@powerhousedao/codegen",
886
- "version": "6.1.0-dev.14",
886
+ "version": "6.1.0-dev.15",
887
887
  "license": "AGPL-3.0-only",
888
888
  "private": false,
889
889
  "type": "module",
@@ -958,7 +958,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
958
958
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
959
959
  "manifest": {
960
960
  "name": "@powerhousedao/common",
961
- "version": "6.1.0-dev.14",
961
+ "version": "6.1.0-dev.15",
962
962
  "license": "AGPL-3.0-only",
963
963
  "type": "module",
964
964
  "files": ["/dist"],
@@ -1013,7 +1013,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1013
1013
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
1014
1014
  "manifest": {
1015
1015
  "name": "@powerhousedao/config",
1016
- "version": "6.1.0-dev.14",
1016
+ "version": "6.1.0-dev.15",
1017
1017
  "description": "",
1018
1018
  "license": "AGPL-3.0-only",
1019
1019
  "private": false,
@@ -1050,7 +1050,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1050
1050
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
1051
1051
  "manifest": {
1052
1052
  "name": "@powerhousedao/design-system",
1053
- "version": "6.1.0-dev.14",
1053
+ "version": "6.1.0-dev.15",
1054
1054
  "description": "",
1055
1055
  "files": ["dist", "theme.css"],
1056
1056
  "type": "module",
@@ -1205,7 +1205,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1205
1205
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
1206
1206
  "manifest": {
1207
1207
  "name": "document-model",
1208
- "version": "6.1.0-dev.14",
1208
+ "version": "6.1.0-dev.15",
1209
1209
  "license": "AGPL-3.0-only",
1210
1210
  "private": false,
1211
1211
  "files": ["dist"],
@@ -1267,7 +1267,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1267
1267
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
1268
1268
  "manifest": {
1269
1269
  "name": "@powerhousedao/opentelemetry-instrumentation-reactor",
1270
- "version": "6.1.0-dev.14",
1270
+ "version": "6.1.0-dev.15",
1271
1271
  "description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
1272
1272
  "type": "module",
1273
1273
  "sideEffects": false,
@@ -1305,7 +1305,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1305
1305
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
1306
1306
  "manifest": {
1307
1307
  "name": "@powerhousedao/pglite-fs",
1308
- "version": "6.1.0-dev.14",
1308
+ "version": "6.1.0-dev.15",
1309
1309
  "license": "AGPL-3.0-only",
1310
1310
  "type": "module",
1311
1311
  "repository": {
@@ -1340,7 +1340,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1340
1340
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
1341
1341
  "manifest": {
1342
1342
  "name": "@powerhousedao/powerhouse-vetra-packages",
1343
- "version": "6.1.0-dev.14",
1343
+ "version": "6.1.0-dev.15",
1344
1344
  "description": "",
1345
1345
  "keywords": [],
1346
1346
  "author": "",
@@ -1463,7 +1463,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1463
1463
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
1464
1464
  "manifest": {
1465
1465
  "name": "@powerhousedao/reactor",
1466
- "version": "6.1.0-dev.14",
1466
+ "version": "6.1.0-dev.15",
1467
1467
  "description": "",
1468
1468
  "repository": {
1469
1469
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -1523,7 +1523,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1523
1523
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
1524
1524
  "manifest": {
1525
1525
  "name": "@powerhousedao/reactor-api",
1526
- "version": "6.1.0-dev.14",
1526
+ "version": "6.1.0-dev.15",
1527
1527
  "description": "",
1528
1528
  "type": "module",
1529
1529
  "repository": {
@@ -1658,7 +1658,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1658
1658
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
1659
1659
  "manifest": {
1660
1660
  "name": "@powerhousedao/reactor-attachments",
1661
- "version": "6.1.0-dev.14",
1661
+ "version": "6.1.0-dev.15",
1662
1662
  "license": "AGPL-3.0-only",
1663
1663
  "type": "module",
1664
1664
  "repository": {
@@ -1695,7 +1695,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1695
1695
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
1696
1696
  "manifest": {
1697
1697
  "name": "@powerhousedao/reactor-browser",
1698
- "version": "6.1.0-dev.14",
1698
+ "version": "6.1.0-dev.15",
1699
1699
  "license": "AGPL-3.0-only",
1700
1700
  "type": "module",
1701
1701
  "repository": {
@@ -1784,10 +1784,11 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1784
1784
  "react": "catalog:",
1785
1785
  "react-dom": "catalog:",
1786
1786
  "tsdown": "catalog:",
1787
+ "type-fest": "catalog:",
1788
+ "viem": "~2.50.4",
1787
1789
  "vite": "catalog:",
1788
1790
  "vitest": "catalog:",
1789
- "vitest-browser-react": "^1.0.1",
1790
- "type-fest": "catalog:"
1791
+ "vitest-browser-react": "^1.0.1"
1791
1792
  },
1792
1793
  "peerDependencies": {
1793
1794
  "graphql": "^16",
@@ -1801,7 +1802,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1801
1802
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
1802
1803
  "manifest": {
1803
1804
  "name": "@powerhousedao/reactor-drive",
1804
- "version": "6.1.0-dev.14",
1805
+ "version": "6.1.0-dev.15",
1805
1806
  "license": "AGPL-3.0-only",
1806
1807
  "type": "module",
1807
1808
  "repository": {
@@ -1843,7 +1844,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1843
1844
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
1844
1845
  "manifest": {
1845
1846
  "name": "@powerhousedao/reactor-hypercore",
1846
- "version": "6.1.0-dev.14",
1847
+ "version": "6.1.0-dev.15",
1847
1848
  "description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
1848
1849
  "repository": {
1849
1850
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -1886,7 +1887,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1886
1887
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
1887
1888
  "manifest": {
1888
1889
  "name": "@powerhousedao/reactor-mcp",
1889
- "version": "6.1.0-dev.14",
1890
+ "version": "6.1.0-dev.15",
1890
1891
  "description": "MCP server for document model operations in the Powerhouse ecosystem. For document model creation tasks, consider using the document-model-creator agent which provides a more guided experience.",
1891
1892
  "type": "module",
1892
1893
  "repository": {
@@ -1939,7 +1940,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1939
1940
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
1940
1941
  "manifest": {
1941
1942
  "name": "@powerhousedao/registry",
1942
- "version": "6.1.0-dev.14",
1943
+ "version": "6.1.0-dev.15",
1943
1944
  "description": "",
1944
1945
  "type": "module",
1945
1946
  "repository": {
@@ -1984,7 +1985,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1984
1985
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
1985
1986
  "manifest": {
1986
1987
  "name": "@renown/sdk",
1987
- "version": "6.1.0-dev.14",
1988
+ "version": "6.1.0-dev.15",
1988
1989
  "description": "",
1989
1990
  "license": "AGPL-3.0-only",
1990
1991
  "private": false,
@@ -2027,7 +2028,8 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
2027
2028
  "did-jwt-vc": "^4.0.12",
2028
2029
  "did-resolver": "^4.1.0",
2029
2030
  "key-did-resolver": "^4.0.0",
2030
- "uint8arrays": "^5.1.0"
2031
+ "uint8arrays": "^5.1.0",
2032
+ "viem": "~2.50.4"
2031
2033
  }
2032
2034
  }
2033
2035
  },
@@ -2035,7 +2037,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
2035
2037
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
2036
2038
  "manifest": {
2037
2039
  "name": "@powerhousedao/shared",
2038
- "version": "6.1.0-dev.14",
2040
+ "version": "6.1.0-dev.15",
2039
2041
  "type": "module",
2040
2042
  "sideEffects": false,
2041
2043
  "publishConfig": { "access": "public" },
@@ -2181,7 +2183,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
2181
2183
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
2182
2184
  "manifest": {
2183
2185
  "name": "@powerhousedao/vetra",
2184
- "version": "6.1.0-dev.14",
2186
+ "version": "6.1.0-dev.15",
2185
2187
  "license": "AGPL-3.0-only",
2186
2188
  "type": "module",
2187
2189
  "sideEffects": false,
@@ -2750,7 +2752,7 @@ async function migrate(version, projectDir = process.cwd()) {
2750
2752
  "dir": "/home/runner/work/powerhouse/powerhouse/apps/academy",
2751
2753
  "manifest": {
2752
2754
  "name": "@powerhousedao/academy",
2753
- "version": "6.1.0-dev.14",
2755
+ "version": "6.1.0-dev.15",
2754
2756
  "homepage": "https://powerhouse.academy",
2755
2757
  "packageManager": "pnpm@10.9.0",
2756
2758
  "repository": {
@@ -2817,7 +2819,7 @@ async function migrate(version, projectDir = process.cwd()) {
2817
2819
  "manifest": {
2818
2820
  "name": "@powerhousedao/connect",
2819
2821
  "productName": "Powerhouse-Connect",
2820
- "version": "6.1.0-dev.14",
2822
+ "version": "6.1.0-dev.15",
2821
2823
  "description": "Powerhouse Connect",
2822
2824
  "main": "dist/index.html",
2823
2825
  "type": "module",
@@ -2936,7 +2938,7 @@ async function migrate(version, projectDir = process.cwd()) {
2936
2938
  "manifest": {
2937
2939
  "name": "@powerhousedao/switchboard",
2938
2940
  "type": "module",
2939
- "version": "6.1.0-dev.14",
2941
+ "version": "6.1.0-dev.15",
2940
2942
  "main": "dist/index.mjs",
2941
2943
  "exports": {
2942
2944
  ".": {
@@ -3035,7 +3037,7 @@ async function migrate(version, projectDir = process.cwd()) {
3035
3037
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
3036
3038
  "manifest": {
3037
3039
  "name": "@powerhousedao/ph-cli",
3038
- "version": "6.1.0-dev.14",
3040
+ "version": "6.1.0-dev.15",
3039
3041
  "description": "",
3040
3042
  "license": "AGPL-3.0-only",
3041
3043
  "type": "module",
@@ -3101,7 +3103,7 @@ async function migrate(version, projectDir = process.cwd()) {
3101
3103
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
3102
3104
  "manifest": {
3103
3105
  "name": "ph-cmd",
3104
- "version": "6.1.0-dev.14",
3106
+ "version": "6.1.0-dev.15",
3105
3107
  "description": "",
3106
3108
  "license": "AGPL-3.0-only",
3107
3109
  "type": "module",
@@ -3147,7 +3149,7 @@ async function migrate(version, projectDir = process.cwd()) {
3147
3149
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
3148
3150
  "manifest": {
3149
3151
  "name": "@powerhousedao/analytics-engine-browser",
3150
- "version": "6.1.0-dev.14",
3152
+ "version": "6.1.0-dev.15",
3151
3153
  "license": "AGPL-3.0-only",
3152
3154
  "repository": {
3153
3155
  "type": "git",
@@ -3193,7 +3195,7 @@ async function migrate(version, projectDir = process.cwd()) {
3193
3195
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
3194
3196
  "manifest": {
3195
3197
  "name": "@powerhousedao/analytics-engine-core",
3196
- "version": "6.1.0-dev.14",
3198
+ "version": "6.1.0-dev.15",
3197
3199
  "license": "AGPL-3.0-only",
3198
3200
  "repository": {
3199
3201
  "type": "git",
@@ -3227,7 +3229,7 @@ async function migrate(version, projectDir = process.cwd()) {
3227
3229
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
3228
3230
  "manifest": {
3229
3231
  "name": "@powerhousedao/analytics-engine-graphql",
3230
- "version": "6.1.0-dev.14",
3232
+ "version": "6.1.0-dev.15",
3231
3233
  "license": "AGPL-3.0-only",
3232
3234
  "repository": {
3233
3235
  "type": "git",
@@ -3261,7 +3263,7 @@ async function migrate(version, projectDir = process.cwd()) {
3261
3263
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
3262
3264
  "manifest": {
3263
3265
  "name": "@powerhousedao/analytics-engine-knex",
3264
- "version": "6.1.0-dev.14",
3266
+ "version": "6.1.0-dev.15",
3265
3267
  "license": "AGPL-3.0-only",
3266
3268
  "repository": {
3267
3269
  "type": "git",
@@ -3299,7 +3301,7 @@ async function migrate(version, projectDir = process.cwd()) {
3299
3301
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
3300
3302
  "manifest": {
3301
3303
  "name": "@powerhousedao/analytics-engine-pg",
3302
- "version": "6.1.0-dev.14",
3304
+ "version": "6.1.0-dev.15",
3303
3305
  "license": "AGPL-3.0-only",
3304
3306
  "repository": {
3305
3307
  "type": "git",
@@ -3338,7 +3340,7 @@ async function migrate(version, projectDir = process.cwd()) {
3338
3340
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
3339
3341
  "manifest": {
3340
3342
  "name": "@powerhousedao/builder-tools",
3341
- "version": "6.1.0-dev.14",
3343
+ "version": "6.1.0-dev.15",
3342
3344
  "type": "module",
3343
3345
  "license": "AGPL-3.0-only",
3344
3346
  "publishConfig": { "access": "public" },
@@ -3381,7 +3383,7 @@ async function migrate(version, projectDir = process.cwd()) {
3381
3383
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
3382
3384
  "manifest": {
3383
3385
  "name": "@powerhousedao/codegen",
3384
- "version": "6.1.0-dev.14",
3386
+ "version": "6.1.0-dev.15",
3385
3387
  "license": "AGPL-3.0-only",
3386
3388
  "private": false,
3387
3389
  "type": "module",
@@ -3456,7 +3458,7 @@ async function migrate(version, projectDir = process.cwd()) {
3456
3458
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
3457
3459
  "manifest": {
3458
3460
  "name": "@powerhousedao/common",
3459
- "version": "6.1.0-dev.14",
3461
+ "version": "6.1.0-dev.15",
3460
3462
  "license": "AGPL-3.0-only",
3461
3463
  "type": "module",
3462
3464
  "files": ["/dist"],
@@ -3511,7 +3513,7 @@ async function migrate(version, projectDir = process.cwd()) {
3511
3513
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
3512
3514
  "manifest": {
3513
3515
  "name": "@powerhousedao/config",
3514
- "version": "6.1.0-dev.14",
3516
+ "version": "6.1.0-dev.15",
3515
3517
  "description": "",
3516
3518
  "license": "AGPL-3.0-only",
3517
3519
  "private": false,
@@ -3548,7 +3550,7 @@ async function migrate(version, projectDir = process.cwd()) {
3548
3550
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
3549
3551
  "manifest": {
3550
3552
  "name": "@powerhousedao/design-system",
3551
- "version": "6.1.0-dev.14",
3553
+ "version": "6.1.0-dev.15",
3552
3554
  "description": "",
3553
3555
  "files": ["dist", "theme.css"],
3554
3556
  "type": "module",
@@ -3703,7 +3705,7 @@ async function migrate(version, projectDir = process.cwd()) {
3703
3705
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
3704
3706
  "manifest": {
3705
3707
  "name": "document-model",
3706
- "version": "6.1.0-dev.14",
3708
+ "version": "6.1.0-dev.15",
3707
3709
  "license": "AGPL-3.0-only",
3708
3710
  "private": false,
3709
3711
  "files": ["dist"],
@@ -3765,7 +3767,7 @@ async function migrate(version, projectDir = process.cwd()) {
3765
3767
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
3766
3768
  "manifest": {
3767
3769
  "name": "@powerhousedao/opentelemetry-instrumentation-reactor",
3768
- "version": "6.1.0-dev.14",
3770
+ "version": "6.1.0-dev.15",
3769
3771
  "description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
3770
3772
  "type": "module",
3771
3773
  "sideEffects": false,
@@ -3803,7 +3805,7 @@ async function migrate(version, projectDir = process.cwd()) {
3803
3805
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
3804
3806
  "manifest": {
3805
3807
  "name": "@powerhousedao/pglite-fs",
3806
- "version": "6.1.0-dev.14",
3808
+ "version": "6.1.0-dev.15",
3807
3809
  "license": "AGPL-3.0-only",
3808
3810
  "type": "module",
3809
3811
  "repository": {
@@ -3838,7 +3840,7 @@ async function migrate(version, projectDir = process.cwd()) {
3838
3840
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
3839
3841
  "manifest": {
3840
3842
  "name": "@powerhousedao/powerhouse-vetra-packages",
3841
- "version": "6.1.0-dev.14",
3843
+ "version": "6.1.0-dev.15",
3842
3844
  "description": "",
3843
3845
  "keywords": [],
3844
3846
  "author": "",
@@ -3961,7 +3963,7 @@ async function migrate(version, projectDir = process.cwd()) {
3961
3963
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
3962
3964
  "manifest": {
3963
3965
  "name": "@powerhousedao/reactor",
3964
- "version": "6.1.0-dev.14",
3966
+ "version": "6.1.0-dev.15",
3965
3967
  "description": "",
3966
3968
  "repository": {
3967
3969
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -4021,7 +4023,7 @@ async function migrate(version, projectDir = process.cwd()) {
4021
4023
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
4022
4024
  "manifest": {
4023
4025
  "name": "@powerhousedao/reactor-api",
4024
- "version": "6.1.0-dev.14",
4026
+ "version": "6.1.0-dev.15",
4025
4027
  "description": "",
4026
4028
  "type": "module",
4027
4029
  "repository": {
@@ -4156,7 +4158,7 @@ async function migrate(version, projectDir = process.cwd()) {
4156
4158
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
4157
4159
  "manifest": {
4158
4160
  "name": "@powerhousedao/reactor-attachments",
4159
- "version": "6.1.0-dev.14",
4161
+ "version": "6.1.0-dev.15",
4160
4162
  "license": "AGPL-3.0-only",
4161
4163
  "type": "module",
4162
4164
  "repository": {
@@ -4193,7 +4195,7 @@ async function migrate(version, projectDir = process.cwd()) {
4193
4195
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
4194
4196
  "manifest": {
4195
4197
  "name": "@powerhousedao/reactor-browser",
4196
- "version": "6.1.0-dev.14",
4198
+ "version": "6.1.0-dev.15",
4197
4199
  "license": "AGPL-3.0-only",
4198
4200
  "type": "module",
4199
4201
  "repository": {
@@ -4282,10 +4284,11 @@ async function migrate(version, projectDir = process.cwd()) {
4282
4284
  "react": "catalog:",
4283
4285
  "react-dom": "catalog:",
4284
4286
  "tsdown": "catalog:",
4287
+ "type-fest": "catalog:",
4288
+ "viem": "~2.50.4",
4285
4289
  "vite": "catalog:",
4286
4290
  "vitest": "catalog:",
4287
- "vitest-browser-react": "^1.0.1",
4288
- "type-fest": "catalog:"
4291
+ "vitest-browser-react": "^1.0.1"
4289
4292
  },
4290
4293
  "peerDependencies": {
4291
4294
  "graphql": "^16",
@@ -4299,7 +4302,7 @@ async function migrate(version, projectDir = process.cwd()) {
4299
4302
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
4300
4303
  "manifest": {
4301
4304
  "name": "@powerhousedao/reactor-drive",
4302
- "version": "6.1.0-dev.14",
4305
+ "version": "6.1.0-dev.15",
4303
4306
  "license": "AGPL-3.0-only",
4304
4307
  "type": "module",
4305
4308
  "repository": {
@@ -4341,7 +4344,7 @@ async function migrate(version, projectDir = process.cwd()) {
4341
4344
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
4342
4345
  "manifest": {
4343
4346
  "name": "@powerhousedao/reactor-hypercore",
4344
- "version": "6.1.0-dev.14",
4347
+ "version": "6.1.0-dev.15",
4345
4348
  "description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
4346
4349
  "repository": {
4347
4350
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -4384,7 +4387,7 @@ async function migrate(version, projectDir = process.cwd()) {
4384
4387
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
4385
4388
  "manifest": {
4386
4389
  "name": "@powerhousedao/reactor-mcp",
4387
- "version": "6.1.0-dev.14",
4390
+ "version": "6.1.0-dev.15",
4388
4391
  "description": "MCP server for document model operations in the Powerhouse ecosystem. For document model creation tasks, consider using the document-model-creator agent which provides a more guided experience.",
4389
4392
  "type": "module",
4390
4393
  "repository": {
@@ -4437,7 +4440,7 @@ async function migrate(version, projectDir = process.cwd()) {
4437
4440
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
4438
4441
  "manifest": {
4439
4442
  "name": "@powerhousedao/registry",
4440
- "version": "6.1.0-dev.14",
4443
+ "version": "6.1.0-dev.15",
4441
4444
  "description": "",
4442
4445
  "type": "module",
4443
4446
  "repository": {
@@ -4482,7 +4485,7 @@ async function migrate(version, projectDir = process.cwd()) {
4482
4485
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
4483
4486
  "manifest": {
4484
4487
  "name": "@renown/sdk",
4485
- "version": "6.1.0-dev.14",
4488
+ "version": "6.1.0-dev.15",
4486
4489
  "description": "",
4487
4490
  "license": "AGPL-3.0-only",
4488
4491
  "private": false,
@@ -4525,7 +4528,8 @@ async function migrate(version, projectDir = process.cwd()) {
4525
4528
  "did-jwt-vc": "^4.0.12",
4526
4529
  "did-resolver": "^4.1.0",
4527
4530
  "key-did-resolver": "^4.0.0",
4528
- "uint8arrays": "^5.1.0"
4531
+ "uint8arrays": "^5.1.0",
4532
+ "viem": "~2.50.4"
4529
4533
  }
4530
4534
  }
4531
4535
  },
@@ -4533,7 +4537,7 @@ async function migrate(version, projectDir = process.cwd()) {
4533
4537
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
4534
4538
  "manifest": {
4535
4539
  "name": "@powerhousedao/shared",
4536
- "version": "6.1.0-dev.14",
4540
+ "version": "6.1.0-dev.15",
4537
4541
  "type": "module",
4538
4542
  "sideEffects": false,
4539
4543
  "publishConfig": { "access": "public" },
@@ -4679,7 +4683,7 @@ async function migrate(version, projectDir = process.cwd()) {
4679
4683
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
4680
4684
  "manifest": {
4681
4685
  "name": "@powerhousedao/vetra",
4682
- "version": "6.1.0-dev.14",
4686
+ "version": "6.1.0-dev.15",
4683
4687
  "license": "AGPL-3.0-only",
4684
4688
  "type": "module",
4685
4689
  "sideEffects": false,
@@ -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 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/* 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 result = (await npmFetch.json(\n `${WORKSPACE_PACKAGES[0].manifest.name!}`,\n )) as { \"dist-tags\": Record<\"latest\" | \"staging\" | \"dev\", string> };\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),\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),\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(\"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\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 { runPrettier } 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 `prettier` to format the generated code\n console.log(chalk.blue(`▶️ Formatting boilerplate project files...\\n`));\n await runPrettier();\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 hasAttachment: op.schema?.includes(\": Attachment\"),\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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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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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 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/* 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 result = (await npmFetch.json(\n `${WORKSPACE_PACKAGES[0].manifest.name!}`,\n )) as { \"dist-tags\": Record<\"latest\" | \"staging\" | \"dev\", string> };\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),\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),\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(\"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\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 { runPrettier } 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 `prettier` to format the generated code\n console.log(chalk.blue(`▶️ Formatting boilerplate project files...\\n`));\n await runPrettier();\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 hasAttachment: op.schema?.includes(\": Attachment\"),\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":";;;;;;;;;;;;;;;;;;;;;AAQA,SAAgB,UAA6C,OAAa;AACxE,QAAO,OAAO,YACZ,OAAO,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAC7D;;AAGH,eAAsB,kBACpB,MACmC;CACnC,IAAI;AACJ,KAAI;AACF,MAAI,CAAC,KACH,OAAM,IAAI,MAAM,oCAAoC;WAC3C,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,OAAO,CAEvD,kBADa,MAAM,iBAAiB,MAAM,qBAAqB,EAC1C,MAAM;WAClB,KAAK,SAAS,QAAQ,EAAE;GACjC,MAAM,OAAO,MAAM,SAAS,MAAM,QAAQ;GAC1C,MAAM,aAAa,KAAK,MAAM,KAAK;AACnC,OAAI,WAAW,WACb,iBAAgB,WAAW,MAAM;OAEjC,iBAAgB;QAGlB,OAAM,IAAI,MAAM,sDAAsD;AAExE,SAAO;UACA,OAAO;AACd,QAAO,MAA4B,SAAS,qCACxC,IAAI,MAAM,4BAA4B,GACtC;;;;;AC3BR,SAAS,sBAAsB,eAAgC;CAC7D,MAAM,UAAU,YAAY,eAAe,EAAE,eAAe,MAAM,CAAC;AACnE,MAAK,MAAM,SAAS,SAAS;AAC3B,MAAI,CAAC,MAAM,aAAa,CAAE;EAC1B,MAAM,MAAM,KAAK,eAAe,MAAM,KAAK;AAE3C,OAAK,MAAM,YAAY,CAAC,gBAAgB,WAAW,CACjD,KAAI;AAEF,OADiB,aAAa,KAAK,KAAK,SAAS,EAAE,QAAQ,CAC9C,SAAS,8BAA8B,CAAE,QAAO;UACvD;;AAKZ,QAAO;;AAGT,SAAgB,eAAe,YAA+B;CAC5D,MAAM,WAAsB,EAAE;CAC9B,MAAM,gBAAgB,KAAK,YAAY,aAAa;AAEpD,KADuB,SAAS,eAAe,EAAE,gBAAgB,OAAO,CAAC,EACrD,aAAa,IAAI,sBAAsB,cAAc,CACvE,UAAS,KAAK,qBAAqB;AAErC,QAAO;;AAOT,eAAsB,wBACpB,UACA,YACe;AACf,KAAI,SAAS,WAAW,EAAG;CAE3B,MAAM,cAAc,MAAM,YAAY;EAAE,KAAK;EAAY,WAAW;EAAO,CAAC;CAE5E,MAAM,aACJ,YAAY,mBAAmB,qBAC/B,YAAY,kBAAkB;AAChC,KAAI,CAAC,WACH,OAAM,IAAI,MACR,yHACD;CAGH,MAAM,mBAAmB,EACvB,GAAI,YAAY,oBAAoB,EAAE,EACvC;CACD,MAAM,kBAAkB,EACtB,GAAI,YAAY,mBAAmB,EAAE,EACtC;CAED,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,OAAO,qBAAqB;AAClC,OAAK,MAAM,OAAO,KAAK,eAAe;AACpC,OAAI,iBAAiB,SAAS,KAAA,GAAW;AACvC,qBAAiB,OAAO;AACxB,UAAM,KAAK,IAAI;;AAEjB,OAAI,gBAAgB,SAAS,KAAA,EAC3B,iBAAgB,OAAO;;EAG3B,MAAM,eAAe,KAAK;AAI1B,OAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,aAAa,EAAE;AAC7D,OAAI,iBAAiB,SAAS,KAAA,GAAW;AACvC,qBAAiB,OAAO,YAAY;AACpC,UAAM,KAAK,IAAI;;AAEjB,OAAI,gBAAgB,SAAS,KAAA,EAC3B,iBAAgB,OAAO,YAAY;;;AAKzC,KAAI,MAAM,WAAW,EAAG;AAOxB,OAAM,aAAa,YALH;EACd,GAAG;EACH,kBAAkB,UAAU,iBAAiB;EAC7C,iBAAiB,UAAU,gBAAgB;EAC5C,CACsC;AACvC,SAAQ,IAAI,gCAAgC,MAAM,KAAK,KAAK,GAAG;;;;ACtEjE,eAAsB,sBACpB,oBACA,SACA;AACA,OAAM,6BAA6B,oBAAoB,QAAQ;;AAIjE,eAAsB,0BAA0B,SAAkB;CAChE,MAAM,EAAE,WAAW,sBAAsB,qBACvC,SACA,kBACD;CACD,MAAM,wBAAwB,kBAAkB,SAAS;CACzD,MAAM,aAAa,kBAAkB,kBAAkB,CAAC,SAAS;CACjE,MAAM,0BAA0B,KAC9BA,cAAY,uBAAuB,EAAE,eAAe,MAAM,CAAC,EAC3D,IAAI,uBAAuB,EAC3B,OAAO,UAAU,CAClB;AAED,MAAK,MAAM,sBAAsB,wBAC/B,OAAM,sBAAsB,oBAAoB,QAAQ;AAG1D,OAAM,qBACJ,YACA,kBACA,wBAAwB,KAAK,MAAM,EAAE,GAAG,CACzC;;AAEH,eAAsB,iBAAiB,UAAkB,SAAkB;AAKzE,OAAM,sBAHqB,MAAM,kBAAkB,SAAS,EAGZ,QAAQ;;AAS1D,eAAsB,eACpB,MACA,SACA;CACA,MAAM,EACJ,YACA,eACA,UAAU,aACV,kBACE;AAEJ,KAAI,cAAc,SAAS,EACzB,OAAM,IAAI,MAAM,gDAAgD;CAGlE,MAAM,kBAAkB,cAAc;CACtC,MAAM,WAAW,eAAe,UAAU,WAAW;AAGrD,OAAM,8BAA8B;EAClC;EACA,WAJgB,iBAAiB,UAAU,WAAW;EAKtD;EACA;EACA;EACD,CAAC;;AAOJ,eAAsB,mBAAmB,SAAkB;CACzD,MAAM,EAAE,WAAW,eAAe,qBAAqB,SAAS,UAAU;CAC1E,MAAM,aAAa,WAAW,kBAAkB,CAAC,SAAS;CAG1D,MAAM,eAAe,KACnB,WAAW,gBAAgB,EAC3B,KAAK,QAAQ,IAAI,aAAa,CAAC,EAC/B,KAAK,YAAY,kBAAkB,SAAS,QAAQ,CAAC,EACrD,OAAO,SAAS,EAChB,QACG,EAAE,oBACD,CAAC,aAAa,6BAA6B,cAAc,CAC5D,CACF;AAED,MAAK,MAAM,eAAe,cAAc;EACtC,MAAM,EACJ,MAAM,YACN,IAAI,UACJ,SAAS,eACT,kBACE;AAEJ,QAAM,eACJ;GACE;GACA;GACA;GACA;GACD,EACD,QACD;;AAGH,OAAM,qBACJ,YACA,WACA,aAAa,KAAK,MAAM,EAAE,GAAG,CAC9B;;AAUH,eAAsB,YAAY,MAAuB,SAAkB;CACzE,MAAM,EACJ,SACA,OACA,sBACA,sBACA,eACE;AAEJ,OAAM,mBAAmB;EACvB;EACA,WAAW,cAAc,UAAU,QAAQ;EAC3C,YAAY;EACZ,UAAU,SAAS,UAAU,QAAQ;EACrC,yBAAyB,wBAAwB,EAAE;EACnD,sBAAsB,wBAAwB;EAC/C,CAAC;;AAOJ,eAAsB,gBAAgB,SAAkB;CACtD,MAAM,EAAE,WAAW,eAAe,qBAAqB,SAAS,UAAU;CAC1E,MAAM,aAAa,WAAW,kBAAkB,CAAC,SAAS;CAG1D,MAAM,YAAY,KAChB,WAAW,gBAAgB,EAC3B,KAAK,QAAQ,IAAI,aAAa,CAAC,EAC/B,KAAK,YAAY,eAAe,SAAS,QAAQ,CAAC,EAClD,OAAO,SAAS,CACjB;AAED,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,EACJ,MAAM,SACN,IAAI,OACJ,SAAS,YACT,sBACA,yBACE;AACJ,QAAM,YACJ;GACE;GACA;GACA;GACA;GACA;GACD,EACD,QACD;;AAGH,OAAM,qBACJ,YACA,QACA,UAAU,KAAK,MAAM,EAAE,GAAG,CAC3B;;AAEH,eAAsB,iBAAiB,cAAsB,SAAkB;AAC7E,OAAM,wBAAwB;EAAE;EAAc;EAAS,CAAC;;AAI1D,eAAsB,qBAAqB,SAAkB;CAC3D,MAAM,EAAE,WAAW,iBAAiB,qBAClC,SACA,YACD;CACD,MAAM,aAAa,aAAa,kBAAkB,CAAC,SAAS;CAE5D,MAAM,gBAAgB,KACpB,aAAa,gBAAgB,EAC7B,KAAK,QAAQ,IAAI,aAAa,CAAC,EAC/B,KAAK,YAAY,oBAAoB,SAAS,QAAQ,CAAC,EACvD,IAAI,KAAK,eAAe,CAAC,EACzB,OAAO,UAAU,EACjB,QAAQ,CACT;AACD,MAAK,MAAM,gBAAgB,cACzB,OAAM,iBAAiB,cAAc,QAAQ;AAG/C,OAAM,qBACJ,YACA,aACA,cAAc,KAAK,SAAS,UAAU,KAAK,CAAC,CAC7C;;AAGH,eAAsB,kBACpB,MAMA,SACA;AACA,QAAO,MAAM,yBAAyB;EACpC;EACA,GAAG;EACJ,CAAC;;AAIJ,eAAsB,sBAAsB,SAAkB;CAC5D,MAAM,EAAE,WAAW,kBAAkB,qBACnC,SACA,aACD;CACD,MAAM,aAAa,cAAc,kBAAkB,CAAC,SAAS;CAC7D,MAAM,uBAAuB,KAC3B,cAAc,gBAAgB,EAC9B,KAAK,QAAQ,IAAI,aAAa,CAAC,EAC/B,KAAK,YAAY,qBAAqB,SAAS,QAAQ,CAAC,CACzD;AAED,MAAK,MAAM,iBAAiB,qBAC1B,OAAM,kBAAkB,eAAe,QAAQ;AAGjD,OAAM,qBACJ,YACA,cACA,qBAAqB,KAAK,MAAM,UAAU,EAAE,cAAc,CAAC,CAC5D;;AAIH,eAAsB,YAAY,SAAkB;AAClD,OAAM,0BAA0B,QAAQ;AACxC,OAAM,mBAAmB,QAAQ;AACjC,OAAM,gBAAgB,QAAQ;AAC9B,OAAM,qBAAqB,QAAQ;AACnC,OAAM,sBAAsB,QAAQ;;;;ACtStC,SAAgB,oBAA4B;AACE,QAAA;;;;ACE9C,SAAS,qBAA6B;CAGpC,MAAM,QAFU,cAAc,OAAO,KAAK,IAAI,CAExB,QAAQ,MAAM,gBAAgB;AACpD,KAAI,MACF,MAAK,MAAM,YAAY,OAAO;EAE5B,MAAM,UAAUC,OADAA,OAAK,UAAU,gBAAgB,EACjB,aAAa;AAE3C,MAAI,WAAW,QAAQ,CACrB,QAAO;;AAKb,OAAM,IAAI,MAAM,0CAA0C;;AAQ5D,SAAS,WACP,SACA,MACA,KACe;AACf,QAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,QAAQ,MAAM,SAAS,MAAM;GACjC;GACA,OAAO;GACP,OAAO;GACR,CAAC;AAEF,QAAM,GAAG,UAAU,SAAS;AAC1B,OAAI,SAAS,EACX,UAAS;OAET,wBAAO,IAAI,MAAM,iCAAiC,OAAO,CAAC;IAE5D;AAEF,QAAM,GAAG,UAAU,UAAU;AAC3B,UAAO,MAAM;IACb;GACF;;AAGJ,eAAsB,iBAAiB,EACrC,eACA,cACW;CACX,MAAM,UAAU,cAAc,QAAQ,eAAe,eAAe;AAEpE,KAAI;AAGF,QAAM,WACJ,QACA;GAJoB,oBAAoB;GAIxB;GAAe;GAAa;GAAQ,EACpD,QAAQ,KAAK,CACd;AAED,UAAQ,IAAI,6BAA6B,UAAU;UAC5C,OAAO;AACd,UAAQ,MAAM,4BAA4B,MAAM;;;;;ACjCpD,eAAsB,yCACpB,cACA;AAMA,KAAI,EAJF,iBAAiB,YACjB,iBAAiB,aACjB,iBAAiB,OAEP,QAAO;AAInB,SAHgB,MAAM,SAAS,KAC7B,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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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.1.0-dev.14",
3
+ "version": "6.1.0-dev.15",
4
4
  "license": "AGPL-3.0-only",
5
5
  "private": false,
6
6
  "type": "module",
@@ -53,8 +53,8 @@
53
53
  "write-json-file": "^7.0.0",
54
54
  "write-package": "7.2.0",
55
55
  "zod": "4.3.6",
56
- "@powerhousedao/shared": "6.1.0-dev.14",
57
- "document-model": "6.1.0-dev.14"
56
+ "@powerhousedao/shared": "6.1.0-dev.15",
57
+ "document-model": "6.1.0-dev.15"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@pnpm/find-workspace-dir": "^1000.1.5",