From 46639b9f151328cb9d5bfd4b4bb5770d64cbcfc1 Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 09:55:46 +0200 Subject: [PATCH 1/7] Windows support: normalize line endings and path separators --- package.json | 1 + src/index.js | 9 +++++---- src/utils.js | 4 +++- test/index.js | 9 ++++++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 44215b5..063e731 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "babel-preset-react": "^6.11.1", "babel-register": "^6.11.6", "cross-env": "^2.0.0", + "eol": "^0.9.0", "eslint": "^2.9.0", "eslint-plugin-react": "^6.1.2", "mocha": "^3.0.2", diff --git a/src/index.js b/src/index.js index 7fc678d..cb378a0 100644 --- a/src/index.js +++ b/src/index.js @@ -7,6 +7,7 @@ import * as p from 'path'; import { writeFileSync, existsSync, readFileSync } from 'fs'; import { sync as mkdirpSync } from 'mkdirp'; +import eol from 'eol'; import { createDescriptorsWithKey, @@ -39,7 +40,7 @@ export default function({ types: t }) { // eslint-disable-line no-unused-vars const prefixId = p .relative(process.cwd(), file.opts.filename) - .split('/') + .split(p.sep) .join('.') .replace(/jsx?/, '..'); @@ -75,7 +76,7 @@ export default function({ types: t }) { // eslint-disable-line no-unused-vars let relativePath = p.join( p.sep, p.relative(process.cwd(), filename) - ); + ).replace(/\\/g, '/'); let generatedMessagesFilename = p.join( opts.messagesDir, @@ -122,13 +123,13 @@ export default function({ types: t }) { // eslint-disable-line no-unused-vars updatedNamedDescriptors ); - writeFileSync(generatedMessagesFilename, updatedDescriptorFile); + writeFileSync(generatedMessagesFilename, eol.lf(updatedDescriptorFile)); } // new file if (!existingContent && namedDesriptors) { let generatedDescriptorFile = defineMessageFormat(namedDesriptors); - writeFileSync(generatedMessagesFilename, generatedDescriptorFile); + writeFileSync(generatedMessagesFilename, eol.lf(generatedDescriptorFile)); } // else keep the file untouched } diff --git a/src/utils.js b/src/utils.js index 9f4142f..68a8891 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,3 +1,5 @@ +import eol from 'eol'; + export const defineMessageFormat = (descriptors) => `import { defineMessages } from 'react-intl'; @@ -6,7 +8,7 @@ export default defineMessages({\n${descriptors}}); `; export const removeDefindeMessageFormat = (fileContent) => - fileContent + eol.lf(fileContent) .replace(`import { defineMessages } from 'react-intl';\n\n`, '') .replace(`export default defineMessages({\n`, '') .replace('\n});', ''); diff --git a/test/index.js b/test/index.js index 0c39943..394eef8 100644 --- a/test/index.js +++ b/test/index.js @@ -2,12 +2,15 @@ import * as path from 'path'; import * as fs from 'fs'; import assert from 'power-assert'; import * as babel from 'babel-core'; +import eol from 'eol'; import plugin from '../src/index'; function trim(str) { return str.toString().replace(/^\s+|\s+$/, ''); } - +function normalize(str) { + return eol.lf(trim(str)); +} const skipTests = [ '.babelrc', '.DS_Store', @@ -37,12 +40,12 @@ describe('emit asserts for: ', () => { // Check code output const expected = fs.readFileSync(path.join(fixtureDir, 'expected.js')); - assert.equal(trim(actual), trim(expected)); + assert.equal(normalize(actual), normalize(expected)); // Check generated message output const expectedGenMessages = fs.readFileSync(path.join(fixtureDir, 'expectedMessages.js')); const actualGenMessages = fs.readFileSync(path.join(fixtureDir, actualFileName + 'Messages.js')); - assert.equal(trim(actualGenMessages), trim(expectedGenMessages)); + assert.equal(normalize(actualGenMessages), normalize(expectedGenMessages)); }); }); }); From d14d8ae7ac4a2e7237c630ecd344adb3b51f29f3 Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 10:36:17 +0200 Subject: [PATCH 2/7] adjusted project name and description, changed github urls --- package.json | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 063e731..09cfe73 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,17 @@ { - "name": "babel-plugin-react-intl-messages-generator", + "name": "babel-plugin-react-intl-messages-generator-compat", "version": "0.3.0", - "description": "Extracts explicit texts from react components and generate a componentNameMessages.js files", + "description": "Extracts explicit texts from react components and generate a componentNameMessages.js files. Forked from https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator, added Windows compatibility", "repository": { "type": "git", - "url": "git+https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator.git" + "url": "git+https://github.com/loopmode/babel-plugin-react-intl-messages-generator.git" }, "license": "BSD-3-Clause", "main": "lib/index.js", "author": "Peramanathan Sathyamoorthy ", + "contributors": [ + "Jovica Aleksic (https://github.com/loopmode)" + ], "dependencies": { "babel-runtime": "^6.2.0", "mkdirp": "^0.5.1" @@ -44,7 +47,7 @@ "defineMessages" ], "bugs": { - "url": "https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator/issues" + "url": "https://github.com/loopmode/babel-plugin-react-intl-messages-generator/issues" }, - "homepage": "https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator#readme" + "homepage": "https://github.com/loopmode/babel-plugin-react-intl-messages-generator#readme" } From fb786ed6188328973002ae2314244bcfe088c69d Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 10:47:31 +0200 Subject: [PATCH 3/7] add info about original project --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index adc3131..22db7e9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # babel-plugin-react-intl-messages-generator Build skeleton `messages` files with `defineMessage` format for each component that contains explicit texts +___This is a fork of that fixes some issues on Windows systems.___ +Hopefully the fork will become obsolete after the issues have been fixed or the solutions merged. +The original project is located at https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator and https://www.npmjs.com/package/babel-plugin-react-intl-messages-generator. + ## Installation ```sh From 00696155da124a8c44d71b21cf9a16979a948fa4 Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 10:48:20 +0200 Subject: [PATCH 4/7] make eol dependency instead of devDependency --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 09cfe73..d280764 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ ], "dependencies": { "babel-runtime": "^6.2.0", - "mkdirp": "^0.5.1" + "mkdirp": "^0.5.1", + "eol": "^0.9.0" }, "devDependencies": { "babel-cli": "^6.1.18", @@ -25,7 +26,6 @@ "babel-preset-react": "^6.11.1", "babel-register": "^6.11.6", "cross-env": "^2.0.0", - "eol": "^0.9.0", "eslint": "^2.9.0", "eslint-plugin-react": "^6.1.2", "mocha": "^3.0.2", From 1d816e4f89813b21f9de61bb00f4350a1d81c54a Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 10:48:36 +0200 Subject: [PATCH 5/7] make project name scoped --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d280764..bdc719a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "babel-plugin-react-intl-messages-generator-compat", + "name": "@loopmode/babel-plugin-react-intl-messages-generator", "version": "0.3.0", "description": "Extracts explicit texts from react components and generate a componentNameMessages.js files. Forked from https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator, added Windows compatibility", "repository": { From dd2dd2bff6840d8d725ad91865282639b9424789 Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 15:29:34 +0200 Subject: [PATCH 6/7] 0.3.1 add indentation option --- CHANGELOG.md | 4 ++++ README.md | 1 + package.json | 4 ++-- src/index.js | 2 +- src/utils.js | 6 +++--- 5 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0b25284 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +### 0.3.1 + +- Add `intendation` option. Defaults to `" "` (two spaces) +- Remove generated fixtures via `npm run clean` diff --git a/README.md b/README.md index 22db7e9..6088b50 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ Only new unique `defaultMessage` appended as `descriptor` at the end of previous - **`messagesDir`**: The target location where the plugin will output a `.js` file corresponding to each component from which messages were extracted. If not provided, the extracted message descriptors will only be accessible via Babel's API. +- **`intendation`**: A string that will be used to intend the generated messages. Defaults to `" "` (two spaces ). ### Via CLI diff --git a/package.json b/package.json index bdc719a..9a94596 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@loopmode/babel-plugin-react-intl-messages-generator", - "version": "0.3.0", + "version": "0.3.1", "description": "Extracts explicit texts from react components and generate a componentNameMessages.js files. Forked from https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator, added Windows compatibility", "repository": { "type": "git", @@ -34,7 +34,7 @@ }, "scripts": { "lint": "eslint src/", - "clean": "rimraf lib/", + "clean": "rimraf lib/ && rimraf test/fixtures/*/actualMessages.js", "test": "cross-env NODE_ENV=test mocha --compilers js:babel-register", "build": "babel src/ --out-dir lib/", "build:fixtures": "babel-node ./scripts/build-fixtures.js", diff --git a/src/index.js b/src/index.js index cb378a0..ac461ce 100644 --- a/src/index.js +++ b/src/index.js @@ -106,7 +106,7 @@ export default function({ types: t }) { // eslint-disable-line no-unused-vars } } - descriptorsWithKey += createDescriptorsWithKey(descriptor); + descriptorsWithKey += createDescriptorsWithKey(descriptor, opts); return descriptorsWithKey; }, '' diff --git a/src/utils.js b/src/utils.js index 68a8891..fafccef 100644 --- a/src/utils.js +++ b/src/utils.js @@ -13,13 +13,13 @@ export const removeDefindeMessageFormat = (fileContent) => .replace(`export default defineMessages({\n`, '') .replace('\n});', ''); -export const createDescriptorsWithKey = (descriptor) => { +export const createDescriptorsWithKey = (descriptor, {intendation = ' '}) => { const lintFixedDescriptor = JSON.stringify(descriptor, null, 4) - .replace('}', ' }') + .replace('}', `${intendation}}`) .replace('"id"', 'id') .replace('"defaultMessage"', 'defaultMessage') .replace(/\"/g, "'"); - const descriptorsWithKey = ` NameTheKey: ${lintFixedDescriptor},\n`; + const descriptorsWithKey = `${intendation}NameTheKey: ${lintFixedDescriptor},\n`; return descriptorsWithKey; }; From 842a88eaccf212a0db573a1afe7b9bd073706241 Mon Sep 17 00:00:00 2001 From: Jovica Aleksic Date: Wed, 26 Jul 2017 15:57:47 +0200 Subject: [PATCH 7/7] 0.3.2 four spaces --- CHANGELOG.md | 8 +++--- README.md | 2 +- package.json | 2 +- src/utils.js | 6 ++--- .../componentMessages/expectedMessages.js | 18 ++++++------- .../actualWithNewMessages.js | 22 +++++++++------- .../expectedMessages.js | 26 +++++++++---------- .../duplicateMessages/expectedMessages.js | 26 +++++++++---------- .../skipNumberMessages/expectedMessages.js | 10 +++---- .../expectedMessages.js | 18 ++++++------- 10 files changed, 72 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b25284..6f40c8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ -### 0.3.1 +### 0.3.2 + +- Switch to 4 spaces intendation +- Add `intendation` option. Defaults to `" "` (four spaces) +- Delete generated fixtures via `npm run clean` -- Add `intendation` option. Defaults to `" "` (two spaces) -- Remove generated fixtures via `npm run clean` diff --git a/README.md b/README.md index 6088b50..c5b081a 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Only new unique `defaultMessage` appended as `descriptor` at the end of previous - **`messagesDir`**: The target location where the plugin will output a `.js` file corresponding to each component from which messages were extracted. If not provided, the extracted message descriptors will only be accessible via Babel's API. -- **`intendation`**: A string that will be used to intend the generated messages. Defaults to `" "` (two spaces ). +- **`intendation`**: A string that will be used to intend the generated messages. Defaults to `" "` (four spaces ). ### Via CLI diff --git a/package.json b/package.json index 9a94596..ff0c4c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@loopmode/babel-plugin-react-intl-messages-generator", - "version": "0.3.1", + "version": "0.3.2", "description": "Extracts explicit texts from react components and generate a componentNameMessages.js files. Forked from https://github.com/p10ns11y/babel-plugin-react-intl-messages-generator, added Windows compatibility", "repository": { "type": "git", diff --git a/src/utils.js b/src/utils.js index fafccef..58545ed 100644 --- a/src/utils.js +++ b/src/utils.js @@ -13,11 +13,11 @@ export const removeDefindeMessageFormat = (fileContent) => .replace(`export default defineMessages({\n`, '') .replace('\n});', ''); -export const createDescriptorsWithKey = (descriptor, {intendation = ' '}) => { +export const createDescriptorsWithKey = (descriptor, {intendation = ' '}) => { const lintFixedDescriptor = JSON.stringify(descriptor, null, 4) .replace('}', `${intendation}}`) - .replace('"id"', 'id') - .replace('"defaultMessage"', 'defaultMessage') + .replace('"id"', `${intendation}id`) + .replace('"defaultMessage"', `${intendation}defaultMessage`) .replace(/\"/g, "'"); const descriptorsWithKey = `${intendation}NameTheKey: ${lintFixedDescriptor},\n`; diff --git a/test/fixtures/componentMessages/expectedMessages.js b/test/fixtures/componentMessages/expectedMessages.js index 090ac0f..9ddf93a 100644 --- a/test/fixtures/componentMessages/expectedMessages.js +++ b/test/fixtures/componentMessages/expectedMessages.js @@ -1,12 +1,12 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ - NameTheKey: { - id: 'test.fixtures.componentMessages.actual...', - defaultMessage: 'Hello' - }, - NameTheKey: { - id: 'test.fixtures.componentMessages.actual...', - defaultMessage: 'world' - }, -}); + NameTheKey: { + id: 'test.fixtures.componentMessages.actual...', + defaultMessage: 'Hello' + }, + NameTheKey: { + id: 'test.fixtures.componentMessages.actual...', + defaultMessage: 'world' + }, +}); \ No newline at end of file diff --git a/test/fixtures/componentWithNewMessages/actualWithNewMessages.js b/test/fixtures/componentWithNewMessages/actualWithNewMessages.js index b307990..b5defc0 100644 --- a/test/fixtures/componentWithNewMessages/actualWithNewMessages.js +++ b/test/fixtures/componentWithNewMessages/actualWithNewMessages.js @@ -1,12 +1,16 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ - helloTxt: { - id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.hello', - defaultMessage: 'Hello' - }, - worldTxt: { - id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.world', - defaultMessage: 'world' - }, -}); + helloTxt: { + id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.hello', + defaultMessage: 'Hello' + }, + worldTxt: { + id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.world', + defaultMessage: 'world' + }, + NameTheKey: { + id: 'test.fixtures.componentWithNewMessages.actualWithNew...', + defaultMessage: 'New message' + }, +}); \ No newline at end of file diff --git a/test/fixtures/componentWithNewMessages/expectedMessages.js b/test/fixtures/componentWithNewMessages/expectedMessages.js index f740279..b5defc0 100644 --- a/test/fixtures/componentWithNewMessages/expectedMessages.js +++ b/test/fixtures/componentWithNewMessages/expectedMessages.js @@ -1,16 +1,16 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ - helloTxt: { - id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.hello', - defaultMessage: 'Hello' - }, - worldTxt: { - id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.world', - defaultMessage: 'world' - }, - NameTheKey: { - id: 'test.fixtures.componentWithNewMessages.actualWithNew...', - defaultMessage: 'New message' - }, -}); + helloTxt: { + id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.hello', + defaultMessage: 'Hello' + }, + worldTxt: { + id: 'test.fixtures.componentWithNewMessages.actualWithNew.text.world', + defaultMessage: 'world' + }, + NameTheKey: { + id: 'test.fixtures.componentWithNewMessages.actualWithNew...', + defaultMessage: 'New message' + }, +}); \ No newline at end of file diff --git a/test/fixtures/duplicateMessages/expectedMessages.js b/test/fixtures/duplicateMessages/expectedMessages.js index a41eaae..d22a00d 100644 --- a/test/fixtures/duplicateMessages/expectedMessages.js +++ b/test/fixtures/duplicateMessages/expectedMessages.js @@ -1,16 +1,16 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ - NameTheKey: { - id: 'test.fixtures.duplicateMessages.actual...', - defaultMessage: 'Hello' - }, - NameTheKey: { - id: 'test.fixtures.duplicateMessages.actual...', - defaultMessage: 'world' - }, - NameTheKey: { - id: 'test.fixtures.duplicateMessages.actual...', - defaultMessage: 'Hello world' - }, -}); + NameTheKey: { + id: 'test.fixtures.duplicateMessages.actual...', + defaultMessage: 'Hello' + }, + NameTheKey: { + id: 'test.fixtures.duplicateMessages.actual...', + defaultMessage: 'world' + }, + NameTheKey: { + id: 'test.fixtures.duplicateMessages.actual...', + defaultMessage: 'Hello world' + }, +}); \ No newline at end of file diff --git a/test/fixtures/skipNumberMessages/expectedMessages.js b/test/fixtures/skipNumberMessages/expectedMessages.js index 4fa2a41..f97796d 100644 --- a/test/fixtures/skipNumberMessages/expectedMessages.js +++ b/test/fixtures/skipNumberMessages/expectedMessages.js @@ -1,8 +1,8 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ - NameTheKey: { - id: 'test.fixtures.skipNumberMessages.actual...', - defaultMessage: '1 it is ok to have numbers with text' - }, -}); + NameTheKey: { + id: 'test.fixtures.skipNumberMessages.actual...', + defaultMessage: '1 it is ok to have numbers with text' + }, +}); \ No newline at end of file diff --git a/test/fixtures/statelessComponentMessages/expectedMessages.js b/test/fixtures/statelessComponentMessages/expectedMessages.js index 455cb0b..745e6c9 100644 --- a/test/fixtures/statelessComponentMessages/expectedMessages.js +++ b/test/fixtures/statelessComponentMessages/expectedMessages.js @@ -1,12 +1,12 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ - NameTheKey: { - id: 'test.fixtures.statelessComponentMessages.actual...', - defaultMessage: 'I am stateless Component' - }, - NameTheKey: { - id: 'test.fixtures.statelessComponentMessages.actual...', - defaultMessage: 'I love props a lot!' - }, -}); + NameTheKey: { + id: 'test.fixtures.statelessComponentMessages.actual...', + defaultMessage: 'I am stateless Component' + }, + NameTheKey: { + id: 'test.fixtures.statelessComponentMessages.actual...', + defaultMessage: 'I love props a lot!' + }, +}); \ No newline at end of file