@mdanai/sdk 0.5.0

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.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +126 -0
  3. package/dist/core/errors.d.ts +14 -0
  4. package/dist/core/errors.d.ts.map +1 -0
  5. package/dist/core/errors.js +13 -0
  6. package/dist/core/errors.js.map +1 -0
  7. package/dist/core/index.d.ts +16 -0
  8. package/dist/core/index.d.ts.map +1 -0
  9. package/dist/core/index.js +69 -0
  10. package/dist/core/index.js.map +1 -0
  11. package/dist/core/markdown-body.d.ts +3 -0
  12. package/dist/core/markdown-body.d.ts.map +1 -0
  13. package/dist/core/markdown-body.js +65 -0
  14. package/dist/core/markdown-body.js.map +1 -0
  15. package/dist/core/markdown-renderer.d.ts +5 -0
  16. package/dist/core/markdown-renderer.d.ts.map +1 -0
  17. package/dist/core/markdown-renderer.js +75 -0
  18. package/dist/core/markdown-renderer.js.map +1 -0
  19. package/dist/core/negotiate.d.ts +3 -0
  20. package/dist/core/negotiate.d.ts.map +1 -0
  21. package/dist/core/negotiate.js +63 -0
  22. package/dist/core/negotiate.js.map +1 -0
  23. package/dist/core/parse/anchors.d.ts +2 -0
  24. package/dist/core/parse/anchors.d.ts.map +1 -0
  25. package/dist/core/parse/anchors.js +26 -0
  26. package/dist/core/parse/anchors.js.map +1 -0
  27. package/dist/core/parse/block-parser.d.ts +3 -0
  28. package/dist/core/parse/block-parser.d.ts.map +1 -0
  29. package/dist/core/parse/block-parser.js +117 -0
  30. package/dist/core/parse/block-parser.js.map +1 -0
  31. package/dist/core/parse/executable-block.d.ts +6 -0
  32. package/dist/core/parse/executable-block.d.ts.map +1 -0
  33. package/dist/core/parse/executable-block.js +48 -0
  34. package/dist/core/parse/executable-block.js.map +1 -0
  35. package/dist/core/parse/frontmatter.d.ts +7 -0
  36. package/dist/core/parse/frontmatter.d.ts.map +1 -0
  37. package/dist/core/parse/frontmatter.js +45 -0
  38. package/dist/core/parse/frontmatter.js.map +1 -0
  39. package/dist/core/serialize.d.ts +4 -0
  40. package/dist/core/serialize.d.ts.map +1 -0
  41. package/dist/core/serialize.js +126 -0
  42. package/dist/core/serialize.js.map +1 -0
  43. package/dist/core/types.d.ts +67 -0
  44. package/dist/core/types.d.ts.map +1 -0
  45. package/dist/core/types.js +2 -0
  46. package/dist/core/types.js.map +1 -0
  47. package/dist/core/validate.d.ts +3 -0
  48. package/dist/core/validate.d.ts.map +1 -0
  49. package/dist/core/validate.js +107 -0
  50. package/dist/core/validate.js.map +1 -0
  51. package/dist/elements/components/mdan-action.d.ts +6 -0
  52. package/dist/elements/components/mdan-action.d.ts.map +1 -0
  53. package/dist/elements/components/mdan-action.js +34 -0
  54. package/dist/elements/components/mdan-action.js.map +1 -0
  55. package/dist/elements/components/mdan-block.d.ts +9 -0
  56. package/dist/elements/components/mdan-block.d.ts.map +1 -0
  57. package/dist/elements/components/mdan-block.js +36 -0
  58. package/dist/elements/components/mdan-block.js.map +1 -0
  59. package/dist/elements/components/mdan-error.d.ts +9 -0
  60. package/dist/elements/components/mdan-error.d.ts.map +1 -0
  61. package/dist/elements/components/mdan-error.js +36 -0
  62. package/dist/elements/components/mdan-error.js.map +1 -0
  63. package/dist/elements/components/mdan-field.d.ts +6 -0
  64. package/dist/elements/components/mdan-field.d.ts.map +1 -0
  65. package/dist/elements/components/mdan-field.js +35 -0
  66. package/dist/elements/components/mdan-field.js.map +1 -0
  67. package/dist/elements/components/mdan-form.d.ts +6 -0
  68. package/dist/elements/components/mdan-form.d.ts.map +1 -0
  69. package/dist/elements/components/mdan-form.js +22 -0
  70. package/dist/elements/components/mdan-form.js.map +1 -0
  71. package/dist/elements/components/mdan-page.d.ts +9 -0
  72. package/dist/elements/components/mdan-page.d.ts.map +1 -0
  73. package/dist/elements/components/mdan-page.js +46 -0
  74. package/dist/elements/components/mdan-page.js.map +1 -0
  75. package/dist/elements/index.d.ts +3 -0
  76. package/dist/elements/index.d.ts.map +1 -0
  77. package/dist/elements/index.js +3 -0
  78. package/dist/elements/index.js.map +1 -0
  79. package/dist/elements/mount.d.ts +11 -0
  80. package/dist/elements/mount.d.ts.map +1 -0
  81. package/dist/elements/mount.js +436 -0
  82. package/dist/elements/mount.js.map +1 -0
  83. package/dist/elements/register.d.ts +2 -0
  84. package/dist/elements/register.d.ts.map +1 -0
  85. package/dist/elements/register.js +27 -0
  86. package/dist/elements/register.js.map +1 -0
  87. package/dist/elements/theme.d.ts +2 -0
  88. package/dist/elements/theme.d.ts.map +1 -0
  89. package/dist/elements/theme.js +13 -0
  90. package/dist/elements/theme.js.map +1 -0
  91. package/dist/index.d.ts +4 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +5 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/server/bun.d.ts +19 -0
  96. package/dist/server/bun.d.ts.map +1 -0
  97. package/dist/server/bun.js +214 -0
  98. package/dist/server/bun.js.map +1 -0
  99. package/dist/server/content-type.d.ts +3 -0
  100. package/dist/server/content-type.d.ts.map +1 -0
  101. package/dist/server/content-type.js +5 -0
  102. package/dist/server/content-type.js.map +1 -0
  103. package/dist/server/hosted-app.d.ts +35 -0
  104. package/dist/server/hosted-app.d.ts.map +1 -0
  105. package/dist/server/hosted-app.js +113 -0
  106. package/dist/server/hosted-app.js.map +1 -0
  107. package/dist/server/html-render.d.ts +21 -0
  108. package/dist/server/html-render.d.ts.map +1 -0
  109. package/dist/server/html-render.js +360 -0
  110. package/dist/server/html-render.js.map +1 -0
  111. package/dist/server/index.d.ts +8 -0
  112. package/dist/server/index.d.ts.map +1 -0
  113. package/dist/server/index.js +6 -0
  114. package/dist/server/index.js.map +1 -0
  115. package/dist/server/node-runtime.d.ts +2 -0
  116. package/dist/server/node-runtime.d.ts.map +1 -0
  117. package/dist/server/node-runtime.js +2 -0
  118. package/dist/server/node-runtime.js.map +1 -0
  119. package/dist/server/node.d.ts +23 -0
  120. package/dist/server/node.d.ts.map +1 -0
  121. package/dist/server/node.js +210 -0
  122. package/dist/server/node.js.map +1 -0
  123. package/dist/server/result.d.ts +7 -0
  124. package/dist/server/result.d.ts.map +1 -0
  125. package/dist/server/result.js +26 -0
  126. package/dist/server/result.js.map +1 -0
  127. package/dist/server/router.d.ts +12 -0
  128. package/dist/server/router.d.ts.map +1 -0
  129. package/dist/server/router.js +24 -0
  130. package/dist/server/router.js.map +1 -0
  131. package/dist/server/runtime.d.ts +16 -0
  132. package/dist/server/runtime.d.ts.map +1 -0
  133. package/dist/server/runtime.js +532 -0
  134. package/dist/server/runtime.js.map +1 -0
  135. package/dist/server/session.d.ts +5 -0
  136. package/dist/server/session.d.ts.map +1 -0
  137. package/dist/server/session.js +18 -0
  138. package/dist/server/session.js.map +1 -0
  139. package/dist/server/types.d.ts +72 -0
  140. package/dist/server/types.d.ts.map +1 -0
  141. package/dist/server/types.js +2 -0
  142. package/dist/server/types.js.map +1 -0
  143. package/dist/web/headless.d.ts +32 -0
  144. package/dist/web/headless.d.ts.map +1 -0
  145. package/dist/web/headless.js +391 -0
  146. package/dist/web/headless.js.map +1 -0
  147. package/dist/web/index.d.ts +2 -0
  148. package/dist/web/index.d.ts.map +1 -0
  149. package/dist/web/index.js +2 -0
  150. package/dist/web/index.js.map +1 -0
  151. package/package.json +81 -0
@@ -0,0 +1,117 @@
1
+ import { MdanParseError } from "../errors.js";
2
+ const identifierPattern = /^[a-zA-Z_][\w-]*$/;
3
+ function parseChoiceOptions(text) {
4
+ let value;
5
+ try {
6
+ value = JSON.parse(text);
7
+ }
8
+ catch {
9
+ throw new MdanParseError(`Invalid choice options ${text}.`);
10
+ }
11
+ if (!Array.isArray(value)) {
12
+ throw new MdanParseError(`Invalid choice options ${text}.`);
13
+ }
14
+ if (!value.every((option) => typeof option === "string")) {
15
+ throw new MdanParseError(`Invalid choice option in ${text}.`);
16
+ }
17
+ return value;
18
+ }
19
+ function parseInput(line) {
20
+ const match = line.match(/^INPUT\s+(text|number|boolean|choice|asset)(?:\s+(required))?(?:\s+(secret))?(?:\s+(\[[^\]]*\]))?\s+->\s+([a-zA-Z_][\w-]*)$/);
21
+ if (!match) {
22
+ throw new MdanParseError(`Invalid INPUT syntax: ${line}`);
23
+ }
24
+ const [, type, required, secret, optionText, name] = match;
25
+ return {
26
+ name: name,
27
+ type: type,
28
+ required: required === "required",
29
+ secret: secret === "secret",
30
+ ...(optionText ? { options: parseChoiceOptions(optionText) } : {})
31
+ };
32
+ }
33
+ function parseInputList(raw) {
34
+ if (!raw) {
35
+ return [];
36
+ }
37
+ return raw
38
+ .split(",")
39
+ .map((name) => name.trim())
40
+ .filter(Boolean);
41
+ }
42
+ function parseOperation(line) {
43
+ const match = line.match(/^(GET|POST)\s+"([^"]+)"(?:\s+\(([^)]*)\))?(?:\s+->\s+([a-zA-Z_][\w-]*))?(?:\s+(auto))?(?:\s+label:"([^"]+)")?(?:\s+accept:"([^"]+)")?$/);
44
+ if (!match) {
45
+ throw new MdanParseError(`Invalid operation syntax: ${line}`);
46
+ }
47
+ const [, method, target, inputsRaw, name, auto, label, accept] = match;
48
+ const inputs = parseInputList(inputsRaw);
49
+ if (method === "POST" && inputsRaw === undefined) {
50
+ throw new MdanParseError("POST operations must declare an input list.");
51
+ }
52
+ if (method === "POST" && !name) {
53
+ throw new MdanParseError("POST operations must declare an operation name.");
54
+ }
55
+ return {
56
+ method: method,
57
+ target,
58
+ name: name || undefined,
59
+ inputs,
60
+ auto: auto === "auto" ? true : undefined,
61
+ label: label || undefined,
62
+ accept: accept || undefined
63
+ };
64
+ }
65
+ export function parseBlocks(source) {
66
+ if (!source.trim()) {
67
+ return [];
68
+ }
69
+ const blocks = [];
70
+ const lines = source.split("\n");
71
+ let index = 0;
72
+ while (index < lines.length) {
73
+ const line = (lines[index] ?? "").trim();
74
+ if (!line) {
75
+ index += 1;
76
+ continue;
77
+ }
78
+ const blockMatch = line.match(/^BLOCK\s+([a-zA-Z_][\w-]*)\s*\{$/);
79
+ if (!blockMatch) {
80
+ throw new MdanParseError(`Expected BLOCK declaration, received: ${line}`);
81
+ }
82
+ const name = blockMatch[1];
83
+ if (!identifierPattern.test(name)) {
84
+ throw new MdanParseError(`Invalid block name ${name}.`);
85
+ }
86
+ const inputs = [];
87
+ const operations = [];
88
+ index += 1;
89
+ while (index < lines.length) {
90
+ const inner = (lines[index] ?? "").trim();
91
+ if (!inner) {
92
+ index += 1;
93
+ continue;
94
+ }
95
+ if (inner === "}") {
96
+ break;
97
+ }
98
+ if (inner.startsWith("INPUT ")) {
99
+ inputs.push(parseInput(inner));
100
+ }
101
+ else if (inner.startsWith("GET ") || inner.startsWith("POST ")) {
102
+ operations.push(parseOperation(inner));
103
+ }
104
+ else {
105
+ throw new MdanParseError(`Unknown block statement: ${inner}`);
106
+ }
107
+ index += 1;
108
+ }
109
+ if ((lines[index] ?? "").trim() !== "}") {
110
+ throw new MdanParseError(`Unclosed block ${name}.`);
111
+ }
112
+ blocks.push({ name, inputs, operations });
113
+ index += 1;
114
+ }
115
+ return blocks;
116
+ }
117
+ //# sourceMappingURL=block-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-parser.js","sourceRoot":"","sources":["../../../src/core/parse/block-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ExecutableBlockResult {
2
+ markdown: string;
3
+ executableContent: string;
4
+ }
5
+ export declare function extractExecutableBlock(source: string): ExecutableBlockResult;
6
+ //# sourceMappingURL=executable-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executable-block.d.ts","sourceRoot":"","sources":["../../../src/core/parse/executable-block.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAoD5E"}
@@ -0,0 +1,48 @@
1
+ import { MdanParseError } from "../errors.js";
2
+ export function extractExecutableBlock(source) {
3
+ const lines = source.split("\n");
4
+ const executableIndices = [];
5
+ let insideFence = false;
6
+ let currentFenceLang = null;
7
+ let currentStart = -1;
8
+ for (let index = 0; index < lines.length; index += 1) {
9
+ const line = lines[index] ?? "";
10
+ const match = line.match(/^```([a-zA-Z0-9_-]+)?\s*$/);
11
+ if (!insideFence) {
12
+ if (match) {
13
+ insideFence = true;
14
+ currentFenceLang = match[1] ?? "";
15
+ currentStart = index;
16
+ }
17
+ continue;
18
+ }
19
+ if (line.trim() === "```") {
20
+ if (currentFenceLang === "mdan") {
21
+ executableIndices.push({ start: currentStart, end: index });
22
+ }
23
+ insideFence = false;
24
+ currentFenceLang = null;
25
+ currentStart = -1;
26
+ }
27
+ }
28
+ if (executableIndices.length > 1) {
29
+ throw new MdanParseError("A page may contain at most one executable mdan block.");
30
+ }
31
+ if (executableIndices.length === 0) {
32
+ return {
33
+ markdown: source.trim(),
34
+ executableContent: ""
35
+ };
36
+ }
37
+ const executable = executableIndices[0];
38
+ const executableContent = lines
39
+ .slice(executable.start + 1, executable.end)
40
+ .filter((line) => line.trim() !== "")
41
+ .join("\n");
42
+ const markdownLines = lines.filter((_, index) => index < executable.start || index > executable.end);
43
+ return {
44
+ markdown: markdownLines.join("\n").trim(),
45
+ executableContent
46
+ };
47
+ }
48
+ //# sourceMappingURL=executable-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executable-block.js","sourceRoot":"","sources":["../../../src/core/parse/executable-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAO9C,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,iBAAiB,GAA0C,EAAE,CAAC;IACpE,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IAEtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,KAAK,EAAE,CAAC;gBACV,WAAW,GAAG,IAAI,CAAC;gBACnB,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1B,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,WAAW,GAAG,KAAK,CAAC;YACpB,gBAAgB,GAAG,IAAI,CAAC;YACxB,YAAY,GAAG,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,cAAc,CAAC,uDAAuD,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;YACvB,iBAAiB,EAAE,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAE,CAAC;IACzC,MAAM,iBAAiB,GAAG,KAAK;SAC5B,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC;SAC3C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SACpC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACrG,OAAO;QACL,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QACzC,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { MdanFrontmatter } from "../types.js";
2
+ export interface FrontmatterParseResult {
3
+ frontmatter: MdanFrontmatter;
4
+ body: string;
5
+ }
6
+ export declare function parseFrontmatter(source: string): FrontmatterParseResult;
7
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../../src/core/parse/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,eAAe,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAsBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CA4BvE"}
@@ -0,0 +1,45 @@
1
+ function parseValue(raw) {
2
+ const value = raw.trim();
3
+ if (value === "null") {
4
+ return null;
5
+ }
6
+ if (value === "true") {
7
+ return true;
8
+ }
9
+ if (value === "false") {
10
+ return false;
11
+ }
12
+ if (/^-?\d+(\.\d+)?$/.test(value)) {
13
+ return Number(value);
14
+ }
15
+ if ((value.startsWith(`"`) && value.endsWith(`"`)) || (value.startsWith(`'`) && value.endsWith(`'`))) {
16
+ return value.slice(1, -1);
17
+ }
18
+ return value;
19
+ }
20
+ export function parseFrontmatter(source) {
21
+ if (!source.startsWith("---\n")) {
22
+ return { frontmatter: {}, body: source };
23
+ }
24
+ const endMarker = source.indexOf("\n---\n", 4);
25
+ if (endMarker === -1) {
26
+ return { frontmatter: {}, body: source };
27
+ }
28
+ const frontmatterText = source.slice(4, endMarker);
29
+ const body = source.slice(endMarker + 5);
30
+ const frontmatter = {};
31
+ for (const line of frontmatterText.split("\n")) {
32
+ if (!line.trim()) {
33
+ continue;
34
+ }
35
+ const separator = line.indexOf(":");
36
+ if (separator === -1) {
37
+ continue;
38
+ }
39
+ const key = line.slice(0, separator).trim();
40
+ const value = line.slice(separator + 1);
41
+ frontmatter[key] = parseValue(value);
42
+ }
43
+ return { frontmatter, body };
44
+ }
45
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../../src/core/parse/frontmatter.ts"],"names":[],"mappings":"AAOA,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrG,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,WAAW,GAAoB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACxC,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { MdanFragment, MdanPage } from "./types.js";
2
+ export declare function serializePage(page: MdanPage): string;
3
+ export declare function serializeFragment(fragment: MdanFragment): string;
4
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/core/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,YAAY,EAA6C,QAAQ,EAAE,MAAM,YAAY,CAAC;AA2H/G,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBpD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAIhE"}
@@ -0,0 +1,126 @@
1
+ const blockAnchorPattern = /^<!--\s*mdan:block\s+([a-zA-Z_][\w-]*)\s*-->$/;
2
+ function serializeFrontmatter(frontmatter) {
3
+ const entries = Object.entries(frontmatter);
4
+ if (entries.length === 0) {
5
+ return "";
6
+ }
7
+ const lines = entries.map(([key, value]) => `${key}: ${serializeScalar(value)}`);
8
+ return `---\n${lines.join("\n")}\n---\n\n`;
9
+ }
10
+ function serializeScalar(value) {
11
+ if (value === null) {
12
+ return "null";
13
+ }
14
+ if (typeof value === "string") {
15
+ return JSON.stringify(value);
16
+ }
17
+ return String(value);
18
+ }
19
+ function serializeInput(input) {
20
+ const parts = ["INPUT", input.type];
21
+ if (input.required) {
22
+ parts.push("required");
23
+ }
24
+ if (input.secret) {
25
+ parts.push("secret");
26
+ }
27
+ if (input.options && input.options.length > 0) {
28
+ parts.push(`[${input.options.map((option) => JSON.stringify(option)).join(", ")}]`);
29
+ }
30
+ parts.push("->", input.name);
31
+ return ` ${parts.join(" ")}`;
32
+ }
33
+ function serializeOperation(operation) {
34
+ const parts = [operation.method, JSON.stringify(operation.target)];
35
+ if (operation.inputs.length > 0 || operation.method === "POST") {
36
+ parts.push(`(${operation.inputs.join(", ")})`);
37
+ }
38
+ if (operation.name) {
39
+ parts.push("->", operation.name);
40
+ }
41
+ if (operation.auto) {
42
+ parts.push("auto");
43
+ }
44
+ if (operation.label) {
45
+ parts.push(`label:${JSON.stringify(operation.label)}`);
46
+ }
47
+ if (operation.accept) {
48
+ parts.push(`accept:${JSON.stringify(operation.accept)}`);
49
+ }
50
+ return ` ${parts.join(" ")}`;
51
+ }
52
+ function serializeBlock(block) {
53
+ const body = [...block.inputs.map(serializeInput), ...block.operations.map(serializeOperation)];
54
+ const lines = [`BLOCK ${block.name} {`, ...body, `}`];
55
+ return lines.join("\n");
56
+ }
57
+ function serializeBlocks(blocks) {
58
+ if (blocks.length === 0) {
59
+ return "";
60
+ }
61
+ const content = blocks.map(serializeBlock).join("\n\n");
62
+ return `\`\`\`mdan\n${content}\n\`\`\`\n`;
63
+ }
64
+ function getVisibleBlockNames(page) {
65
+ if (!page.visibleBlockNames || page.visibleBlockNames.length === 0) {
66
+ return null;
67
+ }
68
+ return new Set(page.visibleBlockNames);
69
+ }
70
+ function getVisibleBlocks(page) {
71
+ const visibleBlockNames = getVisibleBlockNames(page);
72
+ if (!visibleBlockNames) {
73
+ return page.blocks;
74
+ }
75
+ return page.blocks.filter((block) => visibleBlockNames.has(block.name));
76
+ }
77
+ function getVisibleBlockContent(page) {
78
+ if (!page.blockContent) {
79
+ return undefined;
80
+ }
81
+ const visibleBlockNames = getVisibleBlockNames(page);
82
+ if (!visibleBlockNames) {
83
+ return page.blockContent;
84
+ }
85
+ return Object.fromEntries(Object.entries(page.blockContent).filter(([name]) => visibleBlockNames.has(name)));
86
+ }
87
+ function injectBlockContent(markdown, blockContent) {
88
+ if (!blockContent || Object.keys(blockContent).length === 0) {
89
+ return markdown;
90
+ }
91
+ const lines = [];
92
+ for (const line of markdown.split("\n")) {
93
+ const anchorMatch = line.trim().match(blockAnchorPattern);
94
+ if (anchorMatch) {
95
+ const content = blockContent[anchorMatch[1] ?? ""]?.trim();
96
+ if (content) {
97
+ lines.push(content, "");
98
+ }
99
+ }
100
+ lines.push(line);
101
+ }
102
+ return lines.join("\n");
103
+ }
104
+ export function serializePage(page) {
105
+ const frontmatter = serializeFrontmatter(page.frontmatter);
106
+ const visibleBlockNames = getVisibleBlockNames(page);
107
+ const markdown = injectBlockContent(page.markdown
108
+ .trim()
109
+ .split("\n")
110
+ .filter((line) => {
111
+ const anchorMatch = line.trim().match(blockAnchorPattern);
112
+ if (!anchorMatch || !visibleBlockNames) {
113
+ return true;
114
+ }
115
+ return visibleBlockNames.has(anchorMatch[1] ?? "");
116
+ })
117
+ .join("\n"), getVisibleBlockContent(page));
118
+ const blocks = serializeBlocks(getVisibleBlocks(page));
119
+ return `${frontmatter}${markdown}${blocks ? `\n\n${blocks}` : "\n"}`;
120
+ }
121
+ export function serializeFragment(fragment) {
122
+ const markdown = fragment.markdown.trim();
123
+ const blocks = serializeBlocks(fragment.blocks);
124
+ return `${markdown}${blocks ? `\n\n${blocks}` : "\n"}`;
125
+ }
126
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/core/serialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export type MdanInputType = "text" | "number" | "boolean" | "choice" | "asset";
2
+ export type MdanFrontmatter = Record<string, string | number | boolean | null>;
3
+ export interface MdanInput {
4
+ name: string;
5
+ type: MdanInputType;
6
+ required: boolean;
7
+ secret: boolean;
8
+ options?: string[];
9
+ }
10
+ export interface MdanGetOperation {
11
+ method: "GET";
12
+ target: string;
13
+ name?: string;
14
+ inputs: string[];
15
+ auto?: boolean;
16
+ label?: string;
17
+ accept?: string;
18
+ }
19
+ export interface MdanPostOperation {
20
+ method: "POST";
21
+ target: string;
22
+ name: string;
23
+ inputs: string[];
24
+ auto?: boolean;
25
+ label?: string;
26
+ accept?: string;
27
+ }
28
+ export type MdanOperation = MdanGetOperation | MdanPostOperation;
29
+ export interface MdanBlock {
30
+ name: string;
31
+ inputs: MdanInput[];
32
+ operations: MdanOperation[];
33
+ }
34
+ export interface MdanPage {
35
+ frontmatter: MdanFrontmatter;
36
+ markdown: string;
37
+ blockContent?: Record<string, string>;
38
+ blocks: MdanBlock[];
39
+ blockAnchors: string[];
40
+ visibleBlockNames?: string[];
41
+ }
42
+ export interface MdanComposedPage extends MdanPage {
43
+ fragment(blockName: string): MdanFragment;
44
+ }
45
+ export interface MdanFragment {
46
+ markdown: string;
47
+ blocks: MdanBlock[];
48
+ }
49
+ export interface MdanHeadlessBlock {
50
+ name: string;
51
+ markdown: string;
52
+ inputs: MdanInput[];
53
+ operations: MdanOperation[];
54
+ }
55
+ export interface MdanHeadlessPageBootstrap {
56
+ kind: "page";
57
+ route?: string;
58
+ markdown: string;
59
+ blocks: MdanHeadlessBlock[];
60
+ }
61
+ export interface MdanHeadlessFragmentBootstrap {
62
+ kind: "fragment";
63
+ block: MdanHeadlessBlock;
64
+ }
65
+ export type MdanHeadlessBootstrap = MdanHeadlessPageBootstrap | MdanHeadlessFragmentBootstrap;
66
+ export type MdanRepresentation = "markdown" | "html" | "event-stream" | "not-acceptable";
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/E,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAAG,6BAA6B,CAAC;AAE9F,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,GAAG,cAAc,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { MdanPage } from "./types.js";
2
+ export declare function validatePage(page: MdanPage): MdanPage;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,QAAQ,EAAE,MAAM,YAAY,CAAC;AA2GrE,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CA0BrD"}
@@ -0,0 +1,107 @@
1
+ import { MdanValidationError } from "./errors.js";
2
+ const identifierPattern = /^[a-zA-Z_][\w-]*$/;
3
+ function assertUnique(values, messageFactory) {
4
+ const seen = new Set();
5
+ for (const value of values) {
6
+ if (seen.has(value)) {
7
+ throw new MdanValidationError(messageFactory(value));
8
+ }
9
+ seen.add(value);
10
+ }
11
+ }
12
+ function validateInputs(block) {
13
+ assertUnique(block.inputs.map((input) => input.name), (name) => `Duplicate input "${name}" in block "${block.name}".`);
14
+ for (const input of block.inputs) {
15
+ if (!identifierPattern.test(input.name)) {
16
+ throw new MdanValidationError(`Invalid input name "${input.name}".`);
17
+ }
18
+ if (input.type === "choice") {
19
+ if (!input.options || input.options.length === 0) {
20
+ throw new MdanValidationError(`Choice input "${input.name}" must declare at least one option.`);
21
+ }
22
+ }
23
+ else if (input.options && input.options.length > 0) {
24
+ throw new MdanValidationError(`Only choice inputs may declare options. Received options on "${input.name}".`);
25
+ }
26
+ }
27
+ }
28
+ function validateOperationNames(block) {
29
+ const names = block.operations.flatMap((operation) => (operation.name ? [operation.name] : []));
30
+ assertUnique(names, (name) => `Duplicate operation "${name}" in block "${block.name}".`);
31
+ }
32
+ function validateOperationReferences(block) {
33
+ const inputNames = new Set(block.inputs.map((input) => input.name));
34
+ let autoGetCount = 0;
35
+ for (const operation of block.operations) {
36
+ for (const input of operation.inputs) {
37
+ if (!inputNames.has(input)) {
38
+ throw new MdanValidationError(`Operation "${operation.name ?? operation.target}" references undeclared input "${input}" in block "${block.name}".`);
39
+ }
40
+ }
41
+ if (operation.method === "GET") {
42
+ validateGetOperation(operation, block.name);
43
+ if (operation.auto) {
44
+ autoGetCount += 1;
45
+ }
46
+ }
47
+ else {
48
+ validatePostOperation(operation, block.name);
49
+ }
50
+ }
51
+ if (autoGetCount > 1) {
52
+ throw new MdanValidationError(`Block "${block.name}" may define at most one auto GET operation.`);
53
+ }
54
+ }
55
+ function validateGetOperation(operation, blockName) {
56
+ if (operation.method !== "GET") {
57
+ return;
58
+ }
59
+ const isStream = operation.accept === "text/event-stream";
60
+ if (isStream && operation.name) {
61
+ throw new MdanValidationError(`Stream GET "${operation.target}" in block "${blockName}" must not define an operation name.`);
62
+ }
63
+ if (!isStream && !operation.name) {
64
+ throw new MdanValidationError(`GET "${operation.target}" in block "${blockName}" must define an operation name.`);
65
+ }
66
+ if (operation.auto && operation.inputs.length > 0) {
67
+ throw new MdanValidationError(`Auto GET "${operation.target}" in block "${blockName}" must not declare inputs.`);
68
+ }
69
+ if (operation.auto && operation.accept) {
70
+ throw new MdanValidationError(`Auto GET "${operation.target}" in block "${blockName}" must not declare an accept override.`);
71
+ }
72
+ }
73
+ function validatePostOperation(operation, blockName) {
74
+ if (operation.method !== "POST") {
75
+ return;
76
+ }
77
+ if (!operation.name) {
78
+ throw new MdanValidationError(`POST "${operation.target}" in block "${blockName}" must define an operation name.`);
79
+ }
80
+ if (operation.auto) {
81
+ throw new MdanValidationError(`POST "${operation.target}" in block "${blockName}" must not declare auto.`);
82
+ }
83
+ }
84
+ export function validatePage(page) {
85
+ assertUnique(page.blocks.map((block) => block.name), (name) => `Duplicate block "${name}".`);
86
+ assertUnique(page.blockAnchors, (name) => `Duplicate block anchor "${name}".`);
87
+ const blockNames = new Set(page.blocks.map((block) => block.name));
88
+ for (const anchor of page.blockAnchors) {
89
+ if (!blockNames.has(anchor)) {
90
+ throw new MdanValidationError(`Anchor "${anchor}" does not match any BLOCK.`);
91
+ }
92
+ }
93
+ if (page.blockAnchors.length > 0) {
94
+ for (const block of page.blocks) {
95
+ if (!page.blockAnchors.includes(block.name)) {
96
+ throw new MdanValidationError(`Block "${block.name}" is missing a matching anchor.`);
97
+ }
98
+ }
99
+ }
100
+ for (const block of page.blocks) {
101
+ validateInputs(block);
102
+ validateOperationNames(block);
103
+ validateOperationReferences(block);
104
+ }
105
+ return page;
106
+ }
107
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { LitElement } from "lit";
2
+ export declare class MdanActionElement extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ render(): import("lit-html").TemplateResult<1>;
5
+ }
6
+ //# sourceMappingURL=mdan-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdan-action.d.ts","sourceRoot":"","sources":["../../../src/elements/components/mdan-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,MAAM,CAAC,MAAM,4BAyBX;IAEF,MAAM;CAGP"}