@grampro/kit 2.4.2 → 2.4.3

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 (30) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/package.json +1 -1
  3. package/source/components/accordion/passport.json +2 -2
  4. package/source/components/alert/passport.json +2 -2
  5. package/source/components/avatar/passport.json +2 -2
  6. package/source/components/badge/passport.json +2 -2
  7. package/source/components/breadcrumb/passport.json +2 -2
  8. package/source/components/button/passport.json +2 -2
  9. package/source/components/card/passport.json +2 -2
  10. package/source/components/checkbox/passport.json +2 -2
  11. package/source/components/combobox/passport.json +2 -2
  12. package/source/components/data-grid/passport.json +2 -2
  13. package/source/components/date-picker/passport.json +2 -2
  14. package/source/components/dialog/passport.json +2 -2
  15. package/source/components/file-uploader/passport.json +2 -2
  16. package/source/components/input/passport.json +2 -2
  17. package/source/components/menu/passport.json +2 -2
  18. package/source/components/modal/passport.json +2 -2
  19. package/source/components/number-input/passport.json +2 -2
  20. package/source/components/popover/passport.json +2 -2
  21. package/source/components/progress/passport.json +2 -2
  22. package/source/components/radio-group/passport.json +2 -2
  23. package/source/components/skeleton/passport.json +2 -2
  24. package/source/components/spinner/passport.json +2 -2
  25. package/source/components/switch/passport.json +2 -2
  26. package/source/components/tabs/passport.json +2 -2
  27. package/source/components/textarea/passport.json +2 -2
  28. package/source/components/toaster/passport.json +2 -2
  29. package/source/components/tooltip/passport.json +2 -2
  30. package/tools/passport/extract.cjs +7 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.3
4
+
5
+ ### Fixed
6
+
7
+ **`passport --check` reported every component as stale on a machine whose
8
+ line endings differed from the one that generated the passport.**
9
+
10
+ A passport records a hash of the source it was derived from, and that hash
11
+ was taken over the file bytes exactly as they sat on disk. A checkout on
12
+ Windows holds CRLF and one on Linux holds LF, so the same unchanged file
13
+ produced two different hashes, and the check announced that all 27
14
+ components had drifted when nothing had changed at all.
15
+
16
+ It now normalises line endings before hashing, so the hash describes the
17
+ content rather than the checkout. If you have been seeing
18
+
19
+ ```
20
+ passport stale - source changed since the passport was generated
21
+ ```
22
+
23
+ on components you never touched, this is why, and it stops.
24
+
25
+ Running `npm run passport` once after upgrading rewrites the hashes in your
26
+ own copies.
27
+
3
28
  ## 2.4.2
4
29
 
5
30
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grampro/kit",
3
- "version": "2.4.2",
3
+ "version": "2.4.3",
4
4
  "description": "GramproKit \u2014 an agent-native UI runtime for React. Copy-in components you own, each publishing a contract that software can read.",
5
5
  "type": "module",
6
6
  "files": [
@@ -10,7 +10,7 @@
10
10
  ]
11
11
  },
12
12
  "source": {
13
- "libraryVersion": "2.4.2",
13
+ "libraryVersion": "2.4.3",
14
14
  "files": [
15
15
  "core/index.ts",
16
16
  "core/open.ts",
@@ -21,7 +21,7 @@
21
21
  "react/context.ts",
22
22
  "react/props.ts"
23
23
  ],
24
- "sourceHash": "sha256:87a51fb32f4a2b0982da7743b12adcbb8529dc7f02c4811f6213a42f481c8ffc"
24
+ "sourceHash": "sha256:719b5c18a3e0f3f7479cd1c4f59d729b335053fc47708cc5ab5763b6d69a206a"
25
25
  },
26
26
  "props": [
27
27
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/live.ts",
@@ -19,7 +19,7 @@
19
19
  "react/locale.ts",
20
20
  "react/props.ts"
21
21
  ],
22
- "sourceHash": "sha256:4c0ffa0d7cacb22dc9f3e577f604e7b692d7a79d7c316c6a74dda8018f383b8b"
22
+ "sourceHash": "sha256:1d3329cee22213d4fb81062f401b481902600b2a2b3a81edf12c6738934f6923"
23
23
  },
24
24
  "props": [
25
25
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/identity.ts",
15
15
  "core/index.ts",
@@ -20,7 +20,7 @@
20
20
  "react/locale.ts",
21
21
  "react/props.ts"
22
22
  ],
23
- "sourceHash": "sha256:a4c28c560e9abb816f4c55d1bb89fef4d63e7d60b13e86603a32bdb00d195e5c"
23
+ "sourceHash": "sha256:2e50d4901b3c6a436a1c8ee35fb43eb11488e305b0466874f007ee325aa02896"
24
24
  },
25
25
  "props": [
26
26
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/count.ts",
15
15
  "core/index.ts",
@@ -20,7 +20,7 @@
20
20
  "react/locale.ts",
21
21
  "react/props.ts"
22
22
  ],
23
- "sourceHash": "sha256:0c10d8dc0e095394f6cb6dc51e86c551c942e3be90c70953479abd2db7d2a9e9"
23
+ "sourceHash": "sha256:f6db45647bfab522ced894c388fb16f6a7fac5ebd20a7114d351b812a1f73d34"
24
24
  },
25
25
  "props": [
26
26
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/trail.ts",
@@ -18,7 +18,7 @@
18
18
  "react/locale.ts",
19
19
  "react/props.ts"
20
20
  ],
21
- "sourceHash": "sha256:e58f3eaf22137155f0de8623f06ff1217cb2749ab10bd83bae64e69b739e25a9"
21
+ "sourceHash": "sha256:ea18a9023e99fd751d8295a40f257e4471948a5cc9878d808501471718da32aa"
22
22
  },
23
23
  "props": [
24
24
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/state.ts",
@@ -18,7 +18,7 @@
18
18
  "react/locale.ts",
19
19
  "react/props.ts"
20
20
  ],
21
- "sourceHash": "sha256:b10547e2d34ee9c542458b1dc8b6e067878a5b47c364409de7f314412520d8a0"
21
+ "sourceHash": "sha256:7666d0807d7131796ced32c99da380d3a6db2cf011fd2dcfa7904878799c1871"
22
22
  },
23
23
  "purpose": "Trigger an action. Not for navigation unless `render` supplies a link element.",
24
24
  "props": [
@@ -12,7 +12,7 @@
12
12
  ]
13
13
  },
14
14
  "source": {
15
- "libraryVersion": "2.4.2",
15
+ "libraryVersion": "2.4.3",
16
16
  "files": [
17
17
  "core/index.ts",
18
18
  "core/trend.ts",
@@ -22,7 +22,7 @@
22
22
  "react/Stat.tsx",
23
23
  "react/props.ts"
24
24
  ],
25
- "sourceHash": "sha256:85aa3e707257ced4a3508f5fd5f15cdb4785f82e8ec0166ad80f809d01717912"
25
+ "sourceHash": "sha256:ef4320f169eb618584b31671b65838e1406de0bf944458079b383dcfd40c2e52"
26
26
  },
27
27
  "props": [
28
28
  {
@@ -10,7 +10,7 @@
10
10
  ]
11
11
  },
12
12
  "source": {
13
- "libraryVersion": "2.4.2",
13
+ "libraryVersion": "2.4.3",
14
14
  "files": [
15
15
  "core/group.ts",
16
16
  "core/index.ts",
@@ -22,7 +22,7 @@
22
22
  "react/locale.ts",
23
23
  "react/props.ts"
24
24
  ],
25
- "sourceHash": "sha256:1448241ee017e4afcd42e789568f4b37d6e359e83c432771cd189ac6f5fee8a4"
25
+ "sourceHash": "sha256:5b132e0d372a16b0536b1e8a6fb8809dbcbfb00e1282d406a0a474090f4a72f5"
26
26
  },
27
27
  "props": [
28
28
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/filter.ts",
15
15
  "core/index.ts",
@@ -25,7 +25,7 @@
25
25
  "react/props.ts",
26
26
  "react/useCombobox.ts"
27
27
  ],
28
- "sourceHash": "sha256:733078840c82f0d7863a7d5e08827b2166b3233c28a9c9aa4c6b528cc46ed28d"
28
+ "sourceHash": "sha256:39aa629ae5088777b3a2b8e89036701d9a100c214986912d233bbb6f4fd4f72a"
29
29
  },
30
30
  "props": [
31
31
  {
@@ -14,7 +14,7 @@
14
14
  ]
15
15
  },
16
16
  "source": {
17
- "libraryVersion": "2.4.2",
17
+ "libraryVersion": "2.4.3",
18
18
  "files": [
19
19
  "agent/coerce.ts",
20
20
  "agent/contract.ts",
@@ -64,7 +64,7 @@
64
64
  "react/keyboard.ts",
65
65
  "react/locale.ts"
66
66
  ],
67
- "sourceHash": "sha256:449643cb8b35e825d74f47eeaffd69937a964e2f67d0ad098e74a050eabe31ab"
67
+ "sourceHash": "sha256:85285e939d717fa498f6aa038e225d9f488eef52e3e530f214e51e6ae34aaa79"
68
68
  },
69
69
  "purpose": "Display and operate on tabular data. Virtualized; holds its own sort, filter, search, selection, column and pagination state in an external store exposed through GridApi.",
70
70
  "props": [
@@ -10,7 +10,7 @@
10
10
  ]
11
11
  },
12
12
  "source": {
13
- "libraryVersion": "2.4.2",
13
+ "libraryVersion": "2.4.3",
14
14
  "files": [
15
15
  "core/calendar.ts",
16
16
  "core/format.ts",
@@ -29,7 +29,7 @@
29
29
  "react/props.ts",
30
30
  "react/useDatePicker.ts"
31
31
  ],
32
- "sourceHash": "sha256:e62de2f8c322abc9558a7b9c7e06dadd61da0b442cb3ac7e4ba5bf099ec92251"
32
+ "sourceHash": "sha256:1d3862b23e2bb13fb234af1b85344691a92f9282dae1052fa8eebd19414452bb"
33
33
  },
34
34
  "props": [
35
35
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/api.ts",
15
15
  "core/dialog.ts",
@@ -23,7 +23,7 @@
23
23
  "react/locale.ts",
24
24
  "react/props.ts"
25
25
  ],
26
- "sourceHash": "sha256:e1a5fb2962bcc8ad8bcb77130a33caa782e47627bbe3e84875303839ef63a407"
26
+ "sourceHash": "sha256:d087fe0d6b3c7069ea05892cbf27167e7b5aae79c9522503d2f92574c1158058"
27
27
  },
28
28
  "props": [
29
29
  {
@@ -13,7 +13,7 @@
13
13
  ]
14
14
  },
15
15
  "source": {
16
- "libraryVersion": "2.4.2",
16
+ "libraryVersion": "2.4.3",
17
17
  "files": [
18
18
  "core/format.ts",
19
19
  "core/index.ts",
@@ -29,7 +29,7 @@
29
29
  "react/props.ts",
30
30
  "react/useFileUploader.ts"
31
31
  ],
32
- "sourceHash": "sha256:ff19deac106eaffa0aa59740e3d0505ed592c05d20efabda6858549cf66c24c9"
32
+ "sourceHash": "sha256:07b69e816e869610850093764502d4da38bb450f2ab729b827e4f124f6125d63"
33
33
  },
34
34
  "props": [
35
35
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/count.ts",
15
15
  "core/index.ts",
@@ -23,7 +23,7 @@
23
23
  "react/locale.ts",
24
24
  "react/props.ts"
25
25
  ],
26
- "sourceHash": "sha256:7d4ea32ab677cecb76b21be80500913ef55deb8cee9d37bec78ffccdc65a7aee"
26
+ "sourceHash": "sha256:8059fadd4e1670ffcf97afe2f729758855d04389b0ccbe91edfc9d2a2975ee75"
27
27
  },
28
28
  "props": [
29
29
  {
@@ -16,7 +16,7 @@
16
16
  ]
17
17
  },
18
18
  "source": {
19
- "libraryVersion": "2.4.2",
19
+ "libraryVersion": "2.4.3",
20
20
  "files": [
21
21
  "core/index.ts",
22
22
  "core/navigation.ts",
@@ -29,7 +29,7 @@
29
29
  "react/props.ts",
30
30
  "react/useMenuKeys.ts"
31
31
  ],
32
- "sourceHash": "sha256:24ca0df1711359290751825aa544cf50059149ffd5668f0f761d647b96c0293a"
32
+ "sourceHash": "sha256:7613198a66407cdf4fa284f093ae35f5596e79cf1242097d09cdc3172c2f79d7"
33
33
  },
34
34
  "props": [
35
35
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/dismiss.ts",
14
14
  "core/index.ts",
@@ -19,7 +19,7 @@
19
19
  "react/locale.ts",
20
20
  "react/props.ts"
21
21
  ],
22
- "sourceHash": "sha256:184d3ca90cdec9fcc2b0f4d3267f8a968200dbf8cdd6d5678c243f16aca46d79"
22
+ "sourceHash": "sha256:65249a3a5ade72848c6db3224858922d8c2b8f7c6bcce0f421275835398fb6c7"
23
23
  },
24
24
  "props": [
25
25
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/format.ts",
14
14
  "core/index.ts",
@@ -21,7 +21,7 @@
21
21
  "react/locale.ts",
22
22
  "react/props.ts"
23
23
  ],
24
- "sourceHash": "sha256:5e9d1f41cb6c46b3dac44ab3689d03432abd1ddbbdf4736a87add2454239c505"
24
+ "sourceHash": "sha256:45120dc11be8aafca638f8f6248f83deeb9f98c809140f80fd8c2d2610306371"
25
25
  },
26
26
  "props": [
27
27
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/types.ts",
@@ -17,7 +17,7 @@
17
17
  "react/locale.ts",
18
18
  "react/props.ts"
19
19
  ],
20
- "sourceHash": "sha256:63d921d8dbc2f2b2c7e0d564a11c6dd67f7a86f2eee61fb4f6889aa6d8b7a2de"
20
+ "sourceHash": "sha256:ac04de47fed41d6ef646920b241371395154173d148a5c5f9a6440ef2f589f6a"
21
21
  },
22
22
  "props": [
23
23
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/index.ts",
15
15
  "core/progress.ts",
@@ -20,7 +20,7 @@
20
20
  "react/locale.ts",
21
21
  "react/props.ts"
22
22
  ],
23
- "sourceHash": "sha256:bb6a66684e348b4786fc0a29a7ee63d024fc1d468eda1b27888a5c76e4af294e"
23
+ "sourceHash": "sha256:8c989dc440492a833963b37e6c28fd90a99e54435c545a4f053b77c83d745eaf"
24
24
  },
25
25
  "props": [
26
26
  {
@@ -10,7 +10,7 @@
10
10
  ]
11
11
  },
12
12
  "source": {
13
- "libraryVersion": "2.4.2",
13
+ "libraryVersion": "2.4.3",
14
14
  "files": [
15
15
  "core/group.ts",
16
16
  "core/index.ts",
@@ -22,7 +22,7 @@
22
22
  "react/locale.ts",
23
23
  "react/props.ts"
24
24
  ],
25
- "sourceHash": "sha256:1518aefa0a863d1694ed44d3c56d0b07361f3a4120d44f7f97f4baa7857aa10f"
25
+ "sourceHash": "sha256:cd5f36365c184346538fb461f4c4cd8014723621fd4d312cd5f00c415df20618"
26
26
  },
27
27
  "props": [
28
28
  {
@@ -9,7 +9,7 @@
9
9
  ]
10
10
  },
11
11
  "source": {
12
- "libraryVersion": "2.4.2",
12
+ "libraryVersion": "2.4.3",
13
13
  "files": [
14
14
  "core/index.ts",
15
15
  "core/lines.ts",
@@ -19,7 +19,7 @@
19
19
  "react/Skeleton.tsx",
20
20
  "react/props.ts"
21
21
  ],
22
- "sourceHash": "sha256:8e2b581542c7bc2aac092920774c57f5767dc32ded8b2725a536c3117be2b7db"
22
+ "sourceHash": "sha256:e5c3bcb487c25092a77daec5c55f726d39ac8cf4f3628141cb6777053af6b01f"
23
23
  },
24
24
  "props": [
25
25
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/types.ts",
@@ -19,7 +19,7 @@
19
19
  "react/props.ts",
20
20
  "react/useDelayedLoading.ts"
21
21
  ],
22
- "sourceHash": "sha256:42ece669a14148ab88a6dccbbf495206c489f8198793daff831c0ee1d8e9ae86"
22
+ "sourceHash": "sha256:35c2de8415540772f688151782dff3c84c49b7a3d03fd7e575b3d4d4d4e93d85"
23
23
  },
24
24
  "props": [
25
25
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/toggle.ts",
@@ -18,7 +18,7 @@
18
18
  "react/locale.ts",
19
19
  "react/props.ts"
20
20
  ],
21
- "sourceHash": "sha256:0681194dbbbe6c31a4930b88e98250a66cd49e0c0f4c9b12a88f6c79ffb007ca"
21
+ "sourceHash": "sha256:d96a8af61a18c077beccad85f49d1a25f1e20091aede0182c852f7f36ee9254a"
22
22
  },
23
23
  "props": [
24
24
  {
@@ -12,7 +12,7 @@
12
12
  ]
13
13
  },
14
14
  "source": {
15
- "libraryVersion": "2.4.2",
15
+ "libraryVersion": "2.4.3",
16
16
  "files": [
17
17
  "core/index.ts",
18
18
  "core/navigation.ts",
@@ -21,7 +21,7 @@
21
21
  "react/Tabs.tsx",
22
22
  "react/context.ts"
23
23
  ],
24
- "sourceHash": "sha256:994b9d82745fdbaf05031dcd27a854e7b8f900f1d9058db0b8f43d13b11dbd68"
24
+ "sourceHash": "sha256:af648a096e1a1c4e3f61c57b4e61a6c115c3d2351d5f2c8c6b4519348ae80dfc"
25
25
  },
26
26
  "props": [
27
27
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/count.ts",
14
14
  "core/index.ts",
@@ -19,7 +19,7 @@
19
19
  "react/locale.ts",
20
20
  "react/props.ts"
21
21
  ],
22
- "sourceHash": "sha256:17fa3942bc38126b91bd2eacaccffbe0cb8065f7672697abb052ff85dafea6f2"
22
+ "sourceHash": "sha256:35a538fdd2522c310be181bbb598fdc6eebb99fc5dd1a0ffab3cccf8d84ac43a"
23
23
  },
24
24
  "props": [
25
25
  {
@@ -11,7 +11,7 @@
11
11
  ]
12
12
  },
13
13
  "source": {
14
- "libraryVersion": "2.4.2",
14
+ "libraryVersion": "2.4.3",
15
15
  "files": [
16
16
  "core/api.ts",
17
17
  "core/index.ts",
@@ -26,7 +26,7 @@
26
26
  "react/props.ts",
27
27
  "react/useToasts.ts"
28
28
  ],
29
- "sourceHash": "sha256:9071d3b6937872ce25e6461cf3af993e512ac26ff8fa3c05121ee7ad53289035"
29
+ "sourceHash": "sha256:ac828195f4d7ced89c99eb2bd78bb2581ba7a81d62dcfb892b9acef75bddda77"
30
30
  },
31
31
  "props": [
32
32
  {
@@ -8,7 +8,7 @@
8
8
  ]
9
9
  },
10
10
  "source": {
11
- "libraryVersion": "2.4.2",
11
+ "libraryVersion": "2.4.3",
12
12
  "files": [
13
13
  "core/index.ts",
14
14
  "core/types.ts",
@@ -17,7 +17,7 @@
17
17
  "react/Tooltip.tsx",
18
18
  "react/props.ts"
19
19
  ],
20
- "sourceHash": "sha256:27e564b384259c710f11e5795bbef73813368bd445d17f1d0562910a53dc23e8"
20
+ "sourceHash": "sha256:b7a7aefbc8fcb4c9f4063dd0bc312ca2316ac848946c3055c8e69a8fe8780916"
21
21
  },
22
22
  "props": [
23
23
  {
@@ -65,13 +65,19 @@ function sourceFiles(dir) {
65
65
  /**
66
66
  * Hash of the inputs the passport is derived from. Deterministic: sorted paths,
67
67
  * file contents only, no timestamps.
68
+ *
69
+ * Line endings are normalised first. The same file arrives as CRLF on a
70
+ * Windows checkout and LF on CI, so hashing the bytes verbatim made a
71
+ * passport generated on one platform read as stale on the other — which it
72
+ * did, for all 27 components at once. A content hash should not depend on
73
+ * how the file was checked out.
68
74
  */
69
75
  function hashSources(files, root) {
70
76
  const h = crypto.createHash("sha256");
71
77
  for (const f of [...files].sort()) {
72
78
  h.update(posix(path.relative(root, f)));
73
79
  h.update("\0");
74
- h.update(fs.readFileSync(f));
80
+ h.update(fs.readFileSync(f, "utf8").replace(/\r\n/g, "\n"));
75
81
  h.update("\0");
76
82
  }
77
83
  return `sha256:${h.digest("hex")}`;