From a9c37b92cffc14bd1d419417cbb6a6aae997d11d Mon Sep 17 00:00:00 2001 From: "Marko (ServerlessLife)" Date: Fri, 6 Mar 2026 08:36:11 +0100 Subject: [PATCH] fix: SLS Framework types --- src/frameworks/slsFramework.ts | 2 +- src/frameworks/slsFrameworkTypes.ts | 98 +++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/frameworks/slsFrameworkTypes.ts diff --git a/src/frameworks/slsFramework.ts b/src/frameworks/slsFramework.ts index 2c126b81..25fdf019 100755 --- a/src/frameworks/slsFramework.ts +++ b/src/frameworks/slsFramework.ts @@ -3,7 +3,7 @@ import * as path from 'path'; import { EsBuildOptions, LambdaResource } from '../types/resourcesDiscovery.js'; import { constants } from 'fs'; import { findPackageJson } from '../utils/findPackageJson.js'; -import type Serverless from 'serverless'; +import type { Serverless } from './slsFrameworkTypes.js'; import { IFramework } from './iFrameworks.js'; import { LldConfigBase } from '../types/lldConfig.js'; import { Logger } from '../logger.js'; diff --git a/src/frameworks/slsFrameworkTypes.ts b/src/frameworks/slsFrameworkTypes.ts new file mode 100644 index 00000000..0305eb03 --- /dev/null +++ b/src/frameworks/slsFrameworkTypes.ts @@ -0,0 +1,98 @@ +/** + * Mock types for the Serverless Framework. + * Copied from node_modules/@types/serverless/index.d.ts when the 'serverless' package is not installed. + * External references (AwsProvider, Service class, etc.) are inlined or simplified. + */ + +/** Stand-in for AwsProvider.Event so we don't depend on awsProvider.d.ts */ +type Event = unknown; + +/** + * Service instance shape (copied from @types/serverless/classes/Service.d.ts). + * Only the properties used by slsFramework are typed in full. + */ +export interface ServerlessService { + custom: { [key: string]: any }; + plugins: string[]; + functions: { + [key: string]: + | Serverless.FunctionDefinitionHandler + | Serverless.FunctionDefinitionImage; + }; +} + +// --- Copied from @types/serverless/index.d.ts (declare namespace Serverless) --- +// eslint-disable-next-line @typescript-eslint/no-namespace -- mirrors @types/serverless for slsFramework cast Serverless.FunctionDefinitionHandler +export namespace Serverless { + /** + * CLI options provided to the command + * @example + * // serverless --verbose --stage prod + * { verbose: true, stage: 'prod' } + */ + export interface Options { + function?: string | undefined; + watch?: boolean | undefined; + verbose?: boolean | undefined; + extraServicePath?: string | undefined; + stage?: string | undefined; + region?: string | undefined; + noDeploy?: boolean | undefined; + [key: string]: string | boolean | string[] | undefined; + } + + export interface Config { + servicePath: string; + serviceDir: string; + } + + export interface FunctionDefinition { + name?: string | undefined; + package?: Package | undefined; + reservedConcurrency?: number | undefined; + runtime?: string | undefined; + timeout?: number | undefined; + memorySize?: number | undefined; + environment?: { [name: string]: string } | undefined; + events: Event[]; + tags?: { [key: string]: string } | undefined; + } + + export interface LogOptions { + color?: string | undefined; + bold?: boolean | undefined; + underline?: boolean | undefined; + entity?: string | undefined; + } + + export interface FunctionDefinitionHandler extends FunctionDefinition { + handler: string; + } + + export interface FunctionDefinitionImage extends FunctionDefinition { + image: string; + } + + export interface Package { + /** @deprecated use `patterns` instead */ + include?: string[] | undefined; + /** @deprecated use `patterns` instead */ + exclude?: string[] | undefined; + patterns?: string[] | undefined; + artifact?: string | undefined; + individually?: boolean | undefined; + } + + export type EventType = Event | object; +} + +// --- Serverless instance (declare class Serverless) - only the shape used by slsFramework --- + +/** + * Serverless instance. Full class in @types/serverless has more members; this mock keeps service, init(), run(). + */ +export interface Serverless { + service: ServerlessService; + init(): Promise; + run(): Promise; +}