@aidc-toolkit/gs1 1.0.26-beta → 1.0.27-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 (199) hide show
  1. package/dist/abstract-identifier-creator.d.ts +66 -66
  2. package/dist/abstract-identifier-creator.d.ts.map +1 -1
  3. package/dist/abstract-identifier-creator.js +68 -45
  4. package/dist/abstract-identifier-creator.js.map +1 -1
  5. package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts +42 -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 +40 -0
  8. package/dist/abstract-non-gtin-numeric-identifier-creator.js.map +1 -0
  9. package/dist/abstract-numeric-identifier-creator.d.ts +37 -86
  10. package/dist/abstract-numeric-identifier-creator.d.ts.map +1 -1
  11. package/dist/abstract-numeric-identifier-creator.js +144 -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 +7 -12
  18. package/dist/gtin-creator.d.ts.map +1 -1
  19. package/dist/gtin-creator.js +11 -14
  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} +16 -7
  38. package/dist/identifier-creators.d.ts.map +1 -0
  39. package/dist/{creators.js → identifier-creators.js} +19 -7
  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} +21 -11
  54. package/dist/identifier-validators.d.ts.map +1 -0
  55. package/dist/{validators.js → identifier-validators.js} +25 -12
  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 +7 -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 +6 -102
  120. package/dist/prefix-manager.d.ts.map +1 -1
  121. package/dist/prefix-manager.js +65 -60
  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 +155 -74
  139. package/src/abstract-non-gtin-numeric-identifier-creator.ts +86 -0
  140. package/src/abstract-numeric-identifier-creator.ts +202 -133
  141. package/src/content-character-set-creators.ts +9 -0
  142. package/src/gtin-creator.ts +16 -15
  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/{creators.ts → identifier-creators.ts} +40 -26
  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} +51 -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 +17 -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 +12 -0
  163. package/src/non-serializable-numeric-identifier-descriptor.ts +7 -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 +67 -64
  171. package/src/serializable-numeric-identifier-creator.ts +11 -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/non-gtin-numeric-identifier-validator.ts +7 -2
  179. package/test/non-serializable-numeric-identifier-creator.ts +64 -0
  180. package/test/non-serializable-numeric-identifier-validator.ts +6 -0
  181. package/test/numeric-identifier-creator.ts +7 -2
  182. package/test/validator.test.ts +11 -10
  183. package/test/variable-measure-rcn.test.ts +23 -23
  184. package/dist/abstract-identifier-validator.d.ts +0 -95
  185. package/dist/abstract-identifier-validator.d.ts.map +0 -1
  186. package/dist/abstract-identifier-validator.js +0 -123
  187. package/dist/abstract-identifier-validator.js.map +0 -1
  188. package/dist/abstract-numeric-identifier-validator.d.ts +0 -35
  189. package/dist/abstract-numeric-identifier-validator.d.ts.map +0 -1
  190. package/dist/abstract-numeric-identifier-validator.js +0 -61
  191. package/dist/abstract-numeric-identifier-validator.js.map +0 -1
  192. package/dist/creators.d.ts.map +0 -1
  193. package/dist/creators.js.map +0 -1
  194. package/dist/descriptors.d.ts.map +0 -1
  195. package/dist/descriptors.js.map +0 -1
  196. package/dist/validators.d.ts.map +0 -1
  197. package/dist/validators.js.map +0 -1
  198. package/src/abstract-identifier-validator.ts +0 -140
  199. package/src/abstract-numeric-identifier-validator.ts +0 -69
@@ -1,13 +1,13 @@
1
- import { type IdentifierCreatorsRecord, isNumericIdentifierCreator } from "./creators.js";
2
1
  import { GTINCreator } from "./gtin-creator.js";
3
- import { GTIN_BASE_TYPES } from "./gtin-type.js";
2
+ import { GTIN_BASE_TYPES } from "./gtin-length.js";
4
3
  import type { IdentifierCreator } from "./identifier-creator.js";
4
+ import { type IdentifierCreatorsRecord, isNumericIdentifierCreator } from "./identifier-creators.js";
5
5
  import { type IdentifierType, IdentifierTypes } from "./identifier-type.js";
6
6
  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
7
  import { NonNumericIdentifierCreator } from "./non-numeric-identifier-creator.js";
10
8
  import type { NonNumericIdentifierType } from "./non-numeric-identifier-type.js";
9
+ import { NonSerializableNumericIdentifierCreator } from "./non-serializable-numeric-identifier-creator.js";
10
+ import type { NonSerializableNumericIdentifierType } from "./non-serializable-numeric-identifier-type.js";
11
11
  import type { NumericIdentifierType } from "./numeric-identifier-type.js";
12
12
  import type { PrefixProvider } from "./prefix-provider.js";
13
13
  import { type PrefixType, PrefixTypes } from "./prefix-type.js";
@@ -39,13 +39,13 @@ export class PrefixManager implements PrefixProvider {
39
39
  /**
40
40
  * Cached prefix managers, keyed by GS1 Company Prefix.
41
41
  */
42
- private static readonly PREFIX_MANAGERS_MAP = new Map<string, PrefixManager>();
42
+ static readonly #PREFIX_MANAGERS_MAP = new Map<string, PrefixManager>();
43
43
 
44
44
  /**
45
45
  * Creator tweak factors. Different numeric identifier types have different tweak factors so that sparse creation
46
46
  * generates different sequences for each.
47
47
  */
48
- private static readonly CREATOR_TWEAK_FACTORS: Readonly<Record<NumericIdentifierType, bigint>> = {
48
+ static readonly #CREATOR_TWEAK_FACTORS: Readonly<Record<NumericIdentifierType, bigint>> = {
49
49
  GTIN: 1987n,
50
50
  GLN: 4241n,
51
51
  SSCC: 8087n,
@@ -59,42 +59,42 @@ export class PrefixManager implements PrefixProvider {
59
59
  /**
60
60
  * Normalized prefix type.
61
61
  */
62
- private readonly _prefixType: PrefixType;
62
+ readonly #prefixType: PrefixType;
63
63
 
64
64
  /**
65
65
  * Normalized prefix.
66
66
  */
67
- private readonly _prefix: string;
67
+ readonly #prefix: string;
68
68
 
69
69
  /**
70
70
  * Prefix as GS1 Company Prefix.
71
71
  */
72
- private readonly _gs1CompanyPrefix: string;
72
+ readonly #gs1CompanyPrefix: string;
73
73
 
74
74
  /**
75
75
  * U.P.C. Company Prefix if prefix type is {@linkcode PrefixTypes.UPCCompanyPrefix}.
76
76
  */
77
- private readonly _upcCompanyPrefix: string | undefined;
77
+ readonly #upcCompanyPrefix: string | undefined;
78
78
 
79
79
  /**
80
80
  * GS1-8 Prefix if prefix type is {@linkcode PrefixTypes.GS18Prefix}.
81
81
  */
82
- private readonly _gs18Prefix: string | undefined;
82
+ readonly #gs18Prefix: string | undefined;
83
83
 
84
84
  /**
85
85
  * Default tweak factor.
86
86
  */
87
- private readonly _defaultTweakFactor: bigint;
87
+ readonly #defaultTweakFactor: bigint;
88
88
 
89
89
  /**
90
90
  * Tweak factor.
91
91
  */
92
- private _tweakFactor = 0n;
92
+ #tweakFactor = 0n;
93
93
 
94
94
  /**
95
95
  * Cached identifier creators.
96
96
  */
97
- private readonly _identifierCreators: Partial<IdentifierCreatorsRecord> = {};
97
+ readonly #identifierCreators: Partial<IdentifierCreatorsRecord> = {};
98
98
 
99
99
  /**
100
100
  * Constructor.
@@ -108,14 +108,14 @@ export class PrefixManager implements PrefixProvider {
108
108
  constructor(prefixType: PrefixType, prefix: string) {
109
109
  const normalizedPrefixProvider = PrefixValidator.normalize(prefixType, prefix);
110
110
 
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;
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;
116
116
 
117
117
  // Default tweak factor is the numeric value of the GS1 Company Prefix preceded by '1'.
118
- this._defaultTweakFactor = BigInt(`1${this.gs1CompanyPrefix}`);
118
+ this.#defaultTweakFactor = BigInt(`1${this.gs1CompanyPrefix}`);
119
119
 
120
120
  this.resetTweakFactor();
121
121
  }
@@ -124,35 +124,35 @@ export class PrefixManager implements PrefixProvider {
124
124
  * Get the prefix type.
125
125
  */
126
126
  get prefixType(): PrefixType {
127
- return this._prefixType;
127
+ return this.#prefixType;
128
128
  }
129
129
 
130
130
  /**
131
131
  * Get the prefix.
132
132
  */
133
133
  get prefix(): string {
134
- return this._prefix;
134
+ return this.#prefix;
135
135
  }
136
136
 
137
137
  /**
138
138
  * Get the GS1 Company Prefix.
139
139
  */
140
140
  get gs1CompanyPrefix(): string {
141
- return this._gs1CompanyPrefix;
141
+ return this.#gs1CompanyPrefix;
142
142
  }
143
143
 
144
144
  /**
145
145
  * Get the U.P.C. Company Prefix if prefix type is {@linkcode PrefixTypes.UPCCompanyPrefix} or undefined if not.
146
146
  */
147
147
  get upcCompanyPrefix(): string | undefined {
148
- return this._upcCompanyPrefix;
148
+ return this.#upcCompanyPrefix;
149
149
  }
150
150
 
151
151
  /**
152
152
  * Get the GS1-8 Prefix if prefix type is {@linkcode PrefixTypes.GS18Prefix} or undefined if not.
153
153
  */
154
154
  get gs18Prefix(): string | undefined {
155
- return this._gs18Prefix;
155
+ return this.#gs18Prefix;
156
156
  }
157
157
 
158
158
  /**
@@ -161,10 +161,10 @@ export class PrefixManager implements PrefixProvider {
161
161
  * @param identifierCreator
162
162
  * Identifier creator.
163
163
  */
164
- private setCreatorTweak(identifierCreator: IdentifierCreator): void {
164
+ #setCreatorTweak(identifierCreator: IdentifierCreator): void {
165
165
  if (isNumericIdentifierCreator(identifierCreator)) {
166
166
  // 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];
167
+ identifierCreator.tweak = this.tweakFactor * PrefixManager.#CREATOR_TWEAK_FACTORS[identifierCreator.identifierType];
168
168
  }
169
169
  }
170
170
 
@@ -172,7 +172,7 @@ export class PrefixManager implements PrefixProvider {
172
172
  * Get the tweak factor.
173
173
  */
174
174
  get tweakFactor(): bigint {
175
- return this._tweakFactor;
175
+ return this.#tweakFactor;
176
176
  }
177
177
 
178
178
  /**
@@ -184,11 +184,11 @@ export class PrefixManager implements PrefixProvider {
184
184
  set tweakFactor(value: number | bigint) {
185
185
  const tweakFactor = BigInt(value);
186
186
 
187
- if (this._tweakFactor !== tweakFactor) {
188
- this._tweakFactor = tweakFactor;
187
+ if (this.#tweakFactor !== tweakFactor) {
188
+ this.#tweakFactor = tweakFactor;
189
189
 
190
- for (const creator of Object.values(this._identifierCreators)) {
191
- this.setCreatorTweak(creator);
190
+ for (const creator of Object.values(this.#identifierCreators)) {
191
+ this.#setCreatorTweak(creator);
192
192
  }
193
193
  }
194
194
  }
@@ -197,7 +197,7 @@ export class PrefixManager implements PrefixProvider {
197
197
  * Reset the tweak factor to its default (numeric value of the GS1 Company Prefix preceded by '1').
198
198
  */
199
199
  resetTweakFactor(): void {
200
- this.tweakFactor = this._defaultTweakFactor;
200
+ this.tweakFactor = this.#defaultTweakFactor;
201
201
  }
202
202
 
203
203
  /**
@@ -216,11 +216,11 @@ export class PrefixManager implements PrefixProvider {
216
216
  // Normalization will occur in constructor as well, but it's necessary here for the map.
217
217
  const normalizedPrefixProvider = PrefixValidator.normalize(prefixType, prefix);
218
218
 
219
- let prefixManager = PrefixManager.PREFIX_MANAGERS_MAP.get(normalizedPrefixProvider.gs1CompanyPrefix);
219
+ let prefixManager = PrefixManager.#PREFIX_MANAGERS_MAP.get(normalizedPrefixProvider.gs1CompanyPrefix);
220
220
 
221
221
  if (prefixManager === undefined) {
222
222
  prefixManager = new PrefixManager(normalizedPrefixProvider.prefixType, normalizedPrefixProvider.prefix);
223
- PrefixManager.PREFIX_MANAGERS_MAP.set(normalizedPrefixProvider.gs1CompanyPrefix, prefixManager);
223
+ PrefixManager.#PREFIX_MANAGERS_MAP.set(normalizedPrefixProvider.gs1CompanyPrefix, prefixManager);
224
224
  }
225
225
 
226
226
  return prefixManager;
@@ -232,11 +232,14 @@ export class PrefixManager implements PrefixProvider {
232
232
  * @template TIdentifierType
233
233
  * Identifier type type.
234
234
  *
235
+ * @template TConstructorArgument
236
+ * Second constructor argument type.
237
+ *
235
238
  * @param identifierType
236
239
  * Identifier type used to construct identifier creator.
237
240
  *
238
- * @param constructorParameter
239
- * Second constructor parameter passed to constructor callback alongside this.
241
+ * @param constructorArgument
242
+ * Second constructor argument passed to constructor callback alongside this.
240
243
  *
241
244
  * @param ConstructorCallback
242
245
  * Constructor callback.
@@ -244,8 +247,8 @@ export class PrefixManager implements PrefixProvider {
244
247
  * @returns
245
248
  * Identifier creator.
246
249
  */
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];
250
+ #getIdentifierCreator<TIdentifierType extends IdentifierType, TConstructorArgument>(identifierType: TIdentifierType, constructorArgument: TConstructorArgument, ConstructorCallback: new (prefixProvider: PrefixProvider, constructorParameter: TConstructorArgument) => IdentifierCreatorsRecord[TIdentifierType]): IdentifierCreatorsRecord[TIdentifierType] {
251
+ let creator: IdentifierCreatorsRecord[TIdentifierType] | undefined = this.#identifierCreators[identifierType];
249
252
 
250
253
  if (creator === undefined) {
251
254
  if (this.prefixType === PrefixTypes.GS18Prefix && identifierType !== IdentifierTypes.GTIN) {
@@ -254,11 +257,11 @@ export class PrefixManager implements PrefixProvider {
254
257
  }));
255
258
  }
256
259
 
257
- creator = new ConstructorCallback(this, constructorParameter);
260
+ creator = new ConstructorCallback(this, constructorArgument);
258
261
 
259
- this.setCreatorTweak(creator);
262
+ this.#setCreatorTweak(creator);
260
263
 
261
- this._identifierCreators[identifierType] = creator;
264
+ this.#identifierCreators[identifierType] = creator;
262
265
  }
263
266
 
264
267
  return creator;
@@ -273,8 +276,8 @@ export class PrefixManager implements PrefixProvider {
273
276
  * @returns
274
277
  * Identifier creator.
275
278
  */
276
- private getNonGTINNumericIdentifierCreator(identifierType: Exclude<NonGTINNumericIdentifierType, SerializableNumericIdentifierType>): NonGTINNumericIdentifierCreator {
277
- return this.getIdentifierCreator(identifierType, identifierType, NonGTINNumericIdentifierCreator);
279
+ #getNonGTINNumericIdentifierCreator(identifierType: NonSerializableNumericIdentifierType): NonSerializableNumericIdentifierCreator {
280
+ return this.#getIdentifierCreator(identifierType, identifierType, NonSerializableNumericIdentifierCreator);
278
281
  }
279
282
 
280
283
  /**
@@ -286,8 +289,8 @@ export class PrefixManager implements PrefixProvider {
286
289
  * @returns
287
290
  * Identifier creator.
288
291
  */
289
- private getSerializableNumericIdentifierCreator(identifierType: SerializableNumericIdentifierType): SerializableNumericIdentifierCreator {
290
- return this.getIdentifierCreator(identifierType, identifierType, SerializableNumericIdentifierCreator);
292
+ #getSerializableNumericIdentifierCreator(identifierType: SerializableNumericIdentifierType): SerializableNumericIdentifierCreator {
293
+ return this.#getIdentifierCreator(identifierType, identifierType, SerializableNumericIdentifierCreator);
291
294
  }
292
295
 
293
296
  /**
@@ -299,91 +302,91 @@ export class PrefixManager implements PrefixProvider {
299
302
  * @returns
300
303
  * Identifier creator.
301
304
  */
302
- private getNonNumericIdentifierCreator(identifierType: NonNumericIdentifierType): NonNumericIdentifierCreator {
303
- return this.getIdentifierCreator(identifierType, identifierType, NonNumericIdentifierCreator);
305
+ #getNonNumericIdentifierCreator(identifierType: NonNumericIdentifierType): NonNumericIdentifierCreator {
306
+ return this.#getIdentifierCreator(identifierType, identifierType, NonNumericIdentifierCreator);
304
307
  }
305
308
 
306
309
  /**
307
310
  * Get GTIN creator.
308
311
  */
309
312
  get gtinCreator(): GTINCreator {
310
- return this.getIdentifierCreator(IdentifierTypes.GTIN, GTIN_BASE_TYPES[this.prefixType], GTINCreator);
313
+ return this.#getIdentifierCreator(IdentifierTypes.GTIN, GTIN_BASE_TYPES[this.prefixType], GTINCreator);
311
314
  }
312
315
 
313
316
  /**
314
317
  * Get GLN creator.
315
318
  */
316
- get glnCreator(): NonGTINNumericIdentifierCreator {
317
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.GLN);
319
+ get glnCreator(): NonSerializableNumericIdentifierCreator {
320
+ return this.#getNonGTINNumericIdentifierCreator(IdentifierTypes.GLN);
318
321
  }
319
322
 
320
323
  /**
321
324
  * Get SSCC creator.
322
325
  */
323
- get ssccCreator(): NonGTINNumericIdentifierCreator {
324
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.SSCC);
326
+ get ssccCreator(): NonSerializableNumericIdentifierCreator {
327
+ return this.#getNonGTINNumericIdentifierCreator(IdentifierTypes.SSCC);
325
328
  }
326
329
 
327
330
  /**
328
331
  * Get GRAI creator.
329
332
  */
330
333
  get graiCreator(): SerializableNumericIdentifierCreator {
331
- return this.getSerializableNumericIdentifierCreator(IdentifierTypes.GRAI);
334
+ return this.#getSerializableNumericIdentifierCreator(IdentifierTypes.GRAI);
332
335
  }
333
336
 
334
337
  /**
335
338
  * Get GIAI creator.
336
339
  */
337
340
  get giaiCreator(): NonNumericIdentifierCreator {
338
- return this.getNonNumericIdentifierCreator(IdentifierTypes.GIAI);
341
+ return this.#getNonNumericIdentifierCreator(IdentifierTypes.GIAI);
339
342
  }
340
343
 
341
344
  /**
342
345
  * Get GSRN creator.
343
346
  */
344
- get gsrnCreator(): NonGTINNumericIdentifierCreator {
345
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.GSRN);
347
+ get gsrnCreator(): NonSerializableNumericIdentifierCreator {
348
+ return this.#getNonGTINNumericIdentifierCreator(IdentifierTypes.GSRN);
346
349
  }
347
350
 
348
351
  /**
349
352
  * Get GDTI creator.
350
353
  */
351
354
  get gdtiCreator(): SerializableNumericIdentifierCreator {
352
- return this.getSerializableNumericIdentifierCreator(IdentifierTypes.GDTI);
355
+ return this.#getSerializableNumericIdentifierCreator(IdentifierTypes.GDTI);
353
356
  }
354
357
 
355
358
  /**
356
359
  * Get GINC creator.
357
360
  */
358
361
  get gincCreator(): NonNumericIdentifierCreator {
359
- return this.getNonNumericIdentifierCreator(IdentifierTypes.GINC);
362
+ return this.#getNonNumericIdentifierCreator(IdentifierTypes.GINC);
360
363
  }
361
364
 
362
365
  /**
363
366
  * Get GSIN creator.
364
367
  */
365
- get gsinCreator(): NonGTINNumericIdentifierCreator {
366
- return this.getNonGTINNumericIdentifierCreator(IdentifierTypes.GSIN);
368
+ get gsinCreator(): NonSerializableNumericIdentifierCreator {
369
+ return this.#getNonGTINNumericIdentifierCreator(IdentifierTypes.GSIN);
367
370
  }
368
371
 
369
372
  /**
370
373
  * Get GCN creator.
371
374
  */
372
375
  get gcnCreator(): SerializableNumericIdentifierCreator {
373
- return this.getSerializableNumericIdentifierCreator(IdentifierTypes.GCN);
376
+ return this.#getSerializableNumericIdentifierCreator(IdentifierTypes.GCN);
374
377
  }
375
378
 
376
379
  /**
377
380
  * Get CPID creator.
378
381
  */
379
382
  get cpidCreator(): NonNumericIdentifierCreator {
380
- return this.getNonNumericIdentifierCreator(IdentifierTypes.CPID);
383
+ return this.#getNonNumericIdentifierCreator(IdentifierTypes.CPID);
381
384
  }
382
385
 
383
386
  /**
384
387
  * Get GMN creator.
385
388
  */
386
389
  get gmnCreator(): NonNumericIdentifierCreator {
387
- return this.getNonNumericIdentifierCreator(IdentifierTypes.GMN);
390
+ return this.#getNonNumericIdentifierCreator(IdentifierTypes.GMN);
388
391
  }
389
392
  }
@@ -1,30 +1,16 @@
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
+ typeof SerializableNumericIdentifierValidator
13
+ >(SerializableNumericIdentifierValidator) {
28
14
  /**
29
15
  * Concatenate a validated base identifier with serial component(s).
30
16
  *
@@ -40,7 +26,7 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
40
26
  * @returns
41
27
  * Serialized identifier(s).
42
28
  */
43
- private concatenateValidated<TTransformerInput extends TransformerInput<string>>(baseIdentifier: string, serialComponentOrComponents: TTransformerInput): TransformerOutput<TTransformerInput, string> {
29
+ #concatenateValidated<TTransformerInput extends TransformerInput<string>>(baseIdentifier: string, serialComponentOrComponents: TTransformerInput): TransformerOutput<TTransformerInput, string> {
44
30
  // TODO Refactor type when https://github.com/microsoft/TypeScript/pull/56941 released.
45
31
  let result: string | Iterable<string>;
46
32
 
@@ -74,7 +60,7 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
74
60
 
75
61
  /**
76
62
  * 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.
63
+ * The value is converted to a reference of the appropriate length using {@linkcode NUMERIC_CREATOR}.
78
64
  *
79
65
  * @template TTransformerInput
80
66
  * Transformer input type.
@@ -92,7 +78,7 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
92
78
  * Serialized identifiers.
93
79
  */
94
80
  createSerialized<TTransformerInput extends TransformerInput<string>>(value: number, serialComponentOrComponents: TTransformerInput, sparse?: boolean): TransformerOutput<TTransformerInput, string> {
95
- return this.concatenateValidated(this.create(value, sparse), serialComponentOrComponents);
81
+ return this.#concatenateValidated(this.create(value, sparse), serialComponentOrComponents);
96
82
  }
97
83
 
98
84
  /**
@@ -113,6 +99,6 @@ export class SerializableNumericIdentifierCreator extends Mixin(SerializableNume
113
99
  concatenate<TTransformerInput extends TransformerInput<string>>(baseIdentifier: string, serialComponentOrComponents: TTransformerInput): TransformerOutput<TTransformerInput, string> {
114
100
  this.validate(baseIdentifier);
115
101
 
116
- return this.concatenateValidated(baseIdentifier, serialComponentOrComponents);
102
+ return this.#concatenateValidated(baseIdentifier, serialComponentOrComponents);
117
103
  }
118
104
  }
@@ -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");
@@ -1,8 +1,8 @@
1
1
  import { describe, expect, test } from "vitest";
2
2
  import {
3
- type GTINBaseType,
3
+ type GTINBaseLength,
4
+ GTINLengths,
4
5
  GTINLevels,
5
- GTINTypes,
6
6
  GTINValidator,
7
7
  IdentifierTypes,
8
8
  LeaderTypes,
@@ -11,26 +11,24 @@ import {
11
11
  } from "../src/index.js";
12
12
  import { validateNumericIdentifierValidator } from "./numeric-identifier-validator.js";
13
13
 
14
- export function validateGTINValidator(validator: GTINValidator, isCreator: boolean, gtinBaseType: GTINBaseType): void {
14
+ export function validateGTINValidator(validator: GTINValidator, isCreator: boolean, gtinBaseLength: GTINBaseLength): void {
15
15
  let prefixType: PrefixType;
16
16
 
17
- switch (gtinBaseType) {
18
- case GTINTypes.GTIN13:
17
+ switch (gtinBaseLength) {
18
+ case GTINLengths.GTIN13:
19
19
  prefixType = PrefixTypes.GS1CompanyPrefix;
20
20
  break;
21
21
 
22
- case GTINTypes.GTIN12:
22
+ case GTINLengths.GTIN12:
23
23
  prefixType = PrefixTypes.UPCCompanyPrefix;
24
24
  break;
25
25
 
26
- case GTINTypes.GTIN8:
26
+ case GTINLengths.GTIN8:
27
27
  prefixType = PrefixTypes.GS18Prefix;
28
28
  break;
29
29
  }
30
30
 
31
- validateNumericIdentifierValidator(validator, IdentifierTypes.GTIN, prefixType, gtinBaseType, LeaderTypes.IndicatorDigit);
32
-
33
- expect(validator.gtinType).toBe(gtinBaseType);
31
+ validateNumericIdentifierValidator(validator, IdentifierTypes.GTIN, prefixType, gtinBaseLength, LeaderTypes.IndicatorDigit);
34
32
  }
35
33
 
36
34
  describe("GTIN validation and normalization", () => {