Skip to content

Commit 41ca4b4

Browse files
fix(metro): vendor countLines from metro (#5185)
* fix(metro): vendor countLines from metro * fix lint
1 parent 6469ab0 commit 41ca4b4

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
- Add mobile replay attributes to logs ([#5165](https://github.com/getsentry/sentry-react-native/pull/5165))
1414

15+
### Fixes
16+
17+
- Vendor `metro/countLines` function to avoid issues with the private import ([#5185](https://github.com/getsentry/sentry-react-native/pull/5185))
18+
1519
## 7.1.0
1620

1721
### Fixes

packages/core/src/js/tools/utils.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
import * as crypto from 'crypto';
22
// eslint-disable-next-line import/no-extraneous-dependencies
33
import type { MixedOutput, Module, ReadOnlyGraph, SerializerOptions } from 'metro';
4-
// eslint-disable-next-line import/no-extraneous-dependencies
5-
import type * as countLinesType from 'metro/private/lib/countLines';
64
import type CountingSet from 'metro/src/lib/CountingSet'; // types are in src but exports are in private
7-
8-
let countLines: typeof countLinesType;
9-
try {
10-
countLines = require('metro/private/lib/countLines');
11-
} catch (e) {
12-
countLines = require('metro/src/lib/countLines');
13-
}
5+
import countLines from './vendor/metro/countLines';
146

157
// Variant of MixedOutput
168
// https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/DeltaBundler/types.flow.js#L21
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Vendored from @facebook/metro
2+
3+
// https://github.com/facebook/metro/blob/93d68cca249202fd3eb52672217e725d90e44eb4/packages/metro/src/lib/countLines.js
4+
5+
// MIT License
6+
7+
// Copyright (c) Meta Platforms, Inc. and affiliates.
8+
9+
// Permission is hereby granted, free of charge, to any person obtaining a copy
10+
// of this software and associated documentation files (the "Software"), to deal
11+
// in the Software without restriction, including without limitation the rights
12+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13+
// copies of the Software, and to permit persons to whom the Software is
14+
// furnished to do so, subject to the following conditions:
15+
16+
// The above copyright notice and this permission notice shall be included in all
17+
// copies or substantial portions of the Software.
18+
19+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25+
// SOFTWARE.
26+
27+
// This is exported as private from `metro` and as such breaking changes can appear anytime.
28+
// In the past these were related to the way the function is exported. Never to the function itself.
29+
// Thus it should be more stable to vendor it.
30+
31+
const newline = /\r\n?|\n|\u2028|\u2029/g;
32+
33+
export default (string: string): number => (string.match(newline) || []).length + 1;

0 commit comments

Comments
 (0)