@pbkware/fielded-text-web 0.1.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 (482) hide show
  1. package/dist/api/ft-reader.js +59 -0
  2. package/dist/api/ft-reader.js.map +1 -0
  3. package/dist/api/ft-serialization.js +147 -0
  4. package/dist/api/ft-serialization.js.map +1 -0
  5. package/dist/api/ft-writer-settings.js +31 -0
  6. package/dist/api/ft-writer-settings.js.map +1 -0
  7. package/dist/api/ft-writer.js +22 -0
  8. package/dist/api/ft-writer.js.map +1 -0
  9. package/dist/factory/ft-field-factory.js +86 -0
  10. package/dist/factory/ft-field-factory.js.map +1 -0
  11. package/dist/factory/ft-meta-constructor.js +16 -0
  12. package/dist/factory/ft-meta-constructor.js.map +1 -0
  13. package/dist/factory/ft-meta-factory.js +30 -0
  14. package/dist/factory/ft-meta-factory.js.map +1 -0
  15. package/dist/factory/ft-sequence-constructor.js +11 -0
  16. package/dist/factory/ft-sequence-constructor.js.map +1 -0
  17. package/dist/factory/ft-sequence-factory.js +18 -0
  18. package/dist/factory/ft-sequence-factory.js.map +1 -0
  19. package/dist/factory/ft-sequence-item-constructor.js +11 -0
  20. package/dist/factory/ft-sequence-item-constructor.js.map +1 -0
  21. package/dist/factory/ft-sequence-item-factory.js +18 -0
  22. package/dist/factory/ft-sequence-item-factory.js.map +1 -0
  23. package/dist/factory/ft-sequence-redirect-constructor.js +13 -0
  24. package/dist/factory/ft-sequence-redirect-constructor.js.map +1 -0
  25. package/dist/factory/ft-sequence-redirect-factory.js +176 -0
  26. package/dist/factory/ft-sequence-redirect-factory.js.map +1 -0
  27. package/dist/factory/ft-substitution-constructor.js +23 -0
  28. package/dist/factory/ft-substitution-constructor.js.map +1 -0
  29. package/dist/factory/ft-substitution-factory.js +37 -0
  30. package/dist/factory/ft-substitution-factory.js.map +1 -0
  31. package/dist/fields/definitions/ft-boolean-field-definition.js +36 -0
  32. package/dist/fields/definitions/ft-boolean-field-definition.js.map +1 -0
  33. package/dist/fields/definitions/ft-date-time-field-definition.js +39 -0
  34. package/dist/fields/definitions/ft-date-time-field-definition.js.map +1 -0
  35. package/dist/fields/definitions/ft-decimal-field-definition.js +32 -0
  36. package/dist/fields/definitions/ft-decimal-field-definition.js.map +1 -0
  37. package/dist/fields/definitions/ft-field-definition-list.js +26 -0
  38. package/dist/fields/definitions/ft-field-definition-list.js.map +1 -0
  39. package/dist/fields/definitions/ft-field-definition.js +245 -0
  40. package/dist/fields/definitions/ft-field-definition.js.map +1 -0
  41. package/dist/fields/definitions/ft-float-field-definition.js +32 -0
  42. package/dist/fields/definitions/ft-float-field-definition.js.map +1 -0
  43. package/dist/fields/definitions/ft-generic-field-definition.js +30 -0
  44. package/dist/fields/definitions/ft-generic-field-definition.js.map +1 -0
  45. package/dist/fields/definitions/ft-integer-field-definition.js +33 -0
  46. package/dist/fields/definitions/ft-integer-field-definition.js.map +1 -0
  47. package/dist/fields/definitions/ft-string-field-definition.js +21 -0
  48. package/dist/fields/definitions/ft-string-field-definition.js.map +1 -0
  49. package/dist/fields/instances/ft-boolean-field.js +38 -0
  50. package/dist/fields/instances/ft-boolean-field.js.map +1 -0
  51. package/dist/fields/instances/ft-date-time-field.js +35 -0
  52. package/dist/fields/instances/ft-date-time-field.js.map +1 -0
  53. package/dist/fields/instances/ft-decimal-field.js +35 -0
  54. package/dist/fields/instances/ft-decimal-field.js.map +1 -0
  55. package/dist/fields/instances/ft-field-list.js +56 -0
  56. package/dist/fields/instances/ft-field-list.js.map +1 -0
  57. package/dist/fields/instances/ft-field.js +561 -0
  58. package/dist/fields/instances/ft-field.js.map +1 -0
  59. package/dist/fields/instances/ft-float-field.js +35 -0
  60. package/dist/fields/instances/ft-float-field.js.map +1 -0
  61. package/dist/fields/instances/ft-generic-field.js +173 -0
  62. package/dist/fields/instances/ft-generic-field.js.map +1 -0
  63. package/dist/fields/instances/ft-integer-field.js +35 -0
  64. package/dist/fields/instances/ft-integer-field.js.map +1 -0
  65. package/dist/fields/instances/ft-string-field.js +34 -0
  66. package/dist/fields/instances/ft-string-field.js.map +1 -0
  67. package/dist/index.d.ts +3483 -0
  68. package/dist/index.js +133 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/meta/fields/ft-boolean-meta-field.js +65 -0
  71. package/dist/meta/fields/ft-boolean-meta-field.js.map +1 -0
  72. package/dist/meta/fields/ft-date-time-meta-field.js +55 -0
  73. package/dist/meta/fields/ft-date-time-meta-field.js.map +1 -0
  74. package/dist/meta/fields/ft-decimal-meta-field.js +55 -0
  75. package/dist/meta/fields/ft-decimal-meta-field.js.map +1 -0
  76. package/dist/meta/fields/ft-float-meta-field.js +55 -0
  77. package/dist/meta/fields/ft-float-meta-field.js.map +1 -0
  78. package/dist/meta/fields/ft-generic-meta-field.js +32 -0
  79. package/dist/meta/fields/ft-generic-meta-field.js.map +1 -0
  80. package/dist/meta/fields/ft-integer-meta-field.js +55 -0
  81. package/dist/meta/fields/ft-integer-meta-field.js.map +1 -0
  82. package/dist/meta/fields/ft-meta-field-list.js +183 -0
  83. package/dist/meta/fields/ft-meta-field-list.js.map +1 -0
  84. package/dist/meta/fields/ft-meta-field.js +351 -0
  85. package/dist/meta/fields/ft-meta-field.js.map +1 -0
  86. package/dist/meta/fields/ft-string-meta-field.js +27 -0
  87. package/dist/meta/fields/ft-string-meta-field.js.map +1 -0
  88. package/dist/meta/ft-meta-defaults.js +152 -0
  89. package/dist/meta/ft-meta-defaults.js.map +1 -0
  90. package/dist/meta/ft-meta.js +391 -0
  91. package/dist/meta/ft-meta.js.map +1 -0
  92. package/dist/meta/sequences/core/ft-meta-sequence-item-list.js +82 -0
  93. package/dist/meta/sequences/core/ft-meta-sequence-item-list.js.map +1 -0
  94. package/dist/meta/sequences/core/ft-meta-sequence-item.js +62 -0
  95. package/dist/meta/sequences/core/ft-meta-sequence-item.js.map +1 -0
  96. package/dist/meta/sequences/core/ft-meta-sequence-list.js +164 -0
  97. package/dist/meta/sequences/core/ft-meta-sequence-list.js.map +1 -0
  98. package/dist/meta/sequences/core/ft-meta-sequence.js +96 -0
  99. package/dist/meta/sequences/core/ft-meta-sequence.js.map +1 -0
  100. package/dist/meta/sequences/redirects/ft-boolean-meta-sequence-redirect.js +40 -0
  101. package/dist/meta/sequences/redirects/ft-boolean-meta-sequence-redirect.js.map +1 -0
  102. package/dist/meta/sequences/redirects/ft-case-insensitive-string-meta-sequence-redirect.js +40 -0
  103. package/dist/meta/sequences/redirects/ft-case-insensitive-string-meta-sequence-redirect.js.map +1 -0
  104. package/dist/meta/sequences/redirects/ft-date-meta-sequence-redirect.js +45 -0
  105. package/dist/meta/sequences/redirects/ft-date-meta-sequence-redirect.js.map +1 -0
  106. package/dist/meta/sequences/redirects/ft-exact-date-time-meta-sequence-redirect.js +40 -0
  107. package/dist/meta/sequences/redirects/ft-exact-date-time-meta-sequence-redirect.js.map +1 -0
  108. package/dist/meta/sequences/redirects/ft-exact-decimal-meta-sequence-redirect.js +40 -0
  109. package/dist/meta/sequences/redirects/ft-exact-decimal-meta-sequence-redirect.js.map +1 -0
  110. package/dist/meta/sequences/redirects/ft-exact-float-meta-sequence-redirect.js +40 -0
  111. package/dist/meta/sequences/redirects/ft-exact-float-meta-sequence-redirect.js.map +1 -0
  112. package/dist/meta/sequences/redirects/ft-exact-integer-meta-sequence-redirect.js +40 -0
  113. package/dist/meta/sequences/redirects/ft-exact-integer-meta-sequence-redirect.js.map +1 -0
  114. package/dist/meta/sequences/redirects/ft-exact-string-meta-sequence-redirect.js +40 -0
  115. package/dist/meta/sequences/redirects/ft-exact-string-meta-sequence-redirect.js.map +1 -0
  116. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect-list.js +85 -0
  117. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect-list.js.map +1 -0
  118. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect.js +68 -0
  119. package/dist/meta/sequences/redirects/ft-meta-sequence-redirect.js.map +1 -0
  120. package/dist/meta/sequences/redirects/ft-null-meta-sequence-redirect.js +21 -0
  121. package/dist/meta/sequences/redirects/ft-null-meta-sequence-redirect.js.map +1 -0
  122. package/dist/meta/substitutions/ft-meta-substitution-list.js +51 -0
  123. package/dist/meta/substitutions/ft-meta-substitution-list.js.map +1 -0
  124. package/dist/meta-serialization/format/ft-json-meta-serialization.js +283 -0
  125. package/dist/meta-serialization/format/ft-json-meta-serialization.js.map +1 -0
  126. package/dist/meta-serialization/format/ft-xml-meta-serialization.js +706 -0
  127. package/dist/meta-serialization/format/ft-xml-meta-serialization.js.map +1 -0
  128. package/dist/meta-serialization/format/meta-serializer-options.js +12 -0
  129. package/dist/meta-serialization/format/meta-serializer-options.js.map +1 -0
  130. package/dist/meta-serialization/ft-meta-serialization.js +59 -0
  131. package/dist/meta-serialization/ft-meta-serialization.js.map +1 -0
  132. package/dist/meta-serialization/styles/ft-boolean-styles-meta-serialization.js +83 -0
  133. package/dist/meta-serialization/styles/ft-boolean-styles-meta-serialization.js.map +1 -0
  134. package/dist/meta-serialization/styles/ft-date-time-styles-meta-serialization.js +54 -0
  135. package/dist/meta-serialization/styles/ft-date-time-styles-meta-serialization.js.map +1 -0
  136. package/dist/meta-serialization/styles/ft-number-styles-meta-serialization.js +199 -0
  137. package/dist/meta-serialization/styles/ft-number-styles-meta-serialization.js.map +1 -0
  138. package/dist/meta-serialization/types/boolean-meta-serialization.js +39 -0
  139. package/dist/meta-serialization/types/boolean-meta-serialization.js.map +1 -0
  140. package/dist/meta-serialization/types/char-meta-serialization.js +32 -0
  141. package/dist/meta-serialization/types/char-meta-serialization.js.map +1 -0
  142. package/dist/meta-serialization/types/date-time-meta-serialization.js +227 -0
  143. package/dist/meta-serialization/types/date-time-meta-serialization.js.map +1 -0
  144. package/dist/meta-serialization/types/decimal-meta-serialization.js +12 -0
  145. package/dist/meta-serialization/types/decimal-meta-serialization.js.map +1 -0
  146. package/dist/meta-serialization/types/enums/data-type-meta-serialisation.js +55 -0
  147. package/dist/meta-serialization/types/enums/data-type-meta-serialisation.js.map +1 -0
  148. package/dist/meta-serialization/types/enums/end-of-line-auto-write-type-meta-serialization.js +50 -0
  149. package/dist/meta-serialization/types/enums/end-of-line-auto-write-type-meta-serialization.js.map +1 -0
  150. package/dist/meta-serialization/types/enums/end-of-line-type-meta-serialization.js +49 -0
  151. package/dist/meta-serialization/types/enums/end-of-line-type-meta-serialization.js.map +1 -0
  152. package/dist/meta-serialization/types/enums/heading-constraint-meta-serialization.js +55 -0
  153. package/dist/meta-serialization/types/enums/heading-constraint-meta-serialization.js.map +1 -0
  154. package/dist/meta-serialization/types/enums/last-line-ended-type-meta-serialization.js +48 -0
  155. package/dist/meta-serialization/types/enums/last-line-ended-type-meta-serialization.js.map +1 -0
  156. package/dist/meta-serialization/types/enums/pad-alignment-meta-serialization.js +52 -0
  157. package/dist/meta-serialization/types/enums/pad-alignment-meta-serialization.js.map +1 -0
  158. package/dist/meta-serialization/types/enums/pad-char-type-meta-serialization.js +52 -0
  159. package/dist/meta-serialization/types/enums/pad-char-type-meta-serialization.js.map +1 -0
  160. package/dist/meta-serialization/types/enums/quoted-type-meta-serialization.js +52 -0
  161. package/dist/meta-serialization/types/enums/quoted-type-meta-serialization.js.map +1 -0
  162. package/dist/meta-serialization/types/enums/sequence-invokation-delay-meta-serialization.js +47 -0
  163. package/dist/meta-serialization/types/enums/sequence-invokation-delay-meta-serialization.js.map +1 -0
  164. package/dist/meta-serialization/types/enums/sequence-redirect-type-meta-serialisation.js +88 -0
  165. package/dist/meta-serialization/types/enums/sequence-redirect-type-meta-serialisation.js.map +1 -0
  166. package/dist/meta-serialization/types/enums/substitution-type-meta-serialization.js +47 -0
  167. package/dist/meta-serialization/types/enums/substitution-type-meta-serialization.js.map +1 -0
  168. package/dist/meta-serialization/types/enums/truncate-type-meta-serialization.js +56 -0
  169. package/dist/meta-serialization/types/enums/truncate-type-meta-serialization.js.map +1 -0
  170. package/dist/meta-serialization/types/float-meta-serialization.js +99 -0
  171. package/dist/meta-serialization/types/float-meta-serialization.js.map +1 -0
  172. package/dist/meta-serialization/types/integer-float-meta-serialization.js +52 -0
  173. package/dist/meta-serialization/types/integer-float-meta-serialization.js.map +1 -0
  174. package/dist/meta-serialization/types/integer-meta-serialization.js +50 -0
  175. package/dist/meta-serialization/types/integer-meta-serialization.js.map +1 -0
  176. package/dist/meta-serialization/types/string-meta-serialization.js +35 -0
  177. package/dist/meta-serialization/types/string-meta-serialization.js.map +1 -0
  178. package/dist/meta-serialization/utils/implicit-explicit-index-sorter.js +57 -0
  179. package/dist/meta-serialization/utils/implicit-explicit-index-sorter.js.map +1 -0
  180. package/dist/meta-serialization/utils/meta-serialization-redirect-sequence-resolver.js +33 -0
  181. package/dist/meta-serialization/utils/meta-serialization-redirect-sequence-resolver.js.map +1 -0
  182. package/dist/meta-serialization/utils/meta-serialization-sequence-name-resolver.js +67 -0
  183. package/dist/meta-serialization/utils/meta-serialization-sequence-name-resolver.js.map +1 -0
  184. package/dist/meta-serialization/utils/sequence-item-field-indices.js +70 -0
  185. package/dist/meta-serialization/utils/sequence-item-field-indices.js.map +1 -0
  186. package/dist/sequences/core/ft-sequence-invokation-list.js +91 -0
  187. package/dist/sequences/core/ft-sequence-invokation-list.js.map +1 -0
  188. package/dist/sequences/core/ft-sequence-invokation.js +143 -0
  189. package/dist/sequences/core/ft-sequence-invokation.js.map +1 -0
  190. package/dist/sequences/core/ft-sequence-item-list.js +34 -0
  191. package/dist/sequences/core/ft-sequence-item-list.js.map +1 -0
  192. package/dist/sequences/core/ft-sequence-item.js +46 -0
  193. package/dist/sequences/core/ft-sequence-item.js.map +1 -0
  194. package/dist/sequences/core/ft-sequence-list.js +62 -0
  195. package/dist/sequences/core/ft-sequence-list.js.map +1 -0
  196. package/dist/sequences/core/ft-sequence.js +59 -0
  197. package/dist/sequences/core/ft-sequence.js.map +1 -0
  198. package/dist/sequences/redirects/ft-boolean-sequence-redirect.js +33 -0
  199. package/dist/sequences/redirects/ft-boolean-sequence-redirect.js.map +1 -0
  200. package/dist/sequences/redirects/ft-case-insensitive-string-sequence-redirect.js +33 -0
  201. package/dist/sequences/redirects/ft-case-insensitive-string-sequence-redirect.js.map +1 -0
  202. package/dist/sequences/redirects/ft-date-sequence-redirect.js +37 -0
  203. package/dist/sequences/redirects/ft-date-sequence-redirect.js.map +1 -0
  204. package/dist/sequences/redirects/ft-exact-date-time-sequence-redirect.js +33 -0
  205. package/dist/sequences/redirects/ft-exact-date-time-sequence-redirect.js.map +1 -0
  206. package/dist/sequences/redirects/ft-exact-decimal-sequence-redirect.js +33 -0
  207. package/dist/sequences/redirects/ft-exact-decimal-sequence-redirect.js.map +1 -0
  208. package/dist/sequences/redirects/ft-exact-float-sequence-redirect.js +33 -0
  209. package/dist/sequences/redirects/ft-exact-float-sequence-redirect.js.map +1 -0
  210. package/dist/sequences/redirects/ft-exact-integer-sequence-redirect.js +33 -0
  211. package/dist/sequences/redirects/ft-exact-integer-sequence-redirect.js.map +1 -0
  212. package/dist/sequences/redirects/ft-exact-string-sequence-redirect.js +33 -0
  213. package/dist/sequences/redirects/ft-exact-string-sequence-redirect.js.map +1 -0
  214. package/dist/sequences/redirects/ft-null-sequence-redirect.js +20 -0
  215. package/dist/sequences/redirects/ft-null-sequence-redirect.js.map +1 -0
  216. package/dist/sequences/redirects/ft-sequence-redirect-list.js +35 -0
  217. package/dist/sequences/redirects/ft-sequence-redirect-list.js.map +1 -0
  218. package/dist/sequences/redirects/ft-sequence-redirect.js +47 -0
  219. package/dist/sequences/redirects/ft-sequence-redirect.js.map +1 -0
  220. package/dist/serialization/char-reader.js +178 -0
  221. package/dist/serialization/char-reader.js.map +1 -0
  222. package/dist/serialization/declaration-parser.js +176 -0
  223. package/dist/serialization/declaration-parser.js.map +1 -0
  224. package/dist/serialization/delimited-field-parser.js +278 -0
  225. package/dist/serialization/delimited-field-parser.js.map +1 -0
  226. package/dist/serialization/embedded-meta-parser.js +129 -0
  227. package/dist/serialization/embedded-meta-parser.js.map +1 -0
  228. package/dist/serialization/fixed-width-field-parser.js +196 -0
  229. package/dist/serialization/fixed-width-field-parser.js.map +1 -0
  230. package/dist/serialization/formatting/ft-boolean-field-formatter.js +113 -0
  231. package/dist/serialization/formatting/ft-boolean-field-formatter.js.map +1 -0
  232. package/dist/serialization/formatting/ft-date-time-field-formatter.js +54 -0
  233. package/dist/serialization/formatting/ft-date-time-field-formatter.js.map +1 -0
  234. package/dist/serialization/formatting/ft-decimal-field-formatter.js +46 -0
  235. package/dist/serialization/formatting/ft-decimal-field-formatter.js.map +1 -0
  236. package/dist/serialization/formatting/ft-declared-parameters-formatter.js +52 -0
  237. package/dist/serialization/formatting/ft-declared-parameters-formatter.js.map +1 -0
  238. package/dist/serialization/formatting/ft-field-formatter.js +15 -0
  239. package/dist/serialization/formatting/ft-field-formatter.js.map +1 -0
  240. package/dist/serialization/formatting/ft-float-field-formatter.js +46 -0
  241. package/dist/serialization/formatting/ft-float-field-formatter.js.map +1 -0
  242. package/dist/serialization/formatting/ft-integer-field-formatter.js +47 -0
  243. package/dist/serialization/formatting/ft-integer-field-formatter.js.map +1 -0
  244. package/dist/serialization/formatting/ft-string-field-formatter.js +14 -0
  245. package/dist/serialization/formatting/ft-string-field-formatter.js.map +1 -0
  246. package/dist/serialization/ft-declared-parameters.js +199 -0
  247. package/dist/serialization/ft-declared-parameters.js.map +1 -0
  248. package/dist/serialization/ft-serialization-reader.js +865 -0
  249. package/dist/serialization/ft-serialization-reader.js.map +1 -0
  250. package/dist/serialization/ft-serialization-writer.js +633 -0
  251. package/dist/serialization/ft-serialization-writer.js.map +1 -0
  252. package/dist/serialization/ft-text-reader.js +48 -0
  253. package/dist/serialization/ft-text-reader.js.map +1 -0
  254. package/dist/serialization/ft-text-writer.js +46 -0
  255. package/dist/serialization/ft-text-writer.js.map +1 -0
  256. package/dist/serialization/heading-line-record-parser.js +253 -0
  257. package/dist/serialization/heading-line-record-parser.js.map +1 -0
  258. package/dist/serialization/line-parser.js +205 -0
  259. package/dist/serialization/line-parser.js.map +1 -0
  260. package/dist/serialization/serialization-core.js +551 -0
  261. package/dist/serialization/serialization-core.js.map +1 -0
  262. package/dist/substitutions/ft-substitution-list.js +54 -0
  263. package/dist/substitutions/ft-substitution-list.js.map +1 -0
  264. package/dist/tsdoc-metadata.json +11 -0
  265. package/dist/types/enums/ft-boolean-styles.js +12 -0
  266. package/dist/types/enums/ft-boolean-styles.js.map +1 -0
  267. package/dist/types/enums/ft-data-type.js +12 -0
  268. package/dist/types/enums/ft-data-type.js.map +1 -0
  269. package/dist/types/enums/ft-end-of-line-auto-write-type.js +10 -0
  270. package/dist/types/enums/ft-end-of-line-auto-write-type.js.map +1 -0
  271. package/dist/types/enums/ft-end-of-line-type.js +9 -0
  272. package/dist/types/enums/ft-end-of-line-type.js.map +1 -0
  273. package/dist/types/enums/ft-heading-constraint.js +11 -0
  274. package/dist/types/enums/ft-heading-constraint.js.map +1 -0
  275. package/dist/types/enums/ft-last-line-ended-type.js +9 -0
  276. package/dist/types/enums/ft-last-line-ended-type.js.map +1 -0
  277. package/dist/types/enums/ft-line-type.js +13 -0
  278. package/dist/types/enums/ft-line-type.js.map +1 -0
  279. package/dist/types/enums/ft-meta-element-type.js +12 -0
  280. package/dist/types/enums/ft-meta-element-type.js.map +1 -0
  281. package/dist/types/enums/ft-meta-reference-type.js +10 -0
  282. package/dist/types/enums/ft-meta-reference-type.js.map +1 -0
  283. package/dist/types/enums/ft-meta-serialization-format.js +15 -0
  284. package/dist/types/enums/ft-meta-serialization-format.js.map +1 -0
  285. package/dist/types/enums/ft-pad-alignment.js +9 -0
  286. package/dist/types/enums/ft-pad-alignment.js.map +1 -0
  287. package/dist/types/enums/ft-pad-char-type.js +9 -0
  288. package/dist/types/enums/ft-pad-char-type.js.map +1 -0
  289. package/dist/types/enums/ft-quoted-type.js +9 -0
  290. package/dist/types/enums/ft-quoted-type.js.map +1 -0
  291. package/dist/types/enums/ft-read-record-result.js +9 -0
  292. package/dist/types/enums/ft-read-record-result.js.map +1 -0
  293. package/dist/types/enums/ft-sequence-invokation-delay.js +8 -0
  294. package/dist/types/enums/ft-sequence-invokation-delay.js.map +1 -0
  295. package/dist/types/enums/ft-sequence-redirect-type.js +15 -0
  296. package/dist/types/enums/ft-sequence-redirect-type.js.map +1 -0
  297. package/dist/types/enums/ft-substitution-type.js +12 -0
  298. package/dist/types/enums/ft-substitution-type.js.map +1 -0
  299. package/dist/types/enums/ft-truncate-type.js +11 -0
  300. package/dist/types/enums/ft-truncate-type.js.map +1 -0
  301. package/dist/types/errors/ft-internal-error.js +14 -0
  302. package/dist/types/errors/ft-internal-error.js.map +1 -0
  303. package/dist/types/errors/ft-serialization-error.js +49 -0
  304. package/dist/types/errors/ft-serialization-error.js.map +1 -0
  305. package/dist/types/errors/ft-serialization-exception.js +78 -0
  306. package/dist/types/errors/ft-serialization-exception.js.map +1 -0
  307. package/dist/types/events/ft-field-heading-ready-event-args.js +2 -0
  308. package/dist/types/events/ft-field-heading-ready-event-args.js.map +1 -0
  309. package/dist/types/events/ft-field-value-ready-event-args.js +2 -0
  310. package/dist/types/events/ft-field-value-ready-event-args.js.map +1 -0
  311. package/dist/types/events/ft-heading-line-finished-event-args.js +2 -0
  312. package/dist/types/events/ft-heading-line-finished-event-args.js.map +1 -0
  313. package/dist/types/events/ft-heading-line-started-event-args.js +2 -0
  314. package/dist/types/events/ft-heading-line-started-event-args.js.map +1 -0
  315. package/dist/types/events/ft-record-finished-event-args.js +2 -0
  316. package/dist/types/events/ft-record-finished-event-args.js.map +1 -0
  317. package/dist/types/events/ft-record-started-event-args.js +2 -0
  318. package/dist/types/events/ft-record-started-event-args.js.map +1 -0
  319. package/dist/types/events/ft-sequence-redirected-event-args.js +2 -0
  320. package/dist/types/events/ft-sequence-redirected-event-args.js.map +1 -0
  321. package/package.json +84 -0
  322. package/src/api/ft-reader.ts +106 -0
  323. package/src/api/ft-serialization.ts +216 -0
  324. package/src/api/ft-writer-settings.ts +76 -0
  325. package/src/api/ft-writer.ts +26 -0
  326. package/src/factory/ft-field-factory.ts +94 -0
  327. package/src/factory/ft-meta-constructor.ts +16 -0
  328. package/src/factory/ft-meta-factory.ts +34 -0
  329. package/src/factory/ft-sequence-constructor.ts +11 -0
  330. package/src/factory/ft-sequence-factory.ts +22 -0
  331. package/src/factory/ft-sequence-item-constructor.ts +11 -0
  332. package/src/factory/ft-sequence-item-factory.ts +22 -0
  333. package/src/factory/ft-sequence-redirect-constructor.ts +19 -0
  334. package/src/factory/ft-sequence-redirect-factory.ts +197 -0
  335. package/src/factory/ft-substitution-constructor.ts +24 -0
  336. package/src/factory/ft-substitution-factory.ts +43 -0
  337. package/src/fields/definitions/ft-boolean-field-definition.ts +49 -0
  338. package/src/fields/definitions/ft-date-time-field-definition.ts +52 -0
  339. package/src/fields/definitions/ft-decimal-field-definition.ts +43 -0
  340. package/src/fields/definitions/ft-field-definition-list.ts +33 -0
  341. package/src/fields/definitions/ft-field-definition.ts +276 -0
  342. package/src/fields/definitions/ft-float-field-definition.ts +43 -0
  343. package/src/fields/definitions/ft-generic-field-definition.ts +49 -0
  344. package/src/fields/definitions/ft-integer-field-definition.ts +44 -0
  345. package/src/fields/definitions/ft-string-field-definition.ts +26 -0
  346. package/src/fields/instances/ft-boolean-field.ts +49 -0
  347. package/src/fields/instances/ft-date-time-field.ts +44 -0
  348. package/src/fields/instances/ft-decimal-field.ts +44 -0
  349. package/src/fields/instances/ft-field-list.ts +68 -0
  350. package/src/fields/instances/ft-field.ts +691 -0
  351. package/src/fields/instances/ft-float-field.ts +44 -0
  352. package/src/fields/instances/ft-generic-field.ts +219 -0
  353. package/src/fields/instances/ft-integer-field.ts +44 -0
  354. package/src/fields/instances/ft-string-field.ts +40 -0
  355. package/src/index.ts +185 -0
  356. package/src/meta/fields/ft-boolean-meta-field.ts +79 -0
  357. package/src/meta/fields/ft-date-time-meta-field.ts +68 -0
  358. package/src/meta/fields/ft-decimal-meta-field.ts +68 -0
  359. package/src/meta/fields/ft-float-meta-field.ts +68 -0
  360. package/src/meta/fields/ft-generic-meta-field.ts +38 -0
  361. package/src/meta/fields/ft-integer-meta-field.ts +68 -0
  362. package/src/meta/fields/ft-meta-field-list.ts +208 -0
  363. package/src/meta/fields/ft-meta-field.ts +399 -0
  364. package/src/meta/fields/ft-string-meta-field.ts +34 -0
  365. package/src/meta/ft-meta-defaults.ts +151 -0
  366. package/src/meta/ft-meta.ts +453 -0
  367. package/src/meta/sequences/core/ft-meta-sequence-item-list.ts +97 -0
  368. package/src/meta/sequences/core/ft-meta-sequence-item.ts +78 -0
  369. package/src/meta/sequences/core/ft-meta-sequence-list.ts +203 -0
  370. package/src/meta/sequences/core/ft-meta-sequence.ts +127 -0
  371. package/src/meta/sequences/redirects/ft-boolean-meta-sequence-redirect.ts +49 -0
  372. package/src/meta/sequences/redirects/ft-case-insensitive-string-meta-sequence-redirect.ts +49 -0
  373. package/src/meta/sequences/redirects/ft-date-meta-sequence-redirect.ts +54 -0
  374. package/src/meta/sequences/redirects/ft-exact-date-time-meta-sequence-redirect.ts +49 -0
  375. package/src/meta/sequences/redirects/ft-exact-decimal-meta-sequence-redirect.ts +49 -0
  376. package/src/meta/sequences/redirects/ft-exact-float-meta-sequence-redirect.ts +49 -0
  377. package/src/meta/sequences/redirects/ft-exact-integer-meta-sequence-redirect.ts +49 -0
  378. package/src/meta/sequences/redirects/ft-exact-string-meta-sequence-redirect.ts +49 -0
  379. package/src/meta/sequences/redirects/ft-meta-sequence-redirect-list.ts +99 -0
  380. package/src/meta/sequences/redirects/ft-meta-sequence-redirect.ts +89 -0
  381. package/src/meta/sequences/redirects/ft-null-meta-sequence-redirect.ts +25 -0
  382. package/src/meta/substitutions/ft-meta-substitution-list.ts +54 -0
  383. package/src/meta-serialization/format/ft-json-meta-serialization.ts +288 -0
  384. package/src/meta-serialization/format/ft-xml-meta-serialization.ts +885 -0
  385. package/src/meta-serialization/format/meta-serializer-options.ts +21 -0
  386. package/src/meta-serialization/ft-meta-serialization.ts +60 -0
  387. package/src/meta-serialization/styles/ft-boolean-styles-meta-serialization.ts +88 -0
  388. package/src/meta-serialization/styles/ft-date-time-styles-meta-serialization.ts +50 -0
  389. package/src/meta-serialization/styles/ft-number-styles-meta-serialization.ts +212 -0
  390. package/src/meta-serialization/types/boolean-meta-serialization.ts +36 -0
  391. package/src/meta-serialization/types/char-meta-serialization.ts +28 -0
  392. package/src/meta-serialization/types/date-time-meta-serialization.ts +220 -0
  393. package/src/meta-serialization/types/decimal-meta-serialization.ts +13 -0
  394. package/src/meta-serialization/types/enums/data-type-meta-serialisation.ts +52 -0
  395. package/src/meta-serialization/types/enums/end-of-line-auto-write-type-meta-serialization.ts +47 -0
  396. package/src/meta-serialization/types/enums/end-of-line-type-meta-serialization.ts +46 -0
  397. package/src/meta-serialization/types/enums/heading-constraint-meta-serialization.ts +52 -0
  398. package/src/meta-serialization/types/enums/last-line-ended-type-meta-serialization.ts +45 -0
  399. package/src/meta-serialization/types/enums/meta-element-type-meta-serialization.ts +36 -0
  400. package/src/meta-serialization/types/enums/pad-alignment-meta-serialization.ts +54 -0
  401. package/src/meta-serialization/types/enums/pad-char-type-meta-serialization.ts +54 -0
  402. package/src/meta-serialization/types/enums/quoted-type-meta-serialization.ts +54 -0
  403. package/src/meta-serialization/types/enums/sequence-invokation-delay-meta-serialization.ts +44 -0
  404. package/src/meta-serialization/types/enums/sequence-redirect-type-meta-serialisation.ts +86 -0
  405. package/src/meta-serialization/types/enums/substitution-type-meta-serialization.ts +44 -0
  406. package/src/meta-serialization/types/enums/truncate-type-meta-serialization.ts +58 -0
  407. package/src/meta-serialization/types/float-meta-serialization.ts +96 -0
  408. package/src/meta-serialization/types/integer-float-meta-serialization.ts +46 -0
  409. package/src/meta-serialization/types/integer-meta-serialization.ts +44 -0
  410. package/src/meta-serialization/types/string-meta-serialization.ts +32 -0
  411. package/src/meta-serialization/utils/implicit-explicit-index-sorter.ts +61 -0
  412. package/src/meta-serialization/utils/meta-serialization-redirect-sequence-resolver.ts +43 -0
  413. package/src/meta-serialization/utils/meta-serialization-sequence-name-resolver.ts +85 -0
  414. package/src/meta-serialization/utils/sequence-item-field-indices.ts +76 -0
  415. package/src/sequences/core/ft-sequence-invokation-list.ts +109 -0
  416. package/src/sequences/core/ft-sequence-invokation.ts +166 -0
  417. package/src/sequences/core/ft-sequence-item-list.ts +40 -0
  418. package/src/sequences/core/ft-sequence-item.ts +59 -0
  419. package/src/sequences/core/ft-sequence-list.ts +73 -0
  420. package/src/sequences/core/ft-sequence.ts +75 -0
  421. package/src/sequences/redirects/ft-boolean-sequence-redirect.ts +42 -0
  422. package/src/sequences/redirects/ft-case-insensitive-string-sequence-redirect.ts +46 -0
  423. package/src/sequences/redirects/ft-date-sequence-redirect.ts +48 -0
  424. package/src/sequences/redirects/ft-exact-date-time-sequence-redirect.ts +46 -0
  425. package/src/sequences/redirects/ft-exact-decimal-sequence-redirect.ts +46 -0
  426. package/src/sequences/redirects/ft-exact-float-sequence-redirect.ts +46 -0
  427. package/src/sequences/redirects/ft-exact-integer-sequence-redirect.ts +46 -0
  428. package/src/sequences/redirects/ft-exact-string-sequence-redirect.ts +46 -0
  429. package/src/sequences/redirects/ft-null-sequence-redirect.ts +27 -0
  430. package/src/sequences/redirects/ft-sequence-redirect-list.ts +42 -0
  431. package/src/sequences/redirects/ft-sequence-redirect.ts +68 -0
  432. package/src/serialization/char-reader.ts +203 -0
  433. package/src/serialization/declaration-parser.ts +203 -0
  434. package/src/serialization/delimited-field-parser.ts +296 -0
  435. package/src/serialization/embedded-meta-parser.ts +147 -0
  436. package/src/serialization/fixed-width-field-parser.ts +220 -0
  437. package/src/serialization/formatting/ft-boolean-field-formatter.ts +114 -0
  438. package/src/serialization/formatting/ft-date-time-field-formatter.ts +61 -0
  439. package/src/serialization/formatting/ft-decimal-field-formatter.ts +52 -0
  440. package/src/serialization/formatting/ft-declared-parameters-formatter.ts +60 -0
  441. package/src/serialization/formatting/ft-field-formatter.ts +18 -0
  442. package/src/serialization/formatting/ft-float-field-formatter.ts +52 -0
  443. package/src/serialization/formatting/ft-integer-field-formatter.ts +53 -0
  444. package/src/serialization/formatting/ft-string-field-formatter.ts +15 -0
  445. package/src/serialization/formatting/index.ts +7 -0
  446. package/src/serialization/ft-declared-parameters.ts +232 -0
  447. package/src/serialization/ft-serialization-reader.ts +953 -0
  448. package/src/serialization/ft-serialization-writer.ts +760 -0
  449. package/src/serialization/ft-text-reader.ts +64 -0
  450. package/src/serialization/ft-text-writer.ts +61 -0
  451. package/src/serialization/heading-line-record-parser.ts +285 -0
  452. package/src/serialization/line-parser.ts +231 -0
  453. package/src/serialization/serialization-core.ts +632 -0
  454. package/src/substitutions/ft-substitution-list.ts +60 -0
  455. package/src/types/enums/ft-boolean-styles.ts +17 -0
  456. package/src/types/enums/ft-data-type.ts +21 -0
  457. package/src/types/enums/ft-end-of-line-auto-write-type.ts +14 -0
  458. package/src/types/enums/ft-end-of-line-type.ts +13 -0
  459. package/src/types/enums/ft-heading-constraint.ts +15 -0
  460. package/src/types/enums/ft-last-line-ended-type.ts +13 -0
  461. package/src/types/enums/ft-line-type.ts +17 -0
  462. package/src/types/enums/ft-meta-element-type.ts +16 -0
  463. package/src/types/enums/ft-meta-reference-type.ts +14 -0
  464. package/src/types/enums/ft-meta-serialization-format.ts +19 -0
  465. package/src/types/enums/ft-pad-alignment.ts +13 -0
  466. package/src/types/enums/ft-pad-char-type.ts +13 -0
  467. package/src/types/enums/ft-quoted-type.ts +13 -0
  468. package/src/types/enums/ft-read-record-result.ts +13 -0
  469. package/src/types/enums/ft-sequence-invokation-delay.ts +12 -0
  470. package/src/types/enums/ft-sequence-redirect-type.ts +19 -0
  471. package/src/types/enums/ft-substitution-type.ts +16 -0
  472. package/src/types/enums/ft-truncate-type.ts +15 -0
  473. package/src/types/errors/ft-internal-error.ts +15 -0
  474. package/src/types/errors/ft-serialization-error.ts +53 -0
  475. package/src/types/errors/ft-serialization-exception.ts +86 -0
  476. package/src/types/events/ft-field-heading-ready-event-args.ts +9 -0
  477. package/src/types/events/ft-field-value-ready-event-args.ts +9 -0
  478. package/src/types/events/ft-heading-line-finished-event-args.ts +6 -0
  479. package/src/types/events/ft-heading-line-started-event-args.ts +6 -0
  480. package/src/types/events/ft-record-finished-event-args.ts +6 -0
  481. package/src/types/events/ft-record-started-event-args.ts +6 -0
  482. package/src/types/events/ft-sequence-redirected-event-args.ts +9 -0
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Options for serialization formatting.
3
+ * @public
4
+ */
5
+ export interface FtMetaSerializerOptions {
6
+ explicitIndices?: boolean; // Whether to include explicit index attributes for fields.
7
+ indent?: boolean;
8
+ indentChars?: string;
9
+ newLineOnAttributes?: boolean;
10
+ }
11
+
12
+ /**
13
+ * Default values for meta serialization formatting.
14
+ * @public
15
+ */
16
+ export namespace FtMetaSerializerOptions {
17
+ export const DEFAULT_EXPLICIT_INDICES = false;
18
+ export const DEFAULT_INDENT = true;
19
+ export const DEFAULT_INDENT_CHARS = ' ';
20
+ export const DEFAULT_NEW_LINE_ON_ATTRIBUTES = false;
21
+ }
@@ -0,0 +1,60 @@
1
+ import { FtMeta } from '../meta/ft-meta.js';
2
+ import { FtMetaSerializationFormat } from '../types/enums/ft-meta-serialization-format.js';
3
+ import { FtJsonMetaSerialization } from './format/ft-json-meta-serialization.js';
4
+ import { FtXmlMetaSerialization } from './format/ft-xml-meta-serialization.js';
5
+ import { FtMetaSerializerOptions } from './format/meta-serializer-options.js';
6
+
7
+ /**
8
+ * API for serializing and deserializing FtMeta objects.
9
+ * Provides a unified interface for both XML and JSON formats.
10
+ * @public
11
+ */
12
+ export class FtMetaSerialization {
13
+ /**
14
+ * Deserialize an FtMeta object from a string.
15
+ * @param content - The serialized meta content (XML or JSON)
16
+ * @param format - The format of the content (default: auto-detect)
17
+ * @param warnings - Optional array to collect warnings during deserialization
18
+ * @returns The deserialized FtMeta object
19
+ */
20
+ deserialize(content: string, warnings?: string[], format?: FtMetaSerializationFormat): FtMeta {
21
+ if (format === FtMetaSerializationFormat.JSON) {
22
+ const jsonDeserializer = new FtJsonMetaSerialization();
23
+ return jsonDeserializer.deserialize(content);
24
+ } else {
25
+ // XML deserialization
26
+ const xmlDeserializer = new FtXmlMetaSerialization();
27
+ return xmlDeserializer.deserialize(content, warnings);
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Serialize an FtMeta object to a string.
33
+ * @param meta - The FtMeta object to serialize
34
+ * @param format - The output format (default: XML)
35
+ * @returns The serialized string
36
+ */
37
+ serialize(meta: FtMeta, options?: FtMetaSerializerOptions, format?: FtMetaSerializationFormat): string {
38
+ if (format === FtMetaSerializationFormat.JSON) {
39
+ const jsonSerializer = new FtJsonMetaSerialization();
40
+ return jsonSerializer.serialize(meta);
41
+ } else {
42
+ // XML serialization
43
+ const xmlSerializer = new FtXmlMetaSerialization();
44
+ return xmlSerializer.serialize(meta, options);
45
+ }
46
+ }
47
+ }
48
+
49
+ /** @public */
50
+ export namespace FtMetaSerialization {
51
+ export function serialize(meta: FtMeta, options?: FtMetaSerializerOptions, format?: FtMetaSerializationFormat): string {
52
+ const serialization = new FtMetaSerialization();
53
+ return serialization.serialize(meta, options, format);
54
+ }
55
+
56
+ export function deserialize(content: string, warnings?: string[], format?: FtMetaSerializationFormat): FtMeta {
57
+ const serialization = new FtMetaSerialization();
58
+ return serialization.deserialize(content, warnings, format);
59
+ }
60
+ }
@@ -0,0 +1,88 @@
1
+ import { FtBooleanMetaField } from '../../meta/fields/ft-boolean-meta-field.js';
2
+ import { FtBooleanStyles, noneBooleanStyles } from '../../types/enums/ft-boolean-styles.js';
3
+
4
+ /** @public */
5
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
6
+ export class FtBooleanStylesMetaSerialization {
7
+ static serialize(styles: FtBooleanStyles): string | undefined {
8
+ if (styles === FtBooleanMetaField.DEFAULT_STYLES) {
9
+ return undefined;
10
+ } else {
11
+ const result = new Array<string>(booleanStylesMetaInfoCount);
12
+ let count = 0;
13
+ for (const metaInfo of booleanStylesMetaInfoArray) {
14
+ if ((styles & metaInfo.styles) === metaInfo.styles) {
15
+ result[count++] = metaInfo.metaValue;
16
+ }
17
+ }
18
+ result.length = count;
19
+ return result.join(',');
20
+ }
21
+ }
22
+
23
+ static deserialize(value: unknown, warnings: string[]): FtBooleanStyles {
24
+ if (value === undefined) {
25
+ return FtBooleanMetaField.DEFAULT_STYLES;
26
+ } else {
27
+ if (typeof value !== 'string') {
28
+ warnings.push(`Boolean styles: Type: ${typeof value}`);
29
+ return FtBooleanMetaField.DEFAULT_STYLES;
30
+ } else {
31
+ const trimmedValue = value.trim();
32
+ if (trimmedValue.length === 0) {
33
+ return noneBooleanStyles;
34
+ } else {
35
+ let result: FtBooleanStyles = noneBooleanStyles;
36
+ const lowerCasedValue = trimmedValue.toLowerCase();
37
+ const styleStringArray = lowerCasedValue.split(',').map((s) => s.trim());
38
+ for (const styleString of styleStringArray) {
39
+ for (const metaInfo of booleanStylesMetaInfoArray) {
40
+ if (styleString === metaInfo.lowerCaseMetaValue) {
41
+ result |= metaInfo.styles;
42
+ } else {
43
+ warnings.push(`Unknown boolean style: '${styleString}'`);
44
+ }
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ interface BooleanStylesMetaInfo {
55
+ styles: FtBooleanStyles;
56
+ metaValue: string;
57
+ lowerCaseMetaValue: string;
58
+ }
59
+
60
+ const ignoreCaseMetaValue = 'IgnoreCase';
61
+ const matchFirstCharOnlyMetaValue = 'MatchFirstCharOnly';
62
+ const ignoreTrailingCharsMetaValue = 'IgnoreTrailingChars';
63
+ const falseIfNotMatchTrueMetaValue = 'FalseIfNotMatchTrue';
64
+
65
+ const booleanStylesMetaInfoArray: BooleanStylesMetaInfo[] = [
66
+ {
67
+ styles: FtBooleanStyles.IgnoreCase,
68
+ metaValue: ignoreCaseMetaValue,
69
+ lowerCaseMetaValue: ignoreCaseMetaValue.toLowerCase(),
70
+ },
71
+ {
72
+ styles: FtBooleanStyles.MatchFirstCharOnly,
73
+ metaValue: matchFirstCharOnlyMetaValue,
74
+ lowerCaseMetaValue: matchFirstCharOnlyMetaValue.toLowerCase(),
75
+ },
76
+ {
77
+ styles: FtBooleanStyles.IgnoreTrailingChars,
78
+ metaValue: ignoreTrailingCharsMetaValue,
79
+ lowerCaseMetaValue: ignoreTrailingCharsMetaValue.toLowerCase(),
80
+ },
81
+ {
82
+ styles: FtBooleanStyles.FalseIfNotMatchTrue,
83
+ metaValue: falseIfNotMatchTrueMetaValue,
84
+ lowerCaseMetaValue: falseIfNotMatchTrueMetaValue.toLowerCase(),
85
+ },
86
+ ];
87
+
88
+ const booleanStylesMetaInfoCount = booleanStylesMetaInfoArray.length;
@@ -0,0 +1,50 @@
1
+ import { DotNetDateTimeStyles } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtMetaDefaults } from '../../meta/ft-meta-defaults.js';
3
+
4
+ /** @public */
5
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
6
+ export class FtDateTimeStylesMetaSerialization {
7
+ static allowInnerWhiteMetaValue = 'AllowInnerWhite';
8
+ static allowWhiteSpacesMetaValue = 'AllowWhiteSpaces'; // Not part of standard but supported as includes AllowInnerWhite in Dot Net.
9
+ static lowerCaseAllowInnerWhiteMetaValue = FtDateTimeStylesMetaSerialization.allowInnerWhiteMetaValue.toLowerCase();
10
+ static lowerCaseAllowWhiteSpacesMetaValue = FtDateTimeStylesMetaSerialization.allowWhiteSpacesMetaValue.toLowerCase();
11
+
12
+ static serialize(styles: DotNetDateTimeStyles): string | undefined {
13
+ if (styles === FtMetaDefaults.DateTimeField.Styles) {
14
+ return undefined;
15
+ } else {
16
+ if ((styles & DotNetDateTimeStyles.allowInnerWhite) === DotNetDateTimeStyles.allowInnerWhite) {
17
+ return this.allowInnerWhiteMetaValue;
18
+ } else {
19
+ return undefined;
20
+ }
21
+ }
22
+ }
23
+
24
+ static deserialize(value: unknown, warnings: string[]): DotNetDateTimeStyles {
25
+ if (value === undefined) {
26
+ return FtMetaDefaults.DateTimeField.Styles;
27
+ } else {
28
+ if (typeof value !== 'string') {
29
+ warnings.push(`DateTime styles: Type: ${typeof value}`);
30
+ return FtMetaDefaults.DateTimeField.Styles;
31
+ } else {
32
+ const trimmedValue = value.trim();
33
+ if (trimmedValue.length === 0) {
34
+ return DotNetDateTimeStyles.none;
35
+ } else {
36
+ const lowerCasedValue = trimmedValue.toLowerCase();
37
+ const styleStringArray = lowerCasedValue.split(',').map((s) => s.trim());
38
+ for (const styleString of styleStringArray) {
39
+ if (styleString === this.lowerCaseAllowInnerWhiteMetaValue || styleString === this.lowerCaseAllowWhiteSpacesMetaValue) {
40
+ return DotNetDateTimeStyles.allowInnerWhite;
41
+ } else {
42
+ warnings.push(`Unrecognized date/time style: ${styleString}`);
43
+ }
44
+ }
45
+ return DotNetDateTimeStyles.none;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,212 @@
1
+ import { DotNetNumberStyles } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtMetaDefaults } from '../../meta/ft-meta-defaults.js';
3
+ import { FtDataType, FtNumberDataType } from '../../types/enums/ft-data-type.js';
4
+ import { FtUnreachableCaseError } from '../../types/errors/ft-internal-error.js';
5
+
6
+ /** @public */
7
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
8
+ export class FtNumberStylesMetaSerialization {
9
+ static allowInnerWhiteMetaValue = 'AllowInnerWhite';
10
+ static allowWhiteSpacesMetaValue = 'AllowWhiteSpaces'; // Not part of standard but supported as includes AllowInnerWhite in Dot Net.
11
+ static lowerCaseAllowInnerWhiteMetaValue = FtNumberStylesMetaSerialization.allowInnerWhiteMetaValue.toLowerCase();
12
+ static lowerCaseAllowWhiteSpacesMetaValue = FtNumberStylesMetaSerialization.allowWhiteSpacesMetaValue.toLowerCase();
13
+
14
+ static serialize(styles: DotNetNumberStyles, dataType: FtNumberDataType): string | undefined {
15
+ switch (dataType) {
16
+ case FtDataType.Integer:
17
+ if (styles === FtMetaDefaults.IntegerField.Styles) {
18
+ return undefined;
19
+ }
20
+ break;
21
+ case FtDataType.Float:
22
+ if (styles === FtMetaDefaults.FloatField.Styles) {
23
+ return undefined;
24
+ }
25
+ break;
26
+ case FtDataType.Decimal:
27
+ if (styles === FtMetaDefaults.DecimalField.Styles) {
28
+ return undefined;
29
+ }
30
+ break;
31
+ default:
32
+ throw new FtUnreachableCaseError('NSMSS33997', dataType);
33
+ }
34
+
35
+ for (const compositeMetaInfo of compositeNumberStylesMetaInfoArray) {
36
+ if (styles === compositeMetaInfo.styles) {
37
+ return compositeMetaInfo.metaValue;
38
+ }
39
+ }
40
+
41
+ const result = new Array<string>(flagNumberStylesMetaInfoCount);
42
+ let count = 0;
43
+ for (const flagMetaInfo of flagNumberStylesMetaInfoArray) {
44
+ if ((styles & flagMetaInfo.styles) === flagMetaInfo.styles) {
45
+ result[count++] = flagMetaInfo.metaValue;
46
+ }
47
+ }
48
+ result.length = count;
49
+ return result.join(',');
50
+ }
51
+
52
+ static deserialize(value: unknown, dataType: FtNumberDataType, warnings: string[]): DotNetNumberStyles {
53
+ if (value === undefined) {
54
+ return this.getDefaultNumberStyles(dataType);
55
+ } else {
56
+ if (typeof value !== 'string') {
57
+ warnings.push(`Number styles: Type: ${typeof value}`);
58
+ return this.getDefaultNumberStyles(dataType);
59
+ } else {
60
+ const trimmedValue = value.trim();
61
+ if (trimmedValue.length === 0) {
62
+ return DotNetNumberStyles.none;
63
+ } else {
64
+ let result: DotNetNumberStyles = DotNetNumberStyles.none;
65
+ const lowerCasedValue = trimmedValue.toLowerCase();
66
+ const styleStringArray = lowerCasedValue.split(',').map((s) => s.trim());
67
+ for (const styleString of styleStringArray) {
68
+ for (const compositeMetaInfo of compositeNumberStylesMetaInfoArray) {
69
+ if (styleString === compositeMetaInfo.lowerCaseMetaValue) {
70
+ result |= compositeMetaInfo.styles;
71
+ continue;
72
+ }
73
+ }
74
+ for (const flagMetaInfo of flagNumberStylesMetaInfoArray) {
75
+ if (styleString === flagMetaInfo.lowerCaseMetaValue) {
76
+ result |= flagMetaInfo.styles;
77
+ continue;
78
+ }
79
+ }
80
+ warnings.push(`Unrecognized number style: ${styleString}`);
81
+ }
82
+ return result;
83
+ }
84
+ }
85
+ }
86
+ }
87
+
88
+ private static getDefaultNumberStyles(dataType: FtNumberDataType): DotNetNumberStyles {
89
+ switch (dataType) {
90
+ case FtDataType.Integer:
91
+ return FtMetaDefaults.IntegerField.Styles;
92
+ case FtDataType.Float:
93
+ return FtMetaDefaults.FloatField.Styles;
94
+ case FtDataType.Decimal:
95
+ return FtMetaDefaults.DecimalField.Styles;
96
+ default:
97
+ throw new FtUnreachableCaseError('NSMSGDNS33999', dataType);
98
+ }
99
+ }
100
+ }
101
+
102
+ interface NumberStylesMetaInfo {
103
+ styles: DotNetNumberStyles;
104
+ metaValue: string;
105
+ lowerCaseMetaValue: string;
106
+ }
107
+
108
+ const allowLeadingWhiteMetaValue = 'AllowLeadingWhite';
109
+ const allowTrailingWhiteMetaValue = 'AllowTrailingWhite';
110
+ const allowLeadingSignMetaValue = 'AllowLeadingSign';
111
+ const allowTrailingSignMetaValue = 'AllowTrailingSign';
112
+ const allowParenthesesMetaValue = 'AllowParentheses';
113
+ const allowDecimalPointMetaValue = 'AllowDecimalPoint';
114
+ const allowThousandsMetaValue = 'AllowThousands';
115
+ const allowExponentMetaValue = 'AllowExponent';
116
+ const allowCurrencySymbolMetaValue = 'AllowCurrencySymbol';
117
+ const allowHexSpecifierMetaValue = 'AllowHexSpecifier';
118
+
119
+ const noneMetaValue = 'None';
120
+ const anyMetaValue = 'Any';
121
+ const currencyMetaValue = 'Currency';
122
+ const floatMetaValue = 'Float';
123
+ const hexNumberMetaValue = 'HexNumber';
124
+ const integerMetaValue = 'Integer';
125
+
126
+ const flagNumberStylesMetaInfoArray: NumberStylesMetaInfo[] = [
127
+ {
128
+ styles: DotNetNumberStyles.allowLeadingWhite,
129
+ metaValue: allowLeadingWhiteMetaValue,
130
+ lowerCaseMetaValue: allowLeadingWhiteMetaValue.toLowerCase(),
131
+ },
132
+ {
133
+ styles: DotNetNumberStyles.allowTrailingWhite,
134
+ metaValue: allowTrailingWhiteMetaValue,
135
+ lowerCaseMetaValue: allowTrailingWhiteMetaValue.toLowerCase(),
136
+ },
137
+ {
138
+ styles: DotNetNumberStyles.allowLeadingSign,
139
+ metaValue: allowLeadingSignMetaValue,
140
+ lowerCaseMetaValue: allowLeadingSignMetaValue.toLowerCase(),
141
+ },
142
+ {
143
+ styles: DotNetNumberStyles.allowTrailingSign,
144
+ metaValue: allowTrailingSignMetaValue,
145
+ lowerCaseMetaValue: allowTrailingSignMetaValue.toLowerCase(),
146
+ },
147
+ {
148
+ styles: DotNetNumberStyles.allowParentheses,
149
+ metaValue: allowParenthesesMetaValue,
150
+ lowerCaseMetaValue: allowParenthesesMetaValue.toLowerCase(),
151
+ },
152
+ {
153
+ styles: DotNetNumberStyles.allowDecimalPoint,
154
+ metaValue: allowDecimalPointMetaValue,
155
+ lowerCaseMetaValue: allowDecimalPointMetaValue.toLowerCase(),
156
+ },
157
+ {
158
+ styles: DotNetNumberStyles.allowThousands,
159
+ metaValue: allowThousandsMetaValue,
160
+ lowerCaseMetaValue: allowThousandsMetaValue.toLowerCase(),
161
+ },
162
+ {
163
+ styles: DotNetNumberStyles.allowExponent,
164
+ metaValue: allowExponentMetaValue,
165
+ lowerCaseMetaValue: allowExponentMetaValue.toLowerCase(),
166
+ },
167
+ {
168
+ styles: DotNetNumberStyles.allowCurrencySymbol,
169
+ metaValue: allowCurrencySymbolMetaValue,
170
+ lowerCaseMetaValue: allowCurrencySymbolMetaValue.toLowerCase(),
171
+ },
172
+ {
173
+ styles: DotNetNumberStyles.allowHexSpecifier,
174
+ metaValue: allowHexSpecifierMetaValue,
175
+ lowerCaseMetaValue: allowHexSpecifierMetaValue.toLowerCase(),
176
+ },
177
+ ];
178
+
179
+ const flagNumberStylesMetaInfoCount = flagNumberStylesMetaInfoArray.length;
180
+
181
+ const compositeNumberStylesMetaInfoArray: NumberStylesMetaInfo[] = [
182
+ {
183
+ styles: DotNetNumberStyles.none,
184
+ metaValue: noneMetaValue,
185
+ lowerCaseMetaValue: noneMetaValue.toLowerCase(),
186
+ },
187
+ {
188
+ styles: DotNetNumberStyles.any,
189
+ metaValue: anyMetaValue,
190
+ lowerCaseMetaValue: anyMetaValue.toLowerCase(),
191
+ },
192
+ {
193
+ styles: DotNetNumberStyles.currency,
194
+ metaValue: currencyMetaValue,
195
+ lowerCaseMetaValue: currencyMetaValue.toLowerCase(),
196
+ },
197
+ {
198
+ styles: DotNetNumberStyles.float,
199
+ metaValue: floatMetaValue,
200
+ lowerCaseMetaValue: floatMetaValue.toLowerCase(),
201
+ },
202
+ {
203
+ styles: DotNetNumberStyles.hexNumber,
204
+ metaValue: hexNumberMetaValue,
205
+ lowerCaseMetaValue: hexNumberMetaValue.toLowerCase(),
206
+ },
207
+ {
208
+ styles: DotNetNumberStyles.integer,
209
+ metaValue: integerMetaValue,
210
+ lowerCaseMetaValue: integerMetaValue.toLowerCase(),
211
+ },
212
+ ];
@@ -0,0 +1,36 @@
1
+ import { FtMetaDefaults } from '../../meta/ft-meta-defaults.js';
2
+
3
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
4
+ export class BooleanMetaSerialization {
5
+ static lowerCaseTrueText = FtMetaDefaults.BooleanField.TrueText.toLowerCase();
6
+ static lowerCaseFalseText = FtMetaDefaults.BooleanField.FalseText.toLowerCase();
7
+
8
+ static serialize(value: boolean, defaultValue: boolean): string | undefined {
9
+ if (value === defaultValue) {
10
+ return undefined; // Default value
11
+ } else {
12
+ return value ? FtMetaDefaults.BooleanField.TrueText : FtMetaDefaults.BooleanField.FalseText;
13
+ }
14
+ }
15
+
16
+ static deserialize(value: unknown, defaultValue: boolean, warnings: string[]): boolean {
17
+ if (typeof value === 'undefined') {
18
+ return defaultValue;
19
+ } else {
20
+ if (typeof value !== 'string') {
21
+ warnings.push(`Boolean: Type: ${typeof value}`);
22
+ return defaultValue;
23
+ } else {
24
+ const trimmedValue = value.trim().toLowerCase();
25
+ if (trimmedValue === BooleanMetaSerialization.lowerCaseTrueText) {
26
+ return true;
27
+ } else if (trimmedValue === BooleanMetaSerialization.lowerCaseFalseText) {
28
+ return false;
29
+ } else {
30
+ warnings.push(`Boolean: Invalid: ${value}`);
31
+ return defaultValue;
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,28 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
2
+ export class CharMetaSerialization {
3
+ static serialize(value: string, defaultValue: string): string | undefined {
4
+ if (value === defaultValue) {
5
+ return undefined; // Default value
6
+ } else {
7
+ return value;
8
+ }
9
+ }
10
+
11
+ static deserialize(value: unknown, defaultValue: string, warnings: string[]): string {
12
+ if (typeof value === 'undefined') {
13
+ return defaultValue;
14
+ } else {
15
+ if (typeof value !== 'string') {
16
+ warnings.push(`Char: Type: ${typeof value}`);
17
+ return defaultValue;
18
+ } else {
19
+ if (value.length !== 1) {
20
+ warnings.push(`Char: Length: ${value}`);
21
+ return defaultValue;
22
+ } else {
23
+ return value;
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }