@powerhousedao/codegen 4.1.0-dev.9 → 4.1.0-dev.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.md +0 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.js +10 -0
  7. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/resolvers.esm.t +17 -0
  8. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/schema.esm.t +16 -0
  9. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/documentModel.esm.t +2 -2
  10. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.esm.t +8 -2
  11. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.js +69 -54
  12. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/ph-factories.esm.t +93 -0
  13. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/reducer.esm.t +9 -4
  14. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/rootIndex.esm.t +6 -7
  15. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/types.esm.t +20 -8
  16. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/utils.esm.t +19 -26
  17. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/creators.esm.t +1 -1
  18. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/customTest.esm.t +2 -2
  19. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/error.esm.t +6 -10
  20. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js +52 -27
  21. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.js +21 -20
  22. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/resolvers.esm.t +64 -51
  23. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/schema.esm.t +4 -10
  24. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/CreateDocument.esm.t +39 -28
  25. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/DriveExplorer.esm.t +138 -223
  26. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderTree.esm.t +95 -72
  27. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/config.esm.t +10 -0
  28. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/editor.esm.t +7 -71
  29. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.esm.t +5 -10
  30. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.js +12 -0
  31. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/editor.esm.t +103 -18
  32. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/hooks.esm.t +16 -0
  33. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.esm.t +5 -12
  34. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js +28 -15
  35. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.js +8 -10
  36. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/factory.esm.t +5 -4
  37. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.esm.t +5 -9
  38. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.js +11 -15
  39. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.root.inject.esm.t +12 -0
  40. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.esm.t +8 -6
  41. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_call.esm.t +1 -1
  42. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_import.esm.t +1 -1
  43. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/factory.esm.t +6 -5
  44. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.esm.t +6 -13
  45. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.js +11 -15
  46. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.root.inject.esm.t +12 -0
  47. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.esm.t +8 -9
  48. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_call.esm.t +2 -2
  49. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_import.esm.t +1 -1
  50. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/migrations.esm.t +2 -2
  51. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/schema.esm.t +10 -2
  52. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.esm.t +5 -36
  53. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.js +9 -11
  54. package/dist/src/codegen/generate.d.ts +33 -0
  55. package/dist/src/codegen/generate.d.ts.map +1 -0
  56. package/dist/src/codegen/generate.js +202 -0
  57. package/dist/src/codegen/generate.js.map +1 -0
  58. package/dist/src/codegen/graphql.d.ts +2 -2
  59. package/dist/src/codegen/graphql.d.ts.map +1 -1
  60. package/dist/src/codegen/graphql.js +1 -1
  61. package/dist/src/codegen/graphql.js.map +1 -1
  62. package/dist/src/codegen/hygen.d.ts +18 -11
  63. package/dist/src/codegen/hygen.d.ts.map +1 -1
  64. package/dist/src/codegen/hygen.js +57 -21
  65. package/dist/src/codegen/hygen.js.map +1 -1
  66. package/dist/src/codegen/index.d.ts +6 -32
  67. package/dist/src/codegen/index.d.ts.map +1 -1
  68. package/dist/src/codegen/index.js +6 -182
  69. package/dist/src/codegen/index.js.map +1 -1
  70. package/dist/src/codegen/types.d.ts +9 -0
  71. package/dist/src/codegen/types.d.ts.map +1 -0
  72. package/dist/src/codegen/types.js +2 -0
  73. package/dist/src/codegen/types.js.map +1 -0
  74. package/dist/src/codegen/utils.d.ts +5 -2
  75. package/dist/src/codegen/utils.d.ts.map +1 -1
  76. package/dist/src/codegen/utils.js +42 -4
  77. package/dist/src/codegen/utils.js.map +1 -1
  78. package/dist/src/create-lib/create-project.d.ts.map +1 -1
  79. package/dist/src/create-lib/create-project.js +17 -2
  80. package/dist/src/create-lib/create-project.js.map +1 -1
  81. package/dist/src/index.d.ts +5 -0
  82. package/dist/src/index.d.ts.map +1 -0
  83. package/dist/src/index.js +5 -0
  84. package/dist/src/index.js.map +1 -0
  85. package/dist/src/ts-morph-generator/core/FileGenerator.d.ts +2 -3
  86. package/dist/src/ts-morph-generator/core/FileGenerator.d.ts.map +1 -1
  87. package/dist/src/ts-morph-generator/core/FileGenerator.js.map +1 -1
  88. package/dist/src/ts-morph-generator/core/GenerationContext.d.ts +18 -8
  89. package/dist/src/ts-morph-generator/core/GenerationContext.d.ts.map +1 -1
  90. package/dist/src/ts-morph-generator/core/ReducerGenerator.d.ts +12 -0
  91. package/dist/src/ts-morph-generator/core/ReducerGenerator.d.ts.map +1 -0
  92. package/dist/src/ts-morph-generator/core/ReducerGenerator.js +140 -0
  93. package/dist/src/ts-morph-generator/core/ReducerGenerator.js.map +1 -0
  94. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.d.ts +4 -3
  95. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.d.ts.map +1 -1
  96. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.js +11 -10
  97. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.js.map +1 -1
  98. package/dist/src/ts-morph-generator/index.d.ts +2 -2
  99. package/dist/src/ts-morph-generator/index.d.ts.map +1 -1
  100. package/dist/src/ts-morph-generator/index.js +2 -2
  101. package/dist/src/ts-morph-generator/index.js.map +1 -1
  102. package/dist/src/ts-morph-generator/utilities/DirectoryManager.d.ts +2 -2
  103. package/dist/src/ts-morph-generator/utilities/DirectoryManager.d.ts.map +1 -1
  104. package/dist/src/ts-morph-generator/utilities/ImportManager.d.ts +1 -1
  105. package/dist/src/ts-morph-generator/utilities/ImportManager.d.ts.map +1 -1
  106. package/dist/src/utils/index.d.ts +0 -1
  107. package/dist/src/utils/index.d.ts.map +1 -1
  108. package/dist/src/utils/index.js +0 -1
  109. package/dist/src/utils/index.js.map +1 -1
  110. package/dist/src/utils/validation.d.ts +6 -6
  111. package/dist/src/utils/validation.d.ts.map +1 -1
  112. package/dist/src/utils/validation.js +2 -2
  113. package/dist/src/utils/validation.js.map +1 -1
  114. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  115. package/package.json +25 -27
  116. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.d.ts +0 -25
  117. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.d.ts.map +0 -1
  118. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.js.map +0 -1
  119. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/object.esm.t +0 -49
  120. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.d.ts +0 -23
  121. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.d.ts.map +0 -1
  122. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js.map +0 -1
  123. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/object.esm.t +0 -37
  124. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.d.ts +0 -22
  125. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.d.ts.map +0 -1
  126. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.js.map +0 -1
  127. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/EditorContainer.esm.t +0 -124
  128. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FileItemsGrid.esm.t +0 -44
  129. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderItemsGrid.esm.t +0 -96
  130. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/hooks/useSelectedFolderChildren.esm.t +0 -35
  131. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/hooks/useTransformedNodes.esm.t +0 -35
  132. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/types/css.d.esm.t +0 -8
  133. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.d.ts +0 -20
  134. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.d.ts.map +0 -1
  135. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js.map +0 -1
  136. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.d.ts +0 -14
  137. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.d.ts.map +0 -1
  138. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.js.map +0 -1
  139. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.d.ts +0 -20
  140. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.d.ts.map +0 -1
  141. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.js.map +0 -1
  142. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.d.ts +0 -20
  143. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.d.ts.map +0 -1
  144. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.js.map +0 -1
  145. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.d.ts +0 -16
  146. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.d.ts.map +0 -1
  147. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.js.map +0 -1
  148. package/dist/src/ts-morph-generator/core/index.d.ts +0 -4
  149. package/dist/src/ts-morph-generator/core/index.d.ts.map +0 -1
  150. package/dist/src/ts-morph-generator/core/index.js +0 -4
  151. package/dist/src/ts-morph-generator/core/index.js.map +0 -1
  152. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.d.ts +0 -9
  153. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.d.ts.map +0 -1
  154. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.js +0 -69
  155. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.js.map +0 -1
  156. package/dist/src/ts-morph-generator/file-generators/index.d.ts +0 -2
  157. package/dist/src/ts-morph-generator/file-generators/index.d.ts.map +0 -1
  158. package/dist/src/ts-morph-generator/file-generators/index.js +0 -2
  159. package/dist/src/ts-morph-generator/file-generators/index.js.map +0 -1
  160. package/dist/src/utils/package-manager.d.ts +0 -5
  161. package/dist/src/utils/package-manager.d.ts.map +0 -1
  162. package/dist/src/utils/package-manager.js +0 -17
  163. package/dist/src/utils/package-manager.js.map +0 -1
  164. package/dist/tsconfig.hygen.tsbuildinfo +0 -1
package/README.md CHANGED
@@ -16,7 +16,6 @@ A powerful code generation toolkit for the Powerhouse ecosystem, designed to aut
16
16
  pnpm add @powerhousedao/codegen
17
17
  ```
18
18
 
19
-
20
19
  ## Templates
21
20
 
22
21
  The package supports custom templates for different output formats:
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./src/codegen/index.js";
2
2
  export * from "./src/create-lib/index.js";
3
+ export * from "./src/ts-morph-generator/index.js";
3
4
  export * from "./src/utils/index.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./src/codegen/index.js";
2
2
  export * from "./src/create-lib/index.js";
3
+ export * from "./src/ts-morph-generator/index.js";
3
4
  export * from "./src/utils/index.js";
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ // @ts-check
2
+ const generateCustomSubgraph = {
3
+ params: ({ args }) => {
4
+ return {
5
+ rootDir: args.rootDir,
6
+ subgraph: args.subgraph,
7
+ };
8
+ },
9
+ };
10
+ module.exports = generateCustomSubgraph;
@@ -0,0 +1,17 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(subgraph) %>/resolvers.ts"
3
+ unless_exists: true
4
+ ---
5
+ import { type Subgraph } from "@powerhousedao/reactor-api";
6
+
7
+ export const getResolvers = (subgraph: Subgraph): Record<string, unknown> => {
8
+ const reactor = subgraph.reactor;
9
+
10
+ return ({
11
+ Query: {
12
+ example: async (parent: unknown, args: { driveId: string }) => {
13
+ return "example";
14
+ },
15
+ },
16
+ });
17
+ };
@@ -0,0 +1,16 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(subgraph) %>/schema.ts"
3
+ unless_exists: true
4
+ ---
5
+ import { gql } from "graphql-tag";
6
+ import type { DocumentNode } from "graphql";
7
+
8
+ export const schema: DocumentNode = gql`
9
+ """
10
+ Subgraph definition
11
+ """
12
+ type Query {
13
+ example(driveId: String!): String
14
+ }
15
+
16
+ `
@@ -2,6 +2,6 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/document-model.ts"
3
3
  force: true
4
4
  ---
5
- import type { DocumentModelState } from "document-model";
5
+ import type { DocumentModelGlobalState } from "document-model";
6
6
 
7
- export const documentModel: DocumentModelState = <%- documentModel %>;
7
+ export const documentModel: DocumentModelGlobalState = <%- documentModel %>;
@@ -4,6 +4,12 @@ force: true
4
4
  ---
5
5
  export * from './actions.js';
6
6
  export * from './document-model.js';
7
- export * from './object.js';
8
7
  export * from './types.js';
9
- export * as actions from './creators.js';
8
+ export * as actions from './creators.js';
9
+ export {
10
+ create<%= h.changeCase.pascal(documentType) %>Document,
11
+ createState,
12
+ defaultPHState,
13
+ defaultGlobalState,
14
+ defaultLocalState,
15
+ } from './ph-factories.js';
@@ -1,63 +1,78 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const change_case_1 = require("change-case");
1
+ // @ts-check
2
+ const { paramCase } = require("change-case");
3
+
4
4
  function documentModelToString(documentModel) {
5
- return JSON.stringify({
6
- ...documentModel,
7
- specifications: documentModel.specifications.map((s) => ({
8
- ...s,
9
- state: Object.keys(s.state).reduce((values, scope) => {
10
- const state = s.state[scope];
11
- return {
12
- ...values,
13
- [scope]: {
14
- ...state,
15
- // initial value has to be stringified twice
16
- // as it is expected to be a string
17
- initialValue: JSON.stringify(state.initialValue),
18
- },
19
- };
20
- }, {}),
21
- })),
22
- }, null, 2);
23
- }
24
- exports.default = {
25
- params: ({ args, }) => {
26
- const documentModel = JSON.parse(args.documentModel);
27
- const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
28
- return {
29
- rootDir: args.rootDir,
30
- documentModel: documentModelToString(documentModel),
31
- documentTypeId: documentModel.id,
32
- documentType: documentModel.name,
33
- extension: documentModel.extension,
34
- modules: latestSpec.modules.map((m) => ({
35
- ...m,
36
- name: (0, change_case_1.paramCase)(m.name),
37
- })),
38
- fileExtension: documentModel.extension,
39
- hasLocalSchema: latestSpec.state.local.schema !== "",
40
- ...getInitialStates(latestSpec.state),
41
- };
5
+ return JSON.stringify(
6
+ {
7
+ ...documentModel,
8
+ specifications: documentModel.specifications.map((s) => ({
9
+ ...s,
10
+ state: Object.keys(s.state).reduce((values, scope) => {
11
+ const state = s.state[scope];
12
+ return {
13
+ ...values,
14
+ [scope]: {
15
+ ...state,
16
+ // initial value has to be stringified twice
17
+ // as it is expected to be a string
18
+ initialValue: JSON.stringify(state.initialValue),
19
+ },
20
+ };
21
+ }, {}),
22
+ })),
42
23
  },
43
- };
44
- function getInitialStates(scopeState) {
45
- const { global, local } = scopeState;
46
- const scopes = { global, local };
47
- Object.entries(scopes).forEach(([scope, state]) => {
48
- if (!isEmptyStateSchema(state.schema) && state.initialValue === "") {
49
- throw new Error(`${scope.charAt(0).toLocaleUpperCase() + scope.slice(1)} scope has a defined schema but is missing an initial value.`);
50
- }
51
- });
24
+ null,
25
+ 2,
26
+ );
27
+ }
28
+
29
+ module.exports = {
30
+ params: ({ args }) => {
31
+ const documentModel = JSON.parse(args.documentModel);
32
+ const latestSpec =
33
+ documentModel.specifications[documentModel.specifications.length - 1];
34
+
52
35
  return {
53
- initialGlobalState: handleEmptyState(global.initialValue),
54
- initialLocalState: handleEmptyState(local.initialValue),
36
+ rootDir: args.rootDir,
37
+ documentModel: documentModelToString(documentModel),
38
+ documentTypeId: documentModel.id,
39
+ documentType: documentModel.name,
40
+ extension: documentModel.extension,
41
+ modules: latestSpec.modules.map((m) => ({
42
+ ...m,
43
+ name: paramCase(m.name),
44
+ })),
45
+ fileExtension: documentModel.extension,
46
+ hasLocalSchema: latestSpec.state.local.schema !== "",
47
+ ...getInitialStates(latestSpec.state),
55
48
  };
49
+ },
50
+ };
51
+
52
+ function getInitialStates(scopeState) {
53
+ const { global, local } = scopeState;
54
+ const scopes = { global, local };
55
+
56
+ Object.entries(scopes).forEach(([scope, state]) => {
57
+ if (!isEmptyStateSchema(state.schema) && state.initialValue === "") {
58
+ throw new Error(
59
+ `${
60
+ scope.charAt(0).toLocaleUpperCase() + scope.slice(1)
61
+ } scope has a defined schema but is missing an initial value.`,
62
+ );
63
+ }
64
+ });
65
+
66
+ return {
67
+ initialGlobalState: handleEmptyState(global.initialValue),
68
+ initialLocalState: handleEmptyState(local.initialValue),
69
+ };
56
70
  }
71
+
57
72
  function isEmptyStateSchema(schema) {
58
- return schema === "" || !schema.includes("{");
73
+ return schema === "" || !schema.includes("{");
59
74
  }
75
+
60
76
  function handleEmptyState(state) {
61
- return state === "" ? "{}" : state;
77
+ return state === "" ? "{}" : state;
62
78
  }
63
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,93 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/ph-factories.ts"
3
+ force: true
4
+ ---
5
+ /**
6
+ * Factory methods for creating <%= h.changeCase.pascal(documentType) %>Document instances
7
+ */
8
+ import type {
9
+ PHAuthState,
10
+ PHDocumentState,
11
+ PHBaseState,
12
+ } from "document-model";
13
+ import {
14
+ createBaseState,
15
+ defaultBaseState,
16
+ } from "document-model/core";
17
+ import type {
18
+ <%= h.changeCase.pascal(documentType) %>Document,
19
+ <%= h.changeCase.pascal(documentType) %>LocalState,
20
+ <%= h.changeCase.pascal(documentType) %>GlobalState,
21
+ <%= h.changeCase.pascal(documentType) %>PHState,
22
+ } from "./types.js";
23
+ import { createDocument } from "./utils.js";
24
+
25
+ export function defaultGlobalState(): <%= h.changeCase.pascal(documentType) %>GlobalState {
26
+ return <%- initialGlobalState %>;
27
+ }
28
+
29
+ export function defaultLocalState(): <%= h.changeCase.pascal(documentType) %>LocalState {
30
+ return <%- initialLocalState %>;
31
+ }
32
+
33
+ export function defaultPHState(): <%= h.changeCase.pascal(documentType) %>PHState {
34
+ return {
35
+ ...defaultBaseState(),
36
+ global: defaultGlobalState(),
37
+ local: defaultLocalState(),
38
+ };
39
+ }
40
+
41
+ export function createGlobalState(
42
+ state?: Partial<<%= h.changeCase.pascal(documentType) %>GlobalState>,
43
+ ): <%= h.changeCase.pascal(documentType) %>GlobalState {
44
+ return {
45
+ ...defaultGlobalState(),
46
+ ...(state || {}),
47
+ } as <%= h.changeCase.pascal(documentType) %>GlobalState;
48
+ }
49
+
50
+ export function createLocalState(
51
+ state?: Partial<<%= h.changeCase.pascal(documentType) %>LocalState>,
52
+ ): <%= h.changeCase.pascal(documentType) %>LocalState {
53
+ return {
54
+ ...defaultLocalState(),
55
+ ...(state || {}),
56
+ } as <%= h.changeCase.pascal(documentType) %>LocalState;
57
+ }
58
+
59
+ export function createState(
60
+ baseState?: Partial<PHBaseState>,
61
+ globalState?: Partial<<%= h.changeCase.pascal(documentType) %>GlobalState>,
62
+ localState?: Partial<<%= h.changeCase.pascal(documentType) %>LocalState>,
63
+ ): <%= h.changeCase.pascal(documentType) %>PHState {
64
+ return {
65
+ ...createBaseState(baseState?.auth, baseState?.document),
66
+ global: createGlobalState(globalState),
67
+ local: createLocalState(localState),
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Creates a <%= h.changeCase.pascal(documentType) %>Document with custom global and local state
73
+ * This properly handles the PHBaseState requirements while allowing
74
+ * document-specific state to be set.
75
+ */
76
+ export function create<%= h.changeCase.pascal(documentType) %>Document(
77
+ state?: Partial<{
78
+ auth?: Partial<PHAuthState>;
79
+ document?: Partial<PHDocumentState>;
80
+ global?: Partial<<%= h.changeCase.pascal(documentType) %>GlobalState>;
81
+ local?: Partial<<%= h.changeCase.pascal(documentType) %>LocalState>;
82
+ }>,
83
+ ): <%= h.changeCase.pascal(documentType) %>Document {
84
+ const document = createDocument(
85
+ state ? createState(
86
+ createBaseState(state.auth, state.document),
87
+ state.global,
88
+ state.local,
89
+ ) : undefined
90
+ );
91
+
92
+ return document;
93
+ }
@@ -2,14 +2,19 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/reducer.ts"
3
3
  force: true
4
4
  ---
5
- import { type StateReducer, isDocumentAction, createReducer } from "document-model";
6
- import { <%= 'type ' + h.changeCase.pascal(documentType) %>Document, z } from './types.js';
5
+ // TODO: remove eslint-disable rules once refactor is done
6
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
7
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
8
+ import type { StateReducer } from "document-model";
9
+ import { isDocumentAction, createReducer } from "document-model/core";
10
+ import type { <%= h.changeCase.pascal(documentType) %>PHState } from './types.js';
11
+ import { z } from './types.js';
7
12
 
8
13
  <% modules.forEach(m => { _%>
9
14
  import { reducer as <%= h.changeCase.pascal(m.name) %>Reducer } from '../src/reducers/<%= h.changeCase.param(m.name) %>.js';
10
15
  <%_ }); %>
11
16
 
12
- const stateReducer: StateReducer<<%= h.changeCase.pascal(documentType) %>Document> =
17
+ export const stateReducer: StateReducer<<%= h.changeCase.pascal(documentType) %>PHState> =
13
18
  (state, action, dispatch) => {
14
19
  if (isDocumentAction(action)) {
15
20
  return state;
@@ -31,4 +36,4 @@ const stateReducer: StateReducer<<%= h.changeCase.pascal(documentType) %>Documen
31
36
  }
32
37
  }
33
38
 
34
- export const reducer = createReducer<<%= h.changeCase.pascal(documentType) %>Document>(stateReducer);
39
+ export const reducer = createReducer<<%= h.changeCase.pascal(documentType) %>PHState>(stateReducer);
@@ -7,26 +7,25 @@ force: true
7
7
  * Delete the file and run the code generator again to have it reset
8
8
  */
9
9
 
10
- import { actions as BaseActions, type DocumentModelModule } from 'document-model';
10
+ import { createState, type DocumentModelModule, baseActions } from 'document-model';
11
+ import { defaultBaseState } from 'document-model/core';
11
12
  import { actions as <%= h.changeCase.pascal(documentType) %>Actions } from './gen/index.js';
12
13
  import { reducer } from './gen/reducer.js';
13
14
  import { documentModel } from './gen/document-model.js';
14
15
  import genUtils from './gen/utils.js';
15
16
  import * as customUtils from './src/utils.js';
16
- import {
17
- <%= 'type ' + h.changeCase.pascal(documentType) %>Document,
18
- } from './gen/types.js';
17
+ import type { <%= h.changeCase.pascal(documentType) %>PHState } from './gen/types.js';
19
18
 
20
19
  const utils = { ...genUtils, ...customUtils };
21
- const actions = { ...BaseActions, ...<%= h.changeCase.pascal(documentType) %>Actions };
20
+ const actions = { ...baseActions, ...<%= h.changeCase.pascal(documentType) %>Actions };
22
21
 
23
22
  export const module: DocumentModelModule<
24
- <%= h.changeCase.pascal(documentType) %>Document
23
+ <%= h.changeCase.pascal(documentType) %>PHState
25
24
  > = {
26
25
  reducer,
27
26
  actions,
28
27
  utils,
29
- documentModel,
28
+ documentModel: createState(defaultBaseState(), documentModel),
30
29
  };
31
30
 
32
31
  export { reducer, actions, utils, documentModel };
@@ -2,18 +2,30 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/types.ts"
3
3
  force: true
4
4
  ---
5
- import type { PHDocument, ExtendedState } from 'document-model';
6
- import type { <%= h.changeCase.pascal(documentType) %>State } from './schema/types.js';
5
+ import type { PHDocument, PHBaseState } from 'document-model';
6
+ import type { <%= h.changeCase.pascal(documentType) %>Action } from './actions.js';
7
+ import type {
8
+ <%= h.changeCase.pascal(documentType) %>State as <%= h.changeCase.pascal(documentType) %>GlobalState,
7
9
  <% if(hasLocalSchema) { -%>
8
- import type { <%= h.changeCase.pascal(documentType) %>LocalState } from './schema/types.js';
10
+ <%= h.changeCase.pascal(documentType) %>LocalState,
9
11
  <%} -%>
10
- import type { <%= h.changeCase.pascal(documentType) %>Action } from './actions.js';
12
+ } from './schema/types.js';
11
13
 
12
14
  export { z } from './schema/index.js';
13
- export type * from './schema/types.js';
15
+ export * from './schema/types.js';
14
16
  <% if(!hasLocalSchema) { -%>
15
17
  <%= 'type ' + h.changeCase.pascal(documentType) %>LocalState = Record<PropertyKey, never>;
16
18
  <%} -%>
17
- export type Extended<%= h.changeCase.pascal(documentType) %>State = ExtendedState<<%= h.changeCase.pascal(documentType) %>State, <%= h.changeCase.pascal(documentType) %>LocalState>;
18
- export <%= 'type ' + h.changeCase.pascal(documentType) %>Document = PHDocument<<%= h.changeCase.pascal(documentType) %>State, <%= h.changeCase.pascal(documentType) %>LocalState>;
19
- export type { <%= h.changeCase.pascal(documentType) %>State, <%= h.changeCase.pascal(documentType) %>LocalState, <%= h.changeCase.pascal(documentType) %>Action };
19
+ type <%= h.changeCase.pascal(documentType) %>PHState = PHBaseState & {
20
+ global: <%= h.changeCase.pascal(documentType) %>GlobalState;
21
+ local: <%= h.changeCase.pascal(documentType) %>LocalState;
22
+ };
23
+ type <%= h.changeCase.pascal(documentType) %>Document = PHDocument<<%= h.changeCase.pascal(documentType) %>PHState>;
24
+
25
+ export type {
26
+ <%= h.changeCase.pascal(documentType) %>GlobalState,
27
+ <%= h.changeCase.pascal(documentType) %>LocalState,
28
+ <%= h.changeCase.pascal(documentType) %>PHState,
29
+ <%= h.changeCase.pascal(documentType) %>Action,
30
+ <%= h.changeCase.pascal(documentType) %>Document,
31
+ };
@@ -2,41 +2,35 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/utils.ts"
3
3
  force: true
4
4
  ---
5
+ import type {
6
+ DocumentModelUtils,
7
+ } from "document-model";
5
8
  import {
6
- type DocumentModelUtils,
7
9
  baseCreateDocument,
8
- baseCreateExtendedState,
9
- baseSaveToFile,
10
10
  baseSaveToFileHandle,
11
- baseLoadFromFile,
12
11
  baseLoadFromInput,
12
+ defaultBaseState,
13
13
  generateId,
14
- } from 'document-model';
15
- import {
16
- <%= 'type ' + h.changeCase.pascal(documentType) %>Document,
17
- <%= 'type ' + h.changeCase.pascal(documentType) %>State,
18
- <%= 'type ' + h.changeCase.pascal(documentType) %>LocalState
14
+ } from 'document-model/core';
15
+ import type {
16
+ <%= h.changeCase.pascal(documentType) %>GlobalState,
17
+ <%= h.changeCase.pascal(documentType) %>LocalState
19
18
  } from './types.js';
19
+ import type { <%= h.changeCase.pascal(documentType) %>PHState } from './types.js';
20
20
  import { reducer } from './reducer.js';
21
21
 
22
- export const initialGlobalState: <%= h.changeCase.pascal(documentType) %>State = <%- initialGlobalState %>;
22
+ export const initialGlobalState: <%= h.changeCase.pascal(documentType) %>GlobalState = <%- initialGlobalState %>;
23
23
  export const initialLocalState: <%= h.changeCase.pascal(documentType) %>LocalState = <%- initialLocalState %>;
24
24
 
25
- const utils: DocumentModelUtils<<%= h.changeCase.pascal(documentType) %>Document> = {
25
+ const utils: DocumentModelUtils<<%= h.changeCase.pascal(documentType) %>PHState> = {
26
26
  fileExtension: '<%- fileExtension %>',
27
27
  createState(state) {
28
- return { global: { ...initialGlobalState, ...state?.global }, local: { ...initialLocalState, ...state?.local } };
29
- },
30
- createExtendedState(extendedState) {
31
- return baseCreateExtendedState(
32
- { ...extendedState },
33
- utils.createState
34
- );
28
+ return { ...defaultBaseState(), global: { ...initialGlobalState, ...state?.global }, local: { ...initialLocalState, ...state?.local } };
35
29
  },
36
30
  createDocument(state) {
37
31
  const document = baseCreateDocument(
38
- utils.createExtendedState(state),
39
- utils.createState
32
+ utils.createState,
33
+ state
40
34
  );
41
35
 
42
36
  document.header.documentType = '<%- documentTypeId %>';
@@ -46,18 +40,17 @@ const utils: DocumentModelUtils<<%= h.changeCase.pascal(documentType) %>Document
46
40
 
47
41
  return document;
48
42
  },
49
- saveToFile(document, path, name) {
50
- return baseSaveToFile(document, path, '<%- fileExtension %>', name);
51
- },
52
43
  saveToFileHandle(document, input) {
53
44
  return baseSaveToFileHandle(document, input);
54
45
  },
55
- loadFromFile(path) {
56
- return baseLoadFromFile(path, reducer);
57
- },
58
46
  loadFromInput(input) {
59
47
  return baseLoadFromInput(input, reducer);
60
48
  },
61
49
  };
62
50
 
51
+ export const createDocument = utils.createDocument;
52
+ export const createState = utils.createState;
53
+ export const saveToFileHandle = utils.saveToFileHandle;
54
+ export const loadFromInput = utils.loadFromInput;
55
+
63
56
  export default utils;
@@ -2,7 +2,7 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/<%= module %>/creators.ts"
3
3
  force: true
4
4
  ---
5
- import { createAction<% if (actions.find(a => a.hasAttachment)) {%>, AttachmentInput<%}%> } from 'document-model';
5
+ import { createAction<% if (actions.find(a => a.hasAttachment)) {%>, AttachmentInput<%}%> } from 'document-model/core';
6
6
  import { z,
7
7
  <% actions.filter(a => a.hasInput).forEach(action => { _%>
8
8
  <%= 'type ' + h.changeCase.pascal(action.name) %>Input,
@@ -39,10 +39,10 @@ describe('<%= h.changeCase.pascal(module) %> Operations', () => {
39
39
  );
40
40
 
41
41
  expect(updatedDocument.operations.<%= action.scope %>).toHaveLength(1);
42
- expect(updatedDocument.operations.<%= action.scope %>[0].type).toBe(
42
+ expect(updatedDocument.operations.<%= action.scope %>[0].action.type).toBe(
43
43
  '<%= h.changeCase.constant(action.name) %>',
44
44
  );
45
- expect(updatedDocument.operations.<%= action.scope %>[0].input).toStrictEqual(input);
45
+ expect(updatedDocument.operations.<%= action.scope %>[0].action.input).toStrictEqual(input);
46
46
  expect(updatedDocument.operations.<%= action.scope %>[0].index).toEqual(0);
47
47
  });
48
48
  <% }); _%>
@@ -2,20 +2,17 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(documentType) %>/gen/<%= module %>/error.ts"
3
3
  force: true
4
4
  ---
5
- <% if (actions.some(action => action.errors?.length > 0)) { _%>
5
+ <% if (errors.length > 0) { _%>
6
6
  export type ErrorCode =
7
- <% actions.forEach((action, actionIndex) => { _%>
8
- <% action.errors.forEach((error, errorIndex) => { _%>
9
- | '<%= h.changeCase.pascal(error.name) %>'<% if (actionIndex === actions.length - 1 && errorIndex === action.errors.length - 1) { %>;<% } %>
10
- <% }); _%>
7
+ <% errors.forEach((error, errorIndex) => { _%>
8
+ | '<%= h.changeCase.pascal(error.name) %>'<% if (errorIndex === errors.length - 1) { %>;<% } %>
11
9
  <% }); _%>
12
10
 
13
11
  export interface ReducerError {
14
12
  errorCode: ErrorCode;
15
13
  }
16
14
 
17
- <% actions.forEach(action => { _%>
18
- <% action.errors.forEach(error => { _%>
15
+ <% errors.forEach(error => { _%>
19
16
  export class <%= h.changeCase.pascal(error.name) %> extends Error implements ReducerError {
20
17
  errorCode = '<%= h.changeCase.pascal(error.name) %>' as ErrorCode;
21
18
  constructor(message = '<%= h.changeCase.pascal(error.name) %>') {
@@ -23,7 +20,6 @@ export class <%= h.changeCase.pascal(error.name) %> extends Error implements Red
23
20
  }
24
21
  }
25
22
 
26
- <% }); _%>
27
23
  <% }); _%>
28
24
 
29
25
  <% } _%>
@@ -32,9 +28,9 @@ export const errors = {
32
28
  <% if(action.errors?.length > 0){ -%>
33
29
  <%= h.changeCase.pascal(action.name) %>: {
34
30
  <% action.errors.forEach(error => { _%>
35
- <%= h.changeCase.pascal(error.name) %>,
31
+ <%= h.changeCase.pascal(error.name) %>,
36
32
  <% }); _%>
37
- },
33
+ },
38
34
  <% } -%>
39
35
  <% }); _%>
40
36
  };