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 CHANGED
@@ -1,5 +1,4 @@
1
1
  [![Deploy to GitHub Pages](https://github.com/PhyberApex/slds-json-schema-renderer/actions/workflows/deploy.yml/badge.svg)](https://github.com/PhyberApex/slds-json-schema-renderer/actions/workflows/deploy.yml)
2
- [![Release](https://github.com/PhyberApex/slds-json-schema-renderer/actions/workflows/release.yml/badge.svg)](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
- const { program } = require('commander');
4
- const cli = require('../lib/cli');
5
- const pkg = require('../package.json');
3
+ import { program } from 'commander';
4
+ import { readFileSync } from 'fs';
5
+ import * as cli from '../lib/cli/index.js';
6
6
 
7
- program
8
- .version(pkg.version)
9
- .description('JSON Schema Documentation Generator CLI');
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
- .command('generate')
14
- .description('Generate documentation from JSON schema files')
15
- .option('-i, --input <directory>', 'Input directory containing JSON schema files', './schemas')
16
- .option('-o, --output <directory>', 'Output directory for the generated documentation', './docs')
17
- .option('-t, --title <title>', 'Documentation title', 'JSON Schema Documentation')
18
- .option('-d, --description <description>', 'Documentation description', '')
19
- .option('-v, --verbose', 'Enable verbose output', false)
20
- .action(cli.generate);
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
- .command('init')
25
- .description('Initialize a new documentation project')
26
- .action(() => {
27
- console.log('Initialize command not yet implemented');
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
- program.outputHelp();
35
- }
35
+ program.outputHelp();
36
+ }
@@ -1,110 +1,71 @@
1
- "use strict";
2
-
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
5
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
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(_x) {
24
- return _generate.apply(this, arguments);
25
- }
26
- function _generate() {
27
- _generate = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
28
- var input, output, title, description, verbose, schemas, typeStats, totalProperties, result;
29
- return _regeneratorRuntime().wrap(function _callee$(_context) {
30
- while (1) switch (_context.prev = _context.next) {
31
- case 0:
32
- input = options.input, output = options.output, title = options.title, description = options.description, verbose = options.verbose;
33
- _context.prev = 1;
34
- _context.next = 4;
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
- // Parse schema files from the input directory
40
- _context.next = 7;
41
- return schemaParser.parseDirectory(input, {
42
- verbose: verbose
43
- });
44
- case 7:
45
- schemas = _context.sent;
46
- if (!(schemas.length === 0)) {
47
- _context.next = 11;
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
- // Schema statistics
56
- if (verbose) {
57
- typeStats = {};
58
- totalProperties = 0;
59
- schemas.forEach(function (schema) {
60
- var type = schema.schema.type || 'unknown';
61
- typeStats[type] = (typeStats[type] || 0) + 1;
62
- if (schema.schema.properties) {
63
- totalProperties += Object.keys(schema.schema.properties).length;
64
- }
65
- });
66
- console.log(chalk.blue("\uD83D\uDCCA Schema Statistics:"));
67
- console.log(" - Total schemas: ".concat(schemas.length));
68
- console.log(" - Total properties: ".concat(totalProperties));
69
- console.log(" - Schema types: ".concat(Object.entries(typeStats).map(function (_ref) {
70
- var _ref2 = _slicedToArray(_ref, 2),
71
- type = _ref2[0],
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
- // Generate the HTML documentation
79
- _context.next = 16;
80
- return htmlGenerator.generate({
81
- schemas: schemas,
82
- outputDir: output,
83
- title: title,
84
- description: description
85
- });
86
- case 16:
87
- result = _context.sent;
88
- console.log(chalk.green("\u2705 Documentation generated successfully"));
89
- console.log("\uD83D\uDCD8 ".concat(result.schemasProcessed, " schemas documented"));
90
- console.log("\uD83D\uDCC1 Output: ".concat(path.resolve(output)));
91
- console.log("\uD83C\uDF10 Open ".concat(path.resolve(path.join(output, 'index.html')), " in your browser to view"));
92
- _context.next = 28;
93
- break;
94
- case 23:
95
- _context.prev = 23;
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
- module.exports = generate;
71
+ export { generate };
package/lib/cli/index.js CHANGED
@@ -1,6 +1,2 @@
1
- "use strict";
2
-
3
- var generate = require('./generate');
4
- module.exports = {
5
- generate: generate
6
- };
1
+ import { generate } from './generate.js';
2
+ export { generate };