From 9d309c23f150b94c38bc5e33162f367d289a8916 Mon Sep 17 00:00:00 2001 From: Ludovico Fischer Date: Tue, 4 Aug 2026 10:54:23 +0200 Subject: [PATCH] refactor: convert to ESM modules CJS offers no advantage as postcss-calc depends an ESM-only package, and all Node.js releases that can require() ESM can also run ESM directly. --- package.json | 1 + src/index.js | 17 ++++++------- src/lib/convertUnits.js | 4 +-- src/lib/node.js | 6 +---- src/lib/parser.js | 7 ++---- src/lib/serialize.js | 6 +---- src/lib/simplify.js | 12 +++------ src/lib/simplify/abs.js | 6 ++--- src/lib/simplify/atan2.js | 12 ++++----- src/lib/simplify/bucket.js | 15 ++++++----- src/lib/simplify/call.js | 32 +++++++++++------------- src/lib/simplify/cancel.js | 6 ++--- src/lib/simplify/clamp.js | 8 +++--- src/lib/simplify/exp.js | 6 ++--- src/lib/simplify/fold.js | 10 ++------ src/lib/simplify/hypot.js | 8 +++--- src/lib/simplify/inverse-trig.js | 6 ++--- src/lib/simplify/log.js | 6 ++--- src/lib/simplify/min-max.js | 8 +++--- src/lib/simplify/mod-rem.js | 8 +++--- src/lib/simplify/pow.js | 6 ++--- src/lib/simplify/product.js | 8 +++--- src/lib/simplify/round.js | 8 +++--- src/lib/simplify/sign.js | 6 ++--- src/lib/simplify/sqrt.js | 7 ++---- src/lib/simplify/sum.js | 10 +++----- src/lib/simplify/trig.js | 8 +++--- src/lib/tokenizer.js | 17 ++++--------- test/{convertUnit.js => convertUnit.cjs} | 0 test/{index.js => index.cjs} | 0 types/index.d.ts | 13 ++++++++-- types/lib/node.d.ts | 11 +------- types/lib/parser.d.ts | 5 +--- types/lib/serialize.d.ts | 5 +--- types/lib/simplify.d.ts | 5 +--- types/lib/simplify/abs.d.ts | 5 +--- types/lib/simplify/atan2.d.ts | 5 +--- types/lib/simplify/bucket.d.ts | 5 +--- types/lib/simplify/call.d.ts | 5 +--- types/lib/simplify/cancel.d.ts | 5 +--- types/lib/simplify/clamp.d.ts | 5 +--- types/lib/simplify/exp.d.ts | 5 +--- types/lib/simplify/fold.d.ts | 5 +--- types/lib/simplify/hypot.d.ts | 5 +--- types/lib/simplify/inverse-trig.d.ts | 5 +--- types/lib/simplify/log.d.ts | 5 +--- types/lib/simplify/min-max.d.ts | 5 +--- types/lib/simplify/mod-rem.d.ts | 5 +--- types/lib/simplify/pow.d.ts | 5 +--- types/lib/simplify/product.d.ts | 5 +--- types/lib/simplify/round.d.ts | 5 +--- types/lib/simplify/sign.d.ts | 5 +--- types/lib/simplify/sqrt.d.ts | 5 +--- types/lib/simplify/sum.d.ts | 5 +--- types/lib/simplify/trig.d.ts | 5 +--- types/lib/tokenizer.d.ts | 5 +--- 56 files changed, 128 insertions(+), 270 deletions(-) rename test/{convertUnit.js => convertUnit.cjs} (100%) rename test/{index.js => index.cjs} (100%) diff --git a/package.json b/package.json index 1a1b890..a8781cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "postcss-calc", "version": "11.0.0-rc.1", + "type": "module", "description": "PostCSS plugin to reduce calc()", "keywords": [ "css", diff --git a/src/index.js b/src/index.js index 5001c5e..2f45952 100644 --- a/src/index.js +++ b/src/index.js @@ -1,15 +1,11 @@ -'use strict'; - // PostCSS adapter. Walks declaration values (and optionally @rule params // and selectors), feeds calc() bodies through tokenize → parse → simplify // → serialize, and writes the result back. - -const valueParser = require('postcss-value-parser'); - -const { tokenize } = require('./lib/tokenizer.js'); -const { parse } = require('./lib/parser.js'); -const { simplify } = require('./lib/simplify.js'); -const { serialize } = require('./lib/serialize.js'); +import valueParser from 'postcss-value-parser'; +import { tokenize } from './lib/tokenizer.js'; +import { parse } from './lib/parser.js'; +import { simplify } from './lib/simplify.js'; +import { serialize } from './lib/serialize.js'; const MATCH_CALC = /^(?:-(?:moz|webkit)-)?calc$/i; @@ -165,6 +161,7 @@ function pluginCreator(opts) { pluginCreator.postcss = true; -module.exports = /** @type import('postcss').PluginCreator*/ ( +export default /** @type import('postcss').PluginCreator*/ ( pluginCreator ); +export { pluginCreator as 'module.exports' }; diff --git a/src/lib/convertUnits.js b/src/lib/convertUnits.js index 0d55b8f..2093d42 100644 --- a/src/lib/convertUnits.js +++ b/src/lib/convertUnits.js @@ -1,5 +1,3 @@ -'use strict'; - // Spec: https://www.w3.org/TR/css-values-4/#calc-type-checking /** @@ -141,4 +139,4 @@ function convert(value, from, to) { return (value * f) / t; } -module.exports = { baseOf, convert }; +export { baseOf, convert }; diff --git a/src/lib/node.js b/src/lib/node.js index 17e46b6..8685888 100644 --- a/src/lib/node.js +++ b/src/lib/node.js @@ -1,5 +1,3 @@ -'use strict'; - // Canonical AST. N-ary Sum and Product with signed numeric leaves. // Invariants enforced by the constructors below: // @@ -184,6 +182,4 @@ function negate(node) { return { type: 'Sum', terms: [{ sign: -1, node }] }; } -// Stryker disable next-line all: instrumenting this line breaks Node's -// cjs-module-lexer named-export detection for .mjs `import { x } from` consumers. -module.exports = { num, dim, ident, call, mkSum, mkProduct, negate }; +export { num, dim, ident, call, mkSum, mkProduct, negate }; diff --git a/src/lib/parser.js b/src/lib/parser.js index f0e8d56..66f309c 100644 --- a/src/lib/parser.js +++ b/src/lib/parser.js @@ -1,10 +1,7 @@ -'use strict'; - // Pratt parser. +/- emit Sum nodes; */÷ emit Product nodes. node.js // constructors flatten and normalize on construction, so the parser // never produces a Binary node. - -const { mkSum, mkProduct, negate } = require('./node.js'); +import { mkSum, mkProduct, negate } from './node.js'; /** * @typedef {import('./tokenizer.js').Token} Token @@ -318,4 +315,4 @@ function parse(tokens) { return ast; } -module.exports = { parse }; +export { parse }; diff --git a/src/lib/serialize.js b/src/lib/serialize.js index dc4335d..5046dbe 100644 --- a/src/lib/serialize.js +++ b/src/lib/serialize.js @@ -1,5 +1,3 @@ -'use strict'; - // Spec: https://www.w3.org/TR/css-values-4/#serialize-a-calculation-tree // Outer calc() is added only when the top-level result contains an // arithmetic operator. A Sum inside a Product is the only place parens @@ -241,6 +239,4 @@ function serializeProduct(product, prec) { return out; } -// Stryker disable next-line all: instrumenting this line breaks Node's -// cjs-module-lexer named-export detection for .mjs `import { x } from` consumers. -module.exports = { serialize }; +export { serialize }; diff --git a/src/lib/simplify.js b/src/lib/simplify.js index c4f89dc..2bda68b 100644 --- a/src/lib/simplify.js +++ b/src/lib/simplify.js @@ -1,12 +1,10 @@ -'use strict'; - // Spec: https://www.w3.org/TR/css-values-4/#calc-simplification // One top-down pass over a canonical AST. Per-concern fold modules in // ./simplify/; this file is the entry + dispatch only. -const { simplifySum } = require('./simplify/sum.js'); -const { simplifyProduct } = require('./simplify/product.js'); -const { simplifyCall } = require('./simplify/call.js'); +import { simplifySum } from './simplify/sum.js'; +import { simplifyProduct } from './simplify/product.js'; +import { simplifyCall } from './simplify/call.js'; /** * @typedef {import('./node.js').Node} Node @@ -35,6 +33,4 @@ function simplify(node) { } } -// Stryker disable next-line all: instrumenting this line breaks Node's -// cjs-module-lexer named-export detection for .mjs `import { x } from` consumers. -module.exports = { simplify }; +export { simplify }; diff --git a/src/lib/simplify/abs.js b/src/lib/simplify/abs.js index a0d5c6b..65138e2 100644 --- a/src/lib/simplify/abs.js +++ b/src/lib/simplify/abs.js @@ -1,6 +1,4 @@ -'use strict'; - -const { num, dim } = require('../node.js'); +import { num, dim } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ @@ -22,4 +20,4 @@ function simplifyAbs(args) { return { type: 'Call', name: 'abs', args: [a] }; } -module.exports = { simplifyAbs }; +export { simplifyAbs }; diff --git a/src/lib/simplify/atan2.js b/src/lib/simplify/atan2.js index 10cef4f..3b7fe2c 100644 --- a/src/lib/simplify/atan2.js +++ b/src/lib/simplify/atan2.js @@ -1,10 +1,8 @@ -'use strict'; +/* §10.4 — atan2. foldConstArgs already rejects percentages (property- + context-resolved) and enforces shared base + static convertibility. */ -// §10.4 — atan2. foldConstArgs already rejects percentages (property- -// context-resolved) and enforces shared base + static convertibility. - -const { num, dim } = require('../node.js'); -const { foldConstArgs } = require('./fold.js'); +import { num, dim } from '../node.js'; +import { foldConstArgs } from './fold.js'; /** @typedef {import('../node.js').Node} Node */ @@ -28,4 +26,4 @@ function simplifyAtan2(args) { return dim((radians * 180) / Math.PI, 'deg'); } -module.exports = { simplifyAtan2 }; +export { simplifyAtan2 }; diff --git a/src/lib/simplify/bucket.js b/src/lib/simplify/bucket.js index a066935..05315fa 100644 --- a/src/lib/simplify/bucket.js +++ b/src/lib/simplify/bucket.js @@ -1,11 +1,10 @@ -'use strict'; - -// §10.10 phase 2: merge convertible same-base unit buckets into the -// first-encountered unit (px absorbs cm/in/pt/pc, deg absorbs -// rad/grad/turn, …). Buckets with `base === null` (relative or unknown -// units) keep their own slot. +/* §10.10 phase 2: merge convertible same-base unit buckets into the + first-encountered unit (px absorbs cm/in/pt/pc, deg absorbs + rad/grad/turn, …). Buckets with `base === null` (relative or unknown + units) keep their own slot. + */ -const { convert } = require('../convertUnits.js'); +import { convert } from '../convertUnits.js'; /** * @typedef {object} UnitBucket @@ -52,4 +51,4 @@ function mergeConvertibleBuckets(buckets) { return out; } -module.exports = { mergeConvertibleBuckets }; +export { mergeConvertibleBuckets }; diff --git a/src/lib/simplify/call.js b/src/lib/simplify/call.js index 56ca639..d4d931c 100644 --- a/src/lib/simplify/call.js +++ b/src/lib/simplify/call.js @@ -1,22 +1,20 @@ -'use strict'; - // Pre-simplify args once, route by name. Leaf folds receive simplified // args so they don't need to recurse into `simplify` themselves. -const { simplifyMinMax } = require('./min-max.js'); -const { simplifyClamp } = require('./clamp.js'); -const { simplifyAbs } = require('./abs.js'); -const { simplifySign } = require('./sign.js'); -const { simplifyModRem } = require('./mod-rem.js'); -const { simplifyRound } = require('./round.js'); -const { simplifyTrig } = require('./trig.js'); -const { simplifyInverseTrig } = require('./inverse-trig.js'); -const { simplifyAtan2 } = require('./atan2.js'); -const { simplifyPow } = require('./pow.js'); -const { simplifySqrt } = require('./sqrt.js'); -const { simplifyExp } = require('./exp.js'); -const { simplifyLog } = require('./log.js'); -const { simplifyHypot } = require('./hypot.js'); +import { simplifyMinMax } from './min-max.js'; +import { simplifyClamp } from './clamp.js'; +import { simplifyAbs } from './abs.js'; +import { simplifySign } from './sign.js'; +import { simplifyModRem } from './mod-rem.js'; +import { simplifyRound } from './round.js'; +import { simplifyTrig } from './trig.js'; +import { simplifyInverseTrig } from './inverse-trig.js'; +import { simplifyAtan2 } from './atan2.js'; +import { simplifyPow } from './pow.js'; +import { simplifySqrt } from './sqrt.js'; +import { simplifyExp } from './exp.js'; +import { simplifyLog } from './log.js'; +import { simplifyHypot } from './hypot.js'; /** @typedef {import('../node.js').Node} Node */ /** @typedef {import('../simplify.js').SimplifyFn} SimplifyFn */ @@ -84,4 +82,4 @@ function simplifyCall(node, simplify) { return { type: 'Call', name: node.name, args }; } -module.exports = { simplifyCall }; +export { simplifyCall }; diff --git a/src/lib/simplify/cancel.js b/src/lib/simplify/cancel.js index 9bf4e7b..c6e8942 100644 --- a/src/lib/simplify/cancel.js +++ b/src/lib/simplify/cancel.js @@ -1,6 +1,4 @@ -'use strict'; - -const { baseOf, convert } = require('../convertUnits.js'); +import { baseOf, convert } from '../convertUnits.js'; /** * If `dims` contain exactly one numerator / one denominator pair with the @@ -36,4 +34,4 @@ function tryCancelPair(dims) { return { factor: converted / denominator.value, remaining: [] }; } -module.exports = { tryCancelPair }; +export { tryCancelPair }; diff --git a/src/lib/simplify/clamp.js b/src/lib/simplify/clamp.js index 66992b5..ee51514 100644 --- a/src/lib/simplify/clamp.js +++ b/src/lib/simplify/clamp.js @@ -1,7 +1,5 @@ -'use strict'; - -const { num, dim } = require('../node.js'); -const { foldConstArgs } = require('./fold.js'); +import { num, dim } from '../node.js'; +import { foldConstArgs } from './fold.js'; /** @typedef {import('../node.js').Node} Node */ @@ -23,4 +21,4 @@ function simplifyClamp(args) { return { type: 'Call', name: 'clamp', args }; } -module.exports = { simplifyClamp }; +export { simplifyClamp }; diff --git a/src/lib/simplify/exp.js b/src/lib/simplify/exp.js index 1261714..c7e6817 100644 --- a/src/lib/simplify/exp.js +++ b/src/lib/simplify/exp.js @@ -1,6 +1,4 @@ -'use strict'; - -const { num } = require('../node.js'); +import { num } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ @@ -15,4 +13,4 @@ function simplifyExp(args) { return num(Math.exp(args[0].value)); } -module.exports = { simplifyExp }; +export { simplifyExp }; diff --git a/src/lib/simplify/fold.js b/src/lib/simplify/fold.js index a911780..d9ee553 100644 --- a/src/lib/simplify/fold.js +++ b/src/lib/simplify/fold.js @@ -1,10 +1,4 @@ -'use strict'; - -// Fold args to a common numeric representation if they share a type. -// Percentages never fold — ordering depends on property-context -// resolution we don't have. Matches csstools. - -const { baseOf, convert } = require('../convertUnits.js'); +import { baseOf, convert } from '../convertUnits.js'; /** @typedef {import('../node.js').Node} Node */ /** @typedef {import('../convertUnits.js').BaseType} BaseType */ @@ -68,4 +62,4 @@ function foldDimArgs(args, unit, base) { return { values, unit }; } -module.exports = { foldConstArgs }; +export { foldConstArgs }; diff --git a/src/lib/simplify/hypot.js b/src/lib/simplify/hypot.js index 530b682..2e13c46 100644 --- a/src/lib/simplify/hypot.js +++ b/src/lib/simplify/hypot.js @@ -1,9 +1,7 @@ -'use strict'; - // §10.5 — hypot. Empty args return null from foldConstArgs naturally. -const { num, dim } = require('../node.js'); -const { foldConstArgs } = require('./fold.js'); +import { num, dim } from '../node.js'; +import { foldConstArgs } from './fold.js'; /** @typedef {import('../node.js').Node} Node */ @@ -21,4 +19,4 @@ function simplifyHypot(args) { return fold.unit === '' ? num(result) : dim(result, fold.unit); } -module.exports = { simplifyHypot }; +export { simplifyHypot }; diff --git a/src/lib/simplify/inverse-trig.js b/src/lib/simplify/inverse-trig.js index 2a5d86e..0b9677b 100644 --- a/src/lib/simplify/inverse-trig.js +++ b/src/lib/simplify/inverse-trig.js @@ -1,8 +1,6 @@ -'use strict'; - // §10.4 — asin/acos/atan. Bare in, in degrees out. -const { num, dim } = require('../node.js'); +import { num, dim } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ @@ -32,4 +30,4 @@ function simplifyInverseTrig(name, args) { return dim((radians * 180) / Math.PI, 'deg'); } -module.exports = { simplifyInverseTrig }; +export { simplifyInverseTrig }; diff --git a/src/lib/simplify/log.js b/src/lib/simplify/log.js index 7c39e7c..fad084b 100644 --- a/src/lib/simplify/log.js +++ b/src/lib/simplify/log.js @@ -1,6 +1,4 @@ -'use strict'; - -const { num } = require('../node.js'); +import { num } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ @@ -18,4 +16,4 @@ function simplifyLog(args) { return { type: 'Call', name: 'log', args }; } -module.exports = { simplifyLog }; +export { simplifyLog }; diff --git a/src/lib/simplify/min-max.js b/src/lib/simplify/min-max.js index ced1f25..080781e 100644 --- a/src/lib/simplify/min-max.js +++ b/src/lib/simplify/min-max.js @@ -1,7 +1,5 @@ -'use strict'; - -const { num, dim } = require('../node.js'); -const { foldConstArgs } = require('./fold.js'); +import { num, dim } from '../node.js'; +import { foldConstArgs } from './fold.js'; /** @typedef {import('../node.js').Node} Node */ @@ -20,4 +18,4 @@ function simplifyMinMax(name, args) { return { type: 'Call', name, args }; } -module.exports = { simplifyMinMax }; +export { simplifyMinMax }; diff --git a/src/lib/simplify/mod-rem.js b/src/lib/simplify/mod-rem.js index 3fb4eb0..0d82f18 100644 --- a/src/lib/simplify/mod-rem.js +++ b/src/lib/simplify/mod-rem.js @@ -1,7 +1,5 @@ -'use strict'; - -const { num, dim } = require('../node.js'); -const { foldConstArgs } = require('./fold.js'); +import { num, dim } from '../node.js'; +import { foldConstArgs } from './fold.js'; /** @typedef {import('../node.js').Node} Node */ @@ -56,4 +54,4 @@ function applyModRem(name, a, b) { return a - b * Math.floor(a / b); } -module.exports = { simplifyModRem }; +export { simplifyModRem }; diff --git a/src/lib/simplify/pow.js b/src/lib/simplify/pow.js index 6968588..12e85a4 100644 --- a/src/lib/simplify/pow.js +++ b/src/lib/simplify/pow.js @@ -1,8 +1,6 @@ -'use strict'; - // §10.5 — pow is -only. -const { num } = require('../node.js'); +import { num } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ @@ -17,4 +15,4 @@ function simplifyPow(args) { return num(Math.pow(args[0].value, args[1].value)); } -module.exports = { simplifyPow }; +export { simplifyPow }; diff --git a/src/lib/simplify/product.js b/src/lib/simplify/product.js index 185eb2a..2f05a77 100644 --- a/src/lib/simplify/product.js +++ b/src/lib/simplify/product.js @@ -1,7 +1,5 @@ -'use strict'; - -const { mkSum, mkProduct, num, dim } = require('../node.js'); -const { tryCancelPair } = require('./cancel.js'); +import { mkSum, mkProduct, num, dim } from '../node.js'; +import { tryCancelPair } from './cancel.js'; /** * @typedef {import('../node.js').Node} Node @@ -134,4 +132,4 @@ function simplifyProduct(product, simplify) { return mkProduct(factors); } -module.exports = { simplifyProduct }; +export { simplifyProduct }; diff --git a/src/lib/simplify/round.js b/src/lib/simplify/round.js index f86ebe4..e86d22b 100644 --- a/src/lib/simplify/round.js +++ b/src/lib/simplify/round.js @@ -1,7 +1,5 @@ -'use strict'; - -const { num, dim } = require('../node.js'); -const { foldConstArgs } = require('./fold.js'); +import { num, dim } from '../node.js'; +import { foldConstArgs } from './fold.js'; /** @typedef {import('../node.js').Node} Node */ @@ -124,4 +122,4 @@ function applyRound(strategy, a, b) { } } -module.exports = { simplifyRound }; +export { simplifyRound }; diff --git a/src/lib/simplify/sign.js b/src/lib/simplify/sign.js index 1956d32..cfaf7d4 100644 --- a/src/lib/simplify/sign.js +++ b/src/lib/simplify/sign.js @@ -1,6 +1,4 @@ -'use strict'; - -const { num } = require('../node.js'); +import { num } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ @@ -23,4 +21,4 @@ function simplifySign(args) { return { type: 'Call', name: 'sign', args: [a] }; } -module.exports = { simplifySign }; +export { simplifySign }; diff --git a/src/lib/simplify/sqrt.js b/src/lib/simplify/sqrt.js index 43e1957..a3febc2 100644 --- a/src/lib/simplify/sqrt.js +++ b/src/lib/simplify/sqrt.js @@ -1,9 +1,6 @@ -'use strict'; - -const { num } = require('../node.js'); +import { num } from '../node.js'; /** @typedef {import('../node.js').Node} Node */ - /** * @param {Node[]} args * @return {Node} @@ -15,4 +12,4 @@ function simplifySqrt(args) { return num(Math.sqrt(args[0].value)); } -module.exports = { simplifySqrt }; +export { simplifySqrt }; diff --git a/src/lib/simplify/sum.js b/src/lib/simplify/sum.js index ad65f40..c0b7bba 100644 --- a/src/lib/simplify/sum.js +++ b/src/lib/simplify/sum.js @@ -1,8 +1,6 @@ -'use strict'; - -const { mkSum, num, dim } = require('../node.js'); -const { baseOf } = require('../convertUnits.js'); -const { mergeConvertibleBuckets } = require('./bucket.js'); +import { mkSum, num, dim } from '../node.js'; +import { baseOf } from '../convertUnits.js'; +import { mergeConvertibleBuckets } from './bucket.js'; /** * @typedef {import('../node.js').Node} Node @@ -100,4 +98,4 @@ function simplifySum(sum, simplify) { return mkSum(terms); } -module.exports = { simplifySum }; +export { simplifySum }; diff --git a/src/lib/simplify/trig.js b/src/lib/simplify/trig.js index b305c3a..81e3649 100644 --- a/src/lib/simplify/trig.js +++ b/src/lib/simplify/trig.js @@ -1,9 +1,7 @@ -'use strict'; - // §10.4 — sin/cos/tan. is radians; dim is converted. -const { num } = require('../node.js'); -const { baseOf, convert } = require('../convertUnits.js'); +import { num } from '../node.js'; +import { baseOf, convert } from '../convertUnits.js'; /** @typedef {import('../node.js').Node} Node */ @@ -43,4 +41,4 @@ function simplifyTrig(name, args) { return num(TRIG_OPS[name](radians)); } -module.exports = { simplifyTrig }; +export { simplifyTrig }; diff --git a/src/lib/tokenizer.js b/src/lib/tokenizer.js index a9c01ef..83fe302 100644 --- a/src/lib/tokenizer.js +++ b/src/lib/tokenizer.js @@ -1,14 +1,9 @@ -'use strict'; - // Folds @csstools/css-tokenizer output into the calc() token subset. -// @csstools/css-tokenizer is ESM-only and this package is CJS. require(esm) -// must happen at first use, not at module evaluation — a consumer's ESM -// graph may also link the tokenizer (other csstools plugins do), and a -// load-time require would hit ERR_REQUIRE_CYCLE_MODULE there. -/** @type {typeof import('@csstools/css-tokenizer') | undefined} */ -let cssTokenizer; - +import { + tokenize as tokenizeCss, + TokenType as CssType, +} from '@csstools/css-tokenizer'; /** * @typedef {'number' | 'dimension' | 'ident' | 'punct' | 'eof'} TokenType * @typedef {object} Token @@ -28,8 +23,6 @@ const NUMERIC_RAW = /^[+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)?/; * @return {Token[]} */ function tokenize(input) { - cssTokenizer ??= require('@csstools/css-tokenizer'); - const { tokenize: tokenizeCss, TokenType: CssType } = cssTokenizer; /** @type {Token[]} */ const tokens = []; let ws = true; @@ -117,4 +110,4 @@ function tokenize(input) { return tokens; } -module.exports = { tokenize }; +export { tokenize }; diff --git a/test/convertUnit.js b/test/convertUnit.cjs similarity index 100% rename from test/convertUnit.js rename to test/convertUnit.cjs diff --git a/test/index.js b/test/index.cjs similarity index 100% rename from test/index.js rename to test/index.cjs diff --git a/types/index.d.ts b/types/index.d.ts index 7838aee..65310c8 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,5 +1,3 @@ -declare const _exports: import("postcss").PluginCreator; -export = _exports; export type PluginOptions = { precision?: number | false; preserve?: boolean; @@ -12,3 +10,14 @@ export type PluginOptions = { onParseError?: (error: Error, input: string) => void; }; export type ResolvedOptions = Required> & Pick; +/** + * @param {PluginOptions} [opts] + * @return {import('postcss').Plugin} + */ +declare function pluginCreator(opts?: PluginOptions): import('postcss').Plugin; +declare namespace pluginCreator { + var postcss: boolean; +} +declare const _default: import('postcss').PluginCreator; +export default _default; +export { pluginCreator as 'module.exports' }; diff --git a/types/lib/node.d.ts b/types/lib/node.d.ts index 3165fa8..8743e8b 100644 --- a/types/lib/node.d.ts +++ b/types/lib/node.d.ts @@ -1,13 +1,3 @@ -declare const _exports: { - num: typeof num; - dim: typeof dim; - ident: typeof ident; - call: typeof call; - mkSum: typeof mkSum; - mkProduct: typeof mkProduct; - negate: typeof negate; -}; -export = _exports; export type Num = { type: 'Num'; value: number; @@ -92,3 +82,4 @@ declare function mkProduct(rawFactors: ProductFactor[]): Node; * @return {Node} */ declare function negate(node: Node): Node; +export { num, dim, ident, call, mkSum, mkProduct, negate }; diff --git a/types/lib/parser.d.ts b/types/lib/parser.d.ts index 57fa565..6ba4889 100644 --- a/types/lib/parser.d.ts +++ b/types/lib/parser.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - parse: typeof parse; -}; -export = _exports; export type Token = import('./tokenizer.js').Token; export type TokenType = import('./tokenizer.js').TokenType; export type Node = import('./node.js').Node; @@ -40,3 +36,4 @@ declare class Parser { * @return {Node} */ declare function parse(tokens: Token[]): Node; +export { parse }; diff --git a/types/lib/serialize.d.ts b/types/lib/serialize.d.ts index 256968a..f3c408f 100644 --- a/types/lib/serialize.d.ts +++ b/types/lib/serialize.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - serialize: typeof serialize; -}; -export = _exports; export type Node = import('./node.js').Node; export type Sum = import('./node.js').Sum; export type Product = import('./node.js').Product; @@ -22,3 +18,4 @@ export type SerializeOptions = { * @return {string} */ declare function serialize(node: Node, opts?: SerializeOptions): string; +export { serialize }; diff --git a/types/lib/simplify.d.ts b/types/lib/simplify.d.ts index 661e870..9e8f9bb 100644 --- a/types/lib/simplify.d.ts +++ b/types/lib/simplify.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - simplify: typeof simplify; -}; -export = _exports; export type Node = import('./node.js').Node; export type SimplifyFn = (node: Node) => Node; /** @@ -16,3 +12,4 @@ export type SimplifyFn = (node: Node) => Node; * @return {Node} */ declare function simplify(node: Node): Node; +export { simplify }; diff --git a/types/lib/simplify/abs.d.ts b/types/lib/simplify/abs.d.ts index 6ce5bed..b68cadb 100644 --- a/types/lib/simplify/abs.d.ts +++ b/types/lib/simplify/abs.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - simplifyAbs: typeof simplifyAbs; -}; -export = _exports; export type Node = import('../node.js').Node; /** @typedef {import('../node.js').Node} Node */ /** @@ -9,3 +5,4 @@ export type Node = import('../node.js').Node; * @return {Node} */ declare function simplifyAbs(args: Node[]): Node; +export { simplifyAbs }; diff --git a/types/lib/simplify/atan2.d.ts b/types/lib/simplify/atan2.d.ts index 3841b67..e6da885 100644 --- a/types/lib/simplify/atan2.d.ts +++ b/types/lib/simplify/atan2.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - simplifyAtan2: typeof simplifyAtan2; -}; -export = _exports; export type Node = import('../node.js').Node; /** @typedef {import('../node.js').Node} Node */ /** @@ -9,3 +5,4 @@ export type Node = import('../node.js').Node; * @return {Node} */ declare function simplifyAtan2(args: Node[]): Node; +export { simplifyAtan2 }; diff --git a/types/lib/simplify/bucket.d.ts b/types/lib/simplify/bucket.d.ts index 9f72f37..1026514 100644 --- a/types/lib/simplify/bucket.d.ts +++ b/types/lib/simplify/bucket.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - mergeConvertibleBuckets: typeof mergeConvertibleBuckets; -}; -export = _exports; export type UnitBucket = { unit: string; total: number; @@ -26,3 +22,4 @@ export type UnitBucket = { * @return {UnitBucket[]} */ declare function mergeConvertibleBuckets(buckets: UnitBucket[]): UnitBucket[]; +export { mergeConvertibleBuckets }; diff --git a/types/lib/simplify/call.d.ts b/types/lib/simplify/call.d.ts index 8029aa5..3f1e66f 100644 --- a/types/lib/simplify/call.d.ts +++ b/types/lib/simplify/call.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - simplifyCall: typeof simplifyCall; -}; -export = _exports; export type Node = import('../node.js').Node; export type SimplifyFn = import('../simplify.js').SimplifyFn; /** @typedef {import('../node.js').Node} Node */ @@ -14,3 +10,4 @@ export type SimplifyFn = import('../simplify.js').SimplifyFn; declare function simplifyCall(node: Extract, simplify: SimplifyFn): Node; +export { simplifyCall }; diff --git a/types/lib/simplify/cancel.d.ts b/types/lib/simplify/cancel.d.ts index 2a3b3b6..81c47b9 100644 --- a/types/lib/simplify/cancel.d.ts +++ b/types/lib/simplify/cancel.d.ts @@ -1,7 +1,3 @@ -declare const _exports: { - tryCancelPair: typeof tryCancelPair; -}; -export = _exports; /** * If `dims` contain exactly one numerator / one denominator pair with the * same base type and convertible units, return the numeric factor produced @@ -21,3 +17,4 @@ declare function tryCancelPair