@c15t/backend 1.0.5 → 1.2.0-canary.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/.turbo/turbo-build.log +33 -39
- package/.turbo/turbo-fmt.log +3 -3
- package/.turbo/turbo-test.log +531 -0
- package/coverage/coverage-final.json +84 -0
- package/coverage/coverage-summary.json +85 -0
- package/coverage/html/backend/index.html +116 -0
- package/coverage/html/backend/rslib.config.ts.html +415 -0
- package/coverage/html/backend/src/contracts/consent/index.html +161 -0
- package/coverage/html/backend/src/contracts/consent/index.ts.html +112 -0
- package/coverage/html/backend/src/contracts/consent/post.contract.ts.html +559 -0
- package/coverage/html/backend/src/contracts/consent/show-banner.contract.ts.html +220 -0
- package/coverage/html/backend/src/contracts/consent/verify.contract.ts.html +463 -0
- package/coverage/html/backend/src/contracts/index.html +116 -0
- package/coverage/html/backend/src/contracts/index.ts.html +139 -0
- package/coverage/html/backend/src/contracts/meta/index.html +131 -0
- package/coverage/html/backend/src/contracts/meta/index.ts.html +100 -0
- package/coverage/html/backend/src/contracts/meta/status.contract.ts.html +196 -0
- package/coverage/html/backend/src/contracts/shared/index.html +116 -0
- package/coverage/html/backend/src/contracts/shared/jurisdiction.schema.ts.html +175 -0
- package/coverage/html/backend/src/core.ts.html +1624 -0
- package/coverage/html/backend/src/handlers/consent/index.html +161 -0
- package/coverage/html/backend/src/handlers/consent/index.ts.html +112 -0
- package/coverage/html/backend/src/handlers/consent/post.handler.ts.html +889 -0
- package/coverage/html/backend/src/handlers/consent/show-banner.handler.ts.html +535 -0
- package/coverage/html/backend/src/handlers/consent/verify.handler.ts.html +1000 -0
- package/coverage/html/backend/src/handlers/meta/index.html +131 -0
- package/coverage/html/backend/src/handlers/meta/index.ts.html +100 -0
- package/coverage/html/backend/src/handlers/meta/status.handler.ts.html +226 -0
- package/coverage/html/backend/src/index.html +161 -0
- package/coverage/html/backend/src/init.ts.html +1018 -0
- package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +116 -0
- package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +544 -0
- package/coverage/html/backend/src/pkgs/api-router/index.html +116 -0
- package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +334 -0
- package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +304 -0
- package/coverage/html/backend/src/pkgs/api-router/utils/index.html +131 -0
- package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +361 -0
- package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +709 -0
- package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +256 -0
- package/coverage/html/backend/src/pkgs/data-model/fields/index.html +161 -0
- package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +136 -0
- package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +496 -0
- package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +349 -0
- package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +176 -0
- package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +358 -0
- package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +613 -0
- package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +538 -0
- package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +289 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +289 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +2203 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +116 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +116 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +670 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +131 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +3634 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +116 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +1417 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +116 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +2071 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +116 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +1834 -0
- package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +316 -0
- package/coverage/html/backend/src/pkgs/db-adapters/index.html +131 -0
- package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +238 -0
- package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +343 -0
- package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +217 -0
- package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +146 -0
- package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +280 -0
- package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +289 -0
- package/coverage/html/backend/src/pkgs/migrations/index.html +176 -0
- package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +595 -0
- package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +301 -0
- package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +694 -0
- package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +817 -0
- package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +976 -0
- package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +703 -0
- package/coverage/html/backend/src/pkgs/results/core/index.html +146 -0
- package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +280 -0
- package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +271 -0
- package/coverage/html/backend/src/pkgs/results/index.html +131 -0
- package/coverage/html/backend/src/pkgs/results/orpc-error-handler.ts.html +496 -0
- package/coverage/html/backend/src/pkgs/results/results/index.html +131 -0
- package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +628 -0
- package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +1234 -0
- package/coverage/html/backend/src/pkgs/utils/env.ts.html +337 -0
- package/coverage/html/backend/src/pkgs/utils/index.html +146 -0
- package/coverage/html/backend/src/pkgs/utils/logger.ts.html +199 -0
- package/coverage/html/backend/src/pkgs/utils/url.ts.html +400 -0
- package/coverage/html/backend/src/router.ts.html +109 -0
- package/coverage/html/backend/src/schema/audit-log/index.html +146 -0
- package/coverage/html/backend/src/schema/audit-log/registry.ts.html +436 -0
- package/coverage/html/backend/src/schema/audit-log/schema.ts.html +223 -0
- package/coverage/html/backend/src/schema/audit-log/table.ts.html +640 -0
- package/coverage/html/backend/src/schema/consent/index.html +146 -0
- package/coverage/html/backend/src/schema/consent/registry.ts.html +616 -0
- package/coverage/html/backend/src/schema/consent/schema.ts.html +238 -0
- package/coverage/html/backend/src/schema/consent/table.ts.html +748 -0
- package/coverage/html/backend/src/schema/consent-policy/index.html +146 -0
- package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +1063 -0
- package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +265 -0
- package/coverage/html/backend/src/schema/consent-policy/table.ts.html +535 -0
- package/coverage/html/backend/src/schema/consent-purpose/index.html +146 -0
- package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +589 -0
- package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +259 -0
- package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +547 -0
- package/coverage/html/backend/src/schema/consent-record/index.html +131 -0
- package/coverage/html/backend/src/schema/consent-record/schema.ts.html +211 -0
- package/coverage/html/backend/src/schema/consent-record/table.ts.html +457 -0
- package/coverage/html/backend/src/schema/create-registry.ts.html +148 -0
- package/coverage/html/backend/src/schema/definition.ts.html +685 -0
- package/coverage/html/backend/src/schema/domain/index.html +146 -0
- package/coverage/html/backend/src/schema/domain/registry.ts.html +973 -0
- package/coverage/html/backend/src/schema/domain/schema.ts.html +214 -0
- package/coverage/html/backend/src/schema/domain/table.ts.html +496 -0
- package/coverage/html/backend/src/schema/index.html +146 -0
- package/coverage/html/backend/src/schema/schemas.ts.html +166 -0
- package/coverage/html/backend/src/schema/subject/index.html +146 -0
- package/coverage/html/backend/src/schema/subject/registry.ts.html +973 -0
- package/coverage/html/backend/src/schema/subject/schema.ts.html +208 -0
- package/coverage/html/backend/src/schema/subject/table.ts.html +499 -0
- package/coverage/html/backend/src/server.ts.html +475 -0
- package/coverage/html/backend/src/testing/contract-testing.ts.html +1348 -0
- package/coverage/html/backend/src/testing/index.html +116 -0
- package/coverage/html/base.css +224 -0
- package/coverage/html/block-navigation.js +87 -0
- package/coverage/html/favicon.png +0 -0
- package/coverage/html/index.html +626 -0
- package/coverage/html/prettify.css +1 -0
- package/coverage/html/prettify.js +2 -0
- package/coverage/html/sort-arrow-sprite.png +0 -0
- package/coverage/html/sorter.js +196 -0
- package/dist/contracts/consent/index.d.ts +401 -0
- package/dist/contracts/consent/index.d.ts.map +1 -0
- package/dist/contracts/consent/index.test.d.ts +2 -0
- package/dist/contracts/consent/index.test.d.ts.map +1 -0
- package/dist/contracts/consent/post.contract.d.ts +212 -0
- package/dist/contracts/consent/post.contract.d.ts.map +1 -0
- package/dist/contracts/consent/post.contract.test.d.ts +2 -0
- package/dist/contracts/consent/post.contract.test.d.ts.map +1 -0
- package/dist/contracts/consent/show-banner.contract.d.ts +45 -0
- package/dist/contracts/consent/show-banner.contract.d.ts.map +1 -0
- package/dist/contracts/consent/show-banner.contract.test.d.ts +2 -0
- package/dist/contracts/consent/show-banner.contract.test.d.ts.map +1 -0
- package/dist/contracts/consent/verify.contract.d.ts +147 -0
- package/dist/contracts/consent/verify.contract.d.ts.map +1 -0
- package/dist/contracts/consent/verify.contract.test.d.ts +2 -0
- package/dist/contracts/consent/verify.contract.test.d.ts.map +1 -0
- package/dist/contracts/index.d.ts +963 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/meta/index.d.ts +78 -0
- package/dist/contracts/meta/index.d.ts.map +1 -0
- package/dist/contracts/meta/index.test.d.ts +2 -0
- package/dist/contracts/meta/index.test.d.ts.map +1 -0
- package/dist/contracts/meta/status.contract.d.ts +77 -0
- package/dist/contracts/meta/status.contract.d.ts.map +1 -0
- package/dist/contracts/meta/status.contract.test.d.ts +2 -0
- package/dist/contracts/meta/status.contract.test.d.ts.map +1 -0
- package/dist/contracts/shared/jurisdiction.schema.d.ts +24 -0
- package/dist/contracts/shared/jurisdiction.schema.d.ts.map +1 -0
- package/dist/core.cjs +3584 -0
- package/dist/core.d.ts +533 -76
- package/dist/core.d.ts.map +1 -1
- package/dist/{index.js → core.js} +1163 -1286
- package/dist/handlers/consent/index.d.ts +401 -0
- package/dist/handlers/consent/index.d.ts.map +1 -0
- package/dist/handlers/consent/post.handler.d.ts +234 -0
- package/dist/handlers/consent/post.handler.d.ts.map +1 -0
- package/dist/handlers/consent/show-banner.handler.d.ts +57 -0
- package/dist/handlers/consent/show-banner.handler.d.ts.map +1 -0
- package/dist/handlers/consent/show-banner.handler.test.d.ts +2 -0
- package/dist/handlers/consent/show-banner.handler.test.d.ts.map +1 -0
- package/dist/handlers/consent/verify.handler.d.ts +169 -0
- package/dist/handlers/consent/verify.handler.d.ts.map +1 -0
- package/dist/handlers/meta/index.d.ts +78 -0
- package/dist/handlers/meta/index.d.ts.map +1 -0
- package/dist/handlers/meta/status.handler.d.ts +76 -0
- package/dist/handlers/meta/status.handler.d.ts.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/pkgs/api-router/hooks/processor.d.ts.map +1 -1
- package/dist/pkgs/api-router/types/router-props.d.ts +1 -1
- package/dist/pkgs/api-router/types/router-props.d.ts.map +1 -1
- package/dist/pkgs/api-router/utils/cors.d.ts +1 -1
- package/dist/pkgs/api-router/utils/cors.d.ts.map +1 -1
- package/dist/pkgs/data-model/fields/field-types.d.ts +1 -1
- package/dist/pkgs/data-model/fields/zod-fields.d.ts +32 -32
- package/dist/pkgs/data-model/index.cjs +1433 -1799
- package/dist/pkgs/data-model/index.js +20 -385
- package/dist/pkgs/data-model/schema/index.cjs +1402 -1768
- package/dist/pkgs/data-model/schema/index.js +20 -385
- package/dist/pkgs/db-adapters/adapter-factory.d.ts +2 -2
- package/dist/pkgs/db-adapters/adapter-factory.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +4 -4
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +19 -151
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +19 -151
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts +1 -1
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +17 -149
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +17 -149
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts +2 -2
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +17 -149
- package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +17 -149
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +19 -151
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +19 -151
- package/dist/pkgs/db-adapters/index.cjs +31 -153
- package/dist/pkgs/db-adapters/index.js +31 -153
- package/dist/pkgs/migrations/get-schema/get-schema.d.ts +2 -2
- package/dist/pkgs/migrations/get-schema/index.d.ts +1 -1
- package/dist/pkgs/migrations/index.cjs +30 -153
- package/dist/pkgs/migrations/index.js +30 -153
- package/dist/pkgs/migrations/schema-comparison.d.ts.map +1 -1
- package/dist/pkgs/results/core/error-class.d.ts +23 -21
- package/dist/pkgs/results/core/error-class.d.ts.map +1 -1
- package/dist/pkgs/results/index.cjs +17 -150
- package/dist/pkgs/results/index.d.ts +0 -3
- package/dist/pkgs/results/index.d.ts.map +1 -1
- package/dist/pkgs/results/index.js +17 -138
- package/dist/pkgs/results/orpc-error-handler.d.ts +65 -0
- package/dist/pkgs/results/orpc-error-handler.d.ts.map +1 -0
- package/dist/pkgs/results/types.d.ts +7 -7
- package/dist/pkgs/results/types.d.ts.map +1 -1
- package/dist/pkgs/types/context.d.ts +15 -4
- package/dist/pkgs/types/context.d.ts.map +1 -1
- package/dist/pkgs/types/endpoints.d.ts +3 -4
- package/dist/pkgs/types/endpoints.d.ts.map +1 -1
- package/dist/pkgs/types/options.d.ts +2 -3
- package/dist/pkgs/types/options.d.ts.map +1 -1
- package/dist/pkgs/types/plugins.d.ts +2 -3
- package/dist/pkgs/types/plugins.d.ts.map +1 -1
- package/dist/pkgs/utils/index.d.ts +1 -0
- package/dist/pkgs/utils/index.d.ts.map +1 -1
- package/dist/pkgs/utils/logger.d.ts +16 -0
- package/dist/pkgs/utils/logger.d.ts.map +1 -0
- package/dist/router.cjs +1213 -0
- package/dist/router.d.ts +480 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +1169 -0
- package/dist/schema/audit-log/table.d.ts +1 -1
- package/dist/schema/consent/table.d.ts +1 -1
- package/dist/schema/consent-policy/registry.d.ts +12 -12
- package/dist/schema/consent-policy/schema.d.ts +6 -6
- package/dist/schema/consent-policy/table.d.ts +7 -7
- package/dist/schema/consent-purpose/registry.d.ts +6 -6
- package/dist/schema/consent-purpose/schema.d.ts +6 -6
- package/dist/schema/consent-purpose/table.d.ts +7 -7
- package/dist/schema/consent-record/table.d.ts +1 -1
- package/dist/schema/create-registry.d.ts +32 -32
- package/dist/schema/definition.d.ts +19 -19
- package/dist/schema/domain/registry.d.ts +10 -10
- package/dist/schema/domain/schema.d.ts +5 -5
- package/dist/schema/domain/table.d.ts +6 -6
- package/dist/schema/index.cjs +1409 -1775
- package/dist/schema/index.js +20 -385
- package/dist/schema/schemas.d.ts +19 -19
- package/dist/schema/subject/registry.d.ts +4 -4
- package/dist/schema/subject/schema.d.ts +2 -2
- package/dist/schema/subject/table.d.ts +3 -3
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/testing/contract-testing.d.ts +37 -0
- package/dist/testing/contract-testing.d.ts.map +1 -0
- package/dist/types/context.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/options.d.ts +33 -2
- package/dist/types/options.d.ts.map +1 -1
- package/dist/types/plugins.d.ts +3 -4
- package/dist/types/plugins.d.ts.map +1 -1
- package/package.json +22 -30
- package/rslib.config.ts +2 -5
- package/src/contracts/consent/index.test.ts +5 -0
- package/src/contracts/consent/index.ts +9 -0
- package/src/contracts/consent/post.contract.test.ts +526 -0
- package/src/contracts/consent/post.contract.ts +160 -0
- package/src/contracts/consent/show-banner.contract.test.ts +214 -0
- package/src/contracts/consent/show-banner.contract.ts +45 -0
- package/src/contracts/consent/verify.contract.test.ts +185 -0
- package/src/contracts/consent/verify.contract.ts +126 -0
- package/src/contracts/index.ts +18 -0
- package/src/contracts/meta/index.test.ts +5 -0
- package/src/contracts/meta/index.ts +5 -0
- package/src/contracts/meta/status.contract.test.ts +338 -0
- package/src/contracts/meta/status.contract.ts +37 -0
- package/src/contracts/shared/jurisdiction.schema.ts +30 -0
- package/src/core.ts +451 -159
- package/src/handlers/consent/index.ts +9 -0
- package/src/handlers/consent/post.handler.ts +273 -0
- package/src/handlers/consent/show-banner.handler.test.ts +148 -0
- package/src/handlers/consent/show-banner.handler.ts +150 -0
- package/src/handlers/consent/verify.handler.ts +305 -0
- package/src/handlers/meta/index.ts +5 -0
- package/src/handlers/meta/status.handler.ts +47 -0
- package/src/init.ts +8 -5
- package/src/pkgs/api-router/hooks/__tests__/processor.test.ts +6 -0
- package/src/pkgs/api-router/hooks/processor.ts +2 -0
- package/src/pkgs/api-router/types/router-props.ts +1 -1
- package/src/pkgs/api-router/utils/cors.ts +1 -1
- package/src/pkgs/data-model/fields/field-types.ts +1 -1
- package/src/pkgs/data-model/fields/id-generator.ts +1 -1
- package/src/pkgs/db-adapters/README.md +3 -3
- package/src/pkgs/db-adapters/adapter-factory.ts +8 -4
- package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +13 -13
- package/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts +1 -1
- package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/postgres.test.ts +1 -1
- package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/sqlite.test.ts +1 -1
- package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts +2 -2
- package/src/pkgs/migrations/get-migration.ts +3 -3
- package/src/pkgs/migrations/get-schema/get-schema.ts +2 -2
- package/src/pkgs/migrations/get-schema/index.ts +1 -1
- package/src/pkgs/migrations/migration-builders.ts +2 -2
- package/src/pkgs/migrations/migration-execution.ts +2 -2
- package/src/pkgs/migrations/schema-comparison.ts +5 -4
- package/src/pkgs/results/__tests__/error-class.test.ts +8 -7
- package/src/pkgs/results/core/error-class.ts +31 -43
- package/src/pkgs/results/index.ts +0 -10
- package/src/pkgs/results/orpc-error-handler.ts +137 -0
- package/src/pkgs/results/types.ts +8 -7
- package/src/pkgs/types/context.ts +18 -4
- package/src/pkgs/types/endpoints.ts +3 -5
- package/src/pkgs/types/options.ts +2 -3
- package/src/pkgs/types/plugins.ts +2 -3
- package/src/pkgs/utils/index.ts +1 -0
- package/src/pkgs/utils/logger.ts +38 -0
- package/src/router.ts +8 -0
- package/src/schema/audit-log/table.ts +1 -1
- package/src/schema/consent/table.ts +1 -1
- package/src/schema/consent-policy/table.ts +1 -1
- package/src/schema/consent-purpose/table.ts +1 -1
- package/src/schema/consent-record/table.ts +1 -1
- package/src/schema/definition.ts +2 -2
- package/src/schema/domain/table.ts +1 -1
- package/src/schema/subject/table.ts +1 -1
- package/src/server.ts +130 -0
- package/src/testing/contract-testing.ts +437 -0
- package/src/types/context.ts +1 -1
- package/src/types/index.ts +2 -2
- package/src/types/options.ts +38 -2
- package/src/types/plugins.ts +3 -4
- package/dist/index.cjs +0 -3701
- package/dist/index.d.ts +0 -11
- package/dist/index.d.ts.map +0 -1
- package/dist/init.test.d.ts +0 -2
- package/dist/init.test.d.ts.map +0 -1
- package/dist/integrations/cloudflare.cjs +0 -312
- package/dist/integrations/cloudflare.d.ts +0 -32
- package/dist/integrations/cloudflare.d.ts.map +0 -1
- package/dist/integrations/cloudflare.js +0 -278
- package/dist/integrations/next.cjs +0 -276
- package/dist/integrations/next.d.ts +0 -68
- package/dist/integrations/next.d.ts.map +0 -1
- package/dist/integrations/next.js +0 -239
- package/dist/integrations/node.cjs +0 -257
- package/dist/integrations/node.d.ts +0 -29
- package/dist/integrations/node.d.ts.map +0 -1
- package/dist/integrations/node.js +0 -223
- package/dist/pkgs/api-router/index.d.ts +0 -9
- package/dist/pkgs/api-router/index.d.ts.map +0 -1
- package/dist/pkgs/api-router/utils/define-route.d.ts +0 -87
- package/dist/pkgs/api-router/utils/define-route.d.ts.map +0 -1
- package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts +0 -2
- package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts.map +0 -1
- package/dist/pkgs/logger/__tests__/integration.test.d.ts +0 -2
- package/dist/pkgs/logger/__tests__/integration.test.d.ts.map +0 -1
- package/dist/pkgs/logger/__tests__/log-levels.test.d.ts +0 -2
- package/dist/pkgs/logger/__tests__/log-levels.test.d.ts.map +0 -1
- package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts +0 -2
- package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts.map +0 -1
- package/dist/pkgs/logger/__tests__/result-logging.test.d.ts +0 -2
- package/dist/pkgs/logger/__tests__/result-logging.test.d.ts.map +0 -1
- package/dist/pkgs/logger/__tests__/types.test.d.ts +0 -2
- package/dist/pkgs/logger/__tests__/types.test.d.ts.map +0 -1
- package/dist/pkgs/logger/console-formatter.d.ts +0 -56
- package/dist/pkgs/logger/console-formatter.d.ts.map +0 -1
- package/dist/pkgs/logger/index.cjs +0 -240
- package/dist/pkgs/logger/index.d.ts +0 -35
- package/dist/pkgs/logger/index.d.ts.map +0 -1
- package/dist/pkgs/logger/index.js +0 -185
- package/dist/pkgs/logger/log-levels.d.ts +0 -29
- package/dist/pkgs/logger/log-levels.d.ts.map +0 -1
- package/dist/pkgs/logger/logger-factory.d.ts +0 -42
- package/dist/pkgs/logger/logger-factory.d.ts.map +0 -1
- package/dist/pkgs/logger/result-logging.d.ts +0 -71
- package/dist/pkgs/logger/result-logging.d.ts.map +0 -1
- package/dist/pkgs/logger/telemetry.d.ts +0 -14
- package/dist/pkgs/logger/telemetry.d.ts.map +0 -1
- package/dist/pkgs/logger/types.d.ts +0 -121
- package/dist/pkgs/logger/types.d.ts.map +0 -1
- package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts +0 -2
- package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts.map +0 -1
- package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts +0 -2
- package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts.map +0 -1
- package/dist/pkgs/results/h3-integration.d.ts +0 -52
- package/dist/pkgs/results/h3-integration.d.ts.map +0 -1
- package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts +0 -101
- package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts.map +0 -1
- package/dist/pkgs/results/pipeline/validation-pipeline.d.ts +0 -89
- package/dist/pkgs/results/pipeline/validation-pipeline.d.ts.map +0 -1
- package/dist/response-types.d.ts +0 -19
- package/dist/response-types.d.ts.map +0 -1
- package/dist/routes/__test__/index.test.d.ts +0 -17
- package/dist/routes/__test__/index.test.d.ts.map +0 -1
- package/dist/routes/__test__/set-consent.test.d.ts +0 -2
- package/dist/routes/__test__/set-consent.test.d.ts.map +0 -1
- package/dist/routes/__test__/show-consent-banner.test.d.ts +0 -2
- package/dist/routes/__test__/show-consent-banner.test.d.ts.map +0 -1
- package/dist/routes/__test__/status.test.d.ts +0 -2
- package/dist/routes/__test__/status.test.d.ts.map +0 -1
- package/dist/routes/__test__/verify-consent.test.d.ts +0 -2
- package/dist/routes/__test__/verify-consent.test.d.ts.map +0 -1
- package/dist/routes/index.d.ts +0 -3
- package/dist/routes/index.d.ts.map +0 -1
- package/dist/routes/set-consent.d.ts +0 -89
- package/dist/routes/set-consent.d.ts.map +0 -1
- package/dist/routes/show-consent-banner.d.ts +0 -15
- package/dist/routes/show-consent-banner.d.ts.map +0 -1
- package/dist/routes/status.d.ts +0 -44
- package/dist/routes/status.d.ts.map +0 -1
- package/dist/routes/types.d.ts +0 -7
- package/dist/routes/types.d.ts.map +0 -1
- package/dist/routes/verify-consent.d.ts +0 -38
- package/dist/routes/verify-consent.d.ts.map +0 -1
- package/src/docs/ADVANCED_JSON_HANDLING.md +0 -99
- package/src/docs/neverthrow.md +0 -171
- package/src/index.ts +0 -34
- package/src/init.test.ts +0 -219
- package/src/integrations/cloudflare.ts +0 -269
- package/src/integrations/next.ts +0 -204
- package/src/integrations/node.ts +0 -141
- package/src/pkgs/api-router/index.ts +0 -148
- package/src/pkgs/api-router/types/h3.d.ts +0 -42
- package/src/pkgs/api-router/utils/define-route.ts +0 -410
- package/src/pkgs/logger/README.md +0 -213
- package/src/pkgs/logger/__tests__/console-formatter.test.ts +0 -67
- package/src/pkgs/logger/__tests__/integration.test.ts +0 -184
- package/src/pkgs/logger/__tests__/log-levels.test.ts +0 -77
- package/src/pkgs/logger/__tests__/logger-factory.test.ts +0 -156
- package/src/pkgs/logger/__tests__/result-logging.test.ts +0 -209
- package/src/pkgs/logger/__tests__/types.test.ts +0 -94
- package/src/pkgs/logger/console-formatter.ts +0 -75
- package/src/pkgs/logger/doc.md +0 -569
- package/src/pkgs/logger/index.ts +0 -59
- package/src/pkgs/logger/log-levels.ts +0 -46
- package/src/pkgs/logger/logger-factory.ts +0 -121
- package/src/pkgs/logger/result-logging.ts +0 -134
- package/src/pkgs/logger/telemetry.ts +0 -96
- package/src/pkgs/logger/types.ts +0 -138
- package/src/pkgs/results/__tests__/retrieval-pipeline.test.ts +0 -157
- package/src/pkgs/results/__tests__/validation-pipeline.test.ts +0 -151
- package/src/pkgs/results/h3-integration.ts +0 -142
- package/src/pkgs/results/pipeline/retrieval-pipeline.ts +0 -188
- package/src/pkgs/results/pipeline/validation-pipeline.ts +0 -164
- package/src/plugins/.keep +0 -0
- package/src/response-types.ts +0 -29
- package/src/routes/__test__/index.test.ts +0 -112
- package/src/routes/__test__/set-consent.test.ts +0 -242
- package/src/routes/__test__/show-consent-banner.test.ts +0 -98
- package/src/routes/__test__/status.test.ts +0 -64
- package/src/routes/__test__/verify-consent.test.ts +0 -266
- package/src/routes/index.ts +0 -12
- package/src/routes/set-consent.ts +0 -249
- package/src/routes/show-consent-banner.ts +0 -131
- package/src/routes/status.ts +0 -61
- package/src/routes/types.ts +0 -7
- package/src/routes/verify-consent.ts +0 -206
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { formatMessage } from './console-formatter';
|
|
2
|
-
import { levels, shouldPublishLog } from './log-levels';
|
|
3
|
-
import { withLogSpan } from './telemetry';
|
|
4
|
-
import type { LogEntry, LogLevel, Logger, LoggerOptions } from './types';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Creates a configured logger instance with methods for each log level.
|
|
8
|
-
*
|
|
9
|
-
* @param options - Configuration options for the logger or an existing logger instance
|
|
10
|
-
* @returns An object with methods for each log level
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* // Create a logger that only shows warnings and errors
|
|
15
|
-
* const logger = createLogger({ level: 'warn', appName: 'c15t' });
|
|
16
|
-
*
|
|
17
|
-
* // These will be output
|
|
18
|
-
* logger.error('This is an error');
|
|
19
|
-
* logger.warn('This is a warning');
|
|
20
|
-
*
|
|
21
|
-
* // These will be suppressed
|
|
22
|
-
* logger.info('This info won\'t be shown');
|
|
23
|
-
* logger.debug('This debug message won\'t be shown');
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
* @public
|
|
27
|
-
*/
|
|
28
|
-
export const createLogger = (options?: LoggerOptions | Logger): Logger => {
|
|
29
|
-
// If options is already a Logger instance, return it
|
|
30
|
-
if (
|
|
31
|
-
options &&
|
|
32
|
-
typeof options === 'object' &&
|
|
33
|
-
levels.every((level) => typeof (options as Logger)[level] === 'function')
|
|
34
|
-
) {
|
|
35
|
-
return options as Logger;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Otherwise, treat options as LoggerOptions
|
|
39
|
-
const loggerOptions = options as LoggerOptions;
|
|
40
|
-
const enabled = loggerOptions?.disabled !== true;
|
|
41
|
-
const logLevel = loggerOptions?.level ?? 'error';
|
|
42
|
-
const appName = loggerOptions?.appName ?? 'c15t';
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Internal function that handles the actual logging logic.
|
|
46
|
-
*
|
|
47
|
-
* @param level - The severity level of the log
|
|
48
|
-
* @param message - The message to log
|
|
49
|
-
* @param args - Additional data to include in the log
|
|
50
|
-
*
|
|
51
|
-
* @internal
|
|
52
|
-
*/
|
|
53
|
-
const logFunc = async (
|
|
54
|
-
level: LogLevel,
|
|
55
|
-
message: string,
|
|
56
|
-
args: unknown[] = []
|
|
57
|
-
): Promise<void> => {
|
|
58
|
-
if (!enabled || !shouldPublishLog(logLevel, level)) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
await withLogSpan(level, message, args, async () => {
|
|
63
|
-
const formattedMessage = formatMessage(level, message, appName);
|
|
64
|
-
|
|
65
|
-
if (!loggerOptions || typeof loggerOptions.log !== 'function') {
|
|
66
|
-
if (level === 'error') {
|
|
67
|
-
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
68
|
-
console.error(formattedMessage, ...args);
|
|
69
|
-
} else if (level === 'warn') {
|
|
70
|
-
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
71
|
-
console.warn(formattedMessage, ...args);
|
|
72
|
-
} else if (level === 'info') {
|
|
73
|
-
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
74
|
-
// biome-ignore lint/suspicious/noConsoleLog: Logger implementation
|
|
75
|
-
console.log(formattedMessage, ...args);
|
|
76
|
-
} else if (level === 'debug') {
|
|
77
|
-
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
78
|
-
console.debug(formattedMessage, ...args);
|
|
79
|
-
} else if (level === 'success') {
|
|
80
|
-
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
81
|
-
// biome-ignore lint/suspicious/noConsoleLog: Logger implementation
|
|
82
|
-
console.log(formattedMessage, ...args);
|
|
83
|
-
}
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
loggerOptions.log(level === 'success' ? 'info' : level, message, ...args);
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
return Object.fromEntries(
|
|
92
|
-
levels.map((level) => [
|
|
93
|
-
level,
|
|
94
|
-
(...[message, ...args]: LogEntry) => {
|
|
95
|
-
// Return the promise but don't await it
|
|
96
|
-
return logFunc(level, message, args).catch((error) => {
|
|
97
|
-
// biome-ignore lint/suspicious/noConsole: <explanation>
|
|
98
|
-
console.error('Logger error:', error);
|
|
99
|
-
});
|
|
100
|
-
},
|
|
101
|
-
])
|
|
102
|
-
) as unknown as Logger;
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Default logger instance with standard configuration.
|
|
107
|
-
*
|
|
108
|
-
* @remarks
|
|
109
|
-
* Ready-to-use logger with default settings (logs errors only).
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* ```ts
|
|
113
|
-
* import { logger } from '@doubletie/logger';
|
|
114
|
-
*
|
|
115
|
-
* logger.error('Something went wrong');
|
|
116
|
-
* logger.info('This won\'t be shown with default settings');
|
|
117
|
-
* ```
|
|
118
|
-
*
|
|
119
|
-
* @public
|
|
120
|
-
*/
|
|
121
|
-
export const logger = createLogger();
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { SpanStatusCode } from '@opentelemetry/api';
|
|
2
|
-
import type { Result, ResultAsync } from 'neverthrow';
|
|
3
|
-
import { getTracer } from './telemetry';
|
|
4
|
-
import type { LoggableError } from './types';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Logs any errors in a Result without changing the Result.
|
|
8
|
-
*
|
|
9
|
-
* @remarks
|
|
10
|
-
* This utility function allows logging errors from a Result type without
|
|
11
|
-
* affecting the Result's flow. It uses the mapErr function to extract
|
|
12
|
-
* and log the error if present, then returns the original Result.
|
|
13
|
-
*
|
|
14
|
-
* @typeParam ValueType - The type of the successful value in the Result
|
|
15
|
-
* @typeParam ErrorType - The type of the error in the Result, must extend LoggableError
|
|
16
|
-
*
|
|
17
|
-
* @param result - The Result that may contain an error
|
|
18
|
-
* @param logger - Logger instance with an error method
|
|
19
|
-
* @param message - Optional message prefix for the error
|
|
20
|
-
* @returns The original Result unchanged
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```ts
|
|
24
|
-
* import { logResult } from '@doubletie/logger';
|
|
25
|
-
* import { createLogger } from '@doubletie/logger';
|
|
26
|
-
* import { ok, err } from 'neverthrow';
|
|
27
|
-
*
|
|
28
|
-
* const logger = createLogger();
|
|
29
|
-
* const result = err({ message: 'Failed operation', code: 'OP_FAILED' });
|
|
30
|
-
*
|
|
31
|
-
* // Log the error but continue processing the Result
|
|
32
|
-
* const processedResult = logResult(result, logger);
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* @public
|
|
36
|
-
*/
|
|
37
|
-
export const logResult = <ValueType, ErrorType extends LoggableError>(
|
|
38
|
-
result: Result<ValueType, ErrorType>,
|
|
39
|
-
logger: { error: (message: string, ...args: unknown[]) => void },
|
|
40
|
-
message = 'Error occurred:'
|
|
41
|
-
): Result<ValueType, ErrorType> => {
|
|
42
|
-
const tracer = getTracer();
|
|
43
|
-
const span = tracer.startSpan('log_result');
|
|
44
|
-
|
|
45
|
-
return result.mapErr((error) => {
|
|
46
|
-
span.setAttributes({
|
|
47
|
-
'error.message': error.message,
|
|
48
|
-
'error.code': error.code,
|
|
49
|
-
'error.status': error.status,
|
|
50
|
-
'error.category': error.category,
|
|
51
|
-
'error.has_meta': !!error.meta,
|
|
52
|
-
});
|
|
53
|
-
span.setStatus({
|
|
54
|
-
code: SpanStatusCode.ERROR,
|
|
55
|
-
message: error.message,
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
logger.error(`${message} ${error.message}`, {
|
|
59
|
-
code: error.code,
|
|
60
|
-
status: error.status,
|
|
61
|
-
meta: error.meta,
|
|
62
|
-
category: error.category,
|
|
63
|
-
stack: error.stack,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
span.end();
|
|
67
|
-
return error;
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Logs any errors in a ResultAsync without changing the ResultAsync.
|
|
73
|
-
*
|
|
74
|
-
* @remarks
|
|
75
|
-
* This utility function allows logging errors from a ResultAsync type without
|
|
76
|
-
* affecting the ResultAsync's flow. It uses the mapErr function to extract
|
|
77
|
-
* and log the error if present, then returns the original ResultAsync.
|
|
78
|
-
*
|
|
79
|
-
* @typeParam ValueType - The type of the successful value in the ResultAsync
|
|
80
|
-
* @typeParam ErrorType - The type of the error in the ResultAsync, must extend LoggableError
|
|
81
|
-
*
|
|
82
|
-
* @param resultAsync - The ResultAsync that may contain an error
|
|
83
|
-
* @param logger - Logger instance with an error method
|
|
84
|
-
* @param message - Optional message prefix for the error
|
|
85
|
-
* @returns The original ResultAsync unchanged
|
|
86
|
-
*
|
|
87
|
-
* @example
|
|
88
|
-
* ```ts
|
|
89
|
-
* import { logResultAsync } from '@doubletie/logger';
|
|
90
|
-
* import { createLogger } from '@doubletie/logger';
|
|
91
|
-
* import { okAsync, errAsync } from 'neverthrow';
|
|
92
|
-
*
|
|
93
|
-
* const logger = createLogger();
|
|
94
|
-
* const resultAsync = errAsync({ message: 'Failed async operation', code: 'ASYNC_FAILED' });
|
|
95
|
-
*
|
|
96
|
-
* // Log the error but continue processing the ResultAsync
|
|
97
|
-
* const processedResultAsync = logResultAsync(resultAsync, logger);
|
|
98
|
-
* ```
|
|
99
|
-
*
|
|
100
|
-
* @public
|
|
101
|
-
*/
|
|
102
|
-
export const logResultAsync = <ValueType, ErrorType extends LoggableError>(
|
|
103
|
-
resultAsync: ResultAsync<ValueType, ErrorType>,
|
|
104
|
-
logger: { error: (message: string, ...args: unknown[]) => void },
|
|
105
|
-
message = 'Error occurred:'
|
|
106
|
-
): ResultAsync<ValueType, ErrorType> => {
|
|
107
|
-
const tracer = getTracer();
|
|
108
|
-
const span = tracer.startSpan('log_result_async');
|
|
109
|
-
|
|
110
|
-
return resultAsync.mapErr((error) => {
|
|
111
|
-
span.setAttributes({
|
|
112
|
-
'error.message': error.message,
|
|
113
|
-
'error.code': error.code,
|
|
114
|
-
'error.status': error.status,
|
|
115
|
-
'error.category': error.category,
|
|
116
|
-
'error.has_meta': !!error.meta,
|
|
117
|
-
});
|
|
118
|
-
span.setStatus({
|
|
119
|
-
code: SpanStatusCode.ERROR,
|
|
120
|
-
message: error.message,
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
logger.error(`${message} ${error.message}`, {
|
|
124
|
-
code: error.code,
|
|
125
|
-
status: error.status,
|
|
126
|
-
meta: error.meta,
|
|
127
|
-
category: error.category,
|
|
128
|
-
stack: error.stack,
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
span.end();
|
|
132
|
-
return error;
|
|
133
|
-
});
|
|
134
|
-
};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { SpanStatusCode, trace } from '@opentelemetry/api';
|
|
2
|
-
import type { LogLevel, LoggerOptions } from './types';
|
|
3
|
-
|
|
4
|
-
const LOGGER_TRACER_NAME = '@doubletie/logger';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Maps log levels to OpenTelemetry span status codes
|
|
8
|
-
*/
|
|
9
|
-
const LOG_LEVEL_TO_SPAN_STATUS: Record<LogLevel, SpanStatusCode> = {
|
|
10
|
-
error: SpanStatusCode.ERROR,
|
|
11
|
-
warn: SpanStatusCode.OK,
|
|
12
|
-
info: SpanStatusCode.OK,
|
|
13
|
-
success: SpanStatusCode.OK,
|
|
14
|
-
debug: SpanStatusCode.OK,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Gets or creates a tracer for the logger package
|
|
19
|
-
*/
|
|
20
|
-
export const getTracer = (options?: LoggerOptions) => {
|
|
21
|
-
if (options?.telemetry?.tracer) {
|
|
22
|
-
return options.telemetry.tracer;
|
|
23
|
-
}
|
|
24
|
-
return trace.getTracer(LOGGER_TRACER_NAME);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Creates a span for a log entry and sets appropriate attributes
|
|
29
|
-
*/
|
|
30
|
-
export const createLogSpan = (
|
|
31
|
-
level: LogLevel,
|
|
32
|
-
message: string,
|
|
33
|
-
args: unknown[] = [],
|
|
34
|
-
options?: LoggerOptions
|
|
35
|
-
) => {
|
|
36
|
-
if (options?.telemetry?.disabled) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const tracer = getTracer(options);
|
|
41
|
-
const span = tracer.startSpan('log_entry', {
|
|
42
|
-
attributes: {
|
|
43
|
-
'log.level': level,
|
|
44
|
-
'log.message': message,
|
|
45
|
-
'log.has_args': args.length > 0,
|
|
46
|
-
...(options?.telemetry?.defaultAttributes || {}),
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// Add any structured data as span attributes
|
|
51
|
-
if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
|
|
52
|
-
const data = args[0] as Record<string, unknown>;
|
|
53
|
-
for (const [key, value] of Object.entries(data)) {
|
|
54
|
-
if (value !== undefined && value !== null) {
|
|
55
|
-
span.setAttribute(`log.data.${key}`, String(value));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Set span status based on log level
|
|
61
|
-
span.setStatus({
|
|
62
|
-
code: LOG_LEVEL_TO_SPAN_STATUS[level],
|
|
63
|
-
message: level === 'error' || level === 'warn' ? message : undefined,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
return span;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Wraps a logging operation in a span
|
|
71
|
-
*/
|
|
72
|
-
export const withLogSpan = async <T>(
|
|
73
|
-
level: LogLevel,
|
|
74
|
-
message: string,
|
|
75
|
-
args: unknown[],
|
|
76
|
-
operation: () => T | Promise<T>,
|
|
77
|
-
options?: LoggerOptions
|
|
78
|
-
): Promise<T> => {
|
|
79
|
-
const span = createLogSpan(level, message, args, options);
|
|
80
|
-
if (!span) {
|
|
81
|
-
return operation();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
try {
|
|
85
|
-
const result = await operation();
|
|
86
|
-
return result;
|
|
87
|
-
} catch (error) {
|
|
88
|
-
span.setStatus({
|
|
89
|
-
code: SpanStatusCode.ERROR,
|
|
90
|
-
message: error instanceof Error ? error.message : String(error),
|
|
91
|
-
});
|
|
92
|
-
throw error;
|
|
93
|
-
} finally {
|
|
94
|
-
span.end();
|
|
95
|
-
}
|
|
96
|
-
};
|
package/src/pkgs/logger/types.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import type { Tracer } from '@opentelemetry/api';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Represents the available log severity levels.
|
|
5
|
-
*
|
|
6
|
-
* @remarks
|
|
7
|
-
* These levels determine the priority and visibility of log messages.
|
|
8
|
-
* The order from highest to lowest severity is:
|
|
9
|
-
* error > warn > info > success > debug
|
|
10
|
-
*
|
|
11
|
-
* @public
|
|
12
|
-
*/
|
|
13
|
-
export type LogLevel = 'info' | 'success' | 'warn' | 'error' | 'debug';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Configuration interface for logger instances.
|
|
17
|
-
*
|
|
18
|
-
* @remarks
|
|
19
|
-
* Provides options to customize logger behavior including
|
|
20
|
-
* disabling logs, setting log levels, and custom log handlers.
|
|
21
|
-
*
|
|
22
|
-
* @public
|
|
23
|
-
*/
|
|
24
|
-
export interface LoggerOptions {
|
|
25
|
-
/**
|
|
26
|
-
* Whether logging is disabled.
|
|
27
|
-
*
|
|
28
|
-
* @remarks
|
|
29
|
-
* When true, no logs will be published regardless of log level.
|
|
30
|
-
*/
|
|
31
|
-
disabled?: boolean;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The minimum log level to publish.
|
|
35
|
-
*
|
|
36
|
-
* @remarks
|
|
37
|
-
* Only logs with this level or higher severity will be published.
|
|
38
|
-
* Note that 'success' is treated as 'info' when using custom log handlers.
|
|
39
|
-
*/
|
|
40
|
-
level?: Exclude<LogLevel, 'success'>;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Custom log handler function.
|
|
44
|
-
*
|
|
45
|
-
* @remarks
|
|
46
|
-
* When provided, this function will be called instead of console methods.
|
|
47
|
-
*
|
|
48
|
-
* @param level - The severity level of the log message
|
|
49
|
-
* @param message - The message to log
|
|
50
|
-
* @param args - Additional data to include in the log
|
|
51
|
-
*/
|
|
52
|
-
log?: (level: LogLevel, message: string, ...args: unknown[]) => void;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Custom application name to display in log messages.
|
|
56
|
-
*
|
|
57
|
-
* @remarks
|
|
58
|
-
* When provided, this will override the default app name in the log format.
|
|
59
|
-
*
|
|
60
|
-
* @default '🪢 doubletie'
|
|
61
|
-
*/
|
|
62
|
-
appName?: string;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* OpenTelemetry configuration options
|
|
66
|
-
*/
|
|
67
|
-
telemetry?: {
|
|
68
|
-
/**
|
|
69
|
-
* Custom tracer to use for OpenTelemetry integration
|
|
70
|
-
*/
|
|
71
|
-
tracer?: Tracer;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Whether to disable OpenTelemetry tracing
|
|
75
|
-
*/
|
|
76
|
-
disabled?: boolean;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Additional attributes to add to all spans
|
|
80
|
-
*/
|
|
81
|
-
defaultAttributes?: Record<string, string | number | boolean>;
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Type representing the parameters for log handlers.
|
|
87
|
-
*
|
|
88
|
-
* @remarks
|
|
89
|
-
* This utility type extracts parameter types from the Logger.log function,
|
|
90
|
-
* excluding the first parameter (log level).
|
|
91
|
-
*
|
|
92
|
-
* @internal
|
|
93
|
-
*/
|
|
94
|
-
export type LogEntry = Parameters<NonNullable<LoggerOptions['log']>> extends [
|
|
95
|
-
LogLevel,
|
|
96
|
-
...infer Rest,
|
|
97
|
-
]
|
|
98
|
-
? Rest
|
|
99
|
-
: never;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Type representing a logger instance with methods for each log level.
|
|
103
|
-
*
|
|
104
|
-
* @remarks
|
|
105
|
-
* Each method corresponds to a log level and accepts a message and optional arguments.
|
|
106
|
-
*
|
|
107
|
-
* @public
|
|
108
|
-
*/
|
|
109
|
-
export type Logger = Record<LogLevel, (...params: LogEntry) => void>;
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Base error interface that must be implemented by errors used with the logger.
|
|
113
|
-
*
|
|
114
|
-
* @remarks
|
|
115
|
-
* This interface defines the minimum properties an error object should have
|
|
116
|
-
* to work properly with the logging utilities.
|
|
117
|
-
*
|
|
118
|
-
* @public
|
|
119
|
-
*/
|
|
120
|
-
export interface LoggableError {
|
|
121
|
-
/** The error message */
|
|
122
|
-
message: string;
|
|
123
|
-
|
|
124
|
-
/** Optional error code */
|
|
125
|
-
code?: string | number;
|
|
126
|
-
|
|
127
|
-
/** Optional HTTP status code */
|
|
128
|
-
status?: number;
|
|
129
|
-
|
|
130
|
-
/** Optional additional error metadata */
|
|
131
|
-
meta?: Record<string, unknown>;
|
|
132
|
-
|
|
133
|
-
/** Optional error category */
|
|
134
|
-
category?: string;
|
|
135
|
-
|
|
136
|
-
/** Error stack trace */
|
|
137
|
-
stack?: string;
|
|
138
|
-
}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { DoubleTieError } from '../core/error-class';
|
|
3
|
-
import { ERROR_CODES } from '../core/error-codes';
|
|
4
|
-
import { retrievalPipeline } from '../pipeline/retrieval-pipeline';
|
|
5
|
-
|
|
6
|
-
describe('retrievalPipeline', () => {
|
|
7
|
-
// Setup test data
|
|
8
|
-
const mockUser = { id: '123', name: 'John Doe', email: 'john@example.com' };
|
|
9
|
-
|
|
10
|
-
// Mock fetcher and transformer functions
|
|
11
|
-
let fetcher: ReturnType<typeof vi.fn>;
|
|
12
|
-
let transformer: ReturnType<typeof vi.fn>;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
fetcher = vi.fn();
|
|
16
|
-
transformer = vi.fn().mockImplementation((data) => ({
|
|
17
|
-
...data,
|
|
18
|
-
displayName: `${data.name} <${data.email}>`,
|
|
19
|
-
}));
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should return a function that returns a ResultAsync', () => {
|
|
23
|
-
fetcher.mockResolvedValue(mockUser);
|
|
24
|
-
|
|
25
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
26
|
-
|
|
27
|
-
expect(typeof retrieveUser).toBe('function');
|
|
28
|
-
|
|
29
|
-
const result = retrieveUser();
|
|
30
|
-
expect(result).toHaveProperty('then');
|
|
31
|
-
expect(result).toHaveProperty('map');
|
|
32
|
-
expect(result).toHaveProperty('mapErr');
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should transform data successfully when fetcher resolves', async () => {
|
|
36
|
-
fetcher.mockResolvedValue(mockUser);
|
|
37
|
-
|
|
38
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
39
|
-
const result = await retrieveUser();
|
|
40
|
-
|
|
41
|
-
expect(result.isOk()).toBe(true);
|
|
42
|
-
expect(result._unsafeUnwrap()).toEqual({
|
|
43
|
-
id: '123',
|
|
44
|
-
name: 'John Doe',
|
|
45
|
-
email: 'john@example.com',
|
|
46
|
-
displayName: 'John Doe <john@example.com>',
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// Verify fetcher and transformer were called correctly
|
|
50
|
-
expect(fetcher).toHaveBeenCalledTimes(1);
|
|
51
|
-
expect(transformer).toHaveBeenCalledWith(mockUser);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('should return a not found error when fetcher resolves with null', async () => {
|
|
55
|
-
fetcher.mockResolvedValue(null);
|
|
56
|
-
|
|
57
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
58
|
-
const result = await retrieveUser();
|
|
59
|
-
|
|
60
|
-
expect(result.isErr()).toBe(true);
|
|
61
|
-
const error = result._unsafeUnwrapErr();
|
|
62
|
-
|
|
63
|
-
expect(error).toBeInstanceOf(DoubleTieError);
|
|
64
|
-
expect(error.code).toBe(ERROR_CODES.NOT_FOUND);
|
|
65
|
-
expect(error.statusCode).toBe(404);
|
|
66
|
-
expect(error.message).toBe('Resource not found');
|
|
67
|
-
|
|
68
|
-
// Verify fetcher was called but transformer wasn't
|
|
69
|
-
expect(fetcher).toHaveBeenCalledTimes(1);
|
|
70
|
-
expect(transformer).not.toHaveBeenCalled();
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('should return a not found error when fetcher resolves with undefined', async () => {
|
|
74
|
-
fetcher.mockResolvedValue(undefined);
|
|
75
|
-
|
|
76
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
77
|
-
const result = await retrieveUser();
|
|
78
|
-
|
|
79
|
-
expect(result.isErr()).toBe(true);
|
|
80
|
-
const error = result._unsafeUnwrapErr();
|
|
81
|
-
|
|
82
|
-
expect(error).toBeInstanceOf(DoubleTieError);
|
|
83
|
-
expect(error.code).toBe(ERROR_CODES.NOT_FOUND);
|
|
84
|
-
expect(error.statusCode).toBe(404);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('should return a not found error when fetcher rejects with not found message', async () => {
|
|
88
|
-
const notFoundError = new Error('Resource not found');
|
|
89
|
-
fetcher.mockRejectedValue(notFoundError);
|
|
90
|
-
|
|
91
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
92
|
-
const result = await retrieveUser();
|
|
93
|
-
|
|
94
|
-
expect(result.isErr()).toBe(true);
|
|
95
|
-
const error = result._unsafeUnwrapErr();
|
|
96
|
-
|
|
97
|
-
expect(error).toBeInstanceOf(DoubleTieError);
|
|
98
|
-
expect(error.code).toBe(ERROR_CODES.NOT_FOUND);
|
|
99
|
-
expect(error.statusCode).toBe(404);
|
|
100
|
-
expect(error.cause).toBe(notFoundError);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('should return a bad request error when fetcher rejects with other error', async () => {
|
|
104
|
-
const connectionError = new Error('Database connection failed');
|
|
105
|
-
fetcher.mockRejectedValue(connectionError);
|
|
106
|
-
|
|
107
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
108
|
-
const result = await retrieveUser();
|
|
109
|
-
|
|
110
|
-
expect(result.isErr()).toBe(true);
|
|
111
|
-
const error = result._unsafeUnwrapErr();
|
|
112
|
-
|
|
113
|
-
expect(error).toBeInstanceOf(DoubleTieError);
|
|
114
|
-
expect(error.code).toBe(ERROR_CODES.BAD_REQUEST);
|
|
115
|
-
expect(error.statusCode).toBe(400);
|
|
116
|
-
expect(error.cause).toBe(connectionError);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('should use a custom error code when provided', async () => {
|
|
120
|
-
const notFoundError = new Error('Record not found');
|
|
121
|
-
fetcher.mockRejectedValue(notFoundError);
|
|
122
|
-
|
|
123
|
-
const customErrorCode = 'CUSTOM_NOT_FOUND_ERROR';
|
|
124
|
-
const retrieveUser = retrievalPipeline(
|
|
125
|
-
fetcher,
|
|
126
|
-
transformer,
|
|
127
|
-
customErrorCode
|
|
128
|
-
);
|
|
129
|
-
const result = await retrieveUser();
|
|
130
|
-
|
|
131
|
-
expect(result.isErr()).toBe(true);
|
|
132
|
-
const error = result._unsafeUnwrapErr();
|
|
133
|
-
|
|
134
|
-
expect(error).toBeInstanceOf(DoubleTieError);
|
|
135
|
-
expect(error.code).toBe(customErrorCode);
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('should return a bad request error when transformer throws', async () => {
|
|
139
|
-
fetcher.mockResolvedValue(mockUser);
|
|
140
|
-
|
|
141
|
-
const transformerError = new Error('Transformation failed');
|
|
142
|
-
transformer.mockImplementation(() => {
|
|
143
|
-
throw transformerError;
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
const retrieveUser = retrievalPipeline(fetcher, transformer);
|
|
147
|
-
const result = await retrieveUser();
|
|
148
|
-
|
|
149
|
-
expect(result.isErr()).toBe(true);
|
|
150
|
-
const error = result._unsafeUnwrapErr();
|
|
151
|
-
|
|
152
|
-
expect(error).toBeInstanceOf(DoubleTieError);
|
|
153
|
-
expect(error.code).toBe(ERROR_CODES.BAD_REQUEST);
|
|
154
|
-
expect(error.statusCode).toBe(400);
|
|
155
|
-
expect(error.cause).toBe(transformerError);
|
|
156
|
-
});
|
|
157
|
-
});
|