@cyberismo/data-handler 0.0.2

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 (306) hide show
  1. package/LICENSE +702 -0
  2. package/dist/card-metadata-updater.d.ts +33 -0
  3. package/dist/card-metadata-updater.js +121 -0
  4. package/dist/card-metadata-updater.js.map +1 -0
  5. package/dist/command-handler.d.ts +96 -0
  6. package/dist/command-handler.js +557 -0
  7. package/dist/command-handler.js.map +1 -0
  8. package/dist/command-manager.d.ts +43 -0
  9. package/dist/command-manager.js +73 -0
  10. package/dist/command-manager.js.map +1 -0
  11. package/dist/commands/calculate.d.ts +86 -0
  12. package/dist/commands/calculate.js +444 -0
  13. package/dist/commands/calculate.js.map +1 -0
  14. package/dist/commands/create.d.ts +114 -0
  15. package/dist/commands/create.js +389 -0
  16. package/dist/commands/create.js.map +1 -0
  17. package/dist/commands/edit.d.ts +37 -0
  18. package/dist/commands/edit.js +99 -0
  19. package/dist/commands/edit.js.map +1 -0
  20. package/dist/commands/export-site.d.ts +45 -0
  21. package/dist/commands/export-site.js +301 -0
  22. package/dist/commands/export-site.js.map +1 -0
  23. package/dist/commands/export.d.ts +53 -0
  24. package/dist/commands/export.js +251 -0
  25. package/dist/commands/export.js.map +1 -0
  26. package/dist/commands/import.d.ts +53 -0
  27. package/dist/commands/import.js +133 -0
  28. package/dist/commands/import.js.map +1 -0
  29. package/dist/commands/index.d.ts +26 -0
  30. package/dist/commands/index.js +27 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/move.d.ts +55 -0
  33. package/dist/commands/move.js +341 -0
  34. package/dist/commands/move.js.map +1 -0
  35. package/dist/commands/remove.d.ts +38 -0
  36. package/dist/commands/remove.js +192 -0
  37. package/dist/commands/remove.js.map +1 -0
  38. package/dist/commands/rename.d.ts +46 -0
  39. package/dist/commands/rename.js +289 -0
  40. package/dist/commands/rename.js.map +1 -0
  41. package/dist/commands/show.d.ts +124 -0
  42. package/dist/commands/show.js +345 -0
  43. package/dist/commands/show.js.map +1 -0
  44. package/dist/commands/transition.d.ts +27 -0
  45. package/dist/commands/transition.js +92 -0
  46. package/dist/commands/transition.js.map +1 -0
  47. package/dist/commands/update.d.ts +29 -0
  48. package/dist/commands/update.js +64 -0
  49. package/dist/commands/update.js.map +1 -0
  50. package/dist/commands/validate.d.ts +143 -0
  51. package/dist/commands/validate.js +689 -0
  52. package/dist/commands/validate.js.map +1 -0
  53. package/dist/containers/card-container.d.ts +44 -0
  54. package/dist/containers/card-container.js +282 -0
  55. package/dist/containers/card-container.js.map +1 -0
  56. package/dist/containers/project/project-paths.d.ts +46 -0
  57. package/dist/containers/project/project-paths.js +105 -0
  58. package/dist/containers/project/project-paths.js.map +1 -0
  59. package/dist/containers/project/resource-collector.d.ts +86 -0
  60. package/dist/containers/project/resource-collector.js +331 -0
  61. package/dist/containers/project/resource-collector.js.map +1 -0
  62. package/dist/containers/project.d.ts +351 -0
  63. package/dist/containers/project.js +896 -0
  64. package/dist/containers/project.js.map +1 -0
  65. package/dist/containers/template.d.ts +108 -0
  66. package/dist/containers/template.js +433 -0
  67. package/dist/containers/template.js.map +1 -0
  68. package/dist/exceptions/index.d.ts +19 -0
  69. package/dist/exceptions/index.js +26 -0
  70. package/dist/exceptions/index.js.map +1 -0
  71. package/dist/index.d.ts +16 -0
  72. package/dist/index.js +15 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/interfaces/adoc.d.ts +12 -0
  75. package/dist/interfaces/adoc.js +13 -0
  76. package/dist/interfaces/adoc.js.map +1 -0
  77. package/dist/interfaces/macros.d.ts +45 -0
  78. package/dist/interfaces/macros.js +13 -0
  79. package/dist/interfaces/macros.js.map +1 -0
  80. package/dist/interfaces/project-interfaces.d.ts +121 -0
  81. package/dist/interfaces/project-interfaces.js +21 -0
  82. package/dist/interfaces/project-interfaces.js.map +1 -0
  83. package/dist/interfaces/request-status-interfaces.d.ts +28 -0
  84. package/dist/interfaces/request-status-interfaces.js +20 -0
  85. package/dist/interfaces/request-status-interfaces.js.map +1 -0
  86. package/dist/interfaces/resource-interfaces.d.ts +117 -0
  87. package/dist/interfaces/resource-interfaces.js +20 -0
  88. package/dist/interfaces/resource-interfaces.js.map +1 -0
  89. package/dist/macros/base-macro.d.ts +31 -0
  90. package/dist/macros/base-macro.js +126 -0
  91. package/dist/macros/base-macro.js.map +1 -0
  92. package/dist/macros/common.d.ts +17 -0
  93. package/dist/macros/common.js +23 -0
  94. package/dist/macros/common.js.map +1 -0
  95. package/dist/macros/createCards/index.d.ts +36 -0
  96. package/dist/macros/createCards/index.js +35 -0
  97. package/dist/macros/createCards/index.js.map +1 -0
  98. package/dist/macros/createCards/metadata.d.ts +14 -0
  99. package/dist/macros/createCards/metadata.js +18 -0
  100. package/dist/macros/createCards/metadata.js.map +1 -0
  101. package/dist/macros/graph/index.d.ts +29 -0
  102. package/dist/macros/graph/index.js +91 -0
  103. package/dist/macros/graph/index.js.map +1 -0
  104. package/dist/macros/graph/metadata.d.ts +14 -0
  105. package/dist/macros/graph/metadata.js +18 -0
  106. package/dist/macros/graph/metadata.js.map +1 -0
  107. package/dist/macros/index.d.ts +93 -0
  108. package/dist/macros/index.js +237 -0
  109. package/dist/macros/index.js.map +1 -0
  110. package/dist/macros/report/index.d.ts +26 -0
  111. package/dist/macros/report/index.js +70 -0
  112. package/dist/macros/report/index.js.map +1 -0
  113. package/dist/macros/report/metadata.d.ts +14 -0
  114. package/dist/macros/report/metadata.js +18 -0
  115. package/dist/macros/report/metadata.js.map +1 -0
  116. package/dist/macros/scoreCard/index.d.ts +30 -0
  117. package/dist/macros/scoreCard/index.js +38 -0
  118. package/dist/macros/scoreCard/index.js.map +1 -0
  119. package/dist/macros/scoreCard/metadata.d.ts +14 -0
  120. package/dist/macros/scoreCard/metadata.js +18 -0
  121. package/dist/macros/scoreCard/metadata.js.map +1 -0
  122. package/dist/macros/task-queue.d.ts +46 -0
  123. package/dist/macros/task-queue.js +69 -0
  124. package/dist/macros/task-queue.js.map +1 -0
  125. package/dist/module-manager.d.ts +62 -0
  126. package/dist/module-manager.js +350 -0
  127. package/dist/module-manager.js.map +1 -0
  128. package/dist/permissions/action-guard.d.ts +28 -0
  129. package/dist/permissions/action-guard.js +61 -0
  130. package/dist/permissions/action-guard.js.map +1 -0
  131. package/dist/project-settings.d.ts +42 -0
  132. package/dist/project-settings.js +120 -0
  133. package/dist/project-settings.js.map +1 -0
  134. package/dist/resources/array-handler.d.ts +28 -0
  135. package/dist/resources/array-handler.js +116 -0
  136. package/dist/resources/array-handler.js.map +1 -0
  137. package/dist/resources/card-type-resource.d.ts +72 -0
  138. package/dist/resources/card-type-resource.js +334 -0
  139. package/dist/resources/card-type-resource.js.map +1 -0
  140. package/dist/resources/create-defaults.d.ts +81 -0
  141. package/dist/resources/create-defaults.js +184 -0
  142. package/dist/resources/create-defaults.js.map +1 -0
  143. package/dist/resources/field-type-resource.d.ts +88 -0
  144. package/dist/resources/field-type-resource.js +411 -0
  145. package/dist/resources/field-type-resource.js.map +1 -0
  146. package/dist/resources/file-resource.d.ts +50 -0
  147. package/dist/resources/file-resource.js +301 -0
  148. package/dist/resources/file-resource.js.map +1 -0
  149. package/dist/resources/folder-resource.d.ts +66 -0
  150. package/dist/resources/folder-resource.js +100 -0
  151. package/dist/resources/folder-resource.js.map +1 -0
  152. package/dist/resources/graph-model-resource.d.ts +78 -0
  153. package/dist/resources/graph-model-resource.js +164 -0
  154. package/dist/resources/graph-model-resource.js.map +1 -0
  155. package/dist/resources/graph-view-resource.d.ts +78 -0
  156. package/dist/resources/graph-view-resource.js +163 -0
  157. package/dist/resources/graph-view-resource.js.map +1 -0
  158. package/dist/resources/link-type-resource.d.ts +62 -0
  159. package/dist/resources/link-type-resource.js +150 -0
  160. package/dist/resources/link-type-resource.js.map +1 -0
  161. package/dist/resources/report-resource.d.ts +77 -0
  162. package/dist/resources/report-resource.js +171 -0
  163. package/dist/resources/report-resource.js.map +1 -0
  164. package/dist/resources/resource-object.d.ts +108 -0
  165. package/dist/resources/resource-object.js +147 -0
  166. package/dist/resources/resource-object.js.map +1 -0
  167. package/dist/resources/template-resource.d.ts +82 -0
  168. package/dist/resources/template-resource.js +173 -0
  169. package/dist/resources/template-resource.js.map +1 -0
  170. package/dist/resources/workflow-resource.d.ts +67 -0
  171. package/dist/resources/workflow-resource.js +156 -0
  172. package/dist/resources/workflow-resource.js.map +1 -0
  173. package/dist/types/queries.d.ts +142 -0
  174. package/dist/types/queries.js +16 -0
  175. package/dist/types/queries.js.map +1 -0
  176. package/dist/utils/card-utils.d.ts +34 -0
  177. package/dist/utils/card-utils.js +78 -0
  178. package/dist/utils/card-utils.js.map +1 -0
  179. package/dist/utils/clingo-fact-builder.d.ts +58 -0
  180. package/dist/utils/clingo-fact-builder.js +126 -0
  181. package/dist/utils/clingo-fact-builder.js.map +1 -0
  182. package/dist/utils/clingo-facts.d.ts +97 -0
  183. package/dist/utils/clingo-facts.js +352 -0
  184. package/dist/utils/clingo-facts.js.map +1 -0
  185. package/dist/utils/clingo-parser.d.ts +59 -0
  186. package/dist/utils/clingo-parser.js +403 -0
  187. package/dist/utils/clingo-parser.js.map +1 -0
  188. package/dist/utils/clingo-program-builder.d.ts +39 -0
  189. package/dist/utils/clingo-program-builder.js +57 -0
  190. package/dist/utils/clingo-program-builder.js.map +1 -0
  191. package/dist/utils/common-utils.d.ts +24 -0
  192. package/dist/utils/common-utils.js +47 -0
  193. package/dist/utils/common-utils.js.map +1 -0
  194. package/dist/utils/constants.d.ts +18 -0
  195. package/dist/utils/constants.js +27 -0
  196. package/dist/utils/constants.js.map +1 -0
  197. package/dist/utils/csv.d.ts +18 -0
  198. package/dist/utils/csv.js +45 -0
  199. package/dist/utils/csv.js.map +1 -0
  200. package/dist/utils/file-utils.d.ts +69 -0
  201. package/dist/utils/file-utils.js +158 -0
  202. package/dist/utils/file-utils.js.map +1 -0
  203. package/dist/utils/json.d.ts +61 -0
  204. package/dist/utils/json.js +108 -0
  205. package/dist/utils/json.js.map +1 -0
  206. package/dist/utils/lexorank.d.ts +59 -0
  207. package/dist/utils/lexorank.js +159 -0
  208. package/dist/utils/lexorank.js.map +1 -0
  209. package/dist/utils/log-utils.d.ts +40 -0
  210. package/dist/utils/log-utils.js +109 -0
  211. package/dist/utils/log-utils.js.map +1 -0
  212. package/dist/utils/random.d.ts +19 -0
  213. package/dist/utils/random.js +34 -0
  214. package/dist/utils/random.js.map +1 -0
  215. package/dist/utils/resource-utils.d.ts +45 -0
  216. package/dist/utils/resource-utils.js +137 -0
  217. package/dist/utils/resource-utils.js.map +1 -0
  218. package/dist/utils/sanitize-svg.d.ts +18 -0
  219. package/dist/utils/sanitize-svg.js +38 -0
  220. package/dist/utils/sanitize-svg.js.map +1 -0
  221. package/dist/utils/user-preferences.d.ts +64 -0
  222. package/dist/utils/user-preferences.js +106 -0
  223. package/dist/utils/user-preferences.js.map +1 -0
  224. package/dist/utils/validate.d.ts +26 -0
  225. package/dist/utils/validate.js +53 -0
  226. package/dist/utils/validate.js.map +1 -0
  227. package/dist/utils/value-utils.d.ts +58 -0
  228. package/dist/utils/value-utils.js +181 -0
  229. package/dist/utils/value-utils.js.map +1 -0
  230. package/package.json +67 -0
  231. package/src/card-metadata-updater.ts +182 -0
  232. package/src/command-handler.ts +686 -0
  233. package/src/command-manager.ts +99 -0
  234. package/src/commands/calculate.ts +591 -0
  235. package/src/commands/create.ts +559 -0
  236. package/src/commands/edit.ts +123 -0
  237. package/src/commands/export-site.ts +356 -0
  238. package/src/commands/export.ts +315 -0
  239. package/src/commands/import.ts +169 -0
  240. package/src/commands/index.ts +42 -0
  241. package/src/commands/move.ts +451 -0
  242. package/src/commands/remove.ts +244 -0
  243. package/src/commands/rename.ts +378 -0
  244. package/src/commands/show.ts +442 -0
  245. package/src/commands/transition.ts +127 -0
  246. package/src/commands/update.ts +76 -0
  247. package/src/commands/validate.ts +962 -0
  248. package/src/containers/card-container.ts +378 -0
  249. package/src/containers/project/project-paths.ts +127 -0
  250. package/src/containers/project/resource-collector.ts +379 -0
  251. package/src/containers/project.ts +1135 -0
  252. package/src/containers/template.ts +573 -0
  253. package/src/exceptions/index.ts +29 -0
  254. package/src/index.ts +33 -0
  255. package/src/interfaces/adoc.ts +18 -0
  256. package/src/interfaces/macros.ts +54 -0
  257. package/src/interfaces/project-interfaces.ts +208 -0
  258. package/src/interfaces/request-status-interfaces.ts +30 -0
  259. package/src/interfaces/resource-interfaces.ts +179 -0
  260. package/src/macros/base-macro.ts +176 -0
  261. package/src/macros/common.ts +24 -0
  262. package/src/macros/createCards/index.ts +57 -0
  263. package/src/macros/createCards/metadata.ts +21 -0
  264. package/src/macros/graph/index.ts +130 -0
  265. package/src/macros/graph/metadata.ts +21 -0
  266. package/src/macros/index.ts +321 -0
  267. package/src/macros/report/index.ts +88 -0
  268. package/src/macros/report/metadata.ts +21 -0
  269. package/src/macros/scoreCard/index.ts +55 -0
  270. package/src/macros/scoreCard/metadata.ts +21 -0
  271. package/src/macros/task-queue.ts +79 -0
  272. package/src/module-manager.ts +443 -0
  273. package/src/permissions/action-guard.ts +77 -0
  274. package/src/project-settings.ts +140 -0
  275. package/src/resources/array-handler.ts +141 -0
  276. package/src/resources/card-type-resource.ts +455 -0
  277. package/src/resources/create-defaults.ts +216 -0
  278. package/src/resources/field-type-resource.ts +533 -0
  279. package/src/resources/file-resource.ts +433 -0
  280. package/src/resources/folder-resource.ts +140 -0
  281. package/src/resources/graph-model-resource.ts +205 -0
  282. package/src/resources/graph-view-resource.ts +199 -0
  283. package/src/resources/link-type-resource.ts +191 -0
  284. package/src/resources/report-resource.ts +224 -0
  285. package/src/resources/resource-object.ts +246 -0
  286. package/src/resources/template-resource.ts +210 -0
  287. package/src/resources/workflow-resource.ts +205 -0
  288. package/src/types/queries.ts +149 -0
  289. package/src/utils/card-utils.ts +83 -0
  290. package/src/utils/clingo-fact-builder.ts +167 -0
  291. package/src/utils/clingo-facts.ts +550 -0
  292. package/src/utils/clingo-parser.ts +519 -0
  293. package/src/utils/clingo-program-builder.ts +71 -0
  294. package/src/utils/common-utils.ts +54 -0
  295. package/src/utils/constants.ts +32 -0
  296. package/src/utils/csv.ts +53 -0
  297. package/src/utils/file-utils.ts +182 -0
  298. package/src/utils/json.ts +118 -0
  299. package/src/utils/lexorank.ts +180 -0
  300. package/src/utils/log-utils.ts +127 -0
  301. package/src/utils/random.ts +37 -0
  302. package/src/utils/resource-utils.ts +180 -0
  303. package/src/utils/sanitize-svg.ts +46 -0
  304. package/src/utils/user-preferences.ts +126 -0
  305. package/src/utils/validate.ts +66 -0
  306. package/src/utils/value-utils.ts +189 -0
@@ -0,0 +1,88 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import type { Card, Operation, Project, ResourceName } from './file-resource.js';
14
+ import { FileResource } from './file-resource.js';
15
+ import type { DataType, FieldType } from '../interfaces/resource-interfaces.js';
16
+ /**
17
+ * Field type resource class.
18
+ */
19
+ export declare class FieldTypeResource extends FileResource {
20
+ private fromType;
21
+ private toType;
22
+ constructor(project: Project, name: ResourceName);
23
+ private cardsWithFieldType;
24
+ private collectCards;
25
+ private doConvertValue;
26
+ private convertValue;
27
+ private dataTypeChanged;
28
+ private enumValueExists;
29
+ private handleEnumValueReplacements;
30
+ private handleNameChange;
31
+ private isConversionValid;
32
+ private static parseClingoArray;
33
+ private relevantCardTypes;
34
+ private updateCardTypes;
35
+ /**
36
+ * Creates a new field type object. Base class writes the object to disk automatically.
37
+ * @param dataType Type for the new field type.
38
+ */
39
+ createFieldType(dataType: DataType): Promise<void>;
40
+ /**
41
+ * Returns content data.
42
+ */
43
+ get data(): FieldType;
44
+ /**
45
+ * Deletes file(s) from disk and clears out the memory resident object.
46
+ */
47
+ delete(): Promise<void>;
48
+ /**
49
+ * Returns all possible field types.
50
+ * @returns all possible field types.
51
+ */
52
+ static fieldDataTypes(): DataType[];
53
+ /**
54
+ * Converts a given 'value' from Clingo result set to a type defined in 'typeName'.
55
+ * @param value Clingo result value (as string) to be converted.
56
+ * @param typeName To which type the 'value' needs to be converted to.
57
+ * @returns converted value.
58
+ */
59
+ static fromClingoResult(value: string, typeName: DataType): any;
60
+ /**
61
+ * Renames resource metadata file and renames memory resident object 'name'.
62
+ * @param newName New name for the resource.
63
+ */
64
+ rename(newName: ResourceName): Promise<void>;
65
+ /**
66
+ * Shows metadata of the resource.
67
+ * @returns field type metadata.
68
+ */
69
+ show(): Promise<FieldType>;
70
+ /**
71
+ * Updates field type resource.
72
+ * @param key Key to modify
73
+ * @param op Operation to perform on 'key'
74
+ */
75
+ update<Type>(key: string, op: Operation<Type>): Promise<void>;
76
+ /**
77
+ * List where link type is used.
78
+ * Always returns card key references first, then any resource references and finally calculation references.
79
+ *
80
+ * @param cards Optional. Check these cards for usage of this resource. If undefined, will check all cards.
81
+ * @returns array of card keys, resource names and calculation filenames that refer this resource.
82
+ */
83
+ usage(cards?: Card[]): Promise<string[]>;
84
+ /**
85
+ * Validates the resource. If object is invalid, throws.
86
+ */
87
+ validate(content?: object): Promise<void>;
88
+ }
@@ -0,0 +1,411 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import { DefaultContent, FileResource, ResourcesFrom, resourceName, resourceNameToString, sortCards, } from './file-resource.js';
14
+ import { CardTypeResource } from './card-type-resource.js';
15
+ import { allowed, fromDate, fromNumber, fromString, } from '../utils/value-utils.js';
16
+ import * as EmailValidator from 'email-validator';
17
+ const SHORT_TEXT_MAX_LENGTH = 80;
18
+ /**
19
+ * Field type resource class.
20
+ */
21
+ export class FieldTypeResource extends FileResource {
22
+ // Initialize data type change helpers (fromType, toType) to some values.
23
+ // The actual types are set, if this Field Type's dataType is changed.
24
+ fromType = 'integer';
25
+ toType = 'integer';
26
+ constructor(project, name) {
27
+ super(project, name, 'fieldTypes');
28
+ this.contentSchemaId = 'fieldTypeSchema';
29
+ this.contentSchema = super.contentSchemaContent(this.contentSchemaId);
30
+ this.initialize();
31
+ }
32
+ // Cards from given array that include this field type.
33
+ cardsWithFieldType(cards) {
34
+ const resourceName = resourceNameToString(this.resourceName);
35
+ return cards
36
+ .filter((card) => card.metadata?.[resourceName])
37
+ .map((card) => card.key);
38
+ }
39
+ // Collects affected cards.
40
+ async collectCards(cardContent, cardTypeName) {
41
+ async function filteredCards(cardSource, cardTypeName) {
42
+ const cards = await cardSource;
43
+ return cards.filter((card) => card.metadata?.cardType === cardTypeName);
44
+ }
45
+ return filteredCards(this.project.cards(this.project.paths.cardRootFolder, cardContent), cardTypeName);
46
+ }
47
+ // Converts values.
48
+ // The allowed conversions are:
49
+ // - shortText/longText --> person, if valid email
50
+ // - shortText/longText --> integer/number, if can be parseNumber/parseInt'd
51
+ // - shortText/longText --> list, if text can be split with comma
52
+ // - shortText/longText --> date / datetime (if it can be parsed as date)
53
+ // - shortText/longText --> boolean, if string is "false" or "true"
54
+ // - number --> integer, drop fractions
55
+ // - integer --> number
56
+ // - date --> dateTime
57
+ // - dateTime --> date
58
+ // - any --> shortText, unless too long
59
+ // - any --> longText
60
+ // Other cases are forbidden.
61
+ doConvertValue(value) {
62
+ if (this.fromType === 'date' || this.fromType === 'dateTime') {
63
+ return fromDate(value, this.toType);
64
+ }
65
+ if (this.fromType === 'integer' || this.fromType === 'number') {
66
+ return fromNumber(value, this.toType);
67
+ }
68
+ if (this.fromType === 'shortText' || this.fromType === 'longText') {
69
+ return fromString(value, this.toType);
70
+ }
71
+ if (this.toType === 'shortText' || this.toType === 'longText') {
72
+ let tempValue = String(value);
73
+ tempValue = tempValue.replace(/(\\")/g, '');
74
+ if (this.toType === 'shortText' &&
75
+ tempValue.length > SHORT_TEXT_MAX_LENGTH) {
76
+ return null;
77
+ }
78
+ return tempValue;
79
+ }
80
+ }
81
+ // Converts value 'fromType' to 'toType'. If value cannot be converted returns null.
82
+ convertValue(value) {
83
+ if (value === null)
84
+ return null;
85
+ if (value === undefined)
86
+ return undefined;
87
+ const tempValue = this.doConvertValue(value);
88
+ if (tempValue === null) {
89
+ throw new Error(`Cannot convert from '${this.fromType}' to '${this.toType}' value '${value}'`);
90
+ }
91
+ return tempValue;
92
+ }
93
+ // If dataType has changed, convert all the cards with affected data.
94
+ async dataTypeChanged() {
95
+ const cardTypesThatUseThisFieldType = [];
96
+ // Helper to filter out the unwanted cards.
97
+ function affectedCard(card) {
98
+ if (!card.metadata)
99
+ return false;
100
+ return cardTypesThatUseThisFieldType.some((item) => item === card.metadata.cardType);
101
+ }
102
+ // First collect the cardTypes that need to be updated.
103
+ const cardTypes = await this.relevantCardTypes(ResourcesFrom.localOnly);
104
+ cardTypesThatUseThisFieldType.push(...cardTypes);
105
+ // Then collect cards (both project and local template) that use those card types.
106
+ const projectCards = (await this.project.cards(this.project.paths.cardRootFolder, {
107
+ metadata: true,
108
+ })).filter((card) => affectedCard(card));
109
+ const templateCards = (await this.project.allTemplateCards())
110
+ .filter((card) => !card.path.includes('modules'))
111
+ .filter((card) => affectedCard(card));
112
+ const allCards = [...projectCards, ...templateCards];
113
+ // Finally, convert values and update the cards.
114
+ allCards.forEach(async (card) => {
115
+ const metadata = card.metadata;
116
+ const fieldName = resourceNameToString(this.resourceName);
117
+ try {
118
+ metadata[fieldName] = this.convertValue(metadata[fieldName]);
119
+ // Either value was already null, or couldn't convert.
120
+ if (metadata[fieldName] === null)
121
+ return;
122
+ await this.project.updateCardMetadata(card, metadata);
123
+ }
124
+ catch (error) {
125
+ console.error(`In card '${card.key}': ${error instanceof Error ? error.message : String(error)}`);
126
+ }
127
+ });
128
+ }
129
+ // Checks that enum with 'enumValue' exists.
130
+ enumValueExists(op, values) {
131
+ const targetValue = op.target;
132
+ const foundTarget = values.find((item) => item.enumValue === targetValue.enumValue);
133
+ if (op.name === 'add' && foundTarget) {
134
+ throw new Error(`Cannot perform operation on 'enumValues'. Enum with value '${op.target.enumValue}' already exists`);
135
+ }
136
+ if (op.name === 'remove' && !foundTarget) {
137
+ throw new Error(`Cannot perform operation on 'enumValues'. Enum with value '${op.target.enumValue}' does not exist`);
138
+ }
139
+ if (op.name === 'change') {
140
+ if (!foundTarget) {
141
+ throw new Error(`Cannot perform operation on 'enumValues'. Enum with value '${op.target.enumValue}' does not exist`);
142
+ }
143
+ const newValue = op.to;
144
+ const foundTo = values.find((item) => item.enumValue === newValue.enumValue);
145
+ if (foundTo) {
146
+ throw new Error(`Cannot perform operation on 'enumValues'. Enum with value '${op.to.enumValue}' already exists`);
147
+ }
148
+ }
149
+ // Return the whole object; caller can just provide 'enumValue'.
150
+ return foundTarget;
151
+ }
152
+ // If enum value is removed, and replacement value is given; replace all
153
+ // references to removed enum value with the given replacement value.
154
+ async handleEnumValueReplacements(op) {
155
+ const removeOp = op;
156
+ const newValue = removeOp.replacementValue;
157
+ if (!newValue)
158
+ return;
159
+ const removedValue = op.target.enumValue;
160
+ const cardTypes = await this.relevantCardTypes(ResourcesFrom.localOnly);
161
+ const allCards = await Promise.all(cardTypes.map((cardType) => this.collectCards({ metadata: true }, cardType)));
162
+ const cardsToUpdate = allCards
163
+ .flat()
164
+ .filter((card) => card.metadata?.[this.content.name] === removedValue);
165
+ await Promise.all(cardsToUpdate.map((card) => this.project.updateCardMetadataKey(card.key, this.content.name, newValue.enumValue)));
166
+ }
167
+ // When resource name changes.
168
+ async handleNameChange(existingName) {
169
+ await Promise.all([
170
+ super.updateHandleBars(existingName, this.content.name),
171
+ super.updateCalculations(existingName, this.content.name),
172
+ ]);
173
+ await this.write();
174
+ }
175
+ // Checks if value 'from' can be converted 'to' value.
176
+ isConversionValid(from, to) {
177
+ // Set helpers to avoid dragging 'Operation' object everywhere.
178
+ this.fromType = from;
179
+ this.toType = to;
180
+ return allowed(from, to);
181
+ }
182
+ // Converts clingo array: "(option1, option2)" => ['option1', 'option2']
183
+ static parseClingoArray(value) {
184
+ const itemsFromParenthesesList = /([^,()]+)/g;
185
+ const results = value.match(itemsFromParenthesesList);
186
+ if (!results)
187
+ return [];
188
+ return results.map((item) => item.trim());
189
+ }
190
+ // Card types that use field type.
191
+ async relevantCardTypes(from) {
192
+ const resourceName = resourceNameToString(this.resourceName);
193
+ const cardTypes = await this.project.cardTypes(from);
194
+ const references = await Promise.all(cardTypes.map(async (cardType) => {
195
+ const metadata = await this.project.resource(cardType.name);
196
+ return metadata?.customFields.some((field) => field.name === resourceName)
197
+ ? cardType.name
198
+ : '';
199
+ }));
200
+ // Remove empty values.
201
+ return references.filter(Boolean);
202
+ }
203
+ // Update dependant card types
204
+ async updateCardTypes(oldName) {
205
+ const cardTypes = await this.project.cardTypes(ResourcesFrom.localOnly);
206
+ const op = {
207
+ name: 'change',
208
+ target: oldName,
209
+ to: this.content.name,
210
+ };
211
+ for (const cardType of cardTypes) {
212
+ const object = new CardTypeResource(this.project, resourceName(cardType.name));
213
+ const data = object.data;
214
+ if (data) {
215
+ const found = data.customFields
216
+ ? data.customFields.find((item) => item.name === oldName)
217
+ : undefined;
218
+ if (found) {
219
+ await object.update('customFields', op);
220
+ }
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * Creates a new field type object. Base class writes the object to disk automatically.
226
+ * @param dataType Type for the new field type.
227
+ */
228
+ async createFieldType(dataType) {
229
+ if (!FieldTypeResource.fieldDataTypes().includes(dataType)) {
230
+ throw new Error(`Field type '${dataType}' not supported. Supported types ${FieldTypeResource.fieldDataTypes().join(', ')}`);
231
+ }
232
+ const useDataType = dataType;
233
+ const content = DefaultContent.fieldType(resourceNameToString(this.resourceName), useDataType);
234
+ return super.create(content);
235
+ }
236
+ /**
237
+ * Returns content data.
238
+ */
239
+ get data() {
240
+ return super.data;
241
+ }
242
+ /**
243
+ * Deletes file(s) from disk and clears out the memory resident object.
244
+ */
245
+ async delete() {
246
+ return super.delete();
247
+ }
248
+ /**
249
+ * Returns all possible field types.
250
+ * @returns all possible field types.
251
+ */
252
+ static fieldDataTypes() {
253
+ return [
254
+ 'shortText',
255
+ 'longText',
256
+ 'number',
257
+ 'integer',
258
+ 'boolean',
259
+ 'enum',
260
+ 'list',
261
+ 'date',
262
+ 'dateTime',
263
+ 'person',
264
+ ];
265
+ }
266
+ /**
267
+ * Converts a given 'value' from Clingo result set to a type defined in 'typeName'.
268
+ * @param value Clingo result value (as string) to be converted.
269
+ * @param typeName To which type the 'value' needs to be converted to.
270
+ * @returns converted value.
271
+ */
272
+ static fromClingoResult(value, typeName) {
273
+ if (!value)
274
+ return value;
275
+ if (value === 'null')
276
+ return JSON.parse(value);
277
+ try {
278
+ switch (typeName) {
279
+ case 'list':
280
+ return FieldTypeResource.parseClingoArray(value);
281
+ case 'boolean':
282
+ return value === 'true';
283
+ case 'date': {
284
+ const date = new Date(value).toISOString();
285
+ return date.substring(0, date.indexOf('T'));
286
+ }
287
+ case 'dateTime':
288
+ return new Date(value).toISOString();
289
+ case 'integer':
290
+ return Math.trunc(Number(value));
291
+ case 'number':
292
+ return Number(value);
293
+ case 'person':
294
+ return EmailValidator.validate(value) ? value : null;
295
+ case 'enum':
296
+ case 'shortText':
297
+ case 'longText':
298
+ default:
299
+ return value;
300
+ }
301
+ }
302
+ catch (error) {
303
+ console.error(`Failed to convert value '${value}' to field '${typeName}': ${error instanceof Error ? error.message : String(error)}`);
304
+ return null;
305
+ }
306
+ }
307
+ /**
308
+ * Renames resource metadata file and renames memory resident object 'name'.
309
+ * @param newName New name for the resource.
310
+ */
311
+ async rename(newName) {
312
+ const existingName = this.content.name;
313
+ await super.rename(newName);
314
+ return this.handleNameChange(existingName);
315
+ }
316
+ /**
317
+ * Shows metadata of the resource.
318
+ * @returns field type metadata.
319
+ */
320
+ async show() {
321
+ return super.show();
322
+ }
323
+ /**
324
+ * Updates field type resource.
325
+ * @param key Key to modify
326
+ * @param op Operation to perform on 'key'
327
+ */
328
+ async update(key, op) {
329
+ const nameChange = key === 'name';
330
+ const typeChange = key === 'dataType';
331
+ const enumChange = key === 'enumValues';
332
+ const existingName = this.content.name;
333
+ const existingType = this.content.dataType;
334
+ await super.update(key, op);
335
+ const content = this.content;
336
+ if (key === 'name') {
337
+ content.name = super.handleScalar(op);
338
+ }
339
+ else if (key === 'dataType') {
340
+ const toType = op;
341
+ if (!FieldTypeResource.fieldDataTypes().includes(toType.to)) {
342
+ throw new Error(`Cannot change '${key}' to unknown type '${toType.to}'`);
343
+ }
344
+ if (existingType === toType.to) {
345
+ throw new Error(`'${key}' is already '${toType.to}'`);
346
+ }
347
+ if (!this.isConversionValid(content.dataType, toType.to)) {
348
+ throw new Error(`Cannot change data type from '${content.dataType}' to '${toType.to}'`);
349
+ }
350
+ content.dataType = super.handleScalar(op);
351
+ }
352
+ else if (key === 'displayName') {
353
+ content.displayName = super.handleScalar(op);
354
+ }
355
+ else if (key === 'enumValues') {
356
+ if (op.name === 'add' || op.name === 'change' || op.name === 'remove') {
357
+ const existingValue = this.enumValueExists(op, content.enumValues);
358
+ op.target = existingValue ?? op.target;
359
+ }
360
+ content.enumValues = super.handleArray(op, key, content.enumValues);
361
+ }
362
+ else if (key === 'fieldDescription') {
363
+ content.fieldDescription = super.handleScalar(op);
364
+ }
365
+ else {
366
+ throw new Error(`Unknown property '${key}' for FieldType`);
367
+ }
368
+ await super.postUpdate(content, key, op);
369
+ if (nameChange) {
370
+ // Renaming this field type causes that references to its name must be updated.
371
+ await this.handleNameChange(existingName);
372
+ await this.updateCardTypes(existingName);
373
+ }
374
+ else if (typeChange) {
375
+ await this.dataTypeChanged();
376
+ }
377
+ else if (enumChange && op.name === 'remove') {
378
+ await this.handleEnumValueReplacements(op);
379
+ }
380
+ }
381
+ /**
382
+ * List where link type is used.
383
+ * Always returns card key references first, then any resource references and finally calculation references.
384
+ *
385
+ * @param cards Optional. Check these cards for usage of this resource. If undefined, will check all cards.
386
+ * @returns array of card keys, resource names and calculation filenames that refer this resource.
387
+ */
388
+ async usage(cards) {
389
+ const allCards = cards ?? (await super.cards());
390
+ const [cardContentReferences, relevantLinkTypes, calculations] = await Promise.all([
391
+ super.usage(allCards),
392
+ this.relevantCardTypes(ResourcesFrom.all),
393
+ super.calculations(),
394
+ ]);
395
+ const cardReferences = [
396
+ ...this.cardsWithFieldType(allCards),
397
+ ...cardContentReferences,
398
+ ].sort(sortCards);
399
+ // Using Set to avoid duplicate cards
400
+ return [
401
+ ...new Set([...cardReferences, ...relevantLinkTypes, ...calculations]),
402
+ ];
403
+ }
404
+ /**
405
+ * Validates the resource. If object is invalid, throws.
406
+ */
407
+ async validate(content) {
408
+ return super.validate(content);
409
+ }
410
+ }
411
+ //# sourceMappingURL=field-type-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-type-resource.js","sourceRoot":"","sources":["../../src/resources/field-type-resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under
6
+ the terms of the GNU Affero General Public License version 3 as published by
7
+ the Free Software Foundation. This program is distributed in the hope that it
8
+ will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
9
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
+ See the GNU Affero General Public License for more details.
11
+ You should have received a copy of the GNU Affero General Public
12
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
13
+ */
14
+ import type { Card, ResourceFolderType } from '../interfaces/project-interfaces.js';
15
+ import { type AddOperation, type ChangeOperation, type Operation, type RemoveOperation, ResourceObject } from './resource-object.js';
16
+ import { DefaultContent } from './create-defaults.js';
17
+ import { Project, ResourcesFrom } from '../containers/project.js';
18
+ import type { ResourceBaseMetadata, ResourceContent } from '../interfaces/resource-interfaces.js';
19
+ import { type ResourceName, resourceName, resourceNameToString } from '../utils/resource-utils.js';
20
+ import { sortCards } from '../utils/card-utils.js';
21
+ export { type AddOperation, type Card, type ChangeOperation, DefaultContent, type Operation, Project, RemoveOperation, ResourcesFrom, resourceName, type ResourceName, resourceNameToString, sortCards, };
22
+ /**
23
+ * Base class for file based resources (card types, field types, link types, workflows, ...)
24
+ */
25
+ export declare class FileResource extends ResourceObject {
26
+ protected type: ResourceFolderType;
27
+ fileName: string;
28
+ protected content: ResourceBaseMetadata;
29
+ private cache;
30
+ constructor(project: Project, resourceName: ResourceName, type: ResourceFolderType);
31
+ private resourceType;
32
+ private resourceObjectToResource;
33
+ private toCache;
34
+ protected initialize(): void;
35
+ protected create(newContent?: ResourceContent): Promise<void>;
36
+ protected calculations(): Promise<string[]>;
37
+ protected cards(): Promise<Card[]>;
38
+ get data(): ResourceBaseMetadata | undefined;
39
+ protected delete(): Promise<void>;
40
+ protected validName(newName: ResourceName): Promise<string>;
41
+ protected postUpdate<Type>(content: ResourceContent, key: string, op: Operation<Type>): Promise<void>;
42
+ protected read(): Promise<void>;
43
+ protected rename(newName: ResourceName): Promise<void>;
44
+ protected show(): Promise<ResourceContent>;
45
+ protected update<Type>(key: string, _op: Operation<Type>): Promise<void>;
46
+ protected updatePrefixInResourceName(name: string, prefixes: string[]): string;
47
+ protected usage(cards?: Card[]): Promise<string[]>;
48
+ protected write(): Promise<void>;
49
+ protected validate(content?: object): Promise<void>;
50
+ }