@twin.org/standards-vda 0.0.3-next.67 → 0.0.3-next.69
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/es/utils/vdaIdentifiersValidation.js +2 -2
- package/dist/es/utils/vdaIdentifiersValidation.js.map +1 -1
- package/dist/types/utils/vdaIdentifiersValidation.d.ts +2 -2
- package/docs/changelog.md +14 -0
- package/docs/reference/classes/VdaIdentifiersValidation.md +2 -2
- package/package.json +1 -1
|
@@ -75,11 +75,11 @@ export class VdaIdentifiersValidation {
|
|
|
75
75
|
return is;
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
|
-
* Validate if the property is a valid
|
|
78
|
+
* Validate if the property is a valid VDA URI Package License Plate.
|
|
79
79
|
* @param propertyName The name of the property being validated.
|
|
80
80
|
* @param value The value to test.
|
|
81
81
|
* @param failures The list of failures to add to.
|
|
82
|
-
* @returns True if the value is valid
|
|
82
|
+
* @returns True if the value is a valid URI Package License Plate.
|
|
83
83
|
*/
|
|
84
84
|
static uriPlp(propertyName, value, failures) {
|
|
85
85
|
const is = Urn.validate("value", value, failures);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vdaIdentifiersValidation.js","sourceRoot":"","sources":["../../../src/utils/vdaIdentifiersValidation.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is, type IValidationFailure, Urn } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IVdaBizLocation } from \"../models/IVdaBizLocation.js\";\nimport type { IVdaObjectIdentifier } from \"../models/IVdaObjectIdentifier.js\";\nimport type { IVdaReadPoint } from \"../models/IVdaReadPoint.js\";\nimport type { IVdaUriPlates } from \"../models/IVdaUriPlates.js\";\nimport { VdaUriIdentifiers } from \"../models/vdaUriIdentifiers.js\";\nimport { VdaUriPackages } from \"../models/vdaUriPackages.js\";\n\n/**\n * Validation for identifier types for VDA.\n */\nexport class VdaIdentifiersValidation {\n\t/**\n\t * Validate if the property is a valid epc.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static jaifId(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (is) {\n\t\t\tconst urn = Urn.fromValidString(value);\n\t\t\tconst specificParts = urn.namespaceSpecific().split(\":\");\n\n\t\t\tif (specificParts[0] !== \"id\") {\n\t\t\t\tfailures.push({\n\t\t\t\t\tproperty: propertyName,\n\t\t\t\t\treason: \"validation.vdaEpcNoId\"\n\t\t\t\t});\n\t\t\t} else if (specificParts.length < 2) {\n\t\t\t\tfailures.push({\n\t\t\t\t\tproperty: propertyName,\n\t\t\t\t\treason: \"validation.vdaIncorrectSegmentCount\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Validate if the property is a valid epc vda id location.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static jaifIdLocation(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (\n\t\t\tis &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractBizLocation(value)) &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractReadPoint(value))\n\t\t) {\n\t\t\tfailures.push({\n\t\t\t\tproperty: propertyName,\n\t\t\t\treason: \"validation.vdaValueIncorrect\"\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Validate if the property is a valid epc vda id item.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static jaifIdItem(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (\n\t\t\tis &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractUriPlp(value)) &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractIdentifier(value))\n\t\t) {\n\t\t\tfailures.push({\n\t\t\t\tproperty: propertyName,\n\t\t\t\treason: \"validation.vdaValueIncorrect\"\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Validate if the property is a valid epc id gtin.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static uriPlp(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (is) {\n\t\t\tconst plp = VdaIdentifiersValidation.extractUriPlp(value);\n\n\t\t\tif (Is.undefined(plp)) {\n\t\t\t\tfailures.push({\n\t\t\t\t\tproperty: propertyName,\n\t\t\t\t\treason: \"validation.vdaValueIncorrect\"\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Function to validate and extract RFID read points URNs.\n\t * @param urn The URN to validate.\n\t * @returns The extracted read point object or undefined.\n\t */\n\tpublic static extractReadPoint(urn: string): IVdaReadPoint | undefined {\n\t\tconst parts =\n\t\t\t/^urn:jaif:id:obj:([\\dA-Za-z]{3})([\\dA-Za-z]{2})(\\d{9})([\\dA-Za-z]{2})(\\d{5})([\\dA-Za-z]*)/.exec(\n\t\t\t\turn\n\t\t\t);\n\t\tif (parts) {\n\t\t\treturn {\n\t\t\t\tdataIdentifier: parts[1],\n\t\t\t\tissuingAgencyCode: parts[2],\n\t\t\t\tdunsNumber: parts[3],\n\t\t\t\tplant: parts[4],\n\t\t\t\tcostCenter: parts[5],\n\t\t\t\tserialNumber: parts[6]\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Function to validate and extract Biz Location URN.\n\t * @param urn The URN to validate.\n\t * @returns The extracted biz location object or undefined.\n\t */\n\tpublic static extractBizLocation(urn: string): IVdaBizLocation | undefined {\n\t\tconst parts = /^urn:jaif:id:obj:([\\dA-Za-z]{3})([\\dA-Za-z]{2})(\\d{9})([\\dA-Za-z]*)/.exec(urn);\n\t\tif (parts) {\n\t\t\treturn {\n\t\t\t\tdataIdentifier: parts[1],\n\t\t\t\tissuingAgencyCode: parts[2],\n\t\t\t\tdunsNumber: parts[3],\n\t\t\t\tplantBuildingFloorRoom: parts[4]\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Function to validate VDA URI Packages License Plates.\n\t * @param id The VDA URI to validate.\n\t * @returns The VDA URI object or undefined.\n\t */\n\tpublic static extractUriPlp(id: string): IVdaUriPlates | undefined {\n\t\tconst parts = /^urn:jaif:id:([\\dA-Z]{2}):([\\dA-Z]{2})([\\dA-Z]{2})([\\dA-Z]{9})(\\d{9})/.exec(id);\n\t\tif (parts?.length === 6 && id.split(\":\")[4].length === 22) {\n\t\t\tconst data = {\n\t\t\t\tapplicationFamilyIdentifier: parts[1],\n\t\t\t\ttypeOfPackage: parts[2],\n\t\t\t\tissuingAgencyCode: parts[3],\n\t\t\t\tcompanyIdentificationNumber: parts[4],\n\t\t\t\tpackageSerialNumber: parts[5]\n\t\t\t};\n\n\t\t\tif (!Is.arrayOneOf(data.applicationFamilyIdentifier, Object.values(VdaUriIdentifiers))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!Is.arrayOneOf(data.typeOfPackage, Object.values(VdaUriPackages))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t}\n\n\t/**\n\t * VDA object identifier verifier function.\n\t * @param epc The epc to validate.\n\t * @returns The VDA object or undefined.\n\t */\n\tpublic static extractIdentifier(epc: string): IVdaObjectIdentifier | undefined {\n\t\tif (\n\t\t\t(epc.startsWith(\"urn:jaif:id:obj:\") || epc.startsWith(\"urn:jaif:id:A1:\")) &&\n\t\t\tepc.length <= 56\n\t\t) {\n\t\t\tconst split = epc.split(\":\");\n\t\t\tif (split.length === 5) {\n\t\t\t\tconst parts = /([\\dA-Z]{3})([\\dA-Z]{2})(\\d+){1,9}(([\\dA-Z]+)\\+([\\dA-Z]+))/.exec(split[4]);\n\t\t\t\tif (parts?.length === 7) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdataIdentifier: parts[1],\n\t\t\t\t\t\tissuingAgencyCode: parts[2],\n\t\t\t\t\t\tcompanyIdNumber: parts[3],\n\t\t\t\t\t\t// skipped part[4] since it is a concatenation of part[5] + part[6]\n\t\t\t\t\t\tpartNumber: parts[5],\n\t\t\t\t\t\tpartSerialNumber: parts[6]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vdaIdentifiersValidation.js","sourceRoot":"","sources":["../../../src/utils/vdaIdentifiersValidation.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is, type IValidationFailure, Urn } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IVdaBizLocation } from \"../models/IVdaBizLocation.js\";\nimport type { IVdaObjectIdentifier } from \"../models/IVdaObjectIdentifier.js\";\nimport type { IVdaReadPoint } from \"../models/IVdaReadPoint.js\";\nimport type { IVdaUriPlates } from \"../models/IVdaUriPlates.js\";\nimport { VdaUriIdentifiers } from \"../models/vdaUriIdentifiers.js\";\nimport { VdaUriPackages } from \"../models/vdaUriPackages.js\";\n\n/**\n * Validation for identifier types for VDA.\n */\nexport class VdaIdentifiersValidation {\n\t/**\n\t * Validate if the property is a valid epc.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static jaifId(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (is) {\n\t\t\tconst urn = Urn.fromValidString(value);\n\t\t\tconst specificParts = urn.namespaceSpecific().split(\":\");\n\n\t\t\tif (specificParts[0] !== \"id\") {\n\t\t\t\tfailures.push({\n\t\t\t\t\tproperty: propertyName,\n\t\t\t\t\treason: \"validation.vdaEpcNoId\"\n\t\t\t\t});\n\t\t\t} else if (specificParts.length < 2) {\n\t\t\t\tfailures.push({\n\t\t\t\t\tproperty: propertyName,\n\t\t\t\t\treason: \"validation.vdaIncorrectSegmentCount\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Validate if the property is a valid epc vda id location.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static jaifIdLocation(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (\n\t\t\tis &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractBizLocation(value)) &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractReadPoint(value))\n\t\t) {\n\t\t\tfailures.push({\n\t\t\t\tproperty: propertyName,\n\t\t\t\treason: \"validation.vdaValueIncorrect\"\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Validate if the property is a valid epc vda id item.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is valid epc.\n\t */\n\tpublic static jaifIdItem(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (\n\t\t\tis &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractUriPlp(value)) &&\n\t\t\tIs.undefined(VdaIdentifiersValidation.extractIdentifier(value))\n\t\t) {\n\t\t\tfailures.push({\n\t\t\t\tproperty: propertyName,\n\t\t\t\treason: \"validation.vdaValueIncorrect\"\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Validate if the property is a valid VDA URI Package License Plate.\n\t * @param propertyName The name of the property being validated.\n\t * @param value The value to test.\n\t * @param failures The list of failures to add to.\n\t * @returns True if the value is a valid URI Package License Plate.\n\t */\n\tpublic static uriPlp(\n\t\tpropertyName: string,\n\t\tvalue: unknown,\n\t\tfailures: IValidationFailure[]\n\t): value is string {\n\t\tconst is = Urn.validate(nameof(value), value, failures);\n\n\t\tif (is) {\n\t\t\tconst plp = VdaIdentifiersValidation.extractUriPlp(value);\n\n\t\t\tif (Is.undefined(plp)) {\n\t\t\t\tfailures.push({\n\t\t\t\t\tproperty: propertyName,\n\t\t\t\t\treason: \"validation.vdaValueIncorrect\"\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn is;\n\t}\n\n\t/**\n\t * Function to validate and extract RFID read points URNs.\n\t * @param urn The URN to validate.\n\t * @returns The extracted read point object or undefined.\n\t */\n\tpublic static extractReadPoint(urn: string): IVdaReadPoint | undefined {\n\t\tconst parts =\n\t\t\t/^urn:jaif:id:obj:([\\dA-Za-z]{3})([\\dA-Za-z]{2})(\\d{9})([\\dA-Za-z]{2})(\\d{5})([\\dA-Za-z]*)/.exec(\n\t\t\t\turn\n\t\t\t);\n\t\tif (parts) {\n\t\t\treturn {\n\t\t\t\tdataIdentifier: parts[1],\n\t\t\t\tissuingAgencyCode: parts[2],\n\t\t\t\tdunsNumber: parts[3],\n\t\t\t\tplant: parts[4],\n\t\t\t\tcostCenter: parts[5],\n\t\t\t\tserialNumber: parts[6]\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Function to validate and extract Biz Location URN.\n\t * @param urn The URN to validate.\n\t * @returns The extracted biz location object or undefined.\n\t */\n\tpublic static extractBizLocation(urn: string): IVdaBizLocation | undefined {\n\t\tconst parts = /^urn:jaif:id:obj:([\\dA-Za-z]{3})([\\dA-Za-z]{2})(\\d{9})([\\dA-Za-z]*)/.exec(urn);\n\t\tif (parts) {\n\t\t\treturn {\n\t\t\t\tdataIdentifier: parts[1],\n\t\t\t\tissuingAgencyCode: parts[2],\n\t\t\t\tdunsNumber: parts[3],\n\t\t\t\tplantBuildingFloorRoom: parts[4]\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Function to validate VDA URI Packages License Plates.\n\t * @param id The VDA URI to validate.\n\t * @returns The VDA URI object or undefined.\n\t */\n\tpublic static extractUriPlp(id: string): IVdaUriPlates | undefined {\n\t\tconst parts = /^urn:jaif:id:([\\dA-Z]{2}):([\\dA-Z]{2})([\\dA-Z]{2})([\\dA-Z]{9})(\\d{9})/.exec(id);\n\t\tif (parts?.length === 6 && id.split(\":\")[4].length === 22) {\n\t\t\tconst data = {\n\t\t\t\tapplicationFamilyIdentifier: parts[1],\n\t\t\t\ttypeOfPackage: parts[2],\n\t\t\t\tissuingAgencyCode: parts[3],\n\t\t\t\tcompanyIdentificationNumber: parts[4],\n\t\t\t\tpackageSerialNumber: parts[5]\n\t\t\t};\n\n\t\t\tif (!Is.arrayOneOf(data.applicationFamilyIdentifier, Object.values(VdaUriIdentifiers))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!Is.arrayOneOf(data.typeOfPackage, Object.values(VdaUriPackages))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t}\n\n\t/**\n\t * VDA object identifier verifier function.\n\t * @param epc The epc to validate.\n\t * @returns The VDA object or undefined.\n\t */\n\tpublic static extractIdentifier(epc: string): IVdaObjectIdentifier | undefined {\n\t\tif (\n\t\t\t(epc.startsWith(\"urn:jaif:id:obj:\") || epc.startsWith(\"urn:jaif:id:A1:\")) &&\n\t\t\tepc.length <= 56\n\t\t) {\n\t\t\tconst split = epc.split(\":\");\n\t\t\tif (split.length === 5) {\n\t\t\t\tconst parts = /([\\dA-Z]{3})([\\dA-Z]{2})(\\d+){1,9}(([\\dA-Z]+)\\+([\\dA-Z]+))/.exec(split[4]);\n\t\t\t\tif (parts?.length === 7) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdataIdentifier: parts[1],\n\t\t\t\t\t\tissuingAgencyCode: parts[2],\n\t\t\t\t\t\tcompanyIdNumber: parts[3],\n\t\t\t\t\t\t// skipped part[4] since it is a concatenation of part[5] + part[6]\n\t\t\t\t\t\tpartNumber: parts[5],\n\t\t\t\t\t\tpartSerialNumber: parts[6]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -32,11 +32,11 @@ export declare class VdaIdentifiersValidation {
|
|
|
32
32
|
*/
|
|
33
33
|
static jaifIdItem(propertyName: string, value: unknown, failures: IValidationFailure[]): value is string;
|
|
34
34
|
/**
|
|
35
|
-
* Validate if the property is a valid
|
|
35
|
+
* Validate if the property is a valid VDA URI Package License Plate.
|
|
36
36
|
* @param propertyName The name of the property being validated.
|
|
37
37
|
* @param value The value to test.
|
|
38
38
|
* @param failures The list of failures to add to.
|
|
39
|
-
* @returns True if the value is valid
|
|
39
|
+
* @returns True if the value is a valid URI Package License Plate.
|
|
40
40
|
*/
|
|
41
41
|
static uriPlp(propertyName: string, value: unknown, failures: IValidationFailure[]): value is string;
|
|
42
42
|
/**
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.3-next.69](https://github.com/iotaledger/twin-standards/compare/standards-vda-v0.0.3-next.68...standards-vda-v0.0.3-next.69) (2026-06-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Miscellaneous Chores
|
|
7
|
+
|
|
8
|
+
* **standards-vda:** Synchronize repo versions
|
|
9
|
+
|
|
10
|
+
## [0.0.3-next.68](https://github.com/iotaledger/twin-standards/compare/standards-vda-v0.0.3-next.67...standards-vda-v0.0.3-next.68) (2026-06-22)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Miscellaneous Chores
|
|
14
|
+
|
|
15
|
+
* **standards-vda:** Synchronize repo versions
|
|
16
|
+
|
|
3
17
|
## [0.0.3-next.67](https://github.com/iotaledger/twin-standards/compare/standards-vda-v0.0.3-next.66...standards-vda-v0.0.3-next.67) (2026-06-12)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -120,7 +120,7 @@ True if the value is valid epc.
|
|
|
120
120
|
|
|
121
121
|
> `static` **uriPlp**(`propertyName`, `value`, `failures`): `value is string`
|
|
122
122
|
|
|
123
|
-
Validate if the property is a valid
|
|
123
|
+
Validate if the property is a valid VDA URI Package License Plate.
|
|
124
124
|
|
|
125
125
|
#### Parameters
|
|
126
126
|
|
|
@@ -146,7 +146,7 @@ The list of failures to add to.
|
|
|
146
146
|
|
|
147
147
|
`value is string`
|
|
148
148
|
|
|
149
|
-
True if the value is valid
|
|
149
|
+
True if the value is a valid URI Package License Plate.
|
|
150
150
|
|
|
151
151
|
***
|
|
152
152
|
|