Socket
Socket
Sign inDemoInstall

@peteradeojo/typegencli

Package Overview
Dependencies
86
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.2.3 to 0.3.0

109

dist/generator.js
"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

8

dist/ws.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc