@geekity/cms 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -21
- package/admin/components/admin-bar.njk +26 -0
- package/admin/components/public-admin-bar.njk +41 -0
- package/admin/layouts/base.njk +1 -0
- package/admin/layouts/shell.njk +8 -19
- package/admin/static/admin-bar.css +137 -0
- package/admin/static/admin.css +1 -102
- package/dist/admin/comments.js +2 -1
- package/dist/admin/comments.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/personal-data.d.ts.map +1 -1
- package/dist/admin/personal-data.js +5 -1
- package/dist/admin/personal-data.js.map +1 -1
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +1 -1
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +2 -1
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/store.d.ts +35 -0
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +62 -0
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/templates.d.ts +1 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +1 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/tools.d.ts +2 -0
- package/dist/admin/tools.d.ts.map +1 -1
- package/dist/admin/tools.js +3 -2
- package/dist/admin/tools.js.map +1 -1
- package/dist/comments/index.d.ts +2 -2
- package/dist/comments/index.d.ts.map +1 -1
- package/dist/comments/index.js +1 -1
- package/dist/comments/index.js.map +1 -1
- package/dist/comments/records.d.ts +43 -2
- package/dist/comments/records.d.ts.map +1 -1
- package/dist/comments/records.js +201 -54
- package/dist/comments/records.js.map +1 -1
- package/dist/comments/routes.js +1 -1
- package/dist/comments/routes.js.map +1 -1
- package/dist/comments/viewer.d.ts +13 -0
- package/dist/comments/viewer.d.ts.map +1 -1
- package/dist/comments/viewer.js +13 -1
- package/dist/comments/viewer.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/env.d.ts +19 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/delivery.d.ts +3 -1
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +6 -1
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +3 -0
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/inbox.d.ts +7 -5
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +15 -32
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +2 -0
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +1 -0
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/mount.js +6 -1
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/profiles.d.ts +95 -0
- package/dist/federation/profiles.d.ts.map +1 -0
- package/dist/federation/profiles.js +171 -0
- package/dist/federation/profiles.js.map +1 -0
- package/dist/federation/relays.d.ts +3 -1
- package/dist/federation/relays.d.ts.map +1 -1
- package/dist/federation/relays.js +6 -1
- package/dist/federation/relays.js.map +1 -1
- package/dist/federation/replies.d.ts +13 -4
- package/dist/federation/replies.d.ts.map +1 -1
- package/dist/federation/replies.js +25 -6
- package/dist/federation/replies.js.map +1 -1
- package/dist/images/icons.d.ts.map +1 -1
- package/dist/images/icons.js +3 -2
- package/dist/images/icons.js.map +1 -1
- package/dist/images/index.d.ts +2 -2
- package/dist/images/index.d.ts.map +1 -1
- package/dist/images/markup.d.ts +15 -4
- package/dist/images/markup.d.ts.map +1 -1
- package/dist/images/markup.js +24 -15
- package/dist/images/markup.js.map +1 -1
- package/dist/images/paths.d.ts +11 -0
- package/dist/images/paths.d.ts.map +1 -1
- package/dist/images/paths.js +17 -1
- package/dist/images/paths.js.map +1 -1
- package/dist/images/variants.d.ts +13 -3
- package/dist/images/variants.d.ts.map +1 -1
- package/dist/images/variants.js +13 -11
- package/dist/images/variants.js.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -11
- package/dist/index.js.map +1 -1
- package/dist/notifications/routes.js +1 -1
- package/dist/notifications/routes.js.map +1 -1
- package/dist/privacy/erase.d.ts.map +1 -1
- package/dist/privacy/erase.js +2 -3
- package/dist/privacy/erase.js.map +1 -1
- package/dist/privacy/retention.js +1 -1
- package/dist/privacy/retention.js.map +1 -1
- package/dist/web/admin-bar.d.ts +21 -0
- package/dist/web/admin-bar.d.ts.map +1 -0
- package/dist/web/admin-bar.js +145 -0
- package/dist/web/admin-bar.js.map +1 -0
- package/dist/web/assets.d.ts +29 -1
- package/dist/web/assets.d.ts.map +1 -1
- package/dist/web/assets.js +48 -3
- package/dist/web/assets.js.map +1 -1
- package/dist/web/compression.d.ts +19 -0
- package/dist/web/compression.d.ts.map +1 -0
- package/dist/web/compression.js +160 -0
- package/dist/web/compression.js.map +1 -0
- package/dist/web/context.d.ts +5 -1
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +5 -2
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts.map +1 -1
- package/dist/web/conversation.js +13 -12
- package/dist/web/conversation.js.map +1 -1
- package/dist/web/render.d.ts +27 -0
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +77 -38
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +63 -28
- package/dist/web/routes.js.map +1 -1
- package/dist/web/templates.d.ts.map +1 -1
- package/dist/web/templates.js +9 -2
- package/dist/web/templates.js.map +1 -1
- package/dist/webmention/service.d.ts.map +1 -1
- package/dist/webmention/service.js +5 -1
- package/dist/webmention/service.js.map +1 -1
- package/package.json +1 -1
- package/themes/default/README.md +143 -19
- package/themes/default/layouts/base.njk +51 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replies.d.ts","sourceRoot":"","sources":["../../src/federation/replies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,qEAAqE;AACrE,MAAM,WAAW,KAAK;IACpB,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,SAAS,EAAE,IAAI,CAAC;IAChB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAChD,KAAK,GAAG,SAAS,CAYnB;AAED,mFAAmF;AACnF,MAAM,WAAW,KAAK;IACpB,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,SAAS,EAAE,IAAI,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AASD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,KAAK,GAAG,SAAS,CASpE;AA8BD
|
|
1
|
+
{"version":3,"file":"replies.d.ts","sourceRoot":"","sources":["../../src/federation/replies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,qEAAqE;AACrE,MAAM,WAAW,KAAK;IACpB,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,SAAS,EAAE,IAAI,CAAC;IAChB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAChD,KAAK,GAAG,SAAS,CAYnB;AAED,mFAAmF;AACnF,MAAM,WAAW,KAAK;IACpB,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,SAAS,EAAE,IAAI,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AASD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,KAAK,GAAG,SAAS,CASpE;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzD;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkBnD"}
|
|
@@ -28,7 +28,7 @@ export function replyFrom(activity, nameFor) {
|
|
|
28
28
|
return undefined;
|
|
29
29
|
return {
|
|
30
30
|
...note.said,
|
|
31
|
-
author: nameFor?.(note.said.actorId) ??
|
|
31
|
+
author: nameFor?.(note.said.actorId) ?? guessedName(note.said.actorId),
|
|
32
32
|
inReplyTo,
|
|
33
33
|
};
|
|
34
34
|
}
|
|
@@ -81,10 +81,13 @@ function noteFrom(activity) {
|
|
|
81
81
|
/**
|
|
82
82
|
* `@user@host` for an actor URL, or `undefined` when the URL implies none.
|
|
83
83
|
*
|
|
84
|
-
* A guess, and
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
84
|
+
* A guess, and the last resort: a follower is named from the profile it
|
|
85
|
+
* published when it followed, and anybody else from the profile the site
|
|
86
|
+
* fetched when they were first heard from (TASK-184). This is for an actor
|
|
87
|
+
* neither of those knows yet.
|
|
88
|
+
*
|
|
89
|
+
* An id whose last segment is a number implies nothing. A current Mastodon
|
|
90
|
+
* mints `/ap/users/117132440785278319`, and a number is nobody's handle.
|
|
88
91
|
*/
|
|
89
92
|
export function actorHandle(actorId) {
|
|
90
93
|
let url;
|
|
@@ -98,10 +101,26 @@ export function actorHandle(actorId) {
|
|
|
98
101
|
.split('/')
|
|
99
102
|
.filter((segment) => segment !== '')
|
|
100
103
|
.pop();
|
|
101
|
-
if (last === undefined || last === '')
|
|
104
|
+
if (last === undefined || last === '' || /^\d+$/.test(last))
|
|
102
105
|
return undefined;
|
|
103
106
|
return `@${last.replace(/^@/, '')}@${url.host}`;
|
|
104
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* The best name an actor URL alone gives: the handle it implies, else the
|
|
110
|
+
* server it is on, else the id itself. What a conversation shows for an actor
|
|
111
|
+
* the site has no profile of.
|
|
112
|
+
*/
|
|
113
|
+
export function guessedName(actorId) {
|
|
114
|
+
const handle = actorHandle(actorId);
|
|
115
|
+
if (handle !== undefined)
|
|
116
|
+
return handle;
|
|
117
|
+
try {
|
|
118
|
+
return new URL(actorId).host;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return actorId;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
105
124
|
/**
|
|
106
125
|
* What a stored activity replies to, or `null` when it replies to nothing.
|
|
107
126
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replies.js","sourceRoot":"","sources":["../../src/federation/replies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAyB5C;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CACvB,QAAuB,EACvB,OAAiD;IAEjD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEzC,OAAO;QACL,GAAG,IAAI,CAAC,IAAI;QACZ,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC
|
|
1
|
+
{"version":3,"file":"replies.js","sourceRoot":"","sources":["../../src/federation/replies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAyB5C;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CACvB,QAAuB,EACvB,OAAiD;IAEjD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEzC,OAAO;QACL,GAAG,IAAI,CAAC,IAAI;QACZ,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACtE,SAAS;KACV,CAAC;AACJ,CAAC;AAkBD;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAU,CAAC;AAEtF;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,QAAuB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAErF,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,QAAuB;IAMvC,IAAI,QAAQ,CAAC,YAAY,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAEpE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC;IACpD,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,OAAO;QACL,MAAM;QACN,IAAI,EAAE;YACJ,EAAE;YACF,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;YAC3E,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACzF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ;SACtB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;SACnC,GAAG,EAAE,CAAC;IACT,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,kFAAkF;AAClF,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAAC,KAAc;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,4EAA4E;IAC5E,yDAAyD;IACzD,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/images/icons.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qCAAqC;AACrC,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAwCD,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/images/icons.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qCAAqC;AACrC,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAwCD,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,CAYrF;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAuBlB"}
|
package/dist/images/icons.js
CHANGED
|
@@ -3,7 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import sharp from 'sharp';
|
|
4
4
|
import { writeFileAtomically } from '../files/atomic.js';
|
|
5
5
|
import { UPLOAD_ASSET_PREFIX } from '../web/assets.js';
|
|
6
|
-
import { derivedDir, sourceFile, VARIANT_ASSET_PREFIX } from './paths.js';
|
|
6
|
+
import { derivedDir, sourceFile, sourceVersion, versioned, VARIANT_ASSET_PREFIX } from './paths.js';
|
|
7
7
|
/**
|
|
8
8
|
* The icons a site offers, in the order the head lists them: the 32 and 16
|
|
9
9
|
* pixel favicons and the 180 pixel touch icon Apple asks for.
|
|
@@ -68,10 +68,11 @@ export function siteIcons(config, avatar) {
|
|
|
68
68
|
const source = iconSource(avatar);
|
|
69
69
|
if (source === undefined)
|
|
70
70
|
return [];
|
|
71
|
+
const version = sourceVersion(config, source);
|
|
71
72
|
return ICONS.map(({ rel, size }) => ({
|
|
72
73
|
rel,
|
|
73
74
|
sizes: `${String(size)}x${String(size)}`,
|
|
74
|
-
href: iconHref(source, size),
|
|
75
|
+
href: versioned(iconHref(source, size), version),
|
|
75
76
|
}));
|
|
76
77
|
}
|
|
77
78
|
/**
|
package/dist/images/icons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/images/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/images/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAkCpG;;;;;;;GAOG;AACH,MAAM,KAAK,GAA6C;IACtD,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IACzB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IACzB,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,EAAE;CACvC,CAAC;AAEF,mEAAmE;AACnE,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAE1C;;;;;;;;GAQG;AACH,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IAChD,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,0CAA0C;AAC1C,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,MAAmB,EAAE,MAA0B;IACvE,IAAI,CAAC,MAAM,CAAC,iBAAiB;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,GAAG;QACH,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QACxC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC;KACjD,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAmB,EACnB,MAAc,EACd,IAAY;IAEZ,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9F,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,sEAAsE;QACtE,0EAA0E;QAC1E,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;aACpD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;aACvE,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;aAC5B,QAAQ,EAAE,CAAC;QAEd,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;QACpE,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAS,UAAU,CAAC,MAA0B;IAC5C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9E,uEAAuE;IACvE,gDAAgD;IAChD,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,SAAS,QAAQ,CAAC,MAAc,EAAE,IAAY;IAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1E,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CAAC;IACF,OAAO,GAAG,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACxD,CAAC"}
|
package/dist/images/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { IMAGE_SIZES, responsiveImages, siteImageMarkup } from './markup.ts';
|
|
2
|
-
export type { DescribeImage } from './markup.ts';
|
|
2
|
+
export type { DescribeImage, ImageLoading } from './markup.ts';
|
|
3
3
|
export { siteIcons } from './icons.ts';
|
|
4
4
|
export type { SiteIcon } from './icons.ts';
|
|
5
5
|
export { describeImage, findImageVariant, generateImageVariants, imageMediaType, removeImageVariants, variantUrl, IMAGE_DIRECTORY, IMAGE_RECORD_NAME, VARIANT_ASSET_PREFIX, } from './variants.ts';
|
|
6
|
-
export type { ImageConfig, ImageRecord, ImageVariant } from './variants.ts';
|
|
6
|
+
export type { DescribedImage, ImageConfig, ImageRecord, ImageVariant } from './variants.ts';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/images/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/images/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/images/markup.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DescribedImage, ImageConfig } from './variants.ts';
|
|
2
2
|
/**
|
|
3
3
|
* Responsive markup for the site's own pages.
|
|
4
4
|
*
|
|
@@ -10,7 +10,7 @@ import type { ImageConfig, ImageRecord } from './variants.ts';
|
|
|
10
10
|
* strip the `<picture>` anyway.
|
|
11
11
|
*/
|
|
12
12
|
/** What the markup asks about an upload. See {@link describeImage}. */
|
|
13
|
-
export type DescribeImage = (source: string) =>
|
|
13
|
+
export type DescribeImage = (source: string) => DescribedImage | undefined;
|
|
14
14
|
/**
|
|
15
15
|
* The `sizes` every image is given.
|
|
16
16
|
*
|
|
@@ -21,6 +21,17 @@ export type DescribeImage = (source: string) => ImageRecord | undefined;
|
|
|
21
21
|
* candidate that is too wide, never one that is too small.
|
|
22
22
|
*/
|
|
23
23
|
export declare const IMAGE_SIZES = "100vw";
|
|
24
|
+
/**
|
|
25
|
+
* How a fragment's images are fetched.
|
|
26
|
+
*
|
|
27
|
+
* `lead` marks the fragment that opens the page, a single post's body or a
|
|
28
|
+
* listing's first entry. Its first image is usually the page's Largest
|
|
29
|
+
* Contentful Paint, so it is fetched at once and ahead of everything else
|
|
30
|
+
* rather than lazily; every other image waits until it is scrolled near.
|
|
31
|
+
*/
|
|
32
|
+
export interface ImageLoading {
|
|
33
|
+
lead?: boolean;
|
|
34
|
+
}
|
|
24
35
|
/**
|
|
25
36
|
* Rewrite every uploaded image in a fragment of HTML as a `<picture>`.
|
|
26
37
|
*
|
|
@@ -34,7 +45,7 @@ export declare const IMAGE_SIZES = "100vw";
|
|
|
34
45
|
* body, the only tags it has to understand are `<img>` ones, and a parser
|
|
35
46
|
* would have to reproduce the exact HTML around them to hand it back.
|
|
36
47
|
*/
|
|
37
|
-
export declare function responsiveImages(html: string, describe: DescribeImage): string;
|
|
48
|
+
export declare function responsiveImages(html: string, describe: DescribeImage, loading?: ImageLoading): string;
|
|
38
49
|
/**
|
|
39
50
|
* The same rewrite, over one site's own derived images.
|
|
40
51
|
*
|
|
@@ -43,5 +54,5 @@ export declare function responsiveImages(html: string, describe: DescribeImage):
|
|
|
43
54
|
* renders at once and the one after it is responsive. Nothing waits on an
|
|
44
55
|
* encoder while a reader waits on a page.
|
|
45
56
|
*/
|
|
46
|
-
export declare function siteImageMarkup(config: ImageConfig, html: string): string;
|
|
57
|
+
export declare function siteImageMarkup(config: ImageConfig, html: string, loading?: ImageLoading): string;
|
|
47
58
|
//# sourceMappingURL=markup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../../src/images/markup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../../src/images/markup.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAE/E;;;;;;;;;GASG;AAEH,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;AAE3E;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAqBR;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,YAAiB,GACzB,MAAM,CAiBR"}
|
package/dist/images/markup.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { UPLOAD_ASSET_PREFIX } from '../web/assets.js';
|
|
2
2
|
import { describeImage, generateImageVariants, imageMediaType, VARIANT_ASSET_PREFIX, } from './variants.js';
|
|
3
|
+
import { versioned } from './paths.js';
|
|
3
4
|
/**
|
|
4
5
|
* The `sizes` every image is given.
|
|
5
6
|
*
|
|
@@ -27,10 +28,14 @@ const ATTRIBUTE = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|
|
|
|
27
28
|
* body, the only tags it has to understand are `<img>` ones, and a parser
|
|
28
29
|
* would have to reproduce the exact HTML around them to hand it back.
|
|
29
30
|
*/
|
|
30
|
-
export function responsiveImages(html, describe) {
|
|
31
|
+
export function responsiveImages(html, describe, loading = {}) {
|
|
31
32
|
if (!html.includes('<img'))
|
|
32
33
|
return html;
|
|
34
|
+
// Counted over every `<img>`, rewritten or not: a first image from
|
|
35
|
+
// somewhere else is still the one a reader sees first.
|
|
36
|
+
let seen = 0;
|
|
33
37
|
return html.replace(IMG_TAG, (tag, attributes) => {
|
|
38
|
+
const lead = loading.lead === true && seen++ === 0;
|
|
34
39
|
const parsed = parseAttributes(attributes);
|
|
35
40
|
const src = parsed.get('src');
|
|
36
41
|
if (src === undefined)
|
|
@@ -41,7 +46,7 @@ export function responsiveImages(html, describe) {
|
|
|
41
46
|
const record = describe(source);
|
|
42
47
|
if (record === undefined || record.variants.length === 0)
|
|
43
48
|
return tag;
|
|
44
|
-
return picture({ tag, attributes: parsed, record });
|
|
49
|
+
return picture({ tag, attributes: parsed, record, lead });
|
|
45
50
|
});
|
|
46
51
|
}
|
|
47
52
|
/**
|
|
@@ -52,7 +57,7 @@ export function responsiveImages(html, describe) {
|
|
|
52
57
|
* renders at once and the one after it is responsive. Nothing waits on an
|
|
53
58
|
* encoder while a reader waits on a page.
|
|
54
59
|
*/
|
|
55
|
-
export function siteImageMarkup(config, html) {
|
|
60
|
+
export function siteImageMarkup(config, html, loading = {}) {
|
|
56
61
|
if (!config.imageOptimization)
|
|
57
62
|
return html;
|
|
58
63
|
return responsiveImages(html, (source) => {
|
|
@@ -64,7 +69,7 @@ export function siteImageMarkup(config, html) {
|
|
|
64
69
|
});
|
|
65
70
|
}
|
|
66
71
|
return record;
|
|
67
|
-
});
|
|
72
|
+
}, loading);
|
|
68
73
|
}
|
|
69
74
|
/** One `<picture>`: a `<source>` per derived format, then the original's `<img>`. */
|
|
70
75
|
function picture(input) {
|
|
@@ -82,10 +87,10 @@ function picture(input) {
|
|
|
82
87
|
const type = imageMediaType(format);
|
|
83
88
|
if (type === undefined)
|
|
84
89
|
continue;
|
|
85
|
-
sources.push(`<source type="${type}" srcset="${srcset(record
|
|
90
|
+
sources.push(`<source type="${type}" srcset="${srcset(record, variants)}" sizes="${IMAGE_SIZES}">`);
|
|
86
91
|
}
|
|
87
92
|
const fallback = byFormat.get(record.format) ?? [];
|
|
88
|
-
return `<picture>${sources.join('')}${image(input.tag, input.attributes, record, fallback)}</picture>`;
|
|
93
|
+
return `<picture>${sources.join('')}${image(input.tag, input.attributes, record, fallback, input.lead)}</picture>`;
|
|
89
94
|
}
|
|
90
95
|
/**
|
|
91
96
|
* The `<img>` at the bottom of the `<picture>`: the author's tag, with what
|
|
@@ -95,14 +100,15 @@ function picture(input) {
|
|
|
95
100
|
* these — a `width` written by hand is a decision, and a CMS that overruled it
|
|
96
101
|
* would be a CMS that could not be argued with.
|
|
97
102
|
*/
|
|
98
|
-
function image(tag, attributes, record, fallback) {
|
|
103
|
+
function image(tag, attributes, record, fallback, lead) {
|
|
99
104
|
const additions = [];
|
|
100
105
|
if (fallback.length > 0)
|
|
101
|
-
additions.push(`srcset="${srcset(record
|
|
106
|
+
additions.push(`srcset="${srcset(record, fallback)}"`);
|
|
102
107
|
additions.push(`sizes="${IMAGE_SIZES}"`);
|
|
103
108
|
additions.push(`width="${String(record.width)}"`);
|
|
104
109
|
additions.push(`height="${String(record.height)}"`);
|
|
105
|
-
additions.push('loading="lazy"');
|
|
110
|
+
additions.push(lead ? 'fetchpriority="high"' : 'loading="lazy"');
|
|
111
|
+
additions.push('decoding="async"');
|
|
106
112
|
const wanted = additions.filter((addition) => {
|
|
107
113
|
const name = addition.slice(0, addition.indexOf('='));
|
|
108
114
|
return !attributes.has(name);
|
|
@@ -116,16 +122,19 @@ function image(tag, attributes, record, fallback) {
|
|
|
116
122
|
return `${tag.slice(0, close).trimEnd()} ${wanted.join(' ')}>`;
|
|
117
123
|
}
|
|
118
124
|
/** A `srcset`: every variant of one format, narrowest first, with its width descriptor. */
|
|
119
|
-
function srcset(
|
|
125
|
+
function srcset(record, variants) {
|
|
120
126
|
return [...variants]
|
|
121
127
|
.sort((a, b) => a.width - b.width)
|
|
122
|
-
.map((variant) => `${variantHref(
|
|
128
|
+
.map((variant) => `${variantHref(record, variant)} ${String(variant.width)}w`)
|
|
123
129
|
.join(', ');
|
|
124
130
|
}
|
|
125
|
-
/**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
/**
|
|
132
|
+
* The URL of one derived file, with every path segment encoded as a URL wants
|
|
133
|
+
* and the original's version on the end.
|
|
134
|
+
*/
|
|
135
|
+
function variantHref(record, variant) {
|
|
136
|
+
const segments = [...record.source.split('/'), variant.file].map((segment) => encodeURIComponent(segment));
|
|
137
|
+
return versioned(`${VARIANT_ASSET_PREFIX}${segments.join('/')}`, record.version);
|
|
129
138
|
}
|
|
130
139
|
/**
|
|
131
140
|
* The upload a `src` points at, relative to `content/uploads/`, or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markup.js","sourceRoot":"","sources":["../../src/images/markup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"markup.js","sourceRoot":"","sources":["../../src/images/markup.ts"],"names":[],"mappings":"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"}
|
package/dist/images/paths.d.ts
CHANGED
|
@@ -31,4 +31,15 @@ export declare function derivedDir(config: ImageConfig, source: string): string;
|
|
|
31
31
|
* applies to every other request for a file.
|
|
32
32
|
*/
|
|
33
33
|
export declare function sourceFile(config: ImageConfig, source: string): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* A short hash of the upload's bytes, or `undefined` when it is not there.
|
|
36
|
+
*
|
|
37
|
+
* A derived file's URL carries it, because the name alone does not pin the
|
|
38
|
+
* bytes: deleting an upload frees its name, and a different picture uploaded
|
|
39
|
+
* under it would otherwise inherit URLs browsers were told never to refetch.
|
|
40
|
+
* Memoised on size and mtime like a theme asset's, so a render pays a `stat`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function sourceVersion(config: ImageConfig, source: string): string | undefined;
|
|
43
|
+
/** A derived file's URL with the source's version on it, when there is one. */
|
|
44
|
+
export declare function versioned(href: string, version: string | undefined): string;
|
|
34
45
|
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/images/paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/images/paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AASnD;;;;;;;GAOG;AAEH,oEAAoE;AACpE,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,gBAA6B,CAAC;AAE/D,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,cAAc,EACd,YAAY,GAAG,SAAS,GAAG,mBAAmB,GAAG,aAAa,GAAG,cAAc,CAChF,CAAC;AAEF,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrF;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE3E"}
|
package/dist/images/paths.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import { UPLOAD_ASSET_PREFIX, UPLOAD_DIRECTORY } from '../web/assets.js';
|
|
2
|
+
import { assetVersion, findAsset, ASSET_VERSION_PARAM, UPLOAD_ASSET_PREFIX, UPLOAD_DIRECTORY, } from '../web/assets.js';
|
|
3
3
|
/**
|
|
4
4
|
* Where a derived image comes from and where it goes.
|
|
5
5
|
*
|
|
@@ -38,4 +38,20 @@ export function sourceFile(config, source) {
|
|
|
38
38
|
const file = path.resolve(root, source);
|
|
39
39
|
return file.startsWith(root + path.sep) ? file : undefined;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* A short hash of the upload's bytes, or `undefined` when it is not there.
|
|
43
|
+
*
|
|
44
|
+
* A derived file's URL carries it, because the name alone does not pin the
|
|
45
|
+
* bytes: deleting an upload frees its name, and a different picture uploaded
|
|
46
|
+
* under it would otherwise inherit URLs browsers were told never to refetch.
|
|
47
|
+
* Memoised on size and mtime like a theme asset's, so a render pays a `stat`.
|
|
48
|
+
*/
|
|
49
|
+
export function sourceVersion(config, source) {
|
|
50
|
+
const asset = findAsset(source, [path.join(config.contentDir, UPLOAD_DIRECTORY)]);
|
|
51
|
+
return asset === undefined ? undefined : assetVersion(asset);
|
|
52
|
+
}
|
|
53
|
+
/** A derived file's URL with the source's version on it, when there is one. */
|
|
54
|
+
export function versioned(href, version) {
|
|
55
|
+
return version === undefined ? href : `${href}?${ASSET_VERSION_PARAM}=${version}`;
|
|
56
|
+
}
|
|
41
57
|
//# sourceMappingURL=paths.js.map
|
package/dist/images/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/images/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/images/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EACL,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;GAOG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,mBAAmB,IAAI,CAAC;AAQ/D,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,MAAc;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,MAAc;IAC5D,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,MAAc;IAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAA2B;IACjE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,mBAAmB,IAAI,OAAO,EAAE,CAAC;AACpF,CAAC"}
|
|
@@ -59,8 +59,18 @@ export interface ImageRecord {
|
|
|
59
59
|
}
|
|
60
60
|
/** The media type a `<source>` for this format announces, or `undefined`. */
|
|
61
61
|
export declare function imageMediaType(format: string): string | undefined;
|
|
62
|
-
/**
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* A record as a page renders it: what was derived, and the hash of the
|
|
64
|
+
* original's bytes that every derived URL carries. The hash is not in the
|
|
65
|
+
* sidecar; it is read off the original, so a sidecar written before URLs
|
|
66
|
+
* carried it needs no rewrite.
|
|
67
|
+
*/
|
|
68
|
+
export interface DescribedImage extends ImageRecord {
|
|
69
|
+
/** See {@link sourceVersion}. Without it a derived URL is served for a day, not a year. */
|
|
70
|
+
version?: string | undefined;
|
|
71
|
+
}
|
|
72
|
+
/** The public URL of one derived file, naming the original's bytes when `version` is given. */
|
|
73
|
+
export declare function variantUrl(source: string, variant: ImageVariant, version?: string): string;
|
|
64
74
|
/**
|
|
65
75
|
* Derive every variant of one upload and record what was derived.
|
|
66
76
|
*
|
|
@@ -81,7 +91,7 @@ export declare function generateImageVariants(config: ImageConfig, source: strin
|
|
|
81
91
|
* renders. `undefined` means the caller should serve the plain original: the
|
|
82
92
|
* upload is not an image, or nothing has been derived from it yet.
|
|
83
93
|
*/
|
|
84
|
-
export declare function describeImage(config: ImageConfig, source: string):
|
|
94
|
+
export declare function describeImage(config: ImageConfig, source: string): DescribedImage | undefined;
|
|
85
95
|
/**
|
|
86
96
|
* Take one upload's derived files away.
|
|
87
97
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../src/images/variants.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../src/images/variants.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAUpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAE9C,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAgCD,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1F;AAgBD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAQlC;AAgID;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAY7F;AAyDD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5F;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA+BlC"}
|
package/dist/images/variants.js
CHANGED
|
@@ -5,7 +5,7 @@ import sharp from 'sharp';
|
|
|
5
5
|
import { writeFileAtomically } from '../files/atomic.js';
|
|
6
6
|
import { findAsset } from '../web/assets.js';
|
|
7
7
|
import { deriveSiteIcon, iconSize } from './icons.js';
|
|
8
|
-
import { derivedDir, sourceFile, IMAGE_DIRECTORY, VARIANT_ASSET_PREFIX } from './paths.js';
|
|
8
|
+
import { derivedDir, sourceFile, sourceVersion, versioned, IMAGE_DIRECTORY, VARIANT_ASSET_PREFIX, } from './paths.js';
|
|
9
9
|
/**
|
|
10
10
|
* Image variants: the derived copies of an upload, and the record of them.
|
|
11
11
|
*
|
|
@@ -53,9 +53,9 @@ const SOURCE_FORMATS = new Map([
|
|
|
53
53
|
export function imageMediaType(format) {
|
|
54
54
|
return FORMAT_MEDIA_TYPES.get(format);
|
|
55
55
|
}
|
|
56
|
-
/** The public URL of one derived file. */
|
|
57
|
-
export function variantUrl(source, variant) {
|
|
58
|
-
return `${VARIANT_ASSET_PREFIX}${source}/${variant.file}
|
|
56
|
+
/** The public URL of one derived file, naming the original's bytes when `version` is given. */
|
|
57
|
+
export function variantUrl(source, variant, version) {
|
|
58
|
+
return versioned(`${VARIANT_ASSET_PREFIX}${source}/${variant.file}`, version);
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Records already read, by the derived directory they were read from.
|
|
@@ -206,14 +206,16 @@ function formatted(pipeline, format) {
|
|
|
206
206
|
*/
|
|
207
207
|
export function describeImage(config, source) {
|
|
208
208
|
const directory = derivedDir(config, source);
|
|
209
|
-
|
|
210
|
-
if (
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
209
|
+
let record = records.get(directory);
|
|
210
|
+
if (record === undefined) {
|
|
211
|
+
record = readRecord(path.join(directory, IMAGE_RECORD_NAME), source);
|
|
212
|
+
if (record === undefined)
|
|
213
|
+
return undefined;
|
|
214
|
+
records.set(directory, record);
|
|
215
|
+
}
|
|
216
|
+
if (!current(config, record))
|
|
214
217
|
return undefined;
|
|
215
|
-
|
|
216
|
-
return current(config, record) ? record : undefined;
|
|
218
|
+
return { ...record, version: sourceVersion(config, source) };
|
|
217
219
|
}
|
|
218
220
|
/**
|
|
219
221
|
* Whether a record still describes the file it was derived from.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/images/variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/images/variants.ts"],"names":[],"mappings":"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"}
|