compile.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const uglify = require("uglify-js");
  2. const fs = require('fs')
  3. const path = require('path')
  4. const Handlebars = require("handlebars");
  5. const g = require("generatorics");
  6. Handlebars.registerHelper('any', function (...args) {
  7. return args.slice(0, -1).some(Boolean)
  8. })
  9. Handlebars.registerPartial('customEvents', Handlebars.compile(fs.readFileSync(relPath('src/customEvents.js')).toString()))
  10. function relPath(segment) {
  11. return path.join(__dirname, segment)
  12. }
  13. function compilefile(input, output, templateVars = {}) {
  14. const code = fs.readFileSync(input).toString()
  15. const template = Handlebars.compile(code)
  16. const rendered = template(templateVars)
  17. const result = uglify.minify(rendered)
  18. if (result.code) {
  19. fs.writeFileSync(output, result.code)
  20. } else {
  21. throw new Error(`Failed to compile ${output.split('/').pop()}.\n${result.error}\n`)
  22. }
  23. }
  24. const base_variants = ["hash", "outbound-links", "exclusions", "compat", "local", "manual", "file-downloads", "pageview-props", "tagged-events", "revenue"]
  25. const variants = [...g.clone.powerSet(base_variants)].filter(a => a.length > 0).map(a => a.sort());
  26. compilefile(relPath('src/plausible.js'), relPath('../priv/tracker/js/plausible.js'))
  27. compilefile(relPath('src/p.js'), relPath('../priv/tracker/js/p.js'))
  28. variants.map(variant => {
  29. const options = variant.map(variant => variant.replace('-', '_')).reduce((acc, curr) => (acc[curr] = true, acc), {})
  30. compilefile(relPath('src/plausible.js'), relPath(`../priv/tracker/js/plausible.${variant.join('.')}.js`), options)
  31. })