@gettersethya/mira 0.1.0-alpha.10
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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/src/app/app.d.ts +100 -0
- package/dist/src/app/app.d.ts.map +1 -0
- package/dist/src/app/app.js +176 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/builder.d.ts +106 -0
- package/dist/src/app/builder.d.ts.map +1 -0
- package/dist/src/app/builder.js +122 -0
- package/dist/src/app/builder.js.map +1 -0
- package/dist/src/app/index.d.ts +33 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/index.js +30 -0
- package/dist/src/app/index.js.map +1 -0
- package/dist/src/app/plugin.d.ts +60 -0
- package/dist/src/app/plugin.d.ts.map +1 -0
- package/dist/src/app/plugin.js +20 -0
- package/dist/src/app/plugin.js.map +1 -0
- package/dist/src/app/types.d.ts +55 -0
- package/dist/src/app/types.d.ts.map +1 -0
- package/dist/src/app/types.js +2 -0
- package/dist/src/app/types.js.map +1 -0
- package/dist/src/cache/cached-collection.d.ts +30 -0
- package/dist/src/cache/cached-collection.d.ts.map +1 -0
- package/dist/src/cache/cached-collection.js +107 -0
- package/dist/src/cache/cached-collection.js.map +1 -0
- package/dist/src/cache/collection-cache.d.ts +17 -0
- package/dist/src/cache/collection-cache.d.ts.map +1 -0
- package/dist/src/cache/collection-cache.js +37 -0
- package/dist/src/cache/collection-cache.js.map +1 -0
- package/dist/src/cache/index.d.ts +4 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +3 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/types.d.ts +12 -0
- package/dist/src/cache/types.d.ts.map +1 -0
- package/dist/src/cache/types.js +2 -0
- package/dist/src/cache/types.js.map +1 -0
- package/dist/src/collection-service/collection-service.d.ts +62 -0
- package/dist/src/collection-service/collection-service.d.ts.map +1 -0
- package/dist/src/collection-service/collection-service.js +289 -0
- package/dist/src/collection-service/collection-service.js.map +1 -0
- package/dist/src/collection-service/context.d.ts +19 -0
- package/dist/src/collection-service/context.d.ts.map +1 -0
- package/dist/src/collection-service/context.js +2 -0
- package/dist/src/collection-service/context.js.map +1 -0
- package/dist/src/collection-service/decode.d.ts +6 -0
- package/dist/src/collection-service/decode.d.ts.map +1 -0
- package/dist/src/collection-service/decode.js +26 -0
- package/dist/src/collection-service/decode.js.map +1 -0
- package/dist/src/collection-service/errors.d.ts +67 -0
- package/dist/src/collection-service/errors.d.ts.map +1 -0
- package/dist/src/collection-service/errors.js +43 -0
- package/dist/src/collection-service/errors.js.map +1 -0
- package/dist/src/collection-service/index.d.ts +5 -0
- package/dist/src/collection-service/index.d.ts.map +1 -0
- package/dist/src/collection-service/index.js +3 -0
- package/dist/src/collection-service/index.js.map +1 -0
- package/dist/src/collection-service/input-schema.d.ts +10 -0
- package/dist/src/collection-service/input-schema.d.ts.map +1 -0
- package/dist/src/collection-service/input-schema.js +123 -0
- package/dist/src/collection-service/input-schema.js.map +1 -0
- package/dist/src/collection-service/where.d.ts +35 -0
- package/dist/src/collection-service/where.d.ts.map +1 -0
- package/dist/src/collection-service/where.js +91 -0
- package/dist/src/collection-service/where.js.map +1 -0
- package/dist/src/config/config.d.ts +44 -0
- package/dist/src/config/config.d.ts.map +1 -0
- package/dist/src/config/config.js +89 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/index.d.ts +3 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +2 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/types.d.ts +29 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +2 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/crypto/crypto.d.ts +11 -0
- package/dist/src/crypto/crypto.d.ts.map +1 -0
- package/dist/src/crypto/crypto.js +4 -0
- package/dist/src/crypto/crypto.js.map +1 -0
- package/dist/src/crypto/index.d.ts +3 -0
- package/dist/src/crypto/index.d.ts.map +1 -0
- package/dist/src/crypto/index.js +3 -0
- package/dist/src/crypto/index.js.map +1 -0
- package/dist/src/crypto/node.d.ts +4 -0
- package/dist/src/crypto/node.d.ts.map +1 -0
- package/dist/src/crypto/node.js +9 -0
- package/dist/src/crypto/node.js.map +1 -0
- package/dist/src/databases/index.d.ts +2 -0
- package/dist/src/databases/index.d.ts.map +1 -0
- package/dist/src/databases/index.js +2 -0
- package/dist/src/databases/index.js.map +1 -0
- package/dist/src/databases/sqlite.d.ts +24 -0
- package/dist/src/databases/sqlite.d.ts.map +1 -0
- package/dist/src/databases/sqlite.js +27 -0
- package/dist/src/databases/sqlite.js.map +1 -0
- package/dist/src/hooks/hook-collection.d.ts +5 -0
- package/dist/src/hooks/hook-collection.d.ts.map +1 -0
- package/dist/src/hooks/hook-collection.js +77 -0
- package/dist/src/hooks/hook-collection.js.map +1 -0
- package/dist/src/hooks/hook-service.d.ts +33 -0
- package/dist/src/hooks/hook-service.d.ts.map +1 -0
- package/dist/src/hooks/hook-service.js +118 -0
- package/dist/src/hooks/hook-service.js.map +1 -0
- package/dist/src/hooks/index.d.ts +4 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +3 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/types.d.ts +52 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +2 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/http/auth-node.d.ts +4 -0
- package/dist/src/http/auth-node.d.ts.map +1 -0
- package/dist/src/http/auth-node.js +34 -0
- package/dist/src/http/auth-node.js.map +1 -0
- package/dist/src/http/auth.d.ts +40 -0
- package/dist/src/http/auth.d.ts.map +1 -0
- package/dist/src/http/auth.js +76 -0
- package/dist/src/http/auth.js.map +1 -0
- package/dist/src/http/errors.d.ts +31 -0
- package/dist/src/http/errors.d.ts.map +1 -0
- package/dist/src/http/errors.js +36 -0
- package/dist/src/http/errors.js.map +1 -0
- package/dist/src/http/file-serve.d.ts +10 -0
- package/dist/src/http/file-serve.d.ts.map +1 -0
- package/dist/src/http/file-serve.js +159 -0
- package/dist/src/http/file-serve.js.map +1 -0
- package/dist/src/http/file-token.d.ts +7 -0
- package/dist/src/http/file-token.d.ts.map +1 -0
- package/dist/src/http/file-token.js +57 -0
- package/dist/src/http/file-token.js.map +1 -0
- package/dist/src/http/files.d.ts +11 -0
- package/dist/src/http/files.d.ts.map +1 -0
- package/dist/src/http/files.js +85 -0
- package/dist/src/http/files.js.map +1 -0
- package/dist/src/http/index.d.ts +11 -0
- package/dist/src/http/index.d.ts.map +1 -0
- package/dist/src/http/index.js +9 -0
- package/dist/src/http/index.js.map +1 -0
- package/dist/src/http/ip-middleware.d.ts +4 -0
- package/dist/src/http/ip-middleware.d.ts.map +1 -0
- package/dist/src/http/ip-middleware.js +24 -0
- package/dist/src/http/ip-middleware.js.map +1 -0
- package/dist/src/http/params.d.ts +15 -0
- package/dist/src/http/params.d.ts.map +1 -0
- package/dist/src/http/params.js +48 -0
- package/dist/src/http/params.js.map +1 -0
- package/dist/src/http/router.d.ts +11 -0
- package/dist/src/http/router.d.ts.map +1 -0
- package/dist/src/http/router.js +300 -0
- package/dist/src/http/router.js.map +1 -0
- package/dist/src/http/schema.d.ts +5 -0
- package/dist/src/http/schema.d.ts.map +1 -0
- package/dist/src/http/schema.js +17 -0
- package/dist/src/http/schema.js.map +1 -0
- package/dist/src/http/server-factory-node.d.ts +4 -0
- package/dist/src/http/server-factory-node.d.ts.map +1 -0
- package/dist/src/http/server-factory-node.js +8 -0
- package/dist/src/http/server-factory-node.js.map +1 -0
- package/dist/src/http/server-factory.d.ts +11 -0
- package/dist/src/http/server-factory.d.ts.map +1 -0
- package/dist/src/http/server-factory.js +4 -0
- package/dist/src/http/server-factory.js.map +1 -0
- package/dist/src/http/telemetry-routes.d.ts +5 -0
- package/dist/src/http/telemetry-routes.d.ts.map +1 -0
- package/dist/src/http/telemetry-routes.js +156 -0
- package/dist/src/http/telemetry-routes.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +22 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/migrator/dialect-sqlite.d.ts +9 -0
- package/dist/src/migrator/dialect-sqlite.d.ts.map +1 -0
- package/dist/src/migrator/dialect-sqlite.js +102 -0
- package/dist/src/migrator/dialect-sqlite.js.map +1 -0
- package/dist/src/migrator/dialect.d.ts +24 -0
- package/dist/src/migrator/dialect.d.ts.map +1 -0
- package/dist/src/migrator/dialect.js +5 -0
- package/dist/src/migrator/dialect.js.map +1 -0
- package/dist/src/migrator/index.d.ts +8 -0
- package/dist/src/migrator/index.d.ts.map +1 -0
- package/dist/src/migrator/index.js +6 -0
- package/dist/src/migrator/index.js.map +1 -0
- package/dist/src/migrator/migrator.d.ts +36 -0
- package/dist/src/migrator/migrator.d.ts.map +1 -0
- package/dist/src/migrator/migrator.js +200 -0
- package/dist/src/migrator/migrator.js.map +1 -0
- package/dist/src/migrator/schema-diff.d.ts +25 -0
- package/dist/src/migrator/schema-diff.d.ts.map +1 -0
- package/dist/src/migrator/schema-diff.js +157 -0
- package/dist/src/migrator/schema-diff.js.map +1 -0
- package/dist/src/migrator/types.d.ts +91 -0
- package/dist/src/migrator/types.d.ts.map +1 -0
- package/dist/src/migrator/types.js +13 -0
- package/dist/src/migrator/types.js.map +1 -0
- package/dist/src/platforms/node.d.ts +40 -0
- package/dist/src/platforms/node.d.ts.map +1 -0
- package/dist/src/platforms/node.js +45 -0
- package/dist/src/platforms/node.js.map +1 -0
- package/dist/src/repository/id.d.ts +5 -0
- package/dist/src/repository/id.d.ts.map +1 -0
- package/dist/src/repository/id.js +9 -0
- package/dist/src/repository/id.js.map +1 -0
- package/dist/src/repository/index.d.ts +3 -0
- package/dist/src/repository/index.d.ts.map +1 -0
- package/dist/src/repository/index.js +2 -0
- package/dist/src/repository/index.js.map +1 -0
- package/dist/src/repository/repository.d.ts +53 -0
- package/dist/src/repository/repository.d.ts.map +1 -0
- package/dist/src/repository/repository.js +150 -0
- package/dist/src/repository/repository.js.map +1 -0
- package/dist/src/repository/types.d.ts +42 -0
- package/dist/src/repository/types.d.ts.map +1 -0
- package/dist/src/repository/types.js +2 -0
- package/dist/src/repository/types.js.map +1 -0
- package/dist/src/rule/compiler.d.ts +52 -0
- package/dist/src/rule/compiler.d.ts.map +1 -0
- package/dist/src/rule/compiler.js +115 -0
- package/dist/src/rule/compiler.js.map +1 -0
- package/dist/src/rule/enforcer.d.ts +47 -0
- package/dist/src/rule/enforcer.d.ts.map +1 -0
- package/dist/src/rule/enforcer.js +60 -0
- package/dist/src/rule/enforcer.js.map +1 -0
- package/dist/src/rule/index.d.ts +3 -0
- package/dist/src/rule/index.d.ts.map +1 -0
- package/dist/src/rule/index.js +3 -0
- package/dist/src/rule/index.js.map +1 -0
- package/dist/src/storage/index.d.ts +3 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +3 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/local-preset.d.ts +21 -0
- package/dist/src/storage/local-preset.d.ts.map +1 -0
- package/dist/src/storage/local-preset.js +21 -0
- package/dist/src/storage/local-preset.js.map +1 -0
- package/dist/src/storage/storage.d.ts +83 -0
- package/dist/src/storage/storage.d.ts.map +1 -0
- package/dist/src/storage/storage.js +120 -0
- package/dist/src/storage/storage.js.map +1 -0
- package/dist/src/telemetry/collections.d.ts +4 -0
- package/dist/src/telemetry/collections.d.ts.map +1 -0
- package/dist/src/telemetry/collections.js +19 -0
- package/dist/src/telemetry/collections.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +9 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +9 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/logger.d.ts +4 -0
- package/dist/src/telemetry/logger.d.ts.map +1 -0
- package/dist/src/telemetry/logger.js +27 -0
- package/dist/src/telemetry/logger.js.map +1 -0
- package/dist/src/telemetry/sqlite-logger.d.ts +24 -0
- package/dist/src/telemetry/sqlite-logger.d.ts.map +1 -0
- package/dist/src/telemetry/sqlite-logger.js +152 -0
- package/dist/src/telemetry/sqlite-logger.js.map +1 -0
- package/dist/src/telemetry/telemetry-sql-client.d.ts +11 -0
- package/dist/src/telemetry/telemetry-sql-client.d.ts.map +1 -0
- package/dist/src/telemetry/telemetry-sql-client.js +8 -0
- package/dist/src/telemetry/telemetry-sql-client.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +16 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +106 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/thumbnail/index.d.ts +4 -0
- package/dist/src/thumbnail/index.d.ts.map +1 -0
- package/dist/src/thumbnail/index.js +3 -0
- package/dist/src/thumbnail/index.js.map +1 -0
- package/dist/src/thumbnail/photon.d.ts +9 -0
- package/dist/src/thumbnail/photon.d.ts.map +1 -0
- package/dist/src/thumbnail/photon.js +73 -0
- package/dist/src/thumbnail/photon.js.map +1 -0
- package/dist/src/thumbnail/types.d.ts +23 -0
- package/dist/src/thumbnail/types.d.ts.map +1 -0
- package/dist/src/thumbnail/types.js +22 -0
- package/dist/src/thumbnail/types.js.map +1 -0
- package/dist/tests/app/app.test.d.ts +2 -0
- package/dist/tests/app/app.test.d.ts.map +1 -0
- package/dist/tests/app/app.test.js +125 -0
- package/dist/tests/app/app.test.js.map +1 -0
- package/dist/tests/app/builder.test.d.ts +2 -0
- package/dist/tests/app/builder.test.d.ts.map +1 -0
- package/dist/tests/app/builder.test.js +70 -0
- package/dist/tests/app/builder.test.js.map +1 -0
- package/dist/tests/cache/cached-collection.test.d.ts +2 -0
- package/dist/tests/cache/cached-collection.test.d.ts.map +1 -0
- package/dist/tests/cache/cached-collection.test.js +244 -0
- package/dist/tests/cache/cached-collection.test.js.map +1 -0
- package/dist/tests/cache/collection-cache.test.d.ts +2 -0
- package/dist/tests/cache/collection-cache.test.d.ts.map +1 -0
- package/dist/tests/cache/collection-cache.test.js +73 -0
- package/dist/tests/cache/collection-cache.test.js.map +1 -0
- package/dist/tests/collection-service/collection-service.test.d.ts +2 -0
- package/dist/tests/collection-service/collection-service.test.d.ts.map +1 -0
- package/dist/tests/collection-service/collection-service.test.js +938 -0
- package/dist/tests/collection-service/collection-service.test.js.map +1 -0
- package/dist/tests/collection-service/input-schema.test.d.ts +2 -0
- package/dist/tests/collection-service/input-schema.test.d.ts.map +1 -0
- package/dist/tests/collection-service/input-schema.test.js +327 -0
- package/dist/tests/collection-service/input-schema.test.js.map +1 -0
- package/dist/tests/config/config.test.d.ts +2 -0
- package/dist/tests/config/config.test.d.ts.map +1 -0
- package/dist/tests/config/config.test.js +84 -0
- package/dist/tests/config/config.test.js.map +1 -0
- package/dist/tests/crypto/crypto.test.d.ts +2 -0
- package/dist/tests/crypto/crypto.test.d.ts.map +1 -0
- package/dist/tests/crypto/crypto.test.js +56 -0
- package/dist/tests/crypto/crypto.test.js.map +1 -0
- package/dist/tests/hooks/hook-collection.test.d.ts +2 -0
- package/dist/tests/hooks/hook-collection.test.d.ts.map +1 -0
- package/dist/tests/hooks/hook-collection.test.js +103 -0
- package/dist/tests/hooks/hook-collection.test.js.map +1 -0
- package/dist/tests/hooks/hook-service.test.d.ts +2 -0
- package/dist/tests/hooks/hook-service.test.d.ts.map +1 -0
- package/dist/tests/hooks/hook-service.test.js +216 -0
- package/dist/tests/hooks/hook-service.test.js.map +1 -0
- package/dist/tests/http/file-serve.test.d.ts +2 -0
- package/dist/tests/http/file-serve.test.d.ts.map +1 -0
- package/dist/tests/http/file-serve.test.js +210 -0
- package/dist/tests/http/file-serve.test.js.map +1 -0
- package/dist/tests/http/file-token.test.d.ts +2 -0
- package/dist/tests/http/file-token.test.d.ts.map +1 -0
- package/dist/tests/http/file-token.test.js +165 -0
- package/dist/tests/http/file-token.test.js.map +1 -0
- package/dist/tests/http/ip-middleware.test.d.ts +2 -0
- package/dist/tests/http/ip-middleware.test.d.ts.map +1 -0
- package/dist/tests/http/ip-middleware.test.js +58 -0
- package/dist/tests/http/ip-middleware.test.js.map +1 -0
- package/dist/tests/http/router.test.d.ts +2 -0
- package/dist/tests/http/router.test.d.ts.map +1 -0
- package/dist/tests/http/router.test.js +312 -0
- package/dist/tests/http/router.test.js.map +1 -0
- package/dist/tests/migrator/dialect-sqlite.test.d.ts +2 -0
- package/dist/tests/migrator/dialect-sqlite.test.d.ts.map +1 -0
- package/dist/tests/migrator/dialect-sqlite.test.js +90 -0
- package/dist/tests/migrator/dialect-sqlite.test.js.map +1 -0
- package/dist/tests/migrator/integration.test.d.ts +2 -0
- package/dist/tests/migrator/integration.test.d.ts.map +1 -0
- package/dist/tests/migrator/integration.test.js +180 -0
- package/dist/tests/migrator/integration.test.js.map +1 -0
- package/dist/tests/migrator/migrator.test.d.ts +2 -0
- package/dist/tests/migrator/migrator.test.d.ts.map +1 -0
- package/dist/tests/migrator/migrator.test.js +225 -0
- package/dist/tests/migrator/migrator.test.js.map +1 -0
- package/dist/tests/migrator/schema-diff.test.d.ts +2 -0
- package/dist/tests/migrator/schema-diff.test.d.ts.map +1 -0
- package/dist/tests/migrator/schema-diff.test.js +323 -0
- package/dist/tests/migrator/schema-diff.test.js.map +1 -0
- package/dist/tests/repository/repository.test.d.ts +2 -0
- package/dist/tests/repository/repository.test.d.ts.map +1 -0
- package/dist/tests/repository/repository.test.js +255 -0
- package/dist/tests/repository/repository.test.js.map +1 -0
- package/dist/tests/rule/compiler.test.d.ts +2 -0
- package/dist/tests/rule/compiler.test.d.ts.map +1 -0
- package/dist/tests/rule/compiler.test.js +226 -0
- package/dist/tests/rule/compiler.test.js.map +1 -0
- package/dist/tests/rule/enforcer.test.d.ts +2 -0
- package/dist/tests/rule/enforcer.test.d.ts.map +1 -0
- package/dist/tests/rule/enforcer.test.js +190 -0
- package/dist/tests/rule/enforcer.test.js.map +1 -0
- package/dist/tests/storage/storage.test.d.ts +2 -0
- package/dist/tests/storage/storage.test.d.ts.map +1 -0
- package/dist/tests/storage/storage.test.js +76 -0
- package/dist/tests/storage/storage.test.js.map +1 -0
- package/dist/tests/telemetry/collections.test.d.ts +2 -0
- package/dist/tests/telemetry/collections.test.d.ts.map +1 -0
- package/dist/tests/telemetry/collections.test.js +67 -0
- package/dist/tests/telemetry/collections.test.js.map +1 -0
- package/dist/tests/telemetry/instrumentation.test.d.ts +2 -0
- package/dist/tests/telemetry/instrumentation.test.d.ts.map +1 -0
- package/dist/tests/telemetry/instrumentation.test.js +226 -0
- package/dist/tests/telemetry/instrumentation.test.js.map +1 -0
- package/dist/tests/telemetry/logger.test.d.ts +2 -0
- package/dist/tests/telemetry/logger.test.d.ts.map +1 -0
- package/dist/tests/telemetry/logger.test.js +56 -0
- package/dist/tests/telemetry/logger.test.js.map +1 -0
- package/dist/tests/telemetry/sqlite-logger.test.d.ts +2 -0
- package/dist/tests/telemetry/sqlite-logger.test.d.ts.map +1 -0
- package/dist/tests/telemetry/sqlite-logger.test.js +218 -0
- package/dist/tests/telemetry/sqlite-logger.test.js.map +1 -0
- package/dist/tests/telemetry/telemetry-routes.test.d.ts +2 -0
- package/dist/tests/telemetry/telemetry-routes.test.d.ts.map +1 -0
- package/dist/tests/telemetry/telemetry-routes.test.js +133 -0
- package/dist/tests/telemetry/telemetry-routes.test.js.map +1 -0
- package/dist/tests/telemetry/tracer.test.d.ts +2 -0
- package/dist/tests/telemetry/tracer.test.d.ts.map +1 -0
- package/dist/tests/telemetry/tracer.test.js +63 -0
- package/dist/tests/telemetry/tracer.test.js.map +1 -0
- package/dist/tests/thumbnail/photon.test.d.ts +2 -0
- package/dist/tests/thumbnail/photon.test.d.ts.map +1 -0
- package/dist/tests/thumbnail/photon.test.js +478 -0
- package/dist/tests/thumbnail/photon.test.js.map +1 -0
- package/dist/tests/thumbnail/thumbnail.test.d.ts +2 -0
- package/dist/tests/thumbnail/thumbnail.test.d.ts.map +1 -0
- package/dist/tests/thumbnail/thumbnail.test.js +35 -0
- package/dist/tests/thumbnail/thumbnail.test.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Re-export everything from the client package so server users only need @gettersethya/mira
|
|
2
|
+
export * from "@gettersethya/mira-client";
|
|
3
|
+
// App builder
|
|
4
|
+
export * from "./app/index.js";
|
|
5
|
+
export * from "./platforms/node.js";
|
|
6
|
+
export * from "./databases/index.js";
|
|
7
|
+
export * from "./storage/index.js";
|
|
8
|
+
// Server errors
|
|
9
|
+
export * from "./collection-service/errors.js";
|
|
10
|
+
// Plugin system
|
|
11
|
+
export * from "./hooks/index.js";
|
|
12
|
+
// Server services (for plugins and advanced usage)
|
|
13
|
+
export { Repository, RepositoryLive } from "./repository/index.js";
|
|
14
|
+
export { CollectionService, makeCollectionServiceLayer } from "./collection-service/index.js";
|
|
15
|
+
export { AuthService, hashPassword, verifyPassword, verifyJwt } from "./http/auth.js";
|
|
16
|
+
export { AppConfig, AppConfigLive } from "./config/index.js";
|
|
17
|
+
export { CryptoService } from "./crypto/index.js";
|
|
18
|
+
export { catchCollectionErrors } from "./http/errors.js";
|
|
19
|
+
// Telemetry (sqlite logger)
|
|
20
|
+
export { makeSqliteTelemetryLayer } from "./telemetry/sqlite-logger.js";
|
|
21
|
+
export { TelemetrySqlClient } from "./telemetry/telemetry-sql-client.js";
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,cAAc,2BAA2B,CAAA;AAEzC,cAAc;AACd,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAElC,gBAAgB;AAChB,cAAc,gCAAgC,CAAA;AAK9C,gBAAgB;AAChB,cAAc,kBAAkB,CAAA;AAEhC,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE7F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACrF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,4BAA4B;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DialectType } from "./dialect.js";
|
|
2
|
+
/**
|
|
3
|
+
* SQLite dialect implementation.
|
|
4
|
+
* - Identifiers are double-quoted.
|
|
5
|
+
* - Booleans are stored as INTEGER (0/1).
|
|
6
|
+
* - `dropColumn` and `alterColumn` emit comment stubs — SQLite requires table recreation for these.
|
|
7
|
+
*/
|
|
8
|
+
export declare const sqliteDialect: DialectType;
|
|
9
|
+
//# sourceMappingURL=dialect-sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect-sqlite.d.ts","sourceRoot":"","sources":["../../../src/migrator/dialect-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,WAkG3B,CAAA"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite dialect implementation.
|
|
3
|
+
* - Identifiers are double-quoted.
|
|
4
|
+
* - Booleans are stored as INTEGER (0/1).
|
|
5
|
+
* - `dropColumn` and `alterColumn` emit comment stubs — SQLite requires table recreation for these.
|
|
6
|
+
*/
|
|
7
|
+
export const sqliteDialect = {
|
|
8
|
+
quoteIdentifier: (name) => `"${name}"`,
|
|
9
|
+
quoteLiteral: (value) => {
|
|
10
|
+
if (value === null)
|
|
11
|
+
return "NULL";
|
|
12
|
+
if (typeof value === "boolean")
|
|
13
|
+
return value ? "1" : "0";
|
|
14
|
+
if (typeof value === "number")
|
|
15
|
+
return String(value);
|
|
16
|
+
return `'${String(value).replace(/'/g, "''")}'`;
|
|
17
|
+
},
|
|
18
|
+
nativeType: (col) => {
|
|
19
|
+
switch (col.type) {
|
|
20
|
+
case "boolean":
|
|
21
|
+
return "INTEGER";
|
|
22
|
+
case "integer":
|
|
23
|
+
return "INTEGER";
|
|
24
|
+
case "real":
|
|
25
|
+
return "REAL";
|
|
26
|
+
case "text":
|
|
27
|
+
return "TEXT";
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
indexName: (table, fields) => `idx_${table}_${fields.join("_")}`,
|
|
31
|
+
translate: (step) => {
|
|
32
|
+
switch (step.kind) {
|
|
33
|
+
case "createTable": {
|
|
34
|
+
const cols = step.columns.map((col) => {
|
|
35
|
+
if (col.autoIncrement) {
|
|
36
|
+
return `${sqliteDialect.quoteIdentifier(col.name)} INTEGER PRIMARY KEY AUTOINCREMENT`;
|
|
37
|
+
}
|
|
38
|
+
const parts = [sqliteDialect.quoteIdentifier(col.name), sqliteDialect.nativeType(col)];
|
|
39
|
+
if (!col.nullable)
|
|
40
|
+
parts.push("NOT NULL");
|
|
41
|
+
if (col.unique)
|
|
42
|
+
parts.push("UNIQUE");
|
|
43
|
+
if (col.default !== undefined)
|
|
44
|
+
parts.push(`DEFAULT ${sqliteDialect.quoteLiteral(col.default)}`);
|
|
45
|
+
if (col.primaryKey)
|
|
46
|
+
parts.push("PRIMARY KEY");
|
|
47
|
+
return parts.join(" ");
|
|
48
|
+
});
|
|
49
|
+
return [`CREATE TABLE ${sqliteDialect.quoteIdentifier(step.table)} (\n ${cols.join(",\n ")}\n)`];
|
|
50
|
+
}
|
|
51
|
+
case "dropTable":
|
|
52
|
+
return [`DROP TABLE IF EXISTS ${sqliteDialect.quoteIdentifier(step.table)}`];
|
|
53
|
+
case "renameTable":
|
|
54
|
+
return [
|
|
55
|
+
`ALTER TABLE ${sqliteDialect.quoteIdentifier(step.from)} RENAME TO ${sqliteDialect.quoteIdentifier(step.to)}`
|
|
56
|
+
];
|
|
57
|
+
case "addColumn": {
|
|
58
|
+
const c = step.column;
|
|
59
|
+
const parts = [sqliteDialect.quoteIdentifier(c.name), sqliteDialect.nativeType(c)];
|
|
60
|
+
if (!c.nullable)
|
|
61
|
+
parts.push("NOT NULL");
|
|
62
|
+
if (c.default !== undefined)
|
|
63
|
+
parts.push(`DEFAULT ${sqliteDialect.quoteLiteral(c.default)}`);
|
|
64
|
+
return [`ALTER TABLE ${sqliteDialect.quoteIdentifier(step.table)} ADD COLUMN ${parts.join(" ")}`];
|
|
65
|
+
}
|
|
66
|
+
case "dropColumn":
|
|
67
|
+
return [`-- dropColumn for ${step.column} requires table recreation`];
|
|
68
|
+
case "renameColumn":
|
|
69
|
+
return [
|
|
70
|
+
`ALTER TABLE ${sqliteDialect.quoteIdentifier(step.table)} RENAME COLUMN ${sqliteDialect.quoteIdentifier(step.from)} TO ${sqliteDialect.quoteIdentifier(step.to)}`
|
|
71
|
+
];
|
|
72
|
+
case "alterColumn":
|
|
73
|
+
return [`-- alterColumn for ${step.column.name} requires table recreation`];
|
|
74
|
+
case "createIndex": {
|
|
75
|
+
const name = sqliteDialect.indexName(step.table, step.fields);
|
|
76
|
+
const unique = step.unique ? "UNIQUE " : "";
|
|
77
|
+
const cols = step.fields.map((f) => sqliteDialect.quoteIdentifier(f)).join(", ");
|
|
78
|
+
return [
|
|
79
|
+
`CREATE ${unique}INDEX ${sqliteDialect.quoteIdentifier(name)} ON ${sqliteDialect.quoteIdentifier(step.table)} (${cols})`
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
case "dropIndex":
|
|
83
|
+
return [`DROP INDEX IF EXISTS ${sqliteDialect.quoteIdentifier(step.indexName)}`];
|
|
84
|
+
case "createSystemTable": {
|
|
85
|
+
const cols = step.columns.map((col) => {
|
|
86
|
+
const parts = [sqliteDialect.quoteIdentifier(col.name), sqliteDialect.nativeType(col)];
|
|
87
|
+
if (!col.nullable)
|
|
88
|
+
parts.push("NOT NULL");
|
|
89
|
+
if (col.primaryKey)
|
|
90
|
+
parts.push("PRIMARY KEY");
|
|
91
|
+
return parts.join(" ");
|
|
92
|
+
});
|
|
93
|
+
return [`CREATE TABLE IF NOT EXISTS ${sqliteDialect.quoteIdentifier(step.table)} (\n ${cols.join(",\n ")}\n)`];
|
|
94
|
+
}
|
|
95
|
+
case "createView":
|
|
96
|
+
return [`CREATE VIEW IF NOT EXISTS ${sqliteDialect.quoteIdentifier(step.view)} AS ${step.query}`];
|
|
97
|
+
case "dropView":
|
|
98
|
+
return [`DROP VIEW IF EXISTS ${sqliteDialect.quoteIdentifier(step.view)}`];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=dialect-sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect-sqlite.js","sourceRoot":"","sources":["../../../src/migrator/dialect-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
import type { ColumnDef, MigrationStep } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Interface a SQL dialect must implement to translate abstract `MigrationStep` values
|
|
5
|
+
* into executable SQL strings and to handle quoting/naming conventions.
|
|
6
|
+
*/
|
|
7
|
+
export type DialectType = {
|
|
8
|
+
/** Translates a single `MigrationStep` into one or more SQL statements. */
|
|
9
|
+
translate: (step: MigrationStep) => string[];
|
|
10
|
+
/** Returns the dialect's native SQL type keyword for a given `ColumnDef`. */
|
|
11
|
+
nativeType: (col: ColumnDef) => string;
|
|
12
|
+
/** Wraps an identifier (table or column name) in dialect-appropriate quotes. */
|
|
13
|
+
quoteIdentifier: (name: string) => string;
|
|
14
|
+
/** Serializes a literal value to a SQL-safe string. */
|
|
15
|
+
quoteLiteral: (value: unknown) => string;
|
|
16
|
+
/** Produces a deterministic index name from a table name and field list. */
|
|
17
|
+
indexName: (table: string, fields: string[]) => string;
|
|
18
|
+
};
|
|
19
|
+
declare const Dialect_base: Context.TagClass<Dialect, "Dialect", DialectType>;
|
|
20
|
+
/** Effect `Context.Tag` for the active SQL dialect. Inject via `Layer.succeed(Dialect, sqliteDialect)`. */
|
|
21
|
+
export declare class Dialect extends Dialect_base {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../src/migrator/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,2EAA2E;IAC3E,SAAS,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,EAAE,CAAA;IAC5C,6EAA6E;IAC7E,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,MAAM,CAAA;IACtC,gFAAgF;IAChF,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,uDAAuD;IACvD,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAA;IACxC,4EAA4E;IAC5E,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CACvD,CAAA;;AAED,2GAA2G;AAC3G,qBAAa,OAAQ,SAAQ,YAA8C;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../src/migrator/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAqBhC,2GAA2G;AAC3G,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAwB;CAAG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { sqliteDialect } from "./dialect-sqlite.js";
|
|
2
|
+
export { Dialect } from "./dialect.js";
|
|
3
|
+
export type { DialectType } from "./dialect.js";
|
|
4
|
+
export { Migrator, MigratorLive, SYSTEM_TABLE_STEPS } from "./migrator.js";
|
|
5
|
+
export { computePlan, diffSchemas, propertyToColumnType, schemaToColumns } from "./schema-diff.js";
|
|
6
|
+
export type { ColumnDef, ColumnType, MigrationPlan, MigrationStep, MigrateOptions, NamedSchema } from "./types.js";
|
|
7
|
+
export { toEffectLogLevel } from "./types.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/migrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClG,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAClH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { sqliteDialect } from "./dialect-sqlite.js";
|
|
2
|
+
export { Dialect } from "./dialect.js";
|
|
3
|
+
export { Migrator, MigratorLive, SYSTEM_TABLE_STEPS } from "./migrator.js";
|
|
4
|
+
export { computePlan, diffSchemas, propertyToColumnType, schemaToColumns } from "./schema-diff.js";
|
|
5
|
+
export { toEffectLogLevel } from "./types.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/migrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElG,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SqlClient, SqlError } from "@effect/sql";
|
|
2
|
+
import { Context, Effect, Layer } from "effect";
|
|
3
|
+
import { Dialect } from "./dialect.js";
|
|
4
|
+
import type { MigrationPlan, MigrationStep, MigrateOptions, NamedSchema } from "./types.js";
|
|
5
|
+
/** DDL steps to bootstrap the `_collections` and `_migrations` system tables on first run. */
|
|
6
|
+
export declare const SYSTEM_TABLE_STEPS: MigrationStep[];
|
|
7
|
+
declare const Migrator_base: Context.TagClass<Migrator, "Migrator", {
|
|
8
|
+
readonly migrate: (schemas: NamedSchema[], options?: MigrateOptions) => Effect.Effect<void, SqlError.SqlError>;
|
|
9
|
+
readonly plan: (schemas: NamedSchema[], options?: MigrateOptions) => Effect.Effect<MigrationPlan, SqlError.SqlError>;
|
|
10
|
+
readonly status: (schemas: NamedSchema[]) => Effect.Effect<Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
status: "current" | "ahead" | "behind";
|
|
13
|
+
}>, SqlError.SqlError>;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Effect `Context.Tag` for the migration service.
|
|
17
|
+
* Provides three operations:
|
|
18
|
+
* - `migrate` — apply all pending DDL steps inside a transaction.
|
|
19
|
+
* - `plan` — dry-run diff returning the `MigrationPlan` without executing anything.
|
|
20
|
+
* - `status` — per-collection status report (`"current"` | `"behind"` | `"ahead"`).
|
|
21
|
+
*
|
|
22
|
+
* Inject via `MigratorLive` layer.
|
|
23
|
+
*/
|
|
24
|
+
export declare class Migrator extends Migrator_base {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Live `Layer` for `Migrator`. Requires `SqlClient.SqlClient` and `Dialect` in the environment.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* const appLayer = MigratorLive.pipe(
|
|
31
|
+
* Layer.provideMerge(Layer.mergeAll(Layer.succeed(Dialect, sqliteDialect), SqliteClient.layer({ filename: "app.db" })))
|
|
32
|
+
* )
|
|
33
|
+
*/
|
|
34
|
+
export declare const MigratorLive: Layer.Layer<Migrator, never, SqlClient.SqlClient | Dialect>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=migrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../../src/migrator/migrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAA+B,MAAM,QAAQ,CAAA;AAI5E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAa,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAmCtG,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAW7C,CAAA;;sBAcqB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;mBAC/F,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC;qBACnG,CACf,OAAO,EAAE,WAAW,EAAE,KACnB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;KAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;;AAhB1G;;;;;;;;GAQG;AACH,qBAAa,QAAS,SAAQ,aAS3B;CAAG;AA0KN;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,6DAiBxB,CAAA"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { SqlClient, SqlError } from "@effect/sql";
|
|
2
|
+
import { Context, Effect, Layer, Logger, Schema } from "effect";
|
|
3
|
+
import { computePlan, diffSchemas } from "./schema-diff.js";
|
|
4
|
+
import { Dialect } from "./dialect.js";
|
|
5
|
+
import { toEffectLogLevel } from "./types.js";
|
|
6
|
+
const parseJsonSchema = Schema.parseJson();
|
|
7
|
+
function decodeStoredSchema(json) {
|
|
8
|
+
return Schema.decodeUnknown(parseJsonSchema)(json).pipe(Effect.mapError((e) => new SqlError.SqlError({ message: `Invalid stored schema: ${e.message}` })), Effect.map((v) => v));
|
|
9
|
+
}
|
|
10
|
+
function encodeStoredSchema(schema) {
|
|
11
|
+
return Schema.encode(parseJsonSchema)(schema).pipe(Effect.mapError((e) => new SqlError.SqlError({ message: `Failed to serialize schema: ${e.message}` })));
|
|
12
|
+
}
|
|
13
|
+
const collectionsColumns = [
|
|
14
|
+
{ name: "name", type: "text", nullable: false, primaryKey: true },
|
|
15
|
+
{ name: "schema", type: "text", nullable: false },
|
|
16
|
+
{ name: "updated_at", type: "text", nullable: false }
|
|
17
|
+
];
|
|
18
|
+
const migrationsColumns = [
|
|
19
|
+
{ name: "id", type: "text", nullable: false, primaryKey: true },
|
|
20
|
+
{ name: "name", type: "text", nullable: false },
|
|
21
|
+
{ name: "steps", type: "text", nullable: false },
|
|
22
|
+
{ name: "applied_at", type: "text", nullable: false }
|
|
23
|
+
];
|
|
24
|
+
/** DDL steps to bootstrap the `_collections` and `_migrations` system tables on first run. */
|
|
25
|
+
export const SYSTEM_TABLE_STEPS = [
|
|
26
|
+
{
|
|
27
|
+
kind: "createSystemTable",
|
|
28
|
+
table: "_collections",
|
|
29
|
+
columns: collectionsColumns
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
kind: "createSystemTable",
|
|
33
|
+
table: "_migrations",
|
|
34
|
+
columns: migrationsColumns
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Effect `Context.Tag` for the migration service.
|
|
39
|
+
* Provides three operations:
|
|
40
|
+
* - `migrate` — apply all pending DDL steps inside a transaction.
|
|
41
|
+
* - `plan` — dry-run diff returning the `MigrationPlan` without executing anything.
|
|
42
|
+
* - `status` — per-collection status report (`"current"` | `"behind"` | `"ahead"`).
|
|
43
|
+
*
|
|
44
|
+
* Inject via `MigratorLive` layer.
|
|
45
|
+
*/
|
|
46
|
+
export class Migrator extends Context.Tag("Migrator")() {
|
|
47
|
+
}
|
|
48
|
+
function migrateImplWith(sql, dialect, schemas, options) {
|
|
49
|
+
return Effect.gen(function* () {
|
|
50
|
+
yield* Effect.logDebug("Creating system tables if not exist");
|
|
51
|
+
for (const step of SYSTEM_TABLE_STEPS) {
|
|
52
|
+
for (const stmt of dialect.translate(step)) {
|
|
53
|
+
yield* Effect.logDebug(`SQL: ${stmt}`);
|
|
54
|
+
yield* sql.unsafe(stmt);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
yield* Effect.logInfo(`Migrating ${schemas.length} collections...`);
|
|
58
|
+
const storedRows = yield* sql `SELECT name, schema FROM _collections`;
|
|
59
|
+
const storedRecord = {};
|
|
60
|
+
for (const row of storedRows) {
|
|
61
|
+
storedRecord[row.name] = yield* decodeStoredSchema(row.schema);
|
|
62
|
+
}
|
|
63
|
+
yield* Effect.logDebug(`Stored schemas: ${Object.keys(storedRecord).length} found`);
|
|
64
|
+
const plan = computePlan(schemas, storedRecord, options);
|
|
65
|
+
yield* Effect.logDebug(`Diff: ${plan.steps.length} steps computed`);
|
|
66
|
+
if (plan.steps.length === 0) {
|
|
67
|
+
yield* Effect.logInfo("All collections up to date — nothing to migrate");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
yield* Effect.logInfo(`Migration plan: ${plan.steps.length} steps (destructive: ${plan.destructive})`);
|
|
71
|
+
if (plan.destructive && !options?.allowDestructive) {
|
|
72
|
+
yield* Effect.logWarning("Destructive steps detected but allowDestructive is false — skipping. Re-run with allowDestructive: true to proceed.");
|
|
73
|
+
for (const step of plan.steps) {
|
|
74
|
+
if (step.kind === "dropTable" || step.kind === "dropColumn" || step.kind === "alterColumn") {
|
|
75
|
+
const tableLabel = "table" in step ? step.table : "unknown";
|
|
76
|
+
yield* Effect.logWarning(` Destructive step: ${step.kind} on ${tableLabel}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
yield* Effect.logDebug("Starting transaction");
|
|
82
|
+
yield* sql `BEGIN TRANSACTION`;
|
|
83
|
+
yield* Effect.catchAll(Effect.gen(function* () {
|
|
84
|
+
for (let i = 0; i < plan.steps.length; i++) {
|
|
85
|
+
const step = plan.steps[i];
|
|
86
|
+
yield* Effect.logInfo(`Step [${i + 1}/${plan.steps.length}]: ${step.kind} on ${"table" in step ? step.table : ""}`);
|
|
87
|
+
const stepJson = yield* Schema.encode(parseJsonSchema)(step).pipe(Effect.mapError((e) => new SqlError.SqlError({ message: String(e) })));
|
|
88
|
+
yield* Effect.logDebug(`Step details: ${stepJson}`);
|
|
89
|
+
for (const stmt of dialect.translate(step)) {
|
|
90
|
+
yield* Effect.logDebug(`SQL: ${stmt}`);
|
|
91
|
+
yield* sql.unsafe(stmt);
|
|
92
|
+
}
|
|
93
|
+
yield* Effect.logDebug(`Step ${i + 1} applied successfully`);
|
|
94
|
+
}
|
|
95
|
+
const stepsJson = yield* Schema.encode(parseJsonSchema)(plan.steps).pipe(Effect.mapError((e) => new SqlError.SqlError({ message: String(e) })));
|
|
96
|
+
const migrationId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
97
|
+
const migrationName = schemas.map((s) => s.name).join(", ");
|
|
98
|
+
yield* sql `INSERT INTO ${sql("_migrations")} ${sql.insert({ id: migrationId, name: migrationName, steps: stepsJson, applied_at: new Date().toJSON() })}`;
|
|
99
|
+
yield* sql `COMMIT`;
|
|
100
|
+
}), (e) => Effect.gen(function* () {
|
|
101
|
+
yield* sql `ROLLBACK`;
|
|
102
|
+
yield* Effect.logError(`Migration failed at step: ${String(e)}`);
|
|
103
|
+
return yield* e;
|
|
104
|
+
}));
|
|
105
|
+
for (const { name, schema } of schemas) {
|
|
106
|
+
yield* Effect.logDebug(`Writing schema for ${name}`);
|
|
107
|
+
const schemaJson = yield* encodeStoredSchema(schema);
|
|
108
|
+
yield* sql `INSERT OR REPLACE INTO ${sql("_collections")} ${sql.insert({ name, schema: schemaJson, updated_at: new Date().toJSON() })}`;
|
|
109
|
+
}
|
|
110
|
+
yield* Effect.logInfo(`Migration complete — ${schemas.length} collections migrated`);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function planImplWith(sql, dialect, schemas, options) {
|
|
114
|
+
return Effect.gen(function* () {
|
|
115
|
+
yield* Effect.logDebug("Computing migration plan (dry run)");
|
|
116
|
+
for (const step of SYSTEM_TABLE_STEPS) {
|
|
117
|
+
for (const stmt of dialect.translate(step)) {
|
|
118
|
+
yield* sql.unsafe(stmt);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const storedRows = yield* sql `SELECT name, schema FROM _collections`;
|
|
122
|
+
const storedRecord = {};
|
|
123
|
+
for (const row of storedRows) {
|
|
124
|
+
storedRecord[row.name] = yield* decodeStoredSchema(row.schema);
|
|
125
|
+
}
|
|
126
|
+
const plan = computePlan(schemas, storedRecord, options);
|
|
127
|
+
yield* Effect.logInfo(`Plan: ${plan.steps.length} steps`);
|
|
128
|
+
const planJson = yield* Schema.encode(parseJsonSchema)(plan.steps).pipe(Effect.mapError((e) => new SqlError.SqlError({ message: String(e) })));
|
|
129
|
+
yield* Effect.logDebug(`Steps: ${planJson}`);
|
|
130
|
+
return plan;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function statusImplWith(sql, dialect, schemas) {
|
|
134
|
+
return Effect.gen(function* () {
|
|
135
|
+
yield* Effect.logDebug("Checking migration status");
|
|
136
|
+
for (const step of SYSTEM_TABLE_STEPS) {
|
|
137
|
+
for (const stmt of dialect.translate(step)) {
|
|
138
|
+
yield* sql.unsafe(stmt);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const storedRows = yield* sql `SELECT name, schema FROM _collections`;
|
|
142
|
+
const parsedEntries = [];
|
|
143
|
+
for (const r of storedRows) {
|
|
144
|
+
parsedEntries.push([r.name, yield* decodeStoredSchema(r.schema)]);
|
|
145
|
+
}
|
|
146
|
+
const stored = new Map(parsedEntries);
|
|
147
|
+
const result = [];
|
|
148
|
+
for (const { name, schema: desired } of schemas) {
|
|
149
|
+
const storedSchema = stored.get(name);
|
|
150
|
+
if (!storedSchema) {
|
|
151
|
+
result.push({ name, status: "behind" });
|
|
152
|
+
yield* Effect.logDebug(`${name}: behind (not in stored)`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
const steps = diffSchemas(name, storedSchema, desired);
|
|
156
|
+
if (steps.length === 0) {
|
|
157
|
+
result.push({ name, status: "current" });
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const hasNew = steps.some((s) => s.kind === "addColumn" || s.kind === "createIndex" || s.kind === "createTable" || s.kind === "createView");
|
|
161
|
+
const hasRemoved = steps.some((s) => s.kind === "dropColumn" || s.kind === "dropIndex" || s.kind === "dropTable" || s.kind === "dropView");
|
|
162
|
+
if (hasNew && hasRemoved) {
|
|
163
|
+
result.push({ name, status: "behind" });
|
|
164
|
+
}
|
|
165
|
+
else if (hasNew) {
|
|
166
|
+
result.push({ name, status: "behind" });
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
result.push({ name, status: "ahead" });
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Live `Layer` for `Migrator`. Requires `SqlClient.SqlClient` and `Dialect` in the environment.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* const appLayer = MigratorLive.pipe(
|
|
182
|
+
* Layer.provideMerge(Layer.mergeAll(Layer.succeed(Dialect, sqliteDialect), SqliteClient.layer({ filename: "app.db" })))
|
|
183
|
+
* )
|
|
184
|
+
*/
|
|
185
|
+
export const MigratorLive = Layer.effect(Migrator, Effect.gen(function* () {
|
|
186
|
+
const sql = yield* SqlClient.SqlClient;
|
|
187
|
+
const dialect = yield* Dialect;
|
|
188
|
+
return {
|
|
189
|
+
migrate: (schemas, options) => {
|
|
190
|
+
const level = toEffectLogLevel(options?.logLevel);
|
|
191
|
+
return migrateImplWith(sql, dialect, schemas, options).pipe(Logger.withMinimumLogLevel(level));
|
|
192
|
+
},
|
|
193
|
+
plan: (schemas, options) => {
|
|
194
|
+
const level = toEffectLogLevel(options?.logLevel);
|
|
195
|
+
return planImplWith(sql, dialect, schemas, options).pipe(Logger.withMinimumLogLevel(level));
|
|
196
|
+
},
|
|
197
|
+
status: (schemas) => statusImplWith(sql, dialect, schemas)
|
|
198
|
+
};
|
|
199
|
+
}));
|
|
200
|
+
//# sourceMappingURL=migrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../../src/migrator/migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CollectionSchema, JsonSchemaProperty } from "@gettersethya/mira-client";
|
|
2
|
+
import type { ColumnDef, MigrationPlan, MigrationStep, NamedSchema } from "./types.js";
|
|
3
|
+
/** Maps a JSON Schema property to the appropriate SQL column type. */
|
|
4
|
+
export declare function propertyToColumnType(prop: JsonSchemaProperty): "boolean" | "text" | "integer" | "real";
|
|
5
|
+
/** Converts a `CollectionSchema` to the flat list of `ColumnDef`s that the dialect will render as DDL. */
|
|
6
|
+
export declare function schemaToColumns(schema: CollectionSchema): ColumnDef[];
|
|
7
|
+
/** Extracts index entries from a schema's `x-indexes`, adding a deterministic name to each. */
|
|
8
|
+
export declare function schemaToIndexEntries(schema: CollectionSchema): {
|
|
9
|
+
name: string;
|
|
10
|
+
fields: Array<string>;
|
|
11
|
+
unique: boolean;
|
|
12
|
+
}[];
|
|
13
|
+
/**
|
|
14
|
+
* Computes the `MigrationStep`s needed to bring `stored` up to `desired` for a single collection.
|
|
15
|
+
* Pass `null` for `stored` to generate a full `createTable`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function diffSchemas(name: string, stored: CollectionSchema | null, desired: CollectionSchema): MigrationStep[];
|
|
18
|
+
/**
|
|
19
|
+
* Builds a full `MigrationPlan` for a set of desired schemas against the currently stored schemas.
|
|
20
|
+
* When `allowDestructive` is true, tables absent from `schemas` are dropped.
|
|
21
|
+
*/
|
|
22
|
+
export declare function computePlan(schemas: NamedSchema[], stored: Record<string, CollectionSchema>, options?: {
|
|
23
|
+
allowDestructive?: boolean;
|
|
24
|
+
}): MigrationPlan;
|
|
25
|
+
//# sourceMappingURL=schema-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-diff.d.ts","sourceRoot":"","sources":["../../../src/migrator/schema-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAOtF,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,2CAM5D;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,eA+BvD;AAED,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB;;;;IAK5D;AAwBD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,mBAmDnG;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,aAAa,CA8Bf"}
|