@kemdict/json-to-ts 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-type-structure.js","sourceRoot":"","sources":["../src/get-type-structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Options } from "./model.ts";
2
+ export declare function JsonToTS(json: any, options?: Options): string[];
3
+ export default JsonToTS;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,YAAY,CAAC;AAKjD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CA8B/D;AAED,eAAe,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ import { getTypeStructure, optimizeTypeStructure } from "./get-type-structure.js";
2
+ import { getInterfaceDescriptions, getInterfaceStringFromDescription } from "./get-interfaces.js";
3
+ import { getNames } from "./get-names.js";
4
+ import { isArray, isObject } from "./util.js";
5
+ export function JsonToTS(json, options) {
6
+ const state = {
7
+ keyName: options?.rootName ?? "RootObject",
8
+ export: !!options?.export,
9
+ useTypeAlias: !!options?.useTypeAlias,
10
+ lvl: 0,
11
+ };
12
+ /**
13
+ * Parsing currently works with (Objects) and (Array of Objects) not and primitive types and mixed arrays etc..
14
+ * so we shall validate, so we dont start parsing non Object type
15
+ */
16
+ const isArrayOfObjects = isArray(json) && json.length > 0 && json.reduce((a, b) => a && isObject(b), true);
17
+ if (!(isObject(json) || isArrayOfObjects)) {
18
+ throw new Error("Only (Object) and (Array of Object) are supported");
19
+ }
20
+ const typeStructure = getTypeStructure(json);
21
+ /**
22
+ * due to merging array types some types are switched out for merged ones
23
+ * so we delete the unused ones here
24
+ */
25
+ optimizeTypeStructure(typeStructure);
26
+ const names = getNames(typeStructure, state);
27
+ return getInterfaceDescriptions(typeStructure, names).map((description) => getInterfaceStringFromDescription({ ...description, state }));
28
+ }
29
+ export default JsonToTS;
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF,OAAO,EAAE,wBAAwB,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,UAAU,QAAQ,CAAC,IAAS,EAAE,OAAiB;IACnD,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,YAAY;QAC1C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM;QACzB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY;QACrC,GAAG,EAAE,CAAC;KACS,CAAC;IAElB;;;OAGG;IACH,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAErH,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C;;;OAGG;IACH,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAE7C,OAAO,wBAAwB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACxE,iCAAiC,CAAC,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,62 @@
1
+ export type TypeGroup = "primitive" | "array" | "object" | "date";
2
+ export type TypeGroupWithDescription = {
3
+ group: "primitive";
4
+ desc: undefined;
5
+ } | {
6
+ group: "array";
7
+ desc: TypeDescriptionWithArrayOfTypes;
8
+ } | {
9
+ group: "object";
10
+ desc: TypeDescriptionWithTypeObj;
11
+ };
12
+ export interface TypeDescription {
13
+ id: string;
14
+ isUnion?: boolean;
15
+ typeObj?: {
16
+ [index: string]: string;
17
+ };
18
+ arrayOfTypes?: string[];
19
+ }
20
+ export interface TypeDescriptionWithArrayOfTypes extends TypeDescription {
21
+ arrayOfTypes: string[];
22
+ }
23
+ export interface TypeDescriptionWithTypeObj extends TypeDescription {
24
+ typeObj: {
25
+ [index: string]: string;
26
+ };
27
+ }
28
+ export interface TypeStructure {
29
+ rootTypeId: string;
30
+ types: TypeDescription[];
31
+ }
32
+ export interface NameEntry {
33
+ id: string;
34
+ name: string;
35
+ }
36
+ export interface NameStructure {
37
+ rootName: string;
38
+ names: NameEntry[];
39
+ }
40
+ export interface InterfaceDescription {
41
+ name: string;
42
+ typeMap: object;
43
+ }
44
+ export interface Options {
45
+ /** The name of the generated root type */
46
+ rootName?: string;
47
+ /** Whether to export the root type. */
48
+ export?: boolean;
49
+ /** Whether to generate `type Foo = { ... }` instead of interface */
50
+ useTypeAlias?: boolean;
51
+ }
52
+ export interface State {
53
+ keyName: string;
54
+ export: boolean;
55
+ useTypeAlias: boolean;
56
+ lvl: number;
57
+ }
58
+ export interface KeyMetaData {
59
+ keyValue: string;
60
+ isOptional: boolean;
61
+ }
62
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAChC;IACE,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,+BAA+B,CAAA;CAAE,GACzD;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,+BAAgC,SAAQ,eAAe;IACtE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AACD,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IACjE,OAAO,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IAEtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB"}
package/dist/model.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":""}
package/dist/util.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { KeyMetaData, TypeDescription, TypeGroupWithDescription } from "./model.ts";
2
+ export declare function isHash(str: string): boolean;
3
+ export declare function onlyUnique<T>(value: T, index: number, self: T[]): boolean;
4
+ export declare function isArray(x: any): boolean;
5
+ export declare function isNonArrayUnion(typeName: string): boolean;
6
+ export declare function isObject(x: any): boolean;
7
+ export declare function isDate(x: any): x is Date;
8
+ export declare function parseKeyMetaData(key: string): KeyMetaData;
9
+ export declare function getTypeDescriptionGroup(desc: TypeDescription | undefined): TypeGroupWithDescription;
10
+ export declare function findTypeById(id: string, types: TypeDescription[]): TypeDescription | undefined;
11
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAEf,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,WAEjC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,WAE/D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,WAE7B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,WAI/C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,WAE9B;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,aAE5B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAczD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,GAAG,wBAAwB,CAQnG;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,SAAS,CAE9F"}
package/dist/util.js ADDED
@@ -0,0 +1,49 @@
1
+ export function isHash(str) {
2
+ return str.length === 40;
3
+ }
4
+ export function onlyUnique(value, index, self) {
5
+ return self.indexOf(value) === index;
6
+ }
7
+ export function isArray(x) {
8
+ return Object.prototype.toString.call(x) === "[object Array]";
9
+ }
10
+ export function isNonArrayUnion(typeName) {
11
+ const arrayUnionRegex = /^\(.*\)\[\]$/;
12
+ return typeName.includes(" | ") && !arrayUnionRegex.test(typeName);
13
+ }
14
+ export function isObject(x) {
15
+ return Object.prototype.toString.call(x) === "[object Object]" && x !== null;
16
+ }
17
+ export function isDate(x) {
18
+ return x instanceof Date;
19
+ }
20
+ export function parseKeyMetaData(key) {
21
+ const isOptional = key.endsWith("--?");
22
+ if (isOptional) {
23
+ return {
24
+ isOptional,
25
+ keyValue: key.slice(0, -3),
26
+ };
27
+ }
28
+ else {
29
+ return {
30
+ isOptional,
31
+ keyValue: key,
32
+ };
33
+ }
34
+ }
35
+ export function getTypeDescriptionGroup(desc) {
36
+ if (desc === undefined) {
37
+ return { group: "primitive", desc };
38
+ }
39
+ else if (desc.arrayOfTypes !== undefined) {
40
+ return { group: "array", desc: desc };
41
+ }
42
+ else {
43
+ return { group: "object", desc: desc };
44
+ }
45
+ }
46
+ export function findTypeById(id, types) {
47
+ return types.find((_) => _.id === id);
48
+ }
49
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,KAAQ,EAAE,KAAa,EAAE,IAAS;IAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAM;IAC5B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,eAAe,GAAG,cAAc,CAAC;IAEvC,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAM;IAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,IAAI,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAM;IAC3B,OAAO,CAAC,YAAY,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,GAAG;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAiC;IACvE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;SAAM,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAuC,EAAE,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAkC,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,KAAwB;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@kemdict/json-to-ts",
3
+ "description": "Convert json object to typescript interfaces",
4
+ "version": "0.1.0",
5
+ "author": "https://github.com/mariusalch",
6
+ "contributors": ["https://github.com/mariusalch", "Kisaragi Hiu <mail@kisaragi-hiu.com>"],
7
+ "maintainers": ["Kisaragi Hiu <mail@kisaragi-hiu.com>"],
8
+ "homepage": "https://github.com/kemdict/json-to-ts",
9
+ "keywords": ["typescript", "ts", "convert", "json", "util", "lib", "types"],
10
+ "type": "module",
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": ["src", "tsconfig.json", "dist", "README.md", "LICENSE", "package.json"],
20
+ "scripts": {
21
+ "build": "rm -rf ./dist && tsc -p tsconfig-build.json",
22
+ "test": "npm run build && node --test"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/kemdict/json-to-ts.git"
27
+ },
28
+ "bugs": {
29
+ "url": "https://github.com/kemdict/json-to-ts/issues"
30
+ },
31
+ "license": "ISC",
32
+ "dependencies": {
33
+ "pluralize": "^8.0.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^25.9.2",
37
+ "@types/pluralize": "^0.0.33",
38
+ "typescript": "^6.0.0"
39
+ }
40
+ }
@@ -0,0 +1,121 @@
1
+ import { isHash, findTypeById, isNonArrayUnion } from "./util.ts";
2
+ import type { InterfaceDescription, NameEntry, TypeStructure, KeyMetaData, Options, State } from "./model.ts";
3
+
4
+ function isKeyNameValid(keyName: string) {
5
+ const regex = /^[a-zA-Z_][a-zA-Z\d_]*$/;
6
+ return regex.test(keyName);
7
+ }
8
+
9
+ function parseKeyMetaData(key: string): KeyMetaData {
10
+ const isOptional = key.endsWith("--?");
11
+
12
+ if (isOptional) {
13
+ return {
14
+ isOptional,
15
+ keyValue: key.slice(0, -3),
16
+ };
17
+ } else {
18
+ return {
19
+ isOptional,
20
+ keyValue: key,
21
+ };
22
+ }
23
+ }
24
+
25
+ function findNameById(id: string, names: NameEntry[]): string {
26
+ const foundName = names.find((_) => _.id === id);
27
+ if (!foundName) throw new Error("Name not found");
28
+ return foundName.name;
29
+ }
30
+
31
+ function removeUndefinedFromUnion(unionTypeName: string) {
32
+ const typeNames = unionTypeName.split(" | ");
33
+ const undefinedIndex = typeNames.indexOf("undefined");
34
+ typeNames.splice(undefinedIndex, 1);
35
+ return typeNames.join(" | ");
36
+ }
37
+
38
+ function replaceTypeObjIdsWithNames(typeObj: { [index: string]: string }, names: NameEntry[]): object {
39
+ return (
40
+ Object.entries(typeObj)
41
+ // quote key if is invalid and question mark if optional from array merging
42
+ .map(([key, type]): [string, string, boolean] => {
43
+ const { isOptional, keyValue } = parseKeyMetaData(key);
44
+ const isValid = isKeyNameValid(keyValue);
45
+
46
+ const validName = isValid ? keyValue : `'${keyValue}'`;
47
+
48
+ return isOptional ? [`${validName}?`, type, isOptional] : [validName, type, isOptional];
49
+ })
50
+ // replace hashes with names referencing the hashes
51
+ .map(([key, type, isOptional]): [string, string, boolean] => {
52
+ if (!isHash(type)) {
53
+ return [key, type, isOptional];
54
+ }
55
+
56
+ const newType = findNameById(type, names);
57
+ return [key, newType, isOptional];
58
+ })
59
+ // if union has undefined, remove undefined and make type optional
60
+ .map(([key, type, isOptional]): [string, string, boolean] => {
61
+ if (!(isNonArrayUnion(type) && type.includes("undefined"))) {
62
+ return [key, type, isOptional];
63
+ }
64
+
65
+ const newType = removeUndefinedFromUnion(type);
66
+ const newKey = isOptional ? key : `${key}?`; // if already optional dont add question mark
67
+ return [newKey, newType, isOptional];
68
+ })
69
+ // make undefined optional and set type as any
70
+ .map(([key, type, isOptional]): [string, string, boolean] => {
71
+ if (type !== "undefined") {
72
+ return [key, type, isOptional];
73
+ }
74
+
75
+ const newType = "any";
76
+ const newKey = isOptional ? key : `${key}?`; // if already optional dont add question mark
77
+ return [newKey, newType, isOptional];
78
+ })
79
+ .reduce(
80
+ (agg, [key, value]) => {
81
+ agg[key] = value;
82
+ return agg;
83
+ },
84
+ {} as Record<string, string>
85
+ )
86
+ );
87
+ }
88
+
89
+ export function getInterfaceStringFromDescription({
90
+ name,
91
+ typeMap,
92
+ state,
93
+ }: InterfaceDescription & { state: State }): string {
94
+ const stringTypeMap = Object.entries(typeMap)
95
+ .map(([key, name]) => ` ${key}: ${name};\n`)
96
+ .reduce((a, b) => (a += b), "");
97
+
98
+ const useTypeAlias = state.useTypeAlias;
99
+ const exportKeyword = state.export && name === state.keyName ? "export " : "";
100
+ const declarationKeyWord = useTypeAlias ? "type" : "interface";
101
+ let result = `${exportKeyword}${declarationKeyWord} ${name}${useTypeAlias ? " =" : ""} {\n`;
102
+ result += stringTypeMap;
103
+ result += "}";
104
+
105
+ return result;
106
+ }
107
+
108
+ export function getInterfaceDescriptions(typeStructure: TypeStructure, names: NameEntry[]): InterfaceDescription[] {
109
+ return names
110
+ .map(({ id, name }) => {
111
+ const typeDescription = findTypeById(id, typeStructure.types);
112
+
113
+ if (typeDescription?.typeObj) {
114
+ const typeMap = replaceTypeObjIdsWithNames(typeDescription.typeObj, names);
115
+ return { name, typeMap };
116
+ } else {
117
+ return null;
118
+ }
119
+ })
120
+ .filter((_) => _ !== null);
121
+ }
@@ -0,0 +1,218 @@
1
+ import pluralize from "pluralize";
2
+
3
+ import type {
4
+ TypeStructure,
5
+ NameEntry,
6
+ NameStructure,
7
+ TypeDescription,
8
+ TypeDescriptionWithArrayOfTypes,
9
+ State,
10
+ } from "./model.ts";
11
+ import { getTypeDescriptionGroup, parseKeyMetaData, findTypeById, isHash } from "./util.ts";
12
+
13
+ function getName(
14
+ { rootTypeId, types }: TypeStructure,
15
+ state: State,
16
+ names: NameEntry[],
17
+ isInsideArray: boolean
18
+ ): NameStructure {
19
+ const typeDesc = types.find((_) => _.id === rootTypeId);
20
+
21
+ const { group, desc } = getTypeDescriptionGroup(typeDesc);
22
+ switch (group) {
23
+ case "array":
24
+ desc.arrayOfTypes.forEach((typeIdOrPrimitive, i) => {
25
+ getName(
26
+ { rootTypeId: typeIdOrPrimitive, types },
27
+ // to differenttiate array types
28
+ {
29
+ ...state,
30
+ lvl: state.lvl + 1,
31
+ keyName: i === 0 ? state.keyName : `${state.keyName}${i + 1}`,
32
+ },
33
+ names,
34
+ true
35
+ );
36
+ });
37
+ return {
38
+ rootName: getNameById(desc.id, state, isInsideArray, types, names),
39
+ names,
40
+ };
41
+
42
+ case "object":
43
+ Object.entries(desc.typeObj).forEach(([key, value]) => {
44
+ getName(
45
+ { rootTypeId: value, types },
46
+ {
47
+ ...state,
48
+ lvl: state.lvl + 1,
49
+ keyName: key,
50
+ },
51
+ names,
52
+ false
53
+ );
54
+ });
55
+ return {
56
+ rootName: getNameById(typeDesc!.id, state, isInsideArray, types, names),
57
+ names,
58
+ };
59
+
60
+ case "primitive":
61
+ // in this case rootTypeId is primitive type string (string, null, number, boolean)
62
+ return {
63
+ rootName: rootTypeId,
64
+ names,
65
+ };
66
+
67
+ default:
68
+ throw new Error("impossible");
69
+ }
70
+ }
71
+
72
+ export function getNames(typeStructure: TypeStructure, state: State): NameEntry[] {
73
+ return getName(typeStructure, state, [], false).names.reverse();
74
+ }
75
+
76
+ function getNameById(
77
+ id: string,
78
+ state: State,
79
+ isInsideArray: boolean,
80
+ types: TypeDescription[],
81
+ nameMap: NameEntry[]
82
+ ): string {
83
+ let nameEntry = nameMap.find((_) => _.id === id);
84
+
85
+ if (nameEntry) {
86
+ return nameEntry.name;
87
+ }
88
+
89
+ const typeDesc = findTypeById(id, types);
90
+ let name;
91
+ const { group, desc } = getTypeDescriptionGroup(typeDesc);
92
+ switch (group) {
93
+ case "array":
94
+ name = desc.isUnion ? getArrayName(desc, types, nameMap, state) : formatArrayName(desc, types, nameMap, state);
95
+ break;
96
+
97
+ case "object":
98
+ /**
99
+ * picking name for type in array requires to singularize that type name,
100
+ * and if not then no need to singularize
101
+ */
102
+ name = [state.keyName]
103
+ .map((key) => parseKeyMetaData(key).keyValue)
104
+ .map((name) => {
105
+ if (isInsideArray && state.lvl > 0) {
106
+ return pluralize.singular(name);
107
+ }
108
+ return name;
109
+ })
110
+ .map(pascalCase)
111
+ .map(normalizeInvalidTypeName)
112
+ .map(pascalCase) // needed because removed symbols might leave first character uncapitalized
113
+ .map((name) =>
114
+ uniqueByIncrement(
115
+ name,
116
+ nameMap.map(({ name }) => name)
117
+ )
118
+ )
119
+ .pop();
120
+ break;
121
+ }
122
+
123
+ if (name === undefined) throw new Error("Failed to get name");
124
+ nameMap.push({ id, name });
125
+ return name;
126
+ }
127
+
128
+ function pascalCase(name: string) {
129
+ return name
130
+ .split(/\s+/g)
131
+ .filter((_) => _ !== "")
132
+ .map(capitalize)
133
+ .reduce((a, b) => a + b, "");
134
+ }
135
+
136
+ function capitalize(name: string) {
137
+ return name.charAt(0).toUpperCase() + name.slice(1);
138
+ }
139
+
140
+ function normalizeInvalidTypeName(name: string): string {
141
+ if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(name)) {
142
+ return name;
143
+ } else {
144
+ const noSymbolsName = name.replace(/[^a-zA-Z0-9]/g, "");
145
+ const startsWithWordCharacter = /^[a-zA-Z]/.test(noSymbolsName);
146
+ return startsWithWordCharacter ? noSymbolsName : `_${noSymbolsName}`;
147
+ }
148
+ }
149
+
150
+ function uniqueByIncrement(name: string, names: string[]): string {
151
+ for (let i = 0; i < 1000; i++) {
152
+ const nameProposal = i === 0 ? name : `${name}${i + 1}`;
153
+ if (!names.includes(nameProposal)) {
154
+ return nameProposal;
155
+ }
156
+ }
157
+ throw new Error("Failed to propose new name");
158
+ }
159
+
160
+ function getArrayName(
161
+ typeDesc: TypeDescriptionWithArrayOfTypes,
162
+ types: TypeDescription[],
163
+ nameMap: NameEntry[],
164
+ state: State
165
+ ): string {
166
+ if (typeDesc.arrayOfTypes.length === 0) {
167
+ return "any";
168
+ } else if (typeDesc.arrayOfTypes.length === 1) {
169
+ const [idOrPrimitive] = typeDesc.arrayOfTypes;
170
+ return convertToReadableType(idOrPrimitive, types, nameMap, state);
171
+ } else {
172
+ return unionToString(typeDesc, types, nameMap, state);
173
+ }
174
+ }
175
+
176
+ function convertToReadableType(
177
+ idOrPrimitive: string,
178
+ types: TypeDescription[],
179
+ nameMap: NameEntry[],
180
+ state: State
181
+ ): string {
182
+ return isHash(idOrPrimitive)
183
+ ? // array keyName makes no difference in picking name for type
184
+ getNameById(idOrPrimitive, { ...state, keyName: "" }, true, types, nameMap)
185
+ : idOrPrimitive;
186
+ }
187
+
188
+ function unionToString(
189
+ typeDesc: TypeDescriptionWithArrayOfTypes,
190
+ types: TypeDescription[],
191
+ nameMap: NameEntry[],
192
+ state: State
193
+ ): string {
194
+ return typeDesc.arrayOfTypes.reduce((acc, type, i) => {
195
+ const readableTypeName = convertToReadableType(type, types, nameMap, state);
196
+ return i === 0 ? readableTypeName : `${acc} | ${readableTypeName}`;
197
+ }, "");
198
+ }
199
+
200
+ function formatArrayName(
201
+ typeDesc: TypeDescriptionWithArrayOfTypes,
202
+ types: TypeDescription[],
203
+ nameMap: NameEntry[],
204
+ state: State
205
+ ): string {
206
+ const innerTypeId = typeDesc.arrayOfTypes[0];
207
+ // const isMultipleTypeArray = findTypeById(innerTypeId, types).arrayOfTypes.length > 1
208
+ const isMultipleTypeArray =
209
+ isHash(innerTypeId) &&
210
+ findTypeById(innerTypeId, types)?.isUnion &&
211
+ (findTypeById(innerTypeId, types)?.arrayOfTypes?.length ?? 0) > 1;
212
+
213
+ const readableInnerType = getArrayName(typeDesc, types, nameMap, state);
214
+
215
+ return isMultipleTypeArray
216
+ ? `(${readableInnerType})[]` // add semicolons for union type
217
+ : `${readableInnerType}[]`;
218
+ }