@aidc-toolkit/gs1 1.0.26-beta → 1.0.28-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 (205) hide show
  1. package/dist/abstract-identifier-creator.d.ts +32 -66
  2. package/dist/abstract-identifier-creator.d.ts.map +1 -1
  3. package/dist/abstract-identifier-creator.js +62 -45
  4. package/dist/abstract-identifier-creator.js.map +1 -1
  5. package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts +36 -0
  6. package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts.map +1 -0
  7. package/dist/abstract-non-gtin-numeric-identifier-creator.js +37 -0
  8. package/dist/abstract-non-gtin-numeric-identifier-creator.js.map +1 -0
  9. package/dist/abstract-numeric-identifier-creator.d.ts +28 -86
  10. package/dist/abstract-numeric-identifier-creator.d.ts.map +1 -1
  11. package/dist/abstract-numeric-identifier-creator.js +138 -121
  12. package/dist/abstract-numeric-identifier-creator.js.map +1 -1
  13. package/dist/content-character-set-creators.d.ts +4 -0
  14. package/dist/content-character-set-creators.d.ts.map +1 -0
  15. package/dist/content-character-set-creators.js +9 -0
  16. package/dist/content-character-set-creators.js.map +1 -0
  17. package/dist/gtin-creator.d.ts +8 -13
  18. package/dist/gtin-creator.d.ts.map +1 -1
  19. package/dist/gtin-creator.js +12 -15
  20. package/dist/gtin-creator.js.map +1 -1
  21. package/dist/gtin-descriptor.d.ts +8 -3
  22. package/dist/gtin-descriptor.d.ts.map +1 -1
  23. package/dist/gtin-length.d.ts +64 -0
  24. package/dist/gtin-length.d.ts.map +1 -0
  25. package/dist/gtin-length.js +36 -0
  26. package/dist/gtin-length.js.map +1 -0
  27. package/dist/gtin-type.d.ts +15 -28
  28. package/dist/gtin-type.d.ts.map +1 -1
  29. package/dist/gtin-type.js +4 -28
  30. package/dist/gtin-type.js.map +1 -1
  31. package/dist/gtin-validator.d.ts +9 -23
  32. package/dist/gtin-validator.d.ts.map +1 -1
  33. package/dist/gtin-validator.js +32 -39
  34. package/dist/gtin-validator.js.map +1 -1
  35. package/dist/identifier-creator.d.ts +4 -4
  36. package/dist/identifier-creator.d.ts.map +1 -1
  37. package/dist/{creators.d.ts → identifier-creators.d.ts} +47 -10
  38. package/dist/identifier-creators.d.ts.map +1 -0
  39. package/dist/identifier-creators.js +92 -0
  40. package/dist/identifier-creators.js.map +1 -0
  41. package/dist/{descriptors.d.ts → identifier-descriptors.d.ts} +20 -10
  42. package/dist/identifier-descriptors.d.ts.map +1 -0
  43. package/dist/{descriptors.js → identifier-descriptors.js} +27 -31
  44. package/dist/identifier-descriptors.js.map +1 -0
  45. package/dist/identifier-extension.d.ts +82 -0
  46. package/dist/identifier-extension.d.ts.map +1 -0
  47. package/dist/identifier-extension.js +79 -0
  48. package/dist/identifier-extension.js.map +1 -0
  49. package/dist/identifier-validator.d.ts +44 -9
  50. package/dist/identifier-validator.d.ts.map +1 -1
  51. package/dist/identifier-validator.js +109 -1
  52. package/dist/identifier-validator.js.map +1 -1
  53. package/dist/{validators.d.ts → identifier-validators.d.ts} +47 -12
  54. package/dist/identifier-validators.d.ts.map +1 -0
  55. package/dist/{validators.js → identifier-validators.js} +40 -13
  56. package/dist/identifier-validators.js.map +1 -0
  57. package/dist/index.d.ts +15 -9
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +13 -4
  60. package/dist/index.js.map +1 -1
  61. package/dist/leader-type.d.ts +26 -0
  62. package/dist/leader-type.d.ts.map +1 -0
  63. package/dist/leader-type.js +18 -0
  64. package/dist/leader-type.js.map +1 -0
  65. package/dist/non-gtin-numeric-identifier-creator.d.ts +7 -19
  66. package/dist/non-gtin-numeric-identifier-creator.d.ts.map +1 -1
  67. package/dist/non-gtin-numeric-identifier-creator.js +1 -22
  68. package/dist/non-gtin-numeric-identifier-creator.js.map +1 -1
  69. package/dist/non-gtin-numeric-identifier-descriptor.d.ts +1 -1
  70. package/dist/non-gtin-numeric-identifier-descriptor.d.ts.map +1 -1
  71. package/dist/non-gtin-numeric-identifier-type.d.ts +22 -3
  72. package/dist/non-gtin-numeric-identifier-type.d.ts.map +1 -1
  73. package/dist/non-gtin-numeric-identifier-type.js +7 -1
  74. package/dist/non-gtin-numeric-identifier-type.js.map +1 -1
  75. package/dist/non-gtin-numeric-identifier-validator.d.ts +5 -10
  76. package/dist/non-gtin-numeric-identifier-validator.d.ts.map +1 -1
  77. package/dist/non-gtin-numeric-identifier-validator.js +5 -12
  78. package/dist/non-gtin-numeric-identifier-validator.js.map +1 -1
  79. package/dist/non-numeric-identifier-creator.d.ts +4 -9
  80. package/dist/non-numeric-identifier-creator.d.ts.map +1 -1
  81. package/dist/non-numeric-identifier-creator.js +8 -10
  82. package/dist/non-numeric-identifier-creator.js.map +1 -1
  83. package/dist/non-numeric-identifier-type.d.ts +22 -3
  84. package/dist/non-numeric-identifier-type.d.ts.map +1 -1
  85. package/dist/non-numeric-identifier-type.js +7 -1
  86. package/dist/non-numeric-identifier-type.js.map +1 -1
  87. package/dist/non-numeric-identifier-validator.d.ts +3 -11
  88. package/dist/non-numeric-identifier-validator.d.ts.map +1 -1
  89. package/dist/non-numeric-identifier-validator.js +8 -8
  90. package/dist/non-numeric-identifier-validator.js.map +1 -1
  91. package/dist/non-serializable-numeric-identifier-creator.d.ts +10 -0
  92. package/dist/non-serializable-numeric-identifier-creator.d.ts.map +1 -0
  93. package/dist/non-serializable-numeric-identifier-creator.js +8 -0
  94. package/dist/non-serializable-numeric-identifier-creator.js.map +1 -0
  95. package/dist/non-serializable-numeric-identifier-descriptor.d.ts +12 -0
  96. package/dist/non-serializable-numeric-identifier-descriptor.d.ts.map +1 -0
  97. package/dist/non-serializable-numeric-identifier-descriptor.js +2 -0
  98. package/dist/non-serializable-numeric-identifier-descriptor.js.map +1 -0
  99. package/dist/non-serializable-numeric-identifier-type.d.ts +26 -0
  100. package/dist/non-serializable-numeric-identifier-type.d.ts.map +1 -0
  101. package/dist/non-serializable-numeric-identifier-type.js +7 -0
  102. package/dist/non-serializable-numeric-identifier-type.js.map +1 -0
  103. package/dist/non-serializable-numeric-identifier-validator.d.ts +16 -0
  104. package/dist/non-serializable-numeric-identifier-validator.d.ts.map +1 -0
  105. package/dist/non-serializable-numeric-identifier-validator.js +17 -0
  106. package/dist/non-serializable-numeric-identifier-validator.js.map +1 -0
  107. package/dist/numeric-identifier-creator.d.ts +6 -6
  108. package/dist/numeric-identifier-creator.d.ts.map +1 -1
  109. package/dist/numeric-identifier-descriptor.d.ts +2 -1
  110. package/dist/numeric-identifier-descriptor.d.ts.map +1 -1
  111. package/dist/numeric-identifier-type.d.ts +19 -24
  112. package/dist/numeric-identifier-type.d.ts.map +1 -1
  113. package/dist/numeric-identifier-type.js +4 -15
  114. package/dist/numeric-identifier-type.js.map +1 -1
  115. package/dist/numeric-identifier-validator.d.ts +20 -6
  116. package/dist/numeric-identifier-validator.d.ts.map +1 -1
  117. package/dist/numeric-identifier-validator.js +60 -1
  118. package/dist/numeric-identifier-validator.js.map +1 -1
  119. package/dist/prefix-manager.d.ts +13 -94
  120. package/dist/prefix-manager.d.ts.map +1 -1
  121. package/dist/prefix-manager.js +65 -102
  122. package/dist/prefix-manager.js.map +1 -1
  123. package/dist/serializable-numeric-identifier-creator.d.ts +3 -31
  124. package/dist/serializable-numeric-identifier-creator.d.ts.map +1 -1
  125. package/dist/serializable-numeric-identifier-creator.js +7 -21
  126. package/dist/serializable-numeric-identifier-creator.js.map +1 -1
  127. package/dist/serializable-numeric-identifier-descriptor.d.ts +1 -1
  128. package/dist/serializable-numeric-identifier-descriptor.d.ts.map +1 -1
  129. package/dist/serializable-numeric-identifier-type.d.ts +22 -2
  130. package/dist/serializable-numeric-identifier-type.d.ts.map +1 -1
  131. package/dist/serializable-numeric-identifier-type.js +7 -1
  132. package/dist/serializable-numeric-identifier-type.js.map +1 -1
  133. package/dist/serializable-numeric-identifier-validator.d.ts +3 -18
  134. package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -1
  135. package/dist/serializable-numeric-identifier-validator.js +17 -16
  136. package/dist/serializable-numeric-identifier-validator.js.map +1 -1
  137. package/package.json +4 -5
  138. package/src/abstract-identifier-creator.ts +104 -75
  139. package/src/abstract-non-gtin-numeric-identifier-creator.ts +81 -0
  140. package/src/abstract-numeric-identifier-creator.ts +185 -133
  141. package/src/content-character-set-creators.ts +9 -0
  142. package/src/gtin-creator.ts +15 -16
  143. package/src/gtin-descriptor.ts +9 -3
  144. package/src/gtin-length.ts +61 -0
  145. package/src/gtin-type.ts +6 -37
  146. package/src/gtin-validator.ts +34 -41
  147. package/src/identifier-creator.ts +4 -4
  148. package/src/identifier-creators.ts +177 -0
  149. package/src/{descriptors.ts → identifier-descriptors.ts} +56 -54
  150. package/src/identifier-extension.ts +155 -0
  151. package/src/identifier-validator.ts +93 -10
  152. package/src/{validators.ts → identifier-validators.ts} +98 -36
  153. package/src/index.ts +15 -9
  154. package/src/leader-type.ts +29 -0
  155. package/src/non-gtin-numeric-identifier-creator.ts +7 -22
  156. package/src/non-gtin-numeric-identifier-descriptor.ts +1 -1
  157. package/src/non-gtin-numeric-identifier-type.ts +14 -3
  158. package/src/non-gtin-numeric-identifier-validator.ts +5 -13
  159. package/src/non-numeric-identifier-creator.ts +15 -12
  160. package/src/non-numeric-identifier-type.ts +14 -3
  161. package/src/non-numeric-identifier-validator.ts +8 -9
  162. package/src/non-serializable-numeric-identifier-creator.ts +11 -0
  163. package/src/non-serializable-numeric-identifier-descriptor.ts +12 -0
  164. package/src/non-serializable-numeric-identifier-type.ts +22 -0
  165. package/src/non-serializable-numeric-identifier-validator.ts +19 -0
  166. package/src/numeric-identifier-creator.ts +7 -6
  167. package/src/numeric-identifier-descriptor.ts +2 -1
  168. package/src/numeric-identifier-type.ts +17 -35
  169. package/src/numeric-identifier-validator.ts +61 -6
  170. package/src/prefix-manager.ts +76 -112
  171. package/src/serializable-numeric-identifier-creator.ts +10 -25
  172. package/src/serializable-numeric-identifier-descriptor.ts +1 -1
  173. package/src/serializable-numeric-identifier-type.ts +14 -5
  174. package/src/serializable-numeric-identifier-validator.ts +17 -16
  175. package/test/gtin-creator.ts +9 -2
  176. package/test/gtin-validator.test.ts +8 -10
  177. package/test/identifier-creator.ts +7 -7
  178. package/test/mixin.test.ts +35 -0
  179. package/test/non-gtin-numeric-identifier-validator.ts +7 -2
  180. package/test/non-numeric-identifier-validator.ts +2 -2
  181. package/test/non-serializable-numeric-identifier-creator.ts +64 -0
  182. package/test/non-serializable-numeric-identifier-validator.ts +6 -0
  183. package/test/numeric-identifier-creator.ts +7 -2
  184. package/test/serializable-numeric-identifier-validator.ts +2 -2
  185. package/test/utility.ts +6 -6
  186. package/test/validator.test.ts +11 -10
  187. package/test/variable-measure-rcn.test.ts +23 -23
  188. package/dist/abstract-identifier-validator.d.ts +0 -95
  189. package/dist/abstract-identifier-validator.d.ts.map +0 -1
  190. package/dist/abstract-identifier-validator.js +0 -123
  191. package/dist/abstract-identifier-validator.js.map +0 -1
  192. package/dist/abstract-numeric-identifier-validator.d.ts +0 -35
  193. package/dist/abstract-numeric-identifier-validator.d.ts.map +0 -1
  194. package/dist/abstract-numeric-identifier-validator.js +0 -61
  195. package/dist/abstract-numeric-identifier-validator.js.map +0 -1
  196. package/dist/creators.d.ts.map +0 -1
  197. package/dist/creators.js +0 -62
  198. package/dist/creators.js.map +0 -1
  199. package/dist/descriptors.d.ts.map +0 -1
  200. package/dist/descriptors.js.map +0 -1
  201. package/dist/validators.d.ts.map +0 -1
  202. package/dist/validators.js.map +0 -1
  203. package/src/abstract-identifier-validator.ts +0 -140
  204. package/src/abstract-numeric-identifier-validator.ts +0 -69
  205. package/src/creators.ts +0 -113
@@ -1,19 +1,22 @@
1
- import { type IdentifierCreatorsRecord, isNumericIdentifierCreator } from "./creators.js";
2
- import { GTINCreator } from "./gtin-creator.js";
3
- import { GTIN_BASE_TYPES } from "./gtin-type.js";
1
+ import type { GTINCreator } from "./gtin-creator.js";
2
+ import { GTIN_BASE_TYPES } from "./gtin-length.js";
3
+ import type { GTINType } from "./gtin-type.js";
4
4
  import type { IdentifierCreator } from "./identifier-creator.js";
5
+ import {
6
+ IdentifierCreatorConstructors,
7
+ type IdentifierCreatorsRecord,
8
+ isNumericIdentifierCreator,
9
+ type NonGTINCreatorConstructor
10
+ } from "./identifier-creators.js";
5
11
  import { type IdentifierType, IdentifierTypes } from "./identifier-type.js";
6
12
  import { i18nextGS1 } from "./locale/i18n.js";
7
- import { NonGTINNumericIdentifierCreator } from "./non-gtin-numeric-identifier-creator.js";
8
- import type { NonGTINNumericIdentifierType } from "./non-gtin-numeric-identifier-type.js";
9
- import { NonNumericIdentifierCreator } from "./non-numeric-identifier-creator.js";
10
- import type { NonNumericIdentifierType } from "./non-numeric-identifier-type.js";
13
+ import type { NonNumericIdentifierCreator } from "./non-numeric-identifier-creator.js";
14
+ import type { NonSerializableNumericIdentifierCreator } from "./non-serializable-numeric-identifier-creator.js";
11
15
  import type { NumericIdentifierType } from "./numeric-identifier-type.js";
12
16
  import type { PrefixProvider } from "./prefix-provider.js";
13
17
  import { type PrefixType, PrefixTypes } from "./prefix-type.js";
14
18
  import { PrefixValidator } from "./prefix-validator.js";
15
- import { SerializableNumericIdentifierCreator } from "./serializable-numeric-identifier-creator.js";
16
- import type { SerializableNumericIdentifierType } from "./serializable-numeric-identifier-type.js";
19
+ import type { SerializableNumericIdentifierCreator } from "./serializable-numeric-identifier-creator.js";
17
20
 
18
21
  /**
19
22
  * Prefix manager. This is the core class for identifier creation.
@@ -39,13 +42,13 @@ export class PrefixManager implements PrefixProvider {
39
42
  /**
40
43
  * Cached prefix managers, keyed by GS1 Company Prefix.
41
44
  */
42
- private static readonly PREFIX_MANAGERS_MAP = new Map<string, PrefixManager>();
45
+ static readonly #PREFIX_MANAGERS_MAP = new Map<string, PrefixManager>();
43
46
 
44
47
  /**
45
48
  * Creator tweak factors. Different numeric identifier types have different tweak factors so that sparse creation
46
49
  * generates different sequences for each.
47
50
  */
48
- private static readonly CREATOR_TWEAK_FACTORS: Readonly<Record<NumericIdentifierType, bigint>> = {
51
+ static readonly #CREATOR_TWEAK_FACTORS: Readonly<Record<NumericIdentifierType, bigint>> = {
49
52
  GTIN: 1987n,
50
53
  GLN: 4241n,
51
54
  SSCC: 8087n,
@@ -59,42 +62,42 @@ export class PrefixManager implements PrefixProvider {
59
62
  /**
60
63
  * Normalized prefix type.
61
64
  */
62
- private readonly _prefixType: PrefixType;
65
+ readonly #prefixType: PrefixType;
63
66
 
64
67
  /**
65
68
  * Normalized prefix.
66
69
  */
67
- private readonly _prefix: string;
70
+ readonly #prefix: string;
68
71
 
69
72
  /**
70
73
  * Prefix as GS1 Company Prefix.
71
74
  */
72
- private readonly _gs1CompanyPrefix: string;
75
+ readonly #gs1CompanyPrefix: string;
73
76
 
74
77
  /**
75
78
  * U.P.C. Company Prefix if prefix type is {@linkcode PrefixTypes.UPCCompanyPrefix}.
76
79
  */
77
- private readonly _upcCompanyPrefix: string | undefined;
80
+ readonly #upcCompanyPrefix: string | undefined;
78
81
 
79
82
  /**
80
83
  * GS1-8 Prefix if prefix type is {@linkcode PrefixTypes.GS18Prefix}.
81
84
  */
82
- private readonly _gs18Prefix: string | undefined;
85
+ readonly #gs18Prefix: string | undefined;
83
86
 
84
87
  /**
85
88
  * Default tweak factor.
86
89
  */
87
- private readonly _defaultTweakFactor: bigint;
90
+ readonly #defaultTweakFactor: bigint;
88
91
 
89
92
  /**
90
93
  * Tweak factor.
91
94
  */
92
- private _tweakFactor = 0n;
95
+ #tweakFactor = 0n;
93
96
 
94
97
  /**
95
98
  * Cached identifier creators.
96
99
  */
97
- private readonly _identifierCreators: Partial<IdentifierCreatorsRecord> = {};
100
+ readonly #identifierCreators: Partial<IdentifierCreatorsRecord> = {};
98
101
 
99
102
  /**
100
103
  * Constructor.
@@ -108,14 +111,14 @@ export class PrefixManager implements PrefixProvider {
108
111
  constructor(prefixType: PrefixType, prefix: string) {
109
112
  const normalizedPrefixProvider = PrefixValidator.normalize(prefixType, prefix);
110
113
 
111
- this._prefixType = normalizedPrefixProvider.prefixType;
112
- this._prefix = normalizedPrefixProvider.prefix;
113
- this._gs1CompanyPrefix = normalizedPrefixProvider.gs1CompanyPrefix;
114
- this._upcCompanyPrefix = normalizedPrefixProvider.upcCompanyPrefix;
115
- this._gs18Prefix = normalizedPrefixProvider.gs18Prefix;
114
+ this.#prefixType = normalizedPrefixProvider.prefixType;
115
+ this.#prefix = normalizedPrefixProvider.prefix;
116
+ this.#gs1CompanyPrefix = normalizedPrefixProvider.gs1CompanyPrefix;
117
+ this.#upcCompanyPrefix = normalizedPrefixProvider.upcCompanyPrefix;
118
+ this.#gs18Prefix = normalizedPrefixProvider.gs18Prefix;
116
119
 
117
120
  // Default tweak factor is the numeric value of the GS1 Company Prefix preceded by '1'.
118
- this._defaultTweakFactor = BigInt(`1${this.gs1CompanyPrefix}`);
121
+ this.#defaultTweakFactor = BigInt(`1${this.gs1CompanyPrefix}`);
119
122
 
120
123
  this.resetTweakFactor();
121
124
  }
@@ -124,35 +127,35 @@ export class PrefixManager implements PrefixProvider {
124
127
  * Get the prefix type.
125
128
  */
126
129
  get prefixType(): PrefixType {
127
- return this._prefixType;
130
+ return this.#prefixType;
128
131
  }
129
132
 
130
133
  /**
131
134
  * Get the prefix.
132
135
  */
133
136
  get prefix(): string {
134
- return this._prefix;
137
+ return this.#prefix;
135
138
  }
136
139
 
137
140
  /**
138
141
  * Get the GS1 Company Prefix.
139
142
  */
140
143
  get gs1CompanyPrefix(): string {
141
- return this._gs1CompanyPrefix;
144
+ return this.#gs1CompanyPrefix;
142
145
  }
143
146
 
144
147
  /**
145
148
  * Get the U.P.C. Company Prefix if prefix type is {@linkcode PrefixTypes.UPCCompanyPrefix} or undefined if not.
146
149
  */
147
150
  get upcCompanyPrefix(): string | undefined {
148
- return this._upcCompanyPrefix;
151
+ return this.#upcCompanyPrefix;
149
152
  }
150
153
 
151
154
  /**
152
155
  * Get the GS1-8 Prefix if prefix type is {@linkcode PrefixTypes.GS18Prefix} or undefined if not.
153
156
  */
154
157
  get gs18Prefix(): string | undefined {
155
- return this._gs18Prefix;
158
+ return this.#gs18Prefix;
156
159
  }
157
160
 
158
161
  /**
@@ -161,10 +164,10 @@ export class PrefixManager implements PrefixProvider {
161
164
  * @param identifierCreator
162
165
  * Identifier creator.
163
166
  */
164
- private setCreatorTweak(identifierCreator: IdentifierCreator): void {
167
+ #setCreatorTweak(identifierCreator: IdentifierCreator): void {
165
168
  if (isNumericIdentifierCreator(identifierCreator)) {
166
169
  // eslint-disable-next-line no-param-reassign -- Method purpose is to set the tweak.
167
- identifierCreator.tweak = this.tweakFactor * PrefixManager.CREATOR_TWEAK_FACTORS[identifierCreator.identifierType];
170
+ identifierCreator.tweak = this.tweakFactor * PrefixManager.#CREATOR_TWEAK_FACTORS[identifierCreator.identifierType];
168
171
  }
169
172
  }
170
173
 
@@ -172,7 +175,7 @@ export class PrefixManager implements PrefixProvider {
172
175
  * Get the tweak factor.
173
176
  */
174
177
  get tweakFactor(): bigint {
175
- return this._tweakFactor;
178
+ return this.#tweakFactor;
176
179
  }
177
180
 
178
181
  /**
@@ -184,11 +187,11 @@ export class PrefixManager implements PrefixProvider {
184
187
  set tweakFactor(value: number | bigint) {
185
188
  const tweakFactor = BigInt(value);
186
189
 
187
- if (this._tweakFactor !== tweakFactor) {
188
- this._tweakFactor = tweakFactor;
190
+ if (this.#tweakFactor !== tweakFactor) {
191
+ this.#tweakFactor = tweakFactor;
189
192
 
190
- for (const creator of Object.values(this._identifierCreators)) {
191
- this.setCreatorTweak(creator);
193
+ for (const creator of Object.values(this.#identifierCreators)) {
194
+ this.#setCreatorTweak(creator);
192
195
  }
193
196
  }
194
197
  }
@@ -197,7 +200,7 @@ export class PrefixManager implements PrefixProvider {
197
200
  * Reset the tweak factor to its default (numeric value of the GS1 Company Prefix preceded by '1').
198
201
  */
199
202
  resetTweakFactor(): void {
200
- this.tweakFactor = this._defaultTweakFactor;
203
+ this.tweakFactor = this.#defaultTweakFactor;
201
204
  }
202
205
 
203
206
  /**
@@ -216,11 +219,11 @@ export class PrefixManager implements PrefixProvider {
216
219
  // Normalization will occur in constructor as well, but it's necessary here for the map.
217
220
  const normalizedPrefixProvider = PrefixValidator.normalize(prefixType, prefix);
218
221
 
219
- let prefixManager = PrefixManager.PREFIX_MANAGERS_MAP.get(normalizedPrefixProvider.gs1CompanyPrefix);
222
+ let prefixManager = PrefixManager.#PREFIX_MANAGERS_MAP.get(normalizedPrefixProvider.gs1CompanyPrefix);
220
223
 
221
224
  if (prefixManager === undefined) {
222
225
  prefixManager = new PrefixManager(normalizedPrefixProvider.prefixType, normalizedPrefixProvider.prefix);
223
- PrefixManager.PREFIX_MANAGERS_MAP.set(normalizedPrefixProvider.gs1CompanyPrefix, prefixManager);
226
+ PrefixManager.#PREFIX_MANAGERS_MAP.set(normalizedPrefixProvider.gs1CompanyPrefix, prefixManager);
224
227
  }
225
228
 
226
229
  return prefixManager;
@@ -233,157 +236,118 @@ export class PrefixManager implements PrefixProvider {
233
236
  * Identifier type type.
234
237
  *
235
238
  * @param identifierType
236
- * Identifier type used to construct identifier creator.
237
- *
238
- * @param constructorParameter
239
- * Second constructor parameter passed to constructor callback alongside this.
240
- *
241
- * @param ConstructorCallback
242
- * Constructor callback.
239
+ * Identifier type for which to retrieve or construct identifier creator.
243
240
  *
244
241
  * @returns
245
242
  * Identifier creator.
246
243
  */
247
- private getIdentifierCreator<TIdentifierType extends IdentifierType, TConstructorParameter>(identifierType: TIdentifierType, constructorParameter: TConstructorParameter, ConstructorCallback: new (prefixProvider: PrefixProvider, constructorParameter: TConstructorParameter) => IdentifierCreatorsRecord[TIdentifierType]): IdentifierCreatorsRecord[TIdentifierType] {
248
- let creator: IdentifierCreatorsRecord[TIdentifierType] | undefined = this._identifierCreators[identifierType];
244
+ getIdentifierCreator<TIdentifierType extends IdentifierType>(identifierType: TIdentifierType): IdentifierCreatorsRecord[TIdentifierType] {
245
+ let creator: IdentifierCreatorsRecord[TIdentifierType] | undefined = this.#identifierCreators[identifierType];
249
246
 
250
247
  if (creator === undefined) {
251
- if (this.prefixType === PrefixTypes.GS18Prefix && identifierType !== IdentifierTypes.GTIN) {
252
- throw new RangeError(i18nextGS1.t("Prefix.identifierTypeNotSupportedByGS18Prefix", {
253
- identifierType
254
- }));
248
+ if (identifierType === IdentifierTypes.GTIN) {
249
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Types are known to match.
250
+ creator = new IdentifierCreatorConstructors.GTIN(this, GTIN_BASE_TYPES[this.prefixType]) as IdentifierCreatorsRecord[TIdentifierType];
251
+ } else {
252
+ if (this.prefixType === PrefixTypes.GS18Prefix) {
253
+ throw new RangeError(i18nextGS1.t("Prefix.identifierTypeNotSupportedByGS18Prefix", {
254
+ identifierType
255
+ }));
256
+ }
257
+
258
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Types are known to match.
259
+ creator = new (IdentifierCreatorConstructors[identifierType] as unknown as NonGTINCreatorConstructor<Exclude<TIdentifierType, GTINType>>)(this, identifierType as Exclude<TIdentifierType, GTINType>);
255
260
  }
256
261
 
257
- creator = new ConstructorCallback(this, constructorParameter);
262
+ this.#setCreatorTweak(creator);
258
263
 
259
- this.setCreatorTweak(creator);
260
-
261
- this._identifierCreators[identifierType] = creator;
264
+ this.#identifierCreators[identifierType] = creator;
262
265
  }
263
266
 
264
267
  return creator;
265
268
  }
266
269
 
267
- /**
268
- * Get non-GTIN numeric identifier creator.
269
- *
270
- * @param identifierType
271
- * Identifier type used to construct identifier creator.
272
- *
273
- * @returns
274
- * Identifier creator.
275
- */
276
- private getNonGTINNumericIdentifierCreator(identifierType: Exclude<NonGTINNumericIdentifierType, SerializableNumericIdentifierType>): NonGTINNumericIdentifierCreator {
277
- return this.getIdentifierCreator(identifierType, identifierType, NonGTINNumericIdentifierCreator);
278
- }
279
-
280
- /**
281
- * Get serialized numeric identifier creator.
282
- *
283
- * @param identifierType
284
- * Identifier type used to construct identifier creator.
285
- *
286
- * @returns
287
- * Identifier creator.
288
- */
289
- private getSerializableNumericIdentifierCreator(identifierType: SerializableNumericIdentifierType): SerializableNumericIdentifierCreator {
290
- return this.getIdentifierCreator(identifierType, identifierType, SerializableNumericIdentifierCreator);
291
- }
292
-
293
- /**
294
- * Get non-numeric identifier creator.
295
- *
296
- * @param identifierType
297
- * Identifier type used to construct identifier creator.
298
- *
299
- * @returns
300
- * Identifier creator.
301
- */
302
- private getNonNumericIdentifierCreator(identifierType: NonNumericIdentifierType): NonNumericIdentifierCreator {
303
- return this.getIdentifierCreator(identifierType, identifierType, NonNumericIdentifierCreator);
304
- }
305
-
306
270
  /**
307
271
  * Get GTIN creator.
308
272
  */
309
273
  get gtinCreator(): GTINCreator {
310
- return this.getIdentifierCreator(IdentifierTypes.GTIN, GTIN_BASE_TYPES[this.prefixType], GTINCreator);
274
+ return this.getIdentifierCreator(IdentifierTypes.GTIN);
311
275
  }
312
276
 
313
277
  /**
314
278
  * Get GLN creator.
315
279
  */
316
- get glnCreator(): NonGTINNumericIdentifierCreator {
317
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.GLN);
280
+ get glnCreator(): NonSerializableNumericIdentifierCreator {
281
+ return this.getIdentifierCreator(IdentifierTypes.GLN);
318
282
  }
319
283
 
320
284
  /**
321
285
  * Get SSCC creator.
322
286
  */
323
- get ssccCreator(): NonGTINNumericIdentifierCreator {
324
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.SSCC);
287
+ get ssccCreator(): NonSerializableNumericIdentifierCreator {
288
+ return this.getIdentifierCreator(IdentifierTypes.SSCC);
325
289
  }
326
290
 
327
291
  /**
328
292
  * Get GRAI creator.
329
293
  */
330
294
  get graiCreator(): SerializableNumericIdentifierCreator {
331
- return this.getSerializableNumericIdentifierCreator(IdentifierTypes.GRAI);
295
+ return this.getIdentifierCreator(IdentifierTypes.GRAI);
332
296
  }
333
297
 
334
298
  /**
335
299
  * Get GIAI creator.
336
300
  */
337
301
  get giaiCreator(): NonNumericIdentifierCreator {
338
- return this.getNonNumericIdentifierCreator(IdentifierTypes.GIAI);
302
+ return this.getIdentifierCreator(IdentifierTypes.GIAI);
339
303
  }
340
304
 
341
305
  /**
342
306
  * Get GSRN creator.
343
307
  */
344
- get gsrnCreator(): NonGTINNumericIdentifierCreator {
345
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.GSRN);
308
+ get gsrnCreator(): NonSerializableNumericIdentifierCreator {
309
+ return this.getIdentifierCreator(IdentifierTypes.GSRN);
346
310
  }
347
311
 
348
312
  /**
349
313
  * Get GDTI creator.
350
314
  */
351
315
  get gdtiCreator(): SerializableNumericIdentifierCreator {
352
- return this.getSerializableNumericIdentifierCreator(IdentifierTypes.GDTI);
316
+ return this.getIdentifierCreator(IdentifierTypes.GDTI);
353
317
  }
354
318
 
355
319
  /**
356
320
  * Get GINC creator.
357
321
  */
358
322
  get gincCreator(): NonNumericIdentifierCreator {
359
- return this.getNonNumericIdentifierCreator(IdentifierTypes.GINC);
323
+ return this.getIdentifierCreator(IdentifierTypes.GINC);
360
324
  }
361
325
 
362
326
  /**
363
327
  * Get GSIN creator.
364
328
  */
365
- get gsinCreator(): NonGTINNumericIdentifierCreator {
366
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.GSIN);
329
+ get gsinCreator(): NonSerializableNumericIdentifierCreator {
330
+ return this.getIdentifierCreator(IdentifierTypes.GSIN);
367
331
  }
368
332
 
369
333
  /**
370
334
  * Get GCN creator.
371
335
  */
372
336
  get gcnCreator(): SerializableNumericIdentifierCreator {
373
- return this.getSerializableNumericIdentifierCreator(IdentifierTypes.GCN);
337
+ return this.getIdentifierCreator(IdentifierTypes.GCN);
374
338
  }
375
339
 
376
340
  /**
377
341
  * Get CPID creator.
378
342
  */
379
343
  get cpidCreator(): NonNumericIdentifierCreator {
380
- return this.getNonNumericIdentifierCreator(IdentifierTypes.CPID);
344
+ return this.getIdentifierCreator(IdentifierTypes.CPID);
381
345
  }
382
346
 
383
347
  /**
384
348
  * Get GMN creator.
385
349
  */
386
350
  get gmnCreator(): NonNumericIdentifierCreator {
387
- return this.getNonNumericIdentifierCreator(IdentifierTypes.GMN);
351
+ return this.getIdentifierCreator(IdentifierTypes.GMN);
388
352
  }
389
353
  }
@@ -1,30 +1,15 @@
1
- import { mapIterable, type TransformerInput, type TransformerOutput } from "@aidc-toolkit/utility";
2
- import { Mixin } from "ts-mixer";
3
- import { AbstractNumericIdentifierCreator } from "./abstract-numeric-identifier-creator.js";
4
- import type { PrefixProvider } from "./prefix-provider.js";
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Used in JSDoc.
2
+ import { mapIterable, NUMERIC_CREATOR, type TransformerInput, type TransformerOutput } from "@aidc-toolkit/utility";
3
+ import { MixinAbstractNonGTINNumericIdentifierCreator } from "./abstract-non-gtin-numeric-identifier-creator.js";
5
4
  import type { SerializableNumericIdentifierType } from "./serializable-numeric-identifier-type.js";
6
5
  import { SerializableNumericIdentifierValidator } from "./serializable-numeric-identifier-validator.js";
7
6
 
8
7
  /**
9
8
  * Serializable numeric identifier creator.
10
9
  */
11
- export class SerializableNumericIdentifierCreator extends Mixin(SerializableNumericIdentifierValidator, AbstractNumericIdentifierCreator) {
12
- /**
13
- * Constructor. Typically called internally by a prefix manager but may be called by other code with another prefix
14
- * provider type.
15
- *
16
- * @param prefixProvider
17
- * Prefix provider.
18
- *
19
- * @param identifierType
20
- * Identifier type.
21
- */
22
- constructor(prefixProvider: PrefixProvider, identifierType: SerializableNumericIdentifierType) {
23
- super(identifierType);
24
-
25
- this.init(prefixProvider, prefixProvider.gs1CompanyPrefix);
26
- }
27
-
10
+ export class SerializableNumericIdentifierCreator extends MixinAbstractNonGTINNumericIdentifierCreator<
11
+ SerializableNumericIdentifierType
12
+ >(SerializableNumericIdentifierValidator) {
28
13
  /**
29
14
  * Concatenate a validated base identifier with serial component(s).
30
15
  *
@@ -40,7 +25,7 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
40
25
  * @returns
41
26
  * Serialized identifier(s).
42
27
  */
43
- private concatenateValidated<TTransformerInput extends TransformerInput<string>>(baseIdentifier: string, serialComponentOrComponents: TTransformerInput): TransformerOutput<TTransformerInput, string> {
28
+ #concatenateValidated<TTransformerInput extends TransformerInput<string>>(baseIdentifier: string, serialComponentOrComponents: TTransformerInput): TransformerOutput<TTransformerInput, string> {
44
29
  // TODO Refactor type when https://github.com/microsoft/TypeScript/pull/56941 released.
45
30
  let result: string | Iterable<string>;
46
31
 
@@ -74,7 +59,7 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
74
59
 
75
60
  /**
76
61
  * Create serialized identifier(s) with a reference based on a numeric value concatenated with serial component(s).
77
- * The value is converted to a reference of the appropriate length using a numeric creator.
62
+ * The value is converted to a reference of the appropriate length using {@linkcode NUMERIC_CREATOR}.
78
63
  *
79
64
  * @template TTransformerInput
80
65
  * Transformer input type.
@@ -92,7 +77,7 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
92
77
  * Serialized identifiers.
93
78
  */
94
79
  createSerialized<TTransformerInput extends TransformerInput<string>>(value: number, serialComponentOrComponents: TTransformerInput, sparse?: boolean): TransformerOutput<TTransformerInput, string> {
95
- return this.concatenateValidated(this.create(value, sparse), serialComponentOrComponents);
80
+ return this.#concatenateValidated(this.create(value, sparse), serialComponentOrComponents);
96
81
  }
97
82
 
98
83
  /**
@@ -113,6 +98,6 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
113
98
  concatenate<TTransformerInput extends TransformerInput<string>>(baseIdentifier: string, serialComponentOrComponents: TTransformerInput): TransformerOutput<TTransformerInput, string> {
114
99
  this.validate(baseIdentifier);
115
100
 
116
- return this.concatenateValidated(baseIdentifier, serialComponentOrComponents);
101
+ return this.#concatenateValidated(baseIdentifier, serialComponentOrComponents);
117
102
  }
118
103
  }
@@ -1,6 +1,6 @@
1
1
  import type { ContentCharacterSet } from "./content-character-set.js";
2
+ import type { LeaderTypes } from "./leader-type.js";
2
3
  import type { NonGTINNumericIdentifierDescriptor } from "./non-gtin-numeric-identifier-descriptor.js";
3
- import type { LeaderTypes } from "./numeric-identifier-type.js";
4
4
  import type { SerializableNumericIdentifierType } from "./serializable-numeric-identifier-type.js";
5
5
 
6
6
  /**
@@ -1,9 +1,18 @@
1
- import type { IdentifierTypes } from "./identifier-type.js";
1
+ import { exclude } from "@aidc-toolkit/core";
2
+ import { NonGTINNumericIdentifierTypes } from "./non-gtin-numeric-identifier-type.js";
3
+ import { NonSerializableNumericIdentifierTypes } from "./non-serializable-numeric-identifier-type.js";
4
+
5
+ /**
6
+ * Serializable numeric identifier types.
7
+ */
8
+ export const SerializableNumericIdentifierTypes = exclude(NonGTINNumericIdentifierTypes, NonSerializableNumericIdentifierTypes);
9
+
10
+ /**
11
+ * Serializable numeric identifier type key.
12
+ */
13
+ export type SerializableNumericIdentifierTypeKey = keyof typeof SerializableNumericIdentifierTypes;
2
14
 
3
15
  /**
4
16
  * Serializable numeric identifier type.
5
17
  */
6
- export type SerializableNumericIdentifierType =
7
- typeof IdentifierTypes.GRAI |
8
- typeof IdentifierTypes.GDTI |
9
- typeof IdentifierTypes.GCN;
18
+ export type SerializableNumericIdentifierType = typeof SerializableNumericIdentifierTypes[SerializableNumericIdentifierTypeKey];
@@ -1,9 +1,10 @@
1
1
  import type { CharacterSetCreator, CharacterSetValidation } from "@aidc-toolkit/utility";
2
- import { AbstractNumericIdentifierValidator } from "./abstract-numeric-identifier-validator.js";
2
+ import { CONTENT_CHARACTER_SET_CREATORS } from "./content-character-set-creators.js";
3
3
  import type { ContentCharacterSet } from "./content-character-set.js";
4
- import { IdentifierDescriptors } from "./descriptors.js";
4
+ import { IdentifierDescriptors } from "./identifier-descriptors.js";
5
5
  import type { IdentifierValidation } from "./identifier-validator.js";
6
6
  import { i18nextGS1 } from "./locale/i18n.js";
7
+ import { NonGTINNumericIdentifierValidator } from "./non-gtin-numeric-identifier-validator.js";
7
8
  import type { SerializableNumericIdentifierDescriptor } from "./serializable-numeric-identifier-descriptor.js";
8
9
  import type { SerializableNumericIdentifierType } from "./serializable-numeric-identifier-type.js";
9
10
 
@@ -11,26 +12,26 @@ import type { SerializableNumericIdentifierType } from "./serializable-numeric-i
11
12
  * Serializable numeric identifier validator. Validates both serialized and non-serialized forms of numeric identifiers
12
13
  * that support serialization.
13
14
  */
14
- export class SerializableNumericIdentifierValidator extends AbstractNumericIdentifierValidator<SerializableNumericIdentifierDescriptor> {
15
+ export class SerializableNumericIdentifierValidator extends NonGTINNumericIdentifierValidator<SerializableNumericIdentifierType> implements SerializableNumericIdentifierDescriptor {
15
16
  /**
16
17
  * Serial component length.
17
18
  */
18
- private readonly _serialComponentLength: number;
19
+ readonly #serialComponentLength: number;
19
20
 
20
21
  /**
21
22
  * Serial component character set.
22
23
  */
23
- private readonly _serialComponentCharacterSet: ContentCharacterSet;
24
+ readonly #serialComponentCharacterSet: ContentCharacterSet;
24
25
 
25
26
  /**
26
27
  * Serial component validation parameters.
27
28
  */
28
- private readonly _serialComponentValidation: CharacterSetValidation;
29
+ readonly #serialComponentValidation: CharacterSetValidation;
29
30
 
30
31
  /**
31
32
  * Serial component creator.
32
33
  */
33
- private readonly _serialComponentCreator: CharacterSetCreator;
34
+ readonly #serialComponentCreator: CharacterSetCreator;
34
35
 
35
36
  /**
36
37
  * Constructor.
@@ -43,44 +44,44 @@ export class SerializableNumericIdentifierValidator extends AbstractNumericIdent
43
44
 
44
45
  super(identifierDescriptor);
45
46
 
46
- this._serialComponentLength = identifierDescriptor.serialComponentLength;
47
- this._serialComponentCharacterSet = identifierDescriptor.serialComponentCharacterSet;
47
+ this.#serialComponentLength = identifierDescriptor.serialComponentLength;
48
+ this.#serialComponentCharacterSet = identifierDescriptor.serialComponentCharacterSet;
48
49
 
49
- this._serialComponentValidation = {
50
+ this.#serialComponentValidation = {
50
51
  minimumLength: 1,
51
52
  maximumLength: identifierDescriptor.serialComponentLength,
52
53
  component: () => i18nextGS1.t("Identifier.serialComponent")
53
54
  };
54
55
 
55
- this._serialComponentCreator = SerializableNumericIdentifierValidator.creatorFor(identifierDescriptor.serialComponentCharacterSet);
56
+ this.#serialComponentCreator = CONTENT_CHARACTER_SET_CREATORS[identifierDescriptor.serialComponentCharacterSet];
56
57
  }
57
58
 
58
59
  /**
59
60
  * Get the serial component length.
60
61
  */
61
62
  get serialComponentLength(): number {
62
- return this._serialComponentLength;
63
+ return this.#serialComponentLength;
63
64
  }
64
65
 
65
66
  /**
66
67
  * Get the serial component character set.
67
68
  */
68
69
  get serialComponentCharacterSet(): ContentCharacterSet {
69
- return this._serialComponentCharacterSet;
70
+ return this.#serialComponentCharacterSet;
70
71
  }
71
72
 
72
73
  /**
73
74
  * Get the serial component validation parameters.
74
75
  */
75
76
  protected get serialComponentValidation(): CharacterSetValidation {
76
- return this._serialComponentValidation;
77
+ return this.#serialComponentValidation;
77
78
  }
78
79
 
79
80
  /**
80
81
  * Get the serial component creator.
81
82
  */
82
83
  get serialComponentCreator(): CharacterSetCreator {
83
- return this._serialComponentCreator;
84
+ return this.#serialComponentCreator;
84
85
  }
85
86
 
86
87
  /**
@@ -90,7 +91,7 @@ export class SerializableNumericIdentifierValidator extends AbstractNumericIdent
90
91
  super.validate(identifier.substring(0, this.length), validation);
91
92
 
92
93
  if (identifier.length > this.length) {
93
- this.serialComponentCreator.validate(identifier.substring(this.length), this._serialComponentValidation);
94
+ this.serialComponentCreator.validate(identifier.substring(this.length), this.#serialComponentValidation);
94
95
  }
95
96
  }
96
97
  }
@@ -1,6 +1,13 @@
1
1
  import { CharacterSetCreator, Sequence } from "@aidc-toolkit/utility";
2
2
  import { expect, test } from "vitest";
3
- import { type GTINCreator, GTINTypes, GTINValidator, hasValidCheckDigit, isGTINCreator, PrefixTypes } from "../src/index.js";
3
+ import {
4
+ type GTINCreator,
5
+ GTINLengths,
6
+ GTINValidator,
7
+ hasValidCheckDigit,
8
+ isGTINCreator,
9
+ PrefixTypes
10
+ } from "../src/index.js";
4
11
  import { testNumericIdentifierCreator } from "./numeric-identifier-creator.js";
5
12
 
6
13
  export function testGTINCreator(creator: GTINCreator): void {
@@ -111,7 +118,7 @@ export function testGTINCreator(creator: GTINCreator): void {
111
118
  expect(Array.from(creator.createGTIN14("5", randomValues, true))).toStrictEqual(identifiers);
112
119
  });
113
120
 
114
- if (creator.gtinType === GTINTypes.GTIN12) {
121
+ if (creator.length === GTINLengths.GTIN12) {
115
122
  test("Zero-suppress GTIN-12 rule 1", () => {
116
123
  expect(GTINValidator.zeroSuppress("012345000058")).toBe("01234558");
117
124
  expect(GTINValidator.zeroSuppress("012345000065")).toBe("01234565");