@trokky/trokky 2.0.3
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/dist/adapters/filesystem/filesystem-adapter.d.ts +80 -0
- package/dist/adapters/filesystem/filesystem-adapter.d.ts.map +1 -0
- package/dist/adapters/filesystem/filesystem-adapter.js +1370 -0
- package/dist/adapters/filesystem/filesystem-adapter.js.map +1 -0
- package/dist/adapters/filesystem/index.d.ts +29 -0
- package/dist/adapters/filesystem/index.d.ts.map +1 -0
- package/dist/adapters/filesystem/index.js +31 -0
- package/dist/adapters/filesystem/index.js.map +1 -0
- package/dist/adapters/filesystem/types.d.ts +111 -0
- package/dist/adapters/filesystem/types.d.ts.map +1 -0
- package/dist/adapters/filesystem/types.js +2 -0
- package/dist/adapters/filesystem/types.js.map +1 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts +111 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts.map +1 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.js +1363 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.js.map +1 -0
- package/dist/adapters/filesystem-data/index.d.ts +3 -0
- package/dist/adapters/filesystem-data/index.d.ts.map +1 -0
- package/dist/adapters/filesystem-data/index.js +13 -0
- package/dist/adapters/filesystem-data/index.js.map +1 -0
- package/dist/adapters/filesystem-data/types.d.ts +147 -0
- package/dist/adapters/filesystem-data/types.d.ts.map +1 -0
- package/dist/adapters/filesystem-data/types.js +2 -0
- package/dist/adapters/filesystem-data/types.js.map +1 -0
- package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts +32 -0
- package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts.map +1 -0
- package/dist/adapters/filesystem-media/filesystem-media-adapter.js +639 -0
- package/dist/adapters/filesystem-media/filesystem-media-adapter.js.map +1 -0
- package/dist/adapters/filesystem-media/index.d.ts +3 -0
- package/dist/adapters/filesystem-media/index.d.ts.map +1 -0
- package/dist/adapters/filesystem-media/index.js +13 -0
- package/dist/adapters/filesystem-media/index.js.map +1 -0
- package/dist/adapters/filesystem-media/types.d.ts +76 -0
- package/dist/adapters/filesystem-media/types.d.ts.map +1 -0
- package/dist/adapters/filesystem-media/types.js +2 -0
- package/dist/adapters/filesystem-media/types.js.map +1 -0
- package/dist/adapters/postgres-data/index.d.ts +3 -0
- package/dist/adapters/postgres-data/index.d.ts.map +1 -0
- package/dist/adapters/postgres-data/index.js +13 -0
- package/dist/adapters/postgres-data/index.js.map +1 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.d.ts +154 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.d.ts.map +1 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.js +1432 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.js.map +1 -0
- package/dist/adapters/postgres-data/types.d.ts +139 -0
- package/dist/adapters/postgres-data/types.d.ts.map +1 -0
- package/dist/adapters/postgres-data/types.js +2 -0
- package/dist/adapters/postgres-data/types.js.map +1 -0
- package/dist/core/adapters/registry.d.ts +79 -0
- package/dist/core/adapters/registry.d.ts.map +1 -0
- package/dist/core/adapters/registry.js +149 -0
- package/dist/core/adapters/registry.js.map +1 -0
- package/dist/core/core/engine.d.ts +551 -0
- package/dist/core/core/engine.d.ts.map +1 -0
- package/dist/core/core/engine.js +1074 -0
- package/dist/core/core/engine.js.map +1 -0
- package/dist/core/crypto/adapter.d.ts +63 -0
- package/dist/core/crypto/adapter.d.ts.map +1 -0
- package/dist/core/crypto/adapter.js +63 -0
- package/dist/core/crypto/adapter.js.map +1 -0
- package/dist/core/crypto/fallback-adapter.d.ts +23 -0
- package/dist/core/crypto/fallback-adapter.d.ts.map +1 -0
- package/dist/core/crypto/fallback-adapter.js +195 -0
- package/dist/core/crypto/fallback-adapter.js.map +1 -0
- package/dist/core/crypto/node-adapter.d.ts +20 -0
- package/dist/core/crypto/node-adapter.d.ts.map +1 -0
- package/dist/core/crypto/node-adapter.js +85 -0
- package/dist/core/crypto/node-adapter.js.map +1 -0
- package/dist/core/crypto/password-hash.d.ts +73 -0
- package/dist/core/crypto/password-hash.d.ts.map +1 -0
- package/dist/core/crypto/password-hash.js +244 -0
- package/dist/core/crypto/password-hash.js.map +1 -0
- package/dist/core/crypto/webcrypto-adapter.d.ts +24 -0
- package/dist/core/crypto/webcrypto-adapter.d.ts.map +1 -0
- package/dist/core/crypto/webcrypto-adapter.js +158 -0
- package/dist/core/crypto/webcrypto-adapter.js.map +1 -0
- package/dist/core/errors/index.d.ts +30 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +61 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/events/event-bus.d.ts +121 -0
- package/dist/core/events/event-bus.d.ts.map +1 -0
- package/dist/core/events/event-bus.js +631 -0
- package/dist/core/events/event-bus.js.map +1 -0
- package/dist/core/events/index.d.ts +17 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +22 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/events/memory-storage.d.ts +57 -0
- package/dist/core/events/memory-storage.d.ts.map +1 -0
- package/dist/core/events/memory-storage.js +175 -0
- package/dist/core/events/memory-storage.js.map +1 -0
- package/dist/core/events/types.d.ts +434 -0
- package/dist/core/events/types.d.ts.map +1 -0
- package/dist/core/events/types.js +9 -0
- package/dist/core/events/types.js.map +1 -0
- package/dist/core/events/utils.d.ts +134 -0
- package/dist/core/events/utils.d.ts.map +1 -0
- package/dist/core/events/utils.js +333 -0
- package/dist/core/events/utils.js.map +1 -0
- package/dist/core/fields/conditional.d.ts +115 -0
- package/dist/core/fields/conditional.d.ts.map +1 -0
- package/dist/core/fields/conditional.js +296 -0
- package/dist/core/fields/conditional.js.map +1 -0
- package/dist/core/fields/field-type.d.ts +218 -0
- package/dist/core/fields/field-type.d.ts.map +1 -0
- package/dist/core/fields/field-type.js +17 -0
- package/dist/core/fields/field-type.js.map +1 -0
- package/dist/core/fields/helpers.d.ts +86 -0
- package/dist/core/fields/helpers.d.ts.map +1 -0
- package/dist/core/fields/helpers.js +260 -0
- package/dist/core/fields/helpers.js.map +1 -0
- package/dist/core/fields/index.d.ts +5 -0
- package/dist/core/fields/index.d.ts.map +1 -0
- package/dist/core/fields/index.js +6 -0
- package/dist/core/fields/index.js.map +1 -0
- package/dist/core/fields/registry.d.ts +78 -0
- package/dist/core/fields/registry.d.ts.map +1 -0
- package/dist/core/fields/registry.js +185 -0
- package/dist/core/fields/registry.js.map +1 -0
- package/dist/core/index.d.ts +39 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/media/image-processor.d.ts +24 -0
- package/dist/core/media/image-processor.d.ts.map +1 -0
- package/dist/core/media/image-processor.js +69 -0
- package/dist/core/media/image-processor.js.map +1 -0
- package/dist/core/media/processors/cloudflare-images.d.ts +83 -0
- package/dist/core/media/processors/cloudflare-images.d.ts.map +1 -0
- package/dist/core/media/processors/cloudflare-images.js +241 -0
- package/dist/core/media/processors/cloudflare-images.js.map +1 -0
- package/dist/core/media/processors/cloudflare-transform-store.d.ts +127 -0
- package/dist/core/media/processors/cloudflare-transform-store.d.ts.map +1 -0
- package/dist/core/media/processors/cloudflare-transform-store.js +237 -0
- package/dist/core/media/processors/cloudflare-transform-store.js.map +1 -0
- package/dist/core/media/processors/cloudflare-transformations.d.ts +81 -0
- package/dist/core/media/processors/cloudflare-transformations.d.ts.map +1 -0
- package/dist/core/media/processors/cloudflare-transformations.js +144 -0
- package/dist/core/media/processors/cloudflare-transformations.js.map +1 -0
- package/dist/core/media/processors/index.d.ts +9 -0
- package/dist/core/media/processors/index.d.ts.map +1 -0
- package/dist/core/media/processors/index.js +13 -0
- package/dist/core/media/processors/index.js.map +1 -0
- package/dist/core/media/processors/noop.d.ts +22 -0
- package/dist/core/media/processors/noop.d.ts.map +1 -0
- package/dist/core/media/processors/noop.js +38 -0
- package/dist/core/media/processors/noop.js.map +1 -0
- package/dist/core/media/processors/sharp.d.ts +30 -0
- package/dist/core/media/processors/sharp.d.ts.map +1 -0
- package/dist/core/media/processors/sharp.js +126 -0
- package/dist/core/media/processors/sharp.js.map +1 -0
- package/dist/core/media/processors/types.d.ts +67 -0
- package/dist/core/media/processors/types.d.ts.map +1 -0
- package/dist/core/media/processors/types.js +42 -0
- package/dist/core/media/processors/types.js.map +1 -0
- package/dist/core/media/processors/workers-images.d.ts +112 -0
- package/dist/core/media/processors/workers-images.d.ts.map +1 -0
- package/dist/core/media/processors/workers-images.js +257 -0
- package/dist/core/media/processors/workers-images.js.map +1 -0
- package/dist/core/schema/registry.d.ts +41 -0
- package/dist/core/schema/registry.d.ts.map +1 -0
- package/dist/core/schema/registry.js +248 -0
- package/dist/core/schema/registry.js.map +1 -0
- package/dist/core/schema/singleton.d.ts +107 -0
- package/dist/core/schema/singleton.d.ts.map +1 -0
- package/dist/core/schema/singleton.js +180 -0
- package/dist/core/schema/singleton.js.map +1 -0
- package/dist/core/security/auth.d.ts +120 -0
- package/dist/core/security/auth.d.ts.map +1 -0
- package/dist/core/security/auth.js +274 -0
- package/dist/core/security/auth.js.map +1 -0
- package/dist/core/security/captcha/index.d.ts +21 -0
- package/dist/core/security/captcha/index.d.ts.map +1 -0
- package/dist/core/security/captcha/index.js +34 -0
- package/dist/core/security/captcha/index.js.map +1 -0
- package/dist/core/security/captcha/recaptcha.d.ts +41 -0
- package/dist/core/security/captcha/recaptcha.d.ts.map +1 -0
- package/dist/core/security/captcha/recaptcha.js +89 -0
- package/dist/core/security/captcha/recaptcha.js.map +1 -0
- package/dist/core/security/captcha/turnstile.d.ts +41 -0
- package/dist/core/security/captcha/turnstile.d.ts.map +1 -0
- package/dist/core/security/captcha/turnstile.js +90 -0
- package/dist/core/security/captcha/turnstile.js.map +1 -0
- package/dist/core/security/captcha/types.d.ts +66 -0
- package/dist/core/security/captcha/types.d.ts.map +1 -0
- package/dist/core/security/captcha/types.js +7 -0
- package/dist/core/security/captcha/types.js.map +1 -0
- package/dist/core/security/mfa/email-otp.d.ts +91 -0
- package/dist/core/security/mfa/email-otp.d.ts.map +1 -0
- package/dist/core/security/mfa/email-otp.js +264 -0
- package/dist/core/security/mfa/email-otp.js.map +1 -0
- package/dist/core/security/mfa/index.d.ts +8 -0
- package/dist/core/security/mfa/index.d.ts.map +1 -0
- package/dist/core/security/mfa/index.js +8 -0
- package/dist/core/security/mfa/index.js.map +1 -0
- package/dist/core/security/mfa/totp.d.ts +87 -0
- package/dist/core/security/mfa/totp.d.ts.map +1 -0
- package/dist/core/security/mfa/totp.js +293 -0
- package/dist/core/security/mfa/totp.js.map +1 -0
- package/dist/core/security/middleware.d.ts +102 -0
- package/dist/core/security/middleware.d.ts.map +1 -0
- package/dist/core/security/middleware.js +261 -0
- package/dist/core/security/middleware.js.map +1 -0
- package/dist/core/security/oauth/google.d.ts +76 -0
- package/dist/core/security/oauth/google.d.ts.map +1 -0
- package/dist/core/security/oauth/google.js +154 -0
- package/dist/core/security/oauth/google.js.map +1 -0
- package/dist/core/security/oauth/index.d.ts +8 -0
- package/dist/core/security/oauth/index.d.ts.map +1 -0
- package/dist/core/security/oauth/index.js +7 -0
- package/dist/core/security/oauth/index.js.map +1 -0
- package/dist/core/security/oauth2/authorization-server.d.ts +195 -0
- package/dist/core/security/oauth2/authorization-server.d.ts.map +1 -0
- package/dist/core/security/oauth2/authorization-server.js +569 -0
- package/dist/core/security/oauth2/authorization-server.js.map +1 -0
- package/dist/core/security/oauth2/index.d.ts +9 -0
- package/dist/core/security/oauth2/index.d.ts.map +1 -0
- package/dist/core/security/oauth2/index.js +9 -0
- package/dist/core/security/oauth2/index.js.map +1 -0
- package/dist/core/security/rate-limiter.d.ts +15 -0
- package/dist/core/security/rate-limiter.d.ts.map +1 -0
- package/dist/core/security/rate-limiter.js +48 -0
- package/dist/core/security/rate-limiter.js.map +1 -0
- package/dist/core/security/validation.d.ts +20 -0
- package/dist/core/security/validation.d.ts.map +1 -0
- package/dist/core/security/validation.js +273 -0
- package/dist/core/security/validation.js.map +1 -0
- package/dist/core/services/auth-service.d.ts +128 -0
- package/dist/core/services/auth-service.d.ts.map +1 -0
- package/dist/core/services/auth-service.js +530 -0
- package/dist/core/services/auth-service.js.map +1 -0
- package/dist/core/services/captcha-service.d.ts +44 -0
- package/dist/core/services/captcha-service.d.ts.map +1 -0
- package/dist/core/services/captcha-service.js +82 -0
- package/dist/core/services/captcha-service.js.map +1 -0
- package/dist/core/services/document-service.d.ts +59 -0
- package/dist/core/services/document-service.d.ts.map +1 -0
- package/dist/core/services/document-service.js +269 -0
- package/dist/core/services/document-service.js.map +1 -0
- package/dist/core/services/media-service.d.ts +40 -0
- package/dist/core/services/media-service.d.ts.map +1 -0
- package/dist/core/services/media-service.js +396 -0
- package/dist/core/services/media-service.js.map +1 -0
- package/dist/core/services/mfa-service.d.ts +123 -0
- package/dist/core/services/mfa-service.d.ts.map +1 -0
- package/dist/core/services/mfa-service.js +606 -0
- package/dist/core/services/mfa-service.js.map +1 -0
- package/dist/core/services/oauth-service.d.ts +58 -0
- package/dist/core/services/oauth-service.d.ts.map +1 -0
- package/dist/core/services/oauth-service.js +253 -0
- package/dist/core/services/oauth-service.js.map +1 -0
- package/dist/core/services/oauth2-server-service.d.ts +61 -0
- package/dist/core/services/oauth2-server-service.d.ts.map +1 -0
- package/dist/core/services/oauth2-server-service.js +259 -0
- package/dist/core/services/oauth2-server-service.js.map +1 -0
- package/dist/core/services/passkey-service.d.ts +59 -0
- package/dist/core/services/passkey-service.d.ts.map +1 -0
- package/dist/core/services/passkey-service.js +238 -0
- package/dist/core/services/passkey-service.js.map +1 -0
- package/dist/core/services/token-service.d.ts +31 -0
- package/dist/core/services/token-service.d.ts.map +1 -0
- package/dist/core/services/token-service.js +132 -0
- package/dist/core/services/token-service.js.map +1 -0
- package/dist/core/services/trusted-device-service.d.ts +39 -0
- package/dist/core/services/trusted-device-service.d.ts.map +1 -0
- package/dist/core/services/trusted-device-service.js +123 -0
- package/dist/core/services/trusted-device-service.js.map +1 -0
- package/dist/core/services/user-service.d.ts +38 -0
- package/dist/core/services/user-service.d.ts.map +1 -0
- package/dist/core/services/user-service.js +265 -0
- package/dist/core/services/user-service.js.map +1 -0
- package/dist/core/studio/integration.d.ts +54 -0
- package/dist/core/studio/integration.d.ts.map +1 -0
- package/dist/core/studio/integration.js +326 -0
- package/dist/core/studio/integration.js.map +1 -0
- package/dist/core/types/index.d.ts +282 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +83 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/mail.d.ts +90 -0
- package/dist/core/types/mail.d.ts.map +1 -0
- package/dist/core/types/mail.js +7 -0
- package/dist/core/types/mail.js.map +1 -0
- package/dist/core/types/oauth2.d.ts +9 -0
- package/dist/core/types/oauth2.d.ts.map +1 -0
- package/dist/core/types/oauth2.js +7 -0
- package/dist/core/types/oauth2.js.map +1 -0
- package/dist/core/types/storage-adapters.d.ts +611 -0
- package/dist/core/types/storage-adapters.d.ts.map +1 -0
- package/dist/core/types/storage-adapters.js +14 -0
- package/dist/core/types/storage-adapters.js.map +1 -0
- package/dist/core/types/user.d.ts +10 -0
- package/dist/core/types/user.d.ts.map +1 -0
- package/dist/core/types/user.js +45 -0
- package/dist/core/types/user.js.map +1 -0
- package/dist/core/utils/id-generator.d.ts +16 -0
- package/dist/core/utils/id-generator.d.ts.map +1 -0
- package/dist/core/utils/id-generator.js +61 -0
- package/dist/core/utils/id-generator.js.map +1 -0
- package/dist/core/utils/logger.d.ts +100 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/core/utils/logger.js +212 -0
- package/dist/core/utils/logger.js.map +1 -0
- package/dist/core/utils/reference-expander.d.ts +57 -0
- package/dist/core/utils/reference-expander.d.ts.map +1 -0
- package/dist/core/utils/reference-expander.js +192 -0
- package/dist/core/utils/reference-expander.js.map +1 -0
- package/dist/core/utils/universal-crypto.d.ts +46 -0
- package/dist/core/utils/universal-crypto.d.ts.map +1 -0
- package/dist/core/utils/universal-crypto.js +171 -0
- package/dist/core/utils/universal-crypto.js.map +1 -0
- package/dist/core/validation/validator.d.ts +11 -0
- package/dist/core/validation/validator.d.ts.map +1 -0
- package/dist/core/validation/validator.js +164 -0
- package/dist/core/validation/validator.js.map +1 -0
- package/dist/i18n/config.d.ts +4077 -0
- package/dist/i18n/config.d.ts.map +1 -0
- package/dist/i18n/config.js +116 -0
- package/dist/i18n/config.js.map +1 -0
- package/dist/i18n/hooks.d.ts +86 -0
- package/dist/i18n/hooks.d.ts.map +1 -0
- package/dist/i18n/hooks.js +122 -0
- package/dist/i18n/hooks.js.map +1 -0
- package/dist/i18n/index.d.ts +39 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +40 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en/auth.json +108 -0
- package/dist/i18n/locales/en/common.json +100 -0
- package/dist/i18n/locales/en/errors.json +55 -0
- package/dist/i18n/locales/en/fields.json +456 -0
- package/dist/i18n/locales/en/studio.json +1329 -0
- package/dist/i18n/locales/fr/auth.json +108 -0
- package/dist/i18n/locales/fr/common.json +100 -0
- package/dist/i18n/locales/fr/errors.json +55 -0
- package/dist/i18n/locales/fr/fields.json +456 -0
- package/dist/i18n/locales/fr/studio.json +1274 -0
- package/dist/i18n/provider.d.ts +45 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +49 -0
- package/dist/i18n/provider.js.map +1 -0
- package/dist/i18n/types.d.ts +8 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +7 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/express/adapter.d.ts +33 -0
- package/dist/integrations/express/adapter.d.ts.map +1 -0
- package/dist/integrations/express/adapter.js +203 -0
- package/dist/integrations/express/adapter.js.map +1 -0
- package/dist/integrations/express/config.d.ts +599 -0
- package/dist/integrations/express/config.d.ts.map +1 -0
- package/dist/integrations/express/config.js +166 -0
- package/dist/integrations/express/config.js.map +1 -0
- package/dist/integrations/express/index.d.ts +10 -0
- package/dist/integrations/express/index.d.ts.map +1 -0
- package/dist/integrations/express/index.js +9 -0
- package/dist/integrations/express/index.js.map +1 -0
- package/dist/integrations/express/integration.d.ts +111 -0
- package/dist/integrations/express/integration.d.ts.map +1 -0
- package/dist/integrations/express/integration.js +730 -0
- package/dist/integrations/express/integration.js.map +1 -0
- package/dist/integrations/express/media-rewrite-middleware.d.ts +78 -0
- package/dist/integrations/express/media-rewrite-middleware.d.ts.map +1 -0
- package/dist/integrations/express/media-rewrite-middleware.js +211 -0
- package/dist/integrations/express/media-rewrite-middleware.js.map +1 -0
- package/dist/integrations/express/media-url-generator.d.ts +52 -0
- package/dist/integrations/express/media-url-generator.d.ts.map +1 -0
- package/dist/integrations/express/media-url-generator.js +107 -0
- package/dist/integrations/express/media-url-generator.js.map +1 -0
- package/dist/integrations/express/middleware.d.ts +25 -0
- package/dist/integrations/express/middleware.d.ts.map +1 -0
- package/dist/integrations/express/middleware.js +130 -0
- package/dist/integrations/express/middleware.js.map +1 -0
- package/dist/integrations/express/server.d.ts +99 -0
- package/dist/integrations/express/server.d.ts.map +1 -0
- package/dist/integrations/express/server.js +597 -0
- package/dist/integrations/express/server.js.map +1 -0
- package/dist/integrations/express/types.d.ts +106 -0
- package/dist/integrations/express/types.d.ts.map +1 -0
- package/dist/integrations/express/types.js +2 -0
- package/dist/integrations/express/types.js.map +1 -0
- package/dist/mail/adapters/console.d.ts +30 -0
- package/dist/mail/adapters/console.d.ts.map +1 -0
- package/dist/mail/adapters/console.js +169 -0
- package/dist/mail/adapters/console.js.map +1 -0
- package/dist/mail/adapters/resend.d.ts +18 -0
- package/dist/mail/adapters/resend.d.ts.map +1 -0
- package/dist/mail/adapters/resend.js +148 -0
- package/dist/mail/adapters/resend.js.map +1 -0
- package/dist/mail/adapters/smtp.d.ts +22 -0
- package/dist/mail/adapters/smtp.d.ts.map +1 -0
- package/dist/mail/adapters/smtp.js +180 -0
- package/dist/mail/adapters/smtp.js.map +1 -0
- package/dist/mail/index.d.ts +15 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +13 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/mail-service.d.ts +180 -0
- package/dist/mail/mail-service.d.ts.map +1 -0
- package/dist/mail/mail-service.js +370 -0
- package/dist/mail/mail-service.js.map +1 -0
- package/dist/mail/notification-service.d.ts +82 -0
- package/dist/mail/notification-service.d.ts.map +1 -0
- package/dist/mail/notification-service.js +262 -0
- package/dist/mail/notification-service.js.map +1 -0
- package/dist/mail/templates/built-in-templates.d.ts +47 -0
- package/dist/mail/templates/built-in-templates.d.ts.map +1 -0
- package/dist/mail/templates/built-in-templates.js +416 -0
- package/dist/mail/templates/built-in-templates.js.map +1 -0
- package/dist/mail/templates/custom-template-renderer.d.ts +115 -0
- package/dist/mail/templates/custom-template-renderer.d.ts.map +1 -0
- package/dist/mail/templates/custom-template-renderer.js +225 -0
- package/dist/mail/templates/custom-template-renderer.js.map +1 -0
- package/dist/mail/types.d.ts +7 -0
- package/dist/mail/types.d.ts.map +1 -0
- package/dist/mail/types.js +7 -0
- package/dist/mail/types.js.map +1 -0
- package/dist/routes/auth/captcha.d.ts +33 -0
- package/dist/routes/auth/captcha.d.ts.map +1 -0
- package/dist/routes/auth/captcha.js +102 -0
- package/dist/routes/auth/captcha.js.map +1 -0
- package/dist/routes/auth/change-password.d.ts +17 -0
- package/dist/routes/auth/change-password.d.ts.map +1 -0
- package/dist/routes/auth/change-password.js +121 -0
- package/dist/routes/auth/change-password.js.map +1 -0
- package/dist/routes/auth/index.d.ts +13 -0
- package/dist/routes/auth/index.d.ts.map +1 -0
- package/dist/routes/auth/index.js +35 -0
- package/dist/routes/auth/index.js.map +1 -0
- package/dist/routes/auth/mfa.d.ts +121 -0
- package/dist/routes/auth/mfa.d.ts.map +1 -0
- package/dist/routes/auth/mfa.js +1143 -0
- package/dist/routes/auth/mfa.js.map +1 -0
- package/dist/routes/auth/oauth.d.ts +37 -0
- package/dist/routes/auth/oauth.d.ts.map +1 -0
- package/dist/routes/auth/oauth.js +420 -0
- package/dist/routes/auth/oauth.js.map +1 -0
- package/dist/routes/auth/oauth2-server.d.ts +70 -0
- package/dist/routes/auth/oauth2-server.d.ts.map +1 -0
- package/dist/routes/auth/oauth2-server.js +775 -0
- package/dist/routes/auth/oauth2-server.js.map +1 -0
- package/dist/routes/auth/passkey.d.ts +65 -0
- package/dist/routes/auth/passkey.d.ts.map +1 -0
- package/dist/routes/auth/passkey.js +910 -0
- package/dist/routes/auth/passkey.js.map +1 -0
- package/dist/routes/auth/password-reset.d.ts +23 -0
- package/dist/routes/auth/password-reset.d.ts.map +1 -0
- package/dist/routes/auth/password-reset.js +336 -0
- package/dist/routes/auth/password-reset.js.map +1 -0
- package/dist/routes/handlers/audit.d.ts +21 -0
- package/dist/routes/handlers/audit.d.ts.map +1 -0
- package/dist/routes/handlers/audit.js +124 -0
- package/dist/routes/handlers/audit.js.map +1 -0
- package/dist/routes/handlers/auth.d.ts +150 -0
- package/dist/routes/handlers/auth.d.ts.map +1 -0
- package/dist/routes/handlers/auth.js +512 -0
- package/dist/routes/handlers/auth.js.map +1 -0
- package/dist/routes/handlers/base.d.ts +34 -0
- package/dist/routes/handlers/base.d.ts.map +1 -0
- package/dist/routes/handlers/base.js +366 -0
- package/dist/routes/handlers/base.js.map +1 -0
- package/dist/routes/handlers/config.d.ts +31 -0
- package/dist/routes/handlers/config.d.ts.map +1 -0
- package/dist/routes/handlers/config.js +483 -0
- package/dist/routes/handlers/config.js.map +1 -0
- package/dist/routes/handlers/documents.d.ts +50 -0
- package/dist/routes/handlers/documents.d.ts.map +1 -0
- package/dist/routes/handlers/documents.js +708 -0
- package/dist/routes/handlers/documents.js.map +1 -0
- package/dist/routes/handlers/index.d.ts +12 -0
- package/dist/routes/handlers/index.d.ts.map +1 -0
- package/dist/routes/handlers/index.js +11 -0
- package/dist/routes/handlers/index.js.map +1 -0
- package/dist/routes/handlers/media.d.ts +24 -0
- package/dist/routes/handlers/media.d.ts.map +1 -0
- package/dist/routes/handlers/media.js +432 -0
- package/dist/routes/handlers/media.js.map +1 -0
- package/dist/routes/handlers/search.d.ts +10 -0
- package/dist/routes/handlers/search.d.ts.map +1 -0
- package/dist/routes/handlers/search.js +153 -0
- package/dist/routes/handlers/search.js.map +1 -0
- package/dist/routes/handlers/tokens.d.ts +14 -0
- package/dist/routes/handlers/tokens.d.ts.map +1 -0
- package/dist/routes/handlers/tokens.js +109 -0
- package/dist/routes/handlers/tokens.js.map +1 -0
- package/dist/routes/handlers/types.d.ts +13 -0
- package/dist/routes/handlers/types.d.ts.map +1 -0
- package/dist/routes/handlers/types.js +5 -0
- package/dist/routes/handlers/types.js.map +1 -0
- package/dist/routes/handlers/users.d.ts +16 -0
- package/dist/routes/handlers/users.d.ts.map +1 -0
- package/dist/routes/handlers/users.js +198 -0
- package/dist/routes/handlers/users.js.map +1 -0
- package/dist/routes/handlers/webhooks.d.ts +37 -0
- package/dist/routes/handlers/webhooks.d.ts.map +1 -0
- package/dist/routes/handlers/webhooks.js +343 -0
- package/dist/routes/handlers/webhooks.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +5 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/routes.d.ts +29 -0
- package/dist/routes/routes.d.ts.map +1 -0
- package/dist/routes/routes.js +531 -0
- package/dist/routes/routes.js.map +1 -0
- package/dist/routes/slug-processor.d.ts +32 -0
- package/dist/routes/slug-processor.d.ts.map +1 -0
- package/dist/routes/slug-processor.js +328 -0
- package/dist/routes/slug-processor.js.map +1 -0
- package/dist/routes/types.d.ts +31 -0
- package/dist/routes/types.d.ts.map +1 -0
- package/dist/routes/types.js +7 -0
- package/dist/routes/types.js.map +1 -0
- package/dist/routes/users/index.d.ts +7 -0
- package/dist/routes/users/index.d.ts.map +1 -0
- package/dist/routes/users/index.js +7 -0
- package/dist/routes/users/index.js.map +1 -0
- package/dist/structure/builder/StructureBuilder.d.ts +209 -0
- package/dist/structure/builder/StructureBuilder.d.ts.map +1 -0
- package/dist/structure/builder/StructureBuilder.js +425 -0
- package/dist/structure/builder/StructureBuilder.js.map +1 -0
- package/dist/structure/builder/index.d.ts +8 -0
- package/dist/structure/builder/index.d.ts.map +1 -0
- package/dist/structure/builder/index.js +6 -0
- package/dist/structure/builder/index.js.map +1 -0
- package/dist/structure/builder/navigation-tree-builder.d.ts +33 -0
- package/dist/structure/builder/navigation-tree-builder.d.ts.map +1 -0
- package/dist/structure/builder/navigation-tree-builder.js +284 -0
- package/dist/structure/builder/navigation-tree-builder.js.map +1 -0
- package/dist/structure/errors/index.d.ts +72 -0
- package/dist/structure/errors/index.d.ts.map +1 -0
- package/dist/structure/errors/index.js +136 -0
- package/dist/structure/errors/index.js.map +1 -0
- package/dist/structure/index.d.ts +14 -0
- package/dist/structure/index.d.ts.map +1 -0
- package/dist/structure/index.js +16 -0
- package/dist/structure/index.js.map +1 -0
- package/dist/structure/types/filters.d.ts +167 -0
- package/dist/structure/types/filters.d.ts.map +1 -0
- package/dist/structure/types/filters.js +38 -0
- package/dist/structure/types/filters.js.map +1 -0
- package/dist/structure/types/index.d.ts +11 -0
- package/dist/structure/types/index.d.ts.map +1 -0
- package/dist/structure/types/index.js +7 -0
- package/dist/structure/types/index.js.map +1 -0
- package/dist/structure/types/permissions.d.ts +159 -0
- package/dist/structure/types/permissions.d.ts.map +1 -0
- package/dist/structure/types/permissions.js +49 -0
- package/dist/structure/types/permissions.js.map +1 -0
- package/dist/structure/types/structure.d.ts +342 -0
- package/dist/structure/types/structure.d.ts.map +1 -0
- package/dist/structure/types/structure.js +6 -0
- package/dist/structure/types/structure.js.map +1 -0
- package/dist/structure/types/views.d.ts +278 -0
- package/dist/structure/types/views.d.ts.map +1 -0
- package/dist/structure/types/views.js +6 -0
- package/dist/structure/types/views.js.map +1 -0
- package/dist/structure/utils/hash.d.ts +61 -0
- package/dist/structure/utils/hash.d.ts.map +1 -0
- package/dist/structure/utils/hash.js +118 -0
- package/dist/structure/utils/hash.js.map +1 -0
- package/dist/structure/utils/index.d.ts +10 -0
- package/dist/structure/utils/index.d.ts.map +1 -0
- package/dist/structure/utils/index.js +7 -0
- package/dist/structure/utils/index.js.map +1 -0
- package/dist/structure/utils/permission-checker.d.ts +57 -0
- package/dist/structure/utils/permission-checker.d.ts.map +1 -0
- package/dist/structure/utils/permission-checker.js +286 -0
- package/dist/structure/utils/permission-checker.js.map +1 -0
- package/dist/structure/utils/query-builder.d.ts +82 -0
- package/dist/structure/utils/query-builder.d.ts.map +1 -0
- package/dist/structure/utils/query-builder.js +489 -0
- package/dist/structure/utils/query-builder.js.map +1 -0
- package/dist/structure/utils/structure-merger.d.ts +91 -0
- package/dist/structure/utils/structure-merger.d.ts.map +1 -0
- package/dist/structure/utils/structure-merger.js +445 -0
- package/dist/structure/utils/structure-merger.js.map +1 -0
- package/dist/structure/validation/schemas.d.ts +3107 -0
- package/dist/structure/validation/schemas.d.ts.map +1 -0
- package/dist/structure/validation/schemas.js +436 -0
- package/dist/structure/validation/schemas.js.map +1 -0
- package/dist/types/api-requests.d.ts +334 -0
- package/dist/types/api-requests.d.ts.map +1 -0
- package/dist/types/api-requests.js +8 -0
- package/dist/types/api-requests.js.map +1 -0
- package/dist/types/auth.d.ts +394 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +8 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/document.d.ts +49 -0
- package/dist/types/document.d.ts.map +1 -0
- package/dist/types/document.js +6 -0
- package/dist/types/document.js.map +1 -0
- package/dist/types/field-system.d.ts +197 -0
- package/dist/types/field-system.d.ts.map +1 -0
- package/dist/types/field-system.js +8 -0
- package/dist/types/field-system.js.map +1 -0
- package/dist/types/fields.d.ts +17 -0
- package/dist/types/fields.d.ts.map +1 -0
- package/dist/types/fields.js +21 -0
- package/dist/types/fields.js.map +1 -0
- package/dist/types/http.d.ts +162 -0
- package/dist/types/http.d.ts.map +1 -0
- package/dist/types/http.js +8 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/i18n.d.ts +56 -0
- package/dist/types/i18n.d.ts.map +1 -0
- package/dist/types/i18n.js +25 -0
- package/dist/types/i18n.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mail.d.ts +224 -0
- package/dist/types/mail.d.ts.map +1 -0
- package/dist/types/mail.js +8 -0
- package/dist/types/mail.js.map +1 -0
- package/dist/types/media.d.ts +56 -0
- package/dist/types/media.d.ts.map +1 -0
- package/dist/types/media.js +6 -0
- package/dist/types/media.js.map +1 -0
- package/dist/types/oauth2.d.ts +287 -0
- package/dist/types/oauth2.d.ts.map +1 -0
- package/dist/types/oauth2.js +43 -0
- package/dist/types/oauth2.js.map +1 -0
- package/dist/types/passkey.d.ts +217 -0
- package/dist/types/passkey.d.ts.map +1 -0
- package/dist/types/passkey.js +8 -0
- package/dist/types/passkey.js.map +1 -0
- package/dist/types/slug.d.ts +99 -0
- package/dist/types/slug.d.ts.map +1 -0
- package/dist/types/slug.js +8 -0
- package/dist/types/slug.js.map +1 -0
- package/package.json +183 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { createLogger } from '../core/index.js';
|
|
2
|
+
const logger = createLogger('routes', 'SlugProcessor');
|
|
3
|
+
/**
|
|
4
|
+
* Type-safe helper to get a number option from field or options
|
|
5
|
+
*/
|
|
6
|
+
function getNumberOption(fieldValue, optionValue, defaultValue) {
|
|
7
|
+
if (typeof fieldValue === 'number' && !isNaN(fieldValue))
|
|
8
|
+
return fieldValue;
|
|
9
|
+
if (typeof optionValue === 'number' && !isNaN(optionValue))
|
|
10
|
+
return optionValue;
|
|
11
|
+
return defaultValue;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Type-safe helper to get a string option from field or options
|
|
15
|
+
*/
|
|
16
|
+
function getStringOption(fieldValue, optionValue, defaultValue) {
|
|
17
|
+
if (typeof fieldValue === 'string')
|
|
18
|
+
return fieldValue;
|
|
19
|
+
if (typeof optionValue === 'string')
|
|
20
|
+
return optionValue;
|
|
21
|
+
return defaultValue;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Type-safe helper to get a boolean option from field or options
|
|
25
|
+
*/
|
|
26
|
+
function getBooleanOption(fieldValue, optionValue, defaultValue) {
|
|
27
|
+
if (typeof fieldValue === 'boolean')
|
|
28
|
+
return fieldValue;
|
|
29
|
+
if (typeof optionValue === 'boolean')
|
|
30
|
+
return optionValue;
|
|
31
|
+
return defaultValue;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Unicode-aware slugify algorithm
|
|
35
|
+
* Replicates the client-side logic from @trokky/fields for server-side consistency
|
|
36
|
+
*
|
|
37
|
+
* Note: Character class regex is safe - user input (allowedChars) is properly escaped
|
|
38
|
+
*/
|
|
39
|
+
export function defaultSlugify(input, options = {}) {
|
|
40
|
+
if (!input || typeof input !== 'string') {
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
const { preserveCase = false, allowedChars = '', allowSlashes = true, prefix = '', suffix = '' } = options;
|
|
44
|
+
let slug = input
|
|
45
|
+
.toString()
|
|
46
|
+
.normalize('NFD') // Normalize unicode characters (decompose)
|
|
47
|
+
.replace(/[\u0300-\u036f]/g, '') // Remove diacritical marks (accents)
|
|
48
|
+
.trim(); // Remove leading/trailing whitespace
|
|
49
|
+
// Convert to lowercase unless preserveCase is true
|
|
50
|
+
if (!preserveCase) {
|
|
51
|
+
slug = slug.toLowerCase();
|
|
52
|
+
}
|
|
53
|
+
// Build character class for allowed characters
|
|
54
|
+
const baseChars = preserveCase ? 'a-zA-Z0-9' : 'a-z0-9';
|
|
55
|
+
const slashChar = allowSlashes ? '\\/' : '';
|
|
56
|
+
// Escape special regex characters in allowedChars to prevent ReDoS
|
|
57
|
+
const escapedAllowedChars = allowedChars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
58
|
+
const allowedPattern = `[^${baseChars}\\s\\-${slashChar}${escapedAllowedChars}]`;
|
|
59
|
+
slug = slug
|
|
60
|
+
.replace(new RegExp(allowedPattern, 'g'), '') // Remove invalid characters
|
|
61
|
+
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
62
|
+
.replace(/-+/g, '-') // Replace multiple hyphens with single
|
|
63
|
+
.replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
|
|
64
|
+
// Add prefix and suffix
|
|
65
|
+
if (prefix && slug) {
|
|
66
|
+
// Don't add separator if prefix already ends with one (/, -, etc.)
|
|
67
|
+
const needsSeparator = !prefix.endsWith('/') && !prefix.endsWith('-') && !slug.startsWith('-');
|
|
68
|
+
slug = prefix + (needsSeparator ? '-' : '') + slug;
|
|
69
|
+
}
|
|
70
|
+
if (suffix && slug) {
|
|
71
|
+
// Don't add separator if suffix already starts with one or slug ends with one
|
|
72
|
+
const needsSeparator = !suffix.startsWith('/') && !suffix.startsWith('-') && !slug.endsWith('-');
|
|
73
|
+
slug = slug + (needsSeparator ? '-' : '') + suffix;
|
|
74
|
+
}
|
|
75
|
+
return slug;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get source field value for auto-generation
|
|
79
|
+
* Supports nested paths via dot notation (e.g., 'metadata.title')
|
|
80
|
+
*/
|
|
81
|
+
export function getSourceValue(source, document) {
|
|
82
|
+
if (!source)
|
|
83
|
+
return '';
|
|
84
|
+
const sources = Array.isArray(source) ? source : [source];
|
|
85
|
+
for (const fieldPath of sources) {
|
|
86
|
+
if (!fieldPath || typeof fieldPath !== 'string')
|
|
87
|
+
continue;
|
|
88
|
+
const value = getNestedValue(document, fieldPath);
|
|
89
|
+
if (value && typeof value === 'string' && value.trim()) {
|
|
90
|
+
return value.trim();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Helper function to get nested object values safely
|
|
97
|
+
*/
|
|
98
|
+
function getNestedValue(obj, path) {
|
|
99
|
+
if (!obj || typeof obj !== 'object')
|
|
100
|
+
return undefined;
|
|
101
|
+
if (!path || typeof path !== 'string')
|
|
102
|
+
return undefined;
|
|
103
|
+
return path.split('.').reduce((current, key) => {
|
|
104
|
+
return current && typeof current === 'object' && current[key] !== undefined
|
|
105
|
+
? current[key]
|
|
106
|
+
: undefined;
|
|
107
|
+
}, obj);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Find all slug fields in a schema that have autoGenerate enabled
|
|
111
|
+
*/
|
|
112
|
+
export function findAutoGenerateSlugFields(schema) {
|
|
113
|
+
const slugFields = [];
|
|
114
|
+
// Validate schema structure
|
|
115
|
+
if (!schema.fields || typeof schema.fields !== 'object') {
|
|
116
|
+
return slugFields;
|
|
117
|
+
}
|
|
118
|
+
for (const [fieldName, rawFieldDef] of Object.entries(schema.fields)) {
|
|
119
|
+
// Skip invalid field definitions
|
|
120
|
+
if (!rawFieldDef || typeof rawFieldDef !== 'object') {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Cast to SchemaFieldDefinition to access field properties
|
|
124
|
+
const fieldDef = rawFieldDef;
|
|
125
|
+
if (fieldDef.type !== 'slug') {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// Safely access options object
|
|
129
|
+
const options = (fieldDef.options && typeof fieldDef.options === 'object')
|
|
130
|
+
? fieldDef.options
|
|
131
|
+
: {};
|
|
132
|
+
// Check for source at field level first, then fall back to options
|
|
133
|
+
const source = fieldDef.source || options.source;
|
|
134
|
+
// Default autoGenerate to true unless explicitly set to false
|
|
135
|
+
const autoGenerate = getBooleanOption(fieldDef.autoGenerate, options.autoGenerate, true);
|
|
136
|
+
if (autoGenerate && source) {
|
|
137
|
+
slugFields.push({
|
|
138
|
+
fieldName,
|
|
139
|
+
source,
|
|
140
|
+
autoGenerate: true,
|
|
141
|
+
unique: getBooleanOption(fieldDef.unique, options.unique, true),
|
|
142
|
+
maxLength: getNumberOption(fieldDef.maxLength, options.maxLength, 200),
|
|
143
|
+
minLength: getNumberOption(fieldDef.minLength, options.minLength, 1),
|
|
144
|
+
preserveCase: getBooleanOption(fieldDef.preserveCase, options.preserveCase, false),
|
|
145
|
+
allowedChars: getStringOption(fieldDef.allowedChars, options.allowedChars, ''),
|
|
146
|
+
allowSlashes: getBooleanOption(fieldDef.allowSlashes, options.allowSlashes, true),
|
|
147
|
+
prefix: getStringOption(fieldDef.prefix, options.prefix, ''),
|
|
148
|
+
suffix: getStringOption(fieldDef.suffix, options.suffix, '')
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return slugFields;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get a document's id, supporting adapters that return `id` and/or `_id`
|
|
156
|
+
*/
|
|
157
|
+
function getDocId(doc) {
|
|
158
|
+
const record = doc;
|
|
159
|
+
const id = record?.id ?? record?._id;
|
|
160
|
+
return typeof id === 'string' ? id : undefined;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Check if a slug is unique within a collection
|
|
164
|
+
*
|
|
165
|
+
* @requires Storage adapter must support filtering by arbitrary fields via listDocuments
|
|
166
|
+
*/
|
|
167
|
+
async function isSlugUnique(core, collection, slug, excludeId) {
|
|
168
|
+
const documents = await core.listDocuments(collection, {
|
|
169
|
+
filter: { slug }
|
|
170
|
+
});
|
|
171
|
+
// Filter out the current document if updating
|
|
172
|
+
const conflictingDocs = excludeId
|
|
173
|
+
? documents.filter(doc => getDocId(doc) !== excludeId)
|
|
174
|
+
: documents;
|
|
175
|
+
return conflictingDocs.length === 0;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Escape special regex characters in a string
|
|
179
|
+
*/
|
|
180
|
+
function escapeRegExp(str) {
|
|
181
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Generate a unique slug by appending numbers if conflicts exist
|
|
185
|
+
*
|
|
186
|
+
* Optimized to query all matching slugs once instead of making N+1 queries.
|
|
187
|
+
*
|
|
188
|
+
* @param core - TrokkyCore instance
|
|
189
|
+
* @param collection - Collection name
|
|
190
|
+
* @param baseSlug - Base slug to make unique
|
|
191
|
+
* @param excludeId - Document ID to exclude (for updates)
|
|
192
|
+
* @param maxAttempts - Maximum number of attempts before throwing error
|
|
193
|
+
*/
|
|
194
|
+
async function generateUniqueSlug(core, collection, baseSlug, excludeId, maxAttempts = 100) {
|
|
195
|
+
// First check if base slug is available (common case)
|
|
196
|
+
if (await isSlugUnique(core, collection, baseSlug, excludeId)) {
|
|
197
|
+
return baseSlug;
|
|
198
|
+
}
|
|
199
|
+
logger.debug('Base slug taken, finding unique variant', { baseSlug, collection });
|
|
200
|
+
// Get all documents in collection to find existing numbered variants
|
|
201
|
+
// This is more efficient than making individual queries for each candidate
|
|
202
|
+
const allDocs = await core.listDocuments(collection, {});
|
|
203
|
+
// Build regex to match baseSlug and baseSlug-N patterns
|
|
204
|
+
const escapedBase = escapeRegExp(baseSlug);
|
|
205
|
+
const pattern = new RegExp(`^${escapedBase}(?:-([0-9]+))?$`);
|
|
206
|
+
// Extract existing numbers from matching slugs
|
|
207
|
+
const existingNumbers = new Set();
|
|
208
|
+
existingNumbers.add(1); // Base slug (no suffix) counts as "1"
|
|
209
|
+
for (const doc of allDocs) {
|
|
210
|
+
if (excludeId && getDocId(doc) === excludeId)
|
|
211
|
+
continue;
|
|
212
|
+
const docSlug = doc.slug;
|
|
213
|
+
if (typeof docSlug !== 'string')
|
|
214
|
+
continue;
|
|
215
|
+
const match = docSlug.match(pattern);
|
|
216
|
+
if (match) {
|
|
217
|
+
// If it's baseSlug-N, add N; if it's just baseSlug, add 1
|
|
218
|
+
const num = match[1] ? parseInt(match[1], 10) : 1;
|
|
219
|
+
if (!isNaN(num)) {
|
|
220
|
+
existingNumbers.add(num);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Find first available number starting from 2
|
|
225
|
+
for (let counter = 2; counter <= maxAttempts + 1; counter++) {
|
|
226
|
+
if (!existingNumbers.has(counter)) {
|
|
227
|
+
const uniqueSlug = `${baseSlug}-${counter}`;
|
|
228
|
+
logger.debug('Generated unique slug', { baseSlug, uniqueSlug, counter });
|
|
229
|
+
return uniqueSlug;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
throw new Error(`Could not generate unique slug after ${maxAttempts} attempts`);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Process document data to auto-generate slug fields
|
|
236
|
+
* This should be called before saving a document
|
|
237
|
+
*
|
|
238
|
+
* Note on maxLength: The limit is applied AFTER prefix/suffix are added.
|
|
239
|
+
* E.g., maxLength=20, prefix="blog", slug="hello-world" yields "blog-hello-world" (17 chars)
|
|
240
|
+
*
|
|
241
|
+
* Note on race conditions: If two concurrent requests create documents with the same title,
|
|
242
|
+
* both might get the same slug. For production use, consider adding a unique constraint
|
|
243
|
+
* at the database/storage adapter level.
|
|
244
|
+
*/
|
|
245
|
+
export async function processSlugFields(core, collection, data, existingDocumentId) {
|
|
246
|
+
const schema = core.getSchema(collection);
|
|
247
|
+
if (!schema) {
|
|
248
|
+
logger.debug('No schema found, skipping slug processing', { collection });
|
|
249
|
+
return data; // No schema found, return data as-is
|
|
250
|
+
}
|
|
251
|
+
const slugFields = findAutoGenerateSlugFields(schema);
|
|
252
|
+
if (slugFields.length === 0) {
|
|
253
|
+
return data; // No slug fields to process
|
|
254
|
+
}
|
|
255
|
+
logger.debug('Processing slug fields', {
|
|
256
|
+
collection,
|
|
257
|
+
fieldCount: slugFields.length,
|
|
258
|
+
hasExistingId: !!existingDocumentId
|
|
259
|
+
});
|
|
260
|
+
const processedData = { ...data };
|
|
261
|
+
for (const slugField of slugFields) {
|
|
262
|
+
// Validate field name
|
|
263
|
+
if (!slugField.fieldName || typeof slugField.fieldName !== 'string') {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const currentValue = processedData[slugField.fieldName];
|
|
267
|
+
// Only auto-generate if the field is empty or not provided
|
|
268
|
+
if (currentValue && typeof currentValue === 'string' && currentValue.trim() !== '') {
|
|
269
|
+
// Slug already provided, skip auto-generation
|
|
270
|
+
// But still check uniqueness if required
|
|
271
|
+
if (slugField.unique) {
|
|
272
|
+
const isUnique = await isSlugUnique(core, collection, currentValue, existingDocumentId);
|
|
273
|
+
if (!isUnique) {
|
|
274
|
+
logger.debug('Provided slug not unique, generating variant', {
|
|
275
|
+
field: slugField.fieldName,
|
|
276
|
+
slug: currentValue
|
|
277
|
+
});
|
|
278
|
+
// Generate unique variant
|
|
279
|
+
processedData[slugField.fieldName] = await generateUniqueSlug(core, collection, currentValue, existingDocumentId);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
// Get source value for generation
|
|
285
|
+
const sourceValue = getSourceValue(slugField.source, processedData);
|
|
286
|
+
if (!sourceValue) {
|
|
287
|
+
logger.debug('No source value available, skipping slug generation', {
|
|
288
|
+
field: slugField.fieldName,
|
|
289
|
+
source: slugField.source
|
|
290
|
+
});
|
|
291
|
+
// No source value available, can't auto-generate
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
// Generate the slug
|
|
295
|
+
const baseSlug = defaultSlugify(sourceValue, {
|
|
296
|
+
preserveCase: slugField.preserveCase,
|
|
297
|
+
allowedChars: slugField.allowedChars,
|
|
298
|
+
allowSlashes: slugField.allowSlashes,
|
|
299
|
+
prefix: slugField.prefix,
|
|
300
|
+
suffix: slugField.suffix
|
|
301
|
+
});
|
|
302
|
+
if (!baseSlug) {
|
|
303
|
+
logger.debug('Slugification resulted in empty string', {
|
|
304
|
+
field: slugField.fieldName,
|
|
305
|
+
sourceValue
|
|
306
|
+
});
|
|
307
|
+
// Slugification resulted in empty string
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
// Apply length limits (after prefix/suffix)
|
|
311
|
+
let finalSlug = baseSlug;
|
|
312
|
+
if (slugField.maxLength && finalSlug.length > slugField.maxLength) {
|
|
313
|
+
finalSlug = finalSlug.slice(0, slugField.maxLength).replace(/-+$/, '');
|
|
314
|
+
}
|
|
315
|
+
// Ensure uniqueness if required
|
|
316
|
+
if (slugField.unique) {
|
|
317
|
+
finalSlug = await generateUniqueSlug(core, collection, finalSlug, existingDocumentId);
|
|
318
|
+
}
|
|
319
|
+
logger.debug('Slug generated', {
|
|
320
|
+
field: slugField.fieldName,
|
|
321
|
+
sourceValue,
|
|
322
|
+
slug: finalSlug
|
|
323
|
+
});
|
|
324
|
+
processedData[slugField.fieldName] = finalSlug;
|
|
325
|
+
}
|
|
326
|
+
return processedData;
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=slug-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug-processor.js","sourceRoot":"","sources":["../../src/routes/slug-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route types for Trokky
|
|
3
|
+
*
|
|
4
|
+
* Types are now centralized in @trokky/types and re-exported here for backwards compatibility.
|
|
5
|
+
*/
|
|
6
|
+
import type { TrokkyCore } from '../core/index.js';
|
|
7
|
+
export type { HttpMethod, HttpRequest, HttpResponse, RouteHandler, RouteDefinition, StaticRouteConfig, CorsOptions, RateLimitOptions, AuthenticationOptions, ApiResponse, FrameworkAdapter } from '../types/index.js';
|
|
8
|
+
export type { ListDocumentsRequest, CreateDocumentRequest, UpdateDocumentRequest, GetDocumentRequest, DeleteDocumentRequest, UploadMediaRequest, GetMediaRequest, DeleteMediaRequest, ListUsersRequest, CreateUserRequest, UpdateUserRequest, GetUserRequest, DeleteUserRequest, GetUserByUsernameRequest, GetUserByEmailRequest, LoginRequest, LoginResponse, LogoutRequest, ValidateTokenRequest, RefreshTokenRequest, CheckSlugUniquenessRequest, CheckSlugUniquenessResponse, WebhookRetryPolicy, ListWebhooksRequest, CreateWebhookRequest, UpdateWebhookRequest, GetWebhookRequest, DeleteWebhookRequest, GetWebhookDeliveriesRequest, TestWebhookRequest } from '../types/index.js';
|
|
9
|
+
import type { HttpRequest, StaticRouteConfig, CorsOptions, RateLimitOptions, AuthenticationOptions } from '../types/index.js';
|
|
10
|
+
export interface RoutesConfig {
|
|
11
|
+
core: TrokkyCore;
|
|
12
|
+
basePath?: string;
|
|
13
|
+
corsOptions?: CorsOptions;
|
|
14
|
+
rateLimiting?: RateLimitOptions;
|
|
15
|
+
authentication?: AuthenticationOptions;
|
|
16
|
+
staticRoutes?: {
|
|
17
|
+
media?: StaticRouteConfig;
|
|
18
|
+
assets?: StaticRouteConfig;
|
|
19
|
+
[key: string]: StaticRouteConfig | undefined;
|
|
20
|
+
};
|
|
21
|
+
/** Studio configuration (passed from integration, avoids globals) */
|
|
22
|
+
studioConfig?: any;
|
|
23
|
+
/** Structure configuration (passed from integration, avoids globals) */
|
|
24
|
+
structureConfig?: any;
|
|
25
|
+
}
|
|
26
|
+
export interface RouteContext {
|
|
27
|
+
core: TrokkyCore;
|
|
28
|
+
config: RoutesConfig;
|
|
29
|
+
request: HttpRequest;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routes/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,YAAY,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,mBAAmB,CAAA;AAG1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,iBAAiB,CAAA;QACzB,MAAM,CAAC,EAAE,iBAAiB,CAAA;QAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAA;KAC7C,CAAA;IACD,qEAAqE;IACrE,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,wEAAwE;IACxE,eAAe,CAAC,EAAE,GAAG,CAAA;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/routes/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/users/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/users/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structure Builder
|
|
3
|
+
* Main class for building, validating, and processing structure configurations
|
|
4
|
+
*/
|
|
5
|
+
import { SchemaRegistry, User } from '../../core/index.js';
|
|
6
|
+
import type { TrokkyStructure, StructureItem, DocumentListItem, ResolvedQuery, QueryContext } from '../types/index.js';
|
|
7
|
+
import { CountService } from './navigation-tree-builder.js';
|
|
8
|
+
/**
|
|
9
|
+
* Structure builder options
|
|
10
|
+
*/
|
|
11
|
+
export interface StructureBuilderOptions {
|
|
12
|
+
/** Enable query optimization */
|
|
13
|
+
enableOptimization?: boolean;
|
|
14
|
+
/** Enable caching */
|
|
15
|
+
enableCaching?: boolean;
|
|
16
|
+
/** Default cache TTL (ms) */
|
|
17
|
+
defaultCacheTTL?: number;
|
|
18
|
+
/** Maximum query complexity */
|
|
19
|
+
maxQueryComplexity?: number;
|
|
20
|
+
/** Enable permission inheritance */
|
|
21
|
+
enablePermissionInheritance?: boolean;
|
|
22
|
+
/** Count service for badge counting */
|
|
23
|
+
countService?: CountService;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validation result
|
|
27
|
+
*/
|
|
28
|
+
export interface ValidationResult {
|
|
29
|
+
/** Validation success flag */
|
|
30
|
+
isValid: boolean;
|
|
31
|
+
/** Validation errors */
|
|
32
|
+
errors: ValidationError[];
|
|
33
|
+
/** Validation warnings */
|
|
34
|
+
warnings: ValidationWarning[];
|
|
35
|
+
/** Performance suggestions */
|
|
36
|
+
suggestions?: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validation error
|
|
40
|
+
*/
|
|
41
|
+
export interface ValidationError {
|
|
42
|
+
/** Error path */
|
|
43
|
+
path: string;
|
|
44
|
+
/** Error message */
|
|
45
|
+
message: string;
|
|
46
|
+
/** Error code */
|
|
47
|
+
code: string;
|
|
48
|
+
/** Error context */
|
|
49
|
+
context?: any;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validation warning
|
|
53
|
+
*/
|
|
54
|
+
export interface ValidationWarning {
|
|
55
|
+
/** Warning path */
|
|
56
|
+
path: string;
|
|
57
|
+
/** Warning message */
|
|
58
|
+
message: string;
|
|
59
|
+
/** Warning code */
|
|
60
|
+
code: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Navigation tree
|
|
64
|
+
*/
|
|
65
|
+
export interface NavigationTree {
|
|
66
|
+
/** Tree items */
|
|
67
|
+
items: NavigationItem[];
|
|
68
|
+
/** Tree metadata */
|
|
69
|
+
metadata: {
|
|
70
|
+
totalItems: number;
|
|
71
|
+
maxDepth: number;
|
|
72
|
+
permissions: PermissionSummary;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Navigation item
|
|
77
|
+
*/
|
|
78
|
+
export interface NavigationItem {
|
|
79
|
+
/** Item ID */
|
|
80
|
+
id: string;
|
|
81
|
+
/** Display title */
|
|
82
|
+
title: string;
|
|
83
|
+
/** Item type */
|
|
84
|
+
type: string;
|
|
85
|
+
/** Icon */
|
|
86
|
+
icon?: string;
|
|
87
|
+
/** Badge */
|
|
88
|
+
badge?: BadgeInfo;
|
|
89
|
+
/** Child items */
|
|
90
|
+
children?: NavigationItem[];
|
|
91
|
+
/** Route/path */
|
|
92
|
+
path?: string;
|
|
93
|
+
/** Permissions */
|
|
94
|
+
permissions: PermissionSummary;
|
|
95
|
+
/** Metadata */
|
|
96
|
+
metadata?: any;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Permission summary
|
|
100
|
+
*/
|
|
101
|
+
export interface PermissionSummary {
|
|
102
|
+
/** Can read */
|
|
103
|
+
canRead: boolean;
|
|
104
|
+
/** Can create */
|
|
105
|
+
canCreate: boolean;
|
|
106
|
+
/** Can update */
|
|
107
|
+
canUpdate: boolean;
|
|
108
|
+
/** Can delete */
|
|
109
|
+
canDelete: boolean;
|
|
110
|
+
/** Custom permissions */
|
|
111
|
+
custom?: Record<string, boolean>;
|
|
112
|
+
/** Effective role */
|
|
113
|
+
effectiveRole?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Badge info
|
|
117
|
+
*/
|
|
118
|
+
export interface BadgeInfo {
|
|
119
|
+
/** Badge text */
|
|
120
|
+
text: string;
|
|
121
|
+
/** Badge color */
|
|
122
|
+
color: string;
|
|
123
|
+
/** Badge count */
|
|
124
|
+
count?: number;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Generation options
|
|
128
|
+
*/
|
|
129
|
+
export interface GenerationOptions {
|
|
130
|
+
/** Group by field */
|
|
131
|
+
groupBy?: 'category' | 'type' | 'none';
|
|
132
|
+
/** Default views */
|
|
133
|
+
defaultViews?: string[];
|
|
134
|
+
/** Include workflow states */
|
|
135
|
+
includeWorkflowStates?: boolean;
|
|
136
|
+
/** Exclude types */
|
|
137
|
+
excludeTypes?: string[];
|
|
138
|
+
/** Custom views for specific types */
|
|
139
|
+
customViews?: Record<string, string[]>;
|
|
140
|
+
/** Auto-generate permissions */
|
|
141
|
+
autoPermissions?: boolean;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Main StructureBuilder class
|
|
145
|
+
*/
|
|
146
|
+
export declare class StructureBuilder {
|
|
147
|
+
private schemaRegistry;
|
|
148
|
+
private options;
|
|
149
|
+
private permissionChecker;
|
|
150
|
+
private queryBuilder;
|
|
151
|
+
private navigationBuilder;
|
|
152
|
+
private structureMerger;
|
|
153
|
+
private cache;
|
|
154
|
+
constructor(schemaRegistry: SchemaRegistry, options?: StructureBuilderOptions);
|
|
155
|
+
/**
|
|
156
|
+
* Validate structure configuration
|
|
157
|
+
*/
|
|
158
|
+
validate(structure: TrokkyStructure): ValidationResult;
|
|
159
|
+
/**
|
|
160
|
+
* Build navigation tree for Studio
|
|
161
|
+
*/
|
|
162
|
+
buildNavigation(structure: TrokkyStructure, user?: User): Promise<NavigationTree>;
|
|
163
|
+
/**
|
|
164
|
+
* Resolve queries for a structure item
|
|
165
|
+
*/
|
|
166
|
+
resolveQuery(item: DocumentListItem, context?: QueryContext): Promise<ResolvedQuery>;
|
|
167
|
+
/**
|
|
168
|
+
* Check permissions for current user
|
|
169
|
+
*/
|
|
170
|
+
checkPermissions(item: StructureItem, action: 'read' | 'create' | 'update' | 'delete', user?: User, context?: any): Promise<boolean>;
|
|
171
|
+
/**
|
|
172
|
+
* Merge multiple structure configurations
|
|
173
|
+
*/
|
|
174
|
+
merge(...structures: TrokkyStructure[]): TrokkyStructure;
|
|
175
|
+
/**
|
|
176
|
+
* Generate structure from schemas
|
|
177
|
+
*/
|
|
178
|
+
generateFromSchemas(options?: GenerationOptions): TrokkyStructure;
|
|
179
|
+
/**
|
|
180
|
+
* Optimize structure for performance
|
|
181
|
+
*/
|
|
182
|
+
optimize(structure: TrokkyStructure): TrokkyStructure;
|
|
183
|
+
/**
|
|
184
|
+
* Clear cache
|
|
185
|
+
*/
|
|
186
|
+
clearCache(): void;
|
|
187
|
+
/**
|
|
188
|
+
* Get cache statistics
|
|
189
|
+
*/
|
|
190
|
+
getCacheStats(): {
|
|
191
|
+
size: number;
|
|
192
|
+
keys: string[];
|
|
193
|
+
};
|
|
194
|
+
private validateSemantics;
|
|
195
|
+
private validateSchemaTypes;
|
|
196
|
+
private validatePermissions;
|
|
197
|
+
private validatePerformance;
|
|
198
|
+
private collectIds;
|
|
199
|
+
private checkEmptyGroups;
|
|
200
|
+
private checkQueryComplexity;
|
|
201
|
+
private checkDefaultViews;
|
|
202
|
+
private calculateMaxDepth;
|
|
203
|
+
private groupSchemasByCategory;
|
|
204
|
+
private formatCategoryTitle;
|
|
205
|
+
private getCategoryIcon;
|
|
206
|
+
private createDocumentListItem;
|
|
207
|
+
private optimizeItems;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=StructureBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StructureBuilder.d.ts","sourceRoot":"","sources":["../../../src/structure/builder/StructureBuilder.ts"],"names":[],"mappings":"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"}
|