@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,276 @@
1
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtMetaField } from '../../meta/fields/ft-meta-field.js';
3
+ import { FtMetaDefaults } from '../../meta/ft-meta-defaults.js';
4
+ import { FtFieldFormatter } from '../../serialization/formatting/ft-field-formatter.js';
5
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
6
+ import { FtHeadingConstraint } from '../../types/enums/ft-heading-constraint.js';
7
+ import { FtPadAlignment } from '../../types/enums/ft-pad-alignment.js';
8
+ import { FtPadCharType } from '../../types/enums/ft-pad-char-type.js';
9
+ import { FtQuotedType } from '../../types/enums/ft-quoted-type.js';
10
+ import { FtTruncateType } from '../../types/enums/ft-truncate-type.js';
11
+ import { FtUnreachableCaseError } from '../../types/errors/ft-internal-error.js';
12
+
13
+ const InternalError = {
14
+ FtFieldFieldDefinition_LoadMeta_UnsupportedHeadingPadAlignment: 'FtFieldFieldDefinition_LoadMeta_UnsupportedHeadingPadAlignment',
15
+ FtFieldFieldDefinition_LoadMeta_UnsupportedValuePadAlignment: 'FtFieldFieldDefinition_LoadMeta_UnsupportedValuePadAlignment',
16
+ } as const;
17
+
18
+ type InternalError = (typeof InternalError)[keyof typeof InternalError];
19
+
20
+ /**
21
+ * Abstract base class for all field definitions.
22
+ * Field definitions hold metadata and configuration for fields in fielded text.
23
+ * @public
24
+ */
25
+ export abstract class FtFieldDefinition {
26
+ readonly dataType: FtDataType;
27
+ readonly valueType: string; // TypeScript doesn't have Type like C#, so we use string description
28
+ readonly autoLeftPad: boolean;
29
+
30
+ protected readonly formatter: FtFieldFormatter;
31
+
32
+ private _index: number;
33
+ private _id: number | undefined = undefined;
34
+ private _metaName: string = FtMetaDefaults.Field.Name;
35
+ private _metaHeadings: string[] = [];
36
+ private _mainHeadingIndex: number = FtMetaDefaults.Root.MainHeadingLineIndex;
37
+ private _culture: DotNetLocaleSettings | undefined = undefined;
38
+ private _fixedWidth: boolean = FtMetaDefaults.Field.FixedWidth;
39
+ private _width: number = FtMetaDefaults.Field.Width;
40
+ private _constant: boolean = FtMetaDefaults.Field.Constant;
41
+ private _null: boolean = FtMetaDefaults.Field.Null;
42
+
43
+ // Value formatting properties
44
+ private _valueQuotedType: FtQuotedType = FtMetaDefaults.Field.ValueQuotedType;
45
+ private _valueAlwaysWriteOptionalQuote: boolean = FtMetaDefaults.Field.ValueAlwaysWriteOptionalQuote;
46
+ private _valueWritePrefixSpace: boolean = FtMetaDefaults.Field.ValueWritePrefixSpace;
47
+ private _valuePadAlignment: FtPadAlignment = FtMetaDefaults.Field.ValuePadAlignment;
48
+ private _valuePadCharType: FtPadCharType = FtMetaDefaults.Field.ValuePadCharType;
49
+ private _valuePadChar: string = FtMetaDefaults.Field.ValuePadChar;
50
+ private _valueTruncateType: FtTruncateType = FtMetaDefaults.Field.ValueTruncateType;
51
+ private _valueTruncateChar: string = FtMetaDefaults.Field.ValueTruncateChar;
52
+ private _valueEndOfValueChar: string = FtMetaDefaults.Field.ValueEndOfValueChar;
53
+ private _valueNullChar: string = FtMetaDefaults.Field.ValueNullChar;
54
+
55
+ // Heading formatting properties
56
+ private _headingConstraint: FtHeadingConstraint = FtMetaDefaults.Field.RootOverriding.HeadingConstraint; // Note that field cannot override heading constraint
57
+ private _headingQuotedType: FtQuotedType = FtMetaDefaults.Field.RootOverriding.HeadingQuotedType;
58
+ private _headingAlwaysWriteOptionalQuote: boolean = FtMetaDefaults.Field.RootOverriding.HeadingAlwaysWriteOptionalQuote;
59
+ private _headingWritePrefixSpace: boolean = FtMetaDefaults.Field.RootOverriding.HeadingWritePrefixSpace;
60
+ private _headingPadAlignment: FtPadAlignment = FtMetaDefaults.Field.RootOverriding.HeadingPadAlignment;
61
+ private _headingPadCharType: FtPadCharType = FtMetaDefaults.Field.RootOverriding.HeadingPadCharType;
62
+ private _headingPadChar: string = FtMetaDefaults.Field.RootOverriding.HeadingPadChar;
63
+ private _headingTruncateType: FtTruncateType = FtMetaDefaults.Field.RootOverriding.HeadingTruncateType;
64
+ private _headingTruncateChar: string = FtMetaDefaults.Field.RootOverriding.HeadingTruncateChar;
65
+ private _headingEndOfValueChar: string = FtMetaDefaults.Field.RootOverriding.HeadingEndOfValueChar;
66
+
67
+ private _autoPadChar = ' ';
68
+
69
+ private _headingLeftPad = false;
70
+ private _valueLeftPad = false;
71
+ private _fixedWidthNullValueText = '';
72
+
73
+ protected constructor(dataType: FtDataType, valueType: string, formatter: FtFieldFormatter, autoLeftPad: boolean, index: number) {
74
+ this.dataType = dataType;
75
+ this.valueType = valueType;
76
+ this.formatter = formatter;
77
+ this.autoLeftPad = autoLeftPad;
78
+ this._index = index;
79
+ }
80
+
81
+ // Public properties
82
+ get index(): number {
83
+ return this._index;
84
+ }
85
+ get id(): number | undefined {
86
+ return this._id;
87
+ }
88
+ get metaName(): string {
89
+ return this._metaName;
90
+ }
91
+ get metaHeadings(): string[] {
92
+ return this._metaHeadings;
93
+ }
94
+ get metaHeadingCount(): number {
95
+ return this._metaHeadings.length;
96
+ }
97
+ get mainHeadingIndex(): number {
98
+ return this._mainHeadingIndex;
99
+ }
100
+ get culture(): DotNetLocaleSettings | undefined {
101
+ return this._culture;
102
+ }
103
+ get fixedWidth(): boolean {
104
+ return this._fixedWidth;
105
+ }
106
+ get width(): number {
107
+ return this._width;
108
+ }
109
+ get constant(): boolean {
110
+ return this._constant;
111
+ }
112
+ get null(): boolean {
113
+ return this._null;
114
+ }
115
+
116
+ get valueQuotedType(): FtQuotedType {
117
+ return this._valueQuotedType;
118
+ }
119
+ get valueAlwaysWriteOptionalQuote(): boolean {
120
+ return this._valueAlwaysWriteOptionalQuote;
121
+ }
122
+ get valueWritePrefixSpace(): boolean {
123
+ return this._valueWritePrefixSpace;
124
+ }
125
+ get valuePadAlignment(): FtPadAlignment {
126
+ return this._valuePadAlignment;
127
+ }
128
+ get valuePadCharType(): FtPadCharType {
129
+ return this._valuePadCharType;
130
+ }
131
+ get valuePadChar(): string {
132
+ return this._valuePadChar;
133
+ }
134
+ get valueTruncateType(): FtTruncateType {
135
+ return this._valueTruncateType;
136
+ }
137
+ get valueTruncateChar(): string {
138
+ return this._valueTruncateChar;
139
+ }
140
+ get valueEndOfValueChar(): string {
141
+ return this._valueEndOfValueChar;
142
+ }
143
+ get valueNullChar(): string {
144
+ return this._valueNullChar;
145
+ }
146
+
147
+ get headingConstraint(): FtHeadingConstraint {
148
+ return this._headingConstraint;
149
+ }
150
+ get headingQuotedType(): FtQuotedType {
151
+ return this._headingQuotedType;
152
+ }
153
+ get headingAlwaysWriteOptionalQuote(): boolean {
154
+ return this._headingAlwaysWriteOptionalQuote;
155
+ }
156
+ get headingWritePrefixSpace(): boolean {
157
+ return this._headingWritePrefixSpace;
158
+ }
159
+ get headingPadAlignment(): FtPadAlignment {
160
+ return this._headingPadAlignment;
161
+ }
162
+ get headingPadCharType(): FtPadCharType {
163
+ return this._headingPadCharType;
164
+ }
165
+ get headingPadChar(): string {
166
+ return this._headingPadChar;
167
+ }
168
+ get headingTruncateType(): FtTruncateType {
169
+ return this._headingTruncateType;
170
+ }
171
+ get headingTruncateChar(): string {
172
+ return this._headingTruncateChar;
173
+ }
174
+ get headingEndOfValueChar(): string {
175
+ return this._headingEndOfValueChar;
176
+ }
177
+
178
+ get autoPadChar(): string {
179
+ return this._autoPadChar;
180
+ }
181
+ get headingLeftPad(): boolean {
182
+ return this._headingLeftPad;
183
+ }
184
+ get valueLeftPad(): boolean {
185
+ return this._valueLeftPad;
186
+ }
187
+ get fixedWidthNullValueText(): string {
188
+ return this._fixedWidthNullValueText;
189
+ }
190
+
191
+ /**
192
+ * Load metadata from a meta field.
193
+ * @param metaField - The meta field containing configuration
194
+ * @param myCulture - The culture settings for formatting
195
+ * @param myMainHeadingIndex - Index of the main heading
196
+ */
197
+ loadMeta(metaField: FtMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
198
+ this._id = metaField.id;
199
+ this._metaName = metaField.name;
200
+ this._metaHeadings = [...metaField.headings];
201
+ this._mainHeadingIndex = myMainHeadingIndex;
202
+ this._culture = myCulture;
203
+ this._fixedWidth = metaField.fixedWidth;
204
+ this._width = metaField.width;
205
+ this._constant = metaField.constant;
206
+ this._null = metaField.null;
207
+
208
+ this._valueQuotedType = metaField.valueQuotedType;
209
+ this._valueAlwaysWriteOptionalQuote = metaField.valueAlwaysWriteOptionalQuote;
210
+ this._valueWritePrefixSpace = metaField.valueWritePrefixSpace;
211
+ this._valuePadAlignment = metaField.valuePadAlignment;
212
+ this._valuePadCharType = metaField.valuePadCharType;
213
+ this._valuePadChar = metaField.valuePadChar;
214
+ this._valueTruncateType = metaField.valueTruncateType;
215
+ this._valueTruncateChar = metaField.valueTruncateChar;
216
+ this._valueEndOfValueChar = metaField.valueEndOfValueChar;
217
+ this._valueNullChar = metaField.valueNullChar;
218
+
219
+ this._headingConstraint = metaField.headingConstraint;
220
+ this._headingQuotedType = metaField.headingQuotedType;
221
+ this._headingAlwaysWriteOptionalQuote = metaField.headingAlwaysWriteOptionalQuote;
222
+ this._headingWritePrefixSpace = metaField.headingWritePrefixSpace;
223
+ this._headingPadAlignment = metaField.headingPadAlignment;
224
+ this._headingPadCharType = metaField.headingPadCharType;
225
+ this._headingPadChar = metaField.headingPadChar;
226
+ this._headingTruncateType = metaField.headingTruncateType;
227
+ this._headingTruncateChar = metaField.headingTruncateChar;
228
+ this._headingEndOfValueChar = metaField.headingEndOfValueChar;
229
+
230
+ this.formatter.culture = this._culture;
231
+
232
+ // Set meta name in headings if required
233
+ if (
234
+ (this._headingConstraint === FtHeadingConstraint.NameIsMain || this._headingConstraint === FtHeadingConstraint.NameConstant) &&
235
+ myMainHeadingIndex >= 0 &&
236
+ myMainHeadingIndex < this.metaHeadingCount
237
+ ) {
238
+ this._metaHeadings[myMainHeadingIndex] = this._metaName;
239
+ }
240
+
241
+ // Calculate heading left pad
242
+ switch (this._headingPadAlignment) {
243
+ case FtPadAlignment.Left:
244
+ this._headingLeftPad = true;
245
+ break;
246
+ case FtPadAlignment.Right:
247
+ this._headingLeftPad = false;
248
+ break;
249
+ case FtPadAlignment.Auto:
250
+ this._headingLeftPad = this.autoLeftPad;
251
+ break;
252
+ default:
253
+ throw new FtUnreachableCaseError('FDLM30915', this._headingPadAlignment);
254
+ }
255
+
256
+ // Calculate value left pad
257
+ switch (this._valuePadAlignment) {
258
+ case FtPadAlignment.Left:
259
+ this._valueLeftPad = true;
260
+ break;
261
+ case FtPadAlignment.Right:
262
+ this._valueLeftPad = false;
263
+ break;
264
+ case FtPadAlignment.Auto:
265
+ this._valueLeftPad = this.autoLeftPad;
266
+ break;
267
+ default:
268
+ throw new FtUnreachableCaseError('FDLM30911', this._valuePadAlignment);
269
+ }
270
+
271
+ // Build fixed width null value text
272
+ if (this._fixedWidth) {
273
+ this._fixedWidthNullValueText = this._valueNullChar.repeat(this._width);
274
+ }
275
+ }
276
+ }
@@ -0,0 +1,43 @@
1
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtFloatMetaField } from '../../meta/fields/ft-float-meta-field.js';
3
+ import { FtFloatFieldFormatter } from '../../serialization/formatting/ft-float-field-formatter.js';
4
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
5
+ import { FtGenericFieldDefinition } from './ft-generic-field-definition.js';
6
+
7
+ /**
8
+ * Field definition for float (number) fields.
9
+ * @public
10
+ */
11
+ export class FtFloatFieldDefinition extends FtGenericFieldDefinition<number> {
12
+ static readonly AUTO_LEFT_PAD = true;
13
+
14
+ declare protected formatter: FtFloatFieldFormatter;
15
+
16
+ constructor(index: number) {
17
+ const formatter = new FtFloatFieldFormatter();
18
+ super(FtDataType.Float, 'number', formatter, FtFloatFieldDefinition.AUTO_LEFT_PAD, index);
19
+ }
20
+
21
+ get format(): string {
22
+ return this.formatter.format;
23
+ }
24
+
25
+ get styles(): number {
26
+ return this.formatter.styles;
27
+ }
28
+
29
+ override loadMeta(metaField: FtFloatMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
30
+ super.loadMeta(metaField, myCulture, myMainHeadingIndex);
31
+
32
+ this.formatter.format = metaField.format;
33
+ this.formatter.styles = metaField.styles;
34
+ }
35
+
36
+ getValueText(value: number): string {
37
+ return this.formatter.toText(value);
38
+ }
39
+
40
+ parseValueText(text: string): number {
41
+ return this.formatter.parse(text);
42
+ }
43
+ }
@@ -0,0 +1,49 @@
1
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtMetaField } from '../../meta/fields/ft-meta-field.js';
3
+ import { FtFieldDefinition } from './ft-field-definition.js';
4
+
5
+ /**
6
+ * Generic base class for field definitions with typed values.
7
+ * Extends FtFieldDefinition to add type-specific value handling.
8
+ * @public
9
+ */
10
+ export abstract class FtGenericFieldDefinition<T> extends FtFieldDefinition {
11
+ private _value!: T;
12
+
13
+ get value(): T {
14
+ return this._value;
15
+ }
16
+
17
+ /**
18
+ * Load metadata from a meta field.
19
+ * @param metaField - The meta field containing configuration
20
+ * @param myCulture - The culture settings for formatting
21
+ * @param myMainHeadingIndex - Index of the main heading
22
+ */
23
+ override loadMeta(metaField: FtMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
24
+ super.loadMeta(metaField, myCulture, myMainHeadingIndex);
25
+
26
+ // Load constant value if applicable
27
+ // The concrete generic meta field subclass will have typed value
28
+ if (metaField.constant && !metaField.null) {
29
+ const genericMetaField = metaField;
30
+ if ('value' in genericMetaField) {
31
+ this._value = genericMetaField.value as T;
32
+ }
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Convert a typed value to its text representation.
38
+ * @param value - The value to convert
39
+ * @returns The text representation
40
+ */
41
+ abstract getValueText(value: T): string;
42
+
43
+ /**
44
+ * Parse text into a typed value.
45
+ * @param text - The text to parse
46
+ * @returns The parsed value
47
+ */
48
+ abstract parseValueText(text: string): T;
49
+ }
@@ -0,0 +1,44 @@
1
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtIntegerMetaField } from '../../meta/fields/ft-integer-meta-field.js';
3
+ import { FtIntegerFieldFormatter } from '../../serialization/formatting/ft-integer-field-formatter.js';
4
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
5
+ import { FtGenericFieldDefinition } from './ft-generic-field-definition.js';
6
+
7
+ /**
8
+ * Field definition for integer (bigint) fields.
9
+ * In TypeScript we use bigint for precision but also support number.
10
+ * @public
11
+ */
12
+ export class FtIntegerFieldDefinition extends FtGenericFieldDefinition<bigint> {
13
+ static readonly AUTO_LEFT_PAD = true;
14
+
15
+ declare protected formatter: FtIntegerFieldFormatter;
16
+
17
+ constructor(index: number) {
18
+ const formatter = new FtIntegerFieldFormatter();
19
+ super(FtDataType.Integer, 'bigint', formatter, FtIntegerFieldDefinition.AUTO_LEFT_PAD, index);
20
+ }
21
+
22
+ get format(): string {
23
+ return this.formatter.format;
24
+ }
25
+
26
+ get styles(): number {
27
+ return this.formatter.styles;
28
+ }
29
+
30
+ override loadMeta(metaField: FtIntegerMetaField, myCulture: DotNetLocaleSettings | undefined, myMainHeadingIndex: number): void {
31
+ super.loadMeta(metaField, myCulture, myMainHeadingIndex);
32
+
33
+ this.formatter.format = metaField.format;
34
+ this.formatter.styles = metaField.styles;
35
+ }
36
+
37
+ getValueText(value: bigint): string {
38
+ return this.formatter.toText(value);
39
+ }
40
+
41
+ parseValueText(text: string): bigint {
42
+ return this.formatter.parse(text);
43
+ }
44
+ }
@@ -0,0 +1,26 @@
1
+ import { FtStringFieldFormatter } from '../../serialization/formatting/ft-string-field-formatter.js';
2
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
3
+ import { FtGenericFieldDefinition } from './ft-generic-field-definition.js';
4
+
5
+ /**
6
+ * Field definition for string fields.
7
+ * @public
8
+ */
9
+ export class FtStringFieldDefinition extends FtGenericFieldDefinition<string> {
10
+ static readonly AUTO_LEFT_PAD = false;
11
+
12
+ declare protected formatter: FtStringFieldFormatter;
13
+
14
+ constructor(index: number) {
15
+ const formatter = new FtStringFieldFormatter();
16
+ super(FtDataType.String, 'string', formatter, FtStringFieldDefinition.AUTO_LEFT_PAD, index);
17
+ }
18
+
19
+ getValueText(value: string): string {
20
+ return this.formatter.toText(value);
21
+ }
22
+
23
+ parseValueText(text: string): string {
24
+ return this.formatter.parse(text);
25
+ }
26
+ }
@@ -0,0 +1,49 @@
1
+ import { FtSequenceInvokation } from '../../sequences/core/ft-sequence-invokation.js';
2
+ import { FtSequenceItem } from '../../sequences/core/ft-sequence-item.js';
3
+ import { FtBooleanStyles } from '../../types/enums/ft-boolean-styles.js';
4
+ import { FtBooleanFieldDefinition } from '../definitions/ft-boolean-field-definition.js';
5
+ import { FtGenericField } from './ft-generic-field.js';
6
+
7
+ /**
8
+ * Field for boolean values.
9
+ * @public
10
+ */
11
+ export class FtBooleanField extends FtGenericField<boolean> {
12
+ private static readonly VALUE_TEXT_NULL_TRIMMABLE = true;
13
+
14
+ constructor(sequenceInvokation: FtSequenceInvokation, sequenceItem: FtSequenceItem, definition: FtBooleanFieldDefinition) {
15
+ super(sequenceInvokation, sequenceItem, FtBooleanField.VALUE_TEXT_NULL_TRIMMABLE, definition);
16
+ }
17
+
18
+ override get definition(): FtBooleanFieldDefinition {
19
+ return super.definition_ as FtBooleanFieldDefinition;
20
+ }
21
+
22
+ get falseText(): string {
23
+ return this.definition.falseText;
24
+ }
25
+
26
+ get trueText(): string {
27
+ return this.definition.trueText;
28
+ }
29
+
30
+ get styles(): FtBooleanStyles {
31
+ return this.definition.styles;
32
+ }
33
+
34
+ get nullableValue(): boolean | null {
35
+ return this.isNull() ? null : this.value;
36
+ }
37
+
38
+ set nullableValue(value: boolean | null) {
39
+ if (value === null) {
40
+ this.setNull();
41
+ } else {
42
+ this.value = value;
43
+ }
44
+ }
45
+
46
+ protected isValueEqual(left: boolean, right: boolean): boolean {
47
+ return left === right;
48
+ }
49
+ }
@@ -0,0 +1,44 @@
1
+ import { FtSequenceInvokation } from '../../sequences/core/ft-sequence-invokation.js';
2
+ import { FtSequenceItem } from '../../sequences/core/ft-sequence-item.js';
3
+ import { FtDateTimeFieldDefinition } from '../definitions/ft-date-time-field-definition.js';
4
+ import { FtGenericField } from './ft-generic-field.js';
5
+
6
+ /**
7
+ * Field for DateTime values.
8
+ * @public
9
+ */
10
+ export class FtDateTimeField extends FtGenericField<Date> {
11
+ private static readonly VALUE_TEXT_NULL_TRIMMABLE = true;
12
+
13
+ constructor(sequenceInvokation: FtSequenceInvokation, sequenceItem: FtSequenceItem, definition: FtDateTimeFieldDefinition) {
14
+ super(sequenceInvokation, sequenceItem, FtDateTimeField.VALUE_TEXT_NULL_TRIMMABLE, definition);
15
+ }
16
+
17
+ override get definition(): FtDateTimeFieldDefinition {
18
+ return super.definition_ as FtDateTimeFieldDefinition;
19
+ }
20
+
21
+ get format(): string {
22
+ return this.definition.format;
23
+ }
24
+
25
+ get styles(): number {
26
+ return this.definition.styles;
27
+ }
28
+
29
+ get nullableValue(): Date | null {
30
+ return this.isNull() ? null : this.value;
31
+ }
32
+
33
+ set nullableValue(value: Date | null) {
34
+ if (value === null) {
35
+ this.setNull();
36
+ } else {
37
+ this.value = value;
38
+ }
39
+ }
40
+
41
+ protected isValueEqual(left: Date, right: Date): boolean {
42
+ return left.getTime() === right.getTime();
43
+ }
44
+ }
@@ -0,0 +1,44 @@
1
+ import { FtSequenceInvokation } from '../../sequences/core/ft-sequence-invokation.js';
2
+ import { FtSequenceItem } from '../../sequences/core/ft-sequence-item.js';
3
+ import { FtDecimalFieldDefinition } from '../definitions/ft-decimal-field-definition.js';
4
+ import { FtGenericField } from './ft-generic-field.js';
5
+
6
+ /**
7
+ * Field for decimal values.
8
+ * @public
9
+ */
10
+ export class FtDecimalField extends FtGenericField<number> {
11
+ private static readonly VALUE_TEXT_NULL_TRIMMABLE = true;
12
+
13
+ constructor(sequenceInvokation: FtSequenceInvokation, sequenceItem: FtSequenceItem, definition: FtDecimalFieldDefinition) {
14
+ super(sequenceInvokation, sequenceItem, FtDecimalField.VALUE_TEXT_NULL_TRIMMABLE, definition);
15
+ }
16
+
17
+ override get definition(): FtDecimalFieldDefinition {
18
+ return super.definition_ as FtDecimalFieldDefinition;
19
+ }
20
+
21
+ get format(): string {
22
+ return this.definition.format;
23
+ }
24
+
25
+ get styles(): number {
26
+ return this.definition.styles;
27
+ }
28
+
29
+ get nullableValue(): number | null {
30
+ return this.isNull() ? null : this.value;
31
+ }
32
+
33
+ set nullableValue(value: number | null) {
34
+ if (value === null) {
35
+ this.setNull();
36
+ } else {
37
+ this.value = value;
38
+ }
39
+ }
40
+
41
+ protected isValueEqual(left: number, right: number): boolean {
42
+ return left === right;
43
+ }
44
+ }
@@ -0,0 +1,68 @@
1
+ import { FtField } from './ft-field.js';
2
+
3
+ /**
4
+ * @public
5
+ */
6
+ export class FtFieldList {
7
+ private list: FtField[] = [];
8
+
9
+ get count(): number {
10
+ return this.list.length;
11
+ }
12
+
13
+ get(index: number): FtField {
14
+ return this.list[index];
15
+ }
16
+
17
+ getByName(name: string): FtField | undefined {
18
+ const idx = this.indexOfName(name);
19
+ if (idx >= 0) {
20
+ return this.list[idx];
21
+ }
22
+ return undefined;
23
+ }
24
+
25
+ indexOf(field: FtField): number {
26
+ return this.list.indexOf(field);
27
+ }
28
+
29
+ indexOfName(name: string): number {
30
+ // Try case-sensitive first
31
+ for (let i = 0; i < this.list.length; i++) {
32
+ if (this.list[i].name === name) {
33
+ return i;
34
+ }
35
+ }
36
+
37
+ // Try case-insensitive
38
+ const lowerName = name.toLowerCase();
39
+ for (let i = 0; i < this.list.length; i++) {
40
+ if (this.list[i].name.toLowerCase() === lowerName) {
41
+ return i;
42
+ }
43
+ }
44
+
45
+ return -1;
46
+ }
47
+
48
+ indexOfId(id: number): number {
49
+ for (let i = 0; i < this.list.length; i++) {
50
+ if (this.list[i].id === id) {
51
+ return i;
52
+ }
53
+ }
54
+ return -1;
55
+ }
56
+
57
+ clear(): void {
58
+ this.list = [];
59
+ }
60
+
61
+ trim(fromIndex: number): void {
62
+ this.list = this.list.slice(0, fromIndex);
63
+ }
64
+
65
+ add(field: FtField): void {
66
+ this.list.push(field);
67
+ }
68
+ }