Source-loader: Add imports to top of file

This commit is contained in:
Michael Shilman 2020-01-16 18:15:41 +08:00
parent b45f98af61
commit bea119a459
4 changed files with 1 additions and 143 deletions

View File

@ -1,50 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`insertAfterImports addon-notes 1`] = `
"import React from 'react';
import BaseButton from '../components/BaseButton';
import markdownNotes from './notes/notes.md';
INSERT
const markdownString = '...';"
`;
exports[`insertAfterImports imports 1`] = `
"import './foo';
import './bar';
INSERT
whatever;"
`;
exports[`insertAfterImports multi-line imports 1`] = `
"import 'foo';
import {
bar
} from 'baz';
INSERT
whatever;"
`;
exports[`insertAfterImports no imports 1`] = `
"
INSERT
foo bar;
baz;"
`;
exports[`insertAfterImports single-line imports 1`] = `
"import 'foo';
import { bar } from 'baz';
INSERT
whatever;"
`;

View File

@ -257,22 +257,6 @@ export function findDependencies(ast) {
return { dependencies, storiesOfIdentifiers };
}
export function endOfImports(ast) {
let end = 0;
estraverse.traverse(ast, {
fallback: 'iteration',
enter: node => {
patchNode(node);
if (node.type === 'ImportDeclaration') {
end = Math.max(node.end, end);
}
},
});
return end;
}
export function popParametersObjectFromDefaultExport(source, ast) {
let splicedSource = source;
let parametersSliceOfCode = '';

View File

@ -1,26 +1,5 @@
import { getOptions } from 'loader-utils';
import { readStory } from './dependencies-lookup/readAsObject';
import { getRidOfUselessFilePrefixes } from './dependencies-lookup/getRidOfUselessFilePrefixes';
import getParser from './abstract-syntax-tree/parsers';
import { endOfImports } from './abstract-syntax-tree/traverse-helpers';
export function insertAfterImports(classLoader, insert, source) {
const options = getOptions(classLoader) || {};
let ast;
try {
ast = getParser(options.parser || classLoader.extension || 'javascript').parse(source);
} catch (e) {
// if not working, then we will fallback to not adding anything
// perhaps the code was not written in javascript
return source;
}
if (!ast) return `${insert}${source}`;
const endOfImportsIndex = endOfImports(ast);
const result = `${source.substring(0, endOfImportsIndex)}\n${insert}\n${source.substring(
endOfImportsIndex
)}`;
return result;
}
export function transform(inputSource) {
return readStory(this, inputSource)
@ -57,8 +36,7 @@ var __LOCAL_DEPENDENCIES__ = ${JSON.stringify(localDependencies)};
// @ts-ignore
var __IDS_TO_FRAMEWORKS__ = ${JSON.stringify(idsToFrameworks)};
`;
return insertAfterImports(this, preamble, source);
// return `${preamble}${source}`;
return `${preamble}\n${source}`;
}
);
}

View File

@ -1,54 +0,0 @@
import { insertAfterImports } from './build';
const insert = 'INSERT\n';
describe('insertAfterImports', () => {
it('no imports', () => {
const noImports = `
foo bar;
baz;
`.trim();
expect(insertAfterImports({}, insert, noImports)).toMatchSnapshot();
});
it('imports', () => {
const hasImports = `
import './foo';
import './bar';
whatever;
`.trim();
expect(insertAfterImports({}, insert, hasImports)).toMatchSnapshot();
});
it('single-line imports', () => {
const hasImports = `
import 'foo';
import { bar } from 'baz';
whatever;
`.trim();
expect(insertAfterImports({}, insert, hasImports)).toMatchSnapshot();
});
it('multi-line imports', () => {
const hasImports = `
import 'foo';
import {
bar
} from 'baz';
whatever;
`.trim();
expect(insertAfterImports({}, insert, hasImports)).toMatchSnapshot();
});
it('addon-notes', () => {
const notesStory = `
import React from 'react';
import BaseButton from '../components/BaseButton';
import markdownNotes from './notes/notes.md';
const markdownString = '...';
`.trim();
expect(insertAfterImports({}, insert, notesStory)).toMatchSnapshot();
});
});