@arbor-css/css-eval 0.0.109 → 0.0.110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { CssSimplifier } from './simplification.js';
2
- export declare const loadSimplifier: () => Promise<CssSimplifier>;
1
+ import { CssSimplificationOptions, CssSimplifier } from './simplification.js';
2
+ export declare const loadSimplifier: (options?: CssSimplificationOptions) => Promise<CssSimplifier>;
3
3
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEtE,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,aAAa,CAG5D,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,EAEN,wBAAwB,EACxB,aAAa,EACb,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,cAAc,GAC1B,UAAU,wBAAwB,KAChC,OAAO,CAAC,aAAa,CAGvB,CAAC"}
package/dist/browser.js CHANGED
@@ -1,7 +1,7 @@
1
- import init, { transform as transformNative, } from 'https://esm.run/lightningcss-wasm';
2
- import { createSimplifier } from './simplification.js';
3
- export const loadSimplifier = async () => {
1
+ import init, { transform as transformNative, } from 'https://esm.sh/lightningcss-wasm@1.32.0';
2
+ import { createSimplifier, } from './simplification.js';
3
+ export const loadSimplifier = async (options) => {
4
4
  await init();
5
- return createSimplifier({ transform: transformNative });
5
+ return createSimplifier({ transform: transformNative, options });
6
6
  };
7
7
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EACZ,SAAS,IAAI,eAAe,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAiB,MAAM,qBAAqB,CAAC;AAEtE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAA4B,EAAE;IAChE,MAAM,IAAI,EAAE,CAAC;IACb,OAAO,gBAAgB,CAAC,EAAE,SAAS,EAAE,eAAsB,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EACZ,SAAS,IAAI,eAAe,GAC5B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACN,gBAAgB,GAGhB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,OAAkC,EACT,EAAE;IAC3B,MAAM,IAAI,EAAE,CAAC;IACb,OAAO,gBAAgB,CAAC,EAAE,SAAS,EAAE,eAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { Css } from './interpolation.js';
2
+ import { CssEnvValues } from './resolveEnv.js';
2
3
  import { CssSimplifier } from './simplification.js';
3
4
  export interface CssResolutionContext {
4
5
  propertyValues?: Record<string, string | Css>;
6
+ envValues?: CssEnvValues;
5
7
  skipBaking?: boolean;
6
8
  simplifier?: CssSimplifier;
7
9
  }
8
- export declare function resolveCss(input: Css, { propertyValues, skipBaking, simplifier }: CssResolutionContext): string;
10
+ export declare function resolveCss(input: Css, { propertyValues, envValues, skipBaking, simplifier, }: CssResolutionContext): string;
9
11
  //# sourceMappingURL=computation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"computation.d.ts","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,wBAAgB,UAAU,CACzB,KAAK,EAAE,GAAG,EACV,EAAE,cAAmB,EAAE,UAAkB,EAAE,UAAU,EAAE,EAAE,oBAAoB,UAa7E"}
1
+ {"version":3,"file":"computation.d.ts","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAc,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,wBAAgB,UAAU,CACzB,KAAK,EAAE,GAAG,EACV,EACC,cAAmB,EACnB,SAAc,EACd,UAAkB,EAClB,UAAU,GACV,EAAE,oBAAoB,UAevB"}
@@ -1,6 +1,9 @@
1
+ import { resolveEnv } from './resolveEnv.js';
1
2
  import { resolveProperties } from './resolveProperties.js';
2
- export function resolveCss(input, { propertyValues = {}, skipBaking = false, simplifier }) {
3
- let result = skipBaking ? input.text : resolveProperties(input, propertyValues).text;
3
+ export function resolveCss(input, { propertyValues = {}, envValues = {}, skipBaking = false, simplifier, }) {
4
+ let result = skipBaking ?
5
+ input.text
6
+ : resolveEnv(resolveProperties(input, propertyValues), envValues).text;
4
7
  if (simplifier) {
5
8
  result = simplifier({
6
9
  ...input,
@@ -1 +1 @@
1
- {"version":3,"file":"computation.js","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAS3D,MAAM,UAAU,UAAU,CACzB,KAAU,EACV,EAAE,cAAc,GAAG,EAAE,EAAE,UAAU,GAAG,KAAK,EAAE,UAAU,EAAwB;IAE7E,IAAI,MAAM,GACT,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC;IAEzE,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,GAAG,UAAU,CAAC;YACnB,GAAG,KAAK;YACR,IAAI,EAAE,MAAM;SACZ,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"computation.js","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAU3D,MAAM,UAAU,UAAU,CACzB,KAAU,EACV,EACC,cAAc,GAAG,EAAE,EACnB,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,KAAK,EAClB,UAAU,GACY;IAEvB,IAAI,MAAM,GACT,UAAU,CAAC,CAAC;QACX,KAAK,CAAC,IAAI;QACX,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;IAExE,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,GAAG,UAAU,CAAC;YACnB,GAAG,KAAK;YACR,IAAI,EAAE,MAAM;SACZ,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './computation.js';
2
2
  export * from './interpolation.js';
3
3
  export * from './print.js';
4
+ export * from './resolveEnv.js';
4
5
  export * from './resolveProperties.js';
5
6
  export * from './simplification.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './computation.js';
2
2
  export * from './interpolation.js';
3
3
  export * from './print.js';
4
+ export * from './resolveEnv.js';
4
5
  export * from './resolveProperties.js';
5
6
  export * from './simplification.js';
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,mDAAmD,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,mDAGrB,CAAC"}
package/dist/node.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import { transform as transformNative } from 'lightningcss';
2
2
  import { createSimplifier } from './simplification.js';
3
- export const simplifier = createSimplifier({ transform: transformNative });
3
+ export const simplifier = createSimplifier({
4
+ transform: transformNative,
5
+ options: { passes: 1 },
6
+ });
4
7
  //# sourceMappingURL=node.js.map
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;IAC1C,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;CACtB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Css } from './interpolation.js';
2
+ export interface CssEnvValues {
3
+ deviceWidthPx?: number;
4
+ deviceHeightPx?: number;
5
+ remPx?: number;
6
+ }
7
+ export declare function resolveEnv(css: Css, { deviceHeightPx, deviceWidthPx, remPx }: CssEnvValues): Css;
8
+ //# sourceMappingURL=resolveEnv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEnv.d.ts","sourceRoot":"","sources":["../src/resolveEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,MAAM,WAAW,YAAY;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CACzB,GAAG,EAAE,GAAG,EACR,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,YAAY,GACpD,GAAG,CA+BL"}
@@ -0,0 +1,24 @@
1
+ export function resolveEnv(css, { deviceHeightPx, deviceWidthPx, remPx }) {
2
+ let text = css.text;
3
+ if (deviceWidthPx) {
4
+ text = text.replace(/([\d.]+)[dls]?v[wi]/g, (_, num) => `${(parseFloat(num) / 100) * deviceWidthPx}px`);
5
+ }
6
+ if (deviceHeightPx) {
7
+ text = text.replace(/([\d.]+)[dls]?v[hb]/g, (_, num) => `${(parseFloat(num) / 100) * deviceHeightPx}px`);
8
+ }
9
+ if (deviceWidthPx && deviceHeightPx) {
10
+ text = text.replace(/([\d.]+)[dls]?vmin/g, (_, num) => {
11
+ const vmin = Math.min(deviceWidthPx, deviceHeightPx);
12
+ return `${(parseFloat(num) / 100) * vmin}px`;
13
+ });
14
+ text = text.replace(/([\d.]+)[dls]?vmax/g, (_, num) => {
15
+ const vmax = Math.max(deviceWidthPx, deviceHeightPx);
16
+ return `${(parseFloat(num) / 100) * vmax}px`;
17
+ });
18
+ }
19
+ if (remPx) {
20
+ text = text.replace(/([\d.]+)rem/g, (_, num) => `${parseFloat(num) * remPx}px`);
21
+ }
22
+ return { ...css, text };
23
+ }
24
+ //# sourceMappingURL=resolveEnv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEnv.js","sourceRoot":"","sources":["../src/resolveEnv.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,UAAU,CACzB,GAAQ,EACR,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAgB;IAEtD,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACpB,IAAI,aAAa,EAAE,CAAC;QACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CAClB,sBAAsB,EACtB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,aAAa,IAAI,CAC1D,CAAC;IACH,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACpB,IAAI,GAAG,IAAI,CAAC,OAAO,CAClB,sBAAsB,EACtB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,cAAc,IAAI,CAC3D,CAAC;IACH,CAAC;IACD,IAAI,aAAa,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;QAC9C,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACX,IAAI,GAAG,IAAI,CAAC,OAAO,CAClB,cAAc,EACd,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAC1C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -1,8 +1,18 @@
1
1
  import { Css } from './interpolation.js';
2
2
  /**
3
3
  * Applies simplifications not covered by LightningCSS.
4
+ * Uses linear-time paren scanning instead of regex to avoid backtracking.
4
5
  */
5
6
  export declare function simplifyPreprocessCss(css: string): string;
7
+ export interface CssSimplificationOptions {
8
+ /**
9
+ * More passes take longer but lead to further reduction
10
+ * of terms; this is really a quirk of the multiple
11
+ * tools/systems used to perform simplification.
12
+ * 2 is probably enough for anyone. Default is 1.
13
+ */
14
+ passes: number;
15
+ }
6
16
  export type CssSimplifier = (css: Css) => string;
7
17
  export type CssTransformFunction = ({ filename, code, }: {
8
18
  filename: string;
@@ -15,5 +25,6 @@ export declare function createSimplifier(config: {
15
25
  * A LightningCSS transform function
16
26
  */
17
27
  transform: CssTransformFunction;
28
+ options?: CssSimplificationOptions;
18
29
  }): (css: Css) => string;
19
30
  //# sourceMappingURL=simplification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"simplification.d.ts","sourceRoot":"","sources":["../src/simplification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAMzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,UAIhD;AAYD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;AACjD,MAAM,MAAM,oBAAoB,GAAG,CAAC,EACnC,QAAQ,EACR,IAAI,GACJ,EAAE;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CACjB,KAAK;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACxC;;OAEG;IACH,SAAS,EAAE,oBAAoB,CAAC;CAChC,IAGQ,KAAK,GAAG,YAoBhB"}
1
+ {"version":3,"file":"simplification.d.ts","sourceRoot":"","sources":["../src/simplification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4BzD;AA2BD,MAAM,WAAW,wBAAwB;IACxC;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;CACf;AACD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;AACjD,MAAM,MAAM,oBAAoB,GAAG,CAAC,EACnC,QAAQ,EACR,IAAI,GACJ,EAAE;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CACjB,KAAK;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACxC;;OAEG;IACH,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACnC,IAGQ,KAAK,GAAG,YAuBhB"}
@@ -1,10 +1,46 @@
1
1
  import { unwrapDummyAssignment, wrapWithDummyAssignment } from './util.js';
2
- const braceMatchingCalcContentExtractor = /calc\((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)/g;
3
2
  /**
4
3
  * Applies simplifications not covered by LightningCSS.
4
+ * Uses linear-time paren scanning instead of regex to avoid backtracking.
5
5
  */
6
6
  export function simplifyPreprocessCss(css) {
7
- return css.replace(braceMatchingCalcContentExtractor, (match) => simplifyLikeUnitDivision(match));
7
+ let result = '';
8
+ let searchIndex = 0;
9
+ const calcKeyword = 'calc(';
10
+ while (searchIndex < css.length) {
11
+ const calcIndex = css.indexOf(calcKeyword, searchIndex);
12
+ if (calcIndex === -1) {
13
+ result += css.slice(searchIndex);
14
+ break;
15
+ }
16
+ result += css.slice(searchIndex, calcIndex);
17
+ const openParenIndex = calcIndex + 4; // position of '(' in 'calc('
18
+ const closeParenIndex = findMatchingParen(css, openParenIndex);
19
+ if (closeParenIndex === -1) {
20
+ result += css.slice(calcIndex);
21
+ break;
22
+ }
23
+ const content = css.slice(openParenIndex + 1, closeParenIndex);
24
+ const simplified = simplifyLikeUnitDivision(content);
25
+ result += 'calc(' + simplified + ')';
26
+ searchIndex = closeParenIndex + 1;
27
+ }
28
+ return result;
29
+ }
30
+ function findMatchingParen(text, openParenIndex) {
31
+ let depth = 0;
32
+ for (let i = openParenIndex; i < text.length; i++) {
33
+ if (text[i] === '(') {
34
+ depth++;
35
+ }
36
+ else if (text[i] === ')') {
37
+ depth--;
38
+ if (depth === 0) {
39
+ return i;
40
+ }
41
+ }
42
+ }
43
+ return -1;
8
44
  }
9
45
  function simplifyLikeUnitDivision(content) {
10
46
  return content.replace(/([0-9]+)([a-z]+)\s*\/\s*([0-9]+)\2/g, (_match, num1, _unit1, num2) => {
@@ -17,18 +53,21 @@ export function createSimplifier(config) {
17
53
  const dec = new TextDecoder();
18
54
  return (css) => {
19
55
  let cssToTransform = css.text;
20
- cssToTransform = simplifyPreprocessCss(cssToTransform);
21
- if (css.type === 'value') {
22
- cssToTransform = wrapWithDummyAssignment(cssToTransform);
23
- }
24
- const result = config.transform({
25
- filename: 'input.css',
26
- code: enc.encode(cssToTransform),
27
- });
28
- if (css.type === 'value') {
29
- return unwrapDummyAssignment(dec.decode(result.code));
56
+ for (let i = 0; i < (config.options?.passes ?? 1); i++) {
57
+ cssToTransform = simplifyPreprocessCss(cssToTransform);
58
+ if (css.type === 'value') {
59
+ cssToTransform = wrapWithDummyAssignment(cssToTransform);
60
+ }
61
+ const result = config.transform({
62
+ filename: 'input.css',
63
+ code: enc.encode(cssToTransform),
64
+ });
65
+ if (css.type === 'value') {
66
+ return unwrapDummyAssignment(dec.decode(result.code));
67
+ }
68
+ cssToTransform = dec.decode(result.code);
30
69
  }
31
- return dec.decode(result.code);
70
+ return cssToTransform;
32
71
  };
33
72
  }
34
73
  //# sourceMappingURL=simplification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simplification.js","sourceRoot":"","sources":["../src/simplification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAE3E,MAAM,iCAAiC,GACtC,iDAAiD,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAChD,OAAO,GAAG,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/D,wBAAwB,CAAC,KAAK,CAAC,CAC/B,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAChD,OAAO,OAAO,CAAC,OAAO,CACrB,qCAAqC,EACrC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,eAAe,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC,CACD,CAAC;AACH,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAAC,MAKhC;IACA,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAQ,EAAE,EAAE;QACnB,IAAI,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC;QAE9B,cAAc,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAEvD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;YAC/B,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"simplification.js","sourceRoot":"","sources":["../src/simplification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAE3E;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAChD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,WAAW,GAAG,OAAO,CAAC;IAE5B,OAAO,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM;QACP,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,6BAA6B;QACnE,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAE/D,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM;QACP,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,OAAO,GAAG,UAAU,GAAG,GAAG,CAAC;QACrC,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,cAAsB;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,KAAK,EAAE,CAAC;QACT,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5B,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,CAAC;YACV,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAChD,OAAO,OAAO,CAAC,OAAO,CACrB,qCAAqC,EACrC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,eAAe,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC,CACD,CAAC;AACH,CAAC;AAoBD,MAAM,UAAU,gBAAgB,CAAC,MAMhC;IACA,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAQ,EAAE,EAAE;QACnB,IAAI,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,cAAc,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;YAEvD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC/B,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;aAChC,CAAC,CAAC;YAEH,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,OAAO,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC;YAED,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,cAAc,CAAC;IACvB,CAAC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbor-css/css-eval",
3
- "version": "0.0.109",
3
+ "version": "0.0.110",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "lightningcss": "^1.32.0",
42
- "@arbor-css/tokens": "0.0.109"
42
+ "@arbor-css/tokens": "0.0.110"
43
43
  },
44
44
  "scripts": {
45
45
  "build": "tsc",