@@ -47,6 +47,14 @@ import {
4747import { warning } from "./formatters/colors.js" ;
4848import { isAllDigits } from "./utils.js" ;
4949
50+ /** Convert a string or numeric ID to a number, or `undefined` if falsy/NaN. */
51+ export function toNumericId (
52+ id : string | number | undefined ,
53+ ) : number | undefined {
54+ if ( id == null ) return undefined ;
55+ return Number ( id ) || undefined ;
56+ }
57+
5058/**
5159 * Resolved organization and project target for API calls.
5260 */
@@ -138,7 +146,7 @@ export async function resolveFromDsn(
138146 return {
139147 org : cached . orgSlug ,
140148 project : cached . projectSlug ,
141- projectId : cached . projectId ? Number ( cached . projectId ) : undefined ,
149+ projectId : toNumericId ( cached . projectId ) ,
142150 orgDisplay : cached . orgName ,
143151 projectDisplay : cached . projectName ,
144152 detectedFrom,
@@ -147,7 +155,6 @@ export async function resolveFromDsn(
147155
148156 // Cache miss — fetch project details and cache them
149157 const projectInfo = await getProject ( dsn . orgId , dsn . projectId ) ;
150- const numericProjectId = Number ( projectInfo . id ) || undefined ;
151158
152159 if ( projectInfo . organization ) {
153160 await setCachedProject ( dsn . orgId , dsn . projectId , {
@@ -161,7 +168,7 @@ export async function resolveFromDsn(
161168 return {
162169 org : projectInfo . organization . slug ,
163170 project : projectInfo . slug ,
164- projectId : numericProjectId ,
171+ projectId : toNumericId ( projectInfo . id ) ,
165172 orgDisplay : projectInfo . organization . name ,
166173 projectDisplay : projectInfo . name ,
167174 detectedFrom,
@@ -172,7 +179,7 @@ export async function resolveFromDsn(
172179 return {
173180 org : dsn . orgId ,
174181 project : dsn . projectId ,
175- projectId : numericProjectId ,
182+ projectId : toNumericId ( projectInfo . id ) ,
176183 orgDisplay : dsn . orgId ,
177184 projectDisplay : projectInfo . name ,
178185 detectedFrom,
@@ -231,7 +238,7 @@ async function resolveDsnByPublicKey(
231238 return {
232239 org : cached . orgSlug ,
233240 project : cached . projectSlug ,
234- projectId : cached . projectId ? Number ( cached . projectId ) : undefined ,
241+ projectId : toNumericId ( cached . projectId ) ,
235242 orgDisplay : cached . orgName ,
236243 projectDisplay : cached . projectName ,
237244 detectedFrom,
@@ -259,7 +266,7 @@ async function resolveDsnByPublicKey(
259266 return {
260267 org : projectInfo . organization . slug ,
261268 project : projectInfo . slug ,
262- projectId : Number ( projectInfo . id ) || undefined ,
269+ projectId : toNumericId ( projectInfo . id ) ,
263270 orgDisplay : projectInfo . organization . name ,
264271 projectDisplay : projectInfo . name ,
265272 detectedFrom,
@@ -305,7 +312,7 @@ async function resolveDsnToTarget(
305312 return {
306313 org : cached . orgSlug ,
307314 project : cached . projectSlug ,
308- projectId : cached . projectId ? Number ( cached . projectId ) : undefined ,
315+ projectId : toNumericId ( cached . projectId ) ,
309316 orgDisplay : cached . orgName ,
310317 projectDisplay : cached . projectName ,
311318 detectedFrom,
@@ -316,7 +323,6 @@ async function resolveDsnToTarget(
316323 // Cache miss — fetch project details and cache them
317324 try {
318325 const projectInfo = await getProject ( dsn . orgId , dsn . projectId ) ;
319- const numericProjectId = Number ( projectInfo . id ) || undefined ;
320326
321327 if ( projectInfo . organization ) {
322328 await setCachedProject ( dsn . orgId , dsn . projectId , {
@@ -330,7 +336,7 @@ async function resolveDsnToTarget(
330336 return {
331337 org : projectInfo . organization . slug ,
332338 project : projectInfo . slug ,
333- projectId : numericProjectId ,
339+ projectId : toNumericId ( projectInfo . id ) ,
334340 orgDisplay : projectInfo . organization . name ,
335341 projectDisplay : projectInfo . name ,
336342 detectedFrom,
@@ -342,7 +348,7 @@ async function resolveDsnToTarget(
342348 return {
343349 org : dsn . orgId ,
344350 project : dsn . projectId ,
345- projectId : numericProjectId ,
351+ projectId : toNumericId ( projectInfo . id ) ,
346352 orgDisplay : dsn . orgId ,
347353 projectDisplay : projectInfo . name ,
348354 detectedFrom,
@@ -472,7 +478,7 @@ async function inferFromDirectoryName(cwd: string): Promise<ResolvedTargets> {
472478 const targets : ResolvedTarget [ ] = matches . map ( ( m ) => ( {
473479 org : m . orgSlug ,
474480 project : m . slug ,
475- projectId : Number ( m . id ) || undefined ,
481+ projectId : toNumericId ( m . id ) ,
476482 orgDisplay : m . organization ?. name ?? m . orgSlug ,
477483 projectDisplay : m . name ,
478484 detectedFrom,
@@ -549,7 +555,7 @@ export async function fetchProjectId(
549555) : Promise < number | undefined > {
550556 try {
551557 const projectInfo = await getProject ( org , project ) ;
552- return Number ( projectInfo . id ) || undefined ;
558+ return toNumericId ( projectInfo . id ) ;
553559 } catch ( error ) {
554560 if ( error instanceof AuthError ) {
555561 throw error ;
0 commit comments