@tiddlywiki/mws 0.0.21 → 0.1.1

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 (202) hide show
  1. package/README.md +42 -9
  2. package/dist/metafile-esm.json +1 -0
  3. package/dist/mws.d.ts +1 -0
  4. package/dist/mws.js +34710 -0
  5. package/dist/mws.js.map +1 -0
  6. package/editions/mws-docs/tiddlers/$__StoryList.tid +1 -2
  7. package/editions/mws-docs/tiddlers/2025-02-18 - User Management.md.meta +2 -2
  8. package/editions/mws-docs/tiddlers/2025-04-14 - client plugins /342/234/224/357/270/217.md" +31 -0
  9. package/editions/mws-docs/tiddlers/2025-04-14 - client plugins /342/234/224/357/270/217.md.meta" +5 -0
  10. package/editions/mws-docs/tiddlers/{2025-05-04.md → 2025-05-04 - event hooks /342/234/224/357/270/217.md" } +7 -1
  11. package/editions/mws-docs/tiddlers/2025-05-04 - event hooks /342/234/224/357/270/217.md.meta" +5 -0
  12. package/editions/mws-docs/tiddlers/{2025-05-06.md → 2025-05-06 - syncer design.md } +0 -4
  13. package/editions/mws-docs/tiddlers/2025-05-06 - syncer design.md.meta +5 -0
  14. package/editions/mws-docs/tiddlers/Allowed Methods.tid +8 -0
  15. package/editions/mws-docs/tiddlers/Application Access & Security.md +14 -84
  16. package/editions/mws-docs/tiddlers/Application Access & Security.md.meta +1 -1
  17. package/editions/mws-docs/tiddlers/Body Format.md +19 -0
  18. package/editions/mws-docs/tiddlers/Body Format.md.meta +4 -0
  19. package/editions/mws-docs/tiddlers/Checklists and Features.md +0 -3
  20. package/editions/mws-docs/tiddlers/Checklists and Features.md.meta +1 -1
  21. package/editions/mws-docs/tiddlers/Client Plugins.md +17 -0
  22. package/editions/mws-docs/tiddlers/Client Plugins.md.meta +5 -0
  23. package/editions/mws-docs/tiddlers/HTTP API.md +4 -3
  24. package/editions/mws-docs/tiddlers/HTTP API.md.meta +1 -1
  25. package/editions/mws-docs/tiddlers/HelloThere.tid +2 -2
  26. package/editions/mws-docs/tiddlers/Installation.tid +2 -3
  27. package/editions/mws-docs/tiddlers/MWS Architecture.tid +6 -1
  28. package/editions/mws-docs/tiddlers/Multi-user Trust.md +12 -0
  29. package/editions/mws-docs/tiddlers/Multi-user Trust.md.meta +5 -0
  30. package/editions/mws-docs/tiddlers/Notes.tid +5 -3
  31. package/editions/mws-docs/tiddlers/Oracle Attacks.md +29 -0
  32. package/editions/mws-docs/tiddlers/Oracle Attacks.md.meta +5 -0
  33. package/editions/mws-docs/tiddlers/Reference.md +1 -0
  34. package/editions/mws-docs/tiddlers/Reference.md.meta +1 -1
  35. package/editions/mws-docs/tiddlers/Request Handling.md +53 -0
  36. package/editions/mws-docs/tiddlers/Request Handling.md.meta +5 -0
  37. package/editions/mws-docs/tiddlers/Roadmap.tid +7 -0
  38. package/editions/mws-docs/tiddlers/Route Definers.md +206 -0
  39. package/editions/mws-docs/tiddlers/Route Definers.md.meta +5 -0
  40. package/editions/mws-docs/tiddlers/Security.md +75 -0
  41. package/editions/mws-docs/tiddlers/Security.md.meta +5 -0
  42. package/editions/mws-docs/tiddlers/Server Plugins.md +7 -0
  43. package/editions/mws-docs/tiddlers/Server Plugins.md.meta +5 -0
  44. package/editions/mws-docs/tiddlers/Startup Cache.md +28 -0
  45. package/editions/mws-docs/tiddlers/Startup Cache.md.meta +5 -0
  46. package/editions/mws-docs/tiddlers/TiddlerFields.md +5 -0
  47. package/editions/mws-docs/tiddlers/TiddlerFields.md.meta +4 -0
  48. package/editions/mws-docs/tiddlers/Usage.tid +2 -2
  49. package/editions/mws-docs/tiddlers/system/$__mws_cssvar-macro.tid +10 -0
  50. package/editions/mws-docs/tiddlers/system/$__palettes_MUI +143 -0
  51. package/editions/mws-docs/tiddlers/system/$__palettes_MUI.meta +7 -0
  52. package/editions/mws-docs/tiddlers/system/$__palettes_MUI_styles.css +567 -0
  53. package/editions/mws-docs/tiddlers/system/$__palettes_MUI_styles.css.meta +6 -0
  54. package/editions/mws-docs/tiddlers/system/$__theme.tid +6 -0
  55. package/editions/mws-docs/tiddlers/system/SplashScreen.tid +21 -0
  56. package/editions/mws-docs/tiddlers/system/StaticBanner.tid +1 -1
  57. package/editions/mws-docs/tiddlers/system/Styles.tid +13 -0
  58. package/editions/mws-docs/tiddlers/system/palette.tid +4 -1
  59. package/editions/mws-docs/tiddlers/system/sidebarlayout.tid +4 -1
  60. package/editions/mws-docs/tiddlers/x-mws-tiddler.md +35 -0
  61. package/editions/mws-docs/tiddlers/x-mws-tiddler.md.meta +5 -0
  62. package/mws.run.mjs +30 -0
  63. package/package.json +47 -36
  64. package/plugins/client/package-lock.json +46 -83
  65. package/plugins/client/package.json +1 -6
  66. package/plugins/client/plugin.info +2 -2
  67. package/plugins/client/src/fflate.d.ts +1501 -0
  68. package/plugins/client/src/multiwikiclientadaptor.ts +768 -317
  69. package/plugins/client/src/mws.d.ts +4 -0
  70. package/plugins/client/src/types.d.ts +3928 -0
  71. package/plugins/client/tiddlers/en-US.multids +3 -0
  72. package/plugins/client/tiddlers/status/SaveWikiButtonTemplate.tid +3 -0
  73. package/plugins/client/tiddlers/status/icon-cloud.tid +4 -0
  74. package/plugins/client/tiddlers/status/info-segment.tid +8 -0
  75. package/plugins/client/tiddlers/status/readonly-styles.tid +27 -0
  76. package/plugins/client/tiddlers/status/save-offline.tid +7 -0
  77. package/plugins/client/tiddlers/status/save-wiki-button.tid +26 -0
  78. package/plugins/client/tiddlers/status/styles.tid +44 -0
  79. package/plugins/client/tiddlers/status/syncer-actions-copy-logs.tid +6 -0
  80. package/plugins/client/tiddlers/status/syncer-actions-login-status.tid +9 -0
  81. package/plugins/client/tiddlers/status/syncer-actions-login.tid +8 -0
  82. package/plugins/client/tiddlers/status/syncer-actions-logout.tid +8 -0
  83. package/plugins/client/tiddlers/status/syncer-actions-refresh.tid +9 -0
  84. package/plugins/client/tiddlers/status/syncer-actions-save-snapshot.tid +9 -0
  85. package/plugins/client/tiddlers/status/tags-syncerdropdown.tid +2 -0
  86. package/plugins/client/tiddlers/syncer/multiwikiclientadaptor.js +640 -0
  87. package/plugins/client/tiddlers/syncer/syncer.js +831 -0
  88. package/plugins/client/tsconfig.json +19 -16
  89. package/plugins/filter-ast-to-sql/example-run-series.ts +146 -0
  90. package/plugins/server/SplashScreen.tid +150 -0
  91. package/plugins/server/fflate.js +9 -0
  92. package/plugins/server/plugin.info +8 -0
  93. package/plugins/server/readme +1 -0
  94. package/plugins/server/url-polyfill.js +294 -0
  95. package/prisma/client/client.d.ts +1 -0
  96. package/prisma/client/client.js +3 -0
  97. package/prisma/client/default.d.ts +1 -0
  98. package/prisma/client/default.js +3 -0
  99. package/prisma/client/edge.d.ts +1 -0
  100. package/prisma/client/edge.js +297 -0
  101. package/prisma/client/index-browser.js +275 -0
  102. package/prisma/client/index.d.ts +17770 -0
  103. package/prisma/client/index.js +324 -0
  104. package/prisma/client/package.json +173 -0
  105. package/prisma/client/query_engine_bg.js +811 -0
  106. package/prisma/client/query_engine_bg.wasm +0 -0
  107. package/prisma/client/runtime/edge-esm.js +10000 -0
  108. package/prisma/client/runtime/edge.js +10036 -0
  109. package/prisma/client/runtime/index-browser.d.ts +370 -0
  110. package/prisma/client/runtime/index-browser.js +2300 -0
  111. package/prisma/client/runtime/library.d.ts +3681 -0
  112. package/prisma/client/runtime/library.js +10604 -0
  113. package/prisma/client/runtime/react-native.js +10629 -0
  114. package/prisma/client/runtime/wasm-compiler-edge.js +11238 -0
  115. package/prisma/client/runtime/wasm-engine-edge.js +7801 -0
  116. package/prisma/client/schema.prisma +156 -0
  117. package/prisma/client/wasm-edge-light-loader.mjs +4 -0
  118. package/prisma/client/wasm-worker-loader.mjs +4 -0
  119. package/prisma/client/wasm.d.ts +1 -0
  120. package/prisma/client/wasm.js +304 -0
  121. package/prisma/global.ts +53 -0
  122. package/prisma/migrations/{20250406213424_init → 20250606001949_init}/migration.sql +46 -48
  123. package/prisma/migrations/20250613000526_remove_group/migration.sql +22 -0
  124. package/prisma/migrations/20250620014502_settings/migration.sql +5 -0
  125. package/prisma/migrations/20250707205229_recipes/migration.sql +20 -0
  126. package/prisma/migrations/migration_lock.toml +1 -1
  127. package/prisma/notes.md +1 -2
  128. package/prisma/schema.prisma +52 -49
  129. package/prisma/test.sqlite +0 -0
  130. package/prisma/test.sqlite-journal +0 -0
  131. package/public/react-admin/android-chrome-192x192.png +0 -0
  132. package/public/react-admin/android-chrome-512x512.png +0 -0
  133. package/public/react-admin/apple-touch-icon.png +0 -0
  134. package/{react-user-mgmt/public/esm-QKDFEP3B.js → public/react-admin/esm-L4WLVWJN.js} +1 -1
  135. package/public/react-admin/esm-L4WLVWJN.js.map +7 -0
  136. package/public/react-admin/esm-QMNGI3LF.js +3 -0
  137. package/public/react-admin/favicon-16x16.png +0 -0
  138. package/public/react-admin/favicon-32x32.png +0 -0
  139. package/public/react-admin/favicon.ico +0 -0
  140. package/public/react-admin/index.html +36 -0
  141. package/public/react-admin/main.js +268 -0
  142. package/public/react-admin/main.js.map +7 -0
  143. package/public/react-admin/site.webmanifest +20 -0
  144. package/public/react-admin/stats.json +1 -0
  145. package/scripts.mjs +134 -25
  146. package/dist/server.d.ts +0 -945
  147. package/dist/server.js +0 -20775
  148. package/dist/server.js.map +0 -1
  149. package/editions/mws-docs/tiddlers/2025-04-03 - Phases of Development.md +0 -64
  150. package/editions/mws-docs/tiddlers/2025-04-03 - Phases of Development.md.meta +0 -5
  151. package/editions/mws-docs/tiddlers/2025-04-13 - Plugins.md +0 -18
  152. package/editions/mws-docs/tiddlers/2025-04-13 - Plugins.md.meta +0 -5
  153. package/editions/mws-docs/tiddlers/2025-05-04.md.meta +0 -5
  154. package/editions/mws-docs/tiddlers/2025-05-06.md.meta +0 -5
  155. package/editions/mws-docs/tiddlers/Moduler Design.md +0 -29
  156. package/editions/mws-docs/tiddlers/Moduler Design.md.meta +0 -5
  157. package/editions/mws-docs/tiddlers/Request Server.md +0 -20
  158. package/editions/mws-docs/tiddlers/Request Server.md.meta +0 -5
  159. package/editions/mws-docs/tiddlers/system/$__palettes_MUI-Dark +0 -173
  160. package/editions/mws-docs/tiddlers/system/$__palettes_MUI-Dark.meta +0 -6
  161. package/editions/mws-docs/tiddlers/system/$__palettes_MUI-Light +0 -172
  162. package/editions/mws-docs/tiddlers/system/$__palettes_MUI-Light.meta +0 -6
  163. package/plugins/client/tiddlers/config-tiddlers-filter.tid +0 -2
  164. package/plugins/client/tiddlers/config-use-server-sent-events.tid +0 -2
  165. package/plugins/client/tiddlers/info-segment.tid +0 -8
  166. package/plugins/client/tiddlers/multiwikiclientadaptor.js +0 -444
  167. package/prisma/migrations/20250407002306_disconnect_user_tables/migration.sql +0 -52
  168. package/prisma/old-db.sql +0 -144
  169. package/react-user-mgmt/README.md +0 -50
  170. package/react-user-mgmt/eslint.config.js +0 -28
  171. package/react-user-mgmt/package-lock.json +0 -2738
  172. package/react-user-mgmt/package.json +0 -31
  173. package/react-user-mgmt/public/index.html +0 -1
  174. package/react-user-mgmt/public/main.js +0 -295
  175. package/react-user-mgmt/public/main.js.map +0 -7
  176. package/react-user-mgmt/public/stats.json +0 -1
  177. package/react-user-mgmt/tsconfig.json +0 -40
  178. package/react-user-mgmt/types.d.ts +0 -2
  179. package/tiddlywiki-types/boot/boot.d.ts +0 -378
  180. package/tiddlywiki-types/boot/bootprefix.d.ts +0 -110
  181. package/tiddlywiki-types/core/modules/filters.d.ts +0 -107
  182. package/tiddlywiki-types/core/modules/tiddler.d.ts +0 -47
  183. package/tiddlywiki-types/core/modules/wiki-bulkops.d.ts +0 -36
  184. package/tiddlywiki-types/core/modules/wiki.d.ts +0 -208
  185. package/tiddlywiki-types/index.d.ts +0 -7
  186. package/tiddlywiki-types/package.json +0 -3
  187. /package/plugins/client/tiddlers/{sidebarsegment.tid → status/sidebarsegment.tid} +0 -0
  188. /package/plugins/client/tiddlers/{GettingStarted.tid → syncer/GettingStarted.tid} +0 -0
  189. /package/plugins/client/tiddlers/{config-incoming-updates-filter.tid → syncer/config-incoming-updates-filter.tid} +0 -0
  190. /package/plugins/client/tiddlers/{readme.tid → syncer/readme.tid} +0 -0
  191. /package/{react-user-mgmt/public → public/react-admin}/chunk-YALWN5OT.js +0 -0
  192. /package/{react-user-mgmt/public → public/react-admin}/chunk-YALWN5OT.js.map +0 -0
  193. /package/{react-user-mgmt/public/esm-QKDFEP3B.js.map → public/react-admin/esm-QMNGI3LF.js.map} +0 -0
  194. /package/{react-user-mgmt/public → public/react-admin}/favicon.png +0 -0
  195. /package/{react-user-mgmt/public → public/react-admin}/missing-favicon.png +0 -0
  196. /package/{react-user-mgmt/public → public/react-admin}/motovun-jack.jpg +0 -0
  197. /package/{react-user-mgmt/public → public/react-admin}/mws-icon.png +0 -0
  198. /package/{react-user-mgmt/public → public/react-admin}/stats.css +0 -0
  199. /package/{react-user-mgmt/public → public/react-admin}/stats.html +0 -0
  200. /package/{react-user-mgmt/public → public/react-admin}/stats.js +0 -0
  201. /package/{react-user-mgmt/public → public/react-admin}/stats.svg +0 -0
  202. /package/{react-user-mgmt/public → public/react-admin}/vite.svg +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/global.ts","../node_modules/depd/index.js","../node_modules/setprototypeof/index.js","../node_modules/statuses/codes.json","../node_modules/statuses/index.js","../node_modules/inherits/inherits_browser.js","../node_modules/inherits/inherits.js","../node_modules/toidentifier/index.js","../node_modules/http-errors/index.js","../node_modules/ms/index.js","../node_modules/debug/src/common.js","../node_modules/debug/src/browser.js","../node_modules/debug/src/node.js","../node_modules/debug/src/index.js","../node_modules/destroy/index.js","../node_modules/encodeurl/index.js","../node_modules/escape-html/index.js","../node_modules/etag/index.js","../node_modules/fresh/index.js","../node_modules/mime-db/db.json","../node_modules/mime-db/index.js","../node_modules/mime-types/index.js","../node_modules/ee-first/index.js","../node_modules/on-finished/index.js","../node_modules/range-parser/index.js","../node_modules/send/index.js","../src/utils/utils.ts","../src/utils/rootRoute.ts","../src/utils/data-checks.ts","../src/utils/zodAssert.ts","../src/utils/index.ts","../src/streamer.ts","../src/StateObject.ts","../src/routes/managers/manager-recipes.ts","../src/routes/managers/manager-users.ts","../src/routes/managers/index.ts","../src/routes/TiddlerStore.ts","../node_modules/sjcl/sjcl.js","../src/routes/bag-file-server.ts","../src/routes/managers/router-tiddlers.ts","../src/routes/tw-routes.ts","../src/routes/index.ts","../src/setupDevServer.ts","../src/routes/cache.ts","../src/routes/router.ts","../src/tiddlywiki.ts","../src/services/sessions.ts","../src/services/attachments.ts","../node_modules/commander/lib/error.js","../node_modules/commander/lib/argument.js","../node_modules/commander/lib/help.js","../node_modules/commander/lib/option.js","../node_modules/commander/lib/suggestSimilar.js","../node_modules/commander/lib/command.js","../node_modules/commander/index.js","../node_modules/commander/esm.mjs","../src/commands/load-plugin-bags.ts","../src/commands/render-tiddlywiki5.ts","../src/commands/load-wiki-folder.ts","../src/commands/save-archive.ts","../src/commands/load-archive.ts","../src/commands/init-store.ts","../src/commands/listen.ts","../src/commands/divider.ts","../src/commands/tests-complete.ts","../src/commands/client-build.ts","../src/commands/help.ts","../src/commands/index.ts","../src/db/sqlite-adapter.ts","../package.json","../src/commander.ts","../src/services/PasswordService.ts","../src/server.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import type { rootRoute as _rootRoute, Router } from \"./routes/router\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport type { Prisma } from \"@prisma/client\";\nimport type { ZodAssert } from \"./utils\";\nimport { Tiddler, Wiki } from \"tiddlywiki\";\nimport { Commander } from \"./commander\";\nimport { createRequire } from \"node:module\";\nimport { dirname, resolve } from \"node:path\";\n\n\ndeclare global {\n type PrismaTxnClient = Omit<Commander[\"engine\"], \"$connect\" | \"$disconnect\" | \"$on\" | \"$transaction\" | \"$use\" | \"$extends\">\n type ART<T extends (...args: any) => any> = Awaited<ReturnType<T>>\n type Complete<T> = { [K in keyof T]-?: T[K] }\n /** \n * This primarily makes sure that positional arguments are used correctly\n * (so you can't switch a title and bag_name around).\n * \n * If you assign the wrong value (like `5 as PrismaField<\"Bags\", \"bag_name\">`), \n * this will result in a type error on the as keyword, allowing you to catch incorrect types quickly.\n */\n type PrismaField<T extends Prisma.ModelName, K extends keyof PrismaPayloadScalars<T>> =\n // manually map foriegn keys to their corresponding primary key so comparisons work\n // this should remove the need for any global helper functions to convert between types\n (\n // [T, K] extends [\"Acl\", \"role_id\"] ? PrismaField<\"Roles\", \"role_id\"> :\n // [T, K] extends [\"\", \"role_id\"] ? PrismaField<\"Roles\", \"role_id\"> :\n [T, K] extends [\"Tiddlers\", \"bag_id\"] ? PrismaField<\"Bags\", \"bag_id\"> :\n [T, K] extends [\"Sessions\", \"user_id\"] ? PrismaField<\"Users\", \"user_id\"> :\n [T, K] extends [\"Recipe_bags\", \"bag_id\"] ? PrismaField<\"Bags\", \"bag_id\"> :\n [T, K] extends [\"Recipe_bags\", \"recipe_id\"] ? PrismaField<\"Recipes\", \"recipe_id\"> :\n [T, K] extends [\"Recipes\", \"owner_id\"] ? PrismaField<\"Users\", \"user_id\"> :\n [T, K] extends [\"Bags\", \"owner_id\"] ? PrismaField<\"Users\", \"user_id\"> :\n (PrismaPayloadScalars<T>[K] & { __prisma_table: T, __prisma_field: K })\n ) | (null extends PrismaPayloadScalars<T>[K] ? null : never);\n\n type PrismaPayloadScalars<T extends Prisma.ModelName>\n = Prisma.TypeMap[\"model\"][T][\"payload\"][\"scalars\"]\n\n type EntityName<T extends EntityType> =\n T extends \"bag\" ? PrismaField<\"Bags\", \"bag_name\"> :\n T extends \"recipe\" ? PrismaField<\"Recipes\", \"recipe_name\"> :\n never;\n\n type EntityType = \"recipe\" | \"bag\";\n\n type ACLPermissionName = \"READ\" | \"WRITE\" | \"ADMIN\";\n\n type rootRoute = _rootRoute;\n type ZodAssert = typeof ZodAssert;\n\n}\n\n\n// declare global { const ok: typeof assert.ok; }\n// (global as any).ok = assert.ok;\n\n// these are some $tw.utils functions that seemed important enough to just copy across\ndeclare global {\n function hop(object: any, property: any): boolean;\n function each<T>(object: T[], callback: (value: T, index: number, object: T[]) => void): void;\n function each<T>(object: Record<string, T>, callback: (value: T, key: string, object: Record<string, T>) => void): void;\n function eachAsync<T>(object: T[], callback: (value: T, index: number, object: T[]) => void): Promise<void>;\n function eachAsync<T>(object: Record<string, T>, callback: (value: T, key: string, object: Record<string, T>) => void): Promise<void>;\n function createDirectory(dirPath: string): void;\n function deleteDirectory(dirPath: string): void;\n function encodeURIComponentExtended(s: string): string;\n}\n\n(global as any).hop = function (object: any, property: any) {\n return object ? Object.prototype.hasOwnProperty.call(object, property) : false;\n};\n\n(global as any).eachAsync = async function (object: any, callback: any) {\n var next, f, length;\n if (object) {\n if (Object.prototype.toString.call(object) == \"[object Array]\") {\n for (f = 0, length = object.length; f < length; f++) {\n next = await callback(object[f], f, object);\n if (next === false) {\n break;\n }\n }\n } else {\n var keys = Object.keys(object);\n for (f = 0, length = keys.length; f < length; f++) {\n var key = keys[f];\n next = await callback(object[key as string], key, object);\n if (next === false) {\n break;\n }\n }\n }\n }\n};\n\n(global as any).each = function (object: any, callback: any) {\n var next, f, length;\n if (object) {\n if (Object.prototype.toString.call(object) == \"[object Array]\") {\n for (f = 0, length = object.length; f < length; f++) {\n next = callback(object[f], f, object);\n if (next === false) {\n break;\n }\n }\n } else {\n var keys = Object.keys(object);\n for (f = 0, length = keys.length; f < length; f++) {\n var key = keys[f];\n next = callback(object[key as string], key, object);\n if (next === false) {\n break;\n }\n }\n }\n }\n};\n\n(global as any).createDirectory = function (dirPath: string) {\n if (dirPath.substr(dirPath.length - 1, 1) !== path.sep) {\n dirPath = dirPath + path.sep;\n }\n var pos = 1;\n pos = dirPath.indexOf(path.sep, pos);\n while (pos !== -1) {\n var subDirPath = dirPath.substr(0, pos);\n if (!(fs.existsSync(subDirPath) && fs.statSync(subDirPath).isDirectory())) {\n try {\n fs.mkdirSync(subDirPath);\n } catch (e) {\n return \"Error creating directory '\" + subDirPath + \"'\";\n }\n }\n pos = dirPath.indexOf(path.sep, pos + 1);\n }\n return null;\n};\n\n(global as any).deleteDirectory = function deleteDirectory(dirPath: string) {\n if (fs.existsSync(dirPath)) {\n var entries = fs.readdirSync(dirPath);\n for (var entryIndex = 0; entryIndex < entries.length; entryIndex++) {\n var currPath = dirPath + path.sep + entries[entryIndex];\n if (fs.lstatSync(currPath).isDirectory()) {\n deleteDirectory(currPath);\n } else {\n fs.unlinkSync(currPath);\n }\n }\n fs.rmdirSync(dirPath);\n }\n return null;\n};\n\n(global as any).encodeURIComponentExtended = function (s: string) {\n return encodeURIComponent(s).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n};\n\n\nclass _Result<OK extends boolean, T> {\n constructor(\n public ok: OK,\n public error: OK extends true ? undefined : unknown,\n public value: OK extends true ? T : undefined\n ) { }\n get [Symbol.iterator]() { return [this.ok, this.error, this.value] }\n static ok<T>(value: T) {\n return new _Result(true, undefined, value)\n }\n static error(error: unknown) {\n return new _Result(false, error, undefined)\n }\n\n /**\n * @example\n * // const result = try something();\n * const result = Result.try_(() => {\n * something();\n * });\n */\n static try_<T, This>(callback: (this: This) => T, thisarg: This) {\n try {\n return _Result.ok(callback.apply(thisarg));\n } catch (e) {\n return _Result.error(e);\n }\n }\n\n}\n//https://github.com/arthurfiorette/proposal-try-operator\ndeclare global {\n const TryResult: typeof _Result;\n interface Promise<T> {\n try: () => Promise<_Result<true, T> | _Result<false, T>>;\n }\n}\n(global as any).Result = _Result;\nPromise.prototype.try = function <T>(this: Promise<T>) {\n return this.then(_Result.ok, _Result.error);\n}\n\ninterface $TW {\n loadTiddlersFromPath: any;\n loadPluginFolder: any;\n getLibraryItemSearchPaths: any;\n wiki: never;\n utils: {\n // [x: string]: any;\n /** Use Object.assign instead */\n extend: never\n /** Use Array.isArray instead */\n isArray: never\n /** use prismaField with a parse- option or z.uriComponent if possible */\n decodeURIComponentSafe: never;\n /**\n * \n ```js\n $tw.utils.stringifyDate = function(value) {\n return value.getUTCFullYear() +\n $tw.utils.pad(value.getUTCMonth() + 1) +\n $tw.utils.pad(value.getUTCDate()) +\n $tw.utils.pad(value.getUTCHours()) +\n $tw.utils.pad(value.getUTCMinutes()) +\n $tw.utils.pad(value.getUTCSeconds()) +\n $tw.utils.pad(value.getUTCMilliseconds(),3);\n };\n ```\n */\n stringifyDate: never;\n // parseJSONSafe(str: string, defaultJSON?: any): any;\n // /** `return parseFloat(str) || 0;` */\n // parseNumber(string: string): number;\n // /** `return parseFloat(str) || 0;` */\n // parseNumber(string: string | null): number;\n };\n boot: any;\n config: any;\n node: any;\n hooks: any;\n sjcl: any;\n Wiki: { new(): Wiki };\n Tiddler: { new(fields: Record<string, any>): Tiddler };\n\n}\n","/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n var vals = str.split(/[ ,]+/)\n var ns = String(namespace).toLowerCase()\n\n for (var i = 0; i < vals.length; i++) {\n var val = vals[i]\n\n // namespace contained\n if (val && (val === '*' || val.toLowerCase() === ns)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n var value = descriptor.value\n\n descriptor.get = function getter () { return value }\n\n if (descriptor.writable) {\n descriptor.set = function setter (val) { return (value = val) }\n }\n\n delete descriptor.value\n delete descriptor.writable\n\n Object.defineProperty(obj, prop, descriptor)\n\n return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n var str = ''\n\n for (var i = 0; i < arity; i++) {\n str += ', arg' + i\n }\n\n return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n var str = this.name + ': ' + this.namespace\n\n if (this.message) {\n str += ' deprecated ' + this.message\n }\n\n for (var i = 0; i < stack.length; i++) {\n str += '\\n at ' + stack[i].toString()\n }\n\n return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n if (!namespace) {\n throw new TypeError('argument namespace is required')\n }\n\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n var file = site[0]\n\n function deprecate (message) {\n // call to self as log\n log.call(deprecate, message)\n }\n\n deprecate._file = file\n deprecate._ignored = isignored(namespace)\n deprecate._namespace = namespace\n deprecate._traced = istraced(namespace)\n deprecate._warned = Object.create(null)\n\n deprecate.function = wrapfunction\n deprecate.property = wrapproperty\n\n return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n if (process.noDeprecation) {\n // --no-deprecation support\n return true\n }\n\n var str = process.env.NO_DEPRECATION || ''\n\n // namespace ignored\n return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n if (process.traceDeprecation) {\n // --trace-deprecation support\n return true\n }\n\n var str = process.env.TRACE_DEPRECATION || ''\n\n // namespace traced\n return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n var haslisteners = eehaslisteners(process, 'deprecation')\n\n // abort early if no destination\n if (!haslisteners && this._ignored) {\n return\n }\n\n var caller\n var callFile\n var callSite\n var depSite\n var i = 0\n var seen = false\n var stack = getStack()\n var file = this._file\n\n if (site) {\n // provided site\n depSite = site\n callSite = callSiteLocation(stack[1])\n callSite.name = depSite.name\n file = callSite[0]\n } else {\n // get call site\n i = 2\n depSite = callSiteLocation(stack[i])\n callSite = depSite\n }\n\n // get caller of deprecated thing in relation to file\n for (; i < stack.length; i++) {\n caller = callSiteLocation(stack[i])\n callFile = caller[0]\n\n if (callFile === file) {\n seen = true\n } else if (callFile === this._file) {\n file = this._file\n } else if (seen) {\n break\n }\n }\n\n var key = caller\n ? depSite.join(':') + '__' + caller.join(':')\n : undefined\n\n if (key !== undefined && key in this._warned) {\n // already warned\n return\n }\n\n this._warned[key] = true\n\n // generate automatic message from call site\n var msg = message\n if (!msg) {\n msg = callSite === depSite || !callSite.name\n ? defaultMessage(depSite)\n : defaultMessage(callSite)\n }\n\n // emit deprecation if listeners exist\n if (haslisteners) {\n var err = DeprecationError(this._namespace, msg, stack.slice(i))\n process.emit('deprecation', err)\n return\n }\n\n // format and write message\n var format = process.stderr.isTTY\n ? formatColor\n : formatPlain\n var output = format.call(this, msg, caller, stack.slice(i))\n process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n var file = callSite.getFileName() || '<anonymous>'\n var line = callSite.getLineNumber()\n var colm = callSite.getColumnNumber()\n\n if (callSite.isEval()) {\n file = callSite.getEvalOrigin() + ', ' + file\n }\n\n var site = [file, line, colm]\n\n site.callSite = callSite\n site.name = callSite.getFunctionName()\n\n return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n var callSite = site.callSite\n var funcName = site.name\n\n // make useful anonymous name\n if (!funcName) {\n funcName = '<anonymous@' + formatLocation(site) + '>'\n }\n\n var context = callSite.getThis()\n var typeName = context && callSite.getTypeName()\n\n // ignore useless type name\n if (typeName === 'Object') {\n typeName = undefined\n }\n\n // make useful type name\n if (typeName === 'Function') {\n typeName = context.name || typeName\n }\n\n return typeName && callSite.getMethodName()\n ? typeName + '.' + funcName\n : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n var timestamp = new Date().toUTCString()\n\n var formatted = timestamp +\n ' ' + this._namespace +\n ' deprecated ' + msg\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n at ' + stack[i].toString()\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' at ' + formatLocation(caller)\n }\n\n return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n }\n\n return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n return relative(basePath, callSite[0]) +\n ':' + callSite[1] +\n ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n var limit = Error.stackTraceLimit\n var obj = {}\n var prep = Error.prepareStackTrace\n\n Error.prepareStackTrace = prepareObjectStackTrace\n Error.stackTraceLimit = Math.max(10, limit)\n\n // capture the stack\n Error.captureStackTrace(obj)\n\n // slice this function off the top\n var stack = obj.stack.slice(1)\n\n Error.prepareStackTrace = prep\n Error.stackTraceLimit = limit\n\n return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n if (typeof fn !== 'function') {\n throw new TypeError('argument fn must be a function')\n }\n\n var args = createArgumentsString(fn.length)\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n site.name = fn.name\n\n // eslint-disable-next-line no-new-func\n var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n '\"use strict\"\\n' +\n 'return function (' + args + ') {' +\n 'log.call(deprecate, message, site)\\n' +\n 'return fn.apply(this, arguments)\\n' +\n '}')(fn, log, this, message, site)\n\n return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new TypeError('argument obj must be object')\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n if (!descriptor) {\n throw new TypeError('must call property on owner object')\n }\n\n if (!descriptor.configurable) {\n throw new TypeError('property must be configurable')\n }\n\n var deprecate = this\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n // set site name\n site.name = prop\n\n // convert data descriptor\n if ('value' in descriptor) {\n descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n }\n\n var get = descriptor.get\n var set = descriptor.set\n\n // wrap getter\n if (typeof get === 'function') {\n descriptor.get = function getter () {\n log.call(deprecate, message, site)\n return get.apply(this, arguments)\n }\n }\n\n // wrap setter\n if (typeof set === 'function') {\n descriptor.set = function setter () {\n log.call(deprecate, message, site)\n return set.apply(this, arguments)\n }\n }\n\n Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n var error = new Error()\n var stackString\n\n Object.defineProperty(error, 'constructor', {\n value: DeprecationError\n })\n\n Object.defineProperty(error, 'message', {\n configurable: true,\n enumerable: false,\n value: message,\n writable: true\n })\n\n Object.defineProperty(error, 'name', {\n enumerable: false,\n configurable: true,\n value: 'DeprecationError',\n writable: true\n })\n\n Object.defineProperty(error, 'namespace', {\n configurable: true,\n enumerable: false,\n value: namespace,\n writable: true\n })\n\n Object.defineProperty(error, 'stack', {\n configurable: true,\n enumerable: false,\n get: function () {\n if (stackString !== undefined) {\n return stackString\n }\n\n // prepare stack trace\n return (stackString = createStackString.call(this, stack))\n },\n set: function setter (val) {\n stackString = val\n }\n })\n\n return error\n}\n","'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n obj.__proto__ = proto\n return obj\n}\n\nfunction mixinProperties (obj, proto) {\n for (var prop in proto) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n obj[prop] = proto[prop]\n }\n }\n return obj\n}\n","{\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"103\": \"Early Hints\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a Teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Too Early\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n","/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n var map = {}\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // populate map\n map[message.toLowerCase()] = status\n })\n\n return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n return Object.keys(codes).map(function mapCode (code) {\n return Number(code)\n })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n var msg = message.toLowerCase()\n\n if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n throw new Error('invalid status message: \"' + message + '\"')\n }\n\n return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n throw new Error('invalid status code: ' + code)\n }\n\n return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n return getStatusMessage(code)\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n return getStatusMessage(n)\n }\n\n return getStatusCode(code)\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n","/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n return str\n .split(' ')\n .map(function (token) {\n return token.slice(0, 1).toUpperCase() + token.slice(1)\n })\n .join('')\n .replace(/[^ _0-9a-z]/gi, '')\n}\n","/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n // so much arity going on ~_~\n var err\n var msg\n var status = 500\n var props = {}\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i]\n var type = typeof arg\n if (type === 'object' && arg instanceof Error) {\n err = arg\n status = err.status || err.statusCode || status\n } else if (type === 'number' && i === 0) {\n status = arg\n } else if (type === 'string') {\n msg = arg\n } else if (type === 'object') {\n props = arg\n } else {\n throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n }\n }\n\n if (typeof status === 'number' && (status < 400 || status >= 600)) {\n deprecate('non-error status code; use only 4xx or 5xx status codes')\n }\n\n if (typeof status !== 'number' ||\n (!statuses.message[status] && (status < 400 || status >= 600))) {\n status = 500\n }\n\n // constructor\n var HttpError = createError[status] || createError[codeClass(status)]\n\n if (!err) {\n // create error\n err = HttpError\n ? new HttpError(msg)\n : new Error(msg || statuses.message[status])\n Error.captureStackTrace(err, createError)\n }\n\n if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n // add properties to generic error\n err.expose = status < 500\n err.status = err.statusCode = status\n }\n\n for (var key in props) {\n if (key !== 'status' && key !== 'statusCode') {\n err[key] = props[key]\n }\n }\n\n return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n function HttpError () {\n throw new TypeError('cannot construct abstract class')\n }\n\n inherits(HttpError, Error)\n\n return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ClientError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ClientError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ClientError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ClientError, HttpError)\n nameFunc(ClientError, className)\n\n ClientError.prototype.status = code\n ClientError.prototype.statusCode = code\n ClientError.prototype.expose = true\n\n return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n return function isHttpError (val) {\n if (!val || typeof val !== 'object') {\n return false\n }\n\n if (val instanceof HttpError) {\n return true\n }\n\n return val instanceof Error &&\n typeof val.expose === 'boolean' &&\n typeof val.statusCode === 'number' && val.status === val.statusCode\n }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ServerError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ServerError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ServerError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ServerError, HttpError)\n nameFunc(ServerError, className)\n\n ServerError.prototype.status = code\n ServerError.prototype.statusCode = code\n ServerError.prototype.expose = false\n\n return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n if (desc && desc.configurable) {\n desc.value = name\n Object.defineProperty(func, 'name', desc)\n }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n codes.forEach(function forEachCode (code) {\n var CodeError\n var name = toIdentifier(statuses.message[code])\n\n switch (codeClass(code)) {\n case 400:\n CodeError = createClientErrorConstructor(HttpError, name, code)\n break\n case 500:\n CodeError = createServerErrorConstructor(HttpError, name, code)\n break\n }\n\n if (CodeError) {\n // export the constructor\n exports[code] = CodeError\n exports[name] = CodeError\n }\n })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n return name.substr(-5) !== 'Error'\n ? name + 'Error'\n : name\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n if (isFsReadStream(stream)) {\n destroyReadStream(stream)\n } else if (isZlibStream(stream)) {\n destroyZlibStream(stream)\n } else if (hasDestroy(stream)) {\n stream.destroy()\n }\n\n if (isEventEmitter(stream) && suppress) {\n stream.removeAllListeners('error')\n stream.addListener('error', noop)\n }\n\n return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n stream.destroy()\n\n if (typeof stream.close === 'function') {\n // node.js core bug work-around\n stream.on('open', onOpenClose)\n }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n if (stream._hadError === true) {\n var prop = stream._binding === null\n ? '_binding'\n : '_handle'\n\n stream[prop] = {\n close: function () { this[prop] = null }\n }\n }\n\n stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n if (typeof stream.destroy === 'function') {\n // node.js core bug work-around\n // istanbul ignore if: node.js 0.8\n if (stream._binding) {\n // node.js < 0.10.0\n stream.destroy()\n if (stream._processing) {\n stream._needDrain = true\n stream.once('drain', onDrainClearBinding)\n } else {\n stream._binding.clear()\n }\n } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n // node.js >= 12, ^11.1.0, ^10.15.1\n stream.destroy()\n } else if (stream._destroy && typeof stream.close === 'function') {\n // node.js 7, 8\n stream.destroyed = true\n stream.close()\n } else {\n // fallback\n // istanbul ignore next\n stream.destroy()\n }\n } else if (typeof stream.close === 'function') {\n // node.js < 8 fallback\n closeZlibStream(stream)\n }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n return stream instanceof Stream &&\n typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n return stream instanceof Zlib.Gzip ||\n stream instanceof Zlib.Gunzip ||\n stream instanceof Zlib.Deflate ||\n stream instanceof Zlib.DeflateRaw ||\n stream instanceof Zlib.Inflate ||\n stream instanceof Zlib.InflateRaw ||\n stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n if (typeof this.fd === 'number') {\n // actually close down the fd\n this.close()\n }\n}\n","/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '&quot;';\n break;\n case 38: // &\n escape = '&amp;';\n break;\n case 39: // '\n escape = '&#39;';\n break;\n case 60: // <\n escape = '&lt;';\n break;\n case 62: // >\n escape = '&gt;';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n if (entity.length === 0) {\n // fast-path empty\n return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n }\n\n // compute hash of entity\n var hash = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27)\n\n // compute length of entity\n var len = typeof entity === 'string'\n ? Buffer.byteLength(entity, 'utf8')\n : entity.length\n\n return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n if (entity == null) {\n throw new TypeError('argument entity is required')\n }\n\n // support fs.Stats object\n var isStats = isstats(entity)\n var weak = options && typeof options.weak === 'boolean'\n ? options.weak\n : isStats\n\n // validate argument\n if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n }\n\n // generate entity tag\n var tag = isStats\n ? stattag(entity)\n : entitytag(entity)\n\n return weak\n ? 'W/' + tag\n : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n // genuine fs.Stats\n if (typeof Stats === 'function' && obj instanceof Stats) {\n return true\n }\n\n // quack quack\n return obj && typeof obj === 'object' &&\n 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n 'ino' in obj && typeof obj.ino === 'number' &&\n 'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n var mtime = stat.mtime.getTime().toString(16)\n var size = stat.size.toString(16)\n\n return '\"' + size + '-' + mtime + '\"'\n}\n","/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n // fields\n var modifiedSince = reqHeaders['if-modified-since']\n var noneMatch = reqHeaders['if-none-match']\n\n // unconditional request\n if (!modifiedSince && !noneMatch) {\n return false\n }\n\n // Always return stale when Cache-Control: no-cache\n // to support end-to-end reload requests\n // https://tools.ietf.org/html/rfc2616#section-14.9.4\n var cacheControl = reqHeaders['cache-control']\n if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n return false\n }\n\n // if-none-match\n if (noneMatch && noneMatch !== '*') {\n var etag = resHeaders['etag']\n\n if (!etag) {\n return false\n }\n\n var etagStale = true\n var matches = parseTokenList(noneMatch)\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i]\n if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n etagStale = false\n break\n }\n }\n\n if (etagStale) {\n return false\n }\n }\n\n // if-modified-since\n if (modifiedSince) {\n var lastModified = resHeaders['last-modified']\n var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n if (modifiedStale) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n // istanbul ignore next: guard against date.js Date.parse patching\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(str.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(str.substring(start, end))\n\n return list\n}\n","{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n","/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, wrap(listener))\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish (error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket (socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // istanbul ignore next: node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n function listener (err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket (socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n","/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string')\n }\n\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n","/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime-types')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n Stream.call(this)\n\n var opts = options || {}\n\n this.options = opts\n this.path = path\n this.req = req\n\n this._acceptRanges = opts.acceptRanges !== undefined\n ? Boolean(opts.acceptRanges)\n : true\n\n this._cacheControl = opts.cacheControl !== undefined\n ? Boolean(opts.cacheControl)\n : true\n\n this._etag = opts.etag !== undefined\n ? Boolean(opts.etag)\n : true\n\n this._dotfiles = opts.dotfiles !== undefined\n ? opts.dotfiles\n : 'ignore'\n\n if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n }\n\n this._extensions = opts.extensions !== undefined\n ? normalizeList(opts.extensions, 'extensions option')\n : []\n\n this._immutable = opts.immutable !== undefined\n ? Boolean(opts.immutable)\n : false\n\n this._index = opts.index !== undefined\n ? normalizeList(opts.index, 'index option')\n : ['index.html']\n\n this._lastModified = opts.lastModified !== undefined\n ? Boolean(opts.lastModified)\n : true\n\n this._maxage = opts.maxAge || opts.maxage\n this._maxage = typeof this._maxage === 'string'\n ? ms(this._maxage)\n : Number(this._maxage)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n\n this._root = opts.root\n ? resolve(opts.root)\n : null\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n // emit if listeners instead of responding\n if (hasListeners(this, 'error')) {\n return this.emit('error', createHttpError(status, err))\n }\n\n var res = this.res\n var msg = statuses.message[status] || String(status)\n var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n // clear existing headers\n clearHeaders(res)\n\n // add error headers\n if (err && err.headers) {\n setHeaders(res, err.headers)\n }\n\n // send basic response\n res.statusCode = status\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n return this.req.headers['if-match'] ||\n this.req.headers['if-unmodified-since'] ||\n this.req.headers['if-none-match'] ||\n this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n var req = this.req\n var res = this.res\n\n // if-match\n var match = req.headers['if-match']\n if (match) {\n var etag = res.getHeader('ETag')\n return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n }))\n }\n\n // if-unmodified-since\n var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n if (!isNaN(unmodifiedSince)) {\n var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n return isNaN(lastModified) || lastModified > unmodifiedSince\n }\n\n return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n var res = this.res\n\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Length')\n res.removeHeader('Content-Range')\n res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n var res = this.res\n debug('not modified')\n this.removeContentHeaderFields()\n res.statusCode = 304\n res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n var err = new Error('Can\\'t set headers after they are sent.')\n debug('headers already sent')\n this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n var statusCode = this.res.statusCode\n return (statusCode >= 200 && statusCode < 300) ||\n statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n switch (error.code) {\n case 'ENAMETOOLONG':\n case 'ENOENT':\n case 'ENOTDIR':\n this.error(404, error)\n break\n default:\n this.error(500, error)\n break\n }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n return fresh(this.req.headers, {\n etag: this.res.getHeader('ETag'),\n 'last-modified': this.res.getHeader('Last-Modified')\n })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n var ifRange = this.req.headers['if-range']\n\n if (!ifRange) {\n return true\n }\n\n // if-range as etag\n if (ifRange.indexOf('\"') !== -1) {\n var etag = this.res.getHeader('ETag')\n return Boolean(etag && ifRange.indexOf(etag) !== -1)\n }\n\n // if-range as modified date\n var lastModified = this.res.getHeader('Last-Modified')\n return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n var res = this.res\n\n if (hasListeners(this, 'directory')) {\n this.emit('directory', res, path)\n return\n }\n\n if (this.hasTrailingSlash()) {\n this.error(403)\n return\n }\n\n var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n // redirect\n res.statusCode = 301\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.setHeader('Location', loc)\n res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n // root path\n var root = this._root\n\n // references\n this.res = res\n\n // decode the path\n var path = decode(this.path)\n if (path === -1) {\n this.error(400)\n return res\n }\n\n // null byte(s)\n if (~path.indexOf('\\0')) {\n this.error(400)\n return res\n }\n\n var parts\n if (root !== null) {\n // normalize\n if (path) {\n path = normalize('.' + sep + path)\n }\n\n // malicious path\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = path.split(sep)\n\n // join / normalize from optional root dir\n path = normalize(join(root, path))\n } else {\n // \"..\" is malicious without \"root\"\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = normalize(path).split(sep)\n\n // resolve the path\n path = resolve(path)\n }\n\n // dotfile handling\n if (containsDotFile(parts)) {\n debug('%s dotfile \"%s\"', this._dotfiles, path)\n switch (this._dotfiles) {\n case 'allow':\n break\n case 'deny':\n this.error(403)\n return res\n case 'ignore':\n default:\n this.error(404)\n return res\n }\n }\n\n // index file support\n if (this._index.length && this.hasTrailingSlash()) {\n this.sendIndex(path)\n return res\n }\n\n this.sendFile(path)\n return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n var len = stat.size\n var options = this.options\n var opts = {}\n var res = this.res\n var req = this.req\n var ranges = req.headers.range\n var offset = options.start || 0\n\n if (res.headersSent) {\n // impossible to send now\n this.headersAlreadySent()\n return\n }\n\n debug('pipe \"%s\"', path)\n\n // set header fields\n this.setHeader(path, stat)\n\n // set content-type\n this.type(path)\n\n // conditional GET support\n if (this.isConditionalGET()) {\n if (this.isPreconditionFailure()) {\n this.error(412)\n return\n }\n\n if (this.isCachable() && this.isFresh()) {\n this.notModified()\n return\n }\n }\n\n // adjust len to start/end options\n len = Math.max(0, len - offset)\n if (options.end !== undefined) {\n var bytes = options.end - offset + 1\n if (len > bytes) len = bytes\n }\n\n // Range support\n if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n // parse\n ranges = parseRange(len, ranges, {\n combine: true\n })\n\n // If-Range support\n if (!this.isRangeFresh()) {\n debug('range stale')\n ranges = -2\n }\n\n // unsatisfiable\n if (ranges === -1) {\n debug('range unsatisfiable')\n\n // Content-Range\n res.setHeader('Content-Range', contentRange('bytes', len))\n\n // 416 Requested Range Not Satisfiable\n return this.error(416, {\n headers: { 'Content-Range': res.getHeader('Content-Range') }\n })\n }\n\n // valid (syntactically invalid/multiple ranges are treated as a regular response)\n if (ranges !== -2 && ranges.length === 1) {\n debug('range %j', ranges)\n\n // Content-Range\n res.statusCode = 206\n res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n // adjust for requested range\n offset += ranges[0].start\n len = ranges[0].end - ranges[0].start + 1\n }\n }\n\n // clone options\n for (var prop in options) {\n opts[prop] = options[prop]\n }\n\n // set read options\n opts.start = offset\n opts.end = Math.max(offset, offset + len - 1)\n\n // content-length\n res.setHeader('Content-Length', len)\n\n // HEAD support\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n var i = 0\n var self = this\n\n debug('stat \"%s\"', path)\n fs.stat(path, function onstat (err, stat) {\n var pathEndsWithSep = path[path.length - 1] === sep\n if (err && err.code === 'ENOENT' && !extname(path) && !pathEndsWithSep) {\n // not found, check extensions\n return next(err)\n }\n if (err) return self.onStatError(err)\n if (stat.isDirectory()) return self.redirect(path)\n if (pathEndsWithSep) return self.error(404)\n self.emit('file', path, stat)\n self.send(path, stat)\n })\n\n function next (err) {\n if (self._extensions.length <= i) {\n return err\n ? self.onStatError(err)\n : self.error(404)\n }\n\n var p = path + '.' + self._extensions[i++]\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n var i = -1\n var self = this\n\n function next (err) {\n if (++i >= self._index.length) {\n if (err) return self.onStatError(err)\n return self.error(404)\n }\n\n var p = join(path, self._index[i])\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n\n next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n var self = this\n var res = this.res\n\n // pipe\n var stream = fs.createReadStream(path, options)\n this.emit('stream', stream)\n stream.pipe(res)\n\n // cleanup\n function cleanup () {\n destroy(stream, true)\n }\n\n // response finished, cleanup\n onFinished(res, cleanup)\n\n // error handling\n stream.on('error', function onerror (err) {\n // clean up stream early\n cleanup()\n\n // error\n self.onStatError(err)\n })\n\n // end\n stream.on('end', function onend () {\n self.emit('end')\n })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n var res = this.res\n\n if (res.getHeader('Content-Type')) return\n\n var ext = extname(path)\n var type = mime.contentType(ext) || 'application/octet-stream'\n\n debug('content-type %s', type)\n res.setHeader('Content-Type', type)\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n var res = this.res\n\n this.emit('headers', res, path, stat)\n\n if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n debug('accept ranges')\n res.setHeader('Accept-Ranges', 'bytes')\n }\n\n if (this._cacheControl && !res.getHeader('Cache-Control')) {\n var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n if (this._immutable) {\n cacheControl += ', immutable'\n }\n\n debug('cache-control %s', cacheControl)\n res.setHeader('Cache-Control', cacheControl)\n }\n\n if (this._lastModified && !res.getHeader('Last-Modified')) {\n var modified = stat.mtime.toUTCString()\n debug('modified %s', modified)\n res.setHeader('Last-Modified', modified)\n }\n\n if (this._etag && !res.getHeader('ETag')) {\n var val = etag(stat)\n debug('etag %s', val)\n res.setHeader('ETag', val)\n }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n var headers = getHeaderNames(res)\n\n for (var i = 0; i < headers.length; i++) {\n res.removeHeader(headers[i])\n }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n for (var i = 0; i < str.length; i++) {\n if (str[i] !== '/') {\n break\n }\n }\n\n return i > 1\n ? '/' + str.substr(i)\n : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i]\n if (part.length > 1 && part[0] === '.') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>' + title + '</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n if (!err) {\n return createError(status)\n }\n\n return err instanceof Error\n ? createError(status, err, { expose: false })\n : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n try {\n return decodeURIComponent(path)\n } catch (err) {\n return -1\n }\n}\n\n/**\n * Get the header names on a response.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n return typeof res.getHeaderNames !== 'function'\n ? Object.keys(res._headers || {})\n : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.10\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n var list = [].concat(val || [])\n\n for (var i = 0; i < list.length; i++) {\n if (typeof list[i] !== 'string') {\n throw new TypeError(name + ' must be array of strings or false')\n }\n }\n\n return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n\n return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n var keys = Object.keys(headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n","import { IncomingHttpHeaders, OutgoingHttpHeaders } from \"node:http\";\nimport { Streamer } from \"../streamer\";\nimport { StateObject } from '../StateObject';\nimport { createHash } from \"node:crypto\";\nimport * as zlib from \"node:zlib\";\nimport { ok } from \"node:assert\";\nimport { promisify } from \"node:util\";\nimport { SiteConfig } from \"../routes/router\";\nimport * as path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\n/**\nOptions include:\n- `cbPartStart(headers,name,filename)` - invoked when a file starts being received\n- `cbPartChunk(chunk)` - invoked when a chunk of a file is received\n- `cbPartEnd()` - invoked when a file finishes being received\n- `cbFinished(err)` - invoked when the all the form data has been processed\n*/\nexport function readMultipartData(this: StateObject<any, any>, options: {\n cbPartStart: (headers: IncomingHttpHeaders, name: string | null, filename: string | null) => void,\n cbPartChunk: (chunk: Buffer) => void,\n cbPartEnd: () => void,\n cbFinished: (err: Error | string | null) => void\n}) {\n return new Promise<void>((resolve, reject) => {\n // Check that the Content-Type is multipart/form-data\n const contentType = this.headers['content-type'];\n if (!contentType?.startsWith(\"multipart/form-data\")) {\n return reject(\"Expected multipart/form-data content type\");\n }\n // Extract the boundary string from the Content-Type header\n const boundaryMatch = contentType.match(/boundary=(.+)$/);\n if (!boundaryMatch) {\n return reject(\"Missing boundary in multipart/form-data\");\n }\n const boundary = boundaryMatch[1];\n const boundaryBuffer = Buffer.from(\"--\" + boundary);\n // Initialise\n let buffer = Buffer.alloc(0);\n let processingPart = false;\n // Process incoming chunks\n this.reader.on(\"data\", (chunk) => {\n // Accumulate the incoming data\n buffer = Buffer.concat([buffer, chunk]);\n // Loop through any parts within the current buffer\n while (true) {\n if (!processingPart) {\n // If we're not processing a part then we try to find a boundary marker\n const boundaryIndex = buffer.indexOf(boundaryBuffer);\n if (boundaryIndex === -1) {\n // Haven't reached the boundary marker yet, so we should wait for more data\n break;\n }\n // Look for the end of the headers\n const endOfHeaders = buffer.indexOf(\"\\r\\n\\r\\n\", boundaryIndex + boundaryBuffer.length);\n if (endOfHeaders === -1) {\n // Haven't reached the end of the headers, so we should wait for more data\n break;\n }\n // Extract and parse headers\n const headersPart = Uint8Array.prototype.slice.call(buffer, boundaryIndex + boundaryBuffer.length, endOfHeaders).toString();\n const currentHeaders: IncomingHttpHeaders = {};\n headersPart.split(\"\\r\\n\").forEach(headerLine => {\n const [key, value] = headerLine.split(\": \");\n ok(typeof key === \"string\");\n currentHeaders[key.toLowerCase()] = value;\n });\n // Parse the content disposition header\n const contentDisposition: {\n name: string | null,\n filename: string | null\n } = {\n name: null,\n filename: null\n };\n if (currentHeaders[\"content-disposition\"]) {\n // Split the content-disposition header into semicolon-delimited parts\n const parts = currentHeaders[\"content-disposition\"].split(\";\").map(part => part.trim());\n // Iterate over each part to extract name and filename if they exist\n parts.forEach(part => {\n if (part.startsWith(\"name=\")) {\n // Remove \"name=\" and trim quotes\n contentDisposition.name = part.substring(6, part.length - 1);\n } else if (part.startsWith(\"filename=\")) {\n // Remove \"filename=\" and trim quotes\n contentDisposition.filename = part.substring(10, part.length - 1);\n }\n });\n }\n processingPart = true;\n options.cbPartStart(currentHeaders, contentDisposition.name, contentDisposition.filename);\n // Slice the buffer to the next part\n buffer = Buffer.from(buffer, endOfHeaders + 4);\n } else {\n const boundaryIndex = buffer.indexOf(boundaryBuffer);\n if (boundaryIndex >= 0) {\n // Return the part up to the boundary minus the terminating LF CR\n options.cbPartChunk(Buffer.from(buffer, 0, boundaryIndex - 2));\n options.cbPartEnd();\n processingPart = false;\n // this starts at the boundary marker, which gets picked up on the next loop\n buffer = Buffer.from(buffer, boundaryIndex);\n } else {\n // Return the rest of the buffer\n options.cbPartChunk(buffer);\n // Reset the buffer and wait for more data\n buffer = Buffer.alloc(0);\n break;\n }\n }\n }\n });\n\n // All done\n this.reader.on(\"end\", () => {\n resolve();\n });\n }).then(() => {\n options.cbFinished(null);\n }, (err) => {\n options.cbFinished(err);\n throw err;\n });\n\n}\n\n\n\n/*\nSend a response to the client. This method checks if the response must be sent\nor if the client alrady has the data cached. If that's the case only a 304\nresponse will be transmitted and the browser will use the cached data.\nOnly requests with status code 200 are considdered for caching.\nrequest: request instance passed to the handler\nresponse: response instance passed to the handler\nstatusCode: stauts code to send to the browser\nheaders: response headers (they will be augmented with an `Etag` header)\ndata: the data to send (passed to the end method of the response instance)\nencoding: the encoding of the data to send (passed to the end method of the response instance)\n*/\nexport async function sendResponse(config: SiteConfig, state: StateObject<any, any>, statusCode: number, headers: OutgoingHttpHeaders, data: string | Buffer, encoding?: NodeJS.BufferEncoding) {\n // console.log(\"sendResponse\");\n if (config.enableBrowserCache && (statusCode == 200)) {\n // console.log(\"enableBrowserCache\");\n var hash = createHash('md5');\n // Put everything into the hash that could change and invalidate the data that\n // the browser already stored. The headers the data and the encoding.\n hash.update(data);\n hash.update(JSON.stringify(headers));\n if (encoding) {\n hash.update(encoding);\n }\n var contentDigest = hash.digest(\"hex\");\n // RFC 7232 section 2.3 mandates for the etag to be enclosed in quotes\n headers[\"Etag\"] = '\"' + contentDigest + '\"';\n headers[\"Cache-Control\"] = \"max-age=0, must-revalidate\";\n // Check if any of the hashes contained within the if-none-match header\n // matches the current hash.\n // If one matches, do not send the data but tell the browser to use the\n // cached data.\n // We do not implement \"*\" as it makes no sense here.\n var ifNoneMatch = state.headers[\"if-none-match\"];\n if (ifNoneMatch) {\n var matchParts = ifNoneMatch.split(\",\").map(function (etag) {\n return etag.replace(/^[ \"]+|[ \"]+$/g, \"\");\n });\n if (matchParts.indexOf(contentDigest) != -1) {\n return state.sendEmpty(304, headers);\n }\n }\n }\n /*\n If the gzip=yes is set, check if the user agent permits compression. If so,\n compress our response if the raw data is bigger than 2k. Compressing less\n data is inefficient.\n */\n if (config.enableGzip && (data.length > 2048)) {\n var acceptEncoding = state.headers[\"accept-encoding\"] || \"\";\n if (/\\bdeflate\\b/.test(acceptEncoding)) {\n headers[\"Content-Encoding\"] = \"deflate\";\n data = await promisify(zlib.deflate)(data);\n } else if (/\\bgzip\\b/.test(acceptEncoding)) {\n headers[\"Content-Encoding\"] = \"gzip\";\n data = await promisify(zlib.gzip)(data);\n }\n }\n if (typeof data === \"string\") {\n ok(encoding, \"encoding must be set for string data\");\n return state.sendString(statusCode, headers, data, encoding);\n } else {\n return state.sendBuffer(statusCode, headers, data);\n }\n}\n\n\ninterface Route {\n useACL: any;\n method: string;\n entityName: any;\n csrfDisable: any;\n bodyFormat: string;\n path: { source: string; };\n handler: (streamer: Streamer) => void;\n};\n\ninterface State {\n wiki: any;\n boot: any;\n server: any;\n urlInfo: any;\n queryParameters: any;\n pathPrefix: string;\n sendResponse: any;\n redirect: any;\n streamMultipartData: any;\n authenticatedUser: any;\n authenticatedUsername: any;\n authorizationType: string;\n allowAnon: boolean;\n anonAccessConfigured: boolean;\n allowAnonReads: boolean;\n allowAnonWrites: boolean;\n showAnonConfig: boolean;\n firstGuestUser: boolean;\n data?: any;\n}\n\ninterface Server {\n enableBrowserCache: boolean;\n enableGzip: boolean;\n get: (key: string) => any;\n methodMappings: { [key: string]: string };\n isAuthorized: (authorizationType: string, username: string) => boolean;\n getAnonymousAccessConfig: () => { allowReads: boolean; allowWrites: boolean; isEnabled: boolean; showAnonConfig: boolean };\n sqlTiddlerDatabase: any;\n servername: string;\n findMatchingRoute: (request: Streamer, state: State) => Route;\n authenticateUser: (request: Streamer, response: Streamer) => any;\n methodACLPermMappings: { [key: string]: string };\n csrfDisable: boolean;\n wiki: any;\n boot: any;\n}\n\n\nexport function is<T>(a: any, b: boolean): a is T { return b; }\n\n/** Initiates a timer that must get cancelled before the current turn of the event loop ends */\nexport class SyncCheck {\n done;\n constructor() {\n let cancelled = false;\n const error = new Error(\"SyncCheck was not completed before the current turn of the event loop ended\");\n process.nextTick(() => {\n if (cancelled) return;\n console.log(error);\n process.exit(1);\n });\n this.done = () => { cancelled = true };\n }\n}\n\n\n/** \n * If any property returns a function, and that function returns a promise, \n * the proxy will throw an error if the promise is not awaited before the next property access.\n * \n * The stack trace of the error will point to the line where the promise was returned.\n */\nexport function createStrictAwaitProxy<T extends object>(instance: T): T {\n let outstandingPromiseError: Error | null = null;\n\n function wrappedFunction(value: Function) {\n return function (this: any, ...args: any[]) {\n // Protect against calling any methods while an outstanding promise exists.\n\n // Call the original function preserving the correct \"this\" context.\n const result = Reflect.apply(value, this, args);\n // If the result is a promise, wrap it to clear the outstanding lock on await.\n if (result instanceof Promise) {\n return new Proxy(result, {\n get(promiseTarget, promiseProp, promiseReceiver) {\n // When the promise's then property is accessed (i.e. when it's awaited),\n // clear the outstanding promise so that subsequent method calls are allowed.\n if (promiseProp === \"then\") {\n outstandingPromiseError = null;\n }\n const inner = Reflect.get(promiseTarget, promiseProp, promiseReceiver).bind(promiseTarget);\n if (promiseProp === \"catch\") {\n return wrappedFunction(inner);\n }\n return inner;\n }\n });\n }\n return result;\n }\n }\n\n return new Proxy(instance, {\n get(target, prop, receiver) {\n // throw an error if an outstanding promise exists.\n if (outstandingPromiseError !== null) {\n throw outstandingPromiseError;\n }\n // Use Reflect.get to get the property value.\n const value = Reflect.get(target, prop, receiver);\n\n // If the property is a function, return a wrapped function.\n if (typeof value === \"function\") {\n return wrappedFunction(value);\n }\n // For non-function properties, just return the value.\n return value;\n }\n });\n}\n\nexport function tryParseJSON<T>(json: string): T | undefined {\n try {\n return JSON.parse(json);\n } catch {\n return undefined;\n }\n}\n\n\nexport class TypedGenerator<T extends [any, any][]> {\n static checker<T extends [any, any][]>() {\n return {\n /** `const value1 = asV(1, yield asY(0, value0))` */\n asV<I extends number>(index: I, args: T[I][0]): T[I][0] { return args; },\n /** `const value1 = asV(1, yield asY(0, value0))` */\n asY<I extends number>(index: I, ret: T[I][1]): T[I][1] { return ret; },\n }\n }\n static wrapper<T extends [any, any][]>() {\n return <A extends any[]>(factory: (...args: A) => Generator<any, any, any>) => {\n return (...args: A) => new TypedGenerator<T>(factory(...args));\n };\n }\n constructor(private inner: Generator<any, any, any>, private index = 0) { }\n async next<I extends number>(index: I, ...args: T[I][0] extends void ? [] : [T[I][0]]): Promise<(\n T extends [...any[], T[I]] ? IteratorReturnResult<T[I][1]> : IteratorYieldResult<T[I][1]>\n )> {\n if (index !== this.index) throw new Error(\"Invalid index\");\n this.index++;\n return this.inner.next(...args) as any;\n }\n return(value: any): any { this.inner.return(value); }\n throw(e: any): any { this.inner.throw(e); }\n}\n\nexport async function mapAsync<T, U, V>(array: T[], callback: (this: V, value: T, index: number, array: T[]) => Promise<U>, thisArg?: any): Promise<U[]> {\n const results = new Array(array.length);\n for (let index = 0; index < array.length; index++) {\n results[index] = await callback.call(thisArg, array[index] as T, index, array);\n }\n return results;\n};\n\nexport async function filterAsync<T, V>(array: T[], callback: (this: V, value: T, index: number, array: T[]) => Promise<boolean>, thisArg?: any): Promise<T[]> {\n const results = [];\n for (let index = 0; index < array.length; index++) {\n if (await callback.call(thisArg, array[index] as T, index, array)) {\n results.push(array[index]);\n }\n }\n return results as any;\n}\n\n\nexport function truthy<T>(\n obj: T\n): obj is Exclude<T, false | null | undefined | 0 | '' | void> {\n return !!obj;\n}\n\n\nexport class UserError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UserError\";\n }\n}\n/** \n * This returns the resolved path relative to the executing code file, \n * however it uses path.resolve, not require.resolve. \n */\n\nexport function dist_resolve(filepath: string) {\n const filename = typeof module === \"undefined\" ? fileURLToPath(import.meta.url) : module.filename;\n return path.resolve(path.dirname(filename), filepath);\n}\nexport function dist_require_resolve(filepath: string) {\n const filename = typeof module === \"undefined\" ? fileURLToPath(import.meta.url) : module.filename;\n return createRequire(filename).resolve(filepath);\n}\n\n\nexport declare interface JsonArray extends Array<JsonValue> { }\nexport declare type JsonObject = { [Key in string]?: JsonValue; };\nexport declare type JsonValue = string | number | boolean | JsonObject | JsonArray | null | Date;\n","import { AuthStateRouteACL, StateObject } from \"../StateObject\";\nimport * as z from \"zod\";\nimport { AllowedMethod, BodyFormat } from \"../routes/router\";\n\n\nexport interface RouteOptAny extends RouteOptBase<BodyFormat, AllowedMethod[], string[]> { }\n\nexport interface Route extends RouteDef<ParentTuple, string[]> { }\n\nexport interface rootRoute extends RouteDef<[\n undefined,\n AllowedMethod[],\n StateObject<BodyFormat, AllowedMethod>,\n [[]]\n], []> { }\n\nexport interface RouteMatch {\n route: Route;\n params: (string | undefined)[];\n remainingPath: string;\n}\n\ntype DetermineRouteOptions<\n P extends ParentTuple, PA extends string[]\n> = P extends [BodyFormat, AllowedMethod[], any, any]\n ?\n RouteOptBase<P[0], P[1], PA> & { bodyFormat?: undefined; }\n :\n P extends [undefined, AllowedMethod[], any, any]\n ?\n | { [K in BodyFormat]: RouteOptBase<K, P[1], PA> & { bodyFormat: K; }; }[BodyFormat]\n | RouteOptBase<BodyFormat, P[1], PA> & { bodyFormat?: undefined; }\n : never;\n\ntype ParentTuple = [BodyFormat | undefined, AllowedMethod[], any, string[][]];\n\ninterface RouteOptBase<B extends BodyFormat, M extends AllowedMethod[], PA extends string[]> {\n\n /** \n * Regex to test the pathname on. It must start with `^`. If this is a child route, \n * it will be tested against the remaining portion of the parent route. \n */\n path: RegExp;\n pathParams?: PA;\n /** The uppercase method names to match this route */\n method: M;\n /** \n * The highest bodyformat in the chain always takes precedent. Type-wise, only one is allowed, \n * but at runtime the first one found is the one used. \n * \n * Note that bodyFormat is completely ignored for GET and HEAD requests.\n */\n bodyFormat?: B;\n /** If this route is the last one matched, it will NOT be called, and a 404 will be returned. */\n denyFinal?: boolean;\n}\n\nexport interface RouteDef<P extends ParentTuple, PA extends string[]> extends RouteOptBase<P[0] & {}, P[1], PA> {\n\n /**\n * If this route's handler sends headers, the matched child route will not be called.\n */\n handler: (state: StateObject<P[0] extends undefined ? BodyFormat : (P[0] & {}), P[1][number], [...P[3], [...PA]], unknown>) => Promise<P[2]>\n\n /**\n * ### ROUTING\n *\n * @param route The route definition.\n *\n * If the parent route sends headers, or returns the STREAM_ENDED symbol, \n * this route will not be called.\n *\n * Inner routes are matched on the remaining portion of the parent route\n * using `pathname.slice(match[0].length)`. If the parent route entirely \n * matches the pathname, this route will be matched on \"/\".\n * \n * If the body format is \"stream\", \"buffer\", \"ignore\" or not yet defined at this level in the tree,\n * then zod cannot be used. \n * \n * Note that GET and HEAD are always bodyFormat: \"ignore\", regardless of what is set here.\n */\n defineRoute: <R, PA extends string[],\n // T extends DetermineRouteOptions<P, [...PA]>\n T extends (P extends [BodyFormat, AllowedMethod[], any, any]\n ?\n RouteOptBase<P[0], P[1], [...PA]> & { bodyFormat?: undefined; }\n :\n P extends [undefined, AllowedMethod[], any, any]\n ?\n | { [K in BodyFormat]: RouteOptBase<K, P[1], [...PA]> & { bodyFormat: K; }; }[BodyFormat]\n | RouteOptBase<BodyFormat, P[1], [...PA]> & { bodyFormat?: undefined; }\n : never) \n > (\n route: T,\n handler: (\n /** \n * The state object for this route.\n * \n * If the route only specifies \"GET\" and/or \"HEAD\", then the bodyFormat can only be \"ignore\"\n * \n * Otherwise, the bodyFormat is determined by the first parent route that specifies it.\n * \n * The state object is wrapped in a proxy which throws if methods return a promise that \n * doesn't get awaited before the next property access. It only enforces the first layer \n * of properties, so if you have a nested object, you will need to wrap it in a proxy as well.\n * \n * store and store.sql will probably also be wrapped in this proxy.\n */\n state: StateObject<\n // if the route only specifies \"GET\" and/or \"HEAD\", then the bodyFormat can only be \"ignore\"\n (Exclude<T[\"method\"][number], \"GET\" | \"HEAD\"> extends never ? never : (\n // parent route specified bodyFormat?\n P[0] extends BodyFormat ? P[0] :\n // this route specified bodyFormat?\n T[\"bodyFormat\"] extends BodyFormat ? T[\"bodyFormat\"] :\n // otherwise it could be anything\n BodyFormat\n )) | (\n // GET and HEAD requests imply \"ignore\"\n T[\"method\"][number] extends \"GET\" | \"HEAD\" ? \"ignore\" : never\n ),\n // HTTP method\n T[\"method\"][number],\n // possible placeholder for declaring routes\n getPA<P, T>,\n // infer zod, if set for this route\n unknown\n >) => Promise<R>\n ) =>\n P[0] extends BodyFormat ? RouteDef<[P[0], T[\"method\"], R, P[3]], [...PA]> :\n T[\"bodyFormat\"] extends BodyFormat ? RouteDef<[T[\"bodyFormat\"], T[\"method\"], R, P[3]], [...PA]> :\n RouteDef<[undefined, T[\"method\"], R, P[3]], [...PA]>\n\n $o?: P;\n}\n\ntype getPA<P extends ParentTuple, T extends DetermineRouteOptions<P, any>> =\n [...P[3], ...T[\"pathParams\"] extends string[] ? [T[\"pathParams\"]] : []];\nfunction test<T extends z.ZodTypeAny>(schema: { schema: T }): T {\n return schema.schema;\n}\nconst test1 = test({ schema: z.object({ test: z.string() }) })\ntype t1 = typeof test1;\ntype t2 = z.infer<t1>;\n\n\n\n/** This doesn't need to run, it's just to test types */\nfunction testroute(root: rootRoute) {\n\n const test1 = root.defineRoute({\n path: /^test/,\n method: [\"GET\", \"POST\"],\n bodyFormat: undefined,\n }, async state => {\n const test: BodyFormat = state.bodyFormat;\n });\n\n const test2_2 = test1.defineRoute({\n path: /^test/,\n bodyFormat: \"www-form-urlencoded\",\n method: [\"POST\"],\n }, async state => {\n // zod: z.object({ test: z.string() }),\n\n\n });\n\n const test2 = test1.defineRoute({\n path: /^test/,\n bodyFormat: \"string\",\n method: [\"GET\"],\n zod: z.string(),\n // handler: ,\n }, async (state) => {\n //@ts-expect-error because we didn't include \"string\"\n const test: Exclude<BodyFormat, \"ignore\"> = state.bodyFormat;\n // no error here if bodyFormat is correctly typed\n const test2: \"ignore\" = state.bodyFormat\n // @ts-expect-error because it should be \"string\"\n state.isBodyFormat(\"buffer\");\n // this should never be an error unless something is really messed up\n state.isBodyFormat(\"ignore\");\n });\n\n const test3 = test2.defineRoute({\n path: /^test/,\n method: [\"GET\"],\n // // @ts-expect-error because it's already been defined by the parent\n // bodyFormat: \"buffer\",\n zod: z.string(),\n }, async (state) => {\n //@ts-expect-error because we didn't include \"string\"\n const test: Exclude<BodyFormat, \"ignore\"> = state.bodyFormat;\n // no error here if bodyFormat is correctly typed\n const test2: \"ignore\" = state.bodyFormat\n // @ts-expect-error because it should be \"string\"\n state.isBodyFormat(\"buffer\");\n // this should never be an error unless something is really messed up\n state.isBodyFormat(\"ignore\");\n })\n\n const test2post = test1.defineRoute({\n path: /^test/,\n bodyFormat: \"string\",\n method: [\"POST\"],\n zod: z.string(),\n // handler: ,\n }, async (state) => {\n // @ts-expect-error because we didn't include \"string\"\n const test: Exclude<BodyFormat, \"string\"> = state.bodyFormat;\n // no error here if bodyFormat is correctly typed\n const test2: \"string\" = state.bodyFormat\n // @ts-expect-error because it should be \"string\"\n state.isBodyFormat(\"buffer\");\n // this should never be an error unless something is really messed up\n state.isBodyFormat(\"string\");\n });\n\n const test3post = test2post.defineRoute({\n path: /^test/,\n method: [\"POST\"],\n // // @ts-expect-error because it's already been defined by the parent\n // bodyFormat: \"buffer\",\n zod: z.string(),\n }, async (state) => {\n // @ts-expect-error because we didn't include \"string\"\n const test: Exclude<BodyFormat, \"string\"> = state.bodyFormat;\n // no error here if bodyFormat is correctly typed\n const test2: \"string\" = state.bodyFormat\n // @ts-expect-error because it should be \"string\"\n state.isBodyFormat(\"buffer\");\n // this should never be an error unless something is really messed up\n state.isBodyFormat(\"string\");\n })\n}\n\n","import { Prisma } from \"@prisma/client\";\nimport { truthy } from \"./utils\";\nimport { ok } from \"node:assert\";\nimport { SiteConfig } from \"../server\";\n\n\nexport class DataChecks {\n\n constructor(private config: SiteConfig) {\n\n }\n\n okTiddlerFields(tiddlerFields: Record<string, any>) {\n ok(tiddlerFields.title, 'title must not be empty');\n Object.entries(tiddlerFields).forEach(([key, value]) => {\n if (typeof value === \"undefined\" || value === null) return;\n ok(typeof value === \"string\", `tiddler fields must be a string, ${key} is ${typeof value}`);\n });\n }\n\n okBagName(bagName: PrismaField<\"Bags\", \"bag_name\">) {\n ok(typeof bagName === \"string\", 'bagName must be a string');\n ok(bagName, 'bagName must not be empty');\n }\n\n okRecipeName(recipeName: PrismaField<\"Recipes\", \"recipe_name\">) {\n ok(typeof recipeName === \"string\", 'recipeName must be a string');\n ok(recipeName, 'recipeName must not be empty');\n }\n\n okUserID(userID: PrismaField<\"Users\", \"user_id\">) {\n ok(typeof userID === \"number\", 'userID must be a number');\n ok(userID > 0, 'userID must be greater than zero');\n }\n\n okTiddlerTitle(tiddlerTitle: string): asserts tiddlerTitle is PrismaField<\"Tiddlers\", \"title\"> {\n ok(typeof tiddlerTitle === \"string\", 'tiddler title must be a string');\n ok(tiddlerTitle, 'tiddler title must not be empty');\n }\n\n okEntityType(entityType: EntityType) {\n ok(entityType === \"bag\" || entityType === \"recipe\", \"Invalid entity type: \" + entityType);\n }\n\n okEntityName(entityName: EntityName<EntityType>) {\n ok(typeof entityName === \"string\", 'entityName must be a string');\n ok(entityName, 'entityName must not be empty');\n }\n\n okSessionID(sessionID: string): asserts sessionID is PrismaField<\"Sessions\", \"session_id\"> {\n ok(typeof sessionID === \"string\", 'sessionID must be a string');\n ok(sessionID, 'sessionID must not be empty');\n }\n\n isPermissionName = <T extends string>(e: T): e is T & ACLPermissionName => {\n const test = e as ACLPermissionName;\n switch (test) {\n case \"ADMIN\":\n case \"READ\":\n case \"WRITE\":\n return true;\n default: {\n const _: never = test;\n return false;\n }\n }\n }\n\n permissions: { [K in ACLPermissionName]: K } = { READ: \"READ\", WRITE: \"WRITE\", ADMIN: \"ADMIN\", };\n\n isEntityType = (x: any): x is \"recipe\" | \"bag\" => [\"recipe\", \"bag\"].includes(x);\n\n entityTypes: { [K in EntityType]: K } = { recipe: \"recipe\", bag: \"bag\" };\n\n /** If the user isn't logged in, user_id is 0. */\n getBagWhereACL({ recipe_id, permission, user_id, role_ids }: {\n /** Recipe ID can be provided as an extra restriction */\n recipe_id?: number,\n permission: ACLPermissionName,\n user_id: number,\n role_ids: number[],\n }) {\n\n const OR = this.getWhereACL({ permission, user_id, role_ids });\n\n return ([\n // all system bags are allowed to be read by any user\n permission === \"READ\" && { is_plugin: true },\n ...OR,\n // admin permission doesn't get inherited \n permission === \"ADMIN\" ? undefined : {\n recipe_bags: {\n some: {\n // check if we're in position 0 (for write) or any position (for read)\n position: permission === \"WRITE\" ? 0 : undefined,\n // of a recipe that the user has this permission on\n recipe: { OR },\n // if the connection was created with admin permissions\n with_acl: true,\n // for the specific recipe, if provided\n recipe_id,\n }\n }\n }\n ] satisfies (Prisma.BagsWhereInput | undefined | null | false)[]).filter(truthy)\n\n }\n getWhereACL({ permission, user_id, role_ids }: {\n permission: ACLPermissionName,\n user_id?: number,\n role_ids?: number[],\n }) {\n // const { allowAnonReads, allowAnonWrites } = this;\n // const anonRead = allowAnonReads && permission === \"READ\";\n // const anonWrite = allowAnonWrites && permission === \"WRITE\";\n // const allowAnon = anonRead || anonWrite;\n const allperms = [\"READ\", \"WRITE\", \"ADMIN\"] as const;\n const index = allperms.indexOf(permission);\n if (index === -1) throw new Error(\"Invalid permission\");\n const checkPerms = allperms.slice(index);\n\n return ([\n // allow owner for user \n user_id && { owner_id: { equals: user_id, not: null } },\n // allow acl for user \n user_id && role_ids?.length && {\n acl: {\n some: {\n permission: { in: checkPerms },\n role_id: { in: role_ids },\n }\n }\n },\n { owner_id: { equals: null, not: null } } // dud to make sure that at least one condition exists\n ] satisfies ((Prisma.RecipesWhereInput & Prisma.BagsWhereInput) | undefined | null | false | 0)[]\n ).filter(truthy)\n }\n\n\n\n}\n\n\n\n/**\n## assumptions about prisma that should be tested\n\n```\nreturn await this.engine.acl.findMany({\n where: {\n entity_name: entityName,\n entity_type: entityType,\n // if permission_name is undefined, will prisma \n // include records without a permission connection?\n // ChatGPT 03-mini-high doesn't think so.\n permission: { permission_name } \n },\n});\n```\n*/\ndeclare let _dataChecks: any;","import { z, ZodEffects } from \"zod\";\nimport { StateObject } from \"../StateObject\";\nimport { Prisma } from \"@prisma/client\";\nimport { STREAM_ENDED } from \"../streamer\";\n\n\n\nexport namespace ZodAssert {\n type Exactly<T, X> = T & Record<Exclude<keyof X, keyof T>, never>\n /** \n * assert zod on the request body (`state.data`). \n * \n * You cannot assert data on a stream or ignore body format.\n * \n * Attempting to do so will cause the schema argument to expect a string \n * containing an error message informing the developer of this.\n */\n export function data<T extends\n S extends StateObject<\"ignore\" | \"stream\"> ? z.ZodUnknown :\n S extends StateObject<\"www-form-urlencoded\"> ? z.ZodObject<any> :\n z.ZodTypeAny, S extends StateObject\n >(\n state: S,\n schema:\n S extends StateObject<\"ignore\" | \"stream\">\n ? \"it is invalid to assert data for this body format\"\n : (zod: S extends StateObject<\"www-form-urlencoded\"> ? Z2<\"STRING\"> : Z2<\"JSON\">) => T,\n /** \n * If the data does not match the schema, this function is called sync'ly with the zod error.\n * Whatever it returns is sent as a utf8 string response body.\n * @param error The zod error.\n * @returns A string to send as the response body, or void to use the default error message.\n */\n onError?: (error: z.ZodError<any>) => string | void\n ): asserts state is S & ({ data: z.infer<T> }) {\n _zodAssert(\"data\", state, schema as any, onError);\n }\n\n /** \n * assert zod on the route path match groups (`state.pathParams`). \n * \n * Sends a 404 response instead of 400. \n */\n export function pathParams<\n T extends Exactly<{ [k in keyof S[\"pathParams\"]]: z.ZodTypeAny; }, T>,\n S extends StateObject,\n >(\n state: S, schemaShape: (zod: Z2<\"STRING\">) => T,\n /** \n * If the data does not match the schema, this function is called sync'ly with the zod error.\n * Whatever it returns is sent as a utf8 string response body.\n * @param error The zod error.\n * @returns A string to send as the response body, or void to use the default error message.\n */\n onError?: (error: z.ZodError<any>) => string | void\n ): asserts state is S & ({ pathParams: z.infer<z.ZodObject<T>> }) {\n _zodAssert(\"pathParams\", state, schemaShape, onError);\n }\n\n /** \n * assert zod on the url query parameters (`state.queryParams`). \n * \n * This is the only place that the query parameters are declared, so the keys are not checked. \n * \n * If no value is specified, it defaults to an empty string\n * (`?key&key=&key` becomes `key: [\"\", \"\", \"\"]`).\n * \n * In zod: `z.object({ key: z.array(z.string()).optional() })`\n */\n export function queryParams<T extends Record<string, z.ZodTypeAny>, S extends StateObject>(\n state: S, schemaShape: (zod: Z2<\"STRING\">) => T,\n /** \n * If the data does not match the schema, this function is called sync'ly with the zod error.\n * Whatever it returns is sent as a utf8 string response body.\n * @param error The zod error.\n * @returns A string to send as the response body, or void to use the default error message.\n */\n onError?: (error: z.ZodError<any>) => string | void\n ): asserts state is S & ({ queryParams: z.infer<z.ZodObject<T>> }) {\n _zodAssert(\"queryParams\", state, schemaShape, onError);\n }\n /** \n * assert zod on the data passed to this function and returns the cleaned data.\n * If onError is not specified, or does not return STREAM_ENDED, an error 500 is sent. \n * Either way, zodAssert will throw STREAM_ENDED immediately.\n * \n * If onError is not specified, the error will be printed with console.log.\n */\n export function any<T extends z.ZodTypeAny, S extends StateObject>(\n state: S, schemaShape: (zod: Z2<\"JSON\">) => T, data: z.input<T>,\n /** \n * If the data does not match the schema, this function is called sync'ly with the zod error.\n * If it does not return the STREAM_ENDED symbol indicating an appropriate error response was sent, \n * zodAssert will throw with a 500 error.\n * \n * It is perfectly valid to throw an error from this function,\n * as zodAssert will throw STREAM_ENDED immediately if it returns.\n * \n * @param error The zod error.\n * @returns STREAM_ENDED to indicate an appropriate error response was sent, or undefined.\n */\n onError?: (error: z.ZodError<any>) => void | symbol\n ): z.infer<T> { return _zodAssertAny(\"any\", state, schemaShape, data, onError); }\n /** \n * assert zod on the data passed to this function and returns the cleaned data.\n * If onError is not specified, or does not return STREAM_ENDED, an error 500 is sent. \n * Either way, zodAssert will throw STREAM_ENDED immediately.\n * \n * If onError is not specified, the error will be printed with console.log.\n */\n export function response<T extends z.ZodTypeAny, S extends StateObject>(\n state: S, schemaShape: (zod: Z2<\"JSON\">) => T, data: z.input<T>,\n /** \n * If the data does not match the schema, this function is called sync'ly with the zod error.\n * If it does not return the STREAM_ENDED symbol indicating an appropriate error response was sent, \n * zodAssert will throw with a 500 error.\n * \n * It is perfectly valid to throw an error from this function,\n * as zodAssert will throw STREAM_ENDED immediately if it returns.\n * \n * @param error The zod error.\n * @returns STREAM_ENDED to indicate an appropriate error response was sent, or undefined.\n */\n onError?: (error: z.ZodError<any>) => void | symbol\n ): z.infer<T> { return _zodAssertAny(\"response\", state, schemaShape, data, onError); }\n\n\n}\n// type t = number extends PrismaPayloadScalars<\"Roles\">[\"role_id\"] ? FieldTypeNumberSelector<\"JSON\"> : false;\nexport interface Z2<T extends FieldTypeGroups> extends _zod {\n /** \n * Tags the resulting value as being from the specified table field.\n * \n * The third argument is a string literal that specifies the field type based on the selected field.\n * \n * \"string\" and \"parse-number\" \n * - will use decodeURIComponent on the value. \n * - Require a string length at least one\n * \n * You can use .optional(), .nullable(), .nulish() after this to make the field optional.\n */\n prismaField<Table extends Prisma.ModelName, Field extends keyof PrismaPayloadScalars<Table>>(\n table: Table, field: Field,\n fieldtype:\n string extends (PrismaPayloadScalars<Table>[Field]) ? FieldTypeStringSelector<T> :\n number extends (PrismaPayloadScalars<Table>[Field]) ? FieldTypeNumberSelector<T> :\n boolean extends (PrismaPayloadScalars<Table>[Field]) ? FieldTypeBooleanSelector<T> :\n never,\n nullable?: null extends PrismaPayloadScalars<Table>[Field] ? true : false\n ): ZodEffects<any, PrismaField<Table, Field>, PrismaPayloadScalars<Table>[Field]>;\n\n\n authUser(): z.ZodNullable<z.ZodObject<{\n user_id: z.ZodNumber;\n isAdmin: z.ZodBoolean;\n username: z.ZodString;\n sessionId: z.ZodNumber;\n }>>;\n\n}\n\nexport const _zodAssertAny = (\n input: string,\n state: StateObject,\n schema: (z: Z2<any>) => z.ZodTypeAny | Record<string, z.ZodTypeAny>,\n inputdata: any,\n onError?: (error: z.ZodError<any>) => symbol | void,\n) => {\n const schema2: any = schema(makeZ2(input));\n const { success, data, error } = z.any().pipe(schema2).safeParse(inputdata);\n if (!success) {\n if (!onError) error.issues.forEach(e => console.log(input, e.message, e.path));\n if (onError?.(error) === STREAM_ENDED) throw STREAM_ENDED;\n throw state.sendEmpty(500, { \"x-reason\": input });\n }\n return data;\n}\n\nconst _zodAssert = (\n input: \"data\" | \"pathParams\" | \"queryParams\",\n state: StateObject,\n schema: (z: Z2<any>) => z.ZodTypeAny | Record<string, z.ZodTypeAny>,\n onError?: (error: z.ZodError<any>) => string | void,\n) => {\n\n // this checks if the schema is a string, since that is used to indicate invalid use cases of zodAssert,\n // and if it's correctly typed, then this is the best way to find it.\n if (typeof schema === \"string\") {\n console.log(new Error(`schema is a string: ${schema}`));\n throw state.sendEmpty(500);\n }\n const schema2: any = schema(makeZ2(input));\n\n const { success, data, error } = z.any().pipe(\n input === \"data\" ? schema2 : z.object(schema2)\n ).safeParse(state[input]);\n if (!success) {\n if (!onError) error.issues.forEach(e => console.log(input, e.message, e.path));\n const status = input === \"pathParams\" ? 404 : 400;\n const message = onError?.(error);\n if (typeof message === \"string\")\n throw state.sendString(status, { \"x-reason\": input }, message ?? \"\", \"utf8\");\n else\n throw state.sendEmpty(status, { \"x-reason\": input });\n }\n state[input] = data;\n};\n\ntype _zod = typeof z;\ntype ExtraFieldType = \"string\" | \"number\" | \"parse-number\" | \"boolean\" | \"parse-boolean\";\ntype FieldTypeGroups = \"STRING\" | \"JSON\";\ntype FieldTypeStringSelector<T extends FieldTypeGroups> = T extends \"STRING\" ? \"string\" : \"string\";\ntype FieldTypeNumberSelector<T extends FieldTypeGroups> = T extends \"STRING\" ? \"parse-number\" : \"number\";\ntype FieldTypeBooleanSelector<T extends FieldTypeGroups> = T extends \"STRING\" ? \"parse-boolean\" : \"boolean\";\n\nexport const Z2 = makeZ2(\"any\");\n\n\nfunction makeZ2<T extends FieldTypeGroups>(input: \"data\" | \"pathParams\" | \"queryParams\" | \"any\" | \"response\" | string): Z2<T> {\n const z2 = Object.create(z);\n z2.prismaField = prismaField;\n z2.authUser = () => z.object({\n user_id: z.number(),\n isAdmin: z.boolean(),\n username: z.string(),\n sessionId: z.number(),\n }).nullable();\n return z2;\n}\n\n\nfunction prismaField(table: any, field: any, fieldtype: ExtraFieldType, nullable?: boolean): any {\n const check = (() => {\n switch (fieldtype) {\n case \"string\":\n return z.string()\n .refine(x => x.length, { message: \"String must have length\" });\n case \"parse-number\":\n return z.string().min(1)\n .pipe(z.bigint({ coerce: true }))\n .pipe(z.number({ coerce: true }).finite())\n .refine(x => !isNaN(x), { message: \"Invalid number\" });\n case \"parse-boolean\":\n return z.enum([\"true\", \"false\", \"null\"]).transform(x => x === \"null\" ? null : x === \"true\");\n case \"boolean\":\n return z.boolean();\n case \"number\":\n return z.number().finite().int();\n default:\n throw new Error(\"Invalid field type\");\n }\n })();\n return nullable ? check.nullable() : check;\n\n}\n\n\n// const zodAssertGlobal = {\n// data: _zodAssert.bind(null, \"data\"),\n// pathParams: _zodAssert.bind(null, \"pathParams\"),\n// queryParams: _zodAssert.bind(null, \"queryParams\"),\n// response: _zodAssertAny.bind(null, \"response\"),\n// any: _zodAssertAny.bind(null, \"any\"),\n// zod: makeZ2(\"any\"),\n// };\n\n// declare global { type ZodAssert = typeof zodAssertGlobal; }\n\n// type t = ZodAssert;","export * from \"./utils\";\nexport * from \"./rootRoute\";\nexport * from \"./data-checks\";\nexport * from \"./zodAssert\";","import \"./global\";\nimport * as http2 from 'node:http2';\nimport send from 'send';\nimport { Readable } from 'stream';\nimport { IncomingMessage, ServerResponse, IncomingHttpHeaders as NodeIncomingHeaders, OutgoingHttpHeaders } from 'node:http';\nimport { is, UserError } from './utils';\nimport { createReadStream } from 'node:fs';\nimport { Writable } from 'node:stream';\n\ndeclare module 'node:net' {\n interface Socket {\n // this comment gets prepended to the other comment for this property, thus the hanging sentance.\n /** Not defined on net.Socket instances. \n * \n * On tls.Socket instances, */\n encrypted?: boolean;\n }\n}\n\n\nexport interface IncomingHttpHeaders extends NodeIncomingHeaders {\n \"accept-encoding\"?: string;\n}\n\nexport const SYMBOL_IGNORE_ERROR: unique symbol = Symbol(\"IGNORE_ERROR\");\nexport const STREAM_ENDED: unique symbol = Symbol(\"STREAM_ENDED\");\n\n\nexport type StreamerChunk = { data: string, encoding: NodeJS.BufferEncoding } | NodeJS.ReadableStream | Readable | Buffer;\n\n/**\n * The HTTP2 shims used in the request handler are only used for HTTP2 requests. \n * The NodeJS HTTP2 server actually calls the HTTP1 parser for all HTTP1 requests. \n */\nexport class Streamer {\n host: string;\n method: AllowedMethod;\n urlInfo: URL;\n url: string;\n headers: IncomingHttpHeaders;\n isSecure: boolean;\n cookies: URLSearchParams;\n constructor(\n private req: IncomingMessage | http2.Http2ServerRequest,\n private res: ServerResponse | http2.Http2ServerResponse,\n private router: Router\n ) {\n\n this.headers = req.headers;\n\n this.url = req.url as string;\n if (!this.url.startsWith(\"/\")) throw new Error(\"This should never happen\");\n\n if (router.pathPrefix) {\n if (this.url === router.pathPrefix) {\n res.writeHead(302, { \"location\": req.url + \"/\" }).end();\n throw STREAM_ENDED;\n } else if (this.url.startsWith(router.pathPrefix)) {\n this.url = this.url.slice(router.pathPrefix.length);\n } else {\n res.writeHead(500, {}).end(\"The server is setup with a path prefix \" + router.pathPrefix + \", but this request is outside of that prefix.\", \"utf8\");\n throw STREAM_ENDED;\n }\n }\n\n if (is<http2.Http2ServerRequest>(req, req.httpVersionMajor > 1))\n req.headers.host = req.headers[\":authority\"];\n if (!req.headers.host) throw new Error(\"This should never happen\");\n this.host = req.headers.host;\n\n if (!req.method) throw new Error(\"This should never happen\");\n if (!is<AllowedMethod>(req.method, AllowedMethods.includes(req.method as any))) {\n //https://httpwg.org/specs/rfc9110.html#status.501\n res.writeHead(501, {}).end(\"Method not supported\", \"utf8\");\n throw STREAM_ENDED;\n }\n this.method = req.method;\n\n this.isSecure = !!req.socket.encrypted;\n this.urlInfo = new URL(`https://${this.headers.host}${this.url}`);\n\n this.cookies = this.parseCookieString(req.headers.cookie || \"\");\n\n\n }\n\n\n // RIP Push Stream. it was a great idea.\n // async pushStream(path: string) {\n // return new Promise<Streamer>((resolve, reject) => {\n // const req2: http2.Http2ServerRequest = this.req as any;\n // if (!req2.stream || !req2.stream.pushAllowed) return reject();\n // req2.stream.write\n // const newRawHeaders = this.req.rawHeaders.slice();\n // for (let i = 0; i < newRawHeaders.length; i += 2) {\n // if (newRawHeaders[i] === \":method\") newRawHeaders[i + 1] = \"GET\";\n // if (newRawHeaders[i] === \":path\") newRawHeaders[i + 1] = path;\n // }\n // req2.stream.pushStream({ \":method\": \"GET\", \":path\": path }, (err, pushStream, headers) => {\n // if (err) return reject(err);\n // const preq = new http2.Http2ServerRequest(pushStream, req2.headers, {}, newRawHeaders);\n // const pres = new http2.Http2ServerResponse(pushStream);\n // const pushStreamer = new Streamer(preq, pres, this.router);\n // resolve(pushStreamer);\n // });\n // }).then(async streamer => {\n // await this.router.handle(streamer);\n // return streamer;\n // }, (err) => { if (err) throw err; });\n // }\n\n\n parseCookieString(cookieString: string) {\n const cookies = new URLSearchParams();\n if (typeof cookieString !== 'string') throw new Error('cookieString must be a string');\n cookieString.split(';').forEach(cookie => {\n const parts = cookie.split('=');\n if (parts.length >= 2) {\n const key = parts[0]!.trim();\n const value = parts.slice(1).join('=').trim();\n cookies.append(key, decodeURIComponent(value));\n }\n });\n return cookies;\n }\n\n get reader(): Readable { return this.req; }\n get writer(): Writable {\n // don't overwrite it here if it's already set because this could just be for sending the body.\n if (!this.headersSent && !this.headersSentBy)\n this.headersSentBy = new Error(\"Possible culprit was given access to the response object here.\");\n return this.res;\n }\n\n throw(statusCode: number) {\n this.sendEmpty(statusCode);\n throw SYMBOL_IGNORE_ERROR;\n }\n\n catcher = (error: unknown) => {\n if (error === SYMBOL_IGNORE_ERROR) return;\n if (error === STREAM_ENDED) return;\n const tag = this.urlInfo.href;\n console.error(tag, error);\n if (!this.headersSent) {\n this.sendEmpty(500, { \"x-reason\": \"Internal Server Error (catcher)\" });\n // if (error instanceof UserError) {\n // this.sendString(400, { \"x-reason\": \"Client Error (catcher)\" }, error.message, \"utf8\")\n // } else {\n \n // }\n }\n }\n\n checkHeadersSentBy(setError: boolean) {\n if (this.headersSent && this.headersSentBy) {\n console.log(this.headersSentBy);\n console.log(new Error(\"This is the second attempt to send headers. Was it supposed to happen?\"));\n }\n else if (this.res.headersSent) console.log(\"Headers were sent by an unknown source.\");\n // queue up the error in case there is a second attempt.\n else this.headersSentBy = new Error(\"You appear to be sending headers more than once. The first attempt was here. Does it need to throw or return?\")\n }\n\n\n\n toHeadersMap(headers: { [x: string]: string | string[] | number | undefined }) {\n return new Map(Object.entries(headers).map(([k, v]) =>\n [k.toLowerCase(), Array.isArray(v) ? v : v === undefined ? [] : [v.toString()]]\n ));\n }\n\n readBody = () => new Promise<Buffer>((resolve: (chunk: Buffer) => void) => {\n const chunks: Buffer[] = [];\n\n this.reader.on('data', chunk => chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk));\n this.reader.on('end', () => resolve(Buffer.concat(chunks)));\n });\n\n sendEmpty(status: number, headers: OutgoingHttpHeaders = {}): typeof STREAM_ENDED {\n if (process.env.DEBUG?.split(\",\").includes(\"send\")) {\n console.error(\"sendEmpty\", status, headers);\n }\n this.checkHeadersSentBy(true);\n this.res.writeHead(status, headers);\n this.res.end();\n return STREAM_ENDED;\n }\n\n sendString(status: number, headers: OutgoingHttpHeaders, data: string, encoding: NodeJS.BufferEncoding): typeof STREAM_ENDED {\n if (process.env.DEBUG?.split(\",\").includes(\"send\")) {\n console.error(\"sendString\", status, headers);\n }\n this.checkHeadersSentBy(true);\n headers['content-length'] = Buffer.byteLength(data, encoding);\n this.res.writeHead(status, headers);\n\n if (this.method === \"HEAD\")\n this.res.end();\n else\n this.res.end(data, encoding);\n\n return STREAM_ENDED;\n }\n\n sendBuffer(status: number, headers: OutgoingHttpHeaders, data: Buffer): typeof STREAM_ENDED {\n if (process.env.DEBUG?.split(\",\").includes(\"send\")) {\n console.error(\"sendBuffer\", status, headers);\n }\n this.checkHeadersSentBy(true);\n headers['content-length'] = data.length;\n this.res.writeHead(status, headers);\n if (this.method === \"HEAD\")\n this.res.end();\n else\n this.res.end(data);\n return STREAM_ENDED;\n }\n /** If this is a HEAD request, the stream will be ignored AND LEFT OPEN. */\n sendStream(status: number, headers: OutgoingHttpHeaders, stream: Readable): typeof STREAM_ENDED {\n if (process.env.DEBUG?.split(\",\").includes(\"send\")) {\n console.error(\"sendStream\", status, headers);\n }\n this.checkHeadersSentBy(true);\n this.res.writeHead(status, headers);\n if (this.method === \"HEAD\")\n this.res.end();\n else\n stream.pipe(this.res);\n return STREAM_ENDED;\n }\n // I'm not sure if there's a use case for this\n private sendFD(status: number, headers: OutgoingHttpHeaders, options: {\n fd: number;\n offset?: number;\n length?: number;\n }): typeof STREAM_ENDED {\n this.checkHeadersSentBy(true);\n this.res.writeHead(status, headers);\n const { fd, offset, length } = options;\n const stream = createReadStream(\"\", {\n fd,\n start: offset,\n end: length && length - 1,\n autoClose: false,\n });\n stream.pipe(this.res);\n return STREAM_ENDED;\n }\n /** \n * Sends a file with the appropriate cache headers, using the `send` npm module. \n * \n * Think of it like a static file server where you are serving files from a directory.\n * \n * @param options.root The directory to serve files from.\n * @param options.reqpath The path to the file relative to the `root` directory.\n * @param options.offset The offset in bytes to start reading the file from.\n * @param options.length The number of bytes to read from the file.\n * @param options.index \"index.html\" by default, to disable this set false or \n * to supply a new index pass a string or an array in preferred order. \n * \n * If an index.html file is not found, `send` will NOT generate a directory listing.\n * \n * The `send` method will automatically set the `Content-Type` header based on the file extension.\n * \n * If the file is not found, the `send` method will automatically send a 404 response.\n * \n\n * @returns STREAM_ENDED\n */\n sendFile(status: number, headers: OutgoingHttpHeaders, options: {\n root: string;\n reqpath: string;\n offset?: number;\n length?: number;\n index?: string | boolean | string[] | undefined,\n on404?: () => Promise<typeof STREAM_ENDED>;\n onDir?: () => Promise<typeof STREAM_ENDED>;\n }) {\n\n // the headers and status have to be set on the response object before piping the stream\n this.res.statusCode = status;\n this.toHeadersMap(headers).forEach((v, k) => { this.res.appendHeader(k, v); });\n\n const { root, reqpath, offset, length } = options;\n\n if (process.env.DEBUG?.split(\",\").includes(\"send\")) {\n console.error(\"sendFile\", root, reqpath, status, headers);\n }\n\n const stream = send(this.req, reqpath, {\n dotfiles: \"ignore\",\n index: false,\n root,\n start: offset,\n end: length && length - 1,\n });\n return new Promise<typeof STREAM_ENDED>((resolve, reject) => {\n\n stream.on(\"error\", (err) => Promise.resolve().then(async (): Promise<typeof STREAM_ENDED> => {\n if (err === 404 || err?.statusCode === 404) {\n return (await options.on404?.()) ?? this.sendEmpty(404);\n } else {\n console.log(err);\n throw this.sendEmpty(500);\n }\n }).then(resolve, reject));\n\n stream.on(\"directory\", () => Promise.resolve().then(async (): Promise<typeof STREAM_ENDED> => {\n return (await options.onDir?.())\n ?? this.sendEmpty(404, { \"x-reason\": \"Directory listing not allowed\" })\n }).then(resolve, reject));\n\n stream.on(\"end\", () => {\n resolve(STREAM_ENDED);\n })\n\n this.checkHeadersSentBy(true);\n stream.pipe(this.res);\n });\n }\n\n setCookie(name: string, value: string, options: {\n domain?: string;\n path?: string;\n expires?: Date;\n maxAge?: number;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n }) {\n var cookie = `${name}=${encodeURIComponent(value)}`;\n if (options.domain) cookie += `; Domain=${options.domain}`;\n if (options.path) cookie += `; Path=${options.path}`;\n if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;\n if (options.maxAge) cookie += `; Max-Age=${options.maxAge}`;\n if (options.secure) cookie += `; Secure`;\n if (options.httpOnly) cookie += `; HttpOnly`;\n if (options.sameSite) cookie += `; SameSite=${options.sameSite}`;\n this.appendHeader(\"Set-Cookie\", cookie);\n }\n\n appendHeader(name: string, value: string): void {\n const current = this.res.getHeader(name);\n this.res.setHeader(name,\n current\n ? Array.isArray(current)\n ? [...current as string[], value]\n : [current as string, value]\n : value\n );\n }\n\n setHeader(name: string, value: string): void {\n this.res.setHeader(name, value);\n }\n writeHead(status: number, headers: OutgoingHttpHeaders = {}): void {\n if (process.env.DEBUG?.split(\",\").includes(\"send\")) {\n console.error(\"writeHead\", status, headers);\n }\n this.checkHeadersSentBy(true);\n this.res.writeHead(status, headers);\n }\n write(chunk: Buffer | string, encoding?: NodeJS.BufferEncoding): void {\n // Between http1 and http2, the types are slightly different, but the runtime effect seems to be the same.\n encoding ? (this.res as ServerResponse).write(chunk, encoding) : (this.res as ServerResponse).write(chunk)\n }\n end(): typeof STREAM_ENDED {\n this.res.end();\n return STREAM_ENDED;\n }\n\n get headersSent() {\n return this.res.headersSent;\n }\n\n headersSentBy: Error | undefined;\n}\n\nexport class StreamerState {\n\n readBody\n sendEmpty\n sendString\n sendBuffer\n sendStream\n sendFile\n setCookie\n /**\n * \n * Sets a single header value. If the header already exists in the to-be-sent\n * headers, its value will be replaced. Use an array of strings to send multiple\n * headers with the same name\n * \n * When headers have been set with `response.setHeader()`, they will be merged\n * with any headers passed to `response.writeHead()`, with the headers passed\n * to `response.writeHead()` given precedence.\n * \n */\n setHeader\n writeHead\n write\n end\n\n /** sends a status and plain text string body */\n sendSimple(status: number, msg: string): typeof STREAM_ENDED {\n return this.sendString(status, {\n \"content-type\": \"text/plain\"\n }, msg, \"utf8\");\n }\n /** Stringify the value (unconditionally) and send it with content-type `application/json` */\n sendJSON<T>(status: number, obj: T): typeof STREAM_ENDED {\n return this.sendString(status, {\n \"content-type\": \"application/json\"\n }, JSON.stringify(obj), \"utf8\");\n }\n\n\n STREAM_ENDED: typeof STREAM_ENDED = STREAM_ENDED;\n\n constructor(private streamer: Streamer) {\n this.readBody = this.streamer.readBody.bind(this.streamer);\n this.sendEmpty = this.streamer.sendEmpty.bind(this.streamer);\n this.sendString = this.streamer.sendString.bind(this.streamer);\n this.sendBuffer = this.streamer.sendBuffer.bind(this.streamer);\n this.sendStream = this.streamer.sendStream.bind(this.streamer);\n this.sendFile = this.streamer.sendFile.bind(this.streamer);\n this.setHeader = this.streamer.setHeader.bind(this.streamer);\n this.writeHead = this.streamer.writeHead.bind(this.streamer);\n this.write = this.streamer.write.bind(this.streamer);\n this.end = this.streamer.end.bind(this.streamer);\n this.setCookie = this.streamer.setCookie.bind(this.streamer);\n\n }\n\n\n get url() { return this.streamer.url; }\n get method(): AllowedMethod { return this.streamer.method; }\n get headers() { return this.streamer.headers; }\n get host() { return this.streamer.host; }\n get urlInfo() { return this.streamer.urlInfo; }\n get headersSent() { return this.streamer.headersSent; }\n\n get reader() { return this.streamer.reader; }\n\n /** Currently this is based on whether the socket is secure, so a proxy will cause problems. */\n get isSecure() { return this.streamer.isSecure; }\n get cookies() { return this.streamer.cookies; }\n\n}\n\n\nimport { AllowedMethod, AllowedMethods, Router } from './routes/router';\n\n","import { Readable } from 'stream';\nimport { filterAsync, mapAsync, readMultipartData, sendResponse } from './utils';\nimport { STREAM_ENDED, Streamer, StreamerState } from './streamer';\nimport { PassThrough } from 'node:stream';\nimport { AllowedMethod, BodyFormat, RouteMatch, Router, SiteConfig } from './routes/router';\nimport * as z from 'zod';\nimport { AuthUser } from './services/sessions';\nimport { Prisma, PrismaClient } from '@prisma/client';\nimport { Types } from '@prisma/client/runtime/library';\nimport { DataChecks } from './utils';\nimport { setupDevServer } from \"./setupDevServer\";\nimport { Commander } from './commander';\nimport { PasswordService } from './services/PasswordService';\n\nexport interface AuthStateRouteACL {\n\n}\n\n\n\n// This class abstracts the request/response cycle into a single object.\n// It hides most of the details from the routes, allowing us to easily change the underlying server implementation.\nexport class StateObject<\n B extends BodyFormat = BodyFormat,\n M extends AllowedMethod = AllowedMethod,\n RoutePathParams extends string[][] = string[][],\n D = unknown\n> extends StreamerState {\n\n z: typeof z = z;\n\n STREAM_ENDED: typeof STREAM_ENDED = STREAM_ENDED;\n\n get method(): M { return super.method as M; }\n readMultipartData\n sendResponse\n /** This is set in makeRouter */\n sendDevServer!: () => ReturnType<Awaited<ReturnType<typeof setupDevServer>>>;\n\n data!:\n B extends \"string\" ? string :\n B extends \"buffer\" ? Buffer :\n B extends \"www-form-urlencoded-urlsearchparams\" ? URLSearchParams :\n B extends \"stream\" ? Readable :\n B extends \"ignore\" ? undefined :\n D;\n /** \n * an *object from entries* of all the pathParams in the tree mapped to the path regex matches from that route.\n * \n * Object.fromEntries takes the last value if there are duplicates, so conflicting names will have the last value in the path. \n * \n * Conflicting names would be defined on the route definitions, so just change the name there if there is a conflict.\n */\n pathParams: Record<RoutePathParams extends (infer X extends string)[][] ? X : never, string | undefined>;\n /** \n * The query params. Because these aren't checked anywhere, \n * the value includes undefined since it will be that if \n * the key is not specified at all. \n * \n * This will always satisfy the zod schema: `z.record(z.array(z.string()))`\n */\n queryParams: Record<string, string[] | undefined>;\n\n\n private engine: Commander[\"engine\"];\n public config: SiteConfig;\n public PasswordService: PasswordService;\n get pathPrefix() { return this.config.pathPrefix; }\n\n constructor(\n streamer: Streamer,\n /** The array of Route tree nodes the request matched. */\n private routePath: RouteMatch[],\n /** The bodyformat that ended up taking precedence. This should be correctly typed. */\n public bodyFormat: B,\n public user: AuthUser,\n public router: Router,\n public tiddlerCache: Router[\"tiddlerCache\"],\n ) {\n super(streamer);\n\n this.engine = router.engine;\n this.config = router.siteConfig;\n this.PasswordService = router.PasswordService;\n\n this.readMultipartData = readMultipartData.bind(this);\n this.sendResponse = sendResponse.bind(undefined, this.config, this);\n\n this.pathParams = Object.fromEntries<string | undefined>(routePath.map(r =>\n r.route.pathParams\n ?.map((e, i) => [e, r.params[i]] as const)\n .filter(<T>(e: T): e is T & {} => !!e)\n ?? []\n ).flat()) as any;\n\n const pathParamsZodCheck = z.record(z.string().transform(zodURIComponent).optional()).safeParse(this.pathParams);\n if (!pathParamsZodCheck.success) console.log(\"BUG: Path params zod error\", pathParamsZodCheck.error, this.pathParams);\n else this.pathParams = pathParamsZodCheck.data;\n\n this.queryParams = Object.fromEntries([...this.urlInfo.searchParams.keys()]\n .map(key => [key, this.urlInfo.searchParams.getAll(key)] as const));\n\n const queryParamsZodCheck = z.record(z.array(z.string())).safeParse(this.queryParams);\n if (!queryParamsZodCheck.success) console.log(\"BUG: Query params zod error\", queryParamsZodCheck.error, this.queryParams);\n else this.queryParams = queryParamsZodCheck.data;\n\n\n }\n\n okUser() {\n if (!this.user.isLoggedIn) throw \"User not authenticated\";\n }\n okAdmin() {\n if (!this.user.isLoggedIn) throw \"User not authenticated\";\n if (!this.user.isAdmin) throw \"User is not an admin\";\n }\n\n // createStore(engine: PrismaTxnClient) {\n // const sql = createStrictAwaitProxy(new SqlTiddlerDatabase(engine));\n // return createStrictAwaitProxy(new SqlTiddlerStore(sql, this.attachmentStore));\n // }\n\n $transaction = async <T>(fn: (prisma: PrismaTxnClient) => Promise<T>): Promise<T> => {\n return await this.engine.$transaction(prisma => fn(prisma as PrismaTxnClient));\n }\n\n $transactionTuple<P extends Prisma.PrismaPromise<any>[]>(arg: (prisma: Commander[\"engine\"]) => [...P], options?: { isolationLevel?: Prisma.TransactionIsolationLevel }): Promise<Types.Utils.UnwrapTuple<P>> {\n return this.engine.$transaction(arg(this.engine), options);\n }\n\n makeTiddlerEtag(options: { bag_name: string; tiddler_id: string | number; }) {\n // why do we need tiddler_id AND bag_name? tiddler_id is unique across all tiddlers\n if (options.bag_name && options.tiddler_id) {\n return `\"tiddler:${options.bag_name}/${options.tiddler_id}\"`;\n } else {\n throw \"Missing bag_name or tiddler_id\";\n }\n }\n\n /** type-narrowing helper function. This affects anywhere T is used. */\n isBodyFormat<T extends B, S extends { [K in B]: StateObject<K, M, RoutePathParams, D> }[T]>(format: T): this is S {\n return this.bodyFormat as BodyFormat === format;\n }\n\n\n /**\n *\n * Sends a **302** status code and **Location** header to the client.\n * \n * \n * - **301 Moved Permanently:** The resource has been permanently moved to a new URL.\n * - **302 Found:** The resource is temporarily located at a different URL.\n * - **303 See Other:** Fetch the resource from another URI using a GET request.\n * - **307 Temporary Redirect:** The resource is temporarily located at a different URL; the same HTTP method should be used.\n * - **308 Permanent Redirect:** The resource has permanently moved; the client should use the new URL in future requests.\n */\n redirect(location: string, pushLocation?: boolean): typeof STREAM_ENDED {\n return this.sendEmpty(302, { 'Location': this.config.pathPrefix + location });\n }\n\n sendSSE(retryMilliseconds?: number) {\n if (retryMilliseconds !== undefined)\n if (typeof retryMilliseconds !== \"number\" || retryMilliseconds < 0)\n throw new Error(\"Invalid retryMilliseconds: must be a non-negative number\");\n\n const stream = new PassThrough();\n\n this.sendStream(200, {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n \"connection\": \"keep-alive\",\n \"x-accel-buffering\": \"no\",\n }, stream);\n\n stream.write(\": This page is a server-sent event stream. It will continue loading until you close it.\\n\");\n stream.write(\": https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\\n\");\n stream.write(\"\\n\");\n\n /**\n * \n * @param {string} eventName The event name. If zero-length, the field is omitted\n * @param eventData The data to send. Must be stringify-able to JSON.\n * @param {string} eventId The event id. If zero-length, the field is omitted.\n */\n const emitEvent = (eventName: string, eventData: any, eventId: string) => {\n if (typeof eventName !== \"string\")\n throw new Error(\"Event name must be a string (a zero-length string disables the field)\");\n if (eventName.includes(\"\\n\"))\n throw new Error(\"Event name cannot contain newlines\");\n if (typeof eventId !== \"string\")\n throw new Error(\"Event ID must be a string\");\n if (eventId.includes(\"\\n\"))\n throw new Error(\"Event ID cannot contain newlines\");\n\n stream.write([\n eventName && `event: ${eventName}`,\n `data: ${JSON.stringify(eventData)}`,\n eventId && `id: ${eventId}`,\n retryMilliseconds && `retry: ${retryMilliseconds}`,\n ].filter(e => e).join(\"\\n\") + \"\\n\\n\");\n }\n\n return {\n /** Emit an SSE event */\n emitEvent,\n emitComment: (comment: string) => stream.write(`: ${comment}\\n\\n`),\n close: () => stream.end(),\n onClose: (callback: () => void) => stream.on(\"close\", callback),\n };\n\n }\n // several changes were made to this function\n // - it shouldn't assume it knows where the entityName is\n // - it throws STREAM_ENDED if it ends the request\n // - it does not check whether headers have been sent before throwing. \n // - headers should not be sent before it is called. \n // - it should not send a response more than once since it should throw every time it does.\n // and now it is replaced by the getACL prisma query.\n async checkACL(entityType: EntityType, entityName: string, permissionName: ACLPermissionName): Promise<void> {\n console.error(\"checkACL is not implemented\");\n throw this.sendEmpty(500);\n }\n\n\n async getRecipeACL(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n needWrite: boolean\n ) {\n const { user_id, isAdmin, role_ids } = this.user;\n\n const prisma = this.engine;\n const read = new DataChecks(this.config).getBagWhereACL({ permission: \"READ\", user_id, role_ids });\n const write = new DataChecks(this.config).getBagWhereACL({ permission: \"WRITE\", user_id, role_ids });\n\n const [recipe, canRead, canWrite] = await prisma.$transaction([\n prisma.recipes.findUnique({\n select: { recipe_id: true },\n where: { recipe_name }\n }),\n isAdmin ? prisma.$queryRaw`SELECT 1` : prisma.recipes.findUnique({\n select: { recipe_id: true },\n where: { recipe_name, recipe_bags: { every: { bag: { OR: read } } } }\n }),\n isAdmin ? prisma.$queryRaw`SELECT 1` : needWrite ? prisma.recipes.findUnique({\n select: { recipe_id: true },\n where: { recipe_name, recipe_bags: { some: { position: 0, bag: { OR: write } } } }\n }) : prisma.$queryRaw`SELECT 1`,\n ]);\n\n return { recipe, canRead, canWrite };\n\n }\n async assertRecipeACL(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n needWrite: boolean\n ) {\n\n const { recipe, canRead, canWrite } = await this.getRecipeACL(recipe_name, needWrite);\n\n if (!recipe) throw this.sendEmpty(404, { \"x-reason\": \"recipe not found\" });\n if (!canRead) throw this.sendEmpty(403, { \"x-reason\": \"no read permission\" });\n if (!canWrite) throw this.sendEmpty(403, { \"x-reason\": \"no write permission\" });\n\n }\n\n async getBagACL(\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n needWrite: boolean\n ) {\n const { user_id, isAdmin, role_ids } = this.user;\n const prisma = this.engine;\n const read = new DataChecks(this.config).getBagWhereACL({ permission: \"READ\", user_id, role_ids });\n const write = new DataChecks(this.config).getBagWhereACL({ permission: \"WRITE\", user_id, role_ids });\n const [bag, canRead, canWrite] = await prisma.$transaction([\n prisma.bags.findUnique({\n select: { bag_id: true, is_plugin: true, owner_id: true },\n where: { bag_name }\n }),\n isAdmin ? prisma.$queryRaw`SELECT 1` : prisma.bags.findUnique({\n select: { bag_id: true },\n where: { bag_name, OR: read }\n }),\n isAdmin ? prisma.$queryRaw`SELECT 1` : needWrite ? prisma.bags.findUnique({\n select: { bag_id: true },\n where: { bag_name, OR: write }\n }) : prisma.$queryRaw`SELECT 1`,\n ]);\n return { bag, canRead, canWrite };\n }\n\n async assertBagACL(\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n needWrite: boolean\n ) {\n const { bag, canRead, canWrite } = await this.getBagACL(bag_name, needWrite);\n\n if (!bag) throw this.sendEmpty(404, { \"x-reason\": \"recipe not found\" });\n if (!canRead) throw this.sendEmpty(403, { \"x-reason\": \"no read permission\" });\n if (!canWrite) throw this.sendEmpty(403, { \"x-reason\": \"no write permission\" });\n\n return bag;\n\n }\n\n}\n\nconst zodURIComponent = (val: string, ctx: z.RefinementCtx) => {\n try {\n return decodeURIComponent(val);\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Invalid URI component\",\n });\n return z.NEVER;\n }\n}\n","import { registerZodRoutes, SiteConfig, zodManage, RouterKeyMap, RouterRouteMap } from \"../router\";\nimport { DataChecks } from \"../../utils\";\nimport { AuthUser } from \"../../services/sessions\";\n\n// https://crates.io/crates/indradb\n\n\nexport const RecipeKeyMap: RouterKeyMap<RecipeManager, true> = {\n index_json: true,\n\n bag_create: true,\n bag_update: true,\n bag_upsert: true,\n bag_delete: true,\n bag_acl_update: true,\n\n recipe_create: true,\n recipe_update: true,\n recipe_upsert: true,\n recipe_delete: true,\n recipe_acl_update: true,\n\n}\n\nexport type RecipeManagerMap = RouterRouteMap<RecipeManager>;\n\nexport class RecipeManager {\n\n static defineRoutes(root: rootRoute, config: SiteConfig) {\n registerZodRoutes(root, new RecipeManager(config), Object.keys(RecipeKeyMap));\n }\n\n checks: DataChecks;\n\n constructor(private config: SiteConfig) {\n\n this.checks = new DataChecks(config)\n }\n\n index_json = zodManage(z => z.undefined(), async (state, prisma) => {\n\n const { isAdmin, user_id, username, role_ids } = state.user;\n\n const OR = this.checks.getBagWhereACL({ permission: \"READ\", user_id, role_ids });\n\n const bagList = await prisma.bags.findMany({\n include: {\n _count: isAdmin ? undefined : {\n select: {\n acl: {\n where: {\n permission: \"ADMIN\",\n role_id: { in: role_ids }\n }\n }\n }\n },\n acl: true,\n },\n where: isAdmin ? undefined : { OR }\n });\n\n const recipeList = await prisma.recipes.findMany({\n include: {\n recipe_bags: {\n select: { bag_id: true, position: true, with_acl: true, },\n orderBy: { position: \"asc\" }\n },\n acl: true,\n _count: isAdmin ? undefined : {\n select: {\n acl: {\n where: {\n permission: \"ADMIN\",\n role_id: { in: role_ids }\n }\n }\n }\n },\n },\n where: isAdmin ? undefined : {\n OR: [\n { recipe_bags: { every: { bag: { OR } } } },\n user_id && { owner_id: { equals: user_id, not: null } }\n ].filter(e => e)\n }\n });\n\n const userListUser = !isAdmin && await prisma.users.findMany({\n select: { user_id: true, username: true }\n });\n\n const userListAdmin = !!isAdmin && await prisma.users.findMany({\n select: { user_id: true, username: true, email: true, roles: true, last_login: true, created_at: true }\n });\n\n const roleList = await prisma.roles.findMany();\n\n return {\n bagList,\n recipeList,\n isAdmin,\n user_id,\n userListUser,\n userListAdmin,\n roleList,\n username,\n isLoggedIn: state.user.isLoggedIn,\n allowAnonReads: state.config.allowAnonReads,\n allowAnonWrites: state.config.allowAnonWrites,\n versions: state.router.versions,\n }\n });\n\n recipe_create = zodManage(z => z.object({\n recipe_name: z.string(),\n description: z.string(),\n bag_names: z.array(z.object({ bag_name: z.string(), with_acl: z.boolean() })),\n owner_id: z.prismaField(\"Recipes\", \"owner_id\", \"number\", true).optional(),\n isCreate: z.literal(true).default(true),\n }), async (state, prisma) => {\n return await this.recipeCreateOrUpdate(state.data, prisma, state.user);\n });\n recipe_update = zodManage(z => z.object({\n recipe_name: z.string(),\n description: z.string(),\n bag_names: z.array(z.object({ bag_name: z.string(), with_acl: z.boolean() })),\n owner_id: z.prismaField(\"Recipes\", \"owner_id\", \"number\", true).optional(),\n isCreate: z.literal(false).default(false),\n }), async (state, prisma) => {\n return await this.recipeCreateOrUpdate(state.data, prisma, state.user);\n });\n\n recipe_upsert = zodManage(z => z.object({\n recipe_name: z.string(),\n description: z.string(),\n bag_names: z.array(z.object({ bag_name: z.string(), with_acl: z.boolean() })),\n owner_id: z.prismaField(\"Recipes\", \"owner_id\", \"number\", true).optional(),\n isCreate: z.boolean(),\n }), async (state, prisma) => {\n return await this.recipeCreateOrUpdate(state.data, prisma, state.user);\n });\n\n bag_create = zodManage(z => z.object({\n bag_name: z.string(),\n description: z.string(),\n is_plugin: z.boolean(),\n owner_id: z.prismaField(\"Bags\", \"owner_id\", \"number\", true).optional(),\n isCreate: z.literal(true).default(true),\n }), async (state, prisma) => {\n return await this.bagCreateOrUpdate(state.data, prisma, state.user);\n });\n\n bag_update = zodManage(z => z.object({\n bag_name: z.string(),\n description: z.string(),\n is_plugin: z.boolean(),\n owner_id: z.prismaField(\"Bags\", \"owner_id\", \"number\", true).optional(),\n isCreate: z.literal(false).default(false),\n }), async (state, prisma) => {\n return await this.bagCreateOrUpdate(state.data, prisma, state.user);\n });\n\n bag_upsert = zodManage(z => z.object({\n bag_name: z.string(),\n description: z.string(),\n is_plugin: z.boolean(),\n owner_id: z.prismaField(\"Bags\", \"owner_id\", \"number\", true).optional(),\n isCreate: z.boolean(),\n }), async (state, prisma) => {\n return await this.bagCreateOrUpdate(state.data, prisma, state.user);\n });\n\n async recipeCreateOrUpdate({ bag_names, description, owner_id, recipe_name, isCreate }: {\n recipe_name: string,\n description: string,\n bag_names: { bag_name: string, with_acl: boolean }[],\n owner_id?: number | null,\n isCreate: boolean,\n }, prisma: PrismaTxnClient, user: AuthUser) {\n const existing = await prisma.recipes.findUnique({ where: { recipe_name }, });\n\n this.assertCreateOrUpdate({ user, type: \"recipe\", isCreate, owner_id, existing, });\n\n const { isAdmin, user_id } = user;\n\n const OR = isAdmin ? undefined : this.checks.getWhereACL({ permission: \"ADMIN\", user_id, });\n\n const bags = new Map(\n await prisma.bags.findMany({\n where: { bag_name: { in: bag_names.map(e => e.bag_name) } },\n }).then(bags => bags.map(bag => [bag.bag_name as string, bag]))\n );\n\n const missing = bag_names.filter(e => !bags.has(e.bag_name));\n if (missing.length) throw \"Some bags not found: \" + JSON.stringify(missing);\n\n const bagsAcl = new Map((await prisma.bags.findMany({\n where: { bag_name: { in: bag_names.map(e => e.bag_name) }, OR },\n })).map(bag => [bag.bag_name as string, bag]));\n\n const createBags = bag_names.map((bag, position) => ({\n bag_id: bags.get(bag.bag_name)!.bag_id,\n with_acl: bagsAcl.has(bag.bag_name) && bag.with_acl,\n position,\n }));\n\n if (existing) {\n await prisma.recipes.update({\n where: { recipe_name },\n data: {\n description,\n owner_id: isAdmin ? owner_id : undefined,\n recipe_bags: {\n deleteMany: {},\n }\n }\n });\n await prisma.recipes.update({\n where: { recipe_name },\n data: {\n recipe_bags: {\n create: createBags\n }\n }\n });\n return existing;\n } else {\n\n return await prisma.recipes.create({\n data: {\n recipe_name,\n description,\n recipe_bags: { create: createBags },\n owner_id: isAdmin ? owner_id : user_id\n },\n });\n }\n }\n\n async bagCreateOrUpdate({ bag_name, description, is_plugin, owner_id, isCreate }: {\n bag_name: string,\n description: string,\n is_plugin: boolean,\n owner_id?: number | null,\n isCreate: boolean,\n }, prisma: PrismaTxnClient, user: AuthUser) {\n const existing = await prisma.bags.findUnique({\n where: { bag_name },\n select: { owner_id: true }\n });\n\n this.assertCreateOrUpdate({ type: \"bag\", isCreate, owner_id, existing, user });\n\n const { isAdmin, user_id } = user;\n\n return await prisma.bags.upsert({\n where: { bag_name },\n update: {\n description,\n is_plugin,\n owner_id: isAdmin ? owner_id : undefined //undefined leaves the value as-is\n },\n create: {\n bag_name,\n description,\n is_plugin,\n owner_id: isAdmin ? owner_id : user_id\n },\n });\n\n }\n\n\n assertCreateOrUpdate({\n existing, isCreate, owner_id, type, user\n }: {\n user: AuthUser,\n isCreate: boolean,\n owner_id?: number | null,\n existing: { owner_id: PrismaField<\"Users\", \"user_id\"> | null } | null\n type: \"recipe\" | \"bag\"\n }) {\n // check user_id just to be safe because we depend on it for an additional check here and elsewhere\n // user_id 0 is also not a valid user_id and only used for anonymous users\n if (!user.isLoggedIn || !user.user_id)\n throw \"User not authenticated\";\n\n const { isAdmin, user_id } = user;\n\n if (!isAdmin && owner_id !== undefined)\n throw \"owner_id is only valid for admins\";\n\n if (existing && isCreate)\n throw `A ${type} with this name already exists`;\n\n if (existing && !isAdmin && existing.owner_id !== user_id)\n throw `User does not own the ${type} and is not an admin`;\n\n }\n\n recipe_delete = zodManage(z => z.object({\n recipe_name: z.string(),\n }), async (state, prisma) => {\n const { recipe_name } = state.data;\n\n if (!state.user.isLoggedIn) throw \"User not authenticated\";\n\n const recipe = await prisma.recipes.findUnique({\n where: { recipe_name },\n });\n\n if (!recipe) throw \"Recipe not found\";\n\n const { isAdmin, user_id } = state.user;\n\n if (!isAdmin && recipe.owner_id !== user_id)\n throw \"User does not own the recipe and is not an admin\";\n\n await prisma.recipes.delete({\n where: { recipe_name }\n });\n\n return null;\n });\n\n bag_delete = zodManage(z => z.object({\n bag_name: z.string(),\n }), async (state, prisma) => {\n const { bag_name } = state.data;\n\n if (!state.user.isLoggedIn) throw \"User not authenticated\";\n\n const bag = await prisma.bags.findUnique({\n where: { bag_name },\n include: { _count: { select: { tiddlers: true } } }\n });\n\n if (!bag) throw \"Bag not found\";\n\n const { isAdmin, user_id } = state.user;\n\n if (!isAdmin && bag.owner_id !== user_id)\n throw \"User does not own the bag and is not an admin\";\n\n if (bag._count.tiddlers)\n throw \"Bag has tiddlers added and can no longer be deleted.\";\n\n await prisma.bags.delete({\n where: { bag_name }\n });\n\n return null;\n });\n\n // Partial<{\n // role_id: number | null;\n // permission: \"READ\" | \"WRITE\" | \"ADMIN\";\n // }>[]\n recipe_acl_update = zodManage(z => z.object({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n acl: z.array(z.object({\n role_id: z.number().nullable(),\n permission: z.enum([\"READ\", \"WRITE\", \"ADMIN\"]),\n })),\n }), async (state, prisma) => {\n const { recipe_name, acl } = state.data;\n\n if (!state.user.isLoggedIn) throw \"User not authenticated\";\n\n const recipe = await prisma.recipes.findUnique({\n where: { recipe_name }\n });\n\n if (!recipe) throw \"Recipe not found\";\n\n const { isAdmin, user_id } = state.user;\n\n if (!isAdmin && recipe.owner_id !== user_id)\n throw \"User does not own the recipe and is not an admin\";\n\n const distinct = new Set(acl.map(acl => JSON.stringify([acl.role_id, acl.permission])));\n\n const { recipe_id } = recipe;\n\n await prisma.recipeAcl.deleteMany({\n where: { recipe_id }\n });\n\n await prisma.recipeAcl.createMany({\n data: Array.from(distinct).map(e => {\n const [role_id, permission] = JSON.parse(e);\n return { recipe_id, role_id, permission };\n })\n });\n\n return null;\n });\n\n bag_acl_update = zodManage(z => z.object({\n bag_name: z.prismaField(\"Bags\", \"bag_name\", \"string\"),\n acl: z.array(z.object({\n role_id: z.number().nullable(),\n permission: z.enum([\"READ\", \"WRITE\", \"ADMIN\"]),\n })),\n }), async (state, prisma) => {\n const { bag_name, acl } = state.data;\n\n if (!state.user.isLoggedIn) throw \"User not authenticated\";\n\n const bag = await prisma.bags.findUnique({\n where: { bag_name },\n include: { acl: true }\n });\n\n if (!bag) throw \"Bag not found\";\n\n const { isAdmin, user_id } = state.user;\n\n if (!isAdmin && bag.owner_id !== user_id)\n throw \"User does not own the bag and is not an admin\";\n\n const distinct = new Set(acl.map(acl => JSON.stringify([acl.role_id, acl.permission])));\n\n const { bag_id } = bag;\n\n await prisma.bagAcl.deleteMany({\n where: { bag_id }\n });\n\n await prisma.bagAcl.createMany({\n data: Array.from(distinct).map(e => {\n const [role_id, permission] = JSON.parse(e);\n return { bag_id, role_id, permission };\n })\n });\n\n return null;\n });\n\n\n}","import { assertSignature } from \"../../server\";\nimport { registerZodRoutes, SiteConfig, zodManage, RouterKeyMap, RouterRouteMap } from \"../router\";\n\nexport const UserKeyMap: RouterKeyMap<UserManager, true> = {\n user_edit_data: true,\n user_create: true,\n user_delete: true,\n user_list: true,\n user_update: true,\n user_update_password: true,\n role_create: true,\n role_update: true,\n}\n\nexport type UserManagerMap = RouterRouteMap<UserManager>;\n\n\nexport class UserManager {\n static defineRoutes(root: rootRoute, config: SiteConfig) {\n registerZodRoutes(root, new UserManager(), Object.keys(UserKeyMap));\n }\n\n user_edit_data = zodManage(z => z.object({\n user_id: z.prismaField(\"Users\", \"user_id\", \"number\")\n }), async (state, prisma) => {\n state.okUser();\n\n const { user_id } = state.data;\n\n if (!state.user.isAdmin && state.user.user_id !== user_id)\n throw \"Non-admins cannot retrieve the profile of other users\"\n\n const user = await prisma.users.findUnique({\n where: { user_id },\n select: {\n user_id: true,\n username: true,\n email: true,\n roles: true,\n last_login: true,\n created_at: true,\n }\n });\n\n if (!user) throw \"User not found\";\n\n const allRoles = await prisma.roles.findMany({\n select: {\n role_id: true,\n role_name: true,\n description: true,\n }\n });\n\n return { user, allRoles }\n });\n\n user_list = zodManage(z => z.undefined(), async (state, prisma) => {\n\n state.okAdmin();\n\n const res = await prisma.users.findMany({\n select: {\n user_id: true,\n username: true,\n email: true,\n roles: true,\n last_login: true,\n created_at: true,\n }\n });\n return res.map(e => ({\n ...e,\n last_login: e.last_login?.toISOString(),\n created_at: e.created_at.toISOString(),\n }));\n });\n\n\n user_create = zodManage(z => z.object({\n username: z.string(),\n email: z.string(),\n role_ids: z.prismaField(\"Roles\", \"role_id\", \"number\", false).array(),\n }), async (state, prisma) => {\n const { username, email, role_ids } = state.data;\n\n state.okAdmin();\n\n const user = await prisma.users.create({\n data: { username, email, password: \"\", roles: { connect: role_ids.map(role_id => ({ role_id })) } },\n select: { user_id: true, created_at: true }\n });\n\n return user;\n });\n\n user_update = zodManage(z => z.object({\n user_id: z.number(),\n username: z.string(),\n email: z.string(),\n role_ids: z.prismaField(\"Roles\", \"role_id\", \"number\").array(),\n }), async (state, prisma) => {\n const { user_id, username, email, role_ids } = state.data;\n\n state.okAdmin();\n\n if (state.user.user_id === user_id) throw \"Admin cannot update themselves\";\n\n await prisma.users.update({\n where: { user_id },\n data: { username, email, roles: { set: role_ids.map(role_id => ({ role_id })) } }\n });\n\n return null;\n });\n\n\n user_delete = zodManage(z => z.object({\n user_id: z.number(),\n }), async (state, prisma) => {\n const { user_id } = state.data;\n\n state.okAdmin();\n\n if (state.user.user_id === user_id) throw \"Admin cannot delete themselves\";\n\n const bags = await prisma.bags.count({ where: { owner_id: user_id } });\n\n if (bags) throw \"User owns bags and cannot be deleted\";\n\n await prisma.users.delete({ where: { user_id } });\n\n return null;\n });\n\n\n user_update_password = zodManage(z => z.object({\n user_id: z.prismaField(\"Users\", \"user_id\", \"number\"),\n registrationRequest: z.string().optional(),\n registrationRecord: z.string().optional(),\n session_id: z.string().optional(),\n signature: z.string().optional(),\n }), async (state, prisma) => {\n const { user_id, registrationRecord, registrationRequest } = state.data;\n\n state.okUser();\n\n if (!state.user.isAdmin) {\n if (!state.data) throw \"Session id and signature are required\";\n const session = await prisma.sessions.findUnique({\n where: { session_id: state.data.session_id },\n });\n\n if (!session?.session_key)\n throw \"Session not found\";\n const { session_key } = session;\n const { session_id, signature } = state.data;\n if (!session_id || !signature)\n throw \"Session id and signature are required\";\n assertSignature({ session_id, session_key, signature });\n\n if (session.user_id !== user_id)\n throw \"You must be an admin to update another user's password\";\n\n if (state.user.user_id !== user_id)\n throw \"You must be logged in as this user to update the password, \"\n + \"but normally this isn't supposed to happen (this is a bug, please report it)\";\n\n }\n\n const userExists = await prisma.users.count({ where: { user_id } });\n if (!userExists) throw \"User does not exist\";\n\n if (registrationRequest) {\n return state.PasswordService.createRegistrationResponse({\n userID: user_id,\n registrationRequest\n });\n } else if (registrationRecord) {\n await prisma.users.update({\n where: { user_id },\n data: { password: registrationRecord }\n });\n }\n\n return null;\n });\n\n role_create = zodManage(z => z.object({\n role_name: z.string(),\n description: z.string(),\n }), async (state, prisma) => {\n const { role_name, description } = state.data;\n\n state.okAdmin();\n\n return await prisma.roles.create({\n data: { role_name, description }\n });\n\n });\n\n role_update = zodManage(z => z.object({\n role_id: z.prismaField(\"Roles\", \"role_id\", \"number\"),\n role_name: z.prismaField(\"Roles\", \"role_name\", \"string\"),\n description: z.prismaField(\"Roles\", \"description\", \"string\"),\n }), async (state, prisma) => {\n const { role_id, role_name, description } = state.data;\n\n state.okUser();\n\n if (role_id < 1) throw \"Invalid role id\";\n if (role_id === 1) throw \"Cannot update the admin role\";\n if (role_id === 2) throw \"Cannot update the user role\";\n\n return await prisma.roles.update({\n where: { role_id },\n data: { role_name, description }\n });\n\n });\n\n}","\nimport { RecipeManager } from \"../managers/manager-recipes\";\nimport { UserManager } from \"../managers/manager-users\";\nimport { SiteConfig } from \"../router\";\n\nexport { UserManager, UserManagerMap } from \"./manager-users\";\nexport { RecipeManager, RecipeManagerMap } from \"./manager-recipes\";\n\nexport const ManagerRoutes = (root: rootRoute, config: SiteConfig) => {\n RecipeManager.defineRoutes(root, config);\n UserManager.defineRoutes(root, config);\n};","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { Router, SiteConfig } from \"./router\";\nimport { AttachmentService, TiddlerFields } from \"../services/attachments\";\nimport { ok } from \"assert\";\nimport { Commander } from \"../commander\";\nimport { FileInfoTiddlers, TiddlerFieldModule } from \"tiddlywiki\";\nimport { UserError } from \"../utils\";\n\n/**\n\n### NOTES from attachments file\n\nClass to handle the attachments in the filing system\n\nThe store folder looks like this:\n\nstore/\n inbox/ - files that are in the process of being uploaded via a multipart form upload\n 202402282125432742/\n 0\n 1\n ...\n ...\n files/ - files that are the text content of large tiddlers\n b7def178-79c4-4d88-b7a4-39763014a58b/\n data.jpg - the extension is provided for convenience when directly inspecting the file system\n meta.json - contains:\n {\n \"filename\": \"data.jpg\",\n \"type\": \"video/mp4\",\n \"uploaded\": \"2024021821224823\"\n }\n database.sql - The database file (managed by Prisma)\n\n*/\nexport class TiddlerStore {\n static fromCommander(commander: Commander, prisma: PrismaTxnClient) {\n return new TiddlerStore(\n commander.$tw.Tiddler.fieldModules,\n new commander.AttachmentService(commander.siteConfig, prisma),\n commander.siteConfig,\n prisma\n );\n }\n\n\n storePath: string;\n\n constructor(\n public fieldModules: Record<string, TiddlerFieldModule>,\n public attachService: AttachmentService,\n public siteConfig: SiteConfig,\n public prisma: PrismaTxnClient\n ) {\n\n this.storePath = this.siteConfig.storePath;\n }\n\n /*\n Returns null if a bag/recipe name is valid, or a string error message if not\n */\n validateItemName(name: string, allowPrivilegedCharacters: boolean) {\n if (typeof name !== \"string\") {\n return \"Not a valid string\";\n }\n if (name.length > 256) {\n return \"Too long\";\n }\n // Removed ~ from this list temporarily\n if (allowPrivilegedCharacters) {\n if (!(/^[^\\s\\u00A0\\x00-\\x1F\\x7F`!@#%^&*()+={}\\[\\];\\'\\\"<>,\\\\\\?]+$/g.test(name))) {\n return \"Invalid character(s)\";\n }\n } else {\n if (!(/^[^\\s\\u00A0\\x00-\\x1F\\x7F`!@#$%^&*()+={}\\[\\];:\\'\\\"<>.,\\/\\\\\\?]+$/g.test(name))) {\n return \"Invalid character(s)\";\n }\n }\n return null;\n }\n /*\n Returns null if the argument is an array of valid bag/recipe names, or a string error message if not\n */\n validateItemNames(names: string[], allowPrivilegedCharacters: boolean) {\n if (!Array.isArray(names)) {\n return \"Not a valid array\";\n }\n var errors = [];\n for (const name of names) {\n const result = this.validateItemName(name, allowPrivilegedCharacters);\n if (result && errors.indexOf(result) === -1) {\n errors.push(result);\n }\n }\n if (errors.length === 0) {\n return null;\n } else {\n return errors.join(\"\\n\");\n }\n }\n async upsertRecipe(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n description: PrismaField<\"Recipes\", \"description\">,\n bags: { bag_name: PrismaField<\"Bags\", \"bag_name\">, with_acl: PrismaField<\"Recipe_bags\", \"with_acl\"> }[],\n { allowPrivilegedCharacters = false }: { allowPrivilegedCharacters?: boolean; } = {}\n ) {\n const [recipe_, recipe_bags_] = this.upsertRecipe_PrismaArray(recipe_name, description, bags, { allowPrivilegedCharacters });\n const recipe = await recipe_;\n await recipe_bags_;\n return recipe;\n }\n upsertRecipe_PrismaArray(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n description: PrismaField<\"Recipes\", \"description\">,\n bags: { bag_name: PrismaField<\"Bags\", \"bag_name\">, with_acl: PrismaField<\"Recipe_bags\", \"with_acl\"> }[],\n { allowPrivilegedCharacters = false }: { allowPrivilegedCharacters?: boolean; } = {}\n ) {\n\n const validationRecipeName = this.validateItemName(recipe_name, allowPrivilegedCharacters);\n if (validationRecipeName) throw validationRecipeName;\n if (bags.length === 0) throw new UserError(\"Recipes must contain at least one bag\");\n\n return [\n this.prisma.recipes.upsert({\n where: { recipe_name },\n update: { description, recipe_bags: { deleteMany: {} } },\n create: { recipe_name, description },\n select: { recipe_id: true }\n }),\n this.prisma.recipes.update({\n where: { recipe_name },\n data: {\n recipe_bags: {\n create: bags.map(({ bag_name, with_acl }, position) => ({\n bag: { connect: { bag_name } },\n position,\n with_acl\n }))\n }\n }\n })\n ];\n\n }\n async upsertBag(\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n description: PrismaField<\"Bags\", \"description\">,\n is_plugin: PrismaField<\"Bags\", \"is_plugin\">,\n { allowPrivilegedCharacters = false }: { allowPrivilegedCharacters?: boolean; } = {}\n ) {\n return await this.upsertBag_PrismaPromise(bag_name, description, is_plugin, {\n allowPrivilegedCharacters\n });\n }\n upsertBag_PrismaPromise(\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n description: PrismaField<\"Bags\", \"description\">,\n is_plugin: PrismaField<\"Bags\", \"is_plugin\">,\n { allowPrivilegedCharacters = false }: { allowPrivilegedCharacters?: boolean; } = {}\n ) {\n\n const validationBagName = this.validateItemName(bag_name, allowPrivilegedCharacters);\n if (validationBagName) throw validationBagName;\n\n return this.prisma.bags.upsert({\n where: { bag_name },\n update: { description, is_plugin },\n create: { bag_name, description, is_plugin },\n select: { bag_id: true }\n });\n\n }\n /**\n * You probably want to call this inside a transaction.\n *\n ```js\n const tiddlersFromPath = $tw.loadTiddlersFromPath(tiddlerPath);\n ```\n */\n async saveTiddlersFromPath(\n tiddlersFromPath: { tiddlers: TiddlerFields[] }[],\n bag_name: PrismaField<\"Bags\", \"bag_name\">\n ) {\n\n }\n saveTiddlersFromPath_PrismaArray(\n tiddlersFromPath: { tiddlers: TiddlerFields[] }[],\n bag_name: PrismaField<\"Bags\", \"bag_name\">\n ) {\n return [\n this.prisma.tiddlers.deleteMany({\n where: { bag: { bag_name } }\n }),\n ...tiddlersFromPath.flatMap(({ tiddlers }) =>\n tiddlers.flatMap(tiddler =>\n this.saveBagTiddlerFields_PrismaArray(tiddler, bag_name, null)\n )\n )\n ]\n\n }\n\n\n /*\n Returns {tiddler_id:}\n */\n async saveBagTiddler(\n incomingTiddlerFields: TiddlerFields,\n bag_name: PrismaField<\"Bags\", \"bag_name\">\n ) {\n const { title } = incomingTiddlerFields;\n\n const existing_attachment_hash = await this.prisma.tiddlers.findFirst({\n where: { title, bag: { bag_name } },\n select: { attachment_hash: true }\n }).then(e => e?.attachment_hash ?? null);\n\n const { tiddlerFields, attachment_hash } = await this.attachService.processIncomingTiddler({\n tiddlerFields: incomingTiddlerFields,\n existing_attachment_hash,\n existing_canonical_uri: existing_attachment_hash && this.attachService.makeCanonicalUri(bag_name, incomingTiddlerFields.title)\n });\n return this.saveBagTiddlerFields(tiddlerFields, bag_name, attachment_hash);\n\n }\n /*\n Create a tiddler in a bag adopting the specified file as the attachment. The attachment file must be on the same disk as the attachment store\n Options include:\n \n filepath - filepath to the attachment file\n hash - string hash of the attachment file\n type - content type of file as uploaded\n \n Returns {tiddler_id:}\n */\n async saveBagTiddlerWithAttachment(\n incomingTiddlerFields: TiddlerFields,\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n options: {\n filepath: string;\n hash: string;\n type: string;\n _canonical_uri: string;\n }\n ) {\n const attachment_hash = await this.attachService.adoptAttachment({\n // options.filepath, options.type, options.hash, options._canonical_uri\n incomingFilepath: options.filepath,\n type: options.type,\n hash: options.hash,\n _canonical_uri: options._canonical_uri\n });\n if (attachment_hash) {\n return this.saveBagTiddlerFields(incomingTiddlerFields, bag_name, attachment_hash);\n } else {\n return null;\n }\n }\n /*\n Returns {tiddler_id:,bag_name:}\n \n The critical difference here is that the tiddler gets saved to the top bag.\n */\n async saveRecipeTiddler(\n incomingTiddlerFields: TiddlerFields,\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">\n ) {\n const { title } = incomingTiddlerFields;\n const currentBag = await this.getRecipeBagWithTiddler({ recipe_name, title });\n\n const existing_attachment_hash = currentBag && await this.prisma.tiddlers.findFirst({\n where: { title, bag: { bag_name: currentBag.bag.bag_name } },\n select: { attachment_hash: true }\n }).then(e => e?.attachment_hash ?? null);\n\n const { tiddlerFields, attachment_hash } = await this.attachService.processIncomingTiddler({\n existing_attachment_hash,\n existing_canonical_uri: incomingTiddlerFields._canonical_uri,\n tiddlerFields: incomingTiddlerFields\n });\n return this.saveRecipeTiddlerFields(tiddlerFields, recipe_name, attachment_hash);\n }\n\n /*\n returns {tiddler_id:,tiddler:}\n */\n async getBagTiddler(options: {\n title: PrismaField<\"Tiddlers\", \"title\">;\n bag_name?: PrismaField<\"Bags\", \"bag_name\">;\n bag_id?: PrismaField<\"Bags\", \"bag_id\">;\n }) {\n const { title, bag_name, bag_id } = options;\n ok(bag_name || bag_id, \"bag_name or bag_id must be provided\");\n\n const tiddler = await this.prisma.tiddlers.findFirst({\n where: bag_name\n ? { title, bag: { bag_name }, is_deleted: false }\n : { title, bag_id, is_deleted: false },\n select: { tiddler_id: true }\n });\n if (!tiddler) return null;\n\n var tiddlerInfo = await this.getTiddlerInfo(tiddler.tiddler_id);\n if (!tiddlerInfo) return null;\n\n // if (tiddlerInfo.is_plugin) {\n // const pluginBag = await this.prisma.bags.findUnique({\n // where: { bag_name: tiddlerInfo.bag_name },\n // include: { tiddlers: { include: { fields: true } } }\n // });\n // }\n\n return {\n ...tiddlerInfo,\n tiddler: this.attachService.processOutgoingTiddler(tiddlerInfo)\n };\n\n }\n\n async getRecipeTiddler(\n title: PrismaField<\"Tiddlers\", \"title\">,\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">\n ) {\n\n const recipe_bag = await this.getRecipeBagWithTiddler({ recipe_name, title });\n\n if (!recipe_bag) return null;\n\n return await this.getBagTiddler({ title, bag_id: recipe_bag.bag_id });\n\n }\n\n\n async getRecipeBagWithTiddler({ recipe_name, title }: { recipe_name: string; title: string; }) {\n\n return await this.prisma.recipe_bags.findFirst({\n include: { bag: true, recipe: true },\n where: {\n recipe: { recipe_name },\n bag: { tiddlers: { some: { title, is_deleted: false } } }\n },\n orderBy: { position: \"asc\" }\n });\n }\n\n async getRecipeWritableBag(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">\n ) {\n const recipe_bag = await this.prisma.recipe_bags.findFirst({\n select: { bag: true },\n where: { recipe: { recipe_name }, position: 0 }\n });\n if (!recipe_bag) return null;\n return recipe_bag.bag;\n }\n\n\n async getTiddlerInfo(\n tiddler_id: PrismaField<\"Tiddlers\", \"tiddler_id\">\n ) {\n\n const tiddler = await this.prisma.tiddlers.findUnique({\n where: { tiddler_id, is_deleted: false },\n include: { fields: true, bag: true }\n });\n\n if (!tiddler) return null;\n\n if (tiddler.bag.is_plugin && tiddler.title as string !== tiddler.bag.bag_name as string)\n throw new UserError(\"Can only get tiddler info for a plugin bag itself\");\n\n return {\n bag_name: tiddler.bag.bag_name,\n is_plugin_bag: tiddler.bag.is_plugin,\n tiddler_id: tiddler.tiddler_id,\n attachment_hash: tiddler.attachment_hash,\n tiddler: Object.fromEntries([\n ...tiddler.fields.map(e => [e.field_name, e.field_value] as const),\n [\"title\", tiddler.title]\n ]) as TiddlerFields\n };\n }\n /*\n Get an attachment ready to stream. Returns null if there is an error or:\n tiddler_id: revision of tiddler\n stream: stream of file\n type: type of file\n Returns {tiddler_id:,bag_name:}\n */\n async getBagTiddlerStream(\n title: PrismaField<\"Tiddlers\", \"title\">,\n bag_name: PrismaField<\"Bags\", \"bag_name\">\n ) {\n const tiddlerInfo = await this.getBagTiddler({ title, bag_name });\n if (!tiddlerInfo) return null;\n\n if (tiddlerInfo.attachment_hash) {\n return {\n ...await this.attachService.getAttachmentStream(tiddlerInfo.attachment_hash) ?? {},\n tiddler_id: tiddlerInfo.tiddler_id,\n bag_name: bag_name\n };\n } else {\n const { Readable } = require('stream');\n const stream = new Readable();\n stream._read = () => {\n // Push data\n const type = tiddlerInfo.tiddler.type || \"text/plain\";\n stream.push(tiddlerInfo.tiddler.text || \"\", (this.siteConfig.contentTypeInfo[type] || { encoding: \"utf8\" }).encoding);\n // Push null to indicate the end of the stream\n stream.push(null);\n };\n return {\n tiddler_id: tiddlerInfo.tiddler_id,\n bag_name: bag_name,\n stream: stream,\n type: tiddlerInfo.tiddler.type || \"text/plain\"\n };\n }\n\n }\n\n /**\n Returns {tiddler_id:,bag_name:} or null if the recipe is empty\n */\n async saveRecipeTiddlerFields(\n tiddlerFields: TiddlerFields,\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n attachment_hash: PrismaField<\"Tiddlers\", \"attachment_hash\">\n ) {\n\n const recipe = await this.prisma.recipes.findUnique({\n where: { recipe_name },\n include: {\n recipe_bags: {\n // we're saving to the top most bag\n where: { position: 0 },\n select: { bag: { select: { bag_id: true, bag_name: true, is_plugin: true } } },\n }\n }\n });\n\n if (!recipe) throw new UserError(\"Recipe not found\");\n\n const bag_name = recipe.recipe_bags[0]?.bag.bag_name;\n\n if (!bag_name) throw new UserError(\"Recipe has no bag at position 0\");\n\n if (recipe.recipe_bags[0]?.bag.is_plugin)\n throw new UserError(\"Saving to plugin bags is not currently supported. Please use a normal bag. This error occurs if a plugin bag is at the top of the recipe.\\n\")\n\n // Save the tiddler to the specified bag\n var { tiddler_id } = await this.saveBagTiddlerFields(tiddlerFields, bag_name, attachment_hash);\n\n return { tiddler_id, bag_name };\n // \t// Find the topmost bag in the recipe\n // \tvar row = this.engine.runStatementGet(`\n // \tSELECT b.bag_name\n // \tFROM bags AS b\n // \tJOIN (\n // \t\tSELECT rb.bag_id\n // \t\tFROM recipe_bags AS rb\n // \t\tWHERE rb.recipe_id = (\n // \t\t\tSELECT recipe_id\n // \t\t\tFROM recipes\n // \t\t\tWHERE recipe_name = $recipe_name\n // \t\t)\n // \t\tORDER BY rb.position DESC\n // \t\tLIMIT 1\n // \t) AS selected_bag\n // \tON b.bag_id = selected_bag.bag_id\n // `, {\n // \t\t$recipe_name: recipe_name\n // \t});\n // \tif (!row) {\n // \t\treturn null;\n // \t}\n // \t// Save the tiddler to the topmost bag\n // \tvar info = this.saveBagTiddler(tiddlerFields, row.bag_name, attachment_hash);\n // \treturn {\n // \t\ttiddler_id: info.tiddler_id,\n // \t\tbag_name: row.bag_name\n // \t};\n }\n\n async saveBagTiddlerFields(\n tiddlerFields: TiddlerFields,\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n attachment_hash: PrismaField<\"Tiddlers\", \"attachment_hash\">\n ) {\n const [deletion, creation] = this.saveBagTiddlerFields_PrismaArray(tiddlerFields, bag_name, attachment_hash);\n await deletion;\n return await creation;\n }\n saveBagTiddlerFields_PrismaArray(\n tiddlerFields: TiddlerFields,\n bag_name: PrismaField<\"Bags\", \"bag_name\">,\n attachment_hash: PrismaField<\"Tiddlers\", \"attachment_hash\">\n ) {\n\n const { title } = tiddlerFields;\n if (!title) {\n console.error(tiddlerFields);\n throw new Error(\"Tiddler must have a title\");\n }\n\n const deletion = this.prisma.tiddlers.deleteMany({\n where: { bag: { bag_name }, title }\n });\n\n const encodeTiddlerFields = ([field_name, field_value]: [string, any]) => {\n const fieldModule = this.fieldModules[field_name];\n if (typeof field_value === \"string\") return [field_name, field_value];\n if (fieldModule && fieldModule.stringify) field_value = fieldModule.stringify(field_value);\n if (typeof field_value === \"number\") field_value = field_value.toString();\n if (typeof field_value === \"boolean\") field_value = field_value ? \"true\" : \"false\";\n if (typeof field_value === \"undefined\" || field_value === null) field_value = \"\";\n return [field_name, field_value];\n };\n\n const creation = this.prisma.tiddlers.create({\n data: {\n bag: { connect: { bag_name } },\n title,\n is_deleted: false,\n attachment_hash: attachment_hash || null,\n fields: {\n create: Object.entries(tiddlerFields)\n .map(encodeTiddlerFields)\n .map(([field_name, field_value]) => ({ field_name, field_value }))\n }\n },\n select: {\n tiddler_id: true\n }\n });\n\n return [deletion, creation] as const;\n\n // \tattachment_hash = attachment_hash || null;\n // \t// Update the tiddlers table\n // \tvar info = this.engine.runStatement(`\n // \tINSERT OR REPLACE INTO tiddlers (bag_id, title, is_deleted, attachment_hash)\n // \tVALUES (\n // \t\t(SELECT bag_id FROM bags WHERE bag_name = $bag_name),\n // \t\t$title,\n // \t\tFALSE,\n // \t\t$attachment_hash\n // \t)\n // `, {\n // \t\t$title: tiddlerFields.title,\n // \t\t$attachment_hash: attachment_hash,\n // \t\t$bag_name: bag_name\n // \t});\n // \t// Update the fields table\n // \tthis.engine.runStatement(`\n // \tINSERT OR REPLACE INTO fields (tiddler_id, field_name, field_value)\n // \tSELECT\n // \t\tt.tiddler_id,\n // \t\tjson_each.key AS field_name,\n // \t\tjson_each.value AS field_value\n // \tFROM (\n // \t\tSELECT tiddler_id\n // \t\tFROM tiddlers\n // \t\tWHERE bag_id = (\n // \t\t\tSELECT bag_id\n // \t\t\tFROM bags\n // \t\t\tWHERE bag_name = $bag_name\n // \t\t) AND title = $title\n // \t) AS t\n // \tJOIN json_each($field_values) AS json_each\n // `, {\n // \t\t$title: tiddlerFields.title,\n // \t\t$bag_name: bag_name,\n // \t\t$field_values: JSON.stringify(Object.assign({}, tiddlerFields, { title: undefined }))\n // \t});\n // \treturn {\n // \t\ttiddler_id: info.lastInsertRowid\n // \t};\n }\n /*\n Returns {tiddler_id:,bag_name:}\n */\n async deleteRecipeTiddler(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n title: PrismaField<\"Tiddlers\", \"title\">\n ) {\n\n const currentBag = await this.getRecipeBagWithTiddler({ recipe_name, title });\n if (!currentBag)\n throw new UserError(\"Tiddler not found in recipe\");\n if (currentBag.position !== 0)\n throw new UserError(\"Cannot delete tiddler from non-top bag\");\n return await this.deleteBagTiddler(title, currentBag.bag.bag_name);\n }\n /**\n Returns {tiddler_id:} of the delete marker\n */\n async deleteBagTiddler(\n title: PrismaField<\"Tiddlers\", \"title\">,\n bag_name: PrismaField<\"Bags\", \"bag_name\">\n ) {\n await this.prisma.tiddlers.deleteMany({\n where: { title, bag: { bag_name } },\n });\n const { tiddler_id } = await this.prisma.tiddlers.create({\n data: {\n title,\n bag: { connect: { bag_name } },\n is_deleted: true,\n attachment_hash: null,\n },\n select: {\n tiddler_id: true\n }\n });\n\n return { bag_name, tiddler_id }\n\n // \t// Delete the fields of this tiddler\n // \tthis.engine.runStatement(`\n // \tDELETE FROM fields\n // \tWHERE tiddler_id IN (\n // \t\tSELECT t.tiddler_id\n // \t\tFROM tiddlers AS t\n // \t\tINNER JOIN bags AS b ON t.bag_id = b.bag_id\n // \t\tWHERE b.bag_name = $bag_name AND t.title = $title\n // \t)\n // `, {\n // \t\t$title: title,\n // \t\t$bag_name: bag_name\n // \t});\n // \t// Mark the tiddler itself as deleted\n // \tconst rowDeleteMarker = this.engine.runStatement(`\n // \tINSERT OR REPLACE INTO tiddlers (bag_id, title, is_deleted, attachment_hash)\n // \tVALUES (\n // \t\t(SELECT bag_id FROM bags WHERE bag_name = $bag_name),\n // \t\t$title,\n // \t\tTRUE,\n // \t\tNULL\n // \t)\n // `, {\n // \t\t$title: title,\n // \t\t$bag_name: bag_name\n // \t});\n // \treturn { tiddler_id: rowDeleteMarker.lastInsertRowid };\n }\n\n async getRecipeTiddlersByBag(\n recipe_name: PrismaField<\"Recipes\", \"recipe_name\">,\n options: {\n // how do you limit a list of unique titles?\n // limit?: number, \n last_known_tiddler_id?: number,\n include_deleted?: boolean,\n } = {}\n ) {\n // In prisma it's easy to get the top bag for a specific title. \n // To get all titles we basically have to get all bags and manually find the top one. \n const lastid = options.last_known_tiddler_id;\n const withDeleted = options.include_deleted;\n const bags = await this.prisma.recipe_bags.findMany({\n where: { recipe: { recipe_name } },\n select: {\n position: true,\n bag: {\n select: {\n bag_id: true,\n bag_name: true,\n is_plugin: true,\n tiddlers: {\n select: {\n title: true,\n tiddler_id: true,\n is_deleted: true,\n },\n where: {\n is_deleted: withDeleted ? undefined : false,\n tiddler_id: lastid ? { gt: lastid } : undefined\n },\n }\n }\n }\n },\n });\n\n\n return bags.map(e => ({\n bag_id: e.bag.bag_id,\n bag_name: e.bag.bag_name,\n is_plugin: e.bag.is_plugin,\n position: e.position,\n tiddlers: e.bag.tiddlers\n }));\n\n // \t// Get the recipe ID\n // \tconst rowsCheckRecipe = this.engine.runStatementGet(`\n // \tSELECT recipe_id FROM recipes WHERE recipes.recipe_name = $recipe_name\n // `, {\n // \t\t$recipe_name: recipe_name\n // \t});\n // \tif (!rowsCheckRecipe) {\n // \t\treturn null;\n // \t}\n // \tconst recipe_id = rowsCheckRecipe.recipe_id;\n // \t// Compose the query to get the tiddlers\n // \tconst params = {\n // \t\t$recipe_id: recipe_id\n // \t};\n // \tif (options.limit) {\n // \t\tparams.$limit = options.limit.toString();\n // \t}\n // \tif (options.last_known_tiddler_id) {\n // \t\tparams.$last_known_tiddler_id = options.last_known_tiddler_id;\n // \t}\n // \tconst rows = this.engine.runStatementGetAll(`\n // \tSELECT title, tiddler_id, is_deleted, bag_name\n // \tFROM (\n // \t\tSELECT t.title, t.tiddler_id, t.is_deleted, b.bag_name, MAX(rb.position) AS position\n // \t\tFROM bags AS b\n // \t\tINNER JOIN recipe_bags AS rb ON b.bag_id = rb.bag_id\n // \t\tINNER JOIN tiddlers AS t ON b.bag_id = t.bag_id\n // \t\tWHERE rb.recipe_id = $recipe_id\n // \t\t${options.include_deleted ? \"\" : \"AND t.is_deleted = FALSE\"}\n // \t\t${options.last_known_tiddler_id ? \"AND tiddler_id > $last_known_tiddler_id\" : \"\"}\n // \t\tGROUP BY t.title\n // \t\tORDER BY t.title, tiddler_id DESC\n // \t\t${options.limit ? \"LIMIT $limit\" : \"\"}\n // \t)\n // `, params);\n // \treturn rows;\n }\n}\n","\"use strict\";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return\"CORRUPT: \"+this.message};this.message=a},invalid:function(a){this.toString=function(){return\"INVALID: \"+this.message};this.message=a},bug:function(a){this.toString=function(){return\"BUG: \"+this.message};this.message=a},notReady:function(a){this.toString=function(){return\"NOT READY: \"+this.message};this.message=a}}};\nsjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid(\"invalid aes key size\");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c&\n255]]};\nsjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},s:[[[],[],[],[],[]],[[],[],[],[],[]]],O:function(){var a=this.s[0],b=this.s[1],c=a[4],d=b[4],e,f,g,h=[],k=[],l,n,m,p;for(e=0;0x100>e;e++)k[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=l||1,g=k[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^m&255^99,c[f]=m,d[m]=f,n=h[e=h[l=h[f]]],p=0x1010101*n^0x10001*e^0x101*l^0x1010100*f,n=0x101*h[m]^0x1010100*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=p=p<<24^p>>>8;for(e=\n0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}};\nfunction t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid(\"invalid aes block size\");var d=a.b[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2];b=b[c?1:3]^d[3];var h,k,l,n=d.length/4-2,m,p=4,r=[0,0,0,0];h=a.s[c];a=h[0];var q=h[1],v=h[2],w=h[3],x=h[4];for(m=0;m<n;m++)h=a[e>>>24]^q[f>>16&255]^v[g>>8&255]^w[b&255]^d[p],k=a[f>>>24]^q[g>>16&255]^v[b>>8&255]^w[e&255]^d[p+1],l=a[g>>>24]^q[b>>16&255]^v[e>>8&255]^w[f&255]^d[p+2],b=a[b>>>24]^q[e>>16&255]^v[f>>8&255]^w[g&255]^d[p+3],p+=4,e=h,f=k,g=l;for(m=\n0;4>m;m++)r[c?3&-m:m]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[p++],h=e,e=f,f=g,g=b,b=h;return r}\nsjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.$(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(0===a.length||0===b.length)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return 32===d?a.concat(b):sjcl.bitArray.$(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;return 0===\nb?0:32*(b-1)+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.length<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b=b&31;0<c&&b&&(a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return 0===\nc},$:function(a,b,c,d){var e;e=0;for(void 0===d&&(d=[]);32<=b;b-=32)d.push(c),c=0;if(0===b)return d.concat(a);for(e=0;e<a.length;e++)d.push(c|a[e]>>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32<b+a?c:d.pop(),1));return d},i:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]},byteswapM:function(a){var b,c;for(b=0;b<a.length;++b)c=a[b],a[b]=c>>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}};\nsjcl.codec.utf8String={fromBits:function(a){var b=\"\",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++)0===(d&3)&&(e=a[d/4]),b+=String.fromCharCode(e>>>8>>>8>>>8),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++)d=d<<8|a.charCodeAt(c),3===(c&3)&&(b.push(d),d=0);c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};\nsjcl.codec.hex={fromBits:function(a){var b=\"\",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\\s|0x/g,\"\");d=a.length;a=a+\"00000000\";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,4*d)}};\nsjcl.codec.base32={B:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\",X:\"0123456789ABCDEFGHIJKLMNOPQRSTUV\",BITS:32,BASE:5,REMAINING:27,fromBits:function(a,b,c){var d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f=\"\",g=0,h=sjcl.codec.base32.B,k=0,l=sjcl.bitArray.bitLength(a);c&&(h=sjcl.codec.base32.X);for(c=0;f.length*d<l;)f+=h.charAt((k^a[c]>>>g)>>>e),g<d?(k=a[c]<<d-g,g+=e,c++):(k<<=d,g-=d);for(;f.length&7&&!b;)f+=\"=\";return f},toBits:function(a,b){a=a.replace(/\\s|=/g,\"\").toUpperCase();var c=sjcl.codec.base32.BITS,\nd=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f=[],g,h=0,k=sjcl.codec.base32.B,l=0,n,m=\"base32\";b&&(k=sjcl.codec.base32.X,m=\"base32hex\");for(g=0;g<a.length;g++){n=k.indexOf(a.charAt(g));if(0>n){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}throw new sjcl.exception.invalid(\"this isn't \"+m+\"!\");}h>e?(h-=e,f.push(l^n>>>h),l=n<<c-h):(h+=d,l^=n<<c-h)}h&56&&f.push(sjcl.bitArray.partial(h&56,l,1));return f}};\nsjcl.codec.base32hex={fromBits:function(a,b){return sjcl.codec.base32.fromBits(a,b,1)},toBits:function(a){return sjcl.codec.base32.toBits(a,1)}};\nsjcl.codec.base64={B:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",fromBits:function(a,b,c){var d=\"\",e=0,f=sjcl.codec.base64.B,g=0,h=sjcl.bitArray.bitLength(a);c&&(f=f.substr(0,62)+\"-_\");for(c=0;6*d.length<h;)d+=f.charAt((g^a[c]>>>e)>>>26),6>e?(g=a[c]<<6-e,e+=26,c++):(g<<=6,e-=6);for(;d.length&3&&!b;)d+=\"=\";return d},toBits:function(a,b){a=a.replace(/\\s|=/g,\"\");var c=[],d,e=0,f=sjcl.codec.base64.B,g=0,h;b&&(f=f.substr(0,62)+\"-_\");for(d=0;d<a.length;d++){h=f.indexOf(a.charAt(d));\nif(0>h)throw new sjcl.exception.invalid(\"this isn't base64!\");26<e?(e-=26,c.push(g^h>>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}e&56&&c.push(sjcl.bitArray.partial(e&56,g,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.O();a?(this.F=a.F.slice(0),this.A=a.A.slice(0),this.l=a.l):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};\nsjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.F=this.Y.slice(0);this.A=[];this.l=0;return this},update:function(a){\"string\"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.A=sjcl.bitArray.concat(this.A,a);b=this.l;a=this.l=b+sjcl.bitArray.bitLength(a);if(0x1fffffffffffff<a)throw new sjcl.exception.invalid(\"Cannot hash more than 2^53 - 1 bits\");if(\"undefined\"!==typeof Uint32Array){var d=new Uint32Array(c),e=0;for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,d.subarray(16*e,\n16*(e+1))),e+=1;c.splice(0,16*e)}else for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,c.splice(0,16));return this},finalize:function(){var a,b=this.A,c=this.F,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.l/0x100000000));for(b.push(this.l|0);b.length;)u(this,b.splice(0,16));this.reset();return c},Y:[],b:[],O:function(){function a(a){return 0x100000000*(a-Math.floor(a))|0}for(var b=0,c=2,d,e;64>b;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e=\n!1;break}e&&(8>b&&(this.Y[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}};\nfunction u(a,b){var c,d,e,f=a.F,g=a.b,h=f[0],k=f[1],l=f[2],n=f[3],m=f[4],p=f[5],r=f[6],q=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+q+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(r^m&(p^r))+g[c],q=r,r=p,p=m,m=n+d|0,n=l,l=k,k=h,h=d+(k&l^n&(k^l))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+h|0;f[1]=f[1]+k|0;f[2]=f[2]+l|0;f[3]=f[3]+n|0;f[4]=f[4]+m|0;f[5]=f[5]+p|0;f[6]=f[6]+r|0;f[7]=\nf[7]+q|0}\nsjcl.mode.ccm={name:\"ccm\",G:[],listenProgress:function(a){sjcl.mode.ccm.G.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.G.indexOf(a);-1<a&&sjcl.mode.ccm.G.splice(a,1)},fa:function(a){var b=sjcl.mode.ccm.G.slice(),c;for(c=0;c<b.length;c+=1)b[c](a)},encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,k=h.bitLength(c)/8,l=h.bitLength(g)/8;e=e||64;d=d||[];if(7>k)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(f=2;4>f&&l>>>8*f;f++);f<15-k&&(f=15-k);c=h.clamp(c,\n8*(15-f));b=sjcl.mode.ccm.V(a,b,c,d,e,f);g=sjcl.mode.ccm.C(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),k=f.clamp(b,h-e),l=f.bitSlice(b,h-e),h=(h-e)/8;if(7>g)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(b=2;4>b&&h>>>8*b;b++);b<15-g&&(b=15-g);c=f.clamp(c,8*(15-b));k=sjcl.mode.ccm.C(a,k,c,l,e,b);a=sjcl.mode.ccm.V(a,k.data,c,d,e,b);if(!f.equal(k.tag,a))throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");\nreturn k.data},na:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,k=h.i;d=[h.partial(8,(b.length?64:0)|d-2<<2|f-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length)for(c=h.bitLength(b)/8,65279>=c?g=[h.partial(16,c)]:0xffffffff>=c&&(g=h.concat([h.partial(16,65534)],[c])),g=h.concat(g,b),b=0;b<g.length;b+=4)d=a.encrypt(k(d,g.slice(b,b+4).concat([0,0,0])));return d},V:function(a,b,c,d,e,f){var g=sjcl.bitArray,h=g.i;e/=8;if(e%2||4>e||16<e)throw new sjcl.exception.invalid(\"ccm: invalid tag length\");\nif(0xffffffff<d.length||0xffffffff<b.length)throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");c=sjcl.mode.ccm.na(a,d,c,e,g.bitLength(b)/8,f);for(d=0;d<b.length;d+=4)c=a.encrypt(h(c,b.slice(d,d+4).concat([0,0,0])));return g.clamp(c,8*e)},C:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.i;var k=b.length,l=h.bitLength(b),n=k/50,m=n;c=h.concat([h.partial(8,f-1)],c).concat([0,0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!k)return{tag:d,data:[]};for(g=0;g<k;g+=4)g>n&&(sjcl.mode.ccm.fa(g/\nk),n+=m),c[3]++,e=a.encrypt(c),b[g]^=e[0],b[g+1]^=e[1],b[g+2]^=e[2],b[g+3]^=e[3];return{tag:d,data:h.clamp(b,l)}}};\nsjcl.mode.ocb2={name:\"ocb2\",encrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");var g,h=sjcl.mode.ocb2.S,k=sjcl.bitArray,l=k.i,n=[0,0,0,0];c=h(a.encrypt(c));var m,p=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4)m=b.slice(g,g+4),n=l(n,m),p=p.concat(l(c,a.encrypt(l(c,m)))),c=h(c);m=b.slice(g);b=k.bitLength(m);g=a.encrypt(l(c,[0,0,0,b]));m=k.clamp(l(m.concat([0,0,0]),g),b);n=l(n,l(m.concat([0,0,0]),g));n=a.encrypt(l(n,l(c,h(c))));\nd.length&&(n=l(n,f?d:sjcl.mode.ocb2.pmac(a,d)));return p.concat(k.concat(m,k.clamp(n,e)))},decrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");e=e||64;var g=sjcl.mode.ocb2.S,h=sjcl.bitArray,k=h.i,l=[0,0,0,0],n=g(a.encrypt(c)),m,p,r=sjcl.bitArray.bitLength(b)-e,q=[];d=d||[];for(c=0;c+4<r/32;c+=4)m=k(n,a.decrypt(k(n,b.slice(c,c+4)))),l=k(l,m),q=q.concat(m),n=g(n);p=r-32*c;m=a.encrypt(k(n,[0,0,0,p]));m=k(m,h.clamp(b.slice(c),p).concat([0,\n0,0]));l=k(l,m);l=a.encrypt(k(l,k(n,g(n))));d.length&&(l=k(l,f?d:sjcl.mode.ocb2.pmac(a,d)));if(!h.equal(h.clamp(l,e),h.bitSlice(b,r)))throw new sjcl.exception.corrupt(\"ocb: tag doesn't match\");return q.concat(h.clamp(m,p))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.S,e=sjcl.bitArray,f=e.i,g=[0,0,0,0],h=a.encrypt([0,0,0,0]),h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4)h=d(h),g=f(g,a.encrypt(f(h,b.slice(c,c+4))));c=b.slice(c);128>e.bitLength(c)&&(h=f(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));g=f(g,c);\nreturn a.encrypt(f(d(f(h,d(h))),g))},S:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}};\nsjcl.mode.gcm={name:\"gcm\",encrypt:function(a,b,c,d,e){var f=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.C(!0,a,f,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var f=b.slice(0),g=sjcl.bitArray,h=g.bitLength(f);e=e||128;d=d||[];e<=h?(b=g.bitSlice(f,h-e),f=g.bitSlice(f,0,h-e)):(b=f,f=[]);a=sjcl.mode.gcm.C(!1,a,f,d,c,e);if(!g.equal(a.tag,b))throw new sjcl.exception.corrupt(\"gcm: tag doesn't match\");return a.data},ka:function(a,b){var c,d,e,f,g,h=sjcl.bitArray.i;e=[0,0,\n0,0];f=b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,f));g=0!==(f[3]&1);for(d=3;0<d;d--)f[d]=f[d]>>>1|(f[d-1]&1)<<31;f[0]>>>=1;g&&(f[0]^=-0x1f000000)}return e},j:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;d<e;d+=4)b[0]^=0xffffffff&c[d],b[1]^=0xffffffff&c[d+1],b[2]^=0xffffffff&c[d+2],b[3]^=0xffffffff&c[d+3],b=sjcl.mode.gcm.ka(b,a);return b},C:function(a,b,c,d,e,f){var g,h,k,l,n,m,p,r,q=sjcl.bitArray;m=c.length;p=q.bitLength(c);r=q.bitLength(d);h=q.bitLength(e);\ng=b.encrypt([0,0,0,0]);96===h?(e=e.slice(0),e=q.concat(e,[1])):(e=sjcl.mode.gcm.j(g,[0,0,0,0],e),e=sjcl.mode.gcm.j(g,e,[0,0,Math.floor(h/0x100000000),h&0xffffffff]));h=sjcl.mode.gcm.j(g,[0,0,0,0],d);n=e.slice(0);d=h.slice(0);a||(d=sjcl.mode.gcm.j(g,h,c));for(l=0;l<m;l+=4)n[3]++,k=b.encrypt(n),c[l]^=k[0],c[l+1]^=k[1],c[l+2]^=k[2],c[l+3]^=k[3];c=q.clamp(c,p);a&&(d=sjcl.mode.gcm.j(g,h,c));a=[Math.floor(r/0x100000000),r&0xffffffff,Math.floor(p/0x100000000),p&0xffffffff];d=sjcl.mode.gcm.j(g,d,a);k=b.encrypt(e);\nd[0]^=k[0];d[1]^=k[1];d[2]^=k[2];d[3]^=k[3];return{tag:q.bitSlice(d,0,f),data:c}}};sjcl.misc.hmac=function(a,b){this.W=b=b||sjcl.hash.sha256;var c=[[],[]],d,e=b.prototype.blockSize/32;this.w=[new b,new b];a.length>e&&(a=b.hash(a));for(d=0;d<e;d++)c[0][d]=a[d]^909522486,c[1][d]=a[d]^1549556828;this.w[0].update(c[0]);this.w[1].update(c[1]);this.R=new b(this.w[0])};\nsjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a){if(this.aa)throw new sjcl.exception.invalid(\"encrypt on already updated hmac called!\");this.update(a);return this.digest(a)};sjcl.misc.hmac.prototype.reset=function(){this.R=new this.W(this.w[0]);this.aa=!1};sjcl.misc.hmac.prototype.update=function(a){this.aa=!0;this.R.update(a)};sjcl.misc.hmac.prototype.digest=function(){var a=this.R.finalize(),a=(new this.W(this.w[1])).update(a).finalize();this.reset();return a};\nsjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E4;if(0>d||0>c)throw new sjcl.exception.invalid(\"invalid params to pbkdf2\");\"string\"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));\"string\"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,k,l=[],n=sjcl.bitArray;for(k=1;32*l.length<(d||1);k++){e=f=a.encrypt(n.concat(b,[k]));for(g=1;g<c;g++)for(f=a.encrypt(f),h=0;h<f.length;h++)e[h]^=f[h];l=l.concat(e)}d&&(l=n.clamp(l,d));return l};\nsjcl.prng=function(a){this.c=[new sjcl.hash.sha256];this.m=[0];this.P=0;this.H={};this.N=0;this.U={};this.Z=this.f=this.o=this.ha=0;this.b=[0,0,0,0,0,0,0,0];this.h=[0,0,0,0];this.L=void 0;this.M=a;this.D=!1;this.K={progress:{},seeded:{}};this.u=this.ga=0;this.I=1;this.J=2;this.ca=0x10000;this.T=[0,48,64,96,128,192,0x100,384,512,768,1024];this.da=3E4;this.ba=80};\nsjcl.prng.prototype={randomWords:function(a,b){var c=[],d;d=this.isReady(b);var e;if(d===this.u)throw new sjcl.exception.notReady(\"generator isn't seeded\");if(d&this.J){d=!(d&this.I);e=[];var f=0,g;this.Z=e[0]=(new Date).valueOf()+this.da;for(g=0;16>g;g++)e.push(0x100000000*Math.random()|0);for(g=0;g<this.c.length&&(e=e.concat(this.c[g].finalize()),f+=this.m[g],this.m[g]=0,d||!(this.P&1<<g));g++);this.P>=1<<this.c.length&&(this.c.push(new sjcl.hash.sha256),this.m.push(0));this.f-=f;f>this.o&&(this.o=\nf);this.P++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.L=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.h[d]=this.h[d]+1|0,!this.h[d]);d++);}for(d=0;d<a;d+=4)0===(d+1)%this.ca&&y(this),e=z(this),c.push(e[0],e[1],e[2],e[3]);y(this);return c.slice(0,a)},setDefaultParanoia:function(a,b){if(0===a&&\"Setting paranoia=0 will ruin your security; use it only for testing\"!==b)throw new sjcl.exception.invalid(\"Setting paranoia=0 will ruin your security; use it only for testing\");this.M=a},addEntropy:function(a,\nb,c){c=c||\"user\";var d,e,f=(new Date).valueOf(),g=this.H[c],h=this.isReady(),k=0;d=this.U[c];void 0===d&&(d=this.U[c]=this.ha++);void 0===g&&(g=this.H[c]=0);this.H[c]=(this.H[c]+1)%this.c.length;switch(typeof a){case \"number\":void 0===b&&(b=1);this.c[g].update([d,this.N++,1,b,f,1,a|0]);break;case \"object\":c=Object.prototype.toString.call(a);if(\"[object Uint32Array]\"===c){e=[];for(c=0;c<a.length;c++)e.push(a[c]);a=e}else for(\"[object Array]\"!==c&&(k=1),c=0;c<a.length&&!k;c++)\"number\"!==typeof a[c]&&\n(k=1);if(!k){if(void 0===b)for(c=b=0;c<a.length;c++)for(e=a[c];0<e;)b++,e=e>>>1;this.c[g].update([d,this.N++,2,b,f,a.length].concat(a))}break;case \"string\":void 0===b&&(b=a.length);this.c[g].update([d,this.N++,3,b,f,a.length]);this.c[g].update(a);break;default:k=1}if(k)throw new sjcl.exception.bug(\"random: addEntropy only supports number, array of numbers or string\");this.m[g]+=b;this.f+=b;h===this.u&&(this.isReady()!==this.u&&A(\"seeded\",Math.max(this.o,this.f)),A(\"progress\",this.getProgress()))},\nisReady:function(a){a=this.T[void 0!==a?a:this.M];return this.o&&this.o>=a?this.m[0]>this.ba&&(new Date).valueOf()>this.Z?this.J|this.I:this.I:this.f>=a?this.J|this.u:this.u},getProgress:function(a){a=this.T[a?a:this.M];return this.o>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.D){this.a={loadTimeCollector:B(this,this.ma),mouseCollector:B(this,this.oa),keyboardCollector:B(this,this.la),accelerometerCollector:B(this,this.ea),touchCollector:B(this,this.qa)};if(window.addEventListener)window.addEventListener(\"load\",\nthis.a.loadTimeCollector,!1),window.addEventListener(\"mousemove\",this.a.mouseCollector,!1),window.addEventListener(\"keypress\",this.a.keyboardCollector,!1),window.addEventListener(\"devicemotion\",this.a.accelerometerCollector,!1),window.addEventListener(\"touchmove\",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent(\"onload\",this.a.loadTimeCollector),document.attachEvent(\"onmousemove\",this.a.mouseCollector),document.attachEvent(\"keypress\",this.a.keyboardCollector);else throw new sjcl.exception.bug(\"can't attach event\");\nthis.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener(\"load\",this.a.loadTimeCollector,!1),window.removeEventListener(\"mousemove\",this.a.mouseCollector,!1),window.removeEventListener(\"keypress\",this.a.keyboardCollector,!1),window.removeEventListener(\"devicemotion\",this.a.accelerometerCollector,!1),window.removeEventListener(\"touchmove\",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent(\"onload\",this.a.loadTimeCollector),document.detachEvent(\"onmousemove\",\nthis.a.mouseCollector),document.detachEvent(\"keypress\",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(a,b){this.K[a][this.ga++]=b},removeEventListener:function(a,b){var c,d,e=this.K[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;c<f.length;c++)d=f[c],delete e[d]},la:function(){C(this,1)},oa:function(a){var b,c;try{b=a.x||a.clientX||a.offsetX||0,c=a.y||a.clientY||a.offsetY||0}catch(d){c=b=0}0!=b&&0!=c&&this.addEntropy([b,c],2,\"mouse\");C(this,0)},qa:function(a){a=\na.touches[0]||a.changedTouches[0];this.addEntropy([a.pageX||a.clientX,a.pageY||a.clientY],1,\"touch\");C(this,0)},ma:function(){C(this,2)},ea:function(a){a=a.accelerationIncludingGravity.x||a.accelerationIncludingGravity.y||a.accelerationIncludingGravity.z;if(window.orientation){var b=window.orientation;\"number\"===typeof b&&this.addEntropy(b,1,\"accelerometer\")}a&&this.addEntropy(a,2,\"accelerometer\");C(this,0)}};\nfunction A(a,b){var c,d=sjcl.random.K[a],e=[];for(c in d)d.hasOwnProperty(c)&&e.push(d[c]);for(c=0;c<e.length;c++)e[c](b)}function C(a,b){\"undefined\"!==typeof window&&window.performance&&\"function\"===typeof window.performance.now?a.addEntropy(window.performance.now(),b,\"loadtime\"):a.addEntropy((new Date).valueOf(),b,\"loadtime\")}function y(a){a.b=z(a).concat(z(a));a.L=new sjcl.cipher.aes(a.b)}function z(a){for(var b=0;4>b&&(a.h[b]=a.h[b]+1|0,!a.h[b]);b++);return a.L.encrypt(a.h)}\nfunction B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6);\na:try{var D,E,F,G;if(G=\"undefined\"!==typeof module&&module.exports){var H;try{H=require(\"crypto\")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,\"crypto['randomBytes']\");else if(\"undefined\"!==typeof window&&\"undefined\"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F);\nelse break a;sjcl.random.addEntropy(F,1024,\"crypto['getRandomValues']\")}}catch(a){\"undefined\"!==typeof window&&window.console&&(console.log(\"There was an error collecting entropy from the browser:\"),console.log(a))}\nsjcl.json={defaults:{v:1,iter:1E4,ks:128,ts:64,mode:\"ccm\",adata:\"\",cipher:\"aes\"},ja:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.g({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.g(f,c);c=f.adata;\"string\"===typeof f.salt&&(f.salt=sjcl.codec.base64.toBits(f.salt));\"string\"===typeof f.iv&&(f.iv=sjcl.codec.base64.toBits(f.iv));if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||\"string\"===typeof a&&100>=f.iter||64!==f.ts&&96!==f.ts&&128!==f.ts||128!==f.ks&&192!==f.ks&&0x100!==f.ks||2>f.iv.length||\n4<f.iv.length)throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");\"string\"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,f),a=g.key.slice(0,f.ks/32),f.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.publicKey&&(g=a.kem(),f.kemtag=g.tag,a=g.key.slice(0,f.ks/32));\"string\"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));\"string\"===typeof c&&(f.adata=c=sjcl.codec.utf8String.toBits(c));g=new sjcl.cipher[f.cipher](a);e.g(d,f);d.key=a;f.ct=\"ccm\"===f.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&\nb instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.encrypt(g,b,f.iv,c,f.ts):sjcl.mode[f.mode].encrypt(g,b,f.iv,c,f.ts);return f},encrypt:function(a,b,c,d){var e=sjcl.json,f=e.ja.apply(e,arguments);return e.encode(f)},ia:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.g(e.g(e.g({},e.defaults),b),c,!0);var f,g;f=b.adata;\"string\"===typeof b.salt&&(b.salt=sjcl.codec.base64.toBits(b.salt));\"string\"===typeof b.iv&&(b.iv=sjcl.codec.base64.toBits(b.iv));if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||\"string\"===\ntypeof a&&100>=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4<b.iv.length)throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");\"string\"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,b),a=g.key.slice(0,b.ks/32),b.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.secretKey&&(a=a.unkem(sjcl.codec.base64.toBits(b.kemtag)).slice(0,b.ks/32));\"string\"===typeof f&&(f=sjcl.codec.utf8String.toBits(f));g=new sjcl.cipher[b.cipher](a);f=\"ccm\"===\nb.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&b.ct instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.decrypt(g,b.ct,b.iv,b.tag,f,b.ts):sjcl.mode[b.mode].decrypt(g,b.ct,b.iv,f,b.ts);e.g(d,b);d.key=a;return 1===c.raw?f:sjcl.codec.utf8String.fromBits(f)},decrypt:function(a,b,c,d){var e=sjcl.json;return e.ia(a,e.decode(b),c,d)},encode:function(a){var b,c=\"{\",d=\"\";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid(\"json encode: invalid property name\");c+=d+'\"'+\nb+'\":';d=\",\";switch(typeof a[b]){case \"number\":case \"boolean\":c+=a[b];break;case \"string\":c+='\"'+escape(a[b])+'\"';break;case \"object\":c+='\"'+sjcl.codec.base64.fromBits(a[b],0)+'\"';break;default:throw new sjcl.exception.bug(\"json encode: unsupported type\");}}return c+\"}\"},decode:function(a){a=a.replace(/\\s/g,\"\");if(!a.match(/^\\{.*\\}$/))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");a=a.replace(/^\\{|\\}$/g,\"\").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^\\s*(?:([\"']?)([a-z][a-z0-9]*)\\1)\\s*:\\s*(?:(-?\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\"|(true|false))$/i)))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");\nnull!=d[3]?b[d[2]]=parseInt(d[3],10):null!=d[4]?b[d[2]]=d[2].match(/^(ct|adata|salt|iv)$/)?sjcl.codec.base64.toBits(d[4]):unescape(d[4]):null!=d[5]&&(b[d[2]]=\"true\"===d[5])}return b},g:function(a,b,c){void 0===a&&(a={});if(void 0===b)return a;for(var d in b)if(b.hasOwnProperty(d)){if(c&&void 0!==a[d]&&a[d]!==b[d])throw new sjcl.exception.invalid(\"required parameter overridden\");a[d]=b[d]}return a},sa:function(a,b){var c={},d;for(d in a)a.hasOwnProperty(d)&&a[d]!==b[d]&&(c[d]=a[d]);return c},ra:function(a,\nb){var c={},d;for(d=0;d<b.length;d++)void 0!==a[b[d]]&&(c[b[d]]=a[b[d]]);return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.pa={};sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.pa,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=void 0===b.salt?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};\n\"undefined\"!==typeof module&&module.exports&&(module.exports=sjcl);\"function\"===typeof define&&define([],function(){return sjcl});\n","import { StateObject } from \"../StateObject\";\nimport { TiddlerStore } from \"./TiddlerStore\";\nimport { resolve } from \"path\";\nimport { createWriteStream, readFileSync } from \"fs\";\nimport sjcl from \"sjcl\";\nimport { createHash } from \"crypto\";\nimport { TiddlerFields } from \"../services/attachments\";\nimport { UserError } from \"../utils\";\n\n\nexport class TiddlerServer extends TiddlerStore {\n\n constructor(\n protected state: StateObject,\n prisma: PrismaTxnClient\n ) {\n const router = state.router;\n super(\n router.fieldModules,\n new router.AttachmentService(router.siteConfig, prisma),\n router.siteConfig,\n prisma\n );\n }\n\n private toTiddlyWebJson(info: { bag_name: string; tiddler_id: number; tiddler: TiddlerFields }) {\n const output: any = { fields: {} };\n const knownFields = [\n \"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n ];\n\n each(info.tiddler, (field, name) => {\n if (knownFields.indexOf(name) !== -1) {\n output[name] = field;\n } else {\n output.fields[name] = field;\n }\n });\n output.type = info.tiddler.type || \"text/vnd.tiddlywiki\";\n\n output.revision = `${info.tiddler_id}`;\n output.bag = info.bag_name;\n return output;\n }\n\n /** If neither bag_name nor bag_id are specified, the fallback will be sent. */\n async sendBagTiddler({ state, bag_name, bag_id, title }: {\n state: StateObject;\n bag_name?: PrismaField<\"Bags\", \"bag_name\">;\n bag_id?: PrismaField<\"Bags\", \"bag_id\">;\n title: PrismaField<\"Tiddlers\", \"title\">;\n }) {\n\n const tiddlerInfo = (bag_id || bag_name) && await this.getBagTiddler({ bag_name, bag_id, title });\n\n if (!tiddlerInfo || !tiddlerInfo.tiddler) {\n // Redirect to fallback URL if tiddler not found\n const fallback = state.queryParams.fallback?.[0];\n if (fallback) {\n // await state.pushStream(fallback);\n return state.redirect(fallback);\n } else {\n return state.sendEmpty(404, { \"x-reason\": \"tiddler not found (no fallback)\" });\n }\n }\n\n\n // If application/json is requested then this is an API request, and gets the response in JSON\n if (state.headers.accept && state.headers.accept.indexOf(\"application/json\") !== -1) {\n\n return state.sendResponse(200, {\n \"Etag\": state.makeTiddlerEtag(tiddlerInfo),\n \"Content-Type\": \"application/json\",\n \"X-Revision-Number\": tiddlerInfo.tiddler_id,\n \"X-Bag-Name\": tiddlerInfo.bag_name,\n }, JSON.stringify(tiddlerInfo.tiddler), \"utf8\");\n\n } else {\n\n // This is not a JSON API request, we should return the raw tiddler content\n const result = await this.getBagTiddlerStream(title, tiddlerInfo.bag_name);\n if (!result || !result.stream) return state.sendEmpty(404);\n\n return state.sendStream(200, {\n \"Etag\": state.makeTiddlerEtag(result),\n \"Content-Type\": result.type\n }, result.stream);\n\n }\n\n }\n\n\n /**\n * Process an incoming new multipart/form-data stream. Options include:\n *\n * @param {Object} options\n * @param {SqlTiddlerStore} options.store\n * @param {ServerState} options.state\n * @param {ServerResponse} options.response\n * @param {string} options.bag_name\n * @param {function} options.callback\n */\n async processIncomingStream(\n bag_name: PrismaField<\"Bags\", \"bag_name\">\n ): Promise<string[]> {\n\n // Process the incoming data\n const inboxName = new Date().toISOString().replace(/:/g, \"-\");\n const inboxPath = resolve(this.storePath, \"inbox\", inboxName);\n createDirectory(inboxPath);\n let fileStream: { write: (arg0: any) => void; end: () => void; } | null = null; // Current file being written\n let hash: { update: (arg0: any) => void; finalize: () => any; } | null = null; // Accumulating hash of current part\n let length = 0; // Accumulating length of current part\n const parts: any[] = []; // Array of {name:, headers:, value:, hash:} and/or {name:, filename:, headers:, inboxFilename:, hash:} \n\n await this.state.readMultipartData({\n cbPartStart: function (headers, name, filename) {\n const part: any = {\n name: name,\n filename: filename,\n headers: headers\n };\n if (filename) {\n const inboxFilename = (parts.length).toString();\n part.inboxFilename = resolve(inboxPath, inboxFilename);\n fileStream = createWriteStream(part.inboxFilename);\n } else {\n part.value = \"\";\n }\n hash = new sjcl.hash.sha256();\n length = 0;\n parts.push(part);\n },\n cbPartChunk: function (chunk) {\n if (fileStream) {\n fileStream.write(chunk);\n } else {\n parts[parts.length - 1].value += chunk;\n }\n length = length + chunk.length;\n hash!.update(chunk);\n },\n cbPartEnd: function () {\n if (fileStream) {\n fileStream.end();\n }\n fileStream = null;\n parts[parts.length - 1].hash = sjcl.codec.hex.fromBits(hash!.finalize()).slice(0, 64).toString();\n hash = null;\n },\n // if an error is given here, it will also be thrown in the promise\n cbFinished: (err) => { }\n });\n\n const partFile = parts.find(part => part.name === \"file-to-upload\" && !!part.filename);\n if (!partFile) {\n throw await this.state.sendSimple(400, \"Missing file to upload\");\n }\n\n const type = partFile.headers[\"content-type\"];\n const tiddlerFields = { title: partFile.filename, type };\n\n for (const part of parts) {\n const tiddlerFieldPrefix = \"tiddler-field-\";\n if (part.name.startsWith(tiddlerFieldPrefix)) {\n (tiddlerFields as any)[part.name.slice(tiddlerFieldPrefix.length)] = part.value.trim();\n }\n }\n\n await this.saveBagTiddlerWithAttachment(tiddlerFields, bag_name, {\n filepath: partFile.inboxFilename,\n type: type,\n hash: partFile.hash\n } as any).then(() => {\n deleteDirectory(inboxPath);\n return [tiddlerFields.title];\n }, err => {\n throw err;\n });\n\n return parts;\n }\n\n async getRecipeTiddlers(recipe_name: PrismaField<\"Recipes\", \"recipe_name\">) {\n // Get the recipe name from the parameters\n const bagTiddlers = await this.getRecipeTiddlersByBag(recipe_name);\n\n bagTiddlers.sort((a, b) => a.position - b.position);\n\n return Array.from(new Map(bagTiddlers.flatMap(bag =>\n bag.tiddlers.map(tiddler => [tiddler.title, {\n title: tiddler.title,\n tiddler_id: tiddler.tiddler_id,\n is_deleted: tiddler.is_deleted,\n is_plugin: false,\n bag_name: bag.bag_name,\n bag_id: bag.bag_id\n }])\n )).values());\n\n // SELECT title, tiddler_id, is_deleted, bag_name\n // FROM (\n // SELECT t.title, t.tiddler_id, t.is_deleted, b.bag_name, MAX(rb.position) AS position\n // FROM bags AS b\n // INNER JOIN recipe_bags AS rb ON b.bag_id = rb.bag_id\n // INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id\n // WHERE rb.recipe_id = $recipe_id\n // ${options.include_deleted ? \"\" : \"AND t.is_deleted = FALSE\"}\n // ${options.last_known_tiddler_id ? \"AND tiddler_id > $last_known_tiddler_id\" : \"\"}\n // GROUP BY t.title\n // ORDER BY t.title, tiddler_id DESC\n // ${options.limit ? \"LIMIT $limit\" : \"\"}\n // )\n\n }\n async serveIndexFile(recipe_name: PrismaField<\"Recipes\", \"recipe_name\">) {\n const state = this.state;\n\n // Check request is valid\n if (!recipe_name) {\n return state.sendEmpty(404);\n }\n\n // const bagTiddlers = await this.getRecipeTiddlersByBag(recipe_name);\n const bags = await this.prisma.recipe_bags.findMany({\n where: { recipe: { recipe_name } },\n select: {\n position: true,\n bag: {\n select: {\n bag_id: true,\n bag_name: true,\n is_plugin: true,\n }\n }\n },\n });\n\n\n\n const lastTiddlerId = await this.prisma.tiddlers.aggregate({\n _max: { tiddler_id: true },\n where: { bag_id: { in: bags.map(e => e.bag.bag_id) } }\n });\n\n const template = readFileSync(resolve(this.state.config.wikiPath, \"tiddlywiki5.html\"), \"utf8\");\n const hash = createHash('md5');\n // Put everything into the hash that could change and invalidate the data that\n // the browser already stored.\n // the rendered template\n hash.update(template);\n // the bag names\n hash.update(bags.map(e => e.bag.bag_name).join(\",\"));\n // the latest tiddler id in those bags\n hash.update(`${lastTiddlerId._max.tiddler_id}`);\n const contentDigest = hash.digest(\"hex\");\n\n if ('\"' + contentDigest + '\"' === state.headers[\"if-none-match\"])\n return state.sendEmpty(304, { \"x-reason\": \"if-none-match\" });\n\n state.writeHead(200, {\n \"Content-Type\": \"text/html\",\n \"Etag\": '\"' + contentDigest + '\"',\n // TODO: WHY IS THIS DISABLED???\n \"Cache-Control\": \"max-age=1000, must-revalidate\",\n });\n\n if (state.method === \"HEAD\") return state.end();\n // Get the tiddlers in the recipe\n // Render the template\n\n // it is recommended to add <link rel=\"preload\" to the header since these cannot be deferred\n // <link rel=\"preload\" href=\"main.js\" as=\"script\" />\n\n // and recommended to specify the hashes for each file in their script tag. \n // <script\n // src=\"https://example.com/example-framework.js\"\n // integrity=\"sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC\"\n // crossorigin=\"anonymous\"></script>\n\n // this needs to be added to the tiddlywiki file before the script tags\n // $tw = Object.create(null);\n // $tw.preloadTiddlers = $tw.preloadTiddlers || [];\n // $tw.preloadTiddler = function(fields) {\n // $tw.preloadTiddlers.push(fields);\n // };\n\n\n // Splice in our tiddlers\n var marker = `<` + `script class=\"tiddlywiki-tiddler-store\" type=\"application/json\">[`,\n markerPos = template.indexOf(marker);\n if (markerPos === -1) {\n throw new Error(\"Cannot find tiddler store in template\");\n }\n /**\n * \n * @param {Record<string, string>} tiddlerFields \n */\n function writeTiddler(tiddlerFields: Record<string, string>) {\n state.write(JSON.stringify(tiddlerFields).replace(/</g, \"\\\\u003c\"));\n state.write(\",\\n\");\n }\n state.write(template.substring(0, markerPos));\n if (state.config.enablePluginCache) {\n\n const preloadMarkup = `\n ${\"<\"}script>\n window.$tw = window.$tw || Object.create(null);\n $tw.preloadTiddlers = $tw.preloadTiddlers || [];\n $tw.preloadTiddler = function(fields) {\n $tw.preloadTiddlers.push(fields);\n };\n ${\"</\"}script>\n `;\n\n state.write(preloadMarkup);\n const pluginMarkup = (plugin: string, hash: string) => `\n <script\n src=\"${state.config.pathPrefix}/$cache/${plugin}/plugin.js\"\n integrity=\"${hash}\"\n crossorigin=\"anonymous\"></script>\n `;\n\n const plugins = [...new Set([\n \"$:/core\",\n \"$:/plugins/tiddlywiki/multiwikiclient\",\n \"$:/plugins/tiddlywiki/tiddlyweb\",\n \"$:/themes/tiddlywiki/snowwhite\",\n \"$:/themes/tiddlywiki/vanilla\",\n ...bags.map(e => e.bag.bag_name)\n ]).values()]\n .filter(e => state.tiddlerCache.tiddlerFiles.has(e))\n .map(e => pluginMarkup(\n state.tiddlerCache.tiddlerFiles.get(e)!,\n state.tiddlerCache.tiddlerHashes.get(e)!\n ))\n state.write(plugins.join(\"\\n\"));\n }\n state.write(marker);\n\n const bagOrder = new Map(bags.map(e => [e.bag.bag_id, e.position]));\n const bagIDs = bags.filter(e => !state.tiddlerCache.tiddlerFiles.has(e.bag.bag_name)).map(e => e.bag.bag_id)\n await this.serveStoreTiddlers(bagIDs, bagOrder, writeTiddler);\n\n writeTiddler({\n title: \"$:/config/multiwikiclient/recipe\",\n text: recipe_name\n });\n // get the latest tiddler id in the database. It doesn't have to be filtered.\n\n writeTiddler({\n title: \"$:/state/multiwikiclient/recipe/last_tiddler_id\",\n text: (lastTiddlerId._max.tiddler_id ?? 0).toString()\n });\n\n writeTiddler({\n title: \"$:/config/multiwikiclient/host\",\n text: \"$protocol$//$host$\" + this.state.config.pathPrefix + \"/\",\n });\n\n state.write(template.substring(markerPos + marker.length))\n // Finish response\n return state.end();\n }\n\n\n private async serveStoreTiddlers(\n bagKeys: number[],\n bagOrder: Map<number, number>,\n writeTiddler: (tiddlerFields: Record<string, string>) => void\n ) {\n\n const bagTiddlers = await this.prisma.bags.findMany({\n where: { bag_id: { in: bagKeys } },\n select: {\n bag_id: true,\n bag_name: true,\n is_plugin: true,\n description: true,\n owner_id: true,\n tiddlers: {\n select: {\n title: true,\n tiddler_id: true,\n is_deleted: true,\n attachment_hash: true,\n fields: true,\n },\n where: {\n is_deleted: false,\n },\n }\n }\n });\n\n\n if (!bagTiddlers.every(e => bagOrder.has(e.bag_id))) {\n console.log(bagTiddlers.map(e => e.bag_id));\n console.log(bagOrder);\n throw new Error(\"Bags missing from bag order\");\n }\n bagTiddlers.sort((a, b) => bagOrder.get(b.bag_id)! - bagOrder.get(a.bag_id)!);\n // this determines which bag takes precedence\n const recipeTiddlers = Array.from(new Map(bagTiddlers.flatMap(bag => bag.tiddlers.map(tiddler => [tiddler.title, { bag, tiddler }])\n )).values());\n\n const\n bagInfo: Record<string, string> = {}, revisionInfo: Record<string, string> = {};\n\n for (const recipeTiddlerInfo of recipeTiddlers) {\n // var result = await this.getRecipeTiddler(recipeTiddlerInfo.title, recipe_name);\n // const { title, bag_id, tiddler_id } = recipeTiddlerInfo;\n // var result = await this.getBagTiddler({ title, bag_id });\n const { title, tiddler_id, attachment_hash, fields } = recipeTiddlerInfo.tiddler;\n const { bag_name } = recipeTiddlerInfo.bag;\n\n const tiddler = Object.fromEntries([\n ...fields.map(e => [e.field_name, e.field_value] as const),\n [\"title\", title]\n ]) as TiddlerFields;\n\n const tiddler2 = this.attachService.processOutgoingTiddler({\n tiddler, tiddler_id, attachment_hash, bag_name\n });\n\n bagInfo[title] = bag_name;\n revisionInfo[title] = tiddler_id.toString();\n writeTiddler(tiddler2);\n }\n\n writeTiddler({\n title: \"$:/state/multiwikiclient/tiddlers/bag\",\n text: JSON.stringify(bagInfo),\n type: \"application/json\"\n });\n writeTiddler({\n title: \"$:/state/multiwikiclient/tiddlers/revision\",\n text: JSON.stringify(revisionInfo),\n type: \"application/json\"\n });\n }\n}\n","import { StateObject } from \"../../StateObject\";\nimport { STREAM_ENDED } from \"../../streamer\";\nimport { tryParseJSON, ZodAssert as zodAssert } from \"../../utils\";\nimport { registerZodRoutes, zodRoute, RouterKeyMap, RouterRouteMap } from \"../router\";\nimport { TiddlerServer } from \"../bag-file-server\";\n\n\nexport const TiddlerKeyMap: RouterKeyMap<TiddlerRouter, true> = {\n handleCreateRecipeTiddler: true,\n handleDeleteRecipeTiddler: true,\n handleGetBagTiddler: true,\n handleGetBagTiddlerBlob: true,\n handleGetRecipeStatus: true,\n handleGetRecipeTiddler: true,\n handleListRecipeTiddlers: true,\n handleSaveRecipeTiddler: true,\n handleGetWikiIndex: true,\n}\n\nexport type TiddlerManagerMap = RouterRouteMap<TiddlerRouter>;\n\nexport class TiddlerRouter {\n static defineRoutes = (root: rootRoute) => {\n registerZodRoutes(root, new TiddlerRouter(), Object.keys(TiddlerKeyMap));\n }\n\n handleGetRecipeStatus = zodRoute(\n [\"GET\", \"HEAD\"],\n \"/recipes/:recipe_name/status\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n }),\n \"ignore\",\n z => z.undefined(),\n async (state) => {\n\n const { recipe_name } = state.pathParams;\n\n const { recipe, canRead, canWrite } = await state.getRecipeACL(recipe_name, true);\n\n if (!recipe) throw state.sendEmpty(404, { \"x-reason\": \"recipe not found\" });\n if (!canRead) throw state.sendEmpty(403, { \"x-reason\": \"read access denied\" });\n\n const { isAdmin, user_id, username } = state.user;\n\n return {\n isAdmin,\n user_id,\n username,\n isLoggedIn: state.user.isLoggedIn,\n isReadOnly: !canWrite,\n allowAnonReads: state.config.allowAnonReads,\n allowAnonWrites: state.config.allowAnonWrites,\n };\n }\n );\n\n handleGetRecipeTiddler = zodRoute(\n [\"GET\", \"HEAD\"],\n \"/recipes/:recipe_name/tiddlers/:title\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n title: z.prismaField(\"Tiddlers\", \"title\", \"string\"),\n }),\n \"ignore\",\n z => z.undefined(),\n async (state) => {\n const { recipe_name, title } = state.pathParams;\n\n await state.assertRecipeACL(recipe_name, false);\n\n throw await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n const bag = await server.getRecipeBagWithTiddler({ recipe_name, title });\n return server.sendBagTiddler({ state, bag_id: bag?.bag_id, title });\n });\n\n }\n )\n\n handleGetBagTiddler = zodRoute(\n [\"GET\", \"HEAD\"],\n \"/bags/:bag_name/tiddlers/:title\",\n z => ({\n bag_name: z.prismaField(\"Bags\", \"bag_name\", \"string\"),\n title: z.prismaField(\"Tiddlers\", \"title\", \"string\"),\n }),\n \"ignore\",\n z => z.undefined(),\n async (state) => {\n\n await state.assertBagACL(state.pathParams.bag_name, false);\n\n throw await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n // return await server.getBagTiddler(state.pathParams);\n return server.sendBagTiddler({ state, ...state.pathParams });\n });\n\n // return this.sendTiddlerInfo(state, tiddlerInfo);\n\n });\n\n handleGetBagTiddlerBlob = zodRoute(\n [\"GET\", \"HEAD\"],\n \"/bags/:bag_name/tiddlers/:title/blob\",\n z => ({\n bag_name: z.prismaField(\"Bags\", \"bag_name\", \"string\"),\n title: z.prismaField(\"Tiddlers\", \"title\", \"string\"),\n }),\n \"ignore\",\n z => z.undefined(),\n async (state) => {\n const { bag_name, title } = state.pathParams;\n\n await state.assertBagACL(bag_name, false);\n\n const result = await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n return await server.getBagTiddlerStream(title, bag_name);\n });\n\n if (!result) throw state.sendEmpty(404, { \"x-reason\": \"no result\" });\n\n throw state.sendStream(200, {\n Etag: state.makeTiddlerEtag(result),\n \"Content-Type\": result.type\n }, result.stream);\n });\n\n handleListRecipeTiddlers = zodRoute(\n [\"GET\", \"HEAD\"],\n \"/recipes/:recipe_name/tiddlers.json\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n }),\n \"ignore\",\n z => z.undefined(),\n async (state) => {\n zodAssert.queryParams(state, z => ({\n include_deleted: z.string().array().optional(),\n last_known_tiddler_id: z.string().array().optional(),\n }));\n\n const { recipe_name } = state.pathParams;\n const include_deleted = state.queryParams.include_deleted?.[0] === \"true\";\n const last_known_tiddler_id = +(state.queryParams.last_known_tiddler_id?.[0] ?? 0) || undefined;\n\n await state.assertRecipeACL(recipe_name, false);\n\n const result = await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n const options = { include_deleted, last_known_tiddler_id };\n let result = await server.getRecipeTiddlers(recipe_name);\n return result\n .filter(tiddler => options.include_deleted || !tiddler.is_deleted)\n .filter(tiddler => !options.last_known_tiddler_id || tiddler.tiddler_id > options.last_known_tiddler_id);\n });\n return result;\n }\n )\n\n parseFields(input: string, ctype: string | undefined) {\n\n if (ctype?.startsWith(\"application/json\"))\n return tryParseJSON<any>(input);\n\n if (ctype?.startsWith(\"application/x-mws-tiddler\")) {\n //https://jsperf.app/mukuro\n // for a big text field (100k random characters)\n // splitting the string is 1000x faster!\n // but I don't really trust getFieldStringBlock \n // because it doesn't check for fields with colon names\n\n const headerEnd = input.indexOf(\"\\n\\n\");\n if (headerEnd === -1) return tryParseJSON<any>(input);\n const header = input.slice(0, headerEnd);\n const body = input.slice(headerEnd + 2);\n\n const fields = tryParseJSON<any>(header);\n if (!fields) return undefined;\n fields.text = body;\n return fields;\n }\n }\n\n handleSaveRecipeTiddler = zodRoute(\n [\"PUT\"],\n \"/recipes/:recipe_name/tiddlers/:title\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n title: z.prismaField(\"Tiddlers\", \"title\", \"string\"),\n }),\n \"string\",\n z => z.string(),\n // z => z.object({\n // title: z.prismaField(\"Tiddlers\", \"title\", \"string\", false),\n // }).and(z.record(z.string())),\n async (state) => {\n\n const { recipe_name } = state.pathParams;\n\n await state.assertRecipeACL(recipe_name, true);\n\n const fields = this.parseFields(state.data, state.headers[\"content-type\"]);\n\n if (fields === undefined) throw state.sendEmpty(400, { \"x-reason\": \"PUT tiddler expects a valid json or x-mws-tiddler body\" })\n\n const { bag_name, tiddler_id } = await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n return await server.saveRecipeTiddler(fields, state.pathParams.recipe_name);\n });\n\n return { bag_name, tiddler_id };\n\n });\n\n\n handleDeleteRecipeTiddler = zodRoute(\n [\"DELETE\"],\n \"/recipes/:recipe_name/tiddlers/:title\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n title: z.prismaField(\"Tiddlers\", \"title\", \"string\"),\n }),\n \"json\",\n z => z.undefined(),\n async (state) => {\n\n const { recipe_name, title } = state.pathParams;\n if (!recipe_name || !title) throw state.sendEmpty(404, { \"x-reason\": \"bag_name or title not found\" });\n\n await state.assertRecipeACL(recipe_name, true);\n\n const { bag_name, tiddler_id } = await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n return await server.deleteRecipeTiddler(recipe_name, title);\n });\n\n return { bag_name, tiddler_id };\n\n });\n\n // this is not used by the sync adaptor. I'm not sure what uses it.\n handleCreateRecipeTiddler = zodRoute(\n [\"POST\"],\n \"/recipes/:recipe_name/tiddlers\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n }),\n \"json\",\n z => z.object({\n title: z.prismaField(\"Tiddlers\", \"title\", \"string\", false),\n }).and(z.record(z.string())),\n async (state) => {\n\n await state.assertRecipeACL(state.pathParams.recipe_name, true);\n\n const recipe_name = state.pathParams.recipe_name;\n\n return await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n const { bag_name } = await server.getRecipeWritableBag(recipe_name) ?? {};\n if (!bag_name) throw state.sendEmpty(404, { \"x-reason\": \"bag not found\" });\n return { bag_name, results: await server.processIncomingStream(bag_name) };\n });\n\n });\n\n handleGetWikiIndex = zodRoute(\n [\"GET\", \"HEAD\"],\n \"/wiki/:recipe_name\",\n z => ({\n recipe_name: z.prismaField(\"Recipes\", \"recipe_name\", \"string\"),\n }),\n \"ignore\",\n z => z.undefined(),\n async (state) => {\n await state.assertRecipeACL(state.pathParams.recipe_name, false);\n\n await state.$transaction(async prisma => {\n const server = new TiddlerServer(state, prisma);\n await server.serveIndexFile(state.pathParams.recipe_name);\n });\n\n throw STREAM_ENDED;\n });\n\n private sendTiddlerInfo = async (\n state: StateObject,\n tiddlerInfo: Awaited<ReturnType<TiddlerServer[\"getBagTiddler\"]>>\n ) => {\n\n zodAssert.queryParams(state, z => ({\n fallback: z.array(z.string()).optional()\n }));\n // fallbacks are kind of slow, I'm not sure if this is a good idea\n if (!tiddlerInfo || !tiddlerInfo.tiddler) {\n // Redirect to fallback URL if tiddler not found\n const fallback = state.queryParams.fallback?.[0];\n if (fallback) {\n // await state.pushStream(fallback);\n throw state.redirect(fallback);\n } else {\n throw state.sendEmpty(404, { \"x-reason\": \"tiddler not found (no fallback)\" });\n }\n }\n\n return tiddlerInfo;\n }\n\n\n}\n","import { rootRoute, SiteConfig } from \"./router\";\nimport { ZodAssert as zodAssert } from \"../utils\";\nimport { TiddlyWiki, TW } from \"tiddlywiki\";\nimport { STREAM_ENDED } from \"../streamer\";\nimport { basename } from \"path\";\nimport EventEmitter from \"events\";\n\n/**\n * \n * @param rootRoute\n * @param mountPath start with a slash and end without a slash\n * @param singleFile serve the page url without a trailing slash\n * (as though it is a file rather than the implied index of a folder)\n */\nexport function DocsRoute(rootRoute: rootRoute, mountPath: string, singleFile: boolean) {\n const $tw = TiddlyWiki();\n const last = basename(mountPath);\n\n $tw.preloadTiddler({\n title: \"$:/config/tiddlyweb/host\",\n // if the page url doesn't end with a slash, we have to include the basename here\n text: singleFile ? last + \"/\" : \"\",\n });\n // tiddlywiki [+<pluginname> | ++<pluginpath>] [<wikipath>] ...[--command ...args]\n $tw.boot.argv = [\n \"+plugins/tiddlywiki/tiddlyweb\",\n \"+plugins/tiddlywiki/filesystem\",\n // relative to the cwd\n \"./editions/mws-docs\",\n ];\n\n const hooks = new EventEmitter();\n\n // Boot the TW5 app\n $tw.boot.boot(() => {\n const Server = $tw.modules.execute(\"$:/core/modules/server/server.js\", \"tw-test.ts\").Server;\n const twserver = new Server({\n wiki: $tw.wiki,\n variables: {\n // path prefix gets set per-request\n \"path-prefix\": \"\",\n \"root-tiddler\": \"$:/core/save/all\",\n },\n routes: [],\n });\n $tw.hooks.invokeHook(\"th-server-command-post-start\", twserver, null, \"mws\");\n hooks.on(\"req\", (req, res, pathPrefix) => {\n twserver.requestHandler(req, res, { pathPrefix } as any);\n })\n });\n\n rootRoute.defineRoute({\n method: [\"OPTIONS\", \"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\"],\n bodyFormat: \"stream\",\n path: new RegExp(\"^\" + mountPath + \"(/|$)\"),\n pathParams: []\n }, async (state) => {\n\n // eventually this will be optional because either method could be desired\n // especially when importing from an existing single-file folder structure\n if (singleFile && state.urlInfo.pathname === mountPath + \"/\")\n throw state.redirect(mountPath);\n if (!singleFile && state.urlInfo.pathname === mountPath)\n throw state.redirect(mountPath + \"/\");\n\n // the streamer does NOT remove state.pathPrefix from streamer.req.url, only from streamer.url\n // @ts-expect-error because streamer is private\n const { req, res } = state.streamer;\n // regardless of singleFile, this has to end with a slash\n if (req.url === state.pathPrefix + mountPath)\n req.url = state.pathPrefix + mountPath + \"/\";\n\n const prom = new Promise((r, c) => res.on(\"finish\", r).on(\"error\", c));\n hooks.emit(\"req\", req, res, state.pathPrefix + mountPath);\n return prom;\n });\n}\n\n","import { readdirSync, statSync } from \"fs\";\nimport { rootRoute, SiteConfig } from \"./router\";\nimport { ZodAssert } from \"../utils\";\nimport { Prisma, PrismaClient } from \"@prisma/client\";\nimport { ManagerRoutes } from \"./managers\";\nimport { TiddlerRouter } from \"./managers/router-tiddlers\";\nimport { DocsRoute } from \"./tw-routes\";\n\ndeclare global {\n const ENABLE_UNSAFE_PRISMA_ROUTE: any;\n const ENABLE_DOCS_ROUTE: any;\n}\n\nexport default async function RootRoute(root: rootRoute, config: SiteConfig) {\n // we can directly hand requests off to loaded tiddlywiki datafolders, \n // but this takes significantly more memory than normal MWS.\n if (process.env.ENABLE_DOCS_ROUTE) DocsRoute(root, \"/mws-docs\", false);\n TiddlerRouter.defineRoutes(root);\n ManagerRoutes(root, config);\n if (process.env.ENABLE_UNSAFE_PRISMA_ROUTE)\n root.defineRoute({\n method: [\"POST\"],\n path: /^\\/prisma$/,\n bodyFormat: \"json\",\n }, async state => {\n ZodAssert.data(state, z => z.object({\n table: z.string(),\n action: z.string(),\n arg: z.any(),\n }));\n return await state.$transaction(async prisma => {\n // DEV: this just lets the client directly call the database. \n // TODO: it's just for dev purposes and will be removed later. \n // DANGER: it circumvents all security and can totally rewrite the ACL.\n const p: any = prisma;\n const table = p[state.data.table];\n if (!table) throw new Error(`No such table`);\n const fn = table[state.data.action];\n if (!fn) throw new Error(`No such table or action`);\n console.log(state.data.arg);\n return state.sendJSON(200, await fn.call(table, state.data.arg));\n });\n });\n\n\n\n}\nasync function importDir(root: rootRoute, folder: string) {\n await Promise.all(readdirSync(`src/routes/${folder}`).map(async (item) => {\n const stat = statSync(`src/routes/${folder}/${item}`);\n if (stat.isFile()) {\n const e = await import(`./${folder}/${item}`);\n if (!e.route) throw new Error(`No route defined in ${item}`);\n e.route(root, ZodAssert);\n } else if (stat.isDirectory()) {\n await importDir(root, `${folder}/${item}`);\n }\n }));\n}\n\nexport async function importEsbuild(root: rootRoute) {\n // \"build\": \"tsc -b; esbuild main=src/main.tsx \n // --outdir=public --bundle --target=es2020 \n // --platform=browser --jsx=automatic\"\n\n\n root.defineRoute({\n method: ['GET'],\n path: /^\\/.*/,\n bodyFormat: \"stream\",\n }, async state => {\n await state.sendDevServer();\n });\n}\n\n\nclass ProxyPromise {\n static getErrorStack(t: ProxyPromise) { return t.#error.stack; }\n action: any;\n table: any;\n arg: any;\n #error = new Error(\"An error occured for this request\");\n constructor({ action, table, arg }: Omit<ProxyPromise, \"#error\">) {\n this.action = action;\n this.table = table;\n this.arg = arg;\n Object.defineProperty(this, \"toJSON\", {\n configurable: true,\n enumerable: true,\n value: () => ({\n action: this.action,\n table: this.table,\n arg: this.arg,\n dbnulls: this.arg.data && findValueInObject(this.arg.data, e => e === Prisma.DbNull),\n jsnulls: this.arg.data && findValueInObject(this.arg.data, e => e === Prisma.JsonNull),\n })\n })\n }\n}\n\nfunction findValueInObject(val: any, predicate: (val: any) => boolean, keys: string[] = [], paths: string[] = []): any {\n if (predicate(val)) {\n paths.push(keys.join(\"/\"));\n return paths;\n }\n if (val && typeof val === \"object\") {\n for (const key of Object.keys(val)) {\n if (!val.hasOwnProperty(key)) continue;\n findValueInObject(val[key], predicate, [...keys, key], paths);\n }\n }\n console.log(paths, keys);\n return paths;\n}\n\nfunction capitalize<T extends string>(table: T): Capitalize<T> {\n return table.slice(0, 1).toUpperCase() + table.slice(1) as any;\n}\n\n\nconst argproxy: {\n [Table in keyof PrismaClient]: {\n [Action in keyof PrismaClient[Table]]:\n PrismaClient[Table][Action] extends (...args: any) => any\n ? <T extends Parameters<PrismaClient[Table][Action]>[0]>(arg: T) => {\n table: Table,\n action: Action,\n arg: T,\n result: Awaited<ReturnType<PrismaClient[Table][Action]>>,\n }\n : never\n }\n} = (() => new Proxy<any>({}, {\n get(target: any, table: any) {\n return target[table] = target[table] || new Proxy<any>({}, {\n get(target: any, action: any) {\n return target[action] = target[action] || ((arg: any) => {\n return new ProxyPromise({ action, table: capitalize(table) as any, arg });\n })\n },\n })\n },\n}))();","\nimport { request } from \"http\";\nimport { join, resolve } from \"path\";\nimport { StateObject } from \"./StateObject\";\nimport { dist_resolve } from \"./utils\";\nimport { createHash } from \"crypto\";\nimport { STREAM_ENDED } from \"./streamer\";\nimport { readFile } from \"fs/promises\";\nimport { writeFileSync } from \"fs\";\n\nexport async function setupDevServer<T extends StateObject>(\n enableDevServer: boolean,\n pathPrefix: string\n) {\n\n\n const index_file = Buffer.from(`\n<!DOCTYPE html>\n\n<head>\n <style>\n @media (prefers-color-scheme: dark) {\n html:not(.loaded) {\n background-color: #121212;\n }\n }\n\n @media (prefers-color-scheme: light) {\n html:not(.loaded) {\n background-color: #ffffff;\n }\n }\n </style>\n <base href=\"${pathPrefix}/\">\n <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n <link rel=\"stylesheet\" href=\"${pathPrefix}/main.css\" />\n</head>\n\n<body class=\"tc-body\">\n <div id=\"root\"></div>\n <script>window.pathPrefix = ${JSON.stringify(pathPrefix)};</script>\n <script type=\"module\" src=\"${pathPrefix}/main.js\"></script>\n</body>\n\n</html>\n`.trim(), \"utf8\");\n\n const index_hash = createHash(\"sha1\").update(index_file).digest().toString(\"base64\");\n\n\n const rootdir = dist_resolve('../react-user-mgmt');\n const index_placeholder = await readFile(join(rootdir, \"public/index.html\"), \"utf8\")\n\n if (!enableDevServer) {\n return async function sendProdServer(state: T) {\n const sendIndex = (): typeof STREAM_ENDED => state.sendBuffer(200, {\n \"content-type\": \"text/html\",\n \"content-length\": index_file.length,\n \"etag\": index_hash,\n }, index_file);\n\n // console.log(state.url);\n // console.log(rootdir);\n\n if (state.url === \"/\") return sendIndex();\n\n // use sendFile directly instead of having the dev server send it\n return state.sendFile(200, {}, {\n root: resolve(rootdir, \"public\"),\n reqpath: state.url,\n on404: async () => sendIndex()\n });\n };\n } else {\n const { ctx, port } = await esbuildStartup();\n\n return async function sendDevServer(state: T) {\n\n const sendIndex = (): typeof STREAM_ENDED => state.sendBuffer(200, {\n \"content-type\": \"text/html\",\n \"content-length\": index_file.length,\n \"etag\": index_hash,\n }, index_file);\n\n const proxyRes = await new Promise<import(\"http\").IncomingMessage>((resolve, reject) => {\n const headers = { ...state.headers };\n delete headers[\":method\"];\n delete headers[\":path\"];\n delete headers[\":authority\"];\n delete headers[\":scheme\"];\n headers.host = \"localhost\";\n const proxyReq = request({\n hostname: \"127.0.0.20\",\n port: port,\n path: state.url,\n method: state.method,\n headers,\n }, resolve);\n state.reader.pipe(proxyReq, { end: true });\n });\n\n const { statusCode, headers } = proxyRes;\n if (statusCode === 200\n && headers[\"content-type\"] === \"text/html; charset=utf-8\"\n && headers[\"content-length\"] === \"61\"\n ) {\n const indexCheck = await new Promise<Buffer>(resolve => {\n const chunks: Buffer[] = [];\n proxyRes.on(\"data\", chunk => { chunks.push(chunk); });\n proxyRes.on(\"end\", () => { resolve(Buffer.concat(chunks)) })\n });\n if (indexCheck.toString() === index_placeholder) return sendIndex();\n }\n if (statusCode === 404 || !statusCode) {\n proxyRes.resume();\n return state.sendBuffer(200, {\n \"content-type\": \"text/html\",\n \"content-length\": index_file.length,\n \"etag\": index_hash,\n }, index_file);\n } else {\n return state.sendStream(statusCode as number, headers, proxyRes);\n }\n\n };\n }\n}\n\nexport async function esbuildStartup() {\n\n const rootdir = dist_resolve('../react-user-mgmt');\n const esbuild = await import(\"esbuild\");\n\n // const rootdir = resolve(enableDevServer, 'react-user-mgmt');\n\n let ctx = await esbuild.context({\n entryPoints: [resolve(rootdir, 'src/main.tsx')],\n bundle: true,\n target: 'es2020',\n platform: 'browser',\n jsx: 'automatic',\n outdir: resolve(rootdir, 'public'),\n minify: true,\n sourcemap: true,\n metafile: true,\n splitting: true,\n format: \"esm\",\n });\n\n const { port } = await ctx.serve({\n servedir: resolve(rootdir, 'public'),\n host: \"127.0.0.20\"\n });\n\n const result = await ctx.rebuild();\n\n writeFileSync(resolve(rootdir, 'public/stats.json'), JSON.stringify(result.metafile));\n\n\n return { ctx, port, result, rootdir };\n}","import { ok } from \"assert\";\nimport { dist_resolve, truthy, ZodAssert } from \"../utils\";\nimport { Commander } from \"../commander\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\nimport { TW } from \"tiddlywiki\";\n\nexport async function startupCache(rootRoute: rootRoute, commander: Commander) {\n const $tw = commander.$tw;\n\n // we only need the client since we don't load plugins server-side\n // console.log(commander.siteConfig.enablePluginCache);\n\n const { tiddlerFiles, tiddlerHashes } = commander.siteConfig.enablePluginCache\n ? await importTW5(path.join($tw.boot.corePath, \"..\"), commander.cachePath, \"client\", $tw)\n : { tiddlerFiles: new Map(), tiddlerHashes: new Map() };\n\n rootRoute.defineRoute({\n method: [\"GET\", \"HEAD\"],\n path: /^\\/\\$cache\\/(.*)\\/plugin\\.js$/,\n bodyFormat: \"ignore\",\n pathParams: [\"plugin\"]\n }, async state => {\n ZodAssert.pathParams(state, z => ({\n plugin: z.string()\n }))\n // console.log(\"serving plugin\", state.pathParams.plugin)\n return state.sendFile(200, {}, {\n root: commander.cachePath,\n reqpath: state.pathParams.plugin + \"/plugin.js\"\n });\n\n })\n\n return { tiddlerFiles, tiddlerHashes };\n}\n\n\n\n\nasync function importTW5(twFolder: string, cacheFolder: string, type: string, $tw: TW) {\n\n\n const readLevel = (d: string) => {\n return (fs.readdirSync(path.join(twFolder, d)))\n .filter(e => !$tw.boot.excludeRegExp.test(e))\n .map(e => path.join(d, e));\n }\n\n const plugins = [\n ...[\n ...[\n 'plugins', 'themes'\n ].flatMap(readLevel),\n 'languages'\n ].flatMap(readLevel),\n 'core'\n ].map(e => {\n const oldPath = path.join(twFolder, e);\n const relativePluginPath = path.normalize(path.relative(twFolder, oldPath));\n return [oldPath, relativePluginPath] as const;\n });\n\n plugins.push([\n dist_resolve(\"../plugins/client\"),\n \"plugins/mws/client\"\n ] as const);\n\n // plugins.forEach(oldPath => {\n // console.log(oldPath);\n // const relativePluginPath = path.normalize(path.relative(twFolder, oldPath));\n // console.log(relativePluginPath);\n // const newPath = path.join(cacheFolder, relativePluginPath);\n // console.log(newPath);\n // console.log();\n // });\n\n\n // it is recommended to add <link rel=\"preload\" to the header since these cannot be deferred\n // <link rel=\"preload\" href=\"main.js\" as=\"script\" />\n\n // and recommended to specify the hashes for each file in their script tag. \n // <script\n // src=\"https://example.com/example-framework.js\"\n // integrity=\"sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC\"\n // crossorigin=\"anonymous\"></script>\n\n // this needs to be added to the tiddlywiki file before the script tags\n // $tw = Object.create(null);\n // $tw.preloadTiddlers = $tw.preloadTiddlers || [];\n // $tw.preloadTiddler = function(fields) {\n // $tw.preloadTiddlers.push(fields);\n // };\n\n const hashes: any = {};\n const tiddlerFiles = new Map<string, string>();\n const tiddlerHashes = new Map<string, string>();\n\n plugins.forEach(([oldPath, relativePluginPath]) => {\n const plugin = $tw.loadPluginFolder(oldPath);\n const newPath = path.join(cacheFolder, relativePluginPath);\n fs.mkdirSync(newPath, { recursive: true });\n if (plugin && plugin.title) {\n // need to compare sizes of various configurations\n plugin.text = JSON.stringify(JSON.parse(plugin.text as string));\n if (type === \"server\") {\n plugin.tiddlers = JSON.parse(plugin.text).tiddlers;\n delete plugin.text;\n fs.writeFileSync(path.join(newPath, \"plugin.info\"), JSON.stringify(plugin));\n } else if (type === \"client\") {\n let js = Buffer.from(`$tw.preloadTiddler(${JSON.stringify(plugin)});`, \"utf8\");\n let hash = crypto.createHash(\"sha384\").update(js).digest(\"base64\");\n fs.writeFileSync(path.join(newPath, \"plugin.js\"), js);\n tiddlerFiles.set(plugin.title, relativePluginPath);\n tiddlerHashes.set(plugin.title, \"sha384-\" + hash);\n }\n } else {\n console.log(\"Info: No plugin found at\", oldPath);\n }\n });\n\n fs.writeFileSync(path.join(cacheFolder, \"hashes.json\"), JSON.stringify(hashes, null, 2));\n\n return { tiddlerFiles, tiddlerHashes };\n\n}\n\n\nexport type CacheState = ART<typeof startupCache>;\n","import { STREAM_ENDED, Streamer, SYMBOL_IGNORE_ERROR } from \"../streamer\";\nimport { StateObject } from \"../StateObject\";\nimport RootRoute, { importEsbuild } from \".\";\nimport * as z from \"zod\";\nimport { createStrictAwaitProxy, JsonValue, truthy, Z2 } from \"../utils\";\nimport { Route, rootRoute, RouteOptAny, RouteMatch, } from \"../utils\";\nimport { MWSConfigConfig, SiteConfig } from \"../server\";\nimport { setupDevServer } from \"../setupDevServer\";\nimport { Commander } from \"../commander\";\nimport { CacheState, startupCache } from \"./cache\";\nimport * as http from \"http\";\nimport * as http2 from \"http2\";\n\n// this should have been in server\nexport { SiteConfig } from \"../server\";\n\nexport { RouteMatch, Route, rootRoute };\n\nexport const AllowedMethods = [...[\"GET\", \"HEAD\", \"OPTIONS\", \"POST\", \"PUT\", \"DELETE\"] as const];\nexport type AllowedMethod = typeof AllowedMethods[number];\n\nexport const BodyFormats = [\"stream\", \"string\", \"json\", \"buffer\", \"www-form-urlencoded\", \"www-form-urlencoded-urlsearchparams\", \"ignore\"] as const;\nexport type BodyFormat = typeof BodyFormats[number];\n\nexport const PermissionName = []\n\nconst zodTransformJSON = (arg: string, ctx: z.RefinementCtx) => {\n try {\n if (arg === \"\") return undefined;\n return JSON.parse(arg, (key, value) => {\n //https://github.com/fastify/secure-json-parse\n if (key === '__proto__')\n throw new Error('Invalid key: __proto__');\n if (key === 'constructor' && Object.prototype.hasOwnProperty.call(value, 'prototype'))\n throw new Error('Invalid key: constructor.prototype');\n return value;\n });\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: e instanceof Error ? e.message : `${e}`,\n fatal: true,\n });\n return z.NEVER;\n }\n};\n\n\nexport class Router {\n\n static async makeRouter(\n commander: Commander,\n enableDevServer: boolean\n ) {\n\n const sendDevServer = await setupDevServer(enableDevServer, commander.siteConfig.pathPrefix);\n\n const rootRoute = defineRoute(ROOT_ROUTE, {\n method: AllowedMethods,\n path: /^/,\n denyFinal: true,\n }, async (state: StateObject) => {\n state.sendDevServer = sendDevServer.bind(undefined, state);\n });\n\n await commander.SessionManager.defineRoutes(rootRoute);\n\n await RootRoute(rootRoute, commander.siteConfig);\n\n const cache = await startupCache(rootRoute, commander);\n\n await importEsbuild(rootRoute);\n\n return new Router(rootRoute, commander, cache);\n }\n\n\n\n enableBrowserCache: boolean = true;\n enableGzip: boolean = false;\n csrfDisable: boolean = false;\n\n siteConfig: SiteConfig;\n get pathPrefix() {\n return this.siteConfig.pathPrefix;\n }\n\n public engine: Commander[\"engine\"];\n private SessionManager: Commander[\"SessionManager\"];\n public PasswordService: Commander[\"PasswordService\"];\n\n versions;\n\n fieldModules: Commander[\"$tw\"][\"Tiddler\"][\"fieldModules\"];\n AttachmentService: Commander[\"AttachmentService\"];\n\n constructor(\n private rootRoute: rootRoute,\n commander: Commander,\n private tiddlerCache: CacheState,\n ) {\n this.engine = commander.engine;\n this.SessionManager = commander.SessionManager;\n this.siteConfig = commander.siteConfig;\n this.PasswordService = commander.PasswordService;\n this.fieldModules = commander.$tw.Tiddler.fieldModules;\n this.AttachmentService = commander.AttachmentService;\n this.versions = commander.versions;\n }\n\n handleIncomingRequest(\n req: http.IncomingMessage | http2.Http2ServerRequest,\n res: http.ServerResponse | http2.Http2ServerResponse\n ) {\n\n const [ok, err, streamer] = function (this: Router) {\n try {\n return [true, undefined, new Streamer(req, res, this)] as const;\n } catch (e) {\n return [false, e, undefined] as const;\n }\n }.call(this);\n\n if (!ok) {\n if (err === STREAM_ENDED) return;\n res.writeHead(500, { \"x-reason\": \"handle incoming request\" }).end();\n throw err;\n }\n\n this.handle(streamer).catch(streamer.catcher);\n }\n\n async handle(streamer: Streamer) {\n\n\n if (!this.csrfDisable\n && [\"POST\", \"PUT\", \"DELETE\"].includes(streamer.method)\n && streamer.headers[\"x-requested-with\"] !== \"TiddlyWiki\"\n )\n throw streamer.sendString(400, { \"x-reason\": \"x-requested-with missing\" },\n `'X-Requested-With' header required`, \"utf8\");\n\n const authUser = await this.SessionManager.parseIncomingRequest(streamer, this);\n\n /** This should always have a length of at least 1 because of the root route. */\n const routePath = this.findRoute(streamer);\n if (!routePath.length || routePath[routePath.length - 1]?.route.denyFinal)\n return streamer.sendEmpty(404, { \"x-reason\": \"no-route\" });\n\n // Optionally output debug info\n console.log(streamer.method, streamer.url);\n // if no bodyFormat is specified, we default to \"buffer\" since we do still need to recieve the body\n const bodyFormat = routePath.find(e => e.route.bodyFormat)?.route.bodyFormat || \"buffer\";\n\n type statetype = { [K in BodyFormat]: StateObject<K> }[BodyFormat]\n\n const state = createStrictAwaitProxy(\n new StateObject(\n streamer,\n routePath,\n bodyFormat,\n authUser,\n this,\n this.tiddlerCache,\n ) as statetype\n );\n\n\n const method = streamer.method;\n\n // anything that sends a response before this should have thrown, but just in case\n if (streamer.headersSent) return;\n\n if ([\"GET\", \"HEAD\"].includes(method)) state.bodyFormat = \"ignore\";\n\n if (state.bodyFormat === \"stream\" || state.bodyFormat === \"ignore\") {\n // this starts dumping bytes early, rather than letting node do it once the res finishes.\n // the only advantage is that it eases congestion on the socket.\n if (state.bodyFormat === \"ignore\") streamer.reader.resume();\n\n return await this.handleRoute(state, routePath);\n }\n if (state.bodyFormat === \"string\" || state.bodyFormat === \"json\") {\n state.data = (await state.readBody()).toString(\"utf8\");\n if (state.bodyFormat === \"json\") {\n // make sure this parses as valid data\n const { success, data } = z.string().transform(zodTransformJSON).safeParse(state.data);\n if (!success) return state.sendEmpty(400, {});\n state.data = data;\n }\n } else if (state.bodyFormat === \"www-form-urlencoded-urlsearchparams\"\n || state.bodyFormat === \"www-form-urlencoded\") {\n const data = state.data = new URLSearchParams((await state.readBody()).toString(\"utf8\"));\n if (state.bodyFormat === \"www-form-urlencoded\") {\n state.data = Object.fromEntries(data);\n }\n } else if (state.bodyFormat === \"buffer\") {\n state.data = await state.readBody();\n } else {\n // because it's a union, state becomes never at this point if we matched every route correctly\n // make sure state is never by assigning it to a never const. This will error if something is missed.\n const t: never = state;\n const state2: StateObject = state as any;\n return state2.sendString(500, {}, \"Invalid bodyFormat: \" + state2.bodyFormat, \"utf8\");\n }\n\n return await this.handleRoute(state, routePath);\n\n }\n\n\n\n async handleRoute(state: StateObject<BodyFormat>, route: RouteMatch[]) {\n\n let result: any = state;\n for (const match of route) {\n await match.route.handler(result);\n if (state.headersSent) return;\n }\n if (!state.headersSent) {\n state.sendEmpty(404, {});\n console.log(\"No handler sent headers before the promise resolved.\");\n }\n\n }\n\n findRouteRecursive(\n routes: Route[],\n testPath: string,\n method: AllowedMethod\n ): RouteMatch[] {\n for (const potentialRoute of routes) {\n // Skip if the method doesn't match.\n if (!potentialRoute.method.includes(method)) continue;\n\n // Try to match the path.\n const match = potentialRoute.path.exec(testPath);\n\n if (match) {\n // The matched portion of the path.\n const matchedPortion = match[0];\n // Remove the matched portion from the testPath.\n const remainingPath = testPath.slice(matchedPortion.length) || \"/\";\n\n const result = {\n route: potentialRoute,\n params: match.slice(1),\n remainingPath,\n };\n const { childRoutes = [] } = potentialRoute as any; // see this.defineRoute\n // If there are inner routes, try to match them recursively.\n if (childRoutes.length > 0) {\n const innerMatch = this.findRouteRecursive(\n childRoutes,\n remainingPath,\n method\n );\n return [result, ...innerMatch];\n } else {\n return [result];\n }\n }\n }\n return [];\n }\n\n /**\n * \n * Top-level function that starts matching from the root routes.\n * Notice that the pathPrefix is assumed to have been handled beforehand.\n * \n * @param streamer \n * @returns The tree path matched\n */\n findRoute(streamer: Streamer): RouteMatch[] {\n const { method, urlInfo } = streamer;\n let testPath = urlInfo.pathname || \"/\";\n return this.findRouteRecursive([this.rootRoute as any], testPath, method);\n }\n\n}\n\nconst ROOT_ROUTE: unique symbol = Symbol(\"ROOT_ROUTE\");\nfunction defineRoute(\n parent: { $o?: any, method: any } | typeof ROOT_ROUTE,\n route: RouteOptAny,\n handler: (state: any) => any,\n) {\n\n if (route.bodyFormat && !BodyFormats.includes(route.bodyFormat))\n throw new Error(\"Invalid bodyFormat: \" + route.bodyFormat);\n if (!route.method.every(e => (parent === ROOT_ROUTE ? AllowedMethods : parent.method).includes(e)))\n throw new Error(\"Invalid method: \" + route.method);\n if (route.path.source[0] !== \"^\")\n throw new Error(\"Path regex must start with ^\");\n\n if (parent !== ROOT_ROUTE) {\n // the typing is too complicated if we add childRoutes\n if (!(parent as any).childRoutes) (parent as any).childRoutes = [];\n (parent as any).childRoutes.push(route);\n }\n\n (route as any).defineRoute = (...args: [any, any]) => defineRoute(route, ...args);\n\n (route as Route).handler = handler;\n\n return route as any; // this is usually ignored except for the root route.\n}\n\n\nexport interface ZodAction<T extends z.ZodTypeAny, R extends JsonValue> {\n // (state: StateObject): Promise<typeof STREAM_ENDED>;\n inner: (route: z.output<T>) => Promise<R>\n zodRequest: (z: Z2<\"JSON\">) => T;\n zodResponse?: (z: Z2<\"JSON\">) => z.ZodType<R>;\n}\n\nexport interface ZodRoute<\n M extends AllowedMethod,\n B extends BodyFormat,\n P extends Record<string, z.ZodTypeAny>,\n T extends z.ZodTypeAny,\n R extends JsonValue\n> extends ZodAction<T, R> {\n zodPathParams: (z: Z2<\"STRING\">) => P;\n method: M[];\n path: string;\n bodyFormat: B;\n inner: (state: ZodState<M, B, P, T>) => Promise<R>,\n}\n\nexport class ZodState<\n M extends AllowedMethod,\n B extends BodyFormat,\n P extends Record<string, z.ZodTypeAny>,\n T extends z.ZodTypeAny\n> extends StateObject<B, M, string[][], z.output<T>> {\n declare pathParams: z.output<z.ZodObject<P>>;\n // declare data: z.output<T>;\n}\n\n\nexport type RouterRouteMap<T> = {\n [K in keyof T as T[K] extends ZodAction<any, any> ? K : never]:\n T[K] extends {\n zodRequest: (z: any) => infer REQ extends z.ZodTypeAny,\n zodResponse?: (z: any) => infer RES extends z.ZodType<JsonValue>\n } ? ((data: z.input<REQ>) => Promise<jsonify<z.output<RES>>>) : never;\n}\n\nexport type jsonify<T> =\n T extends void ? null :\n T extends Promise<any> ? unknown :\n T extends Date ? string :\n // T extends Map<infer K, infer V> ? [jsonify<K>, jsonify<V>][] :\n // T extends Set<infer U> ? jsonify<U>[] :\n T extends string | number | boolean | null | undefined ? T :\n T extends [...any[]] ? number extends T[\"length\"] ? jsonify<T[number]>[] : [...jsonifyTuple<T>] :\n T extends Array<infer U> ? jsonify<U>[] :\n T extends object ? { [K in keyof T]: jsonify<T[K]> } :\n unknown;\n\nexport type jsonifyTuple<T> = T extends [infer A, ...infer B] ? [jsonify<A>, ...jsonifyTuple<B>] : T extends [infer A] ? [jsonify<A>] : [];\n\n\n\nexport type RouterKeyMap<T, V> = {\n [K in keyof T as T[K] extends ZodAction<any, any> ? K : never]: V;\n}\n\n\n// this is definitely the better version of defineRoute, but that was the starting point\nexport function zodRoute<M extends AllowedMethod, B extends \"GET\" | \"HEAD\" extends M ? \"ignore\" : BodyFormat, P extends Record<string, z.ZodTypeAny>, T extends z.ZodTypeAny, R extends JsonValue>(\n method: M[],\n /** `\"path/to/route/:var/route/:var2\"` */\n path: string,\n zodPathParams: (z: Z2<\"STRING\">) => P,\n bodyFormat: B,\n zodRequest: (z: Z2<\"JSON\">) => T,\n inner: (state: ZodState<M, B, P, T>) => Promise<R>,\n): ZodRoute<M, B, P, T, R> {\n return {\n method,\n path,\n bodyFormat,\n inner,\n zodRequest,\n zodPathParams,\n } as ZodRoute<M, B, P, T, R>;\n}\n\nexport const registerZodRoutes = (root: rootRoute, router: any, keys: string[]) => {\n // const router = new TiddlerRouter();\n keys.forEach((key) => {\n const route = router[key as keyof typeof router] as ZodRoute<any, any, any, any, any>;\n const { method, path, bodyFormat, zodPathParams, zodRequest, inner } = route;\n const pathParams = path.split(\"/\").filter(e => e.startsWith(\":\")).map(e => e.substring(1));\n ///^\\/recipes\\/([^\\/]+)\\/tiddlers\\/(.+)$/,\n if (!path.startsWith(\"/\")) throw new Error(`Path ${path} must start with a forward slash`);\n if (key.startsWith(\":\")) throw new Error(`Key ${key} must not start with a colon`)\n const pathregex = \"^\" + path.split(\"/\").map(e =>\n e === \"$key\" ? key : e.startsWith(\":\") ? \"([^/]+)\" : e\n ).join(\"\\\\/\") + \"$\";\n\n root.defineRoute({\n method: [...method, \"OPTIONS\"],\n path: new RegExp(pathregex),\n pathParams,\n bodyFormat,\n }, async state => {\n if (state.method === \"OPTIONS\") {\n return state.sendEmpty(200, {\n // \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": method.join(\",\"),\n \"Access-Control-Allow-Headers\": \"Accept, Content-Type, X-Requested-With\",\n });\n }\n // return await (router[key] as ZodRoute<any, any, any, any, any>)(state);\n const pathCheck = Z2.object(zodPathParams(Z2)).safeParse(state.pathParams);\n if (!pathCheck.success) {\n console.log(pathCheck.error);\n throw state.sendEmpty(400, { \"x-reason\": \"zod-path\" });\n }\n\n const inputCheck = zodRequest(Z2).safeParse(state.data);\n if (!inputCheck.success) {\n console.log(inputCheck.error);\n throw state.sendEmpty(400, { \"x-reason\": \"zod-request\" });\n }\n\n const [good, error, res] = await inner(state)\n .then(e => [true, undefined, e] as const, e => [false, e, undefined] as const);\n\n if (!good) {\n if (error === STREAM_ENDED) {\n return error;\n } else if (typeof error === \"string\") {\n console.log(error);\n return state.sendString(400, { \"x-reason\": \"zod-handler\" }, error, \"utf8\");\n } else if (error instanceof Error && error.name === \"UserError\") {\n console.log(error.stack);\n return state.sendString(400, { \"x-reason\": \"user-error\" }, error.message, \"utf8\");\n } else {\n throw error;\n }\n }\n\n return state.sendJSON(200, res);\n });\n });\n}\n\n\n\nexport function zodManage<T extends z.ZodTypeAny, R extends JsonValue>(\n zodRequest: (z: Z2<\"JSON\">) => T,\n inner: (state: ZodState<\"POST\", \"json\", Record<string, z.ZodTypeAny>, T>, prisma: PrismaTxnClient) => Promise<R>\n) {\n return zodRoute([\"POST\"], \"/manager/$key\", z => ({}), \"json\", zodRequest, async state => {\n return state.$transaction(async (prisma) => await inner(state, prisma));\n });\n}\n","import { TiddlyWiki, TWBoot, TWBootBrowser, TWBootNode } from \"tiddlywiki\";\nimport { } from \"tiddlywiki/boot/bootprefix\";\nimport { $TW } from \"./commander\";\nimport { resolve } from \"node:path\";\nimport { dist_resolve, is } from \"./utils\";\nimport { ok } from \"node:assert\";\n\ndeclare module \"tiddlywiki\" {\n interface TWUtils {\n eachAsync: (array: any[], callback: (item: any, index: number) => Promise<void>) => Promise<void>;\n }\n interface TWBoot {\n\n }\n}\n\nexport async function bootTiddlyWiki(wikiPath: string) {\n\n const $tw = TiddlyWiki()\n\n $tw.utils.eachAsync = eachAsync;\n\n $tw.boot.boot = async (callback) => {\n // Initialise crypto object\n $tw.crypto = new $tw.utils.Crypto();\n // Initialise password prompter\n if ($tw.browser && !$tw.node) {\n $tw.passwordPrompt = new $tw.utils.PasswordPrompt();\n }\n // Preload any encrypted tiddlers\n await new Promise<void>(resolve =>\n $tw.boot.decryptEncryptedTiddlers(resolve)\n );\n\n // $tw.boot.startup();\n await new Promise<void>(callback => {\n const options = { callback };\n $tw.boot.initStartup(options);\n $tw.boot.loadStartup(options);\n $tw.boot.execStartup(options);\n });\n\n callback?.();\n\n };\n\n // disable the default commander. We'll use our own version of it.\n\n // creating a new tiddler with the same title as a shadow tiddler\n // prevents the shadow tiddler from defining modules\n\n $tw.preloadTiddler({ title: \"$:/core/modules/commander.js\" })\n $tw.modules.define(\"$:/core/modules/commander.js\", \"global\", {\n Commander: { initCommands: function () { } },\n });\n\n $tw.preloadTiddler({ title: \"$:/core/modules/startup/commands.js\" })\n $tw.modules.define(\"$:/core/modules/startup/commands.js\", \"startup\", {\n name: \"commands\",\n platforms: [\"node\"],\n after: [\"story\"],\n synchronous: true,\n startup: () => { },\n });\n\n\n // tiddlywiki [+<pluginname> | ++<pluginpath>] [<wikipath>] ...[--command ...args]\n $tw.boot.argv = [\n \"++\" + dist_resolve(\"../plugins/client\"),\n \"+plugins/tiddlywiki/tiddlyweb\",\n // these are sane defaults, these should be in the recipe\n \"+themes/tiddlywiki/vanilla\",\n \"+themes/tiddlywiki/snowwhite\",\n wikiPath, // this should be inert\n ];\n\n await new Promise<void>(resolve => $tw.boot.boot(resolve));\n\n // this makes sure boot followed the node path\n ok(!$tw.boot.tasks.readBrowserTiddlers);\n\n return $tw;\n\n}","\nimport { Streamer } from \"../streamer\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { jsonify, registerZodRoutes, Router, RouterKeyMap, ZodAction, zodRoute, ZodState } from \"../routes/router\";\nimport { z } from \"zod\";\nimport { JsonValue, Z2 } from \"../utils\";\n\nexport interface AuthUser {\n /** User ID. 0 if the user is not logged in. */\n user_id: PrismaField<\"Users\", \"user_id\">;\n /** User role_ids. This may have length even if the user isn't logged in, to allow ACL for anon. */\n role_ids: PrismaField<\"Roles\", \"role_id\">[];\n /** Username passed to the client */\n username: PrismaField<\"Users\", \"username\">;\n /** A session_id isn't guarenteed. There may be a session even if the user isn't logged in, and may not be even if they are, depending on the the situation. */\n sessionId: PrismaField<\"Sessions\", \"session_id\"> | undefined;\n /** Is this user considered a site-admin. This is determined by the auth service, not MWS. */\n isAdmin: boolean;\n /** Is the user logged in? This also means that user_id should be 0. role_ids may still be specified. */\n isLoggedIn: boolean;\n}\n\nexport const SessionKeyMap: RouterKeyMap<SessionManager, true> = {\n login1: true,\n login2: true,\n logout: true,\n}\n\n\n/**\n * \n * @param path path starting with a forward slash\n * @param zodRequest the zod for state.data\n * @param inner the handler to call\n * @returns the ZodRoute\n */\nexport function zodSession<P extends string, T extends z.ZodTypeAny, R extends JsonValue>(\n path: P,\n zodRequest: (z: Z2<\"JSON\">) => T,\n inner: (state: ZodState<\"POST\", \"json\", Record<string, z.ZodTypeAny>, T>, prisma: PrismaTxnClient) => Promise<R>\n): ZodSessionRoute<P, T, R> {\n return {\n ...zodRoute([\"POST\"], path, z => ({}), \"json\", zodRequest, async state => {\n return state.$transaction(async (prisma) => await inner(state, prisma));\n }),\n path,\n };\n}\n\nexport interface ZodSessionRoute<\n P extends string,\n T extends z.ZodTypeAny,\n R extends JsonValue\n> extends ZodAction<T, R> {\n path: P;\n inner: (state: ZodState<\"POST\", \"json\", {}, T>) => Promise<R>,\n}\n\nexport type RouterPathRouteMap<T> = {\n [K in keyof T as T[K] extends ZodSessionRoute<any, any, any> ? K : never]:\n T[K] extends {\n path: infer P,\n zodRequest: (z: any) => infer REQ extends z.ZodTypeAny,\n zodResponse?: (z: any) => infer RES extends z.ZodType<JsonValue>\n } ? {\n (data: z.input<REQ>): Promise<jsonify<z.output<RES>>>;\n path: P;\n key: K;\n } : never;\n}\nexport type SessionManagerMap = RouterPathRouteMap<SessionManager>;\n\nexport class SessionManager {\n\n static async defineRoutes(root: rootRoute) {\n registerZodRoutes(root, new SessionManager(), Object.keys(SessionKeyMap))\n }\n\n static async parseIncomingRequest(streamer: Streamer, router: Router): Promise<AuthUser> {\n\n const sessionId = streamer.cookies.getAll(\"session\") as PrismaField<\"Sessions\", \"session_id\">[];\n const session = sessionId && await router.engine.sessions.findFirst({\n where: { session_id: { in: sessionId } },\n select: { session_id: true, user: { select: { user_id: true, username: true, roles: { select: { role_id: true } } } } }\n });\n\n if (sessionId && session) return {\n user_id: session.user.user_id,\n username: session.user.username,\n isAdmin: session.user.roles.some(e => e.role_id === 1),\n role_ids: session.user.roles.map(e => e.role_id),\n sessionId: session.session_id,\n isLoggedIn: true,\n };\n else return {\n user_id: 0 as PrismaField<\"Users\", \"user_id\">,\n username: \"(anon)\" as PrismaField<\"Users\", \"username\">,\n isAdmin: false,\n role_ids: [] as PrismaField<\"Roles\", \"role_id\">[],\n sessionId: undefined as PrismaField<\"Sessions\", \"session_id\"> | undefined,\n isLoggedIn: false,\n };\n }\n\n login1 = zodSession(\"/login/1\", z => z.object({\n username: z.prismaField(\"Users\", \"username\", \"string\"),\n startLoginRequest: z.string(),\n }), async (state, prisma) => {\n const { username, startLoginRequest } = state.data;\n\n const user = await prisma.users.findUnique({\n where: { username },\n select: { user_id: true, password: true, }\n });\n\n if (!user) throw \"User not found.\";\n\n const { user_id, password } = user;\n\n const stater = state.PasswordService.LoginGenerator({\n user_id,\n startLoginRequest,\n registrationRecord: password,\n });\n\n const loginResponse = await stater.next(0);\n\n if (loginResponse.done) throw \"Login failed.\";\n\n const loginSession = await state.PasswordService.startLoginSession(stater);\n\n return { loginResponse: loginResponse.value, loginSession };\n\n })\n\n login2 = zodSession(\"/login/2\", z => z.object({\n finishLoginRequest: z.string(),\n loginSession: z.string(),\n skipCookie: z.boolean().optional().default(false),\n }), async (state, prisma) => {\n const { finishLoginRequest, skipCookie, loginSession } = state.data;\n\n if (!loginSession) throw \"Login session not found.\";\n\n const stater = state.PasswordService.serverState.get(loginSession);\n\n if (!stater) throw \"Login session not found.\";\n\n const { value } = await stater.next(1, finishLoginRequest);\n\n if (!value?.session?.sessionKey) throw \"Login failed.\";\n\n const session_id = await createSession(prisma, value.user_id, value.session.sessionKey);\n\n if (!skipCookie) {\n // the client can ask to skip the cookie for things like password change\n state.setCookie(\"session\", session_id, {\n httpOnly: true,\n path: state.config.pathPrefix + \"/\",\n secure: state.isSecure,\n sameSite: \"Strict\"\n });\n }\n\n // NEVER send the session_key! The client already has it!\n return { user_id: value.user_id, session_id, };\n\n })\n\n logout = zodSession(\"/logout\", z => z.object({\n session_id: z.string(),\n signature: z.string(),\n skipCookie: z.boolean().refine(e => e === true),\n }).optional(), async (state, prisma) => {\n\n if (state.data?.skipCookie) {\n const session = await prisma.sessions.findUnique({\n where: { session_id: state.data.session_id },\n select: { user_id: true, session_key: true }\n });\n if (!session?.session_key) throw \"Session not found.\";\n const { session_key } = session;\n const { session_id, signature } = state.data;\n assertSignature({ session_id, signature, session_key });\n await prisma.sessions.delete({ where: { session_id: state.data.session_id } });\n return null;\n }\n\n if (state.user.isLoggedIn) {\n await prisma.sessions.delete({ where: { session_id: state.user.sessionId } });\n }\n var cookies = state.headers.cookie ? state.headers.cookie.split(\";\") : [];\n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i]?.trim().split(\"=\")[0];\n if (!cookie) continue;\n // state.setHeader(\"Set-Cookie\", cookie + \"=; HttpOnly; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict\");\n state.setCookie(cookie, \"\", { httpOnly: true, path: state.config.pathPrefix + \"/\", expires: new Date(0), secure: state.isSecure, sameSite: \"Strict\" });\n }\n\n return null;\n });\n\n\n}\n\n\nasync function createSession(prisma: PrismaTxnClient, user_id: PrismaField<\"Users\", \"user_id\">, session_key: string) {\n const session_id = randomBytes(16).toString(\"base64url\");\n return await prisma.sessions.create({\n data: {\n user_id,\n session_key,\n session_id,\n last_accessed: new Date(),\n }\n }).then(({ session_id }) => session_id);\n}\n\n\nexport function assertSignature({ session_id, signature, session_key }: {\n session_id: string; signature: string; session_key: string;\n}) {\n const hash = createHash(\"sha256\").update(session_key + session_id).digest(\"base64\");\n if (hash !== signature) throw \"Invalid session signature.\";\n}","import { tryParseJSON } from \"../utils\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport { SiteConfig } from \"../routes/router\";\nimport sjcl from \"sjcl\";\nexport interface TiddlerFields extends Record<string, any> {\n title: PrismaField<\"Tiddlers\", \"title\">;\n}\nconst $tw: any = {};\n\n\n/*\n\nClass to handle the attachments in the filing system\n\nThe store folder looks like this:\n\nstore/\n\tinbox/ - files that are in the process of being uploaded via a multipart form upload\n\t\t202402282125432742/\n\t\t\t0\n\t\t\t1\n\t\t\t...\n\t\t...\n\tfiles/ - files that are the text content of large tiddlers\n\t\tb7def178-79c4-4d88-b7a4-39763014a58b/\n\t\t\tdata.jpg - the extension is provided for convenience when directly inspecting the file system\n\t\t\tmeta.json - contains:\n\t\t\t\t{\n\t\t\t\t\t\"filename\": \"data.jpg\",\n\t\t\t\t\t\"type\": \"video/mp4\",\n\t\t\t\t\t\"uploaded\": \"2024021821224823\"\n\t\t\t\t}\n\tdatabase.sql - The database file (managed by sql-tiddler-database.js)\n\n*/\n\nexport class AttachmentService {\n\n constructor(\n protected config: SiteConfig,\n protected prisma: PrismaTxnClient,\n ) { \n\n }\n\n makeCanonicalUri(bag_name: string, title: string) {\n return `/bags/${encodeURIComponentExtended(bag_name)}/tiddlers/${encodeURIComponentExtended(title)}/blob`;\n }\n /*\n Given tiddler fields, tiddler_id and a bag_name, return the tiddler fields after the following process:\n - Apply the tiddler_id as the revision field\n - Apply the bag_name as the bag field\n */\n processOutgoingTiddler({ tiddler, tiddler_id, bag_name, attachment_hash }: {\n tiddler: TiddlerFields;\n tiddler_id: any;\n bag_name: PrismaField<\"Bags\", \"bag_name\">;\n attachment_hash: PrismaField<\"Tiddlers\", \"attachment_hash\">;\n }) {\n if (attachment_hash !== null) {\n return Object.assign(\n {},\n tiddler,\n {\n text: undefined,\n _canonical_uri: this.makeCanonicalUri(bag_name, tiddler.title),\n revision: tiddler_id,\n bag: bag_name\n }\n );\n } else {\n return tiddler;\n }\n }\n /*\n */\n async processIncomingTiddler({\n tiddlerFields, existing_attachment_hash, existing_canonical_uri\n }: {\n tiddlerFields: TiddlerFields;\n existing_attachment_hash: PrismaField<\"Tiddlers\", \"attachment_hash\">;\n existing_canonical_uri: any;\n }) {\n const { attachmentSizeLimit, attachmentsEnabled, } = this.config;\n const contentTypeInfo = this.config.contentTypeInfo[tiddlerFields.type || \"text/vnd.tiddlywiki\"];\n const isBinary = !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\n let shouldProcessAttachment = tiddlerFields.text && tiddlerFields.text.length > attachmentSizeLimit;\n\n if (existing_attachment_hash) {\n const fileSize = await this.getAttachmentFileSize(existing_attachment_hash);\n if (fileSize && fileSize <= attachmentSizeLimit) {\n const existingAttachmentMeta = await this.getAttachmentMetadata(existing_attachment_hash);\n const hasCanonicalField = !!tiddlerFields._canonical_uri;\n const skipAttachment = hasCanonicalField && (tiddlerFields._canonical_uri === (existingAttachmentMeta ? existingAttachmentMeta._canonical_uri : existing_canonical_uri));\n shouldProcessAttachment = !skipAttachment;\n } else {\n shouldProcessAttachment = false;\n }\n }\n\n if (attachmentsEnabled && isBinary && shouldProcessAttachment) {\n const attachment_hash = existing_attachment_hash || await this.saveAttachment({\n text: tiddlerFields.text,\n type: tiddlerFields.type,\n reference: tiddlerFields.title,\n _canonical_uri: tiddlerFields._canonical_uri\n });\n\n if (tiddlerFields && tiddlerFields._canonical_uri) {\n delete tiddlerFields._canonical_uri;\n }\n\n return {\n tiddlerFields: Object.assign({}, tiddlerFields, { text: undefined }),\n attachment_hash: attachment_hash\n };\n } else {\n return {\n tiddlerFields: tiddlerFields,\n attachment_hash: existing_attachment_hash\n };\n }\n }\n\n /*\n Check if an attachment name is valid (is a 64 character hex string)\n */\n isValidAttachmentName(content_hash: string) {\n const re = new RegExp('^[a-f0-9]{64}$');\n return re.test(content_hash);\n }\n /*\n Saves an attachment to a file. Options include:\n \n text: text content (may be binary)\n type: MIME type of content\n reference: reference to use for debugging\n _canonical_uri: canonical uri of the content\n */\n async saveAttachment(options: {\n text: string;\n type: string;\n reference: string;\n _canonical_uri: string;\n }) {\n\n // Compute the content hash for naming the attachment\n const contentHash = sjcl.codec.hex.fromBits($tw.sjcl.hash.sha256.hash(options.text)).slice(0, 64).toString();\n // Choose the best file extension for the attachment given its type\n const contentTypeInfo = this.config.contentTypeInfo[options.type] || this.config.contentTypeInfo[\"application/octet-stream\"];\n // Creat the attachment directory\n const attachmentPath = path.resolve(this.config.storePath, \"files\", contentHash);\n createDirectory(attachmentPath);\n // Save the data file\n const dataFilename = \"data\" + contentTypeInfo.extension;\n fs.writeFileSync(path.resolve(attachmentPath, dataFilename), options.text, contentTypeInfo.encoding);\n // Save the meta.json file\n this.writeMetaFile(fs, path, attachmentPath, options, contentHash, dataFilename);\n return contentHash as PrismaField<\"Tiddlers\", \"attachment_hash\">;\n }\n private writeMetaFile(fs: any, path: any, attachmentPath: any, options: { text: string; type: string; reference: string; _canonical_uri: string; }, contentHash: any, dataFilename: string) {\n fs.writeFileSync(path.resolve(attachmentPath, \"meta.json\"), JSON.stringify({\n _canonical_uri: options._canonical_uri,\n created: new Date().toISOString(),\n modified: new Date().toISOString(),\n contentHash: contentHash,\n filename: dataFilename,\n type: options.type\n }, null, 4));\n }\n\n /*\n Adopts an attachment file into the store (e.g. move from a temp upload directory)\n */\n async adoptAttachment({ incomingFilepath, type, hash, _canonical_uri }: {\n incomingFilepath: any;\n type: string | number;\n hash: any;\n _canonical_uri: any;\n }) {\n // Choose the best file extension for the attachment given its type\n const contentTypeInfo = this.config.contentTypeInfo[type] || this.config.contentTypeInfo[\"application/octet-stream\"];\n // Creat the attachment directory\n const attachmentPath = path.resolve(this.config.storePath, \"files\", hash);\n createDirectory(attachmentPath);\n // Rename the data file\n const dataFilename = \"data\" + contentTypeInfo.extension, dataFilepath = path.resolve(attachmentPath, dataFilename);\n fs.renameSync(incomingFilepath, dataFilepath);\n // Save the meta.json file\n fs.writeFileSync(path.resolve(attachmentPath, \"meta.json\"), JSON.stringify({\n _canonical_uri: _canonical_uri,\n created: new Date().toISOString(),\n modified: new Date().toISOString(),\n contentHash: hash,\n filename: dataFilename,\n type: type\n }, null, 4));\n return hash;\n }\n /*\n Get an attachment ready to stream. Returns null if there is an error or:\n stream: filestream of file\n type: type of file\n */\n async getAttachmentStream(content_hash: string) {\n // Check the attachment name\n if (!this.isValidAttachmentName(content_hash)) return null;\n\n // Construct the path to the attachment directory\n const attachmentPath = path.resolve(this.config.storePath, \"files\", content_hash);\n\n // Read the meta.json file\n const metaJsonPath = path.resolve(attachmentPath, \"meta.json\");\n if (!fs.existsSync(metaJsonPath) || !fs.statSync(metaJsonPath).isFile()) return null;\n\n const meta = tryParseJSON<any>(fs.readFileSync(metaJsonPath, \"utf8\"));\n if (!meta) return null;\n\n const dataFilepath = path.resolve(attachmentPath, meta.filename);\n // Check if the data file exists\n if (!fs.existsSync(dataFilepath) || !fs.statSync(dataFilepath).isFile()) return null\n\n // Stream the file\n return {\n stream: fs.createReadStream(dataFilepath),\n type: meta.type\n };\n\n\n }\n /*\n Get the size of an attachment file given the contentHash.\n Returns the size in bytes, or null if the file doesn't exist.\n */\n async getAttachmentFileSize(content_hash: PrismaField<\"Tiddlers\", \"attachment_hash\"> & {}) {\n // Construct the path to the attachment directory\n const attachmentPath = path.resolve(this.config.storePath, \"files\", content_hash);\n // Read the meta.json file\n const metaJsonPath = path.resolve(attachmentPath, \"meta.json\");\n if (!(fs.existsSync(metaJsonPath) && fs.statSync(metaJsonPath).isFile())) return null\n const meta = tryParseJSON<any>(fs.readFileSync(metaJsonPath, \"utf8\"));\n if (!meta) return null;\n const dataFilepath = path.resolve(attachmentPath, meta.filename);\n // Check if the data file exists and return its size\n if (!(fs.existsSync(dataFilepath) && fs.statSync(dataFilepath).isFile())) return null;\n return fs.statSync(dataFilepath).size;\n }\n\n async getAttachmentMetadata(content_hash: PrismaField<\"Tiddlers\", \"attachment_hash\"> & {}) {\n const attachmentPath = path.resolve(this.config.storePath, \"files\", content_hash);\n const metaJsonPath = path.resolve(attachmentPath, \"meta.json\");\n if (!fs.existsSync(metaJsonPath)) return null;\n return JSON.parse(fs.readFileSync(metaJsonPath, \"utf8\"));\n }\n\n}\n\n","/**\n * CommanderError class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.length > 3 && this._name.slice(-3) === '...') {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n }\n\n /**\n * @package\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Only allow argument value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Make argument required.\n *\n * @returns {Argument}\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make argument optional.\n *\n * @returns {Argument}\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.minWidthToWrap = 40;\n this.sortSubcommands = false;\n this.sortOptions = false;\n this.showGlobalOptions = false;\n }\n\n /**\n * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n * and just before calling `formatHelp()`.\n *\n * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n *\n * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n */\n prepareContext(contextOptions) {\n this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n const helpCommand = cmd._getHelpCommand();\n if (helpCommand && !helpCommand._hidden) {\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: because overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Compare options for sort.\n *\n * @param {Option} a\n * @param {Option} b\n * @returns {number}\n */\n compareOptions(a, b) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short\n ? option.short.replace(/^-/, '')\n : option.long.replace(/^--/, '');\n };\n return getSortKey(a).localeCompare(getSortKey(b));\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Built-in help option.\n const helpOption = cmd._getHelpOption();\n if (helpOption && !helpOption.hidden) {\n // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n if (!removeShort && !removeLong) {\n visibleOptions.push(helpOption); // no changes needed\n } else if (helpOption.long && !removeLong) {\n visibleOptions.push(\n cmd.createOption(helpOption.long, helpOption.description),\n );\n } else if (helpOption.short && !removeShort) {\n visibleOptions.push(\n cmd.createOption(helpOption.short, helpOption.description),\n );\n }\n }\n if (this.sortOptions) {\n visibleOptions.sort(this.compareOptions);\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the visible global options. (Not including help.)\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleGlobalOptions(cmd) {\n if (!this.showGlobalOptions) return [];\n\n const globalOptions = [];\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n const visibleOptions = ancestorCmd.options.filter(\n (option) => !option.hidden,\n );\n globalOptions.push(...visibleOptions);\n }\n if (this.sortOptions) {\n globalOptions.sort(this.compareOptions);\n }\n return globalOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd.registeredArguments.forEach((argument) => {\n argument.description =\n argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd.registeredArguments.find((argument) => argument.description)) {\n return cmd.registeredArguments;\n }\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd.registeredArguments\n .map((arg) => humanReadableArgName(arg))\n .join(' ');\n return (\n cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '')\n );\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(\n max,\n this.displayWidth(\n helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n ),\n );\n }, 0);\n }\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(\n max,\n this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n );\n }, 0);\n }\n\n /**\n * Get the longest global option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestGlobalOptionTermLength(cmd, helper) {\n return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n return Math.max(\n max,\n this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n );\n }, 0);\n }\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(\n max,\n this.displayWidth(\n helper.styleArgumentTerm(helper.argumentTerm(argument)),\n ),\n );\n }, 0);\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let ancestorCmdNames = '';\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n }\n return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.summary() || cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n\n if (option.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (option.defaultValue !== undefined) {\n // default for boolean and negated more for programmer than end user,\n // but show true/false for boolean option as may be for hand-rolled env or config processing.\n const showDefault =\n option.required ||\n option.optional ||\n (option.isBoolean() && typeof option.defaultValue === 'boolean');\n if (showDefault) {\n extraInfo.push(\n `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n );\n }\n }\n // preset for boolean and negated are more for programmer than end user\n if (option.presetArg !== undefined && option.optional) {\n extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n return `${option.description} (${extraInfo.join(', ')})`;\n }\n\n return option.description;\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(\n `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n );\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescription}`;\n }\n return extraDescription;\n }\n return argument.description;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n function callFormatItem(term, description) {\n return helper.formatItem(term, termWidth, description, helper);\n }\n\n // Usage\n let output = [\n `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n '',\n ];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([\n helper.boxWrap(\n helper.styleCommandDescription(commandDescription),\n helpWidth,\n ),\n '',\n ]);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return callFormatItem(\n helper.styleArgumentTerm(helper.argumentTerm(argument)),\n helper.styleArgumentDescription(helper.argumentDescription(argument)),\n );\n });\n if (argumentList.length > 0) {\n output = output.concat([\n helper.styleTitle('Arguments:'),\n ...argumentList,\n '',\n ]);\n }\n\n // Options\n const optionList = helper.visibleOptions(cmd).map((option) => {\n return callFormatItem(\n helper.styleOptionTerm(helper.optionTerm(option)),\n helper.styleOptionDescription(helper.optionDescription(option)),\n );\n });\n if (optionList.length > 0) {\n output = output.concat([\n helper.styleTitle('Options:'),\n ...optionList,\n '',\n ]);\n }\n\n if (helper.showGlobalOptions) {\n const globalOptionList = helper\n .visibleGlobalOptions(cmd)\n .map((option) => {\n return callFormatItem(\n helper.styleOptionTerm(helper.optionTerm(option)),\n helper.styleOptionDescription(helper.optionDescription(option)),\n );\n });\n if (globalOptionList.length > 0) {\n output = output.concat([\n helper.styleTitle('Global Options:'),\n ...globalOptionList,\n '',\n ]);\n }\n }\n\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd) => {\n return callFormatItem(\n helper.styleSubcommandTerm(helper.subcommandTerm(cmd)),\n helper.styleSubcommandDescription(helper.subcommandDescription(cmd)),\n );\n });\n if (commandList.length > 0) {\n output = output.concat([\n helper.styleTitle('Commands:'),\n ...commandList,\n '',\n ]);\n }\n\n return output.join('\\n');\n }\n\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n *\n * @param {string} str\n * @returns {number}\n */\n displayWidth(str) {\n return stripColor(str).length;\n }\n\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n *\n * @param {string} str\n * @returns {string}\n */\n styleTitle(str) {\n return str;\n }\n\n styleUsage(str) {\n // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n // command subcommand [options] [command] <foo> [bar]\n return str\n .split(' ')\n .map((word) => {\n if (word === '[options]') return this.styleOptionText(word);\n if (word === '[command]') return this.styleSubcommandText(word);\n if (word[0] === '[' || word[0] === '<')\n return this.styleArgumentText(word);\n return this.styleCommandText(word); // Restrict to initial words?\n })\n .join(' ');\n }\n styleCommandDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleOptionDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleSubcommandDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleArgumentDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleDescriptionText(str) {\n return str;\n }\n styleOptionTerm(str) {\n return this.styleOptionText(str);\n }\n styleSubcommandTerm(str) {\n // This is very like usage with lots of parts! Assume default string which is formed like:\n // subcommand [options] <foo> [bar]\n return str\n .split(' ')\n .map((word) => {\n if (word === '[options]') return this.styleOptionText(word);\n if (word[0] === '[' || word[0] === '<')\n return this.styleArgumentText(word);\n return this.styleSubcommandText(word); // Restrict to initial words?\n })\n .join(' ');\n }\n styleArgumentTerm(str) {\n return this.styleArgumentText(str);\n }\n styleOptionText(str) {\n return str;\n }\n styleArgumentText(str) {\n return str;\n }\n styleSubcommandText(str) {\n return str;\n }\n styleCommandText(str) {\n return str;\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestGlobalOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper),\n );\n }\n\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n *\n * @param {string} str\n * @returns {boolean}\n */\n preformatted(str) {\n return /\\n[^\\S\\r\\n]/.test(str);\n }\n\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n *\n * @param {string} term\n * @param {number} termWidth\n * @param {string} description\n * @param {Help} helper\n * @returns {string}\n */\n formatItem(term, termWidth, description, helper) {\n const itemIndent = 2;\n const itemIndentStr = ' '.repeat(itemIndent);\n if (!description) return itemIndentStr + term;\n\n // Pad the term out to a consistent width, so descriptions are aligned.\n const paddedTerm = term.padEnd(\n termWidth + term.length - helper.displayWidth(term),\n );\n\n // Format the description.\n const spacerWidth = 2; // between term and description\n const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n let formattedDescription;\n if (\n remainingWidth < this.minWidthToWrap ||\n helper.preformatted(description)\n ) {\n formattedDescription = description;\n } else {\n const wrappedDescription = helper.boxWrap(description, remainingWidth);\n formattedDescription = wrappedDescription.replace(\n /\\n/g,\n '\\n' + ' '.repeat(termWidth + spacerWidth),\n );\n }\n\n // Construct and overall indent.\n return (\n itemIndentStr +\n paddedTerm +\n ' '.repeat(spacerWidth) +\n formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n );\n }\n\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n *\n * @param {string} str\n * @param {number} width\n * @returns {string}\n */\n boxWrap(str, width) {\n if (width < this.minWidthToWrap) return str;\n\n const rawLines = str.split(/\\r\\n|\\n/);\n // split up text by whitespace\n const chunkPattern = /[\\s]*[^\\s]+/g;\n const wrappedLines = [];\n rawLines.forEach((line) => {\n const chunks = line.match(chunkPattern);\n if (chunks === null) {\n wrappedLines.push('');\n return;\n }\n\n let sumChunks = [chunks.shift()];\n let sumWidth = this.displayWidth(sumChunks[0]);\n chunks.forEach((chunk) => {\n const visibleWidth = this.displayWidth(chunk);\n // Accumulate chunks while they fit into width.\n if (sumWidth + visibleWidth <= width) {\n sumChunks.push(chunk);\n sumWidth += visibleWidth;\n return;\n }\n wrappedLines.push(sumChunks.join(''));\n\n const nextChunk = chunk.trimStart(); // trim space at line break\n sumChunks = [nextChunk];\n sumWidth = this.displayWidth(nextChunk);\n });\n wrappedLines.push(sumChunks.join(''));\n });\n\n return wrappedLines.join('\\n');\n }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n // eslint-disable-next-line no-control-regex\n const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.presetArg = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n this.conflictsWith = [];\n this.implied = undefined;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n * The custom processing (parseArg) is called.\n *\n * @example\n * new Option('--color').default('GREYSCALE').preset('RGB');\n * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n *\n * @param {*} arg\n * @return {Option}\n */\n\n preset(arg) {\n this.presetArg = arg;\n return this;\n }\n\n /**\n * Add option name(s) that conflict with this option.\n * An error will be displayed if conflicting options are found during parsing.\n *\n * @example\n * new Option('--rgb').conflicts('cmyk');\n * new Option('--js').conflicts(['ts', 'jsx']);\n *\n * @param {(string | string[])} names\n * @return {Option}\n */\n\n conflicts(names) {\n this.conflictsWith = this.conflictsWith.concat(names);\n return this;\n }\n\n /**\n * Specify implied option values for when this option is set and the implied options are not.\n *\n * The custom processing (parseArg) is not called on the implied values.\n *\n * @example\n * program\n * .addOption(new Option('--log', 'write logging information to file'))\n * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n *\n * @param {object} impliedOptionValues\n * @return {Option}\n */\n implies(impliedOptionValues) {\n let newImplied = impliedOptionValues;\n if (typeof impliedOptionValues === 'string') {\n // string is not documented, but easy mistake and we can do what user probably intended.\n newImplied = { [impliedOptionValues]: true };\n }\n this.implied = Object.assign(this.implied || {}, newImplied);\n return this;\n }\n\n /**\n * Set environment variable to check for option value.\n *\n * An environment variable is only used if when processed the current option value is\n * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n }\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n }\n\n /**\n * @package\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n }\n\n /**\n * Return option name, in a camelcase format that can be used\n * as an object attribute key.\n *\n * @return {string}\n */\n\n attributeName() {\n if (this.negate) {\n return camelcase(this.name().replace(/^no-/, ''));\n }\n return camelcase(this.name());\n }\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @package\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n }\n\n /**\n * Return whether a boolean option.\n *\n * Options are one of boolean, negated, required argument, or optional argument.\n *\n * @return {boolean}\n * @package\n */\n\n isBoolean() {\n return !this.required && !this.optional && !this.negate;\n }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n /**\n * @param {Option[]} options\n */\n constructor(options) {\n this.positiveOptions = new Map();\n this.negativeOptions = new Map();\n this.dualOptions = new Set();\n options.forEach((option) => {\n if (option.negate) {\n this.negativeOptions.set(option.attributeName(), option);\n } else {\n this.positiveOptions.set(option.attributeName(), option);\n }\n });\n this.negativeOptions.forEach((value, key) => {\n if (this.positiveOptions.has(key)) {\n this.dualOptions.add(key);\n }\n });\n }\n\n /**\n * Did the value come from the option, and not from possible matching dual option?\n *\n * @param {*} value\n * @param {Option} option\n * @returns {boolean}\n */\n valueFromOption(value, option) {\n const optionKey = option.attributeName();\n if (!this.dualOptions.has(optionKey)) return true;\n\n // Use the value to deduce if (probably) came from the option.\n const preset = this.negativeOptions.get(optionKey).presetArg;\n const negativeValue = preset !== undefined ? preset : false;\n return option.negate === (negativeValue === value);\n }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // short flag, single dash and single character\n const shortFlagExp = /^-[^-]$/;\n // long flag, double dash and at least one character\n const longFlagExp = /^--[^-]/;\n\n const flagParts = flags.split(/[ |,]+/).concat('guard');\n // Normal is short and/or long.\n if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n // Long then short. Rarely used but fine.\n if (!shortFlag && shortFlagExp.test(flagParts[0]))\n shortFlag = flagParts.shift();\n // Allow two long flags, like '--ws, --workspace'\n // This is the supported way to have a shortish option flag.\n if (!shortFlag && longFlagExp.test(flagParts[0])) {\n shortFlag = longFlag;\n longFlag = flagParts.shift();\n }\n\n // Check for unprocessed flag. Fail noisily rather than silently ignore.\n if (flagParts[0].startsWith('-')) {\n const unsupportedFlag = flagParts[0];\n const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n if (/^-[^-][^-]/.test(unsupportedFlag))\n throw new Error(\n `${baseError}\n- a short flag is a single dash and a single character\n - either use a single dash and a single character (for a short flag)\n - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n );\n if (shortFlagExp.test(unsupportedFlag))\n throw new Error(`${baseError}\n- too many short flags`);\n if (longFlagExp.test(unsupportedFlag))\n throw new Error(`${baseError}\n- too many long flags`);\n\n throw new Error(`${baseError}\n- unrecognised flag format`);\n }\n if (shortFlag === undefined && longFlag === undefined)\n throw new Error(\n `option creation failed due to no flags found in '${flags}'.`,\n );\n\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance)\n return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost, // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map((candidate) => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map((candidate) => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help, stripColor } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = false;\n /** @type {Argument[]} */\n this.registeredArguments = [];\n this._args = this.registeredArguments; // deprecated old name\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default, env, cli etc\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._executableDir = null; // custom search directory for subcommands\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._summary = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {(boolean | string)} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = true;\n this._savedState = null; // used in save/restoreStateBeforeParse\n\n // see configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n outputError: (str, write) => write(str),\n getOutHelpWidth: () =>\n process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () =>\n process.stderr.isTTY ? process.stderr.columns : undefined,\n getOutHasColors: () =>\n useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n getErrHasColors: () =>\n useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n stripColor: (str) => stripColor(str),\n };\n\n this._hidden = false;\n /** @type {(Option | null | undefined)} */\n this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n /** @type {Command} */\n this._helpCommand = undefined; // lazy initialised, inherited\n this._helpConfiguration = {};\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} `this` command for chaining\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._helpOption = sourceCommand._helpOption;\n this._helpCommand = sourceCommand._helpCommand;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue =\n sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * @returns {Command[]}\n * @private\n */\n\n _getCommandAndAncestors() {\n const result = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n for (let command = this; command; command = command.parent) {\n result.push(command);\n }\n return result;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n }\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n }\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n }\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // change how output being written, defaults to stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // change how output being written for errors, defaults to writeErr\n * outputError(str, write) // used for displaying errors and not used for displaying help\n * // specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // color support, currently only used with Help\n * getOutHasColors()\n * getErrHasColors()\n * stripColor() // used to remove ANSI escape codes if output does not have colors\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n Object.assign(this._outputConfiguration, configuration);\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {(boolean|string)} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) {\n throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n }\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd._checkForBrokenPassThrough();\n\n return this;\n }\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n }\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {(Function|*)} [fn] - custom argument processing function\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, fn, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof fn === 'function') {\n argument.default(defaultValue).argParser(fn);\n } else {\n argument.default(fn);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names\n .trim()\n .split(/ +/)\n .forEach((detail) => {\n this.argument(detail);\n });\n return this;\n }\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this.registeredArguments.slice(-1)[0];\n if (previousArgument && previousArgument.variadic) {\n throw new Error(\n `only the last argument can be variadic '${previousArgument.name()}'`,\n );\n }\n if (\n argument.required &&\n argument.defaultValue !== undefined &&\n argument.parseArg === undefined\n ) {\n throw new Error(\n `a default value for a required argument is never used: '${argument.name()}'`,\n );\n }\n this.registeredArguments.push(argument);\n return this;\n }\n\n /**\n * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n *\n * @example\n * program.helpCommand('help [cmd]');\n * program.helpCommand('help [cmd]', 'show help');\n * program.helpCommand(false); // suppress default help command\n * program.helpCommand(true); // add help command even if no subcommands\n *\n * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n * @param {string} [description] - custom description\n * @return {Command} `this` command for chaining\n */\n\n helpCommand(enableOrNameAndArgs, description) {\n if (typeof enableOrNameAndArgs === 'boolean') {\n this._addImplicitHelpCommand = enableOrNameAndArgs;\n return this;\n }\n\n enableOrNameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n const [, helpName, helpArgs] = enableOrNameAndArgs.match(/([^ ]+) *(.*)/);\n const helpDescription = description ?? 'display help for command';\n\n const helpCommand = this.createCommand(helpName);\n helpCommand.helpOption(false);\n if (helpArgs) helpCommand.arguments(helpArgs);\n if (helpDescription) helpCommand.description(helpDescription);\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n\n return this;\n }\n\n /**\n * Add prepared custom help command.\n *\n * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n * @return {Command} `this` command for chaining\n */\n addHelpCommand(helpCommand, deprecatedDescription) {\n // If not passed an object, call through to helpCommand for backwards compatibility,\n // as addHelpCommand was originally used like helpCommand is now.\n if (typeof helpCommand !== 'object') {\n this.helpCommand(helpCommand, deprecatedDescription);\n return this;\n }\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n return this;\n }\n\n /**\n * Lazy create help command.\n *\n * @return {(Command|null)}\n * @package\n */\n _getHelpCommand() {\n const hasImplicitHelpCommand =\n this._addImplicitHelpCommand ??\n (this.commands.length &&\n !this._actionHandler &&\n !this._findCommand('help'));\n\n if (hasImplicitHelpCommand) {\n if (this._helpCommand === undefined) {\n this.helpCommand(undefined, undefined); // use default name and description\n }\n return this._helpCommand;\n }\n return null;\n }\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n }\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n }\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('serve')\n * .description('start service')\n * .action(function() {\n * // do work here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this.registeredArguments.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n }\n\n /**\n * Wrap parseArgs to catch 'commander.invalidArgument'.\n *\n * @param {(Option | Argument)} target\n * @param {string} value\n * @param {*} previous\n * @param {string} invalidArgumentMessage\n * @private\n */\n\n _callParseArg(target, value, previous, invalidArgumentMessage) {\n try {\n return target.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidArgumentMessage} ${err.message}`;\n this.error(message, { exitCode: err.exitCode, code: err.code });\n }\n throw err;\n }\n }\n\n /**\n * Check for option flag conflicts.\n * Register option if no conflicts found, or throw on conflict.\n *\n * @param {Option} option\n * @private\n */\n\n _registerOption(option) {\n const matchingOption =\n (option.short && this._findOption(option.short)) ||\n (option.long && this._findOption(option.long));\n if (matchingOption) {\n const matchingFlag =\n option.long && this._findOption(option.long)\n ? option.long\n : option.short;\n throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n- already used by option '${matchingOption.flags}'`);\n }\n\n this.options.push(option);\n }\n\n /**\n * Check for command name and alias conflicts with existing commands.\n * Register command if no conflicts found, or throw on conflict.\n *\n * @param {Command} command\n * @private\n */\n\n _registerCommand(command) {\n const knownBy = (cmd) => {\n return [cmd.name()].concat(cmd.aliases());\n };\n\n const alreadyUsed = knownBy(command).find((name) =>\n this._findCommand(name),\n );\n if (alreadyUsed) {\n const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n const newCmd = knownBy(command).join('|');\n throw new Error(\n `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n );\n }\n\n this.commands.push(command);\n }\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n this._registerOption(option);\n\n const oname = option.name();\n const name = option.attributeName();\n\n // store default value\n if (option.negate) {\n // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n if (!this._findOption(positiveLongFlag)) {\n this.setOptionValueWithSource(\n name,\n option.defaultValue === undefined ? true : option.defaultValue,\n 'default',\n );\n }\n } else if (option.defaultValue !== undefined) {\n this.setOptionValueWithSource(name, option.defaultValue, 'default');\n }\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // val is null for optional option used without an optional-argument.\n // val is undefined for boolean and negated option.\n if (val == null && option.presetArg !== undefined) {\n val = option.presetArg;\n }\n\n // custom processing\n const oldValue = this.getOptionValue(name);\n if (val !== null && option.parseArg) {\n val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n } else if (val !== null && option.variadic) {\n val = option._concatValue(val, oldValue);\n }\n\n // Fill-in appropriate missing values. Long winded but easy to follow.\n if (val == null) {\n if (option.negate) {\n val = false;\n } else if (option.isBoolean() || option.optional) {\n val = true;\n } else {\n val = ''; // not normal, parseArg might have failed or be a mock function for testing\n }\n }\n this.setOptionValueWithSource(name, val, valueSource);\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @return {Command} `this` command for chaining\n * @private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n if (typeof flags === 'object' && flags instanceof Option) {\n throw new Error(\n 'To add an Option object use addOption() instead of option() or requiredOption()',\n );\n }\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n *\n * See the README for more details, and see also addOption() and requiredOption().\n *\n * @example\n * program\n * .option('-p, --pepper', 'add pepper')\n * .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n * .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n * .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, parseArg, defaultValue) {\n return this._optionEx({}, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, parseArg, defaultValue) {\n return this._optionEx(\n { mandatory: true },\n flags,\n description,\n parseArg,\n defaultValue,\n );\n }\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n * @return {Command} `this` command for chaining\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n }\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n * @return {Command} `this` command for chaining\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n }\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n * @return {Command} `this` command for chaining\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n }\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {boolean} [positional]\n * @return {Command} `this` command for chaining\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n }\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {boolean} [passThrough] for unknown options.\n * @return {Command} `this` command for chaining\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n this._checkForBrokenPassThrough();\n return this;\n }\n\n /**\n * @private\n */\n\n _checkForBrokenPassThrough() {\n if (\n this.parent &&\n this._passThroughOptions &&\n !this.parent._enablePositionalOptions\n ) {\n throw new Error(\n `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n );\n }\n }\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n if (Object.keys(this._optionValues).length) {\n throw new Error(\n 'call .storeOptionsAsProperties() before setting option values',\n );\n }\n this._storeOptionsAsProperties = !!storeAsProperties;\n return this;\n }\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n }\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n return this.setOptionValueWithSource(key, value, undefined);\n }\n\n /**\n * Store option value and where the value came from.\n *\n * @param {string} key\n * @param {object} value\n * @param {string} source - expected values are default/config/env/cli/implied\n * @return {Command} `this` command for chaining\n */\n\n setOptionValueWithSource(key, value, source) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n this._optionValueSources[key] = source;\n return this;\n }\n\n /**\n * Get source of option value.\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSource(key) {\n return this._optionValueSources[key];\n }\n\n /**\n * Get source of option value. See also .optsWithGlobals().\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSourceWithGlobals(key) {\n // global overwrites local, like optsWithGlobals\n let source;\n this._getCommandAndAncestors().forEach((cmd) => {\n if (cmd.getOptionValueSource(key) !== undefined) {\n source = cmd.getOptionValueSource(key);\n }\n });\n return source;\n }\n\n /**\n * Get user arguments from implied or explicit arguments.\n * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n *\n * @private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // auto-detect argument conventions if nothing supplied\n if (argv === undefined && parseOptions.from === undefined) {\n if (process.versions?.electron) {\n parseOptions.from = 'electron';\n }\n // check node specific options for scenarios where user CLI args follow executable without scriptname\n const execArgv = process.execArgv ?? [];\n if (\n execArgv.includes('-e') ||\n execArgv.includes('--eval') ||\n execArgv.includes('-p') ||\n execArgv.includes('--print')\n ) {\n parseOptions.from = 'eval'; // internal usage, not documented\n }\n }\n\n // default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n }\n this.rawArgs = argv.slice();\n\n // extract the user args and scriptPath\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: because defaultApp is an unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n case 'eval':\n userArgs = argv.slice(1);\n break;\n default:\n throw new Error(\n `unexpected parse option { from: '${parseOptions.from}' }`,\n );\n }\n\n // Find default name for program from arguments.\n if (!this._name && this._scriptPath)\n this.nameFromFilename(this._scriptPath);\n this._name = this._name || 'program';\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * program.parse(); // parse process.argv and auto-detect electron and special node flags\n * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n this._prepareForParse();\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n this._prepareForParse();\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n }\n\n _prepareForParse() {\n if (this._savedState === null) {\n this.saveStateBeforeParse();\n } else {\n this.restoreStateBeforeParse();\n }\n }\n\n /**\n * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n * Not usually called directly, but available for subclasses to save their custom state.\n *\n * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n */\n saveStateBeforeParse() {\n this._savedState = {\n // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n _name: this._name,\n // option values before parse have default values (including false for negated options)\n // shallow clones\n _optionValues: { ...this._optionValues },\n _optionValueSources: { ...this._optionValueSources },\n };\n }\n\n /**\n * Restore state before parse for calls after the first.\n * Not usually called directly, but available for subclasses to save their custom state.\n *\n * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n */\n restoreStateBeforeParse() {\n if (this._storeOptionsAsProperties)\n throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n // clear state from _prepareUserArgs\n this._name = this._savedState._name;\n this._scriptPath = null;\n this.rawArgs = [];\n // clear state from setOptionValueWithSource\n this._optionValues = { ...this._savedState._optionValues };\n this._optionValueSources = { ...this._savedState._optionValueSources };\n // clear state from _parseCommand\n this.args = [];\n // clear state from _processArguments\n this.processedArgs = [];\n }\n\n /**\n * Throw if expected executable is missing. Add lots of help for author.\n *\n * @param {string} executableFile\n * @param {string} executableDir\n * @param {string} subcommandName\n */\n _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n if (fs.existsSync(executableFile)) return;\n\n const executableDirMessage = executableDir\n ? `searched for local subcommand relative to directory '${executableDir}'`\n : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n throw new Error(executableMissing);\n }\n\n /**\n * Execute a sub-command executable.\n *\n * @private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n function findFile(baseDir, baseName) {\n // Look for specified file\n const localBin = path.resolve(baseDir, baseName);\n if (fs.existsSync(localBin)) return localBin;\n\n // Stop looking if candidate already has an expected extension.\n if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n // Try all the extensions.\n const foundExt = sourceExt.find((ext) =>\n fs.existsSync(`${localBin}${ext}`),\n );\n if (foundExt) return `${localBin}${foundExt}`;\n\n return undefined;\n }\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // executableFile and executableDir might be full path, or just a name\n let executableFile =\n subcommand._executableFile || `${this._name}-${subcommand._name}`;\n let executableDir = this._executableDir || '';\n if (this._scriptPath) {\n let resolvedScriptPath; // resolve possible symlink for installed npm binary\n try {\n resolvedScriptPath = fs.realpathSync(this._scriptPath);\n } catch {\n resolvedScriptPath = this._scriptPath;\n }\n executableDir = path.resolve(\n path.dirname(resolvedScriptPath),\n executableDir,\n );\n }\n\n // Look for a local file in preference to a command in PATH.\n if (executableDir) {\n let localFile = findFile(executableDir, executableFile);\n\n // Legacy search using prefix of script name instead of command name\n if (!localFile && !subcommand._executableFile && this._scriptPath) {\n const legacyName = path.basename(\n this._scriptPath,\n path.extname(this._scriptPath),\n );\n if (legacyName !== this._name) {\n localFile = findFile(\n executableDir,\n `${legacyName}-${subcommand._name}`,\n );\n }\n }\n executableFile = localFile || executableFile;\n }\n\n launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n }\n } else {\n this._checkForMissingExecutable(\n executableFile,\n executableDir,\n subcommand._name,\n );\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n if (!proc.killed) {\n // testing mainly to avoid leak warnings during unit tests with mocked spawn\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n // @ts-ignore because signals not typed to known strings\n proc.kill(signal);\n }\n });\n });\n }\n\n // By default terminate process when spawned process terminates.\n const exitCallback = this._exitCallback;\n proc.on('close', (code) => {\n code = code ?? 1; // code is null if spawned process terminated due to a signal\n if (!exitCallback) {\n process.exit(code);\n } else {\n exitCallback(\n new CommanderError(\n code,\n 'commander.executeSubCommandAsync',\n '(close)',\n ),\n );\n }\n });\n proc.on('error', (err) => {\n // @ts-ignore: because err.code is an unknown property\n if (err.code === 'ENOENT') {\n this._checkForMissingExecutable(\n executableFile,\n executableDir,\n subcommand._name,\n );\n // @ts-ignore: because err.code is an unknown property\n } else if (err.code === 'EACCES') {\n throw new Error(`'${executableFile}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(\n 1,\n 'commander.executeSubCommandAsync',\n '(error)',\n );\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n }\n\n /**\n * @private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n subCommand._prepareForParse();\n let promiseChain;\n promiseChain = this._chainOrCallSubCommandHook(\n promiseChain,\n subCommand,\n 'preSubcommand',\n );\n promiseChain = this._chainOrCall(promiseChain, () => {\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n });\n return promiseChain;\n }\n\n /**\n * Invoke help directly if possible, or dispatch if necessary.\n * e.g. help foo\n *\n * @private\n */\n\n _dispatchHelpCommand(subcommandName) {\n if (!subcommandName) {\n this.help();\n }\n const subCommand = this._findCommand(subcommandName);\n if (subCommand && !subCommand._executableHandler) {\n subCommand.help();\n }\n\n // Fallback to parsing the help flag to invoke the help.\n return this._dispatchSubcommand(\n subcommandName,\n [],\n [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n );\n }\n\n /**\n * Check this.args against expected this.registeredArguments.\n *\n * @private\n */\n\n _checkNumberOfArguments() {\n // too few\n this.registeredArguments.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (\n this.registeredArguments.length > 0 &&\n this.registeredArguments[this.registeredArguments.length - 1].variadic\n ) {\n return;\n }\n if (this.args.length > this.registeredArguments.length) {\n this._excessArguments(this.args);\n }\n }\n\n /**\n * Process this.args using this.registeredArguments and save as this.processedArgs!\n *\n * @private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n parsedValue = this._callParseArg(\n argument,\n value,\n previous,\n invalidValueMessage,\n );\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this.registeredArguments.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {(Promise|undefined)} promise\n * @param {Function} fn\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise && promise.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n this._getCommandAndAncestors()\n .reverse()\n .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n .forEach((hookedCommand) => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {Command} subCommand\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallSubCommandHook(promise, subCommand, event) {\n let result = promise;\n if (this._lifeCycleHooks[event] !== undefined) {\n this._lifeCycleHooks[event].forEach((hook) => {\n result = this._chainOrCall(result, () => {\n return hook(this, subCommand);\n });\n });\n }\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n this._parseOptionsImplied();\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (\n this._getHelpCommand() &&\n operands[0] === this._getHelpCommand().name()\n ) {\n return this._dispatchHelpCommand(operands[1]);\n }\n if (this._defaultCommandName) {\n this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(\n this._defaultCommandName,\n operands,\n unknown,\n );\n }\n if (\n this.commands.length &&\n this.args.length === 0 &&\n !this._actionHandler &&\n !this._defaultCommandName\n ) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n this._outputHelpIfRequested(parsed.unknown);\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let promiseChain;\n promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n promiseChain = this._chainOrCall(promiseChain, () =>\n this._actionHandler(this.processedArgs),\n );\n if (this.parent) {\n promiseChain = this._chainOrCall(promiseChain, () => {\n this.parent.emit(commandEvent, operands, unknown); // legacy\n });\n }\n promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n return promiseChain;\n }\n if (this.parent && this.parent.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) {\n // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n }\n\n /**\n * Find matching command.\n *\n * @private\n * @return {Command | undefined}\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(\n (cmd) => cmd._name === name || cmd._aliases.includes(name),\n );\n }\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @package\n */\n\n _findOption(arg) {\n return this.options.find((option) => option.is(arg));\n }\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd.options.forEach((anOption) => {\n if (\n anOption.mandatory &&\n cmd.getOptionValue(anOption.attributeName()) === undefined\n ) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n });\n }\n\n /**\n * Display an error message if conflicting options are used together in this.\n *\n * @private\n */\n _checkForConflictingLocalOptions() {\n const definedNonDefaultOptions = this.options.filter((option) => {\n const optionKey = option.attributeName();\n if (this.getOptionValue(optionKey) === undefined) {\n return false;\n }\n return this.getOptionValueSource(optionKey) !== 'default';\n });\n\n const optionsWithConflicting = definedNonDefaultOptions.filter(\n (option) => option.conflictsWith.length > 0,\n );\n\n optionsWithConflicting.forEach((option) => {\n const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n option.conflictsWith.includes(defined.attributeName()),\n );\n if (conflictingAndDefined) {\n this._conflictingOption(option, conflictingAndDefined);\n }\n });\n }\n\n /**\n * Display an error message if conflicting options are used together.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n _checkForConflictingOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd._checkForConflictingLocalOptions();\n });\n }\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Side effects: modifies command by storing options. Does not reset state if called again.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {string[]} argv\n * @return {{operands: string[], unknown: string[]}}\n */\n\n parseOptions(argv) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n const args = argv.slice();\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n // parse options\n let activeVariadicOption = null;\n while (args.length) {\n const arg = args.shift();\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args);\n break;\n }\n\n if (activeVariadicOption && !maybeOption(arg)) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args.shift();\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (args.length > 0 && !maybeOption(args[0])) {\n value = args.shift();\n }\n this.emit(`option:${option.name()}`, value);\n } else {\n // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (\n option.required ||\n (option.optional && this._combineFlagAndOptionalValue)\n ) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option, emit and put back remainder of arg for further processing\n this.emit(`option:${option.name()}`);\n args.unshift(`-${arg.slice(2)}`);\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n if (maybeOption(arg)) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if (\n (this._enablePositionalOptions || this._passThroughOptions) &&\n operands.length === 0 &&\n unknown.length === 0\n ) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n } else if (\n this._getHelpCommand() &&\n arg === this._getHelpCommand().name()\n ) {\n operands.push(arg);\n if (args.length > 0) operands.push(...args);\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg);\n if (args.length > 0) dest.push(...args);\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n }\n\n /**\n * Return an object containing local option values as key-value pairs.\n *\n * @return {object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] =\n key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n }\n\n /**\n * Return an object containing merged local and global option values as key-value pairs.\n *\n * @return {object}\n */\n optsWithGlobals() {\n // globals overwrite locals\n return this._getCommandAndAncestors().reduce(\n (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n {},\n );\n }\n\n /**\n * Display error message and exit (or call exitOverride).\n *\n * @param {string} message\n * @param {object} [errorOptions]\n * @param {string} [errorOptions.code] - an id string representing the error\n * @param {number} [errorOptions.exitCode] - used with process.exit\n */\n error(message, errorOptions) {\n // output handling\n this._outputConfiguration.outputError(\n `${message}\\n`,\n this._outputConfiguration.writeErr,\n );\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n\n // exit handling\n const config = errorOptions || {};\n const exitCode = config.exitCode || 1;\n const code = config.code || 'commander.error';\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // Priority check. Do not overwrite cli or options from unknown source (client-code).\n if (\n this.getOptionValue(optionKey) === undefined ||\n ['default', 'config', 'env'].includes(\n this.getOptionValueSource(optionKey),\n )\n ) {\n if (option.required || option.optional) {\n // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else {\n // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Apply any implied option values, if option is undefined or default value.\n *\n * @private\n */\n _parseOptionsImplied() {\n const dualHelper = new DualOptions(this.options);\n const hasCustomOptionValue = (optionKey) => {\n return (\n this.getOptionValue(optionKey) !== undefined &&\n !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n );\n };\n this.options\n .filter(\n (option) =>\n option.implied !== undefined &&\n hasCustomOptionValue(option.attributeName()) &&\n dualHelper.valueFromOption(\n this.getOptionValue(option.attributeName()),\n option,\n ),\n )\n .forEach((option) => {\n Object.keys(option.implied)\n .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n .forEach((impliedKey) => {\n this.setOptionValueWithSource(\n impliedKey,\n option.implied[impliedKey],\n 'implied',\n );\n });\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this.error(message, { code: 'commander.missingArgument' });\n }\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this.error(message, { code: 'commander.optionMissingArgument' });\n }\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n }\n\n /**\n * `Option` conflicts with another option.\n *\n * @param {Option} option\n * @param {Option} conflictingOption\n * @private\n */\n _conflictingOption(option, conflictingOption) {\n // The calling code does not know whether a negated option is the source of the\n // value, so do some work to take an educated guess.\n const findBestOptionFromValue = (option) => {\n const optionKey = option.attributeName();\n const optionValue = this.getOptionValue(optionKey);\n const negativeOption = this.options.find(\n (target) => target.negate && optionKey === target.attributeName(),\n );\n const positiveOption = this.options.find(\n (target) => !target.negate && optionKey === target.attributeName(),\n );\n if (\n negativeOption &&\n ((negativeOption.presetArg === undefined && optionValue === false) ||\n (negativeOption.presetArg !== undefined &&\n optionValue === negativeOption.presetArg))\n ) {\n return negativeOption;\n }\n return positiveOption || option;\n };\n\n const getErrorMessage = (option) => {\n const bestOption = findBestOptionFromValue(option);\n const optionKey = bestOption.attributeName();\n const source = this.getOptionValueSource(optionKey);\n if (source === 'env') {\n return `environment variable '${bestOption.envVar}'`;\n }\n return `option '${bestOption.flags}'`;\n };\n\n const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n this.error(message, { code: 'commander.conflictingOption' });\n }\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n do {\n const moreFlags = command\n .createHelp()\n .visibleOptions(command)\n .filter((option) => option.long)\n .map((option) => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this.error(message, { code: 'commander.unknownOption' });\n }\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this.registeredArguments.length;\n const s = expected === 1 ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this.error(message, { code: 'commander.excessArguments' });\n }\n\n /**\n * Unknown command.\n *\n * @private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp()\n .visibleCommands(this)\n .forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this.error(message, { code: 'commander.unknownCommand' });\n }\n\n /**\n * Get or set the program version.\n *\n * This method auto-registers the \"-V, --version\" option which will print the version number.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} [str]\n * @param {string} [flags]\n * @param {string} [description]\n * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName();\n this._registerOption(versionOption);\n\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n }\n\n /**\n * Set the description.\n *\n * @param {string} [str]\n * @param {object} [argsDescription]\n * @return {(string|Command)}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined)\n return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n }\n\n /**\n * Set the summary. Used when listed as subcommand of parent.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n summary(str) {\n if (str === undefined) return this._summary;\n this._summary = str;\n return this;\n }\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {(string|Command)}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n if (\n this.commands.length !== 0 &&\n this.commands[this.commands.length - 1]._executableHandler\n ) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name)\n throw new Error(\"Command alias can't be the same as its name\");\n const matchingCommand = this.parent?._findCommand(alias);\n if (matchingCommand) {\n // c.f. _registerCommand\n const existingCmd = [matchingCommand.name()]\n .concat(matchingCommand.aliases())\n .join('|');\n throw new Error(\n `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n );\n }\n\n command._aliases.push(alias);\n return this;\n }\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {(string[]|Command)}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n }\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this.registeredArguments.map((arg) => {\n return humanReadableArgName(arg);\n });\n return []\n .concat(\n this.options.length || this._helpOption !== null ? '[options]' : [],\n this.commands.length ? '[command]' : [],\n this.registeredArguments.length ? args : [],\n )\n .join(' ');\n }\n\n this._usage = str;\n return this;\n }\n\n /**\n * Get or set the name of the command.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n }\n\n /**\n * Set the name of the command from script filename, such as process.argv[1],\n * or require.main.filename, or __filename.\n *\n * (Used internally and public although not documented in README.)\n *\n * @example\n * program.nameFromFilename(require.main.filename);\n *\n * @param {string} filename\n * @return {Command}\n */\n\n nameFromFilename(filename) {\n this._name = path.basename(filename, path.extname(filename));\n\n return this;\n }\n\n /**\n * Get or set the directory for searching for executable subcommands of this command.\n *\n * @example\n * program.executableDir(__dirname);\n * // or\n * program.executableDir('subcommands');\n *\n * @param {string} [path]\n * @return {(string|null|Command)}\n */\n\n executableDir(path) {\n if (path === undefined) return this._executableDir;\n this._executableDir = path;\n return this;\n }\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n const context = this._getOutputContext(contextOptions);\n helper.prepareContext({\n error: context.error,\n helpWidth: context.helpWidth,\n outputHasColors: context.hasColors,\n });\n const text = helper.formatHelp(this, helper);\n if (context.hasColors) return text;\n return this._outputConfiguration.stripColor(text);\n }\n\n /**\n * @typedef HelpContext\n * @type {object}\n * @property {boolean} error\n * @property {number} helpWidth\n * @property {boolean} hasColors\n * @property {function} write - includes stripColor if needed\n *\n * @returns {HelpContext}\n * @private\n */\n\n _getOutputContext(contextOptions) {\n contextOptions = contextOptions || {};\n const error = !!contextOptions.error;\n let baseWrite;\n let hasColors;\n let helpWidth;\n if (error) {\n baseWrite = (str) => this._outputConfiguration.writeErr(str);\n hasColors = this._outputConfiguration.getErrHasColors();\n helpWidth = this._outputConfiguration.getErrHelpWidth();\n } else {\n baseWrite = (str) => this._outputConfiguration.writeOut(str);\n hasColors = this._outputConfiguration.getOutHasColors();\n helpWidth = this._outputConfiguration.getOutHelpWidth();\n }\n const write = (str) => {\n if (!hasColors) str = this._outputConfiguration.stripColor(str);\n return baseWrite(str);\n };\n return { error, write, hasColors, helpWidth };\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n\n const outputContext = this._getOutputContext(contextOptions);\n /** @type {HelpTextEventContext} */\n const eventContext = {\n error: outputContext.error,\n write: outputContext.write,\n command: this,\n };\n\n this._getCommandAndAncestors()\n .reverse()\n .forEach((command) => command.emit('beforeAllHelp', eventContext));\n this.emit('beforeHelp', eventContext);\n\n let helpInformation = this.helpInformation({ error: outputContext.error });\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (\n typeof helpInformation !== 'string' &&\n !Buffer.isBuffer(helpInformation)\n ) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n outputContext.write(helpInformation);\n\n if (this._getHelpOption()?.long) {\n this.emit(this._getHelpOption().long); // deprecated\n }\n this.emit('afterHelp', eventContext);\n this._getCommandAndAncestors().forEach((command) =>\n command.emit('afterAllHelp', eventContext),\n );\n }\n\n /**\n * You can pass in flags and a description to customise the built-in help option.\n * Pass in false to disable the built-in help option.\n *\n * @example\n * program.helpOption('-?, --help' 'show help'); // customise\n * program.helpOption(false); // disable\n *\n * @param {(string | boolean)} flags\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n // Support disabling built-in help option.\n if (typeof flags === 'boolean') {\n // true is not an expected value. Do something sensible but no unit-test.\n // istanbul ignore if\n if (flags) {\n this._helpOption = this._helpOption ?? undefined; // preserve existing option\n } else {\n this._helpOption = null; // disable\n }\n return this;\n }\n\n // Customise flags and description.\n flags = flags ?? '-h, --help';\n description = description ?? 'display help for command';\n this._helpOption = this.createOption(flags, description);\n\n return this;\n }\n\n /**\n * Lazy create help option.\n * Returns null if has been disabled with .helpOption(false).\n *\n * @returns {(Option | null)} the help option\n * @package\n */\n _getHelpOption() {\n // Lazy create help option on demand.\n if (this._helpOption === undefined) {\n this.helpOption(undefined, undefined);\n }\n return this._helpOption;\n }\n\n /**\n * Supply your own option to use for the built-in help option.\n * This is an alternative to using helpOption() to customise the flags and description etc.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addHelpOption(option) {\n this._helpOption = option;\n return this;\n }\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n if (\n exitCode === 0 &&\n contextOptions &&\n typeof contextOptions !== 'function' &&\n contextOptions.error\n ) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n }\n\n /**\n * // Do a little typing to coordinate emit and listener for the help text events.\n * @typedef HelpTextEventContext\n * @type {object}\n * @property {boolean} error\n * @property {Command} command\n * @property {function} write\n */\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {(string | Function)} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n\n /**\n * Output help information if help flags specified\n *\n * @param {Array} args - array of options to search for help flags\n * @private\n */\n\n _outputHelpIfRequested(args) {\n const helpOption = this._getHelpOption();\n const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n if (helpRequested) {\n this.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n ) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n ) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n // Test for common conventions.\n // NB: the observed behaviour is in combination with how author adds color! For example:\n // - we do not test NODE_DISABLE_COLORS, but util:styletext does\n // - we do test NO_COLOR, but Chalk does not\n //\n // References:\n // https://no-color.org\n // https://bixense.com/clicolors/\n // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n if (\n process.env.NO_COLOR ||\n process.env.FORCE_COLOR === '0' ||\n process.env.FORCE_COLOR === 'false'\n )\n return false;\n if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n return true;\n return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n","import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n program,\n createCommand,\n createArgument,\n createOption,\n CommanderError,\n InvalidArgumentError,\n InvalidOptionArgumentError, // deprecated old name\n Command,\n Argument,\n Option,\n Help,\n} = commander;\n","import { resolve } from \"node:path\";\n\nimport { Commander, CommandInfo } from \"../commander\";\nimport { TiddlerStore } from \"../routes/TiddlerStore\";\nimport { TiddlerFields } from \"../services/attachments\";\nimport { truthy, tryParseJSON } from \"../utils\";\nimport { Prisma, PrismaClient, PrismaPromise } from \"@prisma/client\";\n\nexport const info: CommandInfo = {\n\tname: \"load-plugin-bags\",\n\tdescription: \"Load plugin bags from the TiddlyWiki5 plugins folder\",\n\targuments: [\n\t\t[\"path\", \"Path to the TiddlyWiki5 plugins folder\"],\n\t],\n\tsynchronous: true,\n\n};\n\n\nexport class Command {\n\n\tget $tw() { return this.commander.$tw; }\n\tconstructor(\n\t\tpublic params: string[],\n\t\tpublic commander: Commander,\n\t\tpublic callback: (err?: any) => void\n\t) {\n\n\t}\n\tasync execute() {\n\t\tconsole.time(`${info.name} complete`);\n\t\tawait loadPluginBags(\n\t\t\tthis.$tw,\n\t\t\tTiddlerStore.fromCommander(this.commander, this.commander.engine),\n\t\t\tthis.commander.engine\n\t\t);\n\t\tconsole.timeEnd(`${info.name} complete`);\n\t}\n}\n\n\nasync function loadPluginBags($tw: any, store: TiddlerStore, engine: PrismaClient) {\n\n\t// Copy plugins\n\tfunction makePluginBagName(type: string, publisher: string | undefined, name: string) {\n\t\treturn \"$:/\" + type + \"/\" + (publisher ? publisher + \"/\" : \"\") + name;\n\t}\n\tfunction savePlugin(\n\t\tpluginFields: TiddlerFields,\n\t\t// tiddlers: Record<string, TiddlerFields>,\n\t\ttype: string,\n\t\tpublisher: string | undefined,\n\t\tname: string\n\t) {\n\n\t\tconst bagName = makePluginBagName(type, publisher, name) as PrismaField<\"Bags\", \"bag_name\">;\n\t\tconst description = (pluginFields.description ?? \"(no description)\") as PrismaField<\"Bags\", \"description\">;\n\t\tconst is_plugin = true as PrismaField<\"Bags\", \"is_plugin\">;\n\t\t// await store.saveBagTiddler(pluginFields, bagName);\n\t\treturn [\n\t\t\tstore.upsertBag_PrismaPromise(bagName, description, is_plugin, { allowPrivilegedCharacters: true }),\n\t\t\t...store.saveBagTiddlerFields_PrismaArray(pluginFields, bagName, null),\n\t\t\t// ...Object.values(tiddlers).flatMap((fields) => store.saveBagTiddlerFields_PrismaArray(fields, bagName, null))\n\t\t].filter(truthy);\n\n\t}\n\tfunction collectPlugins(folder: string, type: string, publisher?: string | undefined) {\n\t\tvar pluginFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\tconst prismaPromiseArray: PrismaPromise<any>[] = [];\n\t\tfor (var p = 0; p < pluginFolders.length; p++) {\n\t\t\tconst pluginFolderName = pluginFolders[p];\n\t\t\tif ($tw.boot.excludeRegExp.test(pluginFolderName)) continue;\n\n\t\t\tconst pluginFields: TiddlerFields = $tw.loadPluginFolder(resolve(folder, pluginFolderName));\n\t\t\tif (!pluginFields?.title) continue;\n\n\t\t\t// const { tiddlers = {} } = tryParseJSON<{\n\t\t\t// \ttiddlers: Record<string, TiddlerFields>\n\t\t\t// }>(pluginFields.text) ?? {};\n\t\t\t// delete pluginFields.text;\n\n\t\t\tprismaPromiseArray.push(...savePlugin(pluginFields, type, publisher, pluginFolderName));\n\n\t\t\t// console.log(`Import plugin ${pluginFields.title}`);\n\t\t}\n\t\tprismaPromiseArray.forEach(e => {\n\t\t\tif (e[Symbol.toStringTag] !== \"PrismaPromise\") console.log(e)\n\t\t})\n\t\treturn prismaPromiseArray;\n\t}\n\tfunction collectPublisherPlugins(folder: string, type: string) {\n\t\tvar publisherFolders: string[] = $tw.utils.getSubdirectories(folder) || [];\n\t\treturn publisherFolders.flatMap((publisherFolderName) => {\n\t\t\tif ($tw.boot.excludeRegExp.test(publisherFolderName)) return [];\n\t\t\treturn collectPlugins(resolve(folder, publisherFolderName), type, publisherFolderName);\n\t\t});\n\t};\n\tconst plugins = $tw.getLibraryItemSearchPaths($tw.config.pluginsPath, $tw.config.pluginsEnvVar);\n\tconst themes = $tw.getLibraryItemSearchPaths($tw.config.themesPath, $tw.config.themesEnvVar);\n\tconst languages = $tw.getLibraryItemSearchPaths($tw.config.languagesPath, $tw.config.languagesEnvVar);\n\tconst prismaPromiseArray = [\n\t\t...plugins.flatMap((folder: string) => collectPublisherPlugins(folder, \"plugins\")),\n\t\t...themes.flatMap((folder: string) => collectPublisherPlugins(folder, \"themes\")),\n\t\t...languages.flatMap((folder: string) => collectPlugins(folder, \"languages\")),\n\t];\n\tprismaPromiseArray.forEach(e => {\n\t\tif (e[Symbol.toStringTag] !== \"PrismaPromise\") {\n\t\t\tif (Array.isArray(e)) console.log(e.length);\n\t\t\telse console.log(e);\n\t\t}\n\t})\n\tawait engine.$transaction(prismaPromiseArray);\n\n}\n\n\n\n// // these are the main type definitions for the generator function. \n// // Modify these if you use a typed sql framework.\n// type YieldInput = Prisma.PrismaPromise<any>;\n// type YieldOutput<Input extends YieldInput> = Awaited<Input>;\n// // this is the generator type\n// type PrismaGenerator<T> = Generator<YieldInput[], T, YieldOutput<YieldInput>[]>;\n\n// const prisma = new PrismaClient();\n// prisma.bagAcl.aggregate\n\n\n// type MapInputToOutput<T extends YieldInput[]> = T extends [\n// \tinfer First extends YieldInput,\n// \t...infer Rest extends YieldInput[]\n// ] ? [YieldOutput<First>, ...MapInputToOutput<Rest>] : [];\n\n// /** This just types the yield output according to the input. Make sure you call it with `yield*` */\n// function* Yielder<const I extends YieldInput[]>(...input: I)\n// \t: PrismaGenerator<MapInputToOutput<I>> { return (yield input) as MapInputToOutput<I>; }\n\n// function prismaYielder(prisma: PrismaClient) {\n// \treturn function* yielder<const I extends YieldInput[]>(...input: I)\n// \t\t: PrismaGenerator<MapInputToOutput<I>> { return (yield input) as MapInputToOutput<I>; }\n// }\n\n// // this section is an example usage of the above functions\n\n// function* prismaBatchTransaction(yielder: typeof Yielder): PrismaGenerator<{ titles: string[] }> {\n// \t// yield* is essentially a spread operator for generators \n// \t// yielder yeilds one value then returns the result.\n// \t// this just gives us a way to type the output of a yield according to the input\n// \t// so if we give it a typed sql query input, it can return a typed result\n\n// \tconst [result1] = yield* yielder(prisma.bagAcl.aggregate({}));\n\n// \treturn { titles: [] };\n\n// }\n","/*\\\ntitle: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-render-tiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to create and load a bag for the specified core editions\n\n\n\n\\*/\n\n\nimport { resolve } from \"node:path\";\nimport { Commander, CommandInfo } from \"../commander\";\n\nconst { writeFileSync } = require(\"fs\");\n\nexport const info: CommandInfo = {\n name: \"render-tiddlywiki5\",\n description: \"Render the TiddlyWiki5 HTML file\",\n arguments: [],\n synchronous: true\n};\n\nexport class Command {\n\n constructor(\n public params: string[],\n public commander: Commander,\n public callback: (err?: any) => void\n ) {\n\n }\n async execute() {\n\n const result = this.commander.$tw.wiki.renderTiddler(\"text/plain\", \"$:/core/templates/tiddlywiki5.html\", {\n variables: {\n // the boot and library tiddlers get rendered into the page\n // this list gets saved in the store array\n // we have to render at least one tiddler\n saveTiddlerFilter: this.commander.siteConfig.enablePluginCache ? `\n $:/temp/nothing\n ` : `\n $:/core\n $:/plugins/tiddlywiki/tiddlyweb\n $:/plugins/tiddlywiki/multiwikiclient\n $:/themes/tiddlywiki/snowwhite\n $:/themes/tiddlywiki/vanilla\n `\n }\n });\n\n const filepath = resolve(this.commander.wikiPath, \"tiddlywiki5.html\")\n\n writeFileSync(filepath, result);\n }\n};\n\n","/*\\\ntitle: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-load-wiki-folder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to create and load a bag for the specified core editions\n\n--load-wiki-folder <path> <bag-name> <bag-description> <recipe-name> <recipe-description>\n\n\\*/\n\n\nimport { resolve } from \"path\";\nimport { Commander, CommandInfo } from \"../commander\";\nimport { TiddlerStore } from \"../routes/TiddlerStore\";\nimport { TiddlerFields } from \"../services/attachments\";\nimport { Prisma, PrismaClient } from \"@prisma/client\";\n\nexport const info: CommandInfo = {\n\tname: \"load-wiki-folder\",\n\tdescription: \"Load a TiddlyWiki folder into a bag\",\n\targuments: [\n\t\t[\"path\", \"Path to the TiddlyWiki5 plugins folder\"],\n\t\t[\"bag-name\", \"Name of the bag to load tiddlers into\"],\n\t\t[\"bag-description\", \"Description of the bag\"],\n\t\t[\"recipe-name\", \"Name of the recipe to create\"],\n\t\t[\"recipe-description\", \"Description of the recipe\"],\n\t],\n\tsynchronous: true\n};\n// tiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\nexport class Command {\n\tconstructor(\n\t\tpublic params: string[],\n\t\tpublic commander: Commander,\n\t\tpublic callback: (err?: any) => void\n\t) {\n\n\t}\n\tasync execute() {\n\n\t\t// Check parameters\n\t\tif (this.params.length < 5) {\n\t\t\treturn \"Missing parameters for --mws-load-wiki-folder command\";\n\t\t}\n\n\t\tawait this.commander.engine.$transaction(loadWikiFolder({\n\t\t\twikiPath: this.params[0] as string,\n\t\t\tbagName: this.params[1] as PrismaField<\"Bags\", \"bag_name\">,\n\t\t\tbagDescription: this.params[2] as PrismaField<\"Bags\", \"description\">,\n\t\t\trecipeName: this.params[3] as PrismaField<\"Recipes\", \"recipe_name\">,\n\t\t\trecipeDescription: this.params[4] as PrismaField<\"Recipes\", \"description\">,\n\t\t\tstore: TiddlerStore.fromCommander(this.commander, this.commander.engine),\n\t\t\t$tw: this.commander.$tw\n\t\t}));\n\t\tconsole.log(info.name, \"complete:\", this.params[0])\n\t\treturn null;\n\t}\n}\n\n\n// Function to convert a plugin name to a bag name\nfunction makePluginBagName(type: string, publisher: string | undefined, name: string) {\n\treturn \"$:/\" + type + \"/\" + (publisher ? publisher + \"/\" : \"\") + name;\n}\n\n// Copy TiddlyWiki core editions\nfunction loadWikiFolder({ $tw, store, ...options }: {\n\twikiPath: string,\n\tbagName: PrismaField<\"Bags\", \"bag_name\">,\n\tbagDescription: PrismaField<\"Bags\", \"description\">,\n\trecipeName: PrismaField<\"Recipes\", \"recipe_name\">,\n\trecipeDescription: PrismaField<\"Recipes\", \"description\">,\n\tstore: TiddlerStore,\n\t$tw: any\n}) {\n\tconst path = require(\"path\"),\n\t\tfs = require(\"fs\");\n\t// Read the tiddlywiki.info file\n\tconst wikiInfoPath = path.resolve(options.wikiPath, $tw.config.wikiInfo);\n\tlet wikiInfo;\n\tif (fs.existsSync(wikiInfoPath)) {\n\t\twikiInfo = $tw.utils.parseJSONSafe(fs.readFileSync(wikiInfoPath, \"utf8\"), function () { return null; });\n\t}\n\tif (!wikiInfo) return [];\n\t// Add plugins to the recipe list\n\tconst recipeList = [];\n\tconst processPlugins = function (type: string, plugins: string[]) {\n\t\t$tw.utils.each(plugins, function (pluginName: string) {\n\t\t\tconst parts = pluginName.split(\"/\");\n\t\t\tlet publisher, name;\n\t\t\tif (parts.length === 2) {\n\t\t\t\tpublisher = parts[0];\n\t\t\t\tname = parts[1];\n\t\t\t} else {\n\t\t\t\tname = parts[0];\n\t\t\t}\n\t\t\trecipeList.push({ bag_name: makePluginBagName(type, publisher, name as string), with_acl: false });\n\t\t});\n\t};\n\tprocessPlugins(\"plugins\", wikiInfo.plugins);\n\tprocessPlugins(\"themes\", wikiInfo.themes);\n\tprocessPlugins(\"languages\", wikiInfo.languages);\n\t// Create the recipe\n\trecipeList.push({\n\t\tbag_name: options.bagName,\n\t\twith_acl: true as PrismaField<\"Recipe_bags\", \"with_acl\">,\n\t});\n\trecipeList.reverse()\n\n\n\tconst tiddler_files_path = path.resolve(options.wikiPath, $tw.config.wikiTiddlersSubDir)\n\tconst tiddlersFromPath: TiddlerInfo[] = $tw.loadTiddlersFromPath(\n\t\tresolve($tw.boot.corePath, $tw.config.editionsPath, tiddler_files_path)\n\t);\n\n\tconst is_plugin = false as PrismaField<\"Bags\", \"is_plugin\">;\n\treturn [\n\t\t// create the bag\n\t\tstore.upsertBag_PrismaPromise(options.bagName, options.bagDescription, is_plugin),\n\t\t// create the recipe and recipe_bags entries\n\t\t...store.upsertRecipe_PrismaArray(\n\t\t\toptions.recipeName,\n\t\t\toptions.recipeDescription,\n\t\t\trecipeList,\n\t\t),\n\t\t// save the tiddlers (this will skip attachments)\n\t\t...store.saveTiddlersFromPath_PrismaArray(tiddlersFromPath, options.bagName)\n\t];\n\n}\ninterface TiddlerInfo { tiddlers: TiddlerFields[], filepath: string, type: string, hasMetaFile: boolean }","/*\\\ntitle: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-save-archive.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load an archive of recipes, bags and tiddlers to a directory\n\n\\*/\n\nimport { writeFileSync } from \"fs\";\nimport { Commander, CommandInfo } from \"../commander\";\nimport { TiddlerStore } from \"../routes/TiddlerStore\";\nimport { resolve } from \"path\";\nimport * as _fsp from \"fs/promises\";\nimport { createStrictAwaitProxy } from \"../utils\";\nconst fsp = createStrictAwaitProxy(_fsp);\n\nexport const info: CommandInfo = {\n\tname: \"save-archive\",\n\tdescription: \"Save an archive of recipes, bags and tiddlers to a directory\",\n\targuments: [\n\t\t[\"path\", \"Path to the directory to save the archive\"],\n\t],\n\tsynchronous: true\n};\nexport class Command {\n\tget $tw() { return this.commander.$tw as { utils: any }; }\n\tget archivePath() { return this.params[0] as string; }\n\tstore?: TiddlerStore;\n\tconstructor(\n\t\tpublic params: string[],\n\t\tpublic commander: Commander,\n\t\tpublic callback: (err?: any) => void\n\t) {\n\n\t}\n\tasync execute() {\n\t\t// Check parameters\n\t\tif (this.params.length < 1) throw \"Missing pathname\";\n\t\tawait this.commander.$transaction(async (prisma) => {\n\t\t\tthis.store = TiddlerStore.fromCommander(this.commander, prisma);\n\t\t\tawait this.saveArchive();\n\t\t\tthis.store = undefined;\n\t\t});\n\t\tconsole.log(info.name, \"complete:\", this.params[0])\n\t\treturn null;\n\t}\n\n\tasync getRecipes() {\n\t\treturn await this.store!.prisma.recipes.findMany({\n\t\t\tinclude: { recipe_bags: true, acl: true },\n\t\t});\n\t}\n\tasync getBags() {\n\t\tconst bags = await this.store!.prisma.bags.findMany({\n\t\t\tinclude: { tiddlers: { include: { fields: true } }, acl: true }\n\t\t});\n\t\treturn bags.map(e => ({\n\t\t\t...e,\n\t\t\ttiddlers: e.tiddlers.map(t => ({\n\t\t\t\t...t,\n\t\t\t\tfields: Object.fromEntries(t.fields.map(f => [f.field_name, f.field_value]))\n\t\t\t}))\n\t\t}));\n\t}\n\tasync getUsers() {\n\t\treturn await this.store!.prisma.users.findMany({ include: { roles: true, sessions: true, groups: true } });\n\t}\n\tasync getGroups() {\n\t\treturn await this.store!.prisma.groups.findMany({ include: { roles: true } });\n\t}\n\tasync getRoles() {\n\t\treturn await this.store!.prisma.roles.findMany({});\n\t}\n\n\tasync saveArchive() {\n\t\tif (!this.store) throw new Error(\"Store not initialized\");\n\t\tconst uriC = encodeURIComponent;\n\t\tawait fsp.mkdir(resolve(this.archivePath, \"recipes\"), { recursive: true });\n\t\tconst recipes = await this.getRecipes();\n\t\tfor (const recipeInfo of recipes) {\n\t\t\t// console.log(`Recipe ${recipeInfo.recipe_name}`);\n\t\t\tconst recipeFile = `recipes/${uriC(recipeInfo.recipe_name)}.json`;\n\t\t\tawait fsp.writeFile(resolve(this.archivePath, recipeFile), JSON.stringify(recipeInfo, null, \"\\t\"));\n\t\t}\n\t\tawait fsp.mkdir(resolve(this.archivePath, \"bags\"), { recursive: true });\n\t\tconst bags = await this.getBags();\n\t\tawait Promise.all(bags.map(async bagInfo => {\n\t\t\tconst tiddlersFolder = `bags/${uriC(bagInfo.bag_name)}/tiddlers`;\n\t\t\tawait fsp.mkdir(resolve(this.archivePath, tiddlersFolder), { recursive: true });\n\t\t\t// console.log(`Bag ${bagInfo.bag_name}`);\n\t\t\tconst bagFile = `bags/${uriC(bagInfo.bag_name)}/meta.json`;\n\t\t\tawait fsp.writeFile(resolve(this.archivePath, bagFile), JSON.stringify({ ...bagInfo, tiddlers: undefined, }, null, \"\\t\"));\n\t\t\tfor (const tiddler of bagInfo.tiddlers) {\n\t\t\t\t// console.log(bagInfo.bag_name, tiddler.title, tiddler.tiddler_id);\n\t\t\t\tconst tiddlerFile = `bags/${uriC(bagInfo.bag_name)}/tiddlers/${tiddler.tiddler_id}.json`;\n\t\t\t\tawait fsp.writeFile(resolve(this.archivePath, tiddlerFile), JSON.stringify(tiddler, null, \"\\t\"));\n\t\t\t}\n\t\t}));\n\t\tconst users = await this.getUsers();\n\t\tawait fsp.writeFile(resolve(this.archivePath, \"users.json\"), JSON.stringify(users, null, \"\\t\"));\n\t\tconst groups = await this.getGroups();\n\t\tawait fsp.writeFile(resolve(this.archivePath, \"groups.json\"), JSON.stringify(groups, null, \"\\t\"));\n\t\tconst roles = await this.getRoles();\n\t\tawait fsp.writeFile(resolve(this.archivePath, \"roles.json\"), JSON.stringify(roles, null, \"\\t\"));\n\n\t\tawait fsp.writeFile(resolve(this.archivePath, \"index.json\"), JSON.stringify({\n\t\t\tversion: 2,\n\t\t\tcomment: \"The version is an internal identifier for the archive format. It is not the same as the version of TiddlyWiki or MWS.\",\n\t\t}, null, \"\\t\"));\n\t\t// Version 1: \n\t\t// is_plugin did not exist. A bag_name starting with $:/ was a plugin.\n\t}\n\n}\n","\nimport { Commander, CommandInfo } from \"../commander\";\nimport { TiddlerStore } from \"../routes/TiddlerStore\";\nimport { join, resolve } from \"path\";\nimport { Prisma } from \"@prisma/client\";\nimport { Command as SaveArchiveCommand } from \"./save-archive\";\nimport * as _fsp from \"fs/promises\";\nimport { createStrictAwaitProxy } from \"../utils\";\nimport { PrismaClientKnownRequestError } from \"@prisma/client/runtime/library\";\nimport { existsSync } from \"fs\";\nconst fsp = createStrictAwaitProxy(_fsp);\n\nexport const info: CommandInfo = {\n\tname: \"load-archive\",\n\tdescription: \"Load a MWS archive into the database\",\n\targuments: [\n\t\t[\"archivePath\", \"Path to the archive to load\"],\n\t],\n\tsynchronous: true\n};\nexport class Command {\n\n\tconstructor(\n\t\tpublic params: string[],\n\t\tpublic commander: Commander,\n\t\tpublic callback: (err?: any) => void\n\t) {\n\n\n\t}\n\n\tasync execute() {\n\t\tif (this.params.length < 1) throw \"Missing pathname\";\n\t\tconst archivePath = this.params[0] as string;\n\n\t\tconst index: { version: number } = existsSync(resolve(archivePath, \"index.json\"))\n\t\t\t? JSON.parse(await fsp.readFile(resolve(archivePath, \"index.json\"), \"utf8\"))\n\t\t\t: { version: 1 };\n\t\t// this is all the versions in this repo.\n\t\t// the multi-wiki-support branch from the TW5 repo is not supported.\n\t\tswitch (index.version) {\n\t\t\tcase 1:\n\t\t\t\tawait new Archiver1(this.commander).loadArchive(archivePath);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tawait new Archiver2(this.commander).loadArchive(archivePath);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported archive version ${index.version}`);\n\t\t}\n\n\t\tthis.commander.setupRequired = false;\n\n\t}\n\n}\n\nclass Archiver {\n\tconstructor(\n\t\tpublic commander: Commander,\n\t) {\n\n\t}\n}\n\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n\nclass Archiver1 extends Archiver {\n\n\tasync loadArchive(archivePath: string) {\n\t\tawait this.commander.$transaction(async (prisma) => {\n\t\t\t// load roles from roles/roles.json\n\t\t\tconst roles = JSON.parse(await fsp.readFile(resolve(archivePath, \"roles\", \"roles.json\"), \"utf8\"));\n\t\t\tawait prisma.roles.createMany({ data: roles });\n\t\t\t// load users from users/{user_id}.json\n\t\t\tconst userFiles = await fsp.readdir(resolve(archivePath, \"users\"));\n\t\t\tconst users = await Promise.all(userFiles.map(async (userFile) => {\n\t\t\t\treturn JSON.parse(await fsp.readFile(resolve(archivePath, \"users\", userFile), \"utf8\"));\n\t\t\t}));\n\t\t\tawait prisma.users.createMany({ data: users });\n\t\t\t// Iterate the bags\n\t\t\tconst bagNames = await fsp.readdir(resolve(archivePath, \"bags\"));\n\t\t\tfor (const bagFilename of bagNames) {\n\t\t\t\tconst stat = await fsp.stat(resolve(archivePath, \"bags\", bagFilename));\n\t\t\t\tif (!stat.isDirectory()) continue;\n\t\t\t\tconsole.log(`Reading bag ${decodeURIComponent(bagFilename)}`);\n\t\t\t\tawait this.restoreBag(resolve(archivePath, \"bags\", bagFilename), prisma);\n\t\t\t}\n\t\t\t// Iterate the recipes\n\t\t\tconst recipeNames = await fsp.readdir(resolve(archivePath, \"recipes\"));\n\t\t\tfor (const recipeFilename of recipeNames) {\n\t\t\t\tif (!recipeFilename.endsWith(\".json\")) continue;\n\t\t\t\tconsole.log(`Reading recipe ${decodeURIComponent(recipeFilename)}`);\n\t\t\t\tawait this.restoreRecipe(resolve(archivePath, \"recipes\", recipeFilename), prisma);\n\t\t\t}\n\n\t\t}).catch(e => {\n\t\t\tif (e instanceof PrismaClientKnownRequestError) {\n\t\t\t\tconsole.log(e.code, e.meta, e.message);\n\t\t\t\tthrow e.message;\n\t\t\t} else {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t});\n\t}\n\tprivate async restoreRecipe(file: string, prisma: PrismaTxnClient) {\n\t\ttype RecipeInfo = Awaited<ReturnType<SaveArchiveCommand[\"getRecipes\"]>>[number];\n\t\tconst recipeInfo: RecipeInfo = JSON.parse(await fsp.readFile(file, \"utf8\"));\n\t\tawait prisma.recipes.create({\n\t\t\tdata: {\n\t\t\t\trecipe_id: recipeInfo.recipe_id,\n\t\t\t\trecipe_name: recipeInfo.recipe_name,\n\t\t\t\tdescription: recipeInfo.description,\n\t\t\t\towner_id: recipeInfo.owner_id,\n\t\t\t\tacl: { createMany: { data: recipeInfo.acl } },\n\t\t\t\trecipe_bags: {\n\t\t\t\t\tcreateMany: {\n\t\t\t\t\t\tdata: recipeInfo.recipe_bags.map(e => ({\n\t\t\t\t\t\t\tbag_id: e.bag_id,\n\t\t\t\t\t\t\tposition: e.position,\n\t\t\t\t\t\t\twith_acl: e.with_acl,\n\t\t\t\t\t\t}))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tprivate async restoreBag(folder: string, prisma: PrismaTxnClient) {\n\t\ttype BagInfo = Awaited<ReturnType<SaveArchiveCommand[\"getBags\"]>>[number];\n\t\tconst bagInfo: BagInfo = JSON.parse(await fsp.readFile(join(folder, \"meta.json\"), \"utf8\"));\n\t\tawait prisma.bags.create({\n\t\t\tdata: {\n\t\t\t\tbag_id: bagInfo.bag_id,\n\t\t\t\tbag_name: bagInfo.bag_name,\n\t\t\t\tdescription: bagInfo.description,\n\t\t\t\towner_id: bagInfo.owner_id,\n\t\t\t\tis_plugin: bagInfo.bag_name.startsWith(\"$:/\"),\n\t\t\t\tacl: { createMany: { data: bagInfo.acl } },\n\t\t\t}\n\t\t});\n\t\ttype TiddlerData = Awaited<ReturnType<SaveArchiveCommand[\"getBags\"]>>[number][\"tiddlers\"][number];\n\t\tconst tiddlerFiles = await fsp.readdir(join(folder, \"tiddlers\"));\n\t\tconst tiddlers: TiddlerData[] = await Promise.all(tiddlerFiles.map(async (tiddlerFilename) => {\n\t\t\tif (!tiddlerFilename.endsWith(\".json\")) return;\n\t\t\tconst value = await fsp.readFile(join(folder, \"tiddlers\", tiddlerFilename), \"utf8\");\n\t\t\treturn JSON.parse(value);\n\t\t}));\n\t\tawait prisma.tiddlers.createMany({\n\t\t\tdata: tiddlers.flatMap((tiddler): Prisma.TiddlersCreateManyInput => ({\n\t\t\t\tbag_id: bagInfo.bag_id,\n\t\t\t\ttitle: tiddler.title,\n\t\t\t\tis_deleted: tiddler.is_deleted,\n\t\t\t\tattachment_hash: tiddler.attachment_hash,\n\t\t\t\ttiddler_id: tiddler.tiddler_id,\n\t\t\t}))\n\t\t});\n\t\tawait prisma.fields.createMany({\n\t\t\tdata: tiddlers.flatMap(({ tiddler_id, fields }) => Object.entries(fields)\n\t\t\t\t.map(([field_name, field_value]): Prisma.FieldsCreateManyInput =>\n\t\t\t\t\t({ tiddler_id, field_name, field_value, })\n\t\t\t\t)\n\t\t\t)\n\t\t});\n\t}\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////\n\nclass Archiver2 extends Archiver {\n\n\tasync loadArchive(archivePath: string) {\n\t\tawait this.commander.$transaction(async (prisma) => {\n\t\t\tconst roles = JSON.parse(await fsp.readFile(resolve(archivePath, \"roles.json\"), \"utf8\"));\n\t\t\tawait prisma.roles.createMany({ data: roles });\n\t\t\tconst users: Awaited<ReturnType<SaveArchiveCommand[\"getUsers\"]>> = JSON.parse(await fsp.readFile(resolve(archivePath, \"users.json\"), \"utf8\"));\n\t\t\tawait Promise.all(users.map(e => prisma.users.create({\n\t\t\t\tdata: ({\n\t\t\t\t\tuser_id: e.user_id,\n\t\t\t\t\temail: e.email,\n\t\t\t\t\tpassword: e.password,\n\t\t\t\t\tusername: e.username,\n\t\t\t\t\tcreated_at: e.created_at,\n\t\t\t\t\tlast_login: e.last_login,\n\t\t\t\t\troles: ({ connect: e.roles.map(e => ({ role_id: e.role_id })) }),\n\t\t\t\t} satisfies Prisma.UsersUncheckedCreateInput)\n\t\t\t})));\n\n\t\t\t// Iterate the bags\n\t\t\tconst bagNames = await fsp.readdir(resolve(archivePath, \"bags\"));\n\t\t\tfor (const bagFilename of bagNames) {\n\t\t\t\tconst stat = await fsp.stat(resolve(archivePath, \"bags\", bagFilename));\n\t\t\t\tif (!stat.isDirectory()) continue;\n\t\t\t\tconsole.log(`Reading bag ${decodeURIComponent(bagFilename)}`);\n\t\t\t\tawait this.restoreBag(resolve(archivePath, \"bags\", bagFilename), prisma);\n\t\t\t}\n\t\t\t// Iterate the recipes\n\t\t\tconst recipeNames = await fsp.readdir(resolve(archivePath, \"recipes\"));\n\t\t\tfor (const recipeFilename of recipeNames) {\n\t\t\t\tif (!recipeFilename.endsWith(\".json\")) continue;\n\t\t\t\tconsole.log(`Reading recipe ${decodeURIComponent(recipeFilename)}`);\n\t\t\t\tawait this.restoreRecipe(resolve(archivePath, \"recipes\", recipeFilename), prisma);\n\t\t\t}\n\n\t\t}).catch(e => {\n\t\t\tif (e instanceof PrismaClientKnownRequestError) {\n\t\t\t\tconsole.log(e.code, e.meta, e.message);\n\t\t\t\tthrow e.message;\n\t\t\t} else {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t});\n\t}\n\tprivate async restoreRecipe(file: string, prisma: PrismaTxnClient) {\n\t\ttype RecipeInfo = Awaited<ReturnType<SaveArchiveCommand[\"getRecipes\"]>>[number];\n\t\tconst recipeInfo: RecipeInfo = JSON.parse(await fsp.readFile(file, \"utf8\"));\n\t\tawait prisma.recipes.create({\n\t\t\tdata: {\n\t\t\t\trecipe_id: recipeInfo.recipe_id,\n\t\t\t\trecipe_name: recipeInfo.recipe_name,\n\t\t\t\tdescription: recipeInfo.description,\n\t\t\t\towner_id: recipeInfo.owner_id,\n\t\t\t\tacl: { createMany: { data: recipeInfo.acl } },\n\t\t\t\trecipe_bags: {\n\t\t\t\t\tcreateMany: {\n\t\t\t\t\t\tdata: recipeInfo.recipe_bags.map(e => ({\n\t\t\t\t\t\t\tbag_id: e.bag_id,\n\t\t\t\t\t\t\tposition: e.position,\n\t\t\t\t\t\t\twith_acl: e.with_acl,\n\t\t\t\t\t\t}))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tprivate async restoreBag(folder: string, prisma: PrismaTxnClient) {\n\t\ttype BagInfo = Awaited<ReturnType<SaveArchiveCommand[\"getBags\"]>>[number];\n\t\tconst bagInfo: BagInfo = JSON.parse(await fsp.readFile(join(folder, \"meta.json\"), \"utf8\"));\n\t\tawait prisma.bags.create({\n\t\t\tdata: {\n\t\t\t\tbag_id: bagInfo.bag_id,\n\t\t\t\tbag_name: bagInfo.bag_name,\n\t\t\t\tdescription: bagInfo.description,\n\t\t\t\towner_id: bagInfo.owner_id,\n\t\t\t\tis_plugin: bagInfo.is_plugin,\n\t\t\t\tacl: { createMany: { data: bagInfo.acl } },\n\t\t\t}\n\t\t});\n\t\ttype TiddlerData = Awaited<ReturnType<SaveArchiveCommand[\"getBags\"]>>[number][\"tiddlers\"][number];\n\t\tconst tiddlerFiles = await fsp.readdir(join(folder, \"tiddlers\"));\n\t\tconst tiddlers: TiddlerData[] = await Promise.all(tiddlerFiles.map(async (tiddlerFilename) => {\n\t\t\tif (!tiddlerFilename.endsWith(\".json\")) return;\n\t\t\tconst value = await fsp.readFile(join(folder, \"tiddlers\", tiddlerFilename), \"utf8\");\n\t\t\treturn JSON.parse(value);\n\t\t}));\n\t\tawait prisma.tiddlers.createMany({\n\t\t\tdata: tiddlers.flatMap((tiddler): Prisma.TiddlersCreateManyInput => ({\n\t\t\t\tbag_id: bagInfo.bag_id,\n\t\t\t\ttitle: tiddler.title,\n\t\t\t\tis_deleted: tiddler.is_deleted,\n\t\t\t\tattachment_hash: tiddler.attachment_hash,\n\t\t\t\ttiddler_id: tiddler.tiddler_id,\n\t\t\t}))\n\t\t});\n\t\tawait prisma.fields.createMany({\n\t\t\tdata: tiddlers.flatMap(({ tiddler_id, fields }) => Object.entries(fields)\n\t\t\t\t.map(([field_name, field_value]): Prisma.FieldsCreateManyInput =>\n\t\t\t\t\t({ tiddler_id, field_name, field_value, })\n\t\t\t\t)\n\t\t\t)\n\t\t});\n\t}\n}\n","import { resolve } from \"node:path\";\n\nimport { Commander, CommandInfo } from \"../commander\";\nimport { TiddlerStore } from \"../routes/TiddlerStore\";\nimport { readFileSync } from \"node:fs\";\nimport { dist_require_resolve, dist_resolve } from \"../utils\";\n\nexport const info: CommandInfo = {\n\tname: \"init-store\",\n\tdescription: \"Initialize the MWS Store\",\n\targuments: [],\n\tsynchronous: true,\n};\n\n\nexport class Command {\n\n\tget $tw() { return this.commander.$tw; }\n\tconstructor(\n\t\tpublic params: string[],\n\t\tpublic commander: Commander,\n\t\tpublic callback: (err?: any) => void\n\t) {\n\n\t}\n\tasync execute() {\n\n\t\tif (!this.commander.setupRequired) return;\n\n\t\tawait this.commander.$transaction(async (prisma) => {\n\t\t\tconst userCount = await prisma.users.count();\n\n\t\t\tif (!userCount) {\n\n\t\t\t\tawait prisma.roles.createMany({\n\t\t\t\t\tdata: [\n\t\t\t\t\t\t{ role_id: 1, role_name: \"ADMIN\", description: \"System Administrator\" },\n\t\t\t\t\t\t{ role_id: 2, role_name: \"USER\", description: \"Basic User\" },\n\t\t\t\t\t]\n\t\t\t\t});\n\n\t\t\t\tconst user = await prisma.users.create({\n\t\t\t\t\tdata: { username: \"admin\", email: \"\", password: \"\", roles: { connect: { role_id: 1 } } },\n\t\t\t\t\tselect: { user_id: true }\n\t\t\t\t});\n\n\t\t\t\tconst password = await this.commander.PasswordService.PasswordCreation(user.user_id.toString(), \"1234\");\n\n\t\t\t\tawait prisma.users.update({\n\t\t\t\t\twhere: { user_id: user.user_id },\n\t\t\t\t\tdata: { password: password }\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t});\n\t\t// should give us the path to boot.js\n\t\tconst tweditions = resolve(dist_require_resolve(\"tiddlywiki\"), \"../../editions\");\n\t\tthis.commander.addCommandTokens([\n\t\t\t\"--load-plugin-bags\",\n\t\t\t\"--load-wiki-folder\", dist_resolve(\"../editions/mws-docs\"),\n\t\t\t\"mws-docs\", \"MWS Documentation from https://mws.tiddlywiki.com\",\n\t\t\t\"mws-docs\", \"MWS Documentation from https://mws.tiddlywiki.com\",\n\t\t\t\"--load-wiki-folder\", resolve(tweditions, \"tw5.com\"),\n\t\t\t\"docs\", \"TiddlyWiki Documentation from https://tiddlywiki.com\",\n\t\t\t\"docs\", \"TiddlyWiki Documentation from https://tiddlywiki.com\",\n\t\t\t\"--load-wiki-folder\", resolve(tweditions, \"dev\"),\n\t\t\t\"dev\", \"TiddlyWiki Developer Documentation from https://tiddlywiki.com/dev\",\n\t\t\t\"dev-docs\", \"TiddlyWiki Developer Documentation from https://tiddlywiki.com/dev\",\n\t\t\t\"--load-wiki-folder\", resolve(tweditions, \"tour\"),\n\t\t\t\"tour\", \"TiddlyWiki Interactive Tour from https://tiddlywiki.com\",\n\t\t\t\"tour\", \"TiddlyWiki Interactive Tour from https://tiddlywiki.com\",\n\t\t\t\"--divider\",\n\t\t]);\n\n\t\tthis.commander.setupRequired = false;\n\t}\n}\n\n","\nimport { Commander, CommandInfo } from \"../commander\";\nimport { ok } from \"assert\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { Server, IncomingMessage, ServerResponse, createServer } from \"http\";\nimport * as http2 from \"node:http2\";\nimport { Router } from \"../routes/router\";\nimport { MWSConfig } from \"../server\";\nimport { Streamer } from \"../streamer\";\n\nexport const info: CommandInfo = {\n name: \"listen\",\n description: \"Start the server and listen for incoming requests\",\n arguments: [],\n synchronous: true,\n};\n\n\nexport class ListenerBase {\n constructor(\n public server: http2.Http2SecureServer | Server,\n public router: Router,\n public bindInfo: string\n ) {\n this.server.on(\"request\", (\n req: IncomingMessage | http2.Http2ServerRequest,\n res: ServerResponse | http2.Http2ServerResponse\n ) => {\n this.handleRequest(req, res);\n });\n this.server.on('error', (error: NodeJS.ErrnoException) => {\n\n if (error.syscall !== 'listen') {\n throw error;\n }\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n console.error(bindInfo + ' requires elevated privileges');\n process.exit();\n break;\n case 'EADDRINUSE':\n console.error(bindInfo + ' is already in use');\n process.exit();\n break;\n default:\n throw error;\n }\n\n });\n this.server.on('listening', () => {\n const address = this.server.address();\n console.log(`Listening on`, address);\n });\n }\n\n handleRequest(\n req: IncomingMessage | http2.Http2ServerRequest,\n res: ServerResponse | http2.Http2ServerResponse\n ) {\n this.router.handleIncomingRequest(req, res);\n }\n}\n\nexport class ListenerHTTPS extends ListenerBase {\n constructor(router: Router, config: MWSConfig[\"listeners\"][number]) {\n const { port, host } = config;\n if (port && typeof port !== \"number\") throw new Error(\"If specified, port must be a number\");\n const bindInfo = host ? `HTTPS ${host} ${port}` : `HTTPS ${port}`;\n ok(config.key && existsSync(config.key), \"Key file not found\");\n ok(config.cert && existsSync(config.cert), \"Cert file not found\");\n const key = readFileSync(config.key);\n const cert = readFileSync(config.cert);\n super(http2.createSecureServer({ key, cert, allowHTTP1: true, }), router, bindInfo);\n if (port) this.server.listen(port, host);\n }\n\n}\n\nexport class ListenerHTTP extends ListenerBase {\n /** Create an http1 server */\n constructor(router: Router, config: MWSConfig[\"listeners\"][number]) {\n const { port, host } = config;\n if (port && typeof port !== \"number\") throw new Error(\"If specified, port must be a number\");\n const bindInfo = host ? `HTTP ${host} ${port}` : `HTTP ${port}`;\n super(createServer(), router, bindInfo);\n if (port) this.server.listen(port, host);\n }\n}\n\n\n\n\nexport class Command {\n execute;\n get $tw() { return this.commander.$tw; }\n constructor(\n public params: string[],\n public commander: Commander,\n listenConfig: MWSConfig[\"listeners\"],\n onListenersCreated: MWSConfig[\"onListenersCreated\"]\n ) {\n if (this.params.length) throw `${info.name}: No parameters allowed. Please put listener options in the config file.`;\n\n this.execute = async () => {\n\n this.commander.addCommandTokens([\n \"--render-tiddlywiki5\",\n \"--divider\",\n ]);\n\n const router = await Router.makeRouter(\n this.commander,\n this.commander.config.enableDevServer ?? false,\n ).catch(e => {\n console.log(e.stack);\n throw \"Router failed to load\";\n });\n\n const listeners = listenConfig.map(e => {\n if (!e.key !== !e.cert) {\n throw new Error(\"Both key and cert are required for HTTPS\");\n }\n\n const listener = e.key && e.cert\n ? new ListenerHTTPS(router, e)\n : new ListenerHTTP(router, e);\n\n return listener;\n });\n\n await onListenersCreated?.(listeners);\n };\n\n }\n\n}","import { Commander, CommandInfo } from \"../commander\";\n\nexport const info: CommandInfo = {\n name: \"divider\",\n description: \"A no-op command to delimit param concatenation.\",\n arguments: [],\n synchronous: true,\n internal: true,\n};\n\n\nexport class Command {\n\n constructor(\n public params: string[],\n public commander: Commander,\n ) {\n if (this.params.length) throw `${info.name}: No parameters allowed. This is a no-op command.`;\n }\n execute() {\n // Do nothing\n }\n}","import { Commander, CommandInfo } from \"../commander\";\n\nexport const info: CommandInfo = {\n name: \"tests-complete\",\n description: \"Tests completed successfully.\",\n arguments: [],\n synchronous: true,\n internal: true,\n};\n\n\nexport class Command {\n\n constructor(\n public params: string[],\n public commander: Commander,\n ) {\n // if (this.params.length) throw `${info.name}: No parameters allowed. This is a no-op command.`;\n }\n execute() {\n console.log(\"Tests completed successfully.\");\n process.exit(0);\n }\n}","import { resolve } from \"path\";\nimport { Commander, CommandInfo } from \"../commander\";\nimport { Router } from \"../routes/router\";\nimport { esbuildStartup, setupDevServer } from \"../setupDevServer\";\nimport { writeFileSync } from \"fs\";\n\nexport const info: CommandInfo = {\n name: \"client-build\",\n description: \"Build the client for the TiddlyWiki5 server\",\n arguments: [],\n synchronous: true,\n internal: true,\n};\n\n\nexport class Command {\n\n constructor(\n public params: string[],\n public commander: Commander,\n ) {\n if (this.params.length) throw `${info.name}: No parameters allowed. This is a no-op command.`;\n }\n async execute() {\n if (!this.commander.config.enableDevServer) throw \"Dev server is not enabled. Please set enableDevServer to true in the config file.\";\n\n const { ctx, port, rootdir } = await esbuildStartup();\n\n\n ctx.dispose();\n }\n}","import { Commander, CommandInfo } from \"../commander\";\nimport * as commander from \"commander\";\nimport { commands } from \".\";\nimport { readFile } from \"fs/promises\";\nimport { dist_resolve } from \"../utils\";\n\nexport const info: CommandInfo = {\n name: \"help\",\n description: \"Print this help message\",\n arguments: [],\n synchronous: true,\n};\n\n\nexport class Command {\n\n constructor(\n public params: string[],\n public commander: Commander,\n ) {\n // if (this.params.length) throw `${info.name}: No parameters allowed.`;\n }\n async execute() {\n\n }\n}\n\n/*\n\n# Commander.js\n\n[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22)\n[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)\n[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)\n[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)\n\nThe complete solution for [node.js](http://nodejs.org) command-line interfaces.\n\nRead this in other languages: English | [简体中文](./Readme_zh-CN.md)\n\n- [Commander.js](#commanderjs)\n - [Installation](#installation)\n - [Quick Start](#quick-start)\n - [Declaring _program_ variable](#declaring-program-variable)\n - [Options](#options)\n - [Common option types, boolean and value](#common-option-types-boolean-and-value)\n - [Default option value](#default-option-value)\n - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue)\n - [Required option](#required-option)\n - [Variadic option](#variadic-option)\n - [Version option](#version-option)\n - [More configuration](#more-configuration)\n - [Custom option processing](#custom-option-processing)\n - [Commands](#commands)\n - [Command-arguments](#command-arguments)\n - [More configuration](#more-configuration-1)\n - [Custom argument processing](#custom-argument-processing)\n - [Action handler](#action-handler)\n - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands)\n - [Life cycle hooks](#life-cycle-hooks)\n - [Automated help](#automated-help)\n - [Custom help](#custom-help)\n - [Display help after errors](#display-help-after-errors)\n - [Display help from code](#display-help-from-code)\n - [.name](#name)\n - [.usage](#usage)\n - [.description and .summary](#description-and-summary)\n - [.helpOption(flags, description)](#helpoptionflags-description)\n - [.helpCommand()](#helpcommand)\n - [More configuration](#more-configuration-2)\n - [Custom event listeners](#custom-event-listeners)\n - [Bits and pieces](#bits-and-pieces)\n - [.parse() and .parseAsync()](#parse-and-parseasync)\n - [Parsing Configuration](#parsing-configuration)\n - [Legacy options as properties](#legacy-options-as-properties)\n - [TypeScript](#typescript)\n - [createCommand()](#createcommand)\n - [Node options such as `--harmony`](#node-options-such-as---harmony)\n - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands)\n - [npm run-script](#npm-run-script)\n - [Display error](#display-error)\n - [Override exit and output handling](#override-exit-and-output-handling)\n - [Additional documentation](#additional-documentation)\n - [Support](#support)\n - [Commander for enterprise](#commander-for-enterprise)\n\nFor information about terms used in this document see: [terminology](./docs/terminology.md)\n\n## Installation\n\n```sh\nnpm install commander\n```\n\n## Quick Start\n\nYou write code to describe your command line interface.\nCommander looks after parsing the arguments into options and command-arguments,\ndisplays usage errors for problems, and implements a help system.\n\nCommander is strict and displays an error for unrecognised options.\nThe two most used option types are a boolean option, and an option which takes its value from the following argument.\n\nExample file: [split.js](./examples/split.js)\n\n```js\nconst { program } = require('commander');\n\nprogram\n .option('--first')\n .option('-s, --separator <char>')\n .argument('<string>');\n\nprogram.parse();\n\nconst options = program.opts();\nconst limit = options.first ? 1 : undefined;\nconsole.log(program.args[0].split(options.separator, limit));\n```\n\n```console\n$ node split.js -s / --fits a/b/c\nerror: unknown option '--fits'\n(Did you mean --first?)\n$ node split.js -s / --first a/b/c\n[ 'a' ]\n```\n\nHere is a more complete program using a subcommand and with descriptions for the help. In a multi-command program, you have an action handler for each command (or stand-alone executables for the commands).\n\nExample file: [string-util.js](./examples/string-util.js)\n\n```js\nconst { Command } = require('commander');\nconst program = new Command();\n\nprogram\n .name('string-util')\n .description('CLI to some JavaScript string utilities')\n .version('0.8.0');\n\nprogram.command('split')\n .description('Split a string into substrings and display as an array')\n .argument('<string>', 'string to split')\n .option('--first', 'display just the first substring')\n .option('-s, --separator <char>', 'separator character', ',')\n .action((str, options) => {\n const limit = options.first ? 1 : undefined;\n console.log(str.split(options.separator, limit));\n });\n\nprogram.parse();\n```\n\n```console\n$ node string-util.js help split\nUsage: string-util split [options] <string>\n\nSplit a string into substrings and display as an array.\n\nArguments:\n string string to split\n\nOptions:\n --first display just the first substring\n -s, --separator <char> separator character (default: \",\")\n -h, --help display help for command\n\n$ node string-util.js split --separator=/ a/b/c\n[ 'a', 'b', 'c' ]\n```\n\nMore samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.\n\n## Declaring _program_ variable\n\nCommander exports a global object which is convenient for quick programs.\nThis is used in the examples in this README for brevity.\n\n```js\n// CommonJS (.cjs)\nconst { program } = require('commander');\n```\n\nFor larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.\n\n```js\n// CommonJS (.cjs)\nconst { Command } = require('commander');\nconst program = new Command();\n```\n\n```js\n// ECMAScript (.mjs)\nimport { Command } from 'commander';\nconst program = new Command();\n```\n\n```ts\n// TypeScript (.ts)\nimport { Command } from 'commander';\nconst program = new Command();\n```\n\n## Options\n\nOptions are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). To allow a wider range of short-ish flags than just\nsingle characters, you may also have two long options. Examples:\n\n```js\nprogram\n .option('-p, --port <number>', 'server port number')\n .option('--trace', 'add extra debugging output')\n .option('--ws, --workspace <name>', 'use a custom workspace')\n```\n\nThe parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler.\n\nMulti-word options such as \"--template-engine\" are camel-cased, becoming `program.opts().templateEngine` etc.\n\nAn option and its option-argument can be separated by a space, or combined into the same argument. The option-argument can follow the short option directly or follow an `=` for a long option.\n\n```sh\nserve -p 80\nserve -p80\nserve --port 80\nserve --port=80\n```\n\nYou can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted.\n\nBy default, options on the command line are not positional, and can be specified before or after other arguments.\n\nThere are additional related routines for when `.opts()` is not enough:\n\n- `.optsWithGlobals()` returns merged local and global option values\n- `.getOptionValue()` and `.setOptionValue()` work with a single option value\n- `.getOptionValueSource()` and `.setOptionValueWithSource()` include where the option value came from\n\n### Common option types, boolean and value\n\nThe two most used option types are a boolean option, and an option which takes its value\nfrom the following argument (declared with angle brackets like `--expect <value>`). Both are `undefined` unless specified on command line.\n\nExample file: [options-common.js](./examples/options-common.js)\n\n```js\nprogram\n .option('-d, --debug', 'output extra debugging')\n .option('-s, --small', 'small pizza size')\n .option('-p, --pizza-type <type>', 'flavour of pizza');\n\nprogram.parse(process.argv);\n\nconst options = program.opts();\nif (options.debug) console.log(options);\nconsole.log('pizza details:');\nif (options.small) console.log('- small pizza size');\nif (options.pizzaType) console.log(`- ${options.pizzaType}`);\n```\n\n```console\n$ pizza-options -p\nerror: option '-p, --pizza-type <type>' argument missing\n$ pizza-options -d -s -p vegetarian\n{ debug: true, small: true, pizzaType: 'vegetarian' }\npizza details:\n- small pizza size\n- vegetarian\n$ pizza-options --pizza-type=cheese\npizza details:\n- cheese\n```\n\nMultiple boolean short options may be combined following the dash, and may be followed by a single short option taking a value.\nFor example `-d -s -p cheese` may be written as `-ds -p cheese` or even `-dsp cheese`.\n\nOptions with an expected option-argument are greedy and will consume the following argument whatever the value.\nSo `--id -xyz` reads `-xyz` as the option-argument.\n\n`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`.\n\n### Default option value\n\nYou can specify a default value for an option.\n\nExample file: [options-defaults.js](./examples/options-defaults.js)\n\n```js\nprogram\n .option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');\n\nprogram.parse();\n\nconsole.log(`cheese: ${program.opts().cheese}`);\n```\n\n```console\n$ pizza-options\ncheese: blue\n$ pizza-options --cheese stilton\ncheese: stilton\n```\n\n### Other option types, negatable boolean and boolean|value\n\nYou can define a boolean option long name with a leading `no-` to set the option value to false when used.\nDefined alone this also makes the option true by default.\n\nIf you define `--foo` first, adding `--no-foo` does not change the default value from what it would\notherwise be.\n\nExample file: [options-negatable.js](./examples/options-negatable.js)\n\n```js\nprogram\n .option('--no-sauce', 'Remove sauce')\n .option('--cheese <flavour>', 'cheese flavour', 'mozzarella')\n .option('--no-cheese', 'plain with no cheese')\n .parse();\n\nconst options = program.opts();\nconst sauceStr = options.sauce ? 'sauce' : 'no sauce';\nconst cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`;\nconsole.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);\n```\n\n```console\n$ pizza-options\nYou ordered a pizza with sauce and mozzarella cheese\n$ pizza-options --sauce\nerror: unknown option '--sauce'\n$ pizza-options --cheese=blue\nYou ordered a pizza with sauce and blue cheese\n$ pizza-options --no-sauce --no-cheese\nYou ordered a pizza with no sauce and no cheese\n```\n\nYou can specify an option which may be used as a boolean option but may optionally take an option-argument\n(declared with square brackets like `--optional [value]`).\n\nExample file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js)\n\n```js\nprogram\n .option('-c, --cheese [type]', 'Add cheese with optional type');\n\nprogram.parse(process.argv);\n\nconst options = program.opts();\nif (options.cheese === undefined) console.log('no cheese');\nelse if (options.cheese === true) console.log('add cheese');\nelse console.log(`add cheese type ${options.cheese}`);\n```\n\n```console\n$ pizza-options\nno cheese\n$ pizza-options --cheese\nadd cheese\n$ pizza-options --cheese mozzarella\nadd cheese type mozzarella\n```\n\nOptions with an optional option-argument are not greedy and will ignore arguments starting with a dash.\nSo `id` behaves as a boolean option for `--id -5`, but you can use a combined form if needed like `--id=-5`.\n\nFor information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md).\n\n### Required option\n\nYou may specify a required (mandatory) option using `.requiredOption()`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option()` in format, taking flags and description, and optional default value or custom processing.\n\nExample file: [options-required.js](./examples/options-required.js)\n\n```js\nprogram\n .requiredOption('-c, --cheese <type>', 'pizza must have cheese');\n\nprogram.parse();\n```\n\n```console\n$ pizza\nerror: required option '-c, --cheese <type>' not specified\n```\n\n### Variadic option\n\nYou may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you\ncan then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments\nare read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value\nis specified in the same argument as the option then no further values are read.\n\nExample file: [options-variadic.js](./examples/options-variadic.js)\n\n```js\nprogram\n .option('-n, --number <numbers...>', 'specify numbers')\n .option('-l, --letter [letters...]', 'specify letters');\n\nprogram.parse();\n\nconsole.log('Options: ', program.opts());\nconsole.log('Remaining arguments: ', program.args);\n```\n\n```console\n$ collect -n 1 2 3 --letter a b c\nOptions: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] }\nRemaining arguments: []\n$ collect --letter=A -n80 operand\nOptions: { number: [ '80' ], letter: [ 'A' ] }\nRemaining arguments: [ 'operand' ]\n$ collect --letter -n 1 -n 2 3 -- operand\nOptions: { number: [ '1', '2', '3' ], letter: true }\nRemaining arguments: [ 'operand' ]\n```\n\nFor information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md).\n\n### Version option\n\nThe optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.\n\n```js\nprogram.version('0.0.1');\n```\n\n```console\n$ ./examples/pizza -V\n0.0.1\n```\n\nYou may change the flags and description by passing additional parameters to the `version` method, using\nthe same syntax for flags as the `option` method.\n\n```js\nprogram.version('0.0.1', '-v, --vers', 'output the current version');\n```\n\n### More configuration\n\nYou can add most options using the `.option()` method, but there are some additional features available\nby constructing an `Option` explicitly for less common cases.\n\nExample files: [options-extra.js](./examples/options-extra.js), [options-env.js](./examples/options-env.js), [options-conflicts.js](./examples/options-conflicts.js), [options-implies.js](./examples/options-implies.js)\n\n```js\nprogram\n .addOption(new Option('-s, --secret').hideHelp())\n .addOption(new Option('-t, --timeout <delay>', 'timeout in seconds').default(60, 'one minute'))\n .addOption(new Option('-d, --drink <size>', 'drink size').choices(['small', 'medium', 'large']))\n .addOption(new Option('-p, --port <number>', 'port number').env('PORT'))\n .addOption(new Option('--donate [amount]', 'optional donation in dollars').preset('20').argParser(parseFloat))\n .addOption(new Option('--disable-server', 'disables the server').conflicts('port'))\n .addOption(new Option('--free-drink', 'small drink included free ').implies({ drink: 'small' }));\n```\n\n```console\n$ extra --help\nUsage: help [options]\n\nOptions:\n -t, --timeout <delay> timeout in seconds (default: one minute)\n -d, --drink <size> drink cup size (choices: \"small\", \"medium\", \"large\")\n -p, --port <number> port number (env: PORT)\n --donate [amount] optional donation in dollars (preset: \"20\")\n --disable-server disables the server\n --free-drink small drink included free\n -h, --help display help for command\n\n$ extra --drink huge\nerror: option '-d, --drink <size>' argument 'huge' is invalid. Allowed choices are small, medium, large.\n\n$ PORT=80 extra --donate --free-drink\nOptions: { timeout: 60, donate: 20, port: '80', freeDrink: true, drink: 'small' }\n\n$ extra --disable-server --port 8000\nerror: option '--disable-server' cannot be used with option '-p, --port <number>'\n```\n\nSpecify a required (mandatory) option using the `Option` method `.makeOptionMandatory()`. This matches the `Command` method [.requiredOption()](#required-option).\n\n### Custom option processing\n\nYou may specify a function to do custom processing of option-arguments. The callback function receives two parameters,\nthe user specified option-argument and the previous value for the option. It returns the new value for the option.\n\nThis allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing.\n\nYou can optionally specify the default/starting value for the option after the function parameter.\n\nExample file: [options-custom-processing.js](./examples/options-custom-processing.js)\n\n```js\nfunction myParseInt(value, dummyPrevious) {\n // parseInt takes a string and a radix\n const parsedValue = parseInt(value, 10);\n if (isNaN(parsedValue)) {\n throw new commander.InvalidArgumentError('Not a number.');\n }\n return parsedValue;\n}\n\nfunction increaseVerbosity(dummyValue, previous) {\n return previous + 1;\n}\n\nfunction collect(value, previous) {\n return previous.concat([value]);\n}\n\nfunction commaSeparatedList(value, dummyPrevious) {\n return value.split(',');\n}\n\nprogram\n .option('-f, --float <number>', 'float argument', parseFloat)\n .option('-i, --integer <number>', 'integer argument', myParseInt)\n .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0)\n .option('-c, --collect <value>', 'repeatable value', collect, [])\n .option('-l, --list <items>', 'comma separated list', commaSeparatedList)\n;\n\nprogram.parse();\n\nconst options = program.opts();\nif (options.float !== undefined) console.log(`float: ${options.float}`);\nif (options.integer !== undefined) console.log(`integer: ${options.integer}`);\nif (options.verbose > 0) console.log(`verbosity: ${options.verbose}`);\nif (options.collect.length > 0) console.log(options.collect);\nif (options.list !== undefined) console.log(options.list);\n```\n\n```console\n$ custom -f 1e2\nfloat: 100\n$ custom --integer 2\ninteger: 2\n$ custom -v -v -v\nverbose: 3\n$ custom -c a -c b -c c\n[ 'a', 'b', 'c' ]\n$ custom --list x,y,z\n[ 'x', 'y', 'z' ]\n```\n\n## Commands\n\nYou can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)).\n\nIn the first parameter to `.command()` you specify the command name. You may append the command-arguments after the command name, or specify them separately using `.argument()`. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.\n\nYou can use `.addCommand()` to add an already configured subcommand to the program.\n\nFor example:\n\n```js\n// Command implemented using action handler (description is supplied separately to `.command`)\n// Returns new command for configuring.\nprogram\n .command('clone <source> [destination]')\n .description('clone a repository into a newly created directory')\n .action((source, destination) => {\n console.log('clone command called');\n });\n\n// Command implemented using stand-alone executable file, indicated by adding description as second parameter to `.command`.\n// Returns `this` for adding more commands.\nprogram\n .command('start <service>', 'start named service')\n .command('stop [service]', 'stop named service, or all if no name supplied');\n\n// Command prepared separately.\n// Returns `this` for adding more commands.\nprogram\n .addCommand(build.makeBuildCommand());\n```\n\nConfiguration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will\nremove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other\nsubcommand is specified ([example](./examples/defaultCommand.js)).\n\nYou can add alternative names for a command with `.alias()`. ([example](./examples/alias.js))\n\n`.command()` automatically copies the inherited settings from the parent command to the newly created subcommand. This is only done during creation, any later setting changes to the parent are not inherited.\n\nFor safety, `.addCommand()` does not automatically copy the inherited settings from the parent command. There is a helper routine `.copyInheritedSettings()` for copying the settings when they are wanted.\n\n### Command-arguments\n\nFor subcommands, you can specify the argument syntax in the call to `.command()` (as shown above). This\nis the only method usable for subcommands implemented using a stand-alone executable, but for other subcommands\nyou can instead use the following method.\n\nTo configure a command, you can use `.argument()` to specify each expected command-argument.\nYou supply the argument name and an optional description. The argument may be `<required>` or `[optional]`.\nYou can specify a default value for an optional command-argument.\n\nExample file: [argument.js](./examples/argument.js)\n\n```js\nprogram\n .version('0.1.0')\n .argument('<username>', 'user to login')\n .argument('[password]', 'password for user, if required', 'no password given')\n .action((username, password) => {\n console.log('username:', username);\n console.log('password:', password);\n });\n```\n\n The last argument of a command can be variadic, and only the last argument. To make an argument variadic you\n append `...` to the argument name. A variadic argument is passed to the action handler as an array. For example:\n\n```js\nprogram\n .version('0.1.0')\n .command('rmdir')\n .argument('<dirs...>')\n .action(function (dirs) {\n dirs.forEach((dir) => {\n console.log('rmdir %s', dir);\n });\n });\n```\n\nThere is a convenience method to add multiple arguments at once, but without descriptions:\n\n```js\nprogram\n .arguments('<username> <password>');\n```\n\n#### More configuration\n\nThere are some additional features available by constructing an `Argument` explicitly for less common cases.\n\nExample file: [arguments-extra.js](./examples/arguments-extra.js)\n\n```js\nprogram\n .addArgument(new commander.Argument('<drink-size>', 'drink cup size').choices(['small', 'medium', 'large']))\n .addArgument(new commander.Argument('[timeout]', 'timeout in seconds').default(60, 'one minute'))\n```\n\n#### Custom argument processing\n\nYou may specify a function to do custom processing of command-arguments (like for option-arguments).\nThe callback function receives two parameters, the user specified command-argument and the previous value for the argument.\nIt returns the new value for the argument.\n\nThe processed argument values are passed to the action handler, and saved as `.processedArgs`.\n\nYou can optionally specify the default/starting value for the argument after the function parameter.\n\nExample file: [arguments-custom-processing.js](./examples/arguments-custom-processing.js)\n\n```js\nprogram\n .command('add')\n .argument('<first>', 'integer argument', myParseInt)\n .argument('[second]', 'integer argument', myParseInt, 1000)\n .action((first, second) => {\n console.log(`${first} + ${second} = ${first + second}`);\n })\n;\n```\n\n### Action handler\n\nThe action handler gets passed a parameter for each command-argument you declared, and two additional parameters\nwhich are the parsed options and the command object itself.\n\nExample file: [thank.js](./examples/thank.js)\n\n```js\nprogram\n .argument('<name>')\n .option('-t, --title <honorific>', 'title to use before name')\n .option('-d, --debug', 'display some debugging')\n .action((name, options, command) => {\n if (options.debug) {\n console.error('Called %s with options %o', command.name(), options);\n }\n const title = options.title ? `${options.title} ` : '';\n console.log(`Thank-you ${title}${name}`);\n });\n```\n\nIf you prefer, you can work with the command directly and skip declaring the parameters for the action handler. The `this` keyword is set to the running command and can be used from a function expression (but not from an arrow function).\n\nExample file: [action-this.js](./examples/action-this.js)\n\n```js\nprogram\n .command('serve')\n .argument('<script>')\n .option('-p, --port <number>', 'port number', 80)\n .action(function() {\n console.error('Run script %s on port %s', this.args[0], this.opts().port);\n });\n```\n\nYou may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`.\n\n```js\n\n\nasync function main() {\n program\n .command('run')\n .action(run);\n await program.parseAsync(process.argv);\n}\n```\n\nA command's options and arguments on the command line are validated when the command is used. Any unknown options or missing arguments or excess arguments will be reported as an error. You can suppress the unknown option check with `.allowUnknownOption()`. You can suppress the excess arguments check with `.allowExcessArguments()`.\n\n### Stand-alone executable (sub)commands\n\nWhen `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands.\nCommander will search the files in the directory of the entry script for a file with the name combination `command-subcommand`, like `pm-install` or `pm-search` in the example below. The search includes trying common file extensions, like `.js`.\nYou may specify a custom name (and path) with the `executableFile` configuration option.\nYou may specify a custom search directory for subcommands with `.executableDir()`.\n\nYou handle the options for an executable (sub)command in the executable, and don't declare them at the top-level.\n\nExample file: [pm](./examples/pm)\n\n```js\nprogram\n .name('pm')\n .version('0.1.0')\n .command('install [package-names...]', 'install one or more packages')\n .command('search [query]', 'search with optional query')\n .command('update', 'update installed packages', { executableFile: 'myUpdateSubCommand' })\n .command('list', 'list packages installed', { isDefault: true });\n\nprogram.parse(process.argv);\n```\n\nIf the program is designed to be installed globally, make sure the executables have proper modes, like `755`.\n\n### Life cycle hooks\n\nYou can add callback hooks to a command for life cycle events.\n\nExample file: [hook.js](./examples/hook.js)\n\n```js\nprogram\n .option('-t, --trace', 'display trace statements for commands')\n .hook('preAction', (thisCommand, actionCommand) => {\n if (thisCommand.opts().trace) {\n console.log(`About to call action handler for subcommand: ${actionCommand.name()}`);\n console.log('arguments: %O', actionCommand.args);\n console.log('options: %o', actionCommand.opts());\n }\n });\n```\n\nThe callback hook can be `async`, in which case you call `.parseAsync` rather than `.parse`. You can add multiple hooks per event.\n\nThe supported events are:\n\n| event name | when hook called | callback parameters |\n| :-- | :-- | :-- |\n| `preAction`, `postAction` | before/after action handler for this command and its nested subcommands | `(thisCommand, actionCommand)` |\n| `preSubcommand` | before parsing direct subcommand | `(thisCommand, subcommand)` |\n\nFor an overview of the life cycle events see [parsing life cycle and hooks](./docs/parsing-and-hooks.md).\n\n## Automated help\n\nThe help information is auto-generated based on the information commander already knows about your program. The default\nhelp option is `-h,--help`.\n\nExample file: [pizza](./examples/pizza)\n\n```console\n$ node ./examples/pizza --help\nUsage: pizza [options]\n\nAn application for pizza ordering\n\nOptions:\n -p, --peppers Add peppers\n -c, --cheese <type> Add the specified type of cheese (default: \"marble\")\n -C, --no-cheese You do not want any cheese\n -h, --help display help for command\n```\n\nA `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show\nfurther help for the subcommand. These are effectively the same if the `shell` program has implicit help:\n\n```sh\nshell help\nshell --help\n\nshell help spawn\nshell spawn --help\n```\n\nLong descriptions are wrapped to fit the available width. (However, a description that includes a line-break followed by whitespace is assumed to be pre-formatted and not wrapped.)\n\n### Custom help\n\nYou can add extra text to be displayed along with the built-in help.\n\nExample file: [custom-help](./examples/custom-help)\n\n```js\nprogram\n .option('-f, --foo', 'enable some foo');\n\nprogram.addHelpText('after', `\n\nExample call:\n $ custom-help --help`);\n```\n\nYields the following help output:\n\n```Text\nUsage: custom-help [options]\n\nOptions:\n -f, --foo enable some foo\n -h, --help display help for command\n\nExample call:\n $ custom-help --help\n```\n\nThe positions in order displayed are:\n\n- `beforeAll`: add to the program for a global banner or header\n- `before`: display extra information before built-in help\n- `after`: display extra information after built-in help\n- `afterAll`: add to the program for a global footer (epilog)\n\nThe positions \"beforeAll\" and \"afterAll\" apply to the command and all its subcommands.\n\nThe second parameter can be a string, or a function returning a string. The function is passed a context object for your convenience. The properties are:\n\n- error: a boolean for whether the help is being displayed due to a usage error\n- command: the Command which is displaying the help\n\n### Display help after errors\n\nThe default behaviour for usage errors is to just display a short error message.\nYou can change the behaviour to show the full help or a custom help message after an error.\n\n```js\nprogram.showHelpAfterError();\n// or\nprogram.showHelpAfterError('(add --help for additional information)');\n```\n\n```console\n$ pizza --unknown\nerror: unknown option '--unknown'\n(add --help for additional information)\n```\n\nThe default behaviour is to suggest correct spelling after an error for an unknown command or option. You\ncan disable this.\n\n```js\nprogram.showSuggestionAfterError(false);\n```\n\n```console\n$ pizza --hepl\nerror: unknown option '--hepl'\n(Did you mean --help?)\n```\n\n### Display help from code\n\n`.help()`: display help information and exit immediately. You can optionally pass `{ error: true }` to display on stderr and exit with an error status.\n\n`.outputHelp()`: output help information without exiting. You can optionally pass `{ error: true }` to display on stderr.\n\n`.helpInformation()`: get the built-in command help information as a string for processing or displaying yourself.\n\n### .name\n\nThe command name appears in the help, and is also used for locating stand-alone executable subcommands.\n\nYou may specify the program name using `.name()` or in the Command constructor. For the program, Commander will\nfall back to using the script name from the full arguments passed into `.parse()`. However, the script name varies\ndepending on how your program is launched, so you may wish to specify it explicitly.\n\n```js\nprogram.name('pizza');\nconst pm = new Command('pm');\n```\n\nSubcommands get a name when specified using `.command()`. If you create the subcommand yourself to use with `.addCommand()`,\nthen set the name using `.name()` or in the Command constructor.\n\n### .usage\n\nThis allows you to customise the usage description in the first line of the help. Given:\n\n```js\nprogram\n .name(\"my-command\")\n .usage(\"[global options] command\")\n```\n\nThe help will start with:\n\n```Text\nUsage: my-command [global options] command\n```\n\n### .description and .summary\n\nThe description appears in the help for the command. You can optionally supply a shorter\nsummary to use when listed as a subcommand of the program.\n\n```js\nprogram\n .command(\"duplicate\")\n .summary(\"make a copy\")\n .description(`Make a copy of the current project.\nThis may require additional disk space.\n `);\n```\n\n### .helpOption(flags, description)\n\nBy default, every command has a help option. You may change the default help flags and description. Pass false to disable the built-in help option.\n\n```js\nprogram\n .helpOption('-e, --HELP', 'read more information');\n```\n\n(Or use `.addHelpOption()` to add an option you construct yourself.)\n\n### .helpCommand()\n\nA help command is added by default if your command has subcommands. You can explicitly turn on or off the implicit help command with `.helpCommand(true)` and `.helpCommand(false)`.\n\nYou can both turn on and customise the help command by supplying the name and description:\n\n```js\nprogram.helpCommand('assist [command]', 'show assistance');\n```\n\n(Or use `.addHelpCommand()` to add a command you construct yourself.)\n\n### More configuration\n\nThe built-in help is formatted using the Help class.\nYou can configure the help by modifying data properties and methods using `.configureHelp()`, or by subclassing Help using `.createHelp()` .\n\nSimple properties include `sortSubcommands`, `sortOptions`, and `showGlobalOptions`. You can add color using the style methods like `styleTitle()`.\n\nFor more detail and examples of changing the displayed text, color, and layout see (./docs/help-in-depth.md)\n\n## Custom event listeners\n\nYou can execute custom actions by listening to command and option events.\n\n```js\nprogram.on('option:verbose', function () {\n process.env.VERBOSE = this.opts().verbose;\n});\n```\n\n## Bits and pieces\n\n### .parse() and .parseAsync()\n\nCall with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n\nOr call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n\n- `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n- `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n- `'user'`: just user arguments\n\nFor example:\n\n```js\nprogram.parse(); // parse process.argv and auto-detect electron and special node flags\nprogram.parse(process.argv); // assume argv[0] is app and argv[1] is script\nprogram.parse(['--port', '80'], { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n```\n\nUse parseAsync instead of parse if any of your action handlers are async.\n\n### Parsing Configuration\n\nIf the default parsing does not suit your needs, there are some behaviours to support other usage patterns.\n\nBy default, program options are recognised before and after subcommands. To only look for program options before subcommands, use `.enablePositionalOptions()`. This lets you use\nan option for a different purpose in subcommands.\n\nExample file: [positional-options.js](./examples/positional-options.js)\n\nWith positional options, the `-b` is a program option in the first line and a subcommand option in the second line:\n\n```sh\nprogram -b subcommand\nprogram subcommand -b\n```\n\nBy default, options are recognised before and after command-arguments. To only process options that come\nbefore the command-arguments, use `.passThroughOptions()`. This lets you pass the arguments and following options through to another program\nwithout needing to use `--` to end the option processing.\nTo use pass through options in a subcommand, the program needs to enable positional options.\n\nExample file: [pass-through-options.js](./examples/pass-through-options.js)\n\nWith pass through options, the `--port=80` is a program option in the first line and passed through as a command-argument in the second line:\n\n```sh\nprogram --port=80 arg\nprogram arg --port=80\n```\n\nBy default, the option processing shows an error for an unknown option. To have an unknown option treated as an ordinary command-argument and continue looking for options, use `.allowUnknownOption()`. This lets you mix known and unknown options.\n\nBy default, the argument processing does not display an error for more command-arguments than expected.\nTo display an error for excess arguments, use`.allowExcessArguments(false)`.\n\n### Legacy options as properties\n\nBefore Commander 7, the option values were stored as properties on the command.\nThis was convenient to code, but the downside was possible clashes with\nexisting properties of `Command`. You can revert to the old behaviour to run unmodified legacy code by using `.storeOptionsAsProperties()`.\n\n```js\nprogram\n .storeOptionsAsProperties()\n .option('-d, --debug')\n .action((commandAndOptions) => {\n if (commandAndOptions.debug) {\n console.error(`Called ${commandAndOptions.name()}`);\n }\n });\n```\n\n### TypeScript\n\nextra-typings: There is an optional project to infer extra type information from the option and argument definitions.\nThis adds strong typing to the options returned by `.opts()` and the parameters to `.action()`.\nSee [commander-js/extra-typings](https://github.com/commander-js/extra-typings) for more.\n\n```\nimport { Command } from '@commander-js/extra-typings';\n```\n\nts-node: If you use `ts-node` and stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g.\n\n```sh\nnode -r ts-node/register pm.ts\n```\n\n### createCommand()\n\nThis factory function creates a new command. It is exported and may be used instead of using `new`, like:\n\n```js\nconst { createCommand } = require('commander');\nconst program = createCommand();\n```\n\n`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally\nwhen creating subcommands using `.command()`, and you may override it to\ncustomise the new subcommand (example file [custom-command-class.js](./examples/custom-command-class.js)).\n\n### Node options such as `--harmony`\n\nYou can enable `--harmony` option in two ways:\n\n- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.)\n- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process.\n\n### Debugging stand-alone executable subcommands\n\nAn executable subcommand is launched as a separate child process.\n\nIf you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al.,\nthe inspector port is incremented by 1 for the spawned subcommand.\n\nIf you are using VSCode to debug executable subcommands you need to set the `\"autoAttachChildProcesses\": true` flag in your launch.json configuration.\n\n### npm run-script\n\nBy default, when you call your program using run-script, `npm` will parse any options on the command-line and they will not reach your program. Use\n `--` to stop the npm option parsing and pass through all the arguments.\n\n The synopsis for [npm run-script](https://docs.npmjs.com/cli/v9/commands/npm-run-script) explicitly shows the `--` for this reason:\n\n```console\nnpm run-script <command> [-- <args>]\n```\n\n### Display error\n\nThis routine is available to invoke the Commander error handling for your own error conditions. (See also the next section about exit handling.)\n\nAs well as the error message, you can optionally specify the `exitCode` (used with `process.exit`)\nand `code` (used with `CommanderError`).\n\n```js\nprogram.error('Password must be longer than four characters');\nprogram.error('Custom processing has failed', { exitCode: 2, code: 'my.custom.error' });\n```\n\n### Override exit and output handling\n\nBy default, Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override\nthis behaviour and optionally supply a callback. The default override throws a `CommanderError`.\n\nThe override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`.\nCommander expects the callback to terminate the normal program flow, and will call `process.exit` if the callback returns.\nThe normal display of error messages or version or help is not affected by the override which is called after the display.\n\n```js\nprogram.exitOverride();\n\ntry {\n program.parse(process.argv);\n} catch (err) {\n // custom processing...\n}\n```\n\nBy default, Commander is configured for a command-line application and writes to stdout and stderr.\nYou can modify this behaviour for custom applications. In addition, you can modify the display of error messages.\n\nExample file: [configure-output.js](./examples/configure-output.js)\n\n```js\nfunction errorColor(str) {\n // Add ANSI escape codes to display text in red.\n return `\\x1b[31m${str}\\x1b[0m`;\n}\n\nprogram\n .configureOutput({\n // Visibly override write routines as example!\n writeOut: (str) => process.stdout.write(`[OUT] ${str}`),\n writeErr: (str) => process.stdout.write(`[ERR] ${str}`),\n // Highlight errors in color.\n outputError: (str, write) => write(errorColor(str))\n });\n```\n\n### Additional documentation\n\nThere is more information available about:\n\n- [deprecated](./docs/deprecated.md) features still supported for backwards compatibility\n- [options taking varying arguments](./docs/options-in-depth.md)\n- [parsing life cycle and hooks](./docs/parsing-and-hooks.md)\n\n## Support\n\nThe current version of Commander is fully supported on Long Term Support versions of Node.js, and requires at least v18.\n(For older versions of Node.js, use an older version of Commander.)\n\nThe main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub.\n\n### Commander for enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n*/","import * as load_plugin_bags from \"./load-plugin-bags\";\nimport * as render_tiddler from \"./render-tiddlywiki5\";\nimport * as load_wiki_folder from \"./load-wiki-folder\";\nimport * as save_archive from \"./save-archive\";\nimport * as load_archive from \"./load-archive\";\nimport * as init_store from \"./init-store\";\nimport * as listen from \"./listen\";\nimport * as divider from \"./divider\";\nimport * as tests_complete from \"./tests-complete\";\nimport * as mws_client_build from \"./client-build\";\nimport * as help from \"./help\";\nimport { CommandInfo } from \"../commander\";\n\nexport { listen, divider };\n\nexport const commands: Record<string, { info: CommandInfo, Command: any }> = {\n [load_plugin_bags.info.name]: load_plugin_bags,\n [render_tiddler.info.name]: render_tiddler,\n [load_wiki_folder.info.name]: load_wiki_folder,\n [save_archive.info.name]: save_archive,\n [load_archive.info.name]: load_archive,\n\n [init_store.info.name]: init_store,\n [listen.info.name]: listen,\n\n [help.info.name]: help,\n\n [divider.info.name]: divider,\n [tests_complete.info.name]: tests_complete,\n [mws_client_build.info.name]: mws_client_build,\n};\n","import { PrismaBetterSQLite3 } from \"@prisma/adapter-better-sqlite3\";\nimport { PrismaClient } from \"@prisma/client\";\nimport { SqlDriverAdapter, SqlMigrationAwareDriverAdapterFactory } from \"@prisma/driver-adapter-utils\";\nimport { readdir, readFile } from \"fs/promises\";\nimport { dist_resolve } from \"../utils\";\nimport { createHash, randomUUID } from \"crypto\";\nimport { existsSync } from \"fs\";\n\nexport class SqliteAdapter {\n constructor(private databasePath: string) {\n this.adapter = new PrismaBetterSQLite3({ url: \"file:\" + this.databasePath });\n }\n\n adapter!: SqlMigrationAwareDriverAdapterFactory;\n async init() {\n const libsql = await this.adapter.connect();\n\n if (process.env.RUN_OLD_MWS_DB_SETUP_FOR_TESTING) {\n await libsql.executeScript(await readFile(dist_resolve(\n \"../prisma/migrations/20250406213424_init/migration.sql\"\n ), \"utf8\"));\n }\n\n const tables = await libsql.queryRaw({\n sql: `SELECT tbl_name FROM sqlite_master WHERE type='table'`,\n args: [],\n argTypes: [],\n }).then(e => e?.rows as [string][] | undefined);\n\n const hasExisting = !!tables?.length;\n\n const hasMigrationsTable = !!tables?.length && !!tables?.some((e) => e[0] === \"_prisma_migrations\");\n if (!hasMigrationsTable) await this.createMigrationsTable(libsql);\n await this.checkMigrationsTable(libsql, hasExisting && !hasMigrationsTable);\n\n await libsql.dispose();\n }\n async createMigrationsTable(libsql: SqlDriverAdapter) {\n await libsql.executeScript(\n 'CREATE TABLE \"_prisma_migrations\" (\\n' +\n ' \"id\" TEXT PRIMARY KEY NOT NULL,\\n' +\n ' \"checksum\" TEXT NOT NULL,\\n' +\n ' \"finished_at\" DATETIME,\\n' +\n ' \"migration_name\" TEXT NOT NULL,\\n' +\n ' \"logs\" TEXT,\\n' +\n ' \"rolled_back_at\" DATETIME,\\n' +\n ' \"started_at\" DATETIME NOT NULL DEFAULT current_timestamp,\\n' +\n ' \"applied_steps_count\" INTEGER UNSIGNED NOT NULL DEFAULT 0\\n' +\n ')',\n )\n }\n async checkMigrationsTable(libsql: SqlDriverAdapter, migrateExisting: boolean) {\n\n const applied_migrations = new Set(\n await libsql.queryRaw({\n sql: `Select migration_name from _prisma_migrations`,\n args: [],\n argTypes: [],\n }).then(e => e.rows.map(e => e[0]))\n );\n\n // this checks the migration path and \n if (applied_migrations.size && !applied_migrations.has(\"20250406213424_init\")) {\n console.log(\"Unknown migrations have been found in the database.\");\n console.log(\"There is no way to guarentee the integrity of the database under these conditions.\");\n console.log(\"The only way I know of that you could be seeing this message is if you installed this verion of MWS in a project either from the PR branch or from a newer version of MWS.\");\n console.log(\"Please revert back to the version you had installed before.\");\n console.log(\"The sqlite database can be opened manually with any third-party SQLite tool to retrieve your data. If you do this, make sure you keep all the files in the store folder together, as they are all an integral part of your sqlite database and deleting any of them manually is very likely to cause data loss.\");\n process.exit();\n } else {\n console.log([\n \"=======================================================================================\",\n \"This version of MWS is no longer supported. It is an alpha version\",\n \"and you shouldn't be using it in production anyway. Please export any\",\n \"wikis you want to keep by opening them and downloading them as single-file\",\n \"wikis by clicking on the cloud status icon and then 'save snapshot for offline use'.\",\n \"=======================================================================================\",\n ].join(\"\\n\"))\n }\n\n const migrations = await readdir(dist_resolve(\"../prisma/migrations\"));\n migrations.sort();\n\n const new_migrations = migrations.filter(m => !applied_migrations.has(m) && m !== \"migration_lock.toml\");\n if (!new_migrations.length) return;\n\n function generateChecksum(fileContent: string) {\n return createHash('sha256').update(fileContent).digest('hex');\n }\n\n console.log(\"New migrations found\", new_migrations);\n\n for (const migration of new_migrations) {\n const migration_path = dist_resolve(`../prisma/migrations/${migration}/migration.sql`);\n if (!existsSync(migration_path)) continue;\n\n const fileContent = await readFile(migration_path, 'utf-8');\n // this is the hard-coded name of the first migration.\n if (migrateExisting && migration === \"20250406213424_init\") {\n console.log(\"Existing migration\", migration, \"is already applied\");\n } else {\n console.log(\"Applying migration\", migration);\n await libsql.executeScript(fileContent);\n }\n\n await libsql.executeRaw({\n sql: 'INSERT INTO _prisma_migrations (' +\n 'id, migration_name, checksum, finished_at, logs, rolled_back_at, started_at, applied_steps_count' +\n ') VALUES (?, ?, ?, ?, ?, ?, ?, ?)',\n args: [randomUUID(), migration, generateChecksum(fileContent), Date.now(), null, null, Date.now(), 1],\n argTypes: [], // this doesn't appear to be used at the moment\n });\n\n }\n console.log(\"Migrations applied\", new_migrations);\n }\n}","{\n \"name\": \"@tiddlywiki/mws\",\n \"description\": \"TiddlyWiki Multiple Wiki Server\",\n \"private\": false,\n \"version\": \"0.0.21\",\n \"type\": \"module\",\n \"exports\": {\n \"types\": \"./src/server.ts\",\n \"require\": \"./dist/server.cjs\",\n \"import\": \"./dist/server.js\"\n },\n \"files\": [\n \"dist\",\n \"prisma\",\n \"react-user-mgmt\",\n \"tiddlywiki-types\",\n \"editions/mws-docs\",\n \"plugins/client\",\n \"scripts.mjs\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"docs\": \"node scripts.mjs docs\",\n \"start\": \"node scripts.mjs start\",\n \"certs\": \"(cd runtime-config && bash localhost_certs.sh)\",\n \"tsc\": \"tsc -p tsconfig.json --skipLibCheck\",\n \"build\": \"npm run tsc && tsup && node mws.dev.mjs --client-build\",\n \"install-android\": \"GYP_DEFINES=\\\"android_ndk_path=''\\\" npm install\",\n \"postinstall\": \"node scripts.mjs prisma:generate\",\n \"env\": \"env\",\n \"test:pack\": \"(git clean -dfx tests && npm pack --pack-destination tests && cd tests && npm install && npm install ./tiddlywiki-mws-$npm_package_version.tgz --no-save && npm test)\",\n \"test\": \"(git clean -dfx tests && cd tests && npm install .. --no-save && npm test)\",\n \"fulltest\": \"mv node_modules node_modules_old; npm run test:pack; mv node_modules_old node_modules\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"dependencies\": {\n \"@prisma/adapter-better-sqlite3\": \"6.7.0-dev.48\",\n \"@prisma/client\": \"6.6.0\",\n \"@serenity-kit/opaque\": \"^0.8.4\",\n \"@types/mime-types\": \"^2.1.4\",\n \"@types/node\": \"^22.13.1\",\n \"@types/send\": \"^0.17.4\",\n \"@types/sjcl\": \"^1.0.34\",\n \"@types/tiddlywiki\": \"file:tiddlywiki-types\",\n \"prisma\": \"6.6.0\",\n \"source-map-support\": \"^0.5.21\",\n \"zod\": \"^3.24.2\"\n },\n \"devDependencies\": {\n \"commander\": \"^13.1.0\",\n \"esbuild\": \"0.25.2\",\n \"mime-types\": \"^2.1.35\",\n \"send\": \"^1.1.0\",\n \"sjcl\": \"^1.0.8\",\n \"tiddlywiki\": \"^5.1.22\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.7.3\",\n \"uuid\": \"^11.1.0\"\n },\n \"peerDependencies\": {\n \"tiddlywiki\": \"^5.1.22\"\n }\n}\n","\nimport { SiteConfig } from \"./routes/router\";\nimport * as path from \"node:path\";\n\nimport { MWSConfig } from \"./server\";\nimport { Prisma, PrismaClient } from \"@prisma/client\";\n\nimport * as sessions from \"./services/sessions\";\nimport * as attacher from \"./services/attachments\";\nimport { PasswordService } from \"./services/PasswordService\";\nimport { existsSync, mkdirSync, readFileSync } from \"node:fs\";\nimport { ITXClientDenyList } from \"@prisma/client/runtime/library\";\nimport { TiddlerFieldModule, TW } from \"tiddlywiki\";\nimport { dist_resolve } from \"./utils\";\nimport * as commander from \"commander\";\nimport { commands, listen as listen_command, divider } from \"./commands\";\nimport { ok } from \"node:assert\";\nimport { SqliteAdapter } from \"./db/sqlite-adapter\";\n\n\nimport pkg from \"../package.json\";\n\n\n\n\nexport interface $TW {\n utils: any;\n wiki: any;\n config: any;\n boot: any;\n loadTiddlersFromPath: any;\n Tiddler: {\n // TW5-typed for some reason just types this as a record of modules, which is incorrect\n fieldModules: Record<string, {\n name: string;\n parse?: (value: any) => any;\n stringify?: (value: any) => string;\n }>;\n }\n}\n\n\nexport interface CommandInfo {\n name: string;\n description: string;\n arguments: [string, string][];\n options?: [string, string][];\n internal?: boolean;\n /** \n * @default false\n * \n * @description\n * \n * - Regardless of the value of `synchronous`, the execute method is always awaited.\n * - Let `result` be any value thrown by the constructor or returned or thrown by the execute method. \n * ```\n * synchronous: false\n * ```\n * - `result` is awaited (if result is not then-able, this has no effect).\n * - If `result` is truthy, the command is failed without waiting for the callback.\n * - If `result` is falsy, the command waits for the callback result.\n * - The callback value is NOT awaited. \n * - if the callback value is truthy, the command is failed.\n * - if the callback value is falsy, the command is completed.\n * ```\n * synchronous: true\n * ```\n * - `result` is awaited (if result is not then-able, this has no effect).\n * - If `result` is truthy, the command is failed.\n * - If `result` is falsy, the command is completed.\n * \n * - The callback is not available if `synchronous` is true. \n * \n */\n synchronous?: boolean;\n // namedParameterMode?: boolean;\n // mandatoryParameters?: string[];\n}\n\n// move the startup logic into a separate class\nclass StartupCommander {\n fieldModules;\n versions;\n constructor(\n public config: MWSConfig,\n public $tw: TW,\n public PasswordService: PasswordService,\n ) {\n\n this.fieldModules = $tw.Tiddler.fieldModules;\n\n if (config.config?.pathPrefix) {\n ok(config.config.pathPrefix.startsWith(\"/\"), \"pathPrefix must start with a slash\");\n ok(!config.config.pathPrefix.endsWith(\"/\"), \"pathPrefix must not end with a slash\");\n }\n\n // console.log(config.wikiPath);\n // this is already resolved to the cwd.\n this.wikiPath = config.wikiPath;\n this.storePath = path.resolve(this.wikiPath, \"store\");\n this.databasePath = path.resolve(this.storePath, \"database.sqlite\");\n this.outputPath = path.resolve($tw.boot.wikiPath, $tw.config.wikiOutputSubDir);\n this.cachePath = path.resolve(this.wikiPath, \"cache\");\n\n if (!existsSync(this.storePath)) {\n mkdirSync(this.storePath, { recursive: true });\n this.setupRequired = true;\n }\n\n // using the libsql adapter because for some reason prisma was \n // freezing when loading the system bag favicons.\n // the libsql adapter has an additional advantage of letting us specify pragma \n // and also gives us more control over connections. \n\n\n\n this.siteConfig = {\n wikiPath: this.wikiPath,\n allowAnonReads: !!config.config?.allowAnonReads,\n allowAnonWrites: !!config.config?.allowAnonWrites,\n allowUnreadableBags: !!config.config?.allowUnreadableBags,\n attachmentsEnabled: !!config.config?.saveLargeTextToFileSystem,\n attachmentSizeLimit: config.config?.saveLargeTextToFileSystem ?? 0,\n enableBrowserCache: !!config.config?.enableBrowserCache,\n enableGzip: !!config.config?.enableGzip,\n contentTypeInfo: $tw.config.contentTypeInfo,\n storePath: this.storePath,\n pathPrefix: config.config?.pathPrefix ?? \"\",\n saveLargeTextToFileSystem: undefined as never,\n enablePluginCache: config.config?.enablePluginCache ?? false,\n };\n\n this.SessionManager = config.SessionManager || sessions.SessionManager;\n this.AttachmentService = config.AttachmentService || attacher.AttachmentService;\n\n this.adapter = new SqliteAdapter(this.databasePath);\n this.engine = new PrismaClient({ log: [\"info\", \"warn\"], adapter: this.adapter.adapter, });\n\n this.versions = {\n tiddlywiki: $tw.packageInfo.version,\n mws: pkg.version,\n }\n\n }\n\n async init() {\n await this.adapter.init();\n this.setupRequired = false;\n const users = await this.engine.users.count();\n if (!users) { this.setupRequired = true; }\n else {\n const checkBags = await this.engine.bags.findMany({\n where: { bag_name: { startsWith: \"$:/\" } },\n select: { bag_name: true, tiddlers: { select: { title: true } } }\n });\n checkBags.forEach(e => {\n e.tiddlers.forEach(f => {\n if (f.title as string !== e.bag_name as string) {\n if (e.bag_name === \"$:/plugins/tiddlywiki/codemirror-fullscreen-editing\"\n && f.title === \"$:/plugins/tiddlywiki/codemirror-fullscreen\"\n ) return;\n console.log(`The bag ${e.bag_name} has a tiddler ${f.title}, in the future this will be unsupported. This can occur if the top bag in a recipe is one of the system bags (starting with $:/)`)\n }\n })\n })\n }\n }\n\n wikiPath: string;\n storePath: string;\n databasePath: string;\n cachePath: string;\n\n adapter!: SqliteAdapter;\n engine!: PrismaClient<Prisma.PrismaClientOptions, never, {\n result: {\n // this types every output field with PrismaField\n [T in Uncapitalize<Prisma.ModelName>]: {\n [K in keyof PrismaPayloadScalars<Capitalize<T>>]: () => {\n compute: () => PrismaField<Capitalize<T>, K>\n }\n }\n },\n client: {},\n model: {},\n query: {},\n }>;\n\n $transaction<R>(\n fn: (prisma: Omit<Commander[\"engine\"], ITXClientDenyList>) => Promise<R>,\n options?: {\n maxWait?: number,\n timeout?: number,\n isolationLevel?: Prisma.TransactionIsolationLevel\n }\n ): Promise<R> {\n // $transaction doesn't have the client extensions types,\n // but should have them available (were they not just types).\n return this.engine.$transaction(fn as (prisma: any) => Promise<any>, options);\n }\n\n\n siteConfig: SiteConfig;\n\n\n SessionManager: typeof sessions.SessionManager;\n AttachmentService: typeof attacher.AttachmentService;\n\n /** Signals that database setup is required. May be set to false by any qualified setup command. */\n setupRequired: boolean = true;\n outputPath: string;\n}\n/**\nParse a sequence of commands\n commandTokens: an array of command string tokens\n wiki: reference to the wiki store object\n streams: {output:, error:}, each of which has a write(string) method\n callback: a callback invoked as callback(err) where err is null if there was no error\n*/\nexport class Commander extends StartupCommander {\n\n constructor(\n config: MWSConfig,\n $tw: TW,\n PasswordService: PasswordService,\n ) {\n super(config, $tw, PasswordService);\n this.nextToken = 0;\n this.verbose = false;\n\n const { listeners, onListenersCreated } = config;\n config.listeners = [];\n config.onListenersCreated = undefined;\n // there's nothing that can't be hacked in a Node process,\n // but this just makes it a little bit harder for the listeners to be read.\n // this can be replaced, but it only recieves the listeners via closure.\n this.create_mws_listen = (params: string[]) => {\n return new listen_command.Command(params, this, listeners, onListenersCreated);\n };\n }\n program!: commander.Command;\n\n async init() {\n await super.init();\n\n this.program = new commander.Command();\n const pkg = JSON.parse(readFileSync(dist_resolve(\"../package.json\"), \"utf-8\"));\n\n this.program\n .name(\"mws\")\n .description(pkg.description)\n .version(pkg.version)\n .enablePositionalOptions()\n .passThroughOptions()\n .showHelpAfterError()\n\n Object.keys(commands).forEach((key) => {\n const c = commands[key]!;\n if (c.info.internal) return;\n if (c.info.name === \"help\") return;\n const command = this.program.command(c.info.name);\n command.description(c.info.description);\n c.info.arguments.forEach(([name, description]) => {\n command.argument(name, description);\n });\n c.info.options?.forEach(([name, description]) => {\n command.option(name, description);\n });\n\n command.action((...args) => {\n const command2 = args.pop();\n const options = args.pop();\n // TODO: options should become named parameters\n this.addCommandTokens([\"--\" + command2.name(), ...args]);\n });\n });\n\n\n }\n\n create_mws_listen;\n /** \n * The promise of the current execution. \n * It is created and returned by execute, \n * but also accessible here. \n * \n * After the promise is resolved, it will \n * be available until execute is called again. \n */\n promise!: Promise<void>;\n private callback!: (err?: any) => void;\n\n\n commandTokens!: string[];\n nextToken\n verbose\n\n static initCommands(moduleType?: string) {\n if (moduleType) throw new Error(\"moduleType is not implemented\");\n }\n /*\n Add a string of tokens to the command queue\n */\n addCommandTokens(params: string[]) {\n if (this.verbose) console.log(\"Commander addCommandTokens\", params);\n this.commandTokens.splice(this.nextToken, 0, ...params);\n }\n /*\n Execute the sequence of commands and invoke a callback on completion\n */\n execute(commandTokens: string[]) {\n console.log(\"Commander\", commandTokens);\n this.setPromise();\n this.commandTokens = [];\n switch (commandTokens[0]) {\n // internal dev commands\n case \"--client-build\":\n this.commandTokens.push(...commandTokens); break;\n default:\n this.program.parse(commandTokens, { from: 'user' }); break;\n }\n\n this.executeNextCommand();\n return this.promise;\n }\n executeInternal(commandTokens: string[]) {\n console.log(\"Commander\", commandTokens);\n this.setPromise();\n this.commandTokens = commandTokens;\n this.executeNextCommand();\n return this.promise;\n }\n setPromise() {\n this.promise = new Promise<void>((resolve, reject) => {\n this.callback = (err: any) => {\n if (err) this.$tw.utils.error(\"Error: \" + err);\n err ? reject(err) : resolve();\n };\n });\n\n }\n /*\n Execute the next command in the sequence\n */\n executeNextCommand() {\n\n // Invoke the callback if there are no more commands\n if (this.nextToken >= this.commandTokens.length) {\n this.callback(null);\n return;\n }\n\n // Get and check the command token\n let commandName = this.commandTokens[this.nextToken++] as string;\n if (commandName.slice(0, 2) !== \"--\") {\n console.log(this.commandTokens);\n this.callback(\"Missing command: \" + commandName);\n return;\n }\n\n commandName = commandName.slice(2); // Trim off the --\n\n // Get the command info\n var command = commands[commandName], c, err;\n if (!command) {\n this.callback(\"Unknown command: \" + commandName);\n return;\n }\n\n // Accumulate the parameters to the command\n const nextCommand = this.commandTokens.findIndex((token, i) => i >= this.nextToken && token.startsWith(\"--\"));\n const params = this.commandTokens.slice(this.nextToken, nextCommand === -1 ? undefined : nextCommand);\n this.nextToken = nextCommand === -1 ? this.commandTokens.length : nextCommand;\n\n if (commandName !== divider.info.name)\n console.log(\"Commander executing\", commandName, params);\n\n\n // Parse named parameters if required\n // const paramsIfMandetory = params;\n if (typeof params === \"string\") { this.callback(params); return; }\n\n new Promise<any>(async (resolve) => {\n const { Command, info } = command!;\n try {\n c = info.name === listen_command.info.name\n ? this.create_mws_listen(params)\n : new Command(params, this, info.synchronous ? undefined : resolve);\n err = await c.execute();\n if (err || info.synchronous) resolve(err);\n } catch (e) {\n resolve(e);\n }\n }).then((err: any) => {\n if (err) {\n console.log(err);\n this.callback(err);\n } else {\n this.executeNextCommand();\n }\n });\n\n }\n /*\n Given an array of parameter strings `params` in name=value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n */\n extractNamedParameters(params: string[], mandatoryParameters?: string[]) {\n mandatoryParameters = mandatoryParameters || [];\n var errors: any[] = [], paramsByName = Object.create(null);\n // Extract the parameters\n each(params, function (param: string) {\n var index = param.indexOf(\"=\");\n if (index < 1) {\n errors.push(\"malformed named parameter: '\" + param + \"'\");\n }\n paramsByName[param.slice(0, index)] = param.slice(index + 1).trim();\n });\n // Check the mandatory parameters are present\n each(mandatoryParameters, function (mandatoryParameter: string) {\n if (!hop(paramsByName, mandatoryParameter)) {\n errors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n }\n });\n // Return any errors\n if (errors.length > 0) {\n return errors.join(\" and\\n\");\n } else {\n return paramsByName;\n }\n }\n}\n\n","\nimport * as opaque from \"@serenity-kit/opaque\";\nimport { TypedGenerator } from \"../utils\";\nimport { randomBytes } from \"node:crypto\";\nimport { ok } from \"node:assert\";\n\nexport type PasswordService = Awaited<ReturnType<typeof createPasswordService>>;\n\nexport async function createPasswordService(serverSetup: string) {\n await opaque.ready;\n\n const serverState = new Map<string, TypedGenerator<LoginGeneratorStates>>();\n\n const LoginGenerator = TypedGenerator.wrapper<LoginGeneratorStates>()(async function* ({\n user_id,\n startLoginRequest,\n registrationRecord,\n }: {\n user_id: PrismaField<\"Users\", \"user_id\">;\n startLoginRequest: string;\n registrationRecord: string;\n }): any {\n\n const { asV, asY } = TypedGenerator.checker<LoginGeneratorStates>();\n\n const { serverLoginState, loginResponse } = opaque.server.startLogin({\n serverSetup,\n userIdentifier: user_id.toString(),\n registrationRecord,\n startLoginRequest,\n });\n\n const timestamp = Date.now();\n\n const finishLoginRequest = asV(1, yield asY(0, loginResponse));\n\n // this is supposed to be programmatic\n // it should never last longer than five minutes\n if (timestamp + 1000 * 60 * 5 < Date.now()) return;\n\n // per the spec, the sessionKey will only be returned \n // if the client's session key has been verified.\n return asY(1, {\n session: opaque.server.finishLogin({\n finishLoginRequest,\n serverLoginState,\n }),\n user_id,\n });\n\n });\n\n /**\n * This code creates a password registration. It can be used for temporary passwords, if needed. \n */\n async function PasswordCreation(userID: string, password: string) {\n // client\n\n const { clientRegistrationState, registrationRequest } = opaque.client.startRegistration({ password });\n\n // server\n const userIdentifier = userID; // userId/email/username\n\n const { registrationResponse } = opaque.server.createRegistrationResponse({\n serverSetup,\n userIdentifier,\n registrationRequest,\n });\n\n // client\n const { registrationRecord } = opaque.client.finishRegistration({\n clientRegistrationState,\n registrationResponse,\n password,\n });\n\n return registrationRecord as PrismaField<\"Users\", \"password\">;\n\n }\n\n\n\n async function createRegistrationResponse({ userID, registrationRequest }: {\n userID: PrismaField<\"Users\", \"user_id\">;\n registrationRequest: string;\n }) {\n\n const { registrationResponse } = opaque.server.createRegistrationResponse({\n serverSetup,\n userIdentifier: userID.toString(),\n registrationRequest,\n });\n\n return registrationResponse;\n\n }\n\n async function startLoginSession(stater: TypedGenerator<LoginGeneratorStates>) {\n let loginSession;\n do { loginSession = randomBytes(16).toString(\"base64url\"); }\n while (serverState.has(loginSession));\n serverState.set(loginSession, stater);\n return loginSession;\n }\n\n async function finishLoginSession(loginSession: string) {\n const stater = serverState.get(loginSession);\n if (stater) serverState.delete(loginSession);\n return stater;\n }\n\n return {\n serverState,\n LoginGenerator,\n PasswordCreation,\n createRegistrationResponse,\n startLoginSession,\n finishLoginSession\n }\n\n}\n\n\ntype LoginGeneratorStates = [\n [void, loginResponse: string],\n [finishLoginRequest: string, {\n user_id: PrismaField<\"Users\", \"user_id\">,\n session: { sessionKey: string; } | undefined\n }]\n]\n\n\n\n\n/** \n * This code verifies plain text passwords. \n * It shouldn't be used in production, \n * but this is how it would be done. \n */\nfunction PasswordVerification(userID: string, registrationRecord: string, password: string, serverSetup: string) {\n\n const { clientLoginState, startLoginRequest } = opaque.client.startLogin({ password, });\n\n // server\n const userIdentifier = userID;\n\n const { serverLoginState, loginResponse } = opaque.server.startLogin({\n serverSetup,\n userIdentifier,\n registrationRecord,\n startLoginRequest,\n });\n\n // client\n const loginResult = opaque.client.finishLogin({\n clientLoginState,\n loginResponse,\n password,\n });\n\n if (!loginResult) { throw new Error(\"Login failed\"); }\n\n const { finishLoginRequest, sessionKey } = loginResult;\n\n // server\n // the server session key is only returned after verifying the client's response, \n // which validates that the client actually has the session key.\n const { sessionKey: serversessionkey } = opaque.server.finishLogin({\n finishLoginRequest,\n serverLoginState,\n });\n\n // This is never done in production, as the key must not be sent across the wire.\n ok(sessionKey === serversessionkey);\n\n return { sessionKey };\n\n}","import \"./routes/router\";\nimport \"./StateObject\";\nimport \"./streamer\";\nimport \"./global\";\nimport * as opaque from \"@serenity-kit/opaque\";\nimport { existsSync, mkdirSync, PathOrFileDescriptor, readFileSync, writeFileSync } from 'node:fs';\nimport * as sessions from \"./services/sessions\";\nimport * as attacher from \"./services/attachments\";\nimport { bootTiddlyWiki } from \"./tiddlywiki\";\nimport { Commander } from \"./commander\";\nimport { ListenerBase } from \"./commands/listen\";\nimport { createPasswordService } from \"./services/PasswordService\";\nimport { resolve } from \"node:path\";\n\nexport * from \"./services/sessions\";\n\nexport interface MWSConfig {\n /** \n * Listener config for the mws-listen command. \n * This is extracted from the config early and passed directly to mws-listen. \n */\n listeners: {\n /** The key file for the HTTPS server. If either key or cert are set, both are required, and HTTPS is enforced. */\n key?: string\n /** The cert file for the HTTPS server. If either key or cert are set, both are required, and HTTPS is enforced. */\n cert?: string\n /** The port to listen on. If not specified, listen will not be called. */\n port?: number\n /** The hostname to listen on. If this is specified, then port is required. */\n host?: string\n }[]\n /**\n * Called and awaited by the mws-listen command. \n * This is extracted from the config early and passed directly to mws-listen. \n */\n onListenersCreated?: (listeners: ListenerBase[]) => Promise<void>;\n\n /** \n * Enables the dev configuration of the server.\n */\n enableDevServer?: boolean\n /** \n * Path or file descriptor to the password master key.\n * If this key changes, all passwords will be invalid and need to be changed.\n */\n passwordMasterKeyFile: string | number\n onPasswordKeyFileRead?: () => void;\n /** Path to the datafolder. */\n wikiPath: string\n /** MWS site configuration */\n config?: MWSConfigConfig\n /** \n * The session manager class registers the login handler routes and sets the auth user \n */\n SessionManager?: typeof sessions.SessionManager;\n /** \n * The attachment service class is used by routes to handle attachments\n */\n AttachmentService?: typeof attacher.AttachmentService;\n\n}\n\n\nexport interface MWSConfigConfig {\n /** If true, allow users that aren't logged in to read. */\n readonly allowAnonReads?: boolean\n /** If true, allow users that aren't logged in to write. */\n readonly allowAnonWrites?: boolean\n /** If true, recipes will allow access to a user who does not have read access to all its bags. */\n readonly allowUnreadableBags?: boolean\n /** If true, files larger than `this * 1024` will be saved to disk alongside the database instead of in the database. */\n readonly saveLargeTextToFileSystem?: number;\n readonly enableGzip?: boolean\n readonly enableBrowserCache?: boolean\n /** The path prefix must start with a slash, and end without a slash */\n readonly pathPrefix?: string;\n readonly enablePluginCache?: boolean;\n}\n\n\nexport interface SiteConfig extends Complete<MWSConfigConfig> {\n wikiPath: string;\n attachmentSizeLimit: number;\n attachmentsEnabled: boolean;\n contentTypeInfo: Record<string, any>;\n saveLargeTextToFileSystem: never;\n storePath: string;\n /** \n * The path prefix is a essentially folder mount point. \n * \n * It starts with a slash, and ends without a slash (`\"/dev\"`). \n * \n * If there is not a prefix, it is an empty string (`\"\"`). \n */\n pathPrefix: string;\n}\n\n\n/**\n * \n * The promise returned will resolve once the commander has completed.\n * It will reject if the commander or anything else throws an error.\n * \n```\nimport startServer from \"./src/server.ts\";\n\nstartServer({\n // enableDevServer: true,\n passwordMasterKey: \"./localpass.key\",\n listeners: [{\n key: \"./localhost.key\",\n cert: \"./localhost.crt\",\n port: 5000,\n }],\n config: {\n wikiPath: \"./editions/mws\",\n allowAnonReads: false,\n allowAnonWrites: false,\n allowUnreadableBags: false,\n },\n});\n\n```\n */\nexport default async function startServer(config: MWSConfig) {\n\n await opaque.ready;\n\n if (![\"string\", \"number\"].includes(typeof config.passwordMasterKeyFile)) {\n throw new Error(\"passwordMasterKeyFile must be a string or number\");\n }\n\n if (typeof config.passwordMasterKeyFile === \"string\"\n && config.passwordMasterKeyFile\n && !existsSync(config.passwordMasterKeyFile)\n ) {\n writeFileSync(config.passwordMasterKeyFile, opaque.server.createSetup());\n console.log(\"Password master key created at\", config.passwordMasterKeyFile);\n }\n\n const passwordMasterKey = readFileSync(config.passwordMasterKeyFile, \"utf8\").trim();\n\n config.onPasswordKeyFileRead?.();\n\n config.wikiPath = resolve(config.wikiPath);\n\n const commander = new Commander(\n config,\n await bootTiddlyWiki(config.wikiPath),\n await createPasswordService(passwordMasterKey)\n );\n\n await commander.init();\n const cli = process.argv.slice(2);\n // mws-command-separator prevents params after it from being applied to the command before it.\n // it throws an error if it ends up with any params.\n if (cli.length)\n await commander.execute(cli);\n else\n await commander.executeInternal([\n \"--init-store\",\n \"--listen\"\n ]);\n\n if (commander.setupRequired) {\n console.log(\"MWS setup required. Please run either init-store or load-archive\");\n process.exit(1);\n }\n\n}\n\n"],"mappings":"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","names":["object","deleteDirectory","ok","module","relative","module","module","module","codes","status","module","module","module","module","exports","module","module","module","module","useColors","module","module","EventEmitter","module","module","string","escape","module","crypto","module","module","module","charset","path","extension","module","i","fn","module","module","module","fs","path","join","normalize","resolve","sep","send","etag","match","err","stream","type","path","resolve","ok","test","z","z2","ZodAssert","data","init_utils","init_utils","resolve","send","z","init_utils","init_utils","z","acl","bags","z","ok","init_utils","commander","module","sjcl","a","z","resolve","createHash","info","sjcl","hash","init_utils","z","server","result","rootRoute","$tw","Server","z","init_utils","target","resolve","createHash","headers","init_utils","fs","path","rootRoute","commander","$tw","z","init_utils","z","path","Router","init_utils","rootRoute","commander","ok","TiddlyWiki","ok","$tw","resolve","callback","init_utils","createHash","path","z","session_id","path","fs","import_sjcl","init_utils","sjcl","CommanderError","InvalidArgumentError","InvalidArgumentError","Argument","cmd","Help","InvalidArgumentError","Option","str","EventEmitter","path","fs","process","Argument","CommanderError","Help","Option","_Command","option","Command","Argument","Command","CommanderError","InvalidArgumentError","Help","Option","commander","Command","resolve","$tw","makePluginBagName","prismaPromiseArray","init_utils","commander","Command","info","resolve","writeFileSync","_Command","commander","Command","info","resolve","$tw","path","fs","_Command","commander","Command","info","resolve","_Command","init_utils","commander","Command","info","join","resolve","_fsp","existsSync","fsp","_Command","init_utils","commander","e","Command","info","resolve","_Command","init_utils","commander","Command","info","ok","existsSync","readFileSync","_Command","server","commander","Router","Command","info","_Command","commander","Command","info","_Command","commander","Command","info","_Command","commander","Command","info","_Command","commander","info","readFile","createHash","existsSync","init_utils","e","path","PrismaClient","existsSync","mkdirSync","readFileSync","ok","init_utils","$tw","resolve","Command","info","err","randomBytes","init_utils","opaque","existsSync","readFileSync","writeFileSync","resolve","commander"]}