1"use strict"; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6exports.convertLightningCssToReactNativeWebStyleSheet = convertLightningCssToReactNativeWebStyleSheet; 7exports.matchCssModule = matchCssModule; 8exports.transformCssModuleWeb = transformCssModuleWeb; 9function _css() { 10 const data = require("./css"); 11 _css = function () { 12 return data; 13 }; 14 return data; 15} 16function _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); } 17function _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; } 18const RNW_CSS_CLASS_ID = '_'; 19async function transformCssModuleWeb(props) { 20 const { 21 transform 22 } = await Promise.resolve().then(() => _interopRequireWildcard(require('lightningcss'))); 23 24 // TODO: Add bundling to resolve imports 25 // https://lightningcss.dev/bundling.html#bundling-order 26 27 const cssResults = transform({ 28 filename: props.filename, 29 code: Buffer.from(props.src), 30 sourceMap: props.options.sourceMap, 31 cssModules: { 32 // Prevent renaming CSS variables to ensure 33 // variables created in global files are available. 34 dashedIdents: false 35 }, 36 // cssModules: true, 37 projectRoot: props.options.projectRoot, 38 minify: props.options.minify 39 }); 40 const codeAsString = cssResults.code.toString(); 41 const { 42 styles, 43 variables 44 } = convertLightningCssToReactNativeWebStyleSheet(cssResults.exports); 45 let outputModule = `module.exports=Object.assign(${JSON.stringify(styles)},${JSON.stringify(variables)});`; 46 if (props.options.dev) { 47 const runtimeCss = (0, _css().wrapDevelopmentCSS)({ 48 ...props, 49 src: codeAsString 50 }); 51 outputModule += '\n' + runtimeCss; 52 } 53 return { 54 output: outputModule, 55 css: cssResults.code, 56 map: cssResults.map 57 }; 58} 59function convertLightningCssToReactNativeWebStyleSheet(input) { 60 const styles = {}; 61 const variables = {}; 62 // e.g. { container: { name: 'ahs8IW_container', composes: [], isReferenced: false }, } 63 Object.entries(input).map(([key, value]) => { 64 // order matters here 65 let className = value.name; 66 if (value.composes.length) { 67 className += ' ' + value.composes.map(value => value.name).join(' '); 68 } 69 70 // CSS Variables will be `{string: string}` 71 if (key.startsWith('--')) { 72 variables[key] = className; 73 } 74 styles[key] = { 75 $$css: true, 76 [RNW_CSS_CLASS_ID]: className 77 }; 78 return { 79 [key]: { 80 $$css: true, 81 [RNW_CSS_CLASS_ID]: className 82 } 83 }; 84 }); 85 return { 86 styles, 87 variables 88 }; 89} 90function matchCssModule(filePath) { 91 return !!/\.module(\.(native|ios|android|web))?\.(css|s[ac]ss)$/.test(filePath); 92} 93//# sourceMappingURL=css-modules.js.map