@hpcc-js/markdown-it-plugins 1.3.8 → 1.3.10
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 +140 -54
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -6
- package/dist/index.umd.cjs.map +1 -1
- package/dist/loader.node.js.map +1 -1
- package/package.json +7 -7
- package/src/__package__.ts +2 -2
package/dist/index.js
CHANGED
|
@@ -1,30 +1,40 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
1
3
|
import { Runtime, Library, Inspector as Inspector$1 } from "@observablehq/runtime";
|
|
2
4
|
import { ojs2notebook, compile } from "@hpcc-js/observablehq-compiler";
|
|
3
5
|
const fenceInfoDefaults = {
|
|
4
6
|
type: "js",
|
|
5
|
-
exec:
|
|
7
|
+
exec: false,
|
|
6
8
|
echo: void 0,
|
|
7
9
|
hide: void 0
|
|
8
10
|
};
|
|
9
11
|
function showSrc(fetchInfo) {
|
|
10
|
-
|
|
12
|
+
if (fetchInfo.exec === true) {
|
|
13
|
+
return fetchInfo.echo === true;
|
|
14
|
+
}
|
|
15
|
+
return fetchInfo.echo !== false;
|
|
11
16
|
}
|
|
17
|
+
__name(showSrc, "showSrc");
|
|
12
18
|
function executeSrc(fenceInfo) {
|
|
13
|
-
return fenceInfo.exec ===
|
|
19
|
+
return fenceInfo.exec === true;
|
|
14
20
|
}
|
|
21
|
+
__name(executeSrc, "executeSrc");
|
|
15
22
|
function renderExecutedSrc(fetchInfo) {
|
|
16
|
-
return fetchInfo.exec ==
|
|
23
|
+
return fetchInfo.exec == true && fetchInfo.hide !== true;
|
|
17
24
|
}
|
|
25
|
+
__name(renderExecutedSrc, "renderExecutedSrc");
|
|
18
26
|
let idx = 0;
|
|
19
27
|
function createId(suffix) {
|
|
20
28
|
return `fence-${++idx}${suffix ? `-${suffix}` : ""}`;
|
|
21
29
|
}
|
|
30
|
+
__name(createId, "createId");
|
|
22
31
|
function calcPlaceholders(content, fenceInfo) {
|
|
23
32
|
const retVal = [];
|
|
24
33
|
try {
|
|
25
34
|
const cellNb = ojs2notebook(content);
|
|
26
35
|
for (let i = 0; i < cellNb.nodes.length; ++i) {
|
|
27
|
-
const id = createId(i + 1)
|
|
36
|
+
const id = createId(i + 1);
|
|
37
|
+
const content2 = cellNb.nodes[i].value;
|
|
28
38
|
retVal.push({
|
|
29
39
|
...fenceInfo,
|
|
30
40
|
id,
|
|
@@ -47,13 +57,22 @@ function calcPlaceholders(content, fenceInfo) {
|
|
|
47
57
|
}
|
|
48
58
|
return retVal;
|
|
49
59
|
}
|
|
60
|
+
__name(calcPlaceholders, "calcPlaceholders");
|
|
50
61
|
const ENV_KEY = "ENV_OBSERVABLE";
|
|
51
62
|
function generatePlaceholders(content, fenceInfo, env) {
|
|
52
|
-
|
|
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
|
+
}, "");
|
|
53
70
|
}
|
|
54
|
-
|
|
71
|
+
__name(generatePlaceholders, "generatePlaceholders");
|
|
72
|
+
const _Inspector = class _Inspector extends Inspector$1 {
|
|
55
73
|
constructor(placeholder) {
|
|
56
|
-
super(placeholder)
|
|
74
|
+
super(placeholder);
|
|
75
|
+
this.placeholder = placeholder;
|
|
57
76
|
}
|
|
58
77
|
pending() {
|
|
59
78
|
super.pending();
|
|
@@ -70,22 +89,31 @@ class Inspector extends Inspector$1 {
|
|
|
70
89
|
rejected(error) {
|
|
71
90
|
super.rejected(error);
|
|
72
91
|
}
|
|
73
|
-
}
|
|
92
|
+
};
|
|
93
|
+
__name(_Inspector, "Inspector");
|
|
94
|
+
let Inspector = _Inspector;
|
|
74
95
|
async function render(nodes) {
|
|
75
|
-
const displayIndex = {}
|
|
76
|
-
|
|
96
|
+
const displayIndex = {};
|
|
97
|
+
const nb = { nodes: [], files: [] };
|
|
98
|
+
for (const node of nodes) {
|
|
77
99
|
nb.nodes.push({
|
|
78
100
|
id: node.id,
|
|
79
101
|
name: node.id,
|
|
80
102
|
mode: "js",
|
|
81
103
|
value: node.content
|
|
82
|
-
})
|
|
83
|
-
|
|
104
|
+
});
|
|
105
|
+
displayIndex[node.id] = renderExecutedSrc(node);
|
|
106
|
+
}
|
|
107
|
+
const define = await compile(nb);
|
|
108
|
+
const runtime = new Runtime(new Library());
|
|
84
109
|
runtime.module(define, () => {
|
|
85
110
|
define(runtime, (_name, id) => {
|
|
86
111
|
var _a;
|
|
87
112
|
const placeholder = (_a = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a.getElementById("" + id);
|
|
88
|
-
|
|
113
|
+
if (placeholder && displayIndex[id]) {
|
|
114
|
+
return new Inspector(placeholder);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
89
117
|
pending() {
|
|
90
118
|
},
|
|
91
119
|
fulfilled(_value, _name2) {
|
|
@@ -96,54 +124,81 @@ async function render(nodes) {
|
|
|
96
124
|
});
|
|
97
125
|
});
|
|
98
126
|
}
|
|
127
|
+
__name(render, "render");
|
|
99
128
|
function renderObservable(tokens, idx2, _options, env, _self) {
|
|
100
|
-
return generatePlaceholders(tokens[idx2].content, { type: "js", exec:
|
|
129
|
+
return generatePlaceholders(tokens[idx2].content, { type: "js", exec: true }, env);
|
|
101
130
|
}
|
|
102
|
-
|
|
131
|
+
__name(renderObservable, "renderObservable");
|
|
132
|
+
const DOLLAR = 36;
|
|
133
|
+
const CURLEY_OPEN = 123;
|
|
134
|
+
const CURLEY_CLOSE = 125;
|
|
103
135
|
function* parsePlaceholderInline(src, pos = 0, posMax = src.length) {
|
|
104
136
|
if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {
|
|
105
137
|
pos += 2;
|
|
106
138
|
const observableStart = pos;
|
|
107
|
-
let nestedCurly = 0
|
|
108
|
-
|
|
139
|
+
let nestedCurly = 0;
|
|
140
|
+
let done = false;
|
|
141
|
+
while (!done && pos < posMax) {
|
|
109
142
|
switch (src.charCodeAt(pos)) {
|
|
110
143
|
case CURLEY_OPEN:
|
|
111
144
|
nestedCurly++;
|
|
112
145
|
break;
|
|
113
146
|
case CURLEY_CLOSE:
|
|
114
|
-
nestedCurly === 0
|
|
147
|
+
if (nestedCurly === 0) {
|
|
148
|
+
done = true;
|
|
149
|
+
--pos;
|
|
150
|
+
} else {
|
|
151
|
+
nestedCurly--;
|
|
152
|
+
}
|
|
115
153
|
break;
|
|
116
154
|
}
|
|
117
155
|
pos++;
|
|
118
156
|
}
|
|
119
157
|
const observableEnd = pos;
|
|
120
|
-
if (pos >= posMax || observableStart == observableEnd
|
|
121
|
-
|
|
158
|
+
if (pos >= posMax || observableStart == observableEnd) return;
|
|
159
|
+
if (src.charCodeAt(pos) !== CURLEY_CLOSE) return;
|
|
160
|
+
pos++;
|
|
161
|
+
const observableJs = src.slice(observableStart, observableEnd).trim();
|
|
162
|
+
yield { type: "placeholder", content: observableJs, pos };
|
|
122
163
|
}
|
|
123
164
|
}
|
|
165
|
+
__name(parsePlaceholderInline, "parsePlaceholderInline");
|
|
124
166
|
function* parsePlaceholderBlock(src) {
|
|
125
|
-
let pos = 0
|
|
167
|
+
let pos = 0;
|
|
168
|
+
let prevPos = 0;
|
|
126
169
|
const posMax = src.length;
|
|
127
|
-
|
|
170
|
+
while (pos < posMax) {
|
|
128
171
|
if (src.charCodeAt(pos) === DOLLAR && src.charCodeAt(pos + 1) === CURLEY_OPEN) {
|
|
129
172
|
yield { type: "html_block", content: src.slice(prevPos, pos) };
|
|
130
|
-
for (const placeholder of parsePlaceholderInline(src, pos, posMax))
|
|
131
|
-
yield placeholder
|
|
132
|
-
|
|
173
|
+
for (const placeholder of parsePlaceholderInline(src, pos, posMax)) {
|
|
174
|
+
yield placeholder;
|
|
175
|
+
pos = placeholder.pos;
|
|
176
|
+
prevPos = pos;
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
133
179
|
pos++;
|
|
134
|
-
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (pos > prevPos) {
|
|
183
|
+
yield { type: "html_block", content: src.slice(prevPos, pos) };
|
|
184
|
+
}
|
|
135
185
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
186
|
+
__name(parsePlaceholderBlock, "parsePlaceholderBlock");
|
|
187
|
+
const transformPlaceholderInline = /* @__PURE__ */ __name((state, silent) => {
|
|
188
|
+
if (silent || state.pos + 2 > state.posMax) return false;
|
|
189
|
+
const marker1 = state.src.charCodeAt(state.pos);
|
|
190
|
+
const marker2 = state.src.charCodeAt(state.pos + 1);
|
|
191
|
+
if (marker1 !== DOLLAR || marker2 !== CURLEY_OPEN) return false;
|
|
140
192
|
for (const { type, content, pos } of parsePlaceholderInline(state.src, state.pos, state.posMax)) {
|
|
141
193
|
if (type !== "placeholder") break;
|
|
142
194
|
const token = state.push(type, "", 0);
|
|
143
|
-
|
|
195
|
+
token.content = content;
|
|
196
|
+
state.pos = pos;
|
|
197
|
+
return true;
|
|
144
198
|
}
|
|
145
|
-
return
|
|
146
|
-
},
|
|
199
|
+
return false;
|
|
200
|
+
}, "transformPlaceholderInline");
|
|
201
|
+
const transformPlaceholderCore = /* @__PURE__ */ __name((state) => {
|
|
147
202
|
const { tokens } = state;
|
|
148
203
|
for (let i = 0, n = tokens.length; i < n; ++i) {
|
|
149
204
|
const token = tokens[i];
|
|
@@ -151,23 +206,30 @@ const transformPlaceholderInline = (state, silent) => {
|
|
|
151
206
|
const children = [];
|
|
152
207
|
for (const { type, content } of parsePlaceholderBlock(token.content)) {
|
|
153
208
|
const child = new state.Token(type, "", 0);
|
|
154
|
-
child.content = content
|
|
209
|
+
child.content = content;
|
|
210
|
+
children.push(child);
|
|
155
211
|
}
|
|
156
|
-
if (children.length === 1 && children[0].type === "html_block")
|
|
212
|
+
if (children.length === 1 && children[0].type === "html_block") {
|
|
157
213
|
tokens[i].content = children[0].content;
|
|
158
|
-
else {
|
|
214
|
+
} else {
|
|
159
215
|
const inline = new state.Token("inline", "", 0);
|
|
160
|
-
inline.children = children
|
|
216
|
+
inline.children = children;
|
|
217
|
+
tokens[i] = inline;
|
|
161
218
|
}
|
|
162
219
|
}
|
|
163
220
|
}
|
|
164
|
-
};
|
|
221
|
+
}, "transformPlaceholderCore");
|
|
165
222
|
function hookTemplateLiterals(md) {
|
|
166
|
-
md.inline.ruler.push("placeholder", transformPlaceholderInline)
|
|
223
|
+
md.inline.ruler.push("placeholder", transformPlaceholderInline);
|
|
224
|
+
md.core.ruler.after("inline", "placeholder", transformPlaceholderCore);
|
|
225
|
+
md.renderer.rules.placeholder = (tokens, idx2, options, env, self) => renderObservable(tokens, idx2, options, env);
|
|
167
226
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
227
|
+
__name(hookTemplateLiterals, "hookTemplateLiterals");
|
|
228
|
+
const deserializeFenceInfo = /* @__PURE__ */ __name((attrs) => attrs.split(/\s+/).reduce((acc, pair, idx2) => {
|
|
229
|
+
if (idx2 === 0) {
|
|
230
|
+
acc.type = pair;
|
|
231
|
+
return acc;
|
|
232
|
+
}
|
|
171
233
|
const [key, value] = pair.split("=");
|
|
172
234
|
switch (key) {
|
|
173
235
|
case "exec":
|
|
@@ -177,48 +239,72 @@ const deserializeFenceInfo = (attrs) => attrs.split(/\s+/).reduce((acc, pair, id
|
|
|
177
239
|
break;
|
|
178
240
|
}
|
|
179
241
|
return acc;
|
|
180
|
-
}, { ...fenceInfoDefaults }),
|
|
242
|
+
}, { ...fenceInfoDefaults }), "deserializeFenceInfo");
|
|
243
|
+
const proxy = /* @__PURE__ */ __name((tokens, idx2, options, _env, self) => self.renderToken(tokens, idx2, options), "proxy");
|
|
181
244
|
function hookFence(md) {
|
|
182
|
-
const defaultFenceRenderer = md.renderer.rules.fence || proxy
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
245
|
+
const defaultFenceRenderer = md.renderer.rules.fence || proxy;
|
|
246
|
+
const fenceRenderer = /* @__PURE__ */ __name((tokens, idx2, options, env, self) => {
|
|
247
|
+
const token = tokens[idx2];
|
|
248
|
+
const fenceInfo = deserializeFenceInfo(token.info);
|
|
249
|
+
if (fenceInfo.type === "javascript") {
|
|
250
|
+
fenceInfo.type = "js";
|
|
251
|
+
}
|
|
252
|
+
token.content += "\n";
|
|
186
253
|
let preHtml = "";
|
|
187
254
|
switch (fenceInfo.type) {
|
|
188
255
|
case "js":
|
|
189
|
-
if (executeSrc(fenceInfo)
|
|
256
|
+
if (executeSrc(fenceInfo)) {
|
|
257
|
+
if (!env[ENV_KEY]) {
|
|
258
|
+
env[ENV_KEY] = [];
|
|
259
|
+
}
|
|
260
|
+
preHtml += generatePlaceholders(token.content, fenceInfo, env);
|
|
261
|
+
}
|
|
262
|
+
if (showSrc(fenceInfo)) {
|
|
190
263
|
return preHtml + defaultFenceRenderer(tokens, idx2, options, env, self);
|
|
264
|
+
}
|
|
191
265
|
break;
|
|
192
266
|
default:
|
|
193
267
|
return preHtml + defaultFenceRenderer(tokens, idx2, options, env, self);
|
|
194
268
|
}
|
|
195
269
|
return preHtml;
|
|
196
|
-
};
|
|
270
|
+
}, "fenceRenderer");
|
|
197
271
|
md.renderer.rules.fence = fenceRenderer;
|
|
198
272
|
}
|
|
273
|
+
__name(hookFence, "hookFence");
|
|
199
274
|
function hookRender(md) {
|
|
200
275
|
const originalRender = md.render;
|
|
201
276
|
md.render = (src, _env) => {
|
|
202
|
-
const env = { ..._env }
|
|
203
|
-
|
|
277
|
+
const env = { ..._env };
|
|
278
|
+
const retVal = originalRender.call(md, src, env);
|
|
279
|
+
render(env[ENV_KEY] ?? []);
|
|
280
|
+
return retVal;
|
|
204
281
|
};
|
|
205
282
|
}
|
|
283
|
+
__name(hookRender, "hookRender");
|
|
206
284
|
function hookVitepressRender(md) {
|
|
207
285
|
const originalRender = md.render;
|
|
208
286
|
md.render = (src, env) => {
|
|
209
287
|
var _a;
|
|
210
288
|
const myEnv = env ?? {};
|
|
211
289
|
let retVal = originalRender.call(md, src, myEnv);
|
|
212
|
-
if ((_a = env[ENV_KEY])
|
|
290
|
+
if ((_a = env[ENV_KEY]) == null ? void 0 : _a.length) {
|
|
213
291
|
const content = encodeURI(JSON.stringify(env[ENV_KEY]));
|
|
214
292
|
retVal += `<RenderComponent content="${content}" />`;
|
|
215
293
|
}
|
|
216
294
|
return retVal;
|
|
217
295
|
};
|
|
218
296
|
}
|
|
297
|
+
__name(hookVitepressRender, "hookVitepressRender");
|
|
219
298
|
function observable(md, opts = {}) {
|
|
220
|
-
hookTemplateLiterals(md)
|
|
299
|
+
hookTemplateLiterals(md);
|
|
300
|
+
hookFence(md);
|
|
301
|
+
if (opts.vitePress) {
|
|
302
|
+
hookVitepressRender(md);
|
|
303
|
+
} else {
|
|
304
|
+
hookRender(md);
|
|
305
|
+
}
|
|
221
306
|
}
|
|
307
|
+
__name(observable, "observable");
|
|
222
308
|
export {
|
|
223
309
|
observable,
|
|
224
310
|
render
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
${renderExecutedSrc(fenceInfo)?"...":""}
|
|
3
|
-
</span>`})}}catch(e){const id=`fence-${idx}-error`;retVal.push({...fenceInfo,id,content:JSON.stringify(e),innerHTML:`<span id="${id}" class="red">
|
|
4
|
-
${JSON.stringify(e)}
|
|
5
|
-
</span>`})}return retVal}const ENV_KEY="ENV_OBSERVABLE";function generatePlaceholders(content,fenceInfo,env){return env[ENV_KEY]||(env[ENV_KEY]=[]),calcPlaceholders(content,fenceInfo).reduce((acc,cur)=>(env[ENV_KEY].push({...cur,innerHTML:void 0}),acc+cur.innerHTML),"")}class Inspector extends runtime.Inspector{constructor(placeholder){super(placeholder),this.placeholder=placeholder}pending(){super.pending()}fulfilled(value,_name){switch(typeof value){case"string":this.placeholder.innerText=value;break;default:super.fulfilled(value)}}rejected(error){super.rejected(error)}}async function render(nodes){const displayIndex={},nb={nodes:[],files:[]};for(const node of nodes)nb.nodes.push({id:node.id,name:node.id,mode:"js",value:node.content}),displayIndex[node.id]=renderExecutedSrc(node);const define2=await observablehqCompiler.compile(nb),runtime$1=new runtime.Runtime(new runtime.Library);runtime$1.module(define2,()=>{define2(runtime$1,(_name,id)=>{var _a;const placeholder=(_a=globalThis==null?void 0:globalThis.document)==null?void 0:_a.getElementById(""+id);return placeholder&&displayIndex[id]?new Inspector(placeholder):{pending(){},fulfilled(_value,_name2){},rejected(_error,_name2){}}})})}function renderObservable(tokens,idx2,_options,env,_self){return generatePlaceholders(tokens[idx2].content,{type:"js",exec:!0},env)}const DOLLAR=36,CURLEY_OPEN=123,CURLEY_CLOSE=125;function*parsePlaceholderInline(src,pos=0,posMax=src.length){if(src.charCodeAt(pos)===DOLLAR&&src.charCodeAt(pos+1)===CURLEY_OPEN){pos+=2;const observableStart=pos;let nestedCurly=0,done=!1;for(;!done&&pos<posMax;){switch(src.charCodeAt(pos)){case CURLEY_OPEN:nestedCurly++;break;case CURLEY_CLOSE:nestedCurly===0?(done=!0,--pos):nestedCurly--;break}pos++}const observableEnd=pos;if(pos>=posMax||observableStart==observableEnd||src.charCodeAt(pos)!==CURLEY_CLOSE)return;pos++,yield{type:"placeholder",content:src.slice(observableStart,observableEnd).trim(),pos}}}function*parsePlaceholderBlock(src){let pos=0,prevPos=0;const posMax=src.length;for(;pos<posMax;)if(src.charCodeAt(pos)===DOLLAR&&src.charCodeAt(pos+1)===CURLEY_OPEN){yield{type:"html_block",content:src.slice(prevPos,pos)};for(const placeholder of parsePlaceholderInline(src,pos,posMax))yield placeholder,pos=placeholder.pos,prevPos=pos}else pos++;pos>prevPos&&(yield{type:"html_block",content:src.slice(prevPos,pos)})}const transformPlaceholderInline=(state,silent)=>{if(silent||state.pos+2>state.posMax)return!1;const marker1=state.src.charCodeAt(state.pos),marker2=state.src.charCodeAt(state.pos+1);if(marker1!==DOLLAR||marker2!==CURLEY_OPEN)return!1;for(const{type,content,pos}of parsePlaceholderInline(state.src,state.pos,state.posMax)){if(type!=="placeholder")break;const token=state.push(type,"",0);return token.content=content,state.pos=pos,!0}return!1},transformPlaceholderCore=state=>{const{tokens}=state;for(let i=0,n=tokens.length;i<n;++i){const token=tokens[i];if(token.type==="html_block"){const children=[];for(const{type,content}of parsePlaceholderBlock(token.content)){const child=new state.Token(type,"",0);child.content=content,children.push(child)}if(children.length===1&&children[0].type==="html_block")tokens[i].content=children[0].content;else{const inline=new state.Token("inline","",0);inline.children=children,tokens[i]=inline}}}};function hookTemplateLiterals(md){md.inline.ruler.push("placeholder",transformPlaceholderInline),md.core.ruler.after("inline","placeholder",transformPlaceholderCore),md.renderer.rules.placeholder=(tokens,idx2,options,env,self2)=>renderObservable(tokens,idx2,options,env)}const deserializeFenceInfo=attrs=>attrs.split(/\s+/).reduce((acc,pair,idx2)=>{if(idx2===0)return acc.type=pair,acc;const[key,value]=pair.split("=");switch(key){case"exec":case"echo":case"hide":acc[key]=value!=="false";break}return acc},{...fenceInfoDefaults}),proxy=(tokens,idx2,options,_env,self2)=>self2.renderToken(tokens,idx2,options);function hookFence(md){const defaultFenceRenderer=md.renderer.rules.fence||proxy,fenceRenderer=(tokens,idx2,options,env,self2)=>{const token=tokens[idx2],fenceInfo=deserializeFenceInfo(token.info);fenceInfo.type==="javascript"&&(fenceInfo.type="js"),token.content+=`
|
|
6
|
-
`;let preHtml="";switch(fenceInfo.type){case"js":if(executeSrc(fenceInfo)&&(env[ENV_KEY]||(env[ENV_KEY]=[]),preHtml+=generatePlaceholders(token.content,fenceInfo,env)),showSrc(fenceInfo))return preHtml+defaultFenceRenderer(tokens,idx2,options,env,self2);break;default:return preHtml+defaultFenceRenderer(tokens,idx2,options,env,self2)}return preHtml};md.renderer.rules.fence=fenceRenderer}function hookRender(md){const originalRender=md.render;md.render=(src,_env)=>{const env={..._env},retVal=originalRender.call(md,src,env);return render(env[ENV_KEY]??[]),retVal}}function hookVitepressRender(md){const originalRender=md.render;md.render=(src,env)=>{var _a;const myEnv=env??{};let retVal=originalRender.call(md,src,myEnv);if((_a=env[ENV_KEY])!=null&&_a.length){const content=encodeURI(JSON.stringify(env[ENV_KEY]));retVal+=`<RenderComponent content="${content}" />`}return retVal}}function observable(md,opts={}){hookTemplateLiterals(md),hookFence(md),opts.vitePress?hookVitepressRender(md):hookRender(md)}exports2.observable=observable,exports2.render=render,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
|
|
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)=>{var t;const r=null==(t=null==globalThis?void 0:globalThis.document)?void 0:t.getElementById(""+n);return r&&o[n]?new b(r):{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 v=123;function*g(e,n=0,t=e.length){if(36===e.charCodeAt(n)&&e.charCodeAt(n+1)===v){const o=n+=2;let r=0,c=!1;for(;!c&&n<t;){switch(e.charCodeAt(n)){case v: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)===v){yield{type:"html_block",content:e.slice(t,n)};for(const r of g(e,n,o))yield r,n=r.pos,t=n}else n++;n>t&&(yield{type:"html_block",content:e.slice(t,n)})}r(g,"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!==v)return!1;for(const{type:r,content:c,pos:s}of g(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)=>{var r;const c=o??{};let s=n.call(e,t,c);if(null==(r=o[p])?void 0:r.length){s+=`<RenderComponent content="${encodeURI(JSON.stringify(o[p]))}" />`}return s}}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"})});
|
|
7
2
|
//# sourceMappingURL=index.umd.cjs.map
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":["ojs2notebook","content","BaseInspector","define","compile","runtime","Runtime","Library","_name","idx","self"],"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","_a","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/dist/loader.node.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/loader.ts", "
|
|
3
|
+
"sources": ["../src/loader.ts", "../../../node_modules/d3-dsv/src/dsv.js", "../../../node_modules/d3-dsv/src/autoType.js"],
|
|
4
4
|
"sourcesContent": ["import { existsSync } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { dsvFormat, autoType } from \"d3-dsv\";\nimport { LoaderResolver, } from \"@observablehq/framework/dist/loader.js\";\nimport { getResolvers } from \"@observablehq/framework/dist/resolvers.js\";\nimport { normalizeConfig } from \"@observablehq/framework/dist/config.js\";\nimport { parseMarkdown } from \"@observablehq/framework/dist/markdown.js\";\n\nfunction getOptions({ path, ...config }) {\n return { ...normalizeConfig(config), path };\n}\n\nexport class DataFile {\n\n private filePath: string;\n private options: any;\n private resolvers: any;\n readonly ext: string;\n\n protected constructor(filePath, options, resolvers) {\n this.filePath = filePath;\n this.options = options;\n this.resolvers = resolvers;\n this.ext = path.extname(filePath).substring(1);\n }\n\n static async attach(partialPath: string, root: string = path.resolve(\".\")) {\n const exists = existsSync(path.resolve(root, partialPath));\n const loaders = new LoaderResolver({ root, interpreters: {} });\n const loader = loaders.find(partialPath);\n if (loader) {\n await loader.load();\n const ext = path.extname(partialPath);\n const options = getOptions({ root, path: \"dummy.md\" });\n const page = parseMarkdown(`\\${FileAttachment('${partialPath}')${ext}()}`, options);\n const resolvers = await getResolvers(page, options);\n resolvers.resolveFile(partialPath);\n return new DataFile(exists ? path.resolve(root, partialPath) : path.resolve(path.join(root, \".observablehq\", \"cache\", partialPath)), options, resolvers);\n }\n }\n\n async myResolve(module: string) {\n const partialPath = await this.resolvers.resolveImport(module);\n return path.resolve(path.join(this.options.root, \".observablehq\", \"cache\", partialPath));\n }\n\n async myImport(module: string) {\n if (module === \"npm:apache-arrow\") {\n return import(\"apache-arrow\");\n }\n const fullPath = await this.myResolve(module);\n const href = pathToFileURL(fullPath).href;\n return import(href).catch((error) => {\n console.error(error);\n });\n }\n\n buffer(): Promise<Buffer> {\n return readFile(this.filePath);\n }\n\n arrayBuffer() {\n return this.buffer().then(buffer => buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength));\n }\n\n text(encoding: BufferEncoding = \"utf8\") {\n return readFile(this.filePath, encoding);\n }\n\n json() {\n return this.text().then(txt => {\n return JSON.parse(txt);\n });\n }\n\n dsv({ delimiter = \",\", array = false, typed = false } = {}) {\n return this.text().then(text => {\n const format = dsvFormat(delimiter);\n const parse: any = array ? format.parseRows : format.parse;\n return parse(text, typed && autoType);\n });\n }\n\n csv(options?) {\n return this.dsv({ ...options, delimiter: \",\" });\n }\n\n tsv(options?) {\n return this.dsv({ ...options, delimiter: \"\\t\" });\n }\n\n arrow() {\n return Promise.all([this.myImport(\"npm:apache-arrow\"), this.arrayBuffer()]).then(([Arrow, response]) => {\n return Arrow.tableFromIPC(response);\n });\n }\n\n parquet() {\n return this.myResolve(\"npm:parquet-wasm/esm/parquet_wasm_bg.wasm\").then(wasmBytes => {\n const wasmFile = new DataFile(wasmBytes, this.options, this.resolvers);\n return Promise.all([\n this.myImport(\"npm:apache-arrow\"),\n this.myImport(\"npm:parquet-wasm\"),\n wasmFile.arrayBuffer(),\n this.arrayBuffer()\n ]).then(([Arrow, Parquet, wasm, buffer]) => {\n Parquet.initSync(wasm);\n return Arrow.tableFromIPC(Parquet.readParquet(new Uint8Array(buffer)).intoIPCStream());\n });\n });\n }\n\n fetch() {\n if (this[this.ext]) {\n return this[this.ext]();\n }\n }\n}\n\nconst regex = /^(.+\\.(csv|tsv|txt|json|arrow|parquet))(?:\\..*)?$/;\ninterface FileInfo {\n path: string;\n data: any;\n}\nexport async function findDataFiles(directory: string, recursive: boolean = false): Promise<FileInfo[]> {\n const files = await readdir(directory, { withFileTypes: true });\n let dataFiles: FileInfo[] = [];\n\n for (const file of files) {\n const fullPath = path.join(directory, file.name);\n if (file.isDirectory() && recursive) {\n const nestedFiles = await findDataFiles(fullPath, recursive);\n dataFiles = dataFiles.concat(nestedFiles);\n } else if (file.isFile()) {\n const match = file.name.match(regex);\n if (match) {\n const _path = path.join(directory, match[1]);\n dataFiles.push({\n path: _path,\n data: await DataFile.attach(_path)\n });\n }\n }\n }\n return dataFiles;\n}\n\nexport async function fetchData(partialPath: string) {\n const dataFile = await DataFile.attach(partialPath);\n return dataFile?.fetch();\n}\n\n", "var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n", "export default function autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["existsSync", "readdir", "readFile", "path", "pathToFileURL", "EOL", "EOF", "QUOTE", "NEWLINE", "RETURN", "objectConverter", "columns", "name", "i", "customConverter", "f", "object", "row", "inferColumns", "rows", "columnSet", "column", "pad", "value", "width", "s", "length", "formatYear", "year", "formatDate", "date", "hours", "minutes", "seconds", "milliseconds", "dsv_default", "delimiter", "reFormat", "DELIMITER", "parse", "text", "convert", "parseRows", "N", "I", "n", "t", "eof", "eol", "token", "j", "c", "preformatBody", "formatValue", "format", "formatBody", "formatRows", "formatRow", "autoType", "object", "key", "value", "number", "m", "fixtz", "LoaderResolver", "getResolvers", "normalizeConfig", "parseMarkdown", "getOptions", "path", "config", "DataFile", "_DataFile", "filePath", "options", "resolvers", "partialPath", "root", "exists", "existsSync", "loader", "ext", "page", "module", "fullPath", "pathToFileURL", "error", "readFile", "buffer", "encoding", "txt", "delimiter", "array", "typed", "text", "format", "dsv_default", "autoType", "Arrow", "response", "wasmBytes", "wasmFile", "Parquet", "wasm", "regex", "findDataFiles", "directory", "recursive", "files", "readdir", "dataFiles", "file", "nestedFiles", "match", "_path", "fetchData"]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hpcc-js/markdown-it-plugins",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.10",
|
|
4
4
|
"description": "markdown-it plugins",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.umd.cjs",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"update-major": "npx --yes npm-check-updates -u"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@hpcc-js/observablehq-compiler": "^3.3.
|
|
56
|
-
"@observablehq/framework": "1.13.
|
|
55
|
+
"@hpcc-js/observablehq-compiler": "^3.3.9",
|
|
56
|
+
"@observablehq/framework": "1.13.3",
|
|
57
57
|
"@observablehq/runtime": "5.9.9",
|
|
58
58
|
"@types/markdown-it": "14.1.2"
|
|
59
59
|
},
|
|
@@ -63,11 +63,11 @@
|
|
|
63
63
|
"shiki": "2.5.0"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@hpcc-js/esbuild-plugins": "^1.4.
|
|
66
|
+
"@hpcc-js/esbuild-plugins": "^1.4.9",
|
|
67
67
|
"d3-dsv": "3.0.1",
|
|
68
68
|
"d3-fetch": "3.0.1",
|
|
69
|
-
"dotenv": "16.
|
|
70
|
-
"tsx": "4.
|
|
69
|
+
"dotenv": "16.6.1",
|
|
70
|
+
"tsx": "4.20.3"
|
|
71
71
|
},
|
|
72
72
|
"repository": {
|
|
73
73
|
"type": "git",
|
|
@@ -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": "92489547b0e57f479a691236b1a47e977b43cf2e"
|
|
84
84
|
}
|
package/src/__package__.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export const PKG_NAME = "@hpcc-js/markdown-it-plugins";
|
|
2
|
-
export const PKG_VERSION = "1.3.
|
|
3
|
-
export const BUILD_VERSION = "3.
|
|
2
|
+
export const PKG_VERSION = "1.3.10";
|
|
3
|
+
export const BUILD_VERSION = "3.9.1";
|