function JSonMLNode<K extends string, T>(nodeName: K, schema: S.Schema<T>): S.Schema<readonly [K, T]> {
return S.Array(S.Union(S.Literal(nodeName), schema))
.pipe(S.filter((xs) => xs.length > 0 && xs[0] === nodeName))
.annotations({ identifier: `Node ${nodeName}` }) as any;
}
const JHeader = S.Tuple(S.Literal("header"), S.Struct({ level: S.Number }), S.String).annotations({ identifier: "Node Header" });
const JBulletList = JSonMLNode("bulletlist", S.Tuple(S.String, S.String));
const JParagraph = JSonMLNode("para", S.String);
const JElement = S.Union(JHeader, JParagraph, JBulletList).annotations({ identifier: "JSon Element" });
export const JSonMLSchema = JSonMLNode("markdown", JElement);
function JSonMLNode<K extends string, T>(nodeName: K, schema: S.Schema<T>): S.Schema<readonly [K, T]> {
return S.Array(S.Union(S.Literal(nodeName), schema))
.pipe(S.filter((xs) => xs.length > 0 && xs[0] === nodeName))
.annotations({ identifier: `Node ${nodeName}` }) as any;
}
const JHeader = S.Tuple(S.Literal("header"), S.Struct({ level: S.Number }), S.String).annotations({ identifier: "Node Header" });
const JBulletList = JSonMLNode("bulletlist", S.Tuple(S.String, S.String));
const JParagraph = JSonMLNode("para", S.String);
const JElement = S.Union(JHeader, JParagraph, JBulletList).annotations({ identifier: "JSon Element" });
export const JSonMLSchema = JSonMLNode("markdown", JElement);