@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.
- package/CHANGELOG.md +167 -0
- package/README.md +431 -0
- package/SPEC.md +1429 -0
- package/db.config.example.mjs +128 -0
- package/dist/cli/args.d.ts +8 -0
- package/dist/cli/args.js +16 -0
- package/dist/cli/commands/create.d.ts +3 -0
- package/dist/cli/commands/create.js +13 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +31 -0
- package/dist/cli/commands/generate.d.ts +6 -0
- package/dist/cli/commands/generate.js +24 -0
- package/dist/cli/commands/operations.d.ts +12 -0
- package/dist/cli/commands/operations.js +61 -0
- package/dist/cli/commands/schema.d.ts +11 -0
- package/dist/cli/commands/schema.js +1086 -0
- package/dist/cli/commands/serve.d.ts +9 -0
- package/dist/cli/commands/serve.js +18 -0
- package/dist/cli/commands/sync.d.ts +3 -0
- package/dist/cli/commands/sync.js +11 -0
- package/dist/cli/commands/types.d.ts +7 -0
- package/dist/cli/commands/types.js +37 -0
- package/dist/cli/commands/viewer.d.ts +6 -0
- package/dist/cli/commands/viewer.js +29 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +108 -0
- package/dist/cli/output.d.ts +25 -0
- package/dist/cli/output.js +149 -0
- package/dist/cli/schema-prompt.d.ts +20 -0
- package/dist/cli/schema-prompt.js +66 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +3 -0
- package/dist/client-cache.d.ts +105 -0
- package/dist/client-cache.js +916 -0
- package/dist/client.d.ts +64 -0
- package/dist/client.js +405 -0
- package/dist/config-public.d.ts +1 -0
- package/dist/config-public.js +1 -0
- package/dist/config.d.ts +54 -0
- package/dist/config.js +2 -0
- package/dist/csv.d.ts +1 -0
- package/dist/csv.js +1 -0
- package/dist/db.d.ts +3 -0
- package/dist/db.js +3 -0
- package/dist/doctor.d.ts +1 -0
- package/dist/doctor.js +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/features/config/defaults.d.ts +98 -0
- package/dist/features/config/defaults.js +95 -0
- package/dist/features/config/load.d.ts +11 -0
- package/dist/features/config/load.js +265 -0
- package/dist/features/config/public.d.ts +17 -0
- package/dist/features/config/public.js +75 -0
- package/dist/features/doctor/duplicate-ids.d.ts +18 -0
- package/dist/features/doctor/duplicate-ids.js +79 -0
- package/dist/features/doctor/field-consistency.d.ts +17 -0
- package/dist/features/doctor/field-consistency.js +48 -0
- package/dist/features/doctor/index.d.ts +39 -0
- package/dist/features/doctor/index.js +177 -0
- package/dist/features/doctor/relations.d.ts +22 -0
- package/dist/features/doctor/relations.js +90 -0
- package/dist/features/doctor/schema-guidance.d.ts +35 -0
- package/dist/features/doctor/schema-guidance.js +184 -0
- package/dist/features/generate/registry.d.ts +14 -0
- package/dist/features/generate/registry.js +37 -0
- package/dist/features/http/registry.d.ts +46 -0
- package/dist/features/http/registry.js +86 -0
- package/dist/features/operations/index.d.ts +49 -0
- package/dist/features/operations/index.js +199 -0
- package/dist/features/operations/maps.d.ts +1 -0
- package/dist/features/operations/maps.js +10 -0
- package/dist/features/operations/readiness.d.ts +30 -0
- package/dist/features/operations/readiness.js +228 -0
- package/dist/features/operations/runtime.d.ts +57 -0
- package/dist/features/operations/runtime.js +288 -0
- package/dist/features/runtime/collection.d.ts +51 -0
- package/dist/features/runtime/collection.js +198 -0
- package/dist/features/runtime/db.d.ts +152 -0
- package/dist/features/runtime/db.js +824 -0
- package/dist/features/runtime/document.d.ts +43 -0
- package/dist/features/runtime/document.js +111 -0
- package/dist/features/runtime/fanout.d.ts +24 -0
- package/dist/features/runtime/fanout.js +77 -0
- package/dist/features/runtime/json-pointer.d.ts +5 -0
- package/dist/features/runtime/json-pointer.js +49 -0
- package/dist/features/runtime/scope-state.d.ts +44 -0
- package/dist/features/runtime/scope-state.js +185 -0
- package/dist/features/runtime/state.d.ts +1 -0
- package/dist/features/runtime/state.js +1 -0
- package/dist/features/schema/api.d.ts +107 -0
- package/dist/features/schema/api.js +460 -0
- package/dist/features/schema/builders.d.ts +86 -0
- package/dist/features/schema/builders.js +110 -0
- package/dist/features/schema/fields.d.ts +38 -0
- package/dist/features/schema/fields.js +296 -0
- package/dist/features/schema/generated.d.ts +29 -0
- package/dist/features/schema/generated.js +32 -0
- package/dist/features/schema/locator.d.ts +16 -0
- package/dist/features/schema/locator.js +135 -0
- package/dist/features/schema/manifest.d.ts +91 -0
- package/dist/features/schema/manifest.js +384 -0
- package/dist/features/schema/metadata.d.ts +30 -0
- package/dist/features/schema/metadata.js +75 -0
- package/dist/features/schema/project.d.ts +46 -0
- package/dist/features/schema/project.js +442 -0
- package/dist/features/schema/relations.d.ts +38 -0
- package/dist/features/schema/relations.js +109 -0
- package/dist/features/schema/resolvers.d.ts +36 -0
- package/dist/features/schema/resolvers.js +111 -0
- package/dist/features/schema/resource.d.ts +75 -0
- package/dist/features/schema/resource.js +253 -0
- package/dist/features/schema/source-definitions.d.ts +21 -0
- package/dist/features/schema/source-definitions.js +29 -0
- package/dist/features/schema/sources.d.ts +83 -0
- package/dist/features/schema/sources.js +689 -0
- package/dist/features/schema/standard-schema.d.ts +57 -0
- package/dist/features/schema/standard-schema.js +232 -0
- package/dist/features/schema/validation.d.ts +69 -0
- package/dist/features/schema/validation.js +434 -0
- package/dist/features/storage/events.d.ts +12 -0
- package/dist/features/storage/events.js +30 -0
- package/dist/features/storage/json.d.ts +112 -0
- package/dist/features/storage/json.js +239 -0
- package/dist/features/storage/memory.d.ts +30 -0
- package/dist/features/storage/memory.js +44 -0
- package/dist/features/storage/resource-json.d.ts +31 -0
- package/dist/features/storage/resource-json.js +76 -0
- package/dist/features/storage/runtime.d.ts +37 -0
- package/dist/features/storage/runtime.js +184 -0
- package/dist/features/storage/source-metadata.d.ts +20 -0
- package/dist/features/storage/source-metadata.js +25 -0
- package/dist/features/storage/source.d.ts +37 -0
- package/dist/features/storage/source.js +60 -0
- package/dist/features/storage/static.d.ts +29 -0
- package/dist/features/storage/static.js +42 -0
- package/dist/features/sync/defaults.d.ts +21 -0
- package/dist/features/sync/defaults.js +21 -0
- package/dist/features/sync/index.d.ts +35 -0
- package/dist/features/sync/index.js +85 -0
- package/dist/features/sync/mirror-state.d.ts +14 -0
- package/dist/features/sync/mirror-state.js +4 -0
- package/dist/features/sync/runtime-dirs.d.ts +5 -0
- package/dist/features/sync/runtime-dirs.js +9 -0
- package/dist/features/sync/source-writes.d.ts +15 -0
- package/dist/features/sync/source-writes.js +27 -0
- package/dist/features/sync/synthetic-seed.d.ts +26 -0
- package/dist/features/sync/synthetic-seed.js +83 -0
- package/dist/features/viewer/manifest.d.ts +148 -0
- package/dist/features/viewer/manifest.js +165 -0
- package/dist/fs-utils.d.ts +1 -0
- package/dist/fs-utils.js +1 -0
- package/dist/generate/hono/app.d.ts +6 -0
- package/dist/generate/hono/app.js +51 -0
- package/dist/generate/hono/graphql.d.ts +7 -0
- package/dist/generate/hono/graphql.js +53 -0
- package/dist/generate/hono/index.d.ts +55 -0
- package/dist/generate/hono/index.js +140 -0
- package/dist/generate/hono/package.d.ts +6 -0
- package/dist/generate/hono/package.js +44 -0
- package/dist/generate/hono/readme.d.ts +13 -0
- package/dist/generate/hono/readme.js +28 -0
- package/dist/generate/hono/repository.d.ts +1 -0
- package/dist/generate/hono/repository.js +27 -0
- package/dist/generate/hono/rest.d.ts +1 -0
- package/dist/generate/hono/rest.js +38 -0
- package/dist/generate/hono/schema.d.ts +13 -0
- package/dist/generate/hono/schema.js +18 -0
- package/dist/generate/hono/sqlite.d.ts +20 -0
- package/dist/generate/hono/sqlite.js +266 -0
- package/dist/generate/hono/validators.d.ts +1 -0
- package/dist/generate/hono/validators.js +141 -0
- package/dist/generate/hono.d.ts +1 -0
- package/dist/generate/hono.js +1 -0
- package/dist/graphql/execute.d.ts +14 -0
- package/dist/graphql/execute.js +719 -0
- package/dist/graphql/http.d.ts +15 -0
- package/dist/graphql/http.js +29 -0
- package/dist/graphql/index.d.ts +3 -0
- package/dist/graphql/index.js +3 -0
- package/dist/graphql/parser.d.ts +54 -0
- package/dist/graphql/parser.js +433 -0
- package/dist/hono.d.ts +77 -0
- package/dist/hono.js +1 -0
- package/dist/index.d.ts +1065 -0
- package/dist/index.js +14 -0
- package/dist/integrations/hono.d.ts +136 -0
- package/dist/integrations/hono.js +508 -0
- package/dist/integrations/kv.d.ts +69 -0
- package/dist/integrations/kv.js +69 -0
- package/dist/integrations/postgres.d.ts +52 -0
- package/dist/integrations/postgres.js +113 -0
- package/dist/integrations/sqlite.d.ts +112 -0
- package/dist/integrations/sqlite.js +489 -0
- package/dist/integrations/vite.d.ts +45 -0
- package/dist/integrations/vite.js +111 -0
- package/dist/json.d.ts +48 -0
- package/dist/json.js +1 -0
- package/dist/jsonc.d.ts +1 -0
- package/dist/jsonc.js +1 -0
- package/dist/kv.d.ts +24 -0
- package/dist/kv.js +1 -0
- package/dist/mock.d.ts +1 -0
- package/dist/mock.js +1 -0
- package/dist/names.d.ts +1 -0
- package/dist/names.js +1 -0
- package/dist/operations.d.ts +3 -0
- package/dist/operations.js +3 -0
- package/dist/postgres.d.ts +24 -0
- package/dist/postgres.js +1 -0
- package/dist/redis.d.ts +14 -0
- package/dist/redis.js +1 -0
- package/dist/rest/formats.d.ts +80 -0
- package/dist/rest/formats.js +318 -0
- package/dist/rest/handler.d.ts +111 -0
- package/dist/rest/handler.js +833 -0
- package/dist/rest/shape.d.ts +33 -0
- package/dist/rest/shape.js +218 -0
- package/dist/schema-builders.d.ts +1 -0
- package/dist/schema-builders.js +1 -0
- package/dist/schema-manifest.d.ts +1 -0
- package/dist/schema-manifest.js +1 -0
- package/dist/schema.d.ts +193 -0
- package/dist/schema.js +6 -0
- package/dist/server.d.ts +116 -0
- package/dist/server.js +601 -0
- package/dist/shared/csv.d.ts +8 -0
- package/dist/shared/csv.js +149 -0
- package/dist/shared/errors.d.ts +40 -0
- package/dist/shared/errors.js +55 -0
- package/dist/shared/fs-utils.d.ts +4 -0
- package/dist/shared/fs-utils.js +30 -0
- package/dist/shared/jsonc.d.ts +2 -0
- package/dist/shared/jsonc.js +99 -0
- package/dist/shared/mock.d.ts +40 -0
- package/dist/shared/mock.js +83 -0
- package/dist/shared/names.d.ts +28 -0
- package/dist/shared/names.js +127 -0
- package/dist/shared/operations.d.ts +32 -0
- package/dist/shared/operations.js +302 -0
- package/dist/sqlite.d.ts +24 -0
- package/dist/sqlite.js +1 -0
- package/dist/state.d.ts +1 -0
- package/dist/state.js +1 -0
- package/dist/sync.d.ts +1 -0
- package/dist/sync.js +1 -0
- package/dist/tracing.d.ts +95 -0
- package/dist/tracing.js +260 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.js +285 -0
- package/dist/viewer-manifest.d.ts +1 -0
- package/dist/viewer-manifest.js +1 -0
- package/dist/vite.d.ts +59 -0
- package/dist/vite.js +1 -0
- package/dist/web/json-viewer.d.ts +5 -0
- package/dist/web/json-viewer.js +176 -0
- package/dist/web/viewer.d.ts +12 -0
- package/dist/web/viewer.js +1015 -0
- package/docs/README.md +42 -0
- package/docs/architecture.md +112 -0
- package/docs/ci-and-release.md +177 -0
- package/docs/cms-storage-patterns.md +108 -0
- package/docs/concepts.md +141 -0
- package/docs/configuration.md +552 -0
- package/docs/fixtures-and-schemas.md +527 -0
- package/docs/fork-branch-workflows.md +108 -0
- package/docs/generated-files.md +174 -0
- package/docs/getting-started.md +165 -0
- package/docs/integrations.md +206 -0
- package/docs/json-production.md +120 -0
- package/docs/package-api.md +418 -0
- package/docs/prototype-to-production.md +378 -0
- package/docs/server-and-viewer.md +466 -0
- package/docs/store-graduation.md +120 -0
- package/docs/typescript-schema-sources.md +79 -0
- package/examples/advanced/README.md +55 -0
- package/examples/advanced/db/projects.schema.jsonc +44 -0
- package/examples/advanced/db/settings.jsonc +9 -0
- package/examples/advanced/db/users.json +23 -0
- package/examples/advanced/db/users.schema.mjs +31 -0
- package/examples/advanced/db.config.mjs +18 -0
- package/examples/advanced/example.json +5 -0
- package/examples/advanced/src/generated/db.types.d.ts +64 -0
- package/examples/basic/README.md +95 -0
- package/examples/basic/db/operations/get-user.jsonc +8 -0
- package/examples/basic/db/settings.json +7 -0
- package/examples/basic/db/users.schema.jsonc +36 -0
- package/examples/basic/db.config.mjs +68 -0
- package/examples/basic/example.json +5 -0
- package/examples/basic/src/generated/db.types.d.ts +39 -0
- package/examples/cms-json-publish/README.md +21 -0
- package/examples/cms-json-publish/db/navigation.json +7 -0
- package/examples/cms-json-publish/db/pages.json +18 -0
- package/examples/cms-json-publish/example.json +5 -0
- package/examples/cms-json-publish/src/cms.mjs +104 -0
- package/examples/computed-fields/README.md +93 -0
- package/examples/computed-fields/db/orders.schema.mjs +62 -0
- package/examples/computed-fields/db/posts.schema.mjs +59 -0
- package/examples/computed-fields/db/products.schema.mjs +39 -0
- package/examples/computed-fields/db/users.schema.mjs +43 -0
- package/examples/computed-fields/db.config.mjs +15 -0
- package/examples/computed-fields/example.json +5 -0
- package/examples/computed-fields/src/generated/db.types.d.ts +81 -0
- package/examples/content-collections/README.md +91 -0
- package/examples/content-collections/db/authors.json +12 -0
- package/examples/content-collections/db/authors.schema.mjs +20 -0
- package/examples/content-collections/db/blog/draft-roadmap.mdx +12 -0
- package/examples/content-collections/db/blog/index.schema.mjs +61 -0
- package/examples/content-collections/db/blog/launch-notes.mdx +15 -0
- package/examples/content-collections/db/docs/index.schema.mjs +32 -0
- package/examples/content-collections/db/docs/intro.mdx +11 -0
- package/examples/content-collections/db/docs/schema-workflow.mdx +10 -0
- package/examples/content-collections/db/site.schema.jsonc +21 -0
- package/examples/content-collections/db.config.mjs +26 -0
- package/examples/content-collections/example.json +5 -0
- package/examples/content-collections/src/content-preview.mjs +66 -0
- package/examples/content-collections/src/generated/db.types.d.ts +81 -0
- package/examples/csv/README.md +52 -0
- package/examples/csv/db/customers.csv +4 -0
- package/examples/csv/db.config.mjs +13 -0
- package/examples/csv/example.json +5 -0
- package/examples/data-first/README.md +54 -0
- package/examples/data-first/db/posts.json +16 -0
- package/examples/data-first/db/settings.json +8 -0
- package/examples/data-first/db/users.json +14 -0
- package/examples/data-first/db.config.mjs +13 -0
- package/examples/data-first/example.json +5 -0
- package/examples/diagnostics/README.md +55 -0
- package/examples/diagnostics/db/projects.schema.jsonc +27 -0
- package/examples/diagnostics/db/users.json +9 -0
- package/examples/diagnostics/db/users.schema.jsonc +23 -0
- package/examples/diagnostics/db.config.mjs +16 -0
- package/examples/diagnostics/example.json +5 -0
- package/examples/free-plan-upgrade/README.md +22 -0
- package/examples/free-plan-upgrade/db/appSettings.json +4 -0
- package/examples/free-plan-upgrade/db/projects.json +7 -0
- package/examples/free-plan-upgrade/example.json +5 -0
- package/examples/free-plan-upgrade/src/upgrade-tenant-to-paid.mjs +105 -0
- package/examples/hono-auth/README.md +74 -0
- package/examples/hono-auth/db/pages.schema.jsonc +44 -0
- package/examples/hono-auth/db/users.schema.jsonc +42 -0
- package/examples/hono-auth/db.config.mjs +17 -0
- package/examples/hono-auth/example.json +5 -0
- package/examples/hono-auth/package.json +14 -0
- package/examples/hono-auth/src/app.mjs +79 -0
- package/examples/hono-auth/src/server.mjs +13 -0
- package/examples/production-json/README.md +102 -0
- package/examples/production-json/db/appSettings.schema.jsonc +41 -0
- package/examples/production-json/db/featureFlags.schema.jsonc +84 -0
- package/examples/production-json/db/operations/get-control-plane.jsonc +6 -0
- package/examples/production-json/db/operations/get-feature-flag.jsonc +9 -0
- package/examples/production-json/db/operations/list-feature-flags.jsonc +8 -0
- package/examples/production-json/db/operations/read-public-settings.jsonc +8 -0
- package/examples/production-json/db.config.mjs +33 -0
- package/examples/production-json/example.json +5 -0
- package/examples/production-json/src/client-demo.mjs +28 -0
- package/examples/production-json/src/generated/db.types.d.ts +60 -0
- package/examples/relations/README.md +56 -0
- package/examples/relations/db/posts.schema.jsonc +46 -0
- package/examples/relations/db/users.schema.jsonc +34 -0
- package/examples/relations/db.config.mjs +13 -0
- package/examples/relations/example.json +5 -0
- package/examples/rest-client/README.md +54 -0
- package/examples/rest-client/db/settings.json +5 -0
- package/examples/rest-client/db/users.schema.jsonc +42 -0
- package/examples/rest-client/db.config.mjs +13 -0
- package/examples/rest-client/example.json +5 -0
- package/examples/rest-client/src/client-demo.mjs +24 -0
- package/examples/schema-first/README.md +55 -0
- package/examples/schema-first/db/auditEvents.schema.jsonc +24 -0
- package/examples/schema-first/db/settings.schema.jsonc +29 -0
- package/examples/schema-first/db/users.schema.jsonc +36 -0
- package/examples/schema-first/db.config.mjs +15 -0
- package/examples/schema-first/example.json +5 -0
- package/examples/schema-first/src/generated/db.types.d.ts +47 -0
- package/examples/schema-manifest/README.md +50 -0
- package/examples/schema-manifest/db/projects.schema.jsonc +48 -0
- package/examples/schema-manifest/db/users.schema.jsonc +35 -0
- package/examples/schema-manifest/db.config.mjs +41 -0
- package/examples/schema-manifest/example.json +5 -0
- package/examples/schema-manifest/src/generated/db.schema.json +130 -0
- package/examples/schema-manifest/src/generated/db.types.d.ts +50 -0
- package/examples/schema-ui/README.md +103 -0
- package/examples/schema-ui/db/pages.schema.jsonc +53 -0
- package/examples/schema-ui/db/users.schema.jsonc +30 -0
- package/examples/schema-ui/db.config.mjs +55 -0
- package/examples/schema-ui/example.json +5 -0
- package/examples/schema-ui/src/cms-ssr.mjs +276 -0
- package/examples/schema-ui/src/generated/db.schema.json +133 -0
- package/examples/schema-ui/src/generated/db.types.d.ts +46 -0
- package/examples/schema-ui/src/render-admin.mjs +175 -0
- package/examples/schema-ui/src/schema-ui-ssr-handler.mjs +149 -0
- package/examples/schema-ui/src/start-schema-ui-server.mjs +140 -0
- package/examples/standard-schema/README.md +55 -0
- package/examples/standard-schema/db/settings.schema.mjs +22 -0
- package/examples/standard-schema/db/users.schema.mjs +72 -0
- package/examples/standard-schema/example.json +5 -0
- package/package.json +108 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { defineConfig } from '@async/db/config';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
// Fixture source folder. Defaults to './db'.
|
|
6
|
+
dbDir: './db',
|
|
7
|
+
|
|
8
|
+
// Generated output locations. Most committed outputs are opt-in.
|
|
9
|
+
outputs: {
|
|
10
|
+
stateDir: './.db',
|
|
11
|
+
types: './.db/types/index.ts',
|
|
12
|
+
committedTypes: null,
|
|
13
|
+
schemaManifest: null,
|
|
14
|
+
viewerManifest: null,
|
|
15
|
+
operationRegistry: null,
|
|
16
|
+
operationRefs: null,
|
|
17
|
+
honoStarterDir: './db-api',
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
// Optional visitor hook for changing or omitting generated manifest fields.
|
|
21
|
+
schemaManifest: {
|
|
22
|
+
customizeField({ defaultManifest }) {
|
|
23
|
+
return defaultManifest;
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
// Optional custom source readers. Built-in readers handle JSON, JSONC, CSV,
|
|
28
|
+
// .schema.json, .schema.jsonc, and .schema.mjs. Custom readers run first.
|
|
29
|
+
sources: {
|
|
30
|
+
writePolicy: 'preserve',
|
|
31
|
+
readers: [],
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
// Runtime stores. The default json store writes app edits to
|
|
35
|
+
// .db/state/<resource>.json while keeping source fixtures unchanged.
|
|
36
|
+
// Bind a resource to sourceFile only when supported writebacks should update
|
|
37
|
+
// a plain .json source fixture. Optional database stores such as
|
|
38
|
+
// @async/db/postgres, @async/db/kv, and @async/db/redis accept injected
|
|
39
|
+
// clients so the core package stays dependency-light.
|
|
40
|
+
stores: {
|
|
41
|
+
default: 'json',
|
|
42
|
+
// postgres: postgresStore({ client: pgPool }),
|
|
43
|
+
// redis: redisStore({ client: redisClient, prefix: 'my-app:' }),
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
resources: {
|
|
47
|
+
// users: { store: 'sourceFile' },
|
|
48
|
+
// activityEvents: {
|
|
49
|
+
// store: 'json',
|
|
50
|
+
// indexes: [
|
|
51
|
+
// { fields: ['observedAt'] },
|
|
52
|
+
// { fields: ['domain', 'observedAt'] },
|
|
53
|
+
// ],
|
|
54
|
+
// },
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
// Generated TypeScript type behavior. Paths live under `outputs`.
|
|
58
|
+
types: {
|
|
59
|
+
enabled: true,
|
|
60
|
+
useReadonly: false,
|
|
61
|
+
emitComments: true,
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
// Default local development behavior is permissive: unknown schema-backed
|
|
65
|
+
// fields warn. Use 'error' when you want schema drift to fail sync/writes.
|
|
66
|
+
schema: {
|
|
67
|
+
unknownFields: 'warn',
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
// Optional schema-only mock records. Leave off when real fixture data exists.
|
|
71
|
+
seed: {
|
|
72
|
+
generateFromSchema: false,
|
|
73
|
+
generatedCount: 5,
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
// Local server settings.
|
|
77
|
+
server: {
|
|
78
|
+
// Dev-tool route base for the viewer, schema, batch, import, events, and log.
|
|
79
|
+
// Defaults to '/__db'.
|
|
80
|
+
apiBase: '/__db',
|
|
81
|
+
// App-facing REST data route alias. Defaults to '/db'; set false to only
|
|
82
|
+
// use scoped REST under /__db/rest and standalone root REST routes.
|
|
83
|
+
dataPath: '/db',
|
|
84
|
+
host: '127.0.0.1',
|
|
85
|
+
port: 7331,
|
|
86
|
+
maxBodyBytes: 1048576,
|
|
87
|
+
// Opt-in request tracing. When enabled, traces are written to /__db/log,
|
|
88
|
+
// concise console lines are printed, and responses get a request id header.
|
|
89
|
+
// Trace metadata includes query keys only, never request bodies, response
|
|
90
|
+
// bodies, cookie headers, authorization headers, or query values.
|
|
91
|
+
trace: {
|
|
92
|
+
enabled: false,
|
|
93
|
+
slowMs: 100,
|
|
94
|
+
console: true,
|
|
95
|
+
events: true,
|
|
96
|
+
header: 'x-async-db-request-id',
|
|
97
|
+
},
|
|
98
|
+
// Optional custom data viewer links shown in discovery and manifest output.
|
|
99
|
+
viewerLinks: [
|
|
100
|
+
// { label: 'My Viewer', href: 'http://127.0.0.1:5173/db' },
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
// REST and manifest response formats. Built-ins are json, html, and md.
|
|
105
|
+
// Object entries can register media types for Accept negotiation and can
|
|
106
|
+
// render both resource routes and /__db/manifest.<extension>.
|
|
107
|
+
rest: {
|
|
108
|
+
formats: {
|
|
109
|
+
default: 'json',
|
|
110
|
+
// yaml: {
|
|
111
|
+
// mediaTypes: ['application/yaml', 'text/yaml'],
|
|
112
|
+
// contentType: 'application/yaml; charset=utf-8',
|
|
113
|
+
// render({ data }) {
|
|
114
|
+
// return stringifyYaml(data);
|
|
115
|
+
// },
|
|
116
|
+
// },
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
// Local latency is on by default so loading states are visible. Use 0 to
|
|
121
|
+
// disable delay, 50 for a fixed 50ms delay, or [50, 300] for a range.
|
|
122
|
+
// Random errors are off by default.
|
|
123
|
+
mock: {
|
|
124
|
+
delay: [30, 100],
|
|
125
|
+
errors: null,
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type GlobalOptions = {
|
|
2
|
+
cwd: string;
|
|
3
|
+
configPath?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function parseGlobalOptions(args: string[]): GlobalOptions;
|
|
6
|
+
export declare function valueAfter(args: string[], flag: string): string | undefined;
|
|
7
|
+
export declare function isHelpRequested(args: string[]): boolean;
|
|
8
|
+
export {};
|
package/dist/cli/args.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function parseGlobalOptions(args) {
|
|
2
|
+
return {
|
|
3
|
+
cwd: valueAfter(args, '--cwd') ?? process.cwd(),
|
|
4
|
+
configPath: valueAfter(args, '--config'),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function valueAfter(args, flag) {
|
|
8
|
+
const index = args.indexOf(flag);
|
|
9
|
+
if (index === -1) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return args[index + 1];
|
|
13
|
+
}
|
|
14
|
+
export function isHelpRequested(args) {
|
|
15
|
+
return args.includes('--help') || args.includes('-h');
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { openDb } from '../../db.js';
|
|
2
|
+
export async function runCreate(config, args) {
|
|
3
|
+
const [collectionName, json] = args;
|
|
4
|
+
if (!collectionName || !json) {
|
|
5
|
+
throw new Error('Usage: async-db create <collection> <json>');
|
|
6
|
+
}
|
|
7
|
+
const db = await openDb({
|
|
8
|
+
...config,
|
|
9
|
+
syncOnOpen: true,
|
|
10
|
+
});
|
|
11
|
+
const record = await db.collection(collectionName).create(JSON.parse(json));
|
|
12
|
+
console.log(JSON.stringify(record, null, 2));
|
|
13
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { runDbDoctor } from '../../doctor.js';
|
|
2
|
+
import { isHelpRequested } from '../args.js';
|
|
3
|
+
import { printDoctorHelp, printDoctorResult } from '../output.js';
|
|
4
|
+
export async function runDoctor(config, args) {
|
|
5
|
+
if (isHelpRequested(args)) {
|
|
6
|
+
printDoctorHelp();
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const result = await runDbDoctor(doctorConfig(config, args));
|
|
10
|
+
if (args.includes('--json')) {
|
|
11
|
+
console.log(JSON.stringify(result, null, 2));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
printDoctorResult(result);
|
|
15
|
+
}
|
|
16
|
+
if (result.summary.error > 0 || (args.includes('--strict') && result.summary.warn > 0)) {
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function doctorConfig(config, args) {
|
|
21
|
+
if (!args.includes('--production')) {
|
|
22
|
+
return config;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
...config,
|
|
26
|
+
doctor: {
|
|
27
|
+
...(config.doctor && typeof config.doctor === 'object' ? config.doctor : {}),
|
|
28
|
+
production: true,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { defaultGeneratorRegistry } from '../../features/generate/registry.js';
|
|
3
|
+
import { isHelpRequested } from '../args.js';
|
|
4
|
+
import { printGenerateHelp } from '../output.js';
|
|
5
|
+
export async function runGenerate(config, args) {
|
|
6
|
+
const target = args[0];
|
|
7
|
+
const registry = defaultGeneratorRegistry();
|
|
8
|
+
if (isHelpRequested(args) && (!target || target.startsWith('-'))) {
|
|
9
|
+
printGenerateHelp(registry.usage());
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const generator = registry.get(target);
|
|
13
|
+
if (!generator) {
|
|
14
|
+
throw new Error(`Usage: ${registry.usage()}`);
|
|
15
|
+
}
|
|
16
|
+
if (isHelpRequested(args.slice(1))) {
|
|
17
|
+
printGenerateHelp(generator.usage);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const result = await generator.run(config, args.slice(1));
|
|
21
|
+
for (const filePath of result.files) {
|
|
22
|
+
console.log(`Generated ${path.relative(config.cwd, filePath)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type CliConfig = {
|
|
2
|
+
cwd?: string;
|
|
3
|
+
outputs?: {
|
|
4
|
+
operationRefs?: string | null;
|
|
5
|
+
};
|
|
6
|
+
operations?: {
|
|
7
|
+
refsOutFile?: string | null;
|
|
8
|
+
};
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
};
|
|
11
|
+
export declare function runOperations(config: CliConfig, args: string[]): Promise<void>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { buildOperationManifest, operationClientContract } from '../../operations.js';
|
|
4
|
+
import { resolveFrom, writeText } from '../../fs-utils.js';
|
|
5
|
+
import { valueAfter } from '../args.js';
|
|
6
|
+
export async function runOperations(config, args) {
|
|
7
|
+
if (args[0] === 'contract') {
|
|
8
|
+
await runOperationContract(config, args);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (args[0] !== 'build') {
|
|
12
|
+
throw new Error('Unknown operations command. Use async-db operations build or async-db operations contract.');
|
|
13
|
+
}
|
|
14
|
+
const result = await buildOperationManifest(config, {
|
|
15
|
+
outFile: valueAfter(args, '--out'),
|
|
16
|
+
refsOutFile: valueAfter(args, '--refs-out'),
|
|
17
|
+
});
|
|
18
|
+
if (result.outFiles.length === 0 && result.refsOutFiles.length === 0) {
|
|
19
|
+
console.log(JSON.stringify(result.manifest, null, 2));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (const filePath of [...result.outFiles, ...result.refsOutFiles]) {
|
|
23
|
+
console.log(`Generated ${path.relative(config.cwd, filePath)}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function runOperationContract(config, args) {
|
|
27
|
+
const result = await buildOperationManifest(config, {
|
|
28
|
+
write: false,
|
|
29
|
+
});
|
|
30
|
+
const contract = operationClientContract(result.refs);
|
|
31
|
+
const content = contractContent(contract);
|
|
32
|
+
const check = args.includes('--check');
|
|
33
|
+
const target = contractTarget(config, args, { check });
|
|
34
|
+
if (check) {
|
|
35
|
+
if (!target) {
|
|
36
|
+
throw new Error('Operation contract check needs --out <file> or outputs.operationRefs in db.config.mjs.');
|
|
37
|
+
}
|
|
38
|
+
const expected = operationClientContract(JSON.parse(await readFile(target, 'utf8')));
|
|
39
|
+
const expectedContent = contractContent(expected);
|
|
40
|
+
if (expectedContent !== content) {
|
|
41
|
+
const relative = path.relative(config.cwd, target);
|
|
42
|
+
throw new Error(`Operation client contract changed for ${relative}. Review the exposed operation names and refs, then regenerate or approve the committed contract.`);
|
|
43
|
+
}
|
|
44
|
+
console.log(`Operation client contract matches ${path.relative(config.cwd, target)}`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (target) {
|
|
48
|
+
await writeText(target, content);
|
|
49
|
+
console.log(`Generated ${path.relative(config.cwd, target)}`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
console.log(content.trimEnd());
|
|
53
|
+
}
|
|
54
|
+
function contractTarget(config, args, options = {}) {
|
|
55
|
+
const explicitTarget = valueAfter(args, '--out');
|
|
56
|
+
const target = explicitTarget ?? (options.check ? config.outputs?.operationRefs ?? config.operations?.refsOutFile : null);
|
|
57
|
+
return target ? resolveFrom(config.cwd, target) : null;
|
|
58
|
+
}
|
|
59
|
+
function contractContent(contract) {
|
|
60
|
+
return `${JSON.stringify(contract, null, 2)}\n`;
|
|
61
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type CliConfig = {
|
|
2
|
+
cwd?: string;
|
|
3
|
+
sourceDir?: string;
|
|
4
|
+
schema?: {
|
|
5
|
+
standardSchema?: boolean;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
};
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
};
|
|
10
|
+
export declare function runSchema(config: CliConfig, args: string[]): Promise<void>;
|
|
11
|
+
export {};
|