@avalanche-io/c4 1.0.18 → 1.0.19

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.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // C4 Universal Content Identification — TypeScript Implementation
2
- // @avalanche-io/c4 v1.0.18
2
+ // @avalanche-io/c4 v1.0.19
3
3
  // Core ID
4
4
  export { C4ID, identify, identifyBytes, parse } from './id.js';
5
5
  export { identifyContent, tryCanonicalizeC4m } from './identify-content.js';
@@ -1 +1 @@
1
- {"version":3,"file":"naturalsort.d.ts","sourceRoot":"","sources":["../src/naturalsort.ts"],"names":[],"mappings":"AAqEA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAgCzD"}
1
+ {"version":3,"file":"naturalsort.d.ts","sourceRoot":"","sources":["../src/naturalsort.ts"],"names":[],"mappings":"AAuEA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CA6BzD"}
@@ -19,12 +19,7 @@ function segmentString(s) {
19
19
  }
20
20
  else if (isDigit !== isNumeric) {
21
21
  // Transition between text and numeric
22
- const seg = {
23
- text: current,
24
- isNumeric,
25
- numValue: isNumeric ? parseNumber(current) : 0,
26
- };
27
- segments.push(seg);
22
+ segments.push({ text: current, isNumeric });
28
23
  current = ch;
29
24
  isNumeric = isDigit;
30
25
  }
@@ -34,21 +29,29 @@ function segmentString(s) {
34
29
  }
35
30
  // Add final segment
36
31
  if (current.length > 0) {
37
- segments.push({
38
- text: current,
39
- isNumeric,
40
- numValue: isNumeric ? parseNumber(current) : 0,
41
- });
32
+ segments.push({ text: current, isNumeric });
42
33
  }
43
34
  return segments;
44
35
  }
45
- // parseNumber converts a numeric string to a number using manual parsing.
46
- function parseNumber(s) {
47
- let result = 0;
48
- for (const ch of s) {
49
- result = result * 10 + (ch.charCodeAt(0) - 0x30);
36
+ // compareDigitRuns orders two runs of ASCII digits as integers of any
37
+ // length, with no numeric parse (a double keeps 15-16 digits; a 17-digit
38
+ // run would lose its last digit and two runs could compare equal):
39
+ // leading zeros are dropped, a shorter remainder is the smaller value,
40
+ // equal lengths compare digit by digit, and equal values put the shorter
41
+ // spelling first ("1" < "01"). Returns -1, 0 or 1.
42
+ function compareDigitRuns(a, b) {
43
+ const ta = a.replace(/^0+/, "");
44
+ const tb = b.replace(/^0+/, "");
45
+ if (ta.length !== tb.length) {
46
+ return ta.length < tb.length ? -1 : 1;
47
+ }
48
+ if (ta !== tb) {
49
+ return ta < tb ? -1 : 1;
50
50
  }
51
- return result;
51
+ if (a.length !== b.length) {
52
+ return a.length < b.length ? -1 : 1;
53
+ }
54
+ return 0;
52
55
  }
53
56
  // naturalLess compares two strings using natural sorting.
54
57
  // Natural sorting handles numeric sequences intelligently:
@@ -62,13 +65,10 @@ export function naturalLess(a, b) {
62
65
  const segA = segsA[i];
63
66
  const segB = segsB[i];
64
67
  if (segA.isNumeric && segB.isNumeric) {
65
- // Both numeric: compare as integers
66
- if (segA.numValue !== segB.numValue) {
67
- return segA.numValue < segB.numValue;
68
- }
69
- // Equal values: shorter representation first
70
- if (segA.text.length !== segB.text.length) {
71
- return segA.text.length < segB.text.length;
68
+ // Both numeric: compare as integers of any length
69
+ const c = compareDigitRuns(segA.text, segB.text);
70
+ if (c !== 0) {
71
+ return c < 0;
72
72
  }
73
73
  }
74
74
  else if (segA.isNumeric !== segB.isNumeric) {
@@ -1 +1 @@
1
- {"version":3,"file":"naturalsort.js","sourceRoot":"","sources":["../src/naturalsort.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"naturalsort.js","sourceRoot":"","sources":["../src/naturalsort.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avalanche-io/c4",
3
- "version": "1.0.18",
3
+ "version": "1.0.19",
4
4
  "description": "C4 Universal Content Identification — TypeScript implementation",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",