Launch Week Day 1: Socket for Jira Is Now Available.Learn More
Socket
Book a DemoSign in
Socket

@wyw-in-js/processor-utils

Package Overview
Dependencies
Maintainers
2
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wyw-in-js/processor-utils - npm Package Compare versions

Comparing version
0.1.1
to
0.2.0
+3
-8
esm/utils/templateProcessor.js

@@ -27,3 +27,2 @@ /* eslint-disable no-continue */

let item;
let lastTemplateElementLocation;
// eslint-disable-next-line no-cond-assign

@@ -34,3 +33,2 @@ while (item = template.shift()) {

cssText += item.value.cooked;
lastTemplateElementLocation = item.loc;
continue;

@@ -44,3 +42,4 @@ }

const {
end
end,
start
} = ex.loc;

@@ -52,7 +51,3 @@ const beforeLength = cssText.length;

const loc = {
// +1 because an expression location always shows 1 column before
start: {
line: lastTemplateElementLocation.end.line,
column: lastTemplateElementLocation.end.column + 1
},
start,
end: next ? {

@@ -59,0 +54,0 @@ line: next.loc.start.line,

@@ -1,1 +0,1 @@

{"version":3,"file":"templateProcessor.js","names":["hasEvalMeta","ValueType","getVariableName","stripLines","throwIfInvalid","toCSS","isCSSable","units","unitRegex","RegExp","join","templateProcessor","tagProcessor","template","valueCache","variableNameConfig","sourceMapReplacements","isReferenced","cssText","item","lastTemplateElementLocation","shift","value","cooked","loc","ex","end","beforeLength","length","next","start","line","column","get","name","kind","FUNCTION","matches","match","unit","varId","addInterpolation","source","substring","e","Error","buildCodeFrameError","message","isValidValue","bind","undefined","__wyw_meta","className","push","original","rules","extractRules","location","includes"],"sources":["../../src/utils/templateProcessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\n/**\n * This file handles transforming template literals to class names or styled components and generates CSS content.\n * It uses CSS code from template literals and evaluated values of lazy dependencies stored in ValueCache.\n */\n\nimport type { TemplateElement, SourceLocation } from '@babel/types';\n\nimport type { ExpressionValue, Replacements } from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType } from '@wyw-in-js/shared';\n\nimport type { TaggedTemplateProcessor } from '../TaggedTemplateProcessor';\nimport type { ValueCache, Rules } from '../types';\n\nimport { getVariableName } from './getVariableName';\nimport stripLines from './stripLines';\nimport throwIfInvalid from './throwIfInvalid';\nimport toCSS, { isCSSable } from './toCSS';\nimport type { IOptions } from './types';\nimport { units } from './units';\n\n// Match any valid CSS units followed by a separator such as ;, newline etc.\nconst unitRegex = new RegExp(`^(?:${units.join('|')})\\\\b`);\n\nexport default function templateProcessor(\n tagProcessor: TaggedTemplateProcessor,\n [...template]: (TemplateElement | ExpressionValue)[],\n valueCache: ValueCache,\n variableNameConfig: IOptions['variableNameConfig'] | undefined\n): [rules: Rules, sourceMapReplacements: Replacements] | null {\n const sourceMapReplacements: Replacements = [];\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n const { isReferenced } = tagProcessor;\n\n // Serialize the tagged template literal to a string\n let cssText = '';\n\n let item: TemplateElement | ExpressionValue | undefined;\n let lastTemplateElementLocation: SourceLocation | null | undefined;\n // eslint-disable-next-line no-cond-assign\n while ((item = template.shift())) {\n if ('type' in item) {\n // It's a template element\n cssText += item.value.cooked;\n lastTemplateElementLocation = item.loc;\n continue;\n }\n\n // It's an expression\n const { ex } = item;\n\n const { end } = ex.loc!;\n const beforeLength = cssText.length;\n\n // The location will be end of the current string to start of next string\n const next = template[0] as TemplateElement; // template[0] is the next template element\n const loc = {\n // +1 because an expression location always shows 1 column before\n start: {\n line: lastTemplateElementLocation!.end.line,\n column: lastTemplateElementLocation!.end.column + 1,\n },\n end: next\n ? { line: next.loc!.start.line, column: next.loc!.start.column }\n : { line: end.line, column: end.column + 1 },\n };\n\n const value = 'value' in item ? item.value : valueCache.get(item.ex.name);\n\n // Is it props based interpolation?\n if (item.kind === ValueType.FUNCTION || typeof value === 'function') {\n // Check if previous expression was a CSS variable that we replaced\n // If it has a unit after it, we need to move the unit into the interpolation\n // e.g. `var(--size)px` should actually be `var(--size)`\n // So we check if the current text starts with a unit, and add the unit to the previous interpolation\n // Another approach would be `calc(var(--size) * 1px), but some browsers don't support all units\n // https://bugzilla.mozilla.org/show_bug.cgi?id=956573\n const matches = next.value.cooked?.match(unitRegex);\n\n try {\n if (matches) {\n template.shift();\n const [unit] = matches;\n\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source,\n unit\n );\n cssText += getVariableName(varId, variableNameConfig);\n\n cssText += next.value.cooked?.substring(unit?.length ?? 0) ?? '';\n } else {\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source\n );\n cssText += getVariableName(varId, variableNameConfig);\n }\n } catch (e) {\n if (e instanceof Error) {\n throw item.buildCodeFrameError(e.message);\n }\n\n throw e;\n }\n } else {\n throwIfInvalid(\n tagProcessor.isValidValue.bind(tagProcessor),\n value,\n item,\n item.source\n );\n\n if (value !== undefined && typeof value !== 'function') {\n // Skip the blank string instead of throw ing an error\n if (value === '') {\n continue;\n }\n\n if (hasEvalMeta(value)) {\n // If it's a React component wrapped in styled, get the class name\n // Useful for interpolating components\n cssText += `.${value.__wyw_meta.className}`;\n } else if (isCSSable(value)) {\n // If it's a plain object or an array, convert it to a CSS string\n cssText += stripLines(loc, toCSS(value));\n } else {\n // For anything else, assume it'll be stringified\n cssText += stripLines(loc, value);\n }\n\n sourceMapReplacements.push({\n original: loc,\n length: cssText.length - beforeLength,\n });\n }\n }\n }\n\n const rules = tagProcessor.extractRules(\n valueCache,\n cssText,\n tagProcessor.location\n );\n\n // tagProcessor.doRuntimeReplacement(classes);\n if (!isReferenced && !cssText.includes(':global')) {\n return null;\n }\n\n // eslint-disable-next-line no-param-reassign\n return [rules, sourceMapReplacements];\n}\n"],"mappings":"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"}
{"version":3,"file":"templateProcessor.js","names":["hasEvalMeta","ValueType","getVariableName","stripLines","throwIfInvalid","toCSS","isCSSable","units","unitRegex","RegExp","join","templateProcessor","tagProcessor","template","valueCache","variableNameConfig","sourceMapReplacements","isReferenced","cssText","item","shift","value","cooked","ex","end","start","loc","beforeLength","length","next","line","column","get","name","kind","FUNCTION","matches","match","unit","varId","addInterpolation","source","substring","e","Error","buildCodeFrameError","message","isValidValue","bind","undefined","__wyw_meta","className","push","original","rules","extractRules","location","includes"],"sources":["../../src/utils/templateProcessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\n/**\n * This file handles transforming template literals to class names or styled components and generates CSS content.\n * It uses CSS code from template literals and evaluated values of lazy dependencies stored in ValueCache.\n */\n\nimport type { TemplateElement } from '@babel/types';\n\nimport type { ExpressionValue, Replacements } from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType } from '@wyw-in-js/shared';\n\nimport type { TaggedTemplateProcessor } from '../TaggedTemplateProcessor';\nimport type { ValueCache, Rules } from '../types';\n\nimport { getVariableName } from './getVariableName';\nimport stripLines from './stripLines';\nimport throwIfInvalid from './throwIfInvalid';\nimport toCSS, { isCSSable } from './toCSS';\nimport type { IOptions } from './types';\nimport { units } from './units';\n\n// Match any valid CSS units followed by a separator such as ;, newline etc.\nconst unitRegex = new RegExp(`^(?:${units.join('|')})\\\\b`);\n\nexport default function templateProcessor(\n tagProcessor: TaggedTemplateProcessor,\n [...template]: (TemplateElement | ExpressionValue)[],\n valueCache: ValueCache,\n variableNameConfig: IOptions['variableNameConfig'] | undefined\n): [rules: Rules, sourceMapReplacements: Replacements] | null {\n const sourceMapReplacements: Replacements = [];\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n const { isReferenced } = tagProcessor;\n\n // Serialize the tagged template literal to a string\n let cssText = '';\n\n let item: TemplateElement | ExpressionValue | undefined;\n // eslint-disable-next-line no-cond-assign\n while ((item = template.shift())) {\n if ('type' in item) {\n // It's a template element\n cssText += item.value.cooked;\n continue;\n }\n\n // It's an expression\n const { ex } = item;\n\n const { end, start } = ex.loc!;\n const beforeLength = cssText.length;\n\n // The location will be end of the current string to start of next string\n const next = template[0] as TemplateElement; // template[0] is the next template element\n const loc = {\n start,\n end: next\n ? { line: next.loc!.start.line, column: next.loc!.start.column }\n : { line: end.line, column: end.column + 1 },\n };\n\n const value = 'value' in item ? item.value : valueCache.get(item.ex.name);\n\n // Is it props based interpolation?\n if (item.kind === ValueType.FUNCTION || typeof value === 'function') {\n // Check if previous expression was a CSS variable that we replaced\n // If it has a unit after it, we need to move the unit into the interpolation\n // e.g. `var(--size)px` should actually be `var(--size)`\n // So we check if the current text starts with a unit, and add the unit to the previous interpolation\n // Another approach would be `calc(var(--size) * 1px), but some browsers don't support all units\n // https://bugzilla.mozilla.org/show_bug.cgi?id=956573\n const matches = next.value.cooked?.match(unitRegex);\n\n try {\n if (matches) {\n template.shift();\n const [unit] = matches;\n\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source,\n unit\n );\n cssText += getVariableName(varId, variableNameConfig);\n\n cssText += next.value.cooked?.substring(unit?.length ?? 0) ?? '';\n } else {\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source\n );\n cssText += getVariableName(varId, variableNameConfig);\n }\n } catch (e) {\n if (e instanceof Error) {\n throw item.buildCodeFrameError(e.message);\n }\n\n throw e;\n }\n } else {\n throwIfInvalid(\n tagProcessor.isValidValue.bind(tagProcessor),\n value,\n item,\n item.source\n );\n\n if (value !== undefined && typeof value !== 'function') {\n // Skip the blank string instead of throw ing an error\n if (value === '') {\n continue;\n }\n\n if (hasEvalMeta(value)) {\n // If it's a React component wrapped in styled, get the class name\n // Useful for interpolating components\n cssText += `.${value.__wyw_meta.className}`;\n } else if (isCSSable(value)) {\n // If it's a plain object or an array, convert it to a CSS string\n cssText += stripLines(loc, toCSS(value));\n } else {\n // For anything else, assume it'll be stringified\n cssText += stripLines(loc, value);\n }\n\n sourceMapReplacements.push({\n original: loc,\n length: cssText.length - beforeLength,\n });\n }\n }\n }\n\n const rules = tagProcessor.extractRules(\n valueCache,\n cssText,\n tagProcessor.location\n );\n\n // tagProcessor.doRuntimeReplacement(classes);\n if (!isReferenced && !cssText.includes(':global')) {\n return null;\n }\n\n // eslint-disable-next-line no-param-reassign\n return [rules, sourceMapReplacements];\n}\n"],"mappings":"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"}

@@ -6,4 +6,7 @@ // ParamMapping maps each ParamName to its corresponding Param type.

// If T is none of the above, return never.
// MapParams iteratively maps the input ParamConstraints to their corresponding Param types.
// If TNames is an empty tuple, return the result tuple.
export function isValidParams(params, constraints) {

@@ -10,0 +13,0 @@ const length = Math.max(params.length, constraints.length);

@@ -1,1 +0,1 @@

{"version":3,"file":"validateParams.js","names":["isValidParams","params","constraints","length","Math","max","i","undefined","constraint","Array","isArray","every","c","validateParams","messageOrError","Error"],"sources":["../../src/utils/validateParams.ts"],"sourcesContent":["import type { Param, Params } from '../types';\n\ntype ParamName = Param[0];\ntype ParamConstraint = ParamName | [...ParamName[]] | '*';\n\nexport type ParamConstraints =\n | [...ParamConstraint[]]\n | [...ParamConstraint[], '...'];\n\n// ParamMapping maps each ParamName to its corresponding Param type.\ntype ParamMapping = {\n [K in ParamName]: Extract<Param, readonly [K, ...unknown[]]>; // For each ParamName K, extract the corresponding Param type.\n};\n\n// GetParamByName returns the Param type based on the input type T.\ntype GetParamByName<T> = T extends '*'\n ? Param // If T is '*', return Param type.\n : T extends keyof ParamMapping // If T is a key in ParamMapping (i.e., a ParamName).\n ? ParamMapping[T] // Return the corresponding Param type from ParamMapping.\n : T extends Array<infer TNames> // If T is an array of names.\n ? TNames extends ParamName // If TNames is a ParamName.\n ? Extract<Param, readonly [TNames, ...unknown[]]> // Return the corresponding Param type.\n : never // If TNames is not a ParamName, return never.\n : never; // If T is none of the above, return never.\n\n// MapParams iteratively maps the input ParamConstraints to their corresponding Param types.\nexport type MapParams<\n TNames extends ParamConstraints,\n TRes extends Param[] = [],\n> = TNames extends [infer THead, ...infer TTail] // If TNames is a non-empty tuple.\n ? THead extends '...' // If the first element in the tuple is '...'.\n ? [...TRes, ...Params] // Append all Params to the result tuple.\n : MapParams<\n Extract<TTail, ParamConstraints>, // Extract the remaining ParamConstraints.\n [...TRes, GetParamByName<Extract<THead, ParamName | '*' | ParamName[]>>] // Append the mapped Param to the result tuple and recurse.\n >\n : TRes; // If TNames is an empty tuple, return the result tuple.\n\nexport function isValidParams<T extends ParamConstraints>(\n params: Params,\n constraints: T\n): params is MapParams<T> {\n const length = Math.max(params.length, constraints.length);\n for (let i = 0; i < length; i++) {\n if (params[i] === undefined || constraints[i] === undefined) {\n return false;\n }\n\n const constraint = constraints[i];\n if (constraint === '...') {\n return true;\n }\n\n if (constraint === '*') {\n if (params[i] === undefined) {\n return false;\n }\n } else if (Array.isArray(constraint)) {\n if (constraint.every((c) => c !== params[i]?.[0])) {\n return false;\n }\n } else if (constraint !== params[i]?.[0]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function validateParams<T extends ParamConstraints>(\n params: Params,\n constraints: T,\n messageOrError: unknown\n): asserts params is MapParams<T> {\n if (!isValidParams(params, constraints)) {\n if (typeof messageOrError === 'string') {\n throw new Error(messageOrError);\n }\n\n throw messageOrError;\n }\n}\n"],"mappings":"AASA;;AAKA;;AASW;AAEX;AAWU;AAEV,OAAO,SAASA,aAAaA,CAC3BC,MAAc,EACdC,WAAc,EACU;EACxB,MAAMC,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACJ,MAAM,CAACE,MAAM,EAAED,WAAW,CAACC,MAAM,CAAC;EAC1D,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,EAAEG,CAAC,EAAE,EAAE;IAC/B,IAAIL,MAAM,CAACK,CAAC,CAAC,KAAKC,SAAS,IAAIL,WAAW,CAACI,CAAC,CAAC,KAAKC,SAAS,EAAE;MAC3D,OAAO,KAAK;IACd;IAEA,MAAMC,UAAU,GAAGN,WAAW,CAACI,CAAC,CAAC;IACjC,IAAIE,UAAU,KAAK,KAAK,EAAE;MACxB,OAAO,IAAI;IACb;IAEA,IAAIA,UAAU,KAAK,GAAG,EAAE;MACtB,IAAIP,MAAM,CAACK,CAAC,CAAC,KAAKC,SAAS,EAAE;QAC3B,OAAO,KAAK;MACd;IACF,CAAC,MAAM,IAAIE,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,EAAE;MACpC,IAAIA,UAAU,CAACG,KAAK,CAAEC,CAAC,IAAKA,CAAC,KAAKX,MAAM,CAACK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACjD,OAAO,KAAK;MACd;IACF,CAAC,MAAM,IAAIE,UAAU,KAAKP,MAAM,CAACK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;MACxC,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASO,cAAcA,CAC5BZ,MAAc,EACdC,WAAc,EACdY,cAAuB,EACS;EAChC,IAAI,CAACd,aAAa,CAACC,MAAM,EAAEC,WAAW,CAAC,EAAE;IACvC,IAAI,OAAOY,cAAc,KAAK,QAAQ,EAAE;MACtC,MAAM,IAAIC,KAAK,CAACD,cAAc,CAAC;IACjC;IAEA,MAAMA,cAAc;EACtB;AACF"}
{"version":3,"file":"validateParams.js","names":["isValidParams","params","constraints","length","Math","max","i","undefined","constraint","Array","isArray","every","c","validateParams","messageOrError","Error"],"sources":["../../src/utils/validateParams.ts"],"sourcesContent":["import type { Param, Params } from '../types';\n\ntype ParamName = Param[0];\ntype ParamConstraint = ParamName | [...ParamName[]] | '*';\n\nexport type ParamConstraints =\n | [...ParamConstraint[]]\n | [...ParamConstraint[], '...'];\n\n// ParamMapping maps each ParamName to its corresponding Param type.\ntype ParamMapping = {\n [K in ParamName]: Extract<Param, readonly [K, ...unknown[]]>; // For each ParamName K, extract the corresponding Param type.\n};\n\n// GetParamByName returns the Param type based on the input type T.\ntype GetParamByName<T> = T extends '*'\n ? Param // If T is '*', return Param type.\n : T extends keyof ParamMapping // If T is a key in ParamMapping (i.e., a ParamName).\n ? ParamMapping[T] // Return the corresponding Param type from ParamMapping.\n : T extends Array<infer TNames> // If T is an array of names.\n ? TNames extends ParamName // If TNames is a ParamName.\n ? Extract<Param, readonly [TNames, ...unknown[]]> // Return the corresponding Param type.\n : never // If TNames is not a ParamName, return never.\n : never; // If T is none of the above, return never.\n\n// MapParams iteratively maps the input ParamConstraints to their corresponding Param types.\nexport type MapParams<\n TNames extends ParamConstraints,\n TRes extends Param[] = [],\n> = TNames extends [infer THead, ...infer TTail] // If TNames is a non-empty tuple.\n ? THead extends '...' // If the first element in the tuple is '...'.\n ? [...TRes, ...Params] // Append all Params to the result tuple.\n : MapParams<\n Extract<TTail, ParamConstraints>, // Extract the remaining ParamConstraints.\n [...TRes, GetParamByName<Extract<THead, ParamName | '*' | ParamName[]>>] // Append the mapped Param to the result tuple and recurse.\n >\n : TRes; // If TNames is an empty tuple, return the result tuple.\n\nexport function isValidParams<T extends ParamConstraints>(\n params: Params,\n constraints: T\n): params is MapParams<T> {\n const length = Math.max(params.length, constraints.length);\n for (let i = 0; i < length; i++) {\n if (params[i] === undefined || constraints[i] === undefined) {\n return false;\n }\n\n const constraint = constraints[i];\n if (constraint === '...') {\n return true;\n }\n\n if (constraint === '*') {\n if (params[i] === undefined) {\n return false;\n }\n } else if (Array.isArray(constraint)) {\n if (constraint.every((c) => c !== params[i]?.[0])) {\n return false;\n }\n } else if (constraint !== params[i]?.[0]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function validateParams<T extends ParamConstraints>(\n params: Params,\n constraints: T,\n messageOrError: unknown\n): asserts params is MapParams<T> {\n if (!isValidParams(params, constraints)) {\n if (typeof messageOrError === 'string') {\n throw new Error(messageOrError);\n }\n\n throw messageOrError;\n }\n}\n"],"mappings":"AASA;;AAKA;;AASW;;AAEX;;AAWU;;AAEV,OAAO,SAASA,aAAaA,CAC3BC,MAAc,EACdC,WAAc,EACU;EACxB,MAAMC,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACJ,MAAM,CAACE,MAAM,EAAED,WAAW,CAACC,MAAM,CAAC;EAC1D,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,EAAEG,CAAC,EAAE,EAAE;IAC/B,IAAIL,MAAM,CAACK,CAAC,CAAC,KAAKC,SAAS,IAAIL,WAAW,CAACI,CAAC,CAAC,KAAKC,SAAS,EAAE;MAC3D,OAAO,KAAK;IACd;IAEA,MAAMC,UAAU,GAAGN,WAAW,CAACI,CAAC,CAAC;IACjC,IAAIE,UAAU,KAAK,KAAK,EAAE;MACxB,OAAO,IAAI;IACb;IAEA,IAAIA,UAAU,KAAK,GAAG,EAAE;MACtB,IAAIP,MAAM,CAACK,CAAC,CAAC,KAAKC,SAAS,EAAE;QAC3B,OAAO,KAAK;MACd;IACF,CAAC,MAAM,IAAIE,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,EAAE;MACpC,IAAIA,UAAU,CAACG,KAAK,CAAEC,CAAC,IAAKA,CAAC,KAAKX,MAAM,CAACK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACjD,OAAO,KAAK;MACd;IACF,CAAC,MAAM,IAAIE,UAAU,KAAKP,MAAM,CAACK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;MACxC,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASO,cAAcA,CAC5BZ,MAAc,EACdC,WAAc,EACdY,cAAuB,EACS;EAChC,IAAI,CAACd,aAAa,CAACC,MAAM,EAAEC,WAAW,CAAC,EAAE;IACvC,IAAI,OAAOY,cAAc,KAAK,QAAQ,EAAE;MACtC,MAAM,IAAIC,KAAK,CAACD,cAAc,CAAC;IACjC;IAEA,MAAMA,cAAc;EACtB;AACF"}

@@ -13,4 +13,4 @@ "use strict";

var _units = require("./units");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -36,3 +36,2 @@ /* eslint-disable no-continue */

let item;
let lastTemplateElementLocation;
// eslint-disable-next-line no-cond-assign

@@ -43,3 +42,2 @@ while (item = template.shift()) {

cssText += item.value.cooked;
lastTemplateElementLocation = item.loc;
continue;

@@ -53,3 +51,4 @@ }

const {
end
end,
start
} = ex.loc;

@@ -61,7 +60,3 @@ const beforeLength = cssText.length;

const loc = {
// +1 because an expression location always shows 1 column before
start: {
line: lastTemplateElementLocation.end.line,
column: lastTemplateElementLocation.end.column + 1
},
start,
end: next ? {

@@ -68,0 +63,0 @@ line: next.loc.start.line,

@@ -1,1 +0,1 @@

{"version":3,"file":"templateProcessor.js","names":["_shared","require","_getVariableName","_stripLines","_interopRequireDefault","_throwIfInvalid","_toCSS","_interopRequireWildcard","_units","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","unitRegex","RegExp","units","join","templateProcessor","tagProcessor","template","valueCache","variableNameConfig","sourceMapReplacements","isReferenced","cssText","item","lastTemplateElementLocation","shift","value","cooked","loc","ex","end","beforeLength","length","next","start","line","column","name","kind","ValueType","FUNCTION","_next$value$cooked","matches","match","_next$value$cooked$su","_next$value$cooked2","_unit$length","unit","varId","addInterpolation","source","getVariableName","substring","e","Error","buildCodeFrameError","message","throwIfInvalid","isValidValue","bind","undefined","hasEvalMeta","__wyw_meta","className","isCSSable","stripLines","toCSS","push","original","rules","extractRules","location","includes"],"sources":["../../src/utils/templateProcessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\n/**\n * This file handles transforming template literals to class names or styled components and generates CSS content.\n * It uses CSS code from template literals and evaluated values of lazy dependencies stored in ValueCache.\n */\n\nimport type { TemplateElement, SourceLocation } from '@babel/types';\n\nimport type { ExpressionValue, Replacements } from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType } from '@wyw-in-js/shared';\n\nimport type { TaggedTemplateProcessor } from '../TaggedTemplateProcessor';\nimport type { ValueCache, Rules } from '../types';\n\nimport { getVariableName } from './getVariableName';\nimport stripLines from './stripLines';\nimport throwIfInvalid from './throwIfInvalid';\nimport toCSS, { isCSSable } from './toCSS';\nimport type { IOptions } from './types';\nimport { units } from './units';\n\n// Match any valid CSS units followed by a separator such as ;, newline etc.\nconst unitRegex = new RegExp(`^(?:${units.join('|')})\\\\b`);\n\nexport default function templateProcessor(\n tagProcessor: TaggedTemplateProcessor,\n [...template]: (TemplateElement | ExpressionValue)[],\n valueCache: ValueCache,\n variableNameConfig: IOptions['variableNameConfig'] | undefined\n): [rules: Rules, sourceMapReplacements: Replacements] | null {\n const sourceMapReplacements: Replacements = [];\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n const { isReferenced } = tagProcessor;\n\n // Serialize the tagged template literal to a string\n let cssText = '';\n\n let item: TemplateElement | ExpressionValue | undefined;\n let lastTemplateElementLocation: SourceLocation | null | undefined;\n // eslint-disable-next-line no-cond-assign\n while ((item = template.shift())) {\n if ('type' in item) {\n // It's a template element\n cssText += item.value.cooked;\n lastTemplateElementLocation = item.loc;\n continue;\n }\n\n // It's an expression\n const { ex } = item;\n\n const { end } = ex.loc!;\n const beforeLength = cssText.length;\n\n // The location will be end of the current string to start of next string\n const next = template[0] as TemplateElement; // template[0] is the next template element\n const loc = {\n // +1 because an expression location always shows 1 column before\n start: {\n line: lastTemplateElementLocation!.end.line,\n column: lastTemplateElementLocation!.end.column + 1,\n },\n end: next\n ? { line: next.loc!.start.line, column: next.loc!.start.column }\n : { line: end.line, column: end.column + 1 },\n };\n\n const value = 'value' in item ? item.value : valueCache.get(item.ex.name);\n\n // Is it props based interpolation?\n if (item.kind === ValueType.FUNCTION || typeof value === 'function') {\n // Check if previous expression was a CSS variable that we replaced\n // If it has a unit after it, we need to move the unit into the interpolation\n // e.g. `var(--size)px` should actually be `var(--size)`\n // So we check if the current text starts with a unit, and add the unit to the previous interpolation\n // Another approach would be `calc(var(--size) * 1px), but some browsers don't support all units\n // https://bugzilla.mozilla.org/show_bug.cgi?id=956573\n const matches = next.value.cooked?.match(unitRegex);\n\n try {\n if (matches) {\n template.shift();\n const [unit] = matches;\n\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source,\n unit\n );\n cssText += getVariableName(varId, variableNameConfig);\n\n cssText += next.value.cooked?.substring(unit?.length ?? 0) ?? '';\n } else {\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source\n );\n cssText += getVariableName(varId, variableNameConfig);\n }\n } catch (e) {\n if (e instanceof Error) {\n throw item.buildCodeFrameError(e.message);\n }\n\n throw e;\n }\n } else {\n throwIfInvalid(\n tagProcessor.isValidValue.bind(tagProcessor),\n value,\n item,\n item.source\n );\n\n if (value !== undefined && typeof value !== 'function') {\n // Skip the blank string instead of throw ing an error\n if (value === '') {\n continue;\n }\n\n if (hasEvalMeta(value)) {\n // If it's a React component wrapped in styled, get the class name\n // Useful for interpolating components\n cssText += `.${value.__wyw_meta.className}`;\n } else if (isCSSable(value)) {\n // If it's a plain object or an array, convert it to a CSS string\n cssText += stripLines(loc, toCSS(value));\n } else {\n // For anything else, assume it'll be stringified\n cssText += stripLines(loc, value);\n }\n\n sourceMapReplacements.push({\n original: loc,\n length: cssText.length - beforeLength,\n });\n }\n }\n }\n\n const rules = tagProcessor.extractRules(\n valueCache,\n cssText,\n tagProcessor.location\n );\n\n // tagProcessor.doRuntimeReplacement(classes);\n if (!isReferenced && !cssText.includes(':global')) {\n return null;\n }\n\n // eslint-disable-next-line no-param-reassign\n return [rules, sourceMapReplacements];\n}\n"],"mappings":"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"}
{"version":3,"file":"templateProcessor.js","names":["_shared","require","_getVariableName","_stripLines","_interopRequireDefault","_throwIfInvalid","_toCSS","_interopRequireWildcard","_units","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","unitRegex","RegExp","units","join","templateProcessor","tagProcessor","template","valueCache","variableNameConfig","sourceMapReplacements","isReferenced","cssText","item","shift","value","cooked","ex","end","start","loc","beforeLength","length","next","line","column","name","kind","ValueType","FUNCTION","_next$value$cooked","matches","match","_next$value$cooked$su","_next$value$cooked2","_unit$length","unit","varId","addInterpolation","source","getVariableName","substring","Error","buildCodeFrameError","message","throwIfInvalid","isValidValue","bind","undefined","hasEvalMeta","__wyw_meta","className","isCSSable","stripLines","toCSS","push","original","rules","extractRules","location","includes"],"sources":["../../src/utils/templateProcessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\n/**\n * This file handles transforming template literals to class names or styled components and generates CSS content.\n * It uses CSS code from template literals and evaluated values of lazy dependencies stored in ValueCache.\n */\n\nimport type { TemplateElement } from '@babel/types';\n\nimport type { ExpressionValue, Replacements } from '@wyw-in-js/shared';\nimport { hasEvalMeta, ValueType } from '@wyw-in-js/shared';\n\nimport type { TaggedTemplateProcessor } from '../TaggedTemplateProcessor';\nimport type { ValueCache, Rules } from '../types';\n\nimport { getVariableName } from './getVariableName';\nimport stripLines from './stripLines';\nimport throwIfInvalid from './throwIfInvalid';\nimport toCSS, { isCSSable } from './toCSS';\nimport type { IOptions } from './types';\nimport { units } from './units';\n\n// Match any valid CSS units followed by a separator such as ;, newline etc.\nconst unitRegex = new RegExp(`^(?:${units.join('|')})\\\\b`);\n\nexport default function templateProcessor(\n tagProcessor: TaggedTemplateProcessor,\n [...template]: (TemplateElement | ExpressionValue)[],\n valueCache: ValueCache,\n variableNameConfig: IOptions['variableNameConfig'] | undefined\n): [rules: Rules, sourceMapReplacements: Replacements] | null {\n const sourceMapReplacements: Replacements = [];\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n const { isReferenced } = tagProcessor;\n\n // Serialize the tagged template literal to a string\n let cssText = '';\n\n let item: TemplateElement | ExpressionValue | undefined;\n // eslint-disable-next-line no-cond-assign\n while ((item = template.shift())) {\n if ('type' in item) {\n // It's a template element\n cssText += item.value.cooked;\n continue;\n }\n\n // It's an expression\n const { ex } = item;\n\n const { end, start } = ex.loc!;\n const beforeLength = cssText.length;\n\n // The location will be end of the current string to start of next string\n const next = template[0] as TemplateElement; // template[0] is the next template element\n const loc = {\n start,\n end: next\n ? { line: next.loc!.start.line, column: next.loc!.start.column }\n : { line: end.line, column: end.column + 1 },\n };\n\n const value = 'value' in item ? item.value : valueCache.get(item.ex.name);\n\n // Is it props based interpolation?\n if (item.kind === ValueType.FUNCTION || typeof value === 'function') {\n // Check if previous expression was a CSS variable that we replaced\n // If it has a unit after it, we need to move the unit into the interpolation\n // e.g. `var(--size)px` should actually be `var(--size)`\n // So we check if the current text starts with a unit, and add the unit to the previous interpolation\n // Another approach would be `calc(var(--size) * 1px), but some browsers don't support all units\n // https://bugzilla.mozilla.org/show_bug.cgi?id=956573\n const matches = next.value.cooked?.match(unitRegex);\n\n try {\n if (matches) {\n template.shift();\n const [unit] = matches;\n\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source,\n unit\n );\n cssText += getVariableName(varId, variableNameConfig);\n\n cssText += next.value.cooked?.substring(unit?.length ?? 0) ?? '';\n } else {\n const varId = tagProcessor.addInterpolation(\n item.ex,\n cssText,\n item.source\n );\n cssText += getVariableName(varId, variableNameConfig);\n }\n } catch (e) {\n if (e instanceof Error) {\n throw item.buildCodeFrameError(e.message);\n }\n\n throw e;\n }\n } else {\n throwIfInvalid(\n tagProcessor.isValidValue.bind(tagProcessor),\n value,\n item,\n item.source\n );\n\n if (value !== undefined && typeof value !== 'function') {\n // Skip the blank string instead of throw ing an error\n if (value === '') {\n continue;\n }\n\n if (hasEvalMeta(value)) {\n // If it's a React component wrapped in styled, get the class name\n // Useful for interpolating components\n cssText += `.${value.__wyw_meta.className}`;\n } else if (isCSSable(value)) {\n // If it's a plain object or an array, convert it to a CSS string\n cssText += stripLines(loc, toCSS(value));\n } else {\n // For anything else, assume it'll be stringified\n cssText += stripLines(loc, value);\n }\n\n sourceMapReplacements.push({\n original: loc,\n length: cssText.length - beforeLength,\n });\n }\n }\n }\n\n const rules = tagProcessor.extractRules(\n valueCache,\n cssText,\n tagProcessor.location\n );\n\n // tagProcessor.doRuntimeReplacement(classes);\n if (!isReferenced && !cssText.includes(':global')) {\n return null;\n }\n\n // eslint-disable-next-line no-param-reassign\n return [rules, sourceMapReplacements];\n}\n"],"mappings":"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"}
{
"name": "@wyw-in-js/processor-utils",
"version": "0.1.1",
"version": "0.2.0",
"dependencies": {
"@babel/generator": "^7.23.0",
"@wyw-in-js/shared": "0.1.1"
"@babel/generator": "^7.23.5",
"@wyw-in-js/shared": "0.2.0"
},
"devDependencies": {
"@babel/types": "^7.23.0",
"@types/babel__core": "^7.20.2",
"@types/babel__generator": "^7.6.5",
"@babel/types": "^7.23.5",
"@types/babel__core": "^7.20.5",
"@types/babel__generator": "^7.6.7",
"@types/node": "^16.18.55",
"typescript": "^5.2.2",
"@wyw-in-js/babel-config": "0.1.1",
"@wyw-in-js/eslint-config": "0.1.1",
"@wyw-in-js/jest-preset": "0.1.1",
"@wyw-in-js/ts-config": "0.1.1"
"@wyw-in-js/babel-config": "0.2.0",
"@wyw-in-js/eslint-config": "0.2.0",
"@wyw-in-js/jest-preset": "0.2.0",
"@wyw-in-js/ts-config": "0.2.0"
},

@@ -19,0 +19,0 @@ "engines": {

@@ -50,3 +50,2 @@ "use strict";

let item;
let lastTemplateElementLocation;
// eslint-disable-next-line no-cond-assign

@@ -57,3 +56,2 @@ while ((item = template.shift())) {

cssText += item.value.cooked;
lastTemplateElementLocation = item.loc;
continue;

@@ -63,3 +61,3 @@ }

const { ex } = item;
const { end } = ex.loc;
const { end, start } = ex.loc;
const beforeLength = cssText.length;

@@ -69,7 +67,3 @@ // The location will be end of the current string to start of next string

const loc = {
// +1 because an expression location always shows 1 column before
start: {
line: lastTemplateElementLocation.end.line,
column: lastTemplateElementLocation.end.column + 1,
},
start,
end: next

@@ -76,0 +70,0 @@ ? { line: next.loc.start.line, column: next.loc.start.column }