@docusaurus/utils 2.0.0-beta.17 → 2.0.0-beta.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/lib/constants.d.ts +49 -1
  2. package/lib/constants.d.ts.map +1 -1
  3. package/lib/constants.js +53 -8
  4. package/lib/constants.js.map +1 -1
  5. package/lib/dataFileUtils.d.ts +38 -2
  6. package/lib/dataFileUtils.d.ts.map +1 -1
  7. package/lib/dataFileUtils.js +34 -8
  8. package/lib/dataFileUtils.js.map +1 -1
  9. package/lib/emitUtils.d.ts +12 -0
  10. package/lib/emitUtils.d.ts.map +1 -1
  11. package/lib/emitUtils.js +24 -7
  12. package/lib/emitUtils.js.map +1 -1
  13. package/lib/gitUtils.d.ts +54 -5
  14. package/lib/gitUtils.d.ts.map +1 -1
  15. package/lib/gitUtils.js +14 -11
  16. package/lib/gitUtils.js.map +1 -1
  17. package/lib/globUtils.d.ts +27 -0
  18. package/lib/globUtils.d.ts.map +1 -1
  19. package/lib/globUtils.js +28 -10
  20. package/lib/globUtils.js.map +1 -1
  21. package/lib/hashUtils.d.ts +5 -4
  22. package/lib/hashUtils.d.ts.map +1 -1
  23. package/lib/hashUtils.js +6 -5
  24. package/lib/hashUtils.js.map +1 -1
  25. package/lib/i18nUtils.d.ts +11 -0
  26. package/lib/i18nUtils.d.ts.map +1 -1
  27. package/lib/i18nUtils.js +12 -3
  28. package/lib/i18nUtils.js.map +1 -1
  29. package/lib/index.d.ts +7 -7
  30. package/lib/index.d.ts.map +1 -1
  31. package/lib/index.js +16 -11
  32. package/lib/index.js.map +1 -1
  33. package/lib/jsUtils.d.ts +32 -4
  34. package/lib/jsUtils.d.ts.map +1 -1
  35. package/lib/jsUtils.js +35 -13
  36. package/lib/jsUtils.js.map +1 -1
  37. package/lib/markdownLinks.d.ts +48 -5
  38. package/lib/markdownLinks.d.ts.map +1 -1
  39. package/lib/markdownLinks.js +21 -11
  40. package/lib/markdownLinks.js.map +1 -1
  41. package/lib/markdownUtils.d.ts +112 -0
  42. package/lib/markdownUtils.d.ts.map +1 -0
  43. package/lib/markdownUtils.js +271 -0
  44. package/lib/markdownUtils.js.map +1 -0
  45. package/lib/pathUtils.d.ts +1 -1
  46. package/lib/pathUtils.d.ts.map +1 -1
  47. package/lib/pathUtils.js +2 -2
  48. package/lib/pathUtils.js.map +1 -1
  49. package/lib/slugger.d.ts +10 -0
  50. package/lib/slugger.d.ts.map +1 -1
  51. package/lib/slugger.js +4 -0
  52. package/lib/slugger.js.map +1 -1
  53. package/lib/tags.d.ts +31 -10
  54. package/lib/tags.d.ts.map +1 -1
  55. package/lib/tags.js +38 -23
  56. package/lib/tags.js.map +1 -1
  57. package/lib/urlUtils.d.ts +48 -2
  58. package/lib/urlUtils.d.ts.map +1 -1
  59. package/lib/urlUtils.js +81 -9
  60. package/lib/urlUtils.js.map +1 -1
  61. package/lib/webpackUtils.d.ts +5 -0
  62. package/lib/webpackUtils.d.ts.map +1 -1
  63. package/lib/webpackUtils.js +6 -2
  64. package/lib/webpackUtils.js.map +1 -1
  65. package/package.json +9 -9
  66. package/src/constants.ts +61 -9
  67. package/src/dataFileUtils.ts +43 -11
  68. package/src/emitUtils.ts +26 -9
  69. package/src/gitUtils.ts +76 -16
  70. package/src/globUtils.ts +29 -13
  71. package/src/hashUtils.ts +6 -5
  72. package/src/i18nUtils.ts +13 -4
  73. package/src/index.ts +14 -8
  74. package/src/jsUtils.ts +34 -20
  75. package/src/markdownLinks.ts +64 -27
  76. package/src/markdownUtils.ts +354 -0
  77. package/src/pathUtils.ts +2 -2
  78. package/src/slugger.ts +13 -1
  79. package/src/tags.ts +39 -27
  80. package/src/urlUtils.ts +96 -10
  81. package/src/webpackUtils.ts +10 -2
  82. package/lib/markdownParser.d.ts +0 -32
  83. package/lib/markdownParser.d.ts.map +0 -1
  84. package/lib/markdownParser.js +0 -160
  85. package/lib/markdownParser.js.map +0 -1
  86. package/src/markdownParser.ts +0 -201
@@ -9,22 +9,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.replaceMarkdownLinks = void 0;
10
10
  const tslib_1 = require("tslib");
11
11
  const path_1 = tslib_1.__importDefault(require("path"));
12
+ const dataFileUtils_1 = require("./dataFileUtils");
12
13
  const pathUtils_1 = require("./pathUtils");
14
+ /**
15
+ * Takes a Markdown file and replaces relative file references with their URL
16
+ * counterparts, e.g. `[link](./intro.md)` => `[link](/docs/intro)`, preserving
17
+ * everything else.
18
+ *
19
+ * This method uses best effort to find a matching file. The file reference can
20
+ * be relative to the directory of the current file (most likely) or any of the
21
+ * content paths (so `/tutorials/intro.md` can be resolved as
22
+ * `<siteDir>/docs/tutorials/intro.md`). Links that contain the `http(s):` or
23
+ * `@site/` prefix will always be ignored.
24
+ */
13
25
  function replaceMarkdownLinks({ siteDir, fileString, filePath, contentPaths, sourceToPermalink, }) {
14
- const { contentPath, contentPathLocalized } = contentPaths;
15
26
  const brokenMarkdownLinks = [];
16
27
  // Replace internal markdown linking (except in fenced blocks).
17
28
  let fencedBlock = false;
18
29
  let lastCodeFence = '';
19
30
  const lines = fileString.split('\n').map((line) => {
20
31
  if (line.trim().startsWith('```')) {
32
+ const codeFence = line.trim().match(/^`+/)[0];
21
33
  if (!fencedBlock) {
22
34
  fencedBlock = true;
23
- [lastCodeFence] = line.trim().match(/^`+/);
35
+ lastCodeFence = codeFence;
24
36
  // If we are in a ````-fenced block, all ``` would be plain text instead
25
37
  // of fences
26
38
  }
27
- else if (line.trim().match(/^`+/)[0].length >= lastCodeFence.length) {
39
+ else if (codeFence.length >= lastCodeFence.length) {
28
40
  fencedBlock = false;
29
41
  }
30
42
  }
@@ -33,19 +45,17 @@ function replaceMarkdownLinks({ siteDir, fileString, filePath, contentPaths, sou
33
45
  }
34
46
  let modifiedLine = line;
35
47
  // Replace inline-style links or reference-style links e.g:
36
- // This is [Document 1](doc1.md) -> we replace this doc1.md with correct
37
- // ink
38
- // [doc1]: doc1.md -> we replace this doc1.md with correct link
39
- const mdRegex = /(?:(?:\]\()|(?:\]:\s*))(?!https?:\/\/|@site\/)(?<filename>[^'")\]\s>]+\.mdx?)/g;
48
+ // This is [Document 1](doc1.md)
49
+ // [doc1]: doc1.md
50
+ const mdRegex = /(?:\]\(|\]:\s*)(?!https?:\/\/|@site\/)(?<filename>[^'")\]\s>]+\.mdx?)/g;
40
51
  let mdMatch = mdRegex.exec(modifiedLine);
41
52
  while (mdMatch !== null) {
42
53
  // Replace it to correct html link.
43
54
  const mdLink = mdMatch.groups.filename;
44
55
  const sourcesToTry = [
45
- path_1.default.resolve(path_1.default.dirname(filePath), decodeURIComponent(mdLink)),
46
- `${contentPathLocalized}/${decodeURIComponent(mdLink)}`,
47
- `${contentPath}/${decodeURIComponent(mdLink)}`,
48
- ];
56
+ path_1.default.dirname(filePath),
57
+ ...(0, dataFileUtils_1.getContentPathList)(contentPaths),
58
+ ].map((p) => path_1.default.join(p, decodeURIComponent(mdLink)));
49
59
  const aliasedSourceMatch = sourcesToTry
50
60
  .map((source) => (0, pathUtils_1.aliasedSitePath)(source, siteDir))
51
61
  .find((source) => sourceToPermalink[source]);
@@ -1 +1 @@
1
- {"version":3,"file":"markdownLinks.js","sourceRoot":"","sources":["../src/markdownLinks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdownLinks.js","sourceRoot":"","sources":["../src/markdownLinks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { type SluggerOptions } from './slugger';
8
+ /**
9
+ * Parses custom ID from a heading. The ID must be composed of letters,
10
+ * underscores, and dashes only.
11
+ *
12
+ * @param heading e.g. `## Some heading {#some-heading}` where the last
13
+ * character must be `}` for the ID to be recognized
14
+ */
15
+ export declare function parseMarkdownHeadingId(heading: string): {
16
+ /**
17
+ * The heading content sans the ID part, right-trimmed. e.g. `## Some heading`
18
+ */
19
+ text: string;
20
+ /** The heading ID. e.g. `some-heading` */
21
+ id?: string;
22
+ };
23
+ /**
24
+ * Creates an excerpt of a Markdown file. This function will:
25
+ *
26
+ * - Ignore h1 headings (setext or atx)
27
+ * - Ignore import/export
28
+ * - Ignore code blocks
29
+ *
30
+ * And for the first contentful line, it will strip away most Markdown
31
+ * syntax, including HTML tags, emphasis, links (keeping the text), etc.
32
+ */
33
+ export declare function createExcerpt(fileString: string): string | undefined;
34
+ /**
35
+ * Takes a raw Markdown file content, and parses the front matter using
36
+ * gray-matter. Worth noting that gray-matter accepts TOML and other markup
37
+ * languages as well.
38
+ *
39
+ * @throws Throws when gray-matter throws. e.g.:
40
+ * ```md
41
+ * ---
42
+ * foo: : bar
43
+ * ---
44
+ * ```
45
+ */
46
+ export declare function parseFrontMatter(markdownFileContent: string): {
47
+ /** Front matter as parsed by gray-matter. */
48
+ frontMatter: {
49
+ [key: string]: unknown;
50
+ };
51
+ /** The remaining content, trimmed. */
52
+ content: string;
53
+ };
54
+ declare type ParseMarkdownContentTitleOptions = {
55
+ /**
56
+ * If `true`, the matching title will be removed from the returned content.
57
+ * We can promise that at least one empty line will be left between the
58
+ * content before and after, but you shouldn't make too much assumption
59
+ * about what's left.
60
+ */
61
+ removeContentTitle?: boolean;
62
+ };
63
+ /**
64
+ * Takes the raw Markdown content, without front matter, and tries to find an h1
65
+ * title (setext or atx) to be used as metadata.
66
+ *
67
+ * It only searches until the first contentful paragraph, ignoring import/export
68
+ * declarations.
69
+ *
70
+ * It will try to convert markdown to reasonable text, but won't be best effort,
71
+ * since it's only used as a fallback when `frontMatter.title` is not provided.
72
+ * For now, we just unwrap inline code (``# `config.js` `` => `config.js`).
73
+ */
74
+ export declare function parseMarkdownContentTitle(contentUntrimmed: string, options?: ParseMarkdownContentTitleOptions): {
75
+ /** The content, optionally without the content title. */
76
+ content: string;
77
+ /** The title, trimmed and without the `#`. */
78
+ contentTitle: string | undefined;
79
+ };
80
+ /**
81
+ * Makes a full-round parse.
82
+ *
83
+ * @throws Throws when `parseFrontMatter` throws, usually because of invalid
84
+ * syntax.
85
+ */
86
+ export declare function parseMarkdownString(markdownFileContent: string, options?: ParseMarkdownContentTitleOptions): {
87
+ /** @see {@link parseFrontMatter} */
88
+ frontMatter: {
89
+ [key: string]: unknown;
90
+ };
91
+ /** @see {@link parseMarkdownContentTitle} */
92
+ contentTitle: string | undefined;
93
+ /** @see {@link createExcerpt} */
94
+ excerpt: string | undefined;
95
+ /**
96
+ * Content without front matter and (optionally) without title, depending on
97
+ * the `removeContentTitle` option.
98
+ */
99
+ content: string;
100
+ };
101
+ export declare type WriteHeadingIDOptions = SluggerOptions & {
102
+ /** Overwrite existing heading IDs. */
103
+ overwrite?: boolean;
104
+ };
105
+ /**
106
+ * Takes Markdown content, returns new content with heading IDs written.
107
+ * Respects existing IDs (unless `overwrite=true`) and never generates colliding
108
+ * IDs (through the slugger).
109
+ */
110
+ export declare function writeMarkdownHeadingId(content: string, options?: WriteHeadingIDOptions): string;
111
+ export {};
112
+ //# sourceMappingURL=markdownUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownUtils.d.ts","sourceRoot":"","sources":["../src/markdownUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAA8B,KAAK,cAAc,EAAC,MAAM,WAAW,CAAC;AAM3E;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IACvD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAUA;AAID;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4EpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,GAAG;IAC7D,6CAA6C;IAC7C,WAAW,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IACtC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB,CAMA;AASD,aAAK,gCAAgC,GAAG;IACtC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,gCAAgC,GACzC;IACD,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAyCA;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,gCAAgC,GACzC;IACD,oCAAoC;IACpC,WAAW,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IACtC,6CAA6C;IAC7C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,iCAAiC;IACjC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAuBA;AAyBD,oBAAY,qBAAqB,GAAG,cAAc,GAAG;IACnD,sCAAsC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,qBAA+D,GACvE,MAAM,CAoCR"}
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Facebook, Inc. and its affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.writeMarkdownHeadingId = exports.parseMarkdownString = exports.parseMarkdownContentTitle = exports.parseFrontMatter = exports.createExcerpt = exports.parseMarkdownHeadingId = void 0;
10
+ const tslib_1 = require("tslib");
11
+ const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
12
+ const gray_matter_1 = tslib_1.__importDefault(require("gray-matter"));
13
+ const slugger_1 = require("./slugger");
14
+ // Some utilities for parsing Markdown content. These things are only used on
15
+ // server-side when we infer metadata like `title` and `description` from the
16
+ // content. Most parsing is still done in MDX through the mdx-loader.
17
+ /**
18
+ * Parses custom ID from a heading. The ID must be composed of letters,
19
+ * underscores, and dashes only.
20
+ *
21
+ * @param heading e.g. `## Some heading {#some-heading}` where the last
22
+ * character must be `}` for the ID to be recognized
23
+ */
24
+ function parseMarkdownHeadingId(heading) {
25
+ const customHeadingIdRegex = /\s*\{#(?<id>[\w-]+)\}$/;
26
+ const matches = customHeadingIdRegex.exec(heading);
27
+ if (matches) {
28
+ return {
29
+ text: heading.replace(matches[0], ''),
30
+ id: matches.groups.id,
31
+ };
32
+ }
33
+ return { text: heading, id: undefined };
34
+ }
35
+ exports.parseMarkdownHeadingId = parseMarkdownHeadingId;
36
+ // TODO: Find a better way to do so, possibly by compiling the Markdown content,
37
+ // stripping out HTML tags and obtaining the first line.
38
+ /**
39
+ * Creates an excerpt of a Markdown file. This function will:
40
+ *
41
+ * - Ignore h1 headings (setext or atx)
42
+ * - Ignore import/export
43
+ * - Ignore code blocks
44
+ *
45
+ * And for the first contentful line, it will strip away most Markdown
46
+ * syntax, including HTML tags, emphasis, links (keeping the text), etc.
47
+ */
48
+ function createExcerpt(fileString) {
49
+ const fileLines = fileString
50
+ .trimStart()
51
+ // Remove Markdown alternate title
52
+ .replace(/^[^\n]*\n[=]+/g, '')
53
+ .split('\n');
54
+ let inCode = false;
55
+ let inImport = false;
56
+ let lastCodeFence = '';
57
+ for (const fileLine of fileLines) {
58
+ if (fileLine === '' && inImport) {
59
+ inImport = false;
60
+ }
61
+ // Skip empty line.
62
+ if (!fileLine.trim()) {
63
+ continue;
64
+ }
65
+ // Skip import/export declaration.
66
+ if ((/^(?:import|export)\s.*/.test(fileLine) || inImport) && !inCode) {
67
+ inImport = true;
68
+ continue;
69
+ }
70
+ // Skip code block line.
71
+ if (fileLine.trim().startsWith('```')) {
72
+ const codeFence = fileLine.trim().match(/^`+/)[0];
73
+ if (!inCode) {
74
+ inCode = true;
75
+ lastCodeFence = codeFence;
76
+ // If we are in a ````-fenced block, all ``` would be plain text instead
77
+ // of fences
78
+ }
79
+ else if (codeFence.length >= lastCodeFence.length) {
80
+ inCode = false;
81
+ }
82
+ continue;
83
+ }
84
+ else if (inCode) {
85
+ continue;
86
+ }
87
+ const cleanedLine = fileLine
88
+ // Remove HTML tags.
89
+ .replace(/<[^>]*>/g, '')
90
+ // Remove Title headers
91
+ .replace(/^#[^#]+#?/gm, '')
92
+ // Remove Markdown + ATX-style headers
93
+ .replace(/^#{1,6}\s*(?<text>[^#]*)\s*#{0,6}/gm, '$1')
94
+ // Remove emphasis.
95
+ .replace(/(?<opening>[*_]{1,3})(?<text>.*?)\1/g, '$2')
96
+ // Remove strikethroughs.
97
+ .replace(/~~(?<text>\S.*\S)~~/g, '$1')
98
+ // Remove images.
99
+ .replace(/!\[(?<alt>.*?)\][[(].*?[\])]/g, '$1')
100
+ // Remove footnotes.
101
+ .replace(/\[\^.+?\](?:: .*$)?/g, '')
102
+ // Remove inline links.
103
+ .replace(/\[(?<alt>.*?)\][[(].*?[\])]/g, '$1')
104
+ // Remove inline code.
105
+ .replace(/`(?<text>.+?)`/g, '$1')
106
+ // Remove blockquotes.
107
+ .replace(/^\s{0,3}>\s?/g, '')
108
+ // Remove admonition definition.
109
+ .replace(/:::.*/, '')
110
+ // Remove Emoji names within colons include preceding whitespace.
111
+ .replace(/\s?:(?:::|[^:\n])+:/g, '')
112
+ // Remove custom Markdown heading id.
113
+ .replace(/\{#*[\w-]+\}/, '')
114
+ .trim();
115
+ if (cleanedLine) {
116
+ return cleanedLine;
117
+ }
118
+ }
119
+ return undefined;
120
+ }
121
+ exports.createExcerpt = createExcerpt;
122
+ /**
123
+ * Takes a raw Markdown file content, and parses the front matter using
124
+ * gray-matter. Worth noting that gray-matter accepts TOML and other markup
125
+ * languages as well.
126
+ *
127
+ * @throws Throws when gray-matter throws. e.g.:
128
+ * ```md
129
+ * ---
130
+ * foo: : bar
131
+ * ---
132
+ * ```
133
+ */
134
+ function parseFrontMatter(markdownFileContent) {
135
+ const { data, content } = (0, gray_matter_1.default)(markdownFileContent);
136
+ return {
137
+ frontMatter: data,
138
+ content: content.trim(),
139
+ };
140
+ }
141
+ exports.parseFrontMatter = parseFrontMatter;
142
+ function toTextContentTitle(contentTitle) {
143
+ if (contentTitle.startsWith('`') && contentTitle.endsWith('`')) {
144
+ return contentTitle.substring(1, contentTitle.length - 1);
145
+ }
146
+ return contentTitle;
147
+ }
148
+ /**
149
+ * Takes the raw Markdown content, without front matter, and tries to find an h1
150
+ * title (setext or atx) to be used as metadata.
151
+ *
152
+ * It only searches until the first contentful paragraph, ignoring import/export
153
+ * declarations.
154
+ *
155
+ * It will try to convert markdown to reasonable text, but won't be best effort,
156
+ * since it's only used as a fallback when `frontMatter.title` is not provided.
157
+ * For now, we just unwrap inline code (``# `config.js` `` => `config.js`).
158
+ */
159
+ function parseMarkdownContentTitle(contentUntrimmed, options) {
160
+ const removeContentTitleOption = options?.removeContentTitle ?? false;
161
+ const content = contentUntrimmed.trim();
162
+ // We only need to detect import statements that will be parsed by MDX as
163
+ // `import` nodes, as broken syntax can't render anyways. That means any block
164
+ // that has `import` at the very beginning and surrounded by empty lines.
165
+ const contentWithoutImport = content
166
+ .replace(/^(?:import\s(?:.|\n(?!\n))*\n{2,})*/, '')
167
+ .trim();
168
+ const regularTitleMatch = /^#[ \t]+(?<title>[^ \t].*)(?:\n|$)/.exec(contentWithoutImport);
169
+ const alternateTitleMatch = /^(?<title>.*)\n=+(?:\n|$)/.exec(contentWithoutImport);
170
+ const titleMatch = regularTitleMatch ?? alternateTitleMatch;
171
+ if (!titleMatch) {
172
+ return { content, contentTitle: undefined };
173
+ }
174
+ const newContent = removeContentTitleOption
175
+ ? content.replace(titleMatch[0], '')
176
+ : content;
177
+ if (regularTitleMatch) {
178
+ return {
179
+ content: newContent.trim(),
180
+ contentTitle: toTextContentTitle(regularTitleMatch
181
+ .groups.title.trim()
182
+ .replace(/\s*(?:\{#*[\w-]+\}|#+)$/, '')).trim(),
183
+ };
184
+ }
185
+ return {
186
+ content: newContent.trim(),
187
+ contentTitle: toTextContentTitle(alternateTitleMatch.groups.title.trim().replace(/\s*=+$/, '')).trim(),
188
+ };
189
+ }
190
+ exports.parseMarkdownContentTitle = parseMarkdownContentTitle;
191
+ /**
192
+ * Makes a full-round parse.
193
+ *
194
+ * @throws Throws when `parseFrontMatter` throws, usually because of invalid
195
+ * syntax.
196
+ */
197
+ function parseMarkdownString(markdownFileContent, options) {
198
+ try {
199
+ const { frontMatter, content: contentWithoutFrontMatter } = parseFrontMatter(markdownFileContent);
200
+ const { content, contentTitle } = parseMarkdownContentTitle(contentWithoutFrontMatter, options);
201
+ const excerpt = createExcerpt(content);
202
+ return {
203
+ frontMatter,
204
+ content,
205
+ contentTitle,
206
+ excerpt,
207
+ };
208
+ }
209
+ catch (err) {
210
+ logger_1.default.error(`Error while parsing Markdown front matter.
211
+ This can happen if you use special characters in front matter values (try using double quotes around that value).`);
212
+ throw err;
213
+ }
214
+ }
215
+ exports.parseMarkdownString = parseMarkdownString;
216
+ function unwrapMarkdownLinks(line) {
217
+ return line.replace(/\[(?<alt>[^\]]+)\]\([^)]+\)/g, (match, p1) => p1);
218
+ }
219
+ function addHeadingId(line, slugger, maintainCase) {
220
+ let headingLevel = 0;
221
+ while (line.charAt(headingLevel) === '#') {
222
+ headingLevel += 1;
223
+ }
224
+ const headingText = line.slice(headingLevel).trimEnd();
225
+ const headingHashes = line.slice(0, headingLevel);
226
+ const slug = slugger.slug(unwrapMarkdownLinks(headingText).trim(), {
227
+ maintainCase,
228
+ });
229
+ return `${headingHashes}${headingText} {#${slug}}`;
230
+ }
231
+ /**
232
+ * Takes Markdown content, returns new content with heading IDs written.
233
+ * Respects existing IDs (unless `overwrite=true`) and never generates colliding
234
+ * IDs (through the slugger).
235
+ */
236
+ function writeMarkdownHeadingId(content, options = { maintainCase: false, overwrite: false }) {
237
+ const { maintainCase = false, overwrite = false } = options;
238
+ const lines = content.split('\n');
239
+ const slugger = (0, slugger_1.createSlugger)();
240
+ // If we can't overwrite existing slugs, make sure other headings don't
241
+ // generate colliding slugs by first marking these slugs as occupied
242
+ if (!overwrite) {
243
+ lines.forEach((line) => {
244
+ const parsedHeading = parseMarkdownHeadingId(line);
245
+ if (parsedHeading.id) {
246
+ slugger.slug(parsedHeading.id);
247
+ }
248
+ });
249
+ }
250
+ let inCode = false;
251
+ return lines
252
+ .map((line) => {
253
+ if (line.startsWith('```')) {
254
+ inCode = !inCode;
255
+ return line;
256
+ }
257
+ // Ignore h1 headings, as we don't create anchor links for those
258
+ if (inCode || !line.startsWith('##')) {
259
+ return line;
260
+ }
261
+ const parsedHeading = parseMarkdownHeadingId(line);
262
+ // Do not process if id is already there
263
+ if (parsedHeading.id && !overwrite) {
264
+ return line;
265
+ }
266
+ return addHeadingId(parsedHeading.text, slugger, maintainCase);
267
+ })
268
+ .join('\n');
269
+ }
270
+ exports.writeMarkdownHeadingId = writeMarkdownHeadingId;
271
+ //# sourceMappingURL=markdownUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownUtils.js","sourceRoot":"","sources":["../src/markdownUtils.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  export declare const isNameTooLong: (str: string) => boolean;
8
- export declare const shortName: (str: string) => string;
8
+ export declare function shortName(str: string): string;
9
9
  /**
10
10
  * Convert Windows backslash paths to posix style paths.
11
11
  * E.g: endi\lie -> endi/lie
@@ -1 +1 @@
1
- {"version":3,"file":"pathUtils.d.ts","sourceRoot":"","sources":["../src/pathUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAIgC,CAAC;AAE7E,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,MAiBvC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAY7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK5D"}
1
+ {"version":3,"file":"pathUtils.d.ts","sourceRoot":"","sources":["../src/pathUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAIgC,CAAC;AAE7E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAY7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK5D"}
package/lib/pathUtils.js CHANGED
@@ -24,7 +24,7 @@ isMacOs() || isWindows()
24
24
  ? str.length + SPACE_FOR_APPENDING > MAX_PATH_SEGMENT_CHARS // MacOS (APFS) and Windows (NTFS) filename length limit (255 chars)
25
25
  : Buffer.from(str).length + SPACE_FOR_APPENDING > MAX_PATH_SEGMENT_BYTES; // Other (255 bytes)
26
26
  exports.isNameTooLong = isNameTooLong;
27
- const shortName = (str) => {
27
+ function shortName(str) {
28
28
  if (isMacOs() || isWindows()) {
29
29
  const overflowingChars = str.length - MAX_PATH_SEGMENT_CHARS;
30
30
  return str.slice(0, str.length - overflowingChars - SPACE_FOR_APPENDING - 1);
@@ -34,7 +34,7 @@ const shortName = (str) => {
34
34
  return strBuffer
35
35
  .slice(0, Buffer.byteLength(strBuffer) - overflowingBytes - SPACE_FOR_APPENDING - 1)
36
36
  .toString();
37
- };
37
+ }
38
38
  exports.shortName = shortName;
39
39
  /**
40
40
  * Convert Windows backslash paths to posix style paths.
@@ -1 +1 @@
1
- {"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../src/pathUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../src/pathUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,wDAAwB;AAExB,+DAA+D;AAC/D,qEAAqE;AACrE,qBAAqB;AACrB,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACpD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAE9C,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE;AACpD,qEAAqE;AACrE,OAAO,EAAE,IAAI,SAAS,EAAE;IACtB,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,mBAAmB,GAAG,sBAAsB,CAAC,oEAAoE;IAChI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,mBAAmB,GAAG,sBAAsB,CAAC,CAAC,oBAAoB;AAJrF,QAAA,aAAa,iBAImD;AAE7E,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,OAAO,EAAE,IAAI,SAAS,EAAE,EAAE;QAC5B,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,GAAG,sBAAsB,CAAC;QAC7D,OAAO,GAAG,CAAC,KAAK,CACd,CAAC,EACD,GAAG,CAAC,MAAM,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,CAAC,CACxD,CAAC;KACH;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,gBAAgB,GACpB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,sBAAsB,CAAC;IACxD,OAAO,SAAS;SACb,KAAK,CACJ,CAAC,EACD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,CAAC,CAC1E;SACA,QAAQ,EAAE,CAAC;AAChB,CAAC;AAjBD,8BAiBC;AAED;;;;;;;;;GASG;AACH,SAAgB,SAAS,CAAC,GAAW;IACnC,MAAM,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnD,4EAA4E;IAC5E,oBAAoB;IACpB,4CAA4C;IAC5C,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElD,IAAI,oBAAoB,IAAI,WAAW,EAAE;QACvC,OAAO,GAAG,CAAC;KACZ;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAZD,8BAYC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB,CAAC,QAAgB;IACxD,OAAO,SAAS,CAAC,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAFD,8DAEC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,YAAY,GAAG,SAAS,CAAC,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,0DAA0D;IAC1D,8CAA8C;IAC9C,OAAO,SAAS,YAAY,EAAE,CAAC;AACjC,CAAC;AALD,0CAKC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEpC,uCAAuC;IACvC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AALD,gCAKC;AAED,SAAgB,wBAAwB,CAAC,GAAW;IAClD,OAAO,GAAG,CAAC,QAAQ,CAAC,cAAI,CAAC,GAAG,CAAC;QAC3B,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,sEAAsE;YACtE,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAI,CAAC,GAAG,EAAE,CAAC;AAC7C,CAAC;AALD,4DAKC"}
package/lib/slugger.d.ts CHANGED
@@ -5,10 +5,20 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  export declare type SluggerOptions = {
8
+ /** Keep the headings' casing, otherwise make all lowercase. */
8
9
  maintainCase?: boolean;
9
10
  };
10
11
  export declare type Slugger = {
12
+ /**
13
+ * Takes a Markdown heading like "Josh Cena" and sluggifies it according to
14
+ * GitHub semantics (in this case `josh-cena`). Stateful, because if you try
15
+ * to sluggify "Josh Cena" again it would return `josh-cena-1`.
16
+ */
11
17
  slug: (value: string, options?: SluggerOptions) => string;
12
18
  };
19
+ /**
20
+ * A thin wrapper around github-slugger. This is a factory function that returns
21
+ * a stateful Slugger object.
22
+ */
13
23
  export declare function createSlugger(): Slugger;
14
24
  //# sourceMappingURL=slugger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slugger.d.ts","sourceRoot":"","sources":["../src/slugger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,oBAAY,cAAc,GAAG;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAEtD,oBAAY,OAAO,GAAG;IACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,MAAM,CAAC;CAC3D,CAAC;AAEF,wBAAgB,aAAa,IAAI,OAAO,CAKvC"}
1
+ {"version":3,"file":"slugger.d.ts","sourceRoot":"","sources":["../src/slugger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,oBAAY,cAAc,GAAG;IAC3B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,oBAAY,OAAO,GAAG;IACpB;;;;OAIG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,MAAM,CAAC;CAC3D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAKvC"}
package/lib/slugger.js CHANGED
@@ -9,6 +9,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.createSlugger = void 0;
10
10
  const tslib_1 = require("tslib");
11
11
  const github_slugger_1 = tslib_1.__importDefault(require("github-slugger"));
12
+ /**
13
+ * A thin wrapper around github-slugger. This is a factory function that returns
14
+ * a stateful Slugger object.
15
+ */
12
16
  function createSlugger() {
13
17
  const githubSlugger = new github_slugger_1.default();
14
18
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"slugger.js","sourceRoot":"","sources":["../src/slugger.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,4EAA2C;AAW3C,SAAgB,aAAa;IAC3B,MAAM,aAAa,GAAG,IAAI,wBAAa,EAAE,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;KAC3E,CAAC;AACJ,CAAC;AALD,sCAKC"}
1
+ {"version":3,"file":"slugger.js","sourceRoot":"","sources":["../src/slugger.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,4EAA2C;AAmB3C;;;GAGG;AACH,SAAgB,aAAa;IAC3B,MAAM,aAAa,GAAG,IAAI,wBAAa,EAAE,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;KAC3E,CAAC;AACJ,CAAC;AALD,sCAKC"}
package/lib/tags.d.ts CHANGED
@@ -6,22 +6,43 @@
6
6
  */
7
7
  export declare type Tag = {
8
8
  label: string;
9
+ /** Permalink to this tag's page, without the `/tags/` base path. */
9
10
  permalink: string;
10
11
  };
11
12
  export declare type FrontMatterTag = string | Tag;
12
- export declare function normalizeFrontMatterTag(tagsPath: string, frontMatterTag: FrontMatterTag): Tag;
13
- export declare function normalizeFrontMatterTags(tagsPath: string, frontMatterTags?: FrontMatterTag[] | undefined): Tag[];
14
- export declare type TaggedItemGroup<Item> = {
13
+ /**
14
+ * Takes tag objects as they are defined in front matter, and normalizes each
15
+ * into a standard tag object. The permalink is created by appending the
16
+ * sluggified label to `tagsPath`. Front matter tags already containing
17
+ * permalinks would still have `tagsPath` prepended.
18
+ *
19
+ * The result will always be unique by permalinks. The behavior with colliding
20
+ * permalinks is undetermined.
21
+ */
22
+ export declare function normalizeFrontMatterTags(
23
+ /** Base path to append the tag permalinks to. */
24
+ tagsPath: string,
25
+ /** Can be `undefined`, so that we can directly pipe in `frontMatter.tags`. */
26
+ frontMatterTags?: FrontMatterTag[] | undefined): Tag[];
27
+ declare type TaggedItemGroup<Item> = {
15
28
  tag: Tag;
16
29
  items: Item[];
17
30
  };
18
31
  /**
19
- * Permits to group docs/blogPosts by tag (provided by front matter)
20
- * Note: groups are indexed by permalink, because routes must be unique in the
21
- * end. Labels may vary on 2 md files but they are normalized. Docs with
22
- * label='some label' and label='some-label' should end-up in the same
23
- * group/page in the end. We can't create 2 routes /some-label because one would
24
- * override the other
32
+ * Permits to group docs/blog posts by tag (provided by front matter).
33
+ *
34
+ * @returns a map from tag permalink to the items and other relevant tag data.
35
+ * The record is indexed by permalink, because routes must be unique in the end.
36
+ * Labels may vary on 2 MD files but they are normalized. Docs with
37
+ * label='some label' and label='some-label' should end up in the same page.
25
38
  */
26
- export declare function groupTaggedItems<Item>(items: Item[], getItemTags: (item: Item) => Tag[]): Record<string, TaggedItemGroup<Item>>;
39
+ export declare function groupTaggedItems<Item>(items: readonly Item[],
40
+ /**
41
+ * A callback telling me how to get the tags list of the current item. Usually
42
+ * simply getting it from some metadata of the current item.
43
+ */
44
+ getItemTags: (item: Item) => readonly Tag[]): {
45
+ [permalink: string]: TaggedItemGroup<Item>;
46
+ };
47
+ export {};
27
48
  //# sourceMappingURL=tags.d.ts.map
package/lib/tags.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,oBAAY,GAAG,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,cAAc,GAAG,MAAM,GAAG,GAAG,CAAC;AAE1C,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,cAAc,GAC7B,GAAG,CAyBL;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,cAAc,EAAE,GAAG,SAAc,GACjD,GAAG,EAAE,CAMP;AAED,oBAAY,eAAe,CAAC,IAAI,IAAI;IAClC,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,IAAI,EAAE,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EACnC,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,GACjC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CA8BvC"}
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,oBAAY,GAAG,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,cAAc,GAAG,MAAM,GAAG,GAAG,CAAC;AAgC1C;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB;AACtC,iDAAiD;AACjD,QAAQ,EAAE,MAAM;AAChB,8EAA8E;AAC9E,eAAe,GAAE,cAAc,EAAE,GAAG,SAAc,GACjD,GAAG,EAAE,CAMP;AAED,aAAK,eAAe,CAAC,IAAI,IAAI;IAC3B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,IAAI,EAAE,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EACnC,KAAK,EAAE,SAAS,IAAI,EAAE;AACtB;;;GAGG;AACH,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,EAAE,GAC1C;IAAC,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;CAAC,CA0B9C"}