@uides/stepwise 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/cjs/cli/index.js +9 -1
- package/cjs/cli/validate/index.js +34 -16
- package/cjs/step/index.js +2 -34
- package/cjs/template/template/index.js +4 -1
- package/cli/index.js +9 -1
- package/cli/validate/index.js +35 -17
- package/cli/validate.d.ts +1 -1
- package/package.json +1 -1
- package/src/cli/index.ts +8 -1
- package/src/cli/validate.ts +20 -5
- package/src/common.ts +0 -1
- package/src/step.ts +5 -37
- package/src/template/template.ts +5 -2
- package/step/index.js +1 -33
- package/step.d.ts +9 -23543
- package/template/template/index.js +4 -1
- package/template/template-base.d.ts +1 -11767
- package/template/template-source.d.ts +1 -11767
- package/template/template.d.ts +32 -23556
package/cjs/cli/index.js
CHANGED
|
@@ -16,7 +16,15 @@ switch (command) {
|
|
|
16
16
|
console.error('No template provided');
|
|
17
17
|
process.exit(1);
|
|
18
18
|
}
|
|
19
|
-
(0, _validate["default"])(argv._[1]);
|
|
19
|
+
(0, _validate["default"])(argv._[1], 'api');
|
|
20
|
+
break;
|
|
21
|
+
case 'validate-source':
|
|
22
|
+
if (!argv._[1]) {
|
|
23
|
+
console.error('No template provided');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
(0, _validate["default"])(argv._[1], 'source');
|
|
27
|
+
;
|
|
20
28
|
break;
|
|
21
29
|
default:
|
|
22
30
|
console.error("Unknown command given: ".concat(command));
|
|
@@ -17,12 +17,12 @@ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
|
17
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
19
19
|
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" == (0, _typeof2["default"])(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 new 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((0, _typeof2["default"])(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 new 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 new 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; }
|
|
20
|
-
function validate(_x) {
|
|
20
|
+
function validate(_x, _x2) {
|
|
21
21
|
return _validate.apply(this, arguments);
|
|
22
22
|
}
|
|
23
23
|
function _validate() {
|
|
24
|
-
_validate = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(templateUrlOrName) {
|
|
25
|
-
var templateType, template, response, templatePath, errors;
|
|
24
|
+
_validate = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(templateUrlOrName, type) {
|
|
25
|
+
var templateType, template, response, templatePath, TemplateValidator, errors;
|
|
26
26
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
27
27
|
while (1) switch (_context.prev = _context.next) {
|
|
28
28
|
case 0:
|
|
@@ -41,41 +41,59 @@ function _validate() {
|
|
|
41
41
|
templateUrlOrName = "http://localhost/api/templates/".concat(templateUrlOrName);
|
|
42
42
|
return _context.abrupt("break", 11);
|
|
43
43
|
case 11:
|
|
44
|
+
template = {};
|
|
44
45
|
if (!(templateType === 'remote')) {
|
|
45
|
-
_context.next =
|
|
46
|
+
_context.next = 19;
|
|
46
47
|
break;
|
|
47
48
|
}
|
|
48
|
-
_context.next =
|
|
49
|
+
_context.next = 15;
|
|
49
50
|
return (0, _nodeFetch["default"])(templateUrlOrName)["catch"](function (err) {
|
|
50
51
|
return console.error("Could not fetch ".concat(templateUrlOrName, ". Error: ").concat(err));
|
|
51
52
|
});
|
|
52
|
-
case
|
|
53
|
+
case 15:
|
|
53
54
|
response = _context.sent;
|
|
54
|
-
_context.next =
|
|
55
|
+
_context.next = 18;
|
|
55
56
|
return response === null || response === void 0 ? void 0 : response.json()["catch"](function (err) {
|
|
56
57
|
return console.error("Could not parse JSON from ".concat(templateUrlOrName, ". Error: ").concat(err));
|
|
57
58
|
});
|
|
58
|
-
case 17:
|
|
59
|
-
template = _context.sent;
|
|
60
59
|
case 18:
|
|
60
|
+
template = _context.sent;
|
|
61
|
+
case 19:
|
|
61
62
|
if (!(templateType === 'local')) {
|
|
62
|
-
_context.next =
|
|
63
|
+
_context.next = 24;
|
|
63
64
|
break;
|
|
64
65
|
}
|
|
65
66
|
templatePath = _path["default"].join(process.cwd(), templateUrlOrName);
|
|
66
67
|
if (_fs["default"].existsSync(templatePath)) {
|
|
67
|
-
_context.next =
|
|
68
|
+
_context.next = 23;
|
|
68
69
|
break;
|
|
69
70
|
}
|
|
70
71
|
throw new Error("File ".concat(templatePath, " does not exist"));
|
|
71
|
-
case 22:
|
|
72
|
-
template = JSON.parse(_fs["default"].readFileSync(templatePath, 'utf8'));
|
|
73
72
|
case 23:
|
|
73
|
+
template = JSON.parse(_fs["default"].readFileSync(templatePath, 'utf8'));
|
|
74
|
+
case 24:
|
|
74
75
|
process.stdout.write('✅\n');
|
|
75
76
|
console.log(_chalk["default"].dim("Validating template..."));
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
|
|
77
|
+
TemplateValidator = _template.TemplateSource;
|
|
78
|
+
if (type === 'api') {
|
|
79
|
+
TemplateValidator = _template.Template;
|
|
80
|
+
} else if (type === 'source') {
|
|
81
|
+
TemplateValidator = _template.TemplateSource;
|
|
82
|
+
}
|
|
83
|
+
errors = valibot.safeParse(TemplateValidator, template).issues;
|
|
84
|
+
if (!(errors !== null && errors !== void 0 && errors.length)) {
|
|
85
|
+
console.log(_chalk["default"].greenBright('Template is valid!'));
|
|
86
|
+
} else if (errors) {
|
|
87
|
+
console.log(_chalk["default"].redBright('Template is invalid!'));
|
|
88
|
+
errors.forEach(function (issue) {
|
|
89
|
+
var _issue$path;
|
|
90
|
+
var path = issue === null || issue === void 0 ? void 0 : (_issue$path = issue.path) === null || _issue$path === void 0 ? void 0 : _issue$path.map(function (p) {
|
|
91
|
+
return p.key;
|
|
92
|
+
}).join('/');
|
|
93
|
+
console.log(_chalk["default"].redBright("".concat(template.refname, "/").concat(path, ": ").concat(issue.message)));
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
case 30:
|
|
79
97
|
case "end":
|
|
80
98
|
return _context.stop();
|
|
81
99
|
}
|
package/cjs/step/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.StepsSpec = exports.Steps = exports.StepDisplay = exports.Step = exports.IntroStep = void 0;
|
|
9
9
|
var _action = _interopRequireDefault(require("@uides/stepwise/action"));
|
|
10
10
|
var _common = require("@uides/stepwise/common");
|
|
11
11
|
var _field = _interopRequireDefault(require("@uides/stepwise/field"));
|
|
@@ -169,36 +169,4 @@ var StepsSpec = exports.StepsSpec = v.object({
|
|
|
169
169
|
sign: (0, _common.nullish)(v["boolean"]()),
|
|
170
170
|
steps: Steps,
|
|
171
171
|
'intro-step': IntroStep
|
|
172
|
-
});
|
|
173
|
-
var stepSpec = exports.stepSpec = {
|
|
174
|
-
"intro-step": null,
|
|
175
|
-
"steps-order": "ksk",
|
|
176
|
-
steps: {
|
|
177
|
-
hello: {
|
|
178
|
-
"action-order": "ksk",
|
|
179
|
-
display: {
|
|
180
|
-
"default": {
|
|
181
|
-
"el": {
|
|
182
|
-
"title": "Hello"
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
"fieldset-order": '',
|
|
187
|
-
fields: {
|
|
188
|
-
happy: {
|
|
189
|
-
"user-input-mode": "required",
|
|
190
|
-
display: {
|
|
191
|
-
"default": {
|
|
192
|
-
"el": {
|
|
193
|
-
"label": "Happy",
|
|
194
|
-
"placeholder": "Happy",
|
|
195
|
-
"help": "Happy",
|
|
196
|
-
component: "attachment"
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
};
|
|
172
|
+
});
|
|
@@ -28,7 +28,10 @@ var TemplateAttributes = (0, _common.object)({
|
|
|
28
28
|
*/
|
|
29
29
|
required_claims: v.array(v.string()),
|
|
30
30
|
login_endpoint: v.string(),
|
|
31
|
-
fields: (0, _common.nullish)(v.array(v.any()))
|
|
31
|
+
fields: (0, _common.nullish)(v.array(v.any())),
|
|
32
|
+
allow_custom_recipient: (0, _common.nullish)(v["boolean"]()),
|
|
33
|
+
listable: (0, _common.nullish)(v["boolean"]()),
|
|
34
|
+
owner: (0, _common.nullish)(v.string())
|
|
32
35
|
});
|
|
33
36
|
|
|
34
37
|
/**
|
package/cli/index.js
CHANGED
|
@@ -13,7 +13,15 @@ switch (command) {
|
|
|
13
13
|
console.error('No template provided');
|
|
14
14
|
process.exit(1);
|
|
15
15
|
}
|
|
16
|
-
validate(argv._[1]);
|
|
16
|
+
validate(argv._[1], 'api');
|
|
17
|
+
break;
|
|
18
|
+
case 'validate-source':
|
|
19
|
+
if (!argv._[1]) {
|
|
20
|
+
console.error('No template provided');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
validate(argv._[1], 'source');
|
|
24
|
+
;
|
|
17
25
|
break;
|
|
18
26
|
default:
|
|
19
27
|
console.error("Unknown command given: ".concat(command));
|
package/cli/validate/index.js
CHANGED
|
@@ -5,14 +5,14 @@ import path from 'path';
|
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import chalk from 'chalk';
|
|
7
7
|
import * as valibot from 'valibot';
|
|
8
|
-
import { TemplateSource } from '@uides/stepwise/template';
|
|
8
|
+
import { TemplateSource, Template } from '@uides/stepwise/template';
|
|
9
9
|
import fetch from 'node-fetch';
|
|
10
|
-
export default function validate(_x) {
|
|
10
|
+
export default function validate(_x, _x2) {
|
|
11
11
|
return _validate.apply(this, arguments);
|
|
12
12
|
}
|
|
13
13
|
function _validate() {
|
|
14
|
-
_validate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(templateUrlOrName) {
|
|
15
|
-
var templateType, template, response, templatePath, errors;
|
|
14
|
+
_validate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(templateUrlOrName, type) {
|
|
15
|
+
var templateType, template, response, templatePath, TemplateValidator, errors;
|
|
16
16
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
17
17
|
while (1) switch (_context.prev = _context.next) {
|
|
18
18
|
case 0:
|
|
@@ -31,41 +31,59 @@ function _validate() {
|
|
|
31
31
|
templateUrlOrName = "http://localhost/api/templates/".concat(templateUrlOrName);
|
|
32
32
|
return _context.abrupt("break", 11);
|
|
33
33
|
case 11:
|
|
34
|
+
template = {};
|
|
34
35
|
if (!(templateType === 'remote')) {
|
|
35
|
-
_context.next =
|
|
36
|
+
_context.next = 19;
|
|
36
37
|
break;
|
|
37
38
|
}
|
|
38
|
-
_context.next =
|
|
39
|
+
_context.next = 15;
|
|
39
40
|
return fetch(templateUrlOrName)["catch"](function (err) {
|
|
40
41
|
return console.error("Could not fetch ".concat(templateUrlOrName, ". Error: ").concat(err));
|
|
41
42
|
});
|
|
42
|
-
case
|
|
43
|
+
case 15:
|
|
43
44
|
response = _context.sent;
|
|
44
|
-
_context.next =
|
|
45
|
+
_context.next = 18;
|
|
45
46
|
return response === null || response === void 0 ? void 0 : response.json()["catch"](function (err) {
|
|
46
47
|
return console.error("Could not parse JSON from ".concat(templateUrlOrName, ". Error: ").concat(err));
|
|
47
48
|
});
|
|
48
|
-
case 17:
|
|
49
|
-
template = _context.sent;
|
|
50
49
|
case 18:
|
|
50
|
+
template = _context.sent;
|
|
51
|
+
case 19:
|
|
51
52
|
if (!(templateType === 'local')) {
|
|
52
|
-
_context.next =
|
|
53
|
+
_context.next = 24;
|
|
53
54
|
break;
|
|
54
55
|
}
|
|
55
56
|
templatePath = path.join(process.cwd(), templateUrlOrName);
|
|
56
57
|
if (fs.existsSync(templatePath)) {
|
|
57
|
-
_context.next =
|
|
58
|
+
_context.next = 23;
|
|
58
59
|
break;
|
|
59
60
|
}
|
|
60
61
|
throw new Error("File ".concat(templatePath, " does not exist"));
|
|
61
|
-
case 22:
|
|
62
|
-
template = JSON.parse(fs.readFileSync(templatePath, 'utf8'));
|
|
63
62
|
case 23:
|
|
63
|
+
template = JSON.parse(fs.readFileSync(templatePath, 'utf8'));
|
|
64
|
+
case 24:
|
|
64
65
|
process.stdout.write('✅\n');
|
|
65
66
|
console.log(chalk.dim("Validating template..."));
|
|
66
|
-
|
|
67
|
-
if (
|
|
68
|
-
|
|
67
|
+
TemplateValidator = TemplateSource;
|
|
68
|
+
if (type === 'api') {
|
|
69
|
+
TemplateValidator = Template;
|
|
70
|
+
} else if (type === 'source') {
|
|
71
|
+
TemplateValidator = TemplateSource;
|
|
72
|
+
}
|
|
73
|
+
errors = valibot.safeParse(TemplateValidator, template).issues;
|
|
74
|
+
if (!(errors !== null && errors !== void 0 && errors.length)) {
|
|
75
|
+
console.log(chalk.greenBright('Template is valid!'));
|
|
76
|
+
} else if (errors) {
|
|
77
|
+
console.log(chalk.redBright('Template is invalid!'));
|
|
78
|
+
errors.forEach(function (issue) {
|
|
79
|
+
var _issue$path;
|
|
80
|
+
var path = issue === null || issue === void 0 ? void 0 : (_issue$path = issue.path) === null || _issue$path === void 0 ? void 0 : _issue$path.map(function (p) {
|
|
81
|
+
return p.key;
|
|
82
|
+
}).join('/');
|
|
83
|
+
console.log(chalk.redBright("".concat(template.refname, "/").concat(path, ": ").concat(issue.message)));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
case 30:
|
|
69
87
|
case "end":
|
|
70
88
|
return _context.stop();
|
|
71
89
|
}
|
package/cli/validate.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function validate(templateUrlOrName: string): Promise<void>;
|
|
1
|
+
export default function validate(templateUrlOrName: string, type: 'source' | 'api'): Promise<void>;
|
package/package.json
CHANGED
package/src/cli/index.ts
CHANGED
|
@@ -17,7 +17,14 @@ switch (command) {
|
|
|
17
17
|
console.error('No template provided');
|
|
18
18
|
process.exit(1);
|
|
19
19
|
}
|
|
20
|
-
validate(argv._[1]);
|
|
20
|
+
validate(argv._[1], 'api');
|
|
21
|
+
break;
|
|
22
|
+
case 'validate-source':
|
|
23
|
+
if (!argv._[1]) {
|
|
24
|
+
console.error('No template provided');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
validate(argv._[1], 'source');;
|
|
21
28
|
break;
|
|
22
29
|
default:
|
|
23
30
|
console.error(`Unknown command given: ${command}`);
|
package/src/cli/validate.ts
CHANGED
|
@@ -3,9 +3,9 @@ import path, { dirname } from 'path';
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import * as valibot from 'valibot'
|
|
6
|
-
import { TemplateSource } from '@uides/stepwise/template';
|
|
6
|
+
import { TemplateSource, Template } from '@uides/stepwise/template';
|
|
7
7
|
import fetch from 'node-fetch'
|
|
8
|
-
export default async function validate(templateUrlOrName: string) {
|
|
8
|
+
export default async function validate(templateUrlOrName: string, type: 'source' | 'api') {
|
|
9
9
|
process.stdout.write(chalk.dim(`Fetching template ${templateUrlOrName}...`));
|
|
10
10
|
let templateType;
|
|
11
11
|
switch (true) {
|
|
@@ -21,7 +21,7 @@ export default async function validate(templateUrlOrName: string) {
|
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
let template;
|
|
24
|
+
let template:any ={};
|
|
25
25
|
if (templateType === 'remote') {
|
|
26
26
|
const response = await fetch(templateUrlOrName).catch((err) =>
|
|
27
27
|
console.error(`Could not fetch ${templateUrlOrName}. Error: ${err}`)
|
|
@@ -44,6 +44,21 @@ export default async function validate(templateUrlOrName: string) {
|
|
|
44
44
|
}
|
|
45
45
|
process.stdout.write('✅\n');
|
|
46
46
|
console.log(chalk.dim(`Validating template...`));
|
|
47
|
-
|
|
48
|
-
if (
|
|
47
|
+
let TemplateValidator: any = TemplateSource
|
|
48
|
+
if (type === 'api') {
|
|
49
|
+
TemplateValidator = Template
|
|
50
|
+
}else if (type ==='source'){
|
|
51
|
+
TemplateValidator = TemplateSource
|
|
52
|
+
}
|
|
53
|
+
const errors = valibot.safeParse(TemplateValidator, template).issues;
|
|
54
|
+
|
|
55
|
+
if (!errors?.length) {
|
|
56
|
+
console.log(chalk.greenBright('Template is valid!'))
|
|
57
|
+
} else if (errors) {
|
|
58
|
+
console.log(chalk.redBright('Template is invalid!'))
|
|
59
|
+
errors.forEach(issue => {
|
|
60
|
+
const path = issue?.path?.map((p) => p.key).join('/');
|
|
61
|
+
console.log(chalk.redBright(`${template.refname}/${path}: ${issue.message}`));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
49
64
|
}
|
package/src/common.ts
CHANGED
package/src/step.ts
CHANGED
|
@@ -163,7 +163,7 @@ export const Step = object(
|
|
|
163
163
|
}),
|
|
164
164
|
]
|
|
165
165
|
);
|
|
166
|
-
export type Step = v.Output<typeof Step
|
|
166
|
+
export type Step = v.Output<typeof Step> ;
|
|
167
167
|
|
|
168
168
|
function validateOrderOnSet(
|
|
169
169
|
orderString: string | null | undefined,
|
|
@@ -176,50 +176,18 @@ function validateOrderOnSet(
|
|
|
176
176
|
}
|
|
177
177
|
return true;
|
|
178
178
|
}
|
|
179
|
-
|
|
179
|
+
export type StepType = v.BaseSchema<Step | null , Step | null >
|
|
180
180
|
export interface StepsType {
|
|
181
181
|
[x: string]: Step;
|
|
182
182
|
}
|
|
183
|
-
export const IntroStep = nullish(Step) as unknown as
|
|
184
|
-
export const Steps = v.record(v.string(), Step) as
|
|
183
|
+
export const IntroStep = nullish(Step) as unknown as StepType;
|
|
184
|
+
export const Steps = v.record(v.string(), Step) as v.BaseSchema<StepsType, StepsType>;
|
|
185
185
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
186
186
|
export const StepsSpec = v.object({
|
|
187
187
|
'steps-order': v.string(),
|
|
188
188
|
collectable: nullish(v.boolean()),
|
|
189
189
|
sign: nullish(v.boolean()),
|
|
190
190
|
steps: Steps,
|
|
191
|
-
'intro-step': IntroStep,
|
|
191
|
+
'intro-step': IntroStep as unknown as StepType,
|
|
192
192
|
});
|
|
193
193
|
type StepsSpec = v.Output<typeof StepsSpec>;
|
|
194
|
-
export const stepSpec: StepsSpec = {
|
|
195
|
-
"intro-step": null,
|
|
196
|
-
"steps-order": "ksk",
|
|
197
|
-
steps: {
|
|
198
|
-
hello: {
|
|
199
|
-
"action-order": "ksk",
|
|
200
|
-
display: {
|
|
201
|
-
"default": {
|
|
202
|
-
"el": {
|
|
203
|
-
"title": "Hello",
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
"fieldset-order": '',
|
|
208
|
-
fields: {
|
|
209
|
-
happy: {
|
|
210
|
-
"user-input-mode": "required",
|
|
211
|
-
display: {
|
|
212
|
-
"default": {
|
|
213
|
-
"el": {
|
|
214
|
-
"label": "Happy",
|
|
215
|
-
"placeholder": "Happy",
|
|
216
|
-
"help": "Happy",
|
|
217
|
-
component: "attachment"
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
package/src/template/template.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { nullish, object } from '@uides/stepwise/common';
|
|
2
|
-
import { IntroStep } from '@uides/stepwise/step';
|
|
2
|
+
import { IntroStep, StepType } from '@uides/stepwise/step';
|
|
3
3
|
import {
|
|
4
4
|
TemplateBase,
|
|
5
5
|
} from '@uides/stepwise/template/template-base';
|
|
@@ -21,6 +21,9 @@ const TemplateAttributes = object({
|
|
|
21
21
|
required_claims: v.array(v.string()),
|
|
22
22
|
login_endpoint: v.string(),
|
|
23
23
|
fields: nullish(v.array(v.any())),
|
|
24
|
+
allow_custom_recipient: nullish(v.boolean()),
|
|
25
|
+
listable: nullish(v.boolean()),
|
|
26
|
+
owner: nullish(v.string()),
|
|
24
27
|
});
|
|
25
28
|
|
|
26
29
|
/**
|
|
@@ -34,7 +37,7 @@ const TemplateAttributes = object({
|
|
|
34
37
|
export const Template = object({
|
|
35
38
|
...TemplateBase.entries,
|
|
36
39
|
...TemplateAttributes.entries,
|
|
37
|
-
intro_step: IntroStep,
|
|
40
|
+
intro_step: IntroStep as unknown as StepType,
|
|
38
41
|
});
|
|
39
42
|
export type Template = v.Output<typeof Template>;
|
|
40
43
|
|
package/step/index.js
CHANGED
|
@@ -159,36 +159,4 @@ export var StepsSpec = v.object({
|
|
|
159
159
|
sign: nullish(v["boolean"]()),
|
|
160
160
|
steps: Steps,
|
|
161
161
|
'intro-step': IntroStep
|
|
162
|
-
});
|
|
163
|
-
export var stepSpec = {
|
|
164
|
-
"intro-step": null,
|
|
165
|
-
"steps-order": "ksk",
|
|
166
|
-
steps: {
|
|
167
|
-
hello: {
|
|
168
|
-
"action-order": "ksk",
|
|
169
|
-
display: {
|
|
170
|
-
"default": {
|
|
171
|
-
"el": {
|
|
172
|
-
"title": "Hello"
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
"fieldset-order": '',
|
|
177
|
-
fields: {
|
|
178
|
-
happy: {
|
|
179
|
-
"user-input-mode": "required",
|
|
180
|
-
display: {
|
|
181
|
-
"default": {
|
|
182
|
-
"el": {
|
|
183
|
-
"label": "Happy",
|
|
184
|
-
"placeholder": "Happy",
|
|
185
|
-
"help": "Happy",
|
|
186
|
-
component: "attachment"
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
};
|
|
162
|
+
});
|