@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,691 @@
1
+ import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
2
+ import { FtSequenceInvokation, FtSequenceRedirectDelegate } from '../../sequences/core/ft-sequence-invokation.js';
3
+ import { FtSequenceItem } from '../../sequences/core/ft-sequence-item.js';
4
+ import { FtSequence } from '../../sequences/core/ft-sequence.js';
5
+ import { FtSequenceRedirectList } from '../../sequences/redirects/ft-sequence-redirect-list.js';
6
+ import { FtDataType } from '../../types/enums/ft-data-type.js';
7
+ import { FtHeadingConstraint } from '../../types/enums/ft-heading-constraint.js';
8
+ import { FtPadAlignment } from '../../types/enums/ft-pad-alignment.js';
9
+ import { FtPadCharType } from '../../types/enums/ft-pad-char-type.js';
10
+ import { FtQuotedType } from '../../types/enums/ft-quoted-type.js';
11
+ import { FtSequenceInvokationDelay } from '../../types/enums/ft-sequence-invokation-delay.js';
12
+ import { FtSequenceRedirectType } from '../../types/enums/ft-sequence-redirect-type.js';
13
+ import { FtTruncateType } from '../../types/enums/ft-truncate-type.js';
14
+ import { FtUnreachableCaseError } from '../../types/errors/ft-internal-error.js';
15
+ import { FtFieldDefinition } from '../definitions/ft-field-definition.js';
16
+
17
+ /**
18
+ * Abstract base class for all field instances.
19
+ * Fields represent runtime field values during reading or writing.
20
+ * @public
21
+ */
22
+ export abstract class FtField {
23
+ static readonly NO_FIELDS_AFFECTED_INDEX = -1;
24
+
25
+ protected static readonly IGNORED_SEQUENCE_INVOKATION_DELAY = FtSequenceInvokationDelay.AfterSequence;
26
+
27
+ sequenceRedirectEvent: FtSequenceRedirectDelegate | undefined;
28
+
29
+ protected valueAssigned = false;
30
+ protected quoted = false;
31
+
32
+ private _index = 0;
33
+ private _definition: FtFieldDefinition;
34
+
35
+ private _sequence: FtSequence;
36
+ private _sequenceItem: FtSequenceItem;
37
+ private _sequenceRedirectList: FtSequenceRedirectList;
38
+ private _sequenceInvokation: FtSequenceInvokation;
39
+ private _sidelined = false;
40
+
41
+ private _name: string;
42
+ private _headings: string[];
43
+ private _valueTextNullTrimmable: boolean;
44
+
45
+ private _valueIsNull: boolean;
46
+
47
+ private _loadedPosition = 0;
48
+ private _loadedLength = 0;
49
+ private _loadedRawOffset = 0;
50
+ private _loadedRawLength = 0;
51
+ private _loadedValueText = '';
52
+
53
+ protected constructor(sequenceInvokation: FtSequenceInvokation, sequenceItem: FtSequenceItem, valueTextNullTrimmable: boolean) {
54
+ if (!sequenceItem.fieldDefinition) {
55
+ throw new Error('SequenceItem must have a field definition');
56
+ }
57
+
58
+ this._definition = sequenceItem.fieldDefinition;
59
+ this._sequence = sequenceInvokation.sequence;
60
+ this._sequenceItem = sequenceItem;
61
+ this._sequenceRedirectList = sequenceItem.redirectList;
62
+ this._sequenceInvokation = sequenceInvokation;
63
+ this._valueTextNullTrimmable = valueTextNullTrimmable;
64
+
65
+ this._name = this._definition.metaName;
66
+ this._headings = [...this._definition.metaHeadings];
67
+
68
+ if (this._definition.constant) {
69
+ this._valueIsNull = this._definition.null;
70
+ } else {
71
+ this._valueIsNull = true;
72
+ }
73
+ }
74
+
75
+ // Public properties
76
+ get definition_(): FtFieldDefinition {
77
+ return this._definition;
78
+ }
79
+
80
+ get index(): number {
81
+ return this._index;
82
+ }
83
+
84
+ set index(value: number) {
85
+ this._index = value;
86
+ }
87
+
88
+ get sidelined(): boolean {
89
+ return this._sidelined;
90
+ }
91
+
92
+ set sidelined(value: boolean) {
93
+ this._sidelined = value;
94
+ }
95
+
96
+ get definition(): FtFieldDefinition {
97
+ return this._definition;
98
+ }
99
+
100
+ get sequence(): FtSequence {
101
+ return this._sequence;
102
+ }
103
+
104
+ get sequenceItem(): FtSequenceItem {
105
+ return this._sequenceItem;
106
+ }
107
+
108
+ get sequenceRedirectList(): FtSequenceRedirectList {
109
+ return this._sequenceRedirectList;
110
+ }
111
+
112
+ get sequenceInvokation(): FtSequenceInvokation {
113
+ return this._sequenceInvokation;
114
+ }
115
+
116
+ get headingCount(): number {
117
+ return this._headings.length;
118
+ }
119
+
120
+ get headings(): string[] {
121
+ return this._headings;
122
+ }
123
+
124
+ get valueAssigned_(): boolean {
125
+ return this.valueAssigned;
126
+ }
127
+
128
+ get loadedValueText(): string {
129
+ return this._loadedValueText;
130
+ }
131
+
132
+ // Properties delegating to definition
133
+ get dataType(): FtDataType {
134
+ return this._definition.dataType;
135
+ }
136
+
137
+ get id(): number | undefined {
138
+ return this._definition.id;
139
+ }
140
+
141
+ get name(): string {
142
+ return this._definition.metaName;
143
+ }
144
+
145
+ get metaHeadings(): string[] {
146
+ return this._definition.metaHeadings;
147
+ }
148
+
149
+ get mainHeadingIndex(): number {
150
+ return this._definition.mainHeadingIndex;
151
+ }
152
+
153
+ get culture(): DotNetLocaleSettings | undefined {
154
+ return this._definition.culture;
155
+ }
156
+
157
+ get fixedWidth(): boolean {
158
+ return this._definition.fixedWidth;
159
+ }
160
+
161
+ get width(): number {
162
+ return this._definition.width;
163
+ }
164
+
165
+ get constant(): boolean {
166
+ return this._definition.constant;
167
+ }
168
+
169
+ get valueQuotedType(): FtQuotedType {
170
+ return this._definition.valueQuotedType;
171
+ }
172
+
173
+ get valueAlwaysWriteOptionalQuote(): boolean {
174
+ return this._definition.valueAlwaysWriteOptionalQuote;
175
+ }
176
+
177
+ get valueWritePrefixSpace(): boolean {
178
+ return this._definition.valueWritePrefixSpace;
179
+ }
180
+
181
+ get valuePadAlignment(): FtPadAlignment {
182
+ return this._definition.valuePadAlignment;
183
+ }
184
+
185
+ get valuePadCharType(): FtPadCharType {
186
+ return this._definition.valuePadCharType;
187
+ }
188
+
189
+ get valuePadChar(): string {
190
+ return this._definition.valuePadChar;
191
+ }
192
+
193
+ get valueTruncateType(): FtTruncateType {
194
+ return this._definition.valueTruncateType;
195
+ }
196
+
197
+ get valueTruncateChar(): string {
198
+ return this._definition.valueTruncateChar;
199
+ }
200
+
201
+ get valueEndOfValueChar(): string {
202
+ return this._definition.valueEndOfValueChar;
203
+ }
204
+
205
+ get valueNullChar(): string {
206
+ return this._definition.valueNullChar;
207
+ }
208
+
209
+ get headingConstraint(): FtHeadingConstraint {
210
+ return this._definition.headingConstraint;
211
+ }
212
+
213
+ get headingQuotedType(): FtQuotedType {
214
+ return this._definition.headingQuotedType;
215
+ }
216
+
217
+ get headingAlwaysWriteOptionalQuote(): boolean {
218
+ return this._definition.headingAlwaysWriteOptionalQuote;
219
+ }
220
+
221
+ get headingWritePrefixSpace(): boolean {
222
+ return this._definition.headingWritePrefixSpace;
223
+ }
224
+
225
+ get headingPadAlignment(): FtPadAlignment {
226
+ return this._definition.headingPadAlignment;
227
+ }
228
+
229
+ get headingPadCharType(): FtPadCharType {
230
+ return this._definition.headingPadCharType;
231
+ }
232
+
233
+ get headingPadChar(): string {
234
+ return this._definition.headingPadChar;
235
+ }
236
+
237
+ get headingTruncateType(): FtTruncateType {
238
+ return this._definition.headingTruncateType;
239
+ }
240
+
241
+ get headingTruncateChar(): string {
242
+ return this._definition.headingTruncateChar;
243
+ }
244
+
245
+ get headingEndOfValueChar(): string {
246
+ return this._definition.headingEndOfValueChar;
247
+ }
248
+
249
+ get valueType(): string {
250
+ return this._definition.valueType;
251
+ }
252
+
253
+ /** @internal */
254
+ get asRedirectString(): string {
255
+ return this.getAsNonNullValueText();
256
+ }
257
+
258
+ /** @internal */
259
+ get asRedirectBoolean(): boolean {
260
+ return this.getAsRedirectBoolean();
261
+ }
262
+
263
+ /** @internal */
264
+ get asRedirectInteger(): bigint {
265
+ return this.getAsRedirectInteger();
266
+ }
267
+
268
+ /** @internal */
269
+ get asRedirectFloat(): number {
270
+ return this.getAsRedirectFloat();
271
+ }
272
+
273
+ /** @internal */
274
+ get asRedirectDateTime(): Date {
275
+ return this.getAsRedirectDateTime();
276
+ }
277
+
278
+ /** @internal */
279
+ get asRedirectDecimal(): number {
280
+ return this.getAsRedirectDecimal();
281
+ }
282
+
283
+ // Public property accessors
284
+ get asValueText(): string | null {
285
+ return this.isNull() ? null : this.getAsNonNullValueText();
286
+ }
287
+
288
+ set asValueText(value: string | null) {
289
+ this.setAsValueText(value);
290
+ }
291
+
292
+ get asObject(): unknown {
293
+ return this.isNull() ? null : this.getAsNonNullObject();
294
+ }
295
+
296
+ set asObject(value: unknown) {
297
+ this.setAsObject(value);
298
+ }
299
+
300
+ get asString(): string | null {
301
+ return this.isNull() ? null : this.getAsNonNullString();
302
+ }
303
+
304
+ set asString(value: string | null) {
305
+ this.setAsString(value);
306
+ }
307
+
308
+ get asBoolean(): boolean {
309
+ return this.getAsBoolean();
310
+ }
311
+
312
+ set asBoolean(value: boolean) {
313
+ this.setAsBoolean(value);
314
+ }
315
+
316
+ get asInteger(): number {
317
+ return this.getAsInteger();
318
+ }
319
+
320
+ set asInteger(value: number) {
321
+ this.setAsInteger(value);
322
+ }
323
+
324
+ get asBigInt(): bigint {
325
+ return this.getAsBigInt();
326
+ }
327
+
328
+ set asBigInt(value: bigint) {
329
+ this.setAsBigInt(value);
330
+ }
331
+
332
+ get asFloat(): number {
333
+ return this.getAsFloat();
334
+ }
335
+
336
+ set asFloat(value: number) {
337
+ this.setAsFloat(value);
338
+ }
339
+
340
+ get asDateTime(): Date {
341
+ return this.getAsDateTime();
342
+ }
343
+
344
+ set asDateTime(value: Date) {
345
+ this.setAsDateTime(value);
346
+ }
347
+
348
+ get asDecimal(): number {
349
+ return this.getAsDecimal();
350
+ }
351
+
352
+ set asDecimal(value: number) {
353
+ this.setAsDecimal(value);
354
+ }
355
+
356
+ // Nullable property accessors
357
+ get asNullableBoolean(): boolean | null {
358
+ return this.isNull() ? null : this.asBoolean;
359
+ }
360
+
361
+ set asNullableBoolean(value: boolean | null) {
362
+ if (value === null) {
363
+ this.setNull();
364
+ } else {
365
+ this.setAsBoolean(value);
366
+ }
367
+ }
368
+
369
+ get asNullableInteger(): number | null {
370
+ return this.isNull() ? null : this.asInteger;
371
+ }
372
+
373
+ set asNullableInteger(value: number | null) {
374
+ if (value === null) {
375
+ this.setNull();
376
+ } else {
377
+ this.setAsInteger(value);
378
+ }
379
+ }
380
+
381
+ get asNullableBigInt(): bigint | null {
382
+ return this.isNull() ? null : this.asBigInt;
383
+ }
384
+
385
+ set asNullableBigInt(value: bigint | null) {
386
+ if (value === null) {
387
+ this.setNull();
388
+ } else {
389
+ this.setAsBigInt(value);
390
+ }
391
+ }
392
+
393
+ get asNullableFloat(): number | null {
394
+ return this.isNull() ? null : this.asFloat;
395
+ }
396
+
397
+ set asNullableFloat(value: number | null) {
398
+ if (value === null) {
399
+ this.setNull();
400
+ } else {
401
+ this.setAsFloat(value);
402
+ }
403
+ }
404
+
405
+ get asNullableDateTime(): Date | null {
406
+ return this.isNull() ? null : this.asDateTime;
407
+ }
408
+
409
+ set asNullableDateTime(value: Date | null) {
410
+ if (value === null) {
411
+ this.setNull();
412
+ } else {
413
+ this.setAsDateTime(value);
414
+ }
415
+ }
416
+
417
+ get asNullableDecimal(): number | null {
418
+ return this.isNull() ? null : this.asDecimal;
419
+ }
420
+
421
+ set asNullableDecimal(value: number | null) {
422
+ if (value === null) {
423
+ this.setNull();
424
+ } else {
425
+ this.setAsDecimal(value);
426
+ }
427
+ }
428
+
429
+ // Null handling
430
+ isNull(): boolean {
431
+ return this._valueIsNull;
432
+ }
433
+
434
+ setNull(): number {
435
+ if (this.constant) {
436
+ throw new Error(`Cannot set constant field "${this.name}" to null`);
437
+ } else {
438
+ this._valueIsNull = true;
439
+ this.valueAssigned = true;
440
+
441
+ return this.checkNullSequenceRedirect(); // returns fieldsAffectedFromIndex
442
+ }
443
+ }
444
+
445
+ loadHeadings(value: string[]): void {
446
+ for (let i = 0; i < value.length; i++) {
447
+ this.loadHeading(i, value[i]);
448
+ }
449
+ }
450
+
451
+ loadHeading(idx: number, headingText: string): void {
452
+ switch (this._definition.headingConstraint) {
453
+ case FtHeadingConstraint.None:
454
+ this._headings[idx] = headingText;
455
+ break;
456
+ case FtHeadingConstraint.AllConstant:
457
+ if (headingText !== this._headings[idx]) {
458
+ throw new Error(`Heading constraint violation: AllConstant at index ${idx} in field ${this.name}`);
459
+ }
460
+ break;
461
+ case FtHeadingConstraint.MainConstant:
462
+ if (idx !== this._definition.mainHeadingIndex) {
463
+ this._headings[idx] = headingText;
464
+ } else {
465
+ if (headingText !== this._headings[idx]) {
466
+ throw new Error(`Heading constraint violation: MainConstant in field ${this.name}`);
467
+ }
468
+ }
469
+ break;
470
+ case FtHeadingConstraint.NameConstant:
471
+ if (idx !== this._definition.mainHeadingIndex) {
472
+ this._headings[idx] = headingText;
473
+ } else {
474
+ if (headingText.toLowerCase() === this._definition.metaName.toLowerCase()) {
475
+ this._headings[idx] = headingText;
476
+ } else {
477
+ throw new Error(`Heading constraint violation: NameConstant in field ${this.name}`);
478
+ }
479
+ }
480
+ break;
481
+ case FtHeadingConstraint.NameIsMain:
482
+ this._headings[idx] = headingText;
483
+ if (idx === this._definition.mainHeadingIndex) {
484
+ this._name = headingText;
485
+ }
486
+ break;
487
+ default:
488
+ throw new FtUnreachableCaseError('FLH30773', this._definition.headingConstraint);
489
+ }
490
+ }
491
+
492
+ /** @internal */
493
+ checkNullSequenceRedirect(): number {
494
+ if (this._sequenceRedirectList.count > 0 && !this._sidelined) {
495
+ let redirected = false;
496
+ for (let i = 0; i < this._sequenceRedirectList.count; i++) {
497
+ const redirect = this._sequenceRedirectList.get(i);
498
+ if (redirect.type === FtSequenceRedirectType.Null) {
499
+ if (redirect.sequence) {
500
+ return this.onSequenceRedirect(redirect.sequence, redirect.invokationDelay); // returns fieldsAffectedFromIndex
501
+ }
502
+ redirected = true;
503
+ break;
504
+ }
505
+ }
506
+
507
+ if (!redirected) {
508
+ // In case was previously redirected
509
+ return this.onSequenceRedirect(undefined, FtField.IGNORED_SEQUENCE_INVOKATION_DELAY); // returns fieldsAffectedFromIndex
510
+ }
511
+ }
512
+
513
+ return FtField.NO_FIELDS_AFFECTED_INDEX;
514
+ }
515
+
516
+ /** @internal */
517
+ resetValue(): void {
518
+ if (!this.constant) {
519
+ this._valueIsNull = true;
520
+ }
521
+ this.valueAssigned = false;
522
+ }
523
+
524
+ // Loading methods (used by parsers)
525
+
526
+ /** @internal */
527
+ loadPosition(position: number, length: number, rawOffset: number, rawLength: number): void {
528
+ this._loadedPosition = position;
529
+ this._loadedLength = length;
530
+ this._loadedRawOffset = rawOffset;
531
+ this._loadedRawLength = rawLength;
532
+ }
533
+
534
+ /** @internal */
535
+ loadDelimitedValue(valueText: string, quoted: boolean): void {
536
+ this._loadedValueText = valueText;
537
+
538
+ try {
539
+ if (quoted) {
540
+ this.loadNonNullValue(valueText);
541
+ } else {
542
+ if (this._valueTextNullTrimmable) {
543
+ valueText = valueText.trim();
544
+ if (valueText.length === 0) {
545
+ this.loadNullValue();
546
+ } else {
547
+ this.loadNonNullValue(valueText);
548
+ }
549
+ } else {
550
+ if (valueText.length !== 0) {
551
+ this.loadNonNullValue(valueText);
552
+ } else {
553
+ switch (this.valueQuotedType) {
554
+ case FtQuotedType.Never:
555
+ case FtQuotedType.Optional:
556
+ this.loadNonNullValue(valueText);
557
+ break;
558
+ case FtQuotedType.Always:
559
+ this.loadNullValue();
560
+ break;
561
+ default:
562
+ throw new FtUnreachableCaseError('FLDV30774', this.valueQuotedType);
563
+ }
564
+ }
565
+ }
566
+ }
567
+ } catch (e) {
568
+ throw new Error(`Error loading delimited value for field ${this.name}: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
569
+ }
570
+ }
571
+
572
+ /** @internal */
573
+ loadFixedWidthValue(valueText: string): void {
574
+ this._loadedValueText = valueText;
575
+ if (valueText === this._definition.fixedWidthNullValueText) {
576
+ this.loadNullValue();
577
+ } else {
578
+ try {
579
+ this.loadNonNullValue(valueText);
580
+ } catch (e) {
581
+ throw new Error(`Error loading fixed-width value for field ${this.name}: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
582
+ }
583
+ }
584
+ }
585
+
586
+ /** @internal */
587
+ loadNullValue(): void {
588
+ if (!this.constant) {
589
+ this._valueIsNull = true;
590
+ this.valueAssigned = true;
591
+ this.checkNullSequenceRedirect();
592
+ } else {
593
+ if (!this._valueIsNull) {
594
+ throw new Error(`Constant field ${this.name} has non-null value but null was loaded`);
595
+ }
596
+ }
597
+ }
598
+
599
+ /**
600
+ * Get the field value as text (for writing). Public accessor for protected method.
601
+ * @internal
602
+ */
603
+ getValueText(): string {
604
+ return this.getAsNonNullValueText();
605
+ }
606
+
607
+ /**
608
+ * Check if the field value has been assigned. Public accessor for protected property.
609
+ * @internal
610
+ */
611
+ isValueAssigned(): boolean {
612
+ return this.valueAssigned;
613
+ }
614
+
615
+ // get dataTypeName(): string {
616
+ // return this._definition.dataTypeName;
617
+ // }
618
+
619
+ protected onSequenceRedirect(sequence: FtSequence | undefined, delay: FtSequenceInvokationDelay): number {
620
+ if (this.sequenceRedirectEvent) {
621
+ return this.sequenceRedirectEvent(this, sequence, delay); // returns fieldsAffectedFromIndex
622
+ } else {
623
+ return FtField.NO_FIELDS_AFFECTED_INDEX;
624
+ }
625
+ }
626
+
627
+ protected clearNonConstantNull(): void {
628
+ this._valueIsNull = false;
629
+ }
630
+
631
+ private setAsNonNullValueText(newValue: string): void {
632
+ try {
633
+ this.loadNonNullValue(newValue);
634
+ } catch (error) {
635
+ const message = error instanceof Error ? error.message : String(error);
636
+ throw new Error(`Failed to set field "${this.name}" value: ${message}`, { cause: error });
637
+ }
638
+ }
639
+
640
+ private setAsValueText(newValue: string | null): void {
641
+ if (newValue === null) {
642
+ this.setNull();
643
+ } else {
644
+ this.setAsNonNullValueText(newValue);
645
+ }
646
+ }
647
+
648
+ private setAsObject(newValue: unknown): void {
649
+ if (newValue === null || newValue === undefined) {
650
+ this.setNull();
651
+ } else {
652
+ this.setAsNonNullObject(newValue);
653
+ }
654
+ }
655
+
656
+ private setAsString(newValue: string | null): void {
657
+ if (newValue === null) {
658
+ this.setNull();
659
+ } else {
660
+ this.setAsNonNullString(newValue);
661
+ }
662
+ }
663
+
664
+ // Abstract methods for subclasses
665
+ protected abstract getAsNonNullValueText(): string;
666
+ protected abstract loadNonNullValue(valueText: string): void;
667
+
668
+ protected abstract getAsNonNullObject(): unknown;
669
+ protected abstract getAsNonNullString(): string;
670
+ protected abstract getAsBoolean(): boolean;
671
+ protected abstract getAsInteger(): number;
672
+ protected abstract getAsBigInt(): bigint;
673
+ protected abstract getAsFloat(): number;
674
+ protected abstract getAsDateTime(): Date;
675
+ protected abstract getAsDecimal(): number;
676
+
677
+ protected abstract setAsNonNullObject(newValue: unknown): void;
678
+ protected abstract setAsNonNullString(newValue: string): void;
679
+ protected abstract setAsBoolean(newValue: boolean): void;
680
+ protected abstract setAsInteger(newValue: number): void;
681
+ protected abstract setAsBigInt(newValue: bigint): void;
682
+ protected abstract setAsFloat(newValue: number): void;
683
+ protected abstract setAsDateTime(newValue: Date): void;
684
+ protected abstract setAsDecimal(newValue: number): void;
685
+
686
+ protected abstract getAsRedirectBoolean(): boolean;
687
+ protected abstract getAsRedirectInteger(): bigint;
688
+ protected abstract getAsRedirectFloat(): number;
689
+ protected abstract getAsRedirectDateTime(): Date;
690
+ protected abstract getAsRedirectDecimal(): number;
691
+ }