Skip to content

Commit ac2fa04

Browse files
committed
👕 refactor: siwtch to typescript from babel
1 parent db55419 commit ac2fa04

File tree

13 files changed

+424
-755
lines changed

13 files changed

+424
-755
lines changed

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
./lib
2+
./jest.config.js
3+
./test/fixtures

.eslintrc.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@ module.exports = {
99
extends: [
1010
'plugin:vue-libs/recommended'
1111
],
12-
plugins: [],
12+
plugins: [
13+
'@typescript-eslint'
14+
],
15+
parser: 'vue-eslint-parser',
1316
parserOptions: {
14-
ecmaVersion: 2015
17+
parser: '@typescript-eslint/parser',
18+
sourceType: 'module'
1519
},
1620
rules: {
21+
'no-unused-vars': 'off', // HACK: due to override with @typescript-eslint/no-unused-vars
22+
'@typescript-eslint/no-unused-vars': [2, { 'vars': 'all', 'args': 'none' }]
1723
}
1824
}

@types/index.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { DOMWindow } from 'jsdom'
2+
3+
declare global {
4+
interface Window {
5+
module: any,
6+
exports: any
7+
}
8+
}

jest.config.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
'use strict'
22

33
module.exports = {
4+
preset: 'ts-jest',
5+
testEnvironment: 'node',
46
coveragePathIgnorePatterns: [
57
'node_modules',
68
'<rootDir>/test/*.*'
7-
]
9+
],
10+
globals: {
11+
'ts-jest': {
12+
diagnostics: false
13+
}
14+
}
815
}

lib/.gitkeep

Whitespace-only changes.

lib/index.js

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
11
"use strict";
2-
3-
Object.defineProperty(exports, "__esModule", {
4-
value: true
5-
});
6-
7-
exports.default = function (content) {
8-
if (this.version && this.version >= 2) {
9-
try {
10-
this.cacheable && this.cacheable();
11-
this.callback(null, `module.exports = ${generateCode(content)}`);
12-
} catch (err) {
13-
this.emitError(err.message);
14-
this.callback(err);
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
var loader = function (source) {
4+
if (this.version && Number(this.version) >= 2) {
5+
try {
6+
this.cacheable && this.cacheable();
7+
this.callback(null, "module.exports = " + generateCode(source));
8+
}
9+
catch (err) {
10+
this.emitError(err.message);
11+
this.callback(err);
12+
}
13+
}
14+
else {
15+
var message = 'support webpack 2 later';
16+
this.emitError(message);
17+
this.callback(new Error(message));
1518
}
16-
} else {
17-
const message = 'support webpack 2 later';
18-
this.emitError(message);
19-
this.callback(new Error(message));
20-
}
2119
};
22-
23-
function generateCode(content) {
24-
let code = '';
25-
let value = typeof content === 'string' ? JSON.parse(content) : content;
26-
value = JSON.stringify(value).replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029').replace(/\\/g, '\\\\');
27-
code += `function (Component) {
28-
Component.options.__i18n = Component.options.__i18n || []
29-
Component.options.__i18n.push('${value.replace(/\u0027/g, '\\u0027')}')
30-
delete Component.options._Ctor
31-
}\n`;
32-
return code;
33-
}
20+
function generateCode(source) {
21+
var code = '';
22+
var value = typeof source === 'string'
23+
? JSON.parse(source)
24+
: source;
25+
value = JSON.stringify(value)
26+
.replace(/\u2028/g, '\\u2028')
27+
.replace(/\u2029/g, '\\u2029')
28+
.replace(/\\/g, '\\\\');
29+
code += "function (Component) {\n Component.options.__i18n = Component.options.__i18n || []\n Component.options.__i18n.push('" + value.replace(/\u0027/g, '\\u0027') + "')\n delete Component.options._Ctor\n}\n";
30+
return code;
31+
}
32+
exports.default = loader;

package.json

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,25 @@
1010
"url": "https://github.com/kazupon/vue-i18n-loader/issues"
1111
},
1212
"devDependencies": {
13-
"@babel/cli": "^7.5.0",
14-
"@babel/core": "^7.5.4",
15-
"babel-eslint": "^10.0.2",
16-
"babel-jest": "^24.8.0",
17-
"babel-preset-env": "^1.7.0",
13+
"@types/jest": "^24.0.15",
14+
"@types/jsdom": "^12.2.4",
15+
"@types/memory-fs": "^0.3.2",
16+
"@types/node": "^12.6.8",
17+
"@types/webpack": "^4.4.35",
18+
"@typescript-eslint/eslint-plugin": "^1.12.0",
19+
"@typescript-eslint/parser": "^1.12.0",
20+
"@typescript-eslint/typescript-estree": "^1.12.0",
1821
"conventional-changelog-cli": "^2.0.12",
1922
"conventional-github-releaser": "^3.1.2",
20-
"cross-env": "^5.2.0",
2123
"eslint": "^6.0.0",
2224
"eslint-plugin-vue-libs": "^4.0.0",
2325
"git-commit-message-convention": "git://github.com/kazupon/git-commit-message-convention.git",
2426
"jest": "^24.8.0",
2527
"jsdom": "^15.1.1",
2628
"memory-fs": "^0.4.1",
2729
"opener": "^1.5.1",
30+
"ts-jest": "^24.0.2",
31+
"typescript": "^3.5.3",
2832
"vue-loader": "^15.7.0",
2933
"vue-template-compiler": "^2.6.10",
3034
"webpack": "^4.35.3"
@@ -50,15 +54,15 @@
5054
"url": "git+https://github.com/kazupon/vue-i18n-loader.git"
5155
},
5256
"scripts": {
53-
"build": "cross-env BABEL_ENV=production babel ./src --out-dir ./lib",
57+
"build": "tsc -p .",
5458
"changelog": "conventional-changelog -i CHANGELOG.md -s -n ./node_modules/git-commit-message-convention/convention.js",
5559
"clean": "rm -rf ./coverage && rm -rf ./lib/*.js*",
5660
"coverage": "opener coverage/lcov-report/index.html",
57-
"lint": "eslint ./src ./test",
61+
"lint": "eslint ./src ./test --ext .ts",
5862
"release": "conventional-github-releaser -n ./node_modules/git-commit-message-convention/convention.js",
5963
"test": "npm run lint && npm run test:cover",
6064
"test:cover": "npm run test:unit -- --coverage",
61-
"test:unit": "cross-env BABEL_ENV=test jest --env node",
62-
"watch": "cross-env BABEL_ENV=development babel ./src --out-dir ./lib --watch"
65+
"test:unit": "jest --env node",
66+
"watch": "tsc -p . --watch"
6367
}
6468
}

src/index.js renamed to src/index.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
export default function (content) {
2-
if (this.version && this.version >= 2) {
1+
import webpack from 'webpack'
2+
3+
const loader: webpack.loader.Loader = function (source: string | Buffer): void {
4+
if (this.version && Number(this.version) >= 2) {
35
try {
46
this.cacheable && this.cacheable()
5-
this.callback(null, `module.exports = ${generateCode(content)}`)
7+
this.callback(null, `module.exports = ${generateCode(source)}`)
68
} catch (err) {
79
this.emitError(err.message)
810
this.callback(err)
@@ -14,12 +16,12 @@ export default function (content) {
1416
}
1517
}
1618

17-
function generateCode (content) {
19+
function generateCode (source: string | Buffer): string {
1820
let code = ''
1921

20-
let value = typeof content === 'string'
21-
? JSON.parse(content)
22-
: content
22+
let value = typeof source === 'string'
23+
? JSON.parse(source)
24+
: source
2325
value = JSON.stringify(value)
2426
.replace(/\u2028/g, '\\u2028')
2527
.replace(/\u2029/g, '\\u2029')
@@ -32,3 +34,5 @@ function generateCode (content) {
3234
}\n`
3335
return code
3436
}
37+
38+
export default loader
File renamed without changes.

0 commit comments

Comments
 (0)