@cosense-toolbox/parser 0.1.0-beta.0 → 0.1.0-beta.2
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/README.md +76 -758
- package/dist/{ast-uYWtkHwT.cjs → ast-C0BGz7X2.cjs} +2 -2
- package/dist/ast-C0BGz7X2.cjs.map +1 -0
- package/dist/{ast-CIKXwSl5.mjs → ast-CMQYawYl.mjs} +2 -2
- package/dist/ast-CMQYawYl.mjs.map +1 -0
- package/dist/compile.cjs +2 -212
- package/dist/compile.cjs.map +1 -1
- package/dist/compile.d.cts +17 -125
- package/dist/compile.d.cts.map +1 -1
- package/dist/compile.d.mts +17 -125
- package/dist/compile.d.mts.map +1 -1
- package/dist/compile.mjs +3 -206
- package/dist/compile.mjs.map +1 -1
- package/dist/decoration-BB1cS4lH.mjs +72 -0
- package/dist/decoration-BB1cS4lH.mjs.map +1 -0
- package/dist/decoration-BYXIXxCA.cjs +107 -0
- package/dist/decoration-BYXIXxCA.cjs.map +1 -0
- package/dist/extensions.cjs +32 -0
- package/dist/extensions.cjs.map +1 -0
- package/dist/extensions.d.cts +26 -0
- package/dist/extensions.d.cts.map +1 -0
- package/dist/extensions.d.mts +26 -0
- package/dist/extensions.d.mts.map +1 -0
- package/dist/extensions.mjs +30 -0
- package/dist/extensions.mjs.map +1 -0
- package/dist/html.cjs +458 -0
- package/dist/html.cjs.map +1 -0
- package/dist/html.d.cts +274 -0
- package/dist/html.d.cts.map +1 -0
- package/dist/html.d.mts +274 -0
- package/dist/html.d.mts.map +1 -0
- package/dist/html.mjs +447 -0
- package/dist/html.mjs.map +1 -0
- package/dist/image-url-YcTed8tg.cjs.map +1 -1
- package/dist/image-url-eQ6X-oN0.mjs.map +1 -1
- package/dist/index-CrIlOW1k.d.mts +78 -0
- package/dist/index-CrIlOW1k.d.mts.map +1 -0
- package/dist/index-_o1STNhP.d.cts +78 -0
- package/dist/index-_o1STNhP.d.cts.map +1 -0
- package/dist/index.cjs +118 -94
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -77
- package/dist/index.d.mts +4 -77
- package/dist/index.mjs +110 -86
- package/dist/index.mjs.map +1 -1
- package/dist/schema.cjs +2 -0
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +1 -1
- package/dist/schema.d.cts.map +1 -1
- package/dist/schema.d.mts +1 -1
- package/dist/schema.d.mts.map +1 -1
- package/dist/schema.mjs +2 -0
- package/dist/schema.mjs.map +1 -1
- package/dist/{types-BXlnUFr0.d.mts → types-CdiHju1P.d.mts} +15 -12
- package/dist/types-CdiHju1P.d.mts.map +1 -0
- package/dist/{types-DVwlUtla.d.cts → types-_-ZAyNkz.d.cts} +15 -12
- package/dist/types-_-ZAyNkz.d.cts.map +1 -0
- package/dist/{types-Bo_BrmvK.d.cts → types-gWMrsXPX.d.cts} +31 -22
- package/dist/types-gWMrsXPX.d.cts.map +1 -0
- package/dist/{types-Bo_BrmvK.d.mts → types-gWMrsXPX.d.mts} +31 -22
- package/dist/types-gWMrsXPX.d.mts.map +1 -0
- package/dist/utils.cjs +2 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +2 -2
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts +2 -2
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +2 -2
- package/dist/utils.mjs.map +1 -1
- package/package.json +33 -10
- package/dist/ast-CIKXwSl5.mjs.map +0 -1
- package/dist/ast-uYWtkHwT.cjs.map +0 -1
- package/dist/create-compiler-CvlndKOA.d.cts +0 -23
- package/dist/create-compiler-CvlndKOA.d.cts.map +0 -1
- package/dist/create-compiler-jdA408ny.d.mts +0 -23
- package/dist/create-compiler-jdA408ny.d.mts.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/plugin.cjs +0 -0
- package/dist/plugin.d.cts +0 -4
- package/dist/plugin.d.mts +0 -4
- package/dist/plugin.mjs +0 -1
- package/dist/types-BXlnUFr0.d.mts.map +0 -1
- package/dist/types-Bo_BrmvK.d.cts.map +0 -1
- package/dist/types-Bo_BrmvK.d.mts.map +0 -1
- package/dist/types-DVwlUtla.d.cts.map +0 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* 境界を越えられなくなる。
|
|
11
11
|
*/
|
|
12
12
|
/**
|
|
13
|
-
* ソース上の一点。すべて 0-based (
|
|
13
|
+
* ソース上の一点。すべて 0-based (JS の slice とそのまま噛み合わせるため)。
|
|
14
14
|
*/
|
|
15
15
|
interface Point {
|
|
16
16
|
/** ページ内の行番号。0 = タイトル行 */
|
|
@@ -36,12 +36,12 @@ interface NodeBase {
|
|
|
36
36
|
}
|
|
37
37
|
/** 記法として解釈されなかった素のテキスト。 */
|
|
38
38
|
interface TextNode extends NodeBase {
|
|
39
|
-
readonly type:
|
|
39
|
+
readonly type: "text";
|
|
40
40
|
readonly value: string;
|
|
41
41
|
}
|
|
42
42
|
/** `[title]` — 同じプロジェクト内のページへのリンク。 */
|
|
43
43
|
interface InternalLink extends NodeBase {
|
|
44
|
-
readonly type:
|
|
44
|
+
readonly type: "internalLink";
|
|
45
45
|
/** 表示テキスト。内部リンクでは target と同じ */
|
|
46
46
|
readonly label: string;
|
|
47
47
|
/** リンク先のページタイトル */
|
|
@@ -49,13 +49,13 @@ interface InternalLink extends NodeBase {
|
|
|
49
49
|
}
|
|
50
50
|
/** 裸の URL、`[url]`、`[url label]`、`[label url]`。 */
|
|
51
51
|
interface ExternalLink extends NodeBase {
|
|
52
|
-
readonly type:
|
|
52
|
+
readonly type: "externalLink";
|
|
53
53
|
readonly label: string;
|
|
54
54
|
readonly target: string;
|
|
55
55
|
}
|
|
56
56
|
/** `[/project/title]` — 別プロジェクトのページへのリンク。 */
|
|
57
57
|
interface ProjectLink extends NodeBase {
|
|
58
|
-
readonly type:
|
|
58
|
+
readonly type: "projectLink";
|
|
59
59
|
readonly label: string;
|
|
60
60
|
/** `/project/title` 形式のまま */
|
|
61
61
|
readonly target: string;
|
|
@@ -65,17 +65,17 @@ interface ProjectLink extends NodeBase {
|
|
|
65
65
|
}
|
|
66
66
|
/** `#tag` — 内部リンクと同じくページを指すが、記法が異なるので別ノードにする。 */
|
|
67
67
|
interface Hashtag extends NodeBase {
|
|
68
|
-
readonly type:
|
|
68
|
+
readonly type: "hashtag";
|
|
69
69
|
readonly value: string;
|
|
70
70
|
}
|
|
71
71
|
/** バッククォートで囲んだインラインコード。 */
|
|
72
72
|
interface InlineCode extends NodeBase {
|
|
73
|
-
readonly type:
|
|
73
|
+
readonly type: "inlineCode";
|
|
74
74
|
readonly value: string;
|
|
75
75
|
}
|
|
76
76
|
/** `[url.png]` / `[[url.png]]` (large) / `[linkUrl imageUrl]` (link 付き)。 */
|
|
77
77
|
interface ImageNode extends NodeBase {
|
|
78
|
-
readonly type:
|
|
78
|
+
readonly type: "image";
|
|
79
79
|
readonly src: string;
|
|
80
80
|
/** `[[...]]` で囲まれた大きい表示 */
|
|
81
81
|
readonly large?: boolean;
|
|
@@ -84,14 +84,14 @@ interface ImageNode extends NodeBase {
|
|
|
84
84
|
}
|
|
85
85
|
/** `[user.icon]` / `[user.icon*N]`。 */
|
|
86
86
|
interface IconNode extends NodeBase {
|
|
87
|
-
readonly type:
|
|
87
|
+
readonly type: "icon";
|
|
88
88
|
readonly user: string;
|
|
89
89
|
/** 連打の個数 (1..20)。記法上省略されていても 1 が入る */
|
|
90
90
|
readonly count: number;
|
|
91
91
|
}
|
|
92
92
|
/** `[$ 数式]`。中身は解釈せず生のまま返す (KaTeX 等に渡す想定)。 */
|
|
93
93
|
interface FormulaNode extends NodeBase {
|
|
94
|
-
readonly type:
|
|
94
|
+
readonly type: "formula";
|
|
95
95
|
readonly value: string;
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
@@ -101,9 +101,11 @@ interface FormulaNode extends NodeBase {
|
|
|
101
101
|
* Markdown のように入れ子の強調へ分解せずフラグの集合として表す。
|
|
102
102
|
*/
|
|
103
103
|
interface Decoration extends NodeBase {
|
|
104
|
-
readonly type:
|
|
104
|
+
readonly type: "decoration";
|
|
105
105
|
/** 装飾記号を除いた中身の生テキスト */
|
|
106
106
|
readonly value: string;
|
|
107
|
+
/** 書かれた文字装飾記法の記号を、出現順・重複なしで並べたもの。`[*** x]` なら `['*']` */
|
|
108
|
+
readonly markers: readonly string[];
|
|
107
109
|
readonly bold: boolean;
|
|
108
110
|
readonly italic: boolean;
|
|
109
111
|
readonly strike: boolean;
|
|
@@ -133,14 +135,14 @@ type InlineNodeType = keyof InlineNodeMap;
|
|
|
133
135
|
type InlineNode = InlineNodeMap[InlineNodeType];
|
|
134
136
|
/** ページの 1 行目。`code:` / `table:` として解釈しない (Cosense ではタイトル専用の行)。 */
|
|
135
137
|
interface TitleBlock extends NodeBase {
|
|
136
|
-
readonly type:
|
|
138
|
+
readonly type: "title";
|
|
137
139
|
/** タイトル行の生テキスト。Cosense ではこれがページの識別子でもある */
|
|
138
140
|
readonly value: string;
|
|
139
141
|
readonly children: readonly InlineNode[];
|
|
140
142
|
}
|
|
141
143
|
/** `code:filename` ブロックの本体 1 行。記法は解釈しない。 */
|
|
142
144
|
interface CodeLine extends NodeBase {
|
|
143
|
-
readonly type:
|
|
145
|
+
readonly type: "codeLine";
|
|
144
146
|
/**
|
|
145
147
|
* ブロックの左端に揃えた中身。ヘッダより 1 段深いところを左端とみなすので、
|
|
146
148
|
* それより深いインデントはコード自身の字下げとして残る。
|
|
@@ -149,33 +151,40 @@ interface CodeLine extends NodeBase {
|
|
|
149
151
|
}
|
|
150
152
|
/** `code:filename` + それより深いインデントの行。 */
|
|
151
153
|
interface CodeBlock extends NodeBase {
|
|
152
|
-
readonly type:
|
|
154
|
+
readonly type: "codeBlock";
|
|
153
155
|
readonly filename: string;
|
|
154
156
|
/** ヘッダ行のインデント。本体行はこれより深い */
|
|
155
157
|
readonly indent: number;
|
|
156
158
|
/** ヘッダ行自身は含まない */
|
|
157
159
|
readonly lines: readonly CodeLine[];
|
|
158
160
|
}
|
|
159
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* テーブルの 1 セル。
|
|
163
|
+
*
|
|
164
|
+
* `children` はセルの中の記法。Cosense Web と同じく、既定ではリンクの記法だけを読み、
|
|
165
|
+
* それ以外は書いたままの文字になる (拡張 `tableCellNotation` で変えられる)。
|
|
166
|
+
*/
|
|
160
167
|
interface TableCell extends NodeBase {
|
|
161
|
-
readonly type:
|
|
168
|
+
readonly type: "tableCell";
|
|
169
|
+
/** セルに書かれた文字列そのまま */
|
|
162
170
|
readonly value: string;
|
|
171
|
+
readonly children: readonly InlineNode[];
|
|
163
172
|
}
|
|
164
173
|
/** テーブルの 1 行。タブ区切りでセルに分割済み。 */
|
|
165
174
|
interface TableRow extends NodeBase {
|
|
166
|
-
readonly type:
|
|
175
|
+
readonly type: "tableRow";
|
|
167
176
|
readonly cells: readonly TableCell[];
|
|
168
177
|
}
|
|
169
178
|
/** `table:name` + それより深いインデントの行。 */
|
|
170
179
|
interface TableBlock extends NodeBase {
|
|
171
|
-
readonly type:
|
|
180
|
+
readonly type: "table";
|
|
172
181
|
readonly name: string;
|
|
173
182
|
readonly indent: number;
|
|
174
183
|
readonly rows: readonly TableRow[];
|
|
175
184
|
}
|
|
176
185
|
/** 通常の行。 */
|
|
177
186
|
interface LineBlock extends NodeBase {
|
|
178
|
-
readonly type:
|
|
187
|
+
readonly type: "line";
|
|
179
188
|
/** 行頭の空白 (半角スペース / タブ / 全角スペース) の文字数 */
|
|
180
189
|
readonly indent: number;
|
|
181
190
|
/** `>` で始まる引用行 */
|
|
@@ -204,7 +213,7 @@ type BlockNode = BlockNodeMap[BlockNodeType];
|
|
|
204
213
|
type TopLevelBlock = TitleBlock | CodeBlock | TableBlock | LineBlock;
|
|
205
214
|
/** パース結果のルート。 */
|
|
206
215
|
interface Page extends NodeBase {
|
|
207
|
-
readonly type:
|
|
216
|
+
readonly type: "page";
|
|
208
217
|
readonly children: readonly TopLevelBlock[];
|
|
209
218
|
}
|
|
210
219
|
interface RootNodeMap {
|
|
@@ -222,9 +231,9 @@ type NodeOfType<K extends AnyNodeType> = AnyNodeMap[K];
|
|
|
222
231
|
* 記法を判定する側は「何のノードか」だけを決め、位置の付与は走査側がまとめて行う。
|
|
223
232
|
* こうしておくと、記法を 1 つ足すたびにオフセット計算を書き足さずに済む。
|
|
224
233
|
*/
|
|
225
|
-
type WithoutPosition<T> = T extends unknown ? Omit<T,
|
|
234
|
+
type WithoutPosition<T> = T extends unknown ? Omit<T, "position"> : never;
|
|
226
235
|
/** 位置を持たないインラインノード。記法ルールの戻り値。 */
|
|
227
236
|
type InlineNodeInit = WithoutPosition<InlineNode>;
|
|
228
237
|
//#endregion
|
|
229
238
|
export { TableCell as A, NodeOfType as C, ProjectLink as D, Position as E, WithoutPosition as F, TextNode as M, TitleBlock as N, RootNodeMap as O, TopLevelBlock as P, NodeBase as S, Point as T, InlineNodeInit as _, BlockNodeMap as a, InternalLink as b, CodeLine as c, FormulaNode as d, Hashtag as f, InlineNode as g, InlineCode as h, BlockNode as i, TableRow as j, TableBlock as k, Decoration as l, ImageNode as m, AnyNodeMap as n, BlockNodeType as o, IconNode as p, AnyNodeType as r, CodeBlock as s, AnyNode as t, ExternalLink as u, InlineNodeMap as v, Page as w, LineBlock as x, InlineNodeType as y };
|
|
230
|
-
//# sourceMappingURL=types-
|
|
239
|
+
//# sourceMappingURL=types-gWMrsXPX.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-gWMrsXPX.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;;;;;;;UAkBiB;;WAEN;;WAEA;;WAEA;;;;;;;UAQM;WACN,OAAO;WACP,KAAK;;;UAIC;WACN;WACA,UAAU;;;UAQJ,iBAAiB;WACvB;WACA;;;UAIM,qBAAqB;WAC3B;;WAEA;;WAEA;;;UAIM,qBAAqB;WAC3B;WACA;WACA;;;UAIM,oBAAoB;WAC1B;WACA;;WAEA;WACA;;WAEA;;;UAIM,gBAAgB;WACtB;WACA;;;UAIM,mBAAmB;WACzB;WACA;;;UAIM,kBAAkB;WACxB;WACA;;WAEA;;WAEA;;;UAIM,iBAAiB;WACvB;WACA;;WAEA;;;UAIM,oBAAoB;WAC1B;WACA;;;;;;;;UASM,mBAAmB;WACzB;;WAEA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;;WAEA,mBAAmB;;;;;;UAOb;EACf,MAAM;EACN,cAAc;EACd,cAAc;EACd,aAAa;EACb,SAAS;EACT,YAAY;EACZ,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;;KAGF,uBAAuB;KACvB,aAAa,cAAc;;UAOtB,mBAAmB;WACzB;;WAEA;WACA,mBAAmB;;;UAIb,iBAAiB;WACvB;;;;;WAKA;;;UAIM,kBAAkB;WACxB;WACA;;WAEA;;WAEA,gBAAgB;;;;;;;;UASV,kBAAkB;WACxB;;WAEA;WACA,mBAAmB;;;UAIb,iBAAiB;WACvB;WACA,gBAAgB;;;UAIV,mBAAmB;WACzB;WACA;WACA;WACA,eAAe;;;UAIT,kBAAkB;WACxB;;WAEA;;WAEA;;WAEA;;WAEA,mBAAmB;;;;;;UAOb;EACf,OAAO;EACP,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;EACV,WAAW;EACX,MAAM;;KAGI,sBAAsB;KACtB,YAAY,aAAa;;KAGzB,gBAAgB,aAAa,YAAY,aAAa;;UAOjD,aAAa;WACnB;WACA,mBAAmB;;UAOb;EACf,MAAM;;;KAII,aAAa,cAAc,eAAe;KAE1C,oBAAoB;KACpB,UAAU,WAAW;;KAGrB,WAAW,UAAU,eAAe,WAAW;;;;;;;KAQ/C,gBAAgB,KAAK,oBAAoB,KAAK;;KAG9C,iBAAiB,gBAAgB"}
|
package/dist/utils.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_ast = require("./ast-
|
|
2
|
+
const require_ast = require("./ast-C0BGz7X2.cjs");
|
|
3
3
|
//#region src/utils/visit.ts
|
|
4
4
|
/**
|
|
5
|
-
* visit.ts —
|
|
5
|
+
* visit.ts — AST を深さ優先で走査する。外部依存を増やさないための自前実装。
|
|
6
6
|
*/
|
|
7
7
|
function visit(tree, typesOrVisitor, maybeVisitor) {
|
|
8
8
|
const visitor = maybeVisitor ?? typesOrVisitor;
|
package/dist/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["childrenOf"],"sources":["../src/utils/visit.ts","../src/utils/links.ts"],"sourcesContent":["/**\n * visit.ts —
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["childrenOf"],"sources":["../src/utils/visit.ts","../src/utils/links.ts"],"sourcesContent":["/**\n * visit.ts — AST を深さ優先で走査する。外部依存を増やさないための自前実装。\n */\nimport { childrenOf } from \"../ast\"\nimport type { AnyNode, AnyNodeType, NodeOfType } from \"../types\"\n\n/**\n * visitor の戻り値。\n * - 何も返さない — そのまま子へ進む\n * - `'skip'` — このノードの子を辿らない\n * - `'exit'` — 走査全体を打ち切る\n */\n// void にしているのは、undefined にすると値を返さない visitor を渡せなくなるため\nexport type VisitResult = void | \"skip\" | \"exit\"\n\nexport type Visitor<T extends AnyNode> = (node: T, ancestors: readonly AnyNode[]) => VisitResult\n\n/** 木を深さ優先で辿る。`types` を渡すとその型のノードだけが visitor に届く。 */\nexport function visit(tree: AnyNode, visitor: Visitor<AnyNode>): void\nexport function visit<K extends AnyNodeType>(\n tree: AnyNode,\n types: K | readonly K[],\n visitor: Visitor<NodeOfType<K>>,\n): void\nexport function visit(\n tree: AnyNode,\n typesOrVisitor: AnyNodeType | readonly AnyNodeType[] | Visitor<AnyNode>,\n maybeVisitor?: Visitor<AnyNode>,\n): void {\n const visitor = maybeVisitor ?? (typesOrVisitor as Visitor<AnyNode>)\n const types =\n maybeVisitor === undefined\n ? undefined\n : new Set(\n typeof typesOrVisitor === \"string\"\n ? [typesOrVisitor]\n : (typesOrVisitor as readonly AnyNodeType[]),\n )\n\n const walk = (node: AnyNode, ancestors: readonly AnyNode[]): VisitResult => {\n if (types === undefined || types.has(node.type)) {\n const result = visitor(node, ancestors)\n if (result === \"exit\") return \"exit\"\n if (result === \"skip\") return undefined\n }\n const nextAncestors = [...ancestors, node]\n for (const child of childrenOf(node)) {\n if (walk(child, nextAncestors) === \"exit\") return \"exit\"\n }\n return undefined\n }\n\n walk(tree, [])\n}\n\n/** その型の最初のノードを返す。無ければ null。 */\nexport function find<K extends AnyNodeType>(tree: AnyNode, type: K): NodeOfType<K> | null {\n let found: NodeOfType<K> | null = null\n visit(tree, type, (node) => {\n found = node\n return \"exit\"\n })\n return found\n}\n\n/** その型のノードを出現順にすべて集める。 */\nexport function collect<K extends AnyNodeType>(tree: AnyNode, type: K): NodeOfType<K>[] {\n const out: NodeOfType<K>[] = []\n visit(tree, type, (node) => {\n out.push(node)\n })\n return out\n}\n","/**\n * links.ts — AST からリンクと画像を抜き出す。\n */\nimport type { AnyNode, ImageNode, ProjectLink } from \"../types\"\nimport { collect, visit } from \"./visit\"\n\nexport interface CollectLinksOptions {\n /** `[/project/title]` も含めるか (既定: false)。同一プロジェクト内の被リンクだけが要るなら false */\n readonly includeProjectLinks?: boolean\n}\n\n/**\n * 同じプロジェクト内のページを指すリンクを、出現順・重複なしで集める。\n * `[title]` と `#tag` は同じページを指すので同じ 1 件として扱う。\n */\nexport const collectLinks = (tree: AnyNode, options?: CollectLinksOptions): string[] => {\n const out: string[] = []\n const seen = new Set<string>()\n const add = (value: string) => {\n if (value === \"\" || seen.has(value)) return\n seen.add(value)\n out.push(value)\n }\n\n visit(tree, (node) => {\n if (node.type === \"internalLink\") add(node.target)\n else if (node.type === \"hashtag\") add(node.value)\n else if (node.type === \"projectLink\" && options?.includeProjectLinks) add(node.target)\n })\n\n return out\n}\n\n/** ページが参照している外部プロジェクトのリンクを、出現順に集める。 */\nexport const collectProjectLinks = (tree: AnyNode): ProjectLink[] => collect(tree, \"projectLink\")\n\n/** 最初に現れる画像ノード。無ければ null。 */\nexport const firstImage = (tree: AnyNode): ImageNode | null => {\n let found: ImageNode | null = null\n visit(tree, \"image\", (node) => {\n found = node\n return \"exit\"\n })\n return found\n}\n"],"mappings":";;;;;;AAwBA,SAAgB,MACd,MACA,gBACA,cACM;CACN,MAAM,UAAU,gBAAiB;CACjC,MAAM,QACJ,iBAAiB,KAAA,IACb,KAAA,IACA,IAAI,IACF,OAAO,mBAAmB,WACtB,CAAC,cAAc,IACd,cACP;CAEN,MAAM,QAAQ,MAAe,cAA+C;EAC1E,IAAI,UAAU,KAAA,KAAa,MAAM,IAAI,KAAK,IAAI,GAAG;GAC/C,MAAM,SAAS,QAAQ,MAAM,SAAS;GACtC,IAAI,WAAW,QAAQ,OAAO;GAC9B,IAAI,WAAW,QAAQ,OAAO,KAAA;EAChC;EACA,MAAM,gBAAgB,CAAC,GAAG,WAAW,IAAI;EACzC,KAAK,MAAM,SAASA,YAAAA,WAAW,IAAI,GACjC,IAAI,KAAK,OAAO,aAAa,MAAM,QAAQ,OAAO;CAGtD;CAEA,KAAK,MAAM,CAAC,CAAC;AACf;;AAGA,SAAgB,KAA4B,MAAe,MAA+B;CACxF,IAAI,QAA8B;CAClC,MAAM,MAAM,OAAO,SAAS;EAC1B,QAAQ;EACR,OAAO;CACT,CAAC;CACD,OAAO;AACT;;AAGA,SAAgB,QAA+B,MAAe,MAA0B;CACtF,MAAM,MAAuB,CAAC;CAC9B,MAAM,MAAM,OAAO,SAAS;EAC1B,IAAI,KAAK,IAAI;CACf,CAAC;CACD,OAAO;AACT;;;;;;;ACzDA,MAAa,gBAAgB,MAAe,YAA4C;CACtF,MAAM,MAAgB,CAAC;CACvB,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,OAAO,UAAkB;EAC7B,IAAI,UAAU,MAAM,KAAK,IAAI,KAAK,GAAG;EACrC,KAAK,IAAI,KAAK;EACd,IAAI,KAAK,KAAK;CAChB;CAEA,MAAM,OAAO,SAAS;EACpB,IAAI,KAAK,SAAS,gBAAgB,IAAI,KAAK,MAAM;OAC5C,IAAI,KAAK,SAAS,WAAW,IAAI,KAAK,KAAK;OAC3C,IAAI,KAAK,SAAS,iBAAiB,SAAS,qBAAqB,IAAI,KAAK,MAAM;CACvF,CAAC;CAED,OAAO;AACT;;AAGA,MAAa,uBAAuB,SAAiC,QAAQ,MAAM,aAAa;;AAGhG,MAAa,cAAc,SAAoC;CAC7D,IAAI,QAA0B;CAC9B,MAAM,MAAM,UAAU,SAAS;EAC7B,QAAQ;EACR,OAAO;CACT,CAAC;CACD,OAAO;AACT"}
|
package/dist/utils.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as NodeOfType, D as ProjectLink, m as ImageNode, r as AnyNodeType, t as AnyNode } from "./types-
|
|
1
|
+
import { C as NodeOfType, D as ProjectLink, m as ImageNode, r as AnyNodeType, t as AnyNode } from "./types-gWMrsXPX.cjs";
|
|
2
2
|
//#region src/ast.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* ノードの子を返す。子を持たないノードでは空配列。
|
|
@@ -32,7 +32,7 @@ declare const firstImage: (tree: AnyNode) => ImageNode | null;
|
|
|
32
32
|
* - `'skip'` — このノードの子を辿らない
|
|
33
33
|
* - `'exit'` — 走査全体を打ち切る
|
|
34
34
|
*/
|
|
35
|
-
type VisitResult = void |
|
|
35
|
+
type VisitResult = void | "skip" | "exit";
|
|
36
36
|
type Visitor<T extends AnyNode> = (node: T, ancestors: readonly AnyNode[]) => VisitResult;
|
|
37
37
|
/** 木を深さ優先で辿る。`types` を渡すとその型のノードだけが visitor に届く。 */
|
|
38
38
|
declare function visit(tree: AnyNode, visitor: Visitor<AnyNode>): void;
|
package/dist/utils.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.cts","names":[],"sources":["../src/ast.ts","../src/utils/links.ts","../src/utils/visit.ts"],"mappings":";;;;;;;;cAiBa,aAAc,MAAM,qBAAmB;;
|
|
1
|
+
{"version":3,"file":"utils.d.cts","names":[],"sources":["../src/ast.ts","../src/utils/links.ts","../src/utils/visit.ts"],"mappings":";;;;;;;;cAiBa,aAAc,MAAM,qBAAmB;;cAwCvC,YAAa,gBAAgB,MAAM;;;UCnD/B;;WAEN;;;;;;cAOE,eAAgB,MAAM,SAAS,UAAU;;cAmBzC,sBAAuB,MAAM,YAAU;;cAGvC,aAAc,MAAM,YAAU;;;;;;;;;KCxB/B;KAEA,QAAQ,UAAU,YAAY,MAAM,GAAG,oBAAoB,cAAc;;iBAGrE,MAAM,MAAM,SAAS,SAAS,QAAQ;iBACtC,MAAM,UAAU,aAC9B,MAAM,SACN,OAAO,aAAa,KACpB,SAAS,QAAQ,WAAW;;iBAkCd,KAAK,UAAU,aAAa,MAAM,SAAS,MAAM,IAAI,WAAW;;iBAUhE,QAAQ,UAAU,aAAa,MAAM,SAAS,MAAM,IAAI,WAAW"}
|
package/dist/utils.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as NodeOfType, D as ProjectLink, m as ImageNode, r as AnyNodeType, t as AnyNode } from "./types-
|
|
1
|
+
import { C as NodeOfType, D as ProjectLink, m as ImageNode, r as AnyNodeType, t as AnyNode } from "./types-gWMrsXPX.mjs";
|
|
2
2
|
//#region src/ast.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* ノードの子を返す。子を持たないノードでは空配列。
|
|
@@ -32,7 +32,7 @@ declare const firstImage: (tree: AnyNode) => ImageNode | null;
|
|
|
32
32
|
* - `'skip'` — このノードの子を辿らない
|
|
33
33
|
* - `'exit'` — 走査全体を打ち切る
|
|
34
34
|
*/
|
|
35
|
-
type VisitResult = void |
|
|
35
|
+
type VisitResult = void | "skip" | "exit";
|
|
36
36
|
type Visitor<T extends AnyNode> = (node: T, ancestors: readonly AnyNode[]) => VisitResult;
|
|
37
37
|
/** 木を深さ優先で辿る。`types` を渡すとその型のノードだけが visitor に届く。 */
|
|
38
38
|
declare function visit(tree: AnyNode, visitor: Visitor<AnyNode>): void;
|
package/dist/utils.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/ast.ts","../src/utils/links.ts","../src/utils/visit.ts"],"mappings":";;;;;;;;cAiBa,aAAc,MAAM,qBAAmB;;
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/ast.ts","../src/utils/links.ts","../src/utils/visit.ts"],"mappings":";;;;;;;;cAiBa,aAAc,MAAM,qBAAmB;;cAwCvC,YAAa,gBAAgB,MAAM;;;UCnD/B;;WAEN;;;;;;cAOE,eAAgB,MAAM,SAAS,UAAU;;cAmBzC,sBAAuB,MAAM,YAAU;;cAGvC,aAAc,MAAM,YAAU;;;;;;;;;KCxB/B;KAEA,QAAQ,UAAU,YAAY,MAAM,GAAG,oBAAoB,cAAc;;iBAGrE,MAAM,MAAM,SAAS,SAAS,QAAQ;iBACtC,MAAM,UAAU,aAC9B,MAAM,SACN,OAAO,aAAa,KACpB,SAAS,QAAQ,WAAW;;iBAkCd,KAAK,UAAU,aAAa,MAAM,SAAS,MAAM,IAAI,WAAW;;iBAUhE,QAAQ,UAAU,aAAa,MAAM,SAAS,MAAM,IAAI,WAAW"}
|
package/dist/utils.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as rawTextOf, t as childrenOf } from "./ast-
|
|
1
|
+
import { n as rawTextOf, t as childrenOf } from "./ast-CMQYawYl.mjs";
|
|
2
2
|
//#region src/utils/visit.ts
|
|
3
3
|
/**
|
|
4
|
-
* visit.ts —
|
|
4
|
+
* visit.ts — AST を深さ優先で走査する。外部依存を増やさないための自前実装。
|
|
5
5
|
*/
|
|
6
6
|
function visit(tree, typesOrVisitor, maybeVisitor) {
|
|
7
7
|
const visitor = maybeVisitor ?? typesOrVisitor;
|
package/dist/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils/visit.ts","../src/utils/links.ts"],"sourcesContent":["/**\n * visit.ts —
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils/visit.ts","../src/utils/links.ts"],"sourcesContent":["/**\n * visit.ts — AST を深さ優先で走査する。外部依存を増やさないための自前実装。\n */\nimport { childrenOf } from \"../ast\"\nimport type { AnyNode, AnyNodeType, NodeOfType } from \"../types\"\n\n/**\n * visitor の戻り値。\n * - 何も返さない — そのまま子へ進む\n * - `'skip'` — このノードの子を辿らない\n * - `'exit'` — 走査全体を打ち切る\n */\n// void にしているのは、undefined にすると値を返さない visitor を渡せなくなるため\nexport type VisitResult = void | \"skip\" | \"exit\"\n\nexport type Visitor<T extends AnyNode> = (node: T, ancestors: readonly AnyNode[]) => VisitResult\n\n/** 木を深さ優先で辿る。`types` を渡すとその型のノードだけが visitor に届く。 */\nexport function visit(tree: AnyNode, visitor: Visitor<AnyNode>): void\nexport function visit<K extends AnyNodeType>(\n tree: AnyNode,\n types: K | readonly K[],\n visitor: Visitor<NodeOfType<K>>,\n): void\nexport function visit(\n tree: AnyNode,\n typesOrVisitor: AnyNodeType | readonly AnyNodeType[] | Visitor<AnyNode>,\n maybeVisitor?: Visitor<AnyNode>,\n): void {\n const visitor = maybeVisitor ?? (typesOrVisitor as Visitor<AnyNode>)\n const types =\n maybeVisitor === undefined\n ? undefined\n : new Set(\n typeof typesOrVisitor === \"string\"\n ? [typesOrVisitor]\n : (typesOrVisitor as readonly AnyNodeType[]),\n )\n\n const walk = (node: AnyNode, ancestors: readonly AnyNode[]): VisitResult => {\n if (types === undefined || types.has(node.type)) {\n const result = visitor(node, ancestors)\n if (result === \"exit\") return \"exit\"\n if (result === \"skip\") return undefined\n }\n const nextAncestors = [...ancestors, node]\n for (const child of childrenOf(node)) {\n if (walk(child, nextAncestors) === \"exit\") return \"exit\"\n }\n return undefined\n }\n\n walk(tree, [])\n}\n\n/** その型の最初のノードを返す。無ければ null。 */\nexport function find<K extends AnyNodeType>(tree: AnyNode, type: K): NodeOfType<K> | null {\n let found: NodeOfType<K> | null = null\n visit(tree, type, (node) => {\n found = node\n return \"exit\"\n })\n return found\n}\n\n/** その型のノードを出現順にすべて集める。 */\nexport function collect<K extends AnyNodeType>(tree: AnyNode, type: K): NodeOfType<K>[] {\n const out: NodeOfType<K>[] = []\n visit(tree, type, (node) => {\n out.push(node)\n })\n return out\n}\n","/**\n * links.ts — AST からリンクと画像を抜き出す。\n */\nimport type { AnyNode, ImageNode, ProjectLink } from \"../types\"\nimport { collect, visit } from \"./visit\"\n\nexport interface CollectLinksOptions {\n /** `[/project/title]` も含めるか (既定: false)。同一プロジェクト内の被リンクだけが要るなら false */\n readonly includeProjectLinks?: boolean\n}\n\n/**\n * 同じプロジェクト内のページを指すリンクを、出現順・重複なしで集める。\n * `[title]` と `#tag` は同じページを指すので同じ 1 件として扱う。\n */\nexport const collectLinks = (tree: AnyNode, options?: CollectLinksOptions): string[] => {\n const out: string[] = []\n const seen = new Set<string>()\n const add = (value: string) => {\n if (value === \"\" || seen.has(value)) return\n seen.add(value)\n out.push(value)\n }\n\n visit(tree, (node) => {\n if (node.type === \"internalLink\") add(node.target)\n else if (node.type === \"hashtag\") add(node.value)\n else if (node.type === \"projectLink\" && options?.includeProjectLinks) add(node.target)\n })\n\n return out\n}\n\n/** ページが参照している外部プロジェクトのリンクを、出現順に集める。 */\nexport const collectProjectLinks = (tree: AnyNode): ProjectLink[] => collect(tree, \"projectLink\")\n\n/** 最初に現れる画像ノード。無ければ null。 */\nexport const firstImage = (tree: AnyNode): ImageNode | null => {\n let found: ImageNode | null = null\n visit(tree, \"image\", (node) => {\n found = node\n return \"exit\"\n })\n return found\n}\n"],"mappings":";;;;;AAwBA,SAAgB,MACd,MACA,gBACA,cACM;CACN,MAAM,UAAU,gBAAiB;CACjC,MAAM,QACJ,iBAAiB,KAAA,IACb,KAAA,IACA,IAAI,IACF,OAAO,mBAAmB,WACtB,CAAC,cAAc,IACd,cACP;CAEN,MAAM,QAAQ,MAAe,cAA+C;EAC1E,IAAI,UAAU,KAAA,KAAa,MAAM,IAAI,KAAK,IAAI,GAAG;GAC/C,MAAM,SAAS,QAAQ,MAAM,SAAS;GACtC,IAAI,WAAW,QAAQ,OAAO;GAC9B,IAAI,WAAW,QAAQ,OAAO,KAAA;EAChC;EACA,MAAM,gBAAgB,CAAC,GAAG,WAAW,IAAI;EACzC,KAAK,MAAM,SAAS,WAAW,IAAI,GACjC,IAAI,KAAK,OAAO,aAAa,MAAM,QAAQ,OAAO;CAGtD;CAEA,KAAK,MAAM,CAAC,CAAC;AACf;;AAGA,SAAgB,KAA4B,MAAe,MAA+B;CACxF,IAAI,QAA8B;CAClC,MAAM,MAAM,OAAO,SAAS;EAC1B,QAAQ;EACR,OAAO;CACT,CAAC;CACD,OAAO;AACT;;AAGA,SAAgB,QAA+B,MAAe,MAA0B;CACtF,MAAM,MAAuB,CAAC;CAC9B,MAAM,MAAM,OAAO,SAAS;EAC1B,IAAI,KAAK,IAAI;CACf,CAAC;CACD,OAAO;AACT;;;;;;;ACzDA,MAAa,gBAAgB,MAAe,YAA4C;CACtF,MAAM,MAAgB,CAAC;CACvB,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,OAAO,UAAkB;EAC7B,IAAI,UAAU,MAAM,KAAK,IAAI,KAAK,GAAG;EACrC,KAAK,IAAI,KAAK;EACd,IAAI,KAAK,KAAK;CAChB;CAEA,MAAM,OAAO,SAAS;EACpB,IAAI,KAAK,SAAS,gBAAgB,IAAI,KAAK,MAAM;OAC5C,IAAI,KAAK,SAAS,WAAW,IAAI,KAAK,KAAK;OAC3C,IAAI,KAAK,SAAS,iBAAiB,SAAS,qBAAqB,IAAI,KAAK,MAAM;CACvF,CAAC;CAED,OAAO;AACT;;AAGA,MAAa,uBAAuB,SAAiC,QAAQ,MAAM,aAAa;;AAGhG,MAAa,cAAc,SAAoC;CAC7D,IAAI,QAA0B;CAC9B,MAAM,MAAM,UAAU,SAAS;EAC7B,QAAQ;EACR,OAAO;CACT,CAAC;CACD,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosense-toolbox/parser",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
4
|
-
"description": "Cosense (Scrapbox) notation parser —
|
|
3
|
+
"version": "0.1.0-beta.2",
|
|
4
|
+
"description": "Cosense (Scrapbox) notation parser — every node carries its source position. Zero runtime deps except effect.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
"default": "./dist/utils.cjs"
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
|
-
"./
|
|
45
|
+
"./extensions": {
|
|
46
46
|
"import": {
|
|
47
|
-
"types": "./dist/
|
|
48
|
-
"default": "./dist/
|
|
47
|
+
"types": "./dist/extensions.d.mts",
|
|
48
|
+
"default": "./dist/extensions.mjs"
|
|
49
49
|
},
|
|
50
50
|
"require": {
|
|
51
|
-
"types": "./dist/
|
|
52
|
-
"default": "./dist/
|
|
51
|
+
"types": "./dist/extensions.d.cts",
|
|
52
|
+
"default": "./dist/extensions.cjs"
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
55
|
"./compile": {
|
|
@@ -62,9 +62,23 @@
|
|
|
62
62
|
"default": "./dist/compile.cjs"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
+
"./html": {
|
|
66
|
+
"import": {
|
|
67
|
+
"types": "./dist/html.d.mts",
|
|
68
|
+
"default": "./dist/html.mjs"
|
|
69
|
+
},
|
|
70
|
+
"require": {
|
|
71
|
+
"types": "./dist/html.d.cts",
|
|
72
|
+
"default": "./dist/html.cjs"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
65
75
|
"./package.json": "./package.json"
|
|
66
76
|
},
|
|
67
|
-
"files": [
|
|
77
|
+
"files": [
|
|
78
|
+
"dist",
|
|
79
|
+
"README.md",
|
|
80
|
+
"LICENSE"
|
|
81
|
+
],
|
|
68
82
|
"scripts": {
|
|
69
83
|
"build": "tsdown",
|
|
70
84
|
"dev": "tsdown --watch",
|
|
@@ -74,7 +88,9 @@
|
|
|
74
88
|
"prepublishOnly": "bun run build"
|
|
75
89
|
},
|
|
76
90
|
"dependencies": {
|
|
77
|
-
"
|
|
91
|
+
"@types/hast": "^3.0.4",
|
|
92
|
+
"effect": "^3.22.1",
|
|
93
|
+
"hast-util-to-html": "^9.0.5"
|
|
78
94
|
},
|
|
79
95
|
"devDependencies": {
|
|
80
96
|
"fast-check": "^3.23.1",
|
|
@@ -87,7 +103,14 @@
|
|
|
87
103
|
"tag": "beta",
|
|
88
104
|
"registry": "https://registry.npmjs.org/"
|
|
89
105
|
},
|
|
90
|
-
"keywords": [
|
|
106
|
+
"keywords": [
|
|
107
|
+
"cosense",
|
|
108
|
+
"scrapbox",
|
|
109
|
+
"parser",
|
|
110
|
+
"ast",
|
|
111
|
+
"syntax",
|
|
112
|
+
"effect"
|
|
113
|
+
],
|
|
91
114
|
"repository": {
|
|
92
115
|
"type": "git",
|
|
93
116
|
"url": "git+https://github.com/qaynam/cosense-toolbox.git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast-CIKXwSl5.mjs","names":[],"sources":["../src/ast.ts"],"sourcesContent":["/**\n * ast.ts — AST に対する基本操作。パースはしない。\n */\nimport type { AnyNode } from './types'\n\n/** 型を知らないノードの子。mdast と同じく `children` 配列があればそれが子。 */\nconst unknownChildren = (node: unknown): readonly AnyNode[] => {\n const children = (node as { readonly children?: unknown }).children\n return Array.isArray(children) ? (children as readonly AnyNode[]) : []\n}\n\n/**\n * ノードの子を返す。子を持たないノードでは空配列。\n *\n * どのフィールドが子にあたるかはノード型ごとに違う (`children` / `lines` / `rows` / `cells`)。\n * その対応を知っているのはここだけで、AST を辿るコードはすべてこれを通る。\n */\nexport const childrenOf = (node: AnyNode): readonly AnyNode[] => {\n switch (node.type) {\n case 'page':\n return node.children\n case 'title':\n return node.children\n case 'codeBlock':\n return node.lines\n case 'table':\n return node.rows\n case 'tableRow':\n return node.cells\n case 'line':\n return node.children\n case 'decoration':\n return node.children\n case 'codeLine':\n case 'tableCell':\n case 'text':\n case 'internalLink':\n case 'externalLink':\n case 'projectLink':\n case 'hashtag':\n case 'inlineCode':\n case 'image':\n case 'icon':\n case 'formula':\n return []\n default: {\n // ノード型を足したのにここを更新していないとコンパイルエラーになる。\n node satisfies never\n // 型の上では到達しないが、実行時には declaration merging でノード型を足した\n // プラグインのノードが来うる。\n return unknownChildren(node)\n }\n }\n}\n\n/** そのノードがソース上で占めていた生のテキスト。位置情報から復元する。 */\nexport const rawTextOf = (source: string, node: AnyNode): string =>\n source.slice(node.position.start.offset, node.position.end.offset)\n"],"mappings":";;AAMA,MAAM,mBAAmB,SAAsC;CAC7D,MAAM,WAAY,KAAyC;CAC3D,OAAO,MAAM,QAAQ,QAAQ,IAAK,WAAkC,CAAC;AACvE;;;;;;;AAQA,MAAa,cAAc,SAAsC;CAC/D,QAAQ,KAAK,MAAb;EACE,KAAK,QACH,OAAO,KAAK;EACd,KAAK,SACH,OAAO,KAAK;EACd,KAAK,aACH,OAAO,KAAK;EACd,KAAK,SACH,OAAO,KAAK;EACd,KAAK,YACH,OAAO,KAAK;EACd,KAAK,QACH,OAAO,KAAK;EACd,KAAK,cACH,OAAO,KAAK;EACd,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO,CAAC;EACV,SAKE,OAAO,gBAAgB,IAAI;CAE/B;AACF;;AAGA,MAAa,aAAa,QAAgB,SACxC,OAAO,MAAM,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,IAAI,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast-uYWtkHwT.cjs","names":[],"sources":["../src/ast.ts"],"sourcesContent":["/**\n * ast.ts — AST に対する基本操作。パースはしない。\n */\nimport type { AnyNode } from './types'\n\n/** 型を知らないノードの子。mdast と同じく `children` 配列があればそれが子。 */\nconst unknownChildren = (node: unknown): readonly AnyNode[] => {\n const children = (node as { readonly children?: unknown }).children\n return Array.isArray(children) ? (children as readonly AnyNode[]) : []\n}\n\n/**\n * ノードの子を返す。子を持たないノードでは空配列。\n *\n * どのフィールドが子にあたるかはノード型ごとに違う (`children` / `lines` / `rows` / `cells`)。\n * その対応を知っているのはここだけで、AST を辿るコードはすべてこれを通る。\n */\nexport const childrenOf = (node: AnyNode): readonly AnyNode[] => {\n switch (node.type) {\n case 'page':\n return node.children\n case 'title':\n return node.children\n case 'codeBlock':\n return node.lines\n case 'table':\n return node.rows\n case 'tableRow':\n return node.cells\n case 'line':\n return node.children\n case 'decoration':\n return node.children\n case 'codeLine':\n case 'tableCell':\n case 'text':\n case 'internalLink':\n case 'externalLink':\n case 'projectLink':\n case 'hashtag':\n case 'inlineCode':\n case 'image':\n case 'icon':\n case 'formula':\n return []\n default: {\n // ノード型を足したのにここを更新していないとコンパイルエラーになる。\n node satisfies never\n // 型の上では到達しないが、実行時には declaration merging でノード型を足した\n // プラグインのノードが来うる。\n return unknownChildren(node)\n }\n }\n}\n\n/** そのノードがソース上で占めていた生のテキスト。位置情報から復元する。 */\nexport const rawTextOf = (source: string, node: AnyNode): string =>\n source.slice(node.position.start.offset, node.position.end.offset)\n"],"mappings":";;AAMA,MAAM,mBAAmB,SAAsC;CAC7D,MAAM,WAAY,KAAyC;CAC3D,OAAO,MAAM,QAAQ,QAAQ,IAAK,WAAkC,CAAC;AACvE;;;;;;;AAQA,MAAa,cAAc,SAAsC;CAC/D,QAAQ,KAAK,MAAb;EACE,KAAK,QACH,OAAO,KAAK;EACd,KAAK,SACH,OAAO,KAAK;EACd,KAAK,aACH,OAAO,KAAK;EACd,KAAK,SACH,OAAO,KAAK;EACd,KAAK,YACH,OAAO,KAAK;EACd,KAAK,QACH,OAAO,KAAK;EACd,KAAK,cACH,OAAO,KAAK;EACd,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO,CAAC;EACV,SAKE,OAAO,gBAAgB,IAAI;CAE/B;AACF;;AAGA,MAAa,aAAa,QAAgB,SACxC,OAAO,MAAM,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,IAAI,MAAM"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { C as NodeOfType, r as AnyNodeType, t as AnyNode } from "./types-Bo_BrmvK.cjs";
|
|
2
|
-
//#region src/compile/create-compiler.d.ts
|
|
3
|
-
/** ハンドラの中から再帰的に変換するための入口。 */
|
|
4
|
-
interface CompileContext<Out> {
|
|
5
|
-
readonly node: (node: AnyNode) => Out;
|
|
6
|
-
readonly children: (node: AnyNode) => Out[];
|
|
7
|
-
}
|
|
8
|
-
type NodeHandler<Out, K extends AnyNodeType> = (node: NodeOfType<K>, ctx: CompileContext<Out>) => Out;
|
|
9
|
-
/**
|
|
10
|
-
* ノード型 → ハンドラの対応。`AnyNodeMap` から型を導出しているので、
|
|
11
|
-
* ノード型が増えたらここも自動で新しいキーを受け入れる。
|
|
12
|
-
*/
|
|
13
|
-
type NodeHandlers<Out> = { readonly [K in AnyNodeType]?: NodeHandler<Out, K>; };
|
|
14
|
-
interface CompilerOptions<Out> {
|
|
15
|
-
readonly handlers: NodeHandlers<Out>;
|
|
16
|
-
/** ハンドラが無いノード型に使う既定の変換 */
|
|
17
|
-
readonly fallback: NodeHandler<Out, AnyNodeType>;
|
|
18
|
-
}
|
|
19
|
-
/** AST をひとつの値に変換する関数を作る。 */
|
|
20
|
-
declare const createCompiler: <Out>(options: CompilerOptions<Out>) => (node: AnyNode) => Out;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { createCompiler as a, NodeHandlers as i, CompilerOptions as n, NodeHandler as r, CompileContext as t };
|
|
23
|
-
//# sourceMappingURL=create-compiler-CvlndKOA.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-compiler-CvlndKOA.d.cts","names":[],"sources":["../src/compile/create-compiler.ts"],"mappings":";;;UAQiB,eAAe;WACrB,OAAO,MAAM,YAAY;WACzB,WAAW,MAAM,YAAY;;KAG5B,YAAY,KAAK,UAAU,gBACrC,MAAM,WAAW,IACjB,KAAK,eAAe,SACjB;;;;;KAMO,aAAa,mBACb,KAAK,eAAe,YAAY,KAAK;UAGhC,gBAAgB;WACtB,UAAU,aAAa;;WAEvB,UAAU,YAAY,KAAK;;;cAIzB,iBAAkB,KAAK,SAAS,gBAAgB,UAAI,MACxC,YAAU"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { C as NodeOfType, r as AnyNodeType, t as AnyNode } from "./types-Bo_BrmvK.mjs";
|
|
2
|
-
//#region src/compile/create-compiler.d.ts
|
|
3
|
-
/** ハンドラの中から再帰的に変換するための入口。 */
|
|
4
|
-
interface CompileContext<Out> {
|
|
5
|
-
readonly node: (node: AnyNode) => Out;
|
|
6
|
-
readonly children: (node: AnyNode) => Out[];
|
|
7
|
-
}
|
|
8
|
-
type NodeHandler<Out, K extends AnyNodeType> = (node: NodeOfType<K>, ctx: CompileContext<Out>) => Out;
|
|
9
|
-
/**
|
|
10
|
-
* ノード型 → ハンドラの対応。`AnyNodeMap` から型を導出しているので、
|
|
11
|
-
* ノード型が増えたらここも自動で新しいキーを受け入れる。
|
|
12
|
-
*/
|
|
13
|
-
type NodeHandlers<Out> = { readonly [K in AnyNodeType]?: NodeHandler<Out, K>; };
|
|
14
|
-
interface CompilerOptions<Out> {
|
|
15
|
-
readonly handlers: NodeHandlers<Out>;
|
|
16
|
-
/** ハンドラが無いノード型に使う既定の変換 */
|
|
17
|
-
readonly fallback: NodeHandler<Out, AnyNodeType>;
|
|
18
|
-
}
|
|
19
|
-
/** AST をひとつの値に変換する関数を作る。 */
|
|
20
|
-
declare const createCompiler: <Out>(options: CompilerOptions<Out>) => (node: AnyNode) => Out;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { createCompiler as a, NodeHandlers as i, CompilerOptions as n, NodeHandler as r, CompileContext as t };
|
|
23
|
-
//# sourceMappingURL=create-compiler-jdA408ny.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-compiler-jdA408ny.d.mts","names":[],"sources":["../src/compile/create-compiler.ts"],"mappings":";;;UAQiB,eAAe;WACrB,OAAO,MAAM,YAAY;WACzB,WAAW,MAAM,YAAY;;KAG5B,YAAY,KAAK,UAAU,gBACrC,MAAM,WAAW,IACjB,KAAK,eAAe,SACjB;;;;;KAMO,aAAa,mBACb,KAAK,eAAe,YAAY,KAAK;UAGhC,gBAAgB;WACtB,UAAU,aAAa;;WAEvB,UAAU,YAAY,KAAK;;;cAIzB,iBAAkB,KAAK,SAAS,gBAAgB,UAAI,MACxC,YAAU"}
|
package/dist/index.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/core/image-url.ts","../src/inline/tokenize.ts","../src/parse.ts"],"mappings":";;;;cAwDa,aAAc;;;;;;;cAQd,aAAc;;;UC7CV;;WAEN;;WAEA;aACE;aACA;aACA;;;WAGF,sBAAsB;;;;;;;cAsGpB,iBACX,gBACA,UAAU,mCACA;;;;;;;;;cCxHC,uBAAwB;UAEpB;;WAEN,sBAAsB;;;;;;;;cAmBpB,QAAS,gBAAgB,UAAU,iBAAe;UAoB9C,yBAAyB;;WAE/B;;WAEA;;;;;;;;cASE,YAAa,aAAa,UAAU,qBAAmB;UAQnD;WACN,QAAQ,mBAAmB;WAC3B,YAAY,aAAa,UAAU,KAAK,oCAAoC;;;;;;cAO1E,eAAgB,UAAU,iBAAe"}
|
package/dist/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/image-url.ts","../src/inline/tokenize.ts","../src/parse.ts"],"mappings":";;;;cAwDa,aAAc;;;;;;;cAQd,aAAc;;;UC7CV;;WAEN;;WAEA;aACE;aACA;aACA;;;WAGF,sBAAsB;;;;;;;cAsGpB,iBACX,gBACA,UAAU,mCACA;;;;;;;;;cCxHC,uBAAwB;UAEpB;;WAEN,sBAAsB;;;;;;;;cAmBpB,QAAS,gBAAgB,UAAU,iBAAe;UAoB9C,yBAAyB;;WAE/B;;WAEA;;;;;;;;cASE,YAAa,aAAa,UAAU,qBAAmB;UAQnD;WACN,QAAQ,mBAAmB;WAC3B,YAAY,aAAa,UAAU,KAAK,oCAAoC;;;;;;cAO1E,eAAgB,UAAU,iBAAe"}
|
package/dist/plugin.cjs
DELETED
|
File without changes
|
package/dist/plugin.d.cts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { F as WithoutPosition, _ as InlineNodeInit } from "./types-Bo_BrmvK.cjs";
|
|
2
|
-
import { i as NodeHandlers, n as CompilerOptions, r as NodeHandler, t as CompileContext } from "./create-compiler-CvlndKOA.cjs";
|
|
3
|
-
import { a as InlineConstruct, i as Extension, n as BracketRuleContext, o as InlineContext, r as ConstructMatch, s as Origin, t as BracketRule } from "./types-DVwlUtla.cjs";
|
|
4
|
-
export type { BracketRule, BracketRuleContext, CompileContext, CompilerOptions, ConstructMatch, Extension, InlineConstruct, InlineContext, InlineNodeInit, NodeHandler, NodeHandlers, Origin, WithoutPosition };
|
package/dist/plugin.d.mts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { F as WithoutPosition, _ as InlineNodeInit } from "./types-Bo_BrmvK.mjs";
|
|
2
|
-
import { i as NodeHandlers, n as CompilerOptions, r as NodeHandler, t as CompileContext } from "./create-compiler-jdA408ny.mjs";
|
|
3
|
-
import { a as InlineConstruct, i as Extension, n as BracketRuleContext, o as InlineContext, r as ConstructMatch, s as Origin, t as BracketRule } from "./types-BXlnUFr0.mjs";
|
|
4
|
-
export type { BracketRule, BracketRuleContext, CompileContext, CompilerOptions, ConstructMatch, Extension, InlineConstruct, InlineContext, InlineNodeInit, NodeHandler, NodeHandlers, Origin, WithoutPosition };
|
package/dist/plugin.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-BXlnUFr0.d.mts","names":[],"sources":["../src/core/position.ts","../src/inline/types.ts"],"mappings":";;;;UAUiB;WACN;WACA;WACA;;;;;;;;;;UCEM;;WAEN;;WAEA,QAAQ;;WAER,uBAAuB;WACvB,WACP,gBACA,QAAQ,QACR,sCACY;;;UAIC;WACN,MAAM;WACN;;;;;;;;KASC,mBACV,gBACA,eACA,KAAK,kBACF,OAAO,OAAO;;UAGF,2BAA2B;;WAEjC,aAAa;;;;;;KAOZ,eAAe,eAAe,KAAK,uBAAuB,OAAO,OAAO;;;;;;;UAQnE;;WAEN,sBAAsB;;WAEtB,wBAAwB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-Bo_BrmvK.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;;;;;;;UAkBiB;;WAEN;;WAEA;;WAEA;;;;;;;UAQM;WACN,OAAO;WACP,KAAK;;;UAIC;WACN;WACA,UAAU;;;UAQJ,iBAAiB;WACvB;WACA;;;UAIM,qBAAqB;WAC3B;;WAEA;;WAEA;;;UAIM,qBAAqB;WAC3B;WACA;WACA;;;UAIM,oBAAoB;WAC1B;WACA;;WAEA;WACA;;WAEA;;;UAIM,gBAAgB;WACtB;WACA;;;UAIM,mBAAmB;WACzB;WACA;;;UAIM,kBAAkB;WACxB;WACA;;WAEA;;WAEA;;;UAIM,iBAAiB;WACvB;WACA;;WAEA;;;UAIM,oBAAoB;WAC1B;WACA;;;;;;;;UASM,mBAAmB;WACzB;;WAEA;WACA;WACA;WACA;WACA;;WAEA;;WAEA,mBAAmB;;;;;;UAOb;EACf,MAAM;EACN,cAAc;EACd,cAAc;EACd,aAAa;EACb,SAAS;EACT,YAAY;EACZ,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;;KAGF,uBAAuB;KACvB,aAAa,cAAc;;UAOtB,mBAAmB;WACzB;;WAEA;WACA,mBAAmB;;;UAIb,iBAAiB;WACvB;;;;;WAKA;;;UAIM,kBAAkB;WACxB;WACA;;WAEA;;WAEA,gBAAgB;;;UAIV,kBAAkB;WACxB;WACA;;;UAIM,iBAAiB;WACvB;WACA,gBAAgB;;;UAIV,mBAAmB;WACzB;WACA;WACA;WACA,eAAe;;;UAIT,kBAAkB;WACxB;;WAEA;;WAEA;;WAEA;;WAEA,mBAAmB;;;;;;UAOb;EACf,OAAO;EACP,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;EACV,WAAW;EACX,MAAM;;KAGI,sBAAsB;KACtB,YAAY,aAAa;;KAGzB,gBAAgB,aAAa,YAAY,aAAa;;UAOjD,aAAa;WACnB;WACA,mBAAmB;;UAOb;EACf,MAAM;;;KAII,aAAa,cAAc,eAAe;KAE1C,oBAAoB;KACpB,UAAU,WAAW;;KAGrB,WAAW,UAAU,eAAe,WAAW;;;;;;;KAQ/C,gBAAgB,KAAK,oBAAoB,KAAK;;KAG9C,iBAAiB,gBAAgB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-Bo_BrmvK.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;;;;;;;;;UAkBiB;;WAEN;;WAEA;;WAEA;;;;;;;UAQM;WACN,OAAO;WACP,KAAK;;;UAIC;WACN;WACA,UAAU;;;UAQJ,iBAAiB;WACvB;WACA;;;UAIM,qBAAqB;WAC3B;;WAEA;;WAEA;;;UAIM,qBAAqB;WAC3B;WACA;WACA;;;UAIM,oBAAoB;WAC1B;WACA;;WAEA;WACA;;WAEA;;;UAIM,gBAAgB;WACtB;WACA;;;UAIM,mBAAmB;WACzB;WACA;;;UAIM,kBAAkB;WACxB;WACA;;WAEA;;WAEA;;;UAIM,iBAAiB;WACvB;WACA;;WAEA;;;UAIM,oBAAoB;WAC1B;WACA;;;;;;;;UASM,mBAAmB;WACzB;;WAEA;WACA;WACA;WACA;WACA;;WAEA;;WAEA,mBAAmB;;;;;;UAOb;EACf,MAAM;EACN,cAAc;EACd,cAAc;EACd,aAAa;EACb,SAAS;EACT,YAAY;EACZ,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;;KAGF,uBAAuB;KACvB,aAAa,cAAc;;UAOtB,mBAAmB;WACzB;;WAEA;WACA,mBAAmB;;;UAIb,iBAAiB;WACvB;;;;;WAKA;;;UAIM,kBAAkB;WACxB;WACA;;WAEA;;WAEA,gBAAgB;;;UAIV,kBAAkB;WACxB;WACA;;;UAIM,iBAAiB;WACvB;WACA,gBAAgB;;;UAIV,mBAAmB;WACzB;WACA;WACA;WACA,eAAe;;;UAIT,kBAAkB;WACxB;;WAEA;;WAEA;;WAEA;;WAEA,mBAAmB;;;;;;UAOb;EACf,OAAO;EACP,WAAW;EACX,UAAU;EACV,OAAO;EACP,UAAU;EACV,WAAW;EACX,MAAM;;KAGI,sBAAsB;KACtB,YAAY,aAAa;;KAGzB,gBAAgB,aAAa,YAAY,aAAa;;UAOjD,aAAa;WACnB;WACA,mBAAmB;;UAOb;EACf,MAAM;;;KAII,aAAa,cAAc,eAAe;KAE1C,oBAAoB;KACpB,UAAU,WAAW;;KAGrB,WAAW,UAAU,eAAe,WAAW;;;;;;;KAQ/C,gBAAgB,KAAK,oBAAoB,KAAK;;KAG9C,iBAAiB,gBAAgB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-DVwlUtla.d.cts","names":[],"sources":["../src/core/position.ts","../src/inline/types.ts"],"mappings":";;;;UAUiB;WACN;WACA;WACA;;;;;;;;;;UCEM;;WAEN;;WAEA,QAAQ;;WAER,uBAAuB;WACvB,WACP,gBACA,QAAQ,QACR,sCACY;;;UAIC;WACN,MAAM;WACN;;;;;;;;KASC,mBACV,gBACA,eACA,KAAK,kBACF,OAAO,OAAO;;UAGF,2BAA2B;;WAEjC,aAAa;;;;;;KAOZ,eAAe,eAAe,KAAK,uBAAuB,OAAO,OAAO;;;;;;;UAQnE;;WAEN,sBAAsB;;WAEtB,wBAAwB"}
|