@hexclave/shared 1.0.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 +7 -0
- package/dist/ai/image-limits.d.ts +24 -0
- package/dist/ai/image-limits.d.ts.map +1 -0
- package/dist/ai/image-limits.js +61 -0
- package/dist/ai/image-limits.js.map +1 -0
- package/dist/ai/unified-prompts/reminders.d.ts +5 -0
- package/dist/ai/unified-prompts/reminders.d.ts.map +1 -0
- package/dist/ai/unified-prompts/reminders.js +33 -0
- package/dist/ai/unified-prompts/reminders.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts +11 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +851 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +64 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +12 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt.d.ts +5 -0
- package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt.js +75 -0
- package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -0
- package/dist/apps/apps-config.d.ts +168 -0
- package/dist/apps/apps-config.d.ts.map +1 -0
- package/dist/apps/apps-config.js +157 -0
- package/dist/apps/apps-config.js.map +1 -0
- package/dist/apps/apps-ui.d.ts +45 -0
- package/dist/apps/apps-ui.d.ts.map +1 -0
- package/dist/apps/apps-ui.js +109 -0
- package/dist/apps/apps-ui.js.map +1 -0
- package/dist/chunk-BE-pF4vm.js +34 -0
- package/dist/config/db-sync-mappings.d.ts +193 -0
- package/dist/config/db-sync-mappings.d.ts.map +1 -0
- package/dist/config/db-sync-mappings.js +2255 -0
- package/dist/config/db-sync-mappings.js.map +1 -0
- package/dist/config/format.d.ts +61 -0
- package/dist/config/format.d.ts.map +1 -0
- package/dist/config/format.js +337 -0
- package/dist/config/format.js.map +1 -0
- package/dist/config/migrate-catalogs-to-product-lines.d.ts +14 -0
- package/dist/config/migrate-catalogs-to-product-lines.d.ts.map +1 -0
- package/dist/config/migrate-catalogs-to-product-lines.js +379 -0
- package/dist/config/migrate-catalogs-to-product-lines.js.map +1 -0
- package/dist/config/schema-fuzzer.test.d.ts +1 -0
- package/dist/config/schema-fuzzer.test.js +401 -0
- package/dist/config/schema-fuzzer.test.js.map +1 -0
- package/dist/config/schema.d.ts +2315 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +1085 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config-authoring.d.ts +12 -0
- package/dist/config-authoring.d.ts.map +1 -0
- package/dist/config-authoring.js +12 -0
- package/dist/config-authoring.js.map +1 -0
- package/dist/config-authoring.test.d.ts +1 -0
- package/dist/config-authoring.test.js +29 -0
- package/dist/config-authoring.test.js.map +1 -0
- package/dist/config-rendering.d.ts +17 -0
- package/dist/config-rendering.d.ts.map +1 -0
- package/dist/config-rendering.js +114 -0
- package/dist/config-rendering.js.map +1 -0
- package/dist/crud.d.ts +98 -0
- package/dist/crud.d.ts.map +1 -0
- package/dist/crud.js +129 -0
- package/dist/crud.js.map +1 -0
- package/dist/esm/ai/image-limits.d.ts +24 -0
- package/dist/esm/ai/image-limits.d.ts.map +1 -0
- package/dist/esm/ai/image-limits.js +53 -0
- package/dist/esm/ai/image-limits.js.map +1 -0
- package/dist/esm/ai/unified-prompts/reminders.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/reminders.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/reminders.js +31 -0
- package/dist/esm/ai/unified-prompts/reminders.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts +11 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +843 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +61 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +10 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts +5 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js +73 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -0
- package/dist/esm/apps/apps-config.d.ts +168 -0
- package/dist/esm/apps/apps-config.d.ts.map +1 -0
- package/dist/esm/apps/apps-config.js +154 -0
- package/dist/esm/apps/apps-config.js.map +1 -0
- package/dist/esm/apps/apps-ui.d.ts +45 -0
- package/dist/esm/apps/apps-ui.d.ts.map +1 -0
- package/dist/esm/apps/apps-ui.js +104 -0
- package/dist/esm/apps/apps-ui.js.map +1 -0
- package/dist/esm/config/db-sync-mappings.d.ts +193 -0
- package/dist/esm/config/db-sync-mappings.d.ts.map +1 -0
- package/dist/esm/config/db-sync-mappings.js +2253 -0
- package/dist/esm/config/db-sync-mappings.js.map +1 -0
- package/dist/esm/config/format.d.ts +61 -0
- package/dist/esm/config/format.d.ts.map +1 -0
- package/dist/esm/config/format.js +327 -0
- package/dist/esm/config/format.js.map +1 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts +14 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts.map +1 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.js +377 -0
- package/dist/esm/config/migrate-catalogs-to-product-lines.js.map +1 -0
- package/dist/esm/config/schema-fuzzer.test.d.ts +1 -0
- package/dist/esm/config/schema-fuzzer.test.js +401 -0
- package/dist/esm/config/schema-fuzzer.test.js.map +1 -0
- package/dist/esm/config/schema.d.ts +2315 -0
- package/dist/esm/config/schema.d.ts.map +1 -0
- package/dist/esm/config/schema.js +1065 -0
- package/dist/esm/config/schema.js.map +1 -0
- package/dist/esm/config-authoring.d.ts +12 -0
- package/dist/esm/config-authoring.d.ts.map +1 -0
- package/dist/esm/config-authoring.js +9 -0
- package/dist/esm/config-authoring.js.map +1 -0
- package/dist/esm/config-authoring.test.d.ts +1 -0
- package/dist/esm/config-authoring.test.js +29 -0
- package/dist/esm/config-authoring.test.js.map +1 -0
- package/dist/esm/config-rendering.d.ts +17 -0
- package/dist/esm/config-rendering.d.ts.map +1 -0
- package/dist/esm/config-rendering.js +108 -0
- package/dist/esm/config-rendering.js.map +1 -0
- package/dist/esm/crud.d.ts +98 -0
- package/dist/esm/crud.d.ts.map +1 -0
- package/dist/esm/crud.js +127 -0
- package/dist/esm/crud.js.map +1 -0
- package/dist/esm/global.d.ts +1 -0
- package/dist/esm/helpers/emails.d.ts +69 -0
- package/dist/esm/helpers/emails.d.ts.map +1 -0
- package/dist/esm/helpers/emails.js +243 -0
- package/dist/esm/helpers/emails.js.map +1 -0
- package/dist/esm/helpers/init-prompt.d.ts +5 -0
- package/dist/esm/helpers/init-prompt.d.ts.map +1 -0
- package/dist/esm/helpers/init-prompt.js +40 -0
- package/dist/esm/helpers/init-prompt.js.map +1 -0
- package/dist/esm/helpers/password.d.ts +7 -0
- package/dist/esm/helpers/password.d.ts.map +1 -0
- package/dist/esm/helpers/password.js +13 -0
- package/dist/esm/helpers/password.js.map +1 -0
- package/dist/esm/helpers/production-mode.d.ts +11 -0
- package/dist/esm/helpers/production-mode.d.ts.map +1 -0
- package/dist/esm/helpers/production-mode.js +46 -0
- package/dist/esm/helpers/production-mode.js.map +1 -0
- package/dist/esm/helpers/support-sla.d.ts +48 -0
- package/dist/esm/helpers/support-sla.d.ts.map +1 -0
- package/dist/esm/helpers/support-sla.js +65 -0
- package/dist/esm/helpers/support-sla.js.map +1 -0
- package/dist/esm/helpers/support-sla.test.d.ts +1 -0
- package/dist/esm/helpers/support-sla.test.js +102 -0
- package/dist/esm/helpers/support-sla.test.js.map +1 -0
- package/dist/esm/helpers/vault/client-side.d.ts +16 -0
- package/dist/esm/helpers/vault/client-side.d.ts.map +1 -0
- package/dist/esm/helpers/vault/client-side.js +69 -0
- package/dist/esm/helpers/vault/client-side.js.map +1 -0
- package/dist/esm/helpers/vault/server-side.d.ts +9 -0
- package/dist/esm/helpers/vault/server-side.d.ts.map +1 -0
- package/dist/esm/helpers/vault/server-side.js +123 -0
- package/dist/esm/helpers/vault/server-side.js.map +1 -0
- package/dist/esm/hooks/use-async-callback.d.ts +8 -0
- package/dist/esm/hooks/use-async-callback.d.ts.map +1 -0
- package/dist/esm/hooks/use-async-callback.js +38 -0
- package/dist/esm/hooks/use-async-callback.js.map +1 -0
- package/dist/esm/hooks/use-async-external-store.d.ts +9 -0
- package/dist/esm/hooks/use-async-external-store.d.ts.map +1 -0
- package/dist/esm/hooks/use-async-external-store.js +20 -0
- package/dist/esm/hooks/use-async-external-store.js.map +1 -0
- package/dist/esm/hooks/use-hash.d.ts +5 -0
- package/dist/esm/hooks/use-hash.d.ts.map +1 -0
- package/dist/esm/hooks/use-hash.js +15 -0
- package/dist/esm/hooks/use-hash.js.map +1 -0
- package/dist/esm/hooks/use-hover.d.ts +8 -0
- package/dist/esm/hooks/use-hover.d.ts.map +1 -0
- package/dist/esm/hooks/use-hover.js +59 -0
- package/dist/esm/hooks/use-hover.js.map +1 -0
- package/dist/esm/hooks/use-strict-memo.d.ts +10 -0
- package/dist/esm/hooks/use-strict-memo.d.ts.map +1 -0
- package/dist/esm/hooks/use-strict-memo.js +119 -0
- package/dist/esm/hooks/use-strict-memo.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/interface/admin-interface.d.ts +308 -0
- package/dist/esm/interface/admin-interface.d.ts.map +1 -0
- package/dist/esm/interface/admin-interface.js +463 -0
- package/dist/esm/interface/admin-interface.js.map +1 -0
- package/dist/esm/interface/admin-metrics.d.ts +597 -0
- package/dist/esm/interface/admin-metrics.d.ts.map +1 -0
- package/dist/esm/interface/admin-metrics.js +134 -0
- package/dist/esm/interface/admin-metrics.js.map +1 -0
- package/dist/esm/interface/client-interface.d.ts +447 -0
- package/dist/esm/interface/client-interface.d.ts.map +1 -0
- package/dist/esm/interface/client-interface.js +1946 -0
- package/dist/esm/interface/client-interface.js.map +1 -0
- package/dist/esm/interface/client-interface.test.d.ts +1 -0
- package/dist/esm/interface/client-interface.test.js +559 -0
- package/dist/esm/interface/client-interface.test.js.map +1 -0
- package/dist/esm/interface/conversations.d.ts +314 -0
- package/dist/esm/interface/conversations.d.ts.map +1 -0
- package/dist/esm/interface/conversations.js +108 -0
- package/dist/esm/interface/conversations.js.map +1 -0
- package/dist/esm/interface/crud/analytics.d.ts +14 -0
- package/dist/esm/interface/crud/analytics.d.ts.map +1 -0
- package/dist/esm/interface/crud/analytics.js +1 -0
- package/dist/esm/interface/crud/connected-accounts.d.ts +69 -0
- package/dist/esm/interface/crud/connected-accounts.d.ts.map +1 -0
- package/dist/esm/interface/crud/connected-accounts.js +35 -0
- package/dist/esm/interface/crud/connected-accounts.js.map +1 -0
- package/dist/esm/interface/crud/contact-channels.d.ts +182 -0
- package/dist/esm/interface/crud/contact-channels.d.ts.map +1 -0
- package/dist/esm/interface/crud/contact-channels.js +68 -0
- package/dist/esm/interface/crud/contact-channels.js.map +1 -0
- package/dist/esm/interface/crud/current-user.d.ts +286 -0
- package/dist/esm/interface/crud/current-user.d.ts.map +1 -0
- package/dist/esm/interface/crud/current-user.js +69 -0
- package/dist/esm/interface/crud/current-user.js.map +1 -0
- package/dist/esm/interface/crud/email-outbox.d.ts +1466 -0
- package/dist/esm/interface/crud/email-outbox.d.ts.map +1 -0
- package/dist/esm/interface/crud/email-outbox.js +190 -0
- package/dist/esm/interface/crud/email-outbox.js.map +1 -0
- package/dist/esm/interface/crud/email-templates.d.ts +86 -0
- package/dist/esm/interface/crud/email-templates.d.ts.map +1 -0
- package/dist/esm/interface/crud/email-templates.js +46 -0
- package/dist/esm/interface/crud/email-templates.js.map +1 -0
- package/dist/esm/interface/crud/emails.d.ts +42 -0
- package/dist/esm/interface/crud/emails.d.ts.map +1 -0
- package/dist/esm/interface/crud/emails.js +19 -0
- package/dist/esm/interface/crud/emails.js.map +1 -0
- package/dist/esm/interface/crud/internal-api-keys.d.ts +141 -0
- package/dist/esm/interface/crud/internal-api-keys.d.ts.map +1 -0
- package/dist/esm/interface/crud/internal-api-keys.js +49 -0
- package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
- package/dist/esm/interface/crud/invoices.d.ts +43 -0
- package/dist/esm/interface/crud/invoices.d.ts.map +1 -0
- package/dist/esm/interface/crud/invoices.js +25 -0
- package/dist/esm/interface/crud/invoices.js.map +1 -0
- package/dist/esm/interface/crud/items.d.ts +31 -0
- package/dist/esm/interface/crud/items.d.ts.map +1 -0
- package/dist/esm/interface/crud/items.js +23 -0
- package/dist/esm/interface/crud/items.js.map +1 -0
- package/dist/esm/interface/crud/notification-preferences.d.ts +39 -0
- package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -0
- package/dist/esm/interface/crud/notification-preferences.js +31 -0
- package/dist/esm/interface/crud/notification-preferences.js.map +1 -0
- package/dist/esm/interface/crud/oauth-providers.d.ts +187 -0
- package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -0
- package/dist/esm/interface/crud/oauth-providers.js +75 -0
- package/dist/esm/interface/crud/oauth-providers.js.map +1 -0
- package/dist/esm/interface/crud/products.d.ts +182 -0
- package/dist/esm/interface/crud/products.d.ts.map +1 -0
- package/dist/esm/interface/crud/products.js +29 -0
- package/dist/esm/interface/crud/products.js.map +1 -0
- package/dist/esm/interface/crud/project-api-keys.d.ts +204 -0
- package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -0
- package/dist/esm/interface/crud/project-api-keys.js +72 -0
- package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
- package/dist/esm/interface/crud/project-permissions.d.ts +162 -0
- package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -0
- package/dist/esm/interface/crud/project-permissions.js +104 -0
- package/dist/esm/interface/crud/project-permissions.js.map +1 -0
- package/dist/esm/interface/crud/projects.d.ts +852 -0
- package/dist/esm/interface/crud/projects.d.ts.map +1 -0
- package/dist/esm/interface/crud/projects.js +193 -0
- package/dist/esm/interface/crud/projects.js.map +1 -0
- package/dist/esm/interface/crud/session-replays.d.ts +83 -0
- package/dist/esm/interface/crud/session-replays.d.ts.map +1 -0
- package/dist/esm/interface/crud/session-replays.js +1 -0
- package/dist/esm/interface/crud/sessions.d.ts +151 -0
- package/dist/esm/interface/crud/sessions.d.ts.map +1 -0
- package/dist/esm/interface/crud/sessions.js +56 -0
- package/dist/esm/interface/crud/sessions.js.map +1 -0
- package/dist/esm/interface/crud/sign-up-rules.d.ts +15 -0
- package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -0
- package/dist/esm/interface/crud/sign-up-rules.js +1 -0
- package/dist/esm/interface/crud/svix-token.d.ts +32 -0
- package/dist/esm/interface/crud/svix-token.d.ts.map +1 -0
- package/dist/esm/interface/crud/svix-token.js +18 -0
- package/dist/esm/interface/crud/svix-token.js.map +1 -0
- package/dist/esm/interface/crud/team-invitation-details.d.ts +32 -0
- package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-invitation-details.js +21 -0
- package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
- package/dist/esm/interface/crud/team-invitation.d.ts +55 -0
- package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-invitation.js +37 -0
- package/dist/esm/interface/crud/team-invitation.js.map +1 -0
- package/dist/esm/interface/crud/team-member-profiles.d.ts +287 -0
- package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-member-profiles.js +58 -0
- package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
- package/dist/esm/interface/crud/team-memberships.d.ts +76 -0
- package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-memberships.js +54 -0
- package/dist/esm/interface/crud/team-memberships.js.map +1 -0
- package/dist/esm/interface/crud/team-permissions.d.ts +170 -0
- package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -0
- package/dist/esm/interface/crud/team-permissions.js +105 -0
- package/dist/esm/interface/crud/team-permissions.js.map +1 -0
- package/dist/esm/interface/crud/teams.d.ts +300 -0
- package/dist/esm/interface/crud/teams.d.ts.map +1 -0
- package/dist/esm/interface/crud/teams.js +129 -0
- package/dist/esm/interface/crud/teams.js.map +1 -0
- package/dist/esm/interface/crud/transactions.d.ts +183 -0
- package/dist/esm/interface/crud/transactions.d.ts.map +1 -0
- package/dist/esm/interface/crud/transactions.js +85 -0
- package/dist/esm/interface/crud/transactions.js.map +1 -0
- package/dist/esm/interface/crud/users.d.ts +654 -0
- package/dist/esm/interface/crud/users.d.ts.map +1 -0
- package/dist/esm/interface/crud/users.js +181 -0
- package/dist/esm/interface/crud/users.js.map +1 -0
- package/dist/esm/interface/handler-urls.d.ts +51 -0
- package/dist/esm/interface/handler-urls.d.ts.map +1 -0
- package/dist/esm/interface/handler-urls.js +3 -0
- package/dist/esm/interface/page-component-versions.d.ts +25 -0
- package/dist/esm/interface/page-component-versions.d.ts.map +1 -0
- package/dist/esm/interface/page-component-versions.js +1661 -0
- package/dist/esm/interface/page-component-versions.js.map +1 -0
- package/dist/esm/interface/server-interface.d.ts +255 -0
- package/dist/esm/interface/server-interface.d.ts.map +1 -0
- package/dist/esm/interface/server-interface.js +459 -0
- package/dist/esm/interface/server-interface.js.map +1 -0
- package/dist/esm/interface/webhooks.d.ts +326 -0
- package/dist/esm/interface/webhooks.d.ts.map +1 -0
- package/dist/esm/interface/webhooks.js +22 -0
- package/dist/esm/interface/webhooks.js.map +1 -0
- package/dist/esm/known-errors.d.ts +575 -0
- package/dist/esm/known-errors.d.ts.map +1 -0
- package/dist/esm/known-errors.js +791 -0
- package/dist/esm/known-errors.js.map +1 -0
- package/dist/esm/local-emulator.d.ts +6 -0
- package/dist/esm/local-emulator.d.ts.map +1 -0
- package/dist/esm/local-emulator.js +7 -0
- package/dist/esm/local-emulator.js.map +1 -0
- package/dist/esm/payments/payment-methods.d.ts +64 -0
- package/dist/esm/payments/payment-methods.d.ts.map +1 -0
- package/dist/esm/payments/payment-methods.js +205 -0
- package/dist/esm/payments/payment-methods.js.map +1 -0
- package/dist/esm/payments/stripe-limits.d.ts +17 -0
- package/dist/esm/payments/stripe-limits.d.ts.map +1 -0
- package/dist/esm/payments/stripe-limits.js +17 -0
- package/dist/esm/payments/stripe-limits.js.map +1 -0
- package/dist/esm/plans.d.ts +72 -0
- package/dist/esm/plans.d.ts.map +1 -0
- package/dist/esm/plans.js +81 -0
- package/dist/esm/plans.js.map +1 -0
- package/dist/esm/schema-fields.d.ts +472 -0
- package/dist/esm/schema-fields.d.ts.map +1 -0
- package/dist/esm/schema-fields.js +1009 -0
- package/dist/esm/schema-fields.js.map +1 -0
- package/dist/esm/sessions.d.ts +165 -0
- package/dist/esm/sessions.d.ts.map +1 -0
- package/dist/esm/sessions.js +226 -0
- package/dist/esm/sessions.js.map +1 -0
- package/dist/esm/stack-config-file.d.ts +15 -0
- package/dist/esm/stack-config-file.d.ts.map +1 -0
- package/dist/esm/stack-config-file.js +76 -0
- package/dist/esm/stack-config-file.js.map +1 -0
- package/dist/esm/utils/api-keys.d.ts +26 -0
- package/dist/esm/utils/api-keys.d.ts.map +1 -0
- package/dist/esm/utils/api-keys.js +77 -0
- package/dist/esm/utils/api-keys.js.map +1 -0
- package/dist/esm/utils/arrays.d.ts +25 -0
- package/dist/esm/utils/arrays.d.ts.map +1 -0
- package/dist/esm/utils/arrays.js +552 -0
- package/dist/esm/utils/arrays.js.map +1 -0
- package/dist/esm/utils/auth-methods.d.ts +6 -0
- package/dist/esm/utils/auth-methods.d.ts.map +1 -0
- package/dist/esm/utils/auth-methods.js +11 -0
- package/dist/esm/utils/auth-methods.js.map +1 -0
- package/dist/esm/utils/base64.d.ts +6 -0
- package/dist/esm/utils/base64.d.ts.map +1 -0
- package/dist/esm/utils/base64.js +25 -0
- package/dist/esm/utils/base64.js.map +1 -0
- package/dist/esm/utils/booleans.d.ts +8 -0
- package/dist/esm/utils/booleans.d.ts.map +1 -0
- package/dist/esm/utils/booleans.js +35 -0
- package/dist/esm/utils/booleans.js.map +1 -0
- package/dist/esm/utils/browser-compat.d.ts +10 -0
- package/dist/esm/utils/browser-compat.d.ts.map +1 -0
- package/dist/esm/utils/browser-compat.js +21 -0
- package/dist/esm/utils/browser-compat.js.map +1 -0
- package/dist/esm/utils/bytes.d.ts +17 -0
- package/dist/esm/utils/bytes.d.ts.map +1 -0
- package/dist/esm/utils/bytes.js +290 -0
- package/dist/esm/utils/bytes.js.map +1 -0
- package/dist/esm/utils/caches.d.ts +102 -0
- package/dist/esm/utils/caches.d.ts.map +1 -0
- package/dist/esm/utils/caches.js +185 -0
- package/dist/esm/utils/caches.js.map +1 -0
- package/dist/esm/utils/cel-fields.d.ts +23 -0
- package/dist/esm/utils/cel-fields.d.ts.map +1 -0
- package/dist/esm/utils/cel-fields.js +99 -0
- package/dist/esm/utils/cel-fields.js.map +1 -0
- package/dist/esm/utils/compile-time.d.ts +10 -0
- package/dist/esm/utils/compile-time.d.ts.map +1 -0
- package/dist/esm/utils/compile-time.js +14 -0
- package/dist/esm/utils/compile-time.js.map +1 -0
- package/dist/esm/utils/country-codes.d.ts +11 -0
- package/dist/esm/utils/country-codes.d.ts.map +1 -0
- package/dist/esm/utils/country-codes.js +36 -0
- package/dist/esm/utils/country-codes.js.map +1 -0
- package/dist/esm/utils/crypto.d.ts +48 -0
- package/dist/esm/utils/crypto.d.ts.map +1 -0
- package/dist/esm/utils/crypto.js +208 -0
- package/dist/esm/utils/crypto.js.map +1 -0
- package/dist/esm/utils/currencies.d.ts +8 -0
- package/dist/esm/utils/currencies.d.ts.map +1 -0
- package/dist/esm/utils/currencies.js +50 -0
- package/dist/esm/utils/currencies.js.map +1 -0
- package/dist/esm/utils/currency-constants.d.ts +39 -0
- package/dist/esm/utils/currency-constants.d.ts.map +1 -0
- package/dist/esm/utils/currency-constants.js +42 -0
- package/dist/esm/utils/currency-constants.js.map +1 -0
- package/dist/esm/utils/dates.d.ts +23 -0
- package/dist/esm/utils/dates.d.ts.map +1 -0
- package/dist/esm/utils/dates.js +167 -0
- package/dist/esm/utils/dates.js.map +1 -0
- package/dist/esm/utils/dev-env-state-path.d.ts +6 -0
- package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -0
- package/dist/esm/utils/dev-env-state-path.js +15 -0
- package/dist/esm/utils/dev-env-state-path.js.map +1 -0
- package/dist/esm/utils/dom.d.ts +5 -0
- package/dist/esm/utils/dom.d.ts.map +1 -0
- package/dist/esm/utils/dom.js +11 -0
- package/dist/esm/utils/dom.js.map +1 -0
- package/dist/esm/utils/env.d.ts +25 -0
- package/dist/esm/utils/env.d.ts.map +1 -0
- package/dist/esm/utils/env.js +78 -0
- package/dist/esm/utils/env.js.map +1 -0
- package/dist/esm/utils/errors.d.ts +231 -0
- package/dist/esm/utils/errors.d.ts.map +1 -0
- package/dist/esm/utils/errors.js +385 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/esbuild.d.ts +16 -0
- package/dist/esm/utils/esbuild.d.ts.map +1 -0
- package/dist/esm/utils/esbuild.js +182 -0
- package/dist/esm/utils/esbuild.js.map +1 -0
- package/dist/esm/utils/featurebase.d.ts +30 -0
- package/dist/esm/utils/featurebase.d.ts.map +1 -0
- package/dist/esm/utils/featurebase.js +166 -0
- package/dist/esm/utils/featurebase.js.map +1 -0
- package/dist/esm/utils/fs.d.ts +9 -0
- package/dist/esm/utils/fs.d.ts.map +1 -0
- package/dist/esm/utils/fs.js +25 -0
- package/dist/esm/utils/fs.js.map +1 -0
- package/dist/esm/utils/functions.d.ts +6 -0
- package/dist/esm/utils/functions.d.ts.map +1 -0
- package/dist/esm/utils/functions.js +34 -0
- package/dist/esm/utils/functions.js.map +1 -0
- package/dist/esm/utils/geo.d.ts +24 -0
- package/dist/esm/utils/geo.d.ts.map +1 -0
- package/dist/esm/utils/geo.js +16 -0
- package/dist/esm/utils/geo.js.map +1 -0
- package/dist/esm/utils/globals.d.ts +13 -0
- package/dist/esm/utils/globals.d.ts.map +1 -0
- package/dist/esm/utils/globals.js +34 -0
- package/dist/esm/utils/globals.js.map +1 -0
- package/dist/esm/utils/hashes.d.ts +9 -0
- package/dist/esm/utils/hashes.d.ts.map +1 -0
- package/dist/esm/utils/hashes.js +40 -0
- package/dist/esm/utils/hashes.js.map +1 -0
- package/dist/esm/utils/html.d.ts +7 -0
- package/dist/esm/utils/html.d.ts.map +1 -0
- package/dist/esm/utils/html.js +33 -0
- package/dist/esm/utils/html.js.map +1 -0
- package/dist/esm/utils/http.d.ts +45 -0
- package/dist/esm/utils/http.d.ts.map +1 -0
- package/dist/esm/utils/http.js +75 -0
- package/dist/esm/utils/http.js.map +1 -0
- package/dist/esm/utils/ips.d.ts +8 -0
- package/dist/esm/utils/ips.d.ts.map +1 -0
- package/dist/esm/utils/ips.js +36 -0
- package/dist/esm/utils/ips.js.map +1 -0
- package/dist/esm/utils/json.d.ts +15 -0
- package/dist/esm/utils/json.d.ts.map +1 -0
- package/dist/esm/utils/json.js +178 -0
- package/dist/esm/utils/json.js.map +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.d.ts +68 -0
- package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.js +216 -0
- package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.test.d.ts +1 -0
- package/dist/esm/utils/jsx-editable-transpiler.test.js +122 -0
- package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -0
- package/dist/esm/utils/jwt.d.ts +79 -0
- package/dist/esm/utils/jwt.d.ts.map +1 -0
- package/dist/esm/utils/jwt.js +102 -0
- package/dist/esm/utils/jwt.js.map +1 -0
- package/dist/esm/utils/locks.d.ts +17 -0
- package/dist/esm/utils/locks.d.ts.map +1 -0
- package/dist/esm/utils/locks.js +54 -0
- package/dist/esm/utils/locks.js.map +1 -0
- package/dist/esm/utils/maps.d.ts +61 -0
- package/dist/esm/utils/maps.d.ts.map +1 -0
- package/dist/esm/utils/maps.js +297 -0
- package/dist/esm/utils/maps.js.map +1 -0
- package/dist/esm/utils/math.d.ts +8 -0
- package/dist/esm/utils/math.d.ts.map +1 -0
- package/dist/esm/utils/math.js +21 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/monkey-patch.d.ts +7 -0
- package/dist/esm/utils/monkey-patch.d.ts.map +1 -0
- package/dist/esm/utils/monkey-patch.js +21 -0
- package/dist/esm/utils/monkey-patch.js.map +1 -0
- package/dist/esm/utils/node-http.d.ts +17 -0
- package/dist/esm/utils/node-http.d.ts.map +1 -0
- package/dist/esm/utils/node-http.js +38 -0
- package/dist/esm/utils/node-http.js.map +1 -0
- package/dist/esm/utils/numbers.d.ts +7 -0
- package/dist/esm/utils/numbers.d.ts.map +1 -0
- package/dist/esm/utils/numbers.js +75 -0
- package/dist/esm/utils/numbers.js.map +1 -0
- package/dist/esm/utils/oauth.d.ts +11 -0
- package/dist/esm/utils/oauth.d.ts.map +1 -0
- package/dist/esm/utils/oauth.js +27 -0
- package/dist/esm/utils/oauth.js.map +1 -0
- package/dist/esm/utils/objects.d.ts +59 -0
- package/dist/esm/utils/objects.d.ts.map +1 -0
- package/dist/esm/utils/objects.js +818 -0
- package/dist/esm/utils/objects.js.map +1 -0
- package/dist/esm/utils/paginated-lists.d.ts +442 -0
- package/dist/esm/utils/paginated-lists.d.ts.map +1 -0
- package/dist/esm/utils/paginated-lists.js +411 -0
- package/dist/esm/utils/paginated-lists.js.map +1 -0
- package/dist/esm/utils/paginated-lists.test.d.ts +1 -0
- package/dist/esm/utils/paginated-lists.test.js +1304 -0
- package/dist/esm/utils/paginated-lists.test.js.map +1 -0
- package/dist/esm/utils/passkey.d.ts +2 -0
- package/dist/esm/utils/passkey.js +1 -0
- package/dist/esm/utils/promises.d.ts +80 -0
- package/dist/esm/utils/promises.d.ts.map +1 -0
- package/dist/esm/utils/promises.js +333 -0
- package/dist/esm/utils/promises.js.map +1 -0
- package/dist/esm/utils/proxies.d.ts +13 -0
- package/dist/esm/utils/proxies.d.ts.map +1 -0
- package/dist/esm/utils/proxies.js +197 -0
- package/dist/esm/utils/proxies.js.map +1 -0
- package/dist/esm/utils/react.d.ts +61 -0
- package/dist/esm/utils/react.d.ts.map +1 -0
- package/dist/esm/utils/react.js +229 -0
- package/dist/esm/utils/react.js.map +1 -0
- package/dist/esm/utils/redirect-urls.d.ts +30 -0
- package/dist/esm/utils/redirect-urls.d.ts.map +1 -0
- package/dist/esm/utils/redirect-urls.js +215 -0
- package/dist/esm/utils/redirect-urls.js.map +1 -0
- package/dist/esm/utils/regex.d.ts +5 -0
- package/dist/esm/utils/regex.d.ts.map +1 -0
- package/dist/esm/utils/regex.js +13 -0
- package/dist/esm/utils/regex.js.map +1 -0
- package/dist/esm/utils/results.d.ts +70 -0
- package/dist/esm/utils/results.d.ts.map +1 -0
- package/dist/esm/utils/results.js +339 -0
- package/dist/esm/utils/results.js.map +1 -0
- package/dist/esm/utils/sentry.d.ts +13 -0
- package/dist/esm/utils/sentry.d.ts.map +1 -0
- package/dist/esm/utils/sentry.js +14 -0
- package/dist/esm/utils/sentry.js.map +1 -0
- package/dist/esm/utils/stores.d.ts +104 -0
- package/dist/esm/utils/stores.d.ts.map +1 -0
- package/dist/esm/utils/stores.js +175 -0
- package/dist/esm/utils/stores.js.map +1 -0
- package/dist/esm/utils/strings.d.ts +76 -0
- package/dist/esm/utils/strings.d.ts.map +1 -0
- package/dist/esm/utils/strings.js +530 -0
- package/dist/esm/utils/strings.js.map +1 -0
- package/dist/esm/utils/strings.nicify.test.d.ts +1 -0
- package/dist/esm/utils/strings.nicify.test.js +243 -0
- package/dist/esm/utils/strings.nicify.test.js.map +1 -0
- package/dist/esm/utils/telemetry.d.ts +15 -0
- package/dist/esm/utils/telemetry.d.ts.map +1 -0
- package/dist/esm/utils/telemetry.js +31 -0
- package/dist/esm/utils/telemetry.js.map +1 -0
- package/dist/esm/utils/turnstile-browser.d.ts +32 -0
- package/dist/esm/utils/turnstile-browser.d.ts.map +1 -0
- package/dist/esm/utils/turnstile-browser.js +61 -0
- package/dist/esm/utils/turnstile-browser.js.map +1 -0
- package/dist/esm/utils/turnstile-flow.d.ts +29 -0
- package/dist/esm/utils/turnstile-flow.d.ts.map +1 -0
- package/dist/esm/utils/turnstile-flow.js +219 -0
- package/dist/esm/utils/turnstile-flow.js.map +1 -0
- package/dist/esm/utils/turnstile-flow.test.d.ts +1 -0
- package/dist/esm/utils/turnstile-flow.test.js +75 -0
- package/dist/esm/utils/turnstile-flow.test.js.map +1 -0
- package/dist/esm/utils/turnstile.d.ts +17 -0
- package/dist/esm/utils/turnstile.d.ts.map +1 -0
- package/dist/esm/utils/turnstile.js +25 -0
- package/dist/esm/utils/turnstile.js.map +1 -0
- package/dist/esm/utils/typed-arrays.d.ts +14 -0
- package/dist/esm/utils/typed-arrays.d.ts.map +1 -0
- package/dist/esm/utils/typed-arrays.js +20 -0
- package/dist/esm/utils/typed-arrays.js.map +1 -0
- package/dist/esm/utils/types.d.ts +77 -0
- package/dist/esm/utils/types.d.ts.map +1 -0
- package/dist/esm/utils/types.js +55 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/esm/utils/unicode.d.ts +5 -0
- package/dist/esm/utils/unicode.d.ts.map +1 -0
- package/dist/esm/utils/unicode.js +24 -0
- package/dist/esm/utils/unicode.js.map +1 -0
- package/dist/esm/utils/urls.d.ts +28 -0
- package/dist/esm/utils/urls.d.ts.map +1 -0
- package/dist/esm/utils/urls.js +259 -0
- package/dist/esm/utils/urls.js.map +1 -0
- package/dist/esm/utils/uuids.d.ts +6 -0
- package/dist/esm/utils/uuids.d.ts.map +1 -0
- package/dist/esm/utils/uuids.js +36 -0
- package/dist/esm/utils/uuids.js.map +1 -0
- package/dist/global.d.d.ts +0 -0
- package/dist/global.d.ts +1 -0
- package/dist/helpers/emails.d.ts +69 -0
- package/dist/helpers/emails.d.ts.map +1 -0
- package/dist/helpers/emails.js +252 -0
- package/dist/helpers/emails.js.map +1 -0
- package/dist/helpers/init-prompt.d.ts +5 -0
- package/dist/helpers/init-prompt.d.ts.map +1 -0
- package/dist/helpers/init-prompt.js +42 -0
- package/dist/helpers/init-prompt.js.map +1 -0
- package/dist/helpers/password.d.ts +6 -0
- package/dist/helpers/password.d.ts.map +1 -0
- package/dist/helpers/password.js +15 -0
- package/dist/helpers/password.js.map +1 -0
- package/dist/helpers/production-mode.d.ts +11 -0
- package/dist/helpers/production-mode.d.ts.map +1 -0
- package/dist/helpers/production-mode.js +48 -0
- package/dist/helpers/production-mode.js.map +1 -0
- package/dist/helpers/support-sla.d.ts +48 -0
- package/dist/helpers/support-sla.d.ts.map +1 -0
- package/dist/helpers/support-sla.js +72 -0
- package/dist/helpers/support-sla.js.map +1 -0
- package/dist/helpers/support-sla.test.d.ts +1 -0
- package/dist/helpers/support-sla.test.js +102 -0
- package/dist/helpers/support-sla.test.js.map +1 -0
- package/dist/helpers/vault/client-side.d.ts +16 -0
- package/dist/helpers/vault/client-side.d.ts.map +1 -0
- package/dist/helpers/vault/client-side.js +73 -0
- package/dist/helpers/vault/client-side.js.map +1 -0
- package/dist/helpers/vault/server-side.d.ts +9 -0
- package/dist/helpers/vault/server-side.d.ts.map +1 -0
- package/dist/helpers/vault/server-side.js +126 -0
- package/dist/helpers/vault/server-side.js.map +1 -0
- package/dist/hooks/use-async-callback.d.ts +8 -0
- package/dist/hooks/use-async-callback.d.ts.map +1 -0
- package/dist/hooks/use-async-callback.js +42 -0
- package/dist/hooks/use-async-callback.js.map +1 -0
- package/dist/hooks/use-async-external-store.d.ts +9 -0
- package/dist/hooks/use-async-external-store.d.ts.map +1 -0
- package/dist/hooks/use-async-external-store.js +22 -0
- package/dist/hooks/use-async-external-store.js.map +1 -0
- package/dist/hooks/use-hash.d.ts +5 -0
- package/dist/hooks/use-hash.d.ts.map +1 -0
- package/dist/hooks/use-hash.js +17 -0
- package/dist/hooks/use-hash.js.map +1 -0
- package/dist/hooks/use-hover.d.ts +8 -0
- package/dist/hooks/use-hover.d.ts.map +1 -0
- package/dist/hooks/use-hover.js +61 -0
- package/dist/hooks/use-hover.js.map +1 -0
- package/dist/hooks/use-strict-memo.d.ts +10 -0
- package/dist/hooks/use-strict-memo.d.ts.map +1 -0
- package/dist/hooks/use-strict-memo.js +121 -0
- package/dist/hooks/use-strict-memo.js.map +1 -0
- package/dist/index-D9ysacya.d.ts +153 -0
- package/dist/index-D9ysacya.d.ts.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +37 -0
- package/dist/interface/admin-interface.d.ts +308 -0
- package/dist/interface/admin-interface.d.ts.map +1 -0
- package/dist/interface/admin-interface.js +465 -0
- package/dist/interface/admin-interface.js.map +1 -0
- package/dist/interface/admin-metrics.d.ts +597 -0
- package/dist/interface/admin-metrics.d.ts.map +1 -0
- package/dist/interface/admin-metrics.js +153 -0
- package/dist/interface/admin-metrics.js.map +1 -0
- package/dist/interface/client-interface.d.ts +447 -0
- package/dist/interface/client-interface.d.ts.map +1 -0
- package/dist/interface/client-interface.js +1948 -0
- package/dist/interface/client-interface.js.map +1 -0
- package/dist/interface/client-interface.test.d.ts +1 -0
- package/dist/interface/client-interface.test.js +559 -0
- package/dist/interface/client-interface.test.js.map +1 -0
- package/dist/interface/conversations.d.ts +314 -0
- package/dist/interface/conversations.d.ts.map +1 -0
- package/dist/interface/conversations.js +121 -0
- package/dist/interface/conversations.js.map +1 -0
- package/dist/interface/crud/analytics.d.ts +14 -0
- package/dist/interface/crud/analytics.d.ts.map +1 -0
- package/dist/interface/crud/analytics.js +0 -0
- package/dist/interface/crud/connected-accounts.d.ts +68 -0
- package/dist/interface/crud/connected-accounts.d.ts.map +1 -0
- package/dist/interface/crud/connected-accounts.js +41 -0
- package/dist/interface/crud/connected-accounts.js.map +1 -0
- package/dist/interface/crud/contact-channels.d.ts +181 -0
- package/dist/interface/crud/contact-channels.d.ts.map +1 -0
- package/dist/interface/crud/contact-channels.js +76 -0
- package/dist/interface/crud/contact-channels.js.map +1 -0
- package/dist/interface/crud/current-user.d.ts +285 -0
- package/dist/interface/crud/current-user.d.ts.map +1 -0
- package/dist/interface/crud/current-user.js +71 -0
- package/dist/interface/crud/current-user.js.map +1 -0
- package/dist/interface/crud/email-outbox.d.ts +1465 -0
- package/dist/interface/crud/email-outbox.d.ts.map +1 -0
- package/dist/interface/crud/email-outbox.js +195 -0
- package/dist/interface/crud/email-outbox.js.map +1 -0
- package/dist/interface/crud/email-templates.d.ts +85 -0
- package/dist/interface/crud/email-templates.d.ts.map +1 -0
- package/dist/interface/crud/email-templates.js +53 -0
- package/dist/interface/crud/email-templates.js.map +1 -0
- package/dist/interface/crud/emails.d.ts +41 -0
- package/dist/interface/crud/emails.d.ts.map +1 -0
- package/dist/interface/crud/emails.js +23 -0
- package/dist/interface/crud/emails.js.map +1 -0
- package/dist/interface/crud/internal-api-keys.d.ts +140 -0
- package/dist/interface/crud/internal-api-keys.d.ts.map +1 -0
- package/dist/interface/crud/internal-api-keys.js +56 -0
- package/dist/interface/crud/internal-api-keys.js.map +1 -0
- package/dist/interface/crud/invoices.d.ts +43 -0
- package/dist/interface/crud/invoices.d.ts.map +1 -0
- package/dist/interface/crud/invoices.js +28 -0
- package/dist/interface/crud/invoices.js.map +1 -0
- package/dist/interface/crud/items.d.ts +30 -0
- package/dist/interface/crud/items.d.ts.map +1 -0
- package/dist/interface/crud/items.js +25 -0
- package/dist/interface/crud/items.js.map +1 -0
- package/dist/interface/crud/notification-preferences.d.ts +38 -0
- package/dist/interface/crud/notification-preferences.d.ts.map +1 -0
- package/dist/interface/crud/notification-preferences.js +33 -0
- package/dist/interface/crud/notification-preferences.js.map +1 -0
- package/dist/interface/crud/oauth-providers.d.ts +186 -0
- package/dist/interface/crud/oauth-providers.d.ts.map +1 -0
- package/dist/interface/crud/oauth-providers.js +83 -0
- package/dist/interface/crud/oauth-providers.js.map +1 -0
- package/dist/interface/crud/products.d.ts +182 -0
- package/dist/interface/crud/products.d.ts.map +1 -0
- package/dist/interface/crud/products.js +32 -0
- package/dist/interface/crud/products.js.map +1 -0
- package/dist/interface/crud/project-api-keys.d.ts +203 -0
- package/dist/interface/crud/project-api-keys.d.ts.map +1 -0
- package/dist/interface/crud/project-api-keys.js +79 -0
- package/dist/interface/crud/project-api-keys.js.map +1 -0
- package/dist/interface/crud/project-permissions.d.ts +161 -0
- package/dist/interface/crud/project-permissions.d.ts.map +1 -0
- package/dist/interface/crud/project-permissions.js +116 -0
- package/dist/interface/crud/project-permissions.js.map +1 -0
- package/dist/interface/crud/projects.d.ts +851 -0
- package/dist/interface/crud/projects.d.ts.map +1 -0
- package/dist/interface/crud/projects.js +204 -0
- package/dist/interface/crud/projects.js.map +1 -0
- package/dist/interface/crud/session-replays.d.ts +83 -0
- package/dist/interface/crud/session-replays.d.ts.map +1 -0
- package/dist/interface/crud/session-replays.js +0 -0
- package/dist/interface/crud/sessions.d.ts +150 -0
- package/dist/interface/crud/sessions.d.ts.map +1 -0
- package/dist/interface/crud/sessions.js +62 -0
- package/dist/interface/crud/sessions.js.map +1 -0
- package/dist/interface/crud/sign-up-rules.d.ts +15 -0
- package/dist/interface/crud/sign-up-rules.d.ts.map +1 -0
- package/dist/interface/crud/sign-up-rules.js +0 -0
- package/dist/interface/crud/svix-token.d.ts +31 -0
- package/dist/interface/crud/svix-token.d.ts.map +1 -0
- package/dist/interface/crud/svix-token.js +22 -0
- package/dist/interface/crud/svix-token.js.map +1 -0
- package/dist/interface/crud/team-invitation-details.d.ts +31 -0
- package/dist/interface/crud/team-invitation-details.d.ts.map +1 -0
- package/dist/interface/crud/team-invitation-details.js +24 -0
- package/dist/interface/crud/team-invitation-details.js.map +1 -0
- package/dist/interface/crud/team-invitation.d.ts +54 -0
- package/dist/interface/crud/team-invitation.d.ts.map +1 -0
- package/dist/interface/crud/team-invitation.js +40 -0
- package/dist/interface/crud/team-invitation.js.map +1 -0
- package/dist/interface/crud/team-member-profiles.d.ts +286 -0
- package/dist/interface/crud/team-member-profiles.d.ts.map +1 -0
- package/dist/interface/crud/team-member-profiles.js +63 -0
- package/dist/interface/crud/team-member-profiles.js.map +1 -0
- package/dist/interface/crud/team-memberships.d.ts +75 -0
- package/dist/interface/crud/team-memberships.d.ts.map +1 -0
- package/dist/interface/crud/team-memberships.js +61 -0
- package/dist/interface/crud/team-memberships.js.map +1 -0
- package/dist/interface/crud/team-permissions.d.ts +169 -0
- package/dist/interface/crud/team-permissions.d.ts.map +1 -0
- package/dist/interface/crud/team-permissions.js +117 -0
- package/dist/interface/crud/team-permissions.js.map +1 -0
- package/dist/interface/crud/teams.d.ts +299 -0
- package/dist/interface/crud/teams.d.ts.map +1 -0
- package/dist/interface/crud/teams.js +142 -0
- package/dist/interface/crud/teams.js.map +1 -0
- package/dist/interface/crud/transactions.d.ts +183 -0
- package/dist/interface/crud/transactions.d.ts.map +1 -0
- package/dist/interface/crud/transactions.js +89 -0
- package/dist/interface/crud/transactions.js.map +1 -0
- package/dist/interface/crud/users.d.ts +653 -0
- package/dist/interface/crud/users.d.ts.map +1 -0
- package/dist/interface/crud/users.js +193 -0
- package/dist/interface/crud/users.js.map +1 -0
- package/dist/interface/handler-urls.d.ts +51 -0
- package/dist/interface/handler-urls.d.ts.map +1 -0
- package/dist/interface/handler-urls.js +16 -0
- package/dist/interface/page-component-versions.d.ts +25 -0
- package/dist/interface/page-component-versions.d.ts.map +1 -0
- package/dist/interface/page-component-versions.js +1664 -0
- package/dist/interface/page-component-versions.js.map +1 -0
- package/dist/interface/server-interface.d.ts +255 -0
- package/dist/interface/server-interface.d.ts.map +1 -0
- package/dist/interface/server-interface.js +461 -0
- package/dist/interface/server-interface.js.map +1 -0
- package/dist/interface/webhooks.d.ts +326 -0
- package/dist/interface/webhooks.d.ts.map +1 -0
- package/dist/interface/webhooks.js +24 -0
- package/dist/interface/webhooks.js.map +1 -0
- package/dist/known-errors.d.ts +575 -0
- package/dist/known-errors.d.ts.map +1 -0
- package/dist/known-errors.js +794 -0
- package/dist/known-errors.js.map +1 -0
- package/dist/local-emulator.d.ts +6 -0
- package/dist/local-emulator.d.ts.map +1 -0
- package/dist/local-emulator.js +10 -0
- package/dist/local-emulator.js.map +1 -0
- package/dist/payments/payment-methods.d.ts +64 -0
- package/dist/payments/payment-methods.d.ts.map +1 -0
- package/dist/payments/payment-methods.js +216 -0
- package/dist/payments/payment-methods.js.map +1 -0
- package/dist/payments/stripe-limits.d.ts +17 -0
- package/dist/payments/stripe-limits.d.ts.map +1 -0
- package/dist/payments/stripe-limits.js +20 -0
- package/dist/payments/stripe-limits.js.map +1 -0
- package/dist/plans.d.ts +72 -0
- package/dist/plans.d.ts.map +1 -0
- package/dist/plans.js +88 -0
- package/dist/plans.js.map +1 -0
- package/dist/schema-fields.d.ts +472 -0
- package/dist/schema-fields.d.ts.map +1 -0
- package/dist/schema-fields.js +1188 -0
- package/dist/schema-fields.js.map +1 -0
- package/dist/sessions.d.ts +165 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +231 -0
- package/dist/sessions.js.map +1 -0
- package/dist/stack-config-file.d.ts +15 -0
- package/dist/stack-config-file.d.ts.map +1 -0
- package/dist/stack-config-file.js +82 -0
- package/dist/stack-config-file.js.map +1 -0
- package/dist/utils/api-keys.d.ts +26 -0
- package/dist/utils/api-keys.d.ts.map +1 -0
- package/dist/utils/api-keys.js +82 -0
- package/dist/utils/api-keys.js.map +1 -0
- package/dist/utils/arrays.d.ts +25 -0
- package/dist/utils/arrays.d.ts.map +1 -0
- package/dist/utils/arrays.js +569 -0
- package/dist/utils/arrays.js.map +1 -0
- package/dist/utils/auth-methods.d.ts +6 -0
- package/dist/utils/auth-methods.d.ts.map +1 -0
- package/dist/utils/auth-methods.js +13 -0
- package/dist/utils/auth-methods.js.map +1 -0
- package/dist/utils/base64.d.ts +6 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +28 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/booleans.d.ts +8 -0
- package/dist/utils/booleans.d.ts.map +1 -0
- package/dist/utils/booleans.js +38 -0
- package/dist/utils/booleans.js.map +1 -0
- package/dist/utils/browser-compat.d.ts +10 -0
- package/dist/utils/browser-compat.d.ts.map +1 -0
- package/dist/utils/browser-compat.js +23 -0
- package/dist/utils/browser-compat.js.map +1 -0
- package/dist/utils/bytes.d.ts +17 -0
- package/dist/utils/bytes.d.ts.map +1 -0
- package/dist/utils/bytes.js +304 -0
- package/dist/utils/bytes.js.map +1 -0
- package/dist/utils/caches.d.ts +102 -0
- package/dist/utils/caches.d.ts.map +1 -0
- package/dist/utils/caches.js +188 -0
- package/dist/utils/caches.js.map +1 -0
- package/dist/utils/cel-fields.d.ts +23 -0
- package/dist/utils/cel-fields.d.ts.map +1 -0
- package/dist/utils/cel-fields.js +108 -0
- package/dist/utils/cel-fields.js.map +1 -0
- package/dist/utils/compile-time.d.ts +10 -0
- package/dist/utils/compile-time.d.ts.map +1 -0
- package/dist/utils/compile-time.js +16 -0
- package/dist/utils/compile-time.js.map +1 -0
- package/dist/utils/country-codes.d.ts +11 -0
- package/dist/utils/country-codes.d.ts.map +1 -0
- package/dist/utils/country-codes.js +40 -0
- package/dist/utils/country-codes.js.map +1 -0
- package/dist/utils/crypto.d.ts +48 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +215 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/currencies.d.ts +8 -0
- package/dist/utils/currencies.d.ts.map +1 -0
- package/dist/utils/currencies.js +52 -0
- package/dist/utils/currencies.js.map +1 -0
- package/dist/utils/currency-constants.d.ts +39 -0
- package/dist/utils/currency-constants.d.ts.map +1 -0
- package/dist/utils/currency-constants.js +44 -0
- package/dist/utils/currency-constants.js.map +1 -0
- package/dist/utils/dates.d.ts +23 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +176 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/dev-env-state-path.d.ts +6 -0
- package/dist/utils/dev-env-state-path.d.ts.map +1 -0
- package/dist/utils/dev-env-state-path.js +18 -0
- package/dist/utils/dev-env-state-path.js.map +1 -0
- package/dist/utils/dom.d.ts +5 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/dom.js +13 -0
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/env.d.ts +25 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +85 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errors.d.ts +231 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +393 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/esbuild.d.ts +16 -0
- package/dist/utils/esbuild.d.ts.map +1 -0
- package/dist/utils/esbuild.js +186 -0
- package/dist/utils/esbuild.js.map +1 -0
- package/dist/utils/featurebase.d.ts +30 -0
- package/dist/utils/featurebase.d.ts.map +1 -0
- package/dist/utils/featurebase.js +168 -0
- package/dist/utils/featurebase.js.map +1 -0
- package/dist/utils/fs.d.ts +9 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +31 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/functions.d.ts +6 -0
- package/dist/utils/functions.d.ts.map +1 -0
- package/dist/utils/functions.js +37 -0
- package/dist/utils/functions.js.map +1 -0
- package/dist/utils/geo.d.ts +24 -0
- package/dist/utils/geo.d.ts.map +1 -0
- package/dist/utils/geo.js +18 -0
- package/dist/utils/geo.js.map +1 -0
- package/dist/utils/globals.d.ts +13 -0
- package/dist/utils/globals.d.ts.map +1 -0
- package/dist/utils/globals.js +40 -0
- package/dist/utils/globals.js.map +1 -0
- package/dist/utils/hashes.d.ts +9 -0
- package/dist/utils/hashes.d.ts.map +1 -0
- package/dist/utils/hashes.js +47 -0
- package/dist/utils/hashes.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +37 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/http.d.ts +45 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +79 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/ips.d.ts +8 -0
- package/dist/utils/ips.d.ts.map +1 -0
- package/dist/utils/ips.js +40 -0
- package/dist/utils/ips.js.map +1 -0
- package/dist/utils/json.d.ts +15 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +182 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/jsx-editable-transpiler.d.ts +68 -0
- package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -0
- package/dist/utils/jsx-editable-transpiler.js +223 -0
- package/dist/utils/jsx-editable-transpiler.js.map +1 -0
- package/dist/utils/jsx-editable-transpiler.test.d.ts +1 -0
- package/dist/utils/jsx-editable-transpiler.test.js +122 -0
- package/dist/utils/jsx-editable-transpiler.test.js.map +1 -0
- package/dist/utils/jwt.d.ts +79 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +112 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/locks.d.ts +17 -0
- package/dist/utils/locks.d.ts.map +1 -0
- package/dist/utils/locks.js +56 -0
- package/dist/utils/locks.js.map +1 -0
- package/dist/utils/maps.d.ts +61 -0
- package/dist/utils/maps.d.ts.map +1 -0
- package/dist/utils/maps.js +302 -0
- package/dist/utils/maps.js.map +1 -0
- package/dist/utils/math.d.ts +8 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +23 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/monkey-patch.d.ts +7 -0
- package/dist/utils/monkey-patch.d.ts.map +1 -0
- package/dist/utils/monkey-patch.js +25 -0
- package/dist/utils/monkey-patch.js.map +1 -0
- package/dist/utils/node-http.d.ts +17 -0
- package/dist/utils/node-http.d.ts.map +1 -0
- package/dist/utils/node-http.js +40 -0
- package/dist/utils/node-http.js.map +1 -0
- package/dist/utils/numbers.d.ts +7 -0
- package/dist/utils/numbers.d.ts.map +1 -0
- package/dist/utils/numbers.js +79 -0
- package/dist/utils/numbers.js.map +1 -0
- package/dist/utils/oauth.d.ts +11 -0
- package/dist/utils/oauth.d.ts.map +1 -0
- package/dist/utils/oauth.js +32 -0
- package/dist/utils/oauth.js.map +1 -0
- package/dist/utils/objects.d.ts +59 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/objects.js +846 -0
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/paginated-lists.d.ts +442 -0
- package/dist/utils/paginated-lists.d.ts.map +1 -0
- package/dist/utils/paginated-lists.js +414 -0
- package/dist/utils/paginated-lists.js.map +1 -0
- package/dist/utils/paginated-lists.test.d.ts +1 -0
- package/dist/utils/paginated-lists.test.js +1304 -0
- package/dist/utils/paginated-lists.test.js.map +1 -0
- package/dist/utils/passkey.d.ts +2 -0
- package/dist/utils/passkey.js +0 -0
- package/dist/utils/promises.d.ts +80 -0
- package/dist/utils/promises.d.ts.map +1 -0
- package/dist/utils/promises.js +349 -0
- package/dist/utils/promises.js.map +1 -0
- package/dist/utils/proxies.d.ts +13 -0
- package/dist/utils/proxies.d.ts.map +1 -0
- package/dist/utils/proxies.js +201 -0
- package/dist/utils/proxies.js.map +1 -0
- package/dist/utils/react.d.ts +61 -0
- package/dist/utils/react.d.ts.map +1 -0
- package/dist/utils/react.js +243 -0
- package/dist/utils/react.js.map +1 -0
- package/dist/utils/redirect-urls.d.ts +30 -0
- package/dist/utils/redirect-urls.d.ts.map +1 -0
- package/dist/utils/redirect-urls.js +222 -0
- package/dist/utils/redirect-urls.js.map +1 -0
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.d.ts.map +1 -0
- package/dist/utils/regex.js +15 -0
- package/dist/utils/regex.js.map +1 -0
- package/dist/utils/results.d.ts +70 -0
- package/dist/utils/results.d.ts.map +1 -0
- package/dist/utils/results.js +342 -0
- package/dist/utils/results.js.map +1 -0
- package/dist/utils/sentry.d.ts +13 -0
- package/dist/utils/sentry.d.ts.map +1 -0
- package/dist/utils/sentry.js +16 -0
- package/dist/utils/sentry.js.map +1 -0
- package/dist/utils/stores.d.ts +104 -0
- package/dist/utils/stores.d.ts.map +1 -0
- package/dist/utils/stores.js +179 -0
- package/dist/utils/stores.js.map +1 -0
- package/dist/utils/strings.d.ts +76 -0
- package/dist/utils/strings.d.ts.map +1 -0
- package/dist/utils/strings.js +549 -0
- package/dist/utils/strings.js.map +1 -0
- package/dist/utils/strings.nicify.test.d.ts +1 -0
- package/dist/utils/strings.nicify.test.js +243 -0
- package/dist/utils/strings.nicify.test.js.map +1 -0
- package/dist/utils/telemetry.d.ts +15 -0
- package/dist/utils/telemetry.d.ts.map +1 -0
- package/dist/utils/telemetry.js +35 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/dist/utils/turnstile-browser.d.ts +32 -0
- package/dist/utils/turnstile-browser.d.ts.map +1 -0
- package/dist/utils/turnstile-browser.js +65 -0
- package/dist/utils/turnstile-browser.js.map +1 -0
- package/dist/utils/turnstile-flow.d.ts +29 -0
- package/dist/utils/turnstile-flow.d.ts.map +1 -0
- package/dist/utils/turnstile-flow.js +225 -0
- package/dist/utils/turnstile-flow.js.map +1 -0
- package/dist/utils/turnstile-flow.test.d.ts +1 -0
- package/dist/utils/turnstile-flow.test.js +75 -0
- package/dist/utils/turnstile-flow.test.js.map +1 -0
- package/dist/utils/turnstile.d.ts +17 -0
- package/dist/utils/turnstile.d.ts.map +1 -0
- package/dist/utils/turnstile.js +31 -0
- package/dist/utils/turnstile.js.map +1 -0
- package/dist/utils/typed-arrays.d.ts +14 -0
- package/dist/utils/typed-arrays.d.ts.map +1 -0
- package/dist/utils/typed-arrays.js +22 -0
- package/dist/utils/typed-arrays.js.map +1 -0
- package/dist/utils/types.d.ts +77 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +59 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/unicode.d.ts +5 -0
- package/dist/utils/unicode.d.ts.map +1 -0
- package/dist/utils/unicode.js +26 -0
- package/dist/utils/unicode.js.map +1 -0
- package/dist/utils/urls.d.ts +28 -0
- package/dist/utils/urls.d.ts.map +1 -0
- package/dist/utils/urls.js +274 -0
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/uuids.d.ts +6 -0
- package/dist/utils/uuids.d.ts.map +1 -0
- package/dist/utils/uuids.js +39 -0
- package/dist/utils/uuids.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-editable-transpiler.js","names":[],"sources":["../../../src/utils/jsx-editable-transpiler.tsx"],"sourcesContent":["import generate from '@babel/generator';\nimport * as parser from '@babel/parser';\nimport traverse, { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { createHash } from 'crypto';\n\n/**\n * Metadata for an editable text region in JSX source code.\n * This information is used by the AI to accurately locate and update text.\n */\nexport type EditableMetadata = {\n /** Unique identifier for this editable region */\n id: string,\n\n /** Exact source code location */\n loc: {\n start: number,\n end: number,\n line: number,\n column: number,\n },\n\n /** The original text content */\n originalText: string,\n\n /** Hash of original text for quick mismatch detection */\n textHash: string,\n\n /** JSX ancestry path from component root to this text node */\n jsxPath: string[],\n\n /** The immediate parent JSX element */\n parentElement: {\n tagName: string,\n props: Record<string, string>,\n },\n\n /** Surrounding source context for disambiguation */\n sourceContext: {\n before: string,\n after: string,\n },\n\n /** Index among sibling text nodes in the same parent */\n siblingIndex: number,\n\n /** Total count of this exact text in the source */\n occurrenceCount: number,\n\n /** Which occurrence this is (1-indexed) */\n occurrenceIndex: number,\n\n /** Which file this text is in */\n sourceFile: \"template\" | \"theme\",\n};\n\n/**\n * Result of transpiling JSX source to include editable markers.\n */\nexport type TranspileResult = {\n /** The transformed source code with __Editable wrappers */\n code: string,\n /** Map of editable region IDs to their metadata */\n editableRegions: Record<string, EditableMetadata>,\n};\n\n/**\n * The __Editable component definition that gets injected into transformed source.\n * It renders sentinel tokens around text that will be converted to HTML comments.\n */\nconst EDITABLE_COMPONENT_CODE = `\nfunction __Editable({ __id, children }) {\n return (\n <>\n {\\`⟦STACK_EDITABLE_START:\\${__id}⟧\\`}\n {children}\n {\\`⟦STACK_EDITABLE_END:\\${__id}⟧\\`}\n </>\n );\n}\nfunction __ExpressionTooltip({ __expr, children }) {\n // Only render markers if children is a primitive (string/number), not a React element\n if (typeof children === 'object' && children !== null) {\n return children;\n }\n return (\n <>\n {\\`⟦STACK_EXPR_START:\\${__expr}⟧\\`}\n {children}\n {\\`⟦STACK_EXPR_END⟧\\`}\n </>\n );\n}\n`;\n\n/**\n * Transpiles TSX source code to wrap all static JSX text nodes with __Editable components.\n *\n * For example:\n * ```tsx\n * <Text>Hi, {name}! Welcome.</Text>\n * ```\n * becomes:\n * ```tsx\n * <Text>\n * <__Editable __id=\"e1\">Hi, </__Editable>\n * {name}\n * <__Editable __id=\"e2\">! Welcome.</__Editable>\n * </Text>\n * ```\n */\nexport function transpileJsxForEditing(\n source: string,\n options: {\n sourceFile: \"template\" | \"theme\",\n }\n): TranspileResult {\n const editableRegions: Record<string, EditableMetadata> = {};\n let idCounter = 0;\n\n // Count occurrences of each text for the occurrenceCount/occurrenceIndex fields\n const textOccurrences = new Map<string, number>();\n\n // First pass: count all text occurrences\n const astForCounting = parser.parse(source, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript'],\n });\n\n traverse(astForCounting, {\n JSXText(path) {\n const text = path.node.value;\n // Skip whitespace-only text nodes\n if (text.trim() === '') return;\n textOccurrences.set(text, (textOccurrences.get(text) ?? 0) + 1);\n },\n });\n\n // Track current occurrence index for each text\n const textCurrentIndex = new Map<string, number>();\n\n // Parse the source again for transformation\n const ast = parser.parse(source, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript'],\n });\n\n // Helper to get JSX ancestry path\n function getJsxPath(path: NodePath<t.JSXText>): string[] {\n const jsxPath: string[] = [];\n let current: NodePath | null = path.parentPath;\n\n while (current) {\n if (t.isJSXElement(current.node)) {\n const openingElement = current.node.openingElement;\n if (t.isJSXIdentifier(openingElement.name)) {\n jsxPath.unshift(openingElement.name.name);\n } else if (t.isJSXMemberExpression(openingElement.name)) {\n jsxPath.unshift(generate(openingElement.name).code);\n }\n } else if (t.isFunctionDeclaration(current.node) && current.node.id) {\n jsxPath.unshift(current.node.id.name);\n break;\n } else if (t.isVariableDeclarator(current.node) && t.isIdentifier(current.node.id)) {\n jsxPath.unshift(current.node.id.name);\n break;\n }\n current = current.parentPath;\n }\n\n return jsxPath;\n }\n\n // Helper to get parent element info\n function getParentElement(path: NodePath<t.JSXText>): { tagName: string, props: Record<string, string> } {\n let current: NodePath | null = path.parentPath;\n\n while (current) {\n if (t.isJSXElement(current.node)) {\n const openingElement = current.node.openingElement;\n let tagName = '';\n\n if (t.isJSXIdentifier(openingElement.name)) {\n tagName = openingElement.name.name;\n } else if (t.isJSXMemberExpression(openingElement.name)) {\n tagName = generate(openingElement.name).code;\n }\n\n const props: Record<string, string> = {};\n for (const attr of openingElement.attributes) {\n if (t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name)) {\n const propName = attr.name.name;\n if (t.isStringLiteral(attr.value)) {\n props[propName] = attr.value.value;\n } else if (t.isJSXExpressionContainer(attr.value) && !t.isJSXEmptyExpression(attr.value.expression)) {\n // For expressions, just note that it's dynamic\n props[propName] = `{${generate(attr.value.expression).code}}`;\n }\n }\n }\n\n return { tagName, props };\n }\n current = current.parentPath;\n }\n\n return { tagName: 'unknown', props: {} };\n }\n\n // Helper to get sibling index among text nodes\n function getSiblingIndex(path: NodePath<t.JSXText>): number {\n const parent = path.parentPath;\n if (!t.isJSXElement(parent.node) && !t.isJSXFragment(parent.node)) {\n return 0;\n }\n\n const children = parent.node.children;\n let textIndex = 0;\n\n for (const child of children) {\n if (child === path.node) {\n return textIndex;\n }\n if (t.isJSXText(child) && child.value.trim() !== '') {\n textIndex++;\n }\n }\n\n return textIndex;\n }\n\n // Helper to get source context (lines before/after)\n function getSourceContext(loc: { start: number, end: number }): { before: string, after: string } {\n const lines = source.split('\\n');\n let currentPos = 0;\n let startLine = 0;\n\n // Find line number for start position\n for (let i = 0; i < lines.length; i++) {\n if (currentPos + lines[i].length >= loc.start) {\n startLine = i;\n break;\n }\n currentPos += lines[i].length + 1; // +1 for newline\n }\n\n const beforeLines = lines.slice(Math.max(0, startLine - 3), startLine).join('\\n');\n const afterLines = lines.slice(startLine + 1, startLine + 4).join('\\n');\n\n return { before: beforeLines, after: afterLines };\n }\n\n // Transform JSXText nodes\n traverse(ast, {\n JSXText(path) {\n const decodedText = path.node.value;\n\n // Skip whitespace-only text nodes\n if (decodedText.trim() === '') return;\n\n // Skip if node doesn't have location info\n // Use explicit null checks since start/end can validly be 0\n if (!path.node.loc || path.node.start == null || path.node.end == null) return;\n\n // IMPORTANT: Use the RAW source text, not the decoded path.node.value\n // Babel's parser decodes HTML entities (e.g., < -> <) in JSX text,\n // but we need to preserve the original source to avoid XSS vulnerabilities\n const rawText = source.slice(path.node.start, path.node.end);\n\n // Use source file prefix to ensure unique IDs across template and theme\n const prefix = options.sourceFile === 'template' ? 't' : 'h'; // t for template, h for theme (header)\n const id = `${prefix}${idCounter++}`;\n const occurrenceCount = textOccurrences.get(decodedText) ?? 1;\n const currentIndex = (textCurrentIndex.get(decodedText) ?? 0) + 1;\n textCurrentIndex.set(decodedText, currentIndex);\n\n const metadata: EditableMetadata = {\n id,\n loc: {\n start: path.node.start,\n end: path.node.end,\n line: path.node.loc.start.line,\n column: path.node.loc.start.column,\n },\n originalText: rawText,\n textHash: createHash('sha256').update(rawText).digest('hex').slice(0, 16),\n jsxPath: getJsxPath(path),\n parentElement: getParentElement(path),\n sourceContext: getSourceContext({ start: path.node.start, end: path.node.end }),\n siblingIndex: getSiblingIndex(path),\n occurrenceCount,\n occurrenceIndex: currentIndex,\n sourceFile: options.sourceFile,\n };\n\n editableRegions[id] = metadata;\n\n // Create the __Editable wrapper\n // <__Editable __id=\"...\">text</__Editable>\n // Use rawText to preserve HTML entities from the original source\n const editableElement = t.jsxElement(\n t.jsxOpeningElement(\n t.jsxIdentifier('__Editable'),\n [\n t.jsxAttribute(\n t.jsxIdentifier('__id'),\n t.stringLiteral(id)\n ),\n ],\n false\n ),\n t.jsxClosingElement(t.jsxIdentifier('__Editable')),\n [t.jsxText(rawText)],\n false\n );\n\n path.replaceWith(editableElement);\n },\n JSXExpressionContainer(path) {\n const expression = path.node.expression;\n\n // Skip empty expressions\n if (t.isJSXEmptyExpression(expression)) return;\n\n // Skip if parent is not a JSXElement (e.g., it's an attribute value)\n if (!t.isJSXElement(path.parent) && !t.isJSXFragment(path.parent)) return;\n\n // Skip JSX elements - we only want to show tooltips for text-rendering expressions\n if (t.isJSXElement(expression) || t.isJSXFragment(expression)) return;\n\n // Skip if no location info\n if (path.node.start == null || path.node.end == null) return;\n\n // Get the exact source code of the expression (including the ${} or just the expression)\n const exprSource = source.slice(path.node.start, path.node.end);\n\n // Base64 encode the expression to safely pass it through the marker\n const encodedExpr = Buffer.from(exprSource).toString('base64');\n\n // Create wrapper: <__ExpressionTooltip __expr=\"...\">{expression}</__ExpressionTooltip>\n const tooltipElement = t.jsxElement(\n t.jsxOpeningElement(\n t.jsxIdentifier('__ExpressionTooltip'),\n [\n t.jsxAttribute(\n t.jsxIdentifier('__expr'),\n t.stringLiteral(encodedExpr)\n ),\n ],\n false\n ),\n t.jsxClosingElement(t.jsxIdentifier('__ExpressionTooltip')),\n [t.jsxExpressionContainer(expression)],\n false\n );\n\n path.replaceWith(t.jsxExpressionContainer(tooltipElement));\n },\n });\n\n // Generate the transformed code\n const output = generate(ast, {\n retainLines: true,\n compact: false,\n });\n\n // Inject the __Editable component at the top of the file (after imports)\n let code = output.code;\n\n // Find the position after all imports\n const importEndMatch = code.match(/^(import\\s+[\\s\\S]*?from\\s+['\"][^'\"]+['\"];?\\s*)+/m);\n if (importEndMatch) {\n const insertPos = (importEndMatch.index ?? 0) + importEndMatch[0].length;\n code = code.slice(0, insertPos) + '\\n' + EDITABLE_COMPONENT_CODE + '\\n' + code.slice(insertPos);\n } else {\n // No imports found, add at the beginning\n code = EDITABLE_COMPONENT_CODE + '\\n' + code;\n }\n\n return {\n code,\n editableRegions,\n };\n}\n\n/**\n * Post-processes rendered HTML to convert sentinel tokens to HTML comments.\n *\n * Converts:\n * - `⟦STACK_EDITABLE_START:<id>⟧` → `<!-- STACK_EDITABLE_START <id> -->`\n * - `⟦STACK_EDITABLE_END:<id>⟧` → `<!-- STACK_EDITABLE_END <id> -->`\n * - `⟦STACK_EXPR_START:<base64-encoded-expr>⟧` → `<!-- STACK_EXPR_START <base64> -->`\n * - `⟦STACK_EXPR_END⟧` → `<!-- STACK_EXPR_END -->`\n */\nexport function convertSentinelTokensToComments(html: string): string {\n return html\n .replace(/⟦STACK_EDITABLE_START:([^⟧]+)⟧/g, '<!-- STACK_EDITABLE_START $1 -->')\n .replace(/⟦STACK_EDITABLE_END:([^⟧]+)⟧/g, '<!-- STACK_EDITABLE_END $1 -->')\n .replace(/⟦STACK_EXPR_START:([^⟧]+)⟧/g, '<!-- STACK_EXPR_START $1 -->')\n .replace(/⟦STACK_EXPR_END⟧/g, '<!-- STACK_EXPR_END -->');\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { convertSentinelTokensToComments, transpileJsxForEditing } from "./jsx-editable-transpiler.js";
|
|
3
|
+
|
|
4
|
+
//#region src/utils/jsx-editable-transpiler.test.ts
|
|
5
|
+
describe("transpileJsxForEditing", () => {
|
|
6
|
+
it("should wrap simple JSX text nodes with __Editable", () => {
|
|
7
|
+
const result = transpileJsxForEditing(`
|
|
8
|
+
export function EmailTemplate() {
|
|
9
|
+
return <div>Hello World!</div>;
|
|
10
|
+
}
|
|
11
|
+
`, { sourceFile: "template" });
|
|
12
|
+
expect(result.code).toContain("__Editable");
|
|
13
|
+
expect(result.code).toContain("Hello World!");
|
|
14
|
+
expect(Object.keys(result.editableRegions).length).toBeGreaterThan(0);
|
|
15
|
+
const region = Object.values(result.editableRegions)[0];
|
|
16
|
+
expect(region.originalText).toBe("Hello World!");
|
|
17
|
+
expect(region.sourceFile).toBe("template");
|
|
18
|
+
expect(region.parentElement.tagName).toBe("div");
|
|
19
|
+
});
|
|
20
|
+
it("should handle multiple text nodes in the same element", () => {
|
|
21
|
+
const result = transpileJsxForEditing(`
|
|
22
|
+
export function EmailTemplate({ name }) {
|
|
23
|
+
return <div>Hello, {name}! Welcome to our platform.</div>;
|
|
24
|
+
}
|
|
25
|
+
`, { sourceFile: "template" });
|
|
26
|
+
const regions = Object.values(result.editableRegions);
|
|
27
|
+
expect(regions.length).toBe(2);
|
|
28
|
+
const texts = regions.map((r) => r.originalText);
|
|
29
|
+
expect(texts).toContain("Hello, ");
|
|
30
|
+
expect(texts).toContain("! Welcome to our platform.");
|
|
31
|
+
});
|
|
32
|
+
it("should skip whitespace-only text nodes", () => {
|
|
33
|
+
const result = transpileJsxForEditing(`
|
|
34
|
+
export function EmailTemplate() {
|
|
35
|
+
return (
|
|
36
|
+
<div>
|
|
37
|
+
<span>Text</span>
|
|
38
|
+
</div>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
`, { sourceFile: "template" });
|
|
42
|
+
const regions = Object.values(result.editableRegions);
|
|
43
|
+
expect(regions.length).toBe(1);
|
|
44
|
+
expect(regions[0].originalText).toBe("Text");
|
|
45
|
+
});
|
|
46
|
+
it("should track occurrence count for duplicate text", () => {
|
|
47
|
+
const result = transpileJsxForEditing(`
|
|
48
|
+
export function EmailTemplate() {
|
|
49
|
+
return (
|
|
50
|
+
<div>
|
|
51
|
+
<p>Click here</p>
|
|
52
|
+
<p>Click here</p>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
`, { sourceFile: "template" });
|
|
57
|
+
const regions = Object.values(result.editableRegions);
|
|
58
|
+
expect(regions.length).toBe(2);
|
|
59
|
+
expect(regions[0].occurrenceCount).toBe(2);
|
|
60
|
+
expect(regions[1].occurrenceCount).toBe(2);
|
|
61
|
+
expect(regions[0].occurrenceIndex).toBe(1);
|
|
62
|
+
expect(regions[1].occurrenceIndex).toBe(2);
|
|
63
|
+
});
|
|
64
|
+
it("should capture JSX path correctly", () => {
|
|
65
|
+
const result = transpileJsxForEditing(`
|
|
66
|
+
export function EmailTemplate() {
|
|
67
|
+
return (
|
|
68
|
+
<Container>
|
|
69
|
+
<Section>
|
|
70
|
+
<Text>Hello</Text>
|
|
71
|
+
</Section>
|
|
72
|
+
</Container>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
`, { sourceFile: "template" });
|
|
76
|
+
const region = Object.values(result.editableRegions)[0];
|
|
77
|
+
expect(region.jsxPath).toContain("EmailTemplate");
|
|
78
|
+
expect(region.jsxPath).toContain("Container");
|
|
79
|
+
expect(region.jsxPath).toContain("Section");
|
|
80
|
+
expect(region.jsxPath).toContain("Text");
|
|
81
|
+
});
|
|
82
|
+
it("should capture parent element props", () => {
|
|
83
|
+
const result = transpileJsxForEditing(`
|
|
84
|
+
export function EmailTemplate() {
|
|
85
|
+
return <Text className="heading" style={{ color: 'red' }}>Title</Text>;
|
|
86
|
+
}
|
|
87
|
+
`, { sourceFile: "template" });
|
|
88
|
+
const region = Object.values(result.editableRegions)[0];
|
|
89
|
+
expect(region.parentElement.tagName).toBe("Text");
|
|
90
|
+
expect(region.parentElement.props.className).toBe("heading");
|
|
91
|
+
});
|
|
92
|
+
it("should inject __Editable component definition", () => {
|
|
93
|
+
const result = transpileJsxForEditing(`
|
|
94
|
+
export function EmailTemplate() {
|
|
95
|
+
return <div>Test</div>;
|
|
96
|
+
}
|
|
97
|
+
`, { sourceFile: "template" });
|
|
98
|
+
expect(result.code).toContain("function __Editable");
|
|
99
|
+
expect(result.code).toContain("STACK_EDITABLE_START");
|
|
100
|
+
expect(result.code).toContain("STACK_EDITABLE_END");
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe("convertSentinelTokensToComments", () => {
|
|
104
|
+
it("should convert start tokens to HTML comments", () => {
|
|
105
|
+
expect(convertSentinelTokensToComments("<div>⟦STACK_EDITABLE_START:e0⟧Hello⟦STACK_EDITABLE_END:e0⟧</div>")).toBe("<div><!-- STACK_EDITABLE_START e0 -->Hello<!-- STACK_EDITABLE_END e0 --></div>");
|
|
106
|
+
});
|
|
107
|
+
it("should handle multiple editable regions", () => {
|
|
108
|
+
const result = convertSentinelTokensToComments("<div>⟦STACK_EDITABLE_START:e0⟧Hello⟦STACK_EDITABLE_END:e0⟧ ⟦STACK_EDITABLE_START:e1⟧World⟦STACK_EDITABLE_END:e1⟧</div>");
|
|
109
|
+
expect(result).toContain("<!-- STACK_EDITABLE_START e0 -->");
|
|
110
|
+
expect(result).toContain("<!-- STACK_EDITABLE_END e0 -->");
|
|
111
|
+
expect(result).toContain("<!-- STACK_EDITABLE_START e1 -->");
|
|
112
|
+
expect(result).toContain("<!-- STACK_EDITABLE_END e1 -->");
|
|
113
|
+
});
|
|
114
|
+
it("should leave regular HTML unchanged", () => {
|
|
115
|
+
const html = "<div><p>Hello World</p></div>";
|
|
116
|
+
expect(convertSentinelTokensToComments(html)).toBe(html);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
//#endregion
|
|
121
|
+
export { };
|
|
122
|
+
//# sourceMappingURL=jsx-editable-transpiler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-editable-transpiler.test.js","names":[],"sources":["../../../src/utils/jsx-editable-transpiler.test.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest';\nimport { transpileJsxForEditing, convertSentinelTokensToComments } from './jsx-editable-transpiler';\n\ndescribe('transpileJsxForEditing', () => {\n it('should wrap simple JSX text nodes with __Editable', () => {\n const source = `\nexport function EmailTemplate() {\n return <div>Hello World!</div>;\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n expect(result.code).toContain('__Editable');\n expect(result.code).toContain('Hello World!');\n expect(Object.keys(result.editableRegions).length).toBeGreaterThan(0);\n\n // Check that the editable region has the expected metadata\n const region = Object.values(result.editableRegions)[0];\n expect(region.originalText).toBe('Hello World!');\n expect(region.sourceFile).toBe('template');\n expect(region.parentElement.tagName).toBe('div');\n });\n\n it('should handle multiple text nodes in the same element', () => {\n const source = `\nexport function EmailTemplate({ name }) {\n return <div>Hello, {name}! Welcome to our platform.</div>;\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n // Should have 2 editable regions (text before and after the expression)\n const regions = Object.values(result.editableRegions);\n expect(regions.length).toBe(2);\n\n const texts = regions.map(r => r.originalText);\n expect(texts).toContain('Hello, ');\n expect(texts).toContain('! Welcome to our platform.');\n });\n\n it('should skip whitespace-only text nodes', () => {\n const source = `\nexport function EmailTemplate() {\n return (\n <div>\n <span>Text</span>\n </div>\n );\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n // Should only have 1 editable region (the \"Text\" in span)\n const regions = Object.values(result.editableRegions);\n expect(regions.length).toBe(1);\n expect(regions[0].originalText).toBe('Text');\n });\n\n it('should track occurrence count for duplicate text', () => {\n const source = `\nexport function EmailTemplate() {\n return (\n <div>\n <p>Click here</p>\n <p>Click here</p>\n </div>\n );\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n const regions = Object.values(result.editableRegions);\n expect(regions.length).toBe(2);\n\n // Both should have occurrenceCount of 2\n expect(regions[0].occurrenceCount).toBe(2);\n expect(regions[1].occurrenceCount).toBe(2);\n\n // They should have different occurrence indices\n expect(regions[0].occurrenceIndex).toBe(1);\n expect(regions[1].occurrenceIndex).toBe(2);\n });\n\n it('should capture JSX path correctly', () => {\n const source = `\nexport function EmailTemplate() {\n return (\n <Container>\n <Section>\n <Text>Hello</Text>\n </Section>\n </Container>\n );\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n const region = Object.values(result.editableRegions)[0];\n expect(region.jsxPath).toContain('EmailTemplate');\n expect(region.jsxPath).toContain('Container');\n expect(region.jsxPath).toContain('Section');\n expect(region.jsxPath).toContain('Text');\n });\n\n it('should capture parent element props', () => {\n const source = `\nexport function EmailTemplate() {\n return <Text className=\"heading\" style={{ color: 'red' }}>Title</Text>;\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n const region = Object.values(result.editableRegions)[0];\n expect(region.parentElement.tagName).toBe('Text');\n expect(region.parentElement.props.className).toBe('heading');\n });\n\n it('should inject __Editable component definition', () => {\n const source = `\nexport function EmailTemplate() {\n return <div>Test</div>;\n}\n`;\n const result = transpileJsxForEditing(source, { sourceFile: 'template' });\n\n expect(result.code).toContain('function __Editable');\n expect(result.code).toContain('STACK_EDITABLE_START');\n expect(result.code).toContain('STACK_EDITABLE_END');\n });\n});\n\ndescribe('convertSentinelTokensToComments', () => {\n it('should convert start tokens to HTML comments', () => {\n const html = '<div>⟦STACK_EDITABLE_START:e0⟧Hello⟦STACK_EDITABLE_END:e0⟧</div>';\n const result = convertSentinelTokensToComments(html);\n\n expect(result).toBe('<div><!-- STACK_EDITABLE_START e0 -->Hello<!-- STACK_EDITABLE_END e0 --></div>');\n });\n\n it('should handle multiple editable regions', () => {\n const html = '<div>⟦STACK_EDITABLE_START:e0⟧Hello⟦STACK_EDITABLE_END:e0⟧ ⟦STACK_EDITABLE_START:e1⟧World⟦STACK_EDITABLE_END:e1⟧</div>';\n const result = convertSentinelTokensToComments(html);\n\n expect(result).toContain('<!-- STACK_EDITABLE_START e0 -->');\n expect(result).toContain('<!-- STACK_EDITABLE_END e0 -->');\n expect(result).toContain('<!-- STACK_EDITABLE_START e1 -->');\n expect(result).toContain('<!-- STACK_EDITABLE_END e1 -->');\n });\n\n it('should leave regular HTML unchanged', () => {\n const html = '<div><p>Hello World</p></div>';\n const result = convertSentinelTokensToComments(html);\n\n expect(result).toBe(html);\n });\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as jose from "jose";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/jwt.d.ts
|
|
4
|
+
declare function getJwtInfo(options: {
|
|
5
|
+
jwt: string;
|
|
6
|
+
}): Promise<({
|
|
7
|
+
status: "error";
|
|
8
|
+
error: {
|
|
9
|
+
error: string;
|
|
10
|
+
stringifiedInput: string;
|
|
11
|
+
};
|
|
12
|
+
} & {
|
|
13
|
+
status: "error";
|
|
14
|
+
}) | ({
|
|
15
|
+
status: "error";
|
|
16
|
+
error: {
|
|
17
|
+
error: string;
|
|
18
|
+
input: string;
|
|
19
|
+
};
|
|
20
|
+
} & {
|
|
21
|
+
status: "error";
|
|
22
|
+
}) | ({
|
|
23
|
+
status: "ok";
|
|
24
|
+
data: {
|
|
25
|
+
payload: jose.JWTPayload;
|
|
26
|
+
};
|
|
27
|
+
} & {
|
|
28
|
+
status: "ok";
|
|
29
|
+
}) | ({
|
|
30
|
+
status: "error";
|
|
31
|
+
error: {
|
|
32
|
+
exception: string;
|
|
33
|
+
};
|
|
34
|
+
} & {
|
|
35
|
+
status: "error";
|
|
36
|
+
})>;
|
|
37
|
+
declare function signJWT(options: {
|
|
38
|
+
issuer: string;
|
|
39
|
+
audience: string;
|
|
40
|
+
payload: any;
|
|
41
|
+
expirationTime?: string;
|
|
42
|
+
}): Promise<string>;
|
|
43
|
+
declare function verifyJWT(options: {
|
|
44
|
+
allowedIssuers: string[];
|
|
45
|
+
jwt: string;
|
|
46
|
+
}): Promise<jose.JWTPayload>;
|
|
47
|
+
type PrivateJwk = {
|
|
48
|
+
kty: "EC";
|
|
49
|
+
alg: "ES256";
|
|
50
|
+
crv: "P-256";
|
|
51
|
+
kid: string;
|
|
52
|
+
d: string;
|
|
53
|
+
x: string;
|
|
54
|
+
y: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Returns a list of valid private JWKs for the given audience, with the first one taking precedence when signing new
|
|
58
|
+
* JWTs.
|
|
59
|
+
*/
|
|
60
|
+
declare function getPrivateJwks(options: {
|
|
61
|
+
audience: string;
|
|
62
|
+
}): Promise<PrivateJwk[]>;
|
|
63
|
+
type PublicJwk = {
|
|
64
|
+
kty: "EC";
|
|
65
|
+
alg: "ES256";
|
|
66
|
+
crv: "P-256";
|
|
67
|
+
kid: string;
|
|
68
|
+
x: string;
|
|
69
|
+
y: string;
|
|
70
|
+
};
|
|
71
|
+
declare function getPublicJwkSet(privateJwks: PrivateJwk[]): Promise<{
|
|
72
|
+
keys: PublicJwk[];
|
|
73
|
+
}>;
|
|
74
|
+
declare function oldGetKid(options: {
|
|
75
|
+
secret: string;
|
|
76
|
+
}): string;
|
|
77
|
+
//#endregion
|
|
78
|
+
export { PrivateJwk, PublicJwk, getJwtInfo, getPrivateJwks, getPublicJwkSet, oldGetKid, signJWT, verifyJWT };
|
|
79
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","names":[],"sources":["../../../src/utils/jwt.tsx"],"mappings":";;;iBAsBsB,UAAA,CAAW,OAAA;EAC/B,GAAA;AAAA,IACD,OAAA;;;;;;;;;;;;;;;;;;;aAF+B,IAAA,CAAA,UAAA;EAAA;AAAA;;;;;;;;;;iBAeV,OAAA,CAAQ,OAAA;EAC5B,MAAA;EACA,QAAA;EACA,OAAA;EACA,cAAA;AAAA,IACD,OAAA;AAAA,iBAaqB,SAAA,CAAU,OAAA;EAC9B,cAAA;EACA,GAAA;AAAA,IACD,OAAA,CAAA,IAAA,CAAA,UAAA;AAAA,KAYW,UAAA;EACV,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,CAAA;EACA,CAAA;EACA,CAAA;AAAA;;;;AAPF;iBAgCsB,cAAA,CAAe,OAAA;EACnC,QAAA;AAAA,IACE,OAAA,CAAQ,UAAA;AAAA,KAuBA,SAAA;EACV,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,CAAA;EACA,CAAA;AAAA;AAAA,iBAEoB,eAAA,CAAgB,WAAA,EAAa,UAAA,KAAe,OAAA;EAAU,IAAA,EAAM,SAAA;AAAA;AAAA,iBAsBlE,SAAA,CAAU,OAAA;EACxB,MAAA;AAAA"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as jose from "jose";
|
|
2
|
+
import { encodeBase64Url } from "./bytes.js";
|
|
3
|
+
import { HexclaveAssertionError, errorToNiceString } from "./errors.js";
|
|
4
|
+
import { getEnvVariable } from "./env.js";
|
|
5
|
+
import { pick } from "./objects.js";
|
|
6
|
+
import { globalVar } from "./globals.js";
|
|
7
|
+
import { Result } from "./results.js";
|
|
8
|
+
import { nicify } from "./strings.js";
|
|
9
|
+
import crypto from "crypto";
|
|
10
|
+
import elliptic from "elliptic";
|
|
11
|
+
import { JOSEError } from "jose/errors";
|
|
12
|
+
|
|
13
|
+
//#region src/utils/jwt.tsx
|
|
14
|
+
function getStackServerSecret() {
|
|
15
|
+
const STACK_SERVER_SECRET = getEnvVariable("STACK_SERVER_SECRET");
|
|
16
|
+
try {
|
|
17
|
+
jose.base64url.decode(STACK_SERVER_SECRET);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw new HexclaveAssertionError("STACK_SERVER_SECRET is not valid. Please use the generateKeys script to generate a new secret.", { cause: e });
|
|
20
|
+
}
|
|
21
|
+
return STACK_SERVER_SECRET;
|
|
22
|
+
}
|
|
23
|
+
async function getJwtInfo(options) {
|
|
24
|
+
try {
|
|
25
|
+
if (typeof options.jwt !== "string") return Result.error({
|
|
26
|
+
error: "JWT input is not a string!",
|
|
27
|
+
stringifiedInput: nicify(options.jwt)
|
|
28
|
+
});
|
|
29
|
+
if (!options.jwt.startsWith("ey")) return Result.error({
|
|
30
|
+
error: "Input is a string, but not a JWT!",
|
|
31
|
+
input: options.jwt
|
|
32
|
+
});
|
|
33
|
+
const decodedJwt = jose.decodeJwt(options.jwt);
|
|
34
|
+
return Result.ok({ payload: decodedJwt });
|
|
35
|
+
} catch (e) {
|
|
36
|
+
return Result.error({ exception: errorToNiceString(e) });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function signJWT(options) {
|
|
40
|
+
const privateJwks = await getPrivateJwks({ audience: options.audience });
|
|
41
|
+
const privateKey = await jose.importJWK(privateJwks[0]);
|
|
42
|
+
return await new jose.SignJWT(options.payload).setProtectedHeader({
|
|
43
|
+
alg: "ES256",
|
|
44
|
+
kid: privateJwks[0].kid
|
|
45
|
+
}).setIssuer(options.issuer).setIssuedAt().setAudience(options.audience).setExpirationTime(options.expirationTime || "5m").sign(privateKey);
|
|
46
|
+
}
|
|
47
|
+
async function verifyJWT(options) {
|
|
48
|
+
const audience = jose.decodeJwt(options.jwt).aud;
|
|
49
|
+
if (!audience || typeof audience !== "string") throw new JOSEError("Invalid JWT audience");
|
|
50
|
+
const jwkSet = jose.createLocalJWKSet(await getPublicJwkSet(await getPrivateJwks({ audience })));
|
|
51
|
+
return (await jose.jwtVerify(options.jwt, jwkSet, { issuer: options.allowedIssuers })).payload;
|
|
52
|
+
}
|
|
53
|
+
async function getPrivateJwkFromDerivedSecret(derivedSecret, kid) {
|
|
54
|
+
const secretHash = await globalVar.crypto.subtle.digest("SHA-256", jose.base64url.decode(derivedSecret));
|
|
55
|
+
const priv = new Uint8Array(secretHash);
|
|
56
|
+
const publicKey = new elliptic.ec("p256").keyFromPrivate(priv).getPublic();
|
|
57
|
+
return {
|
|
58
|
+
kty: "EC",
|
|
59
|
+
crv: "P-256",
|
|
60
|
+
alg: "ES256",
|
|
61
|
+
kid,
|
|
62
|
+
d: encodeBase64Url(priv),
|
|
63
|
+
x: encodeBase64Url(publicKey.getX().toBuffer()),
|
|
64
|
+
y: encodeBase64Url(publicKey.getY().toBuffer())
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns a list of valid private JWKs for the given audience, with the first one taking precedence when signing new
|
|
69
|
+
* JWTs.
|
|
70
|
+
*/
|
|
71
|
+
async function getPrivateJwks(options) {
|
|
72
|
+
const getHashOfJwkInfo = (type) => jose.base64url.encode(crypto.createHash("sha256").update(JSON.stringify([
|
|
73
|
+
type,
|
|
74
|
+
getStackServerSecret(),
|
|
75
|
+
{ audience: options.audience }
|
|
76
|
+
])).digest());
|
|
77
|
+
const perAudienceSecret = getHashOfJwkInfo("stack-jwk-audience-secret");
|
|
78
|
+
const perAudienceKid = getHashOfJwkInfo("stack-jwk-kid").slice(0, 12);
|
|
79
|
+
const oldPerAudienceSecret = oldGetPerAudienceSecret({ audience: options.audience });
|
|
80
|
+
return [await getPrivateJwkFromDerivedSecret(oldPerAudienceSecret, oldGetKid({ secret: oldPerAudienceSecret })), await getPrivateJwkFromDerivedSecret(perAudienceSecret, perAudienceKid)];
|
|
81
|
+
}
|
|
82
|
+
async function getPublicJwkSet(privateJwks) {
|
|
83
|
+
return { keys: privateJwks.map((jwk) => pick(jwk, [
|
|
84
|
+
"kty",
|
|
85
|
+
"alg",
|
|
86
|
+
"crv",
|
|
87
|
+
"x",
|
|
88
|
+
"y",
|
|
89
|
+
"kid"
|
|
90
|
+
])) };
|
|
91
|
+
}
|
|
92
|
+
function oldGetPerAudienceSecret(options) {
|
|
93
|
+
if (options.audience === "kid") throw new HexclaveAssertionError("You cannot use the 'kid' audience for a per-audience secret, see comment below in jwt.tsx");
|
|
94
|
+
return jose.base64url.encode(crypto.createHash("sha256").update(JSON.stringify([getStackServerSecret(), options.audience])).digest());
|
|
95
|
+
}
|
|
96
|
+
function oldGetKid(options) {
|
|
97
|
+
return jose.base64url.encode(crypto.createHash("sha256").update(JSON.stringify([options.secret, "kid"])).digest()).slice(0, 12);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
export { getJwtInfo, getPrivateJwks, getPublicJwkSet, oldGetKid, signJWT, verifyJWT };
|
|
102
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","names":[],"sources":["../../../src/utils/jwt.tsx"],"sourcesContent":["import crypto from \"crypto\";\nimport elliptic from \"elliptic\";\nimport * as jose from \"jose\";\nimport { JOSEError } from \"jose/errors\";\nimport { encodeBase64Url } from \"./bytes\";\nimport { getEnvVariable } from \"./env\";\nimport { HexclaveAssertionError, errorToNiceString } from \"./errors\";\nimport { globalVar } from \"./globals\";\nimport { pick } from \"./objects\";\nimport { Result } from \"./results\";\nimport { nicify } from \"./strings\";\n\nfunction getStackServerSecret() {\n const STACK_SERVER_SECRET = getEnvVariable(\"STACK_SERVER_SECRET\");\n try {\n jose.base64url.decode(STACK_SERVER_SECRET);\n } catch (e) {\n throw new HexclaveAssertionError(\"STACK_SERVER_SECRET is not valid. Please use the generateKeys script to generate a new secret.\", { cause: e });\n }\n return STACK_SERVER_SECRET;\n}\n\nexport async function getJwtInfo(options: {\n jwt: string,\n}) {\n try {\n if (typeof options.jwt !== \"string\") return Result.error({ error: \"JWT input is not a string!\", stringifiedInput: nicify(options.jwt) });\n if (!options.jwt.startsWith(\"ey\")) return Result.error({ error: \"Input is a string, but not a JWT!\", input: options.jwt });\n const decodedJwt = jose.decodeJwt(options.jwt);\n return Result.ok({ payload: decodedJwt });\n } catch (e) {\n return Result.error({\n exception: errorToNiceString(e),\n });\n }\n}\n\nexport async function signJWT(options: {\n issuer: string,\n audience: string,\n payload: any,\n expirationTime?: string,\n}) {\n const privateJwks = await getPrivateJwks({ audience: options.audience });\n const privateKey = await jose.importJWK(privateJwks[0]);\n\n return await new jose.SignJWT(options.payload)\n .setProtectedHeader({ alg: \"ES256\", kid: privateJwks[0].kid })\n .setIssuer(options.issuer)\n .setIssuedAt()\n .setAudience(options.audience)\n .setExpirationTime(options.expirationTime || \"5m\")\n .sign(privateKey);\n}\n\nexport async function verifyJWT(options: {\n allowedIssuers: string[],\n jwt: string,\n}) {\n const decodedJwt = jose.decodeJwt(options.jwt);\n const audience = decodedJwt.aud;\n if (!audience || typeof audience !== \"string\") {\n throw new JOSEError(\"Invalid JWT audience\");\n }\n\n const jwkSet = jose.createLocalJWKSet(await getPublicJwkSet(await getPrivateJwks({ audience })));\n const verified = await jose.jwtVerify(options.jwt, jwkSet, { issuer: options.allowedIssuers });\n return verified.payload;\n}\n\nexport type PrivateJwk = {\n kty: \"EC\",\n alg: \"ES256\",\n crv: \"P-256\",\n kid: string,\n d: string,\n x: string,\n y: string,\n};\nasync function getPrivateJwkFromDerivedSecret(derivedSecret: string, kid: string): Promise<PrivateJwk> {\n const secretHash = await globalVar.crypto.subtle.digest(\"SHA-256\", jose.base64url.decode(derivedSecret));\n const priv = new Uint8Array(secretHash);\n\n const ec = new elliptic.ec('p256');\n const key = ec.keyFromPrivate(priv);\n const publicKey = key.getPublic();\n\n return {\n kty: 'EC',\n crv: 'P-256',\n alg: 'ES256',\n kid: kid,\n d: encodeBase64Url(priv),\n x: encodeBase64Url(publicKey.getX().toBuffer()),\n y: encodeBase64Url(publicKey.getY().toBuffer()),\n };\n}\n\n/**\n * Returns a list of valid private JWKs for the given audience, with the first one taking precedence when signing new\n * JWTs.\n */\nexport async function getPrivateJwks(options: {\n audience: string,\n}): Promise<PrivateJwk[]> {\n const getHashOfJwkInfo = (type: string) => jose.base64url.encode(\n crypto\n .createHash('sha256')\n .update(JSON.stringify([type, getStackServerSecret(), {\n audience: options.audience,\n }]))\n .digest()\n );\n const perAudienceSecret = getHashOfJwkInfo(\"stack-jwk-audience-secret\");\n const perAudienceKid = getHashOfJwkInfo(\"stack-jwk-kid\").slice(0, 12);\n\n const oldPerAudienceSecret = oldGetPerAudienceSecret({ audience: options.audience });\n const oldPerAudienceKid = oldGetKid({ secret: oldPerAudienceSecret });\n\n return [\n // TODO next-release: make this not take precedence; then, in the release after that, remove it entirely\n await getPrivateJwkFromDerivedSecret(oldPerAudienceSecret, oldPerAudienceKid),\n\n await getPrivateJwkFromDerivedSecret(perAudienceSecret, perAudienceKid),\n ];\n}\n\nexport type PublicJwk = {\n kty: \"EC\",\n alg: \"ES256\",\n crv: \"P-256\",\n kid: string,\n x: string,\n y: string,\n};\nexport async function getPublicJwkSet(privateJwks: PrivateJwk[]): Promise<{ keys: PublicJwk[] }> {\n return {\n keys: privateJwks.map(jwk => pick(jwk, [\"kty\", \"alg\", \"crv\", \"x\", \"y\", \"kid\"])),\n };\n}\n\nfunction oldGetPerAudienceSecret(options: {\n audience: string,\n}) {\n if (options.audience === \"kid\") {\n throw new HexclaveAssertionError(\"You cannot use the 'kid' audience for a per-audience secret, see comment below in jwt.tsx\");\n }\n return jose.base64url.encode(\n crypto\n .createHash('sha256')\n // TODO we should prefix a string like \"stack-audience-secret\" before we hash so you can't use `getKid(...)` to get the secret for eg. the \"kid\" audience if the same secret value is used\n // Sadly doing this modification is a bit annoying as we need to leave the old keys to be valid for a little longer\n .update(JSON.stringify([getStackServerSecret(), options.audience]))\n .digest()\n );\n};\n\nexport function oldGetKid(options: {\n secret: string,\n}) {\n return jose.base64url.encode(\n crypto\n .createHash('sha256')\n .update(JSON.stringify([options.secret, \"kid\"])) // TODO see above in getPerAudienceSecret\n .digest()\n ).slice(0, 12);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/utils/locks.d.ts
|
|
2
|
+
type LockCallback<T> = () => Promise<T>;
|
|
3
|
+
declare class ReadWriteLock {
|
|
4
|
+
private semaphore;
|
|
5
|
+
private readers;
|
|
6
|
+
private readersMutex;
|
|
7
|
+
constructor();
|
|
8
|
+
withReadLock<T>(callback: LockCallback<T>): Promise<T>;
|
|
9
|
+
withWriteLock<T>(callback: LockCallback<T>): Promise<T>;
|
|
10
|
+
private _acquireReadLock;
|
|
11
|
+
private _releaseReadLock;
|
|
12
|
+
private _acquireWriteLock;
|
|
13
|
+
private _releaseWriteLock;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { ReadWriteLock };
|
|
17
|
+
//# sourceMappingURL=locks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.d.ts","names":[],"sources":["../../../src/utils/locks.tsx"],"mappings":";KAEK,YAAA,YAAwB,OAAA,CAAQ,CAAA;AAAA,cAExB,aAAA;EAAA,QACH,SAAA;EAAA,QACA,OAAA;EAAA,QACA,YAAA;;EAQF,YAAA,GAAA,CAAgB,QAAA,EAAU,YAAA,CAAa,CAAA,IAAK,OAAA,CAAQ,CAAA;EASpD,aAAA,GAAA,CAAiB,QAAA,EAAU,YAAA,CAAa,CAAA,IAAK,OAAA,CAAQ,CAAA;EAAA,QAS7C,gBAAA;EAAA,QAcA,gBAAA;EAAA,QAcA,iBAAA;EAAA,QAKA,iBAAA;AAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Semaphore } from "async-mutex";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/locks.tsx
|
|
4
|
+
var ReadWriteLock = class {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.semaphore = new Semaphore(1);
|
|
7
|
+
this.readers = 0;
|
|
8
|
+
this.readersMutex = new Semaphore(1);
|
|
9
|
+
}
|
|
10
|
+
async withReadLock(callback) {
|
|
11
|
+
await this._acquireReadLock();
|
|
12
|
+
try {
|
|
13
|
+
return await callback();
|
|
14
|
+
} finally {
|
|
15
|
+
await this._releaseReadLock();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async withWriteLock(callback) {
|
|
19
|
+
await this._acquireWriteLock();
|
|
20
|
+
try {
|
|
21
|
+
return await callback();
|
|
22
|
+
} finally {
|
|
23
|
+
await this._releaseWriteLock();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async _acquireReadLock() {
|
|
27
|
+
await this.readersMutex.acquire();
|
|
28
|
+
try {
|
|
29
|
+
this.readers += 1;
|
|
30
|
+
if (this.readers === 1) await this.semaphore.acquire();
|
|
31
|
+
} finally {
|
|
32
|
+
this.readersMutex.release();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async _releaseReadLock() {
|
|
36
|
+
await this.readersMutex.acquire();
|
|
37
|
+
try {
|
|
38
|
+
this.readers -= 1;
|
|
39
|
+
if (this.readers === 0) this.semaphore.release();
|
|
40
|
+
} finally {
|
|
41
|
+
this.readersMutex.release();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async _acquireWriteLock() {
|
|
45
|
+
await this.semaphore.acquire();
|
|
46
|
+
}
|
|
47
|
+
async _releaseWriteLock() {
|
|
48
|
+
this.semaphore.release();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { ReadWriteLock };
|
|
54
|
+
//# sourceMappingURL=locks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.js","names":[],"sources":["../../../src/utils/locks.tsx"],"sourcesContent":["import { Semaphore } from 'async-mutex';\n\ntype LockCallback<T> = () => Promise<T>;\n\nexport class ReadWriteLock {\n private semaphore: Semaphore;\n private readers: number;\n private readersMutex: Semaphore;\n\n constructor() {\n this.semaphore = new Semaphore(1); // Semaphore with 1 permit\n this.readers = 0; // Track the number of readers\n this.readersMutex = new Semaphore(1); // Protect access to `readers` count\n }\n\n async withReadLock<T>(callback: LockCallback<T>): Promise<T> {\n await this._acquireReadLock();\n try {\n return await callback();\n } finally {\n await this._releaseReadLock();\n }\n }\n\n async withWriteLock<T>(callback: LockCallback<T>): Promise<T> {\n await this._acquireWriteLock();\n try {\n return await callback();\n } finally {\n await this._releaseWriteLock();\n }\n }\n\n private async _acquireReadLock(): Promise<void> {\n // Increment the readers count\n await this.readersMutex.acquire();\n try {\n this.readers += 1;\n // If this is the first reader, block writers\n if (this.readers === 1) {\n await this.semaphore.acquire();\n }\n } finally {\n this.readersMutex.release();\n }\n }\n\n private async _releaseReadLock(): Promise<void> {\n // Decrement the readers count\n await this.readersMutex.acquire();\n try {\n this.readers -= 1;\n // If this was the last reader, release the writer block\n if (this.readers === 0) {\n this.semaphore.release();\n }\n } finally {\n this.readersMutex.release();\n }\n }\n\n private async _acquireWriteLock(): Promise<void> {\n // Writers acquire the main semaphore exclusively\n await this.semaphore.acquire();\n }\n\n private async _releaseWriteLock(): Promise<void> {\n // Writers release the main semaphore\n this.semaphore.release();\n }\n}\n"],"mappings":";;;AAIA,IAAa,gBAAb,MAA2B;CAKzB,cAAc;AACZ,OAAK,YAAY,IAAI,UAAU,EAAE;AACjC,OAAK,UAAU;AACf,OAAK,eAAe,IAAI,UAAU,EAAE;;CAGtC,MAAM,aAAgB,UAAuC;AAC3D,QAAM,KAAK,kBAAkB;AAC7B,MAAI;AACF,UAAO,MAAM,UAAU;YACf;AACR,SAAM,KAAK,kBAAkB;;;CAIjC,MAAM,cAAiB,UAAuC;AAC5D,QAAM,KAAK,mBAAmB;AAC9B,MAAI;AACF,UAAO,MAAM,UAAU;YACf;AACR,SAAM,KAAK,mBAAmB;;;CAIlC,MAAc,mBAAkC;AAE9C,QAAM,KAAK,aAAa,SAAS;AACjC,MAAI;AACF,QAAK,WAAW;AAEhB,OAAI,KAAK,YAAY,EACnB,OAAM,KAAK,UAAU,SAAS;YAExB;AACR,QAAK,aAAa,SAAS;;;CAI/B,MAAc,mBAAkC;AAE9C,QAAM,KAAK,aAAa,SAAS;AACjC,MAAI;AACF,QAAK,WAAW;AAEhB,OAAI,KAAK,YAAY,EACnB,MAAK,UAAU,SAAS;YAElB;AACR,QAAK,aAAa,SAAS;;;CAI/B,MAAc,oBAAmC;AAE/C,QAAM,KAAK,UAAU,SAAS;;CAGhC,MAAc,oBAAmC;AAE/C,OAAK,UAAU,SAAS"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region src/utils/maps.d.ts
|
|
2
|
+
declare class WeakRefIfAvailable<T extends object> {
|
|
3
|
+
private readonly _ref;
|
|
4
|
+
constructor(value: T);
|
|
5
|
+
deref(): T | undefined;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A WeakMap-like object that can be iterated over.
|
|
9
|
+
*
|
|
10
|
+
* Note that it relies on WeakRef, and always falls back to the regular Map behavior (ie. no GC) in browsers that don't support it.
|
|
11
|
+
*/
|
|
12
|
+
declare class IterableWeakMap<K extends object, V> {
|
|
13
|
+
private readonly _weakMap;
|
|
14
|
+
private readonly _keyRefs;
|
|
15
|
+
constructor(entries?: readonly (readonly [K, V])[] | null);
|
|
16
|
+
get(key: K): V | undefined;
|
|
17
|
+
set(key: K, value: V): this;
|
|
18
|
+
delete(key: K): boolean;
|
|
19
|
+
has(key: K): boolean;
|
|
20
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
21
|
+
[Symbol.toStringTag]: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A map that is a IterableWeakMap for object keys and a regular Map for primitive keys. Also provides iteration over both
|
|
25
|
+
* object and primitive keys.
|
|
26
|
+
*
|
|
27
|
+
* Note that, just like IterableWeakMap, older browsers without support for WeakRef will use a regular Map for object keys.
|
|
28
|
+
*/
|
|
29
|
+
declare class MaybeWeakMap<K, V> {
|
|
30
|
+
private readonly _primitiveMap;
|
|
31
|
+
private readonly _weakMap;
|
|
32
|
+
constructor(entries?: readonly (readonly [K, V])[] | null);
|
|
33
|
+
private _isAllowedInWeakMap;
|
|
34
|
+
get(key: K): V | undefined;
|
|
35
|
+
set(key: K, value: V): this;
|
|
36
|
+
delete(key: K): boolean;
|
|
37
|
+
has(key: K): boolean;
|
|
38
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
39
|
+
[Symbol.toStringTag]: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A map that stores values indexed by an array of keys. If the keys are objects and the environment supports WeakRefs,
|
|
43
|
+
* they are stored in a WeakMap.
|
|
44
|
+
*/
|
|
45
|
+
declare class DependenciesMap<K extends any[], V> {
|
|
46
|
+
private _inner;
|
|
47
|
+
private _valueToResult;
|
|
48
|
+
private _unwrapFromInner;
|
|
49
|
+
private _setInInner;
|
|
50
|
+
private _iterateInner;
|
|
51
|
+
get(dependencies: K): V | undefined;
|
|
52
|
+
set(dependencies: K, value: V): this;
|
|
53
|
+
delete(dependencies: K): boolean;
|
|
54
|
+
has(dependencies: K): boolean;
|
|
55
|
+
clear(): void;
|
|
56
|
+
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
57
|
+
[Symbol.toStringTag]: string;
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { DependenciesMap, IterableWeakMap, MaybeWeakMap, WeakRefIfAvailable };
|
|
61
|
+
//# sourceMappingURL=maps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.d.ts","names":[],"sources":["../../../src/utils/maps.tsx"],"mappings":";cAEa,kBAAA;EAAA,iBACM,IAAA;cAEL,KAAA,EAAO,CAAA;EAQnB,KAAA,CAAA,GAAS,CAAA;AAAA;;;;;;cA4BE,eAAA;EAAA,iBACM,QAAA;EAAA,iBACA,QAAA;cAEL,OAAA,uBAA8B,CAAA,EAAG,CAAA;EAM7C,GAAA,CAAI,GAAA,EAAK,CAAA,GAAI,CAAA;EAIb,GAAA,CAAI,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,CAAA;EAQnB,MAAA,CAAO,GAAA,EAAK,CAAA;EAUZ,GAAA,CAAI,GAAA,EAAK,CAAA;EAAA,CAIP,MAAA,CAAO,QAAA,KAAa,gBAAA,EAAkB,CAAA,EAAG,CAAA;EAAA,CAa1C,MAAA,CAAO,WAAA;AAAA;;;;;;;cAuEG,YAAA;EAAA,iBACM,aAAA;EAAA,iBACA,QAAA;cAEL,OAAA,uBAA8B,CAAA,EAAG,CAAA;EAAA,QAMrC,mBAAA;EAIR,GAAA,CAAI,GAAA,EAAK,CAAA,GAAI,CAAA;EAQb,GAAA,CAAI,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,CAAA;EASnB,MAAA,CAAO,GAAA,EAAK,CAAA;EAQZ,GAAA,CAAI,GAAA,EAAK,CAAA;EAAA,CAQP,MAAA,CAAO,QAAA,KAAa,gBAAA,EAAkB,CAAA,EAAG,CAAA;EAAA,CAK1C,MAAA,CAAO,WAAA;AAAA;;;;;cA6DG,eAAA;EAAA,QACH,MAAA;EAAA,QAEA,cAAA;EAAA,QASA,gBAAA;EAAA,QAaA,WAAA;EAAA,QAqBC,aAAA;EAST,GAAA,CAAI,YAAA,EAAc,CAAA,GAAI,CAAA;EAItB,GAAA,CAAI,YAAA,EAAc,CAAA,EAAG,KAAA,EAAO,CAAA;EAK5B,MAAA,CAAO,YAAA,EAAc,CAAA;EAIrB,GAAA,CAAI,YAAA,EAAc,CAAA;EAIlB,KAAA,CAAA;EAAA,CAIE,MAAA,CAAO,QAAA,KAAa,gBAAA,EAAkB,CAAA,EAAG,CAAA;EAAA,CAI1C,MAAA,CAAO,WAAA;AAAA"}
|