bookish-press 0.4.47 → 0.4.49

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 (533) hide show
  1. package/components/Auth.svelte +55 -0
  2. package/components/Auth.svelte.d.ts +16 -0
  3. package/{src/lib/components/Authentication.ts → components/Authentication.d.ts} +0 -2
  4. package/components/Authentication.js +1 -0
  5. package/{src/lib/components → components}/BookPreview.svelte +22 -27
  6. package/components/BookPreview.svelte.d.ts +18 -0
  7. package/{src/lib/components → components}/External.svelte +1 -2
  8. package/components/External.svelte.d.ts +18 -0
  9. package/components/Link.svelte +51 -0
  10. package/components/Link.svelte.d.ts +18 -0
  11. package/{src/lib/components → components}/app/BookList.svelte +3 -6
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/{src/lib/components → components}/app/Button.svelte +4 -5
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/{src/lib/components → components}/app/Feedback.svelte +7 -11
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/{src/lib/components → components}/app/Head.svelte +1 -2
  18. package/components/app/Head.svelte.d.ts +18 -0
  19. package/{src/lib/components → components}/app/Large.svelte +0 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/{src/lib/components → components}/app/Lead.svelte +0 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/{src/lib/components → components}/app/Link.svelte +3 -4
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/{src/lib/components → components}/app/Options.svelte +4 -5
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/{src/lib/components → components}/app/Paragraph.svelte +1 -2
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/{src/lib/components → components}/app/Section.svelte +0 -0
  30. package/components/app/Section.svelte.d.ts +27 -0
  31. package/{src/lib/components → components}/app/Table.svelte +0 -0
  32. package/components/app/Table.svelte.d.ts +27 -0
  33. package/{src/lib/components → components}/app/TextInput.svelte +9 -12
  34. package/components/app/TextInput.svelte.d.ts +22 -0
  35. package/{src/lib/components → components}/chapter/Atom.svelte +12 -18
  36. package/components/chapter/Atom.svelte.d.ts +19 -0
  37. package/components/chapter/Block.svelte +37 -0
  38. package/components/chapter/Block.svelte.d.ts +17 -0
  39. package/{src/lib/components → components}/chapter/Callout.svelte +3 -6
  40. package/components/chapter/Callout.svelte.d.ts +17 -0
  41. package/{src/lib/components → components}/chapter/CaptionedCode.svelte +13 -21
  42. package/components/chapter/CaptionedCode.svelte.d.ts +17 -0
  43. package/{src/lib/components → components}/chapter/ChapterBody.svelte +9 -13
  44. package/components/chapter/ChapterBody.svelte.d.ts +19 -0
  45. package/{src/lib/components → components}/chapter/Citations.svelte +33 -34
  46. package/components/chapter/Citations.svelte.d.ts +17 -0
  47. package/{src/lib/components → components}/chapter/Code.svelte +60 -64
  48. package/components/chapter/Code.svelte.d.ts +22 -0
  49. package/{src/lib/components → components}/chapter/Comment.svelte +18 -30
  50. package/components/chapter/Comment.svelte.d.ts +17 -0
  51. package/{src/lib/components → components}/chapter/Definition.svelte +17 -23
  52. package/components/chapter/Definition.svelte.d.ts +17 -0
  53. package/{src/lib/components → components}/chapter/Embed.svelte +77 -97
  54. package/components/chapter/Embed.svelte.d.ts +20 -0
  55. package/components/chapter/ErrorMessage.svelte +9 -0
  56. package/components/chapter/ErrorMessage.svelte.d.ts +17 -0
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/{src/lib/components → components}/chapter/ExtendedPrism.js +0 -0
  59. package/{src/lib/components → components}/chapter/Figure.svelte +26 -34
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/{src/lib/components → components}/chapter/Footnote.svelte +20 -32
  62. package/components/chapter/Footnote.svelte.d.ts +19 -0
  63. package/{src/lib/components → components}/chapter/Format.svelte +34 -39
  64. package/components/chapter/Format.svelte.d.ts +19 -0
  65. package/{src/lib/components → components}/chapter/InlineCode.svelte +5 -9
  66. package/components/chapter/InlineCode.svelte.d.ts +17 -0
  67. package/{src/lib/components → components}/chapter/Label.svelte +14 -23
  68. package/components/chapter/Label.svelte.d.ts +17 -0
  69. package/{src/lib/components → components}/chapter/Link.svelte +21 -27
  70. package/components/chapter/Link.svelte.d.ts +17 -0
  71. package/{src/lib/components → components}/chapter/List.svelte +3 -5
  72. package/components/chapter/List.svelte.d.ts +17 -0
  73. package/{src/lib/components → components}/chapter/Marginal.svelte +41 -54
  74. package/components/chapter/Marginal.svelte.d.ts +22 -0
  75. package/{src/lib/components → components}/chapter/Paragraph.svelte +20 -25
  76. package/components/chapter/Paragraph.svelte.d.ts +18 -0
  77. package/{src/lib/components → components}/chapter/Positioned.svelte +1 -4
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/{src/lib/components → components}/chapter/Problem.svelte +0 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +128 -0
  82. package/components/chapter/Python.svelte.d.ts +18 -0
  83. package/{src/lib/components → components}/chapter/Quote.svelte +19 -13
  84. package/components/chapter/Quote.svelte.d.ts +17 -0
  85. package/{src/lib/components → components}/chapter/Rule.svelte +1 -4
  86. package/components/chapter/Rule.svelte.d.ts +17 -0
  87. package/{src/lib/components → components}/chapter/Table.svelte +7 -11
  88. package/components/chapter/Table.svelte.d.ts +17 -0
  89. package/components/chapter/Text.svelte +87 -0
  90. package/components/chapter/Text.svelte.d.ts +18 -0
  91. package/components/editor/BookishEditor.svelte +884 -0
  92. package/components/editor/BookishEditor.svelte.d.ts +25 -0
  93. package/components/editor/CalloutEditor.svelte +10 -0
  94. package/components/editor/CalloutEditor.svelte.d.ts +17 -0
  95. package/{src/lib/components → components}/editor/CaptionedCodeEditor.svelte +6 -10
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +17 -0
  97. package/components/editor/CaretContext.d.ts +50 -0
  98. package/components/editor/CaretContext.js +1 -0
  99. package/{src/lib/components/editor/CaretState.ts → components/editor/CaretState.d.ts} +7 -6
  100. package/components/editor/CaretState.js +1 -0
  101. package/{src/lib/components/editor/CaretUtilities.ts → components/editor/CaretUtilities.d.ts} +0 -1
  102. package/components/editor/CaretUtilities.js +1 -0
  103. package/{src/lib/components → components}/editor/CaretView.svelte +20 -25
  104. package/components/editor/CaretView.svelte.d.ts +25 -0
  105. package/components/editor/CitationsEditor.svelte +53 -0
  106. package/components/editor/CitationsEditor.svelte.d.ts +17 -0
  107. package/{src/lib/components/editor/Clipboard.ts → components/editor/Clipboard.d.ts} +1 -2
  108. package/components/editor/Clipboard.js +1 -0
  109. package/{src/lib/components/editor/Command.ts → components/editor/Command.d.ts} +2 -8
  110. package/components/editor/Command.js +1 -0
  111. package/components/editor/Commands.d.ts +3 -0
  112. package/{src/lib/components/editor/Commands.ts → components/editor/Commands.js} +315 -730
  113. package/components/editor/ConfirmButton.svelte +49 -0
  114. package/components/editor/ConfirmButton.svelte.d.ts +19 -0
  115. package/components/editor/DefinitionEditor.svelte +36 -0
  116. package/components/editor/DefinitionEditor.svelte.d.ts +17 -0
  117. package/components/editor/EmbedEditor.svelte +137 -0
  118. package/components/editor/EmbedEditor.svelte.d.ts +17 -0
  119. package/{src/lib/components → components}/editor/Icon.svelte +1 -2
  120. package/components/editor/Icon.svelte.d.ts +16 -0
  121. package/{src/lib/components → components}/editor/ImageChooser.svelte +19 -24
  122. package/components/editor/ImageChooser.svelte.d.ts +18 -0
  123. package/components/editor/InlineCodeEditor.svelte +12 -0
  124. package/components/editor/InlineCodeEditor.svelte.d.ts +17 -0
  125. package/{src/lib/components → components}/editor/LabelEditor.svelte +9 -14
  126. package/components/editor/LabelEditor.svelte.d.ts +17 -0
  127. package/{src/lib/components → components}/editor/LanguageEditor.svelte +5 -8
  128. package/components/editor/LanguageEditor.svelte.d.ts +17 -0
  129. package/components/editor/LinkEditor.svelte +100 -0
  130. package/components/editor/LinkEditor.svelte.d.ts +17 -0
  131. package/{src/lib/components → components}/editor/Note.svelte +0 -0
  132. package/components/editor/Note.svelte.d.ts +27 -0
  133. package/{src/lib/components → components}/editor/Permissions.svelte +36 -43
  134. package/components/editor/Permissions.svelte.d.ts +20 -0
  135. package/components/editor/PositionEditor.svelte +17 -0
  136. package/components/editor/PositionEditor.svelte.d.ts +18 -0
  137. package/components/editor/QuoteEditor.svelte +10 -0
  138. package/components/editor/QuoteEditor.svelte.d.ts +17 -0
  139. package/{src/lib/components → components}/editor/Switch.svelte +11 -14
  140. package/components/editor/Switch.svelte.d.ts +20 -0
  141. package/components/editor/TableEditor.svelte +10 -0
  142. package/components/editor/TableEditor.svelte.d.ts +17 -0
  143. package/{src/lib/components → components}/editor/TextEditor.svelte +89 -101
  144. package/components/editor/TextEditor.svelte.d.ts +24 -0
  145. package/components/editor/Toggle.svelte +41 -0
  146. package/components/editor/Toggle.svelte.d.ts +19 -0
  147. package/components/editor/Toolbar.svelte +249 -0
  148. package/components/editor/Toolbar.svelte.d.ts +17 -0
  149. package/{src/lib/components → components}/editor/ToolbarGroup.svelte +3 -5
  150. package/components/editor/ToolbarGroup.svelte.d.ts +18 -0
  151. package/{src/lib/components → components}/editor/ToolbarSpacer.svelte +0 -0
  152. package/components/editor/ToolbarSpacer.svelte.d.ts +23 -0
  153. package/components/editor/URLEditor.svelte +13 -0
  154. package/components/editor/URLEditor.svelte.d.ts +18 -0
  155. package/{src/lib/components/editor/UndoState.ts → components/editor/UndoState.d.ts} +2 -3
  156. package/components/editor/UndoState.js +1 -0
  157. package/{src/lib/components → components}/editor/icons/annotate.svg +0 -0
  158. package/{src/lib/components → components}/editor/icons/block.svg +0 -0
  159. package/{src/lib/components → components}/editor/icons/bold.svg +0 -0
  160. package/{src/lib/components → components}/editor/icons/bullets.svg +0 -0
  161. package/{src/lib/components → components}/editor/icons/callout.svg +0 -0
  162. package/{src/lib/components → components}/editor/icons/citation.svg +0 -0
  163. package/{src/lib/components → components}/editor/icons/clear.svg +0 -0
  164. package/{src/lib/components → components}/editor/icons/clipboard.svg +0 -0
  165. package/{src/lib/components → components}/editor/icons/code.svg +0 -0
  166. package/{src/lib/components → components}/editor/icons/columnafter.svg +0 -0
  167. package/{src/lib/components → components}/editor/icons/columnbefore.svg +0 -0
  168. package/{src/lib/components → components}/editor/icons/comment.svg +0 -0
  169. package/{src/lib/components → components}/editor/icons/copy.svg +0 -0
  170. package/{src/lib/components → components}/editor/icons/cut.svg +0 -0
  171. package/{src/lib/components → components}/editor/icons/define.svg +0 -0
  172. package/{src/lib/components → components}/editor/icons/deletecolumn.svg +0 -0
  173. package/{src/lib/components → components}/editor/icons/deleterow.svg +0 -0
  174. package/{src/lib/components → components}/editor/icons/footnote.svg +0 -0
  175. package/{src/lib/components → components}/editor/icons/header1.svg +0 -0
  176. package/{src/lib/components → components}/editor/icons/header2.svg +0 -0
  177. package/{src/lib/components → components}/editor/icons/header3.svg +0 -0
  178. package/{src/lib/components → components}/editor/icons/home.svg +0 -0
  179. package/{src/lib/components → components}/editor/icons/indent.svg +0 -0
  180. package/{src/lib/components → components}/editor/icons/italic.svg +0 -0
  181. package/{src/lib/components → components}/editor/icons/label.svg +0 -0
  182. package/{src/lib/components → components}/editor/icons/left.svg +0 -0
  183. package/{src/lib/components → components}/editor/icons/level.svg +0 -0
  184. package/{src/lib/components → components}/editor/icons/link.svg +0 -0
  185. package/{src/lib/components → components}/editor/icons/list.svg +0 -0
  186. package/{src/lib/components → components}/editor/icons/media.svg +0 -0
  187. package/{src/lib/components → components}/editor/icons/middle.svg +0 -0
  188. package/{src/lib/components → components}/editor/icons/numbers.svg +0 -0
  189. package/{src/lib/components → components}/editor/icons/paragraph.svg +0 -0
  190. package/{src/lib/components → components}/editor/icons/paste.svg +0 -0
  191. package/{src/lib/components → components}/editor/icons/quote.svg +0 -0
  192. package/{src/lib/components → components}/editor/icons/redo.svg +0 -0
  193. package/{src/lib/components → components}/editor/icons/right.svg +0 -0
  194. package/{src/lib/components → components}/editor/icons/rowabove.svg +0 -0
  195. package/{src/lib/components → components}/editor/icons/rowbelow.svg +0 -0
  196. package/{src/lib/components → components}/editor/icons/rule.svg +0 -0
  197. package/{src/lib/components → components}/editor/icons/sub.svg +0 -0
  198. package/{src/lib/components → components}/editor/icons/super.svg +0 -0
  199. package/{src/lib/components → components}/editor/icons/table.svg +0 -0
  200. package/{src/lib/components → components}/editor/icons/text.svg +0 -0
  201. package/{src/lib/components → components}/editor/icons/time.svg +0 -0
  202. package/{src/lib/components → components}/editor/icons/undo.svg +0 -0
  203. package/{src/lib/components → components}/editor/icons/unindent.svg +0 -0
  204. package/{src/lib/components → components}/editor/icons/unlink.svg +0 -0
  205. package/{src/lib/components → components}/page/Acknowledgements.svelte +10 -19
  206. package/components/page/Acknowledgements.svelte.d.ts +14 -0
  207. package/components/page/Authors.svelte +85 -0
  208. package/components/page/Authors.svelte.d.ts +21 -0
  209. package/components/page/BookLoader.svelte +59 -0
  210. package/components/page/BookLoader.svelte.d.ts +16 -0
  211. package/components/page/BulkReferenceEditor.svelte +63 -0
  212. package/components/page/BulkReferenceEditor.svelte.d.ts +14 -0
  213. package/components/page/Chapter.svelte +393 -0
  214. package/components/page/Chapter.svelte.d.ts +18 -0
  215. package/components/page/ChapterContext.d.ts +10 -0
  216. package/components/page/ChapterContext.js +1 -0
  217. package/{src/lib/components → components}/page/ChapterNumber.svelte +0 -0
  218. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  219. package/{src/lib/components → components}/page/ChapterTitle.svelte +2 -4
  220. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  221. package/components/page/Contexts.d.ts +47 -0
  222. package/components/page/Contexts.js +133 -0
  223. package/{src/lib/components → components}/page/DefinitionView.svelte +38 -53
  224. package/components/page/DefinitionView.svelte.d.ts +18 -0
  225. package/{src/lib/components → components}/page/Description.svelte +7 -15
  226. package/components/page/Description.svelte.d.ts +14 -0
  227. package/components/page/Edition.svelte +161 -0
  228. package/components/page/Edition.svelte.d.ts +20 -0
  229. package/components/page/EditionLoader.svelte +99 -0
  230. package/components/page/EditionLoader.svelte.d.ts +18 -0
  231. package/{src/lib/components → components}/page/Editions.svelte +18 -22
  232. package/components/page/Editions.svelte.d.ts +14 -0
  233. package/{src/lib/components → components}/page/Glossary.svelte +28 -33
  234. package/components/page/Glossary.svelte.d.ts +14 -0
  235. package/{src/lib/components → components}/page/Header.svelte +52 -59
  236. package/components/page/Header.svelte.d.ts +29 -0
  237. package/{src/lib/components → components}/page/Index.svelte +47 -50
  238. package/components/page/Index.svelte.d.ts +14 -0
  239. package/{src/lib/components → components}/page/Instructions.svelte +1 -2
  240. package/components/page/Instructions.svelte.d.ts +18 -0
  241. package/{src/lib/components → components}/page/License.svelte +9 -17
  242. package/components/page/License.svelte.d.ts +14 -0
  243. package/{src/lib/components → components}/page/Loading.svelte +0 -0
  244. package/components/page/Loading.svelte.d.ts +23 -0
  245. package/{src/lib/components → components}/page/Media.svelte +27 -44
  246. package/components/page/Media.svelte.d.ts +14 -0
  247. package/{src/lib/components → components}/page/MediaPreview.svelte +2 -3
  248. package/components/page/MediaPreview.svelte.d.ts +19 -0
  249. package/{src/lib/components → components}/page/Muted.svelte +0 -0
  250. package/components/page/Muted.svelte.d.ts +27 -0
  251. package/{src/lib/components → components}/page/Outline.svelte +110 -140
  252. package/components/page/Outline.svelte.d.ts +19 -0
  253. package/components/page/Page.svelte +84 -0
  254. package/components/page/Page.svelte.d.ts +19 -0
  255. package/{src/lib/components → components}/page/PageHeader.svelte +1 -2
  256. package/components/page/PageHeader.svelte.d.ts +18 -0
  257. package/{src/lib/components → components}/page/PageParagraph.svelte +0 -0
  258. package/components/page/PageParagraph.svelte.d.ts +27 -0
  259. package/components/page/PossibleChapter.svelte +14 -0
  260. package/components/page/PossibleChapter.svelte.d.ts +14 -0
  261. package/components/page/PossibleReference.svelte +11 -0
  262. package/components/page/PossibleReference.svelte.d.ts +18 -0
  263. package/{src/lib/components → components}/page/Print.svelte +3 -5
  264. package/components/page/Print.svelte.d.ts +14 -0
  265. package/{src/lib/components → components}/page/Publish.svelte +52 -59
  266. package/components/page/Publish.svelte.d.ts +14 -0
  267. package/{src/lib/components → components}/page/Reference.svelte +30 -39
  268. package/components/page/Reference.svelte.d.ts +17 -0
  269. package/{src/lib/components → components}/page/References.svelte +14 -18
  270. package/components/page/References.svelte.d.ts +14 -0
  271. package/{src/lib/components → components}/page/Rows.svelte +0 -0
  272. package/components/page/Rows.svelte.d.ts +27 -0
  273. package/components/page/Search.svelte +133 -0
  274. package/components/page/Search.svelte.d.ts +14 -0
  275. package/{src/lib/components → components}/page/Status.svelte +3 -5
  276. package/components/page/Status.svelte.d.ts +14 -0
  277. package/{src/lib/components → components}/page/SubdomainEditor.svelte +13 -16
  278. package/components/page/SubdomainEditor.svelte.d.ts +14 -0
  279. package/{src/lib/components → components}/page/TableOfContents.svelte +68 -79
  280. package/components/page/TableOfContents.svelte.d.ts +14 -0
  281. package/components/page/TableOfContentsImage.svelte +18 -0
  282. package/components/page/TableOfContentsImage.svelte.d.ts +16 -0
  283. package/{src/lib/components → components}/page/TableOfContentsRow.svelte +24 -34
  284. package/components/page/TableOfContentsRow.svelte.d.ts +24 -0
  285. package/{src/lib/components → components}/page/ThemeEditor.svelte +33 -44
  286. package/components/page/ThemeEditor.svelte.d.ts +14 -0
  287. package/{src/lib/components → components}/page/ThemeEditorPreview.svelte +12 -21
  288. package/components/page/ThemeEditorPreview.svelte.d.ts +17 -0
  289. package/components/page/ThemeSetEditor.svelte +19 -0
  290. package/components/page/ThemeSetEditor.svelte.d.ts +18 -0
  291. package/{src/lib/components → components}/page/ThemeVariableEditor.svelte +14 -18
  292. package/components/page/ThemeVariableEditor.svelte.d.ts +18 -0
  293. package/{src/lib/components → components}/page/Title.svelte +0 -0
  294. package/components/page/Title.svelte.d.ts +27 -0
  295. package/{src/lib/components → components}/page/Unknown.svelte +8 -10
  296. package/components/page/Unknown.svelte.d.ts +16 -0
  297. package/components/page/margins.d.ts +2 -0
  298. package/{src/lib/components/page/margins.ts → components/page/margins.js} +46 -79
  299. package/index.d.ts +15 -0
  300. package/{src/lib/index.js → index.js} +0 -0
  301. package/models/CRUD.d.ts +27 -0
  302. package/models/CRUD.js +262 -0
  303. package/models/Firebase.d.ts +5 -0
  304. package/{src/lib/models/Firebase.ts → models/Firebase.js} +16 -26
  305. package/models/book/Book.d.ts +61 -0
  306. package/models/book/Book.js +135 -0
  307. package/models/book/BookMedia.d.ts +23 -0
  308. package/models/book/BookMedia.js +108 -0
  309. package/models/book/BookSaveStatus.d.ts +7 -0
  310. package/models/book/BookSaveStatus.js +8 -0
  311. package/models/book/Chapter.d.ts +81 -0
  312. package/models/book/Chapter.js +212 -0
  313. package/models/book/ChapterID.d.ts +10 -0
  314. package/{src/lib/models/book/ChapterID.ts → models/book/ChapterID.js} +0 -1
  315. package/models/book/Definition.d.ts +6 -0
  316. package/models/book/Definition.js +1 -0
  317. package/models/book/Edition.d.ts +139 -0
  318. package/models/book/Edition.js +620 -0
  319. package/models/book/Reference.d.ts +24 -0
  320. package/models/book/Reference.js +78 -0
  321. package/models/book/Schema.d.ts +174 -0
  322. package/{src/lib/models/book/Schema.ts → models/book/Schema.js} +0 -1
  323. package/models/book/Theme.d.ts +113 -0
  324. package/{src/lib/models/book/Theme.ts → models/book/Theme.js} +6 -110
  325. package/{src/lib/models/book/ThemeColors.ts → models/book/ThemeColors.d.ts} +0 -6
  326. package/models/book/ThemeColors.js +1 -0
  327. package/models/book/Words.d.ts +2 -0
  328. package/{src/lib/models/book/Words.ts → models/book/Words.js} +0 -1
  329. package/models/chapter/AtomNode.d.ts +18 -0
  330. package/{src/lib/models/chapter/AtomNode.ts → models/chapter/AtomNode.js} +10 -30
  331. package/models/chapter/BlockNode.d.ts +20 -0
  332. package/{src/lib/models/chapter/BlockNode.ts → models/chapter/BlockNode.js} +47 -80
  333. package/models/chapter/BlocksNode.d.ts +50 -0
  334. package/{src/lib/models/chapter/BlocksNode.ts → models/chapter/BlocksNode.js} +359 -571
  335. package/models/chapter/BlocksNode.test.d.ts +1 -0
  336. package/models/chapter/BlocksNode.test.js +568 -0
  337. package/{src/lib/models/chapter/Bookkeeping.ts → models/chapter/Bookkeeping.d.ts} +0 -0
  338. package/models/chapter/Bookkeeping.js +1 -0
  339. package/models/chapter/CalloutNode.d.ts +17 -0
  340. package/models/chapter/CalloutNode.js +58 -0
  341. package/models/chapter/Caret.d.ts +23 -0
  342. package/{src/lib/models/chapter/Caret.ts → models/chapter/Caret.js} +26 -50
  343. package/models/chapter/ChapterNode.d.ts +34 -0
  344. package/models/chapter/ChapterNode.js +117 -0
  345. package/models/chapter/CitationsNode.d.ts +16 -0
  346. package/{src/lib/models/chapter/CitationsNode.ts → models/chapter/CitationsNode.js} +10 -17
  347. package/models/chapter/CodeNode.d.ts +35 -0
  348. package/{src/lib/models/chapter/CodeNode.ts → models/chapter/CodeNode.js} +62 -125
  349. package/models/chapter/CommentNode.d.ts +18 -0
  350. package/models/chapter/CommentNode.js +48 -0
  351. package/models/chapter/DefinitionNode.d.ts +12 -0
  352. package/{src/lib/models/chapter/DefinitionNode.ts → models/chapter/DefinitionNode.js} +8 -14
  353. package/models/chapter/Edit.d.ts +7 -0
  354. package/models/chapter/Edit.js +1 -0
  355. package/models/chapter/EmbedNode.d.ts +45 -0
  356. package/models/chapter/EmbedNode.js +168 -0
  357. package/models/chapter/ErrorNode.d.ts +17 -0
  358. package/{src/lib/models/chapter/ErrorNode.ts → models/chapter/ErrorNode.js} +8 -15
  359. package/models/chapter/FootnoteNode.d.ts +18 -0
  360. package/models/chapter/FootnoteNode.js +47 -0
  361. package/models/chapter/FormatNode.d.ts +60 -0
  362. package/{src/lib/models/chapter/FormatNode.ts → models/chapter/FormatNode.js} +262 -443
  363. package/models/chapter/FormatNode.test.d.ts +1 -0
  364. package/models/chapter/FormatNode.test.js +96 -0
  365. package/models/chapter/InlineCodeNode.d.ts +12 -0
  366. package/{src/lib/models/chapter/InlineCodeNode.ts → models/chapter/InlineCodeNode.js} +9 -17
  367. package/models/chapter/LabelNode.d.ts +17 -0
  368. package/{src/lib/models/chapter/LabelNode.ts → models/chapter/LabelNode.js} +10 -26
  369. package/models/chapter/LinkNode.d.ts +12 -0
  370. package/{src/lib/models/chapter/LinkNode.ts → models/chapter/LinkNode.js} +7 -12
  371. package/models/chapter/ListNode.d.ts +51 -0
  372. package/{src/lib/models/chapter/ListNode.ts → models/chapter/ListNode.js} +200 -277
  373. package/models/chapter/ListNode.test.d.ts +1 -0
  374. package/{src/lib/models/chapter/ListNode.test.ts → models/chapter/ListNode.test.js} +20 -57
  375. package/models/chapter/MetadataNode.d.ts +17 -0
  376. package/models/chapter/MetadataNode.js +32 -0
  377. package/models/chapter/Node.d.ts +38 -0
  378. package/{src/lib/models/chapter/Node.ts → models/chapter/Node.js} +71 -155
  379. package/models/chapter/Node.test.d.ts +1 -0
  380. package/{src/lib/models → models}/chapter/Node.test.js +0 -0
  381. package/models/chapter/ParagraphNode.d.ts +33 -0
  382. package/{src/lib/models/chapter/ParagraphNode.ts → models/chapter/ParagraphNode.js} +58 -95
  383. package/models/chapter/ParagraphNode.test.d.ts +1 -0
  384. package/models/chapter/ParagraphNode.test.js +30 -0
  385. package/models/chapter/Parser.d.ts +75 -0
  386. package/{src/lib/models/chapter/Parser.ts → models/chapter/Parser.js} +184 -369
  387. package/models/chapter/Parser.test.d.ts +1 -0
  388. package/{src/lib/models/chapter/Parser.test.ts → models/chapter/Parser.test.js} +0 -7
  389. package/{src/lib/models/chapter/Position.ts → models/chapter/Position.d.ts} +0 -0
  390. package/models/chapter/Position.js +1 -0
  391. package/models/chapter/QuoteNode.d.ts +25 -0
  392. package/models/chapter/QuoteNode.js +99 -0
  393. package/{src/lib/models/chapter/RootNode.ts → models/chapter/RootNode.d.ts} +0 -2
  394. package/models/chapter/RootNode.js +1 -0
  395. package/models/chapter/RuleNode.d.ts +15 -0
  396. package/{src/lib/models/chapter/RuleNode.ts → models/chapter/RuleNode.js} +6 -9
  397. package/models/chapter/TableNode.d.ts +37 -0
  398. package/{src/lib/models/chapter/TableNode.ts → models/chapter/TableNode.js} +82 -141
  399. package/models/chapter/TableNode.test.d.ts +1 -0
  400. package/{src/lib/models/chapter/TableNode.test.ts → models/chapter/TableNode.test.js} +10 -27
  401. package/models/chapter/TextNode.d.ts +36 -0
  402. package/{src/lib/models/chapter/TextNode.ts → models/chapter/TextNode.js} +65 -117
  403. package/models/chapter/TextNode.test.d.ts +1 -0
  404. package/{src/lib/models/chapter/TextNode.test.ts → models/chapter/TextNode.test.js} +0 -2
  405. package/package.json +270 -53
  406. package/util/getSubdomain.d.ts +3 -0
  407. package/{src/lib/util/getSubdomain.ts → util/getSubdomain.js} +8 -14
  408. package/util/isMobile.d.ts +2 -0
  409. package/{src/lib/util/isMobile.ts → util/isMobile.js} +0 -1
  410. package/util/mineReference.d.ts +4 -0
  411. package/{src/lib/util/mineReference.ts → util/mineReference.js} +25 -45
  412. package/util/scrollToEyeLevel.d.ts +2 -0
  413. package/{src/lib/util/scrollToEyeLevel.ts → util/scrollToEyeLevel.js} +2 -4
  414. package/.env.example +0 -8
  415. package/.firebaserc +0 -8
  416. package/.prettierignore +0 -8
  417. package/.prettierrc.json +0 -5
  418. package/_update-notifier-last-checked +0 -0
  419. package/firebase.json +0 -46
  420. package/firestore.indexes.json +0 -4
  421. package/firestore.rules +0 -59
  422. package/functions/.eslintrc.js +0 -28
  423. package/functions/package-lock.json +0 -12595
  424. package/functions/package.json +0 -43
  425. package/functions/src/index.ts +0 -345
  426. package/functions/tsconfig.dev.json +0 -3
  427. package/functions/tsconfig.json +0 -15
  428. package/scripts/claims.cjs +0 -99
  429. package/src/app.d.ts +0 -9
  430. package/src/app.html +0 -24
  431. package/src/lib/components/Auth.svelte +0 -65
  432. package/src/lib/components/Link.svelte +0 -58
  433. package/src/lib/components/chapter/Block.svelte +0 -42
  434. package/src/lib/components/chapter/ErrorMessage.svelte +0 -12
  435. package/src/lib/components/chapter/Python.svelte +0 -144
  436. package/src/lib/components/chapter/Text.svelte +0 -109
  437. package/src/lib/components/editor/BookishEditor.svelte +0 -1101
  438. package/src/lib/components/editor/CalloutEditor.svelte +0 -14
  439. package/src/lib/components/editor/CaretContext.ts +0 -55
  440. package/src/lib/components/editor/CitationsEditor.svelte +0 -64
  441. package/src/lib/components/editor/ConfirmButton.svelte +0 -51
  442. package/src/lib/components/editor/DefinitionEditor.svelte +0 -44
  443. package/src/lib/components/editor/EmbedEditor.svelte +0 -152
  444. package/src/lib/components/editor/InlineCodeEditor.svelte +0 -16
  445. package/src/lib/components/editor/LinkEditor.svelte +0 -110
  446. package/src/lib/components/editor/PositionEditor.svelte +0 -21
  447. package/src/lib/components/editor/QuoteEditor.svelte +0 -14
  448. package/src/lib/components/editor/TableEditor.svelte +0 -14
  449. package/src/lib/components/editor/Toggle.svelte +0 -47
  450. package/src/lib/components/editor/Toolbar.svelte +0 -297
  451. package/src/lib/components/editor/URLEditor.svelte +0 -15
  452. package/src/lib/components/page/Authors.svelte +0 -92
  453. package/src/lib/components/page/BookLoader.svelte +0 -77
  454. package/src/lib/components/page/BulkReferenceEditor.svelte +0 -86
  455. package/src/lib/components/page/Chapter.svelte +0 -449
  456. package/src/lib/components/page/ChapterContext.ts +0 -13
  457. package/src/lib/components/page/Contexts.ts +0 -176
  458. package/src/lib/components/page/Edition.svelte +0 -189
  459. package/src/lib/components/page/EditionLoader.svelte +0 -123
  460. package/src/lib/components/page/Page.svelte +0 -94
  461. package/src/lib/components/page/PossibleChapter.svelte +0 -16
  462. package/src/lib/components/page/PossibleReference.svelte +0 -14
  463. package/src/lib/components/page/Search.svelte +0 -153
  464. package/src/lib/components/page/TableOfContentsImage.svelte +0 -22
  465. package/src/lib/components/page/ThemeSetEditor.svelte +0 -21
  466. package/src/lib/models/CRUD.ts +0 -469
  467. package/src/lib/models/book/Book.ts +0 -283
  468. package/src/lib/models/book/BookMedia.ts +0 -182
  469. package/src/lib/models/book/BookSaveStatus.ts +0 -8
  470. package/src/lib/models/book/Chapter.ts +0 -462
  471. package/src/lib/models/book/Definition.ts +0 -2
  472. package/src/lib/models/book/Edition.ts +0 -1216
  473. package/src/lib/models/book/Reference.ts +0 -171
  474. package/src/lib/models/chapter/BlocksNode.test.ts +0 -867
  475. package/src/lib/models/chapter/CalloutNode.ts +0 -79
  476. package/src/lib/models/chapter/ChapterNode.ts +0 -169
  477. package/src/lib/models/chapter/CommentNode.ts +0 -61
  478. package/src/lib/models/chapter/Edit.ts +0 -6
  479. package/src/lib/models/chapter/EmbedNode.ts +0 -257
  480. package/src/lib/models/chapter/FootnoteNode.ts +0 -59
  481. package/src/lib/models/chapter/FormatNode.test.ts +0 -137
  482. package/src/lib/models/chapter/MetadataNode.ts +0 -44
  483. package/src/lib/models/chapter/ParagraphNode.test.ts +0 -54
  484. package/src/lib/models/chapter/QuoteNode.ts +0 -135
  485. package/src/params/edition.ts +0 -3
  486. package/src/routes/+error.svelte +0 -12
  487. package/src/routes/+layout.svelte +0 -241
  488. package/src/routes/+page.svelte +0 -43
  489. package/src/routes/Footer.svelte +0 -0
  490. package/src/routes/Header.svelte +0 -112
  491. package/src/routes/[bookid]/+layout.svelte +0 -5
  492. package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +0 -14
  493. package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  494. package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  495. package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  496. package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  497. package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  498. package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  499. package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  500. package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  501. package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  502. package/src/routes/[bookid]/editions/+page.svelte +0 -20
  503. package/src/routes/about/+page.svelte +0 -102
  504. package/src/routes/confirm/+page.svelte +0 -62
  505. package/src/routes/email/+page.svelte +0 -99
  506. package/src/routes/login/+page.svelte +0 -66
  507. package/src/routes/read/+page.svelte +0 -38
  508. package/src/routes/write/+error.svelte +0 -10
  509. package/src/routes/write/+layout.svelte +0 -11
  510. package/src/routes/write/+page.svelte +0 -114
  511. package/src/routes/write/[bookid]/+layout.svelte +0 -5
  512. package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  513. package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  514. package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  515. package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  516. package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  517. package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  518. package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  519. package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  520. package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  521. package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +0 -5
  522. package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +0 -5
  523. package/src/routes/write/[bookid]/editions/+page.svelte +0 -20
  524. package/src/vite-env.d.ts +0 -1
  525. package/static/icons/favicon.png +0 -0
  526. package/static/icons/icon.png +0 -0
  527. package/static/icons/ios-icon.png +0 -0
  528. package/storage.rules +0 -9
  529. package/svelte.config.js +0 -19
  530. package/tsconfig.json +0 -18
  531. package/tsconfig.node.json +0 -9
  532. package/vite.config.ts +0 -8
  533. package/vite.reader.config.ts +0 -32
@@ -1,43 +0,0 @@
1
- {
2
- "name": "functions",
3
- "type": "module",
4
- "scripts": {
5
- "lint": "eslint --ext .js,.ts .",
6
- "build": "tsc",
7
- "build:watch": "tsc --watch",
8
- "serve": "npm run build && firebase emulators:start --only functions",
9
- "shell": "npm run build && firebase functions:shell",
10
- "start": "npm run shell",
11
- "deploy": "firebase deploy --only functions",
12
- "logs": "firebase functions:log"
13
- },
14
- "engines": {
15
- "node": "18"
16
- },
17
- "main": "lib/index.js",
18
- "dependencies": {
19
- "@google-cloud/storage": "^6.5.2",
20
- "bookish-press": "latest",
21
- "firebase-admin": "^11.4.1",
22
- "firebase-functions": "^4.2.1",
23
- "zip-a-folder": "^1.1.5",
24
- "typescript": "^4.5.4",
25
- "@sveltejs/adapter-static": "^1.0.6",
26
- "@sveltejs/kit": "1.3.10",
27
- "svelte": "^3.55.1",
28
- "svelte-preprocess": "^5.0.1",
29
- "vite": "^4.1.1"
30
- },
31
- "devDependencies": {
32
- "@typescript-eslint/eslint-plugin": "^5.12.0",
33
- "@typescript-eslint/parser": "^5.12.0",
34
- "eslint": "^8.9.0",
35
- "eslint-config-google": "^0.14.0",
36
- "eslint-plugin-import": "^2.25.4",
37
- "firebase-functions-test": "^0.2.0",
38
- "typescript": "^4.5.4",
39
- "svelte-check": "^3.0.3",
40
- "tslib": "^2.5.0"
41
- },
42
- "private": true
43
- }
@@ -1,345 +0,0 @@
1
- import functions from 'firebase-functions';
2
- import { ObjectMetadata } from 'firebase-functions/v1/storage';
3
- import admin from 'firebase-admin';
4
- import path from 'path';
5
- import os from 'os';
6
- import fs from 'fs';
7
- import { spawn } from 'child_process';
8
- import { EditionSpecification } from 'bookish-press/models/book/Edition';
9
- import { zip } from 'zip-a-folder';
10
- import { build } from 'vite';
11
-
12
- admin.initializeApp();
13
-
14
- function getThumbnailPath(filePath: string) {
15
- const fileName = path.basename(filePath);
16
- const thumbFileName = `${fileName}`;
17
- return path.join(path.dirname(filePath), 'thumbnails/', thumbFileName);
18
- }
19
-
20
- async function resizeImage(
21
- filePath: string,
22
- bucketID: string,
23
- contentType: string | undefined
24
- ) {
25
- const fileName = path.basename(filePath);
26
-
27
- // Download file from bucket into a temporary location.
28
- const bucket = admin.storage().bucket(bucketID);
29
- const tempFilePath = path.join(os.tmpdir(), fileName);
30
- console.log('Downloading image to', tempFilePath);
31
-
32
- await bucket.file(filePath).download({ destination: tempFilePath });
33
-
34
- // Generate a thumbnail using ImageMagick, which is installed by default in Google Cloud.
35
- // Note: to test locally, ImageMagick has to be installed locally.
36
- // If you're getting "Error: spawn convert ENOENT" when using the emu.ator, it's because it's not
37
- // installed locally. On mac OS, "brew install imagemagick" should suffice.
38
- console.log('Resizing downloaded image...');
39
- await execute('convert', [
40
- tempFilePath,
41
- '-thumbnail',
42
- '320x320>',
43
- tempFilePath,
44
- ]);
45
-
46
- const thumbFilePath = getThumbnailPath(filePath);
47
-
48
- console.log('Uploading resized image to ', thumbFilePath);
49
-
50
- // Uploading the thumbnail.
51
- await bucket.upload(tempFilePath, {
52
- destination: thumbFilePath,
53
- metadata: { contentType: contentType },
54
- });
55
-
56
- // Once the thumbnail has been uploaded delete the local file to free up disk space.
57
- return await fs.unlinkSync(tempFilePath);
58
- }
59
-
60
- export const createThumbnail = functions.storage
61
- .object()
62
- .onFinalize(async (object: ObjectMetadata) => {
63
- if (object.name === undefined) {
64
- console.log('Unknown file uploaded.');
65
- return;
66
- }
67
- if (!object.name.startsWith('images/')) {
68
- console.log('Non-image uploaded, ignoring');
69
- return;
70
- }
71
- if (object.name.includes('thumbnails/')) {
72
- console.log('Thumbnail uploaded, ignoring.');
73
- return;
74
- }
75
-
76
- return resizeImage(object.name, object.bucket, object.contentType);
77
- });
78
-
79
- export const deleteThumbnail = functions.storage
80
- .object()
81
- .onDelete(async (object: ObjectMetadata) => {
82
- if (object.name === undefined) {
83
- console.log('Unknown file uploaded.');
84
- return;
85
- }
86
- if (!object.name.startsWith('images/')) {
87
- console.log('Non-image deleted, ignoring');
88
- return;
89
- }
90
- if (object.name.includes('thumbnails/')) {
91
- console.log('Thumbnail deleted, ignoring.');
92
- return;
93
- }
94
-
95
- // Download file from bucket into a temporary location.
96
- const bucket = admin.storage().bucket(object.bucket);
97
- const thumbFilePath = getThumbnailPath(object.name);
98
-
99
- console.log(`Deleting ${thumbFilePath}`);
100
-
101
- return await bucket.file(thumbFilePath).delete();
102
- });
103
-
104
- export const getUserEmails = functions.https.onCall(
105
- async (data: { uids: string[] }): Promise<Record<string, string>> => {
106
- const uids = data.uids;
107
-
108
- const users = await admin.auth().getUsers(
109
- uids.map((uid) => {
110
- return { uid };
111
- })
112
- );
113
-
114
- const map: Record<string, string> = {};
115
- users.users.forEach((user) => {
116
- map[user.uid] = user.email ?? '';
117
- });
118
-
119
- return map;
120
- }
121
- );
122
-
123
- export const createUserWithEmail = functions.https.onCall(
124
- async (data: { email: string }): Promise<string | null> => {
125
- // First try to get the user, in case they already exist.
126
- try {
127
- const existingUser = await admin.auth().getUserByEmail(data.email);
128
- return existingUser.uid;
129
- } catch (_) {}
130
-
131
- try {
132
- const user = await admin.auth().createUser({ email: data.email });
133
- return user.uid;
134
- } catch (error) {
135
- console.log(error);
136
- return null;
137
- }
138
- }
139
- );
140
-
141
- export const publishEdition = functions
142
- // This takes some time and some memory -- testing showed that it regularly exceeded 256 MB and >1 minute.
143
- .runWith({ timeoutSeconds: 300, memory: '1GB' })
144
- .https.onCall(async (data: { bookID: string; editionID: string }) => {
145
- const { bookID, editionID } = data;
146
-
147
- // Move to a temporary folder workspace.
148
- const tempDir = os.tmpdir();
149
- process.chdir(tempDir);
150
-
151
- console.log(`Created temporary folder at ${tempDir}`);
152
-
153
- // If there's already something in /bookish-reader, remove it all for a fresh build.
154
- if (fs.existsSync('bookish-reader')) {
155
- console.log('Cleaning folder to prepare for build...');
156
- await execute('rm', ['-rf', 'bookish-reader']);
157
- }
158
-
159
- // Clone the reader repo
160
- console.log('Cloning book template...');
161
- await execute('git', [
162
- 'clone',
163
- 'https://github.com/amyjko/bookish-reader',
164
- ]);
165
-
166
- // Move inside the reader
167
- console.log('Changing to book folder...');
168
- process.chdir(path.join(tempDir, 'bookish-reader'));
169
-
170
- // Retrieve the edition
171
- console.log('Retrieving edition from database...');
172
- const editionDoc = admin
173
- .firestore()
174
- .doc(`books/${bookID}/editions/${editionID}`);
175
- const editionData = await editionDoc.get();
176
- if (!editionData.exists) {
177
- console.log("Couldn't get ediition from firestore, bailing.");
178
- return "Unknown book edition, can't publish.";
179
- }
180
-
181
- const editionJSON = editionData.data() as EditionSpecification;
182
-
183
- // Retrieve all edition's chapter text.
184
- for (const chapter of editionJSON.chapters) {
185
- console.log(
186
- `Retrieving chapter ${chapter.id} text and creating its route...`
187
- );
188
- if (chapter.ref === undefined) {
189
- console.log(
190
- 'No chapter ID in the chapter edition metadata, bailing.'
191
- );
192
- return "Missing chapter, can't published book.";
193
- }
194
- const chapterPath = `books/${bookID}/editions/${editionID}/chapters/${chapter.ref.id}`;
195
- const chapterData = await admin.firestore().doc(chapterPath).get();
196
- if (!chapterData.exists) {
197
- console.log(`Couldn't resolve chapter "${chapterPath}"`);
198
- return "Missing chapter text, can't publish.";
199
- }
200
-
201
- const chapterText = chapterData.data()?.text;
202
- if (chapterText === undefined) {
203
- console.log(`Found chapter data, but it had no text."`);
204
- return "Missing chapter text, can't publishing.";
205
- }
206
- chapter.text = chapterText;
207
-
208
- // Create a route for the chapter and a page with renders its contents.
209
- try {
210
- const routePath = `src/routes/${chapter.id}`;
211
- fs.mkdirSync(routePath);
212
- // Copy the +page.svelte template from the assets folder.
213
- fs.copyFileSync(
214
- `src/lib/assets/+page.svelte`,
215
- `${routePath}/+page.svelte`
216
- );
217
- console.log(`Created route for chapter ${chapter.id}`);
218
- } catch (err) {
219
- console.log(err);
220
- return `Couldn't create chapter ${chapter.id} route.`;
221
- }
222
- }
223
-
224
- // Create a book.json that stores the edition data.
225
- // the bookish-reader template uses this as a state asset to
226
- // render the book.
227
- try {
228
- console.log('Writing edition.json to assets folder...');
229
- fs.writeFileSync(
230
- 'src/lib/assets/edition.json',
231
- JSON.stringify(editionJSON, null, 2)
232
- );
233
- } catch (err) {
234
- console.log(err);
235
- return `Couldn't create book metadata`;
236
- }
237
-
238
- // Build a static version of the book for the web.
239
- try {
240
- console.log('Building book...');
241
-
242
- await execute('npm', ['exec', 'svelte-kit', 'sync']);
243
-
244
- // At this point, all of the Svelte, Sveltekit, Vite, and bookish-reader dependencies should already be installed.
245
- const output = await build();
246
-
247
- console.log(output);
248
-
249
- console.log('Checking if build was successful...');
250
- if (fs.existsSync('build')) console.log('Successfully built book.');
251
- else {
252
- console.log('It was not.');
253
- console.log('Here are the files in the folder...');
254
- fs.readdirSync('.').forEach((file) => {
255
- console.log(file);
256
- });
257
-
258
- return 'Could not build book.';
259
- }
260
- } catch (err) {
261
- console.log('Build error: ' + err);
262
- return 'Could not create book.';
263
- }
264
-
265
- const zipFileName = 'book.zip';
266
-
267
- try {
268
- console.log('Zipping book for download...');
269
- await zip('build', zipFileName);
270
- } catch (err) {
271
- console.log("Couldn't zip book: " + err);
272
- return "Couldn't compress book for download";
273
- }
274
-
275
- let downloadURL: string | undefined = undefined;
276
- const bucket = admin.storage().bucket();
277
- const zipFilePath = `${bookID}/${zipFileName}`;
278
- try {
279
- console.log('Compressed book. Uploading to cloud for download...');
280
-
281
- await bucket.upload(zipFileName, {
282
- destination: zipFilePath,
283
- metadata: { contentType: 'application/zip' },
284
- });
285
- } catch (err) {
286
- console.log(err);
287
- return "Couldn't upload the book for download.";
288
- }
289
-
290
- try {
291
- console.log('Uploaded zip. Requesting URL for download...');
292
- [downloadURL] = await bucket.file(zipFilePath).getSignedUrl({
293
- action: 'read',
294
- expires: '03-09-2491',
295
- });
296
- } catch (err) {
297
- console.log(err);
298
- return "Couldn't get the URL for the download.";
299
- }
300
- // Upload everything to Firebase Hosting at the appropriate URL
301
-
302
- /**
303
- *
304
- * TODO I stopped here. Here's the proper API:
305
- *
306
- * https://firebase.google.com/docs/hosting/api-deploy.
307
- *
308
- * I got stuck on how to get an access token to call the Hosting API.
309
- * I obviously can't follow the example of getting a service account key
310
- * since there's no secure way to deploy one.
311
- */
312
-
313
- console.log('Skipped hosting deploy :(');
314
-
315
- return { url: downloadURL };
316
- });
317
-
318
- /** Turn spawn into a promise for comprehensibility */
319
- async function execute(cmd: string, args: ReadonlyArray<string>) {
320
- return new Promise<string>((resolve, reject) => {
321
- try {
322
- console.log(`Executing ${cmd} ${args.join(' ')}...`);
323
- const process = spawn(cmd, args, { stdio: 'inherit' });
324
- const error: string[] = [];
325
- const stdout: string[] = [];
326
- // Save each bit of standard output that comes out.
327
- // process.stdout.on('data', (data) => {
328
- // stdout.push(data.toString());
329
- // });
330
-
331
- // // Save the errors that come
332
- // process.on('error', (e) => {
333
- // error.push(e.toString());
334
- // });
335
-
336
- // When the process closes, resolve with the output or errors.
337
- process.on('close', () => {
338
- if (error.length) reject(error.join(''));
339
- else resolve(stdout.join(''));
340
- });
341
- } catch (error) {
342
- reject('' + error);
343
- }
344
- });
345
- }
@@ -1,3 +0,0 @@
1
- {
2
- "include": [".eslintrc.js"]
3
- }
@@ -1,15 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "ESNext",
4
- "esModuleInterop": true,
5
- "moduleResolution": "node",
6
- "noImplicitReturns": true,
7
- "noUnusedLocals": true,
8
- "outDir": "lib",
9
- "sourceMap": true,
10
- "strict": true,
11
- "target": "es2017"
12
- },
13
- "compileOnSave": true,
14
- "include": ["src"]
15
- }
@@ -1,99 +0,0 @@
1
- /**
2
- * This script enables viewing and updating a user's claims.
3
- * It's a bit clumsy, but there is no Firebase console support for this,
4
- * so it's what we've got. Run it with `node claims.cjs`
5
- */
6
- const admin = require('firebase-admin');
7
- const { getAuth } = require('firebase-admin/auth');
8
-
9
- // If there aren't any arguments, bail.
10
- if (process.argv.length <= 2) {
11
- console.log('usage:');
12
- console.log('node claims.cjs [email] [dev|prod] [+|-] [publisher|admin]');
13
- return;
14
- }
15
-
16
- // Get the requested email and bail if none was provided.
17
- const email = process.argv[2];
18
- if (email === undefined) {
19
- console.log('No email provided.');
20
- return;
21
- }
22
-
23
- // Get the project, either "dev" or "prod"
24
- const project = process.argv[3];
25
- if (project !== 'dev' && project !== 'prod') {
26
- console.log(
27
- `Expected 'dev' or 'prod' after email, but received ${project}`
28
- );
29
- return;
30
- }
31
-
32
- // Get the operation and bail if there wasn't one.
33
- const operation = process.argv[4];
34
- if (operation !== undefined && operation !== '+' && operation !== '-') {
35
- console.log('Expected an + or - operation');
36
- return;
37
- }
38
-
39
- // Get the field
40
- const privilege = process.argv[5];
41
- if (
42
- privilege !== undefined &&
43
- privilege !== 'publisher' &&
44
- privilege !== 'admin'
45
- ) {
46
- console.log("Expected 'publisher' or 'admin' after the operation");
47
- return;
48
- }
49
-
50
- console.log('Reading service key...');
51
-
52
- const serviceKeyPath = `../firebase-${project}-service-key.json`;
53
-
54
- // Log in with the secret service key generated in the Firebase service accounts console.
55
- const serviceAccount = require(`../bookish-${project}-firebase-service-key.json`);
56
-
57
- if (serviceAccount === undefined) {
58
- console.log(`Couldn't find service key at ${serviceKeyPath}`);
59
- return;
60
- }
61
-
62
- console.log('Connecting to Firebase with key...');
63
-
64
- // Initialize the SDK with the service account.
65
- admin.initializeApp({
66
- credential: admin.credential.cert(serviceAccount),
67
- });
68
-
69
- // Add the publisher claim to the email address.
70
- getAuth()
71
- .getUserByEmail(email)
72
- .then((user) => {
73
- // Add incremental custom claim without overwriting existing claims.
74
- let currentCustomClaims = user.customClaims;
75
-
76
- // Reading? Just print.
77
- if (operation === undefined) {
78
- console.log(`${email}'s privileges are...`);
79
- console.log(currentCustomClaims);
80
- }
81
- // Otherwise, update.
82
- else {
83
- if (currentCustomClaims === undefined) currentCustomClaims = {};
84
- currentCustomClaims[privilege] = operation === '+';
85
- // Add custom claims for additional privileges.
86
- getAuth()
87
- .setCustomUserClaims(user.uid, currentCustomClaims)
88
- .then(() => {
89
- console.log(
90
- `Successfully ${
91
- operation === '+' ? 'added' : 'removed'
92
- } '${privilege}' privilege`
93
- );
94
- });
95
- }
96
- })
97
- .catch((error) => {
98
- console.log(error);
99
- });
package/src/app.d.ts DELETED
@@ -1,9 +0,0 @@
1
- // See https://kit.svelte.dev/docs/types#app
2
- // for information about these interfaces
3
- // and what to do when importing types
4
- declare namespace App {
5
- // interface Locals {}
6
- // interface PageData {}
7
- // interface Error {}
8
- // interface Platform {}
9
- }
package/src/app.html DELETED
@@ -1,24 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta
6
- name="viewport"
7
- content="width=device-width, initial-scale=1, shrink-to-fit=no"
8
- />
9
- <link
10
- rel="icon"
11
- type="image/png"
12
- href="%sveltekit.assets%/icons/favicon.png"
13
- />
14
- <link
15
- rel="apple-touch-icon"
16
- sizes="180x180"
17
- href="%sveltekit.assets%/icons/ios-icon.png"
18
- />
19
- %sveltekit.head%
20
- </head>
21
- <body>
22
- <div>%sveltekit.body%</div>
23
- </body>
24
- </html>
@@ -1,65 +0,0 @@
1
- <script lang="ts">
2
- import { sendSignInLinkToEmail, type User } from 'firebase/auth';
3
- import { onDestroy, setContext } from 'svelte';
4
- import { writable, type Writable } from 'svelte/store';
5
- import { auth } from '../models/Firebase';
6
- import type Authentication from './Authentication';
7
- import { USER, type UserStore } from './page/Contexts';
8
-
9
- // Track the user and user loading status in state
10
- let loading = true;
11
-
12
- // The store that tracks the auth context.
13
- const authentication: Writable<Authentication> = writable({
14
- user: null,
15
- loading: loading,
16
- login,
17
- logout,
18
- });
19
-
20
- // Login using Firebase's password-less email verification
21
- async function login(email: string) {
22
- // If connected to firebase...
23
- if (auth) {
24
- const actionCodeSettings = {
25
- url: location.origin + '/confirm',
26
- handleCodeInApp: true,
27
- };
28
-
29
- // Ask Firebase to log in with the given email
30
- await sendSignInLinkToEmail(auth, email, actionCodeSettings);
31
- // Remember the email in local storage so we don't have to ask for it again
32
- // after returning to the link above.
33
- window.localStorage.setItem('email', email);
34
- }
35
- }
36
-
37
- function updateAuth(user: User | null) {
38
- authentication.set({ user, loading: loading, login, logout });
39
- }
40
-
41
- // Logout using Firebase's authentication framework.
42
- function logout() {
43
- if (auth) {
44
- return auth.signOut().then(() => updateAuth(null));
45
- }
46
- }
47
-
48
- // On mount, subscribe to authentication changes.
49
- if (auth) {
50
- const unsubscribe = auth.onAuthStateChanged((user) => {
51
- loading = false;
52
- updateAuth(user);
53
- });
54
- // On unmount, stop subscribing.
55
- onDestroy(unsubscribe);
56
- }
57
-
58
- // Expose the state and the login/logout functionality.
59
- setContext<UserStore>(USER, authentication);
60
- </script>
61
-
62
- <!-- Wrap whatever children are given in this context. -->
63
- {#if loading === false}
64
- <slot />
65
- {/if}
@@ -1,58 +0,0 @@
1
- <script lang="ts">
2
- import { page } from '$app/stores';
3
-
4
- export let to: string;
5
-
6
- let link: HTMLAnchorElement;
7
-
8
- function scroll(event: MouseEvent) {
9
- // No element? Bail.
10
- if (link === undefined) return;
11
-
12
- // No hash? No scroll.
13
- const hash = new URL(link.href).hash;
14
- if (hash === '') return;
15
-
16
- // Prevent the browser from scrolling.
17
- event.preventDefault();
18
-
19
- // Get the anchor
20
- const anchorId = new URL(link.href).hash.replace('#', '');
21
- const anchor = document.getElementById(anchorId);
22
-
23
- // No anchor? Bail.
24
- if (anchor === null) return;
25
-
26
- // Scroll to the anchor.
27
- window.scrollTo({
28
- top: anchor.offsetTop,
29
- behavior: 'smooth',
30
- });
31
-
32
- // Update the hash (without scrolling)
33
- history.pushState({}, '', hash);
34
- }
35
- </script>
36
-
37
- {#if $page.url.pathname === (to.charAt(to.length - 1) === '/' ? to.substring(0, to.length - 1) : to)}
38
- <slot />
39
- {:else}
40
- <a
41
- href={to}
42
- bind:this={link}
43
- on:click={(event) => scroll(event)}
44
- target={to.startsWith('http') ? '_blank' : null}><slot /></a
45
- >
46
- {/if}
47
-
48
- <style>
49
- a {
50
- color: var(--bookish-link-color);
51
- font-weight: var(--bookish-link-font-weight);
52
- text-decoration: none;
53
- }
54
-
55
- a:hover {
56
- text-decoration: underline;
57
- }
58
- </style>