@mvarble/mesearch-cms 0.1.0
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/LICENSE +21 -0
- package/README.md +53 -0
- package/dist/cms.d.ts +22 -0
- package/dist/cms.js +270 -0
- package/dist/cms.js.map +1 -0
- package/dist/core/bibtex.d.ts +6 -0
- package/dist/core/bibtex.js +129 -0
- package/dist/core/bibtex.js.map +1 -0
- package/dist/core/build.d.ts +29 -0
- package/dist/core/build.js +41 -0
- package/dist/core/build.js.map +1 -0
- package/dist/core/facts.d.ts +4 -0
- package/dist/core/facts.js +39 -0
- package/dist/core/facts.js.map +1 -0
- package/dist/core/frontmatter.d.ts +26 -0
- package/dist/core/frontmatter.js +134 -0
- package/dist/core/frontmatter.js.map +1 -0
- package/dist/core/paths.d.ts +4 -0
- package/dist/core/paths.js +17 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/resolver.d.ts +33 -0
- package/dist/core/resolver.js +45 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/core/scopes.d.ts +9 -0
- package/dist/core/scopes.js +29 -0
- package/dist/core/scopes.js.map +1 -0
- package/dist/core/source.d.ts +15 -0
- package/dist/core/source.js +68 -0
- package/dist/core/source.js.map +1 -0
- package/dist/core/statements.d.ts +18 -0
- package/dist/core/statements.js +65 -0
- package/dist/core/statements.js.map +1 -0
- package/dist/core/store.d.ts +67 -0
- package/dist/core/store.js +115 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/walk.d.ts +19 -0
- package/dist/core/walk.js +122 -0
- package/dist/core/walk.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/model/build.d.ts +13 -0
- package/dist/model/build.js +67 -0
- package/dist/model/build.js.map +1 -0
- package/dist/model/index.d.ts +2 -0
- package/dist/model/index.js +3 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/outline.d.ts +11 -0
- package/dist/model/outline.js +51 -0
- package/dist/model/outline.js.map +1 -0
- package/dist/presets/blog/index.d.ts +9 -0
- package/dist/presets/blog/index.js +346 -0
- package/dist/presets/blog/index.js.map +1 -0
- package/dist/presets/blog/runtime.d.ts +60 -0
- package/dist/presets/blog/runtime.js +55 -0
- package/dist/presets/blog/runtime.js.map +1 -0
- package/dist/presets/blog/types.d.ts +48 -0
- package/dist/presets/blog/types.js +2 -0
- package/dist/presets/blog/types.js.map +1 -0
- package/dist/presets/mesearch/dates.d.ts +6 -0
- package/dist/presets/mesearch/dates.js +100 -0
- package/dist/presets/mesearch/dates.js.map +1 -0
- package/dist/presets/mesearch/index.d.ts +13 -0
- package/dist/presets/mesearch/index.js +407 -0
- package/dist/presets/mesearch/index.js.map +1 -0
- package/dist/presets/mesearch/runtime.d.ts +56 -0
- package/dist/presets/mesearch/runtime.js +57 -0
- package/dist/presets/mesearch/runtime.js.map +1 -0
- package/dist/presets/mesearch/types.d.ts +46 -0
- package/dist/presets/mesearch/types.js +8 -0
- package/dist/presets/mesearch/types.js.map +1 -0
- package/dist/resolvers/citation.d.ts +38 -0
- package/dist/resolvers/citation.js +60 -0
- package/dist/resolvers/citation.js.map +1 -0
- package/dist/resolvers/equation.d.ts +12 -0
- package/dist/resolvers/equation.js +52 -0
- package/dist/resolvers/equation.js.map +1 -0
- package/dist/resolvers/index.d.ts +4 -0
- package/dist/resolvers/index.js +5 -0
- package/dist/resolvers/index.js.map +1 -0
- package/dist/resolvers/page.d.ts +18 -0
- package/dist/resolvers/page.js +61 -0
- package/dist/resolvers/page.js.map +1 -0
- package/dist/resolvers/statement.d.ts +13 -0
- package/dist/resolvers/statement.js +45 -0
- package/dist/resolvers/statement.js.map +1 -0
- package/dist/runtime.d.ts +1 -0
- package/dist/runtime.js +20 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Resolver } from '../core/resolver.ts';
|
|
2
|
+
import type { DocRecord, Store } from '../core/store.ts';
|
|
3
|
+
export interface CitationAuthor {
|
|
4
|
+
lastname: string;
|
|
5
|
+
fullname: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Citation {
|
|
8
|
+
key: string;
|
|
9
|
+
kind: string;
|
|
10
|
+
title: string;
|
|
11
|
+
year: string;
|
|
12
|
+
doi?: string;
|
|
13
|
+
publisher?: string;
|
|
14
|
+
issn?: string;
|
|
15
|
+
isbn?: string;
|
|
16
|
+
journal?: string;
|
|
17
|
+
number?: string;
|
|
18
|
+
pages?: string;
|
|
19
|
+
volume?: string;
|
|
20
|
+
institution?: string;
|
|
21
|
+
edition?: string;
|
|
22
|
+
url?: string;
|
|
23
|
+
series?: string;
|
|
24
|
+
authors: CitationAuthor[];
|
|
25
|
+
}
|
|
26
|
+
export interface CitationTarget {
|
|
27
|
+
key: string;
|
|
28
|
+
label: string;
|
|
29
|
+
url: string;
|
|
30
|
+
text: string;
|
|
31
|
+
}
|
|
32
|
+
export interface CitationOptions {
|
|
33
|
+
collection?: string;
|
|
34
|
+
url?(key: string, store: Store, doc: DocRecord): string;
|
|
35
|
+
}
|
|
36
|
+
export declare function citationLabel(citation: Citation): string;
|
|
37
|
+
export declare function citationText(citation: Citation): string;
|
|
38
|
+
export declare function citations(options?: CitationOptions): Resolver<CitationTarget>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// The label a citation is shown as: the first author's surname, cut to four
|
|
2
|
+
// letters, and the year's last two digits --- `[Kall02]`. A citation with no
|
|
3
|
+
// authors falls back to its key.
|
|
4
|
+
export function citationLabel(citation) {
|
|
5
|
+
const lastname = citation.authors[0]?.lastname;
|
|
6
|
+
if (!lastname)
|
|
7
|
+
return citation.key;
|
|
8
|
+
return `${lastname.slice(0, 4)}${String(citation.year).slice(-2)}`;
|
|
9
|
+
}
|
|
10
|
+
// A citation as one line of plain text, for a link's tooltip: who, what, when.
|
|
11
|
+
export function citationText(citation) {
|
|
12
|
+
const names = citation.authors.map((author) => author.fullname.trim());
|
|
13
|
+
const who = names.length > 3 ? `${names[0]} et al.` : names.join(names.length == 2 ? ' and ' : ', ');
|
|
14
|
+
// Without braces: a link's title is an attribute, where Svelte would read
|
|
15
|
+
// one as the start of an expression.
|
|
16
|
+
const title = citation.title.replace(/\$([^$]+)\$/g, '$1');
|
|
17
|
+
return [who, title, citation.journal ?? citation.publisher, citation.year]
|
|
18
|
+
.filter((part) => part && part.trim())
|
|
19
|
+
.join('. ')
|
|
20
|
+
.concat('.')
|
|
21
|
+
.replace(/[{}]/g, '');
|
|
22
|
+
}
|
|
23
|
+
// `[](cite:key)` renders as `[Label]`, and `[p. 3](cite:key)` as `[Label, p. 3]`,
|
|
24
|
+
// linking to the bibliography. Hovering it shows the reference.
|
|
25
|
+
export function citations(options = {}) {
|
|
26
|
+
const collection = options.collection ?? 'citations';
|
|
27
|
+
const url = options.url ?? ((key) => `/citations#${key}`);
|
|
28
|
+
return {
|
|
29
|
+
name: 'citation',
|
|
30
|
+
matchLink: (href) => (href.startsWith('cite:') ? href.slice('cite:'.length) : undefined),
|
|
31
|
+
resolve(store, doc, key) {
|
|
32
|
+
const citation = store.collection(collection).get(key);
|
|
33
|
+
if (!citation)
|
|
34
|
+
return undefined;
|
|
35
|
+
return {
|
|
36
|
+
key,
|
|
37
|
+
label: citationLabel(citation),
|
|
38
|
+
url: url(key, store, doc),
|
|
39
|
+
text: citationText(citation),
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
unresolved: (_store, doc, key) => `'${key}' does not resolve to a citation in the site (referenced by '${doc.id}').`,
|
|
43
|
+
rewriteLink(node, target) {
|
|
44
|
+
node.url = target.url;
|
|
45
|
+
node.title = target.text;
|
|
46
|
+
node.data = {
|
|
47
|
+
...node.data,
|
|
48
|
+
hProperties: { ...node.data?.hProperties, className: ['citation'] },
|
|
49
|
+
};
|
|
50
|
+
const [child] = node.children;
|
|
51
|
+
if (node.children.length == 1 && child?.type == 'text') {
|
|
52
|
+
child.value = `[${target.label}, ${child.value}]`;
|
|
53
|
+
}
|
|
54
|
+
else if (!node.children.length) {
|
|
55
|
+
node.children = [{ type: 'text', value: `[${target.label}]` }];
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=citation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation.js","sourceRoot":"","sources":["../../src/resolvers/citation.ts"],"names":[],"mappings":"AA4CA,4EAA4E;AAC5E,6EAA6E;AAC7E,iCAAiC;AACjC,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC;IACnC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAAC,QAAkB;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,GAAG,GACL,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7F,0EAA0E;IAC1E,qCAAqC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;SACrE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC;SACV,MAAM,CAAC,GAAG,CAAC;SACX,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,kFAAkF;AAClF,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,UAA2B,EAAE;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;IAClE,OAAO;QACH,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAW,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAChC,OAAO;gBACH,GAAG;gBACH,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC;gBAC9B,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;gBACzB,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;aAC/B,CAAC;QACN,CAAC;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAC7B,IAAI,GAAG,gEAAgE,GAAG,CAAC,EAAE,KAAK;QACtF,WAAW,CAAC,IAAI,EAAE,MAAM;YACpB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG;gBACR,GAAG,IAAI,CAAC,IAAI;gBACZ,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE;aACtE,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,CAAC;gBACrD,KAAK,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC;YACtD,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Resolver } from '../core/resolver.ts';
|
|
2
|
+
export declare const TAG: RegExp;
|
|
3
|
+
export interface EquationTarget {
|
|
4
|
+
scope: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
label: string;
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
export interface EquationOptions {
|
|
10
|
+
url?(page: string, slug: string): string;
|
|
11
|
+
}
|
|
12
|
+
export declare function equations(options?: EquationOptions): Resolver<EquationTarget>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { parseReference, resolveReferenceScope, unresolvedReference } from "../core/scopes.js";
|
|
2
|
+
export const TAG = /@tag\(([a-zA-Z-_0-9]+)\)/g;
|
|
3
|
+
// `$$ ... @tag(slug) $$` numbers an equation, and `[](eq:slug)` refers to one
|
|
4
|
+
// as `(label)`. Both are scoped like statements: a bare slug means one within
|
|
5
|
+
// the referencing document's scope, `scope-slug/slug` reaches into another.
|
|
6
|
+
export function equations(options = {}) {
|
|
7
|
+
const url = options.url ?? ((page, slug) => `/${page}#eq:${slug}`);
|
|
8
|
+
return {
|
|
9
|
+
name: 'equation',
|
|
10
|
+
matchLink: (href) => (href.startsWith('eq:') ? href.slice('eq:'.length) : undefined),
|
|
11
|
+
matchMath: (tex) => [...tex.matchAll(TAG)].map((match) => match[1]),
|
|
12
|
+
resolve(store, doc, written) {
|
|
13
|
+
const parsed = parseReference(written);
|
|
14
|
+
const scope = resolveReferenceScope(store, doc.scope, parsed);
|
|
15
|
+
if (scope === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
const anchor = store.anchor('equation', scope, parsed.slug);
|
|
18
|
+
if (!anchor)
|
|
19
|
+
return undefined;
|
|
20
|
+
return {
|
|
21
|
+
scope: anchor.scope,
|
|
22
|
+
slug: anchor.slug,
|
|
23
|
+
label: anchor.label,
|
|
24
|
+
url: url(anchor.page, anchor.slug),
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
unresolved: (store, doc, written) => unresolvedReference(store, doc.id, doc.scope, 'equation', written),
|
|
28
|
+
rewriteLink(node, target) {
|
|
29
|
+
node.url = target.url;
|
|
30
|
+
node.children = [{ type: 'text', value: `(${target.label})` }];
|
|
31
|
+
},
|
|
32
|
+
// `@tag(slug)` becomes `\tag{label}`, both in the TeX and in the copy
|
|
33
|
+
// `remark-math` keeps for rendering, and the equation gets the `id` a
|
|
34
|
+
// reference links to.
|
|
35
|
+
rewriteMath(node, written, target) {
|
|
36
|
+
const tag = `@tag(${written})`;
|
|
37
|
+
const replacement = `\\tag{${target.label}}`;
|
|
38
|
+
if (!node.value.includes(tag))
|
|
39
|
+
return;
|
|
40
|
+
node.value = node.value.replaceAll(tag, replacement);
|
|
41
|
+
const data = node.data;
|
|
42
|
+
const child = data?.hChildren?.length == 1 ? data.hChildren[0] : undefined;
|
|
43
|
+
if (child && typeof child.value == 'string') {
|
|
44
|
+
child.value = child.value.replaceAll(tag, replacement);
|
|
45
|
+
if (data?.hProperties && typeof data.hProperties == 'object') {
|
|
46
|
+
data.hProperties.id = `eq:${target.slug}`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=equation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equation.js","sourceRoot":"","sources":["../../src/resolvers/equation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { equations, TAG, type EquationTarget, type EquationOptions } from './equation.ts';
|
|
2
|
+
export { statements, type StatementTarget, type StatementOptions } from './statement.ts';
|
|
3
|
+
export { citations, citationLabel, citationText, type Citation, type CitationAuthor, type CitationTarget, type CitationOptions, } from './citation.ts';
|
|
4
|
+
export { pageLinks, pathnameLinks, type PageTarget, type PageLinkOptions } from './page.ts';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAA6C,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EACH,SAAS,EACT,aAAa,EACb,YAAY,GAKf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAyC,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Resolver } from '../core/resolver.ts';
|
|
2
|
+
import type { DocRecord, Store } from '../core/store.ts';
|
|
3
|
+
export interface PageTarget {
|
|
4
|
+
pathname: string;
|
|
5
|
+
hash: string;
|
|
6
|
+
formats: Record<string, string>;
|
|
7
|
+
url?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PageLinkOptions {
|
|
10
|
+
match?(url: string): boolean;
|
|
11
|
+
locate(store: Store, doc: DocRecord, url: string): {
|
|
12
|
+
pathname: string;
|
|
13
|
+
hash: string;
|
|
14
|
+
} | undefined;
|
|
15
|
+
url?(pathname: string, hash: string): string;
|
|
16
|
+
}
|
|
17
|
+
export declare function pageLinks(options: PageLinkOptions): Resolver<PageTarget>;
|
|
18
|
+
export declare function pathnameLinks(): Resolver<PageTarget>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
// A link to another page of the site. `%title`, `%label`, `%sequence` and
|
|
3
|
+
// `%full` in its text are replaced by what the target page provides.
|
|
4
|
+
export function pageLinks(options) {
|
|
5
|
+
return {
|
|
6
|
+
name: 'page',
|
|
7
|
+
matchLink: (href) => (options.match ?? ((url) => url.startsWith('/') || url.startsWith('.')))(href)
|
|
8
|
+
? href
|
|
9
|
+
: undefined,
|
|
10
|
+
resolve(store, doc, written) {
|
|
11
|
+
const location = options.locate(store, doc, written);
|
|
12
|
+
if (!location)
|
|
13
|
+
return undefined;
|
|
14
|
+
const page = store.pages.get(location.pathname);
|
|
15
|
+
if (!page)
|
|
16
|
+
return undefined;
|
|
17
|
+
return {
|
|
18
|
+
pathname: page.pathname,
|
|
19
|
+
hash: location.hash,
|
|
20
|
+
formats: page.formats,
|
|
21
|
+
url: options.url?.(page.pathname, location.hash),
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
// A link that does not even name a place on the site --- one that
|
|
25
|
+
// climbs out of the content, say --- is left alone without comment.
|
|
26
|
+
unresolved(store, doc, written) {
|
|
27
|
+
const location = options.locate(store, doc, written);
|
|
28
|
+
if (!location)
|
|
29
|
+
return undefined;
|
|
30
|
+
return `'${location.pathname}${location.hash}' does not resolve to a page in the site (see '${doc.id}').`;
|
|
31
|
+
},
|
|
32
|
+
rewriteLink(node, target) {
|
|
33
|
+
if (target.url !== undefined)
|
|
34
|
+
node.url = target.url;
|
|
35
|
+
const [child] = node.children;
|
|
36
|
+
if (node.children.length != 1 || child?.type != 'text')
|
|
37
|
+
return;
|
|
38
|
+
let value = child.value ?? '';
|
|
39
|
+
for (const [name, replacement] of Object.entries(target.formats)) {
|
|
40
|
+
value = value.replaceAll(`%${name}`, replacement);
|
|
41
|
+
}
|
|
42
|
+
child.value = value;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// The blog's rule: `/x` is the page at `x`, and `./x` is `x` beneath the page
|
|
47
|
+
// the link is written on. The URL itself is left exactly as written.
|
|
48
|
+
export function pathnameLinks() {
|
|
49
|
+
return pageLinks({
|
|
50
|
+
locate(store, doc, url) {
|
|
51
|
+
const base = store.pathnameOf(doc.id);
|
|
52
|
+
let pathname;
|
|
53
|
+
if (url.startsWith('/'))
|
|
54
|
+
pathname = url.slice(1);
|
|
55
|
+
else if (typeof base == 'string' && url.startsWith('.'))
|
|
56
|
+
pathname = path.posix.join(base, url);
|
|
57
|
+
return pathname === undefined ? undefined : { pathname, hash: '' };
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/resolvers/page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Resolver } from '../core/resolver.ts';
|
|
2
|
+
export interface StatementTarget {
|
|
3
|
+
scope: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
label: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
full: string;
|
|
8
|
+
url: string;
|
|
9
|
+
}
|
|
10
|
+
export interface StatementOptions {
|
|
11
|
+
url?(page: string, slug: string): string;
|
|
12
|
+
}
|
|
13
|
+
export declare function statements(options?: StatementOptions): Resolver<StatementTarget>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { parseReference, resolveReferenceScope, unresolvedReference } from "../core/scopes.js";
|
|
2
|
+
const capitalizeWords = (text) => text
|
|
3
|
+
.split(' ')
|
|
4
|
+
.map((word) => `${word.slice(0, 1).toUpperCase()}${word.slice(1)}`)
|
|
5
|
+
.join(' ');
|
|
6
|
+
// `[%full](statement:slug)` refers to a numbered statement --- a theorem, a
|
|
7
|
+
// lemma --- substituting `%label`, `%kind` and `%full` ('Theorem 1.2') into the
|
|
8
|
+
// link text.
|
|
9
|
+
export function statements(options = {}) {
|
|
10
|
+
const url = options.url ?? ((page, slug) => `/${page}#${slug}`);
|
|
11
|
+
return {
|
|
12
|
+
name: 'statement',
|
|
13
|
+
matchLink: (href) => href.startsWith('statement:') ? href.slice('statement:'.length) : undefined,
|
|
14
|
+
resolve(store, doc, written) {
|
|
15
|
+
const parsed = parseReference(written);
|
|
16
|
+
const scope = resolveReferenceScope(store, doc.scope, parsed);
|
|
17
|
+
if (scope === undefined)
|
|
18
|
+
return undefined;
|
|
19
|
+
const anchor = store.anchor('statement', scope, parsed.slug);
|
|
20
|
+
if (!anchor)
|
|
21
|
+
return undefined;
|
|
22
|
+
const kind = capitalizeWords(String(anchor.data?.kind ?? ''));
|
|
23
|
+
return {
|
|
24
|
+
scope: anchor.scope,
|
|
25
|
+
slug: anchor.slug,
|
|
26
|
+
label: anchor.label,
|
|
27
|
+
kind,
|
|
28
|
+
full: `${kind} ${anchor.label}`,
|
|
29
|
+
url: url(anchor.page, anchor.slug),
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
unresolved: (store, doc, written) => unresolvedReference(store, doc.id, doc.scope, 'statement', written),
|
|
33
|
+
rewriteLink(node, target) {
|
|
34
|
+
node.url = target.url;
|
|
35
|
+
const [child] = node.children;
|
|
36
|
+
if (node.children.length != 1 || child?.type != 'text')
|
|
37
|
+
return;
|
|
38
|
+
child.value = (child.value ?? '')
|
|
39
|
+
.replaceAll('%label', target.label)
|
|
40
|
+
.replaceAll('%kind', target.kind)
|
|
41
|
+
.replaceAll('%full', target.full);
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=statement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement.js","sourceRoot":"","sources":["../../src/resolvers/statement.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAW/F,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,IAAI;KACC,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,IAAI,CAAC,GAAG,CAAC,CAAC;AAOnB,4EAA4E;AAC5E,gFAAgF;AAChF,aAAa;AACb,MAAM,UAAU,UAAU,CAAC,UAA4B,EAAE;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO;QACH,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/E,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO;YACvB,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC;YAC9B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO;gBACH,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI;gBACJ,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;gBAC/B,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;aACrC,CAAC;QACN,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAChC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC;QACvE,WAAW,CAAC,IAAI,EAAE,MAAM;YACpB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,MAAM;gBAAE,OAAO;YAC/D,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;iBAC5B,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;iBAClC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;iBAChC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function live<S extends object, Q extends object>(bind: (snapshot: S) => Q, current: () => S): Q;
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// While a dev server runs, the content can change underneath a module that has
|
|
2
|
+
// already been evaluated, so the virtual module hands out queries that look up
|
|
3
|
+
// the current snapshot on every call instead of closing over one.
|
|
4
|
+
export function live(bind, current) {
|
|
5
|
+
const bound = new WeakMap();
|
|
6
|
+
const queries = () => {
|
|
7
|
+
const snapshot = current();
|
|
8
|
+
let out = bound.get(snapshot);
|
|
9
|
+
if (!out)
|
|
10
|
+
bound.set(snapshot, (out = bind(snapshot)));
|
|
11
|
+
return out;
|
|
12
|
+
};
|
|
13
|
+
return new Proxy({}, {
|
|
14
|
+
get: (_target, key) => Reflect.get(queries(), key),
|
|
15
|
+
has: (_target, key) => Reflect.has(queries(), key),
|
|
16
|
+
ownKeys: () => Reflect.ownKeys(queries()),
|
|
17
|
+
getOwnPropertyDescriptor: (_target, key) => Reflect.getOwnPropertyDescriptor(queries(), key),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,kEAAkE;AAClE,MAAM,UAAU,IAAI,CAChB,IAAwB,EACxB,OAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IACF,OAAO,IAAI,KAAK,CAAC,EAAO,EAAE;QACtB,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC;QAClD,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC;QAClD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,wBAAwB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CACvC,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC;KACvD,CAAC,CAAC;AACP,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mvarble/mesearch-cms",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "An in-memory content database for markdown/mdsvex sites: documents, pages, numbered statements and equations, references, outlines and folded KaTeX macros, kept live by a Vite plugin.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Matthew Varble <matthew@rodent.club>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/mvarble/mesearch.git",
|
|
10
|
+
"directory": "packages/cms"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./model": {
|
|
22
|
+
"types": "./dist/model/index.d.ts",
|
|
23
|
+
"import": "./dist/model/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./presets/blog": {
|
|
26
|
+
"types": "./dist/presets/blog/index.d.ts",
|
|
27
|
+
"import": "./dist/presets/blog/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./presets/blog/runtime": {
|
|
30
|
+
"types": "./dist/presets/blog/runtime.d.ts",
|
|
31
|
+
"import": "./dist/presets/blog/runtime.js"
|
|
32
|
+
},
|
|
33
|
+
"./presets/mesearch": {
|
|
34
|
+
"types": "./dist/presets/mesearch/index.d.ts",
|
|
35
|
+
"import": "./dist/presets/mesearch/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./presets/mesearch/runtime": {
|
|
38
|
+
"types": "./dist/presets/mesearch/runtime.d.ts",
|
|
39
|
+
"import": "./dist/presets/mesearch/runtime.js"
|
|
40
|
+
},
|
|
41
|
+
"./package.json": "./package.json"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist"
|
|
45
|
+
],
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=22.18"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@mvarble/mesearch-markdown": "^0.1.0",
|
|
51
|
+
"bibtex": "^0.9.0",
|
|
52
|
+
"devalue": "^5.6.0",
|
|
53
|
+
"esast-util-from-js": "^2.0.1",
|
|
54
|
+
"js-yaml": "^4.1.0",
|
|
55
|
+
"rehype-parse": "^9.0.1",
|
|
56
|
+
"remark-frontmatter": "^5.0.0",
|
|
57
|
+
"remark-math": "6.0.0",
|
|
58
|
+
"remark-parse": "^11.0.0",
|
|
59
|
+
"unified": "^11.0.5",
|
|
60
|
+
"unist-util-visit": "^5.0.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/estree": "^1.0.8",
|
|
64
|
+
"@types/hast": "^3.0.5",
|
|
65
|
+
"@types/js-yaml": "^4.0.9",
|
|
66
|
+
"@types/mdast": "^4.0.4",
|
|
67
|
+
"@types/node": "^22.14.0",
|
|
68
|
+
"typescript": "^6.0.3",
|
|
69
|
+
"vfile": "^6.0.3",
|
|
70
|
+
"vite": "^8.0.16"
|
|
71
|
+
},
|
|
72
|
+
"peerDependencies": {
|
|
73
|
+
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
|
74
|
+
},
|
|
75
|
+
"scripts": {
|
|
76
|
+
"build": "tsc -p tsconfig.json",
|
|
77
|
+
"check": "tsc -p tsconfig.json --noEmit",
|
|
78
|
+
"test": "node --test 'test/**/*.test.mjs'"
|
|
79
|
+
}
|
|
80
|
+
}
|