@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.
- package/LICENSE +6 -0
- package/README.md +96 -0
- package/dist/get-interfaces.d.ts +6 -0
- package/dist/get-interfaces.d.ts.map +1 -0
- package/dist/get-interfaces.js +99 -0
- package/dist/get-interfaces.js.map +1 -0
- package/dist/get-names.d.ts +3 -0
- package/dist/get-names.d.ts.map +1 -0
- package/dist/get-names.js +147 -0
- package/dist/get-names.js.map +1 -0
- package/dist/get-type-structure.d.ts +5 -0
- package/dist/get-type-structure.d.ts.map +1 -0
- package/dist/get-type-structure.js +258 -0
- package/dist/get-type-structure.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/model.d.ts +62 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/util.d.ts +11 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +49 -0
- package/dist/util.js.map +1 -0
- package/package.json +40 -0
- package/src/get-interfaces.ts +121 -0
- package/src/get-names.ts +218 -0
- package/src/get-type-structure.ts +308 -0
- package/src/index.ts +39 -0
- package/src/model.ts +65 -0
- package/src/util.ts +63 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-type-structure.js","sourceRoot":"","sources":["../src/get-type-structure.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/model.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
package/dist/util.js.map
ADDED
|
@@ -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
|
+
}
|
package/src/get-names.ts
ADDED
|
@@ -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
|
+
}
|