Babel helper plugin that provides essential functionality for transforming modern JavaScript class features to ES6-compatible code
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
The primary factory function for creating Babel plugins that transform class features with configurable options and feature flags.
Creates a configured Babel plugin for transforming specific class features.
/**
* Creates a Babel plugin for transforming class features
* @param options - Configuration options for the plugin
* @returns Configured PluginObject ready for use in Babel
*/
function createClassFeaturePlugin(options: Options): PluginObject;
interface Options {
/** The name of the plugin */
name: string;
/** Feature flags indicating which class features to transform */
feature: number;
/** Whether to use loose mode transformations */
loose?: boolean;
/** Babel plugin inheritance configuration */
inherits?: PluginObject["inherits"];
/** Parser options manipulation function */
manipulateOptions?: PluginObject["manipulateOptions"];
/** Babel plugin API instance */
api?: PluginAPI;
/** Decorator specification version to use */
decoratorVersion?: DecoratorVersionKind | "2018-09";
}
type DecoratorVersionKind =
| "2023-11" | "2023-05" | "2023-01"
| "2022-03" | "2021-12";Usage Examples:
import { createClassFeaturePlugin, FEATURES } from "@babel/helper-create-class-features-plugin";
// Basic class properties plugin
export default createClassFeaturePlugin({
name: "transform-class-properties",
api,
feature: FEATURES.fields,
loose: options.loose,
});
// Private methods plugin with combined features
export default createClassFeaturePlugin({
name: "transform-private-methods",
api,
feature: FEATURES.privateMethods | FEATURES.fields,
loose: options.loose,
manipulateOptions(opts, parserOpts) {
parserOpts.plugins.push("classPrivateMethods");
},
});
// Decorators plugin with specific version
export default createClassFeaturePlugin({
name: "transform-decorators",
api,
feature: FEATURES.decorators,
decoratorVersion: "2023-11",
});
// Complex plugin with inheritance
export default createClassFeaturePlugin({
name: "transform-class-static-blocks",
api,
feature: FEATURES.staticBlocks,
inherits: require("@babel/plugin-syntax-class-static-block").default,
manipulateOptions(opts, parserOpts) {
parserOpts.plugins.push("classStaticBlock");
},
});The returned plugin object follows standard Babel plugin structure:
interface PluginObject {
name: string;
manipulateOptions?: (opts: any, parserOpts: any) => void;
inherits?: PluginObject;
pre?: (file: File) => void;
visitor: {
Class(path: NodePath<t.Class>, state: any): void;
ExportDefaultDeclaration?(path: NodePath<t.ExportDefaultDeclaration>, state: any): void;
};
}Features can be combined using bitwise OR operations:
// Multiple features
const combinedFeatures = FEATURES.fields | FEATURES.privateMethods | FEATURES.privateIn;
// Check if feature is enabled
const hasFields = feature & FEATURES.fields;
const hasPrivateMethods = feature & FEATURES.privateMethods;The plugin supports multiple decorator specification versions:
Loose mode provides faster, less spec-compliant transformations:
// Strict mode (default) - fully spec-compliant
createClassFeaturePlugin({
name: "my-plugin",
feature: FEATURES.fields,
loose: false
});
// Loose mode - faster but less compliant
createClassFeaturePlugin({
name: "my-plugin",
feature: FEATURES.fields,
loose: true
});Loose mode assumptions: