@riebeckite/plugin-permalink 0.0.13 → 0.0.15
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 +3 -2
- package/README_ja.md +157 -160
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -961,5 +961,6 @@ permalink({
|
|
|
961
961
|
|
|
962
962
|
# See also
|
|
963
963
|
|
|
964
|
-
- [Plugin guide](../../../docs/en/reference/plugin-api.md)
|
|
965
|
-
- [Content system](../../../docs/en/framework/content-system.md)
|
|
964
|
+
- [Plugin guide](../../../docs/en/docs/reference/plugin-api.md)
|
|
965
|
+
- [Content system](../../../docs/en/docs/framework/content-system.md)
|
|
966
|
+
|
package/README_ja.md
CHANGED
|
@@ -4,7 +4,7 @@ Riebeckite の記事に対して、公開 URL(permalink)を決定するプ
|
|
|
4
4
|
|
|
5
5
|
ファイル構造をそのまま URL に使う代わりに、frontmatter の ID、ファイルパスから導出した ID、独自の resolver などを使って公開 URL を構築できます。
|
|
6
6
|
|
|
7
|
-
旧 URL
|
|
7
|
+
旧 URL から canonical URL へのリダイレクトも同じ設定から登録できます。
|
|
8
8
|
|
|
9
9
|
[English](./README.md)
|
|
10
10
|
|
|
@@ -88,17 +88,17 @@ ContentPublicLocation
|
|
|
88
88
|
└─ metadata
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
Core は返された `permalink`
|
|
91
|
+
Core は返された `permalink` を canonical URL として扱います。
|
|
92
92
|
|
|
93
93
|
その URL は、Wikilink、Backlinks、Search、Content Graph、SEO canonical、Sitemap、RSS / Atom / JSON Feed などから共通して参照されます。
|
|
94
94
|
|
|
95
|
-
Permalink Pluginを使用しない場合も、Core
|
|
95
|
+
Permalink Plugin を使用しない場合も、Core の resolver `resolveDefaultContentLocation` が `index` を `/`、それ以外を `/{slug}` に解決します。これはフォールバックではなく、Core の標準方針です。
|
|
96
96
|
|
|
97
97
|
---
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
## Frontmatter
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
### ID
|
|
102
102
|
|
|
103
103
|
既定では `id` を読み取ります。
|
|
104
104
|
|
|
@@ -124,9 +124,9 @@ uid: hello-world
|
|
|
124
124
|
|
|
125
125
|
`frontmatter` が指定するのはトップレベルのフィールドです。
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
### Permalink override
|
|
128
128
|
|
|
129
|
-
特定の記事だけURLを直接指定できます。
|
|
129
|
+
特定の記事だけ URL を直接指定できます。
|
|
130
130
|
|
|
131
131
|
```md
|
|
132
132
|
---
|
|
@@ -135,9 +135,9 @@ permalink: /about
|
|
|
135
135
|
---
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
この場合、通常のIDからのパス生成より `/about` が優先されます。
|
|
138
|
+
この場合、通常の ID からのパス生成より `/about` が優先されます。
|
|
139
139
|
|
|
140
|
-
`id` と公開URLは別の概念なので、
|
|
140
|
+
`id` と公開 URL は別の概念なので、
|
|
141
141
|
|
|
142
142
|
```text
|
|
143
143
|
ID
|
|
@@ -159,9 +159,9 @@ permalink({
|
|
|
159
159
|
});
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
### Redirects
|
|
163
163
|
|
|
164
|
-
旧URLもfrontmatterから指定できます。
|
|
164
|
+
旧 URL も frontmatter から指定できます。
|
|
165
165
|
|
|
166
166
|
```md
|
|
167
167
|
---
|
|
@@ -172,7 +172,7 @@ redirect_from:
|
|
|
172
172
|
---
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
例えば canonical URL が、
|
|
176
176
|
|
|
177
177
|
```text
|
|
178
178
|
/n/hello-world
|
|
@@ -207,30 +207,30 @@ permalink({
|
|
|
207
207
|
|
|
208
208
|
---
|
|
209
209
|
|
|
210
|
-
|
|
210
|
+
## オプション
|
|
211
211
|
|
|
212
212
|
| オプション | 型 | 既定値 | 内容 |
|
|
213
213
|
| --- | --- | --- | --- |
|
|
214
|
-
| `frontmatter` | `string` | `"id"` | IDとして読むトップレベルのfrontmatterフィールド |
|
|
215
|
-
| `id.strategy` | `"frontmatter" \| "hash" \| "frontmatter-or-hash"` | `"frontmatter-or-hash"` | IDの決定方法 |
|
|
216
|
-
| `id.length` | `number` | `12` | ハッシュIDの文字数(6〜43) |
|
|
217
|
-
| `path.mode` | `"flat" \| "preserve" \| "append"` | `"flat"` | IDを公開URLへ配置する方式 |
|
|
218
|
-
| `path.prefix` | `string` | `"/n"` | URL prefix。`"/"
|
|
219
|
-
| `path.trailingSlash` | `boolean` | `false` |
|
|
220
|
-
| `index.collapse` | `boolean` | `true` | `index
|
|
221
|
-
| `override.frontmatter` | `string` | `"permalink"` | URLを直接指定するfrontmatterフィールド |
|
|
222
|
-
| `redirects.frontmatter` | `string` | `"redirect_from"` | 旧URLを指定するfrontmatterフィールド |
|
|
223
|
-
| `redirects.status` | `301 \| 302 \| 307 \| 308` | `308` |
|
|
224
|
-
| `resolveId` | `(content) => string` | — | ID
|
|
225
|
-
| `resolvePath` | `({ content, id }) => string` | — |
|
|
214
|
+
| `frontmatter` | `string` | `"id"` | ID として読むトップレベルの frontmatter フィールド |
|
|
215
|
+
| `id.strategy` | `"frontmatter" \| "hash" \| "frontmatter-or-hash"` | `"frontmatter-or-hash"` | ID の決定方法 |
|
|
216
|
+
| `id.length` | `number` | `12` | ハッシュ ID の文字数(6〜43) |
|
|
217
|
+
| `path.mode` | `"flat" \| "preserve" \| "append"` | `"flat"` | ID を公開 URL へ配置する方式 |
|
|
218
|
+
| `path.prefix` | `string` | `"/n"` | URL prefix。`"/"` または空文字なら prefix なし |
|
|
219
|
+
| `path.trailingSlash` | `boolean` | `false` | canonical URL 末尾へ `/` を付ける |
|
|
220
|
+
| `index.collapse` | `boolean` | `true` | `index` ファイルのパスを collapse する |
|
|
221
|
+
| `override.frontmatter` | `string` | `"permalink"` | URL を直接指定する frontmatter フィールド |
|
|
222
|
+
| `redirects.frontmatter` | `string` | `"redirect_from"` | 旧 URL を指定する frontmatter フィールド |
|
|
223
|
+
| `redirects.status` | `301 \| 302 \| 307 \| 308` | `308` | リダイレクトの HTTP ステータス |
|
|
224
|
+
| `resolveId` | `(content) => string` | — | ID の解決を完全にカスタマイズする |
|
|
225
|
+
| `resolvePath` | `({ content, id }) => string` | — | 公開パスの生成を完全にカスタマイズする |
|
|
226
226
|
|
|
227
227
|
---
|
|
228
228
|
|
|
229
|
-
|
|
229
|
+
## ID strategy
|
|
230
230
|
|
|
231
|
-
|
|
231
|
+
### `frontmatter`
|
|
232
232
|
|
|
233
|
-
frontmatterからIDを取得します。
|
|
233
|
+
frontmatter から ID を取得します。
|
|
234
234
|
|
|
235
235
|
```ts
|
|
236
236
|
permalink({
|
|
@@ -241,9 +241,9 @@ permalink({
|
|
|
241
241
|
});
|
|
242
242
|
```
|
|
243
243
|
|
|
244
|
-
IDが存在しない記事はビルドエラーになります。
|
|
244
|
+
ID が存在しない記事はビルドエラーになります。
|
|
245
245
|
|
|
246
|
-
永続的なURLを明示的に管理したい場合に向いています。
|
|
246
|
+
永続的な URL を明示的に管理したい場合に向いています。
|
|
247
247
|
|
|
248
248
|
```md
|
|
249
249
|
---
|
|
@@ -251,13 +251,13 @@ id: article-123
|
|
|
251
251
|
---
|
|
252
252
|
```
|
|
253
253
|
|
|
254
|
-
ファイルをrename/moveしても、`flat` modeならIDおよびURLを維持できます。
|
|
254
|
+
ファイルを rename/move しても、`flat` の mode なら ID および URL を維持できます。
|
|
255
255
|
|
|
256
256
|
---
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
### `hash`
|
|
259
259
|
|
|
260
|
-
frontmatterを使用せず、ファイルパスからIDを導出します。
|
|
260
|
+
frontmatter を使用せず、ファイルパスから ID を導出します。
|
|
261
261
|
|
|
262
262
|
```ts
|
|
263
263
|
permalink({
|
|
@@ -268,15 +268,15 @@ permalink({
|
|
|
268
268
|
});
|
|
269
269
|
```
|
|
270
270
|
|
|
271
|
-
入力pathは、
|
|
271
|
+
入力 path は、
|
|
272
272
|
|
|
273
273
|
- `\` → `/`
|
|
274
274
|
- 先頭 `/` の除去
|
|
275
|
-
- Unicode NFC正規化
|
|
275
|
+
- Unicode NFC 正規化
|
|
276
276
|
|
|
277
|
-
を行った上でSHA-256へ渡されます。
|
|
277
|
+
を行った上で SHA-256 へ渡されます。
|
|
278
278
|
|
|
279
|
-
結果をbase64url
|
|
279
|
+
結果を base64url として表現し、その先頭 `id.length` 文字を ID として利用します。
|
|
280
280
|
|
|
281
281
|
```text
|
|
282
282
|
notes/flutter/riverpod.md
|
|
@@ -294,13 +294,13 @@ base64url
|
|
|
294
294
|
K7m3Qp8d...
|
|
295
295
|
```
|
|
296
296
|
|
|
297
|
-
同じpathならOSやbuild環境が異なっても同じIDになります。
|
|
297
|
+
同じ path なら OS や build 環境が異なっても同じ ID になります。
|
|
298
298
|
|
|
299
|
-
ただし、pathが入力なのでrename/moveするとIDも変わります。
|
|
299
|
+
ただし、path が入力なので rename/move すると ID も変わります。
|
|
300
300
|
|
|
301
301
|
---
|
|
302
302
|
|
|
303
|
-
|
|
303
|
+
### `frontmatter-or-hash`
|
|
304
304
|
|
|
305
305
|
既定値です。
|
|
306
306
|
|
|
@@ -316,38 +316,38 @@ permalink({
|
|
|
316
316
|
解決順序は、
|
|
317
317
|
|
|
318
318
|
```text
|
|
319
|
-
frontmatter IDあり
|
|
319
|
+
frontmatter ID あり
|
|
320
320
|
↓
|
|
321
321
|
frontmatter ID
|
|
322
322
|
|
|
323
|
-
frontmatter IDなし
|
|
323
|
+
frontmatter ID なし
|
|
324
324
|
↓
|
|
325
325
|
path-derived hash
|
|
326
326
|
```
|
|
327
327
|
|
|
328
|
-
|
|
328
|
+
この順序で解決します。
|
|
329
329
|
|
|
330
|
-
既存Obsidian Vaultを変更せず利用しながら、重要な記事だけ永続IDを与えたい場合に向いています。
|
|
330
|
+
既存 Obsidian Vault を変更せず利用しながら、重要な記事だけ永続 ID を与えたい場合に向いています。
|
|
331
331
|
|
|
332
332
|
---
|
|
333
333
|
|
|
334
|
-
|
|
334
|
+
## ID メタデータ
|
|
335
335
|
|
|
336
|
-
解決されたID
|
|
336
|
+
解決された ID の由来はメタデータから確認できます。
|
|
337
337
|
|
|
338
338
|
| `metadata.idSource` | 意味 |
|
|
339
339
|
| --- | --- |
|
|
340
|
-
| `frontmatter` | frontmatterから取得 |
|
|
341
|
-
| `derived` | path hashから導出 |
|
|
342
|
-
| `custom` | `resolveId
|
|
340
|
+
| `frontmatter` | frontmatter から取得 |
|
|
341
|
+
| `derived` | path hash から導出 |
|
|
342
|
+
| `custom` | `resolveId` から取得 |
|
|
343
343
|
|
|
344
|
-
|
|
344
|
+
手動の `permalink` override は URL を変更しますが、同一性は消しません。frontmatter の ID があれば引き続き記録され(`metadata.idSource` は `frontmatter`)、明示的な ID がない場合のみメタデータは付与されません。override から暗黙の `/{id}` URL を生成することはありません。
|
|
345
345
|
|
|
346
346
|
---
|
|
347
347
|
|
|
348
|
-
|
|
348
|
+
## URL path mode
|
|
349
349
|
|
|
350
|
-
IDの決定方法と、URLの構築方法は独立しています。
|
|
350
|
+
ID の決定方法と、URL の構築方法は独立しています。
|
|
351
351
|
|
|
352
352
|
例えば、
|
|
353
353
|
|
|
@@ -361,7 +361,7 @@ hello-world
|
|
|
361
361
|
|
|
362
362
|
とします。
|
|
363
363
|
|
|
364
|
-
|
|
364
|
+
### `flat`
|
|
365
365
|
|
|
366
366
|
```ts
|
|
367
367
|
path: {
|
|
@@ -376,15 +376,15 @@ path: {
|
|
|
376
376
|
/n/hello-world
|
|
377
377
|
```
|
|
378
378
|
|
|
379
|
-
|
|
379
|
+
ファイルシステムのディレクトリ構造を URL へ含めません。
|
|
380
380
|
|
|
381
|
-
|
|
381
|
+
読み取れない URL を作りたい場合に適しています。
|
|
382
382
|
|
|
383
383
|
---
|
|
384
384
|
|
|
385
|
-
|
|
385
|
+
### `preserve`
|
|
386
386
|
|
|
387
|
-
ディレクトリ構造を残しつつIDを配置します。
|
|
387
|
+
ディレクトリ構造を残しつつ ID を配置します。
|
|
388
388
|
|
|
389
389
|
```ts
|
|
390
390
|
path: {
|
|
@@ -405,9 +405,9 @@ notes/flutter/hello.md
|
|
|
405
405
|
|
|
406
406
|
---
|
|
407
407
|
|
|
408
|
-
|
|
408
|
+
### `append`
|
|
409
409
|
|
|
410
|
-
`append
|
|
410
|
+
`append` も選べます。
|
|
411
411
|
|
|
412
412
|
```ts
|
|
413
413
|
path: {
|
|
@@ -415,15 +415,15 @@ path: {
|
|
|
415
415
|
}
|
|
416
416
|
```
|
|
417
417
|
|
|
418
|
-
|
|
418
|
+
現在の実装では `append` は `preserve` と同じパスを返します。
|
|
419
419
|
|
|
420
|
-
|
|
420
|
+
将来的に別の意味を持たせる場合に備えて mode として分離されています。`append` 固有の挙動を期待する場合は、現在の実装仕様に注意してください。
|
|
421
421
|
|
|
422
422
|
---
|
|
423
423
|
|
|
424
|
-
|
|
424
|
+
## index ファイル
|
|
425
425
|
|
|
426
|
-
`index.collapse
|
|
426
|
+
`index.collapse` によって `index.md` の扱いを変更できます。
|
|
427
427
|
|
|
428
428
|
```ts
|
|
429
429
|
index: {
|
|
@@ -437,27 +437,27 @@ index: {
|
|
|
437
437
|
notes/flutter/index.md
|
|
438
438
|
```
|
|
439
439
|
|
|
440
|
-
ID
|
|
440
|
+
ID が `hello-world` の場合:
|
|
441
441
|
|
|
442
442
|
| 設定 | URL |
|
|
443
443
|
| --- | --- |
|
|
444
444
|
| `flat` | `/n/hello-world` |
|
|
445
445
|
| `preserve` + collapse | `/n/notes/flutter/hello-world` |
|
|
446
|
-
| `preserve` + collapseなし | `/n/notes/flutter/index/hello-world` |
|
|
446
|
+
| `preserve` + `collapse` なし | `/n/notes/flutter/index/hello-world` |
|
|
447
447
|
|
|
448
|
-
`flat
|
|
448
|
+
`flat` ではファイルシステム構造自体を使わないため、`collapse` の影響を受けません。
|
|
449
449
|
|
|
450
450
|
---
|
|
451
451
|
|
|
452
|
-
|
|
452
|
+
## 上級者向け: カスタム resolver
|
|
453
453
|
|
|
454
|
-
|
|
454
|
+
組み込みの strategy では表現できない URL 設計なら、`resolveId` と `resolvePath` を利用できます。
|
|
455
455
|
|
|
456
|
-
Permalink Plugin
|
|
456
|
+
Permalink Plugin の通常設定で十分な場合は、カスタム resolver を使う必要はありません。
|
|
457
457
|
|
|
458
|
-
|
|
458
|
+
### `resolveId`
|
|
459
459
|
|
|
460
|
-
記事から独自IDを生成します。
|
|
460
|
+
記事から独自 ID を生成します。
|
|
461
461
|
|
|
462
462
|
```ts
|
|
463
463
|
permalink({
|
|
@@ -488,13 +488,13 @@ canonical URL
|
|
|
488
488
|
|
|
489
489
|
となります。
|
|
490
490
|
|
|
491
|
-
`resolveId
|
|
491
|
+
`resolveId` の戻り値も組み込み ID と同じ検証を通ります。
|
|
492
492
|
|
|
493
|
-
|
|
493
|
+
不正な ID を返しても検証を通りません。
|
|
494
494
|
|
|
495
|
-
|
|
495
|
+
#### 例: frontmatter を組み合わせる
|
|
496
496
|
|
|
497
|
-
例えばプロジェクト固有のfrontmatterからIDを作る場合:
|
|
497
|
+
例えばプロジェクト固有の frontmatter から ID を作る場合:
|
|
498
498
|
|
|
499
499
|
```md
|
|
500
500
|
---
|
|
@@ -533,13 +533,13 @@ permalink({
|
|
|
533
533
|
/articles/flutter-42
|
|
534
534
|
```
|
|
535
535
|
|
|
536
|
-
|
|
536
|
+
カスタム resolver 内で扱う frontmatter の検証は resolver 側の責務です。
|
|
537
537
|
|
|
538
538
|
---
|
|
539
539
|
|
|
540
|
-
|
|
540
|
+
## 上級者向け: `resolvePath`
|
|
541
541
|
|
|
542
|
-
`resolvePath
|
|
542
|
+
`resolvePath` を使うと、ID を URL のどこへ配置するかを完全に制御できます。
|
|
543
543
|
|
|
544
544
|
```ts
|
|
545
545
|
permalink({
|
|
@@ -561,7 +561,7 @@ permalink({
|
|
|
561
561
|
/articles/hello-world
|
|
562
562
|
```
|
|
563
563
|
|
|
564
|
-
`resolvePath
|
|
564
|
+
`resolvePath` はサイト内の絶対パスを返してください。
|
|
565
565
|
|
|
566
566
|
```text
|
|
567
567
|
/articles/hello OK
|
|
@@ -570,15 +570,15 @@ articles/hello NG
|
|
|
570
570
|
https://example.com NG
|
|
571
571
|
```
|
|
572
572
|
|
|
573
|
-
戻り値はPluginの通常のURL
|
|
573
|
+
戻り値は Plugin の通常の URL 正規化・検証・衝突検出を通ります。
|
|
574
574
|
|
|
575
575
|
---
|
|
576
576
|
|
|
577
|
-
|
|
577
|
+
## `resolveId` と `resolvePath` を組み合わせる
|
|
578
578
|
|
|
579
|
-
両方を指定すると、ID決定とURL構築を完全にカスタマイズできます。
|
|
579
|
+
両方を指定すると、ID 決定と URL 構築を完全にカスタマイズできます。
|
|
580
580
|
|
|
581
|
-
例えば年別URLを作る場合:
|
|
581
|
+
例えば年別 URL を作る場合:
|
|
582
582
|
|
|
583
583
|
```md
|
|
584
584
|
---
|
|
@@ -619,24 +619,24 @@ permalink({
|
|
|
619
619
|
/articles/2026/riebeckite-permalink
|
|
620
620
|
```
|
|
621
621
|
|
|
622
|
-
この場合もRiebeckite内部では最終的に解決されたURL
|
|
622
|
+
この場合も Riebeckite 内部では最終的に解決された URL だけが canonical URL として扱われます。
|
|
623
623
|
|
|
624
624
|
---
|
|
625
625
|
|
|
626
|
-
|
|
626
|
+
## カスタム resolver の使い分け
|
|
627
627
|
|
|
628
628
|
基本的には次の順序で検討してください。
|
|
629
629
|
|
|
630
630
|
```text
|
|
631
|
-
built-in strategyで足りる
|
|
631
|
+
built-in strategy で足りる
|
|
632
632
|
↓
|
|
633
|
-
|
|
633
|
+
通常オプションを使用
|
|
634
634
|
|
|
635
|
-
IDだけ特殊
|
|
635
|
+
ID だけ特殊
|
|
636
636
|
↓
|
|
637
637
|
resolveId
|
|
638
638
|
|
|
639
|
-
URL構造だけ特殊
|
|
639
|
+
URL 構造だけ特殊
|
|
640
640
|
↓
|
|
641
641
|
resolvePath
|
|
642
642
|
|
|
@@ -651,7 +651,7 @@ resolveId + resolvePath
|
|
|
651
651
|
/n/{id}
|
|
652
652
|
```
|
|
653
653
|
|
|
654
|
-
|
|
654
|
+
を作るだけならカスタム resolver は不要です。
|
|
655
655
|
|
|
656
656
|
```ts
|
|
657
657
|
permalink({
|
|
@@ -669,26 +669,26 @@ permalink({
|
|
|
669
669
|
|
|
670
670
|
---
|
|
671
671
|
|
|
672
|
-
|
|
672
|
+
## カスタム resolver でも維持される保証
|
|
673
673
|
|
|
674
|
-
|
|
674
|
+
カスタム resolver を使用しても、Permalink Plugin の以下の処理は維持されます。
|
|
675
675
|
|
|
676
|
-
- ID
|
|
677
|
-
- URL
|
|
678
|
-
- URL
|
|
679
|
-
- ID
|
|
680
|
-
- canonical URL
|
|
681
|
-
-
|
|
682
|
-
-
|
|
683
|
-
- Coreへのcanonical
|
|
676
|
+
- ID の検証
|
|
677
|
+
- URL の正規化
|
|
678
|
+
- URL の検証
|
|
679
|
+
- ID の衝突検出
|
|
680
|
+
- canonical URL の衝突検出
|
|
681
|
+
- リダイレクトの衝突検出
|
|
682
|
+
- 末尾スラッシュの扱い
|
|
683
|
+
- Core への canonical な公開位置の登録
|
|
684
684
|
|
|
685
|
-
|
|
685
|
+
つまりカスタム resolver は Plugin の安全機構を迂回する API ではありません。
|
|
686
686
|
|
|
687
687
|
---
|
|
688
688
|
|
|
689
|
-
|
|
689
|
+
## 手動の permalink との優先順位
|
|
690
690
|
|
|
691
|
-
frontmatter
|
|
691
|
+
frontmatter に手動の permalink がある場合は、通常の ID 解決と path 構築より優先されます。
|
|
692
692
|
|
|
693
693
|
例えば:
|
|
694
694
|
|
|
@@ -699,7 +699,7 @@ permalink: /about
|
|
|
699
699
|
---
|
|
700
700
|
```
|
|
701
701
|
|
|
702
|
-
|
|
702
|
+
とすると、
|
|
703
703
|
|
|
704
704
|
```text
|
|
705
705
|
ID候補
|
|
@@ -711,15 +711,15 @@ Canonical URL
|
|
|
711
711
|
|
|
712
712
|
となります。
|
|
713
713
|
|
|
714
|
-
`resolvePath
|
|
714
|
+
`resolvePath` で別の URL を返す設定があっても、手動の permalink override が優先されます。
|
|
715
715
|
|
|
716
|
-
特殊ページだけURLを固定したい場合に利用できます。
|
|
716
|
+
特殊ページだけ URL を固定したい場合に利用できます。
|
|
717
717
|
|
|
718
718
|
---
|
|
719
719
|
|
|
720
|
-
|
|
720
|
+
## ステートレスな設計
|
|
721
721
|
|
|
722
|
-
Permalink Pluginは永続的なID
|
|
722
|
+
Permalink Plugin は永続的な ID のレジストリを持ちません。
|
|
723
723
|
|
|
724
724
|
以下は作成しません。
|
|
725
725
|
|
|
@@ -733,24 +733,24 @@ KV database
|
|
|
733
733
|
必要な情報は、
|
|
734
734
|
|
|
735
735
|
```text
|
|
736
|
-
Plugin
|
|
736
|
+
Plugin 設定
|
|
737
737
|
+
|
|
738
|
-
|
|
738
|
+
ソースコンテンツ
|
|
739
739
|
```
|
|
740
740
|
|
|
741
741
|
からビルド時に決定されます。
|
|
742
742
|
|
|
743
|
-
そのためCloudflare Workers、CI、別PCなどでも同じ入力から同じURLを生成できます。
|
|
743
|
+
そのため Cloudflare Workers、CI、別 PC などでも同じ入力から同じ URL を生成できます。
|
|
744
744
|
|
|
745
|
-
`hash` strategyではpath
|
|
745
|
+
`hash` strategy では path が同一性を決める入力になるため、rename/move によって URL が変化します。
|
|
746
746
|
|
|
747
|
-
rename/move後もURLを維持したい記事にはfrontmatter IDを利用してください。
|
|
747
|
+
rename/move 後も URL を維持したい記事には frontmatter ID を利用してください。
|
|
748
748
|
|
|
749
749
|
---
|
|
750
750
|
|
|
751
|
-
|
|
751
|
+
## Rename / Move 時の挙動
|
|
752
752
|
|
|
753
|
-
URLの安定性はID strategyとpath modeの組み合わせによって変わります。
|
|
753
|
+
URL の安定性は ID strategy と path mode の組み合わせによって変わります。
|
|
754
754
|
|
|
755
755
|
| ID | Path mode | Rename | Move |
|
|
756
756
|
| --- | --- | --- | --- |
|
|
@@ -761,7 +761,7 @@ URLの安定性はID strategyとpath modeの組み合わせによって変わり
|
|
|
761
761
|
| hash | preserve | 変更 | 変更 |
|
|
762
762
|
| hash | append | 変更 | 変更 |
|
|
763
763
|
|
|
764
|
-
永続的なURLが必要なら、
|
|
764
|
+
永続的な URL が必要なら、
|
|
765
765
|
|
|
766
766
|
```ts
|
|
767
767
|
permalink({
|
|
@@ -777,7 +777,7 @@ permalink({
|
|
|
777
777
|
|
|
778
778
|
が最も明示的です。
|
|
779
779
|
|
|
780
|
-
既存Vaultへの変更を最小化したい場合は、
|
|
780
|
+
既存 Vault への変更を最小化したい場合は、
|
|
781
781
|
|
|
782
782
|
```ts
|
|
783
783
|
id: {
|
|
@@ -789,50 +789,50 @@ id: {
|
|
|
789
789
|
|
|
790
790
|
---
|
|
791
791
|
|
|
792
|
-
|
|
792
|
+
## 検証
|
|
793
793
|
|
|
794
|
-
|
|
794
|
+
### ID
|
|
795
795
|
|
|
796
|
-
ID
|
|
796
|
+
ID は URL の 1 つのパスセグメントとして扱われます。
|
|
797
797
|
|
|
798
798
|
以下はエラーになります。
|
|
799
799
|
|
|
800
800
|
- 空文字列
|
|
801
|
-
-
|
|
802
|
-
-
|
|
803
|
-
-
|
|
801
|
+
- `/` を含む
|
|
802
|
+
- `#` を含む
|
|
803
|
+
- `?` を含む
|
|
804
804
|
- 空白を含む
|
|
805
|
-
-
|
|
805
|
+
- 正しくデコードできないパーセントエンコード
|
|
806
806
|
|
|
807
|
-
Custom `resolveId
|
|
807
|
+
Custom `resolveId` の結果も同じ検証を受けます。
|
|
808
808
|
|
|
809
|
-
|
|
809
|
+
### Permalink
|
|
810
810
|
|
|
811
|
-
Permalink
|
|
811
|
+
Permalink とリダイレクトはサイト内の絶対 path である必要があります。
|
|
812
812
|
|
|
813
813
|
以下は許可されません。
|
|
814
814
|
|
|
815
|
-
-
|
|
816
|
-
-
|
|
817
|
-
-
|
|
815
|
+
- 相対パス
|
|
816
|
+
- クエリ文字列
|
|
817
|
+
- フラグメント
|
|
818
818
|
- `\`
|
|
819
819
|
- 不正な `//`
|
|
820
|
-
- 外部URL
|
|
820
|
+
- 外部 URL
|
|
821
821
|
|
|
822
|
-
Custom `resolvePath
|
|
822
|
+
Custom `resolvePath` の結果も同じ検証を受けます。
|
|
823
823
|
|
|
824
824
|
---
|
|
825
825
|
|
|
826
|
-
|
|
826
|
+
## 衝突検出
|
|
827
827
|
|
|
828
|
-
Permalink Pluginはビルド時に衝突を検出します。
|
|
828
|
+
Permalink Plugin はビルド時に衝突を検出します。
|
|
829
829
|
|
|
830
830
|
対象:
|
|
831
831
|
|
|
832
832
|
- ID ↔ ID
|
|
833
833
|
- canonical URL ↔ canonical URL
|
|
834
|
-
- canonical URL ↔
|
|
835
|
-
-
|
|
834
|
+
- canonical URL ↔ リダイレクト
|
|
835
|
+
- リダイレクト ↔ リダイレクト
|
|
836
836
|
|
|
837
837
|
例えば:
|
|
838
838
|
|
|
@@ -858,21 +858,21 @@ b.md redirect
|
|
|
858
858
|
|
|
859
859
|
もエラーです。
|
|
860
860
|
|
|
861
|
-
|
|
861
|
+
自動的に接尾辞を付けて回避することはありません。
|
|
862
862
|
|
|
863
|
-
これにより、ビルド順序によってURLが変化することを防ぎます。
|
|
863
|
+
これにより、ビルド順序によって URL が変化することを防ぎます。
|
|
864
864
|
|
|
865
865
|
---
|
|
866
866
|
|
|
867
|
-
|
|
867
|
+
## Inspect
|
|
868
868
|
|
|
869
|
-
解決結果はRiebeckiteのinspect機能から確認できます。
|
|
869
|
+
解決結果は Riebeckite の inspect 機能から確認できます。
|
|
870
870
|
|
|
871
871
|
```sh
|
|
872
872
|
riebeckite inspect content --list
|
|
873
873
|
```
|
|
874
874
|
|
|
875
|
-
Permalink Pluginが有効な場合、記事ごとのID、ID
|
|
875
|
+
Permalink Plugin が有効な場合、記事ごとの ID、ID の出典、permalink を確認できます。
|
|
876
876
|
|
|
877
877
|
例えば:
|
|
878
878
|
|
|
@@ -882,35 +882,35 @@ notes/a.md K7m3Qp8d... derived /n/K7m3Qp8d...
|
|
|
882
882
|
notes/about.md about frontmatter /about
|
|
883
883
|
```
|
|
884
884
|
|
|
885
|
-
実際の表示形式はCLIバージョンによって異なる場合があります。
|
|
885
|
+
実際の表示形式は CLI バージョンによって異なる場合があります。
|
|
886
886
|
|
|
887
887
|
---
|
|
888
888
|
|
|
889
|
-
|
|
889
|
+
## 主なエクスポート
|
|
890
890
|
|
|
891
|
-
|
|
891
|
+
### 関数
|
|
892
892
|
|
|
893
893
|
- `permalink(options?)`
|
|
894
894
|
- `permalinkPlugin(options?)`
|
|
895
895
|
|
|
896
|
-
どちらもPermalink Pluginを生成します。
|
|
896
|
+
どちらも Permalink Plugin を生成します。
|
|
897
897
|
|
|
898
|
-
|
|
898
|
+
### 型
|
|
899
899
|
|
|
900
900
|
- `PermalinkOptions`
|
|
901
901
|
- `PermalinkIdStrategy`
|
|
902
902
|
- `PermalinkPathMode`
|
|
903
903
|
- `RedirectStatus`
|
|
904
904
|
|
|
905
|
-
|
|
905
|
+
カスタム resolver を書く場合は、公開されている型を使って設定を型安全に書けます。
|
|
906
906
|
|
|
907
907
|
---
|
|
908
908
|
|
|
909
|
-
|
|
909
|
+
## 設定例
|
|
910
910
|
|
|
911
|
-
|
|
911
|
+
### 既存 Obsidian Vault 向け
|
|
912
912
|
|
|
913
|
-
frontmatter
|
|
913
|
+
frontmatter 変更を必須とせず、URL からファイルシステム構造を隠します。
|
|
914
914
|
|
|
915
915
|
```ts
|
|
916
916
|
permalink({
|
|
@@ -926,7 +926,7 @@ permalink({
|
|
|
926
926
|
});
|
|
927
927
|
```
|
|
928
928
|
|
|
929
|
-
|
|
929
|
+
### 完全に明示的な永続 URL
|
|
930
930
|
|
|
931
931
|
```ts
|
|
932
932
|
permalink({
|
|
@@ -941,9 +941,9 @@ permalink({
|
|
|
941
941
|
});
|
|
942
942
|
```
|
|
943
943
|
|
|
944
|
-
すべての記事にfrontmatter IDが必要になります。
|
|
944
|
+
すべての記事に frontmatter ID が必要になります。
|
|
945
945
|
|
|
946
|
-
|
|
946
|
+
### ディレクトリ構造を残す
|
|
947
947
|
|
|
948
948
|
```ts
|
|
949
949
|
permalink({
|
|
@@ -957,7 +957,7 @@ permalink({
|
|
|
957
957
|
});
|
|
958
958
|
```
|
|
959
959
|
|
|
960
|
-
|
|
960
|
+
### 独自 URL 設計
|
|
961
961
|
|
|
962
962
|
```ts
|
|
963
963
|
permalink({
|
|
@@ -975,11 +975,8 @@ permalink({
|
|
|
975
975
|
|
|
976
976
|
---
|
|
977
977
|
|
|
978
|
-
|
|
978
|
+
## 関連資料
|
|
979
979
|
|
|
980
|
-
- [プラグインシステム](../../../docs/ja/reference/plugin-api.md)
|
|
981
|
-
- [コンテンツシステム](../../../docs/ja/framework/content-system.md)
|
|
980
|
+
- [プラグインシステム](../../../docs/ja/docs/reference/plugin-api.md)
|
|
981
|
+
- [コンテンツシステム](../../../docs/ja/docs/framework/content-system.md)
|
|
982
982
|
|
|
983
|
-
## ????
|
|
984
|
-
|
|
985
|
-
- [?????????](../../../docs/ja/reference/plugin-api.md)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riebeckite/plugin-permalink",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"yaml": "^2.9.0",
|
|
18
|
-
"@riebeckite/core": "0.0.
|
|
18
|
+
"@riebeckite/core": "0.0.15"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"tsx": "^4.22.4",
|
|
22
|
-
"@riebeckite/test": "0.0.
|
|
22
|
+
"@riebeckite/test": "0.0.15"
|
|
23
23
|
},
|
|
24
24
|
"publishConfig": {
|
|
25
25
|
"access": "public"
|