slds-json-schema-renderer 1.0.2 → 1.0.4
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/README.md +0 -1
- package/bin/cli.js +22 -21
- package/lib/cli/generate.js +62 -101
- package/lib/cli/index.js +2 -6
- package/lib/frontend/bundle.css +1 -0
- package/lib/frontend/bundle.umd.cjs +1 -0
- package/lib/index.js +4 -10
- package/lib/templates/index.html +15 -15
- package/lib/utils/html-generator.js +86 -141
- package/lib/utils/schema-parser.js +126 -236
- package/package.json +46 -27
- package/src/templates/index.html +15 -15
- package/lib/frontend/bundle.mjs +0 -1009
- package/lib/frontend/bundle.umd.js +0 -1
- package/lib/frontend/style.css +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
[](https://github.com/PhyberApex/slds-json-schema-renderer/actions/workflows/deploy.yml)
|
|
2
|
-
[](https://github.com/PhyberApex/slds-json-schema-renderer/actions/workflows/release.yml)
|
|
3
2
|
|
|
4
3
|
# SLDS JSON Schema Renderer
|
|
5
4
|
|
package/bin/cli.js
CHANGED
|
@@ -1,35 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import { program } from 'commander';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import * as cli from '../lib/cli/index.js';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
// Read package.json
|
|
8
|
+
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url)));
|
|
9
|
+
|
|
10
|
+
program.version(pkg.version).description('JSON Schema Documentation Generator CLI');
|
|
10
11
|
|
|
11
12
|
// Add the generate command
|
|
12
13
|
program
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
.command('generate')
|
|
15
|
+
.description('Generate documentation from JSON schema files')
|
|
16
|
+
.option('-i, --input <directory>', 'Input directory containing JSON schema files', './schemas')
|
|
17
|
+
.option('-o, --output <directory>', 'Output directory for the generated documentation', './docs')
|
|
18
|
+
.option('-t, --title <title>', 'Documentation title', 'JSON Schema Documentation')
|
|
19
|
+
.option('-d, --description <description>', 'Documentation description', '')
|
|
20
|
+
.option('-v, --verbose', 'Enable verbose output', false)
|
|
21
|
+
.action(cli.generate);
|
|
21
22
|
|
|
22
23
|
// Add the init command for future implementation
|
|
23
24
|
program
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
.command('init')
|
|
26
|
+
.description('Initialize a new documentation project')
|
|
27
|
+
.action(() => {
|
|
28
|
+
console.log('Initialize command not yet implemented');
|
|
29
|
+
});
|
|
29
30
|
|
|
30
31
|
program.parse(process.argv);
|
|
31
32
|
|
|
32
33
|
// If no arguments, display help
|
|
33
34
|
if (!process.argv.slice(2).length) {
|
|
34
|
-
|
|
35
|
-
}
|
|
35
|
+
program.outputHelp();
|
|
36
|
+
}
|
package/lib/cli/generate.js
CHANGED
|
@@ -1,110 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
8
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
9
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
11
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
12
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
13
|
-
var fs = require('fs-extra');
|
|
14
|
-
var path = require('path');
|
|
15
|
-
var chalk = require('chalk');
|
|
16
|
-
var schemaParser = require('../utils/schema-parser');
|
|
17
|
-
var htmlGenerator = require('../utils/html-generator');
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import * as schemaParser from '../utils/schema-parser.js';
|
|
5
|
+
import * as htmlGenerator from '../utils/html-generator.js';
|
|
18
6
|
|
|
19
7
|
/**
|
|
20
8
|
* Generate documentation from JSON schema files
|
|
21
9
|
* @param {Object} options - Command options
|
|
22
10
|
*/
|
|
23
|
-
function generate(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return fs.ensureDir(output);
|
|
36
|
-
case 4:
|
|
37
|
-
console.log(chalk.blue("\uD83D\uDD0D Looking for JSON schema files in: ".concat(input)));
|
|
11
|
+
async function generate(options) {
|
|
12
|
+
const {
|
|
13
|
+
input,
|
|
14
|
+
output,
|
|
15
|
+
title,
|
|
16
|
+
description,
|
|
17
|
+
verbose
|
|
18
|
+
} = options;
|
|
19
|
+
try {
|
|
20
|
+
// Create output directory if it doesn't exist
|
|
21
|
+
await fs.ensureDir(output);
|
|
22
|
+
console.log(chalk.blue(`🔍 Looking for JSON schema files in: ${input}`));
|
|
38
23
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
console.log(chalk.yellow("\u26A0\uFE0F No valid JSON schema files found in ".concat(input)));
|
|
51
|
-
return _context.abrupt("return");
|
|
52
|
-
case 11:
|
|
53
|
-
console.log(chalk.green("\u2705 Found and parsed ".concat(schemas.length, " JSON schema files")));
|
|
24
|
+
// Parse schema files from the input directory
|
|
25
|
+
const schemas = await schemaParser.parseDirectory(input, {
|
|
26
|
+
verbose
|
|
27
|
+
});
|
|
28
|
+
if (schemas.length === 0) {
|
|
29
|
+
console.log(chalk.yellow(`⚠️ No valid JSON schema files found in ${input}`));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(chalk.green(`✅ Found and parsed ${schemas.length} JSON schema files`));
|
|
54
33
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
count = _ref2[1];
|
|
73
|
-
return "".concat(type, " (").concat(count, ")");
|
|
74
|
-
}).join(', ')));
|
|
75
|
-
}
|
|
76
|
-
console.log(chalk.blue("\uD83D\uDD28 Generating HTML documentation..."));
|
|
34
|
+
// Schema statistics
|
|
35
|
+
if (verbose) {
|
|
36
|
+
const typeStats = {};
|
|
37
|
+
let totalProperties = 0;
|
|
38
|
+
schemas.forEach(schema => {
|
|
39
|
+
const type = schema.schema.type || 'unknown';
|
|
40
|
+
typeStats[type] = (typeStats[type] || 0) + 1;
|
|
41
|
+
if (schema.schema.properties) {
|
|
42
|
+
totalProperties += Object.keys(schema.schema.properties).length;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
console.log(chalk.blue(`📊 Schema Statistics:`));
|
|
46
|
+
console.log(` - Total schemas: ${schemas.length}`);
|
|
47
|
+
console.log(` - Total properties: ${totalProperties}`);
|
|
48
|
+
console.log(` - Schema types: ${Object.entries(typeStats).map(([type, count]) => `${type} (${count})`).join(', ')}`);
|
|
49
|
+
}
|
|
50
|
+
console.log(chalk.blue(`🔨 Generating HTML documentation...`));
|
|
77
51
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
_context.t0 = _context["catch"](1);
|
|
97
|
-
console.error(chalk.red("\u274C Error generating documentation: ".concat(_context.t0.message)));
|
|
98
|
-
if (verbose) {
|
|
99
|
-
console.error(_context.t0);
|
|
100
|
-
}
|
|
101
|
-
process.exit(1);
|
|
102
|
-
case 28:
|
|
103
|
-
case "end":
|
|
104
|
-
return _context.stop();
|
|
105
|
-
}
|
|
106
|
-
}, _callee, null, [[1, 23]]);
|
|
107
|
-
}));
|
|
108
|
-
return _generate.apply(this, arguments);
|
|
52
|
+
// Generate the HTML documentation
|
|
53
|
+
const result = await htmlGenerator.generate({
|
|
54
|
+
schemas,
|
|
55
|
+
outputDir: output,
|
|
56
|
+
title,
|
|
57
|
+
description
|
|
58
|
+
});
|
|
59
|
+
console.log(chalk.green(`✅ Documentation generated successfully`));
|
|
60
|
+
console.log(`📘 ${result.schemasProcessed} schemas documented`);
|
|
61
|
+
console.log(`📁 Output: ${path.resolve(output)}`);
|
|
62
|
+
console.log(`🌐 Open ${path.resolve(path.join(output, 'index.html'))} in your browser to view`);
|
|
63
|
+
} catch (err) {
|
|
64
|
+
console.error(chalk.red(`❌ Error generating documentation: ${err.message}`));
|
|
65
|
+
if (verbose) {
|
|
66
|
+
console.error(err);
|
|
67
|
+
}
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
109
70
|
}
|
|
110
|
-
|
|
71
|
+
export { generate };
|
package/lib/cli/index.js
CHANGED