@aidc-toolkit/gs1 0.9.20-beta → 1.0.22-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 (131) hide show
  1. package/dist/character-set.d.ts +4 -4
  2. package/dist/character-set.d.ts.map +1 -1
  3. package/dist/character-set.js +7 -7
  4. package/dist/character-set.js.map +1 -1
  5. package/dist/gtin-creator.d.ts +68 -0
  6. package/dist/gtin-creator.d.ts.map +1 -0
  7. package/dist/gtin-creator.js +158 -0
  8. package/dist/gtin-creator.js.map +1 -0
  9. package/dist/gtin-validator.d.ts +202 -0
  10. package/dist/gtin-validator.d.ts.map +1 -0
  11. package/dist/gtin-validator.js +470 -0
  12. package/dist/gtin-validator.js.map +1 -0
  13. package/dist/identifier-creator.d.ts +72 -0
  14. package/dist/identifier-creator.d.ts.map +1 -0
  15. package/dist/identifier-creator.js +50 -0
  16. package/dist/identifier-creator.js.map +1 -0
  17. package/dist/identifier-type.d.ts +58 -0
  18. package/dist/identifier-type.d.ts.map +1 -0
  19. package/dist/identifier-type.js +54 -0
  20. package/dist/identifier-type.js.map +1 -0
  21. package/dist/identifier-validator.d.ts +174 -0
  22. package/dist/identifier-validator.d.ts.map +1 -0
  23. package/dist/identifier-validator.js +145 -0
  24. package/dist/identifier-validator.js.map +1 -0
  25. package/dist/index.d.ts +16 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +16 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/locale/en/locale-strings.d.ts +3 -3
  30. package/dist/locale/en/locale-strings.js +3 -3
  31. package/dist/locale/en/locale-strings.js.map +1 -1
  32. package/dist/locale/fr/locale-strings.d.ts +3 -3
  33. package/dist/locale/fr/locale-strings.js +3 -3
  34. package/dist/locale/fr/locale-strings.js.map +1 -1
  35. package/dist/non-gtin-numeric-identifier-creator.d.ts +30 -0
  36. package/dist/non-gtin-numeric-identifier-creator.d.ts.map +1 -0
  37. package/dist/non-gtin-numeric-identifier-creator.js +30 -0
  38. package/dist/non-gtin-numeric-identifier-creator.js.map +1 -0
  39. package/dist/non-gtin-numeric-identifier-validator.d.ts +41 -0
  40. package/dist/non-gtin-numeric-identifier-validator.d.ts.map +1 -0
  41. package/dist/non-gtin-numeric-identifier-validator.js +40 -0
  42. package/dist/non-gtin-numeric-identifier-validator.js.map +1 -0
  43. package/dist/non-numeric-identifier-creator.d.ts +55 -0
  44. package/dist/non-numeric-identifier-creator.d.ts.map +1 -0
  45. package/dist/non-numeric-identifier-creator.js +93 -0
  46. package/dist/non-numeric-identifier-creator.js.map +1 -0
  47. package/dist/non-numeric-identifier-validator.d.ts +78 -0
  48. package/dist/non-numeric-identifier-validator.d.ts.map +1 -0
  49. package/dist/non-numeric-identifier-validator.js +95 -0
  50. package/dist/non-numeric-identifier-validator.js.map +1 -0
  51. package/dist/numeric-identifier-creator.d.ts +121 -0
  52. package/dist/numeric-identifier-creator.d.ts.map +1 -0
  53. package/dist/numeric-identifier-creator.js +135 -0
  54. package/dist/numeric-identifier-creator.js.map +1 -0
  55. package/dist/numeric-identifier-validator.d.ts +76 -0
  56. package/dist/numeric-identifier-validator.d.ts.map +1 -0
  57. package/dist/numeric-identifier-validator.js +84 -0
  58. package/dist/numeric-identifier-validator.js.map +1 -0
  59. package/dist/prefix-manager.d.ts +224 -0
  60. package/dist/prefix-manager.d.ts.map +1 -0
  61. package/dist/prefix-manager.js +369 -0
  62. package/dist/prefix-manager.js.map +1 -0
  63. package/dist/prefix-provider.d.ts +27 -0
  64. package/dist/prefix-provider.d.ts.map +1 -0
  65. package/dist/prefix-provider.js +2 -0
  66. package/dist/prefix-provider.js.map +1 -0
  67. package/dist/prefix-type.d.ts +22 -0
  68. package/dist/prefix-type.d.ts.map +1 -0
  69. package/dist/prefix-type.js +18 -0
  70. package/dist/prefix-type.js.map +1 -0
  71. package/dist/prefix-validator.d.ts +58 -0
  72. package/dist/prefix-validator.d.ts.map +1 -0
  73. package/dist/prefix-validator.js +154 -0
  74. package/dist/prefix-validator.js.map +1 -0
  75. package/dist/serializable-numeric-identifier-creator.d.ts +86 -0
  76. package/dist/serializable-numeric-identifier-creator.d.ts.map +1 -0
  77. package/dist/serializable-numeric-identifier-creator.js +116 -0
  78. package/dist/serializable-numeric-identifier-creator.js.map +1 -0
  79. package/dist/serializable-numeric-identifier-validator.d.ts +79 -0
  80. package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -0
  81. package/dist/serializable-numeric-identifier-validator.js +99 -0
  82. package/dist/serializable-numeric-identifier-validator.js.map +1 -0
  83. package/gs1.iml +4 -1
  84. package/package.json +2 -3
  85. package/src/character-set.ts +7 -7
  86. package/src/gtin-creator.ts +195 -0
  87. package/src/gtin-validator.ts +564 -0
  88. package/src/identifier-creator.ts +97 -0
  89. package/src/identifier-type.ts +69 -0
  90. package/src/identifier-validator.ts +235 -0
  91. package/src/index.ts +16 -1
  92. package/src/locale/en/locale-strings.ts +3 -3
  93. package/src/locale/fr/locale-strings.ts +3 -3
  94. package/src/non-gtin-numeric-identifier-creator.ts +33 -0
  95. package/src/non-gtin-numeric-identifier-validator.ts +54 -0
  96. package/src/non-numeric-identifier-creator.ts +111 -0
  97. package/src/non-numeric-identifier-validator.ts +128 -0
  98. package/src/numeric-identifier-creator.ts +200 -0
  99. package/src/numeric-identifier-validator.ts +128 -0
  100. package/src/prefix-manager.ts +446 -0
  101. package/src/prefix-provider.ts +31 -0
  102. package/src/prefix-type.ts +24 -0
  103. package/src/prefix-validator.ts +191 -0
  104. package/src/serializable-numeric-identifier-creator.ts +128 -0
  105. package/src/serializable-numeric-identifier-validator.ts +124 -0
  106. package/test/check.test.ts +0 -4
  107. package/test/creator.test.ts +30 -0
  108. package/test/gtin-creator.ts +239 -0
  109. package/test/gtin-validator.test.ts +149 -0
  110. package/test/identifier-creator.ts +84 -0
  111. package/test/identifier-validator.ts +8 -0
  112. package/test/non-gtin-numeric-identifier-creator.ts +98 -0
  113. package/test/non-gtin-numeric-identifier-validator.ts +6 -0
  114. package/test/non-numeric-identifier-validator.ts +24 -0
  115. package/test/numeric-identifier-creator.ts +132 -0
  116. package/test/numeric-identifier-validator.ts +23 -0
  117. package/test/prefix-manager.test.ts +112 -0
  118. package/test/serializable-numeric-identifier-creator.ts +56 -0
  119. package/test/serializable-numeric-identifier-validator.ts +24 -0
  120. package/test/setup.ts +4 -0
  121. package/test/sparse.test.ts +56 -0
  122. package/test/utility.ts +22 -0
  123. package/test/validator.test.ts +52 -0
  124. package/test/variable-measure-rcn.test.ts +201 -0
  125. package/vitest.config.ts +7 -0
  126. package/dist/idkey.d.ts +0 -1346
  127. package/dist/idkey.d.ts.map +0 -1
  128. package/dist/idkey.js +0 -2024
  129. package/dist/idkey.js.map +0 -1
  130. package/src/idkey.ts +0 -2532
  131. package/test/idkey.test.ts +0 -1247
@@ -0,0 +1,369 @@
1
+ import { GTINCreator } from "./gtin-creator.js";
2
+ import { GTINTypes } from "./gtin-validator.js";
3
+ import { IdentifierTypes } from "./identifier-type.js";
4
+ import { i18nextGS1 } from "./locale/i18n.js";
5
+ import { NonGTINNumericIdentifierCreator } from "./non-gtin-numeric-identifier-creator.js";
6
+ import { GLN_VALIDATOR, GSIN_VALIDATOR, GSRN_VALIDATOR, SSCC_VALIDATOR } from "./non-gtin-numeric-identifier-validator.js";
7
+ import { NonNumericIdentifierCreator } from "./non-numeric-identifier-creator.js";
8
+ import { CPID_VALIDATOR, GIAI_VALIDATOR, GINC_VALIDATOR, GMN_VALIDATOR } from "./non-numeric-identifier-validator.js";
9
+ import { PrefixTypes } from "./prefix-type.js";
10
+ import { PrefixValidator } from "./prefix-validator.js";
11
+ import { SerializableNumericIdentifierCreator } from "./serializable-numeric-identifier-creator.js";
12
+ import { GCN_VALIDATOR, GDTI_VALIDATOR, GRAI_VALIDATOR } from "./serializable-numeric-identifier-validator.js";
13
+ /**
14
+ * Prefix manager. This is the core class for identifier creation.
15
+ *
16
+ * A prefix manager may be created for any {@link PrefixType | prefix type}. As most applications work with a limited
17
+ * number of prefixes for creating identifiers, prefix managers are cached in memory and may be reused.
18
+ *
19
+ * Prefix managers are keyed by GS1 Company Prefix, so the prefix type that is requested may not match the prefix type
20
+ * of the returned prefix manager. For example, the prefix manager for GS1 Company Prefix 0614141 is identical to the
21
+ * one for U.P.C. Company Prefix 614141, with the prefix type equal to {@link PrefixTypes.UPCCompanyPrefix} and the
22
+ * prefix equal to "614141".
23
+ *
24
+ * To support the creation of sparse identifiers, a prefix manager maintains a {@link tweakFactor | tweak
25
+ * factor} which is used, along with a type-specific multiplier, as the tweak when creating numeric identifiers.
26
+ * The default tweak factor is the numeric value of the GS1 Company Prefix representation of the prefix preceded by '1'
27
+ * to ensure uniqueness (i.e., so that prefixes 0 N1 N2 N3... and N1 N2 N3... produce different tweak factors). This is
28
+ * usually sufficient for obfuscation, but as the sparse creation algorithm is reversible and as the GS1 Company Prefix
29
+ * is discoverable via {@link https://www.gs1.org/services/verified-by-gs1 | Verified by GS1}, a user-defined tweak
30
+ * factor should be used if a higher degree of obfuscation is required. When using a tweak factor other than the
31
+ * default, care should be taken to restore it when resuming the application. A tweak factor of 0 creates a straight
32
+ * sequence.
33
+ */
34
+ export class PrefixManager {
35
+ /**
36
+ * Cached prefix managers, keyed by GS1 Company Prefix.
37
+ */
38
+ static PREFIX_MANAGERS_MAP = new Map();
39
+ /**
40
+ * Creator tweak factors. Different numeric identifier types have different tweak factors so that sparse
41
+ * creation generates different sequences for each.
42
+ */
43
+ static CREATOR_TWEAK_FACTORS_MAP = new Map([
44
+ [IdentifierTypes.GTIN, 1987n],
45
+ [IdentifierTypes.GLN, 4241n],
46
+ [IdentifierTypes.SSCC, 8087n],
47
+ [IdentifierTypes.GRAI, 3221n],
48
+ [IdentifierTypes.GSRN, 2341n],
49
+ [IdentifierTypes.GDTI, 7333n],
50
+ [IdentifierTypes.GSIN, 5623n],
51
+ [IdentifierTypes.GCN, 6869n]
52
+ ]);
53
+ /**
54
+ * Normalized prefix type.
55
+ */
56
+ _prefixType;
57
+ /**
58
+ * Normalized prefix.
59
+ */
60
+ _prefix;
61
+ /**
62
+ * Prefix as GS1 Company Prefix.
63
+ */
64
+ _gs1CompanyPrefix;
65
+ /**
66
+ * U.P.C. Company Prefix if prefix type is {@link PrefixTypes.UPCCompanyPrefix}.
67
+ */
68
+ _upcCompanyPrefix;
69
+ /**
70
+ * GS1-8 Prefix if prefix type is {@link PrefixTypes.GS18Prefix}.
71
+ */
72
+ _gs18Prefix;
73
+ /**
74
+ * Default tweak factor.
75
+ */
76
+ _defaultTweakFactor;
77
+ /**
78
+ * Tweak factor.
79
+ */
80
+ _tweakFactor = 0n;
81
+ /**
82
+ * Cached identifier creators.
83
+ */
84
+ _identifierCreatorsMap = new Map();
85
+ /**
86
+ * Constructor.
87
+ *
88
+ * @param gs1CompanyPrefix
89
+ * GS1 Company Prefix.
90
+ */
91
+ constructor(gs1CompanyPrefix) {
92
+ this._gs1CompanyPrefix = gs1CompanyPrefix;
93
+ // Determine the prefix type and populate the remaining fields.
94
+ if (!gs1CompanyPrefix.startsWith("0")) {
95
+ this._prefixType = PrefixTypes.GS1CompanyPrefix;
96
+ this._prefix = this._gs1CompanyPrefix;
97
+ }
98
+ else if (!gs1CompanyPrefix.startsWith("00000")) {
99
+ this._prefixType = PrefixTypes.UPCCompanyPrefix;
100
+ this._upcCompanyPrefix = gs1CompanyPrefix.substring(1);
101
+ this._prefix = this._upcCompanyPrefix;
102
+ }
103
+ else {
104
+ this._prefixType = PrefixTypes.GS18Prefix;
105
+ this._gs18Prefix = gs1CompanyPrefix.substring(5);
106
+ this._prefix = this._gs18Prefix;
107
+ }
108
+ // Default tweak factor is the numeric value of the GS1 Company Prefix preceded by '1'.
109
+ this._defaultTweakFactor = BigInt(`1${this.gs1CompanyPrefix}`);
110
+ this.resetTweakFactor();
111
+ }
112
+ /**
113
+ * Get the prefix type.
114
+ */
115
+ get prefixType() {
116
+ return this._prefixType;
117
+ }
118
+ /**
119
+ * Get the prefix.
120
+ */
121
+ get prefix() {
122
+ return this._prefix;
123
+ }
124
+ /**
125
+ * Get the GS1 Company Prefix.
126
+ */
127
+ get gs1CompanyPrefix() {
128
+ return this._gs1CompanyPrefix;
129
+ }
130
+ /**
131
+ * Get the U.P.C. Company Prefix if prefix type is {@link PrefixTypes.UPCCompanyPrefix} or undefined if not.
132
+ */
133
+ get upcCompanyPrefix() {
134
+ return this._upcCompanyPrefix;
135
+ }
136
+ /**
137
+ * Get the GS1-8 Prefix if prefix type is {@link PrefixTypes.GS18Prefix} or undefined if not.
138
+ */
139
+ get gs18Prefix() {
140
+ return this._gs18Prefix;
141
+ }
142
+ /**
143
+ * Set the tweak for an identifier creator if it's a numeric identifier creator.
144
+ *
145
+ * @param creator
146
+ * Identifier creator.
147
+ */
148
+ setCreatorTweak(creator) {
149
+ const creatorTweakFactor = PrefixManager.CREATOR_TWEAK_FACTORS_MAP.get(creator.identifierType);
150
+ // Creator tweak factor is defined for numeric identifiers only.
151
+ if (creatorTweakFactor !== undefined) {
152
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion,no-param-reassign -- Explicit cast without testing is necessary as "instanceof" doesn't work for mixin types. Method purpose is to set the tweak.
153
+ creator.tweak = this.tweakFactor * creatorTweakFactor;
154
+ }
155
+ }
156
+ /**
157
+ * Get the tweak factor.
158
+ */
159
+ get tweakFactor() {
160
+ return this._tweakFactor;
161
+ }
162
+ /**
163
+ * Set the tweak factor.
164
+ *
165
+ * @param value
166
+ * Tweak factor.
167
+ */
168
+ set tweakFactor(value) {
169
+ const tweakFactor = BigInt(value);
170
+ if (this._tweakFactor !== tweakFactor) {
171
+ this._tweakFactor = tweakFactor;
172
+ for (const creator of this._identifierCreatorsMap.values()) {
173
+ this.setCreatorTweak(creator);
174
+ }
175
+ }
176
+ }
177
+ /**
178
+ * Reset the tweak factor to its default (numeric value of the GS1 Company Prefix preceded by '1').
179
+ */
180
+ resetTweakFactor() {
181
+ this.tweakFactor = this._defaultTweakFactor;
182
+ }
183
+ /**
184
+ * Get a prefix manager.
185
+ *
186
+ * @param prefixType
187
+ * Prefix type.
188
+ *
189
+ * @param prefix
190
+ * Prefix.
191
+ *
192
+ * @returns
193
+ * Prefix manager with normalized prefix type and prefix.
194
+ */
195
+ static get(prefixType, prefix) {
196
+ PrefixValidator.validate(prefixType, true, true, prefix);
197
+ let gs1CompanyPrefix;
198
+ switch (prefixType) {
199
+ case PrefixTypes.GS1CompanyPrefix:
200
+ gs1CompanyPrefix = prefix;
201
+ break;
202
+ case PrefixTypes.UPCCompanyPrefix:
203
+ gs1CompanyPrefix = "0" + prefix;
204
+ break;
205
+ case PrefixTypes.GS18Prefix:
206
+ gs1CompanyPrefix = "00000" + prefix;
207
+ break;
208
+ // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- Method may be called by unsafe means.
209
+ default:
210
+ throw new RangeError(i18nextGS1.t("Prefix.invalidPrefixType"));
211
+ }
212
+ let prefixManager = PrefixManager.PREFIX_MANAGERS_MAP.get(gs1CompanyPrefix);
213
+ if (prefixManager === undefined) {
214
+ prefixManager = new PrefixManager(gs1CompanyPrefix);
215
+ PrefixManager.PREFIX_MANAGERS_MAP.set(gs1CompanyPrefix, prefixManager);
216
+ }
217
+ return prefixManager;
218
+ }
219
+ /**
220
+ * Get an identifier creator.
221
+ *
222
+ * @param identifierType
223
+ * Identifier type.
224
+ *
225
+ * @param constructorCallback
226
+ * Constructor callback.
227
+ *
228
+ * @returns
229
+ * Identifier creator.
230
+ */
231
+ getIdentifierCreator(identifierType, constructorCallback) {
232
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Type is paired with constructor callback.
233
+ let creator = this._identifierCreatorsMap.get(identifierType);
234
+ if (creator === undefined) {
235
+ if (this.prefixType === PrefixTypes.GS18Prefix && identifierType !== IdentifierTypes.GTIN) {
236
+ throw new RangeError(i18nextGS1.t("Prefix.identifierTypeNotSupportedByGS18Prefix", {
237
+ identifierType
238
+ }));
239
+ }
240
+ creator = constructorCallback();
241
+ this.setCreatorTweak(creator);
242
+ this._identifierCreatorsMap.set(identifierType, creator);
243
+ }
244
+ return creator;
245
+ }
246
+ /**
247
+ * Get non-GTIN numeric identifier creator.
248
+ *
249
+ * @param validator
250
+ * Validator on which identifier creator is based.
251
+ *
252
+ * @returns
253
+ * Identifier creator.
254
+ */
255
+ getNonGTINNumericIdentifierCreator(validator) {
256
+ return this.getIdentifierCreator(validator.identifierType, () => new NonGTINNumericIdentifierCreator(this, validator.identifierType, validator.length, validator.leaderType));
257
+ }
258
+ /**
259
+ * Get serialized numeric identifier creator.
260
+ *
261
+ * @param validator
262
+ * Validator on which identifier creator is based.
263
+ *
264
+ * @returns
265
+ * Identifier creator.
266
+ */
267
+ getSerializableNumericIdentifierCreator(validator) {
268
+ return this.getIdentifierCreator(validator.identifierType, () => new SerializableNumericIdentifierCreator(this, validator.identifierType, validator.length, validator.serialComponentLength, validator.serialComponentCharacterSet));
269
+ }
270
+ /**
271
+ * Get non-numeric identifier creator.
272
+ *
273
+ * @param validator
274
+ * Validator on which identifier creator is based.
275
+ *
276
+ * @returns
277
+ * Identifier creator.
278
+ */
279
+ getNonNumericIdentifierCreator(validator) {
280
+ return this.getIdentifierCreator(validator.identifierType, () => new NonNumericIdentifierCreator(this, validator.identifierType, validator.length, validator.referenceCharacterSet, validator.requiresCheckCharacterPair));
281
+ }
282
+ /**
283
+ * Get GTIN creator.
284
+ */
285
+ get gtinCreator() {
286
+ return this.getIdentifierCreator(IdentifierTypes.GTIN, () => {
287
+ let gtinType;
288
+ switch (this.prefixType) {
289
+ case PrefixTypes.GS1CompanyPrefix:
290
+ gtinType = GTINTypes.GTIN13;
291
+ break;
292
+ case PrefixTypes.UPCCompanyPrefix:
293
+ gtinType = GTINTypes.GTIN12;
294
+ break;
295
+ case PrefixTypes.GS18Prefix:
296
+ gtinType = GTINTypes.GTIN8;
297
+ break;
298
+ }
299
+ return new GTINCreator(this, gtinType);
300
+ });
301
+ }
302
+ /**
303
+ * Get GLN creator.
304
+ */
305
+ get glnCreator() {
306
+ return this.getNonGTINNumericIdentifierCreator(GLN_VALIDATOR);
307
+ }
308
+ /**
309
+ * Get SSCC creator.
310
+ */
311
+ get ssccCreator() {
312
+ return this.getNonGTINNumericIdentifierCreator(SSCC_VALIDATOR);
313
+ }
314
+ /**
315
+ * Get GRAI creator.
316
+ */
317
+ get graiCreator() {
318
+ return this.getSerializableNumericIdentifierCreator(GRAI_VALIDATOR);
319
+ }
320
+ /**
321
+ * Get GIAI creator.
322
+ */
323
+ get giaiCreator() {
324
+ return this.getNonNumericIdentifierCreator(GIAI_VALIDATOR);
325
+ }
326
+ /**
327
+ * Get GSRN creator.
328
+ */
329
+ get gsrnCreator() {
330
+ return this.getNonGTINNumericIdentifierCreator(GSRN_VALIDATOR);
331
+ }
332
+ /**
333
+ * Get GDTI creator.
334
+ */
335
+ get gdtiCreator() {
336
+ return this.getSerializableNumericIdentifierCreator(GDTI_VALIDATOR);
337
+ }
338
+ /**
339
+ * Get GINC creator.
340
+ */
341
+ get gincCreator() {
342
+ return this.getNonNumericIdentifierCreator(GINC_VALIDATOR);
343
+ }
344
+ /**
345
+ * Get GSIN creator.
346
+ */
347
+ get gsinCreator() {
348
+ return this.getNonGTINNumericIdentifierCreator(GSIN_VALIDATOR);
349
+ }
350
+ /**
351
+ * Get GCN creator.
352
+ */
353
+ get gcnCreator() {
354
+ return this.getSerializableNumericIdentifierCreator(GCN_VALIDATOR);
355
+ }
356
+ /**
357
+ * Get CPID creator.
358
+ */
359
+ get cpidCreator() {
360
+ return this.getNonNumericIdentifierCreator(CPID_VALIDATOR);
361
+ }
362
+ /**
363
+ * Get GMN creator.
364
+ */
365
+ get gmnCreator() {
366
+ return this.getNonNumericIdentifierCreator(GMN_VALIDATOR);
367
+ }
368
+ }
369
+ //# sourceMappingURL=prefix-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-manager.js","sourceRoot":"","sources":["../src/prefix-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { PrefixType } from "./prefix-type.js";
2
+ /**
3
+ * Prefix provider.
4
+ */
5
+ export interface PrefixProvider {
6
+ /**
7
+ * Prefix type.
8
+ */
9
+ readonly prefixType: PrefixType;
10
+ /**
11
+ * Prefix appropriate to the prefix type.
12
+ */
13
+ readonly prefix: string;
14
+ /**
15
+ * Prefix as GS1 Company Prefix.
16
+ */
17
+ readonly gs1CompanyPrefix: string;
18
+ /**
19
+ * Prefix as U.P.C. Company Prefix if prefix type is {@link PrefixTypes.UPCCompanyPrefix} or undefined if not.
20
+ */
21
+ readonly upcCompanyPrefix: string | undefined;
22
+ /**
23
+ * Prefix as GS1-8 Prefix if prefix type is {@link PrefixTypes.GS18Prefix} or undefined if not.
24
+ */
25
+ readonly gs18Prefix: string | undefined;
26
+ }
27
+ //# sourceMappingURL=prefix-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-provider.d.ts","sourceRoot":"","sources":["../src/prefix-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prefix-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-provider.js","sourceRoot":"","sources":["../src/prefix-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Prefix types.
3
+ */
4
+ export declare const PrefixTypes: {
5
+ /**
6
+ * GS1 Company Prefix.
7
+ */
8
+ readonly GS1CompanyPrefix: "GS1 Company Prefix";
9
+ /**
10
+ * U.P.C. Company Prefix.
11
+ */
12
+ readonly UPCCompanyPrefix: "U.P.C. Company Prefix";
13
+ /**
14
+ * GS1-8 Prefix.
15
+ */
16
+ readonly GS18Prefix: "GS1-8 Prefix";
17
+ };
18
+ /**
19
+ * Prefix type.
20
+ */
21
+ export type PrefixType = typeof PrefixTypes[keyof typeof PrefixTypes];
22
+ //# sourceMappingURL=prefix-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-type.d.ts","sourceRoot":"","sources":["../src/prefix-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW;IACpB;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;CAEG,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Prefix types.
3
+ */
4
+ export const PrefixTypes = {
5
+ /**
6
+ * GS1 Company Prefix.
7
+ */
8
+ GS1CompanyPrefix: "GS1 Company Prefix",
9
+ /**
10
+ * U.P.C. Company Prefix.
11
+ */
12
+ UPCCompanyPrefix: "U.P.C. Company Prefix",
13
+ /**
14
+ * GS1-8 Prefix.
15
+ */
16
+ GS18Prefix: "GS1-8 Prefix"
17
+ };
18
+ //# sourceMappingURL=prefix-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-type.js","sourceRoot":"","sources":["../src/prefix-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB;;OAEG;IACH,gBAAgB,EAAE,oBAAoB;IAEtC;;OAEG;IACH,gBAAgB,EAAE,uBAAuB;IAEzC;;OAEG;IACH,UAAU,EAAE,cAAc;CACpB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { type CharacterSetValidation } from "@aidc-toolkit/utility";
2
+ import { type PrefixType } from "./prefix-type.js";
3
+ /**
4
+ * Prefix validation parameters.
5
+ */
6
+ export interface PrefixValidation extends CharacterSetValidation {
7
+ /**
8
+ * Minimum length.
9
+ */
10
+ minimumLength: number;
11
+ /**
12
+ * Maximum length.
13
+ */
14
+ maximumLength: number;
15
+ /**
16
+ * Callback to localized prefix type name.
17
+ */
18
+ component: () => string;
19
+ }
20
+ /**
21
+ * Validate a prefix.
22
+ *
23
+ * @param prefixType
24
+ * Prefix type.
25
+ *
26
+ * @param allowUPCCompanyPrefix
27
+ * If true, a U.P.C. Company Prefix expressed as a GS1 Company Prefix is permitted.
28
+ *
29
+ * @param allowGS18Prefix
30
+ * If true, a GS1-8 Prefix expressed as a GS1 Company Prefix is permitted.
31
+ *
32
+ * @param prefix
33
+ * Prefix.
34
+ *
35
+ * @param isFromIdentifier
36
+ * If true, the prefix is from an identifier and should be trimmed before its character set is validated.
37
+ *
38
+ * @param isNumericIdentifier
39
+ * If true, the prefix is from a numeric identifier and its character set will be validated by the caller.
40
+ *
41
+ * @param positionOffset
42
+ * Position offset within a larger string.
43
+ */
44
+ declare function validate(prefixType: PrefixType, allowUPCCompanyPrefix: boolean, allowGS18Prefix: boolean, prefix: string, isFromIdentifier?: boolean, isNumericIdentifier?: boolean, positionOffset?: number): void;
45
+ /**
46
+ * Prefix validator.
47
+ */
48
+ export declare const PrefixValidator: {
49
+ readonly GS1_COMPANY_PREFIX_MINIMUM_LENGTH: 4;
50
+ readonly GS1_COMPANY_PREFIX_MAXIMUM_LENGTH: 12;
51
+ readonly UPC_COMPANY_PREFIX_MINIMUM_LENGTH: 6;
52
+ readonly UPC_COMPANY_PREFIX_MAXIMUM_LENGTH: 11;
53
+ readonly GS1_8_PREFIX_MINIMUM_LENGTH: 2;
54
+ readonly GS1_8_PREFIX_MAXIMUM_LENGTH: 7;
55
+ readonly validate: typeof validate;
56
+ };
57
+ export {};
58
+ //# sourceMappingURL=prefix-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-validator.d.ts","sourceRoot":"","sources":["../src/prefix-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,sBAAsB;IAC5D;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,MAAM,MAAM,CAAC;CAC3B;AA6ED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iBAAS,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,UAAQ,EAAE,mBAAmB,UAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAsDxM;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;CAQlB,CAAC"}
@@ -0,0 +1,154 @@
1
+ import { NUMERIC_CREATOR } from "@aidc-toolkit/utility";
2
+ import { i18nextGS1 } from "./locale/i18n.js";
3
+ import { PrefixTypes } from "./prefix-type.js";
4
+ /**
5
+ * GS1 Company Prefix minimum length.
6
+ */
7
+ const GS1_COMPANY_PREFIX_MINIMUM_LENGTH = 4;
8
+ /**
9
+ * GS1 Company Prefix maximum length.
10
+ */
11
+ const GS1_COMPANY_PREFIX_MAXIMUM_LENGTH = 12;
12
+ /**
13
+ * U.P.C. Company Prefix minimum length.
14
+ */
15
+ const UPC_COMPANY_PREFIX_MINIMUM_LENGTH = 6;
16
+ /**
17
+ * U.P.C. Company Prefix maximum length.
18
+ */
19
+ const UPC_COMPANY_PREFIX_MAXIMUM_LENGTH = 11;
20
+ /**
21
+ * GS1-8 Prefix minimum length.
22
+ */
23
+ const GS1_8_PREFIX_MINIMUM_LENGTH = 2;
24
+ /**
25
+ * GS1-8 Prefix maximum length.
26
+ */
27
+ const GS1_8_PREFIX_MAXIMUM_LENGTH = 7;
28
+ /**
29
+ * Validation parameters for GS1 Company Prefix.
30
+ */
31
+ const GS1_COMPANY_PREFIX_VALIDATION = {
32
+ minimumLength: GS1_COMPANY_PREFIX_MINIMUM_LENGTH,
33
+ maximumLength: GS1_COMPANY_PREFIX_MAXIMUM_LENGTH,
34
+ component: () => i18nextGS1.t("Prefix.gs1CompanyPrefix")
35
+ };
36
+ /**
37
+ * Validation parameters for U.P.C. Company Prefix expressed as GS1 Company Prefix.
38
+ */
39
+ const UPC_COMPANY_PREFIX_AS_GS1_COMPANY_PREFIX_VALIDATION = {
40
+ minimumLength: UPC_COMPANY_PREFIX_MINIMUM_LENGTH + 1,
41
+ maximumLength: UPC_COMPANY_PREFIX_MAXIMUM_LENGTH + 1,
42
+ component: () => i18nextGS1.t("Prefix.gs1CompanyPrefix")
43
+ };
44
+ /**
45
+ * Validation parameters for GS1-8 Prefix expressed as GS1 Company Prefix.
46
+ */
47
+ const GS1_8_PREFIX_AS_GS1_COMPANY_PREFIX_VALIDATION = {
48
+ minimumLength: GS1_8_PREFIX_MINIMUM_LENGTH + 5,
49
+ maximumLength: GS1_8_PREFIX_MAXIMUM_LENGTH + 5,
50
+ component: () => i18nextGS1.t("Prefix.gs1CompanyPrefix")
51
+ };
52
+ /**
53
+ * Validation parameters for U.P.C. Company Prefix.
54
+ */
55
+ const UPC_COMPANY_PREFIX_VALIDATION = {
56
+ minimumLength: UPC_COMPANY_PREFIX_MINIMUM_LENGTH,
57
+ maximumLength: UPC_COMPANY_PREFIX_MAXIMUM_LENGTH,
58
+ component: () => i18nextGS1.t("Prefix.upcCompanyPrefix")
59
+ };
60
+ /**
61
+ * Validation parameters for GS1-8 Prefix.
62
+ */
63
+ const GS1_8_PREFIX_VALIDATION = {
64
+ minimumLength: GS1_8_PREFIX_MINIMUM_LENGTH,
65
+ maximumLength: GS1_8_PREFIX_MAXIMUM_LENGTH,
66
+ component: () => i18nextGS1.t("Prefix.gs18Prefix")
67
+ };
68
+ /**
69
+ * Validate a prefix.
70
+ *
71
+ * @param prefixType
72
+ * Prefix type.
73
+ *
74
+ * @param allowUPCCompanyPrefix
75
+ * If true, a U.P.C. Company Prefix expressed as a GS1 Company Prefix is permitted.
76
+ *
77
+ * @param allowGS18Prefix
78
+ * If true, a GS1-8 Prefix expressed as a GS1 Company Prefix is permitted.
79
+ *
80
+ * @param prefix
81
+ * Prefix.
82
+ *
83
+ * @param isFromIdentifier
84
+ * If true, the prefix is from an identifier and should be trimmed before its character set is validated.
85
+ *
86
+ * @param isNumericIdentifier
87
+ * If true, the prefix is from a numeric identifier and its character set will be validated by the caller.
88
+ *
89
+ * @param positionOffset
90
+ * Position offset within a larger string.
91
+ */
92
+ function validate(prefixType, allowUPCCompanyPrefix, allowGS18Prefix, prefix, isFromIdentifier = false, isNumericIdentifier = false, positionOffset) {
93
+ let baseValidation;
94
+ // Validate the prefix type and determine the prefix validation parameters.
95
+ switch (prefixType) {
96
+ case PrefixTypes.GS1CompanyPrefix:
97
+ if (!prefix.startsWith("0")) {
98
+ baseValidation = GS1_COMPANY_PREFIX_VALIDATION;
99
+ }
100
+ else if (!prefix.startsWith("00000")) {
101
+ if (!allowUPCCompanyPrefix) {
102
+ throw new RangeError(i18nextGS1.t("Prefix.gs1CompanyPrefixCantStartWith0"));
103
+ }
104
+ baseValidation = UPC_COMPANY_PREFIX_AS_GS1_COMPANY_PREFIX_VALIDATION;
105
+ }
106
+ else if (!prefix.startsWith("000000")) {
107
+ if (!allowGS18Prefix) {
108
+ throw new RangeError(i18nextGS1.t("Prefix.gs1CompanyPrefixCantStartWith00000"));
109
+ }
110
+ baseValidation = GS1_8_PREFIX_AS_GS1_COMPANY_PREFIX_VALIDATION;
111
+ }
112
+ else {
113
+ throw new RangeError(i18nextGS1.t("Prefix.gs1CompanyPrefixCantStartWith000000"));
114
+ }
115
+ break;
116
+ case PrefixTypes.UPCCompanyPrefix:
117
+ if (prefix.startsWith("0000")) {
118
+ throw new RangeError(i18nextGS1.t("Prefix.upcCompanyPrefixCantStartWith0000"));
119
+ }
120
+ baseValidation = UPC_COMPANY_PREFIX_VALIDATION;
121
+ break;
122
+ case PrefixTypes.GS18Prefix:
123
+ if (prefix.startsWith("0")) {
124
+ throw new RangeError(i18nextGS1.t("Prefix.gs18PrefixCantStartWith0"));
125
+ }
126
+ baseValidation = GS1_8_PREFIX_VALIDATION;
127
+ break;
128
+ }
129
+ const mergedValidation = {
130
+ ...baseValidation,
131
+ positionOffset
132
+ };
133
+ // If from key and numeric, key validation will take care of character set validation.
134
+ if (!isFromIdentifier) {
135
+ NUMERIC_CREATOR.validate(prefix, mergedValidation);
136
+ }
137
+ else if (!isNumericIdentifier) {
138
+ // Validate only the minimum length, allowing at least one character for the (possibly non-numeric) reference.
139
+ NUMERIC_CREATOR.validate(prefix.substring(0, Math.min(mergedValidation.minimumLength, prefix.length - 1)), mergedValidation);
140
+ }
141
+ }
142
+ /**
143
+ * Prefix validator.
144
+ */
145
+ export const PrefixValidator = {
146
+ GS1_COMPANY_PREFIX_MINIMUM_LENGTH,
147
+ GS1_COMPANY_PREFIX_MAXIMUM_LENGTH,
148
+ UPC_COMPANY_PREFIX_MINIMUM_LENGTH,
149
+ UPC_COMPANY_PREFIX_MAXIMUM_LENGTH,
150
+ GS1_8_PREFIX_MINIMUM_LENGTH,
151
+ GS1_8_PREFIX_MAXIMUM_LENGTH,
152
+ validate
153
+ };
154
+ //# sourceMappingURL=prefix-validator.js.map