Skip to content

Commit 6454087

Browse files
committed
fix(metro): vendor countLines from metro (#5185)
1 parent 00080db commit 6454087

3 files changed

Lines changed: 35 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
### Fixes
1212

13+
- Vendor `metro/countLines` function to avoid issues with the private import ([#5185](https://github.com/getsentry/sentry-react-native/pull/5185))
1314
- Fix baseJSBundle and bundleToString TypeErrors with Metro 0.83.2 ([#5206](https://github.com/getsentry/sentry-react-native/pull/5206))
1415

1516
### Dependencies

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
import * as crypto from 'crypto';
22
// eslint-disable-next-line import/no-extraneous-dependencies
33
import type { MixedOutput, Module, ReadOnlyGraph } from 'metro';
4-
import type * as countLinesType from 'metro/private/lib/countLines';
54

65
import type { Bundle, MetroSerializer, MetroSerializerOutput, SerializedBundle, VirtualJSOutput } from './utils';
76
import { createDebugIdSnippet, createSet, determineDebugIdFromBundleSource, stringToUUID } from './utils';
7+
import countLines from './vendor/metro/countLines';
88
import { createDefaultMetroSerializer } from './vendor/metro/utils';
99

10-
let countLines: typeof countLinesType;
11-
try {
12-
countLines = require('metro/private/lib/countLines');
13-
} catch (e) {
14-
countLines = require('metro/src/lib/countLines');
15-
}
16-
1710
type SourceMap = Record<string, unknown>;
1811

1912
const DEBUG_ID_PLACE_HOLDER = '__debug_id_place_holder__';
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)