@fade_networker/vono 0.1.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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/client/composables/navigateTo.d.ts +37 -0
- package/dist/client/composables/navigateTo.d.ts.map +1 -0
- package/dist/client/composables/navigateTo.js +56 -0
- package/dist/client/composables/navigateTo.js.map +1 -0
- package/dist/client/composables/useAsyncData.d.ts +35 -0
- package/dist/client/composables/useAsyncData.d.ts.map +1 -0
- package/dist/client/composables/useAsyncData.js +55 -0
- package/dist/client/composables/useAsyncData.js.map +1 -0
- package/dist/client/composables/useCookie.d.ts +33 -0
- package/dist/client/composables/useCookie.d.ts.map +1 -0
- package/dist/client/composables/useCookie.js +61 -0
- package/dist/client/composables/useCookie.js.map +1 -0
- package/dist/client/composables/useFormErrors.d.ts +34 -0
- package/dist/client/composables/useFormErrors.d.ts.map +1 -0
- package/dist/client/composables/useFormErrors.js +59 -0
- package/dist/client/composables/useFormErrors.js.map +1 -0
- package/dist/client/composables/useRouteRules.d.ts +26 -0
- package/dist/client/composables/useRouteRules.d.ts.map +1 -0
- package/dist/client/composables/useRouteRules.js +44 -0
- package/dist/client/composables/useRouteRules.js.map +1 -0
- package/dist/client/composables/useSeo.d.ts +35 -0
- package/dist/client/composables/useSeo.d.ts.map +1 -0
- package/dist/client/composables/useSeo.js +62 -0
- package/dist/client/composables/useSeo.js.map +1 -0
- package/dist/client/composables/useState.d.ts +35 -0
- package/dist/client/composables/useState.d.ts.map +1 -0
- package/dist/client/composables/useState.js +73 -0
- package/dist/client/composables/useState.js.map +1 -0
- package/dist/client/composables/useVonoFetch.d.ts +24 -0
- package/dist/client/composables/useVonoFetch.d.ts.map +1 -0
- package/dist/client/composables/useVonoFetch.js +49 -0
- package/dist/client/composables/useVonoFetch.js.map +1 -0
- package/dist/client/index.d.ts +19 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/layouts/index.d.ts +12 -0
- package/dist/client/layouts/index.d.ts.map +1 -0
- package/dist/client/layouts/index.js +11 -0
- package/dist/client/layouts/index.js.map +1 -0
- package/dist/client/layouts/resolve-layout.d.ts +23 -0
- package/dist/client/layouts/resolve-layout.d.ts.map +1 -0
- package/dist/client/layouts/resolve-layout.js +31 -0
- package/dist/client/layouts/resolve-layout.js.map +1 -0
- package/dist/client/nuxt-ui/index.d.ts +11 -0
- package/dist/client/nuxt-ui/index.d.ts.map +1 -0
- package/dist/client/nuxt-ui/index.js +11 -0
- package/dist/client/nuxt-ui/index.js.map +1 -0
- package/dist/client/nuxt-ui/setup.d.ts +27 -0
- package/dist/client/nuxt-ui/setup.d.ts.map +1 -0
- package/dist/client/nuxt-ui/setup.js +40 -0
- package/dist/client/nuxt-ui/setup.js.map +1 -0
- package/dist/client/pinia-hydration.d.ts +35 -0
- package/dist/client/pinia-hydration.d.ts.map +1 -0
- package/dist/client/pinia-hydration.js +48 -0
- package/dist/client/pinia-hydration.js.map +1 -0
- package/dist/config/define-config.d.ts +25 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +63 -0
- package/dist/config/define-config.js.map +1 -0
- package/dist/config/env-helpers.d.ts +30 -0
- package/dist/config/env-helpers.d.ts.map +1 -0
- package/dist/config/env-helpers.js +50 -0
- package/dist/config/env-helpers.js.map +1 -0
- package/dist/config/use-config.d.ts +31 -0
- package/dist/config/use-config.d.ts.map +1 -0
- package/dist/config/use-config.js +49 -0
- package/dist/config/use-config.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/module-system/define-module.d.ts +82 -0
- package/dist/module-system/define-module.d.ts.map +1 -0
- package/dist/module-system/define-module.js +37 -0
- package/dist/module-system/define-module.js.map +1 -0
- package/dist/module-system/index.d.ts +14 -0
- package/dist/module-system/index.d.ts.map +1 -0
- package/dist/module-system/index.js +13 -0
- package/dist/module-system/index.js.map +1 -0
- package/dist/module-system/module-registry.d.ts +37 -0
- package/dist/module-system/module-registry.d.ts.map +1 -0
- package/dist/module-system/module-registry.js +68 -0
- package/dist/module-system/module-registry.js.map +1 -0
- package/dist/module-system/vite-integration.d.ts +23 -0
- package/dist/module-system/vite-integration.d.ts.map +1 -0
- package/dist/module-system/vite-integration.js +67 -0
- package/dist/module-system/vite-integration.js.map +1 -0
- package/dist/server/app-template.d.ts +47 -0
- package/dist/server/app-template.d.ts.map +1 -0
- package/dist/server/app-template.js +224 -0
- package/dist/server/app-template.js.map +1 -0
- package/dist/server/auth/gates.d.ts +79 -0
- package/dist/server/auth/gates.d.ts.map +1 -0
- package/dist/server/auth/gates.js +125 -0
- package/dist/server/auth/gates.js.map +1 -0
- package/dist/server/auth/index.d.ts +12 -0
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +12 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/server/dto/query.dto.d.ts +44 -0
- package/dist/server/dto/query.dto.d.ts.map +1 -0
- package/dist/server/dto/query.dto.js +86 -0
- package/dist/server/dto/query.dto.js.map +1 -0
- package/dist/server/email/define-email.d.ts +41 -0
- package/dist/server/email/define-email.d.ts.map +1 -0
- package/dist/server/email/define-email.js +50 -0
- package/dist/server/email/define-email.js.map +1 -0
- package/dist/server/email/drivers/console.d.ts +16 -0
- package/dist/server/email/drivers/console.d.ts.map +1 -0
- package/dist/server/email/drivers/console.js +22 -0
- package/dist/server/email/drivers/console.js.map +1 -0
- package/dist/server/email/drivers/postmark.d.ts +19 -0
- package/dist/server/email/drivers/postmark.d.ts.map +1 -0
- package/dist/server/email/drivers/postmark.js +39 -0
- package/dist/server/email/drivers/postmark.js.map +1 -0
- package/dist/server/email/drivers/resend.d.ts +19 -0
- package/dist/server/email/drivers/resend.d.ts.map +1 -0
- package/dist/server/email/drivers/resend.js +37 -0
- package/dist/server/email/drivers/resend.js.map +1 -0
- package/dist/server/email/drivers/smtp.d.ts +26 -0
- package/dist/server/email/drivers/smtp.d.ts.map +1 -0
- package/dist/server/email/drivers/smtp.js +37 -0
- package/dist/server/email/drivers/smtp.js.map +1 -0
- package/dist/server/email/send-email.d.ts +42 -0
- package/dist/server/email/send-email.d.ts.map +1 -0
- package/dist/server/email/send-email.js +69 -0
- package/dist/server/email/send-email.js.map +1 -0
- package/dist/server/env-validation/define-env.d.ts +45 -0
- package/dist/server/env-validation/define-env.d.ts.map +1 -0
- package/dist/server/env-validation/define-env.js +41 -0
- package/dist/server/env-validation/define-env.js.map +1 -0
- package/dist/server/env-validation/index.d.ts +13 -0
- package/dist/server/env-validation/index.d.ts.map +1 -0
- package/dist/server/env-validation/index.js +12 -0
- package/dist/server/env-validation/index.js.map +1 -0
- package/dist/server/env-validation/validate-at-startup.d.ts +29 -0
- package/dist/server/env-validation/validate-at-startup.d.ts.map +1 -0
- package/dist/server/env-validation/validate-at-startup.js +61 -0
- package/dist/server/env-validation/validate-at-startup.js.map +1 -0
- package/dist/server/i18n/composables/useI18n.d.ts +39 -0
- package/dist/server/i18n/composables/useI18n.d.ts.map +1 -0
- package/dist/server/i18n/composables/useI18n.js +93 -0
- package/dist/server/i18n/composables/useI18n.js.map +1 -0
- package/dist/server/i18n/detect-locale.d.ts +22 -0
- package/dist/server/i18n/detect-locale.d.ts.map +1 -0
- package/dist/server/i18n/detect-locale.js +42 -0
- package/dist/server/i18n/detect-locale.js.map +1 -0
- package/dist/server/i18n/index.d.ts +14 -0
- package/dist/server/i18n/index.d.ts.map +1 -0
- package/dist/server/i18n/index.js +13 -0
- package/dist/server/i18n/index.js.map +1 -0
- package/dist/server/i18n/translate.d.ts +38 -0
- package/dist/server/i18n/translate.d.ts.map +1 -0
- package/dist/server/i18n/translate.js +83 -0
- package/dist/server/i18n/translate.js.map +1 -0
- package/dist/server/index.d.ts +40 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +36 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/jobs/define-job.d.ts +50 -0
- package/dist/server/jobs/define-job.d.ts.map +1 -0
- package/dist/server/jobs/define-job.js +32 -0
- package/dist/server/jobs/define-job.js.map +1 -0
- package/dist/server/jobs/index.d.ts +13 -0
- package/dist/server/jobs/index.d.ts.map +1 -0
- package/dist/server/jobs/index.js +12 -0
- package/dist/server/jobs/index.js.map +1 -0
- package/dist/server/jobs/runner.d.ts +37 -0
- package/dist/server/jobs/runner.d.ts.map +1 -0
- package/dist/server/jobs/runner.js +75 -0
- package/dist/server/jobs/runner.js.map +1 -0
- package/dist/server/middleware/configProvider.d.ts +26 -0
- package/dist/server/middleware/configProvider.d.ts.map +1 -0
- package/dist/server/middleware/configProvider.js +78 -0
- package/dist/server/middleware/configProvider.js.map +1 -0
- package/dist/server/middleware/dbProvider.d.ts +27 -0
- package/dist/server/middleware/dbProvider.d.ts.map +1 -0
- package/dist/server/middleware/dbProvider.js +66 -0
- package/dist/server/middleware/dbProvider.js.map +1 -0
- package/dist/server/middleware/rateLimiter.d.ts +74 -0
- package/dist/server/middleware/rateLimiter.d.ts.map +1 -0
- package/dist/server/middleware/rateLimiter.js +164 -0
- package/dist/server/middleware/rateLimiter.js.map +1 -0
- package/dist/server/middleware/validator.d.ts +57 -0
- package/dist/server/middleware/validator.d.ts.map +1 -0
- package/dist/server/middleware/validator.js +128 -0
- package/dist/server/middleware/validator.js.map +1 -0
- package/dist/server/openapi/append-tag.d.ts +21 -0
- package/dist/server/openapi/append-tag.d.ts.map +1 -0
- package/dist/server/openapi/append-tag.js +54 -0
- package/dist/server/openapi/append-tag.js.map +1 -0
- package/dist/server/openapi/index.d.ts +13 -0
- package/dist/server/openapi/index.d.ts.map +1 -0
- package/dist/server/openapi/index.js +12 -0
- package/dist/server/openapi/index.js.map +1 -0
- package/dist/server/openapi/spec-template.d.ts +45 -0
- package/dist/server/openapi/spec-template.d.ts.map +1 -0
- package/dist/server/openapi/spec-template.js +132 -0
- package/dist/server/openapi/spec-template.js.map +1 -0
- package/dist/server/renderer.d.ts +62 -0
- package/dist/server/renderer.d.ts.map +1 -0
- package/dist/server/renderer.js +115 -0
- package/dist/server/renderer.js.map +1 -0
- package/dist/server/resolvers/cache-driver.d.ts +22 -0
- package/dist/server/resolvers/cache-driver.d.ts.map +1 -0
- package/dist/server/resolvers/cache-driver.js +29 -0
- package/dist/server/resolvers/cache-driver.js.map +1 -0
- package/dist/server/resolvers/index.d.ts +17 -0
- package/dist/server/resolvers/index.d.ts.map +1 -0
- package/dist/server/resolvers/index.js +14 -0
- package/dist/server/resolvers/index.js.map +1 -0
- package/dist/server/resolvers/queue-driver.d.ts +25 -0
- package/dist/server/resolvers/queue-driver.d.ts.map +1 -0
- package/dist/server/resolvers/queue-driver.js +44 -0
- package/dist/server/resolvers/queue-driver.js.map +1 -0
- package/dist/server/resolvers/storage-driver.d.ts +24 -0
- package/dist/server/resolvers/storage-driver.d.ts.map +1 -0
- package/dist/server/resolvers/storage-driver.js +38 -0
- package/dist/server/resolvers/storage-driver.js.map +1 -0
- package/dist/server/resolvers/validate-compatibility.d.ts +22 -0
- package/dist/server/resolvers/validate-compatibility.d.ts.map +1 -0
- package/dist/server/resolvers/validate-compatibility.js +83 -0
- package/dist/server/resolvers/validate-compatibility.js.map +1 -0
- package/dist/server/resources/base-resource.d.ts +57 -0
- package/dist/server/resources/base-resource.d.ts.map +1 -0
- package/dist/server/resources/base-resource.js +74 -0
- package/dist/server/resources/base-resource.js.map +1 -0
- package/dist/server/route-rules.d.ts +45 -0
- package/dist/server/route-rules.d.ts.map +1 -0
- package/dist/server/route-rules.js +66 -0
- package/dist/server/route-rules.js.map +1 -0
- package/dist/server/seo.d.ts +58 -0
- package/dist/server/seo.d.ts.map +1 -0
- package/dist/server/seo.js +85 -0
- package/dist/server/seo.js.map +1 -0
- package/dist/server/storage/drivers/bunny.d.ts +33 -0
- package/dist/server/storage/drivers/bunny.d.ts.map +1 -0
- package/dist/server/storage/drivers/bunny.js +70 -0
- package/dist/server/storage/drivers/bunny.js.map +1 -0
- package/dist/server/storage/drivers/cloudinary.d.ts +30 -0
- package/dist/server/storage/drivers/cloudinary.d.ts.map +1 -0
- package/dist/server/storage/drivers/cloudinary.js +86 -0
- package/dist/server/storage/drivers/cloudinary.js.map +1 -0
- package/dist/server/storage/drivers/local.d.ts +28 -0
- package/dist/server/storage/drivers/local.d.ts.map +1 -0
- package/dist/server/storage/drivers/local.js +57 -0
- package/dist/server/storage/drivers/local.js.map +1 -0
- package/dist/server/storage/drivers/r2.d.ts +32 -0
- package/dist/server/storage/drivers/r2.d.ts.map +1 -0
- package/dist/server/storage/drivers/r2.js +70 -0
- package/dist/server/storage/drivers/r2.js.map +1 -0
- package/dist/server/storage/drivers/s3.d.ts +29 -0
- package/dist/server/storage/drivers/s3.d.ts.map +1 -0
- package/dist/server/storage/drivers/s3.js +68 -0
- package/dist/server/storage/drivers/s3.js.map +1 -0
- package/dist/server/storage/index.d.ts +17 -0
- package/dist/server/storage/index.d.ts.map +1 -0
- package/dist/server/storage/index.js +16 -0
- package/dist/server/storage/index.js.map +1 -0
- package/dist/server/storage/types.d.ts +70 -0
- package/dist/server/storage/types.d.ts.map +1 -0
- package/dist/server/storage/types.js +11 -0
- package/dist/server/storage/types.js.map +1 -0
- package/dist/server/storage/use-storage.d.ts +54 -0
- package/dist/server/storage/use-storage.d.ts.map +1 -0
- package/dist/server/storage/use-storage.js +150 -0
- package/dist/server/storage/use-storage.js.map +1 -0
- package/dist/server/stream-renderer.d.ts +49 -0
- package/dist/server/stream-renderer.d.ts.map +1 -0
- package/dist/server/stream-renderer.js +89 -0
- package/dist/server/stream-renderer.js.map +1 -0
- package/dist/server/templates/health.routes.d.ts +22 -0
- package/dist/server/templates/health.routes.d.ts.map +1 -0
- package/dist/server/templates/health.routes.js +28 -0
- package/dist/server/templates/health.routes.js.map +1 -0
- package/dist/server/utils/storage-url.d.ts +36 -0
- package/dist/server/utils/storage-url.d.ts.map +1 -0
- package/dist/server/utils/storage-url.js +53 -0
- package/dist/server/utils/storage-url.js.map +1 -0
- package/dist/shared/utils/autoRoutes.d.ts +22 -0
- package/dist/shared/utils/autoRoutes.d.ts.map +1 -0
- package/dist/shared/utils/autoRoutes.js +29 -0
- package/dist/shared/utils/autoRoutes.js.map +1 -0
- package/dist/shared/utils/id.d.ts +25 -0
- package/dist/shared/utils/id.d.ts.map +1 -0
- package/dist/shared/utils/id.js +29 -0
- package/dist/shared/utils/id.js.map +1 -0
- package/dist/shared/utils/logger.d.ts +33 -0
- package/dist/shared/utils/logger.d.ts.map +1 -0
- package/dist/shared/utils/logger.js +65 -0
- package/dist/shared/utils/logger.js.map +1 -0
- package/dist/shared/utils/mappers.d.ts +23 -0
- package/dist/shared/utils/mappers.d.ts.map +1 -0
- package/dist/shared/utils/mappers.js +37 -0
- package/dist/shared/utils/mappers.js.map +1 -0
- package/dist/shared/utils/pagination.d.ts +26 -0
- package/dist/shared/utils/pagination.d.ts.map +1 -0
- package/dist/shared/utils/pagination.js +28 -0
- package/dist/shared/utils/pagination.js.map +1 -0
- package/dist/shared/utils/response.d.ts +38 -0
- package/dist/shared/utils/response.d.ts.map +1 -0
- package/dist/shared/utils/response.js +46 -0
- package/dist/shared/utils/response.js.map +1 -0
- package/dist/shared/utils/softDeletes.d.ts +90 -0
- package/dist/shared/utils/softDeletes.d.ts.map +1 -0
- package/dist/shared/utils/softDeletes.js +72 -0
- package/dist/shared/utils/softDeletes.js.map +1 -0
- package/dist/types/index.d.ts +191 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/vite/index.d.ts +30 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +218 -0
- package/dist/vite/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Generate a UUID v4 string using the Web Crypto API.
|
|
12
|
+
* Works on all runtimes: Node.js, Bun, Deno, Cloudflare Workers.
|
|
13
|
+
*
|
|
14
|
+
* Property 14: returned value matches UUID v4 pattern
|
|
15
|
+
* xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
|
16
|
+
*/
|
|
17
|
+
export function generateId() {
|
|
18
|
+
return crypto.randomUUID();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate a prefixed ID in the format `<prefix>_<uuid>`.
|
|
22
|
+
* e.g. prefixedId('usr') → 'usr_550e8400-e29b-41d4-a716-446655440000'
|
|
23
|
+
*
|
|
24
|
+
* Property 15: prefixedId(prefix).split('_')[0] === prefix
|
|
25
|
+
*/
|
|
26
|
+
export function prefixedId(prefix) {
|
|
27
|
+
return `${prefix}_${generateId()}`;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../../src/shared/utils/id.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,GAAG,MAAM,IAAI,UAAU,EAAE,EAAE,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
11
|
+
export interface LogEntry {
|
|
12
|
+
level: LogLevel;
|
|
13
|
+
message: string;
|
|
14
|
+
timestamp: string;
|
|
15
|
+
context?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Structured logger — replaces raw console.* calls.
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* import { Logger } from 'vono/server'
|
|
22
|
+
* Logger.info('User created', { userId: '123' })
|
|
23
|
+
* Logger.error('DB connection failed', { error: err.message })
|
|
24
|
+
*/
|
|
25
|
+
export declare class Logger {
|
|
26
|
+
private static format;
|
|
27
|
+
private static write;
|
|
28
|
+
static debug(message: string, context?: Record<string, unknown>): void;
|
|
29
|
+
static info(message: string, context?: Record<string, unknown>): void;
|
|
30
|
+
static warn(message: string, context?: Record<string, unknown>): void;
|
|
31
|
+
static error(message: string, context?: Record<string, unknown>): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,MAAM;IASrB,OAAO,CAAC,MAAM,CAAC,KAAK;IA2BpB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAItE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIrE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIrE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAGvE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Structured logger — replaces raw console.* calls.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* import { Logger } from 'vono/server'
|
|
15
|
+
* Logger.info('User created', { userId: '123' })
|
|
16
|
+
* Logger.error('DB connection failed', { error: err.message })
|
|
17
|
+
*/
|
|
18
|
+
export class Logger {
|
|
19
|
+
static format(level, message, context) {
|
|
20
|
+
return {
|
|
21
|
+
level,
|
|
22
|
+
message,
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
...(context ? { context } : {}),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
static write(level, message, context) {
|
|
28
|
+
const entry = Logger.format(level, message, context);
|
|
29
|
+
const output = JSON.stringify(entry);
|
|
30
|
+
// Use the underlying console methods — this is the ONE place in the
|
|
31
|
+
// codebase where console.* is allowed (the logger itself).
|
|
32
|
+
// All other code must use Logger instead.
|
|
33
|
+
switch (level) {
|
|
34
|
+
case 'debug':
|
|
35
|
+
// eslint-disable-next-line no-console
|
|
36
|
+
console.debug(output);
|
|
37
|
+
break;
|
|
38
|
+
case 'info':
|
|
39
|
+
// eslint-disable-next-line no-console
|
|
40
|
+
console.info(output);
|
|
41
|
+
break;
|
|
42
|
+
case 'warn':
|
|
43
|
+
// eslint-disable-next-line no-console
|
|
44
|
+
console.warn(output);
|
|
45
|
+
break;
|
|
46
|
+
case 'error':
|
|
47
|
+
// eslint-disable-next-line no-console
|
|
48
|
+
console.error(output);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static debug(message, context) {
|
|
53
|
+
Logger.write('debug', message, context);
|
|
54
|
+
}
|
|
55
|
+
static info(message, context) {
|
|
56
|
+
Logger.write('info', message, context);
|
|
57
|
+
}
|
|
58
|
+
static warn(message, context) {
|
|
59
|
+
Logger.write('warn', message, context);
|
|
60
|
+
}
|
|
61
|
+
static error(message, context) {
|
|
62
|
+
Logger.write('error', message, context);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/shared/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH;;;;;;;GAOG;AACH,MAAM,OAAO,MAAM;IACT,MAAM,CAAC,MAAM,CAAC,KAAe,EAAE,OAAe,EAAE,OAAiC;QACvF,OAAO;YACL,KAAK;YACL,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAA;IACH,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,KAAe,EAAE,OAAe,EAAE,OAAiC;QACtF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAEpC,oEAAoE;QACpE,2DAA2D;QAC3D,0CAA0C;QAC1C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACrB,MAAK;YACP,KAAK,MAAM;gBACT,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACpB,MAAK;YACP,KAAK,MAAM;gBACT,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACpB,MAAK;YACP,KAAK,OAAO;gBACV,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACrB,MAAK;QACT,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,OAAiC;QAC7D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,OAAiC;QAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,OAAiC;QAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,OAAiC;QAC7D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Convert a single snake_case string to camelCase.
|
|
12
|
+
* e.g. "user_id" → "userId", "created_at" → "createdAt"
|
|
13
|
+
*/
|
|
14
|
+
export declare function snakeToCamel(str: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Recursively convert all snake_case keys in a plain object (or array)
|
|
17
|
+
* to camelCase. Idempotent — applying twice yields the same result.
|
|
18
|
+
*
|
|
19
|
+
* Property 7: toCamel(toCamel(obj)) === toCamel(obj)
|
|
20
|
+
* Property 8: no snake_case keys remain at any nesting level
|
|
21
|
+
*/
|
|
22
|
+
export declare function toCamel<T>(obj: T): T;
|
|
23
|
+
//# sourceMappingURL=mappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/mappers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAcpC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Convert a single snake_case string to camelCase.
|
|
12
|
+
* e.g. "user_id" → "userId", "created_at" → "createdAt"
|
|
13
|
+
*/
|
|
14
|
+
export function snakeToCamel(str) {
|
|
15
|
+
return str.replace(/_([a-z])/g, (_, char) => char.toUpperCase());
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Recursively convert all snake_case keys in a plain object (or array)
|
|
19
|
+
* to camelCase. Idempotent — applying twice yields the same result.
|
|
20
|
+
*
|
|
21
|
+
* Property 7: toCamel(toCamel(obj)) === toCamel(obj)
|
|
22
|
+
* Property 8: no snake_case keys remain at any nesting level
|
|
23
|
+
*/
|
|
24
|
+
export function toCamel(obj) {
|
|
25
|
+
if (Array.isArray(obj)) {
|
|
26
|
+
return obj.map((item) => toCamel(item));
|
|
27
|
+
}
|
|
28
|
+
if (obj !== null && typeof obj === 'object' && !(obj instanceof Date)) {
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
31
|
+
result[snakeToCamel(key)] = toCamel(value);
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../src/shared/utils/mappers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAI,GAAM;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAiB,CAAA;IACzD,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,MAAW,CAAA;IACpB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
export interface PaginationMeta {
|
|
11
|
+
page: number;
|
|
12
|
+
page_size: number;
|
|
13
|
+
total_items: number;
|
|
14
|
+
total_pages: number;
|
|
15
|
+
has_next: boolean;
|
|
16
|
+
has_prev: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a standard pagination meta object.
|
|
20
|
+
*
|
|
21
|
+
* @param page - Current page number (1-indexed)
|
|
22
|
+
* @param limit - Number of items per page
|
|
23
|
+
* @param total - Total number of items across all pages
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildPaginationMeta(page: number, limit: number, total: number): PaginationMeta;
|
|
26
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,cAAc,CAUhB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Build a standard pagination meta object.
|
|
12
|
+
*
|
|
13
|
+
* @param page - Current page number (1-indexed)
|
|
14
|
+
* @param limit - Number of items per page
|
|
15
|
+
* @param total - Total number of items across all pages
|
|
16
|
+
*/
|
|
17
|
+
export function buildPaginationMeta(page, limit, total) {
|
|
18
|
+
const total_pages = limit > 0 ? Math.ceil(total / limit) : 0;
|
|
19
|
+
return {
|
|
20
|
+
page,
|
|
21
|
+
page_size: limit,
|
|
22
|
+
total_items: total,
|
|
23
|
+
total_pages,
|
|
24
|
+
has_next: page < total_pages,
|
|
25
|
+
has_prev: page > 1,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/shared/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,KAAa,EACb,KAAa;IAEb,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,WAAW;QACX,QAAQ,EAAE,IAAI,GAAG,WAAW;QAC5B,QAAQ,EAAE,IAAI,GAAG,CAAC;KACnB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
export interface ApiResponseBody<T = unknown> {
|
|
11
|
+
success: boolean;
|
|
12
|
+
message: string;
|
|
13
|
+
data?: T;
|
|
14
|
+
errors?: Record<string, string> | string[];
|
|
15
|
+
}
|
|
16
|
+
export declare class ApiResponse {
|
|
17
|
+
/**
|
|
18
|
+
* Return a successful response body.
|
|
19
|
+
* @example return c.json(ApiResponse.success(plans, 'Plans loaded'))
|
|
20
|
+
*/
|
|
21
|
+
static success<T>(data: T, message?: string): ApiResponseBody<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Return a failure response body.
|
|
24
|
+
* @example return c.json(ApiResponse.failure('Not found'), 404)
|
|
25
|
+
*/
|
|
26
|
+
static failure(message?: string, errors?: Record<string, string> | string[]): ApiResponseBody<null>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Shorthand for ApiResponse.success(data, message)
|
|
30
|
+
* @example return c.json(success('Plans loaded', plans))
|
|
31
|
+
*/
|
|
32
|
+
export declare function success<T>(message: string, data: T): ApiResponseBody<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Shorthand for ApiResponse.failure(message, errors)
|
|
35
|
+
* @example return c.json(error('Not found'), 404)
|
|
36
|
+
*/
|
|
37
|
+
export declare function error(message: string, errors?: Record<string, string> | string[]): ApiResponseBody<null>;
|
|
38
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/response.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;CAC3C;AAID,qBAAa,WAAW;IACtB;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,SAAY,GAAG,eAAe,CAAC,CAAC,CAAC;IAInE;;;OAGG;IACH,MAAM,CAAC,OAAO,CACZ,OAAO,SAAyB,EAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,GACzC,eAAe,CAAC,IAAI,CAAC;CAOzB;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,GACzC,eAAe,CAAC,IAAI,CAAC,CAEvB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
// ─── Class — primary pattern ────────────────────────────────────────
|
|
11
|
+
export class ApiResponse {
|
|
12
|
+
/**
|
|
13
|
+
* Return a successful response body.
|
|
14
|
+
* @example return c.json(ApiResponse.success(plans, 'Plans loaded'))
|
|
15
|
+
*/
|
|
16
|
+
static success(data, message = 'Success') {
|
|
17
|
+
return { success: true, message, data };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Return a failure response body.
|
|
21
|
+
* @example return c.json(ApiResponse.failure('Not found'), 404)
|
|
22
|
+
*/
|
|
23
|
+
static failure(message = 'Something went wrong', errors) {
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
message,
|
|
27
|
+
...(errors !== undefined ? { errors } : {}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// ─── Convenience aliases ────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Shorthand for ApiResponse.success(data, message)
|
|
34
|
+
* @example return c.json(success('Plans loaded', plans))
|
|
35
|
+
*/
|
|
36
|
+
export function success(message, data) {
|
|
37
|
+
return ApiResponse.success(data, message);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Shorthand for ApiResponse.failure(message, errors)
|
|
41
|
+
* @example return c.json(error('Not found'), 404)
|
|
42
|
+
*/
|
|
43
|
+
export function error(message, errors) {
|
|
44
|
+
return ApiResponse.failure(message, errors);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/shared/utils/response.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,uEAAuE;AAEvE,MAAM,OAAO,WAAW;IACtB;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAI,IAAO,EAAE,OAAO,GAAG,SAAS;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACzC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,OAAO,CACZ,OAAO,GAAG,sBAAsB,EAChC,MAA0C;QAE1C,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAA;IACH,CAAC;CACF;AAED,uEAAuE;AAEvE;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAI,OAAe,EAAE,IAAO;IACjD,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CACnB,OAAe,EACf,MAA0C;IAE1C,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Soft delete helpers for Drizzle ORM.
|
|
12
|
+
*
|
|
13
|
+
* These functions return Drizzle SQL conditions for use in WHERE clauses.
|
|
14
|
+
* They are designed to be composable with Drizzle's and()/or() operators.
|
|
15
|
+
*
|
|
16
|
+
* Property 6: withSoftDeletes then withTrashed override — applying
|
|
17
|
+
* withSoftDeletes and then withTrashed returns the same result as
|
|
18
|
+
* withTrashed alone (withTrashed overrides the soft-delete filter).
|
|
19
|
+
*/
|
|
20
|
+
/** Any Drizzle table that has a deletedAt column */
|
|
21
|
+
export interface SoftDeletableTable {
|
|
22
|
+
deletedAt: unknown;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns a condition that excludes soft-deleted records.
|
|
26
|
+
* Use in WHERE clauses: .where(withSoftDeletes(table))
|
|
27
|
+
*
|
|
28
|
+
* Caller must pass the drizzle-orm isNull function to avoid a hard
|
|
29
|
+
* dependency on drizzle-orm in the core vono package.
|
|
30
|
+
*/
|
|
31
|
+
export declare function withSoftDeletes(table: SoftDeletableTable, isNull: (col: unknown) => unknown): unknown;
|
|
32
|
+
/**
|
|
33
|
+
* Returns a condition that includes ONLY soft-deleted records.
|
|
34
|
+
* Use in WHERE clauses: .where(onlyTrashed(table))
|
|
35
|
+
*/
|
|
36
|
+
export declare function onlyTrashed(table: SoftDeletableTable, isNotNull: (col: unknown) => unknown): unknown;
|
|
37
|
+
/**
|
|
38
|
+
* Returns undefined — no filter applied, includes all records.
|
|
39
|
+
* Use when you want to override withSoftDeletes.
|
|
40
|
+
*
|
|
41
|
+
* Property 6: withTrashed() overrides withSoftDeletes — returns undefined
|
|
42
|
+
* so no deleted_at filter is applied.
|
|
43
|
+
*/
|
|
44
|
+
export declare function withTrashed(): undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Soft-delete records matching the condition.
|
|
47
|
+
* Sets deleted_at to the current timestamp.
|
|
48
|
+
*
|
|
49
|
+
* @returns Array of affected record IDs
|
|
50
|
+
*/
|
|
51
|
+
export declare function softDelete<T extends {
|
|
52
|
+
id: unknown;
|
|
53
|
+
}>(db: {
|
|
54
|
+
update: (table: unknown) => {
|
|
55
|
+
set: (values: unknown) => {
|
|
56
|
+
where: (condition: unknown) => {
|
|
57
|
+
returning: (cols: unknown) => Promise<T[]>;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
}, table: SoftDeletableTable & {
|
|
62
|
+
id: unknown;
|
|
63
|
+
}, condition: unknown): Promise<T[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Permanently delete records matching the condition.
|
|
66
|
+
*
|
|
67
|
+
* @returns Array of affected record IDs
|
|
68
|
+
*/
|
|
69
|
+
export declare function forceDelete<T extends {
|
|
70
|
+
id: unknown;
|
|
71
|
+
}>(db: {
|
|
72
|
+
delete: (table: unknown) => {
|
|
73
|
+
where: (condition: unknown) => {
|
|
74
|
+
returning: (cols: unknown) => Promise<T[]>;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
}, table: {
|
|
78
|
+
id: unknown;
|
|
79
|
+
}, condition: unknown): Promise<T[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Restore a soft-deleted record by setting deleted_at to NULL.
|
|
82
|
+
*/
|
|
83
|
+
export declare function restore(db: {
|
|
84
|
+
update: (table: unknown) => {
|
|
85
|
+
set: (values: unknown) => {
|
|
86
|
+
where: (condition: unknown) => Promise<unknown>;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
}, table: SoftDeletableTable, condition: unknown): Promise<void>;
|
|
90
|
+
//# sourceMappingURL=softDeletes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"softDeletes.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/softDeletes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;GASG;AAIH,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAA;CACnB;AAID;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,WAGlC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,WAGrC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAEvC;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,EACxD,EAAE,EAAE;IACF,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK;YACxB,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK;gBAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;aAAE,CAAA;SAC9E,CAAA;KACF,CAAA;CACF,EACD,KAAK,EAAE,kBAAkB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,EAC3C,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,CAAC,EAAE,CAAC,CAMd;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,EACzD,EAAE,EAAE;IACF,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC1B,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK;YAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;SAAE,CAAA;KAC9E,CAAA;CACF,EACD,KAAK,EAAE;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,EACtB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,CAAC,EAAE,CAAC,CAKd;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,EAAE,EAAE;IACF,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK;YACxB,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;SAChD,CAAA;KACF,CAAA;CACF,EACD,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
// ─── Condition builders ─────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Returns a condition that excludes soft-deleted records.
|
|
13
|
+
* Use in WHERE clauses: .where(withSoftDeletes(table))
|
|
14
|
+
*
|
|
15
|
+
* Caller must pass the drizzle-orm isNull function to avoid a hard
|
|
16
|
+
* dependency on drizzle-orm in the core vono package.
|
|
17
|
+
*/
|
|
18
|
+
export function withSoftDeletes(table, isNull) {
|
|
19
|
+
return isNull(table.deletedAt);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns a condition that includes ONLY soft-deleted records.
|
|
23
|
+
* Use in WHERE clauses: .where(onlyTrashed(table))
|
|
24
|
+
*/
|
|
25
|
+
export function onlyTrashed(table, isNotNull) {
|
|
26
|
+
return isNotNull(table.deletedAt);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns undefined — no filter applied, includes all records.
|
|
30
|
+
* Use when you want to override withSoftDeletes.
|
|
31
|
+
*
|
|
32
|
+
* Property 6: withTrashed() overrides withSoftDeletes — returns undefined
|
|
33
|
+
* so no deleted_at filter is applied.
|
|
34
|
+
*/
|
|
35
|
+
export function withTrashed() {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
// ─── Mutation helpers ───────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Soft-delete records matching the condition.
|
|
41
|
+
* Sets deleted_at to the current timestamp.
|
|
42
|
+
*
|
|
43
|
+
* @returns Array of affected record IDs
|
|
44
|
+
*/
|
|
45
|
+
export async function softDelete(db, table, condition) {
|
|
46
|
+
return db
|
|
47
|
+
.update(table)
|
|
48
|
+
.set({ deletedAt: new Date() })
|
|
49
|
+
.where(condition)
|
|
50
|
+
.returning({ id: table.id });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Permanently delete records matching the condition.
|
|
54
|
+
*
|
|
55
|
+
* @returns Array of affected record IDs
|
|
56
|
+
*/
|
|
57
|
+
export async function forceDelete(db, table, condition) {
|
|
58
|
+
return db
|
|
59
|
+
.delete(table)
|
|
60
|
+
.where(condition)
|
|
61
|
+
.returning({ id: table.id });
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Restore a soft-deleted record by setting deleted_at to NULL.
|
|
65
|
+
*/
|
|
66
|
+
export async function restore(db, table, condition) {
|
|
67
|
+
await db
|
|
68
|
+
.update(table)
|
|
69
|
+
.set({ deletedAt: null })
|
|
70
|
+
.where(condition);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=softDeletes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"softDeletes.js","sourceRoot":"","sources":["../../../src/shared/utils/softDeletes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH,uEAAuE;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAyB,EACzB,MAAiC;IAEjC,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAyB,EACzB,SAAoC;IAEpC,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,uEAAuE;AAEvE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAMC,EACD,KAA2C,EAC3C,SAAkB;IAElB,OAAQ,EAAU;SACf,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SAC9B,KAAK,CAAC,SAAS,CAAC;SAChB,SAAS,CAAC,EAAE,EAAE,EAAG,KAAa,CAAC,EAAE,EAAE,CAAC,CAAA;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAIC,EACD,KAAsB,EACtB,SAAkB;IAElB,OAAQ,EAAU;SACf,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,SAAS,CAAC;SAChB,SAAS,CAAC,EAAE,EAAE,EAAG,KAAa,CAAC,EAAE,EAAE,CAAC,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EAMC,EACD,KAAyB,EACzB,SAAkB;IAElB,MAAO,EAAU;SACd,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACxB,KAAK,CAAC,SAAS,CAAC,CAAA;AACrB,CAAC"}
|