diff --git a/Makefile b/Makefile index b1f8cea..73e6ca1 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,9 @@ export NODE_PATH = ./ MOCHA_CMD = mocha --require @babel/register +test_esm_extract: + $(MOCHA_CMD) ./tests/functional/test_esm_extract.js + test_extract_gettext: $(MOCHA_CMD) ./tests/functional/test_extract_gettext_simple.js @@ -121,7 +124,7 @@ test_alias_extract: test_extract_js_format: $(MOCHA_CMD) ./tests/functional/test_extract_js_format.js - +test_fun: test_esm_extract test_fun: test_extract_gettext test_fun: test_extract_fn_gettext test_fun: test_extract_gettext_with_formatting diff --git a/src/defaults.js b/src/defaults.js index 0515c1b..9a41236 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -25,6 +25,8 @@ export const ALIAS_TO_FUNC_MAP = Object.keys(FUNC_TO_ALIAS_MAP).reduce((obj, key return obj; }, {}); +export const FUNC_ALIASES = () => Object.values(FUNC_TO_ALIAS_MAP).flat(); + export const PO_PRIMITIVES = { MSGSTR: 'msgstr', MSGID: 'msgid', diff --git a/src/plugin.js b/src/plugin.js index 5ce7e7a..b925fb0 100644 --- a/src/plugin.js +++ b/src/plugin.js @@ -3,7 +3,7 @@ import fs from 'fs'; import mkdirp from 'mkdirp'; import path from 'path'; -import { ALIAS_TO_FUNC_MAP } from './defaults'; +import { ALIAS_TO_FUNC_MAP, FUNC_ALIASES } from './defaults'; import { buildPotData, makePotStr } from './po-helpers'; import { extractPoEntry, getExtractor } from './extract'; import { @@ -230,7 +230,9 @@ export default function ttagPlugin() { context.addImport(local.name); }); } else { - throw new Error('You should use ttag imports in form: "import { t } from \'ttag\'"'); + FUNC_ALIASES().forEach((value) => { + context.addImport(value); + }); } if (context.isResolveMode()) { diff --git a/tests/functional/test_esm_extract.js b/tests/functional/test_esm_extract.js new file mode 100644 index 0000000..6ddf63c --- /dev/null +++ b/tests/functional/test_esm_extract.js @@ -0,0 +1,29 @@ +import { expect } from 'chai'; +import * as babel from '@babel/core'; +import fs from 'fs'; +import ttag from 'src/plugin'; +import { rmDirSync } from 'src/utils'; +import dedent from 'dedent'; + +const output = 'debug/translations.pot'; + +const options = { + plugins: [[ttag, { extract: { output } }]], +}; + +describe('ESM extract', () => { + before(() => { + rmDirSync('debug'); + }); + + it('should extract by default import', () => { + const input = dedent(` + import defaultTtag from 'ttag'; + const {t} = defaultTtag; + t\`import default extract test\` + `); + babel.transform(input, options); + const result = fs.readFileSync(output).toString(); + expect(result).to.contain('import default extract test'); + }); +});