@@ -4,6 +4,10 @@ import { ResolvedConfig } from "@trigger.dev/core/v3/build";
44import { configPlugin } from "../config.js" ;
55import { logger } from "../utilities/logger.js" ;
66import { bunPlugin } from "../runtimes/bun.js" ;
7+ import { resolvePathSync as esmResolveSync } from "mlly" ;
8+ import { readPackageJSON , resolvePackageJSON } from "pkg-types" ;
9+ import { dirname } from "node:path" ;
10+ import { readJSONFile } from "../utilities/fileSystem.js" ;
711
812export async function buildPlugins (
913 target : BuildTarget ,
@@ -87,3 +91,94 @@ export function polyshedPlugin(): esbuild.Plugin {
8791 } ,
8892 } ;
8993}
94+
95+ export class SdkVersionExtractor {
96+ private _sdkVersion : string | undefined ;
97+ private _ranOnce = false ;
98+
99+ get sdkVersion ( ) {
100+ return this . _sdkVersion ;
101+ }
102+
103+ get plugin ( ) : esbuild . Plugin {
104+ return {
105+ name : "sdk-version" ,
106+ setup : ( build ) => {
107+ build . onResolve ( { filter : / ^ @ t r i g g e r \. d e v \/ s d k \/ / } , async ( args ) => {
108+ if ( this . _ranOnce ) {
109+ return undefined ;
110+ } else {
111+ this . _ranOnce = true ;
112+ }
113+
114+ logger . debug ( "[SdkVersionExtractor] Extracting SDK version" , { args } ) ;
115+
116+ try {
117+ const resolvedPath = esmResolveSync ( args . path , {
118+ url : args . resolveDir ,
119+ } ) ;
120+
121+ logger . debug ( "[SdkVersionExtractor] Resolved SDK module path" , { resolvedPath } ) ;
122+
123+ const packageJsonPath = await resolvePackageJSON ( dirname ( resolvedPath ) , {
124+ test : async ( filePath ) => {
125+ try {
126+ const candidate = await readJSONFile ( filePath ) ;
127+
128+ // Exclude esm type markers
129+ return Object . keys ( candidate ) . length > 1 || ! candidate . type ;
130+ } catch ( error ) {
131+ logger . debug ( "[SdkVersionExtractor] Error during package.json test" , {
132+ error : error instanceof Error ? error . message : error ,
133+ } ) ;
134+
135+ return false ;
136+ }
137+ } ,
138+ } ) ;
139+
140+ if ( ! packageJsonPath ) {
141+ return undefined ;
142+ }
143+
144+ logger . debug ( "[SdkVersionExtractor] Found package.json" , { packageJsonPath } ) ;
145+
146+ const packageJson = await readPackageJSON ( packageJsonPath ) ;
147+
148+ if ( ! packageJson . name || packageJson . name !== "@trigger.dev/sdk" ) {
149+ logger . debug ( "[SdkVersionExtractor] No match for SDK package name" , {
150+ packageJsonPath,
151+ packageJson,
152+ } ) ;
153+
154+ return undefined ;
155+ }
156+
157+ if ( ! packageJson . version ) {
158+ logger . debug ( "[SdkVersionExtractor] No version found in package.json" , {
159+ packageJsonPath,
160+ packageJson,
161+ } ) ;
162+
163+ return undefined ;
164+ }
165+
166+ this . _sdkVersion = packageJson . version ;
167+
168+ logger . debug ( "[SdkVersionExtractor] Found SDK version" , {
169+ args,
170+ packageJsonPath,
171+ sdkVersion : this . _sdkVersion ,
172+ } ) ;
173+
174+ return undefined ;
175+ } catch ( error ) {
176+ logger . debug ( "[SdkVersionExtractor] Failed to extract SDK version" , { error } ) ;
177+ }
178+
179+ return undefined ;
180+ } ) ;
181+ } ,
182+ } ;
183+ }
184+ }
0 commit comments