@marteye/studiojs 1.1.43 → 1.1.45

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/index.d.ts CHANGED
@@ -2361,7 +2361,8 @@ declare class EarTag {
2361
2361
  * FR72341 6850203052020FHF 01 ← French import, 10-digit national ID
2362
2362
  */
2363
2363
  declare class CattlePassport {
2364
- static BARCODE_LENGTH: number;
2364
+ static BARCODE_MIN_LENGTH: number;
2365
+ static BARCODE_MAX_LENGTH: number;
2365
2366
  private _raw;
2366
2367
  private _earTag;
2367
2368
  private _dateOfBirth;
package/dist/index.esm.js CHANGED
@@ -5938,15 +5938,18 @@ class CattlePassport {
5938
5938
  }
5939
5939
  static parse(code) {
5940
5940
  let raw = code;
5941
- let trimmed = code.trim();
5942
- if (trimmed.length !== CattlePassport.BARCODE_LENGTH)
5941
+ // Strip ASCII control characters (GS, CR, etc.) that barcode scanners may append
5942
+ let trimmed = code.replace(/[\x00-\x1F\x7F]/g, "").trim();
5943
+ if (trimmed.length < CattlePassport.BARCODE_MIN_LENGTH ||
5944
+ trimmed.length > CattlePassport.BARCODE_MAX_LENGTH)
5943
5945
  return null;
5944
- // Extract fixed-width fields
5946
+ // Extract fixed-width fields (eartag, dob, sex are fixed from the front;
5947
+ // version is always the last 2 chars; breed fills the gap between sex and version)
5945
5948
  let earTagField = trimmed.slice(0, 14);
5946
5949
  let dobField = trimmed.slice(14, 22);
5947
5950
  let sexChar = trimmed.charAt(22);
5948
- let breedField = trimmed.slice(23, 28);
5949
- let versionField = trimmed.slice(28, 30);
5951
+ let breedField = trimmed.slice(23, -2);
5952
+ let versionField = trimmed.slice(-2);
5950
5953
  // Country code: 2 alpha chars
5951
5954
  let countryCode = earTagField.slice(0, 2);
5952
5955
  if (!/^[A-Z]{2}$/.test(countryCode))
@@ -6024,7 +6027,8 @@ class CattlePassport {
6024
6027
  return `${this.formattedEarTag} | ${this.formattedDateOfBirth} | ${this._sex} | ${this._breed} | v${this._passportVersion}`;
6025
6028
  }
6026
6029
  }
6027
- CattlePassport.BARCODE_LENGTH = 30;
6030
+ CattlePassport.BARCODE_MIN_LENGTH = 26; // 14 eartag + 8 dob + 1 sex + 1 breed + 2 version
6031
+ CattlePassport.BARCODE_MAX_LENGTH = 30;
6028
6032
 
6029
6033
  /**
6030
6034
  * Extract the smallest lot number for sorting purposes.
package/dist/index.js CHANGED
@@ -5942,15 +5942,18 @@ class CattlePassport {
5942
5942
  }
5943
5943
  static parse(code) {
5944
5944
  let raw = code;
5945
- let trimmed = code.trim();
5946
- if (trimmed.length !== CattlePassport.BARCODE_LENGTH)
5945
+ // Strip ASCII control characters (GS, CR, etc.) that barcode scanners may append
5946
+ let trimmed = code.replace(/[\x00-\x1F\x7F]/g, "").trim();
5947
+ if (trimmed.length < CattlePassport.BARCODE_MIN_LENGTH ||
5948
+ trimmed.length > CattlePassport.BARCODE_MAX_LENGTH)
5947
5949
  return null;
5948
- // Extract fixed-width fields
5950
+ // Extract fixed-width fields (eartag, dob, sex are fixed from the front;
5951
+ // version is always the last 2 chars; breed fills the gap between sex and version)
5949
5952
  let earTagField = trimmed.slice(0, 14);
5950
5953
  let dobField = trimmed.slice(14, 22);
5951
5954
  let sexChar = trimmed.charAt(22);
5952
- let breedField = trimmed.slice(23, 28);
5953
- let versionField = trimmed.slice(28, 30);
5955
+ let breedField = trimmed.slice(23, -2);
5956
+ let versionField = trimmed.slice(-2);
5954
5957
  // Country code: 2 alpha chars
5955
5958
  let countryCode = earTagField.slice(0, 2);
5956
5959
  if (!/^[A-Z]{2}$/.test(countryCode))
@@ -6028,7 +6031,8 @@ class CattlePassport {
6028
6031
  return `${this.formattedEarTag} | ${this.formattedDateOfBirth} | ${this._sex} | ${this._breed} | v${this._passportVersion}`;
6029
6032
  }
6030
6033
  }
6031
- CattlePassport.BARCODE_LENGTH = 30;
6034
+ CattlePassport.BARCODE_MIN_LENGTH = 26; // 14 eartag + 8 dob + 1 sex + 1 breed + 2 version
6035
+ CattlePassport.BARCODE_MAX_LENGTH = 30;
6032
6036
 
6033
6037
  /**
6034
6038
  * Extract the smallest lot number for sorting purposes.
@@ -18,7 +18,8 @@
18
18
  * FR72341 6850203052020FHF 01 ← French import, 10-digit national ID
19
19
  */
20
20
  export default class CattlePassport {
21
- static BARCODE_LENGTH: number;
21
+ static BARCODE_MIN_LENGTH: number;
22
+ static BARCODE_MAX_LENGTH: number;
22
23
  private _raw;
23
24
  private _earTag;
24
25
  private _dateOfBirth;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marteye/studiojs",
3
- "version": "1.1.43",
3
+ "version": "1.1.45",
4
4
  "description": "MartEye Studio JavaScript SDK",
5
5
  "license": "MIT",
6
6
  "source": "src/index.ts",