-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathplugins.ts
More file actions
179 lines (147 loc) · 4.72 KB
/
plugins.ts
File metadata and controls
179 lines (147 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
import * as esbuild from "esbuild";
import { BuildTarget } from "@trigger.dev/core/v3/schemas";
import { ResolvedConfig } from "@trigger.dev/core/v3/build";
import { configPlugin } from "../config.js";
import { logger } from "../utilities/logger.js";
import { resolvePathSync as esmResolveSync } from "mlly";
import { readPackageJSON, resolvePackageJSON } from "pkg-types";
import { dirname } from "node:path";
import { readJSONFile } from "../utilities/fileSystem.js";
export async function buildPlugins(
target: BuildTarget,
resolvedConfig: ResolvedConfig
): Promise<esbuild.Plugin[]> {
logger.debug("Building plugins for target", target);
const plugins: esbuild.Plugin[] = [];
const $configPlugin = configPlugin(resolvedConfig);
if ($configPlugin) {
plugins.push($configPlugin);
}
plugins.push(polyshedPlugin());
return plugins;
}
export function analyzeMetadataPlugin(): esbuild.Plugin {
return {
name: "analyze-metafile",
setup(build) {
build.onEnd(async (result) => {
if (!result.metafile) {
return;
}
console.log(
await esbuild.analyzeMetafile(result.metafile, {
verbose: true,
})
);
});
},
};
}
const polysheds = [
{
moduleName: "server-only",
code: "export default true;",
},
];
export function polyshedPlugin(): esbuild.Plugin {
return {
name: "polyshed",
setup(build) {
for (const polyshed of polysheds) {
build.onResolve({ filter: new RegExp(`^${polyshed.moduleName}$`) }, (args) => {
if (args.path !== polyshed.moduleName) {
return undefined;
}
return {
path: args.path,
external: false,
namespace: `polyshed-${polyshed.moduleName}`,
};
});
build.onLoad(
{
filter: new RegExp(`^${polyshed.moduleName}$`),
namespace: `polyshed-${polyshed.moduleName}`,
},
(args) => {
return {
contents: polyshed.code,
loader: "js",
};
}
);
}
},
};
}
export class SdkVersionExtractor {
private _sdkVersion: string | undefined;
private _ranOnce = false;
get sdkVersion() {
return this._sdkVersion;
}
get plugin(): esbuild.Plugin {
return {
name: "sdk-version",
setup: (build) => {
build.onResolve({ filter: /^@trigger\.dev\/sdk\// }, async (args) => {
if (this._ranOnce) {
return undefined;
} else {
this._ranOnce = true;
}
logger.debug("[SdkVersionExtractor] Extracting SDK version", { args });
try {
const resolvedPath = esmResolveSync(args.path, {
url: args.resolveDir,
});
logger.debug("[SdkVersionExtractor] Resolved SDK module path", { resolvedPath });
const packageJsonPath = await resolvePackageJSON(dirname(resolvedPath), {
test: async (filePath) => {
try {
const candidate = await readJSONFile(filePath);
// Exclude esm type markers
return Object.keys(candidate).length > 1 || !candidate.type;
} catch (error) {
logger.debug("[SdkVersionExtractor] Error during package.json test", {
error: error instanceof Error ? error.message : error,
});
return false;
}
},
});
if (!packageJsonPath) {
return undefined;
}
logger.debug("[SdkVersionExtractor] Found package.json", { packageJsonPath });
const packageJson = await readPackageJSON(packageJsonPath);
if (!packageJson.name || packageJson.name !== "@trigger.dev/sdk") {
logger.debug("[SdkVersionExtractor] No match for SDK package name", {
packageJsonPath,
packageJson,
});
return undefined;
}
if (!packageJson.version) {
logger.debug("[SdkVersionExtractor] No version found in package.json", {
packageJsonPath,
packageJson,
});
return undefined;
}
this._sdkVersion = packageJson.version;
logger.debug("[SdkVersionExtractor] Found SDK version", {
args,
packageJsonPath,
sdkVersion: this._sdkVersion,
});
return undefined;
} catch (error) {
logger.debug("[SdkVersionExtractor] Failed to extract SDK version", { error });
}
return undefined;
});
},
};
}
}