Détail du package

@stylexjs/babel-plugin

facebook158.6kMIT0.13.1

StyleX babel plugin.

readme

@stylexjs/babel-plugin

StyleX expects you to transform all js/ts/tsx files with @stylexjs/babel-plugin. In addition to transforming JS code, this plugin also produces an Array of CSS rules. All the CSS rules generated from all JS files within your project should be concatenated together and converted to a CSS file using the processStyles function which is also exported from the same module.

@stylexjs/babel-plugin is fairly lightweight. It pre-computes stylex related functions like stylex.create and stylex.keyframes by converting the argument AST to a JS object and transforming them by passing them to the functions of the corresponding names within @stylex/shared

Babel Metadata

The StyleX Babel plugin does more than transform JavaScript (or TypeScript) files. It also returns a list of injected styles. The way that such a value can be returned while transforming a JS file is by using Babel's metadata API.

An example of this can be seen in some of the tests, but the result of using Babel's transform(...) function returns an object contains at least two keys:

  1. code which is the transformed JS code
  2. metadata is an object of metadata that the plugin may want to return as a side-effect.

e.g.

const result = transformSync(sourceCode, {
  filename: opts.filename,
  parserOpts: { flow: { all: true } },
  plugins: [stylexPlugin, opts],
});

const transformedCode = result.code;
const injectedStyles = result.metadata.stylex;

changelog

Changelog

0.13.1 (May 21, 2025)

Fixes

  • Export additional Types.

0.13.0 (May 19, 2025)

New features

  • Add positionTry API for creating @property-try declarations.
  • Add defineConsts API for inlining constant values.
  • Re-write of the runtime style injection module to be more reliable.

Breaking changes

  • The runtimeInjection compiler option is now disabled by default when dev is true.
  • The ESLint rule no-legacy-conditional-styles is renamed to no-legacy-contextual-styles.
  • The useRemForFontSize compiler option is renamed to enableFontSizePxToRem. It is disabled by default and should not be used directly.
  • The genConditionalClasses compiler option is renamed to enableInlinedConditionalMerge. It is enabled by default and should not be used directly.
  • The attrs API is removed due to low usage and redundancy with the props API.

Fixes

  • Fix the TypeScript types for themes and types functions.
  • Fix the creation of duplicate classNames when defining nested pseudo-classes.
  • Fix that allows the ESLint plugin to support use of importSources object syntax in validImports.
  • Fix incorrect compiler error messages.
  • Fix a bug that incorrectly wrapped CSS variables in quotes when used in the content property.
  • Fix a bug in the firstThatWorks API when the last value was a variable.
  • Allow importSources to be configured in the PostCSS plugin for React Strict DOM compatibility.

Deprecations

  • Deprecate @stylexjs/shared package.

0.12.0 (Apr 10, 2025)

New features

  • Hash keys in compiled style objects to reduce generated code size.
  • New eslint rule to flag use of legacy Media Query and pseudo-class syntax.

Fixes

  • Fix pseudo-elements bug in dynamic styles.
  • Performance improvements to createTheme compilation by caching object evaluation.
  • Disallow spreading in create calls.

Deprecations

  • Deprecate @stylexjs/dev-runtime package.
  • Deprecate @stylexjs/esbuild-plugin package.
  • Deprecate @stylexjs/nextjs-plugin package.
  • Deprecate @stylexjs/open-props package.
  • Deprecate @stylexjs/webpack-plugin package.

0.11.1 (Mar 3, 2025)

Fixes

  • Fix create compilation regression for string and number keys.
  • Fix babel path resolution within monorepos.

0.11.0 (Feb 27, 2025)