convex 1.46.0 → 1.48.0-alpha.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/CHANGELOG.md +58 -1
- package/dist/browser.bundle.js +7 -1
- package/dist/browser.bundle.js.map +2 -2
- package/dist/cjs/bundler/context.js +7 -5
- package/dist/cjs/bundler/context.js.map +2 -2
- package/dist/cjs/bundler/fs.js +47 -6
- package/dist/cjs/bundler/fs.js.map +2 -2
- package/dist/cjs/bundler/index.js +5 -4
- package/dist/cjs/bundler/index.js.map +2 -2
- package/dist/cjs/cli/account.js +237 -0
- package/dist/cjs/cli/account.js.map +7 -0
- package/dist/cjs/cli/codegen.js +0 -4
- package/dist/cjs/cli/codegen.js.map +2 -2
- package/dist/cjs/cli/configure.js +28 -6
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +27 -2
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentSelect.js +2 -2
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +6 -0
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/env.js +10 -5
- package/dist/cjs/cli/env.js.map +2 -2
- package/dist/cjs/cli/envDefault.js +7 -2
- package/dist/cjs/cli/envDefault.js.map +2 -2
- package/dist/cjs/cli/generatedApi.js.map +1 -1
- package/dist/cjs/cli/lib/api.js +2 -0
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js +113 -0
- package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js +36 -47
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +58 -39
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +2 -2
- package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js +90 -0
- package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
- package/dist/cjs/cli/lib/codegen.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +2 -1
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/components/definition/bundle.js +37 -11
- package/dist/cjs/cli/lib/components/definition/bundle.js.map +2 -2
- package/dist/cjs/cli/lib/components.js +48 -5
- package/dist/cjs/cli/lib/components.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +56 -17
- package/dist/cjs/cli/lib/config.js.map +2 -2
- package/dist/cjs/cli/lib/deploy2.js +3 -1
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +30 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js.map +2 -2
- package/dist/cjs/cli/lib/deployKeyWarning.js +43 -0
- package/dist/cjs/cli/lib/deployKeyWarning.js.map +7 -0
- package/dist/cjs/cli/lib/deployment.js +2 -0
- package/dist/cjs/cli/lib/deployment.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +27 -18
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +5 -0
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/envvars.js +32 -0
- package/dist/cjs/cli/lib/envvars.js.map +2 -2
- package/dist/cjs/cli/lib/formatValidationProgress.js +47 -0
- package/dist/cjs/cli/lib/formatValidationProgress.js.map +7 -0
- package/dist/cjs/cli/lib/fsUtils.js +1 -1
- package/dist/cjs/cli/lib/fsUtils.js.map +2 -2
- package/dist/cjs/cli/lib/generateDocs.js +1 -1
- package/dist/cjs/cli/lib/generateDocs.js.map +1 -1
- package/dist/cjs/cli/lib/indexes.js.map +1 -1
- package/dist/cjs/cli/lib/login.js +28 -4
- package/dist/cjs/cli/lib/login.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/requestContext.js +5 -1
- package/dist/cjs/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/env.js +10 -3
- package/dist/cjs/cli/lib/mcp/tools/env.js.map +2 -2
- package/dist/cjs/cli/lib/profileManagement.js +196 -0
- package/dist/cjs/cli/lib/profileManagement.js.map +7 -0
- package/dist/cjs/cli/lib/profiles.js +333 -0
- package/dist/cjs/cli/lib/profiles.js.map +7 -0
- package/dist/cjs/cli/lib/run.js +4 -0
- package/dist/cjs/cli/lib/run.js.map +2 -2
- package/dist/cjs/cli/lib/schemaEvaluation.js +62 -0
- package/dist/cjs/cli/lib/schemaEvaluation.js.map +7 -0
- package/dist/cjs/cli/lib/usageLimits.js +4 -2
- package/dist/cjs/cli/lib/usageLimits.js.map +2 -2
- package/dist/cjs/cli/lib/utils/mutex.js +9 -24
- package/dist/cjs/cli/lib/utils/mutex.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +66 -27
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- package/dist/cjs/cli/login.js +213 -114
- package/dist/cjs/cli/login.js.map +3 -3
- package/dist/cjs/cli/logout.js +113 -12
- package/dist/cjs/cli/logout.js.map +3 -3
- package/dist/cjs/cli/mcp.js +43 -10
- package/dist/cjs/cli/mcp.js.map +3 -3
- package/dist/cjs/cli/program.js +2 -1
- package/dist/cjs/cli/program.js.map +2 -2
- package/dist/cjs/cli/projectCreate.js +1 -1
- package/dist/cjs/cli/projectCreate.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/impl/actions_impl.js +8 -3
- package/dist/cjs/server/impl/actions_impl.js.map +2 -2
- package/dist/cjs/server/impl/storage_impl.js +29 -0
- package/dist/cjs/server/impl/storage_impl.js.map +2 -2
- package/dist/cjs/server/index.js +1 -0
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js.map +1 -1
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs/server/schema.js +34 -12
- package/dist/cjs/server/schema.js.map +2 -2
- package/dist/cjs/server/storage.js.map +1 -1
- package/dist/cjs/values/validators.js +1 -1
- package/dist/cjs/values/validators.js.map +2 -2
- package/dist/cjs/values/value.js +6 -0
- package/dist/cjs/values/value.js.map +2 -2
- package/dist/cjs-types/bundler/context.d.ts +5 -0
- package/dist/cjs-types/bundler/context.d.ts.map +1 -1
- package/dist/cjs-types/bundler/fs.d.ts +7 -2
- package/dist/cjs-types/bundler/fs.d.ts.map +1 -1
- package/dist/cjs-types/bundler/index.d.ts +9 -2
- package/dist/cjs-types/bundler/index.d.ts.map +1 -1
- package/dist/cjs-types/cli/account.d.ts +6 -0
- package/dist/cjs-types/cli/account.d.ts.map +1 -0
- package/dist/cjs-types/cli/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts +6 -0
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploy.d.ts +2 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +6 -6
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +1 -0
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
- package/dist/cjs-types/cli/generatedApi.d.ts +1 -1
- package/dist/cjs-types/cli/generatedApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
- package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts +5 -7
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +4 -10
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
- package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/codegen.d.ts +0 -3
- package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -0
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts +13 -0
- package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components.d.ts +4 -0
- package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +2 -1
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +460 -16
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts +3 -0
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/deployment.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +2 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts +1 -0
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/envvars.d.ts +6 -0
- package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts +8 -0
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/fsUtils.d.ts +1 -0
- package/dist/cjs-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/login.d.ts +3 -1
- package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts +8 -5
- package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/profileManagement.d.ts +10 -0
- package/dist/cjs-types/cli/lib/profileManagement.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/profiles.d.ts +59 -0
- package/dist/cjs-types/cli/lib/profiles.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts +33 -0
- package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/usageLimits.d.ts +1 -1
- package/dist/cjs-types/cli/lib/usageLimits.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/mutex.d.ts +1 -3
- package/dist/cjs-types/cli/lib/utils/mutex.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +15 -2
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/login.d.ts +21 -0
- package/dist/cjs-types/cli/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/logout.d.ts +8 -1
- package/dist/cjs-types/cli/logout.d.ts.map +1 -1
- package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
- package/dist/cjs-types/cli/program.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/index.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/actions_impl.d.ts +18 -3
- package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/storage_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +1 -1
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +63 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/registration.d.ts +10 -0
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cjs-types/server/schema.d.ts +33 -0
- package/dist/cjs-types/server/schema.d.ts.map +1 -1
- package/dist/cjs-types/server/storage.d.ts.map +1 -1
- package/dist/cjs-types/values/value.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +4889 -2980
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/bundler/context.js +7 -5
- package/dist/esm/bundler/context.js.map +2 -2
- package/dist/esm/bundler/fs.js +47 -6
- package/dist/esm/bundler/fs.js.map +2 -2
- package/dist/esm/bundler/index.js +5 -4
- package/dist/esm/bundler/index.js.map +2 -2
- package/dist/esm/cli/account.js +221 -0
- package/dist/esm/cli/account.js.map +7 -0
- package/dist/esm/cli/codegen.js +0 -4
- package/dist/esm/cli/codegen.js.map +2 -2
- package/dist/esm/cli/configure.js +27 -6
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +27 -2
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +6 -3
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +6 -0
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/env.js +11 -6
- package/dist/esm/cli/env.js.map +2 -2
- package/dist/esm/cli/envDefault.js +7 -2
- package/dist/esm/cli/envDefault.js.map +2 -2
- package/dist/esm/cli/lib/api.js +2 -0
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/checkForLargeIndexBackfill.js +95 -0
- package/dist/esm/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js +37 -48
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +63 -41
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +2 -2
- package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js +68 -0
- package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
- package/dist/esm/cli/lib/codegen.js.map +2 -2
- package/dist/esm/cli/lib/command.js +2 -1
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/components/definition/bundle.js +37 -11
- package/dist/esm/cli/lib/components/definition/bundle.js.map +2 -2
- package/dist/esm/cli/lib/components.js +55 -5
- package/dist/esm/cli/lib/components.js.map +2 -2
- package/dist/esm/cli/lib/config.js +55 -17
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +3 -1
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js +28 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js.map +2 -2
- package/dist/esm/cli/lib/deployKeyWarning.js +27 -0
- package/dist/esm/cli/lib/deployKeyWarning.js.map +7 -0
- package/dist/esm/cli/lib/deployment.js +2 -2
- package/dist/esm/cli/lib/deployment.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +35 -20
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +5 -0
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/envvars.js +35 -1
- package/dist/esm/cli/lib/envvars.js.map +2 -2
- package/dist/esm/cli/lib/formatValidationProgress.js +24 -0
- package/dist/esm/cli/lib/formatValidationProgress.js.map +7 -0
- package/dist/esm/cli/lib/fsUtils.js +1 -1
- package/dist/esm/cli/lib/fsUtils.js.map +2 -2
- package/dist/esm/cli/lib/generateDocs.js +1 -1
- package/dist/esm/cli/lib/generateDocs.js.map +1 -1
- package/dist/esm/cli/lib/indexes.js.map +1 -1
- package/dist/esm/cli/lib/login.js +36 -4
- package/dist/esm/cli/lib/login.js.map +2 -2
- package/dist/esm/cli/lib/mcp/requestContext.js +5 -1
- package/dist/esm/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/esm/cli/lib/mcp/tools/env.js +10 -3
- package/dist/esm/cli/lib/mcp/tools/env.js.map +2 -2
- package/dist/esm/cli/lib/profileManagement.js +179 -0
- package/dist/esm/cli/lib/profileManagement.js.map +7 -0
- package/dist/esm/cli/lib/profiles.js +288 -0
- package/dist/esm/cli/lib/profiles.js.map +7 -0
- package/dist/esm/cli/lib/run.js +4 -0
- package/dist/esm/cli/lib/run.js.map +2 -2
- package/dist/esm/cli/lib/schemaEvaluation.js +39 -0
- package/dist/esm/cli/lib/schemaEvaluation.js.map +7 -0
- package/dist/esm/cli/lib/usageLimits.js +4 -2
- package/dist/esm/cli/lib/usageLimits.js.map +2 -2
- package/dist/esm/cli/lib/utils/mutex.js +9 -24
- package/dist/esm/cli/lib/utils/mutex.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +63 -27
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- package/dist/esm/cli/login.js +225 -112
- package/dist/esm/cli/login.js.map +3 -3
- package/dist/esm/cli/logout.js +110 -13
- package/dist/esm/cli/logout.js.map +2 -2
- package/dist/esm/cli/mcp.js +34 -10
- package/dist/esm/cli/mcp.js.map +2 -2
- package/dist/esm/cli/program.js +2 -1
- package/dist/esm/cli/program.js.map +2 -2
- package/dist/esm/cli/projectCreate.js +1 -1
- package/dist/esm/cli/projectCreate.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/impl/actions_impl.js +7 -3
- package/dist/esm/server/impl/actions_impl.js.map +2 -2
- package/dist/esm/server/impl/storage_impl.js +29 -0
- package/dist/esm/server/impl/storage_impl.js.map +2 -2
- package/dist/esm/server/index.js +4 -1
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/schema.js +34 -12
- package/dist/esm/server/schema.js.map +2 -2
- package/dist/esm/values/validators.js +1 -1
- package/dist/esm/values/validators.js.map +2 -2
- package/dist/esm/values/value.js +6 -0
- package/dist/esm/values/value.js.map +2 -2
- package/dist/esm-types/bundler/context.d.ts +5 -0
- package/dist/esm-types/bundler/context.d.ts.map +1 -1
- package/dist/esm-types/bundler/fs.d.ts +7 -2
- package/dist/esm-types/bundler/fs.d.ts.map +1 -1
- package/dist/esm-types/bundler/index.d.ts +9 -2
- package/dist/esm-types/bundler/index.d.ts.map +1 -1
- package/dist/esm-types/cli/account.d.ts +6 -0
- package/dist/esm-types/cli/account.d.ts.map +1 -0
- package/dist/esm-types/cli/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts +6 -0
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/deploy.d.ts +2 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +6 -6
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +1 -0
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/env.d.ts.map +1 -1
- package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
- package/dist/esm-types/cli/generatedApi.d.ts +1 -1
- package/dist/esm-types/cli/generatedApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
- package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts +5 -7
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +4 -10
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
- package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/codegen.d.ts +0 -3
- package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -0
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components/definition/bundle.d.ts +13 -0
- package/dist/esm-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components.d.ts +4 -0
- package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +2 -1
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +2 -0
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +460 -16
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts +3 -0
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/deployment.d.ts +2 -0
- package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts +2 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts +1 -0
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/envvars.d.ts +6 -0
- package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts +8 -0
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/fsUtils.d.ts +1 -0
- package/dist/esm-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/login.d.ts +3 -1
- package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/tools/env.d.ts +8 -5
- package/dist/esm-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/profileManagement.d.ts +10 -0
- package/dist/esm-types/cli/lib/profileManagement.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/profiles.d.ts +59 -0
- package/dist/esm-types/cli/lib/profiles.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/schemaEvaluation.d.ts +33 -0
- package/dist/esm-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/usageLimits.d.ts +1 -1
- package/dist/esm-types/cli/lib/usageLimits.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/mutex.d.ts +1 -3
- package/dist/esm-types/cli/lib/utils/mutex.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +15 -2
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/login.d.ts +21 -0
- package/dist/esm-types/cli/login.d.ts.map +1 -1
- package/dist/esm-types/cli/logout.d.ts +8 -1
- package/dist/esm-types/cli/logout.d.ts.map +1 -1
- package/dist/esm-types/cli/mcp.d.ts.map +1 -1
- package/dist/esm-types/cli/program.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/index.d.ts.map +1 -1
- package/dist/esm-types/server/impl/actions_impl.d.ts +18 -3
- package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/storage_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +1 -1
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +63 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/registration.d.ts +10 -0
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/esm-types/server/schema.d.ts +33 -0
- package/dist/esm-types/server/schema.d.ts.map +1 -1
- package/dist/esm-types/server/storage.d.ts.map +1 -1
- package/dist/esm-types/values/value.d.ts.map +1 -1
- package/dist/react.bundle.js +7 -1
- package/dist/react.bundle.js.map +2 -2
- package/package.json +5 -5
- package/schemas/convex.schema.json +5 -5
- package/src/bundler/context.ts +9 -5
- package/src/bundler/fs.ts +54 -5
- package/src/bundler/index.ts +9 -4
- package/src/cli/account.ts +320 -0
- package/src/cli/codegen.ts +0 -2
- package/src/cli/configure.ts +45 -9
- package/src/cli/deploy.ts +36 -5
- package/src/cli/deploymentSelect.ts +7 -4
- package/src/cli/dev.ts +9 -0
- package/src/cli/env.ts +12 -6
- package/src/cli/envDefault.ts +8 -2
- package/src/cli/generatedApi.ts +1 -1
- package/src/cli/lib/api.ts +5 -1
- package/src/cli/lib/checkForLargeIndexBackfill.ts +173 -0
- package/src/cli/lib/checkForLargeIndexDeletion.ts +45 -58
- package/src/cli/lib/checkForSlowSchemaValidation.ts +76 -65
- package/src/cli/lib/checkForStagedValidatorDeletion.ts +104 -0
- package/src/cli/lib/codegen.ts +0 -3
- package/src/cli/lib/command.ts +3 -0
- package/src/cli/lib/components/definition/bundle.ts +68 -14
- package/src/cli/lib/components.ts +71 -4
- package/src/cli/lib/config.ts +85 -18
- package/src/cli/lib/deploy2.ts +10 -1
- package/src/cli/lib/deployApi/evaluateSchema.ts +35 -0
- package/src/cli/lib/deployKeyWarning.ts +43 -0
- package/src/cli/lib/deployment.ts +2 -2
- package/src/cli/lib/deploymentSelection.ts +37 -18
- package/src/cli/lib/dev.ts +14 -0
- package/src/cli/lib/envvars.ts +43 -1
- package/src/cli/lib/formatValidationProgress.ts +35 -0
- package/src/cli/lib/fsUtils.ts +5 -2
- package/src/cli/lib/generateDocs.ts +1 -1
- package/src/cli/lib/indexes.ts +1 -1
- package/src/cli/lib/login.ts +47 -3
- package/src/cli/lib/mcp/requestContext.ts +7 -1
- package/src/cli/lib/mcp/tools/env.ts +17 -3
- package/src/cli/lib/profileManagement.ts +262 -0
- package/src/cli/lib/profiles.ts +398 -0
- package/src/cli/lib/run.ts +2 -0
- package/src/cli/lib/schemaEvaluation.ts +88 -0
- package/src/cli/lib/usageLimits.ts +2 -0
- package/src/cli/lib/utils/mutex.ts +9 -27
- package/src/cli/lib/utils/utils.ts +83 -36
- package/src/cli/login.ts +293 -168
- package/src/cli/logout.ts +142 -17
- package/src/cli/mcp.ts +48 -11
- package/src/cli/program.ts +2 -0
- package/src/cli/projectCreate.ts +1 -1
- package/src/index.ts +1 -1
- package/src/server/impl/actions_impl.ts +26 -6
- package/src/server/impl/storage_impl.ts +30 -0
- package/src/server/index.ts +5 -1
- package/src/server/meta.ts +56 -2
- package/src/server/registration.ts +10 -0
- package/src/server/schema.ts +37 -15
- package/src/server/storage.ts +17 -0
- package/src/values/validators.ts +1 -1
- package/src/values/value.ts +9 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/checkForLargeIndexDeletion.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logFinishedStep,\n logMessage,\n logVerbose,\n stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluatePush
|
|
5
|
-
"mappings": ";AAAA,SAAS,mBAAmB;AAE5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAG5B,SAAS,
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logFinishedStep,\n logMessage,\n logVerbose,\n stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluatePush } from \"./deploy2.js\";\nimport { DeveloperIndexConfig } from \"./deployApi/finishPush.js\";\nimport { EvaluateSchemaResponse } from \"./deployApi/evaluateSchema.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { integerFromEnv } from \"./utils/utils.js\";\n\nconst MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING = 100_000;\n\ntype CheckOptions = {\n url: string;\n deploymentName: string | null;\n adminKey: string;\n};\n\ntype DeletedIndex = {\n // The component instance path (\"\" for the root component), matching the\n // keys of both `componentSchemaEvaluations` and `indexDiffs`.\n componentPath: string;\n index: DeveloperIndexConfig;\n documentsCount: number;\n replacedBy: DeveloperIndexConfig | null;\n};\n\nexport async function checkForLargeIndexDeletion({\n ctx,\n span,\n request,\n options,\n schemaEvaluation,\n askForConfirmation,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: CheckOptions;\n schemaEvaluation: SchemaEvaluation;\n askForConfirmation: boolean;\n}): Promise<void> {\n changeSpinner(\"Verifying that the push isn\u2019t deleting large indexes...\");\n\n const schemaEvaluationResponse = await schemaEvaluation(span);\n let deletedIndexes: DeletedIndex[];\n if (schemaEvaluationResponse !== null) {\n deletedIndexes = deletedIndexesFromSchemaEvaluation(\n schemaEvaluationResponse,\n );\n } else {\n logVerbose(\n \"Schema evaluation unavailable, sizing deleted indexes per table\",\n );\n deletedIndexes = await deletedIndexesFromTableSizes({\n ctx,\n span,\n request,\n options,\n });\n }\n\n if (deletedIndexes.length === 0) {\n logFinishedStep(\"No indexes are deleted by this push\");\n return;\n }\n\n const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();\n if (\n !deletedIndexes.some(\n ({ documentsCount }) => documentsCount >= minDocumentsForWarning,\n )\n ) {\n logFinishedStep(\"No large indexes are deleted by this push\");\n return;\n }\n\n logMessage(`\u26A0\uFE0F This code push will ${chalkStderr.bold(\"delete\")} the following ${deletedIndexes.length === 1 ? \"index\" : \"indexes\"}\nfrom your production deployment (${options.url}):\n\n${deletedIndexes\n .map((deletedIndex) =>\n formatDeletedIndex({ ...deletedIndex, minDocumentsForWarning }),\n )\n .join(\"\\n\")}\n\nThe documents that are in the index won\u2019t be deleted, but the index will need\nto be backfilled again if you want to restore it later.\n`);\n\n // Either --skip-large-indexes-check or its deletion-only predecessor\n // --allow-deleting-large-indexes gets here, so name neither.\n if (!askForConfirmation) {\n logFinishedStep(\n \"Proceeding with push since deleting large indexes was allowed by flag\",\n );\n return;\n }\n\n if (!process.stdin.isTTY) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `To confirm the push:\n\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\u2022 or run the deploy command with the ${chalkStderr.bold(\"--skip-large-indexes-check\")} flag`,\n });\n }\n\n stopSpinner();\n if (\n !(await promptYesNo(ctx, {\n message: `Delete ${deletedIndexes.length === 1 ? \"this index\" : \"these indexes\"}?`,\n default: false,\n }))\n ) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Canceling push`,\n });\n }\n\n logFinishedStep(\"Proceeding with push.\");\n}\n\n// Preferred source: one schema evaluation reports every dropped index\n// together with its table's document count, requiring only the\n// `deployment:deploy` permission the push itself needs.\nexport function deletedIndexesFromSchemaEvaluation(\n response: EvaluateSchemaResponse,\n): DeletedIndex[] {\n return Object.entries(response.componentSchemaEvaluations).flatMap(\n ([componentPath, prediction]) =>\n prediction.indexes\n .filter((index) => index.change === \"dropped\")\n .map((index) => ({\n componentPath,\n index,\n documentsCount: index.numDocs,\n replacedBy:\n prediction.indexes.find(\n (other) => other.change === \"added\" && other.name === index.name,\n ) ?? null,\n })),\n );\n}\n\n// Fallback for deployments without `evaluate_schema`: diff indexes with\n// `evaluate_push`, then size each affected table with a system query. The\n// system query needs the `deployment:data:view` permission, which a\n// deploy-scoped key may lack.\nexport async function deletedIndexesFromTableSizes({\n ctx,\n span,\n request,\n options,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: CheckOptions;\n}): Promise<DeletedIndex[]> {\n const { schemaChange } = await evaluatePush(ctx, span, request, options);\n\n const indexDiffs = schemaChange.indexDiffs ?? {};\n const deletedIndexes = Object.entries(indexDiffs).flatMap(\n ([componentPath, indexDiff]) =>\n indexDiff.removed_indexes.map((index) => ({\n componentPath,\n index,\n replacedBy:\n indexDiff.added_indexes.find((other) => other.name === index.name) ??\n null,\n })),\n );\n\n if (deletedIndexes.length === 0) {\n return [];\n }\n\n const tablesWithDeletedIndexes = [\n ...new Set(\n deletedIndexes.map(\n ({ componentPath, index }) => `${componentPath}:${getTableName(index)}`,\n ),\n ),\n ].map((str) => {\n const [componentPath, table] = str.split(\":\");\n return { componentPath, table };\n });\n changeSpinner(\"Checking whether the deleted indexes are on large tables...\");\n const documentCounts = await Promise.all(\n tablesWithDeletedIndexes.map(async ({ componentPath, table }) => ({\n componentPath,\n table,\n count: (await runSystemQuery(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n functionName: \"_system/cli/tableSize:default\",\n componentPath,\n args: { tableName: table },\n })) as number,\n })),\n );\n return deletedIndexes.map(({ componentPath, index, replacedBy }) => ({\n componentPath,\n index,\n replacedBy,\n documentsCount: documentCounts.find(\n (count) =>\n count.table === getTableName(index) &&\n count.componentPath === componentPath,\n )!.count,\n }));\n}\n\nfunction formatDeletedIndex({\n componentPath,\n index,\n documentsCount,\n replacedBy,\n minDocumentsForWarning,\n}: DeletedIndex & { minDocumentsForWarning: number }) {\n const componentNameFormatted =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n\n const documentsCountFormatted =\n documentsCount >= minDocumentsForWarning\n ? ` ${chalkStderr.yellowBright(`\u26A0\uFE0F ${documentsCount.toLocaleString()} documents`)}`\n : ` ${documentsCount.toLocaleString()} ${documentsCount === 1 ? \"document\" : \"documents\"}`;\n\n const replacedByFormatted = replacedBy\n ? `\\n ${chalkStderr.green(\"\u2192 replaced by:\")} ${formatIndex(replacedBy)}`\n : \"\";\n\n return (\n \"\u26D4 \" +\n componentNameFormatted +\n formatIndex(index) +\n documentsCountFormatted +\n replacedByFormatted\n );\n}\n\nfunction getTableName(index: DeveloperIndexConfig) {\n const [tableName, _indexName] = index.name.split(\".\");\n return tableName;\n}\n\nfunction minDocumentsForIndexDeleteWarning(): number {\n return integerFromEnv(\n \"CONVEX_MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING\",\n MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING,\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
import { chalkStderr } from "chalk";
|
|
3
|
-
import { logMessage
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { logMessage } from "../../bundler/log.js";
|
|
4
|
+
import { formatSize, integerFromEnv } from "./utils/utils.js";
|
|
5
|
+
import {
|
|
6
|
+
formatDiscardedStagedValidator,
|
|
7
|
+
formatValidationProgress
|
|
8
|
+
} from "./formatValidationProgress.js";
|
|
6
9
|
const MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27;
|
|
7
10
|
export async function checkForSlowSchemaValidation({
|
|
8
|
-
ctx,
|
|
9
11
|
span,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
schemaEvaluation,
|
|
13
|
+
dryRun
|
|
12
14
|
}) {
|
|
13
|
-
const response = await
|
|
14
|
-
ctx,
|
|
15
|
-
span,
|
|
16
|
-
request,
|
|
17
|
-
options
|
|
18
|
-
});
|
|
15
|
+
const response = await schemaEvaluation(span);
|
|
19
16
|
if (response === null) {
|
|
20
17
|
return;
|
|
21
18
|
}
|
|
19
|
+
reportStagedValidators(response);
|
|
20
|
+
if (!dryRun) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
22
23
|
const walkedTables = Object.entries(
|
|
23
24
|
response.componentSchemaEvaluations
|
|
24
25
|
).flatMap(
|
|
@@ -34,34 +35,55 @@ export async function checkForSlowSchemaValidation({
|
|
|
34
35
|
if (totalBytes < minBytesForSchemaWalkWarning()) {
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
38
|
+
const shouldSuggestStaging = walkedTables.some(
|
|
39
|
+
({ table }) => !table.canSkipAfterStagedValidation
|
|
40
|
+
);
|
|
37
41
|
logMessage(`\u26A0\uFE0F This schema change requires checking every document in the following ${walkedTables.length === 1 ? "table" : "tables"} against your new schema, totaling ${chalkStderr.yellowBright(formatSize(totalBytes))}. This deploy may take a while:
|
|
38
42
|
|
|
39
43
|
${walkedTables.map(
|
|
40
44
|
({ componentPath, table }) => formatWalkedTable({ componentPath, table })
|
|
41
45
|
).join("\n")}
|
|
42
|
-
`
|
|
46
|
+
${shouldSuggestStaging ? `
|
|
47
|
+
Tip: stage the new validator (\`defineTable({...}).staged({...})\`) to validate it in the background without blocking deploys.` : ""}`);
|
|
43
48
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
span,
|
|
54
|
-
request,
|
|
55
|
-
options,
|
|
56
|
-
/* bestEffort */
|
|
57
|
-
true
|
|
58
|
-
);
|
|
59
|
-
} catch (error) {
|
|
60
|
-
logVerbose(
|
|
61
|
-
`Skipping slow schema validation check: ${error instanceof Error ? error.message : String(error)}`
|
|
49
|
+
function reportStagedValidators(response) {
|
|
50
|
+
const stagedTables = Object.entries(
|
|
51
|
+
response.componentSchemaEvaluations
|
|
52
|
+
).flatMap(([componentPath, prediction]) => {
|
|
53
|
+
const discarded = new Map(
|
|
54
|
+
(prediction.discardedStagedValidators ?? []).map((validator) => [
|
|
55
|
+
validator.tableName,
|
|
56
|
+
validator
|
|
57
|
+
])
|
|
62
58
|
);
|
|
63
|
-
return
|
|
59
|
+
return prediction.tables.filter((table) => table.staged !== void 0).map((table) => ({
|
|
60
|
+
componentPath,
|
|
61
|
+
table,
|
|
62
|
+
discarded: discarded.get(table.name)
|
|
63
|
+
}));
|
|
64
|
+
});
|
|
65
|
+
if (stagedTables.length === 0) {
|
|
66
|
+
return;
|
|
64
67
|
}
|
|
68
|
+
const lines = stagedTables.map(({ componentPath, table, discarded }) => {
|
|
69
|
+
const componentPrefix = componentPath !== "" ? `${chalkStderr.gray(componentPath)}: ` : "";
|
|
70
|
+
if (discarded !== void 0) {
|
|
71
|
+
return ` ${componentPrefix}${table.name}: ${formatDiscardedStagedValidator(discarded)}`;
|
|
72
|
+
}
|
|
73
|
+
const staged = table.staged;
|
|
74
|
+
switch (staged.state) {
|
|
75
|
+
case "pending": {
|
|
76
|
+
return ` ${componentPrefix}${table.name}: validating in the background (${formatValidationProgress(staged)})`;
|
|
77
|
+
}
|
|
78
|
+
case "valid":
|
|
79
|
+
return table.outcome === "supersetOfStagedValidated" ? ` ${componentPrefix}${table.name}: ${chalkStderr.green("validated")}. This deploy applies the staged schema without scanning the table.` : ` ${componentPrefix}${table.name}: ${chalkStderr.green("validated")}. Safe to apply the staged schema changes and deploy.`;
|
|
80
|
+
case "failed":
|
|
81
|
+
return ` ${componentPrefix}${table.name}: ${chalkStderr.red("failed")}: ${staged.error}${chalkStderr.gray(" (fix the offending documents and redeploy to revalidate)")}`;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
logMessage(`Staged schema validation status:
|
|
85
|
+
${lines.join("\n")}
|
|
86
|
+
`);
|
|
65
87
|
}
|
|
66
88
|
function formatWalkedTable({
|
|
67
89
|
componentPath,
|
|
@@ -70,16 +92,16 @@ function formatWalkedTable({
|
|
|
70
92
|
const componentPrefix = componentPath !== "" ? `${chalkStderr.gray(componentPath)}: ` : "";
|
|
71
93
|
const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;
|
|
72
94
|
const sizeFormatted = formatSize(table.sizeBytes);
|
|
73
|
-
|
|
95
|
+
let stagedNote = "";
|
|
96
|
+
if (table.staged?.state === "pending" && table.canSkipAfterStagedValidation) {
|
|
97
|
+
stagedNote = `. Staged schema validation in progress. Wait for validation to complete before deploying with the staged changes. Deploying now will block on a full table revalidation scan.`;
|
|
98
|
+
}
|
|
99
|
+
return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})${stagedNote}`;
|
|
74
100
|
}
|
|
75
101
|
function minBytesForSchemaWalkWarning() {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return parsed;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
|
|
102
|
+
return integerFromEnv(
|
|
103
|
+
"CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING",
|
|
104
|
+
MIN_BYTES_FOR_SCHEMA_WALK_WARNING
|
|
105
|
+
);
|
|
84
106
|
}
|
|
85
107
|
//# sourceMappingURL=checkForSlowSchemaValidation.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/checkForSlowSchemaValidation.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport {
|
|
5
|
-
"mappings": ";AAAA,SAAS,mBAAmB;
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../bundler/log.js\";\nimport { Span } from \"./tracing.js\";\nimport {\n EvaluateSchemaResponse,\n TablePrediction,\n} from \"./deployApi/evaluateSchema.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { formatSize, integerFromEnv } from \"./utils/utils.js\";\nimport {\n formatDiscardedStagedValidator,\n formatValidationProgress,\n} from \"./formatValidationProgress.js\";\n\nconst MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27; // 128 MiB\n\nexport async function checkForSlowSchemaValidation({\n span,\n schemaEvaluation,\n dryRun,\n}: {\n span: Span;\n schemaEvaluation: SchemaEvaluation;\n dryRun: boolean;\n}): Promise<void> {\n const response = await schemaEvaluation(span);\n if (response === null) {\n return;\n }\n reportStagedValidators(response);\n if (!dryRun) {\n return;\n }\n\n const walkedTables = Object.entries(\n response.componentSchemaEvaluations,\n ).flatMap(([componentPath, prediction]) =>\n prediction.tables\n .filter((table) => table.outcome === \"mustWalk\")\n .map((table) => ({ componentPath, table })),\n );\n if (walkedTables.length === 0) {\n return;\n }\n\n const totalBytes = walkedTables.reduce(\n (sum, { table }) => sum + table.sizeBytes,\n 0,\n );\n if (totalBytes < minBytesForSchemaWalkWarning()) {\n return;\n }\n\n const shouldSuggestStaging = walkedTables.some(\n ({ table }) => !table.canSkipAfterStagedValidation,\n );\n logMessage(`\u26A0\uFE0F This schema change requires checking every document in the following ${walkedTables.length === 1 ? \"table\" : \"tables\"} against your new schema, totaling ${chalkStderr.yellowBright(formatSize(totalBytes))}. This deploy may take a while:\n\n${walkedTables\n .map(({ componentPath, table }) =>\n formatWalkedTable({ componentPath, table }),\n )\n .join(\"\\n\")}\n${\n shouldSuggestStaging\n ? `\\nTip: stage the new validator (\\`defineTable({...}).staged({...})\\`) to validate it in the background without blocking deploys.`\n : \"\"\n}`);\n}\n\n// The prediction includes staged validators from active and in-flight schemas.\nfunction reportStagedValidators(response: EvaluateSchemaResponse) {\n const stagedTables = Object.entries(\n response.componentSchemaEvaluations,\n ).flatMap(([componentPath, prediction]) => {\n const discarded = new Map(\n (prediction.discardedStagedValidators ?? []).map((validator) => [\n validator.tableName,\n validator,\n ]),\n );\n return prediction.tables\n .filter((table) => table.staged !== undefined)\n .map((table) => ({\n componentPath,\n table,\n discarded: discarded.get(table.name),\n }));\n });\n if (stagedTables.length === 0) {\n return;\n }\n const lines = stagedTables.map(({ componentPath, table, discarded }) => {\n const componentPrefix =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}: ` : \"\";\n // The state describes the validator this push discards, so advertising\n // it as ready to promote would contradict the unstaging warning.\n if (discarded !== undefined) {\n return ` ${componentPrefix}${table.name}: ${formatDiscardedStagedValidator(discarded)}`;\n }\n const staged = table.staged!;\n switch (staged.state) {\n case \"pending\": {\n return ` ${componentPrefix}${table.name}: validating in the background (${formatValidationProgress(staged)})`;\n }\n case \"valid\":\n // `supersetOfStagedValidated` means this push already promotes it.\n return table.outcome === \"supersetOfStagedValidated\"\n ? ` ${componentPrefix}${table.name}: ${chalkStderr.green(\"validated\")}. This deploy applies the staged schema without scanning the table.`\n : ` ${componentPrefix}${table.name}: ${chalkStderr.green(\"validated\")}. Safe to apply the staged schema changes and deploy.`;\n case \"failed\":\n return ` ${componentPrefix}${table.name}: ${chalkStderr.red(\"failed\")}: ${staged.error}${chalkStderr.gray(\" (fix the offending documents and redeploy to revalidate)\")}`;\n }\n });\n logMessage(`Staged schema validation status:\\n${lines.join(\"\\n\")}\\n`);\n}\n\nfunction formatWalkedTable({\n componentPath,\n table,\n}: {\n componentPath: string;\n table: TablePrediction;\n}) {\n const componentPrefix =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}: ` : \"\";\n const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;\n const sizeFormatted = formatSize(table.sizeBytes);\n let stagedNote = \"\";\n if (table.staged?.state === \"pending\" && table.canSkipAfterStagedValidation) {\n stagedNote = `. Staged schema validation in progress. Wait for validation to complete before deploying with the staged changes. Deploying now will block on a full table revalidation scan.`;\n }\n return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})${stagedNote}`;\n}\n\nfunction minBytesForSchemaWalkWarning(): number {\n return integerFromEnv(\n \"CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING\",\n MIN_BYTES_FOR_SCHEMA_WALK_WARNING,\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { chalkStderr } from "chalk";
|
|
3
|
+
import { logFinishedStep, logMessage, stopSpinner } from "../../bundler/log.js";
|
|
4
|
+
import { promptYesNo } from "./utils/prompts.js";
|
|
5
|
+
import { formatDiscardedStagedValidator } from "./formatValidationProgress.js";
|
|
6
|
+
export async function checkForStagedValidatorDeletion({
|
|
7
|
+
ctx,
|
|
8
|
+
response,
|
|
9
|
+
askForConfirmation,
|
|
10
|
+
dryRun = false
|
|
11
|
+
}) {
|
|
12
|
+
if (response === null) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const discarded = Object.entries(response.componentSchemaEvaluations).flatMap(
|
|
16
|
+
([componentPath, prediction]) => (prediction.discardedStagedValidators ?? []).map((validator) => ({
|
|
17
|
+
componentPath,
|
|
18
|
+
validator
|
|
19
|
+
}))
|
|
20
|
+
);
|
|
21
|
+
if (discarded.length === 0) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
logMessage(`\u26A0\uFE0F This push ${chalkStderr.bold(dryRun ? "would discard" : "discards")} staged schema validation for the following ${discarded.length === 1 ? "table" : "tables"}:
|
|
25
|
+
|
|
26
|
+
${discarded.map(formatDiscarded).join("\n")}
|
|
27
|
+
|
|
28
|
+
A discarded staged validator restarts validation from zero if staged again.
|
|
29
|
+
`);
|
|
30
|
+
if (dryRun) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!askForConfirmation) {
|
|
34
|
+
logFinishedStep(
|
|
35
|
+
"Proceeding with push since --allow-unstaging-schema is set"
|
|
36
|
+
);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!process.stdin.isTTY) {
|
|
40
|
+
return ctx.crash({
|
|
41
|
+
exitCode: 1,
|
|
42
|
+
errorType: "fatal",
|
|
43
|
+
printedMessage: `To confirm the push:
|
|
44
|
+
\u2022 run the deploy command in an ${chalkStderr.bold("interactive terminal")}
|
|
45
|
+
\u2022 or run the deploy command with the ${chalkStderr.bold("--allow-unstaging-schema")} flag`
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
stopSpinner();
|
|
49
|
+
if (!await promptYesNo(ctx, {
|
|
50
|
+
message: `Discard staged validation for ${discarded.length === 1 ? "this table" : "these tables"}?`,
|
|
51
|
+
default: false
|
|
52
|
+
})) {
|
|
53
|
+
return ctx.crash({
|
|
54
|
+
exitCode: 1,
|
|
55
|
+
errorType: "fatal",
|
|
56
|
+
printedMessage: `Canceling push`
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
logFinishedStep("Proceeding with push.");
|
|
60
|
+
}
|
|
61
|
+
function formatDiscarded({
|
|
62
|
+
componentPath,
|
|
63
|
+
validator
|
|
64
|
+
}) {
|
|
65
|
+
const componentPrefix = componentPath !== "" ? `${chalkStderr.gray(componentPath)}:` : "";
|
|
66
|
+
return `\u26D4 ${componentPrefix}${validator.tableName}: ${formatDiscardedStagedValidator(validator)}`;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=checkForStagedValidatorDeletion.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cli/lib/checkForStagedValidatorDeletion.ts"],
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage, stopSpinner } from \"../../bundler/log.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport {\n DiscardedStagedValidator,\n EvaluateSchemaResponse,\n} from \"./deployApi/evaluateSchema.js\";\nimport { formatDiscardedStagedValidator } from \"./formatValidationProgress.js\";\n\nexport type StagedValidatorDeletionCheck =\n | \"ask for confirmation\"\n | \"has confirmation\"\n | \"no verification\";\n\n/**\n * Confirm before discarding pending or successful staged validation. Unstaging\n * stops write-time checks, so restaging requires a fresh scan.\n *\n * A dry run only reports what the push would discard, so `--dry-run` previews\n * the confirmation the real push will ask for.\n */\nexport async function checkForStagedValidatorDeletion({\n ctx,\n response,\n askForConfirmation,\n dryRun = false,\n}: {\n ctx: Context;\n response: EvaluateSchemaResponse | null;\n askForConfirmation: boolean;\n dryRun?: boolean;\n}): Promise<void> {\n // `sharedSchemaEvaluation` has already logged why evaluation failed.\n if (response === null) {\n return;\n }\n const discarded = Object.entries(response.componentSchemaEvaluations).flatMap(\n ([componentPath, prediction]) =>\n (prediction.discardedStagedValidators ?? []).map((validator) => ({\n componentPath,\n validator,\n })),\n );\n if (discarded.length === 0) {\n return;\n }\n\n logMessage(`\\u26a0\\ufe0f This push ${chalkStderr.bold(dryRun ? \"would discard\" : \"discards\")} staged schema validation for the following ${discarded.length === 1 ? \"table\" : \"tables\"}:\n\n${discarded.map(formatDiscarded).join(\"\\n\")}\n\nA discarded staged validator restarts validation from zero if staged again.\n`);\n\n if (dryRun) {\n return;\n }\n\n if (!askForConfirmation) {\n logFinishedStep(\n \"Proceeding with push since --allow-unstaging-schema is set\",\n );\n return;\n }\n\n if (!process.stdin.isTTY) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `To confirm the push:\n\\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\\u2022 or run the deploy command with the ${chalkStderr.bold(\"--allow-unstaging-schema\")} flag`,\n });\n }\n\n stopSpinner();\n if (\n !(await promptYesNo(ctx, {\n message: `Discard staged validation for ${discarded.length === 1 ? \"this table\" : \"these tables\"}?`,\n default: false,\n }))\n ) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Canceling push`,\n });\n }\n\n logFinishedStep(\"Proceeding with push.\");\n}\n\nfunction formatDiscarded({\n componentPath,\n validator,\n}: {\n componentPath: string;\n validator: DiscardedStagedValidator;\n}): string {\n const componentPrefix =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n return `\\u26d4 ${componentPrefix}${validator.tableName}: ${formatDiscardedStagedValidator(validator)}`;\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,mBAAmB;AAE5B,SAAS,iBAAiB,YAAY,mBAAmB;AACzD,SAAS,mBAAmB;AAK5B,SAAS,sCAAsC;AAc/C,sBAAsB,gCAAgC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAKkB;AAEhB,MAAI,aAAa,MAAM;AACrB;AAAA,EACF;AACA,QAAM,YAAY,OAAO,QAAQ,SAAS,0BAA0B,EAAE;AAAA,IACpE,CAAC,CAAC,eAAe,UAAU,OACxB,WAAW,6BAA6B,CAAC,GAAG,IAAI,CAAC,eAAe;AAAA,MAC/D;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACN;AACA,MAAI,UAAU,WAAW,GAAG;AAC1B;AAAA,EACF;AAEA,aAAW,2BAA2B,YAAY,KAAK,SAAS,kBAAkB,UAAU,CAAC,+CAA+C,UAAU,WAAW,IAAI,UAAU,QAAQ;AAAA;AAAA,EAEvL,UAAU,IAAI,eAAe,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,CAG1C;AAEC,MAAI,QAAQ;AACV;AAAA,EACF;AAEA,MAAI,CAAC,oBAAoB;AACvB;AAAA,MACE;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,MAAM,OAAO;AACxB,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,sCACgB,YAAY,KAAK,sBAAsB,CAAC;AAAA,4CAClC,YAAY,KAAK,0BAA0B,CAAC;AAAA,IACpF,CAAC;AAAA,EACH;AAEA,cAAY;AACZ,MACE,CAAE,MAAM,YAAY,KAAK;AAAA,IACvB,SAAS,iCAAiC,UAAU,WAAW,IAAI,eAAe,cAAc;AAAA,IAChG,SAAS;AAAA,EACX,CAAC,GACD;AACA,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,kBAAgB,uBAAuB;AACzC;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AACF,GAGW;AACT,QAAM,kBACJ,kBAAkB,KAAK,GAAG,YAAY,KAAK,aAAa,CAAC,MAAM;AACjE,SAAO,UAAU,eAAe,GAAG,UAAU,SAAS,KAAK,+BAA+B,SAAS,CAAC;AACtG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/codegen.ts"],
|
|
4
|
-
"sourcesContent": ["import path from \"path\";\nimport prettier from \"prettier\";\nimport { withTmpDir, TempDir } from \"../../bundler/fs.js\";\nimport { entryPoints } from \"../../bundler/index.js\";\nimport { apiCodegen } from \"../codegen_templates/api.js\";\nimport { apiCjsCodegen } from \"../codegen_templates/api_cjs.js\";\nimport { compareModulePaths } from \"../codegen_templates/common.js\";\nimport {\n dynamicDataModelDTS,\n dynamicDataModelTS,\n noSchemaDataModelDTS,\n noSchemaDataModelTS,\n staticDataModelDTS,\n staticDataModelTS,\n} from \"../codegen_templates/dataModel.js\";\nimport { readmeCodegen } from \"../codegen_templates/readme.js\";\nimport { serverCodegen, EnvVarMeta } from \"../codegen_templates/server.js\";\nimport { tsconfigCodegen } from \"../codegen_templates/tsconfig.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n logError,\n logMessage,\n logOutput,\n logVerbose,\n} from \"../../bundler/log.js\";\nimport { typeCheckFunctionsInMode, TypeCheckMode } from \"./typecheck.js\";\nimport {\n readProjectConfig,\n usesTypeScriptCodegen,\n usesComponentApiImports,\n} from \"./config.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { componentServerTS } from \"../codegen_templates/component_server.js\";\nimport {\n ComponentDirectory,\n toComponentDefinitionPath,\n} from \"./components/definition/directoryStructure.js\";\nimport { StartPushResponse } from \"./deployApi/startPush.js\";\nimport {\n componentApiDTS,\n componentApiJs,\n componentApiStubDTS,\n componentApiStubTS,\n componentApiTSWithTypes,\n componentTS,\n rootComponentApiCJS,\n} from \"../codegen_templates/component_api.js\";\nimport { functionsDir } from \"./utils/utils.js\";\nimport { LargeIndexDeletionCheck } from \"./indexes.js\";\n\nconst PRESERVED_GENERATED_ENTRIES = new Set([\"ai\"]);\n\nexport function cleanupStaleGeneratedEntries(\n ctx: Context,\n codegenDir: string,\n writtenFiles: string[],\n opts?: { debug?: boolean; force?: boolean; dryRun?: boolean },\n) {\n // Skip cleanup in debug mode since we don't actually write files in that mode.\n if (opts?.debug) {\n return;\n }\n for (const file of ctx.fs.listDir(codegenDir)) {\n if (PRESERVED_GENERATED_ENTRIES.has(file.name)) {\n continue;\n }\n if (!writtenFiles.includes(file.name)) {\n recursivelyDelete(ctx, path.join(codegenDir, file.name), opts);\n }\n }\n}\n\nexport type CodegenOptions = {\n url?: string | undefined;\n adminKey?: string | undefined;\n dryRun: boolean;\n debug: boolean;\n typecheck: TypeCheckMode;\n init: boolean;\n commonjs: boolean;\n liveComponentSources: boolean;\n debugNodeApis: boolean;\n systemUdfs: boolean;\n largeIndexDeletionCheck: LargeIndexDeletionCheck;\n warnOnSlowSchemaValidation: boolean;\n codegenOnlyThisComponent?: string | undefined;\n};\n\nexport async function doInitConvexFolder(\n ctx: Context,\n functionsFolder?: string,\n opts?: {\n dryRun?: boolean;\n debug?: boolean;\n },\n) {\n const skipIfExists = true;\n let folder: string;\n if (functionsFolder) {\n folder = functionsFolder;\n } else {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n folder = functionsDir(configPath, projectConfig);\n }\n const { functionsDirExistedBeforeCodegen } = await prepareForCodegen(\n ctx,\n folder,\n opts,\n );\n await withTmpDir(async (tmpDir) => {\n await doReadmeCodegen(\n ctx,\n tmpDir,\n folder,\n skipIfExists && functionsDirExistedBeforeCodegen,\n opts,\n );\n await doTsconfigCodegen(ctx, tmpDir, folder, skipIfExists, opts);\n });\n}\n\nasync function prepareForCodegen(\n ctx: Context,\n functionsDir: string,\n opts?: { dryRun?: boolean },\n) {\n const functionsDirExistedBeforeCodegen = ctx.fs.exists(functionsDir);\n // Delete the old _generated.ts because v0.1.2 used to put the react generated\n // code there\n const legacyCodegenPath = path.join(functionsDir, \"_generated.ts\");\n if (ctx.fs.exists(legacyCodegenPath)) {\n if (opts?.dryRun) {\n logError(\n `Command would delete legacy codegen file: ${legacyCodegenPath}}`,\n );\n } else {\n logError(`Deleting legacy codegen file: ${legacyCodegenPath}}`);\n ctx.fs.unlink(legacyCodegenPath);\n }\n }\n\n // Create the codegen dir if it doesn't already exist.\n const codegenDir = path.join(functionsDir, \"_generated\");\n ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n return { codegenDir, functionsDirExistedBeforeCodegen };\n}\n\n/** Codegen only for an application (a root component) */\nexport async function doCodegen(\n ctx: Context,\n functionsDir: string,\n typeCheckMode: TypeCheckMode,\n opts?: { dryRun?: boolean; generateCommonJSApi?: boolean; debug?: boolean },\n) {\n const { projectConfig } = await readProjectConfig(ctx);\n const { codegenDir } = await prepareForCodegen(ctx, functionsDir, opts);\n\n await withTmpDir(async (tmpDir) => {\n // Write files in dependency order so a watching dev server doesn't\n // see inconsistent results where a file we write imports from a\n // file that doesn't exist yet. We'll collect all the paths we write\n // and then delete any remaining paths at the end.\n const writtenFiles = [];\n\n const useTypeScript = usesTypeScriptCodegen(projectConfig);\n const generateCommonJSApi =\n opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n const schemaFiles = await doDataModelCodegen(\n ctx,\n tmpDir,\n functionsDir,\n codegenDir,\n useTypeScript,\n opts,\n );\n writtenFiles.push(...schemaFiles);\n\n // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n const serverFiles = await writeServerFiles(\n ctx,\n tmpDir,\n codegenDir,\n useTypeScript,\n undefined,\n opts,\n );\n writtenFiles.push(...serverFiles);\n\n // The `api.d.ts` file imports from the developer's modules, which then\n // import from `server.d.ts`. Note that there's a cycle here, since the\n // developer's modules could also import from the `api.{js,d.ts}` files.\n const apiFiles = await doApiCodegen(\n ctx,\n tmpDir,\n functionsDir,\n codegenDir,\n useTypeScript,\n generateCommonJSApi,\n opts,\n );\n writtenFiles.push(...apiFiles);\n\n // Cleanup any files that weren't written in this run.\n cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n\n // Generated code is updated, typecheck the query and mutation functions.\n await typeCheckFunctionsInMode(ctx, typeCheckMode, functionsDir);\n });\n}\n\n// Just enough to be able to bundle code for analysis: we need an api proxy object\n// so that imports aren't broken, we need basics in server, we need something in\n// data model.\nexport async function doInitialComponentCodegen(\n ctx: Context,\n tmpDir: TempDir,\n componentDirectory: ComponentDirectory,\n opts?: {\n dryRun?: boolean;\n generateCommonJSApi?: boolean;\n debug?: boolean;\n verbose?: boolean;\n },\n) {\n const { projectConfig } = await readProjectConfig(ctx);\n\n if (isPublishedPackage(componentDirectory)) {\n if (opts?.verbose) {\n logMessage(\n `skipping initial codegen for installed package ${componentDirectory.path}`,\n );\n }\n return;\n }\n\n const { codegenDir } = await prepareForCodegen(\n ctx,\n componentDirectory.path,\n opts,\n );\n\n // Write files in dependency order so a watching dev server doesn't\n // see inconsistent results where a file we write imports from a\n // file that doesn't exist yet. We'll collect all the paths we write\n // and then delete any remaining paths at the end.\n const writtenFiles = [];\n\n // Non-root components always use .ts files; root components respect the config\n // But for initial (placeholder, stub) codegen we don't care, just use .d.ts and .js.\n const useTypeScript =\n !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n const generateCommonJSApi =\n opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n const dataModelFiles = await doInitialComponentDataModelCodegen(\n ctx,\n tmpDir,\n componentDirectory,\n codegenDir,\n useTypeScript,\n opts,\n );\n writtenFiles.push(...dataModelFiles);\n\n // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n const serverFiles = await doInitialComponentServerCodegen(\n ctx,\n componentDirectory.isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n undefined,\n opts,\n );\n writtenFiles.push(...serverFiles);\n\n // The `api.d.ts` file imports from the developer's modules, which then\n // import from `server.d.ts`. Note that there's a cycle here, since the\n // developer's modules could also import from the `api.{js,d.ts}` files.\n const apiFiles = await doInitialComponentApiCodegen(\n ctx,\n componentDirectory.isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n generateCommonJSApi,\n opts,\n );\n writtenFiles.push(...apiFiles);\n\n // component.ts is generated in doFinalComponentCodegen, but don't delete\n // if it already exists from a previous full codegen run.\n if (!componentDirectory.isRoot) {\n const componentTSPath = path.join(codegenDir, \"component.ts\");\n if (ctx.fs.exists(componentTSPath)) {\n writtenFiles.push(\"component.ts\");\n }\n }\n\n // Cleanup any files that weren't written in this run.\n cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n}\n\n/* This component defined in a dist directory; it is probably in a node_module\n * directory, installed from a package. It is stuck with the files it has.\n * Heuristics for this:\n * - component definition has a dist/ directory as an ancestor\n * - component definition is a .js file\n * - presence of .js.map files\n * We may improve this heuristic.\n */\nexport function isPublishedPackage(componentDirectory: ComponentDirectory) {\n return (\n componentDirectory.definitionPath.endsWith(\".js\") &&\n !componentDirectory.isRoot\n );\n}\n\n// Handles root and non-root components; it's \"component\" codegen because\n// it's not the old legacy path.\nexport async function doFinalComponentCodegen(\n ctx: Context,\n tmpDir: TempDir,\n rootComponent: ComponentDirectory,\n componentDirectory: ComponentDirectory,\n startPushResponse: StartPushResponse,\n componentsMap: Map<string, ComponentDirectory>,\n opts?: {\n dryRun?: boolean;\n debug?: boolean;\n generateCommonJSApi?: boolean;\n },\n) {\n const { projectConfig } = await readProjectConfig(ctx);\n\n const isPublishedPackage =\n componentDirectory.definitionPath.endsWith(\".js\") &&\n !componentDirectory.isRoot;\n // We never codegen for a published package (you need to link to the convex.config.ts file instead).\n if (isPublishedPackage) {\n return;\n }\n\n const codegenDir = path.join(componentDirectory.path, \"_generated\");\n ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n\n // Non-root components always use .ts files; root components respect the config\n const useTypeScript =\n !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n // `dataModel` and `api` files depend on analyze results so will get replaced\n // in the later post-analysis codegen phase, but `server` files don't need\n // analysis info so the stubs from initial codegen are sufficient.\n\n // dataModel\n const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n let dataModelContents: string;\n if (hasSchemaFile) {\n if (projectConfig.codegen.staticDataModel) {\n dataModelContents = useTypeScript\n ? await staticDataModelTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n )\n : await staticDataModelDTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n );\n } else {\n dataModelContents = useTypeScript\n ? dynamicDataModelTS()\n : dynamicDataModelDTS();\n }\n } else {\n dataModelContents = useTypeScript\n ? noSchemaDataModelTS()\n : noSchemaDataModelDTS();\n }\n const dataModelPath = path.join(\n codegenDir,\n useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\",\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n dataModelContents,\n \"typescript\",\n dataModelPath,\n opts,\n );\n\n // component.ts\n if (!componentDirectory.isRoot) {\n const componentTSPath = path.join(codegenDir, \"component.ts\");\n const componentTSContents = await componentTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n componentTSContents,\n \"typescript\",\n componentTSPath,\n opts,\n );\n }\n\n // server.ts - regenerate it in final codegen so we can emit typed env vars.\n const definitionPath = toComponentDefinitionPath(\n rootComponent,\n componentDirectory,\n );\n const analysis = startPushResponse.analysis[definitionPath];\n const envVars: EnvVarMeta[] =\n analysis?.definition.envVars && analysis.definition.envVars.length > 0\n ? analysis.definition.envVars\n : [];\n await writeServerFilesForComponent(\n ctx,\n componentDirectory.isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n envVars,\n opts,\n );\n\n // api\n if (!useTypeScript) {\n const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n const apiContents = await componentApiDTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n componentsMap,\n {\n staticApi: projectConfig.codegen.staticApi,\n useComponentApiImports: usesComponentApiImports(projectConfig),\n },\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContents,\n \"typescript\",\n apiDTSPath,\n opts,\n );\n\n if (opts?.generateCommonJSApi || projectConfig.generateCommonJSApi) {\n const apiCjsDTSPath = path.join(codegenDir, \"api_cjs.d.cts\");\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContents,\n \"typescript\",\n apiCjsDTSPath,\n opts,\n );\n }\n } else {\n const apiTSPath = path.join(codegenDir, \"api.ts\");\n const apiContents = await componentApiTSWithTypes(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n componentsMap,\n {\n staticApi: projectConfig.codegen.staticApi,\n useComponentApiImports: usesComponentApiImports(projectConfig),\n },\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContents,\n \"typescript\",\n apiTSPath,\n opts,\n );\n }\n}\n\nasync function doReadmeCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n skip: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const readmePath = path.join(functionsDir, \"README.md\");\n if (skip) {\n logVerbose(`Not overwriting README.md.`);\n return;\n }\n await writeFormattedFile(\n ctx,\n tmpDir,\n readmeCodegen(),\n \"markdown\",\n readmePath,\n opts,\n );\n}\n\nasync function doTsconfigCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n skipIfExists: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const tsconfigPath = path.join(functionsDir, \"tsconfig.json\");\n if (skipIfExists && ctx.fs.exists(tsconfigPath)) {\n logVerbose(`Not overwriting tsconfig.json.`);\n return;\n }\n await writeFormattedFile(\n ctx,\n tmpDir,\n tsconfigCodegen(),\n \"json\",\n tsconfigPath,\n opts,\n );\n}\n\nfunction schemaFileExists(ctx: Context, functionsDir: string) {\n let schemaPath = path.join(functionsDir, \"schema.ts\");\n let hasSchemaFile = ctx.fs.exists(schemaPath);\n if (!hasSchemaFile) {\n schemaPath = path.join(functionsDir, \"schema.js\");\n hasSchemaFile = ctx.fs.exists(schemaPath);\n }\n return hasSchemaFile;\n}\n\nasync function doDataModelCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n codegenDir: string,\n useTypeScript: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const hasSchemaFile = schemaFileExists(ctx, functionsDir);\n const schemaContent = hasSchemaFile\n ? useTypeScript\n ? dynamicDataModelTS()\n : dynamicDataModelDTS()\n : useTypeScript\n ? noSchemaDataModelTS()\n : noSchemaDataModelDTS();\n\n const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n await writeFormattedFile(\n ctx,\n tmpDir,\n schemaContent,\n \"typescript\",\n path.join(codegenDir, filename),\n opts,\n );\n return [filename];\n}\n\n/**\n * Write server.ts/.js/.d.ts files for root components.\n * Returns list of filenames written.\n */\nasync function writeServerFiles(\n ctx: Context,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n if (!useTypeScript) {\n const serverContent = serverCodegen({\n useTypeScript: false,\n envVars,\n });\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverContent.JS!,\n \"typescript\",\n path.join(codegenDir, \"server.js\"),\n opts,\n );\n\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverContent.DTS!,\n \"typescript\",\n path.join(codegenDir, \"server.d.ts\"),\n opts,\n );\n\n return [\"server.js\", \"server.d.ts\"];\n } else {\n const serverContent = serverCodegen({\n useTypeScript: true,\n envVars,\n });\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverContent.TS!,\n \"typescript\",\n path.join(codegenDir, \"server.ts\"),\n opts,\n );\n\n return [\"server.ts\"];\n }\n}\n\n/**\n * Write server.ts file for non-root components.\n * Returns list of filenames written.\n */\nasync function writeComponentServerFile(\n ctx: Context,\n tmpDir: TempDir,\n codegenDir: string,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n const serverTSPath = path.join(codegenDir, \"server.ts\");\n const serverTSContents = componentServerTS(false, envVars);\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverTSContents,\n \"typescript\",\n serverTSPath,\n opts,\n );\n return [\"server.ts\"];\n}\n\n/**\n * Write server files for either root or non-root components.\n * Root components get server.ts/server.js/server.d.ts based on useTypeScript.\n * Non-root components always get server.ts.\n * Returns list of filenames written.\n */\nasync function writeServerFilesForComponent(\n ctx: Context,\n isRoot: boolean,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n if (isRoot) {\n return await writeServerFiles(\n ctx,\n tmpDir,\n codegenDir,\n useTypeScript,\n envVars,\n opts,\n );\n } else {\n return await writeComponentServerFile(\n ctx,\n tmpDir,\n codegenDir,\n envVars,\n opts,\n );\n }\n}\n\nasync function doInitialComponentServerCodegen(\n ctx: Context,\n isRoot: boolean,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n // Don't write our stub if the file already exists, since it may have\n // better type information from `doFinalComponentCodegen` (e.g. env vars).\n const serverFilename = useTypeScript ? \"server.ts\" : \"server.js\";\n if (ctx.fs.exists(path.join(codegenDir, serverFilename))) {\n const filenames = [serverFilename];\n if (!useTypeScript) {\n filenames.push(\"server.d.ts\");\n }\n return filenames;\n }\n return await writeServerFilesForComponent(\n ctx,\n isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n envVars,\n opts,\n );\n}\n\nasync function doInitialComponentDataModelCodegen(\n ctx: Context,\n tmpDir: TempDir,\n componentDirectory: ComponentDirectory,\n codegenDir: string,\n useTypeScript: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n const dataModelContent = hasSchemaFile\n ? useTypeScript\n ? dynamicDataModelTS()\n : dynamicDataModelDTS()\n : useTypeScript\n ? noSchemaDataModelTS()\n : noSchemaDataModelDTS();\n const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n const dataModelPath = path.join(codegenDir, filename);\n\n // Don't write our stub if the file already exists, since it may have\n // better type information from `doFinalComponentDataModelCodegen`.\n if (!ctx.fs.exists(dataModelPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n dataModelContent,\n \"typescript\",\n dataModelPath,\n opts,\n );\n }\n return [filename];\n}\n\nasync function doInitialComponentApiCodegen(\n ctx: Context,\n isRoot: boolean,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n generateCommonJSApi: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const writtenFiles: string[] = [];\n\n if (!useTypeScript) {\n const apiJS = componentApiJs();\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiJS,\n \"typescript\",\n path.join(codegenDir, \"api.js\"),\n opts,\n );\n\n // Don't write the `.d.ts` stub if it already exists.\n const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n const apiStubDTS = componentApiStubDTS();\n if (!ctx.fs.exists(apiDTSPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiStubDTS,\n \"typescript\",\n apiDTSPath,\n opts,\n );\n }\n\n writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n if (generateCommonJSApi && isRoot) {\n const apiCjsJS = rootComponentApiCJS();\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiCjsJS,\n \"typescript\",\n path.join(codegenDir, \"api_cjs.cjs\"),\n opts,\n );\n\n const cjsStubPath = path.join(codegenDir, \"api_cjs.d.cts\");\n if (!ctx.fs.exists(cjsStubPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiStubDTS,\n \"typescript\",\n cjsStubPath,\n opts,\n );\n }\n writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n }\n } else {\n const apiTSPath = path.join(codegenDir, \"api.ts\");\n const apiTS = componentApiStubTS();\n // Don't write the `.ts` stub if it already exists.\n if (!ctx.fs.exists(apiTSPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiTS,\n \"typescript\",\n apiTSPath,\n opts,\n );\n }\n writtenFiles.push(\"api.ts\");\n }\n\n return writtenFiles;\n}\n\nasync function doApiCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n codegenDir: string,\n useTypeScript: boolean,\n generateCommonJSApi: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const absModulePaths = await entryPoints(ctx, functionsDir);\n const modulePaths = absModulePaths\n .map((p) => path.relative(functionsDir, p))\n .sort(compareModulePaths);\n\n const writtenFiles: string[] = [];\n\n if (!useTypeScript) {\n const apiContent = apiCodegen(modulePaths, { useTypeScript: false });\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContent.JS!,\n \"typescript\",\n path.join(codegenDir, \"api.js\"),\n opts,\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContent.DTS!,\n \"typescript\",\n path.join(codegenDir, \"api.d.ts\"),\n opts,\n );\n writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n if (generateCommonJSApi) {\n const apiCjsContent = apiCjsCodegen(modulePaths);\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiCjsContent.JS!,\n \"typescript\",\n path.join(codegenDir, \"api_cjs.cjs\"),\n opts,\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiCjsContent.DTS!,\n \"typescript\",\n path.join(codegenDir, \"api_cjs.d.cts\"),\n opts,\n );\n writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n }\n } else {\n const apiContent = apiCodegen(modulePaths, { useTypeScript: true });\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContent.TS!,\n \"typescript\",\n path.join(codegenDir, \"api.ts\"),\n opts,\n );\n writtenFiles.push(\"api.ts\");\n }\n\n return writtenFiles;\n}\n\nasync function writeFormattedFile(\n ctx: Context,\n tmpDir: TempDir,\n contents: string,\n filetype: string,\n destination: string,\n options?: {\n dryRun?: boolean;\n debug?: boolean;\n },\n) {\n // Run prettier so we don't have to think about formatting!\n //\n // This is a little sketchy because we are using the default prettier config\n // (not our user's one) but it's better than nothing.\n const formattedContents = await prettier.format(contents, {\n parser: filetype,\n pluginSearchDirs: false,\n });\n if (options?.debug) {\n // NB: The `test_codegen_projects_are_up_to_date` smoke test depends\n // on this output format.\n logOutput(`# ${path.resolve(destination)}`);\n logOutput(formattedContents);\n return;\n }\n try {\n const existing = ctx.fs.readUtf8File(destination);\n if (existing === formattedContents) {\n return;\n }\n } catch (err: any) {\n if (err.code !== \"ENOENT\") {\n // eslint-disable-next-line no-restricted-syntax\n throw err;\n }\n }\n if (options?.dryRun) {\n logOutput(`Command would write file: ${destination}`);\n return;\n }\n const tmpPath = tmpDir.writeUtf8File(formattedContents);\n ctx.fs.swapTmpFile(tmpPath, destination);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport prettier from \"prettier\";\nimport { withTmpDir, TempDir } from \"../../bundler/fs.js\";\nimport { entryPoints } from \"../../bundler/index.js\";\nimport { apiCodegen } from \"../codegen_templates/api.js\";\nimport { apiCjsCodegen } from \"../codegen_templates/api_cjs.js\";\nimport { compareModulePaths } from \"../codegen_templates/common.js\";\nimport {\n dynamicDataModelDTS,\n dynamicDataModelTS,\n noSchemaDataModelDTS,\n noSchemaDataModelTS,\n staticDataModelDTS,\n staticDataModelTS,\n} from \"../codegen_templates/dataModel.js\";\nimport { readmeCodegen } from \"../codegen_templates/readme.js\";\nimport { serverCodegen, EnvVarMeta } from \"../codegen_templates/server.js\";\nimport { tsconfigCodegen } from \"../codegen_templates/tsconfig.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n logError,\n logMessage,\n logOutput,\n logVerbose,\n} from \"../../bundler/log.js\";\nimport { typeCheckFunctionsInMode, TypeCheckMode } from \"./typecheck.js\";\nimport {\n readProjectConfig,\n usesTypeScriptCodegen,\n usesComponentApiImports,\n} from \"./config.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { componentServerTS } from \"../codegen_templates/component_server.js\";\nimport {\n ComponentDirectory,\n toComponentDefinitionPath,\n} from \"./components/definition/directoryStructure.js\";\nimport { StartPushResponse } from \"./deployApi/startPush.js\";\nimport {\n componentApiDTS,\n componentApiJs,\n componentApiStubDTS,\n componentApiStubTS,\n componentApiTSWithTypes,\n componentTS,\n rootComponentApiCJS,\n} from \"../codegen_templates/component_api.js\";\nimport { functionsDir } from \"./utils/utils.js\";\n\nconst PRESERVED_GENERATED_ENTRIES = new Set([\"ai\"]);\n\nexport function cleanupStaleGeneratedEntries(\n ctx: Context,\n codegenDir: string,\n writtenFiles: string[],\n opts?: { debug?: boolean; force?: boolean; dryRun?: boolean },\n) {\n // Skip cleanup in debug mode since we don't actually write files in that mode.\n if (opts?.debug) {\n return;\n }\n for (const file of ctx.fs.listDir(codegenDir)) {\n if (PRESERVED_GENERATED_ENTRIES.has(file.name)) {\n continue;\n }\n if (!writtenFiles.includes(file.name)) {\n recursivelyDelete(ctx, path.join(codegenDir, file.name), opts);\n }\n }\n}\n\nexport type CodegenOptions = {\n url?: string | undefined;\n adminKey?: string | undefined;\n dryRun: boolean;\n debug: boolean;\n typecheck: TypeCheckMode;\n init: boolean;\n commonjs: boolean;\n liveComponentSources: boolean;\n debugNodeApis: boolean;\n systemUdfs: boolean;\n codegenOnlyThisComponent?: string | undefined;\n};\n\nexport async function doInitConvexFolder(\n ctx: Context,\n functionsFolder?: string,\n opts?: {\n dryRun?: boolean;\n debug?: boolean;\n },\n) {\n const skipIfExists = true;\n let folder: string;\n if (functionsFolder) {\n folder = functionsFolder;\n } else {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n folder = functionsDir(configPath, projectConfig);\n }\n const { functionsDirExistedBeforeCodegen } = await prepareForCodegen(\n ctx,\n folder,\n opts,\n );\n await withTmpDir(async (tmpDir) => {\n await doReadmeCodegen(\n ctx,\n tmpDir,\n folder,\n skipIfExists && functionsDirExistedBeforeCodegen,\n opts,\n );\n await doTsconfigCodegen(ctx, tmpDir, folder, skipIfExists, opts);\n });\n}\n\nasync function prepareForCodegen(\n ctx: Context,\n functionsDir: string,\n opts?: { dryRun?: boolean },\n) {\n const functionsDirExistedBeforeCodegen = ctx.fs.exists(functionsDir);\n // Delete the old _generated.ts because v0.1.2 used to put the react generated\n // code there\n const legacyCodegenPath = path.join(functionsDir, \"_generated.ts\");\n if (ctx.fs.exists(legacyCodegenPath)) {\n if (opts?.dryRun) {\n logError(\n `Command would delete legacy codegen file: ${legacyCodegenPath}}`,\n );\n } else {\n logError(`Deleting legacy codegen file: ${legacyCodegenPath}}`);\n ctx.fs.unlink(legacyCodegenPath);\n }\n }\n\n // Create the codegen dir if it doesn't already exist.\n const codegenDir = path.join(functionsDir, \"_generated\");\n ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n return { codegenDir, functionsDirExistedBeforeCodegen };\n}\n\n/** Codegen only for an application (a root component) */\nexport async function doCodegen(\n ctx: Context,\n functionsDir: string,\n typeCheckMode: TypeCheckMode,\n opts?: { dryRun?: boolean; generateCommonJSApi?: boolean; debug?: boolean },\n) {\n const { projectConfig } = await readProjectConfig(ctx);\n const { codegenDir } = await prepareForCodegen(ctx, functionsDir, opts);\n\n await withTmpDir(async (tmpDir) => {\n // Write files in dependency order so a watching dev server doesn't\n // see inconsistent results where a file we write imports from a\n // file that doesn't exist yet. We'll collect all the paths we write\n // and then delete any remaining paths at the end.\n const writtenFiles = [];\n\n const useTypeScript = usesTypeScriptCodegen(projectConfig);\n const generateCommonJSApi =\n opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n const schemaFiles = await doDataModelCodegen(\n ctx,\n tmpDir,\n functionsDir,\n codegenDir,\n useTypeScript,\n opts,\n );\n writtenFiles.push(...schemaFiles);\n\n // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n const serverFiles = await writeServerFiles(\n ctx,\n tmpDir,\n codegenDir,\n useTypeScript,\n undefined,\n opts,\n );\n writtenFiles.push(...serverFiles);\n\n // The `api.d.ts` file imports from the developer's modules, which then\n // import from `server.d.ts`. Note that there's a cycle here, since the\n // developer's modules could also import from the `api.{js,d.ts}` files.\n const apiFiles = await doApiCodegen(\n ctx,\n tmpDir,\n functionsDir,\n codegenDir,\n useTypeScript,\n generateCommonJSApi,\n opts,\n );\n writtenFiles.push(...apiFiles);\n\n // Cleanup any files that weren't written in this run.\n cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n\n // Generated code is updated, typecheck the query and mutation functions.\n await typeCheckFunctionsInMode(ctx, typeCheckMode, functionsDir);\n });\n}\n\n// Just enough to be able to bundle code for analysis: we need an api proxy object\n// so that imports aren't broken, we need basics in server, we need something in\n// data model.\nexport async function doInitialComponentCodegen(\n ctx: Context,\n tmpDir: TempDir,\n componentDirectory: ComponentDirectory,\n opts?: {\n dryRun?: boolean;\n generateCommonJSApi?: boolean;\n debug?: boolean;\n verbose?: boolean;\n },\n) {\n const { projectConfig } = await readProjectConfig(ctx);\n\n if (isPublishedPackage(componentDirectory)) {\n if (opts?.verbose) {\n logMessage(\n `skipping initial codegen for installed package ${componentDirectory.path}`,\n );\n }\n return;\n }\n\n const { codegenDir } = await prepareForCodegen(\n ctx,\n componentDirectory.path,\n opts,\n );\n\n // Write files in dependency order so a watching dev server doesn't\n // see inconsistent results where a file we write imports from a\n // file that doesn't exist yet. We'll collect all the paths we write\n // and then delete any remaining paths at the end.\n const writtenFiles = [];\n\n // Non-root components always use .ts files; root components respect the config\n // But for initial (placeholder, stub) codegen we don't care, just use .d.ts and .js.\n const useTypeScript =\n !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n const generateCommonJSApi =\n opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n const dataModelFiles = await doInitialComponentDataModelCodegen(\n ctx,\n tmpDir,\n componentDirectory,\n codegenDir,\n useTypeScript,\n opts,\n );\n writtenFiles.push(...dataModelFiles);\n\n // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n const serverFiles = await doInitialComponentServerCodegen(\n ctx,\n componentDirectory.isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n undefined,\n opts,\n );\n writtenFiles.push(...serverFiles);\n\n // The `api.d.ts` file imports from the developer's modules, which then\n // import from `server.d.ts`. Note that there's a cycle here, since the\n // developer's modules could also import from the `api.{js,d.ts}` files.\n const apiFiles = await doInitialComponentApiCodegen(\n ctx,\n componentDirectory.isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n generateCommonJSApi,\n opts,\n );\n writtenFiles.push(...apiFiles);\n\n // component.ts is generated in doFinalComponentCodegen, but don't delete\n // if it already exists from a previous full codegen run.\n if (!componentDirectory.isRoot) {\n const componentTSPath = path.join(codegenDir, \"component.ts\");\n if (ctx.fs.exists(componentTSPath)) {\n writtenFiles.push(\"component.ts\");\n }\n }\n\n // Cleanup any files that weren't written in this run.\n cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n}\n\n/* This component defined in a dist directory; it is probably in a node_module\n * directory, installed from a package. It is stuck with the files it has.\n * Heuristics for this:\n * - component definition has a dist/ directory as an ancestor\n * - component definition is a .js file\n * - presence of .js.map files\n * We may improve this heuristic.\n */\nexport function isPublishedPackage(componentDirectory: ComponentDirectory) {\n return (\n componentDirectory.definitionPath.endsWith(\".js\") &&\n !componentDirectory.isRoot\n );\n}\n\n// Handles root and non-root components; it's \"component\" codegen because\n// it's not the old legacy path.\nexport async function doFinalComponentCodegen(\n ctx: Context,\n tmpDir: TempDir,\n rootComponent: ComponentDirectory,\n componentDirectory: ComponentDirectory,\n startPushResponse: StartPushResponse,\n componentsMap: Map<string, ComponentDirectory>,\n opts?: {\n dryRun?: boolean;\n debug?: boolean;\n generateCommonJSApi?: boolean;\n },\n) {\n const { projectConfig } = await readProjectConfig(ctx);\n\n const isPublishedPackage =\n componentDirectory.definitionPath.endsWith(\".js\") &&\n !componentDirectory.isRoot;\n // We never codegen for a published package (you need to link to the convex.config.ts file instead).\n if (isPublishedPackage) {\n return;\n }\n\n const codegenDir = path.join(componentDirectory.path, \"_generated\");\n ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n\n // Non-root components always use .ts files; root components respect the config\n const useTypeScript =\n !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n // `dataModel` and `api` files depend on analyze results so will get replaced\n // in the later post-analysis codegen phase, but `server` files don't need\n // analysis info so the stubs from initial codegen are sufficient.\n\n // dataModel\n const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n let dataModelContents: string;\n if (hasSchemaFile) {\n if (projectConfig.codegen.staticDataModel) {\n dataModelContents = useTypeScript\n ? await staticDataModelTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n )\n : await staticDataModelDTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n );\n } else {\n dataModelContents = useTypeScript\n ? dynamicDataModelTS()\n : dynamicDataModelDTS();\n }\n } else {\n dataModelContents = useTypeScript\n ? noSchemaDataModelTS()\n : noSchemaDataModelDTS();\n }\n const dataModelPath = path.join(\n codegenDir,\n useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\",\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n dataModelContents,\n \"typescript\",\n dataModelPath,\n opts,\n );\n\n // component.ts\n if (!componentDirectory.isRoot) {\n const componentTSPath = path.join(codegenDir, \"component.ts\");\n const componentTSContents = await componentTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n componentTSContents,\n \"typescript\",\n componentTSPath,\n opts,\n );\n }\n\n // server.ts - regenerate it in final codegen so we can emit typed env vars.\n const definitionPath = toComponentDefinitionPath(\n rootComponent,\n componentDirectory,\n );\n const analysis = startPushResponse.analysis[definitionPath];\n const envVars: EnvVarMeta[] =\n analysis?.definition.envVars && analysis.definition.envVars.length > 0\n ? analysis.definition.envVars\n : [];\n await writeServerFilesForComponent(\n ctx,\n componentDirectory.isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n envVars,\n opts,\n );\n\n // api\n if (!useTypeScript) {\n const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n const apiContents = await componentApiDTS(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n componentsMap,\n {\n staticApi: projectConfig.codegen.staticApi,\n useComponentApiImports: usesComponentApiImports(projectConfig),\n },\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContents,\n \"typescript\",\n apiDTSPath,\n opts,\n );\n\n if (opts?.generateCommonJSApi || projectConfig.generateCommonJSApi) {\n const apiCjsDTSPath = path.join(codegenDir, \"api_cjs.d.cts\");\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContents,\n \"typescript\",\n apiCjsDTSPath,\n opts,\n );\n }\n } else {\n const apiTSPath = path.join(codegenDir, \"api.ts\");\n const apiContents = await componentApiTSWithTypes(\n ctx,\n startPushResponse,\n rootComponent,\n componentDirectory,\n componentsMap,\n {\n staticApi: projectConfig.codegen.staticApi,\n useComponentApiImports: usesComponentApiImports(projectConfig),\n },\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContents,\n \"typescript\",\n apiTSPath,\n opts,\n );\n }\n}\n\nasync function doReadmeCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n skip: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const readmePath = path.join(functionsDir, \"README.md\");\n if (skip) {\n logVerbose(`Not overwriting README.md.`);\n return;\n }\n await writeFormattedFile(\n ctx,\n tmpDir,\n readmeCodegen(),\n \"markdown\",\n readmePath,\n opts,\n );\n}\n\nasync function doTsconfigCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n skipIfExists: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const tsconfigPath = path.join(functionsDir, \"tsconfig.json\");\n if (skipIfExists && ctx.fs.exists(tsconfigPath)) {\n logVerbose(`Not overwriting tsconfig.json.`);\n return;\n }\n await writeFormattedFile(\n ctx,\n tmpDir,\n tsconfigCodegen(),\n \"json\",\n tsconfigPath,\n opts,\n );\n}\n\nfunction schemaFileExists(ctx: Context, functionsDir: string) {\n let schemaPath = path.join(functionsDir, \"schema.ts\");\n let hasSchemaFile = ctx.fs.exists(schemaPath);\n if (!hasSchemaFile) {\n schemaPath = path.join(functionsDir, \"schema.js\");\n hasSchemaFile = ctx.fs.exists(schemaPath);\n }\n return hasSchemaFile;\n}\n\nasync function doDataModelCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n codegenDir: string,\n useTypeScript: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const hasSchemaFile = schemaFileExists(ctx, functionsDir);\n const schemaContent = hasSchemaFile\n ? useTypeScript\n ? dynamicDataModelTS()\n : dynamicDataModelDTS()\n : useTypeScript\n ? noSchemaDataModelTS()\n : noSchemaDataModelDTS();\n\n const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n await writeFormattedFile(\n ctx,\n tmpDir,\n schemaContent,\n \"typescript\",\n path.join(codegenDir, filename),\n opts,\n );\n return [filename];\n}\n\n/**\n * Write server.ts/.js/.d.ts files for root components.\n * Returns list of filenames written.\n */\nasync function writeServerFiles(\n ctx: Context,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n if (!useTypeScript) {\n const serverContent = serverCodegen({\n useTypeScript: false,\n envVars,\n });\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverContent.JS!,\n \"typescript\",\n path.join(codegenDir, \"server.js\"),\n opts,\n );\n\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverContent.DTS!,\n \"typescript\",\n path.join(codegenDir, \"server.d.ts\"),\n opts,\n );\n\n return [\"server.js\", \"server.d.ts\"];\n } else {\n const serverContent = serverCodegen({\n useTypeScript: true,\n envVars,\n });\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverContent.TS!,\n \"typescript\",\n path.join(codegenDir, \"server.ts\"),\n opts,\n );\n\n return [\"server.ts\"];\n }\n}\n\n/**\n * Write server.ts file for non-root components.\n * Returns list of filenames written.\n */\nasync function writeComponentServerFile(\n ctx: Context,\n tmpDir: TempDir,\n codegenDir: string,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n const serverTSPath = path.join(codegenDir, \"server.ts\");\n const serverTSContents = componentServerTS(false, envVars);\n await writeFormattedFile(\n ctx,\n tmpDir,\n serverTSContents,\n \"typescript\",\n serverTSPath,\n opts,\n );\n return [\"server.ts\"];\n}\n\n/**\n * Write server files for either root or non-root components.\n * Root components get server.ts/server.js/server.d.ts based on useTypeScript.\n * Non-root components always get server.ts.\n * Returns list of filenames written.\n */\nasync function writeServerFilesForComponent(\n ctx: Context,\n isRoot: boolean,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n if (isRoot) {\n return await writeServerFiles(\n ctx,\n tmpDir,\n codegenDir,\n useTypeScript,\n envVars,\n opts,\n );\n } else {\n return await writeComponentServerFile(\n ctx,\n tmpDir,\n codegenDir,\n envVars,\n opts,\n );\n }\n}\n\nasync function doInitialComponentServerCodegen(\n ctx: Context,\n isRoot: boolean,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n envVars: EnvVarMeta[] | undefined,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n // Don't write our stub if the file already exists, since it may have\n // better type information from `doFinalComponentCodegen` (e.g. env vars).\n const serverFilename = useTypeScript ? \"server.ts\" : \"server.js\";\n if (ctx.fs.exists(path.join(codegenDir, serverFilename))) {\n const filenames = [serverFilename];\n if (!useTypeScript) {\n filenames.push(\"server.d.ts\");\n }\n return filenames;\n }\n return await writeServerFilesForComponent(\n ctx,\n isRoot,\n tmpDir,\n codegenDir,\n useTypeScript,\n envVars,\n opts,\n );\n}\n\nasync function doInitialComponentDataModelCodegen(\n ctx: Context,\n tmpDir: TempDir,\n componentDirectory: ComponentDirectory,\n codegenDir: string,\n useTypeScript: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n const dataModelContent = hasSchemaFile\n ? useTypeScript\n ? dynamicDataModelTS()\n : dynamicDataModelDTS()\n : useTypeScript\n ? noSchemaDataModelTS()\n : noSchemaDataModelDTS();\n const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n const dataModelPath = path.join(codegenDir, filename);\n\n // Don't write our stub if the file already exists, since it may have\n // better type information from `doFinalComponentDataModelCodegen`.\n if (!ctx.fs.exists(dataModelPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n dataModelContent,\n \"typescript\",\n dataModelPath,\n opts,\n );\n }\n return [filename];\n}\n\nasync function doInitialComponentApiCodegen(\n ctx: Context,\n isRoot: boolean,\n tmpDir: TempDir,\n codegenDir: string,\n useTypeScript: boolean,\n generateCommonJSApi: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const writtenFiles: string[] = [];\n\n if (!useTypeScript) {\n const apiJS = componentApiJs();\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiJS,\n \"typescript\",\n path.join(codegenDir, \"api.js\"),\n opts,\n );\n\n // Don't write the `.d.ts` stub if it already exists.\n const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n const apiStubDTS = componentApiStubDTS();\n if (!ctx.fs.exists(apiDTSPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiStubDTS,\n \"typescript\",\n apiDTSPath,\n opts,\n );\n }\n\n writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n if (generateCommonJSApi && isRoot) {\n const apiCjsJS = rootComponentApiCJS();\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiCjsJS,\n \"typescript\",\n path.join(codegenDir, \"api_cjs.cjs\"),\n opts,\n );\n\n const cjsStubPath = path.join(codegenDir, \"api_cjs.d.cts\");\n if (!ctx.fs.exists(cjsStubPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiStubDTS,\n \"typescript\",\n cjsStubPath,\n opts,\n );\n }\n writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n }\n } else {\n const apiTSPath = path.join(codegenDir, \"api.ts\");\n const apiTS = componentApiStubTS();\n // Don't write the `.ts` stub if it already exists.\n if (!ctx.fs.exists(apiTSPath)) {\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiTS,\n \"typescript\",\n apiTSPath,\n opts,\n );\n }\n writtenFiles.push(\"api.ts\");\n }\n\n return writtenFiles;\n}\n\nasync function doApiCodegen(\n ctx: Context,\n tmpDir: TempDir,\n functionsDir: string,\n codegenDir: string,\n useTypeScript: boolean,\n generateCommonJSApi: boolean,\n opts?: { dryRun?: boolean; debug?: boolean },\n) {\n const absModulePaths = await entryPoints(ctx, functionsDir);\n const modulePaths = absModulePaths\n .map((p) => path.relative(functionsDir, p))\n .sort(compareModulePaths);\n\n const writtenFiles: string[] = [];\n\n if (!useTypeScript) {\n const apiContent = apiCodegen(modulePaths, { useTypeScript: false });\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContent.JS!,\n \"typescript\",\n path.join(codegenDir, \"api.js\"),\n opts,\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContent.DTS!,\n \"typescript\",\n path.join(codegenDir, \"api.d.ts\"),\n opts,\n );\n writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n if (generateCommonJSApi) {\n const apiCjsContent = apiCjsCodegen(modulePaths);\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiCjsContent.JS!,\n \"typescript\",\n path.join(codegenDir, \"api_cjs.cjs\"),\n opts,\n );\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiCjsContent.DTS!,\n \"typescript\",\n path.join(codegenDir, \"api_cjs.d.cts\"),\n opts,\n );\n writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n }\n } else {\n const apiContent = apiCodegen(modulePaths, { useTypeScript: true });\n await writeFormattedFile(\n ctx,\n tmpDir,\n apiContent.TS!,\n \"typescript\",\n path.join(codegenDir, \"api.ts\"),\n opts,\n );\n writtenFiles.push(\"api.ts\");\n }\n\n return writtenFiles;\n}\n\nasync function writeFormattedFile(\n ctx: Context,\n tmpDir: TempDir,\n contents: string,\n filetype: string,\n destination: string,\n options?: {\n dryRun?: boolean;\n debug?: boolean;\n },\n) {\n // Run prettier so we don't have to think about formatting!\n //\n // This is a little sketchy because we are using the default prettier config\n // (not our user's one) but it's better than nothing.\n const formattedContents = await prettier.format(contents, {\n parser: filetype,\n pluginSearchDirs: false,\n });\n if (options?.debug) {\n // NB: The `test_codegen_projects_are_up_to_date` smoke test depends\n // on this output format.\n logOutput(`# ${path.resolve(destination)}`);\n logOutput(formattedContents);\n return;\n }\n try {\n const existing = ctx.fs.readUtf8File(destination);\n if (existing === formattedContents) {\n return;\n }\n } catch (err: any) {\n if (err.code !== \"ENOENT\") {\n // eslint-disable-next-line no-restricted-syntax\n throw err;\n }\n }\n if (options?.dryRun) {\n logOutput(`Command would write file: ${destination}`);\n return;\n }\n const tmpPath = tmpDir.writeUtf8File(formattedContents);\n ctx.fs.swapTmpFile(tmpPath, destination);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["functionsDir", "isPublishedPackage"]
|
|
7
7
|
}
|
|
@@ -98,7 +98,8 @@ export async function normalizeDevOptions(ctx, cmdOptions) {
|
|
|
98
98
|
debugBundlePath: cmdOptions.debugBundlePath,
|
|
99
99
|
debugNodeApis: !!cmdOptions.debugNodeApis,
|
|
100
100
|
liveComponentSources: !!cmdOptions.liveComponentSources,
|
|
101
|
-
pushAllModules: !!cmdOptions.pushAllModules
|
|
101
|
+
pushAllModules: !!cmdOptions.pushAllModules,
|
|
102
|
+
allowUnstagingSchema: !!cmdOptions.allowUnstagingSchema
|
|
102
103
|
};
|
|
103
104
|
}
|
|
104
105
|
Command.prototype.addDeployOptions = function() {
|