mirror of
https://github.com/Vonng/ddia.git
synced 2025-09-26 23:09:18 +08:00
chore: clean up docsify resources
This commit is contained in:
parent
1d039fab3d
commit
c9e829646a
4
.gitignore
vendored
4
.gitignore
vendored
@ -5,4 +5,6 @@ __pycache__/
|
|||||||
tmp/
|
tmp/
|
||||||
output/
|
output/
|
||||||
public/
|
public/
|
||||||
.hugo_build.lock
|
.hugo_build.lock
|
||||||
|
.claude
|
||||||
|
CLAUDE.md
|
4
go.mod
4
go.mod
@ -1,5 +1,3 @@
|
|||||||
module github.com/Vonng/pg-internal
|
module github.com/Vonng/ddia
|
||||||
|
|
||||||
go 1.24.5
|
go 1.24.5
|
||||||
|
|
||||||
require github.com/imfing/hextra v0.9.7 // indirect
|
|
||||||
|
2
go.sum
2
go.sum
@ -1,2 +0,0 @@
|
|||||||
github.com/imfing/hextra v0.9.7 h1:Zg5n24us36Bn/S/5mEUPkRW6uwE6vHHEqWSgN0bPXaM=
|
|
||||||
github.com/imfing/hextra v0.9.7/go.mod h1:cEfel3lU/bSx7lTE/+uuR4GJaphyOyiwNR3PTqFTXpI=
|
|
63
index.html
63
index.html
@ -1,63 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="zh-cn">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<title>设计数据密集型应用</title>
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
|
||||||
<meta name="keywords" content="设计数据密集型应用"/>
|
|
||||||
<meta name="description" content="A magical documentation generator." />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"/>
|
|
||||||
<link rel="stylesheet" href="js/katex.min.css"/>
|
|
||||||
<link rel="stylesheet" href="js/vue.css" title="vue"/>
|
|
||||||
<link rel="stylesheet" href="js/dark.css" title="dark" disabled/>
|
|
||||||
<link rel="stylesheet" href="js/buble.css" title="buble" disabled/>
|
|
||||||
<link rel="stylesheet" href="js/pure.css" title="pure" disabled/>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="app">Loading ...</div>
|
|
||||||
<script>
|
|
||||||
// Set html "lang" attribute based on URL
|
|
||||||
var lang = location.hash.match(/#\/(zh-tw)\//);
|
|
||||||
if (lang) {
|
|
||||||
document.documentElement.setAttribute('lang', lang[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// configuration
|
|
||||||
window.$docsify = {
|
|
||||||
name: 'DDIA',
|
|
||||||
repo: 'Vonng/ddia',
|
|
||||||
auto2top: true,
|
|
||||||
coverpage: false,
|
|
||||||
executeScript: true,
|
|
||||||
loadSidebar: true,
|
|
||||||
loadNavbar: true,
|
|
||||||
mergeNavbar: true,
|
|
||||||
relativePath: true,
|
|
||||||
maxLevel: 4,
|
|
||||||
subMaxLevel: 3,
|
|
||||||
alias: {
|
|
||||||
'/.*/_cover.md': '/_navbar.md',
|
|
||||||
},
|
|
||||||
search: {
|
|
||||||
maxAge: 10000,
|
|
||||||
paths: 'auto',
|
|
||||||
noData: {
|
|
||||||
'/': '没有结果!',
|
|
||||||
'/zh-tw/': '沒有結果!',
|
|
||||||
'/en-us/': 'No Results',
|
|
||||||
},
|
|
||||||
placeholder: {
|
|
||||||
'/': '搜索',
|
|
||||||
'/zh-tw/': '搜索',
|
|
||||||
'/en-us/': 'Search',
|
|
||||||
},
|
|
||||||
pathNamespaces: ['/zh-tw', '/en-us']
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script src="js/docsify-katex.js"></script>
|
|
||||||
<script src="js/docsify.min.js"></script>
|
|
||||||
<script src="js/search.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
File diff suppressed because one or more lines are too long
1
js/docsify.min.js
vendored
1
js/docsify.min.js
vendored
File diff suppressed because one or more lines are too long
221
js/epub.css
221
js/epub.css
@ -1,221 +0,0 @@
|
|||||||
/* This defines styles and classes used in the book */
|
|
||||||
@page {
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p,
|
|
||||||
blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img,
|
|
||||||
ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center,
|
|
||||||
fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td,
|
|
||||||
article, aside, canvas, details, embed, figure, figcaption, footer, header,
|
|
||||||
hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video, ol,
|
|
||||||
ul, li, dl, dt, dd {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
html {
|
|
||||||
line-height: 1.2;
|
|
||||||
font-family: Georgia, serif;
|
|
||||||
color: #1a1a1a;
|
|
||||||
}
|
|
||||||
p {
|
|
||||||
text-indent: 0;
|
|
||||||
margin: 1em 0;
|
|
||||||
widows: 2;
|
|
||||||
orphans: 2;
|
|
||||||
}
|
|
||||||
a, a:visited {
|
|
||||||
color: #1a1a1a;
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
sup {
|
|
||||||
vertical-align: super;
|
|
||||||
font-size: smaller;
|
|
||||||
}
|
|
||||||
sub {
|
|
||||||
vertical-align: sub;
|
|
||||||
font-size: smaller;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
margin: 3em 0 0 0;
|
|
||||||
font-size: 2em;
|
|
||||||
page-break-before: always;
|
|
||||||
line-height: 150%;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
margin: 1.5em 0 0 0;
|
|
||||||
font-size: 1.5em;
|
|
||||||
line-height: 135%;
|
|
||||||
}
|
|
||||||
h3 {
|
|
||||||
margin: 1.3em 0 0 0;
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
h4 {
|
|
||||||
margin: 1.2em 0 0 0;
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
h5 {
|
|
||||||
margin: 1.1em 0 0 0;
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
h6 {
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
text-indent: 0;
|
|
||||||
text-align: left;
|
|
||||||
font-weight: bold;
|
|
||||||
page-break-after: avoid;
|
|
||||||
page-break-inside: avoid;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol, ul {
|
|
||||||
margin: 1em 0 0 1.7em;
|
|
||||||
}
|
|
||||||
li > ol, li > ul {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
blockquote {
|
|
||||||
margin: 1em 0 1em 1.7em;
|
|
||||||
}
|
|
||||||
code {
|
|
||||||
font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
|
|
||||||
font-size: 85%;
|
|
||||||
margin: 0;
|
|
||||||
hyphens: manual;
|
|
||||||
}
|
|
||||||
/*pre {*/
|
|
||||||
/* margin: 1em 0;*/
|
|
||||||
/* overflow: auto;*/
|
|
||||||
/*}*/
|
|
||||||
pre code {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
word-wrap: break-word;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
.sourceCode {
|
|
||||||
background-color: transparent;
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
hr {
|
|
||||||
background-color: #1a1a1a;
|
|
||||||
border: none;
|
|
||||||
height: 1px;
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
margin: 1em 0;
|
|
||||||
border-collapse: collapse;
|
|
||||||
width: 100%;
|
|
||||||
overflow-x: auto;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
table caption {
|
|
||||||
margin-bottom: 0.75em;
|
|
||||||
}
|
|
||||||
tbody {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
border-top: 1px solid #1a1a1a;
|
|
||||||
border-bottom: 1px solid #1a1a1a;
|
|
||||||
}
|
|
||||||
th, td {
|
|
||||||
padding: 0.25em 0.5em 0.25em 0.5em;
|
|
||||||
}
|
|
||||||
th {
|
|
||||||
border-top: 1px solid #1a1a1a;
|
|
||||||
}
|
|
||||||
header {
|
|
||||||
margin-bottom: 4em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#TOC li {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
#TOC ul {
|
|
||||||
padding-left: 1.3em;
|
|
||||||
}
|
|
||||||
#TOC > ul {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
#TOC a:not(:hover) {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
code {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
}
|
|
||||||
span.smallcaps {
|
|
||||||
font-variant: small-caps;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is the most compatible CSS, but it only allows two columns: */
|
|
||||||
div.column {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
/* If you can rely on CSS3 support, use this instead: */
|
|
||||||
/* div.columns {
|
|
||||||
display: flex;
|
|
||||||
gap: min(4vw, 1.5em);
|
|
||||||
}
|
|
||||||
div.column {
|
|
||||||
flex: auto;
|
|
||||||
overflow-x: auto;
|
|
||||||
} */
|
|
||||||
|
|
||||||
div.hanging-indent {
|
|
||||||
margin-left: 1.5em;
|
|
||||||
text-indent: -1.5em;
|
|
||||||
}
|
|
||||||
ul.task-list {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
ul.task-list li input[type="checkbox"] {
|
|
||||||
width: 0.8em;
|
|
||||||
margin: 0 0.8em 0.2em -1.6em;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.display.math {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
margin: 0.5rem auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For title, author, and date on the cover page */
|
|
||||||
h1.title { }
|
|
||||||
p.author { }
|
|
||||||
p.date { }
|
|
||||||
|
|
||||||
nav#toc ol, nav#landmarks ol {
|
|
||||||
padding: 0;
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
nav#toc ol li, nav#landmarks ol li {
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
a.footnote-ref {
|
|
||||||
vertical-align: super;
|
|
||||||
}
|
|
||||||
em, em em em, em em em em em {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
em em, em em em em {
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
q {
|
|
||||||
quotes: "“" "”" "‘" "’";
|
|
||||||
}
|
|
||||||
@media screen { /* Workaround for iBooks issue; see #6242 */
|
|
||||||
.sourceCode {
|
|
||||||
overflow: visible !important;
|
|
||||||
white-space: pre-wrap !important;
|
|
||||||
}
|
|
||||||
}
|
|
1
js/katex.min.css
vendored
1
js/katex.min.css
vendored
File diff suppressed because one or more lines are too long
1
js/prism-bash.min.js
vendored
1
js/prism-bash.min.js
vendored
File diff suppressed because one or more lines are too long
1
js/prism-sql.min.js
vendored
1
js/prism-sql.min.js
vendored
@ -1 +0,0 @@
|
|||||||
Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/};
|
|
1
js/prism-yaml.min.js
vendored
1
js/prism-yaml.min.js
vendored
@ -1 +0,0 @@
|
|||||||
!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*".replace(/<PLAIN>/g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<<prop>>/g,(function(){return t})).replace(/<<value>>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<<prop>>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\\s*:\\s)".replace(/<<prop>>/g,(function(){return t})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism);
|
|
1
js/search.min.js
vendored
1
js/search.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,13 +0,0 @@
|
|||||||
title:
|
|
||||||
- type: main
|
|
||||||
text: 设计数据密集型应用
|
|
||||||
- type: subtitle
|
|
||||||
text: 可靠、可扩展、可维护的系统
|
|
||||||
|
|
||||||
creator:
|
|
||||||
- role: author
|
|
||||||
name: Martin Kleppmann
|
|
||||||
|
|
||||||
rights: Creative Commons Non-Commercial Share Alike 3.0
|
|
||||||
language: 中文
|
|
||||||
cover-image: ./img/title.png
|
|
Loading…
Reference in New Issue
Block a user