| let parts = [process.platform, process.arch]; |
| if (process.platform === 'linux') { |
| const { MUSL, familySync } = require('detect-libc'); |
| const family = familySync(); |
| if (family === MUSL) { |
| parts.push('musl'); |
| } else if (process.arch === 'arm') { |
| parts.push('gnueabihf'); |
| } else { |
| parts.push('gnu'); |
| } |
| } else if (process.platform === 'win32') { |
| parts.push('msvc'); |
| } |
|
|
| let native; |
| try { |
| native = require(`lightningcss-${parts.join('-')}`); |
| } catch (err) { |
| native = require(`../lightningcss.${parts.join('-')}.node`); |
| } |
|
|
| module.exports.transform = wrap(native.transform); |
| module.exports.transformStyleAttribute = wrap(native.transformStyleAttribute); |
| module.exports.bundle = wrap(native.bundle); |
| module.exports.bundleAsync = wrap(native.bundleAsync); |
| module.exports.browserslistToTargets = require('./browserslistToTargets'); |
| module.exports.composeVisitors = require('./composeVisitors'); |
| module.exports.Features = require('./flags').Features; |
|
|
| function wrap(call) { |
| return (options) => { |
| if (typeof options.visitor === 'function') { |
| let deps = []; |
| options.visitor = options.visitor({ |
| addDependency(dep) { |
| deps.push(dep); |
| } |
| }); |
|
|
| let result = call(options); |
| if (result instanceof Promise) { |
| result = result.then(res => { |
| if (deps.length) { |
| res.dependencies ??= []; |
| res.dependencies.push(...deps); |
| } |
| return res; |
| }); |
| } else if (deps.length) { |
| result.dependencies ??= []; |
| result.dependencies.push(...deps); |
| } |
| return result; |
| } else { |
| return call(options); |
| } |
| }; |
| } |
|
|