@powerhousedao/codegen 6.1.0-dev.17 → 6.1.0-dev.19

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.17";
204
+ return "6.1.0-dev.19";
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.17",
255
+ "version": "6.1.0-dev.19",
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.17",
322
+ "version": "6.1.0-dev.19",
323
323
  "description": "Powerhouse Connect",
324
324
  "main": "dist/index.html",
325
325
  "type": "module",
@@ -385,6 +385,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
385
385
  "@openpanel/web": "^1.4.1",
386
386
  "@powerhousedao/config": "workspace:*",
387
387
  "@powerhousedao/design-system": "workspace:*",
388
+ "@powerhousedao/reactor-attachments": "workspace:*",
388
389
  "@powerhousedao/document-engineering": "catalog:",
389
390
  "@powerhousedao/powerhouse-vetra-packages": "workspace:*",
390
391
  "@powerhousedao/reactor-browser": "workspace:*",
@@ -438,7 +439,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
438
439
  "manifest": {
439
440
  "name": "@powerhousedao/switchboard",
440
441
  "type": "module",
441
- "version": "6.1.0-dev.17",
442
+ "version": "6.1.0-dev.19",
442
443
  "main": "dist/index.mjs",
443
444
  "exports": {
444
445
  ".": {
@@ -537,7 +538,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
537
538
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
538
539
  "manifest": {
539
540
  "name": "@powerhousedao/ph-cli",
540
- "version": "6.1.0-dev.17",
541
+ "version": "6.1.0-dev.19",
541
542
  "description": "",
542
543
  "license": "AGPL-3.0-only",
543
544
  "type": "module",
@@ -605,7 +606,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
605
606
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
606
607
  "manifest": {
607
608
  "name": "ph-cmd",
608
- "version": "6.1.0-dev.17",
609
+ "version": "6.1.0-dev.19",
609
610
  "description": "",
610
611
  "license": "AGPL-3.0-only",
611
612
  "type": "module",
@@ -651,7 +652,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
651
652
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
652
653
  "manifest": {
653
654
  "name": "@powerhousedao/analytics-engine-browser",
654
- "version": "6.1.0-dev.17",
655
+ "version": "6.1.0-dev.19",
655
656
  "license": "AGPL-3.0-only",
656
657
  "repository": {
657
658
  "type": "git",
@@ -697,7 +698,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
697
698
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
698
699
  "manifest": {
699
700
  "name": "@powerhousedao/analytics-engine-core",
700
- "version": "6.1.0-dev.17",
701
+ "version": "6.1.0-dev.19",
701
702
  "license": "AGPL-3.0-only",
702
703
  "repository": {
703
704
  "type": "git",
@@ -731,7 +732,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
731
732
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
732
733
  "manifest": {
733
734
  "name": "@powerhousedao/analytics-engine-graphql",
734
- "version": "6.1.0-dev.17",
735
+ "version": "6.1.0-dev.19",
735
736
  "license": "AGPL-3.0-only",
736
737
  "repository": {
737
738
  "type": "git",
@@ -765,7 +766,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
765
766
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
766
767
  "manifest": {
767
768
  "name": "@powerhousedao/analytics-engine-knex",
768
- "version": "6.1.0-dev.17",
769
+ "version": "6.1.0-dev.19",
769
770
  "license": "AGPL-3.0-only",
770
771
  "repository": {
771
772
  "type": "git",
@@ -803,7 +804,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
803
804
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
804
805
  "manifest": {
805
806
  "name": "@powerhousedao/analytics-engine-pg",
806
- "version": "6.1.0-dev.17",
807
+ "version": "6.1.0-dev.19",
807
808
  "license": "AGPL-3.0-only",
808
809
  "repository": {
809
810
  "type": "git",
@@ -842,7 +843,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
842
843
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
843
844
  "manifest": {
844
845
  "name": "@powerhousedao/builder-tools",
845
- "version": "6.1.0-dev.17",
846
+ "version": "6.1.0-dev.19",
846
847
  "type": "module",
847
848
  "license": "AGPL-3.0-only",
848
849
  "publishConfig": { "access": "public" },
@@ -887,7 +888,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
887
888
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
888
889
  "manifest": {
889
890
  "name": "@powerhousedao/codegen",
890
- "version": "6.1.0-dev.17",
891
+ "version": "6.1.0-dev.19",
891
892
  "license": "AGPL-3.0-only",
892
893
  "private": false,
893
894
  "type": "module",
@@ -962,7 +963,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
962
963
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
963
964
  "manifest": {
964
965
  "name": "@powerhousedao/common",
965
- "version": "6.1.0-dev.17",
966
+ "version": "6.1.0-dev.19",
966
967
  "license": "AGPL-3.0-only",
967
968
  "type": "module",
968
969
  "files": ["/dist"],
@@ -1017,7 +1018,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1017
1018
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
1018
1019
  "manifest": {
1019
1020
  "name": "@powerhousedao/config",
1020
- "version": "6.1.0-dev.17",
1021
+ "version": "6.1.0-dev.19",
1021
1022
  "description": "",
1022
1023
  "license": "AGPL-3.0-only",
1023
1024
  "private": false,
@@ -1054,7 +1055,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1054
1055
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
1055
1056
  "manifest": {
1056
1057
  "name": "@powerhousedao/design-system",
1057
- "version": "6.1.0-dev.17",
1058
+ "version": "6.1.0-dev.19",
1058
1059
  "description": "",
1059
1060
  "files": ["dist", "theme.css"],
1060
1061
  "type": "module",
@@ -1209,7 +1210,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1209
1210
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
1210
1211
  "manifest": {
1211
1212
  "name": "document-model",
1212
- "version": "6.1.0-dev.17",
1213
+ "version": "6.1.0-dev.19",
1213
1214
  "license": "AGPL-3.0-only",
1214
1215
  "private": false,
1215
1216
  "files": ["dist"],
@@ -1271,7 +1272,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1271
1272
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
1272
1273
  "manifest": {
1273
1274
  "name": "@powerhousedao/opentelemetry-instrumentation-reactor",
1274
- "version": "6.1.0-dev.17",
1275
+ "version": "6.1.0-dev.19",
1275
1276
  "description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
1276
1277
  "type": "module",
1277
1278
  "sideEffects": false,
@@ -1309,7 +1310,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1309
1310
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
1310
1311
  "manifest": {
1311
1312
  "name": "@powerhousedao/pglite-fs",
1312
- "version": "6.1.0-dev.17",
1313
+ "version": "6.1.0-dev.19",
1313
1314
  "license": "AGPL-3.0-only",
1314
1315
  "type": "module",
1315
1316
  "repository": {
@@ -1344,7 +1345,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1344
1345
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
1345
1346
  "manifest": {
1346
1347
  "name": "@powerhousedao/powerhouse-vetra-packages",
1347
- "version": "6.1.0-dev.17",
1348
+ "version": "6.1.0-dev.19",
1348
1349
  "description": "",
1349
1350
  "keywords": [],
1350
1351
  "author": "",
@@ -1467,7 +1468,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1467
1468
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
1468
1469
  "manifest": {
1469
1470
  "name": "@powerhousedao/reactor",
1470
- "version": "6.1.0-dev.17",
1471
+ "version": "6.1.0-dev.19",
1471
1472
  "description": "",
1472
1473
  "repository": {
1473
1474
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -1527,7 +1528,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1527
1528
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
1528
1529
  "manifest": {
1529
1530
  "name": "@powerhousedao/reactor-api",
1530
- "version": "6.1.0-dev.17",
1531
+ "version": "6.1.0-dev.19",
1531
1532
  "description": "",
1532
1533
  "type": "module",
1533
1534
  "repository": {
@@ -1662,7 +1663,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1662
1663
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
1663
1664
  "manifest": {
1664
1665
  "name": "@powerhousedao/reactor-attachments",
1665
- "version": "6.1.0-dev.17",
1666
+ "version": "6.1.0-dev.19",
1666
1667
  "license": "AGPL-3.0-only",
1667
1668
  "type": "module",
1668
1669
  "repository": {
@@ -1671,11 +1672,18 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1671
1672
  },
1672
1673
  "publishConfig": { "access": "public" },
1673
1674
  "files": ["dist"],
1674
- "exports": { ".": {
1675
- "source": "./index.ts",
1676
- "types": "./dist/index.d.ts",
1677
- "import": "./dist/index.js"
1678
- } },
1675
+ "exports": {
1676
+ ".": {
1677
+ "source": "./index.ts",
1678
+ "types": "./dist/index.d.ts",
1679
+ "import": "./dist/index.js"
1680
+ },
1681
+ "./client": {
1682
+ "source": "./src/client.ts",
1683
+ "types": "./dist/client.d.ts",
1684
+ "import": "./dist/client.js"
1685
+ }
1686
+ },
1679
1687
  "sideEffects": false,
1680
1688
  "scripts": {
1681
1689
  "tsc": "tsc",
@@ -1699,7 +1707,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1699
1707
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
1700
1708
  "manifest": {
1701
1709
  "name": "@powerhousedao/reactor-browser",
1702
- "version": "6.1.0-dev.17",
1710
+ "version": "6.1.0-dev.19",
1703
1711
  "license": "AGPL-3.0-only",
1704
1712
  "type": "module",
1705
1713
  "repository": {
@@ -1748,6 +1756,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1748
1756
  "@powerhousedao/analytics-engine-browser": "workspace:*",
1749
1757
  "@powerhousedao/analytics-engine-core": "workspace:*",
1750
1758
  "@powerhousedao/reactor": "workspace:*",
1759
+ "@powerhousedao/reactor-attachments": "workspace:*",
1751
1760
  "@powerhousedao/reactor-drive": "workspace:*",
1752
1761
  "@powerhousedao/shared": "workspace:*",
1753
1762
  "@renown/sdk": "workspace:*",
@@ -1806,7 +1815,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1806
1815
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
1807
1816
  "manifest": {
1808
1817
  "name": "@powerhousedao/reactor-drive",
1809
- "version": "6.1.0-dev.17",
1818
+ "version": "6.1.0-dev.19",
1810
1819
  "license": "AGPL-3.0-only",
1811
1820
  "type": "module",
1812
1821
  "repository": {
@@ -1848,7 +1857,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1848
1857
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
1849
1858
  "manifest": {
1850
1859
  "name": "@powerhousedao/reactor-hypercore",
1851
- "version": "6.1.0-dev.17",
1860
+ "version": "6.1.0-dev.19",
1852
1861
  "description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
1853
1862
  "repository": {
1854
1863
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -1891,7 +1900,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1891
1900
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
1892
1901
  "manifest": {
1893
1902
  "name": "@powerhousedao/reactor-mcp",
1894
- "version": "6.1.0-dev.17",
1903
+ "version": "6.1.0-dev.19",
1895
1904
  "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.",
1896
1905
  "type": "module",
1897
1906
  "repository": {
@@ -1944,7 +1953,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1944
1953
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
1945
1954
  "manifest": {
1946
1955
  "name": "@powerhousedao/registry",
1947
- "version": "6.1.0-dev.17",
1956
+ "version": "6.1.0-dev.19",
1948
1957
  "description": "",
1949
1958
  "type": "module",
1950
1959
  "repository": {
@@ -1989,7 +1998,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
1989
1998
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
1990
1999
  "manifest": {
1991
2000
  "name": "@renown/sdk",
1992
- "version": "6.1.0-dev.17",
2001
+ "version": "6.1.0-dev.19",
1993
2002
  "description": "",
1994
2003
  "license": "AGPL-3.0-only",
1995
2004
  "private": false,
@@ -2041,7 +2050,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
2041
2050
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
2042
2051
  "manifest": {
2043
2052
  "name": "@powerhousedao/shared",
2044
- "version": "6.1.0-dev.17",
2053
+ "version": "6.1.0-dev.19",
2045
2054
  "type": "module",
2046
2055
  "sideEffects": false,
2047
2056
  "publishConfig": { "access": "public" },
@@ -2191,7 +2200,7 @@ async function getFullyQualifiedWorkspacePackageVersion(versionOrTag) {
2191
2200
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
2192
2201
  "manifest": {
2193
2202
  "name": "@powerhousedao/vetra",
2194
- "version": "6.1.0-dev.17",
2203
+ "version": "6.1.0-dev.19",
2195
2204
  "license": "AGPL-3.0-only",
2196
2205
  "type": "module",
2197
2206
  "sideEffects": false,
@@ -2760,7 +2769,7 @@ async function migrate(version, projectDir = process.cwd()) {
2760
2769
  "dir": "/home/runner/work/powerhouse/powerhouse/apps/academy",
2761
2770
  "manifest": {
2762
2771
  "name": "@powerhousedao/academy",
2763
- "version": "6.1.0-dev.17",
2772
+ "version": "6.1.0-dev.19",
2764
2773
  "homepage": "https://powerhouse.academy",
2765
2774
  "packageManager": "pnpm@10.9.0",
2766
2775
  "repository": {
@@ -2827,7 +2836,7 @@ async function migrate(version, projectDir = process.cwd()) {
2827
2836
  "manifest": {
2828
2837
  "name": "@powerhousedao/connect",
2829
2838
  "productName": "Powerhouse-Connect",
2830
- "version": "6.1.0-dev.17",
2839
+ "version": "6.1.0-dev.19",
2831
2840
  "description": "Powerhouse Connect",
2832
2841
  "main": "dist/index.html",
2833
2842
  "type": "module",
@@ -2893,6 +2902,7 @@ async function migrate(version, projectDir = process.cwd()) {
2893
2902
  "@openpanel/web": "^1.4.1",
2894
2903
  "@powerhousedao/config": "workspace:*",
2895
2904
  "@powerhousedao/design-system": "workspace:*",
2905
+ "@powerhousedao/reactor-attachments": "workspace:*",
2896
2906
  "@powerhousedao/document-engineering": "catalog:",
2897
2907
  "@powerhousedao/powerhouse-vetra-packages": "workspace:*",
2898
2908
  "@powerhousedao/reactor-browser": "workspace:*",
@@ -2946,7 +2956,7 @@ async function migrate(version, projectDir = process.cwd()) {
2946
2956
  "manifest": {
2947
2957
  "name": "@powerhousedao/switchboard",
2948
2958
  "type": "module",
2949
- "version": "6.1.0-dev.17",
2959
+ "version": "6.1.0-dev.19",
2950
2960
  "main": "dist/index.mjs",
2951
2961
  "exports": {
2952
2962
  ".": {
@@ -3045,7 +3055,7 @@ async function migrate(version, projectDir = process.cwd()) {
3045
3055
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cli",
3046
3056
  "manifest": {
3047
3057
  "name": "@powerhousedao/ph-cli",
3048
- "version": "6.1.0-dev.17",
3058
+ "version": "6.1.0-dev.19",
3049
3059
  "description": "",
3050
3060
  "license": "AGPL-3.0-only",
3051
3061
  "type": "module",
@@ -3113,7 +3123,7 @@ async function migrate(version, projectDir = process.cwd()) {
3113
3123
  "dir": "/home/runner/work/powerhouse/powerhouse/clis/ph-cmd",
3114
3124
  "manifest": {
3115
3125
  "name": "ph-cmd",
3116
- "version": "6.1.0-dev.17",
3126
+ "version": "6.1.0-dev.19",
3117
3127
  "description": "",
3118
3128
  "license": "AGPL-3.0-only",
3119
3129
  "type": "module",
@@ -3159,7 +3169,7 @@ async function migrate(version, projectDir = process.cwd()) {
3159
3169
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/browser",
3160
3170
  "manifest": {
3161
3171
  "name": "@powerhousedao/analytics-engine-browser",
3162
- "version": "6.1.0-dev.17",
3172
+ "version": "6.1.0-dev.19",
3163
3173
  "license": "AGPL-3.0-only",
3164
3174
  "repository": {
3165
3175
  "type": "git",
@@ -3205,7 +3215,7 @@ async function migrate(version, projectDir = process.cwd()) {
3205
3215
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/core",
3206
3216
  "manifest": {
3207
3217
  "name": "@powerhousedao/analytics-engine-core",
3208
- "version": "6.1.0-dev.17",
3218
+ "version": "6.1.0-dev.19",
3209
3219
  "license": "AGPL-3.0-only",
3210
3220
  "repository": {
3211
3221
  "type": "git",
@@ -3239,7 +3249,7 @@ async function migrate(version, projectDir = process.cwd()) {
3239
3249
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/graphql",
3240
3250
  "manifest": {
3241
3251
  "name": "@powerhousedao/analytics-engine-graphql",
3242
- "version": "6.1.0-dev.17",
3252
+ "version": "6.1.0-dev.19",
3243
3253
  "license": "AGPL-3.0-only",
3244
3254
  "repository": {
3245
3255
  "type": "git",
@@ -3273,7 +3283,7 @@ async function migrate(version, projectDir = process.cwd()) {
3273
3283
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/knex",
3274
3284
  "manifest": {
3275
3285
  "name": "@powerhousedao/analytics-engine-knex",
3276
- "version": "6.1.0-dev.17",
3286
+ "version": "6.1.0-dev.19",
3277
3287
  "license": "AGPL-3.0-only",
3278
3288
  "repository": {
3279
3289
  "type": "git",
@@ -3311,7 +3321,7 @@ async function migrate(version, projectDir = process.cwd()) {
3311
3321
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/analytics-engine/pg",
3312
3322
  "manifest": {
3313
3323
  "name": "@powerhousedao/analytics-engine-pg",
3314
- "version": "6.1.0-dev.17",
3324
+ "version": "6.1.0-dev.19",
3315
3325
  "license": "AGPL-3.0-only",
3316
3326
  "repository": {
3317
3327
  "type": "git",
@@ -3350,7 +3360,7 @@ async function migrate(version, projectDir = process.cwd()) {
3350
3360
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/builder-tools",
3351
3361
  "manifest": {
3352
3362
  "name": "@powerhousedao/builder-tools",
3353
- "version": "6.1.0-dev.17",
3363
+ "version": "6.1.0-dev.19",
3354
3364
  "type": "module",
3355
3365
  "license": "AGPL-3.0-only",
3356
3366
  "publishConfig": { "access": "public" },
@@ -3395,7 +3405,7 @@ async function migrate(version, projectDir = process.cwd()) {
3395
3405
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/codegen",
3396
3406
  "manifest": {
3397
3407
  "name": "@powerhousedao/codegen",
3398
- "version": "6.1.0-dev.17",
3408
+ "version": "6.1.0-dev.19",
3399
3409
  "license": "AGPL-3.0-only",
3400
3410
  "private": false,
3401
3411
  "type": "module",
@@ -3470,7 +3480,7 @@ async function migrate(version, projectDir = process.cwd()) {
3470
3480
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/common",
3471
3481
  "manifest": {
3472
3482
  "name": "@powerhousedao/common",
3473
- "version": "6.1.0-dev.17",
3483
+ "version": "6.1.0-dev.19",
3474
3484
  "license": "AGPL-3.0-only",
3475
3485
  "type": "module",
3476
3486
  "files": ["/dist"],
@@ -3525,7 +3535,7 @@ async function migrate(version, projectDir = process.cwd()) {
3525
3535
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/config",
3526
3536
  "manifest": {
3527
3537
  "name": "@powerhousedao/config",
3528
- "version": "6.1.0-dev.17",
3538
+ "version": "6.1.0-dev.19",
3529
3539
  "description": "",
3530
3540
  "license": "AGPL-3.0-only",
3531
3541
  "private": false,
@@ -3562,7 +3572,7 @@ async function migrate(version, projectDir = process.cwd()) {
3562
3572
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/design-system",
3563
3573
  "manifest": {
3564
3574
  "name": "@powerhousedao/design-system",
3565
- "version": "6.1.0-dev.17",
3575
+ "version": "6.1.0-dev.19",
3566
3576
  "description": "",
3567
3577
  "files": ["dist", "theme.css"],
3568
3578
  "type": "module",
@@ -3717,7 +3727,7 @@ async function migrate(version, projectDir = process.cwd()) {
3717
3727
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/document-model",
3718
3728
  "manifest": {
3719
3729
  "name": "document-model",
3720
- "version": "6.1.0-dev.17",
3730
+ "version": "6.1.0-dev.19",
3721
3731
  "license": "AGPL-3.0-only",
3722
3732
  "private": false,
3723
3733
  "files": ["dist"],
@@ -3779,7 +3789,7 @@ async function migrate(version, projectDir = process.cwd()) {
3779
3789
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/opentelemetry-instrumentation-reactor",
3780
3790
  "manifest": {
3781
3791
  "name": "@powerhousedao/opentelemetry-instrumentation-reactor",
3782
- "version": "6.1.0-dev.17",
3792
+ "version": "6.1.0-dev.19",
3783
3793
  "description": "OpenTelemetry instrumentation for @powerhousedao/reactor",
3784
3794
  "type": "module",
3785
3795
  "sideEffects": false,
@@ -3817,7 +3827,7 @@ async function migrate(version, projectDir = process.cwd()) {
3817
3827
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/pglite-fs",
3818
3828
  "manifest": {
3819
3829
  "name": "@powerhousedao/pglite-fs",
3820
- "version": "6.1.0-dev.17",
3830
+ "version": "6.1.0-dev.19",
3821
3831
  "license": "AGPL-3.0-only",
3822
3832
  "type": "module",
3823
3833
  "repository": {
@@ -3852,7 +3862,7 @@ async function migrate(version, projectDir = process.cwd()) {
3852
3862
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/powerhouse-vetra-packages",
3853
3863
  "manifest": {
3854
3864
  "name": "@powerhousedao/powerhouse-vetra-packages",
3855
- "version": "6.1.0-dev.17",
3865
+ "version": "6.1.0-dev.19",
3856
3866
  "description": "",
3857
3867
  "keywords": [],
3858
3868
  "author": "",
@@ -3975,7 +3985,7 @@ async function migrate(version, projectDir = process.cwd()) {
3975
3985
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor",
3976
3986
  "manifest": {
3977
3987
  "name": "@powerhousedao/reactor",
3978
- "version": "6.1.0-dev.17",
3988
+ "version": "6.1.0-dev.19",
3979
3989
  "description": "",
3980
3990
  "repository": {
3981
3991
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -4035,7 +4045,7 @@ async function migrate(version, projectDir = process.cwd()) {
4035
4045
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-api",
4036
4046
  "manifest": {
4037
4047
  "name": "@powerhousedao/reactor-api",
4038
- "version": "6.1.0-dev.17",
4048
+ "version": "6.1.0-dev.19",
4039
4049
  "description": "",
4040
4050
  "type": "module",
4041
4051
  "repository": {
@@ -4170,7 +4180,7 @@ async function migrate(version, projectDir = process.cwd()) {
4170
4180
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-attachments",
4171
4181
  "manifest": {
4172
4182
  "name": "@powerhousedao/reactor-attachments",
4173
- "version": "6.1.0-dev.17",
4183
+ "version": "6.1.0-dev.19",
4174
4184
  "license": "AGPL-3.0-only",
4175
4185
  "type": "module",
4176
4186
  "repository": {
@@ -4179,11 +4189,18 @@ async function migrate(version, projectDir = process.cwd()) {
4179
4189
  },
4180
4190
  "publishConfig": { "access": "public" },
4181
4191
  "files": ["dist"],
4182
- "exports": { ".": {
4183
- "source": "./index.ts",
4184
- "types": "./dist/index.d.ts",
4185
- "import": "./dist/index.js"
4186
- } },
4192
+ "exports": {
4193
+ ".": {
4194
+ "source": "./index.ts",
4195
+ "types": "./dist/index.d.ts",
4196
+ "import": "./dist/index.js"
4197
+ },
4198
+ "./client": {
4199
+ "source": "./src/client.ts",
4200
+ "types": "./dist/client.d.ts",
4201
+ "import": "./dist/client.js"
4202
+ }
4203
+ },
4187
4204
  "sideEffects": false,
4188
4205
  "scripts": {
4189
4206
  "tsc": "tsc",
@@ -4207,7 +4224,7 @@ async function migrate(version, projectDir = process.cwd()) {
4207
4224
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-browser",
4208
4225
  "manifest": {
4209
4226
  "name": "@powerhousedao/reactor-browser",
4210
- "version": "6.1.0-dev.17",
4227
+ "version": "6.1.0-dev.19",
4211
4228
  "license": "AGPL-3.0-only",
4212
4229
  "type": "module",
4213
4230
  "repository": {
@@ -4256,6 +4273,7 @@ async function migrate(version, projectDir = process.cwd()) {
4256
4273
  "@powerhousedao/analytics-engine-browser": "workspace:*",
4257
4274
  "@powerhousedao/analytics-engine-core": "workspace:*",
4258
4275
  "@powerhousedao/reactor": "workspace:*",
4276
+ "@powerhousedao/reactor-attachments": "workspace:*",
4259
4277
  "@powerhousedao/reactor-drive": "workspace:*",
4260
4278
  "@powerhousedao/shared": "workspace:*",
4261
4279
  "@renown/sdk": "workspace:*",
@@ -4314,7 +4332,7 @@ async function migrate(version, projectDir = process.cwd()) {
4314
4332
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-drive",
4315
4333
  "manifest": {
4316
4334
  "name": "@powerhousedao/reactor-drive",
4317
- "version": "6.1.0-dev.17",
4335
+ "version": "6.1.0-dev.19",
4318
4336
  "license": "AGPL-3.0-only",
4319
4337
  "type": "module",
4320
4338
  "repository": {
@@ -4356,7 +4374,7 @@ async function migrate(version, projectDir = process.cwd()) {
4356
4374
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-hypercore",
4357
4375
  "manifest": {
4358
4376
  "name": "@powerhousedao/reactor-hypercore",
4359
- "version": "6.1.0-dev.17",
4377
+ "version": "6.1.0-dev.19",
4360
4378
  "description": "Hypercore-backed IOperationStore for the Powerhouse Reactor",
4361
4379
  "repository": {
4362
4380
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -4399,7 +4417,7 @@ async function migrate(version, projectDir = process.cwd()) {
4399
4417
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/reactor-mcp",
4400
4418
  "manifest": {
4401
4419
  "name": "@powerhousedao/reactor-mcp",
4402
- "version": "6.1.0-dev.17",
4420
+ "version": "6.1.0-dev.19",
4403
4421
  "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.",
4404
4422
  "type": "module",
4405
4423
  "repository": {
@@ -4452,7 +4470,7 @@ async function migrate(version, projectDir = process.cwd()) {
4452
4470
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/registry",
4453
4471
  "manifest": {
4454
4472
  "name": "@powerhousedao/registry",
4455
- "version": "6.1.0-dev.17",
4473
+ "version": "6.1.0-dev.19",
4456
4474
  "description": "",
4457
4475
  "type": "module",
4458
4476
  "repository": {
@@ -4497,7 +4515,7 @@ async function migrate(version, projectDir = process.cwd()) {
4497
4515
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/renown",
4498
4516
  "manifest": {
4499
4517
  "name": "@renown/sdk",
4500
- "version": "6.1.0-dev.17",
4518
+ "version": "6.1.0-dev.19",
4501
4519
  "description": "",
4502
4520
  "license": "AGPL-3.0-only",
4503
4521
  "private": false,
@@ -4549,7 +4567,7 @@ async function migrate(version, projectDir = process.cwd()) {
4549
4567
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/shared",
4550
4568
  "manifest": {
4551
4569
  "name": "@powerhousedao/shared",
4552
- "version": "6.1.0-dev.17",
4570
+ "version": "6.1.0-dev.19",
4553
4571
  "type": "module",
4554
4572
  "sideEffects": false,
4555
4573
  "publishConfig": { "access": "public" },
@@ -4699,7 +4717,7 @@ async function migrate(version, projectDir = process.cwd()) {
4699
4717
  "dir": "/home/runner/work/powerhouse/powerhouse/packages/vetra",
4700
4718
  "manifest": {
4701
4719
  "name": "@powerhousedao/vetra",
4702
- "version": "6.1.0-dev.17",
4720
+ "version": "6.1.0-dev.19",
4703
4721
  "license": "AGPL-3.0-only",
4704
4722
  "type": "module",
4705
4723
  "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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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAwB,KAAK,YAAY,OAAO,CAAC,EACjD,SACD;CAED,MAAM,WAAW,eAAe,WAAW;CAC3C,MAAM,uBAAuB,SAAS,SACnC,MAAM,qBAAqB,GAAG,cAChC;CACD,MAAM,sBAAsB,SAAS,QAElC,KAAK,OAAO;EAAE,GAAG;EAAK,GAAG,qBAAqB,GAAG;EAAc,GAAG,EAAE,CAAC;CAExE,MAAM,uBAAuB,CAC3B,GAAG,6BACH,GAAG,qBACJ;CACD,MAAM,mBAAmB;EACvB,GAAG;EACH,GAAG,KAAK,2BAA2B;EACnC,GAAG,KAAK,oBAAoB;EAC7B;CACD,MAAM,sBAAsB,CAC1B,GAAG,4BACH,GAAG,qBACJ;CACD,MAAM,kBAAkB;EACtB,GAAG;EACH,GAAG,KAAK,wBAAwB;EAChC,GAAG,KAAK,oBAAoB;EAC7B;CAED,MAAM,gBAAgB;EACpB,GAAG,UAAU,6BAA6B,MAAM,EAAE,KAAK;EACvD,GAAG,UAAU,sBAAsB,MAAM,EAAE,KAAK;EACjD;CACD,MAAM,cAAc;EAClB,GAAG,UAAU,6BAA6B,MAAM,EAAE,IAAI;EACtD,GAAG,UAAU,sBAAsB,MAAM,EAAE,IAAI;EAChD;CAED,MAAM,qBAAqB;EACzB,YAAY;EACZ,YAAY;EACZ,YAAY;EACb;CAED,MAAM,mBAAmB,KACvB,YAAY,oBAAoB,EAAE,EAClC,KAAK,gBAAgB,EACrB,MACE,kBACE;EACE,GAAG,SAAS,4BAA4B,sBAAsB;EAC9D,GAAG;EACJ,EACD,mBACD,CACF,EACD,WAAW,OAAO,QAChB,uBAAuB,MAAM,GACzB,QACA,sBAAsB,SAAS,IAAI,GACjC,wBACA,MACP,EACD,UACD;CAED,MAAM,kBAAkB,KACtB,MAAM,YAAY,gBAAgB,EAAE,EAAE,YAAY,mBAAmB,EAAE,CAAC,EACxE,KAAK,iBAAiB,EACtB,MACE,kBACE;EACE,GAAG,SAAS,2BAA2B,sBAAsB;EAC7D,GAAG;EACH,GAAG;EACJ,EACD,mBACD,CACF,EACD,WAAW,OAAO,QAChB,uBAAuB,MAAM,GACzB,QACA,sBAAsB,SAAS,IAAI,GACjC,wBACA,MACP,EACD,UACD;AAED,WAAQ,IAAI,2BAA2B;CACvC,MAAM,qBAAkC;EACtC,GAAG;EACH,MAAM,YAAY,QAAQ;EAC1B,aAAa,YAAY,eAAe;EACxC,OAAO,YAAY,SAAS,CAAC,QAAQ;EACrC;EACA;EACA;EACA;EACD;AAGD,QAAQ,mBAAkD;AAC1D,OAAM,aAAa,YAAY,mBAAmB;AAElD,WAAQ,IAAI,oCAAoC;AAChD,OAAM,8BAA8B,WAAW;AAC/C,WAAQ,IAAI,wCAAwC;AACpD,0BAAyB,WAAW;CACpC,MAAM,UAAU,oBAAoB,WAAW;AAC/C,WAAQ,IAAI,gCAAgC;AAC5C,sBAAqB,SAAS,YAAY,KAAK;AAC/C,WAAQ,IAAI,6BAA6B;AACzC,OAAM,2BAA2B,WAAW;AAC5C,WAAQ,IAAI,wBAAwB;AACpC,OAAM,YAAY,QAAQ;AAC1B,OAAM,QAAQ,MAAM;;AAGtB,eAAe,2BAA2B,YAAoB;CAC5D,MAAM,QAAQ,MAAM,4CAA4C,WAAW;AAC3E,KAAI,CAAC,MACH,OAAM,IAAI,MACR,+DACD;CAEH,MAAM,iBAAiB,MAAM,mCAAmC,MAAM;AACtE,WAAQ,IAAI,kCAAkC,MAAM,IAAI;AACxD,QAAO,gBAAgB,EAAE,KAAK,YAAY,CAAC;;AAG7C,SAAS,yBAAyB,YAAoB;CACpD,MAAM,oBAAoB;EACxB;EACA;EACA;EACA;EACA;EACA;EACD;CACD,MAAM,iBAAiB,CAAC,OAAO,MAAM;CACrC,MAAM,OAAO,KACX,YAAY,KAAK,YAAY,kBAAkB,EAAE,EAAE,eAAe,MAAM,CAAC,EACzE,QAAQ,UAAU,MAAM,aAAa,CAAC,EACtC,QACG,QACC,SAAS,KAAK,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,KAAK,OAAO,EAAE,EAC3D,gBAAgB,OACjB,CAAC,EAAE,QAAQ,IAAI,MACnB,EACD,KAAK,QAAQ,KAAK,IAAI,YAAY,IAAI,KAAK,CAAC,CAC7C;AAED,MAAK,MAAM,WAAW,MAAM;AAC1B,OAAK,MAAM,QAAQ,kBAEjB,QADiB,KAAK,SAAS,KAAK,EACnB,EAAE,OAAO,MAAM,CAAC;EAEnC,MAAM,iBAAiB,KAAK,SAAS,KAAK;AAI1C,MAAI,EAFF,SAAS,gBAAgB,EAAE,gBAAgB,OAAO,CAAC,EAAE,aAAa,IAClE,OAEA,WAAU,eAAe;AAE3B,OAAK,MAAM,WAAW,gBAAgB;GACpC,MAAM,aAAa,KAAK,SAAS,QAAQ;AAGzC,OAAI,EADF,SAAS,YAAY,EAAE,gBAAgB,OAAO,CAAC,EAAE,aAAa,IAAI,OACjD;AAEnB,UAAO,YADa,KAAK,gBAAgB,QAAQ,EACjB;IAC9B,WAAW;IACX,OAAO;IACP,cAAc;IACf,CAAC;AACF,UAAO,YAAY;IACjB,OAAO;IACP,WAAW;IACZ,CAAC;;;;;;;;;;;ACnTR,SAAgB,gBAAgB,eAA+B;AAC7D,KAAI;AACF,UAAQ,IACN,YACA,2BAA2B,cAAc,MACzC,UACD;AACD,SAAO,aAAa,gBAAgB;EAIpC,MAAM,WAAW,cACd,MAAM,IAAI,CACV,KAAK,EACJ,QAAQ,UAAU,GAAG;AAEzB,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,uDAAuD;AAIzE,SADoBC,OAAK,KAAK,QAAQ,KAAK,EAAE,SAAS;UAE/C,OAAO;AACd,UAAQ,IAAI,MAAM;AAClB,QAAM;;;;;;;;AASV,SAAgB,oBACd,aACA,gBACM;AACN,KAAI;AACF,UAAQ,MAAM,YAAY;AAE1B,UAAQ,IACN,YACA,gCAAgC,eAAe,MAC/C,UACD;AAGD,SAAO,GAAG,eAAe,2BADvB,mBAAmB,SAAS,oCAAoC,KACN;AAE5D,UAAQ,IAAI,YAAY,wCAAwC,UAAU;AAC1E,UAAQ,KAAK;UACN,OAAO;AACd,UAAQ,IAAI,MAAM;AAClB,QAAM;;;;;AC5CV,MAAM,gBAAyD;CAC7D,MAAM;EACJ,UAAU;EACV,SAAS;EACV;CACD,KAAK;EACH,UAAU;EACV,SAAS;EACV;CACF;AAmBD,eAAsB,cAAc,EAClC,MACA,gBACA,KACA,SACA,aACA,aACA,aACA,SACoB;CACpB,MAAM,UAAU,KAAK,KAAK,QAAQ,KAAK,EAAE,KAAK;AAE9C,KAAIC,KAAG,WAAW,QAAQ,CACxB,OAAM,IAAI,MACR,iBAAiB,KAAK,yEACvB;AAGH,KAAI,OAAO;AACT,QAAM,uBAAuB;GAC3B;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;AACF;;AAIF,SAAQ,IAAI,MAAM,KAAK,sCAAsC,KAAK,QAAQ,CAAC;AAC3E,MAAG,UAAU,QAAQ;AACrB,SAAQ,MAAM,QAAQ;AACtB,SAAQ,IAAI,MAAM,MAAM,gCAAgC,CAAC;AAEzD,OAAM,qBAAqB,cAAc,kBAAkB;AAC3D,KAAI,CAAC,aAAa;AAEhB,UAAQ,IAAI,MAAM,KAAK,sCAAsC,CAAC;AAC9D,SAAO,WAAW;AAClB,UAAQ,IAAI,MAAM,MAAM,mCAAmC,CAAC;;AAI9D,SAAQ,IAAI,MAAM,KAAK,6CAA6C,CAAC;AACrE,OAAM,sBAAsB;EAC1B;EACA;EACA;EACA;EACA;EACD,CAAC;AACF,OAAM,+BAA+B;AACrC,SAAQ,IAAI,MAAM,MAAM,wCAAwC,CAAC;AAEjE,KAAI,CAAC,aAAa;AAEhB,UAAQ,IACN,MAAM,KACJ,2CAA2C,eAAe,OAC3D,CACF;AAGD,SAAO,GAAG,eAAe,UADvB,mBAAmB,SAAS,oCAAoC,KACvB;AAC3C,UAAQ,IAAI,MAAM,MAAM,uCAAuC,CAAC;;AAIlE,SAAQ,IAAI,MAAM,KAAK,+CAA+C,CAAC;AACvE,OAAM,aAAa;AACnB,SAAQ,IAAI,MAAM,MAAM,kCAAkC,CAAC;AAG3D,SAAQ,IAAI,MAAM,KAAK,oCAAoC,KAAK,QAAQ,CAAC;;;;;;;;;;;;;AAc3E,eAAe,uBAAuB,MAQnC;CACD,MAAM,EACJ,MACA,SACA,OACA,gBACA,aACA,aACA,gBACE;CAKJ,MAAM,SAAS,cAAc;AAC7B,KAAI,CAAC,OACH,OAAM,IAAI,MACR,2DAA2D,eAAe,KAC3E;CAEH,MAAM,YAAY,KAAK,QAAQ,QAAQ,KAAK,EAAE,MAAM;AACpD,KAAI,CAACA,KAAG,WAAW,UAAU,IAAI,CAACA,KAAG,SAAS,UAAU,CAAC,aAAa,CACpE,OAAM,IAAI,MACR,mBAAmB,MAAM,4BAA4B,UAAU,oDAChE;AAEH,KAAI,CAACA,KAAG,WAAW,KAAK,KAAK,WAAW,OAAO,SAAS,CAAC,CACvD,OAAM,IAAI,MACR,mBAAmB,MAAM,WAAW,OAAO,SAAS,mBAAmB,eAAe,iCACvF;AAKH,SAAQ,IAAI,MAAM,KAAK,4BAA4B,MAAM,QAAQ,CAAC;AAClE,MAAG,OAAO,WAAW,SAAS;EAC5B,WAAW;EACX,SAAS,QAAQ;GACf,MAAM,OAAO,KAAK,SAAS,IAAI;AAG/B,UACE,SAAS,kBACT,SAAS,UACT,SAAS,UACT,CAAC,KAAK,SAAS,eAAe;;EAGnC,CAAC;AACF,SAAQ,IAAI,MAAM,MAAM,2BAA2B,CAAC;AAEpD,KAAI,CAAC,aAAa;AAChB,UAAQ,IAAI,MAAM,KAAK,sCAAsC,CAAC;AAC9D,SAAO,YAAY,EAAE,KAAK,SAAS,CAAC;AACpC,UAAQ,IAAI,MAAM,MAAM,mCAAmC,CAAC;;AAG9D,SAAQ,IAAI,MAAM,KAAK,0CAA0C,CAAC;AAClE,OAAM,2BAA2B;EAAE;EAAM,YAAY;EAAS;EAAa,CAAC;AAC5E,SAAQ,IAAI,MAAM,MAAM,qCAAqC,CAAC;AAE9D,KAAI,CAAC,aAAa;AAEhB,UAAQ,IACN,MAAM,KAAK,0DAA0D,CACtE;AACD,SAAO,OAAO,SAAS,EAAE,KAAK,SAAS,CAAC;AACxC,UAAQ,IAAI,MAAM,MAAM,6CAA6C,CAAC;;AAGxE,SAAQ,IACN,MAAM,KAAK,mCAAmC,KAAK,UAAU,MAAM,QAAQ,CAC5E;;;;ACjNH,IAAsB,gBAAtB,MAAoC;CAClC,YACE,eACA,kBACA,oBACA;AAHU,OAAA,gBAAA;AACA,OAAA,mBAAA;AACA,OAAA,qBAAA;;;;;ACKd,IAAa,mBAAb,MAAa,yBAAyB,cAAc;CAClD,MAAM,SAAS,SAA2C;AAExD,MAAI,QAAQ,WAAW,WAAW,EAAG;EAErC,MAAM,WAAW,KAAK,cAAc,QAAQ;EAC5C,MAAM,aAAa,MAAM,KAAK,iBAAiB,iBAC7C,QAAQ,SACR,SACD;EAED,MAAM,cAAc,QAAQ;EAE5B,MAAM,iBAAiB,GAAG,WAAW,QAAQ,SAAS,KAAK,GAAG,WAAW,QAAQ,OAAO,KAAK,CAAC;EAC9F,MAAM,iBAAiB,GAAG,YAAY,mBAAmB,UAAU,QAAQ,SAAS,KAAK;AAGzF,OAAK,cAAc,oBACjB,YACA,gBACA,gBACA,KACD;AAGD,OAAK,oBAAoB,YAAY,gBAAgB,QAAQ;AAG7D,OAAK,gBAAgB,YAAY,QAAQ;AAEzC,QAAM,WAAW,MAAM;;CAGzB,OAAe,sBAAsB,YAA8B;AACjE,SAAO,CACL,uBAAuB,WAAW,YAClC,6BAA6B,WAAW,0BACzC;;CAGH,gBACE,YACA,SACM;EAEN,MAAM,YAA2C,EAAE;AAEnD,UAAQ,WAAW,SAAS,cAAc;AACxC,OAAI,MAAM,QAAQ,UAAU,OAAO,CACjC,WAAU,OACP,QAAQ,UAAU,MAAM,KAAK,CAC7B,SAAS,UAAU;AAElB,QAAI,CAAC,UAAU,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK,CAC/C,WAAU,KAAK,MAAM;KAEvB;IAEN;AAEF,MAAI,UAAU,WAAW,EAAG;EAG5B,MAAM,oBAAoB,WAAW,aAAa;EAClD,MAAM,6BAAa,IAAI,KAAa;AAEpC,YAAU,SAAS,UAAU;AAI3B,OADqB,IAAI,OAAO,MAAM,MAAM,KAAK,MAAM,IAAI,CAC1C,KAAK,kBAAkB,CACtC,YAAW,IAAI,MAAM,KAAM;IAE7B;AAGF,MAAI,WAAW,OAAO,GAAG;GACvB,MAAM,kBAAkB,aAAa,UAAU,QAAQ,OAAO,KAAK,CAAC;GACpE,MAAM,kBAAkB,MAAM,KAAK,WAAW;GAI9C,MAAM,sBADkB,WAAW,uBAAuB,CACd,MACzC,eACC,WAAW,yBAAyB,KAAK,gBAC5C;AAED,OAAI,qBAAqB;IAEvB,MAAM,uBAAuB,oBAC1B,iBAAiB,CACjB,KAAK,gBAAgB,YAAY,SAAS,CAAC;IAG9C,MAAM,oBAAoB,gBAAgB,QACvC,cAAc,CAAC,qBAAqB,SAAS,UAAU,CACzD;AAED,QAAI,kBAAkB,SAAS,EAE7B,qBAAoB,gBAAgB,kBAAkB;SAIxD,MAAK,cAAc,gBACjB,YACA,iBACA,gBACD;;;CAKP,cAAsB,SAAoC;AACxD,SAAO,KAAK,iBAAiB,eAC3B,QAAQ,SACR,QAAQ,SAAS,MACjB,QAAQ,OAAO,KAChB;;CAGH,oBACE,YACA,UACA,SACM;EACN,MAAM,EAAE,YAAY,gBAAgB;EACpC,MAAM,8BAA8B,GAAG,UAAU,QAAQ,SAAS,KAAK,GAAG,WAAW,QAAQ,OAAO,KAAK,CAAC;AAE1G,MADyB,WAAW,uBAAuB,UAAU,CAEnE,MAAK,mBAAmB,eACtB,YACA,WACA,4BACD;EAEH,IAAI,aAAa,WAAW,uBAC1B,4BACD;AACD,MAAI,CAAC,YAAY;AACf,cAAW,qBAAqB;IAC9B,iBAAiB,wBAAwB;IACzC,YAAY;IACZ,cAAc,CACZ;KACE,MAAM;KACN,MAAM;KACN,aAAa;KACd,CACF;IACF,CAAC;AACF,gBAAa,WAAW,8BACtB,4BACD;SACI;GAEL,MAAM,WAAW,WAAW,aAAa;AACzC,OAAI,CAAC,YAAY,SAAS,SAAS,KAAK,SACtC,YAAW,QAAQ,SAAS;;EAIhC,MAAM,cAAc,WAAW,4BAC7B,WAAW,wBACZ;AAED,OAAK,MAAM,aAAa,WACtB,MAAK,iBAAiB,aAAa,WAAW,YAAY;;CAI9D,iBACE,eACA,WACA,cAAc,OACR;EACN,MAAM,aAAa,UAAU,UAAU,QAAQ,GAAG;AAClD,MAAI,CAAC,WAAY;EAEjB,MAAM,aAAa,GAAG,WAAW;EAEjC,MAAM,cAAc,UAAU,SAAS,MAAM;EAE7C,MAAM,kBAAkB,cACrB,YAAY,WAAW,EACtB,OAAO,WAAW,kBAAkB;AAGxC,MAAI,iBAAiB;AACnB,OAAI,eAAe,aAAa;AAC9B,oBAAgB,YAAY,GAAG;AAC/B,SAAK,qBAAqB,iBAAiB,YAAY;;AAEzD;;EAIF,MAAM,SAAS,cAAc,UAAU;GACrC,MAAM;GACN,YAAY,CAAC,EAAE,MAAM,SAAS,EAAE,EAAE,MAAM,UAAU,CAAC;GACpD,CAAC;AACF,OAAK,qBAAqB,QAAQ,YAAY;;CAGhD,qBAA6B,SAA4B,MAAe;AACtE,UAAQ,cACN,OAAO,CAAC,KAAK,GAAG,iBAAiB,sBAAsB,QAAQ,SAAS,CAAC,CAC1E;;;;;AC3NL,IAAa,qBAAb,MAAgC;CAC9B,eACE,YACA,SACA,SACM;EACN,MAAM,WAAW,WAAW,uBAAuB,QAAQ;AAE3D,MAAI,UAAU;AACZ,YAAS,aAAa,CAAC,gBAAgB,QAAQ;AAC/C,cAAW,UAAU;;;;;;ACN3B,IAAa,mBAAb,MAA8B;CAC5B,cAAsD;EACpD,kBAAkB;EAClB,YAAY;EACZ,eAAe;EACf,cAAc;EACf;CAED,YAAY,cAAoC,EAAE,EAAE;AAClD,OAAK,cAAc;GACjB,GAAG,KAAK;GACR,GAAG;GACJ;;CAEH,MAAM,aAAa,SAAgC;AACjD,MAAI;AACF,SAAMC,KAAG,MAAM,SAAS,EAAE,WAAW,MAAM,CAAC;WACrC,KAAK;AACZ,WAAQ,MAAM,+BAA+B,WAAW,IAAI;AAC5D,SAAM;;;CAKV,eACE,SACA,cACA,YACQ;AACR,SAAO,KAAK,KACV,SACA,KAAK,YAAY,kBACjB,UAAU,aAAa,EACvB,OACA,YACA,GAAG,UAAU,WAAW,CAAC,KAC1B;;CAGH,eACE,SACA,cACA,YACQ;AACR,SAAO,KAAK,KACV,SACA,KAAK,YAAY,kBACjB,UAAU,aAAa,EACvB,OACA,WACA,GAAG,UAAU,WAAW,CAAC,KAC1B;;CAGH,iBACE,SACA,cACA,eACQ;AACR,SAAO,KAAK,KACV,SACA,KAAK,YAAY,kBACjB,UAAU,aAAa,EACvB,OACA,cACA,GAAG,WAAW,cAAc,CAAC,MAC9B;;CAGH,aAAa,SAAiB,cAA8B;AAC1D,SAAO,KAAK,KACV,SACA,KAAK,YAAY,kBACjB,UAAU,aAAa,EACvB,OACA,WACD;;CAGH,MAAM,iBACJ,SACA,UACqB;AACrB,QAAM,KAAK,aAAa,KAAK,QAAQ,SAAS,CAAC;AAC/C,SACE,QAAQ,4BAA4B,SAAS,IAC7C,QAAQ,iBAAiB,UAAU,IAAI,EAAE,WAAW,OAAO,CAAC;;;;;ACnFlE,IAAa,gBAAb,MAA2B;CACzB,UAAU,YAAwB,MAAwB;EAExD,MAAM,WAAW,WAAW,sBACzB,QAAQ,IAAI,aAAa,KAAK,KAAK,gBACrC;AACD,MAAI,SACF,MAAK,aAAa,UAAU,KAAK;MAEjC,YAAW,qBAAqB,KAAK;;CAIzC,cAAc,YAAwB,UAAkB,MAAoB;AAC1E,OAAK,UAAU,YAAY;GACzB,iBAAiB;GACjB,cAAc,CAAC,SAAS;GACxB,YAAY;GACb,CAAC;;CAGJ,gBACE,YACA,SACA,MACM;AACN,OAAK,UAAU,YAAY;GACzB,iBAAiB;GACjB,cAAc;GACf,CAAC;;CAGJ,aACE,gBACA,SACM;AAEN,MAAI,QAAQ,cAAc;GACxB,MAAM,gBAAgB,eACnB,iBAAiB,CACjB,KAAK,OAAO,GAAG,SAAS,CAAC;GAC5B,MAAM,WAAW,QAAQ,aAAa,QACnC,SAAS,CAAC,cAAc,SAAS,KAAK,CACxC;AAED,OAAI,SAAS,SAAS,EACpB,gBAAe,gBAAgB,SAAS;;;CAK9C,oBACE,YACA,MACA,MACA,aAAa,OACP;AACW,aACd,uBAAuB,CACvB,QAAQ,QACP,IAAI,iBAAiB,CAAC,MAAM,OAAO,GAAG,SAAS,KAAK,KAAK,CAC1D,CACM,SAAS,QAAQ,IAAI,QAAQ,CAAC;AACvC,aAAW,qBAAqB;GAC9B,iBAAiB;GACjB,cAAc,CAAC,KAAK;GACpB;GACD,CAAC;AACF,aAAW,UAAU;;;;;AC3DzB,IAAa,uBAAb,MAAkC;CAChC,UAAkB,IAAI,SAAS;CAC/B,6BAAqB,IAAI,KAA4B;CACrD,cAA4C;EAC1C,kBAAkB;EAClB,YAAY;EACZ,eAAe;EACf,cAAc;EACf;CACD,cAAsB;CAEtB,YACE,SACA,WACA,aACA,UAAgC;EAAE,aAAa,EAAE;EAAE,aAAa;EAAO,EACvE;AAJQ,OAAA,UAAA;AACA,OAAA,YAAA;AACA,OAAA,cAAA;AAGR,OAAK,cAAc;GACjB,GAAG,KAAK;GACR,GAAG,QAAQ;GACZ;AACD,OAAK,cAAc;AACnB,OAAK,cAAc,QAAQ,eAAe;AAE1C,OAAK,iBAAiB;;CAGxB,kBAAgC;EAC9B,MAAM,gBAAgB,IAAI,eAAe;EACzC,MAAM,mBAAmB,IAAI,iBAAiB,KAAK,YAAY;EAC/D,MAAM,qBAAqB,IAAI,oBAAoB;AAEnD,OAAK,WAAW,IACd,YACA,IAAI,iBAAiB,eAAe,kBAAkB,mBAAmB,CAC1E;;CAIH,MAAM,mBAAkC;AACtC,QAAM,KAAK,iBAAiB,WAAW;;CAIzC,MAAM,cAA6B;AACjC,OAAK,MAAM,CAAC,SAAS,KAAK,WACxB,OAAM,KAAK,iBAAiB,KAAK;;CAIrC,MAAc,iBAAiB,MAA6B;EAC1D,MAAM,YAAY,KAAK,WAAW,IAAI,KAAK;AAC3C,MAAI,CAAC,UACH,OAAM,IAAI,MAAM,qCAAqC,OAAO;AAG9D,QAAM,KAAK,cAAc;AAEzB,OAAK,MAAM,YAAY,KAAK,WAAW;GACrC,MAAM,aACJ,SAAS,eAAe,SAAS,eAAe,SAAS;AAE3D,QAAK,MAAM,UAAU,WAAW,SAAS;IACvC,MAAM,UAAU,KAAK,wBACnB,UACA,QACA,KAAK,YACN;AAED,UAAM,UAAU,SAAS,QAAQ;;;;CAKvC,MAAc,eAA8B;EAE1C,MAAM,cAAwB,EAAE;AAEhC,MAAI,KAAK,YAAY,kBAAkB;GACrC,MAAM,UAAU,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY;AACpD,SAAM,KAAK,sBAAsB,QAAQ;AACzC,eAAY,KAAK,GAAG,QAAQ,UAAU;;AAExC,MAAI,KAAK,YAAY,YAAY;GAC/B,MAAM,UAAU,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY;AACpD,SAAM,KAAK,sBAAsB,QAAQ;AACzC,eAAY,KAAK,GAAG,QAAQ,UAAU;;AAExC,MAAI,KAAK,YAAY,eAAe;GAClC,MAAM,UAAU,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY;AACpD,SAAM,KAAK,sBAAsB,QAAQ;AACzC,eAAY,KAAK,GAAG,QAAQ,UAAU;;AAExC,MAAI,KAAK,YAAY,cAAc;GACjC,MAAM,UAAU,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY;AACpD,SAAM,KAAK,sBAAsB,QAAQ;AACzC,eAAY,KAAK,GAAG,QAAQ,UAAU;;AAIxC,cAAY,KAAK,IAAI,KAAK,QAAQ,qBAAqB;AAEvD,MAAI,YAAY,SAAS,EACvB,MAAK,QAAQ,sBAAsB,YAAY;;CAInD,wBACE,UACA,QACA,cAAc,OACK;EACnB,MAAM,aAAiC,OAAO,WAAW,KAAK,QAAQ;GACpE,GAAG;GACH,UAAU,GAAG,WAAW;GACxB,eAAe,GAAG,QAAQ,SAAS,eAAe;GAClD,OAAO,GAAG,SAAS;GACnB,OAAO,GAAG,UAAU,WAAW,KAAK,GAAG;GACxC,EAAE;AAEH,SAAO;GACL,SAAS,KAAK;GACd,aAAa,KAAK;GAClB;GACA;GACA,SAAS,KAAK;GACd;GACA;GACD;;CAGH,MAAc,sBAAsB,SAAgC;AAClE,MAAI;AACF,SAAMC,KAAG,MAAM,SAAS,EAAE,WAAW,MAAM,CAAC;WACrC,KAAK;AACZ,WAAQ,MAAM,+BAA+B,WAAW,IAAI;AAC5D,SAAM"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/codegen",
3
- "version": "6.1.0-dev.17",
3
+ "version": "6.1.0-dev.19",
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
- "document-model": "6.1.0-dev.17",
57
- "@powerhousedao/shared": "6.1.0-dev.17"
56
+ "@powerhousedao/shared": "6.1.0-dev.19",
57
+ "document-model": "6.1.0-dev.19"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@pnpm/find-workspace-dir": "^1000.1.5",