import type {Options} from '@swc/core' import { type Accessor, Extension, type ExtensionApi, type Getter, type Setter, } from '@roots/bud-framework/extension' import {options} from '@roots/bud-framework/extension/decorators' /** * Options related to SWC compiler * * @remarks * There are two additional properties: `typescript` and `ecmascript`. * These are used to override the base options for each language. * This is useful for using different options for * different file types but still using the same general config. */ type JSCOptions = { baseUrl: Options[`jsc`][`baseUrl`] experimental: Options[`jsc`][`experimental`] /** * Use `@swc/helpers` instead of inline helpers. */ externalHelpers: Options[`jsc`][`externalHelpers`] /** * Keep class names. */ keepClassNames: Options[`jsc`][`keepClassNames`] loose: boolean minify: Options[`jsc`][`minify`] parser: Options[`jsc`][`parser`] paths: Options[`jsc`][`paths`] preserveAllComments: Options[`jsc`][`preserveAllComments`] /** * Defaults to `es3` (which enabled **all** pass). */ target: Options[`jsc`][`target`] transform: Options[`jsc`][`transform`] } & Options[`jsc`] type BudJSCPublicInterface = ExtensionApi @options({ baseUrl: undefined, experimental: undefined, externalHelpers: undefined, keepClassNames: undefined, loose: undefined, minify: undefined, parser: undefined, paths: undefined, preserveAllComments: undefined, target: undefined, transform: undefined, }) class BudJSCApi extends Extension { public declare baseUrl: Accessor public declare experimental: Accessor public declare externalHelpers: Accessor public declare getBaseUrl: Getter public declare getExperimental: Getter public declare getExternalHelpers: Getter public declare getKeepClassNames: Getter public declare getLoose: Getter public declare getMinify: Getter public declare getParser: Getter public declare getPaths: Getter public declare getPreserveAllComments: Getter< JSCOptions, `preserveAllComments` > public declare getTarget: Getter public declare getTransform: Getter public declare keepClassNames: Accessor public declare loose: Accessor public declare minify: Accessor public declare parser: Accessor public declare paths: Accessor public declare preserveAllComments: Accessor< JSCOptions, `preserveAllComments` > public declare setBaseUrl: Setter public declare setExperimental: Setter< BudJSCApi, JSCOptions, `experimental` > public declare setExternalHelpers: Setter< BudJSCApi, JSCOptions, `externalHelpers` > public declare setKeepClassNames: Setter< BudJSCApi, JSCOptions, `keepClassNames` > public declare setLoose: Setter public declare setMinify: Setter public declare setParser: Setter public declare setPaths: Setter public declare setPreserveAllComments: Setter< BudJSCApi, JSCOptions, `preserveAllComments` > public declare setTarget: Setter public declare setTransform: Setter public declare target: Accessor public declare transform: Accessor public setPlugins( plugins: | (( plugins?: JSCOptions[`experimental`][`plugins`], ) => JSCOptions[`experimental`][`plugins`]) | JSCOptions[`experimental`][`plugins`], ) { this.setExperimental((experimental = {}) => ({ ...experimental, plugins: typeof plugins === `function` ? plugins(experimental.plugins) : plugins, })) } } export {BudJSCApi, type BudJSCPublicInterface, type JSCOptions}