@cyberismo/data-handler 0.0.14 → 0.0.16

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 (280) hide show
  1. package/dist/card-metadata-updater.js +8 -4
  2. package/dist/card-metadata-updater.js.map +1 -1
  3. package/dist/command-handler.d.ts +4 -0
  4. package/dist/command-handler.js +29 -19
  5. package/dist/command-handler.js.map +1 -1
  6. package/dist/command-manager.d.ts +25 -2
  7. package/dist/command-manager.js +30 -5
  8. package/dist/command-manager.js.map +1 -1
  9. package/dist/commands/create.d.ts +1 -1
  10. package/dist/commands/create.js +45 -93
  11. package/dist/commands/create.js.map +1 -1
  12. package/dist/commands/edit.d.ts +1 -15
  13. package/dist/commands/edit.js +15 -89
  14. package/dist/commands/edit.js.map +1 -1
  15. package/dist/commands/export.d.ts +11 -2
  16. package/dist/commands/export.js +58 -58
  17. package/dist/commands/export.js.map +1 -1
  18. package/dist/commands/import.d.ts +9 -1
  19. package/dist/commands/import.js +17 -11
  20. package/dist/commands/import.js.map +1 -1
  21. package/dist/commands/move.d.ts +1 -2
  22. package/dist/commands/move.js +107 -146
  23. package/dist/commands/move.js.map +1 -1
  24. package/dist/commands/remove.d.ts +8 -1
  25. package/dist/commands/remove.js +17 -48
  26. package/dist/commands/remove.js.map +1 -1
  27. package/dist/commands/rename.d.ts +4 -9
  28. package/dist/commands/rename.js +34 -108
  29. package/dist/commands/rename.js.map +1 -1
  30. package/dist/commands/show.d.ts +22 -34
  31. package/dist/commands/show.js +103 -151
  32. package/dist/commands/show.js.map +1 -1
  33. package/dist/commands/transition.d.ts +9 -2
  34. package/dist/commands/transition.js +49 -44
  35. package/dist/commands/transition.js.map +1 -1
  36. package/dist/commands/update.d.ts +18 -12
  37. package/dist/commands/update.js +34 -18
  38. package/dist/commands/update.js.map +1 -1
  39. package/dist/commands/validate.d.ts +18 -10
  40. package/dist/commands/validate.js +101 -47
  41. package/dist/commands/validate.js.map +1 -1
  42. package/dist/containers/card-container.d.ts +87 -24
  43. package/dist/containers/card-container.js +183 -279
  44. package/dist/containers/card-container.js.map +1 -1
  45. package/dist/containers/project/calculation-engine.d.ts +13 -4
  46. package/dist/containers/project/calculation-engine.js +79 -77
  47. package/dist/containers/project/calculation-engine.js.map +1 -1
  48. package/dist/containers/project/card-cache.d.ts +146 -0
  49. package/dist/containers/project/card-cache.js +411 -0
  50. package/dist/containers/project/card-cache.js.map +1 -0
  51. package/dist/containers/project/project-paths.d.ts +5 -4
  52. package/dist/containers/project/project-paths.js +16 -12
  53. package/dist/containers/project/project-paths.js.map +1 -1
  54. package/dist/containers/project/resource-cache.d.ts +169 -0
  55. package/dist/containers/project/resource-cache.js +507 -0
  56. package/dist/containers/project/resource-cache.js.map +1 -0
  57. package/dist/containers/project/resource-handler.d.ts +129 -0
  58. package/dist/containers/project/resource-handler.js +206 -0
  59. package/dist/containers/project/resource-handler.js.map +1 -0
  60. package/dist/containers/project.d.ts +114 -195
  61. package/dist/containers/project.js +425 -535
  62. package/dist/containers/project.js.map +1 -1
  63. package/dist/containers/template.d.ts +22 -32
  64. package/dist/containers/template.js +113 -115
  65. package/dist/containers/template.js.map +1 -1
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.js +1 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/interfaces/folder-content-interfaces.d.ts +7 -4
  70. package/dist/interfaces/folder-content-interfaces.js +3 -3
  71. package/dist/interfaces/folder-content-interfaces.js.map +1 -1
  72. package/dist/interfaces/macros.d.ts +1 -0
  73. package/dist/interfaces/macros.js +1 -1
  74. package/dist/interfaces/macros.js.map +1 -1
  75. package/dist/interfaces/project-interfaces.d.ts +7 -5
  76. package/dist/interfaces/project-interfaces.js.map +1 -1
  77. package/dist/interfaces/resource-interfaces.d.ts +25 -22
  78. package/dist/interfaces/resource-interfaces.js +3 -0
  79. package/dist/interfaces/resource-interfaces.js.map +1 -1
  80. package/dist/macros/common.d.ts +10 -10
  81. package/dist/macros/createCards/index.d.ts +0 -13
  82. package/dist/macros/createCards/index.js.map +1 -1
  83. package/dist/macros/createCards/types.d.ts +44 -0
  84. package/dist/macros/createCards/types.js +15 -0
  85. package/dist/macros/createCards/types.js.map +1 -0
  86. package/dist/macros/graph/index.d.ts +2 -6
  87. package/dist/macros/graph/index.js +14 -28
  88. package/dist/macros/graph/index.js.map +1 -1
  89. package/dist/macros/graph/types.d.ts +23 -0
  90. package/dist/macros/graph/types.js +15 -0
  91. package/dist/macros/graph/types.js.map +1 -0
  92. package/dist/macros/image/index.d.ts +8 -16
  93. package/dist/macros/image/index.js +36 -33
  94. package/dist/macros/image/index.js.map +1 -1
  95. package/dist/macros/image/types.d.ts +38 -0
  96. package/dist/macros/image/types.js +15 -0
  97. package/dist/macros/image/types.js.map +1 -0
  98. package/dist/macros/include/index.d.ts +1 -6
  99. package/dist/macros/include/index.js +4 -7
  100. package/dist/macros/include/index.js.map +1 -1
  101. package/dist/macros/include/types.d.ts +31 -0
  102. package/dist/macros/include/types.js +15 -0
  103. package/dist/macros/include/types.js.map +1 -0
  104. package/dist/macros/index.d.ts +1 -1
  105. package/dist/macros/index.js +2 -2
  106. package/dist/macros/index.js.map +1 -1
  107. package/dist/macros/percentage/index.d.ts +0 -6
  108. package/dist/macros/percentage/index.js.map +1 -1
  109. package/dist/macros/percentage/types.d.ts +31 -0
  110. package/dist/macros/percentage/types.js +15 -0
  111. package/dist/macros/percentage/types.js.map +1 -0
  112. package/dist/macros/report/index.d.ts +0 -3
  113. package/dist/macros/report/index.js +3 -6
  114. package/dist/macros/report/index.js.map +1 -1
  115. package/dist/macros/report/types.d.ts +19 -0
  116. package/dist/macros/report/types.js +15 -0
  117. package/dist/macros/report/types.js.map +1 -0
  118. package/dist/macros/scoreCard/index.d.ts +0 -6
  119. package/dist/macros/scoreCard/index.js.map +1 -1
  120. package/dist/macros/scoreCard/types.d.ts +31 -0
  121. package/dist/macros/scoreCard/types.js +15 -0
  122. package/dist/macros/scoreCard/types.js.map +1 -0
  123. package/dist/macros/types.d.ts +25 -0
  124. package/dist/macros/types.js +2 -0
  125. package/dist/macros/types.js.map +1 -0
  126. package/dist/macros/vega/index.d.ts +0 -4
  127. package/dist/macros/vega/index.js.map +1 -1
  128. package/dist/macros/vega/types.d.ts +20 -0
  129. package/dist/macros/vega/types.js +2 -0
  130. package/dist/macros/vega/types.js.map +1 -0
  131. package/dist/macros/vegalite/index.d.ts +0 -4
  132. package/dist/macros/vegalite/index.js.map +1 -1
  133. package/dist/macros/vegalite/types.d.ts +20 -0
  134. package/dist/macros/vegalite/types.js +15 -0
  135. package/dist/macros/vegalite/types.js.map +1 -0
  136. package/dist/macros/xref/index.d.ts +0 -3
  137. package/dist/macros/xref/index.js +5 -14
  138. package/dist/macros/xref/index.js.map +1 -1
  139. package/dist/macros/xref/types.d.ts +19 -0
  140. package/dist/macros/xref/types.js +15 -0
  141. package/dist/macros/xref/types.js.map +1 -0
  142. package/dist/module-manager.d.ts +16 -3
  143. package/dist/module-manager.js +55 -23
  144. package/dist/module-manager.js.map +1 -1
  145. package/dist/project-settings.d.ts +16 -3
  146. package/dist/project-settings.js +79 -14
  147. package/dist/project-settings.js.map +1 -1
  148. package/dist/resources/calculation-resource.d.ts +6 -33
  149. package/dist/resources/calculation-resource.js +11 -60
  150. package/dist/resources/calculation-resource.js.map +1 -1
  151. package/dist/resources/card-type-resource.d.ts +10 -22
  152. package/dist/resources/card-type-resource.js +46 -66
  153. package/dist/resources/card-type-resource.js.map +1 -1
  154. package/dist/resources/create-defaults.d.ts +3 -2
  155. package/dist/resources/create-defaults.js +3 -2
  156. package/dist/resources/create-defaults.js.map +1 -1
  157. package/dist/resources/field-type-resource.d.ts +8 -22
  158. package/dist/resources/field-type-resource.js +35 -60
  159. package/dist/resources/field-type-resource.js.map +1 -1
  160. package/dist/resources/file-resource.d.ts +14 -35
  161. package/dist/resources/file-resource.js +22 -301
  162. package/dist/resources/file-resource.js.map +1 -1
  163. package/dist/resources/folder-resource.d.ts +44 -66
  164. package/dist/resources/folder-resource.js +102 -149
  165. package/dist/resources/folder-resource.js.map +1 -1
  166. package/dist/resources/graph-model-resource.d.ts +9 -34
  167. package/dist/resources/graph-model-resource.js +18 -64
  168. package/dist/resources/graph-model-resource.js.map +1 -1
  169. package/dist/resources/graph-view-resource.d.ts +9 -29
  170. package/dist/resources/graph-view-resource.js +13 -48
  171. package/dist/resources/graph-view-resource.js.map +1 -1
  172. package/dist/resources/link-type-resource.d.ts +9 -23
  173. package/dist/resources/link-type-resource.js +11 -33
  174. package/dist/resources/link-type-resource.js.map +1 -1
  175. package/dist/resources/report-resource.d.ts +10 -23
  176. package/dist/resources/report-resource.js +20 -67
  177. package/dist/resources/report-resource.js.map +1 -1
  178. package/dist/resources/resource-object.d.ts +143 -23
  179. package/dist/resources/resource-object.js +369 -48
  180. package/dist/resources/resource-object.js.map +1 -1
  181. package/dist/resources/template-resource.d.ts +10 -17
  182. package/dist/resources/template-resource.js +19 -27
  183. package/dist/resources/template-resource.js.map +1 -1
  184. package/dist/resources/workflow-resource.d.ts +9 -25
  185. package/dist/resources/workflow-resource.js +25 -55
  186. package/dist/resources/workflow-resource.js.map +1 -1
  187. package/dist/utils/card-utils.d.ts +69 -19
  188. package/dist/utils/card-utils.js +179 -30
  189. package/dist/utils/card-utils.js.map +1 -1
  190. package/dist/utils/clingo-fact-builder.d.ts +25 -14
  191. package/dist/utils/clingo-fact-builder.js +27 -5
  192. package/dist/utils/clingo-fact-builder.js.map +1 -1
  193. package/dist/utils/clingo-facts.js +14 -7
  194. package/dist/utils/clingo-facts.js.map +1 -1
  195. package/dist/utils/clingo-parser.js +1 -1
  196. package/dist/utils/clingo-parser.js.map +1 -1
  197. package/dist/utils/constants.d.ts +2 -0
  198. package/dist/utils/constants.js +4 -0
  199. package/dist/utils/constants.js.map +1 -1
  200. package/dist/utils/csv.js +1 -1
  201. package/dist/utils/csv.js.map +1 -1
  202. package/dist/utils/resource-utils.d.ts +1 -0
  203. package/dist/utils/resource-utils.js +2 -1
  204. package/dist/utils/resource-utils.js.map +1 -1
  205. package/package.json +11 -11
  206. package/src/card-metadata-updater.ts +9 -7
  207. package/src/command-handler.ts +35 -23
  208. package/src/command-manager.ts +32 -19
  209. package/src/commands/create.ts +59 -160
  210. package/src/commands/edit.ts +16 -132
  211. package/src/commands/export.ts +71 -81
  212. package/src/commands/import.ts +26 -18
  213. package/src/commands/move.ts +143 -179
  214. package/src/commands/remove.ts +20 -59
  215. package/src/commands/rename.ts +45 -156
  216. package/src/commands/show.ts +153 -211
  217. package/src/commands/transition.ts +53 -58
  218. package/src/commands/update.ts +44 -23
  219. package/src/commands/validate.ts +108 -82
  220. package/src/containers/card-container.ts +200 -360
  221. package/src/containers/project/calculation-engine.ts +81 -105
  222. package/src/containers/project/card-cache.ts +497 -0
  223. package/src/containers/project/project-paths.ts +21 -13
  224. package/src/containers/project/resource-cache.ts +648 -0
  225. package/src/containers/project/resource-handler.ts +265 -0
  226. package/src/containers/project.ts +551 -693
  227. package/src/containers/template.ts +129 -142
  228. package/src/index.ts +1 -0
  229. package/src/interfaces/folder-content-interfaces.ts +14 -7
  230. package/src/interfaces/macros.ts +2 -0
  231. package/src/interfaces/project-interfaces.ts +14 -7
  232. package/src/interfaces/resource-interfaces.ts +30 -27
  233. package/src/macros/createCards/index.ts +1 -12
  234. package/src/macros/createCards/types.ts +46 -0
  235. package/src/macros/graph/index.ts +27 -52
  236. package/src/macros/graph/types.ts +24 -0
  237. package/src/macros/image/index.ts +50 -61
  238. package/src/macros/image/types.ts +39 -0
  239. package/src/macros/include/index.ts +6 -15
  240. package/src/macros/include/types.ts +32 -0
  241. package/src/macros/index.ts +2 -2
  242. package/src/macros/percentage/index.ts +1 -7
  243. package/src/macros/percentage/types.ts +32 -0
  244. package/src/macros/report/index.ts +4 -13
  245. package/src/macros/report/types.ts +20 -0
  246. package/src/macros/scoreCard/index.ts +1 -7
  247. package/src/macros/scoreCard/types.ts +32 -0
  248. package/src/macros/types.ts +48 -0
  249. package/src/macros/vega/index.ts +1 -4
  250. package/src/macros/vega/types.ts +21 -0
  251. package/src/macros/vegalite/index.ts +1 -4
  252. package/src/macros/vegalite/types.ts +22 -0
  253. package/src/macros/xref/index.ts +6 -20
  254. package/src/macros/xref/types.ts +20 -0
  255. package/src/module-manager.ts +79 -22
  256. package/src/project-settings.ts +84 -15
  257. package/src/resources/calculation-resource.ts +21 -91
  258. package/src/resources/card-type-resource.ts +74 -109
  259. package/src/resources/create-defaults.ts +3 -2
  260. package/src/resources/field-type-resource.ts +61 -104
  261. package/src/resources/file-resource.ts +33 -441
  262. package/src/resources/folder-resource.ts +130 -207
  263. package/src/resources/graph-model-resource.ts +36 -95
  264. package/src/resources/graph-view-resource.ts +28 -70
  265. package/src/resources/link-type-resource.ts +23 -53
  266. package/src/resources/report-resource.ts +34 -96
  267. package/src/resources/resource-object.ts +511 -66
  268. package/src/resources/template-resource.ts +32 -44
  269. package/src/resources/workflow-resource.ts +42 -85
  270. package/src/utils/card-utils.ts +217 -31
  271. package/src/utils/clingo-fact-builder.ts +28 -16
  272. package/src/utils/clingo-facts.ts +16 -7
  273. package/src/utils/clingo-parser.ts +1 -1
  274. package/src/utils/constants.ts +6 -0
  275. package/src/utils/csv.ts +1 -1
  276. package/src/utils/resource-utils.ts +2 -1
  277. package/dist/containers/project/resource-collector.d.ts +0 -87
  278. package/dist/containers/project/resource-collector.js +0 -337
  279. package/dist/containers/project/resource-collector.js.map +0 -1
  280. package/src/containers/project/resource-collector.ts +0 -396
@@ -11,57 +11,117 @@
11
11
  */
12
12
  /* eslint-disable @typescript-eslint/no-unused-vars */
13
13
  // node
14
- import { readFile, writeFile } from 'node:fs/promises';
14
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
15
15
  import { basename, join } from 'node:path';
16
- import { hasCode } from '../utils/error-utils.js';
17
16
  import { ArrayHandler } from './array-handler.js';
18
- import { ResourcesFrom } from '../containers/project.js';
17
+ import { deleteFile, pathExists } from '../utils/file-utils.js';
19
18
  import { getChildLogger } from '../utils/log-utils.js';
19
+ import { readJsonFile, readJsonFileSync, writeJsonFile, } from '../utils/json.js';
20
+ import { resourceName, resourceNameToPath, resourceNameToString, } from '../utils/resource-utils.js';
21
+ import { ResourcesFrom } from '../containers/project.js';
20
22
  /**
21
23
  * Abstract class for resources.
22
24
  */
23
25
  export class AbstractResource {
24
26
  }
25
- /**
26
- * Base class for all resources.
27
- */
28
27
  export class ResourceObject extends AbstractResource {
29
28
  project;
30
29
  resourceName;
30
+ static validateInstancePromise;
31
+ content;
31
32
  moduleResource;
32
33
  contentSchema = {};
33
34
  contentSchemaId = '';
34
35
  type = '';
35
36
  resourceFolder = '';
36
- constructor(project, resourceName) {
37
+ logger;
38
+ /**
39
+ * Path to the resource metadata file (the .json file).
40
+ */
41
+ fileName = '';
42
+ /**
43
+ * Constructs a ResourceObject instance
44
+ * @param project Project where this resource is
45
+ * @param resourceName Name for the resource
46
+ * @param type Type of resource
47
+ */
48
+ constructor(project, resourceName, type) {
37
49
  super();
38
50
  this.project = project;
39
51
  this.resourceName = resourceName;
40
52
  this.moduleResource =
41
53
  this.resourceName.prefix !== this.project.projectPrefix;
54
+ this.type = type;
55
+ this.logger = this.getLogger(this.getType);
56
+ this.content = { name: '' }; // not found if name is empty
42
57
  }
43
- async calculate() { }
44
- async create(_content) { }
45
- async delete() { }
46
- async read() { }
47
- async rename(_name) { }
48
- async show() {
49
- return {};
58
+ // Check if resource already exists. First checks the cache, then filesystem.
59
+ exists() {
60
+ const name = resourceNameToString(this.resourceName);
61
+ const existsInCache = this.project.resources.exists(name);
62
+ return existsInCache || pathExists(this.fileName);
50
63
  }
51
- get getType() {
64
+ // Gets Validate command instance.
65
+ static async getValidate() {
66
+ // a bit hacky solution to avoid circular dependencies
67
+ if (!this.validateInstancePromise) {
68
+ this.validateInstancePromise = import('../commands/validate.js').then(({ Validate }) => Validate.getInstance());
69
+ }
70
+ return this.validateInstancePromise;
71
+ }
72
+ // Gets handlebar files.
73
+ async reportHandlerBarFiles(from = ResourcesFrom.all) {
74
+ const reports = this.project.resources.reports(from);
75
+ const handleBarFiles = [];
76
+ for (const report of reports) {
77
+ handleBarFiles.push(...(await report.handleBarFiles()));
78
+ }
79
+ return handleBarFiles;
80
+ }
81
+ // Type of resource.
82
+ resourceType() {
52
83
  return this.type;
53
84
  }
54
- getLogger(loggerName) {
55
- return getChildLogger({
56
- module: loggerName,
57
- });
85
+ /**
86
+ * Checks if resource exists.
87
+ * This should only throw, if someone creates resources directly; ie. not through the cache
88
+ * @throws if resource does not exist
89
+ */
90
+ assertResourceExists() {
91
+ if (!this.exists()) {
92
+ const resourceType = `${this.type[0].toUpperCase()}${this.type.slice(1, this.type.length - 1)}`;
93
+ const name = resourceNameToString(this.resourceName);
94
+ throw new Error(`${resourceType} '${name}' does not exist in the project`);
95
+ }
58
96
  }
59
- async update(_key, _op) { }
60
- async usage(_cards) {
61
- return [];
97
+ /**
98
+ * Calculate; empty implementation.
99
+ */
100
+ async calculate() { }
101
+ /**
102
+ * Calculations that use this resource.
103
+ * @throws if accessing calculations files failed
104
+ */
105
+ async calculations() {
106
+ const references = [];
107
+ const resourceName = resourceNameToString(this.resourceName);
108
+ for (const calculation of this.project.resources.calculations()) {
109
+ const content = calculation.contentData();
110
+ if (content.calculation && content.calculation.includes(resourceName)) {
111
+ references.push(calculation.data.name);
112
+ }
113
+ }
114
+ return references;
115
+ }
116
+ /**
117
+ * Cards from project.
118
+ */
119
+ cards() {
120
+ return [
121
+ ...this.project.cards(undefined),
122
+ ...this.project.allTemplateCards(),
123
+ ];
62
124
  }
63
- async validate(_content) { }
64
- async write() { }
65
125
  /**
66
126
  * Returns .schema content file.
67
127
  * @param schemaId schema id
@@ -75,12 +135,60 @@ export class ResourceObject extends AbstractResource {
75
135
  },
76
136
  ];
77
137
  }
138
+ /**
139
+ * Creates resource.
140
+ * @param newContent Content for resource.
141
+ * @throws when resource already exists in the project.
142
+ */
143
+ async create(newContent) {
144
+ this.validateResourceIdentifier();
145
+ if (this.exists()) {
146
+ throw new Error(`Resource '${this.resourceName.identifier}' already exists in the project`);
147
+ }
148
+ if (this.resourceFolder === '') {
149
+ this.resourceName = resourceName(`${this.project.projectPrefix}/${this.type}/${this.resourceName.identifier}`);
150
+ this.resourceFolder = this.project.paths.resourcePath(this.resourceName.type);
151
+ this.fileName = join(this.resourceFolder, this.resourceName.identifier + '.json');
152
+ }
153
+ const validator = await ResourceObject.getValidate();
154
+ const validName = validator.validResourceName(this.resourceType(), resourceNameToString(this.resourceName), this.project.projectPrefixes());
155
+ let validContent = {};
156
+ if (newContent) {
157
+ validContent = newContent;
158
+ validContent.name = validName;
159
+ }
160
+ else {
161
+ validContent.description = '';
162
+ validContent.displayName = '';
163
+ }
164
+ this.content = validContent;
165
+ await this.write();
166
+ const resourceString = resourceNameToString(this.resourceName);
167
+ this.project.resources.add(resourceString, this);
168
+ }
169
+ /**
170
+ * Gets a logger instance.
171
+ * @param loggerName
172
+ * @returns logger instance
173
+ */
174
+ getLogger(loggerName) {
175
+ return getChildLogger({
176
+ module: loggerName,
177
+ });
178
+ }
179
+ /**
180
+ * Returns type of this resource.
181
+ */
182
+ get getType() {
183
+ return this.type;
184
+ }
78
185
  /**
79
186
  * Handles operation to an array.
80
187
  * @param operation Operation to perform on array.
81
188
  * @param arrayName Name of the array, for error messages.
82
189
  * @param array Array to be updated.
83
190
  * @returns Changed array after the operation.
191
+ * @throws when operation cannot be done.
84
192
  */
85
193
  handleArray(operation, arrayName, array) {
86
194
  const handler = new ArrayHandler();
@@ -99,6 +207,7 @@ export class ResourceObject extends AbstractResource {
99
207
  * Updates scalar value. The only accepted operation is 'change'
100
208
  * @param operation Operation to perform on scalar.
101
209
  * @returns What the scalar should be changed to.
210
+ * @throws when operation cannot be done
102
211
  */
103
212
  handleScalar(operation) {
104
213
  if (operation.name === 'add' ||
@@ -108,39 +217,155 @@ export class ResourceObject extends AbstractResource {
108
217
  }
109
218
  return operation.to;
110
219
  }
220
+ /**
221
+ * Initialize the resource.
222
+ */
223
+ initialize() {
224
+ if (this.resourceName.type === '') {
225
+ this.resourceName.type = this.type;
226
+ }
227
+ if (this.resourceName.prefix === '') {
228
+ this.resourceName.prefix = this.project.projectPrefix;
229
+ }
230
+ if (this.type) {
231
+ this.moduleResource =
232
+ this.resourceName.prefix !== this.project.projectPrefix;
233
+ this.resourceFolder = this.moduleResource
234
+ ? join(this.project.paths.modulesFolder, this.resourceName.prefix, this.resourceName.type)
235
+ : this.project.paths.resourcePath(this.type);
236
+ this.fileName = resourceNameToPath(this.project, this.resourceName);
237
+ }
238
+ // Only load content from disk if resource exists in the cache registry
239
+ if (this.project.resources.exists(resourceNameToString(this.resourceName))) {
240
+ try {
241
+ this.content = readJsonFileSync(this.fileName);
242
+ }
243
+ catch {
244
+ this.logger.debug(`Initializing resource '${resourceNameToString(this.resourceName)}' failed: failed to read file '${this.fileName}'`);
245
+ }
246
+ }
247
+ }
248
+ /**
249
+ * Called after inherited class has finished 'update' operation.
250
+ * @param content New content for resource
251
+ * @param updateKey Which property to change
252
+ * @param op What kind of operation is performed to updateKey
253
+ * @throws if validation fails after the update
254
+ */
255
+ async postUpdate(content, updateKey, op) {
256
+ function toValue(op) {
257
+ if (op.name === 'rank')
258
+ return op.newIndex;
259
+ if (op.name === 'add')
260
+ return JSON.stringify(op.target);
261
+ if (op.name === 'remove')
262
+ return JSON.stringify(op.target);
263
+ if (op.name === 'change')
264
+ return JSON.stringify(op.to);
265
+ }
266
+ // Check that new name is valid.
267
+ if (op.name === 'change' && updateKey.key === 'name') {
268
+ const newName = resourceName(op.to);
269
+ content.name = await this.validName(newName);
270
+ }
271
+ // Once changes have been made; validate the content.
272
+ try {
273
+ await this.validate(content);
274
+ }
275
+ catch (error) {
276
+ if (error instanceof Error) {
277
+ const errorValue = typeof op === 'object' ? toValue(op) : op;
278
+ throw new Error(`Cannot ${op.name} '${updateKey.key}' --> '${errorValue}: ${error.message}'`);
279
+ }
280
+ }
281
+ this.content = content;
282
+ await this.write();
283
+ }
284
+ /**
285
+ * Reads content from file to memory.
286
+ */
287
+ async read() {
288
+ this.content = await readJsonFile(this.fileName);
289
+ }
290
+ /**
291
+ * Renames resource.
292
+ * @param newName New name for the resource.
293
+ * @throws if trying to rename module resource, or
294
+ * if resource does not exist,
295
+ * if trying to rename so that type changes
296
+ */
297
+ async rename(newName) {
298
+ if (this.moduleResource) {
299
+ throw new Error(`Cannot rename module resources`);
300
+ }
301
+ if (!this.exists()) {
302
+ throw new Error(`Resource '${this.resourceName.identifier}' does not exist`);
303
+ }
304
+ if (newName.prefix !== this.project.projectPrefix) {
305
+ throw new Error('Can only rename project resources');
306
+ }
307
+ if (newName.type !== this.resourceName.type) {
308
+ throw new Error('Cannot change resource type');
309
+ }
310
+ const validator = await ResourceObject.getValidate();
311
+ validator.validResourceName(this.resourceType(), resourceNameToString(newName), this.project.projectPrefixes());
312
+ const newFilename = join(this.project.paths.resourcePath(newName.type), newName.identifier + '.json');
313
+ const oldName = resourceNameToString(this.resourceName);
314
+ await rename(this.fileName, newFilename);
315
+ this.fileName = newFilename;
316
+ this.content.name = resourceNameToString(newName);
317
+ this.resourceName = newName;
318
+ this.project.resources.rename(oldName, this.content.name);
319
+ }
320
+ /**
321
+ * Update resource; the base class makes some checks only.
322
+ * @template type Resource type
323
+ * @template K Resource key
324
+ * @throws if resource does not exist, or
325
+ * if trying to update module content, or
326
+ * if key is empty
327
+ */
328
+ async update(key, _op) {
329
+ const content = this.data;
330
+ if (!content) {
331
+ throw new Error(`Resource '${resourceNameToString(this.resourceName)}' does not exist`);
332
+ }
333
+ if (this.moduleResource) {
334
+ throw new Error(`Cannot update module resources`);
335
+ }
336
+ if (key.key === '' || key === undefined) {
337
+ throw new Error(`Cannot update empty key`);
338
+ }
339
+ }
340
+ /**
341
+ * Validates resource identifier to prevent filesystem operations with invalid names
342
+ * todo: To Validate?
343
+ */
344
+ validateResourceIdentifier() {
345
+ if (!this.moduleResource && this.resourceName.identifier) {
346
+ const identifier = this.resourceName.identifier;
347
+ if (!/^[a-zA-Z0-9._-]+$/.test(identifier)) {
348
+ throw new Error(`Resource identifier must follow naming rules. Identifier '${identifier}' is invalid`);
349
+ }
350
+ }
351
+ }
111
352
  /**
112
353
  * Update calculation files.
113
354
  * @param from Resource name to update
114
355
  * @param to New name for resource
356
+ * @throws if 'from' or 'to' is empty string, or
357
+ * if there was error accessing calculation files.
115
358
  */
116
359
  async updateCalculations(from, to) {
117
360
  if (!from.trim() || !to.trim()) {
118
361
  throw new Error('updateCalculations: "from" and "to" parameters must not be empty');
119
362
  }
120
- const calculations = await this.project.calculations(ResourcesFrom.localOnly);
363
+ const calculations = this.project.resources.calculations(ResourcesFrom.localOnly);
121
364
  await Promise.all(calculations.map(async (calculation) => {
122
- if (!calculation.path) {
123
- throw new Error(`Calculation file's '${calculation.name}' path is not defined`);
124
- }
125
- const base = basename(calculation.name);
126
- const fileNameWithExtension = base.endsWith('.lp')
127
- ? base
128
- : base + '.lp';
129
- const filename = join(calculation.path, fileNameWithExtension);
130
- try {
131
- const content = await readFile(filename, 'utf-8');
132
- const updatedContent = content.replaceAll(from, to);
133
- await writeFile(filename, updatedContent);
134
- }
135
- catch (error) {
136
- if (hasCode(error) && error.code === 'ENOENT') {
137
- // Skip files that don't exist (they may have been renamed or deleted)
138
- this.getLogger(this.getType).warn(`Skipping non-existent file: ${filename}`);
139
- return;
140
- }
141
- if (error instanceof Error) {
142
- throw new Error(`Failed to process file while updating calculation ${filename}: ${error.message}`);
143
- }
365
+ const content = calculation.contentData();
366
+ if (content.calculation) {
367
+ const updatedContent = content.calculation.replaceAll(from, to);
368
+ await calculation.updateFile('calculation.lp', updatedContent);
144
369
  }
145
370
  }));
146
371
  }
@@ -149,13 +374,14 @@ export class ResourceObject extends AbstractResource {
149
374
  * @param from Resource name to update
150
375
  * @param to New name for resource
151
376
  * @param handleBarFiles Optional. List of handlebar files. If omitted, affects all handlebar files in the project.
377
+ * @throws if 'from' or 'to' is empty string
152
378
  */
153
379
  async updateHandleBars(from, to, handleBarFiles) {
154
380
  if (!from.trim() || !to.trim()) {
155
381
  throw new Error('updateHandleBars: "from" and "to" parameters must not be empty');
156
382
  }
157
383
  if (!handleBarFiles) {
158
- handleBarFiles = await this.project.reportHandlerBarFiles(ResourcesFrom.localOnly);
384
+ handleBarFiles = await this.reportHandlerBarFiles(ResourcesFrom.localOnly);
159
385
  }
160
386
  // Process all files in parallel.
161
387
  await Promise.all(handleBarFiles.map(async (handleBarFile) => {
@@ -164,5 +390,100 @@ export class ResourceObject extends AbstractResource {
164
390
  await writeFile(handleBarFile, Buffer.from(updatedContent));
165
391
  }));
166
392
  }
393
+ /**
394
+ * Check if there are references to the resource in the card content.
395
+ * @note that this needs to be async, since inherited classes need to async operations
396
+ * @param cards cards to check
397
+ * @throws if resource does not exist
398
+ */
399
+ async usage(cards) {
400
+ if (!this.exists()) {
401
+ throw new Error(`Resource '${this.resourceName.identifier}' does not exist in the project`);
402
+ }
403
+ const cardArray = cards?.length ? cards : this.project.cards(undefined);
404
+ return cardArray
405
+ .filter((card) => card.content?.includes(resourceNameToString(this.resourceName)))
406
+ .map((card) => card.key);
407
+ }
408
+ /**
409
+ * Checks if resource name is valid.
410
+ * @param newName New name for resource.
411
+ * @returns valid name
412
+ */
413
+ async validName(newName) {
414
+ const validator = await ResourceObject.getValidate();
415
+ const validName = validator.validResourceName(this.resourceType(), resourceNameToString(newName), this.project.projectPrefixes());
416
+ return validName;
417
+ }
418
+ /**
419
+ * Write the content from memory to disk.
420
+ * @throws if trying to write a module resource.
421
+ */
422
+ async write() {
423
+ if (this.moduleResource) {
424
+ throw new Error(`Cannot change module resources`);
425
+ }
426
+ // Create folder for resources and add correct .schema file.
427
+ await mkdir(this.resourceFolder, { recursive: true });
428
+ await writeJsonFile(join(this.resourceFolder, '.schema'), this.contentSchema, {
429
+ flag: 'wx',
430
+ });
431
+ // Check if "name" has changed. Changing "name" means renaming the file.
432
+ const nameInContent = resourceName(this.content.name).identifier + '.json';
433
+ const currentFileName = basename(this.fileName);
434
+ const resourceString = resourceNameToString(this.resourceName);
435
+ if (nameInContent !== currentFileName) {
436
+ const newFileName = join(this.resourceFolder, nameInContent);
437
+ await rename(this.fileName, newFileName);
438
+ this.fileName = newFileName;
439
+ this.resourceName = resourceName(this.content.name);
440
+ this.project.resources.rename(resourceString, this.content.name);
441
+ }
442
+ await writeJsonFile(this.fileName, this.content);
443
+ }
444
+ /**
445
+ * Returns memory resident data as JSON.
446
+ * This is basically same as 'show' but doesn't do any checks; just returns the current content.
447
+ * @returns metadata content or undefined if resource does not exist.
448
+ */
449
+ get data() {
450
+ return this.content.name !== '' ? this.content : undefined;
451
+ }
452
+ /**
453
+ * Deletes the file and removes the resource from project.
454
+ * @throws if resource is a module resource, or
455
+ * if resource does not exist, or
456
+ * if resource is used by other resources.
457
+ */
458
+ async delete() {
459
+ if (this.moduleResource) {
460
+ throw new Error(`Cannot delete resource ${resourceNameToString(this.resourceName)}: It is a module resource`);
461
+ }
462
+ if (!this.fileName.endsWith('.json')) {
463
+ this.fileName += '.json';
464
+ }
465
+ if (!this.exists()) {
466
+ throw new Error(`Resource '${this.resourceName.identifier}' does not exist in the project`);
467
+ }
468
+ const usedIn = await this.usage();
469
+ if (usedIn.length > 0) {
470
+ throw new Error(`Cannot delete resource ${resourceNameToString(this.resourceName)}. It is used by: ${usedIn.join(', ')}`);
471
+ }
472
+ await deleteFile(this.fileName);
473
+ this.project.resources.remove(resourceNameToString(this.resourceName));
474
+ this.fileName = '';
475
+ }
476
+ /**
477
+ * Validates the content of the resource.
478
+ * @param content Content to be validated.
479
+ * @throws if content is invalid.
480
+ */
481
+ async validate(content) {
482
+ const validator = await ResourceObject.getValidate();
483
+ const invalidJson = validator.validateJson(content ? content : this.content, this.contentSchemaId);
484
+ if (invalidJson.length) {
485
+ throw new Error(`Invalid content JSON: ${invalidJson}`);
486
+ }
487
+ }
167
488
  }
168
489
  //# sourceMappingURL=resource-object.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-object.js","sourceRoot":"","sources":["../../src/resources/resource-object.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,sDAAsD;AAEtD,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,OAAO,EAAgB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqDvD;;GAEG;AACH,MAAM,OAAgB,gBAAgB;CAiBrC;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAQtC;IACA;IARF,cAAc,CAAU;IACxB,aAAa,GAAS,EAAU,CAAC;IACjC,eAAe,GAAW,EAAE,CAAC;IAC7B,IAAI,GAAuB,EAAwB,CAAC;IACpD,cAAc,GAAW,EAAE,CAAC;IAEtC,YACY,OAAgB,EAChB,YAA0B;QAEpC,KAAK,EAAE,CAAC;QAHE,YAAO,GAAP,OAAO,CAAS;QAChB,iBAAY,GAAZ,YAAY,CAAc;QAGpC,IAAI,CAAC,cAAc;YACjB,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5D,CAAC;IAES,KAAK,CAAC,SAAS,KAAI,CAAC;IACpB,KAAK,CAAC,MAAM,CAAC,QAA0B,IAAG,CAAC;IAC3C,KAAK,CAAC,MAAM,KAAI,CAAC;IACjB,KAAK,CAAC,IAAI,KAAI,CAAC;IACf,KAAK,CAAC,MAAM,CAAC,KAAmB,IAAG,CAAC;IACpC,KAAK,CAAC,IAAI;QAClB,OAAO,EAAqB,CAAC;IAC/B,CAAC;IACD,IAAc,OAAO;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACS,SAAS,CAAC,UAAkB;QACpC,OAAO,cAAc,CAAC;YACpB,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;IACL,CAAC;IACS,KAAK,CAAC,MAAM,CAAO,IAAY,EAAE,GAAoB,IAAG,CAAC;IACzD,KAAK,CAAC,KAAK,CAAC,MAAe;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IACS,KAAK,CAAC,QAAQ,CAAC,QAAiB,IAAG,CAAC;IACpC,KAAK,CAAC,KAAK,KAAI,CAAC;IAE1B;;;;OAIG;IACO,oBAAoB,CAAC,QAAgB;QAC7C,OAAO;YACL;gBACE,EAAE,EAAE,QAAQ;gBACZ,OAAO,EAAE,CAAC;aACX;SACiB,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACO,WAAW,CACnB,SAA0B,EAC1B,SAAiB,EACjB,KAAa;QAEb,MAAM,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QACzC,IAAI,MAAM,GAAW,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,gCAAgC,SAAS,MAAM,KAAK,CAAC,OAAO,EAAE,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACO,YAAY,CAAO,SAA0B;QACrD,IACE,SAAS,CAAC,IAAI,KAAK,KAAK;YACxB,SAAS,CAAC,IAAI,KAAK,MAAM;YACzB,SAAS,CAAC,IAAI,KAAK,QAAQ,EAC3B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,CAAC,IAAI,kBAAkB,CAAC,CAAC;QAC3E,CAAC;QACD,OAAQ,SAAmC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,kBAAkB,CAAC,IAAY,EAAE,EAAU;QACzD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAClD,aAAa,CAAC,SAAS,CACxB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CACf,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,WAAW,CAAC,IAAI,uBAAuB,CAC/D,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAChD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;YAE/D,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpD,MAAM,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9C,sEAAsE;oBACtE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC/B,+BAA+B,QAAQ,EAAE,CAC1C,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACb,qDAAqD,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAClF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,gBAAgB,CAC9B,IAAY,EACZ,EAAU,EACV,cAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CACvD,aAAa,CAAC,SAAS,CACxB,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,CAAC,GAAG,CACf,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"resource-object.js","sourceRoot":"","sources":["../../src/resources/resource-object.ts"],"names":[],"mappings":"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"}
@@ -10,14 +10,17 @@
10
10
  details. You should have received a copy of the GNU Affero General Public
11
11
  License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
12
  */
13
- import type { Card, Operation, Project, ResourceName } from './folder-resource.js';
14
13
  import { FolderResource } from './folder-resource.js';
15
- import type { TemplateConfiguration, TemplateMetadata } from '../interfaces/resource-interfaces.js';
16
14
  import { Template } from '../containers/template.js';
15
+ import type { Card } from '../interfaces/project-interfaces.js';
16
+ import type { Operation } from './resource-object.js';
17
+ import type { Project } from '../containers/project.js';
18
+ import type { ResourceName } from '../utils/resource-utils.js';
19
+ import type { TemplateConfiguration, TemplateMetadata, UpdateKey } from '../interfaces/resource-interfaces.js';
17
20
  /**
18
21
  * Template resource class.
19
22
  */
20
- export declare class TemplateResource extends FolderResource {
23
+ export declare class TemplateResource extends FolderResource<TemplateMetadata, never> {
21
24
  private cardContainer;
22
25
  private cardsFolder;
23
26
  private cardsSchema;
@@ -33,12 +36,9 @@ export declare class TemplateResource extends FolderResource {
33
36
  * @throws if 'newContent' is not valid.
34
37
  */
35
38
  create(newContent?: TemplateMetadata): Promise<void>;
36
- /**
37
- * Returns content data.
38
- */
39
- get data(): TemplateMetadata;
40
39
  /**
41
40
  * Deletes file and folder that this resource is based on.
41
+ * Also removes template cards from the project's card cache.
42
42
  */
43
43
  delete(): Promise<void>;
44
44
  /**
@@ -50,7 +50,7 @@ export declare class TemplateResource extends FolderResource {
50
50
  * Shows metadata of the resource.
51
51
  * @returns template metadata.
52
52
  */
53
- show(): Promise<TemplateConfiguration>;
53
+ show(): TemplateConfiguration;
54
54
  /**
55
55
  * Returns template card container object.
56
56
  * @returns template container object
@@ -58,11 +58,11 @@ export declare class TemplateResource extends FolderResource {
58
58
  templateObject(): Template;
59
59
  /**
60
60
  * Updates template resource.
61
- * @param key Key to modify
61
+ * @param updateKey Key to modify
62
62
  * @param op Operation to perform on 'key'
63
63
  * @throws if key is unknown.
64
64
  */
65
- update<Type>(key: string, op: Operation<Type>): Promise<void>;
65
+ update<Type, K extends string>(updateKey: UpdateKey<K>, op: Operation<Type>): Promise<void>;
66
66
  /**
67
67
  * List where template is used.
68
68
  * Always returns card key references first, then calculation references.
@@ -71,13 +71,6 @@ export declare class TemplateResource extends FolderResource {
71
71
  * @returns array of card keys, and calculation filenames that refer this resource.
72
72
  */
73
73
  usage(cards?: Card[]): Promise<string[]>;
74
- /**
75
- * Validates template.
76
- * @throws when there are validation errors.
77
- * @param content Content to be validated.
78
- * @note If content is not provided, base class validation will use resource's current content.
79
- */
80
- validate(content?: object): Promise<void>;
81
74
  /**
82
75
  * Create the template's cards folder.
83
76
  */