@peteradeojo/typegencli
Advanced tools
Comparing version 0.2.3 to 0.3.0
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.generateType = void 0; | ||
exports.Typegen = exports.generateType = void 0; | ||
const capitalize = (str) => { | ||
if (str.length < 1) | ||
return str; | ||
return str[0].toUpperCase() + str.substring(1); | ||
}; | ||
/** | ||
* | ||
* @param item | ||
* @returns "null" if null | 1 if array | 0 if object | -1 if primitive | ||
*/ | ||
const checkIsArray = (item) => item === null | ||
@@ -11,5 +21,7 @@ ? 'null' | ||
: -1; | ||
const generateObjectType = (item) => { | ||
const generateObjectType = (item, exclude) => { | ||
let text = '{\n'; | ||
for (let i of Object.keys(item)) { | ||
if (exclude === null || exclude === void 0 ? void 0 : exclude.includes(i)) | ||
continue; | ||
text += `${i}: ` + (0, exports.generateType)(item[i]) + ';\n'; | ||
@@ -43,3 +55,3 @@ } | ||
}; | ||
const generateType = (item) => { | ||
const generateType = (item, exclude) => { | ||
const isArray = checkIsArray(item); | ||
@@ -58,2 +70,93 @@ if (isArray == 1) { | ||
exports.generateType = generateType; | ||
class Typegen { | ||
constructor() { | ||
this.discoveredTypes = new Set(); | ||
this.set = new Set(); | ||
this.map = new Map(); | ||
} | ||
nestedObject(obj) { | ||
const c = checkIsArray(obj); | ||
if (c !== 0) { | ||
return false; | ||
} | ||
const nests = []; | ||
for (let i of Object.keys(obj)) { | ||
const c = checkIsArray(obj[i]); | ||
if (c == 0) | ||
nests.push(i); | ||
} | ||
return nests.length > 0 ? nests : false; | ||
} | ||
discovery(data, name) { | ||
let d = {}; | ||
if (checkIsArray(data) === 1) { | ||
data.forEach((datum) => { | ||
d = Object.assign(Object.assign({}, d), datum); | ||
}); | ||
// this.discovery(data[0], name); | ||
// return; | ||
} | ||
else { | ||
d = data; | ||
} | ||
const nests = this.nestedObject(d); | ||
if (nests) { | ||
nests.forEach((nest) => { | ||
this.discovery(d[nest], nest); | ||
d[nest] = 'discovered:' + nest; | ||
}); | ||
this.discovery(d, name); | ||
} | ||
else { | ||
this.discoveredTypes.add({ | ||
name: name || String(this.discoveredTypes.size + 1), | ||
src: d, | ||
}); | ||
} | ||
} | ||
generateFromObject(obj) { } | ||
generate(data, name) { | ||
// console.log(data, name); | ||
let t = '{\n'; | ||
for (let i of Object.keys(data)) { | ||
// console.log(i); | ||
const cx = { | ||
name: i, | ||
src: data[i], | ||
}; | ||
console.log(cx); | ||
console.log(this.discoveredTypes.has(cx)); | ||
} | ||
} | ||
resolveTypes(data) { | ||
let t = '{\n'; | ||
for (let i of Object.keys(data)) { | ||
if (typeof data[i] == 'string') { | ||
if (data[i].includes('discovered:')) { | ||
const rType = capitalize(data[i].split(':')[1]); | ||
t += `${i}: ${rType};\n`; | ||
} | ||
else { | ||
t += `${i}: ${(0, exports.generateType)(data[i])};\n`; | ||
} | ||
} | ||
} | ||
t += '}'; | ||
return t; | ||
} | ||
printTypes() { | ||
let t = ''; | ||
this.discoveredTypes.forEach((d) => { | ||
t += `type ${capitalize(d.name)} = ${this.resolveTypes(d.src)}\n\n`; | ||
}); | ||
return t; | ||
} | ||
resolve(data, name = 'Top') { | ||
this.discoveredTypes = new Set(); | ||
this.discovery(data, name); | ||
console.log(`Discovered ${this.discoveredTypes.size} nested types`); | ||
return this.printTypes(); | ||
} | ||
} | ||
exports.Typegen = Typegen; | ||
//# sourceMappingURL=generator.js.map |
@@ -37,2 +37,3 @@ "use strict"; | ||
const prompt = (0, prompt_sync_1.default)(); | ||
const generator = new generator_1.Typegen(); | ||
wss = new ws_1.WebSocketServer({ | ||
@@ -47,3 +48,4 @@ port, | ||
const body = JSON.parse(data.toString()); | ||
const generated = `type ${body.name} = ` + (0, generator_1.generateType)(body.data); | ||
// const generated = `type ${body.name} = ` + generateType(body.data); | ||
const generated = generator.resolve(body.data, body.name); | ||
console.log(`\n${generated}\n`); | ||
@@ -80,5 +82,3 @@ socket.send(JSON.stringify({ data: generated, directive: 'print' }), { | ||
try { | ||
(0, fs_1.writeFileSync)(`./typegen/${name}.ts`, gen, { | ||
// flag: "" | ||
}); | ||
(0, fs_1.writeFileSync)(`./typegen/${name}.ts`, gen); | ||
} | ||
@@ -85,0 +85,0 @@ catch (err) { |
{ | ||
"name": "@peteradeojo/typegencli", | ||
"version": "0.2.03", | ||
"version": "0.3.0", | ||
"main": "dist/index.js", | ||
@@ -5,0 +5,0 @@ "bin": { |
@@ -56,2 +56,4 @@ # TypeGen | ||
## Demo Video | ||
Watch the demo [here](https://youtube.com/) | ||
Watch the demo | ||
https://twitter.com/i/status/1759724420602491141 |
@@ -0,1 +1,11 @@ | ||
const capitalize = (str: string) => { | ||
if (str.length < 1) return str; | ||
return str[0].toUpperCase() + str.substring(1); | ||
}; | ||
/** | ||
* | ||
* @param item | ||
* @returns "null" if null | 1 if array | 0 if object | -1 if primitive | ||
*/ | ||
const checkIsArray = (item: any) => | ||
@@ -10,5 +20,6 @@ item === null | ||
const generateObjectType = (item: any) => { | ||
const generateObjectType = (item: any, exclude?: string[]) => { | ||
let text = '{\n'; | ||
for (let i of Object.keys(item)) { | ||
if (exclude?.includes(i)) continue; | ||
text += `${i}: ` + generateType(item[i]) + ';\n'; | ||
@@ -47,3 +58,3 @@ } | ||
export const generateType = (item: any) => { | ||
export const generateType = (item: any, exclude?: string) => { | ||
const isArray = checkIsArray(item); | ||
@@ -63,2 +74,110 @@ if (isArray == 1) { | ||
return typeof item; | ||
}; | ||
}; | ||
export class Typegen { | ||
private set: Set<unknown>; | ||
private map: Map<string, unknown>; | ||
private discoveredTypes: Set<{ name: string; t?: string; src?: any }> = | ||
new Set(); | ||
constructor() { | ||
this.set = new Set(); | ||
this.map = new Map(); | ||
} | ||
private nestedObject(obj: any) { | ||
const c = checkIsArray(obj); | ||
if (c !== 0) { | ||
return false; | ||
} | ||
const nests = []; | ||
for (let i of Object.keys(obj)) { | ||
const c = checkIsArray(obj[i]); | ||
if (c == 0) nests.push(i); | ||
} | ||
return nests.length > 0 ? nests : false; | ||
} | ||
discovery(data: any, name?: string): any { | ||
let d: any = {}; | ||
if (checkIsArray(data) === 1) { | ||
data.forEach((datum: any) => { | ||
d = { ...d, ...datum }; | ||
}); | ||
// this.discovery(data[0], name); | ||
// return; | ||
} else { | ||
d = data; | ||
} | ||
const nests = this.nestedObject(d); | ||
if (nests) { | ||
nests.forEach((nest) => { | ||
this.discovery(d[nest], nest); | ||
d[nest] = 'discovered:' + nest; | ||
}); | ||
this.discovery(d, name); | ||
} else { | ||
this.discoveredTypes.add({ | ||
name: name || String(this.discoveredTypes.size + 1), | ||
src: d, | ||
}); | ||
} | ||
} | ||
generateFromObject(obj: { [key: string]: any }) {} | ||
generate(data: any, name?: string): any { | ||
// console.log(data, name); | ||
let t = '{\n'; | ||
for (let i of Object.keys(data)) { | ||
// console.log(i); | ||
const cx = { | ||
name: i, | ||
src: data[i], | ||
}; | ||
console.log(cx); | ||
console.log(this.discoveredTypes.has(cx)); | ||
} | ||
} | ||
resolveTypes(data: any) { | ||
let t = '{\n'; | ||
for (let i of Object.keys(data)) { | ||
if (typeof data[i] == 'string') { | ||
if (data[i].includes('discovered:')) { | ||
const rType = capitalize(data[i].split(':')[1]); | ||
t += `${i}: ${rType};\n`; | ||
} else { | ||
t += `${i}: ${generateType(data[i])};\n`; | ||
} | ||
} | ||
} | ||
t += '}'; | ||
return t; | ||
} | ||
printTypes() { | ||
let t = ''; | ||
this.discoveredTypes.forEach((d) => { | ||
t += `type ${capitalize(d.name)} = ${this.resolveTypes(d.src)}\n\n`; | ||
}); | ||
return t; | ||
} | ||
resolve(data: any, name = 'Top') { | ||
this.discoveredTypes = new Set(); | ||
this.discovery(data, name); | ||
console.log(`Discovered ${this.discoveredTypes.size} nested types`); | ||
return this.printTypes(); | ||
} | ||
} |
@@ -9,3 +9,3 @@ import { IncomingMessage, ServerResponse, createServer } from 'http'; | ||
cb?: () => boolean | ||
) => (name: string, data: string) => void; | ||
) => (name: string, data: any) => void; | ||
@@ -12,0 +12,0 @@ export const Server: TServer = (port: Number) => { |
@@ -6,3 +6,3 @@ import WebSocket, { WebSocketServer } from 'ws'; | ||
import { generateType } from './generator'; | ||
import { generateType, Typegen } from './generator'; | ||
@@ -12,2 +12,3 @@ let wss: WebSocketServer | undefined = undefined; | ||
const prompt = PromptSync(); | ||
const generator = new Typegen(); | ||
@@ -26,3 +27,4 @@ wss = new WebSocketServer({ | ||
const body = JSON.parse(data.toString()); | ||
const generated = `type ${body.name} = ` + generateType(body.data); | ||
// const generated = `type ${body.name} = ` + generateType(body.data); | ||
const generated = generator.resolve(body.data, body.name); | ||
console.log(`\n${generated}\n`); | ||
@@ -69,5 +71,3 @@ socket.send(JSON.stringify({ data: generated, directive: 'print' }), { | ||
try { | ||
writeFileSync(`./typegen/${name}.ts`, gen, { | ||
// flag: "" | ||
}); | ||
writeFileSync(`./typegen/${name}.ts`, gen); | ||
} catch (err) { | ||
@@ -74,0 +74,0 @@ console.error(err); |
@@ -13,4 +13,5 @@ { | ||
"exclude": [ | ||
"typegen" | ||
"typegen", | ||
"src/test.ts" | ||
] | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
41370
853
58
1
19