@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.
- package/dist/abstract-identifier-creator.d.ts +66 -66
- package/dist/abstract-identifier-creator.d.ts.map +1 -1
- package/dist/abstract-identifier-creator.js +68 -45
- package/dist/abstract-identifier-creator.js.map +1 -1
- package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts +42 -0
- package/dist/abstract-non-gtin-numeric-identifier-creator.d.ts.map +1 -0
- package/dist/abstract-non-gtin-numeric-identifier-creator.js +40 -0
- package/dist/abstract-non-gtin-numeric-identifier-creator.js.map +1 -0
- package/dist/abstract-numeric-identifier-creator.d.ts +37 -86
- package/dist/abstract-numeric-identifier-creator.d.ts.map +1 -1
- package/dist/abstract-numeric-identifier-creator.js +144 -121
- package/dist/abstract-numeric-identifier-creator.js.map +1 -1
- package/dist/content-character-set-creators.d.ts +4 -0
- package/dist/content-character-set-creators.d.ts.map +1 -0
- package/dist/content-character-set-creators.js +9 -0
- package/dist/content-character-set-creators.js.map +1 -0
- package/dist/gtin-creator.d.ts +7 -12
- package/dist/gtin-creator.d.ts.map +1 -1
- package/dist/gtin-creator.js +11 -14
- package/dist/gtin-creator.js.map +1 -1
- package/dist/gtin-descriptor.d.ts +8 -3
- package/dist/gtin-descriptor.d.ts.map +1 -1
- package/dist/gtin-length.d.ts +64 -0
- package/dist/gtin-length.d.ts.map +1 -0
- package/dist/gtin-length.js +36 -0
- package/dist/gtin-length.js.map +1 -0
- package/dist/gtin-type.d.ts +15 -28
- package/dist/gtin-type.d.ts.map +1 -1
- package/dist/gtin-type.js +4 -28
- package/dist/gtin-type.js.map +1 -1
- package/dist/gtin-validator.d.ts +9 -23
- package/dist/gtin-validator.d.ts.map +1 -1
- package/dist/gtin-validator.js +32 -39
- package/dist/gtin-validator.js.map +1 -1
- package/dist/identifier-creator.d.ts +4 -4
- package/dist/identifier-creator.d.ts.map +1 -1
- package/dist/{creators.d.ts → identifier-creators.d.ts} +16 -7
- package/dist/identifier-creators.d.ts.map +1 -0
- package/dist/{creators.js → identifier-creators.js} +19 -7
- package/dist/identifier-creators.js.map +1 -0
- package/dist/{descriptors.d.ts → identifier-descriptors.d.ts} +20 -10
- package/dist/identifier-descriptors.d.ts.map +1 -0
- package/dist/{descriptors.js → identifier-descriptors.js} +27 -31
- package/dist/identifier-descriptors.js.map +1 -0
- package/dist/identifier-extension.d.ts +82 -0
- package/dist/identifier-extension.d.ts.map +1 -0
- package/dist/identifier-extension.js +79 -0
- package/dist/identifier-extension.js.map +1 -0
- package/dist/identifier-validator.d.ts +44 -9
- package/dist/identifier-validator.d.ts.map +1 -1
- package/dist/identifier-validator.js +109 -1
- package/dist/identifier-validator.js.map +1 -1
- package/dist/{validators.d.ts → identifier-validators.d.ts} +21 -11
- package/dist/identifier-validators.d.ts.map +1 -0
- package/dist/{validators.js → identifier-validators.js} +25 -12
- package/dist/identifier-validators.js.map +1 -0
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/leader-type.d.ts +26 -0
- package/dist/leader-type.d.ts.map +1 -0
- package/dist/leader-type.js +18 -0
- package/dist/leader-type.js.map +1 -0
- package/dist/non-gtin-numeric-identifier-creator.d.ts +7 -19
- package/dist/non-gtin-numeric-identifier-creator.d.ts.map +1 -1
- package/dist/non-gtin-numeric-identifier-creator.js +1 -22
- package/dist/non-gtin-numeric-identifier-creator.js.map +1 -1
- package/dist/non-gtin-numeric-identifier-descriptor.d.ts +1 -1
- package/dist/non-gtin-numeric-identifier-descriptor.d.ts.map +1 -1
- package/dist/non-gtin-numeric-identifier-type.d.ts +22 -3
- package/dist/non-gtin-numeric-identifier-type.d.ts.map +1 -1
- package/dist/non-gtin-numeric-identifier-type.js +7 -1
- package/dist/non-gtin-numeric-identifier-type.js.map +1 -1
- package/dist/non-gtin-numeric-identifier-validator.d.ts +5 -10
- package/dist/non-gtin-numeric-identifier-validator.d.ts.map +1 -1
- package/dist/non-gtin-numeric-identifier-validator.js +5 -12
- package/dist/non-gtin-numeric-identifier-validator.js.map +1 -1
- package/dist/non-numeric-identifier-creator.d.ts +4 -9
- package/dist/non-numeric-identifier-creator.d.ts.map +1 -1
- package/dist/non-numeric-identifier-creator.js +8 -10
- package/dist/non-numeric-identifier-creator.js.map +1 -1
- package/dist/non-numeric-identifier-type.d.ts +22 -3
- package/dist/non-numeric-identifier-type.d.ts.map +1 -1
- package/dist/non-numeric-identifier-type.js +7 -1
- package/dist/non-numeric-identifier-type.js.map +1 -1
- package/dist/non-numeric-identifier-validator.d.ts +3 -11
- package/dist/non-numeric-identifier-validator.d.ts.map +1 -1
- package/dist/non-numeric-identifier-validator.js +8 -8
- package/dist/non-numeric-identifier-validator.js.map +1 -1
- package/dist/non-serializable-numeric-identifier-creator.d.ts +10 -0
- package/dist/non-serializable-numeric-identifier-creator.d.ts.map +1 -0
- package/dist/non-serializable-numeric-identifier-creator.js +8 -0
- package/dist/non-serializable-numeric-identifier-creator.js.map +1 -0
- package/dist/non-serializable-numeric-identifier-descriptor.d.ts +7 -0
- package/dist/non-serializable-numeric-identifier-descriptor.d.ts.map +1 -0
- package/dist/non-serializable-numeric-identifier-descriptor.js +2 -0
- package/dist/non-serializable-numeric-identifier-descriptor.js.map +1 -0
- package/dist/non-serializable-numeric-identifier-type.d.ts +26 -0
- package/dist/non-serializable-numeric-identifier-type.d.ts.map +1 -0
- package/dist/non-serializable-numeric-identifier-type.js +7 -0
- package/dist/non-serializable-numeric-identifier-type.js.map +1 -0
- package/dist/non-serializable-numeric-identifier-validator.d.ts +16 -0
- package/dist/non-serializable-numeric-identifier-validator.d.ts.map +1 -0
- package/dist/non-serializable-numeric-identifier-validator.js +17 -0
- package/dist/non-serializable-numeric-identifier-validator.js.map +1 -0
- package/dist/numeric-identifier-creator.d.ts +6 -6
- package/dist/numeric-identifier-creator.d.ts.map +1 -1
- package/dist/numeric-identifier-descriptor.d.ts +2 -1
- package/dist/numeric-identifier-descriptor.d.ts.map +1 -1
- package/dist/numeric-identifier-type.d.ts +19 -24
- package/dist/numeric-identifier-type.d.ts.map +1 -1
- package/dist/numeric-identifier-type.js +4 -15
- package/dist/numeric-identifier-type.js.map +1 -1
- package/dist/numeric-identifier-validator.d.ts +20 -6
- package/dist/numeric-identifier-validator.d.ts.map +1 -1
- package/dist/numeric-identifier-validator.js +60 -1
- package/dist/numeric-identifier-validator.js.map +1 -1
- package/dist/prefix-manager.d.ts +6 -102
- package/dist/prefix-manager.d.ts.map +1 -1
- package/dist/prefix-manager.js +65 -60
- package/dist/prefix-manager.js.map +1 -1
- package/dist/serializable-numeric-identifier-creator.d.ts +3 -31
- package/dist/serializable-numeric-identifier-creator.d.ts.map +1 -1
- package/dist/serializable-numeric-identifier-creator.js +7 -21
- package/dist/serializable-numeric-identifier-creator.js.map +1 -1
- package/dist/serializable-numeric-identifier-descriptor.d.ts +1 -1
- package/dist/serializable-numeric-identifier-descriptor.d.ts.map +1 -1
- package/dist/serializable-numeric-identifier-type.d.ts +22 -2
- package/dist/serializable-numeric-identifier-type.d.ts.map +1 -1
- package/dist/serializable-numeric-identifier-type.js +7 -1
- package/dist/serializable-numeric-identifier-type.js.map +1 -1
- package/dist/serializable-numeric-identifier-validator.d.ts +3 -18
- package/dist/serializable-numeric-identifier-validator.d.ts.map +1 -1
- package/dist/serializable-numeric-identifier-validator.js +17 -16
- package/dist/serializable-numeric-identifier-validator.js.map +1 -1
- package/package.json +4 -5
- package/src/abstract-identifier-creator.ts +155 -74
- package/src/abstract-non-gtin-numeric-identifier-creator.ts +86 -0
- package/src/abstract-numeric-identifier-creator.ts +202 -133
- package/src/content-character-set-creators.ts +9 -0
- package/src/gtin-creator.ts +16 -15
- package/src/gtin-descriptor.ts +9 -3
- package/src/gtin-length.ts +61 -0
- package/src/gtin-type.ts +6 -37
- package/src/gtin-validator.ts +34 -41
- package/src/identifier-creator.ts +4 -4
- package/src/{creators.ts → identifier-creators.ts} +40 -26
- package/src/{descriptors.ts → identifier-descriptors.ts} +56 -54
- package/src/identifier-extension.ts +155 -0
- package/src/identifier-validator.ts +93 -10
- package/src/{validators.ts → identifier-validators.ts} +51 -36
- package/src/index.ts +15 -9
- package/src/leader-type.ts +29 -0
- package/src/non-gtin-numeric-identifier-creator.ts +7 -22
- package/src/non-gtin-numeric-identifier-descriptor.ts +1 -1
- package/src/non-gtin-numeric-identifier-type.ts +14 -3
- package/src/non-gtin-numeric-identifier-validator.ts +5 -13
- package/src/non-numeric-identifier-creator.ts +17 -12
- package/src/non-numeric-identifier-type.ts +14 -3
- package/src/non-numeric-identifier-validator.ts +8 -9
- package/src/non-serializable-numeric-identifier-creator.ts +12 -0
- package/src/non-serializable-numeric-identifier-descriptor.ts +7 -0
- package/src/non-serializable-numeric-identifier-type.ts +22 -0
- package/src/non-serializable-numeric-identifier-validator.ts +19 -0
- package/src/numeric-identifier-creator.ts +7 -6
- package/src/numeric-identifier-descriptor.ts +2 -1
- package/src/numeric-identifier-type.ts +17 -35
- package/src/numeric-identifier-validator.ts +61 -6
- package/src/prefix-manager.ts +67 -64
- package/src/serializable-numeric-identifier-creator.ts +11 -25
- package/src/serializable-numeric-identifier-descriptor.ts +1 -1
- package/src/serializable-numeric-identifier-type.ts +14 -5
- package/src/serializable-numeric-identifier-validator.ts +17 -16
- package/test/gtin-creator.ts +9 -2
- package/test/gtin-validator.test.ts +8 -10
- package/test/identifier-creator.ts +7 -7
- package/test/non-gtin-numeric-identifier-validator.ts +7 -2
- package/test/non-serializable-numeric-identifier-creator.ts +64 -0
- package/test/non-serializable-numeric-identifier-validator.ts +6 -0
- package/test/numeric-identifier-creator.ts +7 -2
- package/test/validator.test.ts +11 -10
- package/test/variable-measure-rcn.test.ts +23 -23
- package/dist/abstract-identifier-validator.d.ts +0 -95
- package/dist/abstract-identifier-validator.d.ts.map +0 -1
- package/dist/abstract-identifier-validator.js +0 -123
- package/dist/abstract-identifier-validator.js.map +0 -1
- package/dist/abstract-numeric-identifier-validator.d.ts +0 -35
- package/dist/abstract-numeric-identifier-validator.d.ts.map +0 -1
- package/dist/abstract-numeric-identifier-validator.js +0 -61
- package/dist/abstract-numeric-identifier-validator.js.map +0 -1
- package/dist/creators.d.ts.map +0 -1
- package/dist/creators.js.map +0 -1
- package/dist/descriptors.d.ts.map +0 -1
- package/dist/descriptors.js.map +0 -1
- package/dist/validators.d.ts.map +0 -1
- package/dist/validators.js.map +0 -1
- package/src/abstract-identifier-validator.ts +0 -140
- package/src/abstract-numeric-identifier-validator.ts +0 -69
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { expect } from "vitest";
|
|
2
2
|
import {
|
|
3
3
|
ContentCharacterSets,
|
|
4
|
-
type
|
|
5
|
-
|
|
4
|
+
type GTINLength,
|
|
5
|
+
GTINLengths,
|
|
6
6
|
IdentifierTypes,
|
|
7
7
|
LeaderTypes,
|
|
8
8
|
type PrefixManager,
|
|
@@ -14,29 +14,29 @@ import { validateNonNumericIdentifierValidator } from "./non-numeric-identifier-
|
|
|
14
14
|
import { validateSerializableNumericIdentifierValidator } from "./serializable-numeric-identifier-validator.js";
|
|
15
15
|
|
|
16
16
|
export function validateIdentifierCreators(prefixManager: PrefixManager): void {
|
|
17
|
-
let
|
|
17
|
+
let gtinLength: GTINLength;
|
|
18
18
|
|
|
19
19
|
switch (prefixManager.prefixType) {
|
|
20
20
|
case PrefixTypes.GS1CompanyPrefix:
|
|
21
21
|
expect(prefixManager.prefix).toBe(prefixManager.gs1CompanyPrefix);
|
|
22
|
-
|
|
22
|
+
gtinLength = GTINLengths.GTIN13;
|
|
23
23
|
break;
|
|
24
24
|
|
|
25
25
|
case PrefixTypes.UPCCompanyPrefix:
|
|
26
26
|
expect(prefixManager.prefix).toBe(prefixManager.upcCompanyPrefix);
|
|
27
|
-
|
|
27
|
+
gtinLength = GTINLengths.GTIN12;
|
|
28
28
|
break;
|
|
29
29
|
|
|
30
30
|
case PrefixTypes.GS18Prefix:
|
|
31
31
|
expect(prefixManager.prefix).toBe(prefixManager.gs18Prefix);
|
|
32
|
-
|
|
32
|
+
gtinLength = GTINLengths.GTIN8;
|
|
33
33
|
break;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
// Validate creator caching.
|
|
37
37
|
expect(prefixManager.gtinCreator).toBe(prefixManager.gtinCreator);
|
|
38
38
|
|
|
39
|
-
validateGTINValidator(prefixManager.gtinCreator, true,
|
|
39
|
+
validateGTINValidator(prefixManager.gtinCreator, true, gtinLength);
|
|
40
40
|
|
|
41
41
|
if (prefixManager.prefixType !== PrefixTypes.GS18Prefix) {
|
|
42
42
|
// Validate creator caching.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type IdentifierType,
|
|
3
|
+
type LeaderType,
|
|
4
|
+
type NonSerializableNumericIdentifierValidator,
|
|
5
|
+
PrefixTypes
|
|
6
|
+
} from "../src/index.js";
|
|
2
7
|
import { validateNumericIdentifierValidator } from "./numeric-identifier-validator.js";
|
|
3
8
|
|
|
4
|
-
export function validateNonGTINNumericIdentifierValidator(validator:
|
|
9
|
+
export function validateNonGTINNumericIdentifierValidator(validator: NonSerializableNumericIdentifierValidator, isCreator: boolean, identifierType: IdentifierType, length: number, leaderType: LeaderType): void {
|
|
5
10
|
validateNumericIdentifierValidator(validator, identifierType, PrefixTypes.GS1CompanyPrefix, length, leaderType);
|
|
6
11
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
ContentCharacterSets,
|
|
4
|
+
isSerializableNumericIdentifierCreator,
|
|
5
|
+
type SerializableNumericIdentifierCreator
|
|
6
|
+
} from "../src/index.js";
|
|
7
|
+
import { testNonGTINNumericIdentifierCreator } from "./non-gtin-numeric-identifier-creator.js";
|
|
8
|
+
|
|
9
|
+
export function testSerializableNumericIdentifierCreator(creator: SerializableNumericIdentifierCreator): void {
|
|
10
|
+
testNonGTINNumericIdentifierCreator(creator, () => {
|
|
11
|
+
test("Mapping", () => {
|
|
12
|
+
expect(isSerializableNumericIdentifierCreator(creator)).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
}, () => {
|
|
15
|
+
test("Serialization", () => {
|
|
16
|
+
const identifier = creator.create(0, true);
|
|
17
|
+
const serial = "12345678";
|
|
18
|
+
const serializedIdentifier = identifier + serial;
|
|
19
|
+
const serials = [serial, "23456789", "34567890", "456789012"];
|
|
20
|
+
const serializedIdentifiers = serials.map(serial => identifier + serial);
|
|
21
|
+
|
|
22
|
+
expect(creator.createSerialized(0, serial, true)).toBe(serializedIdentifier);
|
|
23
|
+
expect(creator.concatenate(identifier, serial)).toBe(serializedIdentifier);
|
|
24
|
+
expect(Array.from(creator.createSerialized(0, serials, true))).toStrictEqual(serializedIdentifiers);
|
|
25
|
+
expect(Array.from(creator.concatenate(identifier, serials))).toStrictEqual(serializedIdentifiers);
|
|
26
|
+
|
|
27
|
+
const fullLengthSerial = "0".repeat(creator.serialComponentLength);
|
|
28
|
+
const fullLengthPlusOneSerial = fullLengthSerial + "0";
|
|
29
|
+
const fullLengthPlusOneSerialErrorMessage = `Length ${creator.serialComponentLength + 1} of serial component must be less than or equal to ${creator.serialComponentLength}`;
|
|
30
|
+
|
|
31
|
+
expect(() => creator.createSerialized(0, fullLengthSerial, true)).not.toThrow(RangeError);
|
|
32
|
+
expect(() => creator.concatenate(identifier, fullLengthSerial)).not.toThrow(RangeError);
|
|
33
|
+
expect(() => Array.from(creator.createSerialized(0, [...serials, fullLengthSerial], true))).not.toThrow(RangeError);
|
|
34
|
+
expect(() => Array.from(creator.concatenate(identifier, [...serials, fullLengthSerial]))).not.toThrow(RangeError);
|
|
35
|
+
expect(() => creator.createSerialized(0, fullLengthPlusOneSerial, true)).toThrow(fullLengthPlusOneSerialErrorMessage);
|
|
36
|
+
expect(() => creator.concatenate(identifier, fullLengthPlusOneSerial)).toThrow(fullLengthPlusOneSerialErrorMessage);
|
|
37
|
+
expect(() => Array.from(creator.createSerialized(0, [...serials, fullLengthPlusOneSerial], true))).toThrow(fullLengthPlusOneSerialErrorMessage);
|
|
38
|
+
expect(() => Array.from(creator.concatenate(identifier, [...serials, fullLengthPlusOneSerial]))).toThrow(fullLengthPlusOneSerialErrorMessage);
|
|
39
|
+
|
|
40
|
+
let invalidSerial: string;
|
|
41
|
+
|
|
42
|
+
switch (creator.serialComponentCharacterSet) {
|
|
43
|
+
case ContentCharacterSets.Numeric:
|
|
44
|
+
invalidSerial = "1234A5678";
|
|
45
|
+
break;
|
|
46
|
+
|
|
47
|
+
case ContentCharacterSets.AI82:
|
|
48
|
+
invalidSerial = "ABCD~1234";
|
|
49
|
+
break;
|
|
50
|
+
|
|
51
|
+
case ContentCharacterSets.AI39:
|
|
52
|
+
invalidSerial = "ABCD%1234";
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const invalidSerialErrorMessage = `Invalid character '${invalidSerial.charAt(4)}' at position 5 of serial component`;
|
|
57
|
+
|
|
58
|
+
expect(() => creator.createSerialized(0, invalidSerial, true)).toThrow(invalidSerialErrorMessage);
|
|
59
|
+
expect(() => creator.concatenate(identifier, invalidSerial)).toThrow(invalidSerialErrorMessage);
|
|
60
|
+
expect(() => Array.from(creator.createSerialized(0, [...serials, invalidSerial], true))).toThrow(invalidSerialErrorMessage);
|
|
61
|
+
expect(() => Array.from(creator.concatenate(identifier, [...serials, invalidSerial]))).toThrow(invalidSerialErrorMessage);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IdentifierType, LeaderType, NonSerializableNumericIdentifierValidator } from "../src/index.js";
|
|
2
|
+
import { validateNonGTINNumericIdentifierValidator } from "./non-gtin-numeric-identifier-validator.js";
|
|
3
|
+
|
|
4
|
+
export function validateNonSerializableNumericIdentifierValidator(validator: NonSerializableNumericIdentifierValidator, isCreator: boolean, identifierType: IdentifierType, length: number, leaderType: LeaderType): void {
|
|
5
|
+
validateNonGTINNumericIdentifierValidator(validator, isCreator, identifierType, length, leaderType);
|
|
6
|
+
}
|
|
@@ -3,16 +3,21 @@ import { describe, expect, test } from "vitest";
|
|
|
3
3
|
import {
|
|
4
4
|
hasValidCheckDigit,
|
|
5
5
|
isGTINCreator,
|
|
6
|
+
isNumericIdentifierCreator,
|
|
6
7
|
LeaderTypes,
|
|
7
8
|
type NumericIdentifierCreator,
|
|
8
|
-
type
|
|
9
|
+
type NumericIdentifierType
|
|
9
10
|
} from "../src/index.js";
|
|
10
11
|
import { testIdentifierCreatorCallback } from "./identifier-creator.js";
|
|
11
12
|
|
|
12
|
-
export function testNumericIdentifierCreator<
|
|
13
|
+
export function testNumericIdentifierCreator<TNumericIdentifierType extends NumericIdentifierType>(creator: NumericIdentifierCreator<TNumericIdentifierType>, preTestCallback?: () => void, postTestCallback?: () => void): void {
|
|
13
14
|
describe(isGTINCreator(creator) ? `${creator.identifierType}-${creator.length}` : creator.identifierType as string, () => {
|
|
14
15
|
testIdentifierCreatorCallback(preTestCallback);
|
|
15
16
|
|
|
17
|
+
test("Mapping", () => {
|
|
18
|
+
expect(isNumericIdentifierCreator(creator)).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
16
21
|
const prefix = creator.prefix;
|
|
17
22
|
const prefixLength = prefix.length;
|
|
18
23
|
const hasExtensionDigit = creator.leaderType === LeaderTypes.ExtensionDigit;
|
package/test/validator.test.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expect, test } from "vitest";
|
|
2
2
|
import {
|
|
3
3
|
ContentCharacterSets,
|
|
4
|
-
type
|
|
5
|
-
|
|
4
|
+
type GTINBaseLength,
|
|
5
|
+
GTINLengths,
|
|
6
6
|
type GTINValidator,
|
|
7
7
|
type IdentifierType,
|
|
8
8
|
IdentifierTypes,
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
isGTINValidators,
|
|
13
13
|
isNonGTINNumericIdentifierValidator,
|
|
14
14
|
isNonNumericIdentifierValidator,
|
|
15
|
+
isNonSerializableNumericIdentifierValidator,
|
|
15
16
|
isNumericIdentifierValidator,
|
|
16
17
|
isSerializableNumericIdentifierValidator,
|
|
17
18
|
LeaderTypes
|
|
@@ -22,7 +23,7 @@ import { validateNonNumericIdentifierValidator } from "./non-numeric-identifier-
|
|
|
22
23
|
import { validateSerializableNumericIdentifierValidator } from "./serializable-numeric-identifier-validator.js";
|
|
23
24
|
|
|
24
25
|
describe("Validators", () => {
|
|
25
|
-
function validateMapping(identifierType: IdentifierType, expectedIdentifierValidatorsOrValidator: Readonly<Record<
|
|
26
|
+
function validateMapping(identifierType: IdentifierType, expectedIdentifierValidatorsOrValidator: Readonly<Record<GTINBaseLength, GTINValidator>> | IdentifierValidator, ...isIdentifierValidatorTypes: Array<(validator: IdentifierValidator) => boolean>): void {
|
|
26
27
|
test(identifierType, () => {
|
|
27
28
|
const validatorsOrValidator = IdentifierValidators[identifierType];
|
|
28
29
|
|
|
@@ -44,23 +45,23 @@ describe("Validators", () => {
|
|
|
44
45
|
|
|
45
46
|
describe("Mapping", () => {
|
|
46
47
|
validateMapping(IdentifierTypes.GTIN, IdentifierValidators.GTIN, isNumericIdentifierValidator, isGTINValidator);
|
|
47
|
-
validateMapping(IdentifierTypes.GLN, IdentifierValidators.GLN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator);
|
|
48
|
-
validateMapping(IdentifierTypes.SSCC, IdentifierValidators.SSCC, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator);
|
|
48
|
+
validateMapping(IdentifierTypes.GLN, IdentifierValidators.GLN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isNonSerializableNumericIdentifierValidator);
|
|
49
|
+
validateMapping(IdentifierTypes.SSCC, IdentifierValidators.SSCC, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isNonSerializableNumericIdentifierValidator);
|
|
49
50
|
validateMapping(IdentifierTypes.GRAI, IdentifierValidators.GRAI, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isSerializableNumericIdentifierValidator);
|
|
50
51
|
validateMapping(IdentifierTypes.GIAI, IdentifierValidators.GIAI, isNonNumericIdentifierValidator);
|
|
51
|
-
validateMapping(IdentifierTypes.GSRN, IdentifierValidators.GSRN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator);
|
|
52
|
+
validateMapping(IdentifierTypes.GSRN, IdentifierValidators.GSRN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isNonSerializableNumericIdentifierValidator);
|
|
52
53
|
validateMapping(IdentifierTypes.GDTI, IdentifierValidators.GDTI, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isSerializableNumericIdentifierValidator);
|
|
53
54
|
validateMapping(IdentifierTypes.GINC, IdentifierValidators.GINC, isNonNumericIdentifierValidator);
|
|
54
|
-
validateMapping(IdentifierTypes.GSIN, IdentifierValidators.GSIN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator);
|
|
55
|
+
validateMapping(IdentifierTypes.GSIN, IdentifierValidators.GSIN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isNonSerializableNumericIdentifierValidator);
|
|
55
56
|
validateMapping(IdentifierTypes.GCN, IdentifierValidators.GCN, isNumericIdentifierValidator, isNonGTINNumericIdentifierValidator, isSerializableNumericIdentifierValidator);
|
|
56
57
|
validateMapping(IdentifierTypes.CPID, IdentifierValidators.CPID, isNonNumericIdentifierValidator);
|
|
57
58
|
validateMapping(IdentifierTypes.GMN, IdentifierValidators.GMN, isNonNumericIdentifierValidator);
|
|
58
59
|
});
|
|
59
60
|
|
|
60
61
|
test("Structure", () => {
|
|
61
|
-
validateGTINValidator(IdentifierValidators.GTIN[
|
|
62
|
-
validateGTINValidator(IdentifierValidators.GTIN[
|
|
63
|
-
validateGTINValidator(IdentifierValidators.GTIN[
|
|
62
|
+
validateGTINValidator(IdentifierValidators.GTIN[GTINLengths.GTIN13], false, GTINLengths.GTIN13);
|
|
63
|
+
validateGTINValidator(IdentifierValidators.GTIN[GTINLengths.GTIN12], false, GTINLengths.GTIN12);
|
|
64
|
+
validateGTINValidator(IdentifierValidators.GTIN[GTINLengths.GTIN8], false, GTINLengths.GTIN8);
|
|
64
65
|
validateNonGTINNumericIdentifierValidator(IdentifierValidators.GLN, false, IdentifierTypes.GLN, 13, LeaderTypes.None);
|
|
65
66
|
validateNonGTINNumericIdentifierValidator(IdentifierValidators.SSCC, false, IdentifierTypes.SSCC, 18, LeaderTypes.ExtensionDigit);
|
|
66
67
|
validateSerializableNumericIdentifierValidator(IdentifierValidators.GRAI, false, IdentifierTypes.GRAI, 13, LeaderTypes.None, 16, ContentCharacterSets.AI82);
|
|
@@ -68,40 +68,40 @@ describe("Variable measure RCN", () => {
|
|
|
68
68
|
expect(() => GTINCreator.createVariableMeasureRCN("2IIIIIIIIIIC", 12345, 54321)).toThrow("Invalid variable measure RCN format");
|
|
69
69
|
|
|
70
70
|
expect(() => {
|
|
71
|
-
|
|
71
|
+
GTINValidator.parseVariableMeasureRCN("3PPPPPIIIIIC", "2543211234540");
|
|
72
72
|
}).toThrow("RCN length must match format length");
|
|
73
73
|
expect(() => {
|
|
74
|
-
|
|
74
|
+
GTINValidator.parseVariableMeasureRCN("3PPPPPIIIIIC", "25432112345");
|
|
75
75
|
}).toThrow("RCN length must match format length");
|
|
76
76
|
expect(() => {
|
|
77
|
-
|
|
77
|
+
GTINValidator.parseVariableMeasureRCN("3PPPPPIIIIIC", "254321123454");
|
|
78
78
|
}).toThrow("Invalid variable measure RCN format");
|
|
79
79
|
expect(() => {
|
|
80
|
-
|
|
80
|
+
GTINValidator.parseVariableMeasureRCN("20PPPPPIIIIC", "254321123454");
|
|
81
81
|
}).toThrow("Invalid variable measure RCN format");
|
|
82
82
|
expect(() => {
|
|
83
|
-
|
|
83
|
+
GTINValidator.parseVariableMeasureRCN("2PPPPPIIIIII", "254321123454");
|
|
84
84
|
}).toThrow("Invalid variable measure RCN format");
|
|
85
85
|
expect(() => {
|
|
86
|
-
|
|
86
|
+
GTINValidator.parseVariableMeasureRCN("2PPPPPIIIIKC", "254321123454");
|
|
87
87
|
}).toThrow("Invalid variable measure RCN format");
|
|
88
88
|
expect(() => {
|
|
89
|
-
|
|
89
|
+
GTINValidator.parseVariableMeasureRCN("2PPPPPIIPIIC", "254321123454");
|
|
90
90
|
}).toThrow("Invalid variable measure RCN format");
|
|
91
91
|
expect(() => {
|
|
92
|
-
|
|
92
|
+
GTINValidator.parseVariableMeasureRCN("2PPIPPIIIIIC", "254321123454");
|
|
93
93
|
}).toThrow("Invalid variable measure RCN format");
|
|
94
94
|
expect(() => {
|
|
95
|
-
|
|
95
|
+
GTINValidator.parseVariableMeasureRCN("2PPPPPIIIIC", "25432112345");
|
|
96
96
|
}).toThrow("Invalid variable measure RCN format");
|
|
97
97
|
expect(() => {
|
|
98
|
-
|
|
98
|
+
GTINValidator.parseVariableMeasureRCN("2PPPPPIIIIIIC", "2543211234540");
|
|
99
99
|
}).toThrow("Invalid variable measure RCN format");
|
|
100
100
|
expect(() => {
|
|
101
|
-
|
|
101
|
+
GTINValidator.parseVariableMeasureRCN("2PPPPPPPPPPC", "254321123454");
|
|
102
102
|
}).toThrow("Invalid variable measure RCN format");
|
|
103
103
|
expect(() => {
|
|
104
|
-
|
|
104
|
+
GTINValidator.parseVariableMeasureRCN("2IIIIIIIIIIC", "254321123454");
|
|
105
105
|
}).toThrow("Invalid variable measure RCN format");
|
|
106
106
|
});
|
|
107
107
|
|
|
@@ -165,37 +165,37 @@ describe("Variable measure RCN", () => {
|
|
|
165
165
|
expect(() => GTINCreator.createVariableMeasureRCN("27IIIIIIIIIIC", 12345, 54321)).toThrow("Invalid variable measure RCN format");
|
|
166
166
|
|
|
167
167
|
expect(() => {
|
|
168
|
-
|
|
168
|
+
GTINValidator.parseVariableMeasureRCN("30PPPPPIIIIIC", "27543211234570");
|
|
169
169
|
}).toThrow("RCN length must match format length");
|
|
170
170
|
expect(() => {
|
|
171
|
-
|
|
171
|
+
GTINValidator.parseVariableMeasureRCN("30PPPPPIIIIIC", "275432112345");
|
|
172
172
|
}).toThrow("RCN length must match format length");
|
|
173
173
|
expect(() => {
|
|
174
|
-
|
|
174
|
+
GTINValidator.parseVariableMeasureRCN("30PPPPPIIIIIC", "2754321123457");
|
|
175
175
|
}).toThrow("Invalid variable measure RCN format");
|
|
176
176
|
expect(() => {
|
|
177
|
-
|
|
177
|
+
GTINValidator.parseVariableMeasureRCN("20PPPPPIIIIII", "2754321123457");
|
|
178
178
|
}).toThrow("Invalid variable measure RCN format");
|
|
179
179
|
expect(() => {
|
|
180
|
-
|
|
180
|
+
GTINValidator.parseVariableMeasureRCN("21PPPPPIIIIKC", "2754321123457");
|
|
181
181
|
}).toThrow("Invalid variable measure RCN format");
|
|
182
182
|
expect(() => {
|
|
183
|
-
|
|
183
|
+
GTINValidator.parseVariableMeasureRCN("22PPPPPIIPIIC", "2754321123457");
|
|
184
184
|
}).toThrow("Invalid variable measure RCN format");
|
|
185
185
|
expect(() => {
|
|
186
|
-
|
|
186
|
+
GTINValidator.parseVariableMeasureRCN("23PPIPPIIIIIC", "2754321123457");
|
|
187
187
|
}).toThrow("Invalid variable measure RCN format");
|
|
188
188
|
expect(() => {
|
|
189
|
-
|
|
189
|
+
GTINValidator.parseVariableMeasureRCN("24PPPPPIIIIC", "275432112345");
|
|
190
190
|
}).toThrow("Invalid variable measure RCN format");
|
|
191
191
|
expect(() => {
|
|
192
|
-
|
|
192
|
+
GTINValidator.parseVariableMeasureRCN("25PPPPPIIIIIIC", "27543211234570");
|
|
193
193
|
}).toThrow("Invalid variable measure RCN format");
|
|
194
194
|
expect(() => {
|
|
195
|
-
|
|
195
|
+
GTINValidator.parseVariableMeasureRCN("26PPPPPPPPPPC", "2754321123457");
|
|
196
196
|
}).toThrow("Invalid variable measure RCN format");
|
|
197
197
|
expect(() => {
|
|
198
|
-
|
|
198
|
+
GTINValidator.parseVariableMeasureRCN("27IIIIIIIIIIC", "2754321123457");
|
|
199
199
|
}).toThrow("Invalid variable measure RCN format");
|
|
200
200
|
});
|
|
201
201
|
});
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { type CharacterSetCreator } from "@aidc-toolkit/utility";
|
|
2
|
-
import { type ContentCharacterSet } from "./content-character-set.js";
|
|
3
|
-
import type { IdentifierDescriptor } from "./identifier-descriptor.js";
|
|
4
|
-
import type { IdentifierValidation, IdentifierValidator } from "./identifier-validator.js";
|
|
5
|
-
/**
|
|
6
|
-
* Abstract identifier validator. Implements common functionality for an identifier validator.
|
|
7
|
-
*
|
|
8
|
-
* @template TIdentifierDescriptor
|
|
9
|
-
* Identifier descriptor type.
|
|
10
|
-
*
|
|
11
|
-
* @template TIdentifierValidation
|
|
12
|
-
* Identifier validation type.
|
|
13
|
-
*/
|
|
14
|
-
export declare abstract class AbstractIdentifierValidator<TIdentifierDescriptor extends IdentifierDescriptor, TIdentifierValidation extends IdentifierValidation> implements IdentifierValidator<TIdentifierDescriptor, TIdentifierValidation> {
|
|
15
|
-
private static readonly CHARACTER_SET_CREATORS;
|
|
16
|
-
/**
|
|
17
|
-
* Identifier type.
|
|
18
|
-
*/
|
|
19
|
-
private readonly _identifierType;
|
|
20
|
-
/**
|
|
21
|
-
* Length.
|
|
22
|
-
*/
|
|
23
|
-
private readonly _length;
|
|
24
|
-
/**
|
|
25
|
-
* Reference character set.
|
|
26
|
-
*/
|
|
27
|
-
private readonly _referenceCharacterSet;
|
|
28
|
-
/**
|
|
29
|
-
* Reference creator.
|
|
30
|
-
*/
|
|
31
|
-
private readonly _referenceCreator;
|
|
32
|
-
/**
|
|
33
|
-
* Get the character set creator for a character set.
|
|
34
|
-
*
|
|
35
|
-
* @param characterSet
|
|
36
|
-
* Character set.
|
|
37
|
-
*
|
|
38
|
-
* @returns
|
|
39
|
-
* Character set creator.
|
|
40
|
-
*/
|
|
41
|
-
protected static creatorFor(characterSet: ContentCharacterSet): CharacterSetCreator;
|
|
42
|
-
/**
|
|
43
|
-
* Constructor.
|
|
44
|
-
*
|
|
45
|
-
* @param identifierDescriptor
|
|
46
|
-
* Identifier descriptor.
|
|
47
|
-
*/
|
|
48
|
-
protected constructor(identifierDescriptor: IdentifierDescriptor);
|
|
49
|
-
/**
|
|
50
|
-
* @inheritDoc
|
|
51
|
-
*/
|
|
52
|
-
get identifierType(): TIdentifierDescriptor["identifierType"];
|
|
53
|
-
/**
|
|
54
|
-
* @inheritDoc
|
|
55
|
-
*/
|
|
56
|
-
get prefixType(): TIdentifierDescriptor["prefixType"];
|
|
57
|
-
/**
|
|
58
|
-
* @inheritDoc
|
|
59
|
-
*/
|
|
60
|
-
get length(): number;
|
|
61
|
-
/**
|
|
62
|
-
* @inheritDoc
|
|
63
|
-
*/
|
|
64
|
-
get referenceCharacterSet(): TIdentifierDescriptor["referenceCharacterSet"];
|
|
65
|
-
/**
|
|
66
|
-
* @inheritDoc
|
|
67
|
-
*/
|
|
68
|
-
get referenceCreator(): CharacterSetCreator;
|
|
69
|
-
/**
|
|
70
|
-
* Pad an identifier on the left with zero-value character for validation purposes. This is done to align an
|
|
71
|
-
* identifier with a position offset for any error message that may be thrown by the reference validator.
|
|
72
|
-
*
|
|
73
|
-
* @param identifier
|
|
74
|
-
* Identifier.
|
|
75
|
-
*
|
|
76
|
-
* @param positionOffset
|
|
77
|
-
* Position offset within a larger string.
|
|
78
|
-
*
|
|
79
|
-
* @returns
|
|
80
|
-
* Padded identifier.
|
|
81
|
-
*/
|
|
82
|
-
protected padIdentifier(identifier: string, positionOffset?: number): string;
|
|
83
|
-
/**
|
|
84
|
-
* Validate the prefix within an identifier.
|
|
85
|
-
*
|
|
86
|
-
* @param partialIdentifier
|
|
87
|
-
* Partial identifier.
|
|
88
|
-
*
|
|
89
|
-
* @param positionOffset
|
|
90
|
-
* Position offset within a larger string.
|
|
91
|
-
*/
|
|
92
|
-
protected validatePrefix(partialIdentifier: string, positionOffset?: number): void;
|
|
93
|
-
abstract validate(identifier: string, validation?: TIdentifierValidation): void;
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=abstract-identifier-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-identifier-validator.d.ts","sourceRoot":"","sources":["../src/abstract-identifier-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAmB,MAAM,uBAAuB,CAAC;AAElF,OAAO,EAAE,KAAK,mBAAmB,EAAwB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAI3F;;;;;;;;GAQG;AACH,8BAAsB,2BAA2B,CAAC,qBAAqB,SAAS,oBAAoB,EAAE,qBAAqB,SAAS,oBAAoB,CAAE,YAAW,mBAAmB,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAClO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAI5C;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAE1E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiD;IAExF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IAExD;;;;;;;;OAQG;IACH,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,mBAAmB,GAAG,mBAAmB;IAInF;;;;;OAKG;IACH,SAAS,aAAa,oBAAoB,EAAE,oBAAoB;IAOhE;;OAEG;IACH,IAAI,cAAc,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,CAE5D;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,qBAAqB,CAAC,YAAY,CAAC,CAGpD;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,uBAAuB,CAAC,CAE1E;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,mBAAmB,CAE1C;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IAK5E;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlF,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,qBAAqB,GAAG,IAAI;CAClF"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { NUMERIC_CREATOR } from "@aidc-toolkit/utility";
|
|
2
|
-
import { AI39_CREATOR, AI82_CREATOR } from "./character-set.js";
|
|
3
|
-
import { ContentCharacterSets } from "./content-character-set.js";
|
|
4
|
-
import { PrefixTypes } from "./prefix-type.js";
|
|
5
|
-
import { PrefixValidator } from "./prefix-validator.js";
|
|
6
|
-
/**
|
|
7
|
-
* Abstract identifier validator. Implements common functionality for an identifier validator.
|
|
8
|
-
*
|
|
9
|
-
* @template TIdentifierDescriptor
|
|
10
|
-
* Identifier descriptor type.
|
|
11
|
-
*
|
|
12
|
-
* @template TIdentifierValidation
|
|
13
|
-
* Identifier validation type.
|
|
14
|
-
*/
|
|
15
|
-
export class AbstractIdentifierValidator {
|
|
16
|
-
static CHARACTER_SET_CREATORS = {
|
|
17
|
-
[ContentCharacterSets.Numeric]: NUMERIC_CREATOR,
|
|
18
|
-
[ContentCharacterSets.AI82]: AI82_CREATOR,
|
|
19
|
-
[ContentCharacterSets.AI39]: AI39_CREATOR
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Identifier type.
|
|
23
|
-
*/
|
|
24
|
-
_identifierType;
|
|
25
|
-
/**
|
|
26
|
-
* Length.
|
|
27
|
-
*/
|
|
28
|
-
_length;
|
|
29
|
-
/**
|
|
30
|
-
* Reference character set.
|
|
31
|
-
*/
|
|
32
|
-
_referenceCharacterSet;
|
|
33
|
-
/**
|
|
34
|
-
* Reference creator.
|
|
35
|
-
*/
|
|
36
|
-
_referenceCreator;
|
|
37
|
-
/**
|
|
38
|
-
* Get the character set creator for a character set.
|
|
39
|
-
*
|
|
40
|
-
* @param characterSet
|
|
41
|
-
* Character set.
|
|
42
|
-
*
|
|
43
|
-
* @returns
|
|
44
|
-
* Character set creator.
|
|
45
|
-
*/
|
|
46
|
-
static creatorFor(characterSet) {
|
|
47
|
-
return AbstractIdentifierValidator.CHARACTER_SET_CREATORS[characterSet];
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Constructor.
|
|
51
|
-
*
|
|
52
|
-
* @param identifierDescriptor
|
|
53
|
-
* Identifier descriptor.
|
|
54
|
-
*/
|
|
55
|
-
constructor(identifierDescriptor) {
|
|
56
|
-
this._identifierType = identifierDescriptor.identifierType;
|
|
57
|
-
this._length = identifierDescriptor.length;
|
|
58
|
-
this._referenceCharacterSet = identifierDescriptor.referenceCharacterSet;
|
|
59
|
-
this._referenceCreator = AbstractIdentifierValidator.creatorFor(identifierDescriptor.referenceCharacterSet);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* @inheritDoc
|
|
63
|
-
*/
|
|
64
|
-
get identifierType() {
|
|
65
|
-
return this._identifierType;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* @inheritDoc
|
|
69
|
-
*/
|
|
70
|
-
get prefixType() {
|
|
71
|
-
// All identifier types except GTIN support only the GS1 Company Prefix.
|
|
72
|
-
return PrefixTypes.GS1CompanyPrefix;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* @inheritDoc
|
|
76
|
-
*/
|
|
77
|
-
get length() {
|
|
78
|
-
return this._length;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* @inheritDoc
|
|
82
|
-
*/
|
|
83
|
-
get referenceCharacterSet() {
|
|
84
|
-
return this._referenceCharacterSet;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* @inheritDoc
|
|
88
|
-
*/
|
|
89
|
-
get referenceCreator() {
|
|
90
|
-
return this._referenceCreator;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Pad an identifier on the left with zero-value character for validation purposes. This is done to align an
|
|
94
|
-
* identifier with a position offset for any error message that may be thrown by the reference validator.
|
|
95
|
-
*
|
|
96
|
-
* @param identifier
|
|
97
|
-
* Identifier.
|
|
98
|
-
*
|
|
99
|
-
* @param positionOffset
|
|
100
|
-
* Position offset within a larger string.
|
|
101
|
-
*
|
|
102
|
-
* @returns
|
|
103
|
-
* Padded identifier.
|
|
104
|
-
*/
|
|
105
|
-
padIdentifier(identifier, positionOffset) {
|
|
106
|
-
// Identifier is returned as is if position offset is undefined.
|
|
107
|
-
return positionOffset === undefined ? identifier : this.referenceCreator.character(0).repeat(positionOffset).concat(identifier);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Validate the prefix within an identifier.
|
|
111
|
-
*
|
|
112
|
-
* @param partialIdentifier
|
|
113
|
-
* Partial identifier.
|
|
114
|
-
*
|
|
115
|
-
* @param positionOffset
|
|
116
|
-
* Position offset within a larger string.
|
|
117
|
-
*/
|
|
118
|
-
validatePrefix(partialIdentifier, positionOffset) {
|
|
119
|
-
// Delegate to prefix validator with support for U.P.C. Company Prefix but not GS1-8 Prefix.
|
|
120
|
-
PrefixValidator.validate(this.prefixType, true, false, partialIdentifier, true, this.referenceCharacterSet === ContentCharacterSets.Numeric, positionOffset);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=abstract-identifier-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-identifier-validator.js","sourceRoot":"","sources":["../src/abstract-identifier-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAA4B,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAG5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,OAAgB,2BAA2B;IACrC,MAAM,CAAU,sBAAsB,GAAqD;QAC/F,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe;QAC/C,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,YAAY;QACzC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,YAAY;KAC5C,CAAC;IAEF;;OAEG;IACc,eAAe,CAA0C;IAE1E;;OAEG;IACc,OAAO,CAAS;IAEjC;;OAEG;IACc,sBAAsB,CAAiD;IAExF;;OAEG;IACc,iBAAiB,CAAsB;IAExD;;;;;;;;OAQG;IACO,MAAM,CAAC,UAAU,CAAC,YAAiC;QACzD,OAAO,2BAA2B,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;OAKG;IACH,YAAsB,oBAA0C;QAC5D,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;QACzE,IAAI,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,UAAU,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;IAChH,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACV,wEAAwE;QACxE,OAAO,WAAW,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,qBAAqB;QACrB,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,aAAa,CAAC,UAAkB,EAAE,cAAuB;QAC/D,gEAAgE;QAChE,OAAO,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpI,CAAC;IAED;;;;;;;;OAQG;IACO,cAAc,CAAC,iBAAyB,EAAE,cAAuB;QACvE,4FAA4F;QAC5F,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,KAAK,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjK,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { AbstractIdentifierValidator } from "./abstract-identifier-validator.js";
|
|
2
|
-
import type { NumericIdentifierDescriptor } from "./numeric-identifier-descriptor.js";
|
|
3
|
-
import type { NumericIdentifierValidation, NumericIdentifierValidator } from "./numeric-identifier-validator.js";
|
|
4
|
-
/**
|
|
5
|
-
* Abstract numeric identifier validator.
|
|
6
|
-
*
|
|
7
|
-
* @template TNumericIdentifierDescriptor
|
|
8
|
-
* Numeric identifier descriptor type.
|
|
9
|
-
*/
|
|
10
|
-
export declare abstract class AbstractNumericIdentifierValidator<TNumericIdentifierDescriptor extends NumericIdentifierDescriptor> extends AbstractIdentifierValidator<TNumericIdentifierDescriptor, NumericIdentifierValidation> implements NumericIdentifierValidator<TNumericIdentifierDescriptor> {
|
|
11
|
-
/**
|
|
12
|
-
* Leader type.
|
|
13
|
-
*/
|
|
14
|
-
private readonly _leaderType;
|
|
15
|
-
/**
|
|
16
|
-
* Prefix position, determined by the leader type.
|
|
17
|
-
*/
|
|
18
|
-
private readonly _prefixPosition;
|
|
19
|
-
/**
|
|
20
|
-
* Constructor.
|
|
21
|
-
*
|
|
22
|
-
* @param identifierDescriptor
|
|
23
|
-
* Identifier descriptor.
|
|
24
|
-
*/
|
|
25
|
-
constructor(identifierDescriptor: NumericIdentifierDescriptor);
|
|
26
|
-
/**
|
|
27
|
-
* @inheritDoc
|
|
28
|
-
*/
|
|
29
|
-
get leaderType(): TNumericIdentifierDescriptor["leaderType"];
|
|
30
|
-
/**
|
|
31
|
-
* @inheritDoc
|
|
32
|
-
*/
|
|
33
|
-
validate(identifier: string, validation?: NumericIdentifierValidation): void;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=abstract-numeric-identifier-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-numeric-identifier-validator.d.ts","sourceRoot":"","sources":["../src/abstract-numeric-identifier-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGjF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEjH;;;;;GAKG;AACH,8BAAsB,kCAAkC,CAAC,4BAA4B,SAAS,2BAA2B,CAAE,SAAQ,2BAA2B,CAAC,4BAA4B,EAAE,2BAA2B,CAAE,YAAW,0BAA0B,CAAC,4BAA4B,CAAC;IACzR;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IAEzE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC;;;;;OAKG;gBACS,oBAAoB,EAAE,2BAA2B;IAO7D;;OAEG;IACH,IAAI,UAAU,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAE3D;IAED;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,2BAA2B,GAAG,IAAI;CAqB/E"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { AbstractIdentifierValidator } from "./abstract-identifier-validator.js";
|
|
2
|
-
import { hasValidCheckDigit } from "./check.js";
|
|
3
|
-
import { i18nextGS1 } from "./locale/i18n.js";
|
|
4
|
-
import { LeaderTypes } from "./numeric-identifier-type.js";
|
|
5
|
-
/**
|
|
6
|
-
* Abstract numeric identifier validator.
|
|
7
|
-
*
|
|
8
|
-
* @template TNumericIdentifierDescriptor
|
|
9
|
-
* Numeric identifier descriptor type.
|
|
10
|
-
*/
|
|
11
|
-
export class AbstractNumericIdentifierValidator extends AbstractIdentifierValidator {
|
|
12
|
-
/**
|
|
13
|
-
* Leader type.
|
|
14
|
-
*/
|
|
15
|
-
_leaderType;
|
|
16
|
-
/**
|
|
17
|
-
* Prefix position, determined by the leader type.
|
|
18
|
-
*/
|
|
19
|
-
_prefixPosition;
|
|
20
|
-
/**
|
|
21
|
-
* Constructor.
|
|
22
|
-
*
|
|
23
|
-
* @param identifierDescriptor
|
|
24
|
-
* Identifier descriptor.
|
|
25
|
-
*/
|
|
26
|
-
constructor(identifierDescriptor) {
|
|
27
|
-
super(identifierDescriptor);
|
|
28
|
-
this._leaderType = identifierDescriptor.leaderType;
|
|
29
|
-
this._prefixPosition = Number(this.leaderType === LeaderTypes.ExtensionDigit);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* @inheritDoc
|
|
33
|
-
*/
|
|
34
|
-
get leaderType() {
|
|
35
|
-
return this._leaderType;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* @inheritDoc
|
|
39
|
-
*/
|
|
40
|
-
validate(identifier, validation) {
|
|
41
|
-
// Validate the prefix, with care taken for its position within the identifier.
|
|
42
|
-
if (this._prefixPosition === 0) {
|
|
43
|
-
super.validatePrefix(identifier, validation?.positionOffset);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
super.validatePrefix(identifier.substring(this._prefixPosition), validation?.positionOffset === undefined ? this._prefixPosition : validation.positionOffset + this._prefixPosition);
|
|
47
|
-
}
|
|
48
|
-
// Validate the length.
|
|
49
|
-
if (identifier.length !== this.length) {
|
|
50
|
-
throw new RangeError(i18nextGS1.t("Identifier.identifierTypeLength", {
|
|
51
|
-
identifierType: this.identifierType,
|
|
52
|
-
length: this.length
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
// Validating the check digit will also validate the characters.
|
|
56
|
-
if (!hasValidCheckDigit(this.padIdentifier(identifier, validation?.positionOffset))) {
|
|
57
|
-
throw new RangeError(i18nextGS1.t("Identifier.invalidCheckDigit"));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=abstract-numeric-identifier-validator.js.map
|