@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,106 @@
1
+ import { FtMeta } from '../meta/ft-meta.js';
2
+ import { FtSerializationReader } from '../serialization/ft-serialization-reader.js';
3
+ import { FtStringReader, FtTextReader } from '../serialization/ft-text-reader.js';
4
+
5
+ /**
6
+ * High-level reader for fielded text files.
7
+ * Provides a convenient API for reading CSV and other delimited/fixed-width text.
8
+ * This is a thin wrapper around SerializationReader with simpler constructors.
9
+ * @public
10
+ */
11
+ export class FtReader extends FtSerializationReader {
12
+ /**
13
+ * Create a reader with or without metadata.
14
+ * If metadata is provided, it will be loaded immediately. If not, you must call loadMeta() before reading.
15
+ * You must call open() before reading.
16
+ * @param meta - The metadata defining the file structure
17
+ */
18
+ constructor(meta?: FtMeta);
19
+
20
+ /**
21
+ * Create a reader with metadata and input text.
22
+ * You must call open() before reading.
23
+ * @param meta - The metadata defining the file structure
24
+ * @param input - The text content to read
25
+ * @param immediatelyReadHeader - Whether to automatically read header lines (default: true)
26
+ */
27
+ // eslint-disable-next-line @typescript-eslint/unified-signatures
28
+ constructor(meta: FtMeta, input: string, immediatelyReadHeader?: boolean);
29
+
30
+ /**
31
+ * Create a reader with metadata and a TextReader.
32
+ * @param meta - The metadata defining the file structure
33
+ * @param textReader - The TextReader to read from
34
+ * @param immediatelyReadHeader - Whether to automatically read header lines (default: true)
35
+ */
36
+ // eslint-disable-next-line @typescript-eslint/unified-signatures
37
+ constructor(meta: FtMeta, textReader: FtTextReader, immediatelyReadHeader?: boolean);
38
+
39
+ /**
40
+ * Create a reader with input text but no metadata.
41
+ * You must call loadMeta() before reading.
42
+ * @param input - The text content to read
43
+ * @param immediatelyReadHeader - Whether to automatically read header lines (default: true)
44
+ */
45
+ constructor(input: string, immediatelyReadHeader?: boolean);
46
+
47
+ /**
48
+ * Create a reader with a TextReader but no metadata.
49
+ * You must call loadMeta() before reading.
50
+ * @param textReader - The TextReader to read from
51
+ * @param immediatelyReadHeader - Whether to automatically read header lines (default: true)
52
+ */
53
+ constructor(textReader: FtTextReader, immediatelyReadHeader?: boolean);
54
+
55
+ constructor(
56
+ metaOrInputOrTextReader?: FtMeta | string | FtTextReader,
57
+ inputOrTextReaderOrImmediatelyReadHeader?: string | FtTextReader | boolean,
58
+ immediatelyReadHeader = true,
59
+ ) {
60
+ super();
61
+
62
+ if (metaOrInputOrTextReader instanceof FtMeta) {
63
+ // Constructor with meta
64
+ this.loadMeta(metaOrInputOrTextReader);
65
+
66
+ if (typeof inputOrTextReaderOrImmediatelyReadHeader === 'string') {
67
+ // FtReader(meta, input, immediatelyReadHeader)
68
+ this.open(inputOrTextReaderOrImmediatelyReadHeader, immediatelyReadHeader);
69
+ } else if (
70
+ inputOrTextReaderOrImmediatelyReadHeader &&
71
+ typeof inputOrTextReaderOrImmediatelyReadHeader === 'object' &&
72
+ 'read' in inputOrTextReaderOrImmediatelyReadHeader
73
+ ) {
74
+ // FtReader(meta, textReader, immediatelyReadHeader)
75
+ this.open(inputOrTextReaderOrImmediatelyReadHeader, immediatelyReadHeader);
76
+ } else {
77
+ // FtReader(meta) - just reset, no open
78
+ this.reset();
79
+ }
80
+ } else if (typeof metaOrInputOrTextReader === 'string') {
81
+ // FtReader(input, immediatelyReadHeader)
82
+ const shouldReadHeader = typeof inputOrTextReaderOrImmediatelyReadHeader === 'boolean' ? inputOrTextReaderOrImmediatelyReadHeader : true;
83
+ this.open(metaOrInputOrTextReader, shouldReadHeader);
84
+ } else if (metaOrInputOrTextReader && typeof metaOrInputOrTextReader === 'object' && 'read' in metaOrInputOrTextReader) {
85
+ // FtReader(textReader, immediatelyReadHeader)
86
+ const shouldReadHeader = typeof inputOrTextReaderOrImmediatelyReadHeader === 'boolean' ? inputOrTextReaderOrImmediatelyReadHeader : true;
87
+ this.open(metaOrInputOrTextReader, shouldReadHeader);
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Open the reader with a text string.
93
+ * @param textReaderOrText - Text reader or string providing the data to read
94
+ * @param immediatelyReadHeader - Whether to automatically read header lines (default: true)
95
+ */
96
+ override open(textReaderOrText: FtTextReader | string, immediatelyReadHeader = true): void {
97
+ let textReader: FtTextReader;
98
+ if (typeof textReaderOrText === 'string') {
99
+ // String input - create StringReader
100
+ textReader = new FtStringReader(textReaderOrText);
101
+ } else {
102
+ textReader = textReaderOrText;
103
+ }
104
+ super.open(textReader, immediatelyReadHeader);
105
+ }
106
+ }
@@ -0,0 +1,216 @@
1
+ import { FtFieldDefinitionList } from '../fields/definitions/ft-field-definition-list.js';
2
+ import { FtFieldList } from '../fields/instances/ft-field-list.js';
3
+ import { FtMeta } from '../meta/ft-meta.js';
4
+ import { FtSequenceInvokationList } from '../sequences/core/ft-sequence-invokation-list.js';
5
+ import { FtSequenceInvokation } from '../sequences/core/ft-sequence-invokation.js';
6
+ import { FtSequenceList } from '../sequences/core/ft-sequence-list.js';
7
+ import { FtSequence } from '../sequences/core/ft-sequence.js';
8
+ import { FtTextWriter } from '../serialization/ft-text-writer.js';
9
+ import { SerializationCore } from '../serialization/serialization-core.js';
10
+ import { FtSubstitutionList } from '../substitutions/ft-substitution-list.js';
11
+ import { FtFieldHeadingReadyEventArgs } from '../types/events/ft-field-heading-ready-event-args.js';
12
+ import { FtFieldValueReadyEventArgs } from '../types/events/ft-field-value-ready-event-args.js';
13
+ import { FtHeadingLineFinishedEventArgs } from '../types/events/ft-heading-line-finished-event-args.js';
14
+ import { FtHeadingLineStartedEventArgs } from '../types/events/ft-heading-line-started-event-args.js';
15
+ import { FtRecordFinishedEventArgs } from '../types/events/ft-record-finished-event-args.js';
16
+ import { FtRecordStartedEventArgs } from '../types/events/ft-record-started-event-args.js';
17
+ import { FtSequenceRedirectedEventArgs } from '../types/events/ft-sequence-redirected-event-args.js';
18
+ import { FtReader } from './ft-reader.js';
19
+ import { FtWriterSettings } from './ft-writer-settings.js';
20
+ import { FtWriter } from './ft-writer.js';
21
+
22
+ /**
23
+ * Exception thrown to abort serialization from an event handler.
24
+ * @public
25
+ */
26
+ export class FtAbortSerializationException extends Error {
27
+ constructor(message?: string) {
28
+ super(message || 'Serialization aborted');
29
+ this.name = 'FtAbortSerializationException';
30
+ }
31
+ }
32
+
33
+ /**
34
+ * High-level API for event-driven serialization and deserialization of fielded text.
35
+ * Simplifies reading and writing by hooking into field and record events.
36
+ * @public
37
+ */
38
+ export class FtSerialization {
39
+ static readonly VERSION_MAJOR = SerializationCore.VersionMajor;
40
+ static readonly VERSION_MINOR = SerializationCore.VersionMinor;
41
+ static readonly PREFIX_SPACE_CHAR = SerializationCore.PrefixSpaceChar;
42
+
43
+ // Event hooks
44
+ onFieldHeadingReadReady: ((args: FtFieldHeadingReadyEventArgs) => void) | undefined = undefined;
45
+ onFieldHeadingWriteReady: ((args: FtFieldHeadingReadyEventArgs) => void) | undefined = undefined;
46
+ onFieldValueReadReady: ((args: FtFieldValueReadyEventArgs) => void) | undefined = undefined;
47
+ onFieldValueWriteReady: ((args: FtFieldValueReadyEventArgs) => void) | undefined = undefined;
48
+ onHeadingLineStarted: ((args: FtHeadingLineStartedEventArgs) => void) | undefined = undefined;
49
+ onHeadingLineFinished: ((args: FtHeadingLineFinishedEventArgs) => void) | undefined = undefined;
50
+ onRecordStarted: ((args: FtRecordStartedEventArgs) => void) | undefined = undefined;
51
+ onRecordFinished: ((args: FtRecordFinishedEventArgs) => void) | undefined = undefined;
52
+ onSequenceRedirected: ((args: FtSequenceRedirectedEventArgs) => void) | undefined = undefined;
53
+
54
+ private _meta: FtMeta;
55
+ private _core: SerializationCore | undefined = undefined;
56
+
57
+ constructor(meta: FtMeta) {
58
+ this._meta = meta;
59
+ }
60
+
61
+ // Proxied properties from core
62
+ get fieldDefinitionList(): FtFieldDefinitionList | undefined {
63
+ return this._core?.fieldDefinitionList;
64
+ }
65
+
66
+ get fieldList(): FtFieldList | undefined {
67
+ return this._core?.fieldList;
68
+ }
69
+
70
+ get substitutionList(): FtSubstitutionList | undefined {
71
+ return this._core?.substitutionList;
72
+ }
73
+
74
+ get sequenceList(): FtSequenceList | undefined {
75
+ return this._core?.sequenceList;
76
+ }
77
+
78
+ get sequenceInvokationList(): FtSequenceInvokationList | undefined {
79
+ return this._core?.sequenceInvokationList;
80
+ }
81
+
82
+ get rootSequence(): FtSequence | undefined {
83
+ return this._core?.rootSequence;
84
+ }
85
+
86
+ get rootFieldCount(): number {
87
+ return this._core?.rootFieldCount || 0;
88
+ }
89
+
90
+ get rootSequenceInvokation(): FtSequenceInvokation | undefined {
91
+ return this._core?.rootSequenceInvokation;
92
+ }
93
+
94
+ get recordCount(): number {
95
+ return this._core?.recordCount || 0;
96
+ }
97
+
98
+ get tableCount(): number {
99
+ return this._core?.tableCount || 0;
100
+ }
101
+
102
+ /**
103
+ * Read all records from a reader, invoking events for each field and record.
104
+ * @param reader - The reader to deserialize from
105
+ */
106
+ deserialize(reader: FtReader): void;
107
+
108
+ /**
109
+ * Read all records from text input, invoking events for each field and record.
110
+ * @param input - The text content to deserialize
111
+ */
112
+ deserialize(input: string): void;
113
+
114
+ deserialize(readerOrInput: FtReader | string): void {
115
+ const reader = typeof readerOrInput === 'string' ? new FtReader(this._meta, readerOrInput) : readerOrInput;
116
+
117
+ this.setCore(reader);
118
+
119
+ while (reader.read()) {
120
+ // Events are fired during read()
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Write records until aborted by throwing FtAbortSerializationException from an event handler.
126
+ * @param writer - The writer to serialize to
127
+ */
128
+ serialize(writer: FtWriter): void;
129
+
130
+ /**
131
+ * Write records until aborted by throwing FtAbortSerializationException from an event handler.
132
+ * @param output - The TextWriter to serialize to
133
+ * @param settings - Optional writer settings
134
+ */
135
+ serialize(output: FtTextWriter, settings?: FtWriterSettings): void;
136
+
137
+ serialize(writerOrOutput: FtWriter | FtTextWriter, settings?: FtWriterSettings): void {
138
+ const writer = writerOrOutput instanceof FtWriter ? writerOrOutput : new FtWriter(this._meta, writerOrOutput, settings);
139
+
140
+ this.setCore(writer);
141
+
142
+ try {
143
+ while (true) {
144
+ writer.write();
145
+ // The only way out is to throw FtAbortSerializationException in an event handler
146
+ }
147
+ } catch (e) {
148
+ if (e instanceof FtAbortSerializationException) {
149
+ // Normal exit
150
+ } else {
151
+ throw e;
152
+ }
153
+ } finally {
154
+ writer.close();
155
+ }
156
+ }
157
+
158
+ private setCore(core: SerializationCore): void {
159
+ this._core = core;
160
+
161
+ // Wire up event handlers
162
+ core.onFieldHeadingReadReady = (args) => {
163
+ if (this.onFieldHeadingReadReady) {
164
+ this.onFieldHeadingReadReady(args);
165
+ }
166
+ };
167
+
168
+ core.onFieldHeadingWriteReady = (args) => {
169
+ if (this.onFieldHeadingWriteReady) {
170
+ this.onFieldHeadingWriteReady(args);
171
+ }
172
+ };
173
+
174
+ core.onFieldValueReadReady = (args) => {
175
+ if (this.onFieldValueReadReady) {
176
+ this.onFieldValueReadReady(args);
177
+ }
178
+ };
179
+
180
+ core.onFieldValueWriteReady = (args) => {
181
+ if (this.onFieldValueWriteReady) {
182
+ this.onFieldValueWriteReady(args);
183
+ }
184
+ };
185
+
186
+ core.onHeadingLineStarted = (args) => {
187
+ if (this.onHeadingLineStarted) {
188
+ this.onHeadingLineStarted(args);
189
+ }
190
+ };
191
+
192
+ core.onHeadingLineFinished = (args) => {
193
+ if (this.onHeadingLineFinished) {
194
+ this.onHeadingLineFinished(args);
195
+ }
196
+ };
197
+
198
+ core.onRecordStarted = (args) => {
199
+ if (this.onRecordStarted) {
200
+ this.onRecordStarted(args);
201
+ }
202
+ };
203
+
204
+ core.onRecordFinished = (args) => {
205
+ if (this.onRecordFinished) {
206
+ this.onRecordFinished(args);
207
+ }
208
+ };
209
+
210
+ core.onSequenceRedirected = (args) => {
211
+ if (this.onSequenceRedirected) {
212
+ this.onSequenceRedirected(args);
213
+ }
214
+ };
215
+ }
216
+ }
@@ -0,0 +1,76 @@
1
+ import { FtMetaSerializerOptions } from '../meta-serialization/format/meta-serializer-options.js';
2
+ import { FtMetaReferenceType } from '../types/enums/ft-meta-reference-type.js';
3
+ import { FtMetaSerializationFormat } from '../types/enums/ft-meta-serialization-format.js';
4
+
5
+ /**
6
+ * Settings for writing fielded text streams.
7
+ * @public
8
+ */
9
+ export interface FtWriterSettings {
10
+ /**
11
+ * Whether to write the |!Fielded Text^| declaration header.
12
+ */
13
+ declared?: boolean;
14
+
15
+ /**
16
+ * Type of meta reference to write.
17
+ */
18
+ metaReferenceType?: FtMetaReferenceType;
19
+
20
+ /**
21
+ * Meta reference (file path or URL).
22
+ */
23
+ metaReference?: string;
24
+
25
+ /**
26
+ * Format of embedded meta to write.
27
+ */
28
+ embeddedMetaFormat?: FtMetaSerializationFormat;
29
+
30
+ /**
31
+ * Whether to include explicit index attributes for fields in embedded meta.
32
+ */
33
+ embeddedMetaExplicitIndices?: boolean;
34
+
35
+ /**
36
+ * Whether to indent embedded XML metadata.
37
+ */
38
+ embeddedMetaIndent?: boolean;
39
+
40
+ /**
41
+ * Characters to use for indenting embedded XML metadata.
42
+ */
43
+ embeddedMetaIndentChars?: string;
44
+
45
+ /**
46
+ * Whether to write XML attributes on separate lines.
47
+ */
48
+ embeddedMetaNewLineOnAttributes?: boolean;
49
+ }
50
+
51
+ /** @public */
52
+ export namespace FtWriterSettings {
53
+ export const DEFAULT_DECLARED = false;
54
+ export const DEFAULT_META_REFERENCE_TYPE = FtMetaReferenceType.None;
55
+ export const DEFAULT_META_REFERENCE = '';
56
+ export const DEFAULT_EMBEDDED_META_FORMAT = FtMetaSerializationFormat.XML;
57
+ export const DEFAULT_EMBEDDED_META_EXPLICIT_INDICES = FtMetaSerializerOptions.DEFAULT_EXPLICIT_INDICES;
58
+ export const DEFAULT_EMBEDDED_META_INDENT = FtMetaSerializerOptions.DEFAULT_INDENT;
59
+ export const DEFAULT_EMBEDDED_META_INDENT_CHARS = FtMetaSerializerOptions.DEFAULT_INDENT_CHARS;
60
+ export const DEFAULT_EMBEDDED_META_NEW_LINE_ON_ATTRIBUTES = FtMetaSerializerOptions.DEFAULT_NEW_LINE_ON_ATTRIBUTES;
61
+
62
+ export function loadMetaSerializerOptions(settings: FtWriterSettings, options: Partial<FtMetaSerializerOptions>): void {
63
+ if (options.explicitIndices !== undefined) {
64
+ settings.embeddedMetaExplicitIndices = options.explicitIndices;
65
+ }
66
+ if (options.indent !== undefined) {
67
+ settings.embeddedMetaIndent = options.indent;
68
+ }
69
+ if (options.indentChars !== undefined) {
70
+ settings.embeddedMetaIndentChars = options.indentChars;
71
+ }
72
+ if (options.newLineOnAttributes !== undefined) {
73
+ settings.embeddedMetaNewLineOnAttributes = options.newLineOnAttributes;
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,26 @@
1
+ import { FtMeta } from '../meta/ft-meta.js';
2
+ import { FtSerializationWriter } from '../serialization/ft-serialization-writer.js';
3
+ import { FtTextWriter } from '../serialization/ft-text-writer.js';
4
+ import { FtWriterSettings } from './ft-writer-settings.js';
5
+
6
+ /**
7
+ * High-level writer for fielded text files.
8
+ * Provides a convenient API for writing CSV and other delimited/fixed-width text.
9
+ * This is a thin wrapper around SerializationWriter with simpler constructors.
10
+ * @public
11
+ */
12
+ export class FtWriter extends FtSerializationWriter {
13
+ /**
14
+ * Create a writer with metadata and output writer.
15
+ * @param meta - The metadata defining the file structure
16
+ * @param textWriter - The FtTextWriter to write to. If not provided, FtWriter will be created but not opened (you must call open() before writing).
17
+ * @param settings - Optional writer settings
18
+ */
19
+ constructor(meta: FtMeta, textWriter?: FtTextWriter, settings?: FtWriterSettings) {
20
+ super(meta);
21
+
22
+ if (textWriter) {
23
+ this.open(textWriter, settings);
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,94 @@
1
+ import { FtBooleanFieldDefinition } from '../fields/definitions/ft-boolean-field-definition.js';
2
+ import { FtDateTimeFieldDefinition } from '../fields/definitions/ft-date-time-field-definition.js';
3
+ import { FtDecimalFieldDefinition } from '../fields/definitions/ft-decimal-field-definition.js';
4
+ import { FtFieldDefinition } from '../fields/definitions/ft-field-definition.js';
5
+ import { FtFloatFieldDefinition } from '../fields/definitions/ft-float-field-definition.js';
6
+ import { FtIntegerFieldDefinition } from '../fields/definitions/ft-integer-field-definition.js';
7
+ import { FtStringFieldDefinition } from '../fields/definitions/ft-string-field-definition.js';
8
+ import { FtBooleanField } from '../fields/instances/ft-boolean-field.js';
9
+ import { FtDateTimeField } from '../fields/instances/ft-date-time-field.js';
10
+ import { FtDecimalField } from '../fields/instances/ft-decimal-field.js';
11
+ import { FtField } from '../fields/instances/ft-field.js';
12
+ import { FtFloatField } from '../fields/instances/ft-float-field.js';
13
+ import { FtIntegerField } from '../fields/instances/ft-integer-field.js';
14
+ import { FtStringField } from '../fields/instances/ft-string-field.js';
15
+ import { FtBooleanMetaField } from '../meta/fields/ft-boolean-meta-field.js';
16
+ import { FtDateTimeMetaField } from '../meta/fields/ft-date-time-meta-field.js';
17
+ import { FtDecimalMetaField } from '../meta/fields/ft-decimal-meta-field.js';
18
+ import { FtFloatMetaField } from '../meta/fields/ft-float-meta-field.js';
19
+ import { FtIntegerMetaField } from '../meta/fields/ft-integer-meta-field.js';
20
+ import type { FtMetaField } from '../meta/fields/ft-meta-field.js';
21
+ import { FtStringMetaField } from '../meta/fields/ft-string-meta-field.js';
22
+ import { FtSequenceInvokation } from '../sequences/core/ft-sequence-invokation.js';
23
+ import { FtSequenceItem } from '../sequences/core/ft-sequence-item.js';
24
+ import { FtDataType } from '../types/enums/ft-data-type.js';
25
+ import { FtUnreachableCaseError } from '../types/errors/ft-internal-error.js';
26
+
27
+ /**
28
+ * Factory for creating field instances based on their definitions.
29
+ * @public
30
+ */
31
+ export class FtFieldFactory {
32
+ static createFieldDefinition(dataType: FtDataType, index: number): FtFieldDefinition {
33
+ switch (dataType) {
34
+ case FtDataType.String:
35
+ return new FtStringFieldDefinition(index);
36
+ case FtDataType.Boolean:
37
+ return new FtBooleanFieldDefinition(index);
38
+ case FtDataType.Integer:
39
+ return new FtIntegerFieldDefinition(index);
40
+ case FtDataType.Float:
41
+ return new FtFloatFieldDefinition(index);
42
+ case FtDataType.Decimal:
43
+ return new FtDecimalFieldDefinition(index);
44
+ case FtDataType.DateTime:
45
+ return new FtDateTimeFieldDefinition(index);
46
+ default:
47
+ throw new FtUnreachableCaseError('FFCFD34499', dataType);
48
+ }
49
+ }
50
+
51
+ static createField(sequenceInvokation: FtSequenceInvokation, sequenceItem: FtSequenceItem): FtField {
52
+ const definition = sequenceItem.fieldDefinition;
53
+ if (!definition) {
54
+ throw new Error('SequenceItem must have a field definition');
55
+ }
56
+
57
+ // Create field based on data type
58
+ switch (definition.dataType) {
59
+ case FtDataType.String:
60
+ return new FtStringField(sequenceInvokation, sequenceItem, definition as FtStringFieldDefinition);
61
+ case FtDataType.Boolean:
62
+ return new FtBooleanField(sequenceInvokation, sequenceItem, definition as FtBooleanFieldDefinition);
63
+ case FtDataType.Integer:
64
+ return new FtIntegerField(sequenceInvokation, sequenceItem, definition as FtIntegerFieldDefinition);
65
+ case FtDataType.Float:
66
+ return new FtFloatField(sequenceInvokation, sequenceItem, definition as FtFloatFieldDefinition);
67
+ case FtDataType.Decimal:
68
+ return new FtDecimalField(sequenceInvokation, sequenceItem, definition as FtDecimalFieldDefinition);
69
+ case FtDataType.DateTime:
70
+ return new FtDateTimeField(sequenceInvokation, sequenceItem, definition as FtDateTimeFieldDefinition);
71
+ default:
72
+ throw new FtUnreachableCaseError('FFCFD34499', definition.dataType);
73
+ }
74
+ }
75
+
76
+ static createMetaField(dataType: FtDataType, headingCount: number): FtMetaField {
77
+ switch (dataType) {
78
+ case FtDataType.String:
79
+ return new FtStringMetaField(headingCount);
80
+ case FtDataType.Boolean:
81
+ return new FtBooleanMetaField(headingCount);
82
+ case FtDataType.Integer:
83
+ return new FtIntegerMetaField(headingCount);
84
+ case FtDataType.Float:
85
+ return new FtFloatMetaField(headingCount);
86
+ case FtDataType.Decimal:
87
+ return new FtDecimalMetaField(headingCount);
88
+ case FtDataType.DateTime:
89
+ return new FtDateTimeMetaField(headingCount);
90
+ default:
91
+ throw new FtUnreachableCaseError('FFCMF34499', dataType);
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,16 @@
1
+ import { FtMeta } from '../meta/ft-meta.js';
2
+
3
+ /**
4
+ * Base constructor class for creating FtMeta instances.
5
+ * Can be extended to provide custom meta creation logic.
6
+ * @public
7
+ */
8
+ export class FtMetaConstructor {
9
+ /**
10
+ * Create a new FtMeta instance.
11
+ * Override this method in derived classes to provide custom initialization.
12
+ */
13
+ createMeta(): FtMeta {
14
+ return new FtMeta();
15
+ }
16
+ }
@@ -0,0 +1,34 @@
1
+ import { FtMeta } from '../meta/ft-meta.js';
2
+ import { FtMetaConstructor } from './ft-meta-constructor.js';
3
+
4
+ /**
5
+ * Factory for creating FtMeta instances.
6
+ * Provides a global constructor that can be replaced to customize meta creation.
7
+ * @public
8
+ */
9
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
10
+ export class FtMetaFactory {
11
+ private static _constructor: FtMetaConstructor = new FtMetaConstructor();
12
+
13
+ /**
14
+ * Get the current meta constructor.
15
+ */
16
+ static getConstructor(): FtMetaConstructor {
17
+ return FtMetaFactory._constructor;
18
+ }
19
+
20
+ /**
21
+ * Set a custom meta constructor.
22
+ * Use this to provide custom initialization logic for all meta instances.
23
+ */
24
+ static setConstructor(value: FtMetaConstructor): void {
25
+ FtMetaFactory._constructor = value;
26
+ }
27
+
28
+ /**
29
+ * Create a new FtMeta instance using the current constructor.
30
+ */
31
+ static createMeta(): FtMeta {
32
+ return FtMetaFactory._constructor.createMeta();
33
+ }
34
+ }
@@ -0,0 +1,11 @@
1
+ import { FtSequence } from '../sequences/core/ft-sequence.js';
2
+
3
+ /**
4
+ * Constructor for creating sequence instances.
5
+ * @public
6
+ */
7
+ export class FtSequenceConstructor {
8
+ createSequence(index: number): FtSequence {
9
+ return new FtSequence(index);
10
+ }
11
+ }
@@ -0,0 +1,22 @@
1
+ import { FtSequence } from '../sequences/core/ft-sequence.js';
2
+ import { FtSequenceConstructor } from './ft-sequence-constructor.js';
3
+
4
+ /**
5
+ * Factory for creating sequences.
6
+ * @public
7
+ */
8
+ export class FtSequenceFactory {
9
+ private static _constructor: FtSequenceConstructor = new FtSequenceConstructor();
10
+
11
+ static getConstructor(): FtSequenceConstructor {
12
+ return FtSequenceFactory._constructor;
13
+ }
14
+
15
+ static setConstructor(value: FtSequenceConstructor): void {
16
+ FtSequenceFactory._constructor = value;
17
+ }
18
+
19
+ static createSequence(index: number): FtSequence {
20
+ return FtSequenceFactory._constructor.createSequence(index);
21
+ }
22
+ }
@@ -0,0 +1,11 @@
1
+ import { FtSequenceItem } from '../sequences/core/ft-sequence-item.js';
2
+
3
+ /**
4
+ * Constructor for creating sequence item instances.
5
+ * @public
6
+ */
7
+ export class FtSequenceItemConstructor {
8
+ createSequenceItem(index: number): FtSequenceItem {
9
+ return new FtSequenceItem(index);
10
+ }
11
+ }
@@ -0,0 +1,22 @@
1
+ import { FtSequenceItem } from '../sequences/core/ft-sequence-item.js';
2
+ import { FtSequenceItemConstructor } from './ft-sequence-item-constructor.js';
3
+
4
+ /**
5
+ * Factory for creating sequence items.
6
+ * @public
7
+ */
8
+ export class FtSequenceItemFactory {
9
+ private static _constructor: FtSequenceItemConstructor = new FtSequenceItemConstructor();
10
+
11
+ static getConstructor(): FtSequenceItemConstructor {
12
+ return FtSequenceItemFactory._constructor;
13
+ }
14
+
15
+ static setConstructor(value: FtSequenceItemConstructor): void {
16
+ FtSequenceItemFactory._constructor = value;
17
+ }
18
+
19
+ static createSequenceItem(index: number): FtSequenceItem {
20
+ return FtSequenceItemFactory._constructor.createSequenceItem(index);
21
+ }
22
+ }
@@ -0,0 +1,19 @@
1
+ import { FtSequenceRedirect } from '../sequences/redirects/ft-sequence-redirect.js';
2
+ import { FtSequenceRedirectType } from '../types/enums/ft-sequence-redirect-type.js';
3
+
4
+ /**
5
+ * Abstract base class for sequence redirect constructors.
6
+ * @public
7
+ */
8
+ export abstract class FtSequenceRedirectConstructor {
9
+ get sequenceRedirectType(): FtSequenceRedirectType {
10
+ return this.getSequenceRedirectType();
11
+ }
12
+
13
+ get sequenceRedirectTypeName(): string {
14
+ return this.sequenceRedirectType;
15
+ }
16
+
17
+ abstract createSequenceRedirect(index: number): FtSequenceRedirect;
18
+ protected abstract getSequenceRedirectType(): FtSequenceRedirectType;
19
+ }