rollup-plugin-dynamic-import-variables.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { join } from 'path';
  2. import test from 'ava';
  3. import { rollup } from 'rollup';
  4. import dynamicImportVars from '..';
  5. process.chdir(join(__dirname, 'fixtures'));
  6. test('single dir', async (t) => {
  7. const bundle = await rollup({
  8. input: 'fixture-single-dir.js',
  9. plugins: [dynamicImportVars()],
  10. });
  11. const { output } = await bundle.generate({ format: 'es' });
  12. const expectedFiles = [
  13. require.resolve('./fixtures/fixture-single-dir.js'),
  14. require.resolve('./fixtures/module-dir-a/module-a-1.js'),
  15. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  16. ];
  17. t.deepEqual(
  18. expectedFiles,
  19. output.map((o) => o.facadeModuleId)
  20. );
  21. t.snapshot(output[0].code);
  22. });
  23. test('multiple dirs', async (t) => {
  24. const bundle = await rollup({
  25. input: 'fixture-multiple-dirs.js',
  26. plugins: [dynamicImportVars()],
  27. });
  28. const { output } = await bundle.generate({ format: 'es' });
  29. const expectedFiles = [
  30. require.resolve('./fixtures/fixture-multiple-dirs.js'),
  31. require.resolve('./fixtures/module-dir-a/module-a-1.js'),
  32. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  33. require.resolve('./fixtures/module-dir-b/module-b-1.js'),
  34. require.resolve('./fixtures/module-dir-b/module-b-2.js'),
  35. require.resolve('./fixtures/sub-dir/fixture-upwards-path.js'),
  36. ];
  37. t.deepEqual(
  38. expectedFiles,
  39. output.map((o) => o.facadeModuleId)
  40. );
  41. t.snapshot(output[0].code);
  42. });
  43. test('upwards dir path', async (t) => {
  44. const bundle = await rollup({
  45. input: 'sub-dir/fixture-upwards-path',
  46. plugins: [dynamicImportVars()],
  47. });
  48. const { output } = await bundle.generate({ format: 'es' });
  49. const expectedFiles = [
  50. require.resolve('./fixtures/sub-dir/fixture-upwards-path.js'),
  51. require.resolve('./fixtures/module-dir-a/module-a-1.js'),
  52. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  53. ];
  54. t.deepEqual(
  55. expectedFiles,
  56. output.map((o) => o.facadeModuleId)
  57. );
  58. t.snapshot(output[0].code);
  59. });
  60. test('complex concatenation', async (t) => {
  61. const bundle = await rollup({
  62. input: 'fixture-complex-concat.js',
  63. plugins: [dynamicImportVars()],
  64. });
  65. const { output } = await bundle.generate({ format: 'es' });
  66. const expectedFiles = [
  67. require.resolve('./fixtures/fixture-complex-concat.js'),
  68. require.resolve('./fixtures/module-dir-a/module-a-1.js'),
  69. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  70. require.resolve('./fixtures/module-dir-b/module-b-1.js'),
  71. require.resolve('./fixtures/module-dir-b/module-b-2.js'),
  72. ];
  73. t.deepEqual(
  74. expectedFiles,
  75. output.map((o) => o.facadeModuleId)
  76. );
  77. t.snapshot(output[0].code);
  78. });
  79. test('CallExpression', async (t) => {
  80. const bundle = await rollup({
  81. input: 'fixture-call-expression.js',
  82. plugins: [dynamicImportVars()],
  83. });
  84. const { output } = await bundle.generate({ format: 'es' });
  85. const expectedFiles = [
  86. require.resolve('./fixtures/fixture-call-expression.js'),
  87. require.resolve('./fixtures/module-dir-a/module-a-1.js'),
  88. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  89. ];
  90. t.deepEqual(
  91. expectedFiles,
  92. output.map((o) => o.facadeModuleId)
  93. );
  94. t.snapshot(output[0].code);
  95. });
  96. test('own directory', async (t) => {
  97. const bundle = await rollup({
  98. input: 'fixture-own-dir.js',
  99. plugins: [dynamicImportVars()],
  100. });
  101. const { output } = await bundle.generate({ format: 'es' });
  102. const expectedFiles = [
  103. require.resolve('./fixtures/fixture-own-dir.js'),
  104. require.resolve('./fixtures/root-module-a.js'),
  105. require.resolve('./fixtures/root-module-b.js'),
  106. ];
  107. t.deepEqual(
  108. expectedFiles,
  109. output.map((o) => o.facadeModuleId)
  110. );
  111. t.snapshot(output[0].code);
  112. });
  113. test('multiple dynamic imports', async (t) => {
  114. const bundle = await rollup({
  115. input: 'fixture-multiple-imports.js',
  116. plugins: [dynamicImportVars()],
  117. });
  118. const { output } = await bundle.generate({ format: 'es' });
  119. const expectedFiles = [
  120. require.resolve('./fixtures/fixture-multiple-imports.js'),
  121. require.resolve('./fixtures/module-dir-a/module-a-1.js'),
  122. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  123. require.resolve('./fixtures/module-dir-b/module-b-1.js'),
  124. require.resolve('./fixtures/module-dir-b/module-b-2.js'),
  125. require.resolve('./fixtures/sub-dir/fixture-upwards-path.js'),
  126. ];
  127. t.deepEqual(
  128. expectedFiles,
  129. output.map((o) => o.facadeModuleId)
  130. );
  131. t.snapshot(output[0].code);
  132. });
  133. test("doesn't change imports that should not be changed", async (t) => {
  134. const bundle = await rollup({
  135. input: 'fixture-unchanged.js',
  136. plugins: [dynamicImportVars()],
  137. });
  138. const { output } = await bundle.generate({ format: 'es' });
  139. const expectedFiles = [
  140. require.resolve('./fixtures/fixture-unchanged.js'),
  141. require.resolve('./fixtures/module-dir-a/module-a-2.js'),
  142. ];
  143. t.deepEqual(
  144. expectedFiles,
  145. output.map((o) => o.facadeModuleId)
  146. );
  147. t.snapshot(output[0].code);
  148. });
  149. test('can exclude files', async (t) => {
  150. const bundle = await rollup({
  151. input: 'fixture-excluded.js',
  152. plugins: [
  153. dynamicImportVars({
  154. exclude: ['fixture-excluded.js'],
  155. }),
  156. ],
  157. });
  158. const { output } = await bundle.generate({ format: 'es' });
  159. const expectedFiles = [require.resolve('./fixtures/fixture-excluded.js')];
  160. t.deepEqual(
  161. expectedFiles,
  162. output.map((o) => o.facadeModuleId)
  163. );
  164. t.snapshot(output[0].code);
  165. });
  166. test('throws an error on failure', async (t) => {
  167. let thrown;
  168. try {
  169. const bundle = await rollup({
  170. input: 'fixture-extensionless.js',
  171. plugins: [
  172. dynamicImportVars({
  173. exclude: ['fixture-excluded.js'],
  174. }),
  175. ],
  176. });
  177. } catch (_) {
  178. thrown = true;
  179. }
  180. t.is(thrown, true);
  181. });