1
Fork 0

add typescript compilation mechanism

This commit is contained in:
Conduitry 2018-10-11 04:29:37 -04:00
parent 4b2d1ce0cd
commit 3a38be169d
6 changed files with 60 additions and 15 deletions

View File

@ -1,7 +0,0 @@
env:
es6: true
node: true
extends: 'eslint:recommended'
parserOptions:
ecmaVersion: 2017
sourceType: module

View File

@ -10,9 +10,8 @@
"watcher" "watcher"
], ],
"main": "./dist/CheapWatch.cjs.js", "main": "./dist/CheapWatch.cjs.js",
"module": "./CheapWatch.js", "module": "./dist/CheapWatch.es.js",
"files": [ "files": [
"CheapWatch.js",
"dist" "dist"
], ],
"engines": { "engines": {
@ -29,12 +28,16 @@
}, },
"homepage": "https://conduitry.io/cheap-watch", "homepage": "https://conduitry.io/cheap-watch",
"devDependencies": { "devDependencies": {
"rollup": "*" "rollup": "*",
"typescript": "*",
"@types/node": "*"
}, },
"scripts": { "scripts": {
"build": "rollup -c", "build": "tsc && rollup -c",
"dev": "rollup -cw",
"prepare": "npm run build",
"prepublishOnly": "npm test",
"pretest": "npm run build", "pretest": "npm run build",
"test": "node test.js", "test": "node test.js"
"prepublishOnly": "npm test"
} }
} }

View File

@ -1,6 +1,43 @@
let transform;
if (process.env.ROLLUP_WATCH === 'true') {
const { transpileModule } = require('typescript');
const tsconfig = require('./tsconfig.json');
transform = (code, id) => {
if (id.endsWith('.ts')) {
const { outputText, sourceMapText } = transpileModule(code, tsconfig);
return { code: outputText, map: JSON.parse(sourceMapText) };
}
};
} else {
const { readFile, unlink } = require('fs');
const { promisify } = require('util');
transform = async (code, id) => {
if (id.endsWith('.ts')) {
id = id.slice(0, -2) + 'js';
const [js, map] = await Promise.all(
[id, id + '.map'].map(async path => {
const data = await promisify(readFile)(path);
unlink(path, () => null);
return data.toString();
}),
);
return { code: js, map: JSON.parse(map) };
}
};
}
export default { export default {
input: './CheapWatch.js', input: './src/CheapWatch',
external: name => /^[-a-z]+$/.test(name), external: name => /^[a-z]/.test(name),
plugins: {
resolveId(importee, importer) {
if (/\/[^.]+$/.test(importee)) {
return this.resolveId(importee + '.ts', importer);
}
},
transform,
},
output: [ output: [
{ {
file: './dist/CheapWatch.cjs.js', file: './dist/CheapWatch.cjs.js',
@ -8,5 +45,6 @@ export default {
sourcemap: true, sourcemap: true,
interop: false, interop: false,
}, },
{ file: './dist/CheapWatch.es.js', format: 'es', sourcemap: true },
], ],
}; };

11
tsconfig.json Normal file
View File

@ -0,0 +1,11 @@
{
"compilerOptions": {
"noImplicitAny": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"removeComments": true,
"sourceMap": true,
"target": "esnext"
},
"include": ["src"]
}