@brillout/docpress 0.15.8 → 0.15.10-commit-ef0b9a0
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/NavItemComponent.tsx +11 -0
- package/components/CodeSnippets.tsx +68 -0
- package/components/index.ts +1 -0
- package/detypePlugin.ts +68 -0
- package/dist/+config.js +1 -1
- package/dist/NavItemComponent.d.ts +0 -1
- package/dist/NavItemComponent.js +38 -47
- package/dist/components/CodeBlockTransformer.js +2 -3
- package/dist/components/CodeSnippets.d.ts +13 -0
- package/dist/components/CodeSnippets.js +39 -0
- package/dist/components/Comment.js +1 -2
- package/dist/components/FileRemoved.js +4 -6
- package/dist/components/HorizontalLine.js +1 -2
- package/dist/components/ImportMeta.js +2 -3
- package/dist/components/Link.js +34 -50
- package/dist/components/Note.js +17 -29
- package/dist/components/P.js +1 -12
- package/dist/components/RepoLink.js +7 -9
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/determineNavItemsColumnLayout.js +48 -62
- package/dist/detypePlugin.d.ts +3 -0
- package/dist/detypePlugin.js +53 -0
- package/dist/parseMarkdownMini.js +5 -17
- package/dist/parsePageSections.js +41 -82
- package/dist/renderer/usePageContext.js +6 -7
- package/dist/resolvePageContext.js +91 -103
- package/dist/utils/Emoji/Emoji.js +13 -21
- package/dist/utils/assert.js +14 -16
- package/dist/utils/cls.js +1 -1
- package/dist/utils/determineSectionUrlHash.js +5 -5
- package/dist/utils/filter.js +2 -2
- package/dist/utils/getGlobalObject.js +3 -3
- package/dist/utils/useSelectedLanguage.d.ts +7 -0
- package/dist/utils/useSelectedLanguage.js +48 -0
- package/dist/vite.config.js +9 -7
- package/global.d.ts +3 -1
- package/index.ts +3 -0
- package/package.json +2 -1
- package/tsconfig.config.json +1 -1
- package/tsconfig.json +1 -0
- package/utils/useSelectedLanguage.ts +61 -0
- package/vite.config.ts +2 -0
package/dist/components/Note.js
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
1
|
export { Warning };
|
|
13
2
|
export { Advanced };
|
|
14
3
|
export { Construction };
|
|
@@ -27,39 +16,38 @@ import React from 'react';
|
|
|
27
16
|
import { assert } from '../utils/assert';
|
|
28
17
|
import './Note.css';
|
|
29
18
|
function Warning(props) {
|
|
30
|
-
return React.createElement(NoteGeneric,
|
|
19
|
+
return React.createElement(NoteGeneric, { type: "warning", ...props });
|
|
31
20
|
}
|
|
32
21
|
function Advanced(props) {
|
|
33
|
-
return React.createElement(NoteGeneric,
|
|
22
|
+
return React.createElement(NoteGeneric, { type: "advanced", ...props });
|
|
34
23
|
}
|
|
35
24
|
function Construction(props) {
|
|
36
|
-
return React.createElement(NoteGeneric,
|
|
25
|
+
return React.createElement(NoteGeneric, { type: "construction", ...props });
|
|
37
26
|
}
|
|
38
27
|
function Contribution(props) {
|
|
39
|
-
return React.createElement(NoteGeneric,
|
|
28
|
+
return React.createElement(NoteGeneric, { type: "contribution", ...props });
|
|
40
29
|
}
|
|
41
30
|
function Danger(props) {
|
|
42
|
-
return React.createElement(NoteGeneric,
|
|
31
|
+
return React.createElement(NoteGeneric, { type: "danger", ...props });
|
|
43
32
|
}
|
|
44
33
|
function NoteWithoutIcon(props) {
|
|
45
|
-
return React.createElement(NoteGeneric,
|
|
34
|
+
return React.createElement(NoteGeneric, { icon: null, ...props });
|
|
46
35
|
}
|
|
47
36
|
function NoteWithCustomIcon(props) {
|
|
48
|
-
|
|
37
|
+
const { icon } = props;
|
|
49
38
|
if (!icon)
|
|
50
|
-
throw new Error(
|
|
51
|
-
return React.createElement(NoteGeneric,
|
|
39
|
+
throw new Error(`<NoteWithCustomIcon icon={/*...*/}> property 'icon' is \`${icon}\` which is forbidden`);
|
|
40
|
+
return React.createElement(NoteGeneric, { ...props });
|
|
52
41
|
}
|
|
53
|
-
function NoteGeneric(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var className = 'custom-icon';
|
|
42
|
+
function NoteGeneric({ type, icon, iconMargin, children, style, }) {
|
|
43
|
+
assert(icon === null || icon || type, { icon, type });
|
|
44
|
+
iconMargin ?? (iconMargin = 2);
|
|
45
|
+
let className = 'custom-icon';
|
|
58
46
|
if (type) {
|
|
59
|
-
className =
|
|
47
|
+
className = `${className} type-${type}`;
|
|
60
48
|
}
|
|
61
49
|
if (!icon && type) {
|
|
62
|
-
|
|
50
|
+
let classColor = '';
|
|
63
51
|
if (type === 'danger') {
|
|
64
52
|
icon = '⛔';
|
|
65
53
|
classColor = 'note-color-red';
|
|
@@ -82,13 +70,13 @@ function NoteGeneric(_a) {
|
|
|
82
70
|
}
|
|
83
71
|
assert(icon);
|
|
84
72
|
assert(classColor);
|
|
85
|
-
className =
|
|
73
|
+
className = `${className} ${classColor}`;
|
|
86
74
|
}
|
|
87
75
|
return (React.createElement("blockquote", { className: className, style: style },
|
|
88
76
|
React.createElement("div", { style: { marginBottom: 20 } }),
|
|
89
77
|
icon && (React.createElement(React.Fragment, null,
|
|
90
78
|
React.createElement("span", { style: { fontFamily: 'emoji' } }, icon),
|
|
91
|
-
React.createElement("span", { style: { width: iconMargin
|
|
79
|
+
React.createElement("span", { style: { width: iconMargin ?? undefined, display: 'inline-block' } }),
|
|
92
80
|
' ')),
|
|
93
81
|
React.createElement("div", { className: "blockquote-content" }, children),
|
|
94
82
|
React.createElement("div", { style: { marginTop: 20 } })));
|
package/dist/components/P.js
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
1
|
import React from 'react';
|
|
13
2
|
import './P.css';
|
|
14
3
|
export { P };
|
|
15
4
|
function P(props) {
|
|
16
|
-
return React.createElement("div",
|
|
5
|
+
return React.createElement("div", { ...props, className: 'paragraph' });
|
|
17
6
|
}
|
|
@@ -2,21 +2,19 @@ export { RepoLink };
|
|
|
2
2
|
export { getRepoHref };
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { usePageContext } from '../renderer/usePageContext';
|
|
5
|
-
function RepoLink(
|
|
6
|
-
var path = _a.path, text = _a.text;
|
|
5
|
+
function RepoLink({ path, text }) {
|
|
7
6
|
text = text || path;
|
|
8
|
-
|
|
7
|
+
const href = getRepoHref(path);
|
|
9
8
|
return React.createElement("a", { href: href }, text);
|
|
10
9
|
}
|
|
11
|
-
function getRepoHref(path, editMode) {
|
|
12
|
-
|
|
13
|
-
var pageContext = usePageContext();
|
|
10
|
+
function getRepoHref(path, editMode = false) {
|
|
11
|
+
const pageContext = usePageContext();
|
|
14
12
|
if (!path.startsWith('/')) {
|
|
15
13
|
path = '/' + path;
|
|
16
14
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
const viewMode = path.endsWith('/') && !editMode ? 'tree' : 'blob';
|
|
16
|
+
const { github } = pageContext.globalContext.config.docpress;
|
|
17
|
+
let href = `${github}/${viewMode}/main${path}`;
|
|
20
18
|
if (editMode)
|
|
21
19
|
href += '?plain=1';
|
|
22
20
|
return href;
|
package/dist/components/index.js
CHANGED
|
@@ -1,47 +1,26 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
-
if (ar || !(i in from)) {
|
|
15
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
-
ar[i] = from[i];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
-
};
|
|
21
1
|
export { determineNavItemsColumnLayout };
|
|
22
2
|
import { assert, assertUsage } from './utils/assert';
|
|
23
3
|
function determineNavItemsColumnLayout(navItems) {
|
|
24
|
-
|
|
25
|
-
columnLayouts.forEach(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
columnEntries.forEach(
|
|
4
|
+
const columnLayouts = getColumnEntries(navItems);
|
|
5
|
+
columnLayouts.forEach((columnEntries) => {
|
|
6
|
+
for (let numberOfColumns = columnEntries.length; numberOfColumns >= 1; numberOfColumns--) {
|
|
7
|
+
const columnMapping = determineColumnLayout(columnEntries.map((columnEntry) => columnEntry.numberOfEntries), numberOfColumns);
|
|
8
|
+
columnEntries.forEach((columnEntry, i) => {
|
|
29
9
|
var _a;
|
|
30
|
-
|
|
31
|
-
(_a = (_b = columnEntry.navItemLeader).isColumnEntry) !== null && _a !== void 0 ? _a : (_b.isColumnEntry = {});
|
|
10
|
+
(_a = columnEntry.navItemLeader).isColumnEntry ?? (_a.isColumnEntry = {});
|
|
32
11
|
columnEntry.navItemLeader.isColumnEntry[numberOfColumns] = columnMapping[i];
|
|
33
12
|
});
|
|
34
|
-
};
|
|
35
|
-
for (var numberOfColumns = columnEntries.length; numberOfColumns >= 1; numberOfColumns--) {
|
|
36
|
-
_loop_1(numberOfColumns);
|
|
37
13
|
}
|
|
38
14
|
});
|
|
39
15
|
}
|
|
40
16
|
function getColumnEntries(navItems) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
17
|
+
const navItemsWithLength = navItems.map((navItem) => ({
|
|
18
|
+
...navItem,
|
|
19
|
+
numberOfHeadings: navItem.level === 1 || navItem.level === 4 ? 0 : null,
|
|
20
|
+
}));
|
|
21
|
+
let navItemLevel1;
|
|
22
|
+
let navItemLevel4;
|
|
23
|
+
navItemsWithLength.forEach((navItem) => {
|
|
45
24
|
if (navItem.level === 1) {
|
|
46
25
|
navItemLevel1 = navItem;
|
|
47
26
|
navItemLevel4 = undefined;
|
|
@@ -51,7 +30,7 @@ function getColumnEntries(navItems) {
|
|
|
51
30
|
navItemLevel4 = navItem;
|
|
52
31
|
return;
|
|
53
32
|
}
|
|
54
|
-
|
|
33
|
+
const bumpNavItemLength = (navItem) => {
|
|
55
34
|
assert(navItem.numberOfHeadings !== null);
|
|
56
35
|
navItem.numberOfHeadings++;
|
|
57
36
|
};
|
|
@@ -61,13 +40,13 @@ function getColumnEntries(navItems) {
|
|
|
61
40
|
bumpNavItemLength(navItemLevel4);
|
|
62
41
|
}
|
|
63
42
|
});
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
navItemsWithLength.forEach(
|
|
68
|
-
|
|
43
|
+
const columnLayouts = [];
|
|
44
|
+
let columnEntries = [];
|
|
45
|
+
let isFullWidthCategory;
|
|
46
|
+
navItemsWithLength.forEach((navItem, i) => {
|
|
47
|
+
let isFullWidthCategoryBegin = false;
|
|
69
48
|
if (navItem.level === 1) {
|
|
70
|
-
|
|
49
|
+
const isFullWidthCategoryPrevious = isFullWidthCategory;
|
|
71
50
|
isFullWidthCategory = !!navItem.menuModalFullWidth;
|
|
72
51
|
if (isFullWidthCategory)
|
|
73
52
|
isFullWidthCategoryBegin = true;
|
|
@@ -76,8 +55,8 @@ function getColumnEntries(navItems) {
|
|
|
76
55
|
columnEntries = [];
|
|
77
56
|
}
|
|
78
57
|
}
|
|
79
|
-
|
|
80
|
-
|
|
58
|
+
const navItemPrevious = navItemsWithLength[i - 1];
|
|
59
|
+
const navItemNext = navItemsWithLength[i + 1];
|
|
81
60
|
if (!isFullWidthCategory
|
|
82
61
|
? navItem.level === 1
|
|
83
62
|
: (navItem.level === 4 && navItemPrevious.level !== 1) || isFullWidthCategoryBegin) {
|
|
@@ -87,7 +66,7 @@ function getColumnEntries(navItems) {
|
|
|
87
66
|
else {
|
|
88
67
|
assert(navItem.level === 1);
|
|
89
68
|
}
|
|
90
|
-
|
|
69
|
+
let { numberOfHeadings } = navItem;
|
|
91
70
|
assert(numberOfHeadings !== null);
|
|
92
71
|
if (isFullWidthCategoryBegin) {
|
|
93
72
|
assert(navItem.level === 1);
|
|
@@ -106,15 +85,15 @@ function getColumnEntries(navItems) {
|
|
|
106
85
|
}
|
|
107
86
|
function determineColumnLayout(columnsUnmerged, numberOfColumns) {
|
|
108
87
|
assert(numberOfColumns <= columnsUnmerged.length);
|
|
109
|
-
|
|
88
|
+
const columnsMergingInit = columnsUnmerged.map((columnHeight, i) => ({
|
|
110
89
|
columnIdsMerged: [i],
|
|
111
90
|
heightTotal: columnHeight,
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
|
|
91
|
+
}));
|
|
92
|
+
const columnsMerged = mergeColumns(columnsMergingInit, numberOfColumns);
|
|
93
|
+
const columnsIdMap = new Array(columnsUnmerged.length);
|
|
115
94
|
assert(columnsMerged.length === numberOfColumns);
|
|
116
|
-
columnsMerged.forEach(
|
|
117
|
-
columnMerged.columnIdsMerged.forEach(
|
|
95
|
+
columnsMerged.forEach((columnMerged, columnMergedId) => {
|
|
96
|
+
columnMerged.columnIdsMerged.forEach((columnId) => {
|
|
118
97
|
columnsIdMap[columnId] = columnMergedId;
|
|
119
98
|
});
|
|
120
99
|
});
|
|
@@ -124,25 +103,32 @@ function determineColumnLayout(columnsUnmerged, numberOfColumns) {
|
|
|
124
103
|
function mergeColumns(columnsMerging, numberOfColumns) {
|
|
125
104
|
if (columnsMerging.length <= numberOfColumns)
|
|
126
105
|
return columnsMerging;
|
|
127
|
-
|
|
128
|
-
for (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
106
|
+
let mergeCandidate = null;
|
|
107
|
+
for (let i = 0; i <= columnsMerging.length - 2; i++) {
|
|
108
|
+
const column1 = columnsMerging[i + 0];
|
|
109
|
+
const column2 = columnsMerging[i + 1];
|
|
110
|
+
const heightTotal = column1.heightTotal + column2.heightTotal;
|
|
132
111
|
if (!mergeCandidate || mergeCandidate.heightTotal > heightTotal) {
|
|
133
112
|
mergeCandidate = {
|
|
134
|
-
i
|
|
135
|
-
columnIdsMerged:
|
|
136
|
-
|
|
113
|
+
i,
|
|
114
|
+
columnIdsMerged: [
|
|
115
|
+
//
|
|
116
|
+
...column1.columnIdsMerged,
|
|
117
|
+
...column2.columnIdsMerged,
|
|
118
|
+
],
|
|
119
|
+
heightTotal,
|
|
137
120
|
};
|
|
138
121
|
}
|
|
139
122
|
}
|
|
140
123
|
assert(mergeCandidate);
|
|
141
|
-
|
|
124
|
+
const { i } = mergeCandidate;
|
|
142
125
|
assert(-1 < i && i < columnsMerging.length - 1);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
126
|
+
const columnsMergingMod = [
|
|
127
|
+
//
|
|
128
|
+
...columnsMerging.slice(0, i),
|
|
129
|
+
mergeCandidate,
|
|
130
|
+
...columnsMerging.slice(i + 2),
|
|
131
|
+
];
|
|
146
132
|
assert(columnsMergingMod.length === columnsMerging.length - 1);
|
|
147
133
|
return mergeColumns(columnsMergingMod, numberOfColumns);
|
|
148
134
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export { detypePlugin };
|
|
2
|
+
import module from 'node:module';
|
|
3
|
+
// Cannot use `import { transform } from 'detype'` as it results in errors,
|
|
4
|
+
// and the package has no default export. Using `module.createRequire` instead.
|
|
5
|
+
const { transform } = module.createRequire(import.meta.url)('detype');
|
|
6
|
+
function detypePlugin() {
|
|
7
|
+
return {
|
|
8
|
+
name: '@brillout/docpress:detypePlugin',
|
|
9
|
+
enforce: 'pre',
|
|
10
|
+
transform: async (code, id) => {
|
|
11
|
+
if (!id.endsWith('+Page.mdx')) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const codeNew = await transformCode(code);
|
|
15
|
+
return codeNew;
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const tsBlockRegex = /```(tsx?|vue)(\s+ts-only)?([\s\S]*?)```/g;
|
|
20
|
+
async function transformCode(code) {
|
|
21
|
+
let codeNew = `import { CodeSnippets, CodeSnippet } from '@brillout/docpress';\n`;
|
|
22
|
+
let lastIndex = 0;
|
|
23
|
+
const matches = [...code.matchAll(tsBlockRegex)];
|
|
24
|
+
if (matches.length === 0) {
|
|
25
|
+
return code;
|
|
26
|
+
}
|
|
27
|
+
for (const match of matches) {
|
|
28
|
+
const [tsCodeBlock, lang, tsOnly, tsCode] = match; // lang = ts | tsx | vue
|
|
29
|
+
const type = lang === 'vue' ? 'vue' : lang.replace('t', 'j'); // ts => js | tsx => jsx
|
|
30
|
+
const blockStart = match.index;
|
|
31
|
+
const blockEnd = blockStart + tsCodeBlock.length;
|
|
32
|
+
codeNew += code.slice(lastIndex, blockStart);
|
|
33
|
+
if (tsOnly) {
|
|
34
|
+
codeNew += `\n<CodeSnippet language={'ts'} tsOnly={'true'}>\n${tsCodeBlock}\n</CodeSnippet>\n`;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const jsCode = await transform(tsCode.trim().replaceAll('.ts', '.js'), `tsCode.${lang}`, {
|
|
38
|
+
removeTsComments: true,
|
|
39
|
+
prettierOptions: {
|
|
40
|
+
semi: false,
|
|
41
|
+
singleQuote: true,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
const jsCodeBlock = `\`\`\`${type}\n${jsCode}\`\`\``;
|
|
45
|
+
const jsCodeSnippet = `\n<CodeSnippet language={'js'}>\n${jsCodeBlock}\n</CodeSnippet>\n`;
|
|
46
|
+
const tsCodeSnippet = `\n<CodeSnippet language={'ts'}>\n${tsCodeBlock}\n</CodeSnippet>\n`;
|
|
47
|
+
codeNew += `<CodeSnippets>${jsCodeSnippet}${tsCodeSnippet}</CodeSnippets>`;
|
|
48
|
+
}
|
|
49
|
+
lastIndex = blockEnd;
|
|
50
|
+
}
|
|
51
|
+
codeNew += code.slice(lastIndex);
|
|
52
|
+
return codeNew;
|
|
53
|
+
}
|
|
@@ -1,20 +1,11 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
1
|
export { parseMarkdownMini };
|
|
11
2
|
import React from 'react';
|
|
12
3
|
function parseMarkdownMini(markdown) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
markdown.split('').forEach(
|
|
4
|
+
const parts = [];
|
|
5
|
+
let current;
|
|
6
|
+
markdown.split('').forEach((letter) => {
|
|
16
7
|
if (letter === '`') {
|
|
17
|
-
if (
|
|
8
|
+
if (current?.nodeType === 'code') {
|
|
18
9
|
// </code>
|
|
19
10
|
parts.push(current);
|
|
20
11
|
current = undefined;
|
|
@@ -37,9 +28,6 @@ function parseMarkdownMini(markdown) {
|
|
|
37
28
|
if (current) {
|
|
38
29
|
parts.push(current);
|
|
39
30
|
}
|
|
40
|
-
|
|
41
|
-
{}], parts.map(function (part, i) {
|
|
42
|
-
return React.createElement(part.nodeType === 'code' ? 'code' : React.Fragment, { key: i }, part.content);
|
|
43
|
-
}), false));
|
|
31
|
+
const parsed = React.createElement(React.Fragment, {}, ...parts.map((part, i) => React.createElement(part.nodeType === 'code' ? 'code' : React.Fragment, { key: i }, part.content)));
|
|
44
32
|
return parsed;
|
|
45
33
|
}
|
|
@@ -1,66 +1,26 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
-
function step(op) {
|
|
15
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
-
switch (op[0]) {
|
|
20
|
-
case 0: case 1: t = op; break;
|
|
21
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
-
default:
|
|
25
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
-
if (t[2]) _.ops.pop();
|
|
30
|
-
_.trys.pop(); continue;
|
|
31
|
-
}
|
|
32
|
-
op = body.call(thisArg, _);
|
|
33
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
1
|
export { parsePageSections };
|
|
38
2
|
import { assert } from './utils/assert.js';
|
|
39
3
|
import { determineSectionUrlHash } from './utils/determineSectionUrlHash.js';
|
|
40
4
|
import os from 'os';
|
|
41
5
|
function parsePageSections() {
|
|
42
|
-
var _this = this;
|
|
43
6
|
return {
|
|
44
7
|
name: '@brillout/docpress:parsePageSections',
|
|
45
8
|
enforce: 'pre',
|
|
46
|
-
transform:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return [2 /*return*/, codeNew];
|
|
54
|
-
});
|
|
55
|
-
}); },
|
|
9
|
+
transform: async (code, id) => {
|
|
10
|
+
if (!id.endsWith('+Page.mdx')) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const codeNew = transform(code);
|
|
14
|
+
return codeNew;
|
|
15
|
+
},
|
|
56
16
|
};
|
|
57
17
|
}
|
|
58
18
|
function transform(code) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
19
|
+
const pageSections = [];
|
|
20
|
+
let isCodeBlock = false;
|
|
21
|
+
let codeNew = code
|
|
62
22
|
.split('\n')
|
|
63
|
-
.map(
|
|
23
|
+
.map((line) => {
|
|
64
24
|
// Skip code blocks, e.g.
|
|
65
25
|
// ~~~md
|
|
66
26
|
// # Markdown Example
|
|
@@ -78,51 +38,50 @@ function transform(code) {
|
|
|
78
38
|
|| line.startsWith('<h2')
|
|
79
39
|
*/
|
|
80
40
|
) {
|
|
81
|
-
|
|
82
|
-
pageSections.push({ pageSectionId
|
|
41
|
+
const { pageSectionId, pageSectionLevel, pageSectionTitle, headingHtml } = parsePageSection(line);
|
|
42
|
+
pageSections.push({ pageSectionId, pageSectionLevel, pageSectionTitle });
|
|
83
43
|
return headingHtml;
|
|
84
44
|
}
|
|
85
45
|
return line;
|
|
86
46
|
})
|
|
87
47
|
.join('\n');
|
|
88
|
-
|
|
89
|
-
.map(
|
|
90
|
-
.join(', ')
|
|
91
|
-
codeNew +=
|
|
48
|
+
const exportCode = `export const pageSectionsExport = [${pageSections
|
|
49
|
+
.map((pageSection) => JSON.stringify(pageSection))
|
|
50
|
+
.join(', ')}];`;
|
|
51
|
+
codeNew += `\n\n${exportCode}\n`;
|
|
92
52
|
return codeNew;
|
|
93
53
|
}
|
|
94
54
|
function parsePageSection(line) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
assert(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
var anchor = titleMdx;
|
|
55
|
+
const [lineBegin, ...lineWords] = line.split(' ');
|
|
56
|
+
assert(lineBegin.split('#').join('') === '', { line, lineWords });
|
|
57
|
+
const pageSectionLevel = lineBegin.length;
|
|
58
|
+
const titleMdx = lineWords.join(' ');
|
|
59
|
+
assert(!titleMdx.startsWith(' '), { line, lineWords });
|
|
60
|
+
assert(titleMdx, { line, lineWords });
|
|
61
|
+
let pageSectionTitle = titleMdx;
|
|
62
|
+
let anchor = titleMdx;
|
|
104
63
|
{
|
|
105
64
|
// Support custom anchor: `## Some Title{#custom-anchor}`
|
|
106
|
-
|
|
65
|
+
const customAnchor = /(?<={#).*(?=})/g.exec(titleMdx)?.[0];
|
|
107
66
|
if (customAnchor) {
|
|
108
67
|
anchor = customAnchor;
|
|
109
68
|
pageSectionTitle = titleMdx.replace(/{#.*}/g, '');
|
|
110
69
|
}
|
|
111
70
|
}
|
|
112
|
-
|
|
113
|
-
|
|
71
|
+
const pageSectionId = determineSectionUrlHash(anchor);
|
|
72
|
+
const titleParsed = parseMarkdownMini(pageSectionTitle);
|
|
114
73
|
assert(pageSectionId === null || pageSectionId.length > 0);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
74
|
+
const headingId = pageSectionId === null ? '' : ` id="${pageSectionId}"`;
|
|
75
|
+
const headingHtml = `<h${pageSectionLevel}${headingId}>${titleParsed}</h${pageSectionLevel}>`;
|
|
76
|
+
const pageSection = { pageSectionLevel, pageSectionTitle, pageSectionId, headingHtml };
|
|
118
77
|
return pageSection;
|
|
119
78
|
}
|
|
120
79
|
function parseMarkdownMini(titleMarkdown) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
titleMarkdown.split('').forEach(
|
|
80
|
+
const parts = [];
|
|
81
|
+
let current;
|
|
82
|
+
titleMarkdown.split('').forEach((letter) => {
|
|
124
83
|
if (letter === '`') {
|
|
125
|
-
if (
|
|
84
|
+
if (current?.nodeType === 'code') {
|
|
126
85
|
// </code>
|
|
127
86
|
parts.push(current);
|
|
128
87
|
current = undefined;
|
|
@@ -145,25 +104,25 @@ function parseMarkdownMini(titleMarkdown) {
|
|
|
145
104
|
if (current) {
|
|
146
105
|
parts.push(current);
|
|
147
106
|
}
|
|
148
|
-
|
|
149
|
-
.map(
|
|
107
|
+
const titleHtml = parts
|
|
108
|
+
.map((part) => {
|
|
150
109
|
if (part.nodeType === 'code') {
|
|
151
|
-
return
|
|
110
|
+
return `<code>${serializeText(part.content)}</code>`;
|
|
152
111
|
}
|
|
153
112
|
else {
|
|
154
|
-
assert(part.nodeType === 'text', { parts
|
|
113
|
+
assert(part.nodeType === 'text', { parts });
|
|
155
114
|
return serializeText(part.content);
|
|
156
115
|
}
|
|
157
116
|
})
|
|
158
117
|
.join('');
|
|
159
118
|
return titleHtml;
|
|
160
119
|
function serializeText(text) {
|
|
161
|
-
|
|
120
|
+
let textEscaped = text.split("'").join("\\'");
|
|
162
121
|
// https://github.com/brillout/docpress/pull/2
|
|
163
122
|
if (isWindows()) {
|
|
164
123
|
textEscaped = textEscaped.replace(/\r/, '');
|
|
165
124
|
}
|
|
166
|
-
return
|
|
125
|
+
return `{'${textEscaped}'}`;
|
|
167
126
|
}
|
|
168
127
|
}
|
|
169
128
|
function isWindows() {
|
|
@@ -3,20 +3,19 @@ export { usePageContext };
|
|
|
3
3
|
export { usePageContextLegacy };
|
|
4
4
|
import React, { useContext } from 'react';
|
|
5
5
|
import { getGlobalObject } from '../utils/getGlobalObject';
|
|
6
|
-
|
|
6
|
+
const globalObject = getGlobalObject('usePageContext.ts', {
|
|
7
7
|
Ctx: React.createContext(undefined),
|
|
8
8
|
});
|
|
9
9
|
function usePageContextLegacy() {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const { Ctx } = globalObject;
|
|
11
|
+
const pageContext = useContext(Ctx);
|
|
12
12
|
return pageContext.resolved;
|
|
13
13
|
}
|
|
14
14
|
function usePageContext() {
|
|
15
|
-
|
|
15
|
+
const pageContext = useContext(globalObject.Ctx);
|
|
16
16
|
return pageContext;
|
|
17
17
|
}
|
|
18
|
-
function PageContextProvider(
|
|
19
|
-
|
|
20
|
-
var Ctx = globalObject.Ctx;
|
|
18
|
+
function PageContextProvider({ pageContext, children, }) {
|
|
19
|
+
const { Ctx } = globalObject;
|
|
21
20
|
return React.createElement(Ctx.Provider, { value: pageContext }, children);
|
|
22
21
|
}
|