@geekity/cms 0.17.0 → 0.18.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.
Files changed (250) hide show
  1. package/README.md +162 -50
  2. package/admin/pages/documents/editor.njk +63 -0
  3. package/admin/pages/documents/list.njk +2 -0
  4. package/admin/pages/indieauth/consent.njk +4 -0
  5. package/admin/pages/settings/privacy.njk +37 -0
  6. package/admin/pages/users/apps.njk +109 -3
  7. package/dist/admin/documents.d.ts +29 -1
  8. package/dist/admin/documents.d.ts.map +1 -1
  9. package/dist/admin/documents.js +88 -6
  10. package/dist/admin/documents.js.map +1 -1
  11. package/dist/admin/index.d.ts +1 -0
  12. package/dist/admin/index.d.ts.map +1 -1
  13. package/dist/admin/index.js +1 -0
  14. package/dist/admin/index.js.map +1 -1
  15. package/dist/admin/location-field.d.ts +26 -0
  16. package/dist/admin/location-field.d.ts.map +1 -0
  17. package/dist/admin/location-field.js +90 -0
  18. package/dist/admin/location-field.js.map +1 -0
  19. package/dist/admin/menu.d.ts.map +1 -1
  20. package/dist/admin/menu.js +1 -0
  21. package/dist/admin/menu.js.map +1 -1
  22. package/dist/admin/preview.d.ts.map +1 -1
  23. package/dist/admin/preview.js +18 -5
  24. package/dist/admin/preview.js.map +1 -1
  25. package/dist/admin/read-field.d.ts +23 -0
  26. package/dist/admin/read-field.d.ts.map +1 -0
  27. package/dist/admin/read-field.js +53 -0
  28. package/dist/admin/read-field.js.map +1 -0
  29. package/dist/admin/settings-page.d.ts +3 -3
  30. package/dist/admin/settings-page.js +2 -2
  31. package/dist/admin/settings-pages.d.ts +2 -2
  32. package/dist/admin/settings-pages.d.ts.map +1 -1
  33. package/dist/admin/settings-pages.js +4 -2
  34. package/dist/admin/settings-pages.js.map +1 -1
  35. package/dist/admin/settings-privacy.d.ts +3 -0
  36. package/dist/admin/settings-privacy.d.ts.map +1 -0
  37. package/dist/admin/settings-privacy.js +10 -0
  38. package/dist/admin/settings-privacy.js.map +1 -0
  39. package/dist/admin/settings-reading.js +2 -2
  40. package/dist/admin/settings-reading.js.map +1 -1
  41. package/dist/admin/settings.d.ts +18 -2
  42. package/dist/admin/settings.d.ts.map +1 -1
  43. package/dist/admin/settings.js +27 -0
  44. package/dist/admin/settings.js.map +1 -1
  45. package/dist/admin/templates.d.ts +1 -0
  46. package/dist/admin/templates.d.ts.map +1 -1
  47. package/dist/admin/templates.js +1 -0
  48. package/dist/admin/templates.js.map +1 -1
  49. package/dist/admin/uploads.d.ts.map +1 -1
  50. package/dist/admin/uploads.js +14 -1
  51. package/dist/admin/uploads.js.map +1 -1
  52. package/dist/cli.d.ts +1 -1
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +34 -0
  55. package/dist/cli.js.map +1 -1
  56. package/dist/comments/routes.js +2 -2
  57. package/dist/comments/routes.js.map +1 -1
  58. package/dist/contact/routes.js +2 -2
  59. package/dist/contact/routes.js.map +1 -1
  60. package/dist/content/location.d.ts +58 -0
  61. package/dist/content/location.d.ts.map +1 -0
  62. package/dist/content/location.js +208 -0
  63. package/dist/content/location.js.map +1 -0
  64. package/dist/content/locations.d.ts +9 -0
  65. package/dist/content/locations.d.ts.map +1 -0
  66. package/dist/content/locations.js +82 -0
  67. package/dist/content/locations.js.map +1 -0
  68. package/dist/content/metadata/gif.d.ts +3 -0
  69. package/dist/content/metadata/gif.d.ts.map +1 -0
  70. package/dist/content/metadata/gif.js +65 -0
  71. package/dist/content/metadata/gif.js.map +1 -0
  72. package/dist/content/metadata/index.d.ts +6 -0
  73. package/dist/content/metadata/index.d.ts.map +1 -0
  74. package/dist/content/metadata/index.js +24 -0
  75. package/dist/content/metadata/index.js.map +1 -0
  76. package/dist/content/metadata/isobmff.d.ts +22 -0
  77. package/dist/content/metadata/isobmff.d.ts.map +1 -0
  78. package/dist/content/metadata/isobmff.js +215 -0
  79. package/dist/content/metadata/isobmff.js.map +1 -0
  80. package/dist/content/metadata/jpeg.d.ts +3 -0
  81. package/dist/content/metadata/jpeg.d.ts.map +1 -0
  82. package/dist/content/metadata/jpeg.js +117 -0
  83. package/dist/content/metadata/jpeg.js.map +1 -0
  84. package/dist/content/metadata/png.d.ts +3 -0
  85. package/dist/content/metadata/png.d.ts.map +1 -0
  86. package/dist/content/metadata/png.js +74 -0
  87. package/dist/content/metadata/png.js.map +1 -0
  88. package/dist/content/metadata/shared.d.ts +17 -0
  89. package/dist/content/metadata/shared.d.ts.map +1 -0
  90. package/dist/content/metadata/shared.js +42 -0
  91. package/dist/content/metadata/shared.js.map +1 -0
  92. package/dist/content/metadata/sweep.d.ts +14 -0
  93. package/dist/content/metadata/sweep.d.ts.map +1 -0
  94. package/dist/content/metadata/sweep.js +54 -0
  95. package/dist/content/metadata/sweep.js.map +1 -0
  96. package/dist/content/metadata/tiff.d.ts +7 -0
  97. package/dist/content/metadata/tiff.d.ts.map +1 -0
  98. package/dist/content/metadata/tiff.js +56 -0
  99. package/dist/content/metadata/tiff.js.map +1 -0
  100. package/dist/content/metadata/webp.d.ts +3 -0
  101. package/dist/content/metadata/webp.d.ts.map +1 -0
  102. package/dist/content/metadata/webp.js +67 -0
  103. package/dist/content/metadata/webp.js.map +1 -0
  104. package/dist/content/post-type.d.ts +4 -2
  105. package/dist/content/post-type.d.ts.map +1 -1
  106. package/dist/content/post-type.js +9 -1
  107. package/dist/content/post-type.js.map +1 -1
  108. package/dist/content/read.d.ts +22 -0
  109. package/dist/content/read.d.ts.map +1 -0
  110. package/dist/content/read.js +67 -0
  111. package/dist/content/read.js.map +1 -0
  112. package/dist/content/store.d.ts +4 -4
  113. package/dist/content/store.d.ts.map +1 -1
  114. package/dist/content/store.js +19 -39
  115. package/dist/content/store.js.map +1 -1
  116. package/dist/content/sync.d.ts.map +1 -1
  117. package/dist/content/sync.js +3 -13
  118. package/dist/content/sync.js.map +1 -1
  119. package/dist/content/visibility.d.ts +11 -0
  120. package/dist/content/visibility.d.ts.map +1 -0
  121. package/dist/content/visibility.js +14 -0
  122. package/dist/content/visibility.js.map +1 -0
  123. package/dist/federation/article.d.ts.map +1 -1
  124. package/dist/federation/article.js +41 -14
  125. package/dist/federation/article.js.map +1 -1
  126. package/dist/federation/delivery.d.ts +3 -1
  127. package/dist/federation/delivery.d.ts.map +1 -1
  128. package/dist/federation/delivery.js +6 -5
  129. package/dist/federation/delivery.js.map +1 -1
  130. package/dist/federation/mount.d.ts.map +1 -1
  131. package/dist/federation/mount.js +3 -1
  132. package/dist/federation/mount.js.map +1 -1
  133. package/dist/index.d.ts +1 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +5 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/indexnow.js +2 -2
  138. package/dist/indexnow.js.map +1 -1
  139. package/dist/indieauth/activity-log.d.ts +2 -0
  140. package/dist/indieauth/activity-log.d.ts.map +1 -1
  141. package/dist/indieauth/activity-log.js +12 -2
  142. package/dist/indieauth/activity-log.js.map +1 -1
  143. package/dist/indieauth/app-activity.js +5 -1
  144. package/dist/indieauth/app-activity.js.map +1 -1
  145. package/dist/indieauth/bearer.d.ts.map +1 -1
  146. package/dist/indieauth/bearer.js +17 -16
  147. package/dist/indieauth/bearer.js.map +1 -1
  148. package/dist/indieauth/client-id.d.ts +10 -0
  149. package/dist/indieauth/client-id.d.ts.map +1 -0
  150. package/dist/indieauth/client-id.js +30 -0
  151. package/dist/indieauth/client-id.js.map +1 -0
  152. package/dist/indieauth/connected-apps.d.ts +4 -0
  153. package/dist/indieauth/connected-apps.d.ts.map +1 -1
  154. package/dist/indieauth/connected-apps.js +149 -20
  155. package/dist/indieauth/connected-apps.js.map +1 -1
  156. package/dist/indieauth/consent.d.ts.map +1 -1
  157. package/dist/indieauth/consent.js +5 -1
  158. package/dist/indieauth/consent.js.map +1 -1
  159. package/dist/indieauth/grants.d.ts +2 -7
  160. package/dist/indieauth/grants.d.ts.map +1 -1
  161. package/dist/indieauth/grants.js.map +1 -1
  162. package/dist/indieauth/redeem.d.ts.map +1 -1
  163. package/dist/indieauth/redeem.js +10 -5
  164. package/dist/indieauth/redeem.js.map +1 -1
  165. package/dist/indieauth/request.d.ts +8 -4
  166. package/dist/indieauth/request.d.ts.map +1 -1
  167. package/dist/indieauth/request.js +29 -30
  168. package/dist/indieauth/request.js.map +1 -1
  169. package/dist/indieauth/token.js +1 -1
  170. package/dist/indieauth/token.js.map +1 -1
  171. package/dist/indieauth/tokens.d.ts +28 -7
  172. package/dist/indieauth/tokens.d.ts.map +1 -1
  173. package/dist/indieauth/tokens.js +26 -5
  174. package/dist/indieauth/tokens.js.map +1 -1
  175. package/dist/micropub/create.d.ts +22 -0
  176. package/dist/micropub/create.d.ts.map +1 -1
  177. package/dist/micropub/create.js +107 -8
  178. package/dist/micropub/create.js.map +1 -1
  179. package/dist/micropub/endpoint.d.ts.map +1 -1
  180. package/dist/micropub/endpoint.js +71 -20
  181. package/dist/micropub/endpoint.js.map +1 -1
  182. package/dist/micropub/media.d.ts +4 -2
  183. package/dist/micropub/media.d.ts.map +1 -1
  184. package/dist/micropub/media.js +41 -37
  185. package/dist/micropub/media.js.map +1 -1
  186. package/dist/micropub/update.d.ts +6 -2
  187. package/dist/micropub/update.d.ts.map +1 -1
  188. package/dist/micropub/update.js +31 -3
  189. package/dist/micropub/update.js.map +1 -1
  190. package/dist/notify.d.ts.map +1 -1
  191. package/dist/notify.js +2 -5
  192. package/dist/notify.js.map +1 -1
  193. package/dist/web/absolute-urls.d.ts +2 -0
  194. package/dist/web/absolute-urls.d.ts.map +1 -0
  195. package/dist/web/absolute-urls.js +22 -0
  196. package/dist/web/absolute-urls.js.map +1 -0
  197. package/dist/web/context.d.ts +29 -1
  198. package/dist/web/context.d.ts.map +1 -1
  199. package/dist/web/context.js +33 -0
  200. package/dist/web/context.js.map +1 -1
  201. package/dist/web/conversation.d.ts.map +1 -1
  202. package/dist/web/conversation.js +5 -4
  203. package/dist/web/conversation.js.map +1 -1
  204. package/dist/web/documents.d.ts +19 -10
  205. package/dist/web/documents.d.ts.map +1 -1
  206. package/dist/web/documents.js +28 -13
  207. package/dist/web/documents.js.map +1 -1
  208. package/dist/web/feed-item.d.ts +25 -6
  209. package/dist/web/feed-item.d.ts.map +1 -1
  210. package/dist/web/feed-item.js +31 -7
  211. package/dist/web/feed-item.js.map +1 -1
  212. package/dist/web/feed-json.d.ts +3 -1
  213. package/dist/web/feed-json.d.ts.map +1 -1
  214. package/dist/web/feed-json.js +2 -0
  215. package/dist/web/feed-json.js.map +1 -1
  216. package/dist/web/feed-source.d.ts +6 -0
  217. package/dist/web/feed-source.d.ts.map +1 -1
  218. package/dist/web/feed-source.js.map +1 -1
  219. package/dist/web/feeds.d.ts.map +1 -1
  220. package/dist/web/feeds.js +2 -0
  221. package/dist/web/feeds.js.map +1 -1
  222. package/dist/web/html-attributes.d.ts +3 -0
  223. package/dist/web/html-attributes.d.ts.map +1 -0
  224. package/dist/web/html-attributes.js +15 -0
  225. package/dist/web/html-attributes.js.map +1 -0
  226. package/dist/web/index.d.ts +1 -1
  227. package/dist/web/index.d.ts.map +1 -1
  228. package/dist/web/index.js +1 -1
  229. package/dist/web/index.js.map +1 -1
  230. package/dist/web/negotiate.d.ts +2 -0
  231. package/dist/web/negotiate.d.ts.map +1 -1
  232. package/dist/web/negotiate.js +2 -1
  233. package/dist/web/negotiate.js.map +1 -1
  234. package/dist/web/render.d.ts +8 -0
  235. package/dist/web/render.d.ts.map +1 -1
  236. package/dist/web/render.js +5 -1
  237. package/dist/web/render.js.map +1 -1
  238. package/dist/web/routes.d.ts.map +1 -1
  239. package/dist/web/routes.js +14 -10
  240. package/dist/web/routes.js.map +1 -1
  241. package/dist/webmention/service.d.ts.map +1 -1
  242. package/dist/webmention/service.js +7 -2
  243. package/dist/webmention/service.js.map +1 -1
  244. package/package.json +1 -1
  245. package/themes/default/README.md +15 -0
  246. package/themes/default/layouts/base.njk +2 -0
  247. package/themes/default/layouts/post.njk +7 -1
  248. package/themes/default/partials/location.njk +12 -0
  249. package/themes/default/partials/post-list.njk +2 -0
  250. package/themes/default/partials/read.njk +5 -0
@@ -0,0 +1,56 @@
1
+ import { ascii, view } from './shared.js';
2
+ const ORIENTATION_TAG = 0x0112;
3
+ /**
4
+ * The orientation an EXIF block's first IFD gives, or 1 — upright — when it
5
+ * gives none or cannot be read. `tiff` starts at the byte-order mark.
6
+ */
7
+ function exifOrientation(tiff) {
8
+ if (tiff.length < 8)
9
+ return 1;
10
+ const little = tiff[0] === 0x49 && tiff[1] === 0x49;
11
+ if (!little && !(tiff[0] === 0x4d && tiff[1] === 0x4d))
12
+ return 1;
13
+ const data = view(tiff);
14
+ const ifd = data.getUint32(4, little);
15
+ if (ifd + 2 > tiff.length)
16
+ return 1;
17
+ const entries = data.getUint16(ifd, little);
18
+ for (let index = 0; index < entries; index += 1) {
19
+ const entry = ifd + 2 + index * 12;
20
+ if (entry + 12 > tiff.length)
21
+ return 1;
22
+ if (data.getUint16(entry, little) === ORIENTATION_TAG &&
23
+ data.getUint16(entry + 2, little) === 3) {
24
+ const value = data.getUint16(entry + 8, little);
25
+ return value >= 1 && value <= 8 ? value : 1;
26
+ }
27
+ }
28
+ return 1;
29
+ }
30
+ /**
31
+ * An EXIF block holding the orientation and nothing else: a big-endian TIFF
32
+ * header, one IFD with one SHORT entry, no next IFD.
33
+ */
34
+ function orientationOnlyTiff(orientation) {
35
+ const tiff = new Uint8Array(26);
36
+ const data = view(tiff);
37
+ tiff.set(ascii('MM'));
38
+ data.setUint16(2, 42);
39
+ data.setUint32(4, 8);
40
+ data.setUint16(8, 1);
41
+ data.setUint16(10, ORIENTATION_TAG);
42
+ data.setUint16(12, 3);
43
+ data.setUint32(14, 1);
44
+ data.setUint16(18, orientation);
45
+ return tiff;
46
+ }
47
+ /**
48
+ * What a format should keep of an EXIF block: the orientation alone when the
49
+ * picture is turned, since dropping it would show a phone photo sideways, and
50
+ * nothing when it is upright.
51
+ */
52
+ export function keptExif(tiff) {
53
+ const orientation = exifOrientation(tiff);
54
+ return orientation === 1 ? undefined : orientationOnlyTiff(orientation);
55
+ }
56
+ //# sourceMappingURL=tiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiff.js","sourceRoot":"","sources":["../../../src/content/metadata/tiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAgB;IACvC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACpD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QACvC,IACE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,eAAe;YACjD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EACvC,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Stripped } from './shared.ts';
2
+ export declare function stripWebp(bytes: Uint8Array): Stripped;
3
+ //# sourceMappingURL=webp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webp.d.ts","sourceRoot":"","sources":["../../../src/content/metadata/webp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ5C,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAmDrD"}
@@ -0,0 +1,67 @@
1
+ import { ascii, concat, fourcc, sameBytes, startsWith, stripped, view } from './shared.js';
2
+ import { keptExif } from './tiff.js';
3
+ const PICTURE = new Set(['VP8 ', 'VP8L', 'VP8X', 'ALPH', 'ANIM', 'ANMF', 'ICCP']);
4
+ const HAS_EXIF = 0x08;
5
+ const HAS_XMP = 0x04;
6
+ export function stripWebp(bytes) {
7
+ const data = view(bytes);
8
+ const chunks = [];
9
+ const removed = [];
10
+ let keptExifChunk = false;
11
+ let vp8x;
12
+ for (let at = 12; at < bytes.length;) {
13
+ if (at + 8 > bytes.length) {
14
+ chunks.push(bytes.subarray(at));
15
+ break;
16
+ }
17
+ const type = fourcc(bytes, at);
18
+ const size = data.getUint32(at + 4, true);
19
+ const end = Math.min(bytes.length, at + 8 + size + (size % 2));
20
+ const original = bytes.subarray(at, end);
21
+ if (type === 'EXIF') {
22
+ let tiff = bytes.subarray(at + 8, Math.min(bytes.length, at + 8 + size));
23
+ // Some writers keep JPEG's "Exif\0\0" in front of the TIFF header.
24
+ if (startsWith(tiff, ascii('Exif\0\0')))
25
+ tiff = tiff.subarray(6);
26
+ const kept = keptExif(tiff);
27
+ if (kept === undefined) {
28
+ removed.push('EXIF');
29
+ }
30
+ else {
31
+ const replacement = riffChunk('EXIF', kept);
32
+ if (!sameBytes(replacement, original))
33
+ removed.push('EXIF');
34
+ chunks.push(replacement);
35
+ keptExifChunk = true;
36
+ }
37
+ }
38
+ else if (PICTURE.has(type)) {
39
+ if (type === 'VP8X')
40
+ vp8x = chunks.length;
41
+ chunks.push(original);
42
+ }
43
+ else {
44
+ removed.push(type === 'XMP ' ? 'XMP' : `${type.trim()} chunk`);
45
+ }
46
+ at = end;
47
+ }
48
+ if (vp8x !== undefined) {
49
+ const header = Uint8Array.from(chunks[vp8x]);
50
+ const flags = header[8] ?? 0;
51
+ header[8] = (flags & ~(HAS_EXIF | HAS_XMP)) | (keptExifChunk ? HAS_EXIF : 0);
52
+ chunks[vp8x] = header;
53
+ }
54
+ const body = concat(chunks);
55
+ const riff = new Uint8Array(12);
56
+ riff.set(bytes.subarray(0, 12));
57
+ view(riff).setUint32(4, body.length + 4, true);
58
+ return stripped(bytes, [riff, body], removed);
59
+ }
60
+ function riffChunk(type, body) {
61
+ const out = new Uint8Array(8 + body.length + (body.length % 2));
62
+ out.set(ascii(type));
63
+ view(out).setUint32(4, body.length, true);
64
+ out.set(body, 8);
65
+ return out;
66
+ }
67
+ //# sourceMappingURL=webp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webp.js","sourceRoot":"","sources":["../../../src/content/metadata/webp.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ import type { Document } from './document.ts';
18
18
  * types as something else keeps that type, and a bookmark claims only what
19
19
  * the spec would have called a note or an article.
20
20
  */
21
- export type PostType = 'repost' | 'like' | 'reply' | 'photo' | 'bookmark' | 'note' | 'article';
21
+ export type PostType = 'repost' | 'like' | 'reply' | 'photo' | 'read' | 'bookmark' | 'note' | 'article';
22
22
  /** The mf2 properties the algorithm reads, each as its plain-text value. */
23
23
  export interface PostProperties {
24
24
  name?: string | undefined;
@@ -30,6 +30,8 @@ export interface PostProperties {
30
30
  'repost-of'?: string | undefined;
31
31
  'like-of'?: string | undefined;
32
32
  'bookmark-of'?: string | undefined;
33
+ 'read-of'?: string | undefined;
34
+ 'read-status'?: string | undefined;
33
35
  }
34
36
  /** The type of a post with these properties. */
35
37
  export declare function discoverPostType(properties: PostProperties): PostType;
@@ -55,6 +57,6 @@ type PostDocument = Pick<Document, 'title' | 'html' | 'description' | 'inReplyTo
55
57
  * The words a link to a document says: its title, or for an untitled post the
56
58
  * first words of its text, so a note is never an empty link.
57
59
  */
58
- export declare function postLabel(document: Pick<Document, 'title' | 'html' | 'description'>): string;
60
+ export declare function postLabel(document: Pick<Document, 'title' | 'html' | 'description' | 'extra'>): string;
59
61
  export {};
60
62
  //# sourceMappingURL=post-type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-type.d.ts","sourceRoot":"","sources":["../../src/content/post-type.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/F,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,QAAQ,CAOrE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAErF;AAED,yDAAyD;AACzD,KAAK,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC;AAuB7F;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC,GAAG,MAAM,CAQ5F"}
1
+ {"version":3,"file":"post-type.d.ts","sourceRoot":"","sources":["../../src/content/post-type.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,QAAQ,GAClB,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnF,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,QAAQ,CAUrE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAErF;AAED,yDAAyD;AACzD,KAAK,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC;AA0B7F;;;GAGG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,GACnE,MAAM,CASR"}
@@ -1,5 +1,6 @@
1
1
  import { citationsOf } from './citation.js';
2
2
  import { photosOf } from './photo.js';
3
+ import { isReadStatus, readLine, readOf } from './read.js';
3
4
  import { htmlToText } from './search.js';
4
5
  /** The type of a post with these properties. */
5
6
  export function discoverPostType(properties) {
@@ -11,6 +12,9 @@ export function discoverPostType(properties) {
11
12
  return 'reply';
12
13
  if ((properties.photo ?? []).length > 0)
13
14
  return 'photo';
15
+ if ((properties['read-of'] ?? '') !== '' && isReadStatus(properties['read-status'])) {
16
+ return 'read';
17
+ }
14
18
  if (validUrl(properties['bookmark-of']) !== undefined)
15
19
  return 'bookmark';
16
20
  return isNamedPost(properties) ? 'article' : 'note';
@@ -38,6 +42,7 @@ export function replyTarget(document) {
38
42
  return validUrl(document.inReplyTo);
39
43
  }
40
44
  function propertiesOf(document) {
45
+ const read = readOf(document.extra);
41
46
  return {
42
47
  name: document.title,
43
48
  content: htmlToText(document.html),
@@ -50,6 +55,8 @@ function propertiesOf(document) {
50
55
  property,
51
56
  url,
52
57
  ])),
58
+ 'read-of': read?.of.name,
59
+ 'read-status': read?.status,
53
60
  };
54
61
  }
55
62
  /** How many words of an untitled post's text {@link postLabel} keeps. */
@@ -61,7 +68,8 @@ const LABEL_WORDS = 10;
61
68
  export function postLabel(document) {
62
69
  if (document.title !== '')
63
70
  return document.title;
64
- const text = normalize(htmlToText(document.html)) || normalize(document.description ?? '');
71
+ const html = readLine(readOf(document.extra)) + document.html;
72
+ const text = normalize(htmlToText(html)) || normalize(document.description ?? '');
65
73
  if (text === '')
66
74
  return 'Untitled';
67
75
  const words = text.split(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"post-type.js","sourceRoot":"","sources":["../../src/content/post-type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post-type.js","sourceRoot":"","sources":["../../src/content/post-type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const READ_OF_FRONT_MATTER_KEY = "read-of";
2
+ export declare const READ_STATUS_FRONT_MATTER_KEY = "read-status";
3
+ export declare const READ_STATUSES: readonly ['to-read', 'reading', 'finished'];
4
+ export type ReadStatus = (typeof READ_STATUSES)[number];
5
+ export declare const READ_STATUS_LABELS: Readonly<Record<ReadStatus, string>>;
6
+ export interface ReadOf {
7
+ readonly name: string;
8
+ readonly author?: string | undefined;
9
+ readonly uid?: string | undefined;
10
+ readonly url?: string | undefined;
11
+ }
12
+ export interface Read {
13
+ readonly status: ReadStatus;
14
+ readonly of: ReadOf;
15
+ }
16
+ export declare function isReadStatus(value: unknown): value is ReadStatus;
17
+ export declare function readOf(extra: Readonly<Record<string, unknown>>): Read | undefined;
18
+ export declare function readWork(value: unknown): ReadOf | undefined;
19
+ export declare function uidLabel(uid: string): string;
20
+ export declare function readWorkFrontMatter({ name, author, uid, url }: ReadOf): ReadOf;
21
+ export declare function readLine(read: Read | undefined): string;
22
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/content/read.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,4BAA4B,gBAAgB,CAAC;AAE1D,eAAO,MAAM,aAAa,YAAI,SAAS,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAInE,CAAC;AAEF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAKjF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAW3D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,GAAG,MAAM,CAO9E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAcvD"}
@@ -0,0 +1,67 @@
1
+ import { isWebUrl } from './enclosure.js';
2
+ export const READ_OF_FRONT_MATTER_KEY = 'read-of';
3
+ export const READ_STATUS_FRONT_MATTER_KEY = 'read-status';
4
+ export const READ_STATUSES = ['to-read', 'reading', 'finished'];
5
+ export const READ_STATUS_LABELS = {
6
+ 'to-read': 'Want to read',
7
+ reading: 'Currently reading',
8
+ finished: 'Finished reading',
9
+ };
10
+ export function isReadStatus(value) {
11
+ return READ_STATUSES.includes(value);
12
+ }
13
+ export function readOf(extra) {
14
+ const status = extra[READ_STATUS_FRONT_MATTER_KEY];
15
+ const of = readWork(extra[READ_OF_FRONT_MATTER_KEY]);
16
+ if (!isReadStatus(status) || of === undefined)
17
+ return undefined;
18
+ return { status, of: isWebUrl(of.url ?? '') ? of : { ...of, url: undefined } };
19
+ }
20
+ export function readWork(value) {
21
+ if (typeof value === 'string')
22
+ return value.trim() === '' ? undefined : { name: value.trim() };
23
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
24
+ return undefined;
25
+ const fields = value;
26
+ const word = (key) => {
27
+ const field = fields[key];
28
+ return typeof field === 'string' && field.trim() !== '' ? field.trim() : undefined;
29
+ };
30
+ const name = word('name');
31
+ if (name === undefined)
32
+ return undefined;
33
+ return readWorkFrontMatter({ name, author: word('author'), uid: word('uid'), url: word('url') });
34
+ }
35
+ export function uidLabel(uid) {
36
+ return /^isbn:/i.test(uid) ? `ISBN: ${uid.slice('isbn:'.length)}` : uid;
37
+ }
38
+ export function readWorkFrontMatter({ name, author, uid, url }) {
39
+ return {
40
+ name,
41
+ ...(author ? { author } : {}),
42
+ ...(uid ? { uid } : {}),
43
+ ...(url ? { url } : {}),
44
+ };
45
+ }
46
+ export function readLine(read) {
47
+ if (read === undefined)
48
+ return '';
49
+ const { status, of } = read;
50
+ const cited = `<cite class="p-name">${escapeHtml(of.name)}</cite>`;
51
+ return (`<p class="read-line"><data class="p-read-status" value="${status}">` +
52
+ `${READ_STATUS_LABELS[status]}</data>: <span class="p-read-of h-cite">` +
53
+ (of.url === undefined ? cited : `<a class="u-url" href="${escapeHtml(of.url)}">${cited}</a>`) +
54
+ (of.author === undefined ? '' : ` by <span class="p-author">${escapeHtml(of.author)}</span>`) +
55
+ (of.uid === undefined
56
+ ? ''
57
+ : `, <data class="p-uid" value="${escapeHtml(of.uid)}">${escapeHtml(uidLabel(of.uid))}</data>`) +
58
+ '</span></p>\n');
59
+ }
60
+ function escapeHtml(value) {
61
+ return value
62
+ .replaceAll('&', '&amp;')
63
+ .replaceAll('<', '&lt;')
64
+ .replaceAll('>', '&gt;')
65
+ .replaceAll('"', '&quot;');
66
+ }
67
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/content/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,aAAa,CAAC;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAIzE,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,SAAS,EAAE,cAAc;IACzB,OAAO,EAAE,mBAAmB;IAC5B,QAAQ,EAAE,kBAAkB;CAC7B,CAAC;AAcF,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAmB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAwC;IAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IAC/F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1F,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAsB,EAAE;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAU;IACpE,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAsB;IAC7C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,wBAAwB,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;IACnE,OAAO,CACL,2DAA2D,MAAM,IAAI;QACrE,GAAG,kBAAkB,CAAC,MAAM,CAAC,0CAA0C;QACvE,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC;QAC7F,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7F,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS;YACnB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gCAAgC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;QACjG,eAAe,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
@@ -101,7 +101,7 @@ export interface ContentStore {
101
101
  * years, so the newest match wins.
102
102
  */
103
103
  getBySlug(slug: string): Document | undefined;
104
- /** Published, untrashed, already-due posts, newest first. */
104
+ /** Published, untrashed, already-due, listed posts, newest first. */
105
105
  listPosts(options?: ListOptions): Document[];
106
106
  /**
107
107
  * Published, untrashed, already-due posts dated at or after an instant,
@@ -289,9 +289,9 @@ export interface ListAllOptions extends ListOptions {
289
289
  export interface ContentCounts {
290
290
  /** Every indexed document, trash included. */
291
291
  total: number;
292
- /** Published, untrashed, already-due posts: the size of the public archive. */
292
+ /** Published, untrashed, already-due, listed posts: the size of the public archive. */
293
293
  posts: number;
294
- /** Published, untrashed, already-due pages. */
294
+ /** Published, untrashed, already-due, listed pages. */
295
295
  pages: number;
296
296
  /** Untrashed drafts of either type. */
297
297
  drafts: number;
@@ -322,7 +322,7 @@ export type TaxonomyName = 'tag' | 'category';
322
322
  export interface TermUsage {
323
323
  /** The term itself, as the files spell it. */
324
324
  term: string;
325
- /** Documents the public site lists under it: published, untrashed, due. */
325
+ /** Documents the public site lists under it: published, untrashed, due, listed. */
326
326
  published: number;
327
327
  /** Every file carrying it, drafts, scheduled posts and the trash included. */
328
328
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/content/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/content/store.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { databaseFile, openDatabase } from '../cache.js';
2
2
  import { featuredPosts, PINNED_FRONT_MATTER_KEY } from './pinned.js';
3
3
  import { searchExpression, searchText, SNIPPET_CLOSE, SNIPPET_OPEN } from './search.js';
4
+ import { VISIBILITIES, VISIBILITY_FRONT_MATTER_KEY } from './visibility.js';
4
5
  export { DATABASE_FILE } from '../cache.js';
5
6
  /** Directory name that marks a document as thrown away but not yet deleted. */
6
7
  export const TRASH_DIRECTORY = '_trash';
@@ -61,6 +62,9 @@ export function dateSortKey(date) {
61
62
  const DUE_CLAUSE = '(date_sort IS NULL OR date_sort <= ?)';
62
63
  /** The reverse: a document whose date is still ahead of the clock. */
63
64
  const SCHEDULED_CLAUSE = '(date_sort IS NOT NULL AND date_sort > ?)';
65
+ const VISIBILITY_SQL = `COALESCE(json_extract(extra, '$.${VISIBILITY_FRONT_MATTER_KEY}'), 'public')`;
66
+ const SERVED_CLAUSE = `(draft = 0 AND trashed = 0 AND ${DUE_CLAUSE} AND ${VISIBILITY_SQL} IN (${VISIBILITIES.map((visibility) => `'${visibility}'`).join(', ')}))`;
67
+ const LISTED_CLAUSE = `(${SERVED_CLAUSE} AND ${VISIBILITY_SQL} = 'public')`;
64
68
  /**
65
69
  * A document whose front matter carries a `pinned` key that is not `false`.
66
70
  * Which moment it was pinned at, and whether it is readable at all, is
@@ -94,8 +98,7 @@ const SEARCH_FROM = `
94
98
  FROM documents_fts
95
99
  JOIN documents ON documents.path = documents_fts.path
96
100
  WHERE documents_fts MATCH ?
97
- AND documents.draft = 0 AND documents.trashed = 0
98
- AND (documents.date_sort IS NULL OR documents.date_sort <= ?)
101
+ AND ${LISTED_CLAUSE}
99
102
  `;
100
103
  /**
101
104
  * How much a match in each column of the index counts, in the order the table
@@ -159,7 +162,7 @@ export function openContentStore(options) {
159
162
  SELECT documents.* FROM documents
160
163
  JOIN document_redirects ON document_redirects.path = documents.path
161
164
  WHERE document_redirects.url = ?
162
- AND documents.draft = 0 AND documents.trashed = 0 AND ${DUE_CLAUSE}
165
+ AND ${SERVED_CLAUSE}
163
166
  ORDER BY documents.updated DESC, documents.path DESC
164
167
  LIMIT 1
165
168
  `),
@@ -171,8 +174,8 @@ export function openContentStore(options) {
171
174
  counts: db.prepare(`
172
175
  SELECT
173
176
  COUNT(*) AS total,
174
- COALESCE(SUM(type = 'post' AND draft = 0 AND trashed = 0 AND ${DUE_CLAUSE}), 0) AS posts,
175
- COALESCE(SUM(type = 'page' AND draft = 0 AND trashed = 0 AND ${DUE_CLAUSE}), 0) AS pages,
177
+ COALESCE(SUM(type = 'post' AND ${LISTED_CLAUSE}), 0) AS posts,
178
+ COALESCE(SUM(type = 'page' AND ${LISTED_CLAUSE}), 0) AS pages,
176
179
  COALESCE(SUM(draft = 1 AND trashed = 0), 0) AS drafts,
177
180
  COALESCE(SUM(draft = 0 AND trashed = 0 AND ${SCHEDULED_CLAUSE}), 0) AS scheduled,
178
181
  COALESCE(SUM(trashed = 1), 0) AS trashed
@@ -182,8 +185,7 @@ export function openContentStore(options) {
182
185
  SELECT document_tags.tag AS tag, COUNT(*) AS count
183
186
  FROM document_tags
184
187
  JOIN documents ON documents.path = document_tags.path
185
- WHERE documents.draft = 0 AND documents.trashed = 0
186
- AND (documents.date_sort IS NULL OR documents.date_sort <= ?)
188
+ WHERE ${LISTED_CLAUSE}
187
189
  GROUP BY document_tags.tag
188
190
  ORDER BY count DESC, tag ASC
189
191
  `),
@@ -191,8 +193,7 @@ export function openContentStore(options) {
191
193
  SELECT document_categories.category AS category, COUNT(*) AS count
192
194
  FROM document_categories
193
195
  JOIN documents ON documents.path = document_categories.path
194
- WHERE documents.draft = 0 AND documents.trashed = 0
195
- AND (documents.date_sort IS NULL OR documents.date_sort <= ?)
196
+ WHERE ${LISTED_CLAUSE}
196
197
  GROUP BY document_categories.category
197
198
  ORDER BY count DESC, category ASC
198
199
  `),
@@ -276,12 +277,7 @@ export function openContentStore(options) {
276
277
  * tables, so neither can drift from the other.
277
278
  */
278
279
  function selectByTerm(table, column, term, options) {
279
- const where = [
280
- 'draft = 0',
281
- 'trashed = 0',
282
- DUE_CLAUSE,
283
- `path IN (SELECT path FROM ${table} WHERE ${column} = ?)`,
284
- ];
280
+ const where = [LISTED_CLAUSE, `path IN (SELECT path FROM ${table} WHERE ${column} = ?)`];
285
281
  const params = [nowKey(), term];
286
282
  if (options.type !== undefined) {
287
283
  where.unshift('type = ?');
@@ -291,12 +287,7 @@ export function openContentStore(options) {
291
287
  }
292
288
  /** {@link selectByTerm}'s total, for the pager and the archive's existence. */
293
289
  function countByTerm(table, column, term, options) {
294
- const where = [
295
- 'documents.draft = 0',
296
- 'documents.trashed = 0',
297
- '(documents.date_sort IS NULL OR documents.date_sort <= ?)',
298
- `${table}.${column} = ?`,
299
- ];
290
+ const where = [LISTED_CLAUSE, `${table}.${column} = ?`];
300
291
  const params = [nowKey(), term];
301
292
  if (options.type !== undefined) {
302
293
  where.push('documents.type = ?');
@@ -319,7 +310,7 @@ export function openContentStore(options) {
319
310
  function neighbour(direction, order, key, contentPath) {
320
311
  const row = db
321
312
  .prepare(`SELECT * FROM documents
322
- WHERE type = 'post' AND draft = 0 AND trashed = 0 AND ${DUE_CLAUSE}
313
+ WHERE type = 'post' AND ${LISTED_CLAUSE}
323
314
  AND date_sort IS NOT NULL
324
315
  AND (date_sort, path) ${direction} (?, ?)
325
316
  ORDER BY date_sort ${order}, path ${order}
@@ -396,13 +387,13 @@ export function openContentStore(options) {
396
387
  return hydrate(statements.bySlug.get(slug));
397
388
  },
398
389
  listPosts(options = {}) {
399
- return select(["type = 'post'", 'draft = 0', 'trashed = 0', DUE_CLAUSE], [nowKey()], options);
390
+ return select(["type = 'post'", LISTED_CLAUSE], [nowKey()], options);
400
391
  },
401
392
  listPostsSince(instant) {
402
393
  const since = dateSortKey(instant);
403
394
  if (since === null)
404
395
  return [];
405
- return select(["type = 'post'", 'draft = 0', 'trashed = 0', DUE_CLAUSE, 'date_sort >= ?'], [nowKey(), since], {});
396
+ return select(["type = 'post'", LISTED_CLAUSE, 'date_sort >= ?'], [nowKey(), since], {});
406
397
  },
407
398
  neighbours(document) {
408
399
  // A page is nobody's neighbour, and neither is a document the archive
@@ -440,19 +431,12 @@ export function openContentStore(options) {
440
431
  listByAuthor(names, options = {}) {
441
432
  if (names.length === 0)
442
433
  return [];
443
- return select(["type = 'post'", 'draft = 0', 'trashed = 0', DUE_CLAUSE, authorClause(names)], [nowKey(), ...names], options);
434
+ return select(["type = 'post'", LISTED_CLAUSE, authorClause(names)], [nowKey(), ...names], options);
444
435
  },
445
436
  listPinnedByAuthor(names) {
446
437
  if (names.length === 0)
447
438
  return [];
448
- return featuredPosts(select([
449
- "type = 'post'",
450
- 'draft = 0',
451
- 'trashed = 0',
452
- DUE_CLAUSE,
453
- authorClause(names),
454
- PINNED_CLAUSE,
455
- ], [nowKey(), ...names], {}));
439
+ return featuredPosts(select(["type = 'post'", LISTED_CLAUSE, authorClause(names), PINNED_CLAUSE], [nowKey(), ...names], {}));
456
440
  },
457
441
  listAll(options = {}) {
458
442
  const where = [];
@@ -510,8 +494,7 @@ export function openContentStore(options) {
510
494
  return 0;
511
495
  const row = db
512
496
  .prepare(`SELECT COUNT(*) AS count FROM documents
513
- WHERE type = 'post' AND draft = 0 AND trashed = 0
514
- AND ${DUE_CLAUSE} AND ${authorClause(names)}`)
497
+ WHERE type = 'post' AND ${LISTED_CLAUSE} AND ${authorClause(names)}`)
515
498
  .get(...[nowKey(), ...names]);
516
499
  return Number(row['count']);
517
500
  },
@@ -568,10 +551,7 @@ export function openContentStore(options) {
568
551
  function termUsageSql(table, column) {
569
552
  return `
570
553
  SELECT ${table}.${column} AS term,
571
- COALESCE(SUM(
572
- documents.draft = 0 AND documents.trashed = 0
573
- AND (documents.date_sort IS NULL OR documents.date_sort <= ?)
574
- ), 0) AS published,
554
+ COALESCE(SUM(${LISTED_CLAUSE}), 0) AS published,
575
555
  COUNT(*) AS total
576
556
  FROM ${table}
577
557
  JOIN documents ON documents.path = ${table}.path