Skip to content

Commit 68044bb

Browse files
author
roman.vasilev
committed
feat: API revision
BREAKING CHANGE: Removed update method
1 parent ac90db9 commit 68044bb

File tree

10 files changed

+128
-207
lines changed

10 files changed

+128
-207
lines changed

.eslintrc.js

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,3 @@
1-
const tslintConfigRulesDirectory = [
2-
'node_modules/tslint/lib/rules',
3-
// 'node_modules/tslint-clean-code/dist/src',
4-
// 'node_modules/tslint-microsoft-contrib',
5-
];
6-
const tslintConfigRules = Object.assign({},
7-
require('tslint/lib/configs/recommended').rules,
8-
// require('tslint-clean-code/recommended_ruleset').rules,
9-
// require('tslint-microsoft-contrib/recommended_ruleset').rules,
10-
{
11-
'member-access': false,
12-
'ordered-imports': false,
13-
'quotemark': false,
14-
'no-var-keyword': false,
15-
'object-literal-sort-keys': false,
16-
'no-console': false,
17-
'arrow-parens': false,
18-
'max-line-length': false,
19-
'object-literal-key-quotes': false,
20-
'no-shadowed-variable': false,
21-
'only-arrow-functions': false,
22-
'no-var-requires': false,
23-
'semicolon': false,
24-
'interface-over-type-literal': false,
25-
'align': false,
26-
'trailing-comma': false,
27-
'typedef': false,
28-
'newline-before-return': false,
29-
'interface-name': false,
30-
}
31-
);
32-
331
module.exports = {
342
'root': true,
353
'env': {
@@ -49,18 +17,12 @@ module.exports = {
4917
'unicorn',
5018
'typescript',
5119
'import',
52-
'tslint',
5320
],
5421
'rules': {
5522
'no-undef': 0,
5623
'no-unused-vars': 0,
5724
'indent': 0,
5825
'unicorn/import-index': 0,
59-
'tslint/config': [1, {
60-
// tsconfigFile: 'tsconfig.json',
61-
rules: tslintConfigRules,
62-
rulesDirectory: tslintConfigRulesDirectory,
63-
}],
6426
'import/newline-after-import': 0,
6527
'import/no-duplicates': 1,
6628
'import/max-dependencies': [1, { 'max': 10 }],

package.json

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"scripts": {
99
"test": "npm run eslint && npm run tscheck && npm run test:r",
1010
"test:r": "npm run mocha -- src/*.spec.ts",
11-
"mocha": "node -r ts-node/register/transpile-only node_modules/mocha/bin/_mocha",
11+
"mocha": "node -r ts-node/register/transpile-only node_modules/mocha/bin/_mocha --timeout 5000",
1212
"test:w": "npm run mocha -- --watch-extensions ts --watch src/**/*.spec.ts",
1313
"test:d": "node --inspect-brk -r ts-node/register/transpile-only node_modules/mocha/bin/_mocha --no-timeouts src/**/*.spec.ts",
1414
"tscheck": "echo tscheck... && tsc --noEmit",
@@ -20,35 +20,29 @@
2020
"eslint:w": "chokidar \"src/**/*.ts\" --initial -c \"npm run eslint\"",
2121
"lint:w": "run-p tsclint:w eslint:w",
2222
"semantic-release": "semantic-release",
23-
"prepublishOnly": "npm run build",
23+
"prepublishOnly": "npm run build && sed -i -e 's/devDependencies/_devDependencies/g' package.json",
2424
"build": "tsc",
2525
"prebuild": "npm run clean",
2626
"clean": "rimraf dist",
2727
"commit": "git-cz"
2828
},
2929
"dependencies": {},
3030
"devDependencies": {
31-
"@semantic-release/changelog": "^2.1.1",
32-
"@semantic-release/git": "^6.0.1",
33-
"@semantic-release/npm": "^3.3.4",
34-
"@types/mocha": "^5.2.3",
35-
"@types/node": "^10.5.1",
31+
"@semantic-release/changelog": "^3.0.0",
32+
"@semantic-release/git": "^7.0.2",
33+
"@semantic-release/npm": "^5.0.2",
34+
"@types/mocha": "^5.2.5",
35+
"@types/node": "^10.9.1",
3636
"chokidar-cli": "^1.2.0",
37-
"conventional-changelog-eslint": "^3.0.0",
38-
"cz-adapter-eslint": "^0.1.2",
39-
"eslint": "^5.0.1",
40-
"eslint-plugin-import": "^2.13.0",
41-
"eslint-plugin-tslint": "^2.1.0",
37+
"eslint": "^5.4.0",
38+
"eslint-plugin-import": "^2.14.0",
4239
"eslint-plugin-typescript": "^0.12.0",
43-
"eslint-plugin-unicorn": "^4.0.3",
40+
"eslint-plugin-unicorn": "^6.0.0",
4441
"mocha": "^5.2.0",
4542
"npm-run-all": "^4.1.3",
4643
"rimraf": "^2.6.2",
47-
"semantic-release": "^15.6.0",
48-
"ts-node": "^7.0.0",
49-
"tslint": "^5.10.0",
50-
"tslint-clean-code": "^0.2.7",
51-
"tslint-microsoft-contrib": "^5.0.3",
44+
"semantic-release": "^15.9.9",
45+
"ts-node": "^7.0.1",
5246
"typescript": "^2.9.2",
5347
"typescript-eslint-parser": "^16.0.1"
5448
},
@@ -63,10 +57,9 @@
6357
"keywords": [],
6458
"release": {
6559
"generateNotes": {
66-
"preset": "eslint"
67-
},
68-
"analyzeCommits": {
69-
"preset": "eslint"
60+
"writerOpts": {
61+
"__keep": "me"
62+
}
7063
},
7164
"verifyConditions": [
7265
"@semantic-release/changelog",
@@ -92,7 +85,7 @@
9285
},
9386
"config": {
9487
"commitizen": {
95-
"path": "./node_modules/cz-adapter-eslint"
88+
"path": "cz-conventional-changelog"
9689
}
9790
}
9891
}

src/create-program.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import * as ts from 'typescript';
2+
import * as fs from 'fs';
3+
import * as path from 'path';
4+
5+
type CreateProgramArgument = {
6+
configFile: string;
7+
compilerOptions?: ts.CompilerOptions;
8+
projectDirectory?: string;
9+
};
10+
11+
export function createProgram({ configFile, projectDirectory = path.dirname(configFile), compilerOptions = {} }: CreateProgramArgument): ts.Program {
12+
const { config, error } = ts.readConfigFile(configFile, ts.sys.readFile);
13+
if (error !== undefined) {
14+
throw new Error(ts.formatDiagnostics([error], {
15+
getCanonicalFileName: f => f,
16+
getCurrentDirectory: process.cwd,
17+
getNewLine: () => '\n',
18+
}));
19+
}
20+
const parseConfigHost: ts.ParseConfigHost = {
21+
fileExists: (path: string) => {
22+
return fs.existsSync(path);
23+
},
24+
readDirectory: ts.sys.readDirectory,
25+
readFile: (file) => {
26+
return fs.readFileSync(file, 'utf8');
27+
},
28+
useCaseSensitiveFileNames: true,
29+
};
30+
config.compilerOptions = { ...(config.compilerOptions || {}), ...compilerOptions };
31+
const parsed = ts.parseJsonConfigFileContent(config, parseConfigHost, path.resolve(projectDirectory), {
32+
noEmit: true,
33+
sourceMap: false,
34+
inlineSources: false,
35+
inlineSourceMap: false,
36+
});
37+
if (parsed.errors !== undefined) {
38+
// ignore warnings and 'TS18003: No inputs were found in config file ...'
39+
const errors = parsed.errors.filter(d => d.category === ts.DiagnosticCategory.Error && d.code !== 18003);
40+
if (errors.length !== 0) {
41+
throw new Error(ts.formatDiagnostics(errors, {
42+
getCanonicalFileName: f => f,
43+
getCurrentDirectory: process.cwd,
44+
getNewLine: () => '\n',
45+
}));
46+
}
47+
}
48+
const host = ts.createCompilerHost(parsed.options, true);
49+
const program = ts.createProgram(parsed.fileNames, parsed.options, host);
50+
51+
return program;
52+
}

src/get-source-file.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import * as ts from 'typescript';
2+
3+
export function getSourceFile(program: ts.Program, fileName: string, sourceText?: string): ts.SourceFile {
4+
if (program !== undefined) {
5+
const sourceFile = program.getSourceFile(fileName);
6+
if (sourceFile) {
7+
return sourceFile;
8+
}
9+
}
10+
if (sourceText === undefined) {
11+
throw new Error(`Invalid source file: ${fileName}`);
12+
}
13+
return ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.ES5, true);
14+
}

src/index.spec.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,43 @@ it('smoke', () => {
99
assert(lib);
1010
});
1111

12+
it('create service no libs', () => {
13+
const configFile = `${root}/test-project/tsconfig-nolibs.json`;
14+
service = lib.createService({ configFile });
15+
assert(service);
16+
});
17+
18+
describe('tsconfig-files', () => {
19+
20+
before(() => {
21+
const configFile = `${root}/test-project/tsconfig-files.json`;
22+
service = lib.createService({ configFile });
23+
});
24+
25+
it('smoke create', () => {
26+
assert(service);
27+
});
28+
29+
it('get source file which are not in files', () => {
30+
const testFile = `${root}/test-project/file.spec.ts`;
31+
const sourceFile = service.getSourceFile(testFile);
32+
assert(sourceFile);
33+
});
34+
});
35+
1236
describe('create service', () => {
1337

1438
before(() => {
1539
const configFile = `${root}/test-project/tsconfig.json`;
1640
service = lib.createService({ configFile });
41+
});
42+
43+
it('smoke create', () => {
1744
assert(service);
1845
});
1946

2047
it('errors', () => {
2148
const testFile = `${root}/test-project/errors.ts`;
22-
service.update({ fileName: testFile });
2349
const sourceFile = service.getProgram().getSourceFile(testFile);
2450
assert(sourceFile);
2551
const diagnostics = service.getDiagnostics(testFile);
@@ -30,7 +56,6 @@ describe('create service', () => {
3056

3157
it('number', () => {
3258
const testFile = `${root}/test-project/number.ts`;
33-
service.update({ fileName: testFile });
3459
const sourceFile = service.getProgram().getSourceFile(testFile);
3560
assert(sourceFile);
3661
const diagnostics = service.getDiagnostics(testFile);
@@ -39,7 +64,6 @@ describe('create service', () => {
3964

4065
it('built in', () => {
4166
const testFile = `${root}/test-project/builtin.ts`;
42-
service.update({ fileName: testFile });
4367
const sourceFile = service.getProgram().getSourceFile(testFile);
4468
assert(sourceFile);
4569
const diagnostics = service.getDiagnostics(testFile);
@@ -48,7 +72,6 @@ describe('create service', () => {
4872

4973
it('types', () => {
5074
const testFile = `${root}/test-project/types.ts`;
51-
service.update({ fileName: testFile });
5275
const sourceFile = service.getProgram().getSourceFile(testFile);
5376
assert(sourceFile);
5477
const diagnostics = service.getDiagnostics(testFile);
@@ -57,7 +80,6 @@ describe('create service', () => {
5780

5881
it('decorator', () => {
5982
const testFile = `${root}/test-project/decorator.ts`;
60-
service.update({ fileName: testFile });
6183
const sourceFile = service.getProgram().getSourceFile(testFile);
6284
assert(sourceFile);
6385
const diagnostics = service.getDiagnostics(testFile);
@@ -66,7 +88,6 @@ describe('create service', () => {
6688

6789
it('global types', () => {
6890
const testFile = `${root}/test-project/global-types.ts`;
69-
service.update({ fileName: testFile });
7091
const sourceFile = service.getProgram().getSourceFile(testFile);
7192
assert(sourceFile);
7293
const diagnostics = service.getDiagnostics(testFile);
@@ -75,17 +96,10 @@ describe('create service', () => {
7596

7697
it('date', () => {
7798
const testFile = `${root}/test-project/date.ts`;
78-
service.update({ fileName: testFile });
7999
const sourceFile = service.getProgram().getSourceFile(testFile);
80100
assert(sourceFile);
81101
const diagnostics = service.getDiagnostics(testFile);
82102
assert.equal(diagnostics.length, 0);
83103
});
84104

85105
});
86-
87-
it('create service no libs', () => {
88-
const configFile = `${root}/test-project/tsconfig-nolibs.json`;
89-
service = lib.createService({ configFile });
90-
assert(service);
91-
});

0 commit comments

Comments
 (0)