emdash-emit 0.1.14 → 0.1.16
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/CHANGELOG.md +96 -1
- package/README.md +259 -188
- package/dist/bin/emit.d.ts.map +1 -1
- package/dist/bin/emit.js +2 -0
- package/dist/bin/emit.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +6 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/media.d.ts +4 -0
- package/dist/cli/commands/media.d.ts.map +1 -0
- package/dist/cli/commands/media.js +128 -0
- package/dist/cli/commands/media.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +32 -0
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +136 -9
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +18 -0
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +16 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/client/media.d.ts.map +1 -1
- package/dist/client/media.js +16 -5
- package/dist/client/media.js.map +1 -1
- package/dist/db/cache.d.ts +19 -4
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +127 -16
- package/dist/db/cache.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +7 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
- package/dist/mcp/tools/sync-doctor.js +12 -0
- package/dist/mcp/tools/sync-doctor.js.map +1 -1
- package/dist/mcp/tools/sync-media-search.d.ts +4 -0
- package/dist/mcp/tools/sync-media-search.d.ts.map +1 -0
- package/dist/mcp/tools/sync-media-search.js +102 -0
- package/dist/mcp/tools/sync-media-search.js.map +1 -0
- package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
- package/dist/mcp/tools/sync-pull.js +85 -13
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +5 -0
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +6 -2
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/sync/delete.d.ts +2 -1
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +6 -19
- package/dist/sync/delete.js.map +1 -1
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +18 -2
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/doctor.d.ts +27 -1
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +309 -26
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/guards.d.ts +45 -0
- package/dist/sync/guards.d.ts.map +1 -0
- package/dist/sync/guards.js +236 -0
- package/dist/sync/guards.js.map +1 -0
- package/dist/sync/media/body_scan.d.ts +15 -0
- package/dist/sync/media/body_scan.d.ts.map +1 -0
- package/dist/sync/media/body_scan.js +132 -0
- package/dist/sync/media/body_scan.js.map +1 -0
- package/dist/sync/media/companions.d.ts +32 -0
- package/dist/sync/media/companions.d.ts.map +1 -0
- package/dist/sync/media/companions.js +260 -0
- package/dist/sync/media/companions.js.map +1 -0
- package/dist/sync/media/index.d.ts +9 -0
- package/dist/sync/media/index.d.ts.map +1 -0
- package/dist/sync/media/index.js +9 -0
- package/dist/sync/media/index.js.map +1 -0
- package/dist/sync/media/mirror_item.d.ts +27 -0
- package/dist/sync/media/mirror_item.d.ts.map +1 -0
- package/dist/sync/media/mirror_item.js +207 -0
- package/dist/sync/media/mirror_item.js.map +1 -0
- package/dist/sync/media/naming_mirror.d.ts +36 -0
- package/dist/sync/media/naming_mirror.d.ts.map +1 -0
- package/dist/sync/media/naming_mirror.js +143 -0
- package/dist/sync/media/naming_mirror.js.map +1 -0
- package/dist/sync/media/pull_article.d.ts +37 -0
- package/dist/sync/media/pull_article.d.ts.map +1 -0
- package/dist/sync/media/pull_article.js +273 -0
- package/dist/sync/media/pull_article.js.map +1 -0
- package/dist/sync/media/pull_library.d.ts +12 -0
- package/dist/sync/media/pull_library.d.ts.map +1 -0
- package/dist/sync/media/pull_library.js +255 -0
- package/dist/sync/media/pull_library.js.map +1 -0
- package/dist/sync/media/remote_index.d.ts +49 -0
- package/dist/sync/media/remote_index.d.ts.map +1 -0
- package/dist/sync/media/remote_index.js +241 -0
- package/dist/sync/media/remote_index.js.map +1 -0
- package/dist/sync/media/types.d.ts +237 -0
- package/dist/sync/media/types.d.ts.map +1 -0
- package/dist/sync/media/types.js +11 -0
- package/dist/sync/media/types.js.map +1 -0
- package/dist/sync/media.d.ts +1 -74
- package/dist/sync/media.d.ts.map +1 -1
- package/dist/sync/media.js +1 -592
- package/dist/sync/media.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +23 -0
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +85 -1
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/preflight.d.ts +1 -1
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +129 -17
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull.d.ts +19 -0
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +169 -15
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts +7 -0
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +37 -10
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +4 -0
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +68 -4
- package/dist/sync/status.js.map +1 -1
- package/dist/utils/config.d.ts +25 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +28 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +15 -4
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/media-body-refs.d.ts +81 -0
- package/dist/utils/media-body-refs.d.ts.map +1 -0
- package/dist/utils/media-body-refs.js +240 -0
- package/dist/utils/media-body-refs.js.map +1 -0
- package/dist/utils/media-refs.d.ts +44 -0
- package/dist/utils/media-refs.d.ts.map +1 -0
- package/dist/utils/media-refs.js +101 -0
- package/dist/utils/media-refs.js.map +1 -0
- package/dist/utils/naming.d.ts +31 -0
- package/dist/utils/naming.d.ts.map +1 -1
- package/dist/utils/naming.js +58 -0
- package/dist/utils/naming.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** Canonical root-relative media route prefix EmDash writes into Portable Text image blocks. */
|
|
2
|
+
export declare const MEDIA_FILE_ROUTE_PREFIX = "/_emdash/api/media/file/";
|
|
3
|
+
/** Workspace-relative directory a mirrored asset lives in. */
|
|
4
|
+
export declare const MEDIA_DIR_PREFIX = "media/";
|
|
5
|
+
/** Extracts the storageKey from a canonical `/_emdash/api/media/file/<storageKey>` URL. */
|
|
6
|
+
export declare function storageKeyFromCanonicalUrl(url: string): string | null;
|
|
7
|
+
/** Reports whether a Markdown image URL already carries the canonical EmDash media file route. */
|
|
8
|
+
export declare function isCanonicalMediaUrl(url: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Reports whether a Markdown image URL is a reference into `media/` — either workspace-relative (`media/<key>`)
|
|
11
|
+
* or spelled from the article's own directory (`../../media/<key>`). Deliberately strict so an arbitrary
|
|
12
|
+
* hand-written path (`./hero.png`, `../uploads/x.jpg`) or a staging draft (`media/drafts/x.png`) is never
|
|
13
|
+
* mistaken for a canonicalized local reference.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isLocalMediaRef(url: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Rewrites canonical body image URLs into local mirror references.
|
|
18
|
+
*
|
|
19
|
+
* Only a standalone Markdown image line whose URL is the canonical media route AND whose storageKey names an
|
|
20
|
+
* existing file under `media/` is rewritten. Anything else — an external `https://` src, a data URL, a
|
|
21
|
+
* reference whose asset is not mirrored, an inline image inside a paragraph, an opaque EmDash block fence —
|
|
22
|
+
* is left exactly as it arrived, so the transform never invents a broken local link and never rewrites a line
|
|
23
|
+
* Emit's push guards would refuse to restore.
|
|
24
|
+
*
|
|
25
|
+
* A line that already carries a local mirror reference is normalized rather than skipped: its storageKey is
|
|
26
|
+
* recovered through `storageKeyFromMirrorRef` and rewritten into this function's own spelling, so re-localizing
|
|
27
|
+
* a document is idempotent and a file written at another depth (a legacy workspace ref, or an article moved
|
|
28
|
+
* between `draft/` and `published/`) converges on the requested form instead of being reported as an edit.
|
|
29
|
+
*
|
|
30
|
+
* When `articleRelPath` is supplied the reference is spelled relative to that article's own directory
|
|
31
|
+
* (`../../media/<storageKey>` for `posts/draft/…`), which is what lets a Markdown preview resolve the mirror
|
|
32
|
+
* offline. Without it the reference stays workspace-relative (`media/<storageKey>`), the spelling older
|
|
33
|
+
* workspaces carry on disk.
|
|
34
|
+
*/
|
|
35
|
+
export declare function canonicalToLocalMediaRefs(body: string, options: {
|
|
36
|
+
mediaDir: string;
|
|
37
|
+
fs: {
|
|
38
|
+
existsSync(p: string): boolean;
|
|
39
|
+
};
|
|
40
|
+
articleRelPath?: string;
|
|
41
|
+
}): string;
|
|
42
|
+
/**
|
|
43
|
+
* Resolves a local mirror reference back to its storageKey.
|
|
44
|
+
*
|
|
45
|
+
* A reference that spells a storageKey outright (`media/<storageKey>` or the article-relative
|
|
46
|
+
* `../../media/<storageKey>`) is returned verbatim: the key names its own mirror, so no lookup is needed. Any
|
|
47
|
+
* other name — a `<stem>--<mediaId>` collision suffix or a truncated stem — is recovered by asking
|
|
48
|
+
* `candidateStorageKeys`, the storageKeys Emit has confirmed through `media_state` and companion YAML, which
|
|
49
|
+
* one sanitizes to that stem. A reference no confirmed mirror owns yields null, so a hand-written path still
|
|
50
|
+
* reaches the push guards instead of being silently rewritten.
|
|
51
|
+
*/
|
|
52
|
+
export declare function storageKeyFromMirrorRef(rawPath: string, candidateStorageKeys: Iterable<string>): string | null;
|
|
53
|
+
/**
|
|
54
|
+
* Builds the `../../` depth an article at `articleRelPath` needs to reach `media/` from its own directory,
|
|
55
|
+
* matching the prefix the draft-image guards already accept.
|
|
56
|
+
*/
|
|
57
|
+
export declare function mediaRefPrefixForArticle(articleRelPath: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Chooses which local spelling a Markdown document should carry on disk.
|
|
60
|
+
*
|
|
61
|
+
* The canonical `/_emdash/api/media/file/<storageKey>` URL is what every baseline, cache hash and remote payload
|
|
62
|
+
* records; only the file an editor reads may be spelled locally. This helper decides that spelling from what
|
|
63
|
+
* the workspace already holds: a fresh write prefers the article-relative form (`../../media/<storageKey>`) so
|
|
64
|
+
* a Markdown preview resolves the mirror offline, while a document already written in the depth-free legacy form
|
|
65
|
+
* (`preferLegacyRef`, read back from disk) is reproduced in that same form. Reproducing the disk's own spelling
|
|
66
|
+
* is what keeps `sync_state.local_hash` and an unchanged article's diff honest — re-spelling a file the user
|
|
67
|
+
* never edited would report a media rewrite nobody made.
|
|
68
|
+
*
|
|
69
|
+
* A storageKey with no mirrored binary under `media/` stays canonical in every mode, so the transform can never
|
|
70
|
+
* invent a broken local link.
|
|
71
|
+
*/
|
|
72
|
+
export declare function localizeArticleMediaRefs(body: string, options: {
|
|
73
|
+
workspaceRoot: string;
|
|
74
|
+
articleRelPath: string;
|
|
75
|
+
fs: {
|
|
76
|
+
existsSync(p: string): boolean;
|
|
77
|
+
};
|
|
78
|
+
/** Reproduce the depth-free `media/<storageKey>` spelling instead of preferring the article-relative one. */
|
|
79
|
+
preferLegacyRef?: boolean;
|
|
80
|
+
}): string;
|
|
81
|
+
//# sourceMappingURL=media-body-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-body-refs.d.ts","sourceRoot":"","sources":["../../src/utils/media-body-refs.ts"],"names":[],"mappings":"AA8CA,gGAAgG;AAChG,eAAO,MAAM,uBAAuB,6BAA6B,CAAC;AAElE,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAmBzC,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrE;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AASD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE;QAAE,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,MAAM,CA+BR;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,GACrC,MAAM,GAAG,IAAI,CAsBf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAIvE;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE;QAAE,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACvC,6GAA6G;IAC7G,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACA,MAAM,CAiBR"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2026 SPORT-SERVICE RS★R
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
* in the Software without restriction, including without limitation the rights
|
|
7
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
* furnished to do so, subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
* SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Local Markdown body image references vs the canonical remote form.
|
|
24
|
+
*
|
|
25
|
+
* A body image has two spellings of the same asset:
|
|
26
|
+
*
|
|
27
|
+
* canonical `` — what EmDash stores in Portable Text and
|
|
28
|
+
* what the live site serves
|
|
29
|
+
* local `` — a reference spelled from the article's own
|
|
30
|
+
* directory, resolving to the mirrored file under
|
|
31
|
+
* `media/` at the workspace root
|
|
32
|
+
*
|
|
33
|
+
* The local spelling exists so an editor preview (VS Code, Obsidian) renders the image from the mirror. It is
|
|
34
|
+
* only ever a disk form: `base_snapshots.bodyMarkdown` and every payload sent to EmDash keep the canonical
|
|
35
|
+
* URL, because the baseline must stay byte-identical to what a remote pull writes.
|
|
36
|
+
*
|
|
37
|
+
* The depth is derived from the article's own path (`mediaRefPrefixForArticle`), so an article under
|
|
38
|
+
* `<collection>/draft|published/` carries `../../` while one at the workspace root carries `../`. That makes
|
|
39
|
+
* the link resolvable from the file that contains it, which a depth-free reference is not. The older depth-free
|
|
40
|
+
* form (`media/<storageKey>`) is still accepted wherever a local reference is read — workspaces built with it
|
|
41
|
+
* are re-spelled on the next pull rather than reported as edits.
|
|
42
|
+
*/
|
|
43
|
+
import { storageKeyToMarkdownRef } from './naming.js';
|
|
44
|
+
/** Canonical root-relative media route prefix EmDash writes into Portable Text image blocks. */
|
|
45
|
+
export const MEDIA_FILE_ROUTE_PREFIX = '/_emdash/api/media/file/';
|
|
46
|
+
/** Workspace-relative directory a mirrored asset lives in. */
|
|
47
|
+
export const MEDIA_DIR_PREFIX = 'media/';
|
|
48
|
+
const CANONICAL_MEDIA_URL_REGEX = /(?:^|\/)media\/file\/([^?#\s)]+)/;
|
|
49
|
+
/** Image extensions a storageKey may carry, matching the mirror naming rule. */
|
|
50
|
+
const STORAGE_KEY_EXTENSION = /\.(jpg|jpeg|png|gif|webp|avif|svg)$/i;
|
|
51
|
+
/**
|
|
52
|
+
* A storageKey names its mirror outright: one path segment that is itself an image file. A reference may also
|
|
53
|
+
* carry the deterministic `<stem>--<mediaId>` collision suffix, which still names a real asset. An article may
|
|
54
|
+
* spell that mirror relative to its own directory (`../../media/<key>`), so leading `../` / `./` segments are
|
|
55
|
+
* part of the accepted shape — but nothing deeper than `media/` is: a staging draft (`media/drafts/x.png`) or
|
|
56
|
+
* an unrelated folder (`../../uploads/x.jpg`) is not a canonicalized local reference.
|
|
57
|
+
*/
|
|
58
|
+
const LOCAL_MEDIA_REF_REGEX = /^(?:\.\.\/|\.\/)*media\/([^/?#\s]+)$/;
|
|
59
|
+
/** `storageKeyFromMirrorRef` needs no candidate list when the reference spells its storageKey outright. */
|
|
60
|
+
const EMPTY_STORAGE_KEY_CANDIDATES = new Set();
|
|
61
|
+
/** Extracts the storageKey from a canonical `/_emdash/api/media/file/<storageKey>` URL. */
|
|
62
|
+
export function storageKeyFromCanonicalUrl(url) {
|
|
63
|
+
const match = url.match(CANONICAL_MEDIA_URL_REGEX);
|
|
64
|
+
if (!match)
|
|
65
|
+
return null;
|
|
66
|
+
const key = match[1].trim();
|
|
67
|
+
return key.length > 0 ? key : null;
|
|
68
|
+
}
|
|
69
|
+
/** Reports whether a Markdown image URL already carries the canonical EmDash media file route. */
|
|
70
|
+
export function isCanonicalMediaUrl(url) {
|
|
71
|
+
return storageKeyFromCanonicalUrl(url) !== null;
|
|
72
|
+
}
|
|
73
|
+
/** The final path segment of a reference, or null when it carries no usable name. */
|
|
74
|
+
function refBasename(url) {
|
|
75
|
+
const match = url.trim().match(LOCAL_MEDIA_REF_REGEX);
|
|
76
|
+
if (!match)
|
|
77
|
+
return null;
|
|
78
|
+
return match[1];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Reports whether a Markdown image URL is a reference into `media/` — either workspace-relative (`media/<key>`)
|
|
82
|
+
* or spelled from the article's own directory (`../../media/<key>`). Deliberately strict so an arbitrary
|
|
83
|
+
* hand-written path (`./hero.png`, `../uploads/x.jpg`) or a staging draft (`media/drafts/x.png`) is never
|
|
84
|
+
* mistaken for a canonicalized local reference.
|
|
85
|
+
*/
|
|
86
|
+
export function isLocalMediaRef(url) {
|
|
87
|
+
const name = refBasename(url);
|
|
88
|
+
return name !== null && STORAGE_KEY_EXTENSION.test(name);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Rewrites canonical body image URLs into local mirror references.
|
|
92
|
+
*
|
|
93
|
+
* Only a standalone Markdown image line whose URL is the canonical media route AND whose storageKey names an
|
|
94
|
+
* existing file under `media/` is rewritten. Anything else — an external `https://` src, a data URL, a
|
|
95
|
+
* reference whose asset is not mirrored, an inline image inside a paragraph, an opaque EmDash block fence —
|
|
96
|
+
* is left exactly as it arrived, so the transform never invents a broken local link and never rewrites a line
|
|
97
|
+
* Emit's push guards would refuse to restore.
|
|
98
|
+
*
|
|
99
|
+
* A line that already carries a local mirror reference is normalized rather than skipped: its storageKey is
|
|
100
|
+
* recovered through `storageKeyFromMirrorRef` and rewritten into this function's own spelling, so re-localizing
|
|
101
|
+
* a document is idempotent and a file written at another depth (a legacy workspace ref, or an article moved
|
|
102
|
+
* between `draft/` and `published/`) converges on the requested form instead of being reported as an edit.
|
|
103
|
+
*
|
|
104
|
+
* When `articleRelPath` is supplied the reference is spelled relative to that article's own directory
|
|
105
|
+
* (`../../media/<storageKey>` for `posts/draft/…`), which is what lets a Markdown preview resolve the mirror
|
|
106
|
+
* offline. Without it the reference stays workspace-relative (`media/<storageKey>`), the spelling older
|
|
107
|
+
* workspaces carry on disk.
|
|
108
|
+
*/
|
|
109
|
+
export function canonicalToLocalMediaRefs(body, options) {
|
|
110
|
+
const prefix = options.articleRelPath
|
|
111
|
+
? `${mediaRefPrefixForArticle(options.articleRelPath)}${MEDIA_DIR_PREFIX}`
|
|
112
|
+
: MEDIA_DIR_PREFIX;
|
|
113
|
+
const lines = body.split('\n');
|
|
114
|
+
const standaloneRegex = /^(!\[([^\]]*)\]\()([^)]+)(\))$/;
|
|
115
|
+
return lines
|
|
116
|
+
.map((line) => {
|
|
117
|
+
const hasCr = line.endsWith('\r');
|
|
118
|
+
const trimmed = (hasCr ? line.slice(0, -1) : line).trim();
|
|
119
|
+
if (!trimmed)
|
|
120
|
+
return line;
|
|
121
|
+
// Opaque EmDash block fences carry remote JSON inside and are managed by Guard G9.
|
|
122
|
+
if (/^<!--ec:block\s/.test(trimmed))
|
|
123
|
+
return line;
|
|
124
|
+
const match = trimmed.match(standaloneRegex);
|
|
125
|
+
if (!match)
|
|
126
|
+
return line;
|
|
127
|
+
// A canonical route names its storageKey outright; an already-local reference names it through the mirror
|
|
128
|
+
// spelling, which `storageKeyFromMirrorRef` recovers without a candidate list because the key is written
|
|
129
|
+
// verbatim in the line. Either way the transform rewrites into `prefix`, never leaving a stale depth.
|
|
130
|
+
const storageKey = storageKeyFromCanonicalUrl(match[3]) ??
|
|
131
|
+
storageKeyFromMirrorRef(match[3], EMPTY_STORAGE_KEY_CANDIDATES);
|
|
132
|
+
if (!storageKey)
|
|
133
|
+
return line;
|
|
134
|
+
if (!options.fs.existsSync(`${options.mediaDir}/${storageKey}`))
|
|
135
|
+
return line;
|
|
136
|
+
const rewritten = `${match[1]}${prefix}${storageKey}${match[4]}`;
|
|
137
|
+
return hasCr ? `${rewritten}\r` : rewritten;
|
|
138
|
+
})
|
|
139
|
+
.join('\n');
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolves a local mirror reference back to its storageKey.
|
|
143
|
+
*
|
|
144
|
+
* A reference that spells a storageKey outright (`media/<storageKey>` or the article-relative
|
|
145
|
+
* `../../media/<storageKey>`) is returned verbatim: the key names its own mirror, so no lookup is needed. Any
|
|
146
|
+
* other name — a `<stem>--<mediaId>` collision suffix or a truncated stem — is recovered by asking
|
|
147
|
+
* `candidateStorageKeys`, the storageKeys Emit has confirmed through `media_state` and companion YAML, which
|
|
148
|
+
* one sanitizes to that stem. A reference no confirmed mirror owns yields null, so a hand-written path still
|
|
149
|
+
* reaches the push guards instead of being silently rewritten.
|
|
150
|
+
*/
|
|
151
|
+
export function storageKeyFromMirrorRef(rawPath, candidateStorageKeys) {
|
|
152
|
+
const name = refBasename(rawPath);
|
|
153
|
+
if (!name)
|
|
154
|
+
return null;
|
|
155
|
+
// The reference may already be the storageKey itself. Confirming it against recorded metadata keeps an
|
|
156
|
+
// unmirrored key unresolved, but a bare storageKey needs no stem translation.
|
|
157
|
+
const confirmed = [...candidateStorageKeys];
|
|
158
|
+
if (confirmed.length === 0 && STORAGE_KEY_EXTENSION.test(name))
|
|
159
|
+
return name;
|
|
160
|
+
for (const key of confirmed) {
|
|
161
|
+
if (key === name)
|
|
162
|
+
return key;
|
|
163
|
+
}
|
|
164
|
+
const stem = name.replace(/\.[A-Za-z0-9]{1,11}$/, '');
|
|
165
|
+
if (!stem)
|
|
166
|
+
return null;
|
|
167
|
+
// A collision-suffixed mirror is named `<stem>--<mediaId>` by `collisionSuffixedMarkdownRef`, so the suffix
|
|
168
|
+
// must come off before the stem is matched against confirmed storageKeys.
|
|
169
|
+
const bareStem = stem.replace(/--[0-9A-HJ-NP-Z]{26}$/i, '');
|
|
170
|
+
for (const key of confirmed) {
|
|
171
|
+
const ref = storageKeyToMarkdownRef(key);
|
|
172
|
+
if (ref && (ref === stem || ref === bareStem))
|
|
173
|
+
return key;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Builds the `../../` depth an article at `articleRelPath` needs to reach `media/` from its own directory,
|
|
179
|
+
* matching the prefix the draft-image guards already accept.
|
|
180
|
+
*/
|
|
181
|
+
export function mediaRefPrefixForArticle(articleRelPath) {
|
|
182
|
+
const dir = articleRelPath.split('/').slice(0, -1).join('/');
|
|
183
|
+
const depth = dir ? dir.split('/').length : 0;
|
|
184
|
+
return '../'.repeat(Math.max(depth, 1));
|
|
185
|
+
}
|
|
186
|
+
/** True when every standalone image line already carries `prefix` plus a mirrored storageKey. */
|
|
187
|
+
function isLocalizedIn(body, prefix, fs) {
|
|
188
|
+
let sawLocalRef = false;
|
|
189
|
+
const standaloneRegex = /^!?\[([^\]]*)\]\(([^)]+)\)$/;
|
|
190
|
+
for (const rawLine of body.split('\n')) {
|
|
191
|
+
const trimmed = (rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine).trim();
|
|
192
|
+
if (!trimmed || /^<!--ec:block\s/.test(trimmed))
|
|
193
|
+
continue;
|
|
194
|
+
const match = trimmed.match(standaloneRegex);
|
|
195
|
+
if (!match)
|
|
196
|
+
continue;
|
|
197
|
+
const ref = match[2].trim();
|
|
198
|
+
if (isCanonicalMediaUrl(ref))
|
|
199
|
+
continue; // An unmirrored reference carries no local spelling either way.
|
|
200
|
+
const name = refBasename(ref);
|
|
201
|
+
if (name === null || !STORAGE_KEY_EXTENSION.test(name))
|
|
202
|
+
return false;
|
|
203
|
+
if (!ref.startsWith(prefix))
|
|
204
|
+
return false;
|
|
205
|
+
sawLocalRef = true;
|
|
206
|
+
}
|
|
207
|
+
return sawLocalRef;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Chooses which local spelling a Markdown document should carry on disk.
|
|
211
|
+
*
|
|
212
|
+
* The canonical `/_emdash/api/media/file/<storageKey>` URL is what every baseline, cache hash and remote payload
|
|
213
|
+
* records; only the file an editor reads may be spelled locally. This helper decides that spelling from what
|
|
214
|
+
* the workspace already holds: a fresh write prefers the article-relative form (`../../media/<storageKey>`) so
|
|
215
|
+
* a Markdown preview resolves the mirror offline, while a document already written in the depth-free legacy form
|
|
216
|
+
* (`preferLegacyRef`, read back from disk) is reproduced in that same form. Reproducing the disk's own spelling
|
|
217
|
+
* is what keeps `sync_state.local_hash` and an unchanged article's diff honest — re-spelling a file the user
|
|
218
|
+
* never edited would report a media rewrite nobody made.
|
|
219
|
+
*
|
|
220
|
+
* A storageKey with no mirrored binary under `media/` stays canonical in every mode, so the transform can never
|
|
221
|
+
* invent a broken local link.
|
|
222
|
+
*/
|
|
223
|
+
export function localizeArticleMediaRefs(body, options) {
|
|
224
|
+
// The transform inspects `media/<storageKey>` existence itself, so the media directory must stay absolute.
|
|
225
|
+
const mediaDir = `${options.workspaceRoot.replace(/\/$/, '')}/media`;
|
|
226
|
+
const depthPrefix = `${mediaRefPrefixForArticle(options.articleRelPath)}${MEDIA_DIR_PREFIX}`;
|
|
227
|
+
// Already written in the requested spelling: leave it byte-identical so its hash stays stable.
|
|
228
|
+
const targetPrefix = options.preferLegacyRef ? MEDIA_DIR_PREFIX : depthPrefix;
|
|
229
|
+
if (isLocalizedIn(body, targetPrefix, options.fs))
|
|
230
|
+
return body;
|
|
231
|
+
// Otherwise localize from canonical form into the requested spelling. A disk file that already carries the
|
|
232
|
+
// other local spelling is normalized here too — a draft→published move changes the article's depth, and
|
|
233
|
+
// re-spelling in the new location keeps the written file honest about where its mirror lives.
|
|
234
|
+
return canonicalToLocalMediaRefs(body, {
|
|
235
|
+
mediaDir,
|
|
236
|
+
fs: options.fs,
|
|
237
|
+
articleRelPath: options.preferLegacyRef ? undefined : options.articleRelPath,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=media-body-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-body-refs.js","sourceRoot":"","sources":["../../src/utils/media-body-refs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical media reference parsing and fence policy definitions.
|
|
3
|
+
*
|
|
4
|
+
* This module consolidates:
|
|
5
|
+
* 1. Root-relative media route prefix definition.
|
|
6
|
+
* 2. Fence handling policy (backtick-only for authoring guards, backtick-or-tilde for diagnostics).
|
|
7
|
+
* 3. Unified scanning of markdown and HTML image references across article bodies.
|
|
8
|
+
*/
|
|
9
|
+
import { MEDIA_FILE_ROUTE_PREFIX } from './media-body-refs.js';
|
|
10
|
+
export { MEDIA_FILE_ROUTE_PREFIX };
|
|
11
|
+
/**
|
|
12
|
+
* Valid storageKey format: dot-separated 26-char ULID segments with a supported image extension.
|
|
13
|
+
*/
|
|
14
|
+
export declare const VALID_MEDIA_FILE_KEY: RegExp;
|
|
15
|
+
/**
|
|
16
|
+
* Fence policy declared explicitly:
|
|
17
|
+
* - guard: 'backtick-only' (G5/G11 preflight guards strictly exempt only backtick code fences).
|
|
18
|
+
* - diagnostic: 'backtick-or-tilde' (doctor diagnosis treats both ``` and ~~~ as code fences).
|
|
19
|
+
*/
|
|
20
|
+
export declare const FENCE_POLICY: {
|
|
21
|
+
readonly guard: 'backtick-only';
|
|
22
|
+
readonly diagnostic: 'backtick-or-tilde';
|
|
23
|
+
};
|
|
24
|
+
export type FencePolicyType = (typeof FENCE_POLICY)[keyof typeof FENCE_POLICY];
|
|
25
|
+
/**
|
|
26
|
+
* Checks whether a trimmed line starts a code fence according to the specified policy.
|
|
27
|
+
* - 'backtick-only': recognizes runs of 3 or more backticks (```).
|
|
28
|
+
* - 'backtick-or-tilde': recognizes runs of 3 or more backticks (```) or tildes (~~~).
|
|
29
|
+
*/
|
|
30
|
+
export declare function isCodeFenceDelimiter(line: string, policy: FencePolicyType): string | null;
|
|
31
|
+
export interface ParsedMediaRefMatch {
|
|
32
|
+
raw: string;
|
|
33
|
+
url: string;
|
|
34
|
+
isMarkdownImage: boolean;
|
|
35
|
+
isHtmlImage: boolean;
|
|
36
|
+
line: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Unified scanner for Markdown images () and HTML <img> tags in content.
|
|
40
|
+
* Filters out references located inside code fences (according to fencePolicy)
|
|
41
|
+
* or inside opaque block fences (<!--ec:block ... -->).
|
|
42
|
+
*/
|
|
43
|
+
export declare function scanRawMediaReferences(bodyMarkdown: string, fencePolicy?: FencePolicyType): string[];
|
|
44
|
+
//# sourceMappingURL=media-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-refs.d.ts","sourceRoot":"","sources":["../../src/utils/media-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,oBAAoB,QACiD,CAAC;AAEnF;;;;GAIG;AACH,eAAO,MAAM,YAAY;aACvB,KAAK,EAAE,eAAe;aACtB,UAAU,EAAE,mBAAmB;CACvB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE/E;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAYzF;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,eAAoC,GAChD,MAAM,EAAE,CAyDV"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical media reference parsing and fence policy definitions.
|
|
3
|
+
*
|
|
4
|
+
* This module consolidates:
|
|
5
|
+
* 1. Root-relative media route prefix definition.
|
|
6
|
+
* 2. Fence handling policy (backtick-only for authoring guards, backtick-or-tilde for diagnostics).
|
|
7
|
+
* 3. Unified scanning of markdown and HTML image references across article bodies.
|
|
8
|
+
*/
|
|
9
|
+
import { MEDIA_FILE_ROUTE_PREFIX } from './media-body-refs.js';
|
|
10
|
+
export { MEDIA_FILE_ROUTE_PREFIX };
|
|
11
|
+
/**
|
|
12
|
+
* Valid storageKey format: dot-separated 26-char ULID segments with a supported image extension.
|
|
13
|
+
*/
|
|
14
|
+
export const VALID_MEDIA_FILE_KEY = /^[0-9A-HJ-NP-Z]{26}(\.[0-9A-HJ-NP-Z]{26})*\.(jpg|jpeg|png|gif|webp|avif|svg)$/i;
|
|
15
|
+
/**
|
|
16
|
+
* Fence policy declared explicitly:
|
|
17
|
+
* - guard: 'backtick-only' (G5/G11 preflight guards strictly exempt only backtick code fences).
|
|
18
|
+
* - diagnostic: 'backtick-or-tilde' (doctor diagnosis treats both ``` and ~~~ as code fences).
|
|
19
|
+
*/
|
|
20
|
+
export const FENCE_POLICY = {
|
|
21
|
+
guard: 'backtick-only',
|
|
22
|
+
diagnostic: 'backtick-or-tilde',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Checks whether a trimmed line starts a code fence according to the specified policy.
|
|
26
|
+
* - 'backtick-only': recognizes runs of 3 or more backticks (```).
|
|
27
|
+
* - 'backtick-or-tilde': recognizes runs of 3 or more backticks (```) or tildes (~~~).
|
|
28
|
+
*/
|
|
29
|
+
export function isCodeFenceDelimiter(line, policy) {
|
|
30
|
+
const trimmed = line.trim();
|
|
31
|
+
if (policy === FENCE_POLICY.diagnostic) {
|
|
32
|
+
if (trimmed.startsWith('```') || trimmed.startsWith('~~~')) {
|
|
33
|
+
return trimmed.slice(0, 3);
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (trimmed.startsWith('```')) {
|
|
38
|
+
return trimmed.slice(0, 3);
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Unified scanner for Markdown images () and HTML <img> tags in content.
|
|
44
|
+
* Filters out references located inside code fences (according to fencePolicy)
|
|
45
|
+
* or inside opaque block fences (<!--ec:block ... -->).
|
|
46
|
+
*/
|
|
47
|
+
export function scanRawMediaReferences(bodyMarkdown, fencePolicy = FENCE_POLICY.guard) {
|
|
48
|
+
const references = new Set();
|
|
49
|
+
const lines = bodyMarkdown.split('\n');
|
|
50
|
+
let inFence = false;
|
|
51
|
+
let fenceDelimiter = '';
|
|
52
|
+
let inOpaqueFence = false;
|
|
53
|
+
for (const rawLine of lines) {
|
|
54
|
+
const trimmed = rawLine.replace(/\r$/, '').trim();
|
|
55
|
+
// Check opaque fences (<!--ec:block ... -->)
|
|
56
|
+
if (/^<!--ec:block\s/.test(trimmed)) {
|
|
57
|
+
inOpaqueFence = !/^.*-->$/.test(trimmed);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (inOpaqueFence) {
|
|
61
|
+
if (/^.*-->$/.test(trimmed)) {
|
|
62
|
+
inOpaqueFence = false;
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// Check code fences
|
|
67
|
+
const delim = isCodeFenceDelimiter(trimmed, fencePolicy);
|
|
68
|
+
if (delim) {
|
|
69
|
+
if (!inFence) {
|
|
70
|
+
inFence = true;
|
|
71
|
+
fenceDelimiter = delim;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
else if (trimmed.startsWith(fenceDelimiter)) {
|
|
75
|
+
inFence = false;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (inFence)
|
|
80
|
+
continue;
|
|
81
|
+
// 1. Markdown image syntax: 
|
|
82
|
+
const mdRegex = /!\[.*?\]\(([^)\s]+)(?:\s+["'].*?["'])?\)/g;
|
|
83
|
+
let match;
|
|
84
|
+
while ((match = mdRegex.exec(trimmed)) !== null) {
|
|
85
|
+
const url = match[1].trim();
|
|
86
|
+
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
87
|
+
references.add(url);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// 2. HTML <img> tags: <img src="...">
|
|
91
|
+
const htmlRegex = /<img[^>]+src=["']([^"']+)["']/gi;
|
|
92
|
+
while ((match = htmlRegex.exec(trimmed)) !== null) {
|
|
93
|
+
const url = match[1].trim();
|
|
94
|
+
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
|
|
95
|
+
references.add(url);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return Array.from(references).sort();
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=media-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-refs.js","sourceRoot":"","sources":["../../src/utils/media-refs.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/naming.d.ts
CHANGED
|
@@ -27,6 +27,37 @@ export declare function extractDatePrefixFromPath(filePath: string): string | nu
|
|
|
27
27
|
* Strips any leading yyyyMMdd_ date prefix from a filename or path.
|
|
28
28
|
*/
|
|
29
29
|
export declare function stripDatePrefix(filenameOrPath: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum UTF-8 byte length for a mirrored media filename stem. Media mirrors keep the storageKey's
|
|
32
|
+
* own basename, which can be a long migrated path, so the stem is capped well below the 255-byte POSIX
|
|
33
|
+
* NAME_MAX to leave room for the extension and any collision suffix.
|
|
34
|
+
*/
|
|
35
|
+
export declare const DEFAULT_MAX_MEDIA_REF_BYTES = 180;
|
|
36
|
+
/**
|
|
37
|
+
* Derives the canonical local mirror name (`markdownRef`) from an EmDash media `storageKey`.
|
|
38
|
+
*
|
|
39
|
+
* A mirror is named after the storageKey — the identifier the article body actually references — so a
|
|
40
|
+
* Markdown image URL resolves to a file of the same name on disk, and the binary plus its companion YAML
|
|
41
|
+
* form one visibly matching pair. The record id is deliberately NOT part of the name: migrated storageKeys
|
|
42
|
+
* are arbitrary paths rather than ULIDs, so an id can never be recovered from a filename, and Emit reads
|
|
43
|
+
* it from the companion YAML (`id:`) and `media_state.media_id` instead.
|
|
44
|
+
*
|
|
45
|
+
* Sanitizing rules (cross-platform, no symlinks):
|
|
46
|
+
* - Only the storageKey's basename is used; migrated keys such as `uploads/2026/11/sample.png` collapse
|
|
47
|
+
* to their final path segment.
|
|
48
|
+
* - Filesystem-invalid characters and control characters are removed, whitespace collapses to `-`.
|
|
49
|
+
* - Multi-ULID keys (`<ulid1>.<ulid2>.jpg`) keep their dot separators so the key stays recognizable.
|
|
50
|
+
* - The storageKey's own trailing extension is stripped, because callers append the extension they write:
|
|
51
|
+
* a storageKey already ends in one, and re-appending it would produce `<key>.jpg.jpg`.
|
|
52
|
+
* - The result is truncated on a UTF-8 code point boundary.
|
|
53
|
+
* Returns `null` when the storageKey carries no usable name at all.
|
|
54
|
+
*/
|
|
55
|
+
export declare function storageKeyToMarkdownRef(storageKey: string, maxBytes?: number): string | null;
|
|
56
|
+
/**
|
|
57
|
+
* Disambiguates two storageKeys that sanitize to the same basename by appending the media record id.
|
|
58
|
+
* Deterministic: the same key and id always produce the same name, so re-running a pull never churns.
|
|
59
|
+
*/
|
|
60
|
+
export declare function collisionSuffixedMarkdownRef(markdownRef: string, mediaId: string): string;
|
|
30
61
|
/**
|
|
31
62
|
* Extracts the 26-character ULID from a filename or path, stripping any date prefix.
|
|
32
63
|
* Returns null if no valid ULID is present.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYvE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAgC,GACzC,MAAM,CA+BR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAmBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW7E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAC/B,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/E"}
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYvE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAgC,GACzC,MAAM,CA+BR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAmBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAoC,GAC7C,MAAM,GAAG,IAAI,CAyBf;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGzF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW7E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAC/B,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/E"}
|