@aidc-toolkit/gs1 1.0.25-beta → 1.0.26-beta

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 (234) hide show
  1. package/dist/abstract-identifier-creator.d.ts +75 -0
  2. package/dist/abstract-identifier-creator.d.ts.map +1 -0
  3. package/dist/abstract-identifier-creator.js +56 -0
  4. package/dist/abstract-identifier-creator.js.map +1 -0
  5. package/dist/abstract-identifier-validator.d.ts +95 -0
  6. package/dist/abstract-identifier-validator.d.ts.map +1 -0
  7. package/dist/abstract-identifier-validator.js +123 -0
  8. package/dist/abstract-identifier-validator.js.map +1 -0
  9. package/dist/abstract-numeric-identifier-creator.d.ts +92 -0
  10. package/dist/abstract-numeric-identifier-creator.d.ts.map +1 -0
  11. package/dist/abstract-numeric-identifier-creator.js +137 -0
  12. package/dist/abstract-numeric-identifier-creator.js.map +1 -0
  13. package/dist/abstract-numeric-identifier-validator.d.ts +35 -0
  14. package/dist/abstract-numeric-identifier-validator.d.ts.map +1 -0
  15. package/dist/abstract-numeric-identifier-validator.js +61 -0
  16. package/dist/abstract-numeric-identifier-validator.js.map +1 -0
  17. package/dist/character-set.d.ts +27 -0
  18. package/dist/character-set.d.ts.map +1 -0
  19. package/dist/character-set.js +50 -0
  20. package/dist/character-set.js.map +1 -0
  21. package/dist/check.d.ts +81 -0
  22. package/dist/check.d.ts.map +1 -0
  23. package/dist/check.js +218 -0
  24. package/dist/check.js.map +1 -0
  25. package/dist/content-character-set.d.ts +26 -0
  26. package/dist/content-character-set.d.ts.map +1 -0
  27. package/dist/content-character-set.js +18 -0
  28. package/dist/content-character-set.js.map +1 -0
  29. package/dist/creators.d.ts +81 -0
  30. package/dist/creators.d.ts.map +1 -0
  31. package/dist/creators.js +62 -0
  32. package/dist/creators.js.map +1 -0
  33. package/dist/descriptors.d.ts +96 -0
  34. package/dist/descriptors.d.ts.map +1 -0
  35. package/dist/descriptors.js +266 -0
  36. package/dist/descriptors.js.map +1 -0
  37. package/dist/gtin-creator.d.ts +69 -0
  38. package/dist/gtin-creator.d.ts.map +1 -0
  39. package/dist/gtin-creator.js +159 -0
  40. package/dist/gtin-creator.js.map +1 -0
  41. package/dist/gtin-descriptor.d.ts +17 -0
  42. package/dist/gtin-descriptor.d.ts.map +1 -0
  43. package/dist/gtin-descriptor.js +2 -0
  44. package/dist/gtin-descriptor.js.map +1 -0
  45. package/dist/gtin-type.d.ts +39 -0
  46. package/dist/gtin-type.d.ts.map +1 -0
  47. package/dist/gtin-type.js +31 -0
  48. package/dist/gtin-type.js.map +1 -0
  49. package/dist/gtin-validator.d.ts +191 -0
  50. package/dist/gtin-validator.d.ts.map +1 -0
  51. package/dist/gtin-validator.js +450 -0
  52. package/dist/gtin-validator.js.map +1 -0
  53. package/dist/identifier-creator.d.ts +31 -0
  54. package/dist/identifier-creator.d.ts.map +1 -0
  55. package/dist/identifier-creator.js +2 -0
  56. package/dist/identifier-creator.js.map +1 -0
  57. package/dist/identifier-descriptor.d.ts +27 -0
  58. package/dist/identifier-descriptor.d.ts.map +1 -0
  59. package/dist/identifier-descriptor.js +2 -0
  60. package/dist/identifier-descriptor.js.map +1 -0
  61. package/dist/identifier-type.d.ts +62 -0
  62. package/dist/identifier-type.d.ts.map +1 -0
  63. package/dist/identifier-type.js +54 -0
  64. package/dist/identifier-type.js.map +1 -0
  65. package/dist/identifier-validator.d.ts +53 -0
  66. package/dist/identifier-validator.d.ts.map +1 -0
  67. package/dist/identifier-validator.js +2 -0
  68. package/dist/identifier-validator.js.map +1 -0
  69. package/dist/index.d.ts +52 -1949
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +21 -4727
  72. package/dist/index.js.map +1 -1
  73. package/dist/locale/en/locale-resources.d.ts +42 -0
  74. package/dist/locale/en/locale-resources.d.ts.map +1 -0
  75. package/dist/locale/en/locale-resources.js +41 -0
  76. package/dist/locale/en/locale-resources.js.map +1 -0
  77. package/dist/locale/fr/locale-resources.d.ts +42 -0
  78. package/dist/locale/fr/locale-resources.d.ts.map +1 -0
  79. package/dist/locale/fr/locale-resources.js +41 -0
  80. package/dist/locale/fr/locale-resources.js.map +1 -0
  81. package/dist/locale/i18n.d.ts +27 -0
  82. package/dist/locale/i18n.d.ts.map +1 -0
  83. package/dist/locale/i18n.js +36 -0
  84. package/dist/locale/i18n.js.map +1 -0
  85. package/dist/non-gtin-numeric-identifier-creator.d.ts +24 -0
  86. package/dist/non-gtin-numeric-identifier-creator.d.ts.map +1 -0
  87. package/dist/non-gtin-numeric-identifier-creator.js +23 -0
  88. package/dist/non-gtin-numeric-identifier-creator.js.map +1 -0
  89. package/dist/non-gtin-numeric-identifier-descriptor.d.ts +22 -0
  90. package/dist/non-gtin-numeric-identifier-descriptor.d.ts.map +1 -0
  91. package/dist/non-gtin-numeric-identifier-descriptor.js +2 -0
  92. package/dist/non-gtin-numeric-identifier-descriptor.js.map +1 -0
  93. package/dist/non-gtin-numeric-identifier-type.d.ts +7 -0
  94. package/dist/non-gtin-numeric-identifier-type.d.ts.map +1 -0
  95. package/dist/non-gtin-numeric-identifier-type.js +2 -0
  96. package/dist/non-gtin-numeric-identifier-type.js.map +1 -0
  97. package/dist/non-gtin-numeric-identifier-validator.d.ts +17 -0
  98. package/dist/non-gtin-numeric-identifier-validator.d.ts.map +1 -0
  99. package/dist/non-gtin-numeric-identifier-validator.js +17 -0
  100. package/dist/non-gtin-numeric-identifier-validator.js.map +1 -0
  101. package/dist/non-numeric-identifier-creator.d.ts +45 -0
  102. package/dist/non-numeric-identifier-creator.d.ts.map +1 -0
  103. package/dist/non-numeric-identifier-creator.js +84 -0
  104. package/dist/non-numeric-identifier-creator.js.map +1 -0
  105. package/dist/non-numeric-identifier-descriptor.d.ts +26 -0
  106. package/dist/non-numeric-identifier-descriptor.d.ts.map +1 -0
  107. package/dist/non-numeric-identifier-descriptor.js +2 -0
  108. package/dist/non-numeric-identifier-descriptor.js.map +1 -0
  109. package/dist/non-numeric-identifier-type.d.ts +7 -0
  110. package/dist/non-numeric-identifier-type.d.ts.map +1 -0
  111. package/dist/non-numeric-identifier-type.js +2 -0
  112. package/dist/non-numeric-identifier-type.js.map +1 -0
  113. package/dist/non-numeric-identifier-validator.d.ts +49 -0
  114. package/dist/non-numeric-identifier-validator.d.ts.map +1 -0
  115. package/dist/non-numeric-identifier-validator.js +69 -0
  116. package/dist/non-numeric-identifier-validator.js.map +1 -0
  117. package/dist/numeric-identifier-creator.d.ts +53 -0
  118. package/dist/numeric-identifier-creator.d.ts.map +1 -0
  119. package/dist/numeric-identifier-creator.js +2 -0
  120. package/dist/numeric-identifier-creator.js.map +1 -0
  121. package/dist/numeric-identifier-descriptor.d.ts +21 -0
  122. package/dist/numeric-identifier-descriptor.d.ts.map +1 -0
  123. package/dist/numeric-identifier-descriptor.js +2 -0
  124. package/dist/numeric-identifier-descriptor.js.map +1 -0
  125. package/dist/numeric-identifier-type.d.ts +31 -0
  126. package/dist/numeric-identifier-type.d.ts.map +1 -0
  127. package/dist/numeric-identifier-type.js +18 -0
  128. package/dist/numeric-identifier-type.js.map +1 -0
  129. package/dist/numeric-identifier-validator.d.ts +24 -0
  130. package/dist/numeric-identifier-validator.d.ts.map +1 -0
  131. package/dist/numeric-identifier-validator.js +2 -0
  132. package/dist/numeric-identifier-validator.js.map +1 -0
  133. package/dist/prefix-manager.d.ts +232 -0
  134. package/dist/prefix-manager.d.ts.map +1 -0
  135. package/dist/prefix-manager.js +334 -0
  136. package/dist/prefix-manager.js.map +1 -0
  137. package/dist/prefix-provider.d.ts +27 -0
  138. package/dist/prefix-provider.d.ts.map +1 -0
  139. package/dist/prefix-provider.js +2 -0
  140. package/dist/prefix-provider.js.map +1 -0
  141. package/dist/prefix-type.d.ts +26 -0
  142. package/dist/prefix-type.d.ts.map +1 -0
  143. package/dist/prefix-type.js +18 -0
  144. package/dist/prefix-type.js.map +1 -0
  145. package/dist/prefix-validator.d.ts +70 -0
  146. package/dist/prefix-validator.d.ts.map +1 -0
  147. package/dist/prefix-validator.js +208 -0
  148. package/dist/prefix-validator.js.map +1 -0
  149. package/dist/serializable-numeric-identifier-creator.d.ts +76 -0
  150. package/dist/serializable-numeric-identifier-creator.d.ts.map +1 -0
  151. package/dist/serializable-numeric-identifier-creator.js +107 -0
  152. package/dist/serializable-numeric-identifier-creator.js.map +1 -0
  153. package/dist/serializable-numeric-identifier-descriptor.d.ts +26 -0
  154. package/dist/serializable-numeric-identifier-descriptor.d.ts.map +1 -0
  155. package/dist/serializable-numeric-identifier-descriptor.js +2 -0
  156. package/dist/serializable-numeric-identifier-descriptor.js.map +1 -0
  157. package/dist/serializable-numeric-identifier-type.d.ts +6 -0
  158. package/dist/serializable-numeric-identifier-type.d.ts.map +1 -0
  159. package/dist/serializable-numeric-identifier-type.js +2 -0
  160. package/dist/serializable-numeric-identifier-type.js.map +1 -0
  161. package/dist/serializable-numeric-identifier-validator.d.ts +56 -0
  162. package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -0
  163. package/dist/serializable-numeric-identifier-validator.js +77 -0
  164. package/dist/serializable-numeric-identifier-validator.js.map +1 -0
  165. package/dist/validators.d.ts +96 -0
  166. package/dist/validators.d.ts.map +1 -0
  167. package/dist/validators.js +140 -0
  168. package/dist/validators.js.map +1 -0
  169. package/package.json +11 -7
  170. package/src/abstract-identifier-creator.ts +4 -4
  171. package/src/abstract-identifier-validator.ts +6 -6
  172. package/src/abstract-numeric-identifier-creator.ts +7 -7
  173. package/src/abstract-numeric-identifier-validator.ts +6 -6
  174. package/src/check.ts +2 -2
  175. package/src/creators.ts +11 -11
  176. package/src/descriptors.ts +14 -14
  177. package/src/gtin-creator.ts +6 -6
  178. package/src/gtin-descriptor.ts +3 -3
  179. package/src/gtin-type.ts +2 -2
  180. package/src/gtin-validator.ts +8 -8
  181. package/src/identifier-creator.ts +3 -3
  182. package/src/identifier-descriptor.ts +3 -3
  183. package/src/identifier-validator.ts +1 -1
  184. package/src/index.ts +44 -43
  185. package/src/locale/i18n.ts +3 -3
  186. package/src/locale/i18next.d.ts +1 -1
  187. package/src/non-gtin-numeric-identifier-creator.ts +5 -5
  188. package/src/non-gtin-numeric-identifier-descriptor.ts +4 -4
  189. package/src/non-gtin-numeric-identifier-type.ts +2 -2
  190. package/src/non-gtin-numeric-identifier-validator.ts +5 -5
  191. package/src/non-numeric-identifier-creator.ts +6 -6
  192. package/src/non-numeric-identifier-descriptor.ts +4 -4
  193. package/src/non-numeric-identifier-type.ts +2 -2
  194. package/src/non-numeric-identifier-validator.ts +7 -7
  195. package/src/numeric-identifier-creator.ts +3 -3
  196. package/src/numeric-identifier-descriptor.ts +3 -3
  197. package/src/numeric-identifier-type.ts +1 -1
  198. package/src/numeric-identifier-validator.ts +2 -2
  199. package/src/prefix-manager.ts +16 -16
  200. package/src/prefix-provider.ts +1 -1
  201. package/src/prefix-validator.ts +3 -3
  202. package/src/serializable-numeric-identifier-creator.ts +4 -4
  203. package/src/serializable-numeric-identifier-descriptor.ts +4 -4
  204. package/src/serializable-numeric-identifier-type.ts +1 -1
  205. package/src/serializable-numeric-identifier-validator.ts +7 -7
  206. package/src/validators.ts +12 -12
  207. package/test/check.test.ts +1 -1
  208. package/test/creator.test.ts +5 -5
  209. package/test/gtin-creator.ts +2 -2
  210. package/test/gtin-validator.test.ts +2 -2
  211. package/test/identifier-creator.ts +5 -5
  212. package/test/identifier-validator.ts +1 -1
  213. package/test/non-gtin-numeric-identifier-creator.ts +3 -3
  214. package/test/non-gtin-numeric-identifier-validator.ts +2 -2
  215. package/test/non-numeric-identifier-creator.ts +1 -1
  216. package/test/non-numeric-identifier-validator.ts +3 -3
  217. package/test/numeric-identifier-creator.ts +2 -2
  218. package/test/numeric-identifier-validator.ts +2 -2
  219. package/test/prefix-manager.test.ts +2 -2
  220. package/test/serializable-numeric-identifier-creator.ts +2 -2
  221. package/test/serializable-numeric-identifier-validator.ts +3 -3
  222. package/test/setup.ts +1 -1
  223. package/test/sparse.test.ts +1 -1
  224. package/test/utility.ts +1 -1
  225. package/test/validator.test.ts +5 -5
  226. package/test/variable-measure-rcn.test.ts +1 -1
  227. package/tsconfig-config.json +4 -0
  228. package/tsconfig-src.json +8 -0
  229. package/tsconfig-test.json +9 -0
  230. package/tsconfig.json +12 -1
  231. package/tsup.config.ts +3 -2
  232. package/dist/index.cjs +0 -4813
  233. package/dist/index.cjs.map +0 -1
  234. package/dist/index.d.cts +0 -1949
@@ -0,0 +1,75 @@
1
+ import type { CharacterSetCreator } from "@aidc-toolkit/utility";
2
+ import type { IdentifierCreator } from "./identifier-creator.js";
3
+ import type { IdentifierDescriptor } from "./identifier-descriptor.js";
4
+ import type { IdentifierValidation } from "./identifier-validator.js";
5
+ import type { PrefixProvider } from "./prefix-provider.js";
6
+ /**
7
+ * Abstract identifier creator. Implements common functionality for an identifier creator, bound to a {@link
8
+ * PrefixProvider | prefix provider}.
9
+ *
10
+ * @template TIdentifierDescriptor
11
+ * Identifier descriptor type.
12
+ *
13
+ * @template TIdentifierValidation
14
+ * Identifier validation type.
15
+ */
16
+ export declare abstract class AbstractIdentifierCreator<TIdentifierDescriptor extends IdentifierDescriptor, TIdentifierValidation extends IdentifierValidation> implements IdentifierCreator<TIdentifierDescriptor, TIdentifierValidation> {
17
+ /**
18
+ * Prefix provider.
19
+ */
20
+ private _prefixProvider;
21
+ /**
22
+ * Reference length.
23
+ */
24
+ private _referenceLength;
25
+ /**
26
+ * Initialize the prefix provider. This method is in lieu of a constructor due to the mixin architecture.
27
+ *
28
+ * @param prefixProvider
29
+ * Prefix provider.
30
+ *
31
+ * @param prefix
32
+ * Prefix within prefix provider to use to calculate reference length.
33
+ *
34
+ * @param checkAllowance
35
+ * Number of characters to allow for check digit or check character pair.
36
+ */
37
+ protected init(prefixProvider: PrefixProvider, prefix: string, checkAllowance: number): void;
38
+ /**
39
+ * @inheritDoc
40
+ */
41
+ abstract get identifierType(): TIdentifierDescriptor["identifierType"];
42
+ /**
43
+ * @inheritDoc
44
+ */
45
+ abstract get prefixType(): TIdentifierDescriptor["prefixType"];
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ abstract get length(): number;
50
+ /**
51
+ * @inheritDoc
52
+ */
53
+ abstract get referenceCharacterSet(): TIdentifierDescriptor["referenceCharacterSet"];
54
+ /**
55
+ * @inheritDoc
56
+ */
57
+ abstract get referenceCreator(): CharacterSetCreator;
58
+ /**
59
+ * @inheritDoc
60
+ */
61
+ get prefixProvider(): PrefixProvider;
62
+ /**
63
+ * @inheritDoc
64
+ */
65
+ get prefix(): string;
66
+ /**
67
+ * @inheritDoc
68
+ */
69
+ get referenceLength(): number;
70
+ /**
71
+ * @inheritDoc
72
+ */
73
+ abstract validate(identifier: string, validation?: TIdentifierValidation): void;
74
+ }
75
+ //# sourceMappingURL=abstract-identifier-creator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-identifier-creator.d.ts","sourceRoot":"","sources":["../src/abstract-identifier-creator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;GASG;AACH,8BAAsB,yBAAyB,CAAC,qBAAqB,SAAS,oBAAoB,EAAE,qBAAqB,SAAS,oBAAoB,CAAE,YAAW,iBAAiB,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9N;;OAEG;IACH,OAAO,CAAC,eAAe,CAAkB;IAEzC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAU;IAElC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAO5F;;OAEG;IACH,QAAQ,KAAK,cAAc,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAEvE;;OAEG;IACH,QAAQ,KAAK,UAAU,IAAI,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAE/D;;OAEG;IACH,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,KAAK,qBAAqB,IAAI,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;IAErF;;OAEG;IACH,QAAQ,KAAK,gBAAgB,IAAI,mBAAmB,CAAC;IAErD;;OAEG;IACH,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,qBAAqB,GAAG,IAAI;CAClF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Abstract identifier creator. Implements common functionality for an identifier creator, bound to a {@link
3
+ * PrefixProvider | prefix provider}.
4
+ *
5
+ * @template TIdentifierDescriptor
6
+ * Identifier descriptor type.
7
+ *
8
+ * @template TIdentifierValidation
9
+ * Identifier validation type.
10
+ */
11
+ export class AbstractIdentifierCreator {
12
+ /**
13
+ * Prefix provider.
14
+ */
15
+ _prefixProvider;
16
+ /**
17
+ * Reference length.
18
+ */
19
+ _referenceLength;
20
+ /**
21
+ * Initialize the prefix provider. This method is in lieu of a constructor due to the mixin architecture.
22
+ *
23
+ * @param prefixProvider
24
+ * Prefix provider.
25
+ *
26
+ * @param prefix
27
+ * Prefix within prefix provider to use to calculate reference length.
28
+ *
29
+ * @param checkAllowance
30
+ * Number of characters to allow for check digit or check character pair.
31
+ */
32
+ init(prefixProvider, prefix, checkAllowance) {
33
+ this._prefixProvider = prefixProvider;
34
+ // Reference length allows for prefix and optionally check digit or check character pair.
35
+ this._referenceLength = this.length - prefix.length - checkAllowance;
36
+ }
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ get prefixProvider() {
41
+ return this._prefixProvider;
42
+ }
43
+ /**
44
+ * @inheritDoc
45
+ */
46
+ get prefix() {
47
+ return this.prefixProvider.gs1CompanyPrefix;
48
+ }
49
+ /**
50
+ * @inheritDoc
51
+ */
52
+ get referenceLength() {
53
+ return this._referenceLength;
54
+ }
55
+ }
56
+ //# sourceMappingURL=abstract-identifier-creator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-identifier-creator.js","sourceRoot":"","sources":["../src/abstract-identifier-creator.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,MAAM,OAAgB,yBAAyB;IAC3C;;OAEG;IACK,eAAe,CAAkB;IAEzC;;OAEG;IACK,gBAAgB,CAAU;IAElC;;;;;;;;;;;OAWG;IACO,IAAI,CAAC,cAA8B,EAAE,MAAc,EAAE,cAAsB;QACjF,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,yFAAyF;QACzF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;IACzE,CAAC;IA2BD;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;CAMJ"}
@@ -0,0 +1,95 @@
1
+ import { type CharacterSetCreator } from "@aidc-toolkit/utility";
2
+ import { type ContentCharacterSet } from "./content-character-set.js";
3
+ import type { IdentifierDescriptor } from "./identifier-descriptor.js";
4
+ import type { IdentifierValidation, IdentifierValidator } from "./identifier-validator.js";
5
+ /**
6
+ * Abstract identifier validator. Implements common functionality for an identifier validator.
7
+ *
8
+ * @template TIdentifierDescriptor
9
+ * Identifier descriptor type.
10
+ *
11
+ * @template TIdentifierValidation
12
+ * Identifier validation type.
13
+ */
14
+ export declare abstract class AbstractIdentifierValidator<TIdentifierDescriptor extends IdentifierDescriptor, TIdentifierValidation extends IdentifierValidation> implements IdentifierValidator<TIdentifierDescriptor, TIdentifierValidation> {
15
+ private static readonly CHARACTER_SET_CREATORS;
16
+ /**
17
+ * Identifier type.
18
+ */
19
+ private readonly _identifierType;
20
+ /**
21
+ * Length.
22
+ */
23
+ private readonly _length;
24
+ /**
25
+ * Reference character set.
26
+ */
27
+ private readonly _referenceCharacterSet;
28
+ /**
29
+ * Reference creator.
30
+ */
31
+ private readonly _referenceCreator;
32
+ /**
33
+ * Get the character set creator for a character set.
34
+ *
35
+ * @param characterSet
36
+ * Character set.
37
+ *
38
+ * @returns
39
+ * Character set creator.
40
+ */
41
+ protected static creatorFor(characterSet: ContentCharacterSet): CharacterSetCreator;
42
+ /**
43
+ * Constructor.
44
+ *
45
+ * @param identifierDescriptor
46
+ * Identifier descriptor.
47
+ */
48
+ protected constructor(identifierDescriptor: IdentifierDescriptor);
49
+ /**
50
+ * @inheritDoc
51
+ */
52
+ get identifierType(): TIdentifierDescriptor["identifierType"];
53
+ /**
54
+ * @inheritDoc
55
+ */
56
+ get prefixType(): TIdentifierDescriptor["prefixType"];
57
+ /**
58
+ * @inheritDoc
59
+ */
60
+ get length(): number;
61
+ /**
62
+ * @inheritDoc
63
+ */
64
+ get referenceCharacterSet(): TIdentifierDescriptor["referenceCharacterSet"];
65
+ /**
66
+ * @inheritDoc
67
+ */
68
+ get referenceCreator(): CharacterSetCreator;
69
+ /**
70
+ * Pad an identifier on the left with zero-value character for validation purposes. This is done to align an
71
+ * identifier with a position offset for any error message that may be thrown by the reference validator.
72
+ *
73
+ * @param identifier
74
+ * Identifier.
75
+ *
76
+ * @param positionOffset
77
+ * Position offset within a larger string.
78
+ *
79
+ * @returns
80
+ * Padded identifier.
81
+ */
82
+ protected padIdentifier(identifier: string, positionOffset?: number): string;
83
+ /**
84
+ * Validate the prefix within an identifier.
85
+ *
86
+ * @param partialIdentifier
87
+ * Partial identifier.
88
+ *
89
+ * @param positionOffset
90
+ * Position offset within a larger string.
91
+ */
92
+ protected validatePrefix(partialIdentifier: string, positionOffset?: number): void;
93
+ abstract validate(identifier: string, validation?: TIdentifierValidation): void;
94
+ }
95
+ //# sourceMappingURL=abstract-identifier-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-identifier-validator.d.ts","sourceRoot":"","sources":["../src/abstract-identifier-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAAE,KAAK,mBAAmB,EAAwB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAI3F;;;;;;;;GAQG;AACH,8BAAsB,2BAA2B,CAAC,qBAAqB,SAAS,oBAAoB,EAAE,qBAAqB,SAAS,oBAAoB,CAAE,YAAW,mBAAmB,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAClO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAI5C;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAE1E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiD;IAExF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IAExD;;;;;;;;OAQG;IACH,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,mBAAmB,GAAG,mBAAmB;IAInF;;;;;OAKG;IACH,SAAS,aAAa,oBAAoB,EAAE,oBAAoB;IAOhE;;OAEG;IACH,IAAI,cAAc,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,CAE5D;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,qBAAqB,CAAC,YAAY,CAAC,CAGpD;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,uBAAuB,CAAC,CAE1E;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,mBAAmB,CAE1C;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IAK5E;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlF,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,qBAAqB,GAAG,IAAI;CAClF"}
@@ -0,0 +1,123 @@
1
+ import { NUMERIC_CREATOR } from "@aidc-toolkit/utility";
2
+ import { AI39_CREATOR, AI82_CREATOR } from "./character-set.js";
3
+ import { ContentCharacterSets } from "./content-character-set.js";
4
+ import { PrefixTypes } from "./prefix-type.js";
5
+ import { PrefixValidator } from "./prefix-validator.js";
6
+ /**
7
+ * Abstract identifier validator. Implements common functionality for an identifier validator.
8
+ *
9
+ * @template TIdentifierDescriptor
10
+ * Identifier descriptor type.
11
+ *
12
+ * @template TIdentifierValidation
13
+ * Identifier validation type.
14
+ */
15
+ export class AbstractIdentifierValidator {
16
+ static CHARACTER_SET_CREATORS = {
17
+ [ContentCharacterSets.Numeric]: NUMERIC_CREATOR,
18
+ [ContentCharacterSets.AI82]: AI82_CREATOR,
19
+ [ContentCharacterSets.AI39]: AI39_CREATOR
20
+ };
21
+ /**
22
+ * Identifier type.
23
+ */
24
+ _identifierType;
25
+ /**
26
+ * Length.
27
+ */
28
+ _length;
29
+ /**
30
+ * Reference character set.
31
+ */
32
+ _referenceCharacterSet;
33
+ /**
34
+ * Reference creator.
35
+ */
36
+ _referenceCreator;
37
+ /**
38
+ * Get the character set creator for a character set.
39
+ *
40
+ * @param characterSet
41
+ * Character set.
42
+ *
43
+ * @returns
44
+ * Character set creator.
45
+ */
46
+ static creatorFor(characterSet) {
47
+ return AbstractIdentifierValidator.CHARACTER_SET_CREATORS[characterSet];
48
+ }
49
+ /**
50
+ * Constructor.
51
+ *
52
+ * @param identifierDescriptor
53
+ * Identifier descriptor.
54
+ */
55
+ constructor(identifierDescriptor) {
56
+ this._identifierType = identifierDescriptor.identifierType;
57
+ this._length = identifierDescriptor.length;
58
+ this._referenceCharacterSet = identifierDescriptor.referenceCharacterSet;
59
+ this._referenceCreator = AbstractIdentifierValidator.creatorFor(identifierDescriptor.referenceCharacterSet);
60
+ }
61
+ /**
62
+ * @inheritDoc
63
+ */
64
+ get identifierType() {
65
+ return this._identifierType;
66
+ }
67
+ /**
68
+ * @inheritDoc
69
+ */
70
+ get prefixType() {
71
+ // All identifier types except GTIN support only the GS1 Company Prefix.
72
+ return PrefixTypes.GS1CompanyPrefix;
73
+ }
74
+ /**
75
+ * @inheritDoc
76
+ */
77
+ get length() {
78
+ return this._length;
79
+ }
80
+ /**
81
+ * @inheritDoc
82
+ */
83
+ get referenceCharacterSet() {
84
+ return this._referenceCharacterSet;
85
+ }
86
+ /**
87
+ * @inheritDoc
88
+ */
89
+ get referenceCreator() {
90
+ return this._referenceCreator;
91
+ }
92
+ /**
93
+ * Pad an identifier on the left with zero-value character for validation purposes. This is done to align an
94
+ * identifier with a position offset for any error message that may be thrown by the reference validator.
95
+ *
96
+ * @param identifier
97
+ * Identifier.
98
+ *
99
+ * @param positionOffset
100
+ * Position offset within a larger string.
101
+ *
102
+ * @returns
103
+ * Padded identifier.
104
+ */
105
+ padIdentifier(identifier, positionOffset) {
106
+ // Identifier is returned as is if position offset is undefined.
107
+ return positionOffset === undefined ? identifier : this.referenceCreator.character(0).repeat(positionOffset).concat(identifier);
108
+ }
109
+ /**
110
+ * Validate the prefix within an identifier.
111
+ *
112
+ * @param partialIdentifier
113
+ * Partial identifier.
114
+ *
115
+ * @param positionOffset
116
+ * Position offset within a larger string.
117
+ */
118
+ validatePrefix(partialIdentifier, positionOffset) {
119
+ // Delegate to prefix validator with support for U.P.C. Company Prefix but not GS1-8 Prefix.
120
+ PrefixValidator.validate(this.prefixType, true, false, partialIdentifier, true, this.referenceCharacterSet === ContentCharacterSets.Numeric, positionOffset);
121
+ }
122
+ }
123
+ //# sourceMappingURL=abstract-identifier-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-identifier-validator.js","sourceRoot":"","sources":["../src/abstract-identifier-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAA4B,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAG5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,OAAgB,2BAA2B;IACrC,MAAM,CAAU,sBAAsB,GAAqD;QAC/F,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe;QAC/C,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,YAAY;QACzC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,YAAY;KAC5C,CAAC;IAEF;;OAEG;IACc,eAAe,CAA0C;IAE1E;;OAEG;IACc,OAAO,CAAS;IAEjC;;OAEG;IACc,sBAAsB,CAAiD;IAExF;;OAEG;IACc,iBAAiB,CAAsB;IAExD;;;;;;;;OAQG;IACO,MAAM,CAAC,UAAU,CAAC,YAAiC;QACzD,OAAO,2BAA2B,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;OAKG;IACH,YAAsB,oBAA0C;QAC5D,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;QACzE,IAAI,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,UAAU,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;IAChH,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACV,wEAAwE;QACxE,OAAO,WAAW,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,qBAAqB;QACrB,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,aAAa,CAAC,UAAkB,EAAE,cAAuB;QAC/D,gEAAgE;QAChE,OAAO,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpI,CAAC;IAED;;;;;;;;OAQG;IACO,cAAc,CAAC,iBAAyB,EAAE,cAAuB;QACvE,4FAA4F;QAC5F,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,KAAK,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjK,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { type TransformerInput, type TransformerOutput } from "@aidc-toolkit/utility";
2
+ import { AbstractIdentifierCreator } from "./abstract-identifier-creator.js";
3
+ import type { NumericIdentifierCreator } from "./numeric-identifier-creator.js";
4
+ import type { NumericIdentifierDescriptor } from "./numeric-identifier-descriptor.js";
5
+ import { type LeaderType } from "./numeric-identifier-type.js";
6
+ import type { NumericIdentifierValidation } from "./numeric-identifier-validator.js";
7
+ import type { PrefixProvider } from "./prefix-provider.js";
8
+ /**
9
+ * Abstract numeric identifier creator. Implements common functionality for a numeric identifier creator.
10
+ *
11
+ * @template TNumericIdentifierDescriptor
12
+ * Numeric identifier descriptor type.
13
+ */
14
+ export declare abstract class AbstractNumericIdentifierCreator<TNumericIdentifierDescriptor extends NumericIdentifierDescriptor> extends AbstractIdentifierCreator<TNumericIdentifierDescriptor, NumericIdentifierValidation> implements NumericIdentifierCreator<TNumericIdentifierDescriptor> {
15
+ /**
16
+ * Capacity.
17
+ */
18
+ private _capacity;
19
+ /**
20
+ * Tweak for sparse creation.
21
+ */
22
+ private _tweak;
23
+ /**
24
+ * Initialize the prefix provider. This method is in lieu of a constructor due to the mixin architecture.
25
+ *
26
+ * @param prefixProvider
27
+ * Prefix provider.
28
+ *
29
+ * @param prefix
30
+ * Prefix within prefix manager to use to calculate reference length.
31
+ */
32
+ protected init(prefixProvider: PrefixProvider, prefix: string): void;
33
+ /**
34
+ * Get the leader type.
35
+ */
36
+ abstract get leaderType(): LeaderType;
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ get capacity(): number;
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ get tweak(): bigint;
45
+ /**
46
+ * @inheritDoc
47
+ */
48
+ set tweak(value: bigint);
49
+ /**
50
+ * Build an identifier from a reference by merging it with the prefix and adding the check digit.
51
+ *
52
+ * @param reference
53
+ * Identifier reference.
54
+ *
55
+ * @returns
56
+ * Identifier.
57
+ */
58
+ private buildIdentifier;
59
+ /**
60
+ * @inheritDoc
61
+ */
62
+ create<TTransformerInput extends TransformerInput<number | bigint>>(valueOrValues: TTransformerInput, sparse?: boolean): TransformerOutput<TTransformerInput, string>;
63
+ /**
64
+ * Create all identifiers from a partial identifier. Call is recursive until remaining reference
65
+ * length is 0.
66
+ *
67
+ * @param partialIdentifier
68
+ * Partial identifier. Initial value is `this.prefix`.
69
+ *
70
+ * @param remainingReferenceLength
71
+ * Remaining reference length. Initial value is `this.referenceLength`.
72
+ *
73
+ * @param extensionWeight
74
+ * If this value is not zero, the identifier has an extension digit, this call is setting it, and this value is
75
+ * applied to the calculation of the check digit.
76
+ *
77
+ * @param weight
78
+ * If the extension weight is zero, this value is applied to the calculation of the check digit.
79
+ *
80
+ * @param partialCheckDigitSum
81
+ * Partial check digit sum for the partial identifier.
82
+ *
83
+ * @yields
84
+ * Identifier.
85
+ */
86
+ private static createAllPartial;
87
+ /**
88
+ * @inheritDoc
89
+ */
90
+ createAll(): Iterable<string>;
91
+ }
92
+ //# sourceMappingURL=abstract-numeric-identifier-creator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-numeric-identifier-creator.d.ts","sourceRoot":"","sources":["../src/abstract-numeric-identifier-creator.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;GAKG;AACH,8BAAsB,gCAAgC,CAAC,4BAA4B,SAAS,2BAA2B,CAAE,SAAQ,yBAAyB,CAAC,4BAA4B,EAAE,2BAA2B,CAAE,YAAW,wBAAwB,CAAC,4BAA4B,CAAC;IACnR;;OAEG;IACH,OAAO,CAAC,SAAS,CAAU;IAE3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAM;IAEpB;;;;;;;;OAQG;cACgB,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO7E;;OAEG;IACH,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC;IAEtC;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,MAAM,CAAC,iBAAiB,SAAS,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAQ,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAInK;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,MAAM,CAAG,gBAAgB;IA6BjC;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC;CAgBhC"}
@@ -0,0 +1,137 @@
1
+ import { CharacterSetCreator, Exclusions, NUMERIC_CREATOR } from "@aidc-toolkit/utility";
2
+ import { AbstractIdentifierCreator } from "./abstract-identifier-creator.js";
3
+ import { checkDigit, checkDigitSum } from "./check.js";
4
+ import { LeaderTypes } from "./numeric-identifier-type.js";
5
+ /**
6
+ * Abstract numeric identifier creator. Implements common functionality for a numeric identifier creator.
7
+ *
8
+ * @template TNumericIdentifierDescriptor
9
+ * Numeric identifier descriptor type.
10
+ */
11
+ export class AbstractNumericIdentifierCreator extends AbstractIdentifierCreator {
12
+ /**
13
+ * Capacity.
14
+ */
15
+ _capacity;
16
+ /**
17
+ * Tweak for sparse creation.
18
+ */
19
+ _tweak = 0n;
20
+ /**
21
+ * Initialize the prefix provider. This method is in lieu of a constructor due to the mixin architecture.
22
+ *
23
+ * @param prefixProvider
24
+ * Prefix provider.
25
+ *
26
+ * @param prefix
27
+ * Prefix within prefix manager to use to calculate reference length.
28
+ */
29
+ init(prefixProvider, prefix) {
30
+ super.init(prefixProvider, prefix, 1);
31
+ // Capacity is always in number range.
32
+ this._capacity = Number(CharacterSetCreator.powerOf10(this.referenceLength));
33
+ }
34
+ /**
35
+ * @inheritDoc
36
+ */
37
+ get capacity() {
38
+ return this._capacity;
39
+ }
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ get tweak() {
44
+ return this._tweak;
45
+ }
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ set tweak(value) {
50
+ this._tweak = value;
51
+ }
52
+ /**
53
+ * Build an identifier from a reference by merging it with the prefix and adding the check digit.
54
+ *
55
+ * @param reference
56
+ * Identifier reference.
57
+ *
58
+ * @returns
59
+ * Identifier.
60
+ */
61
+ buildIdentifier(reference) {
62
+ const partialIdentifier = this.leaderType === LeaderTypes.ExtensionDigit ? reference.substring(0, 1) + this.prefix + reference.substring(1) : this.prefix + reference;
63
+ return partialIdentifier + checkDigit(partialIdentifier);
64
+ }
65
+ /**
66
+ * @inheritDoc
67
+ */
68
+ create(valueOrValues, sparse = false) {
69
+ return NUMERIC_CREATOR.create(this.referenceLength, valueOrValues, Exclusions.None, sparse ? this.tweak : undefined, reference => this.buildIdentifier(reference));
70
+ }
71
+ /**
72
+ * Create all identifiers from a partial identifier. Call is recursive until remaining reference
73
+ * length is 0.
74
+ *
75
+ * @param partialIdentifier
76
+ * Partial identifier. Initial value is `this.prefix`.
77
+ *
78
+ * @param remainingReferenceLength
79
+ * Remaining reference length. Initial value is `this.referenceLength`.
80
+ *
81
+ * @param extensionWeight
82
+ * If this value is not zero, the identifier has an extension digit, this call is setting it, and this value is
83
+ * applied to the calculation of the check digit.
84
+ *
85
+ * @param weight
86
+ * If the extension weight is zero, this value is applied to the calculation of the check digit.
87
+ *
88
+ * @param partialCheckDigitSum
89
+ * Partial check digit sum for the partial identifier.
90
+ *
91
+ * @yields
92
+ * Identifier.
93
+ */
94
+ static *createAllPartial(partialIdentifier, remainingReferenceLength, extensionWeight, weight, partialCheckDigitSum) {
95
+ if (remainingReferenceLength === 0) {
96
+ // Finalize check digit calculation and append.
97
+ yield partialIdentifier + NUMERIC_CREATOR.character(9 - (partialCheckDigitSum + 9) % 10);
98
+ }
99
+ else {
100
+ const nextRemainingReferenceLength = remainingReferenceLength - 1;
101
+ let nextPartialCheckDigitSum = partialCheckDigitSum;
102
+ if (extensionWeight !== 0) {
103
+ // Apply every digit to the extension digit.
104
+ for (const c of NUMERIC_CREATOR.characterSet) {
105
+ yield* AbstractNumericIdentifierCreator.createAllPartial(c + partialIdentifier, nextRemainingReferenceLength, 0, weight, nextPartialCheckDigitSum);
106
+ nextPartialCheckDigitSum += extensionWeight;
107
+ }
108
+ }
109
+ else {
110
+ const nextWeight = 4 - weight;
111
+ // Apply every digit to the current character in the identifier.
112
+ for (const c of NUMERIC_CREATOR.characterSet) {
113
+ yield* AbstractNumericIdentifierCreator.createAllPartial(partialIdentifier + c, nextRemainingReferenceLength, 0, nextWeight, nextPartialCheckDigitSum);
114
+ nextPartialCheckDigitSum += weight;
115
+ }
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * @inheritDoc
121
+ */
122
+ createAll() {
123
+ const hasExtensionDigit = this.leaderType === LeaderTypes.ExtensionDigit;
124
+ const prefix = this.prefix;
125
+ const length = this.length;
126
+ const referenceLength = this.referenceLength;
127
+ // Start weight is for reference excluding extension digit, which has its weight calculated separately.
128
+ const startWeight = 3 - 2 * ((referenceLength + 1 - Number(hasExtensionDigit)) % 2);
129
+ // Returning separate Iterable object makes iteration repeatable.
130
+ return {
131
+ [Symbol.iterator]() {
132
+ return AbstractNumericIdentifierCreator.createAllPartial(prefix, referenceLength, hasExtensionDigit ? 3 - 2 * length % 2 : 0, startWeight, checkDigitSum(startWeight === 3, prefix));
133
+ }
134
+ };
135
+ }
136
+ }
137
+ //# sourceMappingURL=abstract-numeric-identifier-creator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-numeric-identifier-creator.js","sourceRoot":"","sources":["../src/abstract-numeric-identifier-creator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { AbstractIdentifierValidator } from "./abstract-identifier-validator.js";
2
+ import type { NumericIdentifierDescriptor } from "./numeric-identifier-descriptor.js";
3
+ import type { NumericIdentifierValidation, NumericIdentifierValidator } from "./numeric-identifier-validator.js";
4
+ /**
5
+ * Abstract numeric identifier validator.
6
+ *
7
+ * @template TNumericIdentifierDescriptor
8
+ * Numeric identifier descriptor type.
9
+ */
10
+ export declare abstract class AbstractNumericIdentifierValidator<TNumericIdentifierDescriptor extends NumericIdentifierDescriptor> extends AbstractIdentifierValidator<TNumericIdentifierDescriptor, NumericIdentifierValidation> implements NumericIdentifierValidator<TNumericIdentifierDescriptor> {
11
+ /**
12
+ * Leader type.
13
+ */
14
+ private readonly _leaderType;
15
+ /**
16
+ * Prefix position, determined by the leader type.
17
+ */
18
+ private readonly _prefixPosition;
19
+ /**
20
+ * Constructor.
21
+ *
22
+ * @param identifierDescriptor
23
+ * Identifier descriptor.
24
+ */
25
+ constructor(identifierDescriptor: NumericIdentifierDescriptor);
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ get leaderType(): TNumericIdentifierDescriptor["leaderType"];
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ validate(identifier: string, validation?: NumericIdentifierValidation): void;
34
+ }
35
+ //# sourceMappingURL=abstract-numeric-identifier-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-numeric-identifier-validator.d.ts","sourceRoot":"","sources":["../src/abstract-numeric-identifier-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGjF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEjH;;;;;GAKG;AACH,8BAAsB,kCAAkC,CAAC,4BAA4B,SAAS,2BAA2B,CAAE,SAAQ,2BAA2B,CAAC,4BAA4B,EAAE,2BAA2B,CAAE,YAAW,0BAA0B,CAAC,4BAA4B,CAAC;IACzR;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IAEzE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC;;;;;OAKG;gBACS,oBAAoB,EAAE,2BAA2B;IAO7D;;OAEG;IACH,IAAI,UAAU,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAE3D;IAED;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,2BAA2B,GAAG,IAAI;CAqB/E"}