forge-type 1.0.4 → 1.0.6

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/dist/cli.js CHANGED
@@ -4,37 +4,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- const commander_1 = require("commander");
8
7
  const fs_1 = __importDefault(require("fs"));
9
8
  const path_1 = __importDefault(require("path"));
10
- const index_1 = require("./index");
11
- const program = new commander_1.Command();
12
- program
13
- .name('forge-type-cli')
14
- .description('CLI for generating TypeScript types from JSON data')
15
- .version('1.0.0');
16
- program
17
- .command('generate')
18
- .description('Generate TypeScript type/interface for a model')
19
- .requiredOption('-m, --model <name>', 'Model name')
20
- .requiredOption('-d, --data <file>', 'Path to JSON file with model data')
21
- .option('-o, --output <dir>', 'Output directory', './types')
22
- .option('--modify', 'Modify existing type if exists', false)
23
- .action((options) => {
24
- const dataPath = path_1.default.resolve(process.cwd(), options.data);
25
- if (!fs_1.default.existsSync(dataPath)) {
26
- console.error('Data file not found:', dataPath);
27
- process.exit(1);
9
+ const node_fetch_1 = __importDefault(require("node-fetch"));
10
+ const interfaceGenerator_1 = require("./generator/interfaceGenerator");
11
+ const args = process.argv.slice(2);
12
+ const model = args[0];
13
+ const source = args[1]; // file or URL
14
+ if (!model || !source) {
15
+ console.error('Usage: forge-type User ./data.json OR https://api.com/user');
16
+ process.exit(1);
17
+ }
18
+ async function run() {
19
+ let data;
20
+ if (source?.startsWith('http')) {
21
+ const res = await (0, node_fetch_1.default)(source);
22
+ data = await res.json();
28
23
  }
29
- const jsonData = JSON.parse(fs_1.default.readFileSync(dataPath, 'utf-8'));
30
- const result = (0, index_1.createTypeFromData)(options.model, jsonData, { modify: options.modify });
31
- // Save to output directory
32
- const outputDir = path_1.default.resolve(process.cwd(), options.output);
33
- if (!fs_1.default.existsSync(outputDir))
34
- fs_1.default.mkdirSync(outputDir, { recursive: true });
35
- const outputPath = path_1.default.join(outputDir, `${options.model}.ts`);
36
- fs_1.default.writeFileSync(outputPath, result.type, 'utf-8');
37
- console.log('Type generated at:', outputPath);
38
- });
39
- program.parse(process.argv);
24
+ else {
25
+ data = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(source), 'utf-8'));
26
+ }
27
+ const output = (0, interfaceGenerator_1.generateInterface)(model, data);
28
+ const outPath = path_1.default.resolve('types', `${model}.ts`);
29
+ fs_1.default.mkdirSync('types', { recursive: true });
30
+ fs_1.default.writeFileSync(outPath, output);
31
+ console.log(`✔ Type generated: ${outPath}`);
32
+ }
33
+ run();
40
34
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,yCAAmC;AACnC,4CAAmB;AACnB,gDAAuB;AACvB,mCAA4C;AAE5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,cAAc,CAAC,oBAAoB,EAAE,YAAY,CAAC;KAClD,cAAc,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;KACxE,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,SAAS,CAAC;KAC3D,MAAM,CAAC,UAAU,EAAE,gCAAgC,EAAE,KAAK,CAAC;KAC3D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAA;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAEtF,2BAA2B;IAC3B,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3E,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,KAAK,CAAC,CAAA;IAC9D,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,4CAAmB;AACnB,gDAAuB;AACvB,4DAA8B;AAC9B,uEAAkE;AAElE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAElC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACrB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,cAAc;AAErC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAA;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,IAAI,IAAI,CAAA;IAER,IAAI,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAK,EAAC,MAAM,CAAC,CAAA;QAC/B,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,MAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,sCAAiB,EAAC,KAAM,EAAE,IAAI,CAAC,CAAA;IAE9C,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,KAAK,CAAC,CAAA;IACpD,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAEjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,GAAG,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaceGenerator.d.ts","sourceRoot":"","sources":["../../src/generator/interfaceGenerator.ts"],"names":[],"mappings":"AAgBA,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,MAAM,CAmER"}
1
+ {"version":3,"file":"interfaceGenerator.d.ts","sourceRoot":"","sources":["../../src/generator/interfaceGenerator.ts"],"names":[],"mappings":"AAgBA,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,MAAM,CAuDR"}
@@ -17,78 +17,55 @@ const allowedEnumFields = [
17
17
  function generateInterface(name, data, options) {
18
18
  const allInterfaces = [];
19
19
  const enumDefinitions = [];
20
- function helper(name, data) {
21
- let existingProps = {};
22
- if (options?.modify) {
23
- const existingContent = (0, fileWriter_1.readTypeFile)(name);
24
- if (existingContent)
25
- existingProps = parseInterface(existingContent);
26
- }
20
+ function helper(interfaceName, obj) {
21
+ if (generatedInterfaces.has(interfaceName))
22
+ return;
23
+ generatedInterfaces.add(interfaceName);
27
24
  const bodyLines = [];
28
- Object.entries(data).forEach(([key, value]) => {
29
- let typeStr = (0, inferType_1.inferType)(value, key);
25
+ Object.entries(obj).forEach(([key, value]) => {
30
26
  const optional = value === null || value === undefined ? '?' : '';
31
- // Handle nested arrays of objects
32
- if (Array.isArray(value) && typeof value[0] === 'object' && value[0] !== null) {
33
- const typeName = (0, opt_func_1.capitalize)((0, opt_func_1.singularize)(key));
34
- if (!generatedInterfaces.has(typeName)) {
35
- generatedInterfaces.add(typeName);
36
- helper(typeName, value[0]);
37
- Object.entries(value[0]).forEach(([k, v]) => {
38
- if (typeof v === 'string')
39
- detectEnum(k, v, enumDefinitions);
40
- });
41
- }
42
- typeStr = `${typeName}[]`;
27
+ let typeStr;
28
+ // Array of objects generate nested interface
29
+ if (Array.isArray(value) && value[0] && typeof value[0] === 'object') {
30
+ const nestedName = (0, opt_func_1.capitalize)((0, opt_func_1.singularize)(key));
31
+ helper(nestedName, value[0]);
32
+ typeStr = `${nestedName}[]`;
43
33
  }
44
- // Handle nested objects
45
- if (typeof value === 'object' && !Array.isArray(value) && value !== null) {
46
- typeStr = `{ ${Object.entries(value)
47
- .map(([k, v]) => {
48
- if (typeof v === 'string')
49
- detectEnum(k, v, enumDefinitions);
50
- return `${k}: ${(0, inferType_1.inferType)(v, k)};`;
51
- })
52
- .join(' ')} }`;
34
+ // Nested object → generate nested interface
35
+ else if (typeof value === 'object' && value !== null) {
36
+ const nestedName = (0, opt_func_1.capitalize)(key);
37
+ helper(nestedName, value);
38
+ typeStr = nestedName;
53
39
  }
54
- // Top-level enums
55
- if (typeof value === 'string') {
40
+ // Enum detection
41
+ else if (typeof value === 'string') {
56
42
  const enumType = detectEnum(key, value, enumDefinitions);
57
- if (enumType)
58
- typeStr = enumType;
43
+ typeStr = enumType ?? (0, inferType_1.inferType)(value, key);
44
+ }
45
+ // Primitive types
46
+ else {
47
+ typeStr = (0, inferType_1.inferType)(value, key);
59
48
  }
60
- existingProps[key] = typeStr;
61
49
  bodyLines.push(` ${key}${optional}: ${typeStr};`);
62
50
  });
63
- // Optional fields from existing interface
64
- Object.keys(existingProps).forEach(key => {
65
- if (!(key in data))
66
- bodyLines.push(` ${key}?: ${existingProps[key]};`);
67
- });
68
- const content = `export interface ${name} {\n${bodyLines.join('\n')}\n}`;
51
+ const content = `export interface ${interfaceName} {\n${bodyLines.join('\n')}\n}`;
69
52
  allInterfaces.push(content);
70
53
  }
71
- helper(name, data);
54
+ // Handle root arrays
55
+ if (Array.isArray(data)) {
56
+ if (data.length === 0)
57
+ throw new Error('Cannot generate interface from empty array');
58
+ helper(name, data[0]);
59
+ }
60
+ else {
61
+ helper(name, data);
62
+ }
72
63
  const finalContent = [...enumDefinitions, ...allInterfaces].join('\n\n');
73
- (0, fileWriter_1.saveTypeFile)(name, finalContent);
64
+ (0, fileWriter_1.saveTypeFile)(name, finalContent); // Save to file (CLI or fs)
74
65
  return finalContent;
75
66
  }
76
- function parseInterface(content) {
77
- const props = {};
78
- content.split('\n').forEach(line => {
79
- const match = line.trim().match(/^(\w+)\??:\s(.+);$/);
80
- if (match) {
81
- const [_, key, type] = match;
82
- if (key && type)
83
- props[key] = type;
84
- }
85
- });
86
- return props;
87
- }
88
67
  function detectEnum(key, value, enumDefinitions) {
89
- if (!allowedEnumFields.includes(key))
90
- return null;
91
- if (typeof value !== 'string')
68
+ if (!allowedEnumFields.includes(key) || typeof value !== 'string')
92
69
  return null;
93
70
  if (!fieldValuesMap[key])
94
71
  fieldValuesMap[key] = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"interfaceGenerator.js","sourceRoot":"","sources":["../../src/generator/interfaceGenerator.ts"],"names":[],"mappings":";;AAgBA,8CAuEC;AAvFD,kDAA8C;AAC9C,sDAAkE;AAClE,gDAA2D;AAE3D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;AAC7C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;AACxC,MAAM,cAAc,GAAgC,EAAE,CAAA;AAEtD,0BAA0B;AAC1B,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa;IACtF,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAC5C,eAAe,EAAE,eAAe,EAAE,gBAAgB;IAClD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,cAAc;CACtD,CAAA;AAED,SAAgB,iBAAiB,CAC/B,IAAY,EACZ,IAAS,EACT,OAA8B;IAE9B,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,MAAM,eAAe,GAAa,EAAE,CAAA;IAEpC,SAAS,MAAM,CAAC,IAAY,EAAE,IAAS;QACrC,IAAI,aAAa,GAA2B,EAAE,CAAA;QAE9C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,MAAM,eAAe,GAAG,IAAA,yBAAY,EAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,eAAe;gBAAE,aAAa,GAAG,cAAc,CAAC,eAAe,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAA;QAE9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5C,IAAI,OAAO,GAAG,IAAA,qBAAS,EAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACnC,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAEjE,kCAAkC;YAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9E,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,IAAA,sBAAW,EAAC,GAAG,CAAC,CAAC,CAAA;gBAC7C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;oBACjC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;oBAE1B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;wBAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ;4BAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAA;oBAC9D,CAAC,CAAC,CAAA;gBACJ,CAAC;gBACD,OAAO,GAAG,GAAG,QAAQ,IAAI,CAAA;YAC3B,CAAC;YAED,wBAAwB;YACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACzE,OAAO,GAAG,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;qBACjC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAA;oBAC5D,OAAO,GAAG,CAAC,KAAK,IAAA,qBAAS,EAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA;gBACpC,CAAC,CAAC;qBACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;YAClB,CAAC;YAED,kBAAkB;YAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA;gBACxD,IAAI,QAAQ;oBAAE,OAAO,GAAG,QAAQ,CAAA;YAClC,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;YAC5B,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QAEF,0CAA0C;QAC1C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,oBAAoB,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;QACxE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAElB,MAAM,YAAY,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxE,IAAA,yBAAY,EAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IAEhC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,KAAK,GAA2B,EAAE,CAAA;IACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACrD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAA;YAC5B,IAAI,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;QACpC,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAa,EAAE,eAAyB;IACvE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAA;IACzD,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAE9B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7D,eAAe,CAAC,IAAI,CAAC,eAAe,QAAQ,MAAM,SAAS,GAAG,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"interfaceGenerator.js","sourceRoot":"","sources":["../../src/generator/interfaceGenerator.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,2 @@
1
- export declare function createTypeFromData(name: string, data: any, options?: {
2
- modify?: boolean;
3
- }): {
4
- name: string;
5
- type: string;
6
- };
1
+ export {};
7
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE;;;EAoBzF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js CHANGED
@@ -1,27 +1,18 @@
1
1
  "use strict";
2
+ // import { generateInterface } from './generator/interfaceGenerator'
3
+ // import { saveTypeFile } from './storage/fileWriter'
2
4
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTypeFromData = createTypeFromData;
4
- const child_process_1 = require("child_process");
5
- const interfaceGenerator_1 = require("./generator/interfaceGenerator");
6
- function createTypeFromData(name, data, options) {
7
- const typeString = (0, interfaceGenerator_1.generateInterface)(name, data, options);
8
- // Trigger CLI to write file
9
- const args = [
10
- 'generate',
11
- '--model', name,
12
- '--data', JSON.stringify(data), // or path to a temp file
13
- '--output', './types',
14
- ];
15
- const cli = (0, child_process_1.spawn)('npx', ['forge-type-cli', ...args], { stdio: 'inherit' });
16
- cli.on('close', (code) => {
17
- if (code === 0)
18
- console.log('File created successfully via CLI');
19
- else
20
- console.error('CLI process failed');
21
- });
22
- return {
23
- name,
24
- type: typeString,
25
- };
26
- }
5
+ // export function createTypeFromData(
6
+ // name: string,
7
+ // data: any,
8
+ // options?: { modify?: boolean } // pass { modify: true } to update existing interface
9
+ // ) {
10
+ // const typeString = generateInterface(name, data, options)
11
+ // const filePath = saveTypeFile(name, typeString)
12
+ // return {
13
+ // name,
14
+ // filePath,
15
+ // type: typeString,
16
+ // }
17
+ // }
27
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAGA,gDAoBC;AAvBD,iDAAqC;AACrC,uEAAkE;AAElE,SAAgB,kBAAkB,CAAC,IAAY,EAAE,IAAS,EAAE,OAA8B;IACxF,MAAM,UAAU,GAAG,IAAA,sCAAiB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAEzD,4BAA4B;IAC5B,MAAM,IAAI,GAAG;QACX,UAAU;QACV,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,yBAAyB;QACzD,UAAU,EAAE,SAAS;KACtB,CAAA;IACD,MAAM,GAAG,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC3E,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;;YAC3D,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,UAAU;KACjB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sDAAsD;;AAEtD,sCAAsC;AACtC,kBAAkB;AAClB,eAAe;AACf,yFAAyF;AACzF,MAAM;AACN,8DAA8D;AAC9D,oDAAoD;AAEpD,aAAa;AACb,YAAY;AACZ,gBAAgB;AAChB,wBAAwB;AACxB,MAAM;AACN,IAAI"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/test/test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ // import { createTypeFromData } from '..'
3
+ // import { generateInterface } from '../generator/interfaceGenerator'
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ // const userData = {
6
+ // id: 1,
7
+ // name: 'John Doe',
8
+ // gender: 'male',
9
+ // role: 'admin',
10
+ // status: 'active',
11
+ // friends: [
12
+ // { id: 2, name: 'Jane Smith', age: '24', gender: 'female', city: 'many' }
13
+ // ],
14
+ // profile: { bio: 'I love art', website: 'https://example.com' }
15
+ // }
16
+ // // 1. Generate types with enums
17
+ // const typeResult = createTypeFromData('User', userData, { modify: true })
18
+ // console.log(typeResult)
19
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/test/test.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,sEAAsE;;AAEtE,qBAAqB;AACrB,WAAW;AACX,sBAAsB;AACtB,oBAAoB;AACpB,mBAAmB;AACnB,sBAAsB;AACtB,eAAe;AACf,+EAA+E;AAC/E,OAAO;AACP,mEAAmE;AACnE,IAAI;AAEJ,kCAAkC;AAClC,4EAA4E;AAC5E,0BAA0B"}
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "forge-type",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Automatically generates TypeScript interfaces and types from JSON data, with enum detection.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist"
9
9
  ],
10
+ "bin": {
11
+ "forge-type": "./dist/cli.js"
12
+ },
10
13
  "scripts": {
11
14
  "build": "tsc",
12
15
  "dev": "ts-node src/index.ts",
@@ -24,7 +27,8 @@
24
27
  "author": "Your Name",
25
28
  "license": "MIT",
26
29
  "dependencies": {
27
- "commander": "^14.0.2"
30
+ "commander": "^14.0.2",
31
+ "node-fetch": "^3.3.2"
28
32
  },
29
33
  "devDependencies": {
30
34
  "@types/node": "^25.0.3",