document-model 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +197 -0
  3. package/dist/browser/document-model.cjs +1 -0
  4. package/dist/browser/document-model.d.ts +1 -0
  5. package/dist/browser/document-model.js +17 -0
  6. package/dist/browser/document.cjs +1 -0
  7. package/dist/browser/document.d.ts +1 -0
  8. package/dist/browser/document.js +15 -0
  9. package/dist/browser/index-1aa6b70c.js +1 -0
  10. package/dist/browser/index-47a38d27.mjs +1776 -0
  11. package/dist/browser/index-71473ecd.js +22 -0
  12. package/dist/browser/index-ede882c4.mjs +29 -0
  13. package/dist/browser/index.cjs +1 -0
  14. package/dist/browser/index.d.ts +3 -0
  15. package/dist/browser/index.js +18 -0
  16. package/dist/browser/object-38724dbb.js +1 -0
  17. package/dist/browser/object-916a56cd.mjs +641 -0
  18. package/dist/browser/src/document/actions/creators.d.ts +46 -0
  19. package/dist/browser/src/document/actions/index.d.ts +10 -0
  20. package/dist/browser/src/document/actions/types.d.ts +9 -0
  21. package/dist/browser/src/document/index.d.ts +5 -0
  22. package/dist/browser/src/document/object.d.ts +118 -0
  23. package/dist/browser/src/document/reducer.d.ts +15 -0
  24. package/dist/browser/src/document/schema/index.d.ts +2 -0
  25. package/dist/browser/src/document/schema/types.d.ts +168 -0
  26. package/dist/browser/src/document/schema/zod.d.ts +72 -0
  27. package/dist/browser/src/document/types.d.ts +154 -0
  28. package/dist/browser/src/document/utils/base.d.ts +55 -0
  29. package/dist/browser/src/document/utils/file.d.ts +47 -0
  30. package/dist/browser/src/document/utils/index.d.ts +2 -0
  31. package/dist/browser/src/document/utils/node.d.ts +9 -0
  32. package/dist/browser/src/document-model/custom/reducers/header.d.ts +2 -0
  33. package/dist/browser/src/document-model/custom/reducers/module.d.ts +2 -0
  34. package/dist/browser/src/document-model/custom/reducers/operation-error.d.ts +2 -0
  35. package/dist/browser/src/document-model/custom/reducers/operation-example.d.ts +2 -0
  36. package/dist/browser/src/document-model/custom/reducers/operation.d.ts +2 -0
  37. package/dist/browser/src/document-model/custom/reducers/state.d.ts +2 -0
  38. package/dist/browser/src/document-model/custom/reducers/versioning.d.ts +7 -0
  39. package/dist/browser/src/document-model/custom/utils.d.ts +1 -0
  40. package/dist/browser/src/document-model/gen/actions.d.ts +15 -0
  41. package/dist/browser/src/document-model/gen/creators.d.ts +7 -0
  42. package/dist/browser/src/document-model/gen/document-model.d.ts +2 -0
  43. package/dist/browser/src/document-model/gen/header/actions.d.ts +9 -0
  44. package/dist/browser/src/document-model/gen/header/creators.d.ts +8 -0
  45. package/dist/browser/src/document-model/gen/header/object.d.ts +11 -0
  46. package/dist/browser/src/document-model/gen/header/operations.d.ts +10 -0
  47. package/dist/browser/src/document-model/gen/index.d.ts +5 -0
  48. package/dist/browser/src/document-model/gen/module/actions.d.ts +8 -0
  49. package/dist/browser/src/document-model/gen/module/creators.d.ts +7 -0
  50. package/dist/browser/src/document-model/gen/module/object.d.ts +10 -0
  51. package/dist/browser/src/document-model/gen/module/operations.d.ts +9 -0
  52. package/dist/browser/src/document-model/gen/object.d.ts +28 -0
  53. package/dist/browser/src/document-model/gen/operation/actions.d.ts +12 -0
  54. package/dist/browser/src/document-model/gen/operation/creators.d.ts +11 -0
  55. package/dist/browser/src/document-model/gen/operation/object.d.ts +14 -0
  56. package/dist/browser/src/document-model/gen/operation/operations.d.ts +13 -0
  57. package/dist/browser/src/document-model/gen/operation-error/actions.d.ts +10 -0
  58. package/dist/browser/src/document-model/gen/operation-error/creators.d.ts +9 -0
  59. package/dist/browser/src/document-model/gen/operation-error/object.d.ts +12 -0
  60. package/dist/browser/src/document-model/gen/operation-error/operations.d.ts +11 -0
  61. package/dist/browser/src/document-model/gen/operation-example/actions.d.ts +7 -0
  62. package/dist/browser/src/document-model/gen/operation-example/creators.d.ts +6 -0
  63. package/dist/browser/src/document-model/gen/operation-example/object.d.ts +9 -0
  64. package/dist/browser/src/document-model/gen/operation-example/operations.d.ts +8 -0
  65. package/dist/browser/src/document-model/gen/reducer.d.ts +3 -0
  66. package/dist/browser/src/document-model/gen/schema/index.d.ts +2 -0
  67. package/dist/browser/src/document-model/gen/schema/types.d.ts +435 -0
  68. package/dist/browser/src/document-model/gen/schema/zod.d.ts +428 -0
  69. package/dist/browser/src/document-model/gen/state/actions.d.ts +9 -0
  70. package/dist/browser/src/document-model/gen/state/creators.d.ts +8 -0
  71. package/dist/browser/src/document-model/gen/state/object.d.ts +11 -0
  72. package/dist/browser/src/document-model/gen/state/operations.d.ts +10 -0
  73. package/dist/browser/src/document-model/gen/types.d.ts +8 -0
  74. package/dist/browser/src/document-model/gen/utils.d.ts +4 -0
  75. package/dist/browser/src/document-model/gen/versioning/actions.d.ts +8 -0
  76. package/dist/browser/src/document-model/gen/versioning/creators.d.ts +7 -0
  77. package/dist/browser/src/document-model/gen/versioning/object.d.ts +10 -0
  78. package/dist/browser/src/document-model/gen/versioning/operations.d.ts +9 -0
  79. package/dist/browser/src/document-model/index.d.ts +73 -0
  80. package/dist/browser/src/index.d.ts +25 -0
  81. package/dist/browser/src/index.doc.d.ts +20 -0
  82. package/dist/browser/vite.config.d.ts +2 -0
  83. package/dist/node/document-model.cjs +1 -0
  84. package/dist/node/document-model.d.ts +1 -0
  85. package/dist/node/document-model.js +20 -0
  86. package/dist/node/document.cjs +1 -0
  87. package/dist/node/document.d.ts +1 -0
  88. package/dist/node/document.js +18 -0
  89. package/dist/node/index-03f82dde.mjs +29 -0
  90. package/dist/node/index-0b695055.js +1 -0
  91. package/dist/node/index-78a1221c.mjs +1779 -0
  92. package/dist/node/index-fbaffded.js +22 -0
  93. package/dist/node/index.cjs +1 -0
  94. package/dist/node/index.d.ts +3 -0
  95. package/dist/node/index.js +21 -0
  96. package/dist/node/object-b1510be8.js +1 -0
  97. package/dist/node/object-bdb7f8c6.mjs +654 -0
  98. package/dist/node/src/document/actions/creators.d.ts +46 -0
  99. package/dist/node/src/document/actions/index.d.ts +10 -0
  100. package/dist/node/src/document/actions/types.d.ts +9 -0
  101. package/dist/node/src/document/index.d.ts +5 -0
  102. package/dist/node/src/document/object.d.ts +118 -0
  103. package/dist/node/src/document/reducer.d.ts +15 -0
  104. package/dist/node/src/document/schema/index.d.ts +2 -0
  105. package/dist/node/src/document/schema/types.d.ts +168 -0
  106. package/dist/node/src/document/schema/zod.d.ts +72 -0
  107. package/dist/node/src/document/types.d.ts +154 -0
  108. package/dist/node/src/document/utils/base.d.ts +55 -0
  109. package/dist/node/src/document/utils/file.d.ts +47 -0
  110. package/dist/node/src/document/utils/index.d.ts +2 -0
  111. package/dist/node/src/document/utils/node.d.ts +9 -0
  112. package/dist/node/src/document-model/custom/reducers/header.d.ts +2 -0
  113. package/dist/node/src/document-model/custom/reducers/module.d.ts +2 -0
  114. package/dist/node/src/document-model/custom/reducers/operation-error.d.ts +2 -0
  115. package/dist/node/src/document-model/custom/reducers/operation-example.d.ts +2 -0
  116. package/dist/node/src/document-model/custom/reducers/operation.d.ts +2 -0
  117. package/dist/node/src/document-model/custom/reducers/state.d.ts +2 -0
  118. package/dist/node/src/document-model/custom/reducers/versioning.d.ts +7 -0
  119. package/dist/node/src/document-model/custom/utils.d.ts +1 -0
  120. package/dist/node/src/document-model/gen/actions.d.ts +15 -0
  121. package/dist/node/src/document-model/gen/creators.d.ts +7 -0
  122. package/dist/node/src/document-model/gen/document-model.d.ts +2 -0
  123. package/dist/node/src/document-model/gen/header/actions.d.ts +9 -0
  124. package/dist/node/src/document-model/gen/header/creators.d.ts +8 -0
  125. package/dist/node/src/document-model/gen/header/object.d.ts +11 -0
  126. package/dist/node/src/document-model/gen/header/operations.d.ts +10 -0
  127. package/dist/node/src/document-model/gen/index.d.ts +5 -0
  128. package/dist/node/src/document-model/gen/module/actions.d.ts +8 -0
  129. package/dist/node/src/document-model/gen/module/creators.d.ts +7 -0
  130. package/dist/node/src/document-model/gen/module/object.d.ts +10 -0
  131. package/dist/node/src/document-model/gen/module/operations.d.ts +9 -0
  132. package/dist/node/src/document-model/gen/object.d.ts +28 -0
  133. package/dist/node/src/document-model/gen/operation/actions.d.ts +12 -0
  134. package/dist/node/src/document-model/gen/operation/creators.d.ts +11 -0
  135. package/dist/node/src/document-model/gen/operation/object.d.ts +14 -0
  136. package/dist/node/src/document-model/gen/operation/operations.d.ts +13 -0
  137. package/dist/node/src/document-model/gen/operation-error/actions.d.ts +10 -0
  138. package/dist/node/src/document-model/gen/operation-error/creators.d.ts +9 -0
  139. package/dist/node/src/document-model/gen/operation-error/object.d.ts +12 -0
  140. package/dist/node/src/document-model/gen/operation-error/operations.d.ts +11 -0
  141. package/dist/node/src/document-model/gen/operation-example/actions.d.ts +7 -0
  142. package/dist/node/src/document-model/gen/operation-example/creators.d.ts +6 -0
  143. package/dist/node/src/document-model/gen/operation-example/object.d.ts +9 -0
  144. package/dist/node/src/document-model/gen/operation-example/operations.d.ts +8 -0
  145. package/dist/node/src/document-model/gen/reducer.d.ts +3 -0
  146. package/dist/node/src/document-model/gen/schema/index.d.ts +2 -0
  147. package/dist/node/src/document-model/gen/schema/types.d.ts +435 -0
  148. package/dist/node/src/document-model/gen/schema/zod.d.ts +428 -0
  149. package/dist/node/src/document-model/gen/state/actions.d.ts +9 -0
  150. package/dist/node/src/document-model/gen/state/creators.d.ts +8 -0
  151. package/dist/node/src/document-model/gen/state/object.d.ts +11 -0
  152. package/dist/node/src/document-model/gen/state/operations.d.ts +10 -0
  153. package/dist/node/src/document-model/gen/types.d.ts +8 -0
  154. package/dist/node/src/document-model/gen/utils.d.ts +4 -0
  155. package/dist/node/src/document-model/gen/versioning/actions.d.ts +8 -0
  156. package/dist/node/src/document-model/gen/versioning/creators.d.ts +7 -0
  157. package/dist/node/src/document-model/gen/versioning/object.d.ts +10 -0
  158. package/dist/node/src/document-model/gen/versioning/operations.d.ts +9 -0
  159. package/dist/node/src/document-model/index.d.ts +73 -0
  160. package/dist/node/src/index.d.ts +25 -0
  161. package/dist/node/src/index.doc.d.ts +20 -0
  162. package/dist/node/vite.config.d.ts +2 -0
  163. package/package.json +89 -0
package/README.md ADDED
@@ -0,0 +1,197 @@
1
+ # Powerhouse Document Model
2
+
3
+ ## Getting started
4
+
5
+ Install the library:
6
+
7
+ - NPM: `npm install @acaldas/document-model-libs`
8
+ - Yarn: `yarn add @acaldas/document-model-libs`
9
+
10
+ ## Documentation
11
+
12
+ The full documentation for this package is available at: https://acaldas.github.io/document-model-libs/
13
+
14
+ There are two ways to interact with a document:
15
+
16
+ ### Functional:
17
+
18
+ ```javascript
19
+ import {
20
+ actions,
21
+ reducer,
22
+ utils,
23
+ } from '@acaldas/document-model-libs/budget-statement';
24
+
25
+ let budgetStatement = utils.createDocument({
26
+ name: 'March report',
27
+ data: { month: '2023/01' },
28
+ });
29
+
30
+ budgetStatement = reducer(
31
+ budgetStatement,
32
+ actions.addAccount([{ address: 'eth:0x00' }])
33
+ );
34
+ ```
35
+
36
+ ### Object oriented:
37
+
38
+ ```javascript
39
+ import { BudgetStatement } from '@acaldas/document-model-libs/budget-statement';
40
+
41
+ const budgetStatement = new BudgetStatement({
42
+ name: 'march',
43
+ data: { month: '2023/01' },
44
+ });
45
+ budgetStatement.addAccount([{ address: 'eth:0x00' }]);
46
+ ```
47
+
48
+ ## Architecture
49
+
50
+ This implementation is inspired by the [Flux architecture pattern](https://facebookarchive.github.io/flux/). All state changes are performed by a reducer, which is a pure function that enforces state transitions:
51
+
52
+ ```javascript
53
+ const newState = reducer(state, action);
54
+ ```
55
+
56
+ The business logic is implemented in pure functions, making it easy to test and integrate into different applications. The operations history is kept to allow reverting changes.
57
+
58
+ An action is a JSON object with the action name and payload:
59
+
60
+ ```javascript
61
+ {
62
+ type: 'SET_NAME';
63
+ input: {
64
+ name: 'March report';
65
+ }
66
+ }
67
+ ```
68
+
69
+ To make it easier to create actions and avoid bugs, an action creator is provided for each action. This is a function that accepts the action input and returns the JSON structure. For the case above the action creator would be:
70
+
71
+ ```javascript
72
+ state = reducer(state, setName('March report'));
73
+ ```
74
+
75
+ An Object-oriented version is also provided. A document can be instantiated and interacted in an imperative way:
76
+
77
+ ```javascript
78
+ const document = new Document();
79
+ document.setName('March report');
80
+ ```
81
+
82
+ ## Base Document Model
83
+
84
+ All document models extend the Base Document model, which provides some common features. A document has the following structure:
85
+
86
+ ```javascript
87
+ {
88
+ name: "SES 2023-01 expense report", // name of the document
89
+ documentType: "powerhouse/budget-statement", // type of the document model
90
+ revision: 4, // number of operations applied to the document
91
+ created: "2023-02-05 12:15:01", // date of creation of the document
92
+ lastModified: "2023-02-05 12:15:01", // date of the last modification
93
+ data: {} // specific state of the document, to be implemented by document models
94
+ }
95
+ ```
96
+
97
+ ### Base Document Actions
98
+
99
+ Document reducers are wrapped by the Base Document reducer, which is responsible for updating the document attributes described above and adds support for some base document features.
100
+
101
+ ▸ For more information on Document actions, please refer to the [complete documentation](markdown/modules/Document.actions.md).
102
+
103
+ - `SET_NAME`: Changes the name of the document
104
+
105
+ ```javascript
106
+ setName(name: string);
107
+ ```
108
+
109
+ - `UNDO`: Cancels the last X operations. Defaults to 1.
110
+
111
+ ```javascript
112
+ undo(count: number);
113
+ ```
114
+
115
+ - `REDO`: Cancels the last X UNDO operations. Defaults to 1.
116
+
117
+ ```javascript
118
+ redo(count: number);
119
+ ```
120
+
121
+ - `PRUNE`: Joins multiple operations into a single `LOAD_STATE` operation. Useful to keep operations history smaller. Operations to prune are selected by index, similar to the [slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) method in Arrays.
122
+
123
+ ```javascript
124
+ prune(start?: number, end?: number);
125
+ ```
126
+
127
+ ## Budget Statement Model
128
+
129
+ A Budget statement follows the following data structure:
130
+
131
+ ```javascript
132
+ {
133
+ name: "SES January 2023",
134
+ documentType: "powerhouse/budget-statement",
135
+ revision: 10,
136
+ created: "2023-02-21 10:15:26",
137
+ lastModified: "2023-02-21 13:12:49",
138
+ data: {
139
+ owner: {
140
+ ref: "makerdao/core-unit",
141
+ id: "SES-001",
142
+ title: "Sustainable Ecosystem Scaling"
143
+ },
144
+ month: "2023/01",
145
+ quoteCurrency: "DAI",
146
+ auditReports: [
147
+ {
148
+ timestamp: "2023-02-21 13:12:49",
149
+ report: "attachment://audits/report.pdf",
150
+ status: "Approved" | "ApprovedWithComments" | "NeedsAction" | "Escalated"
151
+ }
152
+ ],
153
+ accounts: [
154
+ {
155
+ address: "eth:0xb5eB779cE300024EDB3dF9b6C007E312584f6F4f",
156
+ name: "Grants Program",
157
+ lineItems: [
158
+ {
159
+ category: {
160
+ ref: "makerdao/budget-category",
161
+ id: "TravelAndEntertainment",
162
+ title: "Travel & Entertainment",
163
+ headcountExpense: true
164
+ },
165
+ group: {
166
+ ref: "makerdao/project",
167
+ id: "core-unit/SES/2023/005",
168
+ title: "Core Unit Operational Support"
169
+ },
170
+ budgetCap: 10000,
171
+ payment: 0,
172
+ actual: 4000,
173
+ forecast: [
174
+ {
175
+ month: "2023/02",
176
+ value: 30000
177
+ },
178
+ {
179
+ month: "2023/03",
180
+ value: 40000
181
+ },
182
+ {
183
+ month: "2023/04",
184
+ value: 30000
185
+ }
186
+ ]
187
+ }
188
+ ]
189
+ }
190
+ ]
191
+ }
192
+ }
193
+ ```
194
+
195
+ ### Budget Statement Actions
196
+
197
+ ▸ For more information on Budget Statement actions, please refer to the [complete documentation](markdown/modules/BudgetStatement.actions.md).
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./object-38724dbb.js");require("json-stringify-deterministic");require("immer");require("sha.js/sha1");require("jszip");const e=require("./index-71473ecd.js");require("zod");exports.Document=e.Document;exports.DocumentModel=e.DocumentModel$1;exports.actions=e.actions;exports.documentModel=e.documentModel;exports.module=e.module;exports.reducer=e.reducer;exports.utils=e.utils;exports.z=e.zod;
@@ -0,0 +1 @@
1
+ export * from './src/document-model/index'
@@ -0,0 +1,17 @@
1
+ import "./object-916a56cd.mjs";
2
+ import "json-stringify-deterministic";
3
+ import "immer";
4
+ import "sha.js/sha1";
5
+ import "jszip";
6
+ import { b as p, a as u, c, d, m as l, r as n, u as D, z as M } from "./index-47a38d27.mjs";
7
+ import "zod";
8
+ export {
9
+ p as Document,
10
+ u as DocumentModel,
11
+ c as actions,
12
+ d as documentModel,
13
+ l as module,
14
+ n as reducer,
15
+ D as utils,
16
+ M as z
17
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./object-38724dbb.js"),r=require("./index-1aa6b70c.js");require("json-stringify-deterministic");require("immer");require("zod");require("sha.js/sha1");require("jszip");exports.BaseDocument=e.BaseDocument;exports.actions=e.BaseActions;exports.applyMixins=e.applyMixins;exports.baseReducer=e.baseReducer;exports.z=e.zod;exports.utils=r.index;
@@ -0,0 +1 @@
1
+ export * from './src/document/index'
@@ -0,0 +1,15 @@
1
+ import { B as m, h as e, g as c, p as n, z as u } from "./object-916a56cd.mjs";
2
+ import { i as f } from "./index-ede882c4.mjs";
3
+ import "json-stringify-deterministic";
4
+ import "immer";
5
+ import "zod";
6
+ import "sha.js/sha1";
7
+ import "jszip";
8
+ export {
9
+ m as BaseDocument,
10
+ e as actions,
11
+ c as applyMixins,
12
+ n as baseReducer,
13
+ f as utils,
14
+ u as z
15
+ };
@@ -0,0 +1 @@
1
+ "use strict";const e=require("./object-38724dbb.js"),t=Object.freeze(Object.defineProperty({__proto__:null,createAction:e.createAction,createDocument:e.createDocument,createExtendedState:e.createExtendedState,createReducer:e.createReducer,createZip:e.createZip,getLocalFile:e.getLocalFile,getRemoteFile:e.getRemoteFile,hashDocument:e.hashDocument,hashKey:e.hashKey,loadFromFile:e.loadFromFile,loadFromInput:e.loadFromInput,saveToFile:e.saveToFile,saveToFileHandle:e.saveToFileHandle},Symbol.toStringTag,{value:"Module"})),o=Object.freeze(Object.defineProperty({__proto__:null,BaseDocument:e.BaseDocument,actions:e.BaseActions,applyMixins:e.applyMixins,baseReducer:e.baseReducer,utils:t,z:e.zod},Symbol.toStringTag,{value:"Module"}));exports.Document=o;exports.index=t;