Skip to content

Commit c741be3

Browse files
committed
update style and naming
1 parent b760a8a commit c741be3

28 files changed

+606
-620
lines changed

Diff for: .eslintrc.js

+41-41
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
module.exports = {
2-
parser: "@typescript-eslint/parser",
3-
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
4-
env: {
5-
browser: true,
6-
node: true,
7-
},
8-
parserOptions: {
9-
ecmaVersion: 2018,
10-
sourceType: "module",
11-
},
12-
rules: {
13-
"@typescript-eslint/explicit-module-boundary-types": "off",
14-
"@typescript-eslint/explicit-function-return-type": "off",
15-
"@typescript-eslint/no-explicit-any": "off",
16-
"@typescript-eslint/prefer-for-of": "error",
17-
"@typescript-eslint/no-require-imports": "error",
18-
"@typescript-eslint/no-parameter-properties": "off",
19-
"no-unused-vars": "off",
20-
"@typescript-eslint/no-unused-vars": [
21-
"error",
22-
{
23-
vars: "all",
24-
args: "none",
25-
ignoreRestSiblings: true,
26-
},
27-
],
28-
"@typescript-eslint/no-object-literal-type-assertion": "off",
29-
"@typescript-eslint/no-namespace": "error",
30-
"@typescript-eslint/no-non-null-assertion": "off",
31-
"max-len": ["error", { code: 120, tabWidth: 4 }],
32-
"no-alert": "error",
33-
"prefer-const": "error",
34-
"no-return-assign": "error",
35-
"no-useless-call": "error",
36-
"no-shadow": "error",
37-
"no-useless-concat": "error",
38-
"no-undef": "off",
39-
"no-prototype-builtins": "off",
40-
"prettier/prettier": "error",
41-
},
42-
};
2+
parser: "@typescript-eslint/parser",
3+
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
4+
env: {
5+
browser: true,
6+
node: true,
7+
},
8+
parserOptions: {
9+
ecmaVersion: 2018,
10+
sourceType: "module",
11+
},
12+
rules: {
13+
"@typescript-eslint/explicit-module-boundary-types": "off",
14+
"@typescript-eslint/explicit-function-return-type": "off",
15+
"@typescript-eslint/no-explicit-any": "off",
16+
"@typescript-eslint/prefer-for-of": "error",
17+
"@typescript-eslint/no-require-imports": "error",
18+
"@typescript-eslint/no-parameter-properties": "off",
19+
"no-unused-vars": "off",
20+
"@typescript-eslint/no-unused-vars": [
21+
"error",
22+
{
23+
vars: "all",
24+
args: "none",
25+
ignoreRestSiblings: true,
26+
},
27+
],
28+
"@typescript-eslint/no-object-literal-type-assertion": "off",
29+
"@typescript-eslint/no-namespace": "error",
30+
"@typescript-eslint/no-non-null-assertion": "off",
31+
"max-len": ["error", { code: 120, tabWidth: 2 }],
32+
"no-alert": "error",
33+
"prefer-const": "error",
34+
"no-return-assign": "error",
35+
"no-useless-call": "error",
36+
"no-shadow": "error",
37+
"no-useless-concat": "error",
38+
"no-undef": "off",
39+
"no-prototype-builtins": "off",
40+
"prettier/prettier": "error",
41+
},
42+
};

Diff for: .prettierrc.json

+2-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,6 @@
11
{
22
"trailingComma": "es5",
33
"printWidth": 120,
4-
"tabWidth": 4,
5-
"endOfLine": "lf",
6-
"overrides": [
7-
{
8-
"files": "*.json",
9-
"options": {
10-
"tabWidth": 2
11-
}
12-
},
13-
{
14-
"files": "*.yml",
15-
"options": {
16-
"tabWidth": 2
17-
}
18-
}
19-
]
4+
"tabWidth": 2,
5+
"endOfLine": "lf"
206
}

Diff for: babel.config.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = {
2-
presets: [["@babel/preset-env", { targets: { node: "current" } }], "@babel/preset-typescript"],
3-
};
2+
presets: [["@babel/preset-env", { targets: { node: "current" } }], "@babel/preset-typescript"],
3+
};

Diff for: index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export * from "./src/Config";
2-
export * from "./src/JsonGenerator";
2+
export * from "./src/Generator";
33
export * from "./src/NodeGenerator";
44
export * from "./src/NodeVisitor";
55

Diff for: jest.config.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
module.exports = {
2-
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
3-
moduleFileExtensions: ["js", "ts", "json"],
4-
testPathIgnorePatterns: ["<rootDir>/dist/", "<rootDir>/node_modules/", "<rootDir>/build/"],
5-
coverageDirectory: "./coverage/",
6-
collectCoverage: false,
7-
testEnvironment: "node",
8-
transform: {
9-
".*": "babel-jest",
10-
},
11-
};
2+
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
3+
moduleFileExtensions: ["js", "ts", "json"],
4+
testPathIgnorePatterns: ["<rootDir>/dist/", "<rootDir>/node_modules/", "<rootDir>/build/"],
5+
coverageDirectory: "./coverage/",
6+
collectCoverage: false,
7+
testEnvironment: "node",
8+
transform: {
9+
".*": "babel-jest",
10+
},
11+
};

Diff for: package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"test:coverage": "jest test/ --collectCoverage=true",
6464
"test:node": "mocha",
6565
"test:generate-schema": "\"./node_modules/.bin/ts-json-schema-generator\" --path \"test/extra/model/model.ts\" --type \"Model\" --out \"test/extra/model/schema.json\" --additional-properties",
66-
"lint": "eslint {src,test}/**/*.ts",
67-
"format": "yarn lint --fix"
66+
"lint": "eslint {src,test}/**/*.*",
67+
"format": "eslint {src,test}/**/*.ts --fix"
6868
}
6969
}

Diff for: src/Config.ts

+21-21
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
import { JSONSchema7TypeName } from "json-schema";
22

33
export type Config = {
4-
reflectionName?: string;
5-
reflectionType?: "none" | "property" | "function";
6-
typePriorities?: Record<JSONSchema7TypeName, number>;
7-
generatePrimitives?: "required" | "always";
8-
generateConst?: "required" | "always";
9-
generateDefault?: "required" | "always";
4+
reflectionName?: string;
5+
reflectionType?: "none" | "property" | "function";
6+
typePriorities?: Record<JSONSchema7TypeName, number>;
7+
generatePrimitives?: "required" | "always";
8+
generateConst?: "required" | "always";
9+
generateDefault?: "required" | "always";
1010
};
1111

1212
export const DEFAULT_CONFIG: Config = {
13-
reflectionName: "$schema",
14-
reflectionType: "none",
15-
typePriorities: {
16-
null: 60,
17-
string: 50,
18-
number: 40,
19-
integer: 30,
20-
boolean: 20,
21-
array: 10,
22-
object: 0,
23-
},
24-
generatePrimitives: "required",
25-
generateConst: "required",
26-
generateDefault: "required",
13+
reflectionName: "$schema",
14+
reflectionType: "none",
15+
typePriorities: {
16+
null: 60,
17+
string: 50,
18+
number: 40,
19+
integer: 30,
20+
boolean: 20,
21+
array: 10,
22+
object: 0,
23+
},
24+
generatePrimitives: "required",
25+
generateConst: "required",
26+
generateDefault: "required",
2727
};
2828

2929
export type ResolvedConfig = Required<Config> & {
30-
fallbackType: JSONSchema7TypeName;
30+
fallbackType: JSONSchema7TypeName;
3131
};

Diff for: src/Generator.ts

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { createNodeGenerator, NodeGenerator } from "./NodeGenerator";
2+
import { BaseNodeVisitor } from "./NodeVisitor";
3+
import { JSONSchema7, JSONSchema7TypeName } from "json-schema";
4+
import { Config, DEFAULT_CONFIG, ResolvedConfig } from "./Config";
5+
6+
export class Generator {
7+
protected readonly config: ResolvedConfig;
8+
9+
constructor(
10+
protected readonly schema: JSONSchema7,
11+
config?: Config,
12+
protected readonly nodeGenerator: NodeGenerator = createNodeGenerator()
13+
) {
14+
this.config = Generator.resolveConfig(config);
15+
}
16+
17+
static resolveConfig(config: Config = {}): ResolvedConfig {
18+
const resolvedConfig = <ResolvedConfig>{
19+
...DEFAULT_CONFIG,
20+
...config,
21+
};
22+
resolvedConfig.fallbackType = <JSONSchema7TypeName>Object.entries(resolvedConfig.typePriorities).reduce(
23+
(current, entry) => {
24+
const [type, priority] = entry;
25+
if (priority < current.min) {
26+
current.type = type;
27+
current.min = priority;
28+
}
29+
return current;
30+
},
31+
{ min: Number.MAX_SAFE_INTEGER, type: "object" }
32+
).type;
33+
34+
return resolvedConfig;
35+
}
36+
37+
generate(path?: string): any {
38+
const visitor = new RootNodeVisitor(this.schema, this.config, <NodeGenerator>this.nodeGenerator, path);
39+
return <NodeGenerator>this.nodeGenerator?.generate(this.schema, visitor);
40+
}
41+
}
42+
43+
class RootNodeVisitor extends BaseNodeVisitor {
44+
constructor(
45+
protected readonly schema: JSONSchema7,
46+
protected readonly config: ResolvedConfig,
47+
protected readonly nodeGenerator: NodeGenerator,
48+
protected readonly path: string = "/"
49+
) {
50+
super();
51+
}
52+
53+
getRootSchema(): JSONSchema7 {
54+
return this.schema;
55+
}
56+
57+
getNodeGenerator(): NodeGenerator {
58+
return this.nodeGenerator;
59+
}
60+
61+
getConfig(): ResolvedConfig {
62+
return this.config;
63+
}
64+
65+
visited(path: string): boolean {
66+
return path === this.path;
67+
}
68+
69+
getLocalPath(): string {
70+
return this.path;
71+
}
72+
}

Diff for: src/JsonGenerator.ts

-72
This file was deleted.

0 commit comments

Comments
 (0)