index.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. let parts = [process.platform, process.arch];
  2. if (process.platform === 'linux') {
  3. const { MUSL, familySync } = require('detect-libc');
  4. const family = familySync();
  5. if (family === MUSL) {
  6. parts.push('musl');
  7. } else if (process.arch === 'arm') {
  8. parts.push('gnueabihf');
  9. } else {
  10. parts.push('gnu');
  11. }
  12. } else if (process.platform === 'win32') {
  13. parts.push('msvc');
  14. }
  15. let native;
  16. try {
  17. native = require(`lightningcss-${parts.join('-')}`);
  18. } catch (err) {
  19. native = require(`../lightningcss.${parts.join('-')}.node`);
  20. }
  21. module.exports.transform = wrap(native.transform);
  22. module.exports.transformStyleAttribute = wrap(native.transformStyleAttribute);
  23. module.exports.bundle = wrap(native.bundle);
  24. module.exports.bundleAsync = wrap(native.bundleAsync);
  25. module.exports.browserslistToTargets = require('./browserslistToTargets');
  26. module.exports.composeVisitors = require('./composeVisitors');
  27. module.exports.Features = require('./flags').Features;
  28. function wrap(call) {
  29. return (options) => {
  30. if (typeof options.visitor === 'function') {
  31. let deps = [];
  32. options.visitor = options.visitor({
  33. addDependency(dep) {
  34. deps.push(dep);
  35. }
  36. });
  37. let result = call(options);
  38. if (result instanceof Promise) {
  39. result = result.then(res => {
  40. if (deps.length) {
  41. res.dependencies ??= [];
  42. res.dependencies.push(...deps);
  43. }
  44. return res;
  45. });
  46. } else if (deps.length) {
  47. result.dependencies ??= [];
  48. result.dependencies.push(...deps);
  49. }
  50. return result;
  51. } else {
  52. return call(options);
  53. }
  54. };
  55. }