zenn-markdown-html 0.1.102-alpha.0 → 0.1.103

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/lib/index.js CHANGED
@@ -19,7 +19,7 @@ var mdFootnote = require('markdown-it-footnote');
19
19
  var mdTaskLists = require('markdown-it-task-lists');
20
20
  var mdInlineComments = require('markdown-it-inline-comments');
21
21
  var mdLinkAttributes = require('markdown-it-link-attributes');
22
- var md = markdown_it_1.default({
22
+ var md = (0, markdown_it_1.default)({
23
23
  breaks: true,
24
24
  linkify: true,
25
25
  });
@@ -4,22 +4,22 @@ exports.isValidHttpUrl = exports.generateYoutubeHtmlFromVideoId = exports.genera
4
4
  var utils_1 = require("markdown-it/lib/common/utils");
5
5
  var url_matcher_1 = require("./url-matcher");
6
6
  function generateTweetHtml(url) {
7
- return "<div class=\"embed-tweet\"><embed-tweet src=\"" + url + "\"></embed-tweet></div>";
7
+ return "<div class=\"embed-tweet\"><embed-tweet src=\"".concat(url, "\"></embed-tweet></div>");
8
8
  }
9
9
  exports.generateTweetHtml = generateTweetHtml;
10
10
  function generateCardHtml(url) {
11
- return "<div class=\"embed-zenn-link\"><iframe src=\"https://card.zenn.dev/?url=" + encodeURIComponent(url) + "\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"></iframe></div>";
11
+ return "<div class=\"embed-zenn-link\"><iframe src=\"https://card.zenn.dev/?url=".concat(encodeURIComponent(url), "\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"></iframe></div>");
12
12
  }
13
13
  exports.generateCardHtml = generateCardHtml;
14
14
  function generateYoutubeHtml(videoId, start) {
15
- var escapedVideoId = utils_1.escapeHtml(videoId);
15
+ var escapedVideoId = (0, utils_1.escapeHtml)(videoId);
16
16
  // 48時間以内
17
17
  var time = Math.min(Number(start || 0), 48 * 60 * 60);
18
- var startQuery = time ? "&start=" + time : '';
19
- return "<div class=\"embed-youtube\"><iframe src=\"https://www.youtube.com/embed/" + escapedVideoId + "?loop=1&playlist=" + escapedVideoId + startQuery + "\" allowfullscreen loading=\"lazy\"></iframe></div>";
18
+ var startQuery = time ? "&start=".concat(time) : '';
19
+ return "<div class=\"embed-youtube\"><iframe src=\"https://www.youtube.com/embed/".concat(escapedVideoId, "?loop=1&playlist=").concat(escapedVideoId).concat(startQuery, "\" allowfullscreen loading=\"lazy\"></iframe></div>");
20
20
  }
21
21
  function generateYoutubeHtmlFromUrl(url) {
22
- var params = url_matcher_1.extractYoutubeVideoParameters(url);
22
+ var params = (0, url_matcher_1.extractYoutubeVideoParameters)(url);
23
23
  if (!params) {
24
24
  return generateCardHtml(url);
25
25
  }
@@ -9,13 +9,13 @@ var utils_1 = require("markdown-it/lib/common/utils");
9
9
  var components_1 = __importDefault(require("prismjs/components/"));
10
10
  var prism_diff_highlight_1 = __importDefault(require("@steelydylan/prism-diff-highlight"));
11
11
  // diffプラグインを有効化
12
- prism_diff_highlight_1.default();
12
+ (0, prism_diff_highlight_1.default)();
13
13
  function loadPrismGrammer(lang) {
14
14
  if (!lang)
15
15
  return undefined;
16
16
  var langObject = prismjs_1.default.languages[lang];
17
17
  if (langObject === undefined) {
18
- components_1.default([lang]);
18
+ (0, components_1.default)([lang]);
19
19
  langObject = prismjs_1.default.languages[lang];
20
20
  }
21
21
  return langObject;
@@ -24,12 +24,12 @@ function highlightContent(_a) {
24
24
  var text = _a.text, prismGrammer = _a.prismGrammer, langName = _a.langName, hasDiff = _a.hasDiff;
25
25
  if (prismGrammer && langName) {
26
26
  if (hasDiff)
27
- return prismjs_1.default.highlight(text, prismjs_1.default.languages.diff, "diff-" + langName);
27
+ return prismjs_1.default.highlight(text, prismjs_1.default.languages.diff, "diff-".concat(langName));
28
28
  return prismjs_1.default.highlight(text, prismGrammer, langName);
29
29
  }
30
30
  if (hasDiff)
31
31
  return prismjs_1.default.highlight(text, prismjs_1.default.languages.diff, 'diff');
32
- return utils_1.escapeHtml(text);
32
+ return (0, utils_1.escapeHtml)(text);
33
33
  }
34
34
  function highlight(text, langName, hasDiff) {
35
35
  var prismGrammer = loadPrismGrammer(langName);
@@ -17,7 +17,7 @@ exports.containerDetailsOptions = {
17
17
  if (tokens[idx].nesting === 1) {
18
18
  // opening tag
19
19
  return ('<details><summary>' +
20
- utils_1.escapeHtml(summary) +
20
+ (0, utils_1.escapeHtml)(summary) +
21
21
  '</summary><div class="details-content">');
22
22
  }
23
23
  else {
@@ -39,7 +39,7 @@ exports.containerMessageOptions = {
39
39
  var msgClassName = (m === null || m === void 0 ? void 0 : m[1]) || '';
40
40
  if (tokens[idx].nesting === 1) {
41
41
  // opening tag
42
- return '<div class="msg ' + utils_1.escapeHtml(msgClassName) + '">';
42
+ return '<div class="msg ' + (0, utils_1.escapeHtml)(msgClassName) + '">';
43
43
  }
44
44
  else {
45
45
  // closing tag
@@ -10,65 +10,65 @@ var blockOptions = {
10
10
  if (!(videoId === null || videoId === void 0 ? void 0 : videoId.match(/^[a-zA-Z0-9_-]+$/))) {
11
11
  return 'YouTubeのvideoIDが不正です';
12
12
  }
13
- return helper_1.generateYoutubeHtmlFromVideoId(videoId);
13
+ return (0, helper_1.generateYoutubeHtmlFromVideoId)(videoId);
14
14
  },
15
15
  slideshare: function (key) {
16
16
  if (!(key === null || key === void 0 ? void 0 : key.match(/^[a-zA-Z0-9_-]+$/))) {
17
17
  return 'Slide Shareのkeyが不正です';
18
18
  }
19
- return "<div class=\"embed-slideshare\"><iframe src=\"https://www.slideshare.net/slideshow/embed_code/key/" + utils_1.escapeHtml(key) + "\" scrolling=\"no\" allowfullscreen loading=\"lazy\"></iframe></div>";
19
+ return "<div class=\"embed-slideshare\"><iframe src=\"https://www.slideshare.net/slideshow/embed_code/key/".concat((0, utils_1.escapeHtml)(key), "\" scrolling=\"no\" allowfullscreen loading=\"lazy\"></iframe></div>");
20
20
  },
21
21
  speakerdeck: function (key) {
22
22
  if (!(key === null || key === void 0 ? void 0 : key.match(/^[a-zA-Z0-9_-]+$/))) {
23
23
  return 'Speaker Deckのkeyが不正です';
24
24
  }
25
- return "<div class=\"embed-speakerdeck\"><iframe src=\"https://speakerdeck.com/player/" + utils_1.escapeHtml(key) + "\" scrolling=\"no\" allowfullscreen allow=\"encrypted-media\" loading=\"lazy\"></iframe></div>";
25
+ return "<div class=\"embed-speakerdeck\"><iframe src=\"https://speakerdeck.com/player/".concat((0, utils_1.escapeHtml)(key), "\" scrolling=\"no\" allowfullscreen allow=\"encrypted-media\" loading=\"lazy\"></iframe></div>");
26
26
  },
27
27
  jsfiddle: function (str) {
28
- if (!url_matcher_1.isJsfiddleUrl(str)) {
28
+ if (!(0, url_matcher_1.isJsfiddleUrl)(str)) {
29
29
  return 'jsfiddleのURLが不正です';
30
30
  }
31
31
  // URLを~/embedded/とする
32
32
  // ※ すでにembeddedもしくはembedが含まれるURLが入力されている場合は、そのままURLを使用する。
33
33
  var url = str;
34
34
  if (!url.includes('embed')) {
35
- url = url.endsWith('/') ? url + "embedded/" : url + "/embedded/";
35
+ url = url.endsWith('/') ? "".concat(url, "embedded/") : "".concat(url, "/embedded/");
36
36
  }
37
- return "<div class=\"embed-jsfiddle\"><iframe src=\"" + url + "\" scrolling=\"no\" frameborder=\"no\" allowfullscreen allowtransparency=\"true\" loading=\"lazy\"></iframe></div>";
37
+ return "<div class=\"embed-jsfiddle\"><iframe src=\"".concat(url, "\" scrolling=\"no\" frameborder=\"no\" allowfullscreen allowtransparency=\"true\" loading=\"lazy\"></iframe></div>");
38
38
  },
39
39
  codepen: function (str) {
40
- if (!url_matcher_1.isCodepenUrl(str)) {
40
+ if (!(0, url_matcher_1.isCodepenUrl)(str)) {
41
41
  return 'CodePenのURLが不正です';
42
42
  }
43
43
  var url = new URL(str.replace('/pen/', '/embed/'));
44
44
  url.searchParams.set('embed-version', '2');
45
- return "<div class=\"embed-codepen\"><iframe src=\"" + url + "\" scrolling=\"no\" scrolling=\"no\" frameborder=\"no\" allowtransparency=\"true\" loading=\"lazy\"></iframe></div>";
45
+ return "<div class=\"embed-codepen\"><iframe src=\"".concat(url, "\" scrolling=\"no\" scrolling=\"no\" frameborder=\"no\" allowtransparency=\"true\" loading=\"lazy\"></iframe></div>");
46
46
  },
47
47
  codesandbox: function (str) {
48
- if (!url_matcher_1.isCodesandboxUrl(str)) {
48
+ if (!(0, url_matcher_1.isCodesandboxUrl)(str)) {
49
49
  return '「https://codesandbox.io/embed/」から始まる正しいURLを入力してください';
50
50
  }
51
- return "<div class=\"embed-codesandbox\"><iframe src=\"" + str + "\" style=\"width:100%;height:500px;border:none;overflow:hidden;\" allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\" loading=\"lazy\" sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"></iframe></div>";
51
+ return "<div class=\"embed-codesandbox\"><iframe src=\"".concat(str, "\" style=\"width:100%;height:500px;border:none;overflow:hidden;\" allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\" loading=\"lazy\" sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"></iframe></div>");
52
52
  },
53
53
  stackblitz: function (str) {
54
- if (!url_matcher_1.isStackblitzUrl(str)) {
54
+ if (!(0, url_matcher_1.isStackblitzUrl)(str)) {
55
55
  return 'StackBlitzのembed用のURLを指定してください';
56
56
  }
57
- return "<div class=\"embed-stackblitz\"><iframe src=\"" + str + "\" scrolling=\"no\" frameborder=\"no\" allowtransparency=\"true\" loading=\"lazy\" allowfullscreen></iframe></div>";
57
+ return "<div class=\"embed-stackblitz\"><iframe src=\"".concat(str, "\" scrolling=\"no\" frameborder=\"no\" allowtransparency=\"true\" loading=\"lazy\" allowfullscreen></iframe></div>");
58
58
  },
59
59
  tweet: function (str) {
60
- if (!url_matcher_1.isTweetUrl(str))
60
+ if (!(0, url_matcher_1.isTweetUrl)(str))
61
61
  return 'ツイートページのURLを指定してください';
62
- return helper_1.generateTweetHtml(str);
62
+ return (0, helper_1.generateTweetHtml)(str);
63
63
  },
64
64
  card: function (str) {
65
65
  // generateCardHtml内でURLはエンコードされるためここでのバリデーションは軽めでOK
66
- if (!helper_1.isValidHttpUrl(str))
66
+ if (!(0, helper_1.isValidHttpUrl)(str))
67
67
  return 'URLが不正です';
68
- return helper_1.generateCardHtml(str);
68
+ return (0, helper_1.generateCardHtml)(str);
69
69
  },
70
70
  gist: function (str) {
71
- if (!url_matcher_1.isGistUrl(str))
71
+ if (!(0, url_matcher_1.isGistUrl)(str))
72
72
  return 'GitHub GistのページURLを指定してください';
73
73
  /**
74
74
  * gistのURL は
@@ -77,7 +77,7 @@ var blockOptions = {
77
77
  * のような形式
78
78
  */
79
79
  var _a = str.split('?file='), pageUrl = _a[0], file = _a[1];
80
- return "<div class=\"embed-gist\"><embed-gist page-url=\"" + pageUrl + "\" encoded-filename=\"" + (file ? encodeURIComponent(file) : '') + "\" /></div>";
80
+ return "<div class=\"embed-gist\"><embed-gist page-url=\"".concat(pageUrl, "\" encoded-filename=\"").concat(file ? encodeURIComponent(file) : '', "\" /></div>");
81
81
  },
82
82
  };
83
83
  // Forked from: https://github.com/posva/markdown-it-custom-block
@@ -19,7 +19,7 @@ var inlineRules = [
19
19
  {
20
20
  name: 'math_inline_double',
21
21
  rex: /\${2}((?:\S)|(?:\S(?!.*\]\(http).*?\S))\${2}/gy,
22
- tmpl: "<section class=\"" + katexClassName + "\"><embed-katex display-mode=\"1\"><eqn>$1</eqn></embed-katex></section>",
22
+ tmpl: "<section class=\"".concat(katexClassName, "\"><embed-katex display-mode=\"1\"><eqn>$1</eqn></embed-katex></section>"),
23
23
  tag: '$$',
24
24
  pre: preHandler,
25
25
  post: postHandler,
@@ -27,7 +27,7 @@ var inlineRules = [
27
27
  {
28
28
  name: 'math_inline',
29
29
  rex: /\$((?:\S)|(?:\S(?!.*\]\(http.*\$.*\)).*?\S))\$/gy,
30
- tmpl: "<embed-katex><eq class=\"" + katexClassName + "\">$1</eq></embed-katex>",
30
+ tmpl: "<embed-katex><eq class=\"".concat(katexClassName, "\">$1</eq></embed-katex>"),
31
31
  tag: '$',
32
32
  pre: preHandler,
33
33
  post: postHandler,
@@ -37,13 +37,13 @@ var blockRules = [
37
37
  {
38
38
  name: 'math_block_eqno',
39
39
  rex: /\${2}([^$]+?)\${2}\s*?\(([^)\s]+?)\)/gmy,
40
- tmpl: "<section class=\"" + katexClassName + " eqno\"><eqn><embed-katex display-mode=\"1\">$1</embed-katex></eqn><span>($2)</span></section>",
40
+ tmpl: "<section class=\"".concat(katexClassName, " eqno\"><eqn><embed-katex display-mode=\"1\">$1</embed-katex></eqn><span>($2)</span></section>"),
41
41
  tag: '$$',
42
42
  },
43
43
  {
44
44
  name: 'math_block',
45
45
  rex: /\${2}([^$]+?)\${2}/gmy,
46
- tmpl: "<section class=\"" + katexClassName + "\"><eqn><embed-katex display-mode=\"1\">$1</embed-katex></eqn></section>",
46
+ tmpl: "<section class=\"".concat(katexClassName, "\"><eqn><embed-katex display-mode=\"1\">$1</embed-katex></eqn></section>"),
47
47
  tag: '$$',
48
48
  },
49
49
  ];
@@ -38,14 +38,14 @@ function convertAutolinkToEmbed(inlineChildTokens) {
38
38
  }
39
39
  // 埋め込み用のHTMLを生成
40
40
  var embedToken = new token_1.default('html_inline', '', 0);
41
- if (url_matcher_1.isTweetUrl(url)) {
42
- embedToken.content = helper_1.generateTweetHtml(url);
41
+ if ((0, url_matcher_1.isTweetUrl)(url)) {
42
+ embedToken.content = (0, helper_1.generateTweetHtml)(url);
43
43
  }
44
- else if (url_matcher_1.isYoutubeUrl(url)) {
45
- embedToken.content = helper_1.generateYoutubeHtmlFromUrl(url);
44
+ else if ((0, url_matcher_1.isYoutubeUrl)(url)) {
45
+ embedToken.content = (0, helper_1.generateYoutubeHtmlFromUrl)(url);
46
46
  }
47
47
  else {
48
- embedToken.content = helper_1.generateCardHtml(url);
48
+ embedToken.content = (0, helper_1.generateCardHtml)(url);
49
49
  }
50
50
  // a要素自体はカードにより不要になるため非表示に
51
51
  linkOpenToken.attrJoin('style', 'display: none');
@@ -5,10 +5,10 @@ var utils_1 = require("markdown-it/lib/common/utils");
5
5
  var highlight_1 = require("./highlight");
6
6
  function getHtml(_a) {
7
7
  var content = _a.content, className = _a.className, fileName = _a.fileName;
8
- var escapedClass = utils_1.escapeHtml(className);
9
- return "<div class=\"code-block-container\">" + (fileName
10
- ? "<div class=\"code-block-filename-container\"><span class=\"code-block-filename\">" + utils_1.escapeHtml(fileName) + "</span></div>"
11
- : '') + "<pre class=\"" + escapedClass + "\"><code class=\"" + escapedClass + "\">" + content + "</code></pre></div>";
8
+ var escapedClass = (0, utils_1.escapeHtml)(className);
9
+ return "<div class=\"code-block-container\">".concat(fileName
10
+ ? "<div class=\"code-block-filename-container\"><span class=\"code-block-filename\">".concat((0, utils_1.escapeHtml)(fileName), "</span></div>")
11
+ : '', "<pre class=\"").concat(escapedClass, "\"><code class=\"").concat(escapedClass, "\">").concat(content, "</code></pre></div>");
12
12
  }
13
13
  function getClassName(_a) {
14
14
  var _b = _a.langName, langName = _b === void 0 ? '' : _b, hasDiff = _a.hasDiff;
@@ -16,9 +16,9 @@ function getClassName(_a) {
16
16
  if (!isSafe)
17
17
  return '';
18
18
  if (hasDiff) {
19
- return "diff-highlight " + (langName.length ? "language-diff-" + langName : '');
19
+ return "diff-highlight ".concat(langName.length ? "language-diff-".concat(langName) : '');
20
20
  }
21
- return langName ? "language-" + langName : '';
21
+ return langName ? "language-".concat(langName) : '';
22
22
  }
23
23
  var fallbackLanguages = {
24
24
  vue: 'html',
@@ -26,7 +26,7 @@ var fallbackLanguages = {
26
26
  fish: 'shell',
27
27
  sh: 'shell',
28
28
  cwl: 'yaml',
29
- tf: 'hcl',
29
+ tf: 'hcl', // ref: https://github.com/PrismJS/prism/issues/1252
30
30
  };
31
31
  function normalizeLangName(str) {
32
32
  var _a;
@@ -69,13 +69,13 @@ function mdRendererFence(md) {
69
69
  var _a = tokens[idx], info = _a.info, content = _a.content;
70
70
  var _b = parseInfo(info), langName = _b.langName, fileName = _b.fileName, hasDiff = _b.hasDiff;
71
71
  if (langName === 'mermaid') {
72
- return "<div class=\"embed-mermaid\"><embed-mermaid><pre class=\"zenn-mermaid\">" + utils_1.escapeHtml(content.trim()) + "</pre></embed-mermaid></div>";
72
+ return "<div class=\"embed-mermaid\"><embed-mermaid><pre class=\"zenn-mermaid\">".concat((0, utils_1.escapeHtml)(content.trim()), "</pre></embed-mermaid></div>");
73
73
  }
74
74
  var className = getClassName({
75
75
  langName: langName,
76
76
  hasDiff: hasDiff,
77
77
  });
78
- var highlightedContent = highlight_1.highlight(content, langName, hasDiff);
78
+ var highlightedContent = (0, highlight_1.highlight)(content, langName, hasDiff);
79
79
  return getHtml({
80
80
  content: highlightedContent,
81
81
  className: className,
@@ -34,7 +34,7 @@ function extractYoutubeVideoParameters(youtubeUrl) {
34
34
  var start = urlParams.get('t');
35
35
  return {
36
36
  videoId: match[9],
37
- start: start === null || start === void 0 ? void 0 : start.replace('s', ''),
37
+ start: start === null || start === void 0 ? void 0 : start.replace('s', ''), // https://www.youtube.com/watch?v=ABCSDGG&t=19101s => 19101
38
38
  };
39
39
  }
40
40
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenn-markdown-html",
3
- "version": "0.1.102-alpha.0",
3
+ "version": "0.1.103",
4
4
  "license": "MIT",
5
5
  "description": "Convert markdown to zenn flavor html.",
6
6
  "main": "lib/index.js",
@@ -21,31 +21,31 @@
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/jest": "^26.0.19",
24
- "@types/markdown-it": "^10.0.1",
24
+ "@types/markdown-it": "^12.2.3",
25
25
  "@types/node": "^14.0.5",
26
26
  "@types/prismjs": "^1.16.6",
27
27
  "@typescript-eslint/eslint-plugin": "^4.23.0",
28
28
  "@typescript-eslint/parser": "^4.23.0",
29
29
  "eslint": "^7.26.0",
30
30
  "eslint-config-prettier": "^8.3.0",
31
- "jest": "^26.6.3",
31
+ "jest": "^27.4.7",
32
32
  "rimraf": "^3.0.2",
33
- "ts-jest": "^26.4.4",
34
- "typescript": "^3.9.3"
33
+ "ts-jest": "^27.1.3",
34
+ "typescript": "^4.5.4"
35
35
  },
36
36
  "dependencies": {
37
37
  "@steelydylan/markdown-it-imsize": "^1.0.2",
38
38
  "@steelydylan/prism-diff-highlight": "1.0.4",
39
- "markdown-it": "^11.0.0",
40
- "markdown-it-anchor": "^8.1.2",
39
+ "markdown-it": "^12.3.2",
40
+ "markdown-it-anchor": "^8.4.1",
41
41
  "markdown-it-container": "^2.0.0",
42
- "markdown-it-footnote": "^3.0.2",
42
+ "markdown-it-footnote": "^3.0.3",
43
43
  "markdown-it-inline-comments": "^1.0.1",
44
44
  "markdown-it-link-attributes": "^3.0.0",
45
45
  "markdown-it-task-lists": "^2.1.1",
46
46
  "prismjs": "^1.26.0"
47
47
  },
48
- "gitHead": "903fccba99be75bfe75e4f5ed5ac4f404ce3a8d0",
48
+ "gitHead": "e25396d2fb4cc49c362d8529b9eaa10f193b9c1d",
49
49
  "publishConfig": {
50
50
  "access": "public"
51
51
  }