@hpcc-js/markdown-it-plugins 1.4.7 → 1.5.1
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/dist/index.js +273 -258
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +2 -2
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +4 -4
- package/src/__package__.ts +3 -3
package/dist/index.js
CHANGED
|
@@ -1,295 +1,310 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { Runtime, Library, Inspector as Inspector$1 } from "@observablehq/runtime";
|
|
4
|
+
import { ojs2notebook, compile } from "@hpcc-js/observablehq-compiler";
|
|
5
5
|
const fenceInfoDefaults = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
type: "js",
|
|
7
|
+
exec: false,
|
|
8
|
+
echo: void 0,
|
|
9
|
+
hide: void 0
|
|
10
10
|
};
|
|
11
11
|
function showSrc(fetchInfo) {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
if (fetchInfo.exec === true) {
|
|
13
|
+
return fetchInfo.echo === true;
|
|
14
|
+
}
|
|
15
|
+
return fetchInfo.echo !== false;
|
|
14
16
|
}
|
|
17
|
+
__name(showSrc, "showSrc");
|
|
15
18
|
function executeSrc(fenceInfo) {
|
|
16
|
-
|
|
19
|
+
return fenceInfo.exec === true;
|
|
17
20
|
}
|
|
21
|
+
__name(executeSrc, "executeSrc");
|
|
18
22
|
function renderExecutedSrc(fetchInfo) {
|
|
19
|
-
|
|
23
|
+
return fetchInfo.exec == true && fetchInfo.hide !== true;
|
|
20
24
|
}
|
|
21
|
-
|
|
25
|
+
__name(renderExecutedSrc, "renderExecutedSrc");
|
|
26
|
+
let idx = 0;
|
|
22
27
|
function createId(suffix) {
|
|
23
|
-
|
|
28
|
+
return `fence-${++idx}${suffix ? `-${suffix}` : ""}`;
|
|
24
29
|
}
|
|
30
|
+
__name(createId, "createId");
|
|
25
31
|
function calcPlaceholders(content, fenceInfo) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<span id="${id}" >
|
|
32
|
+
const retVal = [];
|
|
33
|
+
try {
|
|
34
|
+
const cellNb = ojs2notebook(content);
|
|
35
|
+
for (let i = 0; i < cellNb.nodes.length; ++i) {
|
|
36
|
+
const id = createId(i + 1);
|
|
37
|
+
const content2 = cellNb.nodes[i].value;
|
|
38
|
+
retVal.push({
|
|
39
|
+
...fenceInfo,
|
|
40
|
+
id,
|
|
41
|
+
content: content2,
|
|
42
|
+
innerHTML: `<span id="${id}" >
|
|
38
43
|
${renderExecutedSrc(fenceInfo) ? "..." : ""}
|
|
39
44
|
</span>`
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
<span id="${id}" class="red">
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
} catch (e) {
|
|
48
|
+
const id = `fence-${idx}-error`;
|
|
49
|
+
retVal.push({
|
|
50
|
+
...fenceInfo,
|
|
51
|
+
id,
|
|
52
|
+
content: JSON.stringify(e),
|
|
53
|
+
innerHTML: `<span id="${id}" class="red">
|
|
50
54
|
${JSON.stringify(e)}
|
|
51
55
|
</span>`
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return retVal;
|
|
55
59
|
}
|
|
60
|
+
__name(calcPlaceholders, "calcPlaceholders");
|
|
56
61
|
const ENV_KEY = "ENV_OBSERVABLE";
|
|
57
62
|
function generatePlaceholders(content, fenceInfo, env) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}, "");
|
|
63
|
+
if (!env[ENV_KEY]) {
|
|
64
|
+
env[ENV_KEY] = [];
|
|
65
|
+
}
|
|
66
|
+
return calcPlaceholders(content, fenceInfo).reduce((acc, cur) => {
|
|
67
|
+
env[ENV_KEY].push({ ...cur, innerHTML: void 0 });
|
|
68
|
+
return acc + cur.innerHTML;
|
|
69
|
+
}, "");
|
|
66
70
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
71
|
+
__name(generatePlaceholders, "generatePlaceholders");
|
|
72
|
+
const _Inspector = class _Inspector extends Inspector$1 {
|
|
73
|
+
constructor(placeholder) {
|
|
74
|
+
super(placeholder);
|
|
75
|
+
this.placeholder = placeholder;
|
|
76
|
+
}
|
|
77
|
+
pending() {
|
|
78
|
+
super.pending();
|
|
79
|
+
}
|
|
80
|
+
fulfilled(value, _name) {
|
|
81
|
+
switch (typeof value) {
|
|
82
|
+
case "string":
|
|
83
|
+
this.placeholder.innerText = value;
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
super.fulfilled(value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
rejected(error) {
|
|
90
|
+
super.rejected(error);
|
|
91
|
+
}
|
|
89
92
|
};
|
|
93
|
+
__name(_Inspector, "Inspector");
|
|
94
|
+
let Inspector = _Inspector;
|
|
90
95
|
async function render(nodes) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
96
|
+
const displayIndex = {};
|
|
97
|
+
const nb = { nodes: [], files: [] };
|
|
98
|
+
for (const node of nodes) {
|
|
99
|
+
nb.nodes.push({
|
|
100
|
+
id: node.id,
|
|
101
|
+
name: node.id,
|
|
102
|
+
mode: "js",
|
|
103
|
+
value: node.content
|
|
104
|
+
});
|
|
105
|
+
displayIndex[node.id] = renderExecutedSrc(node);
|
|
106
|
+
}
|
|
107
|
+
const define = await compile(nb);
|
|
108
|
+
const runtime = new Runtime(new Library());
|
|
109
|
+
runtime.module(define, () => {
|
|
110
|
+
define(runtime, (_name, id) => {
|
|
111
|
+
const placeholder = globalThis?.document?.getElementById("" + id);
|
|
112
|
+
if (placeholder && displayIndex[id]) {
|
|
113
|
+
return new Inspector(placeholder);
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
pending() {
|
|
117
|
+
},
|
|
118
|
+
fulfilled(_value, _name2) {
|
|
119
|
+
},
|
|
120
|
+
rejected(_error, _name2) {
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
});
|
|
118
125
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
function renderObservable(tokens, idx$1, _options, env, _self) {
|
|
123
|
-
return generatePlaceholders(tokens[idx$1].content, {
|
|
124
|
-
type: "js",
|
|
125
|
-
exec: true
|
|
126
|
-
}, env);
|
|
126
|
+
__name(render, "render");
|
|
127
|
+
function renderObservable(tokens, idx2, _options, env, _self) {
|
|
128
|
+
return generatePlaceholders(tokens[idx2].content, { type: "js", exec: true }, env);
|
|
127
129
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
__name(renderObservable, "renderObservable");
|
|
131
|
+
const DOLLAR = 36;
|
|
132
|
+
const CURLEY_OPEN = 123;
|
|
133
|
+
const CURLEY_CLOSE = 125;
|
|
131
134
|
function* parsePlaceholderInline(src, pos = 0, posMax = src.length) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
135
|
+
if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {
|
|
136
|
+
pos += 2;
|
|
137
|
+
const observableStart = pos;
|
|
138
|
+
let nestedCurly = 0;
|
|
139
|
+
let done = false;
|
|
140
|
+
while (!done && pos < posMax) {
|
|
141
|
+
switch (src.charCodeAt(pos)) {
|
|
142
|
+
case CURLEY_OPEN:
|
|
143
|
+
nestedCurly++;
|
|
144
|
+
break;
|
|
145
|
+
case CURLEY_CLOSE:
|
|
146
|
+
if (nestedCurly === 0) {
|
|
147
|
+
done = true;
|
|
148
|
+
--pos;
|
|
149
|
+
} else {
|
|
150
|
+
nestedCurly--;
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
pos++;
|
|
155
|
+
}
|
|
156
|
+
const observableEnd = pos;
|
|
157
|
+
if (pos >= posMax || observableStart == observableEnd) return;
|
|
158
|
+
if (src.charCodeAt(pos) !== CURLEY_CLOSE) return;
|
|
159
|
+
pos++;
|
|
160
|
+
const observableJs = src.slice(observableStart, observableEnd).trim();
|
|
161
|
+
yield { type: "placeholder", content: observableJs, pos };
|
|
162
|
+
}
|
|
161
163
|
}
|
|
164
|
+
__name(parsePlaceholderInline, "parsePlaceholderInline");
|
|
162
165
|
function* parsePlaceholderBlock(src) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
166
|
+
let pos = 0;
|
|
167
|
+
let prevPos = 0;
|
|
168
|
+
const posMax = src.length;
|
|
169
|
+
while (pos < posMax) {
|
|
170
|
+
if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {
|
|
171
|
+
yield { type: "html_block", content: src.slice(prevPos, pos) };
|
|
172
|
+
for (const placeholder of parsePlaceholderInline(src, pos, posMax)) {
|
|
173
|
+
yield placeholder;
|
|
174
|
+
pos = placeholder.pos;
|
|
175
|
+
prevPos = pos;
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
pos++;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (pos > prevPos) {
|
|
182
|
+
yield { type: "html_block", content: src.slice(prevPos, pos) };
|
|
183
|
+
}
|
|
181
184
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
185
|
+
__name(parsePlaceholderBlock, "parsePlaceholderBlock");
|
|
186
|
+
const transformPlaceholderInline = /* @__PURE__ */ __name((state, silent) => {
|
|
187
|
+
if (silent || state.pos + 2 > state.posMax) return false;
|
|
188
|
+
const marker1 = state.src.charCodeAt(state.pos);
|
|
189
|
+
const marker2 = state.src.charCodeAt(state.pos + 1);
|
|
190
|
+
if (marker1 !== DOLLAR || marker2 !== CURLEY_OPEN) return false;
|
|
191
|
+
for (const { type, content, pos } of parsePlaceholderInline(state.src, state.pos, state.posMax)) {
|
|
192
|
+
if (type !== "placeholder") break;
|
|
193
|
+
const token = state.push(type, "", 0);
|
|
194
|
+
token.content = content;
|
|
195
|
+
state.pos = pos;
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}, "transformPlaceholderInline");
|
|
200
|
+
const transformPlaceholderCore = /* @__PURE__ */ __name((state) => {
|
|
201
|
+
const { tokens } = state;
|
|
202
|
+
for (let i = 0, n = tokens.length; i < n; ++i) {
|
|
203
|
+
const token = tokens[i];
|
|
204
|
+
if (token.type === "html_block") {
|
|
205
|
+
const children = [];
|
|
206
|
+
for (const { type, content } of parsePlaceholderBlock(token.content)) {
|
|
207
|
+
const child = new state.Token(type, "", 0);
|
|
208
|
+
child.content = content;
|
|
209
|
+
children.push(child);
|
|
210
|
+
}
|
|
211
|
+
if (children.length === 1 && children[0].type === "html_block") {
|
|
212
|
+
tokens[i].content = children[0].content;
|
|
213
|
+
} else {
|
|
214
|
+
const inline = new state.Token("inline", "", 0);
|
|
215
|
+
inline.children = children;
|
|
216
|
+
tokens[i] = inline;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}, "transformPlaceholderCore");
|
|
216
221
|
function hookTemplateLiterals(md) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
222
|
+
md.inline.ruler.push("placeholder", transformPlaceholderInline);
|
|
223
|
+
md.core.ruler.after("inline", "placeholder", transformPlaceholderCore);
|
|
224
|
+
md.renderer.rules.placeholder = (tokens, idx2, options, env, self) => renderObservable(tokens, idx2, options, env);
|
|
220
225
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}, { ...fenceInfoDefaults });
|
|
239
|
-
var proxy = (tokens, idx$1, options, _env, self) => self.renderToken(tokens, idx$1, options);
|
|
226
|
+
__name(hookTemplateLiterals, "hookTemplateLiterals");
|
|
227
|
+
const deserializeFenceInfo = /* @__PURE__ */ __name((attrs) => attrs.split(/\s+/).reduce((acc, pair, idx2) => {
|
|
228
|
+
if (idx2 === 0) {
|
|
229
|
+
acc.type = pair;
|
|
230
|
+
return acc;
|
|
231
|
+
}
|
|
232
|
+
const [key, value] = pair.split("=");
|
|
233
|
+
switch (key) {
|
|
234
|
+
case "exec":
|
|
235
|
+
case "echo":
|
|
236
|
+
case "hide":
|
|
237
|
+
acc[key] = value !== "false";
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
return acc;
|
|
241
|
+
}, { ...fenceInfoDefaults }), "deserializeFenceInfo");
|
|
242
|
+
const proxy = /* @__PURE__ */ __name((tokens, idx2, options, _env, self) => self.renderToken(tokens, idx2, options), "proxy");
|
|
240
243
|
function hookFence(md) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
244
|
+
const defaultFenceRenderer = md.renderer.rules.fence || proxy;
|
|
245
|
+
const fenceRenderer = /* @__PURE__ */ __name((tokens, idx2, options, env, self) => {
|
|
246
|
+
const token = tokens[idx2];
|
|
247
|
+
const fenceInfo = deserializeFenceInfo(token.info);
|
|
248
|
+
if (fenceInfo.type === "javascript") {
|
|
249
|
+
fenceInfo.type = "js";
|
|
250
|
+
}
|
|
251
|
+
token.content += "\n";
|
|
252
|
+
let preHtml = "";
|
|
253
|
+
switch (fenceInfo.type) {
|
|
254
|
+
case "js":
|
|
255
|
+
if (executeSrc(fenceInfo)) {
|
|
256
|
+
if (!env[ENV_KEY]) {
|
|
257
|
+
env[ENV_KEY] = [];
|
|
258
|
+
}
|
|
259
|
+
preHtml += generatePlaceholders(token.content, fenceInfo, env);
|
|
260
|
+
}
|
|
261
|
+
if (showSrc(fenceInfo)) {
|
|
262
|
+
return preHtml + defaultFenceRenderer(tokens, idx2, options, env, self);
|
|
263
|
+
}
|
|
264
|
+
break;
|
|
265
|
+
default:
|
|
266
|
+
return preHtml + defaultFenceRenderer(tokens, idx2, options, env, self);
|
|
267
|
+
}
|
|
268
|
+
return preHtml;
|
|
269
|
+
}, "fenceRenderer");
|
|
270
|
+
md.renderer.rules.fence = fenceRenderer;
|
|
261
271
|
}
|
|
262
|
-
|
|
263
|
-
//#endregion
|
|
264
|
-
//#region src/index.ts
|
|
272
|
+
__name(hookFence, "hookFence");
|
|
265
273
|
function hookRender(md) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
274
|
+
const originalRender = md.render;
|
|
275
|
+
md.render = (src, _env) => {
|
|
276
|
+
const env = { ..._env };
|
|
277
|
+
const retVal = originalRender.call(md, src, env);
|
|
278
|
+
render(env[ENV_KEY] ?? []);
|
|
279
|
+
return retVal;
|
|
280
|
+
};
|
|
273
281
|
}
|
|
282
|
+
__name(hookRender, "hookRender");
|
|
274
283
|
function hookVitepressRender(md) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
284
|
+
const originalRender = md.render;
|
|
285
|
+
md.render = (src, env) => {
|
|
286
|
+
const myEnv = env ?? {};
|
|
287
|
+
let retVal = originalRender.call(md, src, myEnv);
|
|
288
|
+
if (env[ENV_KEY]?.length) {
|
|
289
|
+
const content = encodeURI(JSON.stringify(env[ENV_KEY]));
|
|
290
|
+
retVal += `<RenderComponent content="${content}" />`;
|
|
291
|
+
}
|
|
292
|
+
return retVal;
|
|
293
|
+
};
|
|
285
294
|
}
|
|
295
|
+
__name(hookVitepressRender, "hookVitepressRender");
|
|
286
296
|
function observable(md, opts = {}) {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
297
|
+
hookTemplateLiterals(md);
|
|
298
|
+
hookFence(md);
|
|
299
|
+
if (opts.vitePress) {
|
|
300
|
+
hookVitepressRender(md);
|
|
301
|
+
} else {
|
|
302
|
+
hookRender(md);
|
|
303
|
+
}
|
|
291
304
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
305
|
+
__name(observable, "observable");
|
|
306
|
+
export {
|
|
307
|
+
observable,
|
|
308
|
+
render
|
|
309
|
+
};
|
|
310
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fenceInfoDefaults: Readonly<FenceInfo>","retVal: RenderNode[]","e: any","placeholder: HTMLElement","displayIndex: { [key: string]: boolean }","nb: ohq.Notebook","transformPlaceholderInline: RuleInline","transformPlaceholderCore: RuleCore","children: Token[]"],"sources":["../src/util.ts","../src/render.ts","../src/template-literal.ts","../src/fence.ts","../src/index.ts"],"sourcesContent":["import { ojs2notebook } from \"@hpcc-js/observablehq-compiler\";\nimport { RenderNode } from \"./render.ts\";\n\nexport interface FenceInfo {\n type: \"js\" | \"javascript\" | string;\n exec?: boolean;\n echo?: boolean;\n hide?: boolean;\n}\n\nexport const fenceInfoDefaults: Readonly<FenceInfo> = {\n type: \"js\",\n exec: false,\n echo: undefined,\n hide: undefined\n};\n\nexport function showSrc(fetchInfo: FenceInfo): boolean {\n if (fetchInfo.exec === true) {\n return fetchInfo.echo === true;\n }\n return fetchInfo.echo !== false;\n}\n\nexport function executeSrc(fenceInfo: FenceInfo): boolean {\n return fenceInfo.exec === true;\n}\n\nexport function renderExecutedSrc(fetchInfo: FenceInfo): boolean {\n return fetchInfo.exec == true && fetchInfo.hide !== true;\n}\n\nlet idx = 0;\nexport function createId(suffix?: string | number): string {\n return `fence-${++idx}${suffix ? `-${suffix}` : \"\"}`;\n}\n\nfunction calcPlaceholders(content: string, fenceInfo: FenceInfo): RenderNode[] {\n const retVal: RenderNode[] = [];\n try {\n const cellNb = ojs2notebook(content);\n for (let i = 0; i < cellNb.nodes.length; ++i) {\n const id = createId(i + 1);\n const content = cellNb.nodes[i].value;\n retVal.push({\n ...fenceInfo,\n id,\n content,\n innerHTML: `\\\n<span id=\"${id}\" >\n ${renderExecutedSrc(fenceInfo) ? \"...\" : \"\"}\n</span>`\n });\n }\n } catch (e: any) {\n const id = `fence-${idx}-error`;\n retVal.push({\n ...fenceInfo,\n id,\n content: JSON.stringify(e),\n innerHTML: `\\\n<span id=\"${id}\" class=\"red\">\n ${JSON.stringify(e)}\n</span>`\n });\n }\n return retVal;\n}\n\nexport const ENV_KEY = \"ENV_OBSERVABLE\";\n\nexport function generatePlaceholders(content: string, fenceInfo: FenceInfo, env: any): string {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n return calcPlaceholders(content, fenceInfo).reduce((acc, cur) => {\n env[ENV_KEY]!.push({ ...cur, innerHTML: undefined });\n return acc + cur.innerHTML;\n }, \"\");\n}\n\n","import { Runtime, Library, Inspector as BaseInspector } from \"@observablehq/runtime\";\nimport { compile, type ohq } from \"@hpcc-js/observablehq-compiler\";\nimport { FenceInfo, renderExecutedSrc } from \"./util.ts\";\n\nclass Inspector extends BaseInspector {\n\n constructor(protected placeholder: HTMLElement) {\n super(placeholder);\n }\n\n pending() {\n super.pending();\n }\n\n fulfilled(value: any, _name?: string) {\n switch (typeof value) {\n case \"string\":\n this.placeholder.innerText = value;\n break;\n default:\n super.fulfilled(value);\n }\n }\n\n rejected(error: Error) {\n super.rejected(error);\n }\n}\n\nexport interface RenderNode extends FenceInfo {\n id: string;\n content: string;\n innerHTML?: string;\n}\n\nexport async function render(nodes: RenderNode[]) {\n const displayIndex: { [key: string]: boolean } = {};\n const nb: ohq.Notebook = { nodes: [], files: [] };\n for (const node of nodes) {\n nb.nodes.push({\n id: node.id,\n name: node.id,\n mode: \"js\",\n value: node.content\n });\n displayIndex[node.id] = renderExecutedSrc(node);\n }\n const define = await compile(nb);\n const runtime = new Runtime(new Library());\n runtime.module(define, () => {\n define(runtime, (_name: string | undefined, id: string | number) => {\n const placeholder = globalThis?.document?.getElementById(\"\" + id);\n if (placeholder && displayIndex[id]) {\n return new Inspector(placeholder);\n }\n return {\n pending() { },\n fulfilled(_value: any, _name?: string) { },\n rejected(_error: any, _name?: string) { }\n };\n });\n });\n}\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport type { RuleCore } from \"markdown-it/lib/parser_core.mjs\";\nimport type { RuleInline } from \"markdown-it/lib/parser_inline.mjs\";\nimport { generatePlaceholders } from \"./util.ts\";\n\nfunction renderObservable(tokens: Token[], idx: number, _options: Options, env: any, _self: Renderer) {\n return generatePlaceholders(tokens[idx].content, { type: \"js\", exec: true }, env);\n}\n\nconst DOLLAR = 0x24;\nconst CURLEY_OPEN = 0x7B;\nconst CURLEY_CLOSE = 0x7D;\n\nfunction* parsePlaceholderInline(src: string, pos: number = 0, posMax: number = src.length) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n pos += 2;\n\n const observableStart = pos;\n let nestedCurly = 0;\n let done = false;\n while (!done && pos < posMax) {\n switch (src.charCodeAt(pos)) {\n case CURLEY_OPEN:\n nestedCurly++;\n break;\n case CURLEY_CLOSE:\n if (nestedCurly === 0) {\n done = true;\n --pos;\n } else {\n nestedCurly--;\n }\n break;\n }\n pos++;\n }\n const observableEnd = pos;\n if (pos >= posMax || observableStart == observableEnd) return;\n if (src.charCodeAt(pos) !== CURLEY_CLOSE) return;\n pos++;\n\n const observableJs = src.slice(observableStart, observableEnd).trim();\n yield { type: \"placeholder\", content: observableJs, pos };\n }\n}\n\nfunction* parsePlaceholderBlock(src: string) {\n let pos = 0;\n let prevPos = 0;\n const posMax = src.length;\n while (pos < posMax) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n for (const placeholder of parsePlaceholderInline(src, pos, posMax)) {\n yield placeholder;\n pos = placeholder.pos;\n prevPos = pos;\n }\n } else {\n pos++;\n }\n }\n if (pos > prevPos) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n }\n}\n\nconst transformPlaceholderInline: RuleInline = (state, silent) => {\n if (silent || state.pos + 2 > state.posMax) return false;\n const marker1 = state.src.charCodeAt(state.pos);\n const marker2 = state.src.charCodeAt(state.pos + 1);\n if (marker1 !== DOLLAR || marker2 !== CURLEY_OPEN) return false;\n for (const { type, content, pos } of parsePlaceholderInline(state.src, state.pos, state.posMax)) {\n if (type !== \"placeholder\") break;\n const token = state.push(type, \"\", 0);\n token.content = content;\n state.pos = pos;\n return true;\n }\n return false;\n};\n\nconst transformPlaceholderCore: RuleCore = (state) => {\n const { tokens } = state;\n for (let i = 0, n = tokens.length; i < n; ++i) {\n const token = tokens[i];\n if (token.type === \"html_block\") {\n const children: Token[] = [];\n for (const { type, content } of parsePlaceholderBlock(token.content)) {\n const child = new state.Token(type, \"\", 0);\n child.content = content;\n children.push(child);\n }\n if (children.length === 1 && children[0].type === \"html_block\") {\n tokens[i].content = children[0].content;\n } else {\n const inline = new state.Token(\"inline\", \"\", 0);\n inline.children = children;\n tokens[i] = inline;\n }\n }\n }\n};\n\nexport function hookTemplateLiterals(md: MarkdownIt) {\n md.inline.ruler.push(\"placeholder\", transformPlaceholderInline);\n md.core.ruler.after(\"inline\", \"placeholder\", transformPlaceholderCore);\n md.renderer.rules.placeholder = (tokens: Token[], idx: number, options: any, env: any, self: Renderer) => renderObservable(tokens, idx, options, env, self);\n}\n\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport { RenderNode } from \"./render.ts\";\nimport { ENV_KEY, executeSrc, FenceInfo, fenceInfoDefaults, generatePlaceholders, showSrc } from \"./util.ts\";\n\nconst deserializeFenceInfo = (attrs: string): FenceInfo =>\n attrs\n .split(/\\s+/)\n .reduce((acc: FenceInfo, pair, idx: number) => {\n if (idx === 0) {\n acc.type = pair as \"js\" | \"javascript\" | string;\n return acc;\n }\n\n const [key, value] = pair.split(\"=\") as [keyof FenceInfo, string];\n switch (key) {\n case \"exec\":\n case \"echo\":\n case \"hide\":\n acc[key] = value !== \"false\";\n break;\n }\n return acc;\n }, { ...fenceInfoDefaults })\n ;\n\nconst proxy = (tokens: Token[], idx: number, options: Options, _env: any, self: Renderer) => self.renderToken(tokens, idx, options);\n\nexport function hookFence(md: MarkdownIt) {\n const defaultFenceRenderer = md.renderer.rules.fence || proxy;\n const fenceRenderer = (tokens: Token[], idx: number, options: Options, env: { [ENV_KEY]?: RenderNode[] }, self: Renderer) => {\n const token = tokens[idx];\n const fenceInfo = deserializeFenceInfo(token.info);\n if (fenceInfo.type === \"javascript\") {\n fenceInfo.type = \"js\";\n }\n token.content += \"\\n\";\n let preHtml = \"\";\n switch (fenceInfo.type) {\n case \"js\":\n if (executeSrc(fenceInfo)) {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n preHtml += generatePlaceholders(token.content, fenceInfo, env);\n }\n if (showSrc(fenceInfo)) {\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n break;\n default:\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n return preHtml;\n };\n md.renderer.rules.fence = fenceRenderer;\n}\n","import type MarkdownIt from \"markdown-it\";\nimport { render } from \"./render.ts\";\nimport { ENV_KEY } from \"./util.ts\";\nimport { hookTemplateLiterals } from \"./template-literal.ts\";\nimport { hookFence } from \"./fence.ts\";\n\nfunction hookRender(md: MarkdownIt) {\n const originalRender = md.render;\n md.render = (src: string, _env?: any): string => {\n const env = { ..._env };\n const retVal = originalRender.call(md, src, env);\n render(env[ENV_KEY] ?? []);\n return retVal;\n };\n}\n\nfunction hookVitepressRender(md: MarkdownIt) {\n\n const originalRender = md.render;\n md.render = (src: string, env?: any): string => {\n const myEnv = env ?? {};\n let retVal = originalRender.call(md, src, myEnv);\n if (env[ENV_KEY]?.length) {\n const content = encodeURI(JSON.stringify(env[ENV_KEY]));\n retVal += `<RenderComponent content=\"${content}\" />`;\n }\n return retVal;\n };\n}\n\nexport interface ObservableOptions {\n vitePress?: boolean;\n}\n\nexport function observable(md: MarkdownIt, opts: ObservableOptions = {}) {\n hookTemplateLiterals(md);\n hookFence(md);\n if (opts.vitePress) {\n hookVitepressRender(md);\n } else {\n hookRender(md);\n }\n}\n\nexport {\n render\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/util.ts","../src/render.ts","../src/template-literal.ts","../src/fence.ts","../src/index.ts"],"sourcesContent":["import { ojs2notebook } from \"@hpcc-js/observablehq-compiler\";\nimport { RenderNode } from \"./render.ts\";\n\nexport interface FenceInfo {\n type: \"js\" | \"javascript\" | string;\n exec?: boolean;\n echo?: boolean;\n hide?: boolean;\n}\n\nexport const fenceInfoDefaults: Readonly<FenceInfo> = {\n type: \"js\",\n exec: false,\n echo: undefined,\n hide: undefined\n};\n\nexport function showSrc(fetchInfo: FenceInfo): boolean {\n if (fetchInfo.exec === true) {\n return fetchInfo.echo === true;\n }\n return fetchInfo.echo !== false;\n}\n\nexport function executeSrc(fenceInfo: FenceInfo): boolean {\n return fenceInfo.exec === true;\n}\n\nexport function renderExecutedSrc(fetchInfo: FenceInfo): boolean {\n return fetchInfo.exec == true && fetchInfo.hide !== true;\n}\n\nlet idx = 0;\nexport function createId(suffix?: string | number): string {\n return `fence-${++idx}${suffix ? `-${suffix}` : \"\"}`;\n}\n\nfunction calcPlaceholders(content: string, fenceInfo: FenceInfo): RenderNode[] {\n const retVal: RenderNode[] = [];\n try {\n const cellNb = ojs2notebook(content);\n for (let i = 0; i < cellNb.nodes.length; ++i) {\n const id = createId(i + 1);\n const content = cellNb.nodes[i].value;\n retVal.push({\n ...fenceInfo,\n id,\n content,\n innerHTML: `\\\n<span id=\"${id}\" >\n ${renderExecutedSrc(fenceInfo) ? \"...\" : \"\"}\n</span>`\n });\n }\n } catch (e: any) {\n const id = `fence-${idx}-error`;\n retVal.push({\n ...fenceInfo,\n id,\n content: JSON.stringify(e),\n innerHTML: `\\\n<span id=\"${id}\" class=\"red\">\n ${JSON.stringify(e)}\n</span>`\n });\n }\n return retVal;\n}\n\nexport const ENV_KEY = \"ENV_OBSERVABLE\";\n\nexport function generatePlaceholders(content: string, fenceInfo: FenceInfo, env: any): string {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n return calcPlaceholders(content, fenceInfo).reduce((acc, cur) => {\n env[ENV_KEY]!.push({ ...cur, innerHTML: undefined });\n return acc + cur.innerHTML;\n }, \"\");\n}\n\n","import { Runtime, Library, Inspector as BaseInspector } from \"@observablehq/runtime\";\nimport { compile, type ohq } from \"@hpcc-js/observablehq-compiler\";\nimport { FenceInfo, renderExecutedSrc } from \"./util.ts\";\n\nclass Inspector extends BaseInspector {\n\n constructor(protected placeholder: HTMLElement) {\n super(placeholder);\n }\n\n pending() {\n super.pending();\n }\n\n fulfilled(value: any, _name?: string) {\n switch (typeof value) {\n case \"string\":\n this.placeholder.innerText = value;\n break;\n default:\n super.fulfilled(value);\n }\n }\n\n rejected(error: Error) {\n super.rejected(error);\n }\n}\n\nexport interface RenderNode extends FenceInfo {\n id: string;\n content: string;\n innerHTML?: string;\n}\n\nexport async function render(nodes: RenderNode[]) {\n const displayIndex: { [key: string]: boolean } = {};\n const nb: ohq.Notebook = { nodes: [], files: [] };\n for (const node of nodes) {\n nb.nodes.push({\n id: node.id,\n name: node.id,\n mode: \"js\",\n value: node.content\n });\n displayIndex[node.id] = renderExecutedSrc(node);\n }\n const define = await compile(nb);\n const runtime = new Runtime(new Library());\n runtime.module(define, () => {\n define(runtime, (_name: string | undefined, id: string | number) => {\n const placeholder = globalThis?.document?.getElementById(\"\" + id);\n if (placeholder && displayIndex[id]) {\n return new Inspector(placeholder);\n }\n return {\n pending() { },\n fulfilled(_value: any, _name?: string) { },\n rejected(_error: any, _name?: string) { }\n };\n });\n });\n}\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport type { RuleCore } from \"markdown-it/lib/parser_core.mjs\";\nimport type { RuleInline } from \"markdown-it/lib/parser_inline.mjs\";\nimport { generatePlaceholders } from \"./util.ts\";\n\nfunction renderObservable(tokens: Token[], idx: number, _options: Options, env: any, _self: Renderer) {\n return generatePlaceholders(tokens[idx].content, { type: \"js\", exec: true }, env);\n}\n\nconst DOLLAR = 0x24;\nconst CURLEY_OPEN = 0x7B;\nconst CURLEY_CLOSE = 0x7D;\n\nfunction* parsePlaceholderInline(src: string, pos: number = 0, posMax: number = src.length) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n pos += 2;\n\n const observableStart = pos;\n let nestedCurly = 0;\n let done = false;\n while (!done && pos < posMax) {\n switch (src.charCodeAt(pos)) {\n case CURLEY_OPEN:\n nestedCurly++;\n break;\n case CURLEY_CLOSE:\n if (nestedCurly === 0) {\n done = true;\n --pos;\n } else {\n nestedCurly--;\n }\n break;\n }\n pos++;\n }\n const observableEnd = pos;\n if (pos >= posMax || observableStart == observableEnd) return;\n if (src.charCodeAt(pos) !== CURLEY_CLOSE) return;\n pos++;\n\n const observableJs = src.slice(observableStart, observableEnd).trim();\n yield { type: \"placeholder\", content: observableJs, pos };\n }\n}\n\nfunction* parsePlaceholderBlock(src: string) {\n let pos = 0;\n let prevPos = 0;\n const posMax = src.length;\n while (pos < posMax) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n for (const placeholder of parsePlaceholderInline(src, pos, posMax)) {\n yield placeholder;\n pos = placeholder.pos;\n prevPos = pos;\n }\n } else {\n pos++;\n }\n }\n if (pos > prevPos) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n }\n}\n\nconst transformPlaceholderInline: RuleInline = (state, silent) => {\n if (silent || state.pos + 2 > state.posMax) return false;\n const marker1 = state.src.charCodeAt(state.pos);\n const marker2 = state.src.charCodeAt(state.pos + 1);\n if (marker1 !== DOLLAR || marker2 !== CURLEY_OPEN) return false;\n for (const { type, content, pos } of parsePlaceholderInline(state.src, state.pos, state.posMax)) {\n if (type !== \"placeholder\") break;\n const token = state.push(type, \"\", 0);\n token.content = content;\n state.pos = pos;\n return true;\n }\n return false;\n};\n\nconst transformPlaceholderCore: RuleCore = (state) => {\n const { tokens } = state;\n for (let i = 0, n = tokens.length; i < n; ++i) {\n const token = tokens[i];\n if (token.type === \"html_block\") {\n const children: Token[] = [];\n for (const { type, content } of parsePlaceholderBlock(token.content)) {\n const child = new state.Token(type, \"\", 0);\n child.content = content;\n children.push(child);\n }\n if (children.length === 1 && children[0].type === \"html_block\") {\n tokens[i].content = children[0].content;\n } else {\n const inline = new state.Token(\"inline\", \"\", 0);\n inline.children = children;\n tokens[i] = inline;\n }\n }\n }\n};\n\nexport function hookTemplateLiterals(md: MarkdownIt) {\n md.inline.ruler.push(\"placeholder\", transformPlaceholderInline);\n md.core.ruler.after(\"inline\", \"placeholder\", transformPlaceholderCore);\n md.renderer.rules.placeholder = (tokens: Token[], idx: number, options: any, env: any, self: Renderer) => renderObservable(tokens, idx, options, env, self);\n}\n\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport { RenderNode } from \"./render.ts\";\nimport { ENV_KEY, executeSrc, FenceInfo, fenceInfoDefaults, generatePlaceholders, showSrc } from \"./util.ts\";\n\nconst deserializeFenceInfo = (attrs: string): FenceInfo =>\n attrs\n .split(/\\s+/)\n .reduce((acc: FenceInfo, pair, idx: number) => {\n if (idx === 0) {\n acc.type = pair as \"js\" | \"javascript\" | string;\n return acc;\n }\n\n const [key, value] = pair.split(\"=\") as [keyof FenceInfo, string];\n switch (key) {\n case \"exec\":\n case \"echo\":\n case \"hide\":\n acc[key] = value !== \"false\";\n break;\n }\n return acc;\n }, { ...fenceInfoDefaults })\n ;\n\nconst proxy = (tokens: Token[], idx: number, options: Options, _env: any, self: Renderer) => self.renderToken(tokens, idx, options);\n\nexport function hookFence(md: MarkdownIt) {\n const defaultFenceRenderer = md.renderer.rules.fence || proxy;\n const fenceRenderer = (tokens: Token[], idx: number, options: Options, env: { [ENV_KEY]?: RenderNode[] }, self: Renderer) => {\n const token = tokens[idx];\n const fenceInfo = deserializeFenceInfo(token.info);\n if (fenceInfo.type === \"javascript\") {\n fenceInfo.type = \"js\";\n }\n token.content += \"\\n\";\n let preHtml = \"\";\n switch (fenceInfo.type) {\n case \"js\":\n if (executeSrc(fenceInfo)) {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n preHtml += generatePlaceholders(token.content, fenceInfo, env);\n }\n if (showSrc(fenceInfo)) {\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n break;\n default:\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n return preHtml;\n };\n md.renderer.rules.fence = fenceRenderer;\n}\n","import type MarkdownIt from \"markdown-it\";\nimport { render } from \"./render.ts\";\nimport { ENV_KEY } from \"./util.ts\";\nimport { hookTemplateLiterals } from \"./template-literal.ts\";\nimport { hookFence } from \"./fence.ts\";\n\nfunction hookRender(md: MarkdownIt) {\n const originalRender = md.render;\n md.render = (src: string, _env?: any): string => {\n const env = { ..._env };\n const retVal = originalRender.call(md, src, env);\n render(env[ENV_KEY] ?? []);\n return retVal;\n };\n}\n\nfunction hookVitepressRender(md: MarkdownIt) {\n\n const originalRender = md.render;\n md.render = (src: string, env?: any): string => {\n const myEnv = env ?? {};\n let retVal = originalRender.call(md, src, myEnv);\n if (env[ENV_KEY]?.length) {\n const content = encodeURI(JSON.stringify(env[ENV_KEY]));\n retVal += `<RenderComponent content=\"${content}\" />`;\n }\n return retVal;\n };\n}\n\nexport interface ObservableOptions {\n vitePress?: boolean;\n}\n\nexport function observable(md: MarkdownIt, opts: ObservableOptions = {}) {\n hookTemplateLiterals(md);\n hookFence(md);\n if (opts.vitePress) {\n hookVitepressRender(md);\n } else {\n hookRender(md);\n }\n}\n\nexport {\n render\n};\n"],"names":["content","BaseInspector","_name","idx"],"mappings":"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"}
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@observablehq/runtime"),require("@hpcc-js/observablehq-compiler")):"function"==typeof define&&define.amd?define(["exports","@observablehq/runtime","@hpcc-js/observablehq-compiler"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self)["@hpcc-js/markdown-it-plugins"]={},e["@observablehq/runtime"],e["@hpcc-js/observablehq-compiler"])}(this,function(e,n,t){var o=Object.
|
|
2
|
-
//# sourceMappingURL=index.umd.cjs.map
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@observablehq/runtime"),require("@hpcc-js/observablehq-compiler")):"function"==typeof define&&define.amd?define(["exports","@observablehq/runtime","@hpcc-js/observablehq-compiler"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self)["@hpcc-js/markdown-it-plugins"]={},e["@observablehq/runtime"],e["@hpcc-js/observablehq-compiler"])}(this,function(e,n,t){"use strict";var o=Object.defineProperty,r=(e,n)=>o(e,"name",{value:n,configurable:!0});const c={type:"js",exec:!1,echo:void 0,hide:void 0};function s(e){return!0===e.exec?!0===e.echo:!1!==e.echo}function l(e){return!0===e.exec}function i(e){return 1==e.exec&&!0!==e.hide}r(s,"showSrc"),r(l,"executeSrc"),r(i,"renderExecutedSrc");let d=0;function a(e){return`fence-${++d}${e?`-${e}`:""}`}function u(e,n){const o=[];try{const r=t.ojs2notebook(e);for(let e=0;e<r.nodes.length;++e){const t=a(e+1),c=r.nodes[e].value;o.push({...n,id:t,content:c,innerHTML:`<span id="${t}" >\n ${i(n)?"...":""}\n</span>`})}}catch(r){const e=`fence-${d}-error`;o.push({...n,id:e,content:JSON.stringify(r),innerHTML:`<span id="${e}" class="red">\n ${JSON.stringify(r)}\n</span>`})}return o}r(a,"createId"),r(u,"calcPlaceholders");const p="ENV_OBSERVABLE";function f(e,n,t){return t[p]||(t[p]=[]),u(e,n).reduce((e,n)=>(t[p].push({...n,innerHTML:void 0}),e+n.innerHTML),"")}r(f,"generatePlaceholders");const h=class _Inspector extends n.Inspector{constructor(e){super(e),this.placeholder=e}pending(){super.pending()}fulfilled(e,n){if("string"==typeof e)this.placeholder.innerText=e;else super.fulfilled(e)}rejected(e){super.rejected(e)}};r(h,"Inspector");let b=h;async function y(e){const o={},r={nodes:[],files:[]};for(const n of e)r.nodes.push({id:n.id,name:n.id,mode:"js",value:n.content}),o[n.id]=i(n);const c=await t.compile(r),s=new n.Runtime(new n.Library);s.module(c,()=>{c(s,(e,n)=>{const t=globalThis?.document?.getElementById(""+n);return t&&o[n]?new b(t):{pending(){},fulfilled(e,n){},rejected(e,n){}}})})}function m(e,n,t,o,r){return f(e[n].content,{type:"js",exec:!0},o)}r(y,"render"),r(m,"renderObservable");const g=123;function*v(e,n=0,t=e.length){if(36===e.charCodeAt(n)&&e.charCodeAt(n+1)===g){const o=n+=2;let r=0,c=!1;for(;!c&&n<t;){switch(e.charCodeAt(n)){case g:r++;break;case 125:0===r?(c=!0,--n):r--}n++}const s=n;if(n>=t||o==s)return;if(125!==e.charCodeAt(n))return;n++;const l=e.slice(o,s).trim();yield{type:"placeholder",content:l,pos:n}}}function*j(e){let n=0,t=0;const o=e.length;for(;n<o;)if(36===e.charCodeAt(n)&&e.charCodeAt(n+1)===g){yield{type:"html_block",content:e.slice(t,n)};for(const r of v(e,n,o))yield r,n=r.pos,t=n}else n++;n>t&&(yield{type:"html_block",content:e.slice(t,n)})}r(v,"parsePlaceholderInline"),r(j,"parsePlaceholderBlock");const k=r((e,n)=>{if(n||e.pos+2>e.posMax)return!1;const t=e.src.charCodeAt(e.pos),o=e.src.charCodeAt(e.pos+1);if(36!==t||o!==g)return!1;for(const{type:r,content:c,pos:s}of v(e.src,e.pos,e.posMax)){if("placeholder"!==r)break;return e.push(r,"",0).content=c,e.pos=s,!0}return!1},"transformPlaceholderInline"),x=r(e=>{const{tokens:n}=e;for(let t=0,o=n.length;t<o;++t){const o=n[t];if("html_block"===o.type){const r=[];for(const{type:n,content:t}of j(o.content)){const o=new e.Token(n,"",0);o.content=t,r.push(o)}if(1===r.length&&"html_block"===r[0].type)n[t].content=r[0].content;else{const o=new e.Token("inline","",0);o.children=r,n[t]=o}}}},"transformPlaceholderCore");function T(e){e.inline.ruler.push("placeholder",k),e.core.ruler.after("inline","placeholder",x),e.renderer.rules.placeholder=(e,n,t,o,r)=>m(e,n,0,o)}r(T,"hookTemplateLiterals");const w=r(e=>e.split(/\s+/).reduce((e,n,t)=>{if(0===t)return e.type=n,e;const[o,r]=n.split("=");switch(o){case"exec":case"echo":case"hide":e[o]="false"!==r}return e},{...c}),"deserializeFenceInfo"),C=r((e,n,t,o,r)=>r.renderToken(e,n,t),"proxy");function A(e){const n=e.renderer.rules.fence||C,t=r((e,t,o,r,c)=>{const i=e[t],d=w(i.info);"javascript"===d.type&&(d.type="js"),i.content+="\n";let a="";return"js"!==d.type?a+n(e,t,o,r,c):(l(d)&&(r[p]||(r[p]=[]),a+=f(i.content,d,r)),s(d)?a+n(e,t,o,r,c):a)},"fenceRenderer");e.renderer.rules.fence=t}function I(e){const n=e.render;e.render=(t,o)=>{const r={...o},c=n.call(e,t,r);return y(r[p]??[]),c}}function P(e){const n=e.render;e.render=(t,o)=>{const r=o??{};let c=n.call(e,t,r);if(o[p]?.length){c+=`<RenderComponent content="${encodeURI(JSON.stringify(o[p]))}" />`}return c}}function S(e,n={}){T(e),A(e),n.vitePress?P(e):I(e)}r(A,"hookFence"),r(I,"hookRender"),r(P,"hookVitepressRender"),r(S,"observable"),e.observable=S,e.render=y,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
|
|
2
|
+
//# sourceMappingURL=index.umd.cjs.map
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","names":["fenceInfoDefaults: Readonly<FenceInfo>","retVal: RenderNode[]","e: any","placeholder: HTMLElement","displayIndex: { [key: string]: boolean }","nb: ohq.Notebook","transformPlaceholderInline: RuleInline","transformPlaceholderCore: RuleCore","children: Token[]"],"sources":["../src/util.ts","../src/render.ts","../src/template-literal.ts","../src/fence.ts","../src/index.ts"],"sourcesContent":["import { ojs2notebook } from \"@hpcc-js/observablehq-compiler\";\nimport { RenderNode } from \"./render.ts\";\n\nexport interface FenceInfo {\n type: \"js\" | \"javascript\" | string;\n exec?: boolean;\n echo?: boolean;\n hide?: boolean;\n}\n\nexport const fenceInfoDefaults: Readonly<FenceInfo> = {\n type: \"js\",\n exec: false,\n echo: undefined,\n hide: undefined\n};\n\nexport function showSrc(fetchInfo: FenceInfo): boolean {\n if (fetchInfo.exec === true) {\n return fetchInfo.echo === true;\n }\n return fetchInfo.echo !== false;\n}\n\nexport function executeSrc(fenceInfo: FenceInfo): boolean {\n return fenceInfo.exec === true;\n}\n\nexport function renderExecutedSrc(fetchInfo: FenceInfo): boolean {\n return fetchInfo.exec == true && fetchInfo.hide !== true;\n}\n\nlet idx = 0;\nexport function createId(suffix?: string | number): string {\n return `fence-${++idx}${suffix ? `-${suffix}` : \"\"}`;\n}\n\nfunction calcPlaceholders(content: string, fenceInfo: FenceInfo): RenderNode[] {\n const retVal: RenderNode[] = [];\n try {\n const cellNb = ojs2notebook(content);\n for (let i = 0; i < cellNb.nodes.length; ++i) {\n const id = createId(i + 1);\n const content = cellNb.nodes[i].value;\n retVal.push({\n ...fenceInfo,\n id,\n content,\n innerHTML: `\\\n<span id=\"${id}\" >\n ${renderExecutedSrc(fenceInfo) ? \"...\" : \"\"}\n</span>`\n });\n }\n } catch (e: any) {\n const id = `fence-${idx}-error`;\n retVal.push({\n ...fenceInfo,\n id,\n content: JSON.stringify(e),\n innerHTML: `\\\n<span id=\"${id}\" class=\"red\">\n ${JSON.stringify(e)}\n</span>`\n });\n }\n return retVal;\n}\n\nexport const ENV_KEY = \"ENV_OBSERVABLE\";\n\nexport function generatePlaceholders(content: string, fenceInfo: FenceInfo, env: any): string {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n return calcPlaceholders(content, fenceInfo).reduce((acc, cur) => {\n env[ENV_KEY]!.push({ ...cur, innerHTML: undefined });\n return acc + cur.innerHTML;\n }, \"\");\n}\n\n","import { Runtime, Library, Inspector as BaseInspector } from \"@observablehq/runtime\";\nimport { compile, type ohq } from \"@hpcc-js/observablehq-compiler\";\nimport { FenceInfo, renderExecutedSrc } from \"./util.ts\";\n\nclass Inspector extends BaseInspector {\n\n constructor(protected placeholder: HTMLElement) {\n super(placeholder);\n }\n\n pending() {\n super.pending();\n }\n\n fulfilled(value: any, _name?: string) {\n switch (typeof value) {\n case \"string\":\n this.placeholder.innerText = value;\n break;\n default:\n super.fulfilled(value);\n }\n }\n\n rejected(error: Error) {\n super.rejected(error);\n }\n}\n\nexport interface RenderNode extends FenceInfo {\n id: string;\n content: string;\n innerHTML?: string;\n}\n\nexport async function render(nodes: RenderNode[]) {\n const displayIndex: { [key: string]: boolean } = {};\n const nb: ohq.Notebook = { nodes: [], files: [] };\n for (const node of nodes) {\n nb.nodes.push({\n id: node.id,\n name: node.id,\n mode: \"js\",\n value: node.content\n });\n displayIndex[node.id] = renderExecutedSrc(node);\n }\n const define = await compile(nb);\n const runtime = new Runtime(new Library());\n runtime.module(define, () => {\n define(runtime, (_name: string | undefined, id: string | number) => {\n const placeholder = globalThis?.document?.getElementById(\"\" + id);\n if (placeholder && displayIndex[id]) {\n return new Inspector(placeholder);\n }\n return {\n pending() { },\n fulfilled(_value: any, _name?: string) { },\n rejected(_error: any, _name?: string) { }\n };\n });\n });\n}\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport type { RuleCore } from \"markdown-it/lib/parser_core.mjs\";\nimport type { RuleInline } from \"markdown-it/lib/parser_inline.mjs\";\nimport { generatePlaceholders } from \"./util.ts\";\n\nfunction renderObservable(tokens: Token[], idx: number, _options: Options, env: any, _self: Renderer) {\n return generatePlaceholders(tokens[idx].content, { type: \"js\", exec: true }, env);\n}\n\nconst DOLLAR = 0x24;\nconst CURLEY_OPEN = 0x7B;\nconst CURLEY_CLOSE = 0x7D;\n\nfunction* parsePlaceholderInline(src: string, pos: number = 0, posMax: number = src.length) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n pos += 2;\n\n const observableStart = pos;\n let nestedCurly = 0;\n let done = false;\n while (!done && pos < posMax) {\n switch (src.charCodeAt(pos)) {\n case CURLEY_OPEN:\n nestedCurly++;\n break;\n case CURLEY_CLOSE:\n if (nestedCurly === 0) {\n done = true;\n --pos;\n } else {\n nestedCurly--;\n }\n break;\n }\n pos++;\n }\n const observableEnd = pos;\n if (pos >= posMax || observableStart == observableEnd) return;\n if (src.charCodeAt(pos) !== CURLEY_CLOSE) return;\n pos++;\n\n const observableJs = src.slice(observableStart, observableEnd).trim();\n yield { type: \"placeholder\", content: observableJs, pos };\n }\n}\n\nfunction* parsePlaceholderBlock(src: string) {\n let pos = 0;\n let prevPos = 0;\n const posMax = src.length;\n while (pos < posMax) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n for (const placeholder of parsePlaceholderInline(src, pos, posMax)) {\n yield placeholder;\n pos = placeholder.pos;\n prevPos = pos;\n }\n } else {\n pos++;\n }\n }\n if (pos > prevPos) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n }\n}\n\nconst transformPlaceholderInline: RuleInline = (state, silent) => {\n if (silent || state.pos + 2 > state.posMax) return false;\n const marker1 = state.src.charCodeAt(state.pos);\n const marker2 = state.src.charCodeAt(state.pos + 1);\n if (marker1 !== DOLLAR || marker2 !== CURLEY_OPEN) return false;\n for (const { type, content, pos } of parsePlaceholderInline(state.src, state.pos, state.posMax)) {\n if (type !== \"placeholder\") break;\n const token = state.push(type, \"\", 0);\n token.content = content;\n state.pos = pos;\n return true;\n }\n return false;\n};\n\nconst transformPlaceholderCore: RuleCore = (state) => {\n const { tokens } = state;\n for (let i = 0, n = tokens.length; i < n; ++i) {\n const token = tokens[i];\n if (token.type === \"html_block\") {\n const children: Token[] = [];\n for (const { type, content } of parsePlaceholderBlock(token.content)) {\n const child = new state.Token(type, \"\", 0);\n child.content = content;\n children.push(child);\n }\n if (children.length === 1 && children[0].type === \"html_block\") {\n tokens[i].content = children[0].content;\n } else {\n const inline = new state.Token(\"inline\", \"\", 0);\n inline.children = children;\n tokens[i] = inline;\n }\n }\n }\n};\n\nexport function hookTemplateLiterals(md: MarkdownIt) {\n md.inline.ruler.push(\"placeholder\", transformPlaceholderInline);\n md.core.ruler.after(\"inline\", \"placeholder\", transformPlaceholderCore);\n md.renderer.rules.placeholder = (tokens: Token[], idx: number, options: any, env: any, self: Renderer) => renderObservable(tokens, idx, options, env, self);\n}\n\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport { RenderNode } from \"./render.ts\";\nimport { ENV_KEY, executeSrc, FenceInfo, fenceInfoDefaults, generatePlaceholders, showSrc } from \"./util.ts\";\n\nconst deserializeFenceInfo = (attrs: string): FenceInfo =>\n attrs\n .split(/\\s+/)\n .reduce((acc: FenceInfo, pair, idx: number) => {\n if (idx === 0) {\n acc.type = pair as \"js\" | \"javascript\" | string;\n return acc;\n }\n\n const [key, value] = pair.split(\"=\") as [keyof FenceInfo, string];\n switch (key) {\n case \"exec\":\n case \"echo\":\n case \"hide\":\n acc[key] = value !== \"false\";\n break;\n }\n return acc;\n }, { ...fenceInfoDefaults })\n ;\n\nconst proxy = (tokens: Token[], idx: number, options: Options, _env: any, self: Renderer) => self.renderToken(tokens, idx, options);\n\nexport function hookFence(md: MarkdownIt) {\n const defaultFenceRenderer = md.renderer.rules.fence || proxy;\n const fenceRenderer = (tokens: Token[], idx: number, options: Options, env: { [ENV_KEY]?: RenderNode[] }, self: Renderer) => {\n const token = tokens[idx];\n const fenceInfo = deserializeFenceInfo(token.info);\n if (fenceInfo.type === \"javascript\") {\n fenceInfo.type = \"js\";\n }\n token.content += \"\\n\";\n let preHtml = \"\";\n switch (fenceInfo.type) {\n case \"js\":\n if (executeSrc(fenceInfo)) {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n preHtml += generatePlaceholders(token.content, fenceInfo, env);\n }\n if (showSrc(fenceInfo)) {\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n break;\n default:\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n return preHtml;\n };\n md.renderer.rules.fence = fenceRenderer;\n}\n","import type MarkdownIt from \"markdown-it\";\nimport { render } from \"./render.ts\";\nimport { ENV_KEY } from \"./util.ts\";\nimport { hookTemplateLiterals } from \"./template-literal.ts\";\nimport { hookFence } from \"./fence.ts\";\n\nfunction hookRender(md: MarkdownIt) {\n const originalRender = md.render;\n md.render = (src: string, _env?: any): string => {\n const env = { ..._env };\n const retVal = originalRender.call(md, src, env);\n render(env[ENV_KEY] ?? []);\n return retVal;\n };\n}\n\nfunction hookVitepressRender(md: MarkdownIt) {\n\n const originalRender = md.render;\n md.render = (src: string, env?: any): string => {\n const myEnv = env ?? {};\n let retVal = originalRender.call(md, src, myEnv);\n if (env[ENV_KEY]?.length) {\n const content = encodeURI(JSON.stringify(env[ENV_KEY]));\n retVal += `<RenderComponent content=\"${content}\" />`;\n }\n return retVal;\n };\n}\n\nexport interface ObservableOptions {\n vitePress?: boolean;\n}\n\nexport function observable(md: MarkdownIt, opts: ObservableOptions = {}) {\n hookTemplateLiterals(md);\n hookFence(md);\n if (opts.vitePress) {\n hookVitepressRender(md);\n } else {\n hookRender(md);\n }\n}\n\nexport {\n render\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/util.ts","../src/render.ts","../src/template-literal.ts","../src/fence.ts","../src/index.ts"],"sourcesContent":["import { ojs2notebook } from \"@hpcc-js/observablehq-compiler\";\nimport { RenderNode } from \"./render.ts\";\n\nexport interface FenceInfo {\n type: \"js\" | \"javascript\" | string;\n exec?: boolean;\n echo?: boolean;\n hide?: boolean;\n}\n\nexport const fenceInfoDefaults: Readonly<FenceInfo> = {\n type: \"js\",\n exec: false,\n echo: undefined,\n hide: undefined\n};\n\nexport function showSrc(fetchInfo: FenceInfo): boolean {\n if (fetchInfo.exec === true) {\n return fetchInfo.echo === true;\n }\n return fetchInfo.echo !== false;\n}\n\nexport function executeSrc(fenceInfo: FenceInfo): boolean {\n return fenceInfo.exec === true;\n}\n\nexport function renderExecutedSrc(fetchInfo: FenceInfo): boolean {\n return fetchInfo.exec == true && fetchInfo.hide !== true;\n}\n\nlet idx = 0;\nexport function createId(suffix?: string | number): string {\n return `fence-${++idx}${suffix ? `-${suffix}` : \"\"}`;\n}\n\nfunction calcPlaceholders(content: string, fenceInfo: FenceInfo): RenderNode[] {\n const retVal: RenderNode[] = [];\n try {\n const cellNb = ojs2notebook(content);\n for (let i = 0; i < cellNb.nodes.length; ++i) {\n const id = createId(i + 1);\n const content = cellNb.nodes[i].value;\n retVal.push({\n ...fenceInfo,\n id,\n content,\n innerHTML: `\\\n<span id=\"${id}\" >\n ${renderExecutedSrc(fenceInfo) ? \"...\" : \"\"}\n</span>`\n });\n }\n } catch (e: any) {\n const id = `fence-${idx}-error`;\n retVal.push({\n ...fenceInfo,\n id,\n content: JSON.stringify(e),\n innerHTML: `\\\n<span id=\"${id}\" class=\"red\">\n ${JSON.stringify(e)}\n</span>`\n });\n }\n return retVal;\n}\n\nexport const ENV_KEY = \"ENV_OBSERVABLE\";\n\nexport function generatePlaceholders(content: string, fenceInfo: FenceInfo, env: any): string {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n return calcPlaceholders(content, fenceInfo).reduce((acc, cur) => {\n env[ENV_KEY]!.push({ ...cur, innerHTML: undefined });\n return acc + cur.innerHTML;\n }, \"\");\n}\n\n","import { Runtime, Library, Inspector as BaseInspector } from \"@observablehq/runtime\";\nimport { compile, type ohq } from \"@hpcc-js/observablehq-compiler\";\nimport { FenceInfo, renderExecutedSrc } from \"./util.ts\";\n\nclass Inspector extends BaseInspector {\n\n constructor(protected placeholder: HTMLElement) {\n super(placeholder);\n }\n\n pending() {\n super.pending();\n }\n\n fulfilled(value: any, _name?: string) {\n switch (typeof value) {\n case \"string\":\n this.placeholder.innerText = value;\n break;\n default:\n super.fulfilled(value);\n }\n }\n\n rejected(error: Error) {\n super.rejected(error);\n }\n}\n\nexport interface RenderNode extends FenceInfo {\n id: string;\n content: string;\n innerHTML?: string;\n}\n\nexport async function render(nodes: RenderNode[]) {\n const displayIndex: { [key: string]: boolean } = {};\n const nb: ohq.Notebook = { nodes: [], files: [] };\n for (const node of nodes) {\n nb.nodes.push({\n id: node.id,\n name: node.id,\n mode: \"js\",\n value: node.content\n });\n displayIndex[node.id] = renderExecutedSrc(node);\n }\n const define = await compile(nb);\n const runtime = new Runtime(new Library());\n runtime.module(define, () => {\n define(runtime, (_name: string | undefined, id: string | number) => {\n const placeholder = globalThis?.document?.getElementById(\"\" + id);\n if (placeholder && displayIndex[id]) {\n return new Inspector(placeholder);\n }\n return {\n pending() { },\n fulfilled(_value: any, _name?: string) { },\n rejected(_error: any, _name?: string) { }\n };\n });\n });\n}\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport type { RuleCore } from \"markdown-it/lib/parser_core.mjs\";\nimport type { RuleInline } from \"markdown-it/lib/parser_inline.mjs\";\nimport { generatePlaceholders } from \"./util.ts\";\n\nfunction renderObservable(tokens: Token[], idx: number, _options: Options, env: any, _self: Renderer) {\n return generatePlaceholders(tokens[idx].content, { type: \"js\", exec: true }, env);\n}\n\nconst DOLLAR = 0x24;\nconst CURLEY_OPEN = 0x7B;\nconst CURLEY_CLOSE = 0x7D;\n\nfunction* parsePlaceholderInline(src: string, pos: number = 0, posMax: number = src.length) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n pos += 2;\n\n const observableStart = pos;\n let nestedCurly = 0;\n let done = false;\n while (!done && pos < posMax) {\n switch (src.charCodeAt(pos)) {\n case CURLEY_OPEN:\n nestedCurly++;\n break;\n case CURLEY_CLOSE:\n if (nestedCurly === 0) {\n done = true;\n --pos;\n } else {\n nestedCurly--;\n }\n break;\n }\n pos++;\n }\n const observableEnd = pos;\n if (pos >= posMax || observableStart == observableEnd) return;\n if (src.charCodeAt(pos) !== CURLEY_CLOSE) return;\n pos++;\n\n const observableJs = src.slice(observableStart, observableEnd).trim();\n yield { type: \"placeholder\", content: observableJs, pos };\n }\n}\n\nfunction* parsePlaceholderBlock(src: string) {\n let pos = 0;\n let prevPos = 0;\n const posMax = src.length;\n while (pos < posMax) {\n if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n for (const placeholder of parsePlaceholderInline(src, pos, posMax)) {\n yield placeholder;\n pos = placeholder.pos;\n prevPos = pos;\n }\n } else {\n pos++;\n }\n }\n if (pos > prevPos) {\n yield ({ type: \"html_block\", content: src.slice(prevPos, pos) });\n }\n}\n\nconst transformPlaceholderInline: RuleInline = (state, silent) => {\n if (silent || state.pos + 2 > state.posMax) return false;\n const marker1 = state.src.charCodeAt(state.pos);\n const marker2 = state.src.charCodeAt(state.pos + 1);\n if (marker1 !== DOLLAR || marker2 !== CURLEY_OPEN) return false;\n for (const { type, content, pos } of parsePlaceholderInline(state.src, state.pos, state.posMax)) {\n if (type !== \"placeholder\") break;\n const token = state.push(type, \"\", 0);\n token.content = content;\n state.pos = pos;\n return true;\n }\n return false;\n};\n\nconst transformPlaceholderCore: RuleCore = (state) => {\n const { tokens } = state;\n for (let i = 0, n = tokens.length; i < n; ++i) {\n const token = tokens[i];\n if (token.type === \"html_block\") {\n const children: Token[] = [];\n for (const { type, content } of parsePlaceholderBlock(token.content)) {\n const child = new state.Token(type, \"\", 0);\n child.content = content;\n children.push(child);\n }\n if (children.length === 1 && children[0].type === \"html_block\") {\n tokens[i].content = children[0].content;\n } else {\n const inline = new state.Token(\"inline\", \"\", 0);\n inline.children = children;\n tokens[i] = inline;\n }\n }\n }\n};\n\nexport function hookTemplateLiterals(md: MarkdownIt) {\n md.inline.ruler.push(\"placeholder\", transformPlaceholderInline);\n md.core.ruler.after(\"inline\", \"placeholder\", transformPlaceholderCore);\n md.renderer.rules.placeholder = (tokens: Token[], idx: number, options: any, env: any, self: Renderer) => renderObservable(tokens, idx, options, env, self);\n}\n\n","import type MarkdownIt from \"markdown-it\";\nimport type { Options } from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport { RenderNode } from \"./render.ts\";\nimport { ENV_KEY, executeSrc, FenceInfo, fenceInfoDefaults, generatePlaceholders, showSrc } from \"./util.ts\";\n\nconst deserializeFenceInfo = (attrs: string): FenceInfo =>\n attrs\n .split(/\\s+/)\n .reduce((acc: FenceInfo, pair, idx: number) => {\n if (idx === 0) {\n acc.type = pair as \"js\" | \"javascript\" | string;\n return acc;\n }\n\n const [key, value] = pair.split(\"=\") as [keyof FenceInfo, string];\n switch (key) {\n case \"exec\":\n case \"echo\":\n case \"hide\":\n acc[key] = value !== \"false\";\n break;\n }\n return acc;\n }, { ...fenceInfoDefaults })\n ;\n\nconst proxy = (tokens: Token[], idx: number, options: Options, _env: any, self: Renderer) => self.renderToken(tokens, idx, options);\n\nexport function hookFence(md: MarkdownIt) {\n const defaultFenceRenderer = md.renderer.rules.fence || proxy;\n const fenceRenderer = (tokens: Token[], idx: number, options: Options, env: { [ENV_KEY]?: RenderNode[] }, self: Renderer) => {\n const token = tokens[idx];\n const fenceInfo = deserializeFenceInfo(token.info);\n if (fenceInfo.type === \"javascript\") {\n fenceInfo.type = \"js\";\n }\n token.content += \"\\n\";\n let preHtml = \"\";\n switch (fenceInfo.type) {\n case \"js\":\n if (executeSrc(fenceInfo)) {\n if (!env[ENV_KEY]) {\n env[ENV_KEY] = [];\n }\n preHtml += generatePlaceholders(token.content, fenceInfo, env);\n }\n if (showSrc(fenceInfo)) {\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n break;\n default:\n return preHtml + defaultFenceRenderer(tokens, idx, options, env, self);\n }\n return preHtml;\n };\n md.renderer.rules.fence = fenceRenderer;\n}\n","import type MarkdownIt from \"markdown-it\";\nimport { render } from \"./render.ts\";\nimport { ENV_KEY } from \"./util.ts\";\nimport { hookTemplateLiterals } from \"./template-literal.ts\";\nimport { hookFence } from \"./fence.ts\";\n\nfunction hookRender(md: MarkdownIt) {\n const originalRender = md.render;\n md.render = (src: string, _env?: any): string => {\n const env = { ..._env };\n const retVal = originalRender.call(md, src, env);\n render(env[ENV_KEY] ?? []);\n return retVal;\n };\n}\n\nfunction hookVitepressRender(md: MarkdownIt) {\n\n const originalRender = md.render;\n md.render = (src: string, env?: any): string => {\n const myEnv = env ?? {};\n let retVal = originalRender.call(md, src, myEnv);\n if (env[ENV_KEY]?.length) {\n const content = encodeURI(JSON.stringify(env[ENV_KEY]));\n retVal += `<RenderComponent content=\"${content}\" />`;\n }\n return retVal;\n };\n}\n\nexport interface ObservableOptions {\n vitePress?: boolean;\n}\n\nexport function observable(md: MarkdownIt, opts: ObservableOptions = {}) {\n hookTemplateLiterals(md);\n hookFence(md);\n if (opts.vitePress) {\n hookVitepressRender(md);\n } else {\n hookRender(md);\n }\n}\n\nexport {\n render\n};\n"],"names":["fenceInfoDefaults","type","exec","echo","hide","showSrc","fetchInfo","executeSrc","fenceInfo","renderExecutedSrc","__name","idx","createId","suffix","calcPlaceholders","content","retVal","cellNb","ojs2notebook","i","nodes","length","id","value","push","innerHTML","e","JSON","stringify","ENV_KEY","generatePlaceholders","env","reduce","acc","cur","_Inspector","BaseInspector","constructor","placeholder","super","this","pending","fulfilled","_name","innerText","rejected","error","Inspector","async","render","displayIndex","nb","files","node","name","mode","define","compile","runtime","Runtime","Library","module","globalThis","document","getElementById","_value","_error","renderObservable","tokens","_options","_self","CURLEY_OPEN","parsePlaceholderInline","src","pos","posMax","charCodeAt","observableStart","nestedCurly","done","observableEnd","observableJs","slice","trim","parsePlaceholderBlock","prevPos","transformPlaceholderInline","state","silent","marker1","marker2","transformPlaceholderCore","n","token","children","child","Token","inline","hookTemplateLiterals","md","ruler","core","after","renderer","rules","options","self","deserializeFenceInfo","attrs","split","pair","key","proxy","_env","renderToken","hookFence","defaultFenceRenderer","fence","fenceRenderer","info","preHtml","hookRender","originalRender","call","hookVitepressRender","myEnv","encodeURI","observable","opts","vitePress"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hpcc-js/markdown-it-plugins",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "markdown-it plugins",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.umd.cjs",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"update-major": "npx --yes npm-check-updates -u"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@hpcc-js/observablehq-compiler": "^3.
|
|
55
|
+
"@hpcc-js/observablehq-compiler": "^3.6.1",
|
|
56
56
|
"@observablehq/framework": "1.13.3",
|
|
57
57
|
"@observablehq/runtime": "5.9.9",
|
|
58
58
|
"@types/markdown-it": "14.1.2"
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"shiki": "2.5.0"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@hpcc-js/esbuild-plugins": "^1.
|
|
66
|
+
"@hpcc-js/esbuild-plugins": "^1.6.1",
|
|
67
67
|
"d3-dsv": "3.0.1",
|
|
68
68
|
"d3-fetch": "3.0.1",
|
|
69
69
|
"dotenv": "16.6.1",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"url": "https://github.com/hpcc-systems/Visualization/issues"
|
|
81
81
|
},
|
|
82
82
|
"homepage": "https://github.com/hpcc-systems/Visualization/tree/trunk/packages/markdonw-it-plugins",
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "d93d09e45945a39ab056bae20a3dcca3c918cd82"
|
|
84
84
|
}
|
package/src/__package__.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const PKG_NAME = "
|
|
2
|
-
export const PKG_VERSION = "
|
|
3
|
-
export const BUILD_VERSION = "
|
|
1
|
+
export const PKG_NAME = "__PACKAGE_NAME__";
|
|
2
|
+
export const PKG_VERSION = "__PACKAGE_VERSION__";
|
|
3
|
+
export const BUILD_VERSION = "__BUILD_VERSION__";
|