File: form.js

package info (click to toggle)
node-rollup-plugin-commonjs 17.0.0%2Brepack-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,664 kB
  • sloc: javascript: 4,171; makefile: 18
file content (77 lines) | stat: -rw-r--r-- 2,199 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* eslint-disable global-require, import/no-dynamic-require, no-console */

const { existsSync, readdirSync, readFileSync } = require('fs');

const acorn = require('acorn');
const test = require('tape');

const { commonjs } = require('./helpers/util');

process.chdir(__dirname);

const transformContext = {
  parse: (input, options) =>
    acorn.parse(input, {
      ecmaVersion: 9,
      sourceType: 'module',
      ...options
    })
};

readdirSync('./fixtures/form').forEach((dir) => {
  let config;

  try {
    config = require(`./fixtures/form/${dir}/_config.js`);
  } catch (err) {
    config = {};
  }

  const inputEntries = [];

  if (typeof config.multi === 'object') {
    for (const [key, entry] of Object.entries(config.multi)) {
      inputEntries.push([key, `fixtures/form/${dir}/${entry}`]);
    }
  } else {
    inputEntries.push(['output', `fixtures/form/${dir}/input.js`]);
  }

  (config.solo ? test.only : test)(dir, async (t) => {
    for (const [outputName, id] of inputEntries) {
      const { transform } = commonjs(config.options);

      transformContext.getModuleInfo = (moduleId) => {
        return {
          isEntry: config.entry && moduleId === id,
          importers:
            config.importers && config.importers[outputName]
              ? config.importers[outputName].map((x) => `fixtures/form/${dir}/${x}`)
              : []
        };
      };
      transformContext.error = (base, props) => {
        let error = base;
        if (!(base instanceof Error)) error = Object.assign(new Error(base.message), base);
        if (props) Object.assign(error, props);
        throw error;
      };

      const input = readFileSync(id, 'utf-8');

      let outputFile = `fixtures/form/${dir}/${outputName}`;
      if (existsSync(`${outputFile}.${process.platform}.js`)) {
        outputFile += `.${process.platform}.js`;
      } else {
        outputFile += '.js';
      }

      const expected = readFileSync(outputFile, 'utf-8').trim();
      const transformed = transform.call(transformContext, input, id);
      const actual = (transformed ? transformed.code : input).trim().replace(/\0/g, '_');

      t.is(actual, expected);
    }
    t.end();
  });
});