Skip to content

Commit 46111ef

Browse files
Handle Serverless esbuild inject entries (#1865)
1 parent 5dc7f12 commit 46111ef

6 files changed

Lines changed: 34 additions & 7 deletions

File tree

packages/knip/fixtures/plugins/serverless-framework-typescript-plugins/serverless.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ const config: AWS = {
1111
custom: {
1212
esbuild: {
1313
bundle: true,
14+
inject: ['./src/libs/commonjs-globals.ts'],
1415
target: 'node22',
1516
},
1617
},
18+
build: {
19+
esbuild: {
20+
inject: ['./src/libs/production-globals.ts'],
21+
},
22+
},
1723
plugins: ['serverless-esbuild', 'serverless-offline', 'serverless-offline-sns', 'serverless-offline-sqs'],
1824
functions: {
1925
hello: {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const commonjsGlobal = 'commonjs';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const productionGlobal = 'production';

packages/knip/src/plugins/serverless-framework/index.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import type { IsPluginEnabled, Plugin, ResolveConfig } from '../../types/config.ts';
2+
import { arrayify } from '../../util/array.ts';
23
import { toDependency, toProductionEntry } from '../../util/input.ts';
34
import { isInternal, join } from '../../util/path.ts';
45
import { hasDependency } from '../../util/plugin.ts';
5-
import type { PluginConfig } from './types.ts';
6+
import type { EsbuildConfig, PluginConfig } from './types.ts';
67

78
// https://www.serverless.com/framework/docs
89

@@ -22,14 +23,26 @@ const handlerToEntry = (handler: string) => {
2223
const pluginToInput = (plugin: string, dir: string) =>
2324
isInternal(plugin) ? toProductionEntry(join(dir, plugin)) : toDependency(plugin);
2425

26+
const getInjectEntries = (esbuild: EsbuildConfig | undefined, dir: string) =>
27+
esbuild && typeof esbuild === 'object' ? arrayify(esbuild.inject).map(id => toProductionEntry(join(dir, id))) : [];
28+
2529
const resolveConfig: ResolveConfig<PluginConfig> = async (config, options) => {
2630
const functions = config.functions
2731
? Object.values(config.functions).flatMap(fn => (fn.handler ? [handlerToEntry(fn.handler)] : []))
2832
: [];
2933
const plugins = config.plugins?.filter((plugin): plugin is string => typeof plugin === 'string') ?? [];
3034
const esbuild = config.custom?.esbuild || config.build?.esbuild ? [toDependency('esbuild', { optional: true })] : [];
31-
32-
return [...functions, ...plugins.map(plugin => pluginToInput(plugin, options.configFileDir)), ...esbuild];
35+
const injectEntries = [
36+
...getInjectEntries(config.custom?.esbuild, options.configFileDir),
37+
...getInjectEntries(config.build?.esbuild, options.configFileDir),
38+
];
39+
40+
return [
41+
...functions,
42+
...plugins.map(plugin => pluginToInput(plugin, options.configFileDir)),
43+
...esbuild,
44+
...injectEntries,
45+
];
3346
};
3447

3548
const plugin: Plugin = {
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
export type PluginConfig = {
22
build?: {
3-
esbuild?: unknown;
3+
esbuild?: EsbuildConfig;
44
};
55
custom?: {
6-
esbuild?: unknown;
6+
esbuild?: EsbuildConfig;
77
};
88
functions?: Record<string, ServerlessFunction>;
99
plugins?: unknown[];
1010
};
1111

12+
export type EsbuildConfig =
13+
| {
14+
inject?: string[];
15+
}
16+
| boolean;
17+
1218
type ServerlessFunction = {
1319
handler?: string;
1420
};

packages/knip/test/plugins/serverless-framework.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ test('Find dependencies from Serverless Framework TypeScript plugins', async ()
2525

2626
assert.deepEqual(counters, {
2727
...baseCounters,
28-
processed: 3,
29-
total: 3,
28+
processed: 5,
29+
total: 5,
3030
});
3131
assert.deepEqual(issues.devDependencies, {});
3232
});

0 commit comments

Comments
 (0)