@async/db 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/README.md +431 -0
  3. package/SPEC.md +1429 -0
  4. package/db.config.example.mjs +128 -0
  5. package/dist/cli/args.d.ts +8 -0
  6. package/dist/cli/args.js +16 -0
  7. package/dist/cli/commands/create.d.ts +3 -0
  8. package/dist/cli/commands/create.js +13 -0
  9. package/dist/cli/commands/doctor.d.ts +3 -0
  10. package/dist/cli/commands/doctor.js +31 -0
  11. package/dist/cli/commands/generate.d.ts +6 -0
  12. package/dist/cli/commands/generate.js +24 -0
  13. package/dist/cli/commands/operations.d.ts +12 -0
  14. package/dist/cli/commands/operations.js +61 -0
  15. package/dist/cli/commands/schema.d.ts +11 -0
  16. package/dist/cli/commands/schema.js +1086 -0
  17. package/dist/cli/commands/serve.d.ts +9 -0
  18. package/dist/cli/commands/serve.js +18 -0
  19. package/dist/cli/commands/sync.d.ts +3 -0
  20. package/dist/cli/commands/sync.js +11 -0
  21. package/dist/cli/commands/types.d.ts +7 -0
  22. package/dist/cli/commands/types.js +37 -0
  23. package/dist/cli/commands/viewer.d.ts +6 -0
  24. package/dist/cli/commands/viewer.js +29 -0
  25. package/dist/cli/index.d.ts +2 -0
  26. package/dist/cli/index.js +108 -0
  27. package/dist/cli/output.d.ts +25 -0
  28. package/dist/cli/output.js +149 -0
  29. package/dist/cli/schema-prompt.d.ts +20 -0
  30. package/dist/cli/schema-prompt.js +66 -0
  31. package/dist/cli.d.ts +2 -0
  32. package/dist/cli.js +3 -0
  33. package/dist/client-cache.d.ts +105 -0
  34. package/dist/client-cache.js +916 -0
  35. package/dist/client.d.ts +64 -0
  36. package/dist/client.js +405 -0
  37. package/dist/config-public.d.ts +1 -0
  38. package/dist/config-public.js +1 -0
  39. package/dist/config.d.ts +54 -0
  40. package/dist/config.js +2 -0
  41. package/dist/csv.d.ts +1 -0
  42. package/dist/csv.js +1 -0
  43. package/dist/db.d.ts +3 -0
  44. package/dist/db.js +3 -0
  45. package/dist/doctor.d.ts +1 -0
  46. package/dist/doctor.js +1 -0
  47. package/dist/errors.d.ts +1 -0
  48. package/dist/errors.js +1 -0
  49. package/dist/features/config/defaults.d.ts +98 -0
  50. package/dist/features/config/defaults.js +95 -0
  51. package/dist/features/config/load.d.ts +11 -0
  52. package/dist/features/config/load.js +265 -0
  53. package/dist/features/config/public.d.ts +17 -0
  54. package/dist/features/config/public.js +75 -0
  55. package/dist/features/doctor/duplicate-ids.d.ts +18 -0
  56. package/dist/features/doctor/duplicate-ids.js +79 -0
  57. package/dist/features/doctor/field-consistency.d.ts +17 -0
  58. package/dist/features/doctor/field-consistency.js +48 -0
  59. package/dist/features/doctor/index.d.ts +39 -0
  60. package/dist/features/doctor/index.js +177 -0
  61. package/dist/features/doctor/relations.d.ts +22 -0
  62. package/dist/features/doctor/relations.js +90 -0
  63. package/dist/features/doctor/schema-guidance.d.ts +35 -0
  64. package/dist/features/doctor/schema-guidance.js +184 -0
  65. package/dist/features/generate/registry.d.ts +14 -0
  66. package/dist/features/generate/registry.js +37 -0
  67. package/dist/features/http/registry.d.ts +46 -0
  68. package/dist/features/http/registry.js +86 -0
  69. package/dist/features/operations/index.d.ts +49 -0
  70. package/dist/features/operations/index.js +199 -0
  71. package/dist/features/operations/maps.d.ts +1 -0
  72. package/dist/features/operations/maps.js +10 -0
  73. package/dist/features/operations/readiness.d.ts +30 -0
  74. package/dist/features/operations/readiness.js +228 -0
  75. package/dist/features/operations/runtime.d.ts +57 -0
  76. package/dist/features/operations/runtime.js +288 -0
  77. package/dist/features/runtime/collection.d.ts +51 -0
  78. package/dist/features/runtime/collection.js +198 -0
  79. package/dist/features/runtime/db.d.ts +152 -0
  80. package/dist/features/runtime/db.js +824 -0
  81. package/dist/features/runtime/document.d.ts +43 -0
  82. package/dist/features/runtime/document.js +111 -0
  83. package/dist/features/runtime/fanout.d.ts +24 -0
  84. package/dist/features/runtime/fanout.js +77 -0
  85. package/dist/features/runtime/json-pointer.d.ts +5 -0
  86. package/dist/features/runtime/json-pointer.js +49 -0
  87. package/dist/features/runtime/scope-state.d.ts +44 -0
  88. package/dist/features/runtime/scope-state.js +185 -0
  89. package/dist/features/runtime/state.d.ts +1 -0
  90. package/dist/features/runtime/state.js +1 -0
  91. package/dist/features/schema/api.d.ts +107 -0
  92. package/dist/features/schema/api.js +460 -0
  93. package/dist/features/schema/builders.d.ts +86 -0
  94. package/dist/features/schema/builders.js +110 -0
  95. package/dist/features/schema/fields.d.ts +38 -0
  96. package/dist/features/schema/fields.js +296 -0
  97. package/dist/features/schema/generated.d.ts +29 -0
  98. package/dist/features/schema/generated.js +32 -0
  99. package/dist/features/schema/locator.d.ts +16 -0
  100. package/dist/features/schema/locator.js +135 -0
  101. package/dist/features/schema/manifest.d.ts +91 -0
  102. package/dist/features/schema/manifest.js +384 -0
  103. package/dist/features/schema/metadata.d.ts +30 -0
  104. package/dist/features/schema/metadata.js +75 -0
  105. package/dist/features/schema/project.d.ts +46 -0
  106. package/dist/features/schema/project.js +442 -0
  107. package/dist/features/schema/relations.d.ts +38 -0
  108. package/dist/features/schema/relations.js +109 -0
  109. package/dist/features/schema/resolvers.d.ts +36 -0
  110. package/dist/features/schema/resolvers.js +111 -0
  111. package/dist/features/schema/resource.d.ts +75 -0
  112. package/dist/features/schema/resource.js +253 -0
  113. package/dist/features/schema/source-definitions.d.ts +21 -0
  114. package/dist/features/schema/source-definitions.js +29 -0
  115. package/dist/features/schema/sources.d.ts +83 -0
  116. package/dist/features/schema/sources.js +689 -0
  117. package/dist/features/schema/standard-schema.d.ts +57 -0
  118. package/dist/features/schema/standard-schema.js +232 -0
  119. package/dist/features/schema/validation.d.ts +69 -0
  120. package/dist/features/schema/validation.js +434 -0
  121. package/dist/features/storage/events.d.ts +12 -0
  122. package/dist/features/storage/events.js +30 -0
  123. package/dist/features/storage/json.d.ts +112 -0
  124. package/dist/features/storage/json.js +239 -0
  125. package/dist/features/storage/memory.d.ts +30 -0
  126. package/dist/features/storage/memory.js +44 -0
  127. package/dist/features/storage/resource-json.d.ts +31 -0
  128. package/dist/features/storage/resource-json.js +76 -0
  129. package/dist/features/storage/runtime.d.ts +37 -0
  130. package/dist/features/storage/runtime.js +184 -0
  131. package/dist/features/storage/source-metadata.d.ts +20 -0
  132. package/dist/features/storage/source-metadata.js +25 -0
  133. package/dist/features/storage/source.d.ts +37 -0
  134. package/dist/features/storage/source.js +60 -0
  135. package/dist/features/storage/static.d.ts +29 -0
  136. package/dist/features/storage/static.js +42 -0
  137. package/dist/features/sync/defaults.d.ts +21 -0
  138. package/dist/features/sync/defaults.js +21 -0
  139. package/dist/features/sync/index.d.ts +35 -0
  140. package/dist/features/sync/index.js +85 -0
  141. package/dist/features/sync/mirror-state.d.ts +14 -0
  142. package/dist/features/sync/mirror-state.js +4 -0
  143. package/dist/features/sync/runtime-dirs.d.ts +5 -0
  144. package/dist/features/sync/runtime-dirs.js +9 -0
  145. package/dist/features/sync/source-writes.d.ts +15 -0
  146. package/dist/features/sync/source-writes.js +27 -0
  147. package/dist/features/sync/synthetic-seed.d.ts +26 -0
  148. package/dist/features/sync/synthetic-seed.js +83 -0
  149. package/dist/features/viewer/manifest.d.ts +148 -0
  150. package/dist/features/viewer/manifest.js +165 -0
  151. package/dist/fs-utils.d.ts +1 -0
  152. package/dist/fs-utils.js +1 -0
  153. package/dist/generate/hono/app.d.ts +6 -0
  154. package/dist/generate/hono/app.js +51 -0
  155. package/dist/generate/hono/graphql.d.ts +7 -0
  156. package/dist/generate/hono/graphql.js +53 -0
  157. package/dist/generate/hono/index.d.ts +55 -0
  158. package/dist/generate/hono/index.js +140 -0
  159. package/dist/generate/hono/package.d.ts +6 -0
  160. package/dist/generate/hono/package.js +44 -0
  161. package/dist/generate/hono/readme.d.ts +13 -0
  162. package/dist/generate/hono/readme.js +28 -0
  163. package/dist/generate/hono/repository.d.ts +1 -0
  164. package/dist/generate/hono/repository.js +27 -0
  165. package/dist/generate/hono/rest.d.ts +1 -0
  166. package/dist/generate/hono/rest.js +38 -0
  167. package/dist/generate/hono/schema.d.ts +13 -0
  168. package/dist/generate/hono/schema.js +18 -0
  169. package/dist/generate/hono/sqlite.d.ts +20 -0
  170. package/dist/generate/hono/sqlite.js +266 -0
  171. package/dist/generate/hono/validators.d.ts +1 -0
  172. package/dist/generate/hono/validators.js +141 -0
  173. package/dist/generate/hono.d.ts +1 -0
  174. package/dist/generate/hono.js +1 -0
  175. package/dist/graphql/execute.d.ts +14 -0
  176. package/dist/graphql/execute.js +719 -0
  177. package/dist/graphql/http.d.ts +15 -0
  178. package/dist/graphql/http.js +29 -0
  179. package/dist/graphql/index.d.ts +3 -0
  180. package/dist/graphql/index.js +3 -0
  181. package/dist/graphql/parser.d.ts +54 -0
  182. package/dist/graphql/parser.js +433 -0
  183. package/dist/hono.d.ts +77 -0
  184. package/dist/hono.js +1 -0
  185. package/dist/index.d.ts +1065 -0
  186. package/dist/index.js +14 -0
  187. package/dist/integrations/hono.d.ts +136 -0
  188. package/dist/integrations/hono.js +508 -0
  189. package/dist/integrations/kv.d.ts +69 -0
  190. package/dist/integrations/kv.js +69 -0
  191. package/dist/integrations/postgres.d.ts +52 -0
  192. package/dist/integrations/postgres.js +113 -0
  193. package/dist/integrations/sqlite.d.ts +112 -0
  194. package/dist/integrations/sqlite.js +489 -0
  195. package/dist/integrations/vite.d.ts +45 -0
  196. package/dist/integrations/vite.js +111 -0
  197. package/dist/json.d.ts +48 -0
  198. package/dist/json.js +1 -0
  199. package/dist/jsonc.d.ts +1 -0
  200. package/dist/jsonc.js +1 -0
  201. package/dist/kv.d.ts +24 -0
  202. package/dist/kv.js +1 -0
  203. package/dist/mock.d.ts +1 -0
  204. package/dist/mock.js +1 -0
  205. package/dist/names.d.ts +1 -0
  206. package/dist/names.js +1 -0
  207. package/dist/operations.d.ts +3 -0
  208. package/dist/operations.js +3 -0
  209. package/dist/postgres.d.ts +24 -0
  210. package/dist/postgres.js +1 -0
  211. package/dist/redis.d.ts +14 -0
  212. package/dist/redis.js +1 -0
  213. package/dist/rest/formats.d.ts +80 -0
  214. package/dist/rest/formats.js +318 -0
  215. package/dist/rest/handler.d.ts +111 -0
  216. package/dist/rest/handler.js +833 -0
  217. package/dist/rest/shape.d.ts +33 -0
  218. package/dist/rest/shape.js +218 -0
  219. package/dist/schema-builders.d.ts +1 -0
  220. package/dist/schema-builders.js +1 -0
  221. package/dist/schema-manifest.d.ts +1 -0
  222. package/dist/schema-manifest.js +1 -0
  223. package/dist/schema.d.ts +193 -0
  224. package/dist/schema.js +6 -0
  225. package/dist/server.d.ts +116 -0
  226. package/dist/server.js +601 -0
  227. package/dist/shared/csv.d.ts +8 -0
  228. package/dist/shared/csv.js +149 -0
  229. package/dist/shared/errors.d.ts +40 -0
  230. package/dist/shared/errors.js +55 -0
  231. package/dist/shared/fs-utils.d.ts +4 -0
  232. package/dist/shared/fs-utils.js +30 -0
  233. package/dist/shared/jsonc.d.ts +2 -0
  234. package/dist/shared/jsonc.js +99 -0
  235. package/dist/shared/mock.d.ts +40 -0
  236. package/dist/shared/mock.js +83 -0
  237. package/dist/shared/names.d.ts +28 -0
  238. package/dist/shared/names.js +127 -0
  239. package/dist/shared/operations.d.ts +32 -0
  240. package/dist/shared/operations.js +302 -0
  241. package/dist/sqlite.d.ts +24 -0
  242. package/dist/sqlite.js +1 -0
  243. package/dist/state.d.ts +1 -0
  244. package/dist/state.js +1 -0
  245. package/dist/sync.d.ts +1 -0
  246. package/dist/sync.js +1 -0
  247. package/dist/tracing.d.ts +95 -0
  248. package/dist/tracing.js +260 -0
  249. package/dist/types.d.ts +51 -0
  250. package/dist/types.js +285 -0
  251. package/dist/viewer-manifest.d.ts +1 -0
  252. package/dist/viewer-manifest.js +1 -0
  253. package/dist/vite.d.ts +59 -0
  254. package/dist/vite.js +1 -0
  255. package/dist/web/json-viewer.d.ts +5 -0
  256. package/dist/web/json-viewer.js +176 -0
  257. package/dist/web/viewer.d.ts +12 -0
  258. package/dist/web/viewer.js +1015 -0
  259. package/docs/README.md +42 -0
  260. package/docs/architecture.md +112 -0
  261. package/docs/ci-and-release.md +177 -0
  262. package/docs/cms-storage-patterns.md +108 -0
  263. package/docs/concepts.md +141 -0
  264. package/docs/configuration.md +552 -0
  265. package/docs/fixtures-and-schemas.md +527 -0
  266. package/docs/fork-branch-workflows.md +108 -0
  267. package/docs/generated-files.md +174 -0
  268. package/docs/getting-started.md +165 -0
  269. package/docs/integrations.md +206 -0
  270. package/docs/json-production.md +120 -0
  271. package/docs/package-api.md +418 -0
  272. package/docs/prototype-to-production.md +378 -0
  273. package/docs/server-and-viewer.md +466 -0
  274. package/docs/store-graduation.md +120 -0
  275. package/docs/typescript-schema-sources.md +79 -0
  276. package/examples/advanced/README.md +55 -0
  277. package/examples/advanced/db/projects.schema.jsonc +44 -0
  278. package/examples/advanced/db/settings.jsonc +9 -0
  279. package/examples/advanced/db/users.json +23 -0
  280. package/examples/advanced/db/users.schema.mjs +31 -0
  281. package/examples/advanced/db.config.mjs +18 -0
  282. package/examples/advanced/example.json +5 -0
  283. package/examples/advanced/src/generated/db.types.d.ts +64 -0
  284. package/examples/basic/README.md +95 -0
  285. package/examples/basic/db/operations/get-user.jsonc +8 -0
  286. package/examples/basic/db/settings.json +7 -0
  287. package/examples/basic/db/users.schema.jsonc +36 -0
  288. package/examples/basic/db.config.mjs +68 -0
  289. package/examples/basic/example.json +5 -0
  290. package/examples/basic/src/generated/db.types.d.ts +39 -0
  291. package/examples/cms-json-publish/README.md +21 -0
  292. package/examples/cms-json-publish/db/navigation.json +7 -0
  293. package/examples/cms-json-publish/db/pages.json +18 -0
  294. package/examples/cms-json-publish/example.json +5 -0
  295. package/examples/cms-json-publish/src/cms.mjs +104 -0
  296. package/examples/computed-fields/README.md +93 -0
  297. package/examples/computed-fields/db/orders.schema.mjs +62 -0
  298. package/examples/computed-fields/db/posts.schema.mjs +59 -0
  299. package/examples/computed-fields/db/products.schema.mjs +39 -0
  300. package/examples/computed-fields/db/users.schema.mjs +43 -0
  301. package/examples/computed-fields/db.config.mjs +15 -0
  302. package/examples/computed-fields/example.json +5 -0
  303. package/examples/computed-fields/src/generated/db.types.d.ts +81 -0
  304. package/examples/content-collections/README.md +91 -0
  305. package/examples/content-collections/db/authors.json +12 -0
  306. package/examples/content-collections/db/authors.schema.mjs +20 -0
  307. package/examples/content-collections/db/blog/draft-roadmap.mdx +12 -0
  308. package/examples/content-collections/db/blog/index.schema.mjs +61 -0
  309. package/examples/content-collections/db/blog/launch-notes.mdx +15 -0
  310. package/examples/content-collections/db/docs/index.schema.mjs +32 -0
  311. package/examples/content-collections/db/docs/intro.mdx +11 -0
  312. package/examples/content-collections/db/docs/schema-workflow.mdx +10 -0
  313. package/examples/content-collections/db/site.schema.jsonc +21 -0
  314. package/examples/content-collections/db.config.mjs +26 -0
  315. package/examples/content-collections/example.json +5 -0
  316. package/examples/content-collections/src/content-preview.mjs +66 -0
  317. package/examples/content-collections/src/generated/db.types.d.ts +81 -0
  318. package/examples/csv/README.md +52 -0
  319. package/examples/csv/db/customers.csv +4 -0
  320. package/examples/csv/db.config.mjs +13 -0
  321. package/examples/csv/example.json +5 -0
  322. package/examples/data-first/README.md +54 -0
  323. package/examples/data-first/db/posts.json +16 -0
  324. package/examples/data-first/db/settings.json +8 -0
  325. package/examples/data-first/db/users.json +14 -0
  326. package/examples/data-first/db.config.mjs +13 -0
  327. package/examples/data-first/example.json +5 -0
  328. package/examples/diagnostics/README.md +55 -0
  329. package/examples/diagnostics/db/projects.schema.jsonc +27 -0
  330. package/examples/diagnostics/db/users.json +9 -0
  331. package/examples/diagnostics/db/users.schema.jsonc +23 -0
  332. package/examples/diagnostics/db.config.mjs +16 -0
  333. package/examples/diagnostics/example.json +5 -0
  334. package/examples/free-plan-upgrade/README.md +22 -0
  335. package/examples/free-plan-upgrade/db/appSettings.json +4 -0
  336. package/examples/free-plan-upgrade/db/projects.json +7 -0
  337. package/examples/free-plan-upgrade/example.json +5 -0
  338. package/examples/free-plan-upgrade/src/upgrade-tenant-to-paid.mjs +105 -0
  339. package/examples/hono-auth/README.md +74 -0
  340. package/examples/hono-auth/db/pages.schema.jsonc +44 -0
  341. package/examples/hono-auth/db/users.schema.jsonc +42 -0
  342. package/examples/hono-auth/db.config.mjs +17 -0
  343. package/examples/hono-auth/example.json +5 -0
  344. package/examples/hono-auth/package.json +14 -0
  345. package/examples/hono-auth/src/app.mjs +79 -0
  346. package/examples/hono-auth/src/server.mjs +13 -0
  347. package/examples/production-json/README.md +102 -0
  348. package/examples/production-json/db/appSettings.schema.jsonc +41 -0
  349. package/examples/production-json/db/featureFlags.schema.jsonc +84 -0
  350. package/examples/production-json/db/operations/get-control-plane.jsonc +6 -0
  351. package/examples/production-json/db/operations/get-feature-flag.jsonc +9 -0
  352. package/examples/production-json/db/operations/list-feature-flags.jsonc +8 -0
  353. package/examples/production-json/db/operations/read-public-settings.jsonc +8 -0
  354. package/examples/production-json/db.config.mjs +33 -0
  355. package/examples/production-json/example.json +5 -0
  356. package/examples/production-json/src/client-demo.mjs +28 -0
  357. package/examples/production-json/src/generated/db.types.d.ts +60 -0
  358. package/examples/relations/README.md +56 -0
  359. package/examples/relations/db/posts.schema.jsonc +46 -0
  360. package/examples/relations/db/users.schema.jsonc +34 -0
  361. package/examples/relations/db.config.mjs +13 -0
  362. package/examples/relations/example.json +5 -0
  363. package/examples/rest-client/README.md +54 -0
  364. package/examples/rest-client/db/settings.json +5 -0
  365. package/examples/rest-client/db/users.schema.jsonc +42 -0
  366. package/examples/rest-client/db.config.mjs +13 -0
  367. package/examples/rest-client/example.json +5 -0
  368. package/examples/rest-client/src/client-demo.mjs +24 -0
  369. package/examples/schema-first/README.md +55 -0
  370. package/examples/schema-first/db/auditEvents.schema.jsonc +24 -0
  371. package/examples/schema-first/db/settings.schema.jsonc +29 -0
  372. package/examples/schema-first/db/users.schema.jsonc +36 -0
  373. package/examples/schema-first/db.config.mjs +15 -0
  374. package/examples/schema-first/example.json +5 -0
  375. package/examples/schema-first/src/generated/db.types.d.ts +47 -0
  376. package/examples/schema-manifest/README.md +50 -0
  377. package/examples/schema-manifest/db/projects.schema.jsonc +48 -0
  378. package/examples/schema-manifest/db/users.schema.jsonc +35 -0
  379. package/examples/schema-manifest/db.config.mjs +41 -0
  380. package/examples/schema-manifest/example.json +5 -0
  381. package/examples/schema-manifest/src/generated/db.schema.json +130 -0
  382. package/examples/schema-manifest/src/generated/db.types.d.ts +50 -0
  383. package/examples/schema-ui/README.md +103 -0
  384. package/examples/schema-ui/db/pages.schema.jsonc +53 -0
  385. package/examples/schema-ui/db/users.schema.jsonc +30 -0
  386. package/examples/schema-ui/db.config.mjs +55 -0
  387. package/examples/schema-ui/example.json +5 -0
  388. package/examples/schema-ui/src/cms-ssr.mjs +276 -0
  389. package/examples/schema-ui/src/generated/db.schema.json +133 -0
  390. package/examples/schema-ui/src/generated/db.types.d.ts +46 -0
  391. package/examples/schema-ui/src/render-admin.mjs +175 -0
  392. package/examples/schema-ui/src/schema-ui-ssr-handler.mjs +149 -0
  393. package/examples/schema-ui/src/start-schema-ui-server.mjs +140 -0
  394. package/examples/standard-schema/README.md +55 -0
  395. package/examples/standard-schema/db/settings.schema.mjs +22 -0
  396. package/examples/standard-schema/db/users.schema.mjs +72 -0
  397. package/examples/standard-schema/example.json +5 -0
  398. package/package.json +108 -0
@@ -0,0 +1,37 @@
1
+ import { type SourceMetadata } from './source-metadata.js';
2
+ type RuntimeConfig = {
3
+ cwd: string;
4
+ [key: string]: unknown;
5
+ };
6
+ type RuntimeResource = {
7
+ name: string;
8
+ dataPath?: string | null;
9
+ dataFormat?: string | null;
10
+ [key: string]: unknown;
11
+ };
12
+ type ResourceWriteOperation<T> = () => T | Promise<T>;
13
+ export declare const sourceRuntimeCapabilities: {
14
+ writable: boolean;
15
+ persistence: string;
16
+ atomicity: string;
17
+ liveEvents: boolean;
18
+ staticExport: boolean;
19
+ production: boolean;
20
+ };
21
+ export declare function createSourceRuntimeAdapter(config: RuntimeConfig): {
22
+ name: string;
23
+ capabilities: {
24
+ writable: boolean;
25
+ persistence: string;
26
+ atomicity: string;
27
+ liveEvents: boolean;
28
+ staticExport: boolean;
29
+ production: boolean;
30
+ };
31
+ hydrate(resources: RuntimeResource[]): Promise<void>;
32
+ readResource(resource: RuntimeResource, fallback: unknown): Promise<unknown>;
33
+ writeResource(resource: RuntimeResource, value: unknown): Promise<boolean>;
34
+ withResourceWrite<T>(resource: RuntimeResource, operation: ResourceWriteOperation<T>): Promise<T>;
35
+ };
36
+ export declare function writeSourceMetadata(config: RuntimeConfig, resources: RuntimeResource[], sourceMetadata: SourceMetadata): Promise<void>;
37
+ export {};
@@ -0,0 +1,60 @@
1
+ import { dbError } from '../../errors.js';
2
+ import { applyDefaultsToSeed } from '../sync/defaults.js';
3
+ import { seedForRuntimeState } from '../sync/synthetic-seed.js';
4
+ import { atomicWriteJson, readJsonState, withJsonStateWrite } from './json.js';
5
+ import { updateSourceMetadataResource } from './source-metadata.js';
6
+ export const sourceRuntimeCapabilities = {
7
+ writable: true,
8
+ persistence: 'source-file',
9
+ atomicity: 'resource',
10
+ liveEvents: true,
11
+ staticExport: false,
12
+ production: false,
13
+ };
14
+ export function createSourceRuntimeAdapter(config) {
15
+ const fallbacks = new Map();
16
+ return {
17
+ name: 'sourceFile',
18
+ capabilities: sourceRuntimeCapabilities,
19
+ async hydrate(resources) {
20
+ for (const resource of resources) {
21
+ assertWritableSource(resource);
22
+ fallbacks.set(resource.name, structuredClone(applyDefaultsToSeed(seedForRuntimeState(resource, config), resource, config)));
23
+ }
24
+ },
25
+ readResource(resource, fallback) {
26
+ assertWritableSource(resource);
27
+ return readJsonState(resource.dataPath, fallbacks.has(resource.name) ? structuredClone(fallbacks.get(resource.name)) : fallback);
28
+ },
29
+ writeResource(resource, value) {
30
+ assertWritableSource(resource);
31
+ return atomicWriteJson(resource.dataPath, value);
32
+ },
33
+ withResourceWrite(resource, operation) {
34
+ assertWritableSource(resource);
35
+ return withJsonStateWrite(resource.dataPath, operation);
36
+ },
37
+ };
38
+ }
39
+ export async function writeSourceMetadata(config, resources, sourceMetadata) {
40
+ for (const resource of resources) {
41
+ updateSourceMetadata(sourceMetadata, config, resource);
42
+ }
43
+ }
44
+ function assertWritableSource(resource) {
45
+ if (resource.dataPath && resource.dataFormat === 'json') {
46
+ return;
47
+ }
48
+ throw dbError('STORE_SOURCE_NOT_WRITABLE', `Resource "${resource.name}" cannot use the sourceFile store because it is not backed by a plain JSON data file.`, {
49
+ status: 400,
50
+ hint: 'Use store "sourceFile" only for resources loaded from db/*.json data files.',
51
+ details: {
52
+ resource: resource.name,
53
+ dataFormat: resource.dataFormat,
54
+ dataPath: resource.dataPath,
55
+ },
56
+ });
57
+ }
58
+ function updateSourceMetadata(sourceMetadata, config, resource) {
59
+ updateSourceMetadataResource(sourceMetadata, config, resource);
60
+ }
@@ -0,0 +1,29 @@
1
+ type RuntimeConfig = Record<string, unknown>;
2
+ type RuntimeResource = {
3
+ name: string;
4
+ [key: string]: unknown;
5
+ };
6
+ export declare const staticRuntimeCapabilities: {
7
+ writable: boolean;
8
+ persistence: string;
9
+ atomicity: string;
10
+ liveEvents: boolean;
11
+ staticExport: boolean;
12
+ production: boolean;
13
+ };
14
+ export declare function createStaticRuntimeAdapter(config: RuntimeConfig): {
15
+ name: string;
16
+ capabilities: {
17
+ writable: boolean;
18
+ persistence: string;
19
+ atomicity: string;
20
+ liveEvents: boolean;
21
+ staticExport: boolean;
22
+ production: boolean;
23
+ };
24
+ hydrate(resources: RuntimeResource[]): Promise<void>;
25
+ readResource(resource: RuntimeResource, fallback: unknown): Promise<unknown>;
26
+ writeResource(resource: RuntimeResource): Promise<never>;
27
+ withResourceWrite(resource: RuntimeResource): Promise<never>;
28
+ };
29
+ export {};
@@ -0,0 +1,42 @@
1
+ import { dbError } from '../../errors.js';
2
+ import { applyDefaultsToSeed } from '../sync/defaults.js';
3
+ import { seedForRuntimeState } from '../sync/synthetic-seed.js';
4
+ export const staticRuntimeCapabilities = {
5
+ writable: false,
6
+ persistence: 'static',
7
+ atomicity: 'none',
8
+ liveEvents: false,
9
+ staticExport: true,
10
+ production: true,
11
+ };
12
+ export function createStaticRuntimeAdapter(config) {
13
+ const values = new Map();
14
+ return {
15
+ name: 'static',
16
+ capabilities: staticRuntimeCapabilities,
17
+ async hydrate(resources) {
18
+ for (const resource of resources) {
19
+ values.set(resource.name, structuredClone(applyDefaultsToSeed(seedForRuntimeState(resource, config), resource, config)));
20
+ }
21
+ },
22
+ async readResource(resource, fallback) {
23
+ return values.has(resource.name) ? structuredClone(values.get(resource.name)) : structuredClone(fallback);
24
+ },
25
+ async writeResource(resource) {
26
+ throw readOnlyResourceError(resource);
27
+ },
28
+ async withResourceWrite(resource) {
29
+ throw readOnlyResourceError(resource);
30
+ },
31
+ };
32
+ }
33
+ function readOnlyResourceError(resource) {
34
+ return dbError('STORE_RESOURCE_READ_ONLY', `Resource "${resource.name}" is configured with a read-only store.`, {
35
+ status: 405,
36
+ hint: 'Use a writable store such as "json" or remove the static store strategy for this resource.',
37
+ details: {
38
+ resource: resource.name,
39
+ store: 'static',
40
+ },
41
+ });
42
+ }
@@ -0,0 +1,21 @@
1
+ type SyncConfig = {
2
+ defaults?: {
3
+ applyOnSafeMigration?: boolean;
4
+ };
5
+ [key: string]: unknown;
6
+ };
7
+ type FieldDefinition = {
8
+ default?: unknown;
9
+ [key: string]: unknown;
10
+ };
11
+ type SyncResource = {
12
+ name?: string;
13
+ kind?: string;
14
+ idField?: string;
15
+ fields?: Record<string, FieldDefinition>;
16
+ [key: string]: unknown;
17
+ };
18
+ type RuntimeRecord = Record<string, unknown>;
19
+ export declare function applyDefaultsToSeed(seed: unknown, resource: SyncResource, config: SyncConfig): unknown;
20
+ export declare function applyDefaultsToRecord<T>(record: T, resource: SyncResource): T | RuntimeRecord;
21
+ export {};
@@ -0,0 +1,21 @@
1
+ export function applyDefaultsToSeed(seed, resource, config) {
2
+ if (config.defaults?.applyOnSafeMigration === false) {
3
+ return seed;
4
+ }
5
+ if (resource.kind === 'collection') {
6
+ return Array.isArray(seed) ? seed.map((record) => applyDefaultsToRecord(record, resource)) : [];
7
+ }
8
+ return applyDefaultsToRecord(seed, resource);
9
+ }
10
+ export function applyDefaultsToRecord(record, resource) {
11
+ if (!record || typeof record !== 'object' || Array.isArray(record)) {
12
+ return record;
13
+ }
14
+ const next = { ...record };
15
+ for (const [fieldName, field] of Object.entries(resource.fields ?? {})) {
16
+ if (next[fieldName] === undefined && 'default' in field) {
17
+ next[fieldName] = structuredClone(field.default);
18
+ }
19
+ }
20
+ return next;
21
+ }
@@ -0,0 +1,35 @@
1
+ export { applyDefaultsToRecord, applyDefaultsToSeed } from './defaults.js';
2
+ type SyncConfig = {
3
+ cwd: string;
4
+ stateDir: string;
5
+ types?: {
6
+ enabled?: boolean;
7
+ };
8
+ schemaOutFile?: string | null;
9
+ viewerManifestOutFile?: string | null;
10
+ [key: string]: unknown;
11
+ };
12
+ type SyncDiagnostic = {
13
+ code?: string;
14
+ severity?: string;
15
+ message: string;
16
+ [key: string]: unknown;
17
+ };
18
+ type SyncResource = {
19
+ name: string;
20
+ schemaPath?: string | null;
21
+ dataPath?: string | null;
22
+ [key: string]: unknown;
23
+ };
24
+ type SyncProject = {
25
+ resources: SyncResource[];
26
+ diagnostics: SyncDiagnostic[];
27
+ schema?: Record<string, unknown>;
28
+ [key: string]: unknown;
29
+ };
30
+ type SyncOptions = {
31
+ allowErrors?: boolean;
32
+ };
33
+ export declare function syncDb(config: SyncConfig, options?: SyncOptions): Promise<SyncProject & {
34
+ logs: string[];
35
+ }>;
@@ -0,0 +1,85 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { loadProjectSchema, makeGeneratedSchema } from '../../schema.js';
4
+ import { generateSchemaManifest } from '../../schema-manifest.js';
5
+ import { generateTypes } from '../../types.js';
6
+ import { generateViewerManifest } from '../../viewer-manifest.js';
7
+ import { readJsonState, writeJsonState } from '../runtime/state.js';
8
+ import { createRuntime } from '../storage/runtime.js';
9
+ import { writeSourceMetadata } from '../storage/source.js';
10
+ import { writeText } from '../../fs-utils.js';
11
+ import { ensureRuntimeDirs } from './runtime-dirs.js';
12
+ import { writeGeneratedIdsToSources } from './source-writes.js';
13
+ export { applyDefaultsToRecord, applyDefaultsToSeed } from './defaults.js';
14
+ export async function syncDb(config, options = {}) {
15
+ const project = await loadProjectSchema(config);
16
+ const logs = [];
17
+ const errors = project.diagnostics.filter((diagnostic) => diagnostic.severity === 'error');
18
+ const fatalErrors = errors.filter((diagnostic) => diagnostic.code === 'RESOURCE_ALIAS_COLLISION');
19
+ for (const resource of project.resources) {
20
+ logs.push(`Loaded ${path.relative(config.cwd, String(resource.schemaPath ?? resource.dataPath ?? ''))}`);
21
+ }
22
+ if (fatalErrors.length > 0 || (errors.length > 0 && options.allowErrors !== true)) {
23
+ const error = new Error(errors.map((diagnostic) => diagnostic.message).join('\n'));
24
+ error.diagnostics = project.diagnostics;
25
+ throw error;
26
+ }
27
+ await writeGeneratedIdsToSources(config, project.resources, logs);
28
+ await ensureRuntimeDirs(config);
29
+ const schemaOutFile = path.join(config.stateDir, 'schema.generated.json');
30
+ project.schema = await preserveGeneratedAt(schemaOutFile, makeGeneratedSchema(project.resources, project.diagnostics));
31
+ await writeText(schemaOutFile, `${JSON.stringify(project.schema, null, 2)}\n`);
32
+ logs.push(`Generated ${path.relative(config.cwd, schemaOutFile)}`);
33
+ if (config.types?.enabled !== false) {
34
+ const result = await generateTypes(config, { project });
35
+ for (const outFile of result.outFiles) {
36
+ logs.push(`Generated ${path.relative(config.cwd, String(outFile))}`);
37
+ }
38
+ }
39
+ if (config.schemaOutFile) {
40
+ const result = await generateSchemaManifest(config, { project });
41
+ for (const outFile of result.outFiles) {
42
+ logs.push(`Generated ${path.relative(config.cwd, String(outFile))}`);
43
+ }
44
+ }
45
+ if (config.viewerManifestOutFile) {
46
+ const result = await generateViewerManifest(config, { project });
47
+ for (const outFile of result.outFiles) {
48
+ logs.push(`Generated ${path.relative(config.cwd, String(outFile))}`);
49
+ }
50
+ }
51
+ const sourceMetadataPath = path.join(config.stateDir, 'state', '.sources.json');
52
+ const sourceMetadata = await readJsonState(sourceMetadataPath, { resources: {} });
53
+ sourceMetadata.resources ??= {};
54
+ const runtime = createRuntime(config, project.resources);
55
+ await runtime.hydrate();
56
+ await writeSourceMetadata(config, project.resources, sourceMetadata);
57
+ await writeJsonState(sourceMetadataPath, sourceMetadata);
58
+ logs.push('Synced runtime store');
59
+ return {
60
+ ...project,
61
+ logs,
62
+ };
63
+ }
64
+ async function preserveGeneratedAt(schemaOutFile, schema) {
65
+ let previous;
66
+ try {
67
+ previous = JSON.parse(await readFile(schemaOutFile, 'utf8'));
68
+ }
69
+ catch (error) {
70
+ if (error.code === 'ENOENT' || error instanceof SyntaxError) {
71
+ return schema;
72
+ }
73
+ throw error;
74
+ }
75
+ if (isObject(previous) && typeof previous.generatedAt === 'string' && sameGeneratedSchema(previous, schema)) {
76
+ schema.generatedAt = previous.generatedAt;
77
+ }
78
+ return schema;
79
+ }
80
+ function sameGeneratedSchema(left, right) {
81
+ return JSON.stringify({ ...left, generatedAt: null }) === JSON.stringify({ ...right, generatedAt: null });
82
+ }
83
+ function isObject(value) {
84
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
85
+ }
@@ -0,0 +1,14 @@
1
+ type SyncConfig = {
2
+ cwd: string;
3
+ stateDir: string;
4
+ [key: string]: unknown;
5
+ };
6
+ type SyncResource = {
7
+ name: string;
8
+ [key: string]: unknown;
9
+ };
10
+ type SourceMetadata = {
11
+ resources: Record<string, unknown>;
12
+ };
13
+ export declare function syncStateResource(config: SyncConfig, resource: SyncResource, sourceMetadata: SourceMetadata): Promise<void>;
14
+ export {};
@@ -0,0 +1,4 @@
1
+ import { syncJsonResourceState } from '../storage/json.js';
2
+ export async function syncStateResource(config, resource, sourceMetadata) {
3
+ await syncJsonResourceState(config, resource, sourceMetadata);
4
+ }
@@ -0,0 +1,5 @@
1
+ type RuntimeDirsConfig = {
2
+ stateDir: string;
3
+ };
4
+ export declare function ensureRuntimeDirs(config: RuntimeDirsConfig): Promise<void>;
5
+ export {};
@@ -0,0 +1,9 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ export async function ensureRuntimeDirs(config) {
4
+ await mkdir(config.stateDir, { recursive: true });
5
+ await mkdir(path.join(config.stateDir, 'state'), { recursive: true });
6
+ await mkdir(path.join(config.stateDir, 'wal'), { recursive: true });
7
+ await mkdir(path.join(config.stateDir, 'migrations'), { recursive: true });
8
+ await mkdir(path.join(config.stateDir, 'types'), { recursive: true });
9
+ }
@@ -0,0 +1,15 @@
1
+ type SyncConfig = {
2
+ cwd: string;
3
+ resources?: Record<string, unknown>;
4
+ stores?: Record<string, unknown>;
5
+ };
6
+ type SyncResource = {
7
+ name: string;
8
+ seed?: unknown;
9
+ generatedIds?: boolean;
10
+ dataFormat?: string;
11
+ dataPath?: string | null;
12
+ dataHash?: string;
13
+ };
14
+ export declare function writeGeneratedIdsToSources(config: SyncConfig, resources: SyncResource[], logs: string[]): Promise<void>;
15
+ export {};
@@ -0,0 +1,27 @@
1
+ import { createHash } from 'node:crypto';
2
+ import path from 'node:path';
3
+ import { writeText } from '../../fs-utils.js';
4
+ import { resourceConfigValue } from '../../names.js';
5
+ export async function writeGeneratedIdsToSources(config, resources, logs) {
6
+ for (const resource of resources) {
7
+ if (!usesSourceFileStore(config, resource) || !resource.generatedIds || resource.dataFormat !== 'json' || !resource.dataPath) {
8
+ continue;
9
+ }
10
+ const text = `${JSON.stringify(resource.seed, null, 2)}\n`;
11
+ await writeText(resource.dataPath, text);
12
+ resource.dataHash = createHash('sha256').update(text).digest('hex');
13
+ resource.generatedIds = false;
14
+ logs.push(`Updated ${path.relative(config.cwd, resource.dataPath)} with generated ids`);
15
+ }
16
+ }
17
+ function usesSourceFileStore(config, resource) {
18
+ const resourceConfig = storeRecord(resourceConfigValue(config.resources, resource.name));
19
+ const storeName = String(resourceConfig?.store ?? config.stores?.default ?? 'json');
20
+ const configured = config.stores?.[storeName] ?? storeName;
21
+ const configuredRecord = storeRecord(configured);
22
+ const driver = typeof configured === 'string' ? configured : configuredRecord?.driver ?? storeName;
23
+ return driver === 'sourceFile';
24
+ }
25
+ function storeRecord(value) {
26
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
27
+ }
@@ -0,0 +1,26 @@
1
+ type SyncConfig = {
2
+ seed?: {
3
+ generateFromSchema?: boolean;
4
+ generatedCount?: unknown;
5
+ };
6
+ [key: string]: unknown;
7
+ };
8
+ type FieldDefinition = {
9
+ type?: string;
10
+ default?: unknown;
11
+ values?: unknown[];
12
+ items?: FieldDefinition;
13
+ fields?: Record<string, FieldDefinition>;
14
+ };
15
+ type SyncResource = {
16
+ name?: string;
17
+ kind?: string;
18
+ idField?: string;
19
+ dataPath?: string | null;
20
+ schemaPath?: string | null;
21
+ seed?: unknown;
22
+ fields?: Record<string, FieldDefinition>;
23
+ [key: string]: unknown;
24
+ };
25
+ export declare function seedForRuntimeState(resource: SyncResource, config: SyncConfig): unknown;
26
+ export {};
@@ -0,0 +1,83 @@
1
+ export function seedForRuntimeState(resource, config) {
2
+ if (shouldGenerateSeedFromSchema(resource, config)) {
3
+ return generateSyntheticSeed(resource, syntheticSeedCount(config));
4
+ }
5
+ return resource.seed;
6
+ }
7
+ function shouldGenerateSeedFromSchema(resource, config) {
8
+ if (config.seed?.generateFromSchema !== true) {
9
+ return false;
10
+ }
11
+ if (resource.dataPath || !resource.schemaPath) {
12
+ return false;
13
+ }
14
+ if (resource.kind === 'collection') {
15
+ return Array.isArray(resource.seed) && resource.seed.length === 0;
16
+ }
17
+ return isPlainObject(resource.seed) && Object.keys(resource.seed).length === 0;
18
+ }
19
+ function syntheticSeedCount(config) {
20
+ const value = Number(config.seed?.generatedCount);
21
+ if (!Number.isFinite(value)) {
22
+ return 5;
23
+ }
24
+ return Math.max(0, Math.floor(value));
25
+ }
26
+ function generateSyntheticSeed(resource, count) {
27
+ if (resource.kind === 'collection') {
28
+ return Array.from({ length: count }, (_unused, index) => generateSyntheticRecord(resource, index));
29
+ }
30
+ return generateSyntheticRecord(resource, 0);
31
+ }
32
+ function generateSyntheticRecord(resource, index) {
33
+ const record = {};
34
+ for (const [fieldName, field] of Object.entries(resource.fields ?? {})) {
35
+ if (fieldName === resource.idField) {
36
+ record[fieldName] = String(index + 1);
37
+ continue;
38
+ }
39
+ const value = syntheticValue(field, fieldName, index);
40
+ if (value !== undefined) {
41
+ record[fieldName] = value;
42
+ }
43
+ }
44
+ return record;
45
+ }
46
+ function syntheticValue(field, fieldName, index) {
47
+ if (!field || typeof field !== 'object' || Array.isArray(field)) {
48
+ return null;
49
+ }
50
+ if ('default' in field) {
51
+ return structuredClone(field.default);
52
+ }
53
+ if (field.type === 'enum' && Array.isArray(field.values) && field.values.length > 0) {
54
+ return field.values[index % field.values.length];
55
+ }
56
+ switch (field.type) {
57
+ case 'string':
58
+ return `${fieldName}_${index + 1}`;
59
+ case 'datetime':
60
+ return new Date(Date.UTC(2020, 0, index + 1)).toISOString();
61
+ case 'number':
62
+ return index + 1;
63
+ case 'boolean':
64
+ return index % 2 === 0;
65
+ case 'array':
66
+ return field.items ? [syntheticValue(field.items, `${fieldName}Item`, index)].filter((item) => item !== undefined) : [];
67
+ case 'object': {
68
+ const objectValue = {};
69
+ for (const [childName, childField] of Object.entries(field.fields ?? {})) {
70
+ const childValue = syntheticValue(childField, childName, index);
71
+ if (childValue !== undefined) {
72
+ objectValue[childName] = childValue;
73
+ }
74
+ }
75
+ return objectValue;
76
+ }
77
+ default:
78
+ return null;
79
+ }
80
+ }
81
+ function isPlainObject(value) {
82
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
83
+ }
@@ -0,0 +1,148 @@
1
+ type ViewerConfig = {
2
+ cwd?: string;
3
+ viewerManifestOutFile?: string | null;
4
+ rest?: {
5
+ enabled?: boolean;
6
+ formats?: Record<string, string | ((...args: unknown[]) => unknown) | Record<string, unknown> | null | undefined>;
7
+ };
8
+ graphql?: {
9
+ enabled?: boolean;
10
+ path?: string;
11
+ };
12
+ server?: {
13
+ apiBase?: string;
14
+ viewerLinks?: unknown[];
15
+ };
16
+ [key: string]: unknown;
17
+ };
18
+ type ViewerRoutes = {
19
+ apiBase?: string;
20
+ viewerPath?: string;
21
+ manifestPath?: string;
22
+ manifestJsonPath?: string;
23
+ manifestHtmlPath?: string;
24
+ manifestMarkdownPath?: string;
25
+ schemaPath?: string;
26
+ eventsPath?: string;
27
+ logPath?: string;
28
+ batchPath?: string;
29
+ importPath?: string;
30
+ graphqlPath?: string;
31
+ restBasePath?: string | null;
32
+ [key: string]: unknown;
33
+ };
34
+ type ViewerResource = {
35
+ name: string;
36
+ kind: 'collection' | 'document' | string;
37
+ typeName?: string;
38
+ routePath: string;
39
+ idField?: string;
40
+ relations?: unknown[];
41
+ [key: string]: unknown;
42
+ };
43
+ type GenerateViewerManifestOptions = {
44
+ project?: unknown;
45
+ outFile?: string;
46
+ generatedAt?: string;
47
+ routes?: ViewerRoutes;
48
+ };
49
+ type RenderViewerManifestOptions = {
50
+ generatedAt?: string;
51
+ routes?: ViewerRoutes;
52
+ diagnostics?: unknown[];
53
+ };
54
+ type ViewerLink = {
55
+ label: string;
56
+ href: string;
57
+ source: 'built-in' | 'custom';
58
+ };
59
+ export declare function generateViewerManifest(config: ViewerConfig, options?: GenerateViewerManifestOptions): Promise<{
60
+ manifest: {
61
+ version: number;
62
+ kind: string;
63
+ generatedAt: string;
64
+ api: {
65
+ viewer: string;
66
+ manifest: string;
67
+ manifestJson: string;
68
+ manifestHtml: string;
69
+ manifestMarkdown: string;
70
+ formats: Record<string, {
71
+ extension: string;
72
+ mediaTypes: string[];
73
+ contentType: string;
74
+ manifestPath: string;
75
+ }>;
76
+ viewers: ViewerLink[];
77
+ schema: string;
78
+ events: string;
79
+ log: string;
80
+ batch: string;
81
+ import: string;
82
+ graphql: string;
83
+ restBasePath: string;
84
+ resources: {
85
+ [k: string]: Record<string, unknown>;
86
+ };
87
+ };
88
+ capabilities: {
89
+ collections: boolean;
90
+ documents: boolean;
91
+ rest: boolean;
92
+ writes: boolean;
93
+ restBatch: boolean;
94
+ graphql: boolean;
95
+ csvImport: boolean;
96
+ liveEvents: boolean;
97
+ };
98
+ collections: Record<string, Record<string, unknown>>;
99
+ documents: Record<string, Record<string, unknown>>;
100
+ diagnostics: unknown[];
101
+ };
102
+ content: string;
103
+ outFiles: string[];
104
+ diagnostics: unknown[];
105
+ }>;
106
+ export declare function renderViewerManifest(resources: ViewerResource[], config?: ViewerConfig, options?: RenderViewerManifestOptions): {
107
+ version: number;
108
+ kind: string;
109
+ generatedAt: string;
110
+ api: {
111
+ viewer: string;
112
+ manifest: string;
113
+ manifestJson: string;
114
+ manifestHtml: string;
115
+ manifestMarkdown: string;
116
+ formats: Record<string, {
117
+ extension: string;
118
+ mediaTypes: string[];
119
+ contentType: string;
120
+ manifestPath: string;
121
+ }>;
122
+ viewers: ViewerLink[];
123
+ schema: string;
124
+ events: string;
125
+ log: string;
126
+ batch: string;
127
+ import: string;
128
+ graphql: string;
129
+ restBasePath: string;
130
+ resources: {
131
+ [k: string]: Record<string, unknown>;
132
+ };
133
+ };
134
+ capabilities: {
135
+ collections: boolean;
136
+ documents: boolean;
137
+ rest: boolean;
138
+ writes: boolean;
139
+ restBatch: boolean;
140
+ graphql: boolean;
141
+ csvImport: boolean;
142
+ liveEvents: boolean;
143
+ };
144
+ collections: Record<string, Record<string, unknown>>;
145
+ documents: Record<string, Record<string, unknown>>;
146
+ diagnostics: unknown[];
147
+ };
148
+ export {};